Files
heicode/docs/integration/heicode-hm-legacy-teardown.md
chenchenandClaude Opus 4.8 b40a29102e docs(integration): correct teardown after dependency analysis (avoid over-deletion)
Verified the old-model code surface against the repo. Found the new template-agent
model is an EVOLUTION of the existing deployment control plane, not greenfield —
so several files are mixed and must NOT be whole-deleted:

- agent_runtime_client.go: AM HTTP client (config/url/headers/create/stop/status/
  health) is reused by the new StartAgent/StopAgent AND by capabilities; only
  withDisplayStatus + artifact/budget helpers are old.
- agent_control_plane.go: AgentCreate/List/Get/StopUserDeployment + AgentDeployment
  table are the backbone the new agent record reuses; only per-deployment task
  sub-handlers and the withDisplayStatus calls (1191/1200/1222) are old.
- agent_task_bridge.go: resolveResourceBindingIntoGrant is reused for env assembly.
- AgentDeployment table: KEEP and extend (subdomain/access_token/binding_ids)
  instead of new heicode_agent table + DropTable. Reconciled the model doc to match.
- Added agent_runtime_http_smoke_test.go to the sync-fix list.

Adds a §0.0 dependency/impact analysis answering: coverage, shared-feature impact,
and impact on the new APIs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 21:37:07 +08:00

155 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Heicode Manager 旧 Sub 任务编排模型 — 删除清单(Teardown)
> 更新时间:2026-06-03
> 背景:sub 模式已切到「模板 agent + 客户端直连」新模型(见 `heicode-hm-template-agent-model.md`)。
> 本文列出**要删除的旧代码 / 旧逻辑 / 旧数据 / 旧 DB 表与字段 / 旧前端**,并标注共享/有依赖、需评估的部分。
> 图例:🗑️ **删整块** · ✂️ **改/裁剪保留** · ⚠️ **评估/待确认(有共享或外部依赖)**
---
## 0.0 依赖与影响分析(已实查代码,2026-06-03)
> ⚠️ **结论先行:新模型「部署模板 agent」是现有部署控制面的演进,不是推倒重来。** 多个文件是**混合的**——新模型要复用的「调 AM 客户端 / 部署记录 / 资源注入」管线,和旧任务逻辑同处一文件。**只能外科式删旧分支,不能整文件删。**
**必须保留为骨架(新模型直接复用,删了新 API 就得重写):**
- `agent_runtime_client.go` 的 AM HTTP 客户端:`agentRuntimeClientConfigForMode`(**`heicode_capabilities.go` 在用**)、`agentRuntimeURL/Headers/CreatePayload/StopPath/StatusPath`、`AgentRuntimeHealth` → 新 `StartAgent/StopAgent` 靠这套。
- `agent_control_plane.go` 的 `AgentCreateUserDeployment / List / Get / Stop` + `AgentDeployment` 表 → **新 agent 记录复用/扩展它**(加 subdomain/token/binding_ids 字段),**不另起 `heicode_agent` 新表、不 DropTable**。
- `agent_task_bridge.go` 的 `resolveResourceBindingIntoGrant` → 改造为「拼 env」,复用资源解析。
**唯一纯旧、可删的核心函数:** `withDisplayStatus`(`agent_runtime_client.go:832`)。被 `agent_control_plane.go` 的 1191/1200/1222 调用 → 删它要**同步改这三处**(Get/List 不再套 display_status)。
**这修正了本文档早先两处过删:**
1. `agent_runtime_client.go` / `agent_control_plane.go` 不是"删/整改",是**保留骨架 + 删旧 helper**。
2. `AgentDeployment` 表**不删**——它就是新 agent 记录的载体(与 `heicode-hm-template-agent-model.md` §4 的 `heicode_agent` 二选一,**建议复用 AgentDeployment 扩字段**,两文档据此对齐)。
**确认会被波及、需同步处理:** `router/agent_runtime_http_smoke_test.go`(引用 tasks/deployments,删路由后编译失败 → 同步删/改)。
---
## 0. 删除原则
- 删之前先确认**计费不依赖任务记录**:计费走 `/v1/*` relay(携带用户身份),与 `agent_deployments` 无关 → 删任务表不影响计费。✅
- **DB 注意**:GORM `AutoMigrate` 只加列、**不删表/列**。删表用 `DB.Migrator().DropTable(...)`(三库通用、SQLite 可 DropTable);废弃**列**可留着不动(无害)或 `Migrator().DropColumn`(SQLite 早期版不支持 DropColumn,保守做法是**留列只停写**)。
- 删除分两步走:先**摘路由 + 删 handler**(接口立即下线),再清 **model/表 + 前端**。
- 保护项(CLAUDE.md Rule 5):`new-api` / `QuantumNous` 任何标识不动。
---
## 1. 后端路由(`heicode/router/api-router.go`)
| 标记 | 位置 | 内容 |
|---|---|---|
| 🗑️ | `registerHeicodeTaskRoutes`(约 530–567 行)整个函数 + `heicodeSubAgileRoute`/`heicodeSwarmRoute` 两组注册 | `/api/heicode/{sub-agile,swarm}/tasks/*` 全套(create/list/detail/messages/execute/stop/workflow/logs/events/metrics/diagnostics/artifacts*/approvals*/deployments) |
| 🗑️ | `GET /heicode/deployment-targets`(约 67 行) | `HeicodeDeploymentTargets` |
| ✂️ | `agentApprovalRoute` 下 `/user/deployments*`(约 510–523 行) | **拆分**:核心 `GET 列表 / GET 详情 / POST 创建 / stop`(`AgentList/Get/Create/StopUserDeployment`)→ **新模型复用**(可保留或新增 `/api/heicode/agents` 走同一 handler);旧任务子接口 `logs/metrics/events/artifacts/timeline/sk-snapshots/deployment-draft` → 🗑️ 删 |
| ✂️ | `apiRouter.POST("/agent/callbacks/runtime-events")`(62–63 行) | 保留路由,但 handler 收缩为只收 agent 生命周期(见 §3) |
> 新模型新增的 `/api/heicode/agent-templates`、`/api/heicode/agents*` 见 model 文档 §4,不在本删除文档范围。
---
## 2. 后端 Controller
**整文件删除 🗑️**(均为旧 sub 任务编排专属)
| 文件 | 内容 |
|---|---|
| `controller/heicode_task_create.go` | `HeicodeCreateSubAgileTask`/`ListSubAgileTasks`/`CreateSwarmTask`/`ListSwarmTasks`/`HeicodeTaskMessage`/`HeicodeTaskExecute`/`HeicodeDeleteTask`/`consumeActiveRevision` |
| `controller/heicode_client_routes.go` | `HeicodeTaskWorkflow`、`HeicodeListTaskApprovals` |
| `controller/heicode_project_artifacts.go` | `HeicodeListTaskArtifacts`/`HeicodeArtifactManifest`/`Archive`/`File`/`Revisions` |
| `controller/heicode_artifact_edits.go` | `HeicodeArtifactLocalEdit`(local-edits/revision 回传) |
| `controller/heicode_cloud_deploy.go` | `HeicodeCreateDeployment`/`HeicodeListDeployments`/`HeicodeDeploymentTargets`(旧代部署控制面) |
| 对应 `*_test.go` | `agent_deliverable_secret_test.go` 等针对上述逻辑的测试 |
**保留骨架 + 外科式删旧分支 ✂️**(详见 §0.0;这些是新模型复用的底座,**不可整删**)
| 文件 | 保留(新模型复用) | 删/改的旧分支 |
|---|---|---|
| `controller/agent_runtime_client.go` | AM HTTP 客户端全套:`agentRuntimeClientConfigForMode`(capabilities 在用)/`agentRuntimeURL`/`Headers`/`CreatePayload`/`StopPath`/`StatusPath`/`AgentRuntimeHealth` | 删 `withDisplayStatus`(832)、`heicodeClientMode`、`agentRuntimeArtifactContentPathForRecord`、`agentRuntimeBudgetPayload`;`agentRuntimeRequest{Agents,SwarmAgents,ResourceGrants}` 改造为模板 env 注入 |
| `controller/agent_control_plane.go` | `AgentCreateUserDeployment`/`List`/`Get`/`Stop` + 记录 CRUD(新 agent 部署/列/停复用) | 删 per-deployment 的 `logs/metrics/diagnostics/events/artifacts/timeline/sk-snapshots/deployment-draft` 子 handler;**改** 1191/1200/1222 三处去掉 `withDisplayStatus` 调用;删 `agentDeploymentRecord.Mode`/display_status 投影 |
| `controller/agent_task_bridge.go` | `resolveResourceBindingIntoGrant`(资源绑定→真值解析,新模型拼 env 复用) | `normalizeTaskDraftResourceGrants`/`buildAgentDraftAgentPlan`/`AgentCreateTaskDeploymentDraft` 由"任务 grant"改造为"启动拼 env(非密+解 KV)" |
| `controller/agent_callback.go` | 回调接收骨架 | 收缩为**只收 agent 生命周期**(started/stopped/unhealthy),删 work 事件流/artifact/phase 聚合与 `AgentArtifact` 写入 |
| `router/agent_runtime_http_smoke_test.go` | — | 引用 tasks/deployments,删路由后编译失败 → 同步删/改 |
**评估 ⚠️**
| 文件 | 说明 |
|---|---|
| `controller/agent_approval.go` | 审批:新模型审批在 agent↔客户端直接处理。若网页台/其它流程不再需要 → 删;**待你确认** |
| `controller/agent_role_template.go` | 角色模板:新模型「模板 agent」可能复用此概念 → **可能保留/改造**,不要直接删 |
---
## 3. 后端 Model + DB 表/字段(`heicode/model/`)
**删表 🗑️**(从 `model/main.go` 的 `AutoMigrate` 列表移除 + `Migrator().DropTable`)
| Model / 表 | 文件 | 处理 |
|---|---|---|
| `AgentArtifact` / `agent_artifacts` | `agent_artifact.go` | 删(产物记录,旧模型) |
| `AgentArtifactRevision` / `agent_artifact_revisions` | `agent_artifact_revision.go` | 删(含 `LatestAcceptedRevisionForDeployment`) |
| `AgentCloudDeployment` | `agent_cloud_deployment.go` | 删(旧代部署) |
| `AgentSKSnapshot` | `agent_sk_snapshot.go` | ⚠️ 评估(SK 快照是否其它处用) |
| `AgentCallbackEvent` | `agent_callback.go`(model) | ✂️ 裁剪:若回调收缩,事件表可瘦身或保留生命周期事件 |
**保留并扩展 ✅(修正:不删)**
| Model / 表 | 文件 | 处理 |
|---|---|---|
| `AgentDeployment` / `agent_deployments` | `agent_deployment.go` | ✅ **保留作新 agent 记录的载体**:扩字段 `subdomain`/`access_token`/`binding_ids`(JSON);停写旧任务态字段(`SubMode`/`Phase`/`PlanJSON`/`AgentInstancesJSON`/`PayloadJSON` 等,留列不动)。**与 model 文档 §4 的 `heicode_agent` 二选一——建议复用本表,避免删重写。不 DropTable。** |
**`model/main.go` 改动 ✂️**
- 从 294 行起的 `AutoMigrate(...)` 列表移除:`&AgentArtifact{}`、`&AgentArtifactRevision{}`、`&AgentCloudDeployment{}`(及评估后的 `AgentSKSnapshot`/`AgentDeployment`)。
- 396 行起的 idempotent-migrate 列表同步移除对应项。
- ⚠️ 注意保留第 291 行附近的 **agnet→agent 改名保数逻辑**(历史数据保护,别误删)。
**废弃字段(留列只停写,或 DropColumn)✂️**
- `AgentDeployment` 上的:`SubMode`/`Phase`/`RuntimeState`/`RuntimeSwarmID`/`PlanJSON`/`AgentInstancesJSON`/`PermissionManifestJSON`/`PayloadJSON` 等任务态字段——若 `AgentDeployment` 整表保留作它用则停写这些列;整表删则随表去。
---
## 4. 前端(`heicode/web/default/src/`)
**删路由/页面 🗑️**
| 路径 | 内容 |
|---|---|
| `routes/_authenticated/deployments/index.tsx` | 部署列表页 |
| `routes/_authenticated/tasks/$id.tsx` + `routes/_authenticated/tasks/` | 任务详情页 |
| `features/agent-console/{api.ts,pages.tsx}` | 旧任务/部署控制台(AgentDeploymentsPage/RunDetailPanel 等) |
| `features/tasks/task-card-view.tsx` | 任务卡片视图 |
| `features/agent-hub/index.tsx` | ⚠️ 评估(是否并入新 agent 管理页) |
| `features/models/components/deployments-{columns,table}.tsx` | ⚠️ 评估(models 页里的 deployments 表,确认是否旧任务) |
**改 ✂️**
- `hooks/use-sidebar-data.ts` / `use-sidebar-config.ts` / `use-top-nav-links.ts`:删「任务/部署」菜单项,加「Agent 管理」入口。
- `features/dashboard/components/cockpit/index.tsx`:`listAgentDeployments` 改为新 `GET /api/heicode/agents`(看板统计用 agent 数)。
- `components/layout/components/footer.tsx`、`config/system-settings.config.ts`、`lib/heicode-mcp.ts`:清掉对 deployments/tasks 的引用链接。
- `routeTree.gen.ts`:**删页面后 `bun run build` 自动重新生成**(勿手改)。
**i18n ✂️**
- 删 `web/default/src/i18n/locales/{zh,en,...}.json` 里仅任务/部署/产物页用到的 key(删完跑 `bun run i18n:sync` 校验,避免悬空 key)。
---
## 5. 删除顺序(安全推进)
1. **摘路由**:注释/删除 §1 的路由注册 → `go build` 通过(接口立即 404 下线)。
2. **删 controller 整文件 + 裁剪共享文件**(§2)→ `go build` 修引用直到通过。
3. **前端删页面 + 改菜单/看板**(§4)→ `bun run build`(重生成 routeTree)+ `tsc -b` 清 `noUnusedLocals`。
4. **model 停写 + 移出 AutoMigrate**(§3)→ `go build` + 本地起服务跑 AutoMigrate 不报错。
5. **DropTable 旧表**(确认数据无用后,单独一步,可灰度)。
6. 全量回归:登录、绑资源、`/v1/*` 模型调用、(新模型)部署 agent 列表——确认未被误伤。
## 6. 验证清单
- `go build ./...` 与现有 `*_test.go` 通过(删测试同步)。
- `bun run build` + `tsc -b` 无错;`routeTree.gen.ts` 已重生成。
- 启动服务 AutoMigrate 无报错;三库(至少本地 SQLite + 生产 PG)跑通。
- 旧路由返回 404;保留接口(资源 CRUD、`/v1/*`、`/api/user/self`)正常。
- 生产部署后 `docker image prune -f`(CLAUDE.md 约定)。
## 7. 待你确认(删之前定)
1. **审批** `agent_approval.go` + `/approvals*`:新模型是否完全不需要 HM 侧审批?
2. **`AgentDeployment` 表**:是直接删,还是先保留作 agent 记录的过渡/迁移到 `heicode_agent`?
3. **`agent_role_template.go` / `AgentSKSnapshot`**:新模型「模板 agent」是否复用,决定删还是改造。
4. **`/api/agent/user/deployments*` 与 `agent_control_plane.go` 的共享 handler**:网页台/admin 是否还在用,逐个确认再摘。