内部 CMDC.Event.t() → 对外 JSON schema 翻译层。
字段命名统一 camelCase。SDK 和前端消费此格式。
对外事件列表
会话生命周期
| 事件类型 | 说明 |
|---|---|
agent_start | Agent 开始处理 |
agent_end | 本轮完成,含 tokenUsage |
agent_abort | Agent 被中止 |
prompt_received | 收到用户 prompt |
流式响应
| 事件类型 | 说明 |
|---|---|
message_start | LLM 开始生成 |
message_delta | 流式 token 片段 |
thinking_start | 思考链开始 |
thinking_delta | 思考链 token |
工具
| 事件类型 | 说明 |
|---|---|
tool_calls | 本轮工具调用数 |
tool_execution_start | 工具开始执行 |
tool_execution_end | 工具执行完成 |
tool_call_unknown | 未知工具被调用 |
tool_attached | (v0.2 RFC C9) 运行时挂载 |
tool_detached | (v0.2 RFC C9) 运行时卸载 |
HITL
| 事件类型 | 说明 |
|---|---|
approval_required | 等待人类审批 |
approval_resolved | 审批已决定 |
ask_user | Agent 向用户提问 |
v0.2 控制面
| 事件类型 | 说明 |
|---|---|
model_switched | (RFC C8) 模型切换 |
memory_flushed | (Phase 10C) Memory 落盘 |
plugin_event | (RFC D14) 通用插件事件包络 |
steering | (Phase 10A) 中段注入 |
错误
| 事件类型 | 说明 |
|---|---|
error | 运行时错误 |
Summary
Functions
@spec heartbeat() :: iodata()
心跳 SSE 注释行,保持连接。
将翻译后的事件编码为 SSE 格式字符串(含 event: 和 data: 行)。
@spec translate(CMDC.Event.t()) :: {:ok, String.t(), map()} | :skip
将内部事件翻译为对外 JSON map。
返回 {:ok, event_type, json_map} 或 :skip(不对外暴露的事件)。