Skip to content

运行时与提供方 ​

CodeLark 把“使用哪个 AI 工具”和“如何驱动它”拆成两层。

  • 运行时:当前会话使用 Codex、Claude Code 还是 Kimi Code。
  • 提供方:当前运行时通过 SDK、pty 或 tmux 运行。

日常 IM 操作流程见 会话、Provider 与配置工作流。本文主要说明 provider 能力边界和实现模块。

能力矩阵 ​

运行时提供方适用场景输出路径
Codexsdk结构化事件、工具调用、直接 IM turn原生 SDK stream
Codexpty复用 Codex TUI 行为,观察真实终端JSONL mirror + pty screen
Codextmux需要可 attach 的长会话tmux screen + JSONL mirror
Claude Codetmux默认路径;需要可 attach 的 Claude Code TUI 长会话tmux screen + Claude JSONL mirror
Claude Codepty使用本机 claude 或 ccr code TUIClaude JSONL mirror + pty screen
Claude Codesdk使用 Claude Agent SDKSDK message stream
Kimi Codetmux使用本机 Kimi Code TUI 长会话;发送后自动补 Ctrl-S steertmux screen + Kimi wire.jsonl mirror

补充说明:

  • Claude Code 运行时默认使用 tmux 提供方,便于从 IM 和本机终端同时观察/接管 Claude Code TUI;可通过 /provider pty 或 /provider sdk 为当前会话切换。
  • Codex 运行时的默认提供方由全局配置和平台探测共同决定;需要可 attach 的长期终端会话时,优先选择 tmux。
  • Kimi Code 当前只支持 tmux 提供方。fresh session 只启动一次 kimi -y,等待 TUI 同时出现真实 Session:、输入框与 context footer 后保存 CLI 生成的 session id;只有恢复已绑定 session 才使用 kimi -r <session> -y。首条输入不以 wire.jsonl 已存在为前置条件:文件较早出现时从尾部续读,较晚出现时先提交 prompt,再从头读取首轮事件。输出由 Kimi wire mirror 同步;状态区会展示截断后的「当前思考」。

用户配置入口 ​

  • /runtime codex|claude|kimi:切换当前会话使用的运行时。
  • /provider 或 /p:查看或切换当前运行时的提供方。
  • /model:查看或切换当前会话模型。
  • /cd <path>:修改当前会话工作目录。
  • /set:查看或修改全局默认值。
  • Web 工作台配置页:编辑全局默认值。
  • Web 工作台会话配置弹窗:编辑单个会话的覆盖值。

Claude 的 executable 影响 tmux 和 pty 提供方;Claude SDK 提供方不走本机 claude / ccr code TUI。

设计模块 ​

主题模块
提供方路由src/runtime/codex/routing-provider.ts
Codex SDKsrc/runtime/codex/provider.ts
Codex ptysrc/runtime/codex/pty-provider.ts
Codex tmuxsrc/runtime/codex/tmux-provider.ts
Claude tmuxsrc/runtime/claude/tmux-provider.ts
Kimi tmuxsrc/runtime/kimi/tmux-provider.ts
tmux session 生命周期src/bridge/tmux/runtime.ts
Claude ptysrc/runtime/claude/pty-provider.ts
Claude SDKsrc/runtime/claude/sdk-provider.ts
Claude Code Routersrc/runtime/claude/code-router.ts
会话运行时设置src/domain/session-runtime.ts
交互 turnsrc/bridge/turn/interactive/runner.ts

镜像与 SDK 输出差异 ​

SDK 提供方通常直接把结构化事件交给 IM turn。pty / tmux 提供方更接近真实终端使用,会依赖本地 JSONL mirror 把最终输出同步到 IM。

tmux Provider 的普通文本会先转发到 tmux 中的当前 runtime TUI。Codex tmux 如需自动预创建 codex_thread_id 或恢复缺失的 tmux session,启动进度会更新到同一张 Provider 卡片;Claude tmux 会启动或复用 Claude Code TUI,并通过 Claude JSONL mirror 同步输出;Kimi tmux 会启动或复用 Kimi Code TUI,通过 Kimi wire.jsonl mirror 同步输出,并在普通文本发送后自动补 Ctrl-S 触发 steer。显式发送 /p tmux 时,Codex 和 Claude 通过 shared tmux runtime 生命周期入口创建或重建 provider-owned session;Kimi 由 Kimi provider 负责启动、解析 session id 和注入输入。shared runtime 会在 ready 检测和屏幕查看时报告 Codex/Claude selection prompt;/clear 和 /t archive 会 best-effort 清理记录在 runtime state 中的 tmux provider session。普通输入只有成功提交到 tmux 后,bridge 才异步给原用户消息添加常亮的 Get(“了解”)reaction,表示“已投递”;slash/控制命令进入命令处理时也异步添加常亮 Get,表示“已收到”。两条路径都不表示模型已经响应,不删除 reaction,也不等待飞书 ACK。

相关模块: