跳转到内容

CLI channel

本页说明 CLI channel 的运行行为:何时被激活、如何命名 session、以及为什么它被刻意排除在 gateway 之外。

CLI 本身就是一个 channel,注册名为 cli。它实现了与 Telegram 或任何插件提供面相同的 Channel 接口 —— 但因为它独占运维者的终端,Bub 把它视为前台工具,而不是后台监听器。

  • Bub 已配置可用的模型 —— 参见 配置

bub chat 会基于 cli channel 打开一个 prompt-toolkit REPL:

uv run bub chat

默认值:

  • chat_id = local
  • session_id = cli_session(字面值,不是 cli:local

任意一个都可以用参数覆盖:

uv run bub chat --chat-id review --session-id cli:review

每行输入对应一条入站 ChannelMessage。Ctrl-D 退出,,quit,exit 也会干净退出。

bub run "..." 把单条消息送入框架,并打印每条出站:

uv run bub run "summarize CHANGELOG.md"

输出按出站分块:

[cli:local]
<rendered content>

默认 session id 是 <channel>:<chat_id>,所以无参数的 bub run "..." 写入 cli:local。如果要与 bub chat 会话共享状态,使用 --session-id

任何以 , 开头的输入都是 逗号命令:它走内置工具或 shell,而不进入模型。逗号命令会跳过 LLM 调用以及 channel 的防抖逻辑。

uv run bub run ",help"
uv run bub run ",fs.read path=README.md"
uv run bub run ",echo hello"   # 找不到的命令会回落到 shell

bub chat 内同样有效。Ctrl-X 切换 “shell mode”,会把 , 自动加在每行前。

bub gateway 监听所有已启用 channel。它的默认 —— --enable-channel 留空 —— 展开为 all,channel 管理器将其解释为”除 cli 外的全部已注册 channel”。否则 CLI channel 会抢占运维者用来运行 gateway 的终端。

要打开 REPL,使用 bub chat(它强制 enabled_channels=["cli"] 并启用 stream_output=True)。要只跑 Telegram,使用 bub gateway --enable-channel telegram

防抖把短时间内的多条入站消息合并为一次 turn。这对聊天平台合理 —— 用户一次会发很多短消息。CLI 是单线程的 —— 一次提示、一次输入、一次 turn —— 防抖只会徒增延迟。CliChannel.needs_debounceFalse,所以每行 REPL 输入即时分发。