2026-05-20 21:39:12 +08:00

6.2 KiB
Raw Permalink Blame History

title created updated type tags sources
WebSocket 网关 2026-04-13 2026-05-07 entity
gateway
websocket
api
packages/backend/src/modules/netaclaw/gateway/
packages/frontend/src/modules/agent/store/chat.ts
packages/frontend/src/modules/agent/types/protocol.ts

WebSocket 网关

基于 Socket.IO 的实时通信层,包含两个命名空间:/netaclawAgent 对话)和 /crewCrew 编排监控)。当前 /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

详见 context-compaction

子 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 服务端→客户端 升级事件

相关页面