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

126 lines
4.2 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.

# 架构总览
## 定位
`llm-to-agent` 是纯个人使用、本地优先的开发助手与电脑管家。它以一个常驻 Runtime 作为唯一运行宿主,并通过 CLI、Web、Desktop 三个客户端共享数据和执行状态。
系统采用四层结构:
```text
Launcher / Supervisor
Runtime Host
Application Runtime
Microkernel + Extensions
```
这四层表达职责和依赖方向,不要求第一版拆成四个独立进程。
## Launcher / Supervisor
Supervisor 位于 Agent 运行版本之外,只负责启动、版本切换、健康检查和失败回退。它不理解 Space、Conversation、Tool 或 Agent 推理。
Supervisor 在 P3 的 System Evolution 发布闭环中实现P1/P2 开发阶段可以先由普通启动脚本承担进程拉起。
## Runtime Host
Runtime Host 是 Node.js 进程的组合入口,负责:
- 创建并启动 Application Runtime 与 Microkernel
- 装配当前启用的扩展;
- 开启本地客户端连接;
- 处理进程信号、单实例和退出;
- 将配置与基础设施交给内部模块。
Host 不包含 Project、Conversation、Agent 工作流等业务规则。
## Application Runtime
Application Runtime 负责这个产品不可缺少的应用能力:
- Project / Task Space
- Conversation 与持久化 Run Record
- 本地数据 Repository 和唯一写入;
- 客户端 Command、Query 与 Event Stream
- 当前 Space/Conversation 上下文;
- Profile 选择和基础并发策略。
它不包含 DeepSeek 请求、Shell、Git、浏览器驱动、提示词或具体 Agent 协作策略。
## Microkernel
Microkernel 负责一次 Agent 执行的通用机制:
- 创建内存中的 Run Context
- 调用 Agent Behavior
- 注册并调用 Tool
- 执行 Hook Pipeline
- 发出流式输出和运行事件;
- 传播取消信号并隔离执行错误。
Microkernel 不认识 Project、Task 或具体存储,也不依赖任何具体扩展。
## Extensions
扩展只放真正可替换、可按需增加的能力:
- **Adapter**DeepSeek、未来模型提供商、浏览器或检索驱动
- **Tool**文件、Shell、Git、浏览器、桌面控制
- **Hook**:围绕 Tool/Run 生命周期观察、限制或响应;
- **Behavior**DefaultAgent、CodingAgent、Planner、Reviewer。
Space、Conversation 和持久化 Run Record 是 Application Runtime 的产品领域,不作为可卸载插件。
## Profile
Profile 是 Application Runtime 管理的声明式能力组合,不是独立运行层:
```text
Profile
├── 默认 Behavior
├── 可用 Tools
├── 启用 Hooks
├── 模型设置
└── 上下文/记忆策略
```
Project 和 Task 是 Space 类型System Evolution 是应用于 Project 的特殊 Profile。
## 依赖规则
```text
Supervisor → Runtime Host
Runtime Host → Application Runtime / Microkernel / Extensions
Application Runtime → Microkernel 公共接口
Extensions → Microkernel 扩展接口
Microkernel ✕ Application Runtime / 具体 Extensions
Clients → Runtime Interface
```
目录隔离只是表现,以上依赖方向才是边界是否真实成立的判断依据。
## 客户端接口
CLI、Web、Desktop 逻辑上只使用三类交互:
- **Command**:创建 Space、发送消息、取消 Run 等状态变更;
- **Query**:读取 Space、Conversation、Run 和日志;
- **Event Stream**接收模型增量、Tool 过程和 Run 状态。
具体采用 HTTP/SSE、Unix Socket 或其他本地协议在实现时确定,不提前冻结字段。
## Event 与 Hook
- **Run Event** 是发生过的事实,用于日志和客户端实时展示。
- **Hook** 是事件前后实际执行的扩展代码。
两者不能混为同一个事件总线:记录了一个事件,不代表必须触发可修改流程的 Hook。
## 演化原则
任何一层都允许由 Agent 修改,包括 Application Runtime 和 Microkernel。Agent 在 System Evolution Project 的隔离 worktree 中修改源码、运行测试并展示 DiffGit 写操作由用户确认Supervisor 负责切换构建版本和失败回退。
自进化依赖的是源码可修改、候选版本隔离、测试、发布和回退,不要求把所有产品能力插件化。