feat: 第一版文档上传

This commit is contained in:
李岩岩 2026-07-15 17:56:41 +08:00 committed by liyy
parent c4a139ae85
commit 71d6c7cd88
20 changed files with 459 additions and 178 deletions

31
docs/README.md Normal file
View File

@ -0,0 +1,31 @@
# 文档索引
本文档记录 `llm-to-agent` 当前已达成的产品与架构共识。它不是固定开发清单:实现前再细化当前功能点,发现新需求则补到对应功能文档中。
## 使用方式
- 每个大功能点一个文件,文件头标记 `状态``期望阶段`
- `todo``doing``done` 表示当前进度;阶段只表示建议先后,不构成严格依赖顺序。
- 每完成一个独立提交在对应文档中补充提交、blog 和实现说明。
- 未明确的方案写在“待细化”中,不提前冻结实现。
## 导航
- [路线图与管理规则](roadmap.md)
- [架构总览](architecture/overview.md)
- [本地数据与目录](architecture/local-data.md)
- [Runtime](foundation/runtime.md)
- [CLI](foundation/cli.md)
- [Space 与 Conversation](foundation/spaces.md)
- [模型与聊天](agent/model-chat.md)
- [Run 与 Agent Behavior](agent/runs-behavior.md)
- [Tools 与 Workspace](agent/tools-workspace.md)
- [Project 开发助手](development/project-assistant.md)
- [System Evolution](development/system-evolution.md)
- [Hooks、扩展与 Profile](extension/hooks-extensions.md)
- [计划与多 Agent](intelligence/planning-multi-agent.md)
- [记忆与知识](intelligence/memory-knowledge.md)
- [电脑管家与自动化](automation/computer-butler.md)
- [可靠性与个人安全](operations/reliability-safety.md)
- [Web](clients/web.md)
- [Desktop](clients/desktop.md)

21
docs/agent/model-chat.md Normal file
View File

@ -0,0 +1,21 @@
# 模型与聊天
状态todo
期望阶段P1
## 目标
先提供可靠、连续的 DeepSeek 聊天能力;模型接入保持可替换,但不提前实现多 Provider 系统。
## 已确定
- 第一版只兼容 DeepSeek API。
- 支持流式回复和会话历史加载。
- 模型调用由 Runtime 管理CLI 只渲染流。
- 未来模型提供商属于 Adapter 层。
## 待细化
- API Key 的读取位置与配置体验。
- 默认模型、请求参数和失败/限流提示。
- 上下文窗口压缩策略。

View File

@ -0,0 +1,22 @@
# Run 与 Agent Behavior
状态todo
期望阶段P1
## 目标
使一次用户请求拥有可观察的运行边界,并为未来不同 Agent 行为留下接缝。
## 已确定
- 一次用户消息默认产生一个 Run。
- 纯聊天 Run 只产生模型回答;行动 Run 还包含 Tool 调用、输出和产物。
- 第一版仅实现 `DefaultAgent`,不预设 Planner/Worker/Reviewer 流程。
- Behavior 定义 Agent 如何准备上下文、调用模型、调用 Tool 和结束 Run。
- Run 记录输入、输出、错误、时间和原始执行日志。
## 待细化
- Run 的取消、重试和失败显示。
- 行为接口的具体 TypeScript 形状。
- 后续 Plan/Step 与 Run 的关系。

View File

@ -0,0 +1,23 @@
# Tools 与 Workspace
状态todo
期望阶段P2
## 目标
让单 Agent 在隔离工作区中使用文件与 Shell 完成真实任务。
## 已确定
- Tool 是 Agent 主动调用的外部能力。
- 第一批能力:读写文件、目录浏览、文本搜索和 Shell 执行。
- 每个 Task 有独立 WorkspaceShell 默认在该目录执行。
- Tool 调用参数、输出、错误和生成脚本文本写入 Run 日志。
- Agent 通过模型 Tool Calling 自主选择、调用并读取 Tool 结果。
- 初期不建设复杂审批或权限语言;真实破坏性操作出现后再增强。
## 待细化
- Shell 超时、取消、后台进程和大输出处理。
- 文件写入与补丁的交互方式。
- Tool 描述和参数 Schema 的具体格式。

View File

@ -0,0 +1,38 @@
# 本地数据与目录
状态todo
期望阶段P1
## 原则
数据以本地普通文件保存,保持易读、易调试、易由 Agent 修改。早期不承诺兼容性,不预先建设 schema migration重要数据依靠备份格式变更需要时再写一次性转换脚本。
Runtime 是唯一写入者CLI/Web/Desktop 均通过 Runtime 读取或修改数据。
## 目录
```text
~/.agent/
tasks/<task-id>/
space.json
conversations/
runs/
workspace/
<project-root>/.agent/
project.json
conversations/
runs/
```
Conversation 与 Run 优先采用 JSONLSpace/Project 元信息采用小型 JSON 文件。生成并执行的脚本文本进入 Run 日志,不额外维护脚本库;真正写进 Workspace 的文件自然保留。
## Task 升级
Task Workspace 的组织尽量与 Project 工作区一致。升级为 Project 时,将该专属目录迁移至用户指定路径并写入 Project 元信息。
## 待细化
- ID 和文件命名规则。
- Run 日志与产物的具体划分。
- 备份、归档和数据清理策略。

View File

@ -0,0 +1,36 @@
# 架构总览
状态todo
期望阶段P1
## 定位
这是纯个人使用的开发助手与电脑管家。它支持 Project 和 Task 两种并列 Space并通过 CLI、Web、Desktop 三个客户端访问同一个本地 Runtime。
## 分层
```text
Launcher / Supervisor
本地 Runtime微内核
Adapter / Tool / Hook / Behavior Package
Project / Task / System Evolution Profile
CLI / Web / Desktop
```
微内核只负责运行规则本地状态、Run 生命周期、Tool 调用边界、Hook 调度和扩展接缝。它不预先承载具体模型、浏览器、Git、记忆或 Agent 协作策略。
## 扩展边界
- **Adapter**:可替换的底层实现,例如模型供应商、检索或浏览器驱动。
- **Tool**Agent 主动调用的外部能力例如文件、Shell、Git、浏览器。
- **Hook**:围绕生命周期做观察、限制或后续动作。
- **Behavior Package**Agent 的思考、协作和完成方式。
- **Profile**:为 Project、Task、System Evolution 组合默认行为与能力。
## 演化原则
内核可以被修改。Agent 对自身的改动必须发生在隔离 worktree 中,经过测试和 Git 确认后再由 Supervisor 切换版本;失败时能够回退。

View File

@ -0,0 +1,20 @@
# 电脑管家与自动化
状态todo
期望阶段P4
## 目标
将 Task 从临时聊天空间发展为可处理本地日常事务的电脑管家。
## 已确定
- 能力通过 Tool 逐项加入,不预先建设完整桌面自动化平台。
- 候选能力包括剪贴板、通知、文件整理、进程信息、浏览器读取与交互、应用/窗口控制、截图、键鼠自动化、定时任务和后台任务。
- 常用工作流可以沉淀为模板或 Behavior但不在早期固定格式。
## 待细化
- 首个接入的本机/浏览器能力由真实日常需求决定。
- 浏览器驱动、桌面自动化方式和各平台兼容性。
- 自动化任务的确认、停止和恢复体验。

21
docs/clients/desktop.md Normal file
View File

@ -0,0 +1,21 @@
# Desktop
状态todo
期望阶段P6
## 目标
将 Desktop 建设为本地常驻控制台和系统集成层,复用 Web 界面与 Runtime。
## 已确定
- Desktop 在 CLI 和 Web 产品线之后开发。
- 负责 Runtime 生命周期、托盘、通知、快捷键、原生确认、版本切换与健康状态。
- 可逐步承担剪贴板、窗口、文件系统和其他原生能力桥接。
- Desktop 框架在进入本阶段前单独讨论确定。
## 待细化
- 框架选择与打包更新策略。
- Web 前端复用方式。
- 原生权限、后台常驻和跨平台边界。

21
docs/clients/web.md Normal file
View File

@ -0,0 +1,21 @@
# Web
状态todo
期望阶段P5
## 目标
将 Web 建设为 Runtime 的第二个客户端,不复制 Agent、存储或 Tool 逻辑。
## 已确定
- Web 在 CLI 产品线之后开发。
- 首先覆盖 Space、Conversation、流式聊天和 Run 观察。
- 后续覆盖 Tool 日志、产物、Plan、项目记忆、Diff、扩展、确认和 System Evolution 管理。
- Web 框架进入本阶段前单独讨论确定。
## 待细化
- Runtime 的 HTTP/SSE/WebSocket 访问层。
- 本地与远程访问方式。
- 前端框架、状态管理和视觉设计。

View File

@ -1,178 +0,0 @@
# llm-to-agent 设计文档
## 架构设计
### 核心理念:微内核 + 事件驱动
Agent 的本质是一个循环:**用户输入 → LLM 思考 → 工具调用 → LLM 再思考 → 最终回复**。
本项目的答案是:**内核只做一件事——驱动这个循环**。LLM 调用、工具执行、日志输出等一切能力全部通过事件总线交给外部插件。
### 三层架构
```
┌──────────────────────────────────────────┐
│ Route 层 CLI / Desktop / Web │ ← 只决定 I/O 方式
├──────────────────────────────────────────┤
│ Plugin 层 provider / tool / hook │ ← 可替换的能力单元
├──────────────────────────────────────────┤
│ Core 层 Scheduler + HookBus │ ← 只做循环 + 事件路由
└──────────────────────────────────────────┘
```
### 事件总线
内核循环的每一步都通过 `HookBus` 发出事件,插件注册响应,形成“事件驱动 + 插件化”的架构。
### 插件类型
| 类型 | 职责 | 响应的事件 |
|------|------|-----------|
| `provider` | LLM 提供商适配 | `llm:call``tool:select` |
| `tool` | 工具能力 | `tool:schema``tool:execute` |
| `hook` | 生命周期副作用 | `tool:before``tool:after``run:end` |
| `prompt` | 系统提示词 | 通过配置注入,不响应事件 |
每个插件通过 `manifest.json` 声明元信息(名称、类型、提供的能力、适用平台),由 `PluginManager` 统一加载。
### 三条产品线
```
┌── @llm-to-agent/core ──┐
│ MicroKernel + HookBus │
└────────────────────────┘
┌─────────────────┼─────────────────┐
▼ ▼ ▼
CLI Desktop Web
(readline) (Electron) (Browser HTTP)
│ │ │
┌───────┴────────┐ ┌──────┴───────┐ ┌──────┴───────┐
│ 本地工具全部 │ │ 同 CLI │ │ 仅远程工具 │
│ console 日志 │ │ IPC 日志 │ │ SSE 日志 │
└────────────────┘ └──────────────┘ └──────────────┘
```
CLI 与 Desktop 共享本地工具文件读写、Shell 执行Web 端通过 `platforms` 字段自动跳过本地工具。
---
## 项目目录设计
### Monorepo 结构pnpm workspace
```
llm-to-agent/
├── pnpm-workspace.yaml
├── package.json ← 根private统一 dev/test 脚本)
├── tsconfig.json
├── docs/ ← 设计文档
│ └── design.md
├── packages/
│ │
│ ├── types/ ← @llm-to-agent/types
│ │ └── src/index.ts ← 所有共享类型Message/ToolDef/PluginManifest/...
│ │
│ ├── core/ ← @llm-to-agent/core
│ │ └── src/
│ │ ├── hook-bus.ts ← 事件总线on/emit/request/collect
│ │ ├── scheduler.ts ← Agent 循环think→tool→think
│ │ ├── context.ts ← 消息上下文管理器
│ │ ├── plugin-manager.ts← 插件加载 + 生命周期
│ │ └── kernel.ts ← MicroKernel 入口(组合以上模块)
│ │
│ ├── plugins-builtin/ ← @llm-to-agent/plugins-builtin
│ │ └── [xxxxx]/ ← 内置插件
│ │
│ ├── cli/ ← @llm-to-agent/cli终端入口
│ │ └── src/index.ts ← readline 循环 + kernel.init([...])
│ │
│ ├── desktop/ ← @llm-to-agent/desktop桌面入口
│ │ └── src/main.ts ← Electron 主进程
│ │
│ ├── server/ ← @llm-to-agent/serverWeb 后端)
│ │ └── src/index.ts ← Express + SSE
│ │
│ ├── web/ ← @llm-to-agent/webWeb 前端)
│ │ └── index.html ← 待实现 React 聊天界面
│ │
│ ├── tests/ ← @llm-to-agent/tests
│ │ └── src/ ← *.test.tsNode 原生 test runner
│ │
│ └── old/ ← @llm-to-agent/old旧代码归档
│ └── src/ ← 重构前的 Agent 实现
```
### 包依赖关系
```
@llm-to-agent/types ← 零依赖,纯类型
↑ ↑
core plugins-builtin
↑ ↑
├───────────┴────────────┐
↓ ↓ ↓
cli desktop server
web
```
### 插件清单规范
每个插件目录包含 `manifest.json`
```json
{
"name": "@agent/tool-file",
"version": "1.0.0",
"type": "tool",
"provides": ["file-read", "file-write"],
"entry": "./index.ts",
"platforms": ["cli", "desktop"]
}
```
| 字段 | 说明 |
|------|------|
| `type` | `provider` / `tool` / `hook` / `prompt` |
| `provides` | 提供的能力标识 |
| `entry` | 入口文件,默认导出 `register(bus: HookBus)` |
| `platforms` | 可用平台PluginManager 加载时自动过滤 |
### 关键类型
```typescript
// 消息
interface Message {
role: 'system' | 'user' | 'assistant' | 'tool';
content: string;
tool_calls?: ToolCall[];
tool_call_id?: string;
}
// 工具定义OpenAI 兼容)
interface ToolDef {
type: 'function';
function: {
name: string;
description: string;
parameters: Record<string, unknown>;
};
}
// 插件清单
interface PluginManifest {
name: string;
version: string;
type: 'provider' | 'tool' | 'hook' | 'prompt';
provides: string | string[];
entry: string;
platforms?: ('cli' | 'desktop' | 'web')[];
}
// 事件总线
type EventName = string;
type Listener = (data: any) => any | Promise<any>;
```

View File

@ -0,0 +1,22 @@
# Project 开发助手
状态todo
期望阶段P2
## 目标
让 Agent 能在绑定源码目录中完成“理解 → 修改 → 测试 → 汇报”的开发闭环。
## 已确定
- Project 在项目根目录使用 `.agent/` 存放自身会话、Run 和项目上下文。
- 项目规则、架构摘要和决策记录会逐步沉淀,但不预先引入 RAG。
- 开发 Tool 包含代码搜索、修改/补丁、测试执行和测试结果收集。
- 初期由单 Agent 完整完成开发任务;多 Agent 协作由后续真实需求驱动。
- Git 支持 status、diff、log 与 worktree候选修改默认放在隔离 worktree。
## 待细化
- 项目说明文件的名称和注入时机。
- worktree 的目录、清理和默认分支策略。
- Task 升级 Project 的 CLI/TUI 流程。

View File

@ -0,0 +1,22 @@
# System Evolution
状态todo
期望阶段P3
## 目标
使 Agent 能像维护普通开发项目一样维护自身。进化由用户在专属 Project 中提出需求或反馈驱动,不要求 Agent 主动发现问题。
## 已确定
- `System Evolution` 是特殊 Project Profile绑定 Agent 自身源码仓库。
- Agent 在 Git worktree 中分析、修改、测试候选版本。
- 用户查看 Diff 后确认 Git commit/merge/push 等写操作。
- Supervisor 在内核外负责候选版本切换、启动、健康检查和失败回退。
- 初期以 Git 历史和 Run 日志记录演化过程;复杂评估与进化档案后置。
## 待细化
- Supervisor 的最小实现和版本切换方式。
- 候选版本测试、健康检查和回退判定。
- 发布确认在 CLI/TUI/Web/Desktop 中的体验。

View File

@ -0,0 +1,22 @@
# Hooks、扩展与 Profile
状态todo
期望阶段P4
## 目标
让新能力在需要时能以 Tool、Hook、Behavior、Adapter 或 Profile 的形式优雅生长。
## 已确定
- 第一版只保留 `beforeTool``afterTool``afterRun` 三个轻量 Hook 点。
- Hook 用于观察、约束或响应生命周期;不承担 Run 状态、存储一致性或 Tool 实际执行。
- Tool、Hook、Behavior、Adapter 是不同扩展形态,不混为“插件”。
- Project、Task、System Evolution 的差异最终由 Profile 组合表达。
- 自动发现、manifest、依赖管理、调试台均后置等出现真实的独立扩展需求再实现。
## 待细化
- Hook 的注册、顺序、异常隔离和启停。
- 扩展目录、加载方式和本地开发体验。
- Profile 的配置格式与覆盖规则。

26
docs/foundation/cli.md Normal file
View File

@ -0,0 +1,26 @@
# CLI
状态todo
期望阶段P1
## 目标
CLI 是第一条完整产品线,应能独立完成聊天、空间管理、执行观察和日常开发/临时事务。
## 已确定
- 以自然语言 REPL 为主;普通文本发送给当前 Conversation。
- 使用少量斜杠命令处理 Space、会话、Run 等确定性控制操作。
- 提示符需要明确显示当前 Task/Project 与 Conversation。
- Agent 的普通回答流式输出Tool 调用显示简短状态、结果和失败信息,不展示内部推理。
- 除 REPL 外CLI 还应提供全屏 TUI用于浏览 Space、会话、Run、日志与产物它属于 CLI 产品线,不是可遗忘的远期附属功能。
## 候选命令
`/new``/conversations``/switch``/tasks``/task``/project``/runs``/log``/cancel``/exit`
## 待细化
- 启动时恢复最近上下文还是提供编号选择器。
- REPL 与 TUI 的切换方式、TUI 库、布局和快捷键。
- 长 Tool 输出的折叠、复制与完整日志查看方式。

View File

@ -0,0 +1,21 @@
# Runtime
状态todo
期望阶段P1
## 目标
建立一个常驻本地 Runtime。它是唯一的状态写入者也是 Agent、Tool 和未来客户端的运行宿主。
## 已确定
- 技术基础为 TypeScript + Node.js + monorepo。
- CLI 从第一天起连接常驻 Runtime而不是把 Runtime 嵌入在 CLI 进程中。
- Runtime 负责 Space、Conversation、Run、本地数据和 Tool 执行。
- Web 与 Desktop 以后只是同一 Runtime 的客户端,不重复 Agent 逻辑。
## 待细化
- CLI 与 Runtime 的本地通信方式。
- Node 版本、包管理器、monorepo 工具和包边界。
- Runtime 启动、健康检查、单实例和停止行为。

22
docs/foundation/spaces.md Normal file
View File

@ -0,0 +1,22 @@
# Space 与 Conversation
状态todo
期望阶段P1
## 目标
提供两种并列的一级空间,并让每个空间拥有多个独立会话。
## 已确定
- `Project`:长期开发空间,绑定本地项目目录。
- `Task`:临时个人事务空间,可用于闲聊、脚本、浏览器或应用控制。
- 两类 Space 均包含多个 Conversation。
- 一次实际 Agent 执行称为 `Run`,避免与 Task 概念混淆。
- `inbox` 可以作为默认 Task具体生命周期在实现前确认。
## 待细化
- Task 的默认命名、归档和删除体验。
- Conversation 标题生成与重命名体验。
- Project/Task 切换在 REPL 与 TUI 中的展示。

View File

@ -0,0 +1,21 @@
# 记忆与知识
状态todo
期望阶段P4
## 目标
让三端共享有用的个人、项目和会话上下文,同时保持数据本地化和可编辑。
## 已确定
- 目标层级Conversation、Task/Project、全局个人记忆以及短暂的 Run 工作记忆。
- 初期优先使用摘要、项目说明、架构记录和决策记录等普通文件。
- 记忆应能查看、编辑、固定或遗忘。
- 全文检索、文档导入、向量检索和混合检索均后置。
## 待细化
- 何时自动摘要与提炼记忆。
- 跨 Space 的记忆引用和隔离规则。
- 个人偏好写入全局记忆的确认体验。

View File

@ -0,0 +1,21 @@
# 计划与多 Agent
状态todo
期望阶段P4
## 目标
在单 Agent 已表现出真实瓶颈后,为复杂目标加入计划、步骤和多 Agent 协作。
## 已确定
- 复杂行动目标可拆为可执行步骤并自动依序执行。
- 计划、步骤与子 Agent 都是 Run 之上的行为能力,不应先写死进 MVP。
- Planner、Worker、Reviewer 是候选角色,不构成强制工作流。
- 并行、DAG、自动重规划和模型路由均在确认需要后再引入。
## 待细化
- Plan/Step 的交互编辑与 CLI/TUI 展示。
- 子 Agent 上下文隔离、结果回收和失败处理。
- 协作质量评估与成本控制。

View File

@ -0,0 +1,22 @@
# 可靠性与个人安全
状态todo
期望阶段P4
## 目标
在 Agent 开始影响真实项目、文件、网站和本机系统后,逐步补足恢复与确认能力,而不阻塞前期个人探索。
## 已确定
- 系统是单用户、本地优先项目;不考虑多租户、账号和企业权限。
- Git 写操作在 System Evolution 中必须经用户确认。
- 后续高影响操作包括删除文件、真实网页提交、系统设置和应用控制。
- 候选可靠性能力包括取消/暂停/恢复、崩溃恢复、备份、导入导出、Workspace 清理和产物归档。
- 候选安全能力包括终端确认、Keychain、敏感日志处理和最小风险等级。
## 待细化
- 哪些操作先加入确认、确认的默认交互。
- 数据备份位置和保留策略。
- 长期任务、异常退出和资源回收。

27
docs/roadmap.md Normal file
View File

@ -0,0 +1,27 @@
# 路线图与管理规则
路线图只描述阶段目标。每个功能的具体拆分、提交顺序和实现方案以各自的功能文档为准。
| 阶段 | 目标 | 已知范围 |
| --- | --- | --- |
| P1 | 本地 Runtime 与终端产品基础 | Runtime、CLIREPL 与全屏 TUI、Space、会话、DeepSeek 聊天、Run、基础 Tool/Hook 接缝 |
| P2 | 终端行动能力与开发助手 | Workspace、文件/Shell、单 Agent Tool Calling、Project、代码与 Git Worktree 能力 |
| P3 | System Evolution 闭环 | 候选 worktree、自身修改与测试、确认发布、Supervisor 回退 |
| P4 | Runtime 成长与个人自动化 | 扩展、计划/多 Agent、记忆、浏览器/电脑控制、可靠性与按需安全能力 |
| P5 | Web 产品线 | Runtime 的 Web 客户端与管理界面 |
| P6 | Desktop 产品线 | 本地常驻控制台与系统集成 |
## 进度标记
每个功能文档使用:
```text
状态todo | doing | done
期望阶段P1 | P2 | ...
```
新增需求先归类到已有大功能点;如果它确实是新的长期能力,再新建一个功能文件。实现过程中允许调整阶段和拆分,不要求回头重排整份路线图。
## 提交与 blog
一次提交应交付一个可验证的纵向能力,而不是单独提交类型、枚举或预留接口。完成后在相关功能文档追加:提交链接、验证方式、实现取舍和对应 blog。