diff --git a/docs/README.md b/docs/README.md index ad63cc07..adf53a38 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,6 +8,7 @@ | [`plan.md`](./plan.md) | 按当前共识拆出的实施计划 | | [`heicode-runtime-auth-newapi-secret-design.md`](./heicode-runtime-auth-newapi-secret-design.md) | 用户输入、登录用户复用、NewAPI 扣费映射、Azure Key Vault 凭证托管与短期凭证注入边界 | | [`heicode-manager-sub-swarm-progress-checklist.md`](./heicode-manager-sub-swarm-progress-checklist.md) | Heicode Manager sub 模式、瀑布/敏捷、蜂群模式的已完成/未完成/依赖/风险/下一步进度清单 | +| [`heicode-manager-standalone-execution-plan.md`](./heicode-manager-standalone-execution-plan.md) | Heicode Manager 端可独立完成任务的执行计划、顺序、验收标准和边界 | | [`integration/Heicode-登录接口对接文档.md`](./integration/Heicode-登录接口对接文档.md) | 已上线登录接口对接文档 | | [`integration/agnet-platform-request-contract.md`](./integration/agnet-platform-request-contract.md) | Manager 请求 Agnet 平台时携带的部署、日志、监控、事件与审计接口参数 | | [`deployment/azure-production-deploy-guardrails.md`](./deployment/azure-production-deploy-guardrails.md) | Azure VM / PostgreSQL / Redis / Agnet / NewAPI 生产部署前的安全守卫、环境变量注入和验证计划 | diff --git a/docs/heicode-manager-standalone-execution-plan.md b/docs/heicode-manager-standalone-execution-plan.md new file mode 100644 index 00000000..05138d0c --- /dev/null +++ b/docs/heicode-manager-standalone-execution-plan.md @@ -0,0 +1,347 @@ +# Heicode Manager 可独立执行任务计划 + +更新时间:2026-05-26 +负责人范围: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 已可用 | + +## 四、任务明细 + +### 任务 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|TestAgnetDeployment'`;`cd web/default && bun run typecheck` | + +验收标准: + +- 不允许写成自由文本。 +- 旧数据无字段时默认按 `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|HashiCorp Vault|Secret Provider" docs` 后剩余内容必须是历史说明或明确非当前实现 | + +验收标准: + +- 不把 Azure Key Vault 写成普通用户要进入的后台。 +- 不删除历史架构背景时,必须标注“历史/非当前实现”。 + +### 任务 13:AWS/GCP 占位提示 + +| 项 | 内容 | +|---|---| +| 目标 | 避免用户误以为 AWS/GCP 已完成 | +| 修改文件 | 资源绑定相关前端页面、`heicode/controller/resource.go` 如需补充状态字段 | +| 当前现实 | Azure 已有第一阶段发现,AWS/GCP 未实现 | +| 验收 | UI 明确显示 AWS/GCP “即将支持”或禁用状态 | + +验收标准: + +- 禁用项不能提交到后端创建真实资源发现。 +- 已有 Azure 流程不受影响。 + +## 五、推荐执行批次 + +### 批次 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 占位提示 | + +完成批次 C 后,Manager 端应具备清晰的任务视角、持久化上下文、准确页面口径和更少误导。 + +## 六、统一自测命令 + +每个批次完成后至少执行: + +```bash +cd /Users/gongzhiyong/go/heicode-mananger/heicode +go test ./controller ./model +``` + +前端有改动时执行: + +```bash +cd /Users/gongzhiyong/go/heicode-mananger/heicode/web/default +bun run typecheck +bun run build +``` + +文档有改动时执行: + +```bash +cd /Users/gongzhiyong/go/heicode-mananger +git diff --check -- docs +``` + +如果涉及生产部署,必须再按: + +```bash +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、日志、页面不出现明文长期密钥 | +| 口径 | 页面和文档不把本地占位/模拟事件说成真实 Runtime | + +## 八、执行时不能突破的边界 + +1. 不在 Manager 中保存长期明文密钥。 +2. 不让普通用户看到 CodeGW 管理后台能力。 +3. 不把 Manager 做成网页编码主体验。 +4. 不把 `sub_mode` 解释成蜂群 Runtime 固定流程。 +5. 不把本地模拟事件当真实蜂群完成证据。 +6. 不把 Azure Key Vault 暴露成普通用户要直接操作的后台。 +7. 不绕过客户端高危审批的产品边界;Manager 只能先提供记录和 API。 +