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

4.7 KiB
Raw Blame History

规划目录

本文描述当前架构下建议采用的源码与运行数据目录。它用于指导项目起步,不是不可修改的目录规范。

后续实现或 System Evolution 过程中,如果真实依赖、代码规模或开发体验证明某个划分不合理,可以移动、合并或拆分目录;调整时应优先保持职责和依赖方向,而不是机械维持路径兼容。

源码仓库

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 开发、自举发布和版本回退。

运行数据目录

运行数据不进入源码仓库:

~/.agent/
├── tasks/
├── registry.json
├── extensions/       # 用户本地安装的扩展
├── releases/         # Installed Releases
├── runtime/
└── config/

Project 专属 Agent 数据位于项目根目录的 .agent/。候选 worktree 和 Installed Release 由 ~/.agent/ 下的运行数据管理,不作为源码仓库中的固定目录。

允许调整的判断标准

满足以下任一情况时,可以调整目录:

  • 一个目录长期承载了多个不相关职责;
  • 一项完整能力被迫跨越过多技术分类目录;
  • 模块需要独立测试、复用、加载、版本或发布;
  • 现有依赖方向导致循环依赖或核心反向依赖具体功能;
  • System Evolution 的真实开发过程证明当前结构降低了可理解性或修改效率。

目录调整后应同步更新本文,但不需要为保持旧规划而保留无价值的兼容层。