fix(claude-code): 默认透传 /effort 命令 - #649
Conversation
首次 review(Claude)— 🟢 无阻塞,建议可合(待作者/维护者最终确认)PR 逻辑(白话)让飞书用户能在对话里直接用 Claude Code 原生 机制核查
前提坐实
关键取舍(认为都正确)
实测(独立 worktree,不触 live)
唯一可议(非阻塞,至多 P3)seed / relay(含 hermes)同为 Claude Code fork、同样支持 已请 @codex 复审(重点:① raw_input 投递 |
|
To use Codex here, create a Codex account and connect to github. |
补充实证:seed/relay 也原生支持
|
|
To use Codex here, create a Codex account and connect to github. |
双审收敛结论(Claude 首审 + Codex 复审)—— 🟢 无阻塞,建议可合;范围待维护者拍板两名 reviewer 已就本 PR(head 一致结论①
② 前提坐实:本机 ③ 风险刻画(两点修正,双审一致):
待维护者拍板:范围 A / B双审均发现既有缺口——seed/relay 是 Claude Code 同源 rebrand(
复审侧实测(Codex)
范围(A/B)与合并授权交维护者拍板。在明确确认前,两名 reviewer 均不合码。 |
原改动把 /effort 加进 claude-code adapter 的 defaultPassthroughCommands, 只对 Claude Code 生效。按维护者要求「全局放开、其它 CLI 早晚也支持」,改为 把 /effort 提升到全局 PASSTHROUGH_COMMANDS 集合,并把它从 adapter 层移除。 为什么放全局而非逐 adapter 加: - 一处改动,所有 CLI(含未来新增)自动继承 —— 前向兼容「早晚都支持」; 全局集合本就是「尽力透传」语义(/plugin /mcp /btw 也非所有 CLI 支持), CLI 认得就生效、认不得顶多回 unknown-command(不崩溃/不损坏/不泄露)。 - 冷启动语义更干净:isInitialSessionPassthrough 只认 adapter 层的 defaultPassthroughCommands,不认全局集合。/effort 是「调档」而非「开一段 工作」的命令,进全局天然不获得空 topic 冷启动能力(空话题单发 /effort 不会凭空拉起会话)。/goal 仍留在 adapter 层,保留其冷启动语义。 影响面: - 仅改 slash 路由的命令归属(adapter 层 → 全局集合);未动公共输入、 PTY/tmux 投递、会话恢复、sandbox 路径。 - Claude Code(2.1.220+)/ Seed / Relay 原生支持 /effort;Codex 亦有 reasoning effort。其它 CLI 无此命令时最坏为 unknown-command UX。 - 已知 pre-existing 非阻塞点:codex 若开 hybrid RPC 模式(默认关), raw_input 会被纯 viewer pane 静默吞掉 —— 但现有 /goal /btw /model 同样 走此路径,本改动只是把既有 gap 多扩一个命令,非新问题、不崩溃。 验证: - pnpm build 通过。 - pnpm vitest run test/command-handler.test.ts:209/209 通过。 - 测试更新:`enables /effort only for the Claude Code adapter` 重写为 `exposes /effort globally to every CLI`(app-1/app-2/无 bot 均含 /effort); `should contain expected slash commands` 加入 /effort。 - 变异测试:删除全局 /effort 后新测试如期失败,证断言有效。 Co-Authored-By: Riff <noreply@riff.dev>
已按维护者决策改为「全局放开」并推送(head
|
|
To use Codex here, create a Codex account and connect to github. |
采纳 codex 复审建议补强。原有 `/effort` 测试只断言「全局可见」
(resolvePassthroughCommands 各 CLI 都含 /effort),但锁不住本次核心语义:
/effort 必须留在全局 PASSTHROUGH_COMMANDS、绝不进 adapter 层的
defaultPassthroughCommands —— 因为冷启动能力(空 topic 里发命令能否拉起
新会话)只认 adapter 层(见 isInitialSessionPassthrough →
resolveAdapterDefaultPassthroughCommands),不认全局集合。
盲区:若日后有人误把 /effort 加回某 adapter 的 default,全局也有 /effort,
resolvePassthroughCommands 层的可见性断言仍会全绿,回归无人察觉。
新增 `keeps /effort OUT of the adapter default layer` 直接断言
resolveAdapterDefaultPassthroughCommands('app-1'/'app-2') 不含 /effort、
但含 /goal(/goal 是「开启目标工作」命令,刻意保留 adapter 层冷启动语义)。
验证(变异测试确认护栏有效):
- 把 /effort 误加回 claude-code adapter default 后:
· 旧「全局可见」测试仍全绿(证明它抓不住该回归);
· 新护栏测试如期失败(证明它精确锁住语义)。
- pnpm build 通过;pnpm vitest run test/command-handler.test.ts:210/210 通过。
Co-Authored-By: Riff <noreply@riff.dev>
补强推送:锁住「/effort 不进 adapter 层冷启动」的语义护栏(head →
|
|
To use Codex here, create a Codex account and connect to github. |
✅ 已合并 — merge commit
|
|
To use Codex here, create a Codex account and connect to github. |
问题
Claude Code 2.1.220 已原生支持
/effort,但 Botmux 的 Claude Code adapter 默认只透传/goal。用户从飞书发送/effort max时,daemon 因未命中透传集合而把它按普通聊天消息封装,Claude 最终看到的是<user_message>.../effort max,不会切换推理强度。改动
claude-codevariant 的defaultPassthroughCommands中加入/effort。/effort:影响面
/effort原样交给底层 CLI;是否接受具体 effort 值仍由 Claude Code 自己校验。验证
/effort与/effort max均生效,不再进入<user_message>;8/8 个旧 tmux/Claude 会话 PID 保持不变。pnpm vitest run test/command-handler.test.ts:209/209 通过。pnpm build:通过。codex-app-threads超时用例出现 1 个失败;单文件复跑最终 11/11 通过,改动路径的定向用例持续通过。