Skip to content

Pi 仓库结构

npm Monorepo

Pi 使用 npm workspaces 管理多个包。核心包关系:

text
packages/
├── ai/                  # LLM provider 抽象层
│   └── src/
│       ├── ai.ts              # AI interface(stream、generate 等)
│       ├── providers/         # OpenAI / Anthropic / DeepSeek 等
│       ├── models.ts          # Model 类型和 registry
│       └── utils/             # token counting、streaming 等

├── agent/               # Agent 核心(与 coding 无关的通用层)
│   └── src/
│       ├── agent.ts           # Agent 类(核心 loop)
│       ├── agent-loop.ts      # 对话循环实现
│       ├── context.ts         # Message context 管理
│       ├── tools.ts           # Tool interface 定义
│       └── ...

├── coding-agent/        # CLI 和 coding-specific 逻辑
│   └── src/
│       ├── cli.ts             # CLI 入口(Yargs)
│       ├── main.ts            # 主流程编排
│       ├── core/
│       │   ├── agent-session.ts   # Session 管理(JSONL)
│       │   ├── tools/             # 工具实现(bash、edit、grep 等)
│       │   ├── extensions/        # Extension API
│       │   ├── modes/             # CLI 输出模式
│       │   └── settings.ts        # 配置管理
│       └── ui/

├── tui/                 # 终端 UI 渲染
│   └── src/
│       ├── app.tsx             # React-like 入口
│       ├── components/         # 组件(ChatList、DiffView 等)
│       ├── renderer.ts         # 自研 differential renderer
│       └── hooks/

├── orchestrator/        # 多 agent 编排
│   └── src/
│       ├── orchestrator.ts    # 编排器主类
│       ├── agents.ts          # Agent pool 管理
│       └── tasks.ts           # 任务分发

└── shared/              # 共享工具
    └── src/
        ├── logger.ts
        ├── config.ts
        └── types.ts

分层设计

Layer 1: packages/ai          ← LLM 抽象(最底层)
Layer 2: packages/agent        ← Agent loop(依赖 ai)
Layer 3: packages/coding-agent ← CLI + 工具 + session(依赖 agent)
Layer 4: packages/tui          ← 终端 UI(依赖 coding-agent)
Layer 5: packages/orchestrator ← 多 agent 编排(依赖 agent)

Pi 的区分度很清晰:每层只能向下依赖,coding-agent 不直接操作 LLM 细节。

包依赖度

依赖
ai自包含
agentai
coding-agentagentai
tuicoding-agentagent
orchestratoragentai

Powered by VitePress