更新 2026-06-01_heicode客户端相关定义.md
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -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 和展示层。
|
|
||||||
```
|
|
||||||
Reference in New Issue
Block a user