Files
heicode/docs/heicode-manager-standalone-execution-plan.md
T

18 KiB
Raw Blame History

Heicode Manager 可独立执行任务计划

更新时间:2026-05-27 负责人范围:Heicode Manager 端
用途:后续开发按本文逐项执行、验收和更新状态。

一、核查结论

本文只列 Manager 端能独立完成的任务。判断标准是:不要求 Heicode 客户端新增功能、不要求蜂群 / Agnet Runtime 提供真实接口、不要求 AKS / NATS / Prometheus 等基础设施先上线。

结论 说明
可以独立做 Manager 自己的 DB 模型、Go API、前端页面、权限校验、回调接收骨架、artifact 数据模型、幂等、模拟事件和文档口径
不能独立做 真实 swarm_id、worker claim / heartbeat、真实 handoff / retry、真实 Runtime 日志指标、客户端审批弹窗、短期凭证注入 runtime、SK 工具真实调用结果
当前最大问题 Manager 已有本地 Agnet control-plane 占位,但普通用户态部署、任务桥接、回调/artifact/幂等和持久化还没形成完整 Manager 闭环

二、排除项

以下任务不放入 Manager 独立开发计划,避免把外部依赖误报为 Manager 可完成。

事项 排除原因 需要谁配合
真实创建 Swarm Run 并返回 swarm_id 需要蜂群平台提供 POST /api/swarms 或等价生产接口 蜂群 / Agnet Runtime
子 Agnet claim、heartbeat、release、timeout 需要 worker runtime 和任务池 蜂群 / Agnet Runtime
handoff、retry、blocked 的真实状态机 需要 Runtime 产生任务事件 蜂群 / Agnet Runtime
真实日志流和 CPU/内存/耗时指标 需要日志/指标源 蜂群 / 基础设施
客户端高危审批主弹窗 产品要求审批主体验在客户端 Heicode 客户端
短期凭证真实注入子 Agnet 需要受控 runtime、身份和网络通道 蜂群 / 基础设施
SK 工具真实调用结果 需要 SK 平台或 Runtime 上报 invocation event 蜂群 / SK 平台
交付结果回到客户端 需要客户端展示和 Runtime artifact 输出 客户端 + 蜂群

三、执行顺序总览

顺序 任务 优先级 是否 Manager 独立 完成后价值
1 增加 sub 模式字段 P0 是 明确任务组织方式,支撑瀑布/敏捷状态展示
2 打通 HeicodeTask 到 Agnet deployment 的 Manager 桥接 P0 是 不再只能手动创建 deployment
3 增加用户态 Agnet deployment API P0 是 普通用户可以在自己资源范围内创建/查看/停止 deployment
4 统一 /api/swarms 与 /api/agnet/deployments 边界 P0 是 为后续蜂群联调留稳定 adapter
5 建 callback 接收端骨架 P0 是 先接住事件、artifact、审批请求、usage、status
6 建 artifact 数据模型和 API P0 是 先把交付物/产物摘要落库并可展示
7 增加回调幂等和签名/服务身份校验骨架 P1 是 重复回调不重复写入,生产联调不乱账
8 持久化 SK snapshot P1 是 容器重启后任务上下文和审计不丢
9 任务视角审计聚合 P1 是 按 task/deployment/correlation_id 看完整 Manager 记录
10 本地模拟蜂群事件冒烟入口 P1 是 不等 Runtime,也能自测 Manager 端完整显示链路
11 前端页面补齐独立闭环展示 P1 是 用户能看到任务、deployment、事件、artifact、审批和审计关系
12 文档口径清理 P2 是 避免旧 Vault/OpenBao/Secret Provider 表述误导
13 AWS/GCP 占位提示 P2 是 避免用户误以为 AWS/GCP 已可用
14 请求 body 加密策略确认 P2 是 明确 HTTPS 传输加密、应用层 body 加密是否需要、敏感字段禁止入参和日志

四、任务明细

任务 1:增加 sub 模式字段

项 内容
目标 Manager 能记录任务或部署计划采用 waterfall / agile 哪种组织方式
修改文件 heicode/model/agnet_deployment.go、heicode/controller/agnet_control_plane.go、heicode/web/default/src/features/agnet-console/api.ts、heicode/web/default/src/features/agnet-console/create-agnet-deployment-sheet.tsx
建议字段 sub_mode,枚举:waterfall、agile,默认 agile
验收 创建 deployment 后 DB、API response、前端详情都能看到 sub_mode
测试 `go test ./controller -run 'TestAgnet.*SubMode

验收标准:

  • 不允许写成自由文本。
  • 旧数据无字段时默认按 agile 展示。
  • 不能把 sub_mode 当成蜂群 Runtime 流程,只表示 Heicode 任务组织方式。

任务 2:HeicodeTask 到 Agnet deployment 桥接

项 内容
目标 Manager 能从 HeicodeTask 的任务卡生成本地 Agnet deployment payload
修改文件 heicode/controller/agnet_control_plane.go、新增 heicode/controller/agnet_task_bridge.go、heicode/web/default/src/lib/heicode-mcp.ts、heicode/web/default/src/features/tasks/task-card-view.tsx
新增 API POST /api/agnet/tasks/:task_id/deployment-draft 或等价 user-scoped endpoint
输入 task id、sub_mode、预算、资源范围、角色模板
输出 deployment draft 或创建后的 deployment_id
测试 新增 controller 单测;前端 typecheck

验收标准:

  • 任务能关联 deployment_id 或返回可提交的 deployment draft。
  • draft 中不能包含明文密钥,只能出现 secret_ref。
  • 找不到 task 或资源授权不足时返回明确错误。

任务 3:用户态 Agnet deployment API

项 内容
目标 普通用户可以创建、查询、停止自己资源范围内的 deployment
修改文件 heicode/router/api-router.go、heicode/controller/agnet_control_plane.go、heicode/controller/agnet_control_plane_test.go
当前问题 /api/agnet/deployments 走 AdminAuth
新增建议 保留 admin route;新增 user route:/api/agnet/user/deployments 或在同一路由中按 user scope 限制
测试 普通用户创建成功;越权查询别人 deployment 失败;停止别人 deployment 失败

验收标准:

  • 用户只能看到自己的 deployment。
  • user_context.user_id 为空时用登录用户 id 填充。
  • 请求体伪造别人 user_context.user_id 必须被覆盖或拒绝。
  • resource grant 必须属于当前用户。

任务 4:统一 /api/swarms 与 /api/agnet/deployments 边界

项 内容
目标 Manager 内部形成生产蜂群接口 adapter,不再让调用方混淆两个口径
修改文件 新增 heicode/controller/agnet_swarm_adapter.go 或 heicode/service/agnet_swarm_adapter.go,更新 docs/integration/agnet-platform-request-contract.md
当前现实 本地已有 /api/agnet/deployments,蜂群资料包目标接口是 /api/swarms
独立做法 先实现 Manager 内部 adapter 和统一 DTO,真实外呼先留配置开关,默认走本地 control-plane
测试 adapter 单测验证 payload 字段、secret_ref、correlation_id、sub_mode

验收标准:

  • 文档明确本地 control-plane 与生产 Runtime 的关系。
  • 未来切换真实蜂群平台时,不需要重写前端页面。
  • adapter 默认不外呼,避免误触发不存在的生产 Runtime。

任务 5:callback 接收端骨架

项 内容
目标 Manager 先具备接收蜂群平台回调的 API 和落库能力
修改文件 新增 heicode/model/agnet_callback.go、heicode/controller/agnet_callback.go,更新 heicode/router/api-router.go
新增接口 POST /api/agnet/callbacks/swarm-events、/approval-requests、/artifacts、/usage、/status
独立能力 本地模拟 payload 可保存、去重、查询
测试 controller 单测覆盖正常保存、重复 event_id 幂等、明文密钥拒绝

验收标准:

  • 请求体不得出现 token/password/private_key/access_key/connection_string 明文字段。
  • 每个回调都有 event_id 或 idempotency_key。
  • 重复回调返回成功但不重复写入。

任务 6:artifact 数据模型和 API

项 内容
目标 Manager 保存和展示 artifact 摘要,不等 Runtime 真实输出
修改文件 新增 heicode/model/agnet_artifact.go、heicode/controller/agnet_artifact.go、heicode/web/default/src/features/agnet-console/api.ts、heicode/web/default/src/features/agnet-console/pages.tsx
字段 artifact_id、deployment_id、task_id、correlation_id、artifact_type、title、summary、uri、checksum、metadata_json、created_at
测试 model/controller 单测;前端 typecheck

验收标准:

  • artifact 只保存摘要和引用,不保存大文件正文。
  • uri 支持 artifact://、git://、azblob://、https://,但页面只展示安全摘要。
  • 能按 deployment_id 查询 artifact 列表。

任务 7:回调幂等和服务身份校验骨架

项 内容
目标 生产联调前先有幂等和认证形状
修改文件 heicode/controller/agnet_callback.go、新增 heicode/middleware/agnet_callback_auth.go
机制 X-Request-Id、X-Correlation-Id、Idempotency-Key、可选 X-Agnet-Signature
当前阶段 可以先用配置开关和本地测试 token,不接真实 Key Vault service token
测试 缺少服务 token 时拒绝;重复 key 不重复写入

验收标准:

  • 开发环境可配置跳过严格签名,但生产默认要求服务身份。
  • 日志不打印 token 或签名原文。
  • 幂等冲突能返回已有记录摘要。

任务 8:持久化 SK snapshot

项 内容
目标 替换当前 agnetSnapshots 内存 map
修改文件 新增 heicode/model/agnet_sk_snapshot.go,修改 heicode/controller/agnet_control_plane.go
当前问题 容器重启后 /sk-snapshots 丢失
测试 创建 snapshot 后清空内存,再从 DB 查询仍存在

验收标准:

  • deployment_id、snapshot_id 有索引。
  • 查询按创建时间倒序或稳定顺序返回。
  • 不保存 SK 内容正文,只保存来源和版本引用。

任务 9:任务视角审计聚合

项 内容
目标 按 task/deployment/correlation_id 聚合 Manager 已有记录
修改文件 heicode/controller/agnet_control_plane.go、heicode/model/agnet_audit.go、heicode/web/default/src/features/agnet-console/pages.tsx
聚合内容 deployment、audit events、approvals、leases、artifacts、callbacks、resource grants
新增接口 GET /api/agnet/tasks/:task_id/timeline 或 GET /api/agnet/deployments/:id/timeline
测试 同一 correlation_id 下能聚合多类事件

验收标准:

  • 缺少某类数据时返回空数组,不报错。
  • 时间线按时间排序。
  • 敏感字段统一脱敏。

任务 10:本地模拟蜂群事件冒烟入口

项 内容
目标 在蜂群 Runtime 未接入前,Manager 能用模拟事件自测完整链路
修改文件 heicode/controller/agnet_callback.go、heicode/router/api-router.go、可选新增 heicode/controller/agnet_smoke.go
接口建议 admin-only POST /api/agnet/dev/simulate-run
生成内容 deployment accepted、task.created、task.claimed、task.completed、artifact.created、approval.requested
测试 单测验证模拟后 timeline/artifacts/audit 可查

验收标准:

  • 该接口必须 admin-only 或 dev-only。
  • 响应明确 simulated: true。
  • 线上页面不能把模拟事件显示成真实 Runtime 事件。

任务 11:前端页面补齐独立闭环展示

项 内容
目标 用户能看到 Manager 自己可提供的闭环信息
修改文件 heicode/web/default/src/features/agnet-console/pages.tsx、api.ts、必要时新增组件
展示内容 sub_mode、deployment 来源 task、callbacks、artifacts、timeline、SK snapshots 持久化状态
测试 cd heicode/web/default && bun run typecheck;本地页面点击冒烟

验收标准:

  • 页面明确区分 control-plane placeholder、simulated、runtime 来源。
  • 没有 artifact/callback 时有空态。
  • 文案不宣称真实蜂群已完成。

任务 12:文档口径清理

项 内容
目标 清理旧 Vault/OpenBao/Secret Provider 误导表述
修改文件 docs/heicode.md、docs/plan.md、docs/heicode-manager-sub-swarm-progress-checklist.md
规则 用户侧叫“密钥保管器”,当前实现侧写 Azure Key Vault
验收 `rg -n "OpenBao

验收标准:

  • 不把 Azure Key Vault 写成普通用户要进入的后台。
  • 不删除历史架构背景时,必须标注“历史/非当前实现”。

任务 13:AWS/GCP 占位提示

项 内容
目标 避免用户误以为 AWS/GCP 已完成
修改文件 资源绑定相关前端页面、heicode/controller/resource.go 如需补充状态字段
当前现实 Azure 已有第一阶段发现,AWS/GCP 未实现
验收 UI 明确显示 AWS/GCP “即将支持”或禁用状态

验收标准:

  • 禁用项不能提交到后端创建真实资源发现。
  • 已有 Azure 流程不受影响。

任务 14:请求 body 加密策略确认

项 内容
目标 桌面客户端调用 Manager 的 sub 流程接口时,支持与模型调用一致的 V2 应用层 body 加密;浏览器后台页面继续兼容普通 HTTPS JSON
修改文件 docs/integration/heicode-desktop-sub-agile-api.md、docs/heicode-runtime-auth-newapi-secret-design.md、必要时补充 heicode/middleware 或客户端 SDK 加解密模块
当前现实 /api/agnet/user/* 与 /api/heicode-auth/* 已支持 Content-Encoding: heicode-aead-v1;Manager 会先解密并校验设备签名,再把明文 JSON 交给业务处理或代理给上游
安全红线 请求体、回调、日志、artifact metadata、timeline 中禁止出现明文密码、Token、私钥、连接串、云 access key、模型 key;长期凭证只传 secret_ref
后续判断 桌面客户端需要在 sub 流程调用中复用模型调用的 encryptedFetch/V2 签名能力;服务端保留未加密 JSON 只用于 Manager Web 控制台兼容
测试 单测覆盖 V2 malformed 请求拒绝、普通代理请求兼容;生产需用真实已配对设备发起加密 sub 请求冒烟

验收标准:

  • 文档明确桌面端优先走 V2 应用层 body 加密,且保留浏览器后台未加密 JSON 兼容。
  • 客户端对接文档明确禁止传明文长期凭据,只允许 secret_ref / lease://... / 资源元数据。
  • 服务端日志不打印请求 body 中的敏感字段。
  • V2 加密失败时返回 X-Heicode-Auth-Error 和 X-Heicode-Server-Time,便于客户端排障。

五、推荐执行批次

批次 A:最小 Manager 闭环

顺序 任务
1 sub 模式字段
2 用户态 Agnet deployment API
3 HeicodeTask 到 deployment 桥接
4 本地模拟蜂群事件冒烟入口

完成批次 A 后,Manager 应能做到:普通用户从任务卡发起一个本地 deployment,并通过模拟事件看到任务进展,不依赖真实 Runtime。

批次 B:生产联调准备

顺序 任务
1 /api/swarms 与 /api/agnet/deployments adapter
2 callback 接收端骨架
3 artifact 数据模型和 API
4 回调幂等和服务身份校验骨架

完成批次 B 后,Manager 应能接收蜂群平台未来回调,并能用模拟 payload 证明幂等、落库、查询和脱敏正确。

批次 C:可观测与收尾

顺序 任务
1 SK snapshot 持久化
2 任务视角审计聚合
3 前端闭环展示
4 文档口径清理
5 AWS/GCP 占位提示
6 请求 body 加密策略确认

完成批次 C 后,Manager 端应具备清晰的任务视角、持久化上下文、准确页面口径和更少误导。

六、统一自测命令

每个批次完成后至少执行:

cd /Users/gongzhiyong/go/heicode-mananger/heicode
go test ./controller ./model

前端有改动时执行:

cd /Users/gongzhiyong/go/heicode-mananger/heicode/web/default
bun run typecheck
bun run build

文档有改动时执行:

cd /Users/gongzhiyong/go/heicode-mananger
git diff --check -- docs

如果涉及生产部署,必须再按:

cd /Users/gongzhiyong/go/heicode-mananger
sed -n '1,220p' docs/deployment/azure-production-deploy-guardrails.md

七、完成定义

Manager 独立任务完成,不等于蜂群生产闭环完成。本文完成的定义是:

条件 标准
普通用户路径 非管理员用户可以基于自己的任务和资源创建/查看/停止本地 deployment
任务关联 HeicodeTask 能关联 deployment 或 deployment draft
sub 模式 waterfall / agile 在 DB、API、UI 可追踪
回调骨架 事件、artifact、approval-request、usage、status 可模拟回调落库
artifact artifact 摘要可保存、查询、展示
幂等 重复回调不重复写入
审计 task/deployment/correlation_id 下能聚合审计、审批、artifact、callback
安全 API、日志、页面不出现明文长期密钥
请求加密 桌面端 sub 请求支持与模型调用一致的 V2 body 加密;浏览器后台普通 JSON 兼容路径不受影响
口径 页面和文档不把本地占位/模拟事件说成真实 Runtime

八、执行时不能突破的边界

  1. 不在 Manager 中保存长期明文密钥。
  2. 不让普通用户看到 CodeGW 管理后台能力。
  3. 不把 Manager 做成网页编码主体验。
  4. 不把 sub_mode 解释成蜂群 Runtime 固定流程。
  5. 不把本地模拟事件当真实蜂群完成证据。
  6. 不把 Azure Key Vault 暴露成普通用户要直接操作的后台。
  7. 不绕过客户端高危审批的产品边界;Manager 只能先提供记录和 API。
  8. 不破坏 V2 body 加密的版本字段、诊断头、重放保护和未加密 Web 控制台兼容路径,避免客户端和 Manager 联调不可排障。