fix(chat): a mid-turn send on a provider that cannot steer stops the run instead of trailing behind it - #14
Merged
Conversation
…run instead of trailing behind it omp over ACP has no steering surface: a concurrent session/prompt makes the agent cancel the running turn, and T3's own prompt serialization otherwise held the message behind the running prompt — in one reproduction, 29 minutes — while the timeline claimed it was delivered. The adapter now stops the run before a mid-turn prompt and sends the message as its own turn, so it reaches the agent in about a second, and the fake "steer" branches that reused the running turn id are gone. The composer keeps Enter off that destructive path (under "steer" it queues, as before), but the explicit send-now chord and the queued card's arrow send for real again instead of being silently downgraded to a queue, and both say what they do: "Stop the run and send", "Stop the run and answer this next". Built with Claude Opus 5 on Oh My Pi.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem (reproduced from the event log, not from theory)
A message sent while an omp turn ran appeared delivered and reached the agent 29 minutes later, when the running turn finally ended:
omp over ACP has no steering surface — a concurrent
session/promptmakes the agent cancel the running turn (acp-agent.ts prompt()) — and T3's own prompt serialization (AcpSessionRuntime, one permit per session) held the message behind the in-flight prompt while the timeline claimed delivery. #10 routed Enter to the follow-up queue, but left two doors open: the queued card's "send now" and the explicit send-now chord, which it silently downgraded to a queue so the keybinding looked dead.Fix
Adapter (the transport's truth, so every client inherits it).
OmpAdapter.sendTurnstops the run before a mid-turn prompt and sends the message as its own turn: the agent has it in about a second, with the transcript intact. If a prompt slot survives the stop, it fails loudly rather than queueing behind it. The fake "steer" branches that reused the running turn id are gone.Composer. Enter under "steer" still queues — nobody asked to destroy a run by pressing Enter — but the explicit send-now chord and the card's arrow send for real again. Both say what they now do: "Stop the run and send", "Stop the run and answer this next".
Verification
main-xavier(2s timeout: the silent hold), passes here; asserts[old:cancelled, new:completed]and distinct turn ids.OmpAdapter+OmpProvider+apps/web/src/components/chat: 295 tests green. tsgo clean on server and web; lint/format clean.Not included: before/after images for the copy change.
AGENTS.mdasks before driving a browser and I do not have that go-ahead — say the word and I will add them.Built with Claude Opus 5 on Oh My Pi.