feat(session-manager): sender/mentions 搬进 hook envelope,用户输入只剩正文 - #998
feat(session-manager): sender/mentions 搬进 hook envelope,用户输入只剩正文#998liuhaoyang wants to merge 2 commits into
Conversation
deepcoldy#794 后续:把 <sender> 与 <mentions> 从 PTY 文本搬进 UserPromptSubmit hook 的 system-reminder,并去掉 <user_message> 外壳,让用户输入框 只剩消息正文。模型经 hook envelope 仍看得到发送者与提及,--mention 决策与 A2A 归因不受影响。 - follow-up hook 模式:envelope 从 reminder/whiteboard 扩到 reminder/whiteboard/sender/mentions;userMessage 块在 hook 模式下 输出纯正文 - opening(新话题第一条):此前完全没走 hook,现复用同一套 sidecar/claim 机制。buildNewTopicPrompt 重构为 blocks 结构 (inline 输出字节不变),buildNewTopicCliInput 在 hook 模式下把 whiteboard/sender/mentions 写进 sidecar、PTY 文本只剩正文 - 调用点传入权威 turnId + sessionBackendType:buildReservedInitialInput (主 opening 路径)、card-handler repo-selection、live-worker empty-start 首轮。raw 命令冷启动的 buffered follow-up 走 raw_input IPC 延迟发送,turnId 权威流不同,暂保持 inline 影响面与权衡: - 会话发现(/adopt):主防线是 collectBotmuxSessionIdentities 按 文件名(=sessionId)排除,不依赖 transcript 内容,已关闭会话不会 漏进 picker。transcript 标记正则仍匹配 inline 模式与旧会话 - insight 发送者归因:hook 注入内容不落 transcript,hook 模式会话的 sender/mentions 归因降级为「未知用户」(正文与 @ 仍在) - 标题提取:extractBotmuxLarkNativeSessionTitlePrompt 有 ?? rawContent 兜底,不受影响 - 超限/无条件时回退 inline,行为与历史完全一致 测试:prompt-hook-injection(含新增 opening 4 例)、prompt-builder、 card-handler-repo-select、resumable-session-discovery、bridge-turn-queue 等相关套件全绿
|
自动评审初步意见(最终以维护者审阅为准): 整体方向认可——把 sender/mentions 搬进 hook envelope、opening 复用同一套 sidecar/claim,inline 字节不变、fallback 纪律好。但有 3 处建议修改后再合: 1. CI 红(阻断): 2. opening + skill catalog 的指纹漂移建议补测:opening 的 sidecar 按「catalog 追加前」的 ptyText 写指纹,但 worker 的 3. 第 4 个 opening 调用点未接线: 另:除这 4 个 daemon 点外, |
…ng 调用点 P0:scheduler-silent-execute.test.ts 漏改的姊妹断言。该测试走 follow-up hook 路径(local pty + auto),原断言 PTY content 含 <user_message>, 与本 PR 核心改动(hook 模式剥掉外壳)冲突。镜像成 not.toContain。 P1:opening sidecar 指纹 vs skill catalog 追加。opening 是 CLI generation 首轮,prepareSessionSkillPrompt 会把 skill catalog 追加到 prompt 尾部, sidecar 按追加前的 ptyText 写指纹,hook 看到的是 ptyText+catalog,全量 指纹 miss、prefix 兜底(前 30 字符不变)救回。补「模拟 catalog 追加后仍能 claim」的测试锁住这条 fallback(消息需长于 30 字符)。 P2:补齐第 4 个 opening 调用点(daemon.ts worker-null refork opening, empty-start 丢 worker 后的首条真实用户 turn)。此前只接了 3 处,这条路径 保持 inline,UX 不一致。现传入 turnId(非 queued 时 = parsed.messageId, 与 forkWorker 权威 turnId 一致)+ sessionBackendType;queued dashboard 场景 turnId 是合成的,保持 inline。 同步更新 initial-user-turn-opening.test.ts:opening 现走 hook 模式, sidecar 是合法 opening envelope(claim 回含 sender、不含 follow-up reminder),PTY 内容只剩正文。HIGH-3(不写 speculative follow-up reminder sidecar)仍满足——opening 分支用 buildNewTopicCliInput,不跑 buildReforkCliInput。
|
自动评审初步意见(最终以维护者审阅为准)——针对新 commit 23a92b0 的复审: 三处意见都收到了,感谢及时修改。逐条确认(已在当前 master 上做 trial merge 实测:0 冲突、tsc 通过、相关测试套件全绿,CI 也已转绿):
整体方向认可,P0/P2 已闭合。以上为自动评审的初步意见,是否需要补充说明或如何取舍,最终以维护者审阅为准。 |
改了什么
#794 后续:把
<sender>与<mentions>从 PTY 文本搬进 UserPromptSubmit hook 的 system-reminder,并去掉<user_message>外壳,让用户输入框只剩消息正文。模型经 hook envelope 仍看得到发送者与提及,--mention决策与 A2A 归因不受影响。userMessage块在 hook 模式下输出纯正文buildNewTopicPrompt重构为 blocks 结构(inline 输出字节不变),buildNewTopicCliInput在 hook 模式下把 whiteboard/sender/mentions 写进 sidecar、PTY 文本只剩正文buildReservedInitialInput(主 opening 路径)、card-handler repo-selection、live-worker empty-start 首轮、worker-null refork opening(empty-start 丢 worker 后的首条真实 turn)。raw 命令冷启动的 buffered follow-up 走 raw_input IPC 延迟发送,turnId 权威流不同,暂保持 inline;queued dashboard 场景 turnId 是合成的,同样保持 inline为什么
用户反馈输入框里
<user_message>/<sender>/<mentions>标签是噪音。reminder/whiteboard 已在 #794 搬进 hook,这次把剩余的 per-turn 归因元数据也搬进去,输入框只剩正文。影响面与权衡
collectBotmuxSessionIdentities()按文件名(=sessionId)排除,不依赖 transcript 内容,已关闭会话不会漏进 picker。transcript 标记正则仍匹配 inline 模式与旧会话,作为跨机/丢库的兜底prepareSessionSkillPrompt会把 skill catalog 追加到 prompt 尾部。sidecar 按「catalog 追加前」的 ptyText 写指纹,hook 看到的是 ptyText+catalog → 全量指纹失配 → 靠 prefix 兜底(前 30 归一字符)。当 ptyText 归一化后 ≥30 字符时 prefix 不受尾部追加影响,可靠救回;当正文 <30 字符且配了 priority skills 时,prefix 会被 catalog 头污染,该 opening 轮的 sender/mentions/whiteboard 静默丢失(fail-open,正文仍在,模型只是看不到这轮的发送者/提及)。可达条件窄(envelopeInjection=auto+ 配了 priority skills + 正文很短),属 latent。根治(hook 端剥掉尾部 catalog 再算指纹)或加 guard 留 follow-upextractBotmuxLarkNativeSessionTitlePrompt有?? rawContent兜底,不受影响envelopeInjection=auto+ hook 已装 时生效测试
pnpm build通过prompt-hook-injection(含 opening 5 例:hook 模式 PTY 只剩正文 / 缺 turnId 回退 inline / off 完全 inline / envelope 为空回退 inline / skill catalog 追加后 prefix 兜底仍能 claim)prompt-builder、card-handler-repo-select、resumable-session-discovery、bridge-turn-queue、session-title、prompt-context-store、ipc-prompt-ctx-claim-route、scheduler-silent-execute、initial-user-turn-opening等相关套件全绿(300+ 例)