更新 2026-06-01_heicode客户端相关定义.md

This commit is contained in:
2026-06-01 09:44:20 +00:00
parent ce744b0278
commit f542017ebc
2 changed files with 2807 additions and 338 deletions
File diff suppressed because it is too large Load Diff
-338
View File
@@ -1,338 +0,0 @@
**一、系统分工**
```text
Heicode 客户端
= 主 Agent / 用户交互层
只负责发起任务、持续会话、展示状态、查看/下载产物
heicode-mananger
= 控制面 / 路由器 / 唯一裁判
负责用户权限、任务记录、Runtime 路由、状态裁决、产物归档、审计
agent_management
= Sub Agile Runtime
所有 Sub / Sub Agile / 普通 sub 模式都走这里
HeiCode-Swarm
= Swarm Runtime
所有 Swarm / 蜂群模式都走这里
```
最重要的边界:
```text
客户端永远只调用 heicode-mananger
客户端不直连 agent_management
客户端不直连 HeiCode-Swarm
```
**二、模式路由**
Manager 不能再根据 `/api/swarms` 判断是不是 Swarm,因为 `agent_management` 里 `/api/swarms` 只是普通 sub 的 Runtime 兼容入口。
应该按任务模式路由:
```text
mode = sub_agile / sub / agile
-> agent_management
mode = swarm
-> HeiCode-Swarm
```
建议 Manager 配置:
```env
SUB_RUNTIME_BASE_URL=http://agent-management
SUB_RUNTIME_CREATE_PATH=/api/swarms
SWARM_RUNTIME_BASE_URL=http://heicode-swarm
SWARM_RUNTIME_CREATE_PATH=/api/swarms
```
也就是说,两个 Runtime 都可以有 `/api/swarms`,但 Manager 必须用 `mode` 决定请求哪个服务。
**三、统一请求结构**
客户端发给 Manager 时,必须明确模式和主 Agent 身份。
Sub Agile:
```json
{
"mode": "sub_agile",
"sub_mode": "agile",
"client_role": "main_agent",
"task_id": "task_xxx",
"conversation_id": "conv_xxx"
}
```
Swarm:
```json
{
"mode": "swarm",
"client_role": "main_agent",
"task_id": "task_xxx",
"conversation_id": "conv_xxx"
}
```
Manager 转发 Runtime 时,补齐:
```json
{
"orchestration_plan": {
"objective": "用户任务",
"sub_mode": "agile",
"user_context": {},
"billing_context": {},
"agent_runtime": {},
"agents": [],
"metadata": {
"mode": "sub_agile",
"client_role": "main_agent",
"manager_deployment_id": "dep_xxx",
"correlation_id": "task_xxx_xxx"
}
},
"callback": {
"url": "https://code.xinghanlab.com/api/agnet/callbacks/swarm-events",
"signing_secret_ref": "azkv://..."
}
}
```
**四、统一状态裁决**
`heicodedebug` 里反复强调:Runtime 只输出“结构化真相”,Manager 才是唯一裁判。
Runtime 不应该说“我 completed 所以就是完成”。它应该上报:
```json
{
"runtime_status": "completed",
"deliverable": {
"artifact_type": "code_patch",
"has_deliverable": true,
"summary_only": false,
"files_modified": ["src/app.ts"],
"has_diff": true,
"commit_sha": "",
"artifact_ids": ["art_xxx"]
},
"usage": {
"model_tokens": 2470,
"model_cost_usd": 0.03
}
}
```
Manager 再判断最终用户看到的状态:
```text
有有效产物 -> completed
只有总结,没有实际产物 -> completed_without_deliverable / needs_codegen
Runtime 失败 -> failed
用户停止 -> stopped
等待审批 -> waiting_approval
```
这样客户端就不会再自己用正则判断“这是不是产物”。
**五、统一产物协议**
无论 Sub Agile 还是 Swarm,都统一走 Manager 的产物接口:
```text
GET /api/agnet/user/deployments/{deployment_id}/artifacts
GET /api/agnet/user/deployments/{deployment_id}/artifacts/{artifact_id}/content
```
Runtime 回调 `artifact.created` 只传摘要和 URI,不把完整内容塞进对话框。
Artifact 标准字段:
```json
{
"artifact_id": "art_xxx",
"artifact_type": "code_patch",
"title": "Backend task delivery",
"summary": "摘要",
"uri": "runtime://swm_xxx/artifacts/art_xxx",
"mime_type": "text/plain",
"size_bytes": 12345,
"stage": "development",
"checkpoint": "artifact_ready",
"metadata": {
"runtime_deployment_id": "swm_xxx",
"agent_role": "backend",
"content_hash": "sha256:xxx",
"download_path": "/api/swarms/swm_xxx/artifacts/art_xxx/content"
}
}
```
客户端只展示:
- 产物列表
- 查看详情
- 下载
不要再把完整产物重复塞进聊天气泡和侧边栏。
**六、事件回调统一**
统一回调入口可以继续用现有的:
```text
POST /api/agnet/callbacks/swarm-events
```
虽然名字里有 `swarm-events`,但它可以作为 Runtime 统一事件入口。后续可以加别名:
```text
POST /api/agnet/callbacks/runtime-events
```
标准事件分两层。
Sub Agile 必须支持:
```text
deployment.status_changed
phase.changed
timeline.updated
agent.started
agent.completed
agent.failed
task.completed
task.failed
task.blocked
artifact.created
budget.alert
approval.requested
```
Swarm 在此基础上增加:
```text
task.created
task.claimed
task.running
task.heartbeat
task.retried
task.released
handoff.requested
handoff.completed
```
**七、客户端展示规则**
客户端只按 `mode` 展示不同 UI:
Sub Agile:
```text
阶段
角色
时间线
产物
审批
用量
```
Swarm:
```text
阶段
任务图
Agent 节点
handoff
heartbeat
blocked/retry
产物
审批
用量
```
客户端不要展示:
- 部署草稿 JSON
- Runtime 内部 payload
- `swarm_id` / `runtime_deployment_id`
- callback 原始内容
- Runtime 内部诊断给普通用户
这些可以放到开发者诊断模式。
**八、各项目需要做什么**
`heicode-mananger`:
```text
1. 按 mode 路由 Runtime
2. 成为唯一状态裁判
3. 统一 artifact schema
4. 统一 completed 判定
5. 保存 deployment_id / runtime_deployment_id / runtime_kind
6. 提供统一 artifacts/content 接口
7. 不再依赖文本正则判断产物有效性
```
`agent_management`:
```text
1. 作为所有 Sub Agile 的 Runtime
2. 接收 Manager 的普通 sub plan
3. 生成 artifact.created
4. 上报结构化 deliverable 字段
5. 支持 content 下载路径
6. 不把 summary-only 当成完整代码交付
```
`HeiCode-Swarm`:
```text
1. 只负责真正 Swarm 模式
2. 提供 task graph / handoff / heartbeat / retry
3. 也遵守统一 artifact / callback / usage schema
4. 禁止绕过 Manager 的旁路调用成为生产主链路
```
`heicode-winos-release / heicode-macos-release`:
```text
1. 只调用 Manager
2. 最近任务保存 mode / task_id / deployment_id / conversation_id
3. Sub Agile 和 Swarm 显示分开
4. 产物只从 Manager artifact content 接口查看和下载
5. 不再本地裁决 completed 是否真实完成
```
**九、推荐落地顺序**
```text
第一步:定 mode 路由
Sub Agile -> agent_management
Swarm -> HeiCode-Swarm
第二步:定状态机
completed / failed / stopped / waiting_approval / completed_without_deliverable / needs_codegen
第三步:定 artifact schema
所有 Runtime 都按同一结构回调
第四步:Manager 做唯一裁判
Runtime 上报事实,Manager 输出结论
第五步:客户端只消费 Manager 结论
不再本地正则判断产物和完成状态
```
最终一句话方案:
```text
Sub Agile 和 Swarm 不合并 Runtime,只统一 Manager 对外协议;
agent_management 是 Sub Agile 执行层,HeiCode-Swarm 是 Swarm 执行层;
Manager 是唯一裁判,客户端是主 Agent 和展示层。
```