按桌面客户端统一方案 v0.1 + agent_management Sub Mode Runtime 对接,强制全量统一,不留兼容。
命名统一(强制,无兼容):
- 全仓 agnet/Agnet/AGNET → agent/Agent/AGENT:后端 Go(路由 /api/agent/*、env AGENT_*、
结构体/函数、19 个文件改名)、前端(agent-console/agent-hub、/api/agent 调用、i18n)、
DB(表 agent_*、列 agent_id)、compose/.env、文档、脚本。
- DB 加幂等迁移 renameAgnetTablesToAgent():启动时 rename 老 agnet_* 表/列,保住生产数据。
统一方案核心(10 项):
- callback 统一 /api/agent/callbacks/runtime-events(路由/广播URL/函数名)。
- artifact 兜底判定改用 Runtime 权威信号 metadata.synthesized(§7.2)+ 结构化 artifact_type。
- Manager→Runtime 路径对齐 /api/agent/sub-agile/deployments(§2.2),{deployment_id} 回退 swarm_id。
- 状态裁决 display_status:Manager 唯一裁判,completed 无有效产物→needs_codegen/
completed_without_deliverable(§10.6),接入 detail/timeline/workflow。
- GET /api/heicode/capabilities 能力发现(§6)。
- 模型策略 per_role(role_models)+ 收集 allowed_model_ids(§9)。
- resource_binding_id→secret_ref 服务端解析,客户端不再 inline secret_ref(§17.6)。
- 客户端统一路由层 /api/heicode/sub-agile|swarm/*(task≡deployment,复用控制面)+ workflow 投影。
- 日志分层 user_logs/debug_logs(§13)。
验证:go build ./... + go test(controller/router/model/middleware)全绿;前端 tsc -b + rsbuild build 通过。
待部署:VM .env 的 AGNET_*→AGENT_*;启动迁移自动 rename 表;其他三仓库需同步切到 /api/agent。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
12 KiB
Heicode Manager 统一改造落地计划(Manager 侧)
版本:v0.1(初稿) 日期:2026-06-01 负责范围:仅
heicode-mananger(Manager 控制面 +web/default前端) 性质:内部落地计划,随实现推进持续更新。不代表对外承诺。
状态更新(2026-06-01):
agnet → agent已按"强制全量、不留兼容"完成。 后端 Go(路由/api/agent/*、envAGENT_*、结构体/函数/文件名)、前端(agent-console/agent-hub、/api/agent调用、i18n)、DB(表agent_*、列agent_id,并加幂等迁移renameAgnetTablesToAgent保住老数据)、文档、compose/.env、脚本均已统一为agent。go build ./...与go test ./controller ./model ./router ./middleware全绿;前端tsc -b通过。 本文 §3 原描述的"保留agnet兼容别名/线缆令牌"策略已作废——实际采用一次性硬切。唯一保留agnet字样的是model/main.go的迁移源表名(迁移所必需)。 部署待办:① VM.env的AGNET_*改名AGENT_*;② 启动时迁移自动 rename 老表(已就绪);③ 其他三仓库(agent_management / HeiCode-Swarm / 客户端)需同步切到/api/agent与新 env,否则跨服务对接在它们切换前会中断(按你的要求强制先行)。
0. 基准文档
本计划是以下两份的 Manager 侧拆解执行版,结论以原文为准:
| 来源 | 位置 | 作用 |
|---|---|---|
| 统一调用方案 v0.1 | gitee taijibaga/heicodedebug → 2026-06-01_heicode客户端相关定义.md |
四仓库总纲:接口归口、模式拆分、状态裁决、产物、回调 |
| 全链路代码评审报告 | gitee taijibaga/heicodedebug → 2026-06-01_Heicode全链路代码评审报告.md |
P1–P7 问题与证据 |
| 桌面 sub 对接文档 | docs/integration/heicode-desktop-sub-agile-api.md |
现行普通 sub 契约 |
四仓库分工(总纲 §4):客户端只调 Manager;Manager 是唯一接口入口 + Runtime 路由器 + 唯一状态裁判;agent_management 执行 Sub Agile;HeiCode-Swarm 执行 Swarm。
1. 贯穿全局的原则(来自总纲)
agnet是历史拼写错误,统一为agent;旧接口兼容期只做转发。- Sub Agile 与 Swarm 是两套运行时,不再复用
/api/swarms表达两种模式,按mode路由。 - Runtime 只上报结构化事实;Manager 据结构化字段裁决
display_status;客户端只消费结论,不再用正则自判产物。 - 安全红线:只传
azkv://等secret_ref,禁明文密钥;高危操作 Manager 先审批再下发。
2. 已完成(分支 fix/manager-deliverable-and-secret-validation,commit 12602eb,已推送)
| 项 | 文件 | 内容 | 对应总纲 |
|---|---|---|---|
| P2 交付物判定 | controller/agnet_runtime_client.go |
runtimeArtifactsAreSummaryOnly 改读结构化 artifact_type+文件信号,弃脆弱正则 |
§10.6 |
| P6a secret_ref 校验 | controller/resource.go |
Resource CRUD 强制 azkv:// |
§16/§17.6 |
| P6b 值级密钥扫描 | controller/resource.go、controller/agnet_control_plane.go |
containsPlaintextSecret/containsSensitiveGrantField 扫字符串值(sk-/JWT/PEM) |
§16 |
| P5 默认模型收敛 | controller/agnet_role_template.go、controller/agnet_task_bridge.go |
单一来源 defaultAgnetModelID()(env AGNET_DEFAULT_MODEL_ID,默认 gpt-5.4);移除 agnet-model-<role> 占位回退 |
§9 |
| P3 状态枚举 | docs/integration/heicode-desktop-sub-agile-api.md |
补 completed 终态 + runtime_state 镜像 + 未知值兜底 |
§10.4 |
| 单测 | controller/agnet_deliverable_secret_test.go |
覆盖以上行为 | — |
注:
defaultAgnetModelID在后续命名统一中应改名defaultAgentModelID,env 改AGENT_DEFAULT_MODEL_ID(保留AGNET_*回退)。
3. 命名统一 agnet → agent
3.1 爆炸半径(仅本仓库,不含另三仓库与跨团队契约)
2155 处 / 63 文件(rg -i agnet)。按「客户端/其他服务是否依赖」分类:
| 类别 | 规模 | 对外可见 | 处理策略 | 风险 |
|---|---|---|---|---|
HTTP 路由 /api/agnet/* |
路由表 | ✅ 客户端+Runtime | 新增 /api/agent/* 别名,旧保留转发 |
🔴 |
| JSON 字段 | 仅 agnet_id(3 处,含 DB 列) |
✅ resource grant 契约 | 响应 dual-emit agent_id,请求 dual-accept |
🟠 |
env 变量 AGNET_* |
compose + 代码读取 | ✅ 部署配置 | 代码先读 AGENT_* 回退 AGNET_* |
🟠 |
DB 表 agnet_* / agnet_id 列 |
~6 表 | ❌ 内部 | 用 GORM TableName() 钉住物理名不动,物理改名作为最后单独迁移 |
🔴 |
Go 内部标识(AgnetXxx、函数、文件名 agnet_*.go) |
~1800 | ❌ 编译期可查 | 纯重构,分模块小步改 | 🟢 |
前端(agnet-console/、组件、i18n key) |
~250 | ❌ 内部(调的是路由) | 重构,随路由切换 | 🟢 |
| 文档 | 多处 | — | 新文档写 agent,agnet 标 deprecated |
🟢 |
3.2 兼容期规则(总纲 §19)
- 旧接口只做转发。2. 新文档只写新接口。3. 新客户端只调新接口。4. Manager 内部存储统一
agent命名。5. 日志可记 legacy route,不展示给普通用户。
4. 路由拆分与归口(总纲 §5)
4.1 客户端 → Manager(新增)
/api/heicode/capabilities
/api/heicode/sub-agile/tasks/... (或统一 /api/heicode/tasks + body.mode)
/api/heicode/swarm/tasks/...
4.2 Manager → Runtime(新增,按 mode 分流)
/api/agent/sub-agile/deployments -> agent_management (AGENT_RUNTIME_* / 现 AGNET_RUNTIME_*)
/api/agent/swarm/deployments -> HeiCode-Swarm (SWARM_RUNTIME_*)
Manager 已具备双 env 前缀分流机制(agnetRuntimeClientConfigForMode);蜂群侧配置就绪只差 SWARM_RUNTIME_SERVICE_TOKEN。
4.3 回调(新增 + 旧转发)
新:POST /api/agent/callbacks/runtime-events
旧:POST /api/agnet/callbacks/swarm-events (兼容转发到同一 handler)
5. 状态裁决:Manager 成为唯一裁判(总纲 §10,关联评审 P1)
5.1 三层状态 + display_status
client_task_status(客户端本地)/cloud_deployment_status(Manager)/runtime_execution_status(Runtime)- Manager 输出唯一
display_status给客户端。
5.2 Runtime 必须上报的结构化交付物事实(契约)
"deliverable": {
"has_deliverable": true,
"summary_only": false,
"artifact_ids": ["art_xxx"],
"files_modified": ["src/app.ts"],
"has_diff": true,
"commit_sha": ""
}
5.3 Manager 裁决规则
| Runtime 事实 | display_status |
|---|---|
completed + has_deliverable + !summary_only |
completed |
completed + summary_only / 无 artifact |
completed_without_deliverable 或 needs_codegen |
failed |
failed / stopped / waiting_approval 同名透传 |
5.4 Manager 落点
controller/agnet_callback.go(applyAgnetCallbackDeploymentState消费deliverable,算 verdict)model/agnet_deployment.go(加DeliveryVerdict/ display_status 列,三库兼容varchar)controller/agnet_control_plane.go(detail/timeline 暴露字段)- 复用已就绪的
artifactIsSummaryOnly(P2)+ usage - 阶段化:先加派生字段不改
status(向后兼容)→ 客户端跟进后再引入新终态值。
6. 模型策略(总纲 §9)
- Sub Agile:
per_role/default;Swarm:primary。 - 单一来源默认模型(P5 已起步,待改名
defaultAgentModelID)。 - Manager 校验:模型存在 / 套餐允许 / 角色允许 / 预算 / Runtime 支持。
7. 项目文件夹产物 project_folder(总纲 §12)—— 中期大件
- artifact 升为两级:
Project Artifact→File Artifacts / Directory Entries。 - 新 artifact_type:
project_folder/project_archive(现有code_patch/document/...保留)。 - 新增接口:
.../artifacts/{id}/manifest、.../files/{path}、.../archive。 - 本地修改回传 + revision 协议(§12.7):
local-edits/batch/ 冲突ARTIFACT_REVISION_CONFLICT/ Manager 维护 current accepted revision。 - 影响:新 model(artifact revision / project entries)、新 controller、content 代理扩展。工程量大,单独立项。
8. 云部署生命周期(总纲 §18)—— 远期
project_folder → 选 target(Azure/阿里云/AWS) → Manager 校验/审批/凭证/预算 → Deploy Worker/Runtime 执行 → deployment_manifest artifact 回传。远期,本轮不展开。
9. 安全与审计(总纲 §16/§17)
| 项 | 现状 | 待办 |
|---|---|---|
secret_ref 强制 azkv:// |
✅ agnet 路径 + Resource CRUD(P6a) | 覆盖其余写入路径 |
| 值级密钥扫描 | ✅ P6b | — |
| 高危操作 Manager gate | ❌ 现为立即 accepted,阻断依赖 Runtime |
Manager 侧加 risk_level/pending 审批 gate(关联 P1/§17.1) |
| 短期凭证 lease 真派生 | ❌ 占位(只发 lease://,不 mint) |
接 Key Vault 派生短期凭证 |
| revoke 同步 Runtime | ⚠️ approve 有 sync,revoke 无 | 补 revoke→Runtime 通知 |
| 审计 fail-closed | ⚠️ best-effort | 关键审计改 fail-closed 或告警 |
| 客户端禁 inline secret_ref | — | Manager 改为接受 resource_binding_id,内部映射 secret_ref(§17.6) |
10. 落地阶段(总纲 §20,Manager 承担)
| 阶段 | Manager 任务 | 自主性 | 依赖 | 状态 |
|---|---|---|---|---|
| 1 接口/命名 | /api/agent/* 别名、/api/heicode/{sub-agile,swarm}/*、callback 新路由、AGENT_* env 回退、agnet_id→agent_id 双字段 |
✅ 加法自主 | — | 待开始 |
| 2 模式路由 | 按 mode 路由两套 *_RUNTIME_* |
✅ | 蜂群 token | 机制已就绪 |
| 3 模型策略 | per_role/primary 校验 | ✅ | — | P5 起步 |
| 4 状态/产物裁决 | display_status + deliverable 字段 + project_folder + revision | 🟡 | Runtime 发结构化事实 | P1/P2 起步 |
| 5 日志/回调/调试 | user_logs/debug_logs 分层 + diagnostics + 统一 callback | ✅ | Runtime callback 切换 | diagnostics 已有雏形 |
11. 跨团队依赖(Manager 做不了,需协调)
- agent_management / HeiCode-Swarm:上报结构化
deliverable事实;接入/api/agent/{sub-agile,swarm}/*路由;callback 切/api/agent/callbacks/runtime-events;产出真实project_folder。 - 蜂群 Runtime:
SWARM_RUNTIME_SERVICE_TOKEN安全配置 + 修复 single-agent fallback(评审 P7)。 - 客户端(macOS/Windows):切新接口、消费 display_status、project 文件树展示、本地 edit 上传、禁 mock/直连(§17)。
12. 风险与红线
agnet是 load-bearing(路由/env/DB/跨服务契约)——严禁全局 sed,必须加法别名 + 兼容期。- DB 物理表/列名暂不改,用
TableName()钉住,避免迁移风险。 - 跨服务契约字段改动一律 dual-emit + dual-accept,且需与调用方协调切换节奏。
- 状态裁决先加字段不覆盖
status,避免误伤「真完成但 Runtime 未回 artifact」的任务。
13. 待确认事项
- 统一方案仍是 v0.1,落地前需与作者对齐版本/范围。
- approval decision 回传路径:
/api/agent/{mode}/deployments/{id}/approvals/{approval_id}的最终形态。 - 客户端→Manager 路由用「分模式」还是「统一
/api/heicode/tasks+ body.mode」。 needs_codegen与completed_without_deliverable的判定边界(何时用哪个)。- project_folder / 云部署的优先级与排期(是否本阶段做)。
维护:本文件随实现进度更新;每完成一项在「已完成/状态」列标注 commit。