Inkstone(砚)· 增量 1 · 转录全解剖 面 状态 批注列 标注 状态只作用于第四节 · 等待批准时 Enter 盖印允许 · Esc 拒绝

一 · 一轮的解剖

01–11 · 自上而下 · 用户消息是唯一有卡底的正文
我14:02分支 2 / 3
把作曲器运行中的 Enter 改成排队,⌘Enter 保持介入;补回归测试,别动侧栏。
composer-dock.test.tsx截图 2026-09-03.png@ AGENTS.md §3.3
2 / 3· 分叉的提问 · 运行中禁用切换 · 双击进入就地编辑
准备中
正在装配 · 收集本轮 Host 注入…
就绪 · 点击展开
本轮装配内容 · 约 12.4k tokens(估算)· 系统提示 · AGENTS.md · composer-card.tsx · 技能 ×1

以下是 Host 装配层收集的内容,不是模型最终收到的请求。

  • 系统提示Host 装配约 3.1k
  • AGENTS.md项目约 4.6k
  • apps/desktop/src/composer-card.tsx本地文件约 3.9k
  • 技能 · karpathy-guidelinesHost 装配约 0.6k
  • web_fetch · docs.claude.com外部网页(不可信)约 0.2k
CSonnet 4.614:033.1k · 41s
已工作 41s · 5 个工具 · 2 个文件 · 1 次失败
其余两态 · 图标即状态 · 灯 = 运行 · 朱方 = 等你
正在运行 · 第 5 个工具 · pnpm typecheck
等待你批准 · 写入 composer-run-actions.tsx
Enter 在运行中应进 SteerQueue 而不是 transcript;⌘Enter 仍走 triggerSteer。先读 composer-card.tsx 第 5 段的键盘分发,再改 handleSend 的 streaming 分支。
readapps/desktop/src/composer-card.tsx1.2k 行 · 40ms
探索了 3 个文件· 2 次搜索6 工具 · 1.8s
grep"queued-turn"7 处 · 3 文件
已思考 3 秒思考
readapps/desktop/src/steer-queue-model.ts88 行
greptriggerSteer4 处
readapps/desktop/src/composer-run-actions.tsx212 行
bashpnpm vitest composer-dock1 失败 · 6.2s
FAIL composer-dock.test.tsx › queues Enter while streaming expected "steer" to be "queue" at composer-dock.test.tsx:148:7
write_fileapps/desktop/src/composer-run-actions.tsx+48 −12允
composer-run-actions.tsx+48 −12·@@ 85,7 @@
@@ -85,7 +85,9 @@ resolvePrimaryAction(input)
85 if (streaming) {
86- return { kind: 'pause', label: t.pause };
86+ if (draft.trim()) return { kind: 'queue', label: t.queueFollowUp };
87+ return { kind: 'pause', label: t.pause };
88 }
2 处修改 · 已写入磁盘 · 拒绝 = 回滚此文件
bashpnpm typecheck4.1s

已改为排队语义

运行中的 Enter 现在走 handleSend → session/queued-turn-submit,消息进 SteerQueue 而不进 transcript;⌘Enter 仍触发 triggerSteer。IME 组合期间两者都被抑制。

回归测试在 composer-dock.test.tsx 新增「queues Enter and steers Command+Enter while streaming」;composer-run-actions.test.tsx 覆盖 Pause / 排队发送的 aria 文案。没有触碰侧栏。

2 个文件已更改+48 −12composer-run-actions.tsxcomposer-dock.test.tsx
报告就绪默认 · anthropic/claude-sonnet-4-6 · 14:04
本轮把作曲器运行中的 Enter 从「介入」改为「排队」:handleSend 在 streaming 时转发 session/queued-turn-submit,⌘Enter 保留 triggerSteer。新增 2 条回归测试并全部通过;typecheck 无回归。未触碰侧栏与 Host 契约。
1.2k tokens · 9s
其余状态
报告生成中默认 · claude-sonnet-4-66s
报告错误provider timeout · 30s
1 个分叉 · 3.1k tokens · 41s
我14:03介入
别动 permission-bar.tsx,权限条本轮不合并。
正在应用到下一次回复
落定 · 左线转松
别动 permission-bar.tsx,权限条本轮不合并。
已应用到当前任务14:03
其余状态 mono · 等待当前步骤完成 · 当前任务已结束,未应用 · 已取消 · 是否应用无法确认 · 未能应用
我14:02编辑中
Enter 发送新版本 · ⇧Enter 换行 · Esc 取消 · 将作为分支 3 / 3

二 · 卡片目录

12–20 · 同级并列 · 禁止卡中卡
CSonnet 4.614:06
计划 · 作曲器排队语义执行中2 / 4
读取键盘分发与 SteerQueue 模型composer-card.tsx §5 · steer-queue-model.ts · 验收:列出 Enter / ⌘Enter 分支
改 handleSend 的 streaming 分支为 queued-turn验收:pnpm vitest composer-dock 通过并行 A
补回归测试与 aria 文案composer-dock.test.tsx · composer-run-actions.test.tsx并行 A
typecheck + 更新 ADR 0045 说明验收:pnpm typecheck 绿依赖 2 3
2 / 4 完成 · 1 跳过 · 已运行 1m 12s
选择执行方式

怎么执行这个计划?

作曲器排队语义 · 4 步 · 2 步可并行
A / B 直接按键 · 出现在作曲器上方 · 安全提示占位时让位 · Conversation 会话不显示
reviewer · 审查作曲器改动reviewerCSonnet 4.6已完成 · 38s · 2.4k
检查 handleSend 的 streaming 分支与 SteerQueue 契约;确认 ⌘Enter 仍走 triggerSteer;建议补 IME 组合期测试。
只读子会话 · 12 条 · 只观察,不导航
readapps/desktop/src/composer-card.tsx1.2k 行
greptriggerSteer4 处
bashpnpm vitest composer-dock --run46 通过
结论:语义正确。isComposingRef 在 Enter 分支被检查,但 ⌘Enter 分支绕过 IME 保护是有意的(第 5 段注释)。建议新增「组合期间 Enter 不排队」用例。
其余状态 · 名称青色 · 状态 mono 中文
tester · 补 IME 用例tester运行中 · 12s
scout · 扫描 Host 契约scout失败 · 超时 120s
候选方案2 个工作树 · 采用后合并到当前分支
coder-A · 排队走 SteerQueue3 个文件+62 −14
coder-B · 排队走 pendingIntervention2 个文件+40 −31
GGPT-5.414:07
正在生成图片gpt-image-1 · 1024×1024 · 「砚台上的一盏铜灯,宣纸背景」
图片生成完成gpt-image-1 · 1024×1024 · 8.4s · ~/.piwin/media/gen/0192a…png
视频生成失败veo-3 · 生成接口返回错误,可以重试 · 429 rate_limited
生成了 3 张知识卡片· 牌组 piwin/composer · 点击翻转1 / 3
问
作曲器运行中按 Enter 与 ⌘Enter 分别触发什么?
composerkeyboardADR 0045
点击翻转
答
Enter → 排队为后续轮(SteerQueue,不进 transcript);⌘Enter → 介入当前运行(triggerSteer)。IME 组合期间 Enter 被抑制。
Leitner 盒 1 · 下次 明天
评分后进入下一张 · 1–4 直接按键
CSonnet 4.614:08
正在整理上下文12s
落定 · 同一节点,不换横幅
上下文已整理耗时 3.2s · Tokens 128k → 41k
摘要:用户要求把作曲器运行中的 Enter 改为排队、⌘Enter 保留介入;已读 composer-card.tsx §5、steer-queue-model.ts;决定 D1 走 session/queued-turn-submit,D2 保留 triggerSteer,D3 不动权限条。保留 2 个 @ 引用与 AGENTS.md §3.3。
供应商拒绝了请求auth14:08 · 第 2 次
401 authentication_error: invalid x-api-key provider=anthropic model=claude-sonnet-4-6 request_id=req_01J8…
类别决定第二个动作 · auth → 配置密钥 · quota → 切换模型 · network → 仅重试

三 · Markdown 与 Artifact

21–23 · 代码块进文件里 · 拦截用赭不用绛
CSonnet 4.614:10

键盘分发对照

按键空闲运行中编辑队列项
Enter发送排队为后续轮保存修改
⌘Enter发送介入当前运行保存修改
⇧Enter换行(三态相同)
Esc关菜单关菜单退出编辑,恢复草稿
IME 组合期间(isComposing 或 compositionend 后 100ms 内)Enter 不触发任何发送——这是 CJK 输入的硬契约,不随主题变化。
  • 改 handleSend 的 streaming 分支
  • 补两条回归测试
  • 更新 ADR 0045 的键盘说明
composer-card.tsx·TypeScript·L612–618
612if (event.key === 'Enter' && !event.shiftKey && !isRecentlyComposing) {
613 event.preventDefault();
614 // streaming 时 handleSend 自己会转成 queued-turn
615 if (canKeyboardSend || reserved) triggerSend();
616}

路径成芯片:apps/desktop/src/steer-queue.tsx;glob 不成芯片:apps/desktop/src/**/*.test.tsx。

Mermaid·flowchart LR
Enter streaming? queued-turn-submit session/send 是否

去抖窗口按组合结束时刻取值[2]:

send(t) = ¬composing ∧ (t − tcompositionEnd) ≥ 100 ms(1)
  1. 1Cursor 与 Claude Code 均为排队派;Zed 在 0.190 之后改为排队。↩
  2. 2100 ms 来自 WebKit 在 compositionend 之后仍可能派发一次 keydown 的经验值,见 lastCompositionEndRef。↩
键盘分发速查INLINE
键盘分发速查源码
<style>
  .grid { display:grid; gap:8px;
    grid-template-columns:repeat(3,1fr) }
</style>
<div class="grid">…</div>
排队 / 介入 演示CANVAS
交互式原型在检视器「画布」页签渲染;转录里只保留这条启动条与源码入口。画布本体见增量 4。
第三方图表已拦截
按 Artifact 策略未渲染。源码仍可查看与复制;策略在 设置 › Agent › Artifact。
外链脚本 ×1cdn.jsdelivr.net38 KB

四 · 实时

24–26 · 顶栏「状态」在此生效 · 等待批准时 Enter / Esc
CSonnet 4.614:12运行中等待批准
已工作 12s · 3 个工具 · 1 个文件 正在运行 · 第 3 个工具 · pnpm vitest composer-run-actions --run 等待你批准 · 命令 git push --force-with-lease
write_fileapps/desktop/src/composer-run-actions.test.tsx+31允
需要你批准 · 命令
bash git push --force-with-lease origin feat/composer-queue
工作目录 · ~/Projects/piwin风险 · 破坏性命令模式规则 · ask-all
Enter 盖印允许一次 · Esc 拒绝 · 允 · 本会话 · 允 · 项目
bashpnpm vitest composer-run-actions --run12 通过 · 3.9s4s待
正在跑回归测试…技能 · karpathy-guidelines00:16

测试全部通过,正在确认 aria 文案与 Pause 状态的快照没有回归

回归测试通过,aria 文案与 Pause 快照均无变化。切到「运行中」可看定位器、流式光标与工具行「下描」进入。

等待批准时正文停笔;只有门在等你。