6.2 KiB
| title | created | updated | type | tags | sources | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| WebSocket 网关 | 2026-04-13 | 2026-05-07 | entity |
|
|
WebSocket 网关
基于 Socket.IO 的实时通信层,包含两个命名空间:/netaclaw(Agent 对话)和 /crew(Crew 编排监控)。当前 /netaclaw 已经不仅承载 token 流,还承载 Session Tree 节点增量、leaf 切换、assistant 流式占位、工具执行状态、澄清、压缩、Todo、会话级子 Agent 批次等事件。
关键文件
| 文件 | 职责 |
|---|---|
gateway/server.ts |
Agent 对话 WebSocket,@WSController('/netaclaw') |
gateway/crew_server.ts |
Crew 编排 WebSocket,@WSController('/crew') |
gateway/session.ts |
会话与 Session Tree 管理服务(创建、snapshot、leaf 切换、节点写回) |
gateway/protocol.ts |
通信协议定义 |
Agent 对话协议(/netaclaw)
客户端 → 服务端
| 类型 | 数据 | 说明 |
|---|---|---|
chat |
{ sessionId, content, agentName?, agentId?, leafEntryId? } |
发送聊天消息,可指定从哪个 leaf/节点继续 |
ping |
{} |
心跳 |
set_thinking_level |
{ sessionId, level } |
切换思考等级 |
clarify_response |
{ sessionId, requestId, answer } |
回答澄清问题 |
compact |
{ sessionId, instructions? } |
手动触发上下文压缩 |
服务端 → 客户端
| 事件类型 | 说明 |
|---|---|
token |
LLM 文本增量 |
thinking |
完整思考内容 |
thinking_delta |
思考增量 |
thinking_done |
思考结束 |
tool_call |
兼容型工具调用事件 |
tool_result |
兼容型工具结果事件 |
tool_call_started |
工具开始执行,附带 runtime route / blocked reason / policySources |
tool_result_streamed |
工具结果流式投影 |
tool_call_completed |
工具最终完成态 |
process_event / 工具过程事件载荷 |
长耗时工具和 Skill 的阶段进度,详见 runtime-process-events |
skill_start / skill_end |
Skill 生命周期 |
progress |
过程进度 |
todo_update |
Todo 列表变更 |
token_update |
token 与上下文占用更新 |
clarify_request |
发起澄清问题 |
compaction_start |
压缩开始 |
compaction_done |
压缩完成 |
compaction_error |
压缩失败 |
subagent_run_started |
子 Agent 批次开始 |
subagent_event |
单个子 Agent 状态/结果事件 |
subagent_run_completed |
子 Agent 批次结束 |
session_entry_added |
Session Tree 新增节点 |
session_entry_updated |
Session Tree 节点更新 |
session_leaf_changed |
当前 leaf 切换 |
assistant_stream_start / assistant_stream_delta / assistant_stream_end |
助手消息占位与流式回填 |
done |
一轮推理结束 |
error |
异常 |
pong |
心跳响应 |
会话加载与 Session Tree 边界
当前对话恢复的主入口已经不是旧的线性消息视图,而是 Session Tree:
getSessionTreeSnapshot()返回完整 snapshot,并在返回前统一执行projectSubagentSnapshot()。switchSessionTreeLeaf()负责切换当前叶子并返回新的 snapshot。appendSubagentResultEntry()、finalizeAssistantEntry()等写回逻辑会统一补上projectSubagentEntry(),确保前端拿到的是已经投影过的节点。
旧的 netaclaw_message 历史加载仍存在,主要服务兼容逻辑与压缩流程;但前端 Agent Chat 主路径已经围绕 snapshot + 节点事件工作,而不是围绕 compacted/full 消息列表工作。
前端对接
| 前端文件 | 职责 |
|---|---|
agent/hooks/websocket.ts |
Agent 对话 Socket.IO 客户端 |
agent/hooks/crew-monitor.ts |
Crew 编排 Socket.IO 客户端 |
agent/store/chat.ts |
Pinia Store 维持 WS 连接和事件分发 |
agent/views/chat.vue |
对话页面 UI |
新增事件流
Clarify 流
clarify_request → 用户输入 → clarify_response
详见 clarify-tool。
压缩流
compact / auto-threshold → compaction_start → compaction_done|compaction_error
子 Agent 流
delegate_* → subagent_run_started → subagent_event* → subagent_run_completed
详见 subagent-session。
过程事件流
tool_call_started → process_event* → tool_result_streamed/tool_call_completed
详见 runtime-process-events。这条链路让 vehicle-damage-skill 等长耗时 compute-entry Skill 可以持续把抽帧、检测、定位、复核等阶段推给前端,而不是只在结束时返回结果。
Session Tree 流
chat(leafEntryId?) → session_entry_added / assistant_stream_* / session_entry_updated / session_leaf_changed
这条链路负责:
- 新建 user / assistant / subagent 节点。
- 在流式阶段保持 assistant 占位节点与文本增量同步。
- 在切换叶子或从旧节点继续发送时,让前端及时重建 active path。
- 让子 Agent 结果、tool metadata、projection diagnostics 通过节点更新自然回到历史视图。
Crew 编排协议(/crew 命名空间)
| 事件 | 方向 | 说明 |
|---|---|---|
crew:trigger |
客户端→服务端 | 触发集群运行 |
crew:control |
客户端→服务端 | 控制运行(stop/resume/pause/retry) |
crew:run:status |
服务端→客户端 | 运行状态变化 |
crew:task:status |
服务端→客户端 | 任务状态变化 |
crew:log |
服务端→客户端 | 日志消息 |
crew:escalation |
服务端→客户端 | 升级事件 |
相关页面
- netaclaw-module — 所属模块
- agent-runtime — 消息处理后调用运行时
- crew-orchestration — Crew 编排系统
- thinking-system — 思考事件协议
- todo-system — todo_update 事件
- clarify-tool — 澄清交互事件
- context-compaction — 压缩事件与历史视图
- subagent-session — 子 Agent 批次事件
- runtime-process-events — 工具和 Skill 过程事件
- session-tree-runtime — snapshot、leaf 和节点更新模型
- react-loop — 执行流程概念