[split 2/3] Reborn queued-message steering into busy threads - #5963
ilblackdragon wants to merge 1 commit into
Conversation
Extracted from #5279 — queue a user message sent to a busy thread as active-run steering input and surface queued status in the WebUI: - durable + in-memory host input queue (loop_support), steering gateway (product_workflow/steering.rs), DeferredBusy busy-submit path - thread Queued/Submitted transitions (threads service + backends) - agent-loop input-cursor / prompt_context_cursor consume, post-tool steering drained before the reply model call, model-port coalescing of consecutive text user messages - runtime wiring (Filesystem/InMemory host input queue), webui/openai-compat/ slack input_enqueue - chat frontend queued UX: message-status, gate-arguments, gate-kinds, optimistic-message, generic gate-kind title, tool.error i18n - real WebUI -> runtime -> tool-loop queued-followup e2es Builds on PR1 (other).
🔎 IronLoop Review StatusHead:
Configuration errorMessage: Unable to load trusted agent config from .ironloop/agents.yaml. Available commands
Run metadataOrigin: |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. 🗂️ Base branches to auto review (2)
Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request implements active-run steering queues, allowing user messages sent to a busy thread to be queued as steering input for the active run instead of being rejected. It introduces a durable, filesystem-backed FilesystemHostInputQueue alongside an in-memory fallback, adds a new Queued message status, and updates the executor pipeline to drain and acknowledge these inputs correctly. Additionally, consecutive plain-text user messages are now coalesced before being sent to the provider gateway, and the WebUI has been updated to support queuing composer sends, exact tool-activity argument mapping for approval gates, and localized tool error messages. I have no feedback to provide as there are no review comments to assess.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
|
🚅 Deployed to the ironclaw-pr-5963 environment in ironclaw-ci-preview
|
Summary
Split 2 of 3 extracted from #5279. Stacked on #5962 (
codex/reborn-other-hardening) — review/merge that first; this PR targets its branch so the diff is just the queued-steering slice.Queue a user message sent to a busy thread as active-run steering input, and surface queued status in the WebUI.
FilesystemHostInputQueue+InMemoryHostInputQueue(loop_support),HostInputEnqueuePort/RejectingInputEnqueue, CAS-guarded run-scoped persistence.product_workflow/steering.rs(enqueue_busy_steering, typedSteeringEnqueueError); busy-submit returnsDeferredBusy;mark_message_queued_or_replay.Queuedmessage status +Queued → Submittedon both thread backends (idempotent per run).prompt_context_cursorconsume, post-tool steering drained before the reply model call, model-port coalescing of consecutive text-only user messages.with_input_enqueueon webui / openai-compat / slack inbound.message-status.js,optimistic-message.js), strictinvocationIdgate-argument join (gate-arguments.js),gate-kinds.js, generic gate-kind title,tool.error*i18n.Notes
cargo check --tests --features webui-v2-betagreen; focused chat JS tests pass.🤖 Generated with Claude Code