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>
This commit is contained in:
2026-06-03 21:37:07 +08:00
co-authored by Claude Opus 4.8
parent c062b67bd9
commit b40a29102e
2 changed files with 38 additions and 11 deletions
+34 -9
View File
@@ -7,6 +7,25 @@
---
## 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,保守做法是**留列只停写**)。
@@ -21,7 +40,7 @@
|---|---|---|
| 🗑️ | `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 行) | 旧客户端部署控制面(logs/metrics/events/artifacts/timeline/sk-snapshots/deployment-draft)。新模型客户端不经 HM 看任务 → **建议删**;确认无网页台依赖后摘除 |
| ✂️ | `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,不在本删除文档范围。
@@ -41,14 +60,15 @@
| `controller/heicode_cloud_deploy.go` | `HeicodeCreateDeployment`/`HeicodeListDeployments`/`HeicodeDeploymentTargets`(旧代部署控制面) |
| 对应 `*_test.go` | `agent_deliverable_secret_test.go` 等针对上述逻辑的测试 |
**裁剪保留 ✂️**
**保留骨架 + 外科式删旧分支 ✂️**(详见 §0.0;这些是新模型复用的底座,**不可整删**)
| 文件 | 改动 |
|---|---|
| `controller/agent_runtime_client.go` | 删 `withDisplayStatus` 裁决逻辑、`heicodeClientMode`、display_status 相关;**保留** runtime 配置/健康探测、并新增 ListTemplates/StartAgent/StopAgent(新模型用) |
| `controller/agent_task_bridge.go` | `resolveResourceBindingIntoGrant`/`normalizeTaskDraftResourceGrants` 由"任务注入 grant"**改造**为"agent 启动拼 env(非密 + 解 KV 密钥)" |
| `controller/agent_callback.go` | `AgentReceiveRuntimeEventCallback` 收缩为**只收 agent 生命周期/状态**(started/stopped/unhealthy),删 work 事件流/artifact/phase 聚合 |
| `controller/agent_control_plane.go` | 删 `HeicodeCreateDeployment`/`HeicodeListDeployments` 引用、`agentDeploymentRecord.Mode`、display_status 投影;评估 `AgentListUserDeployments`/`AgentGetUserDeployment` 是否仍被网页台/admin 用(⚠️ 共享,逐个确认) |
| 文件 | 保留(新模型复用) | 删/改的旧分支 |
|---|---|---|
| `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,删路由后编译失败 → 同步删/改 |
**评估 ⚠️**
@@ -70,7 +90,12 @@
| `AgentCloudDeployment` | `agent_cloud_deployment.go` | 删(旧代部署) |
| `AgentSKSnapshot` | `agent_sk_snapshot.go` | ⚠️ 评估(SK 快照是否其它处用) |
| `AgentCallbackEvent` | `agent_callback.go`(model) | ✂️ 裁剪:若回调收缩,事件表可瘦身或保留生命周期事件 |
| `AgentDeployment` / `agent_deployments` | `agent_deployment.go` | ⚠️ **核心旧表**:被新 `heicode_agent` 取代。删之前确认 `correlation_id` 等无外部依赖;可先停写、数据迁移后再 DropTable |
**保留并扩展 ✅(修正:不删)**
| 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`)。
@@ -95,9 +95,11 @@
- 模板选择 + 资源勾选 + 「部署」按钮。
- agent 列表页:状态、子域名、绑定资源、停止/删除操作。
**数据模型(新增表 `heicode_agent`,跨 SQLite/MySQL/PG,GORM,TEXT 存 JSON)**
- `id / user_id / template_id / agent_runtime_id(AM侧) / subdomain / access_token / binding_ids(JSON) / status / created_at / updated_at`。
**数据模型(建议复用现有 `AgentDeployment` 表扩字段,而非新建——见 teardown 文档 §0.0)**
- 复用 `agent_deployments`(`agent_deployment.go`),**扩字段**:`template_id / subdomain / access_token / binding_ids(JSON)`;已有 `DeploymentID/UserID/RuntimeDeploymentID/Status` 等正好可当 agent 记录。
- 旧任务态字段(`SubMode/Phase/PlanJSON/AgentInstancesJSON/PayloadJSON` 等)停写、留列。
- `access_token` HM **存一份**(换设备登录后客户端重新拉列表即可拿回)。
- 跨 SQLite/MySQL/PG,GORM `AutoMigrate` 加列,TEXT 存 JSON。
---