Skip to content

fix: reset prompt guards on abort to prevent soft-lock window - #10

Open
robbe1912 wants to merge 1 commit into
alvarolorentedev:mainfrom
robbe1912:fix/abort-session-reset-guards
Open

fix: reset prompt guards on abort to prevent soft-lock window#10
robbe1912 wants to merge 1 commit into
alvarolorentedev:mainfrom
robbe1912:fix/abort-session-reset-guards

Conversation

@robbe1912

Copy link
Copy Markdown

Problem

\�bortSession\ resets the running session on the server but does not clear the client-side guards (\promptSubmissionRef\ + \sendingState.active). Until the in-flight \promptAsync\ promise settles, those guards stay active, blocking new prompt submission and leaving the conversation-mode state machine in a half-running state.

Fix

Clear \promptSubmissionRef.current = false\ and \setSendingState({ active: false })\ inside \�bortSession\ so the client immediately returns to an idle, submittable state. Server abort and client guards are now decoupled — either settling first no longer blocks the UI.

Files changed

  • \providers/opencode-provider.tsx\ (+6 LOC)

Validation


  • pm run typecheck\ ✓

  • pm run lint\ ✓

  • pm run test:fake-server:self\ ✓

Notes

Optional follow-up hardening: scope the reset to the aborting \sessionId\ so aborting session A does not clear session B's lock (rare in practice — single active send at a time). 1-line change.

abortSession did not reset promptSubmissionRef or sendingState. The
in-flight promptAsync could take seconds to settle after server abort,
during which the Send button stayed disabled and any new send was
rejected by the active-guard in sendPrompt.

Reset both immediately after client.session.abort resolves. sendPrompt's
own finally block sets the same values when it eventually runs, so the
two writes compose to the same end state.
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.

1 participant