Skip to content

fix(queue): 立即发送追加到当前轮并保证消息落盘顺序 - #651

Closed
zszz3 wants to merge 2 commits into
vastsa:mainfrom
zszz3:codex/fix-queued-message-597
Closed

zszz3 wants to merge 2 commits into
vastsa:mainfrom
zszz3:codex/fix-queued-message-597

Conversation

@zszz3

@zszz3 zszz3 commented Sep 19, 2026

Copy link
Copy Markdown
Contributor

问题与行为

运行中点击“立即发送”会先请求正常停止,纠正指令因此可能等到子代理结束才被处理;落盘失败或积压时,上一轮回复也可能晚于下一条用户消息写入。

  • 将提升优先级的消息按点击顺序追加到当前轮;TaskWait 收到新指令后提前返回,子代理继续执行。拒绝追加的消息保留在队列,结束后正常派发。
  • 结束当前轮、启动下一轮前等待该会话的消息落盘。超过 1024 条时保留恢复文件中的消息并告警,避免丢弃已生成的回复。
  • 正常停止请求在重试、恢复和子代理等待期间保持有效,阻止额外模型请求;立即取消仍优先。

验证

候选提交:fa1442797d0e0fc23a4dbb8015164e7487568875
基线:7c0710fc38437725bd432d86ab4be05159ebd522(准备候选时最新 upstream/main)。

  • pnpm build:js、桌面 typecheck、pnpm lint 通过;持久化初始化移出主入口后,复跑桌面 build/typecheck/lint、2351 项桌面测试和跨进程 E2E 通过。
  • ARCHITECTURE_BASE=7c0710fc38437725bd432d86ab4be05159ebd522 node scripts/check-architecture.mjs 通过,主入口 1499/1500 行。
  • Agent Host:47 项通过;Agent Runtime:625 项通过(--testTimeout 15000)。
  • 桌面现有测试:2351 项通过。
  • node scripts/e2e-rpc-unicode.mjs 通过:真实 Host/Sidecar 的写入、重启恢复、流式消息和后续请求。
  • 隔离运行时 + 本地 HTTP/SSE 验证通过:等待中和进入等待瞬间追加指令,均保持原 turn id、提前返回 TaskWait、保留子代理正常完成,并只结束父轮一次。

限制

  • 默认 5 秒设置下,已有 subagent-fallback.test.ts 的双模型 HTTP 429 重试用例超时;未修改的基线也复现同一失败。未将默认测试命令标为全绿。
  • 本地环境为 macOS;未完成 Windows 实机、完整 Electron 交互及真实模型服务验证。
  • 持续 Host 故障期间,恢复文件可能随已经开始的工作增长;相关会话的新轮等待落盘恢复。

Fixes #597

Deliver promoted messages into the active turn and wake delegate waits
so corrective input does not wait for background work to finish.

Hold turn settlement until transcript writes reach the host, preserving
overflow across restart. Keep graceful stop latched through recovery
and retry boundaries without aborting work already in progress.

fixes vastsa#597
Keep persistence construction and transcript settlement together so the
main entry remains within its architecture budget. Preserve lazy host
and shutdown reads and the single-instance initialization boundary.
@vastsa

vastsa commented Sep 20, 2026

Copy link
Copy Markdown
Owner

审查结论:暂不合入。方向解决了 Send now 顺序问题,但这是 steering + 持久化 outbox 的设计级改动;当前持续 Host 故障时超过 1024 条会无限追加并反复序列化恢复文件,存在磁盘/内存无界增长并阻塞会话的风险。另当前分支基线过旧且与 main 冲突。请先补配额/背压策略、基于最新 main 解决冲突并重跑验证。

@vastsa

vastsa commented Sep 20, 2026

Copy link
Copy Markdown
Owner

感谢你对 Send now、steering 和持久化顺序问题的深入辅助,方向确实解决了真实痛点。当前暂不合入,建议重新提交前处理:

  1. 为 persistence outbox 增加明确配额、背压或分段/压缩策略,不能在 Host 持续故障时无限增长并反复序列化。
  2. 保留消息不丢失和 per-session 顺序保证,同时明确不同 session 之间的资源隔离。
  3. 建议将 steering 行为变更与 outbox 持久化改动拆成更小、可独立验证的 PR,降低设计风险。
  4. 基于最新 main 解决冲突并重跑队列、恢复、异常和完整 CI。

修好后请重新提 PR,我会继续跟进。

@vastsa

vastsa commented Sep 20, 2026

Copy link
Copy Markdown
Owner

感谢贡献。先关闭当前 PR,待资源上限、设计拆分和最新 main 冲突处理完成后请重新提交。

@vastsa vastsa closed this Sep 20, 2026
@zszz3

zszz3 commented Sep 20, 2026

Copy link
Copy Markdown
Contributor Author

感谢贡献。先关闭当前 PR,待资源上限、设计拆分和最新 main 冲突处理完成后请重新提交。

好,目前还有什么你们没有人力去解决的么(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] 运行中的消息长时间停留在“即将发送”,并可能导致旧 Assistant 输出在新用户消息之后出现、会话时序错乱

2 participants