llm-to-agent/docs/directory-plan.md
2026-08-21 16:33:23 +08:00

117 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 规划目录
本文描述当前架构下建议采用的源码与运行数据目录。它用于指导项目起步,不是不可修改的目录规范。
后续实现或 System Evolution 过程中,如果真实依赖、代码规模或开发体验证明某个划分不合理,可以移动、合并或拆分目录;调整时应优先保持职责和依赖方向,而不是机械维持路径兼容。
## 源码仓库
```text
llm-to-agent/
├── apps/
│ ├── runtime/ # Runtime Host / composition root
│ ├── supervisor/ # 启动、版本切换、健康检查、回退
│ ├── cli/ # REPL、非交互 CLI、TUI
│ ├── web/ # Web 客户端
│ └── desktop/ # Desktop Host 与原生桥接
├── packages/
│ ├── kernel/ # Microkernel
│ ├── application/ # Application Runtime
│ └── client/ # 客户端共享的 Runtime Client
├── extensions/ # 第一方扩展,按完整能力纵向划分
│ ├── deepseek/
│ ├── workspace/
│ ├── shell/
│ ├── git/
│ └── .../
├── docs/
│ ├── architecture.md
│ ├── directory-plan.md
│ ├── roadmap.md
│ └── features/
├── tests/
│ └── e2e/ # 跨包、自举和版本切换测试
├── tooling/ # 构建、发布、开发辅助
├── package.json
├── tsconfig.json
└── workspace.yaml
```
## 架构对应关系
| 架构职责 | 规划目录 |
| --- | --- |
| Launcher / Supervisor | `apps/supervisor/` |
| Runtime Host | `apps/runtime/` |
| Application Runtime | `packages/application/` |
| Microkernel | `packages/kernel/` |
| Extensions | `extensions/` |
| Runtime Client | `packages/client/` |
| CLI / Web / Desktop | `apps/cli/``apps/web/``apps/desktop/` |
## 目录原则
### Apps 是进程和产品入口
`apps/runtime/` 负责创建组件、安装扩展并开启本地连接,不承载 Space、Conversation、Tool 或 Agent Behavior 的具体实现。
CLI、Web、Desktop 通过同一个 Runtime Client 工作,不各自复制 Agent、存储和执行逻辑。
### Packages 固定核心依赖边界
- `kernel/` 只包含 Run Context、Behavior 调度、Tool Gateway、Hook Pipeline、Run Event、流式输出、取消和错误边界。
- `application/` 承载 Project/Task、Conversation、Message、Run Record、Repository、Profile 以及 Command/Query 等产品领域。
- `client/` 承载三个客户端共用的 Command、Query、Event Stream 和连接逻辑。
不建立泛化的 `shared/``types/` 大杂烩。类型应尽量由拥有该概念的模块导出,只有真正跨客户端传输的协议进入 `client/`
### Extensions 按完整能力纵向划分
扩展不按 Adapter、Tool、Hook、Behavior 等技术类型横向拆目录,而是按能力组织。例如 `browser/` 可以同时包含浏览器 Adapter、相关 Tools、操作 Hook 和 Browser Behavior。
第一版不要求每个扩展都是独立 package。只有在依赖、测试、复用、版本或独立发布需求出现后才将它提升为单独 workspace package。
### 功能文档不映射源码目录
`docs/features/` 按产品大功能组织,源码按职责和依赖组织,两者不要求一一对应。
例如 System Evolution 会同时涉及 Application Runtime、Git 扩展、Runtime Host、Supervisor 和 CLI不应为了与功能文档对齐而把所有代码放入单个目录。
### 测试就近放置
单元测试和模块测试与所属源码放在一起。顶层 `tests/e2e/` 只保存真正跨包、跨进程或跨版本的场景,例如 CLI 到 Runtime、Project 开发、自举发布和版本回退。
## 运行数据目录
运行数据不进入源码仓库:
```text
~/.agent/
├── tasks/
├── registry.json
├── extensions/ # 用户本地安装的扩展
├── releases/ # Installed Releases
├── runtime/
└── config/
```
Project 专属 Agent 数据位于项目根目录的 `.agent/`。候选 worktree 和 Installed Release 由 `~/.agent/` 下的运行数据管理,不作为源码仓库中的固定目录。
## 允许调整的判断标准
满足以下任一情况时,可以调整目录:
- 一个目录长期承载了多个不相关职责;
- 一项完整能力被迫跨越过多技术分类目录;
- 模块需要独立测试、复用、加载、版本或发布;
- 现有依赖方向导致循环依赖或核心反向依赖具体功能;
- System Evolution 的真实开发过程证明当前结构降低了可理解性或修改效率。
目录调整后应同步更新本文,但不需要为保持旧规划而保留无价值的兼容层。