fix(chat): support nonblocking Codex questions - #231
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
The answer panel stacked a full text box and a large submit button above the message box, so two inputs and two primary buttons sat on screen at once. While a blocking question was open the disabled composer still rendered at full height with its toolbar. The free-text answer is now one more row in the option list, growing as you type, with Previous and Submit at its end. Blocking questions drop the redundant waiting hint. While a blocking question is open the composer collapses to one row showing the saved draft and the Stop button.
The pencil icon and submit button hugged the bottom line of a wrapped answer on phone widths. The row now centers its children vertically like the option rows do.
The mono Draft tag added chrome to a row that only exists to keep Stop reachable. A saved draft now shows as dimmed text, and the empty case shows the placeholder. Screenshots show the empty composer, the common case.
Both sides added migration 50. Main's transcript event sequence keeps 50 and the blocking user input backfill moves to 51. Activity projection keeps main's event sequence stamping together with open-request retention, and pending question counting sorts by transcript order before counting.
The Stop-to-Steer check cleared the editor with an empty Playwright fill, which presses Delete over a select-all and does not reliably empty the draft, so the Stop button never returned. And expect.element polls for the rest of the test budget by default, so every failure read as a bare 30-second timeout instead of naming the step. Clear the draft through the store, wait on the draft text and the buttons with bounded helpers, and give the remaining Playwright actions and element expectations short explicit timeouts.
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.
What Changed
Codex questions that let the agent keep working now appear as an answer panel. The panel has its own answer field and explicit submission, so answering does not replace the user's message draft. Blocking questions keep Stop visible and preserve the disabled composer draft. While the agent is running, typing in the main composer switches its single action from Stop to Steer; typing in the answer field does not.
Question state survives reconnects and long conversations. Answers steer an active turn or start a follow-up after the turn ends. Stopping clears pending questions, and duplicate or invalid answers do not send extra messages. The sidebar only shows a waiting state for blocking questions. Existing blocking provider questions remain supported.
Why
The pinned Codex protocol schema dropped async question metadata, leaving only ordinary transcript text. Updating the generated schema from Codex 0.150.1 to 0.153.4 preserves that metadata. Most of the diff is the regenerated protocol file. Migration 050 tracks blocking questions separately from all pending questions.
UI Changes
These are screenshots of browser-test fixtures using synthetic conversation data.
The free-text answer is one more row in the option list. It starts as a single line, grows as you type, and carries the Previous and Submit buttons at its end, so the panel has no separate button row. Enter submits the answer. Blocking questions show no waiting hint, since the transcript already says the turn is waiting.
While a blocking question is open, the message box and toolbar collapse to one thin row: the saved draft (or a placeholder) on the left and Stop on the right. The full message box returns, draft intact, once the question resolves or the run is stopped.
Answer entry and Stop-to-Steer recording (browser fixture, slowed to one-third speed).
Validation
pnpm exec vp fmt,pnpm exec vp lint, andpnpm exec vp run typecheckpassed. Lint reports warnings.Checklist