Skip to content

02 命令执行与消息发送链路

模块目标

理解 openclaw message ... 从 CLI 参数到实际向通道发送消息的完整链路。

步骤一:实现拆解(执行链路)

  1. 命令入口注册: src/cli/program/register.message.ts
  2. 命令处理函数: src/commands/message.ts
  3. 动作调度: src/infra/outbound/message-action-runner.ts
  4. 发送执行: src/infra/outbound/deliver.ts
  5. 通道适配器发送: src/channels/plugins/*

步骤二:细粒度讲解(小白版)

  1. register.message.ts 负责把一个大命令拆成小命令
  • send, poll, react, read, edit, delete
  • 每个子命令都走统一 helper,参数风格一致
  1. commands/message.ts 只做“入口协调”
  • 解析 action
  • 构造 outbound 依赖(把 CLI 依赖转成发送依赖)
  • runMessageAction(...)
  • 根据 --json 输出不同格式
  1. message-action-runner.ts 是核心编排层
  • 选择 channel(自动或显式)
  • 解析 target(用户、群组、channel id)
  • 处理 threadId 自动推断
  • 分发到 send/poll/broadcast/...
  • 支持跨上下文装饰(例如来源标记)
  1. deliver.ts 是发送执行引擎
  • 使用通道 outbound adapter(插件化)
  • 做文本分块(不同平台有不同长度限制)
  • 发送失败时支持 best-effort 处理
  • 写入发送队列,成功后 ack,失败标记 fail(便于恢复)
  1. 通道发送是“插件合同”
  • 每个 channel 插件实现 sendText/sendMedia 等能力
  • 核心层不需要知道 Discord/Telegram/Signal 的内部细节

用工程视角拆解 AI 智能体框架