diff --git a/docs/integration/heicode-sub-mode-flow-spec.md b/docs/integration/heicode-sub-mode-flow-spec.md index af56a5f5..bf6068f6 100644 --- a/docs/integration/heicode-sub-mode-flow-spec.md +++ b/docs/integration/heicode-sub-mode-flow-spec.md @@ -19,26 +19,28 @@ | 简称 | 全名 | 是什么 | 栈 | |---|---|---|---| -| **客户端** | 桌面客户端 cc-haha / Desktop | 用户用的壳程序(Tauri+React) | TS | -| **HM** | **Heicode Manager** | **网关 / 控制面 / 状态裁判 / 凭据中介**。**一个 Go 服务,本身没有 AI,不跑 agent,不执行任何 shell 命令,不连 VM** | Go(Gin/GORM) | -| **AM** | **agent_management**(= 你说的 Agent Manager / Sub Mode Runtime,在 `20.212.121.126`) | **真正干活的执行面**:里面的 **agent 才有 AI**,拆任务、写代码、跑工具、git 入库 | 独立服务 | +| **客户端** | 桌面客户端 cc-haha / Desktop | **像 Claude Code 那样的智能体编程程序**:本地自己能跑 agent、写代码、执行命令。用模型时**调 HM 的模型接口** | TS(Tauri+React/CLI) | +| **HM** | **Heicode Manager** | **① 模型调用网关(new-api)**——给「客户端」和「AM」**两边都提供模型调用接口 `/v1/*`**(鉴权/计费/路由都在这);**② 控制面 / 状态裁判 / 凭据中介**。HM 自己不跑 agent、不执行命令、不连 VM | Go(Gin/GORM) | +| **AM** | **agent_management**(= 你说的 Agent Manager / Sub Mode Runtime,在 `20.212.121.126`) | **云端多 agent 运行时**:把任务拆成多 agent 并行干活、写代码、git 入库;这些 agent **也是调 HM 的模型接口 `/v1/*`** 来用模型 | 独立服务 | -### 0.1 关键能力边界(谁有 AI / 谁能执行命令 / 谁连 VM)—— 回答常见误解 +> **「AI」从哪来**:AI = 模型。**模型统一由 HM 的 `/v1/*` 提供**。**智能体执行(跑 agent)发生在两处**:本地(桌面客户端,像 Claude Code)和云端(AM,sub 模式多 agent)。两边都**通过 HM 调模型**。HM 是大家共用的**模型网关**,自己不当 agent。 + +### 0.1 关键能力边界(谁跑 agent / 谁提供模型 / 谁执行命令) | 能力 | 客户端 | **HM** | **AM** | |---|---|---|---| -| 有 AI(大模型 agent) | ❌ | **❌ 没有** | ✅ agent 有 | -| 执行 shell 命令 / 跑工具 | 部署阶段在用户机器上执行 | **❌ 从不执行** | ✅ 任务执行阶段在 AM 沙箱里执行 | -| 写业务代码 | ❌ | **❌** | ✅ | -| 连 VM / 部署 / 看 VM 日志 | ✅(**部署由客户端执行**,见 §3.8) | **❌ HM 不连 VM、不部署、不看 VM 日志** | ❌(AM 只产代码,不负责部署到用户 VM) | -| 解密验签 / 鉴权 / 配额 | ❌ | ✅ | ❌ | +| 智能体程序 / 跑 agent | ✅ 本地跑(像 Claude Code) | ❌ 不跑 agent | ✅ 云端跑多 agent | +| **提供模型调用接口 `/v1/*`** | ❌(是调用方) | ✅ **是模型网关,给客户端和 AM 都提供** | ❌(是调用方) | +| 调模型 | ✅ 调 HM `/v1/*` | —(被调方) | ✅ 调 HM `/v1/*` | +| 本地执行命令 / 部署 / 看 VM 日志 | ✅ 在用户机器上执行(像 Claude Code) | **❌ 从不执行、不连 VM** | ❌(AM 在自己沙箱产代码,不部署用户 VM) | +| 解密验签 / 鉴权 / 计费 | ❌ | ✅ | ❌ | | 裁决 display_status | ❌ | ✅ **唯一裁判** | ❌(只报执行事实) | | 托管凭据(KV)/ 发短期凭据 | ❌ | ✅ | ❌ | -> **重点澄清(回答"HM 怎么部署 VM/执行命令/看日志"):HM 做不到,也不该做。HM 没有 AI、不执行命令、不连 VM。** -> - **任务执行**(写代码、跑测试)= **AM 的 agent** 在 AM 自己的沙箱里干。 -> - **部署到用户 VM + 在 VM 上看日志** = **客户端**在用户机器上干(用户确认后,HM 只把短期凭据加密发给客户端,客户端拿凭据自己 ssh/部署/看日志)。 -> - HM 全程只是:解密、鉴权、把任务转给 AM、把 AM 上报的状态裁决成 display_status、把凭据从 KV 安全发出、记审计。 +> **澄清几个之前易错的点**: +> - **HM 不部署、不执行命令、不连 VM、不看 VM 日志**——它是模型网关 + 控制面,不是执行器。 +> - **部署到用户 VM + 在 VM 看日志 = 客户端**自己在用户机器上干(像 Claude Code 本地执行;用户确认后 HM 只把短期凭据加密发给客户端)。 +> - **sub 模式 = 把多 agent 任务派到云端 AM 跑**(区别于客户端本地自己跑一个小任务);AM 的 agent 调 HM 用模型,流式回 HM,HM 裁决后回客户端。 ### 0.2 三端铁律 1. 客户端**只调 HM**(`/api/heicode/*`、`/api/agent/*`),**禁止直连 AM** / NewAPI / Runtime artifact。 @@ -96,7 +98,7 @@ ### 3.0 完整执行流程(逐步,明确每一步谁做什么) -> 全程三个主体:**客户端**、**HM**(Heicode Manager,无 AI、不执行)、**AM**(agent_management,有 AI、执行)。 +> 全程三个主体:**客户端**(像 Claude Code 的智能体程序)、**HM**(模型网关 + 控制面,不跑 agent、不执行命令)、**AM**(云端多 agent 运行时)。**客户端和 AM 的 agent 用模型时都调 HM 的 `/v1/*`。** **A. 准备(一次性)** 1. 用户在**客户端**绑定自己的 **git 仓库**(github/gitea URL + 一个 PAT)。客户端经 V2 加密把 PAT 发给 **HM** → **HM** 把 PAT 写进 **Key Vault**,库里只留 `secret_ref`,返回一个 `resource_binding_id`。 @@ -109,8 +111,8 @@ **C. 执行(AM 干活,HM 中转)** 6. **HM** → `POST /api/agent/sub-agile/deployments`(给 **AM**),带:需求、角色/模型、回调地址、HMAC 签名密钥、**git 仓库 + 短期凭据**。 -7. **AM**:把需求拆成多个 **agent**(如 backend / frontend / reviewer),各自分配模型,开始干活。**这里的 agent 才有 AI。** -8. **AM** 的每个 agent:clone 用户仓库 → 在自己分支(`agent/`)写代码、跑工具/测试 → **commit & push 到用户仓库**(用第 5/6 步注入的短期 PAT)。 +7. **AM**:把需求拆成多个 **agent**(如 backend / frontend / reviewer),各自分配模型,开始干活。**每个 agent 用模型时调 HM 的 `/v1/*`(和桌面客户端用同一套模型接口)。** +8. **AM** 的每个 agent:clone 用户仓库 → 在自己分支(`agent/`)写代码、跑工具/测试(调 HM `/v1/*` 用模型)→ **commit & push 到用户仓库**(用第 5/6 步注入的短期 PAT)。 9. **AM** 持续把「每个 agent 在做什么 / 跑了什么工具 / 改了哪些文件 / 当前阶段 / 产物」**流式回调**给 **HM**(HMAC 签名):`POST /api/agent/callbacks/runtime-events`。 10. **HM** 收回调 → 聚合事件 + **裁决 `display_status`**(见 §6)+ 持久化。