fix(tui): render skill load errors inline#33298
Merged
Merged
Conversation
markjaquith
pushed a commit
to markjaquith/opencode
that referenced
this pull request
Jun 23, 2026
BenGu3
pushed a commit
to BenGu3/opencode
that referenced
this pull request
Jun 27, 2026
josechifflet
pushed a commit
to josechifflet/opencode
that referenced
this pull request
Jun 27, 2026
(cherry picked from commit 9dadc24)
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
The
/skillsdialog (DialogSkill) loaded skills viaapp.skills()without surfacing failures: it returnedresult.data ?? [], so an error response silently rendered an empty list (indistinguishable from "no skills"), and a rejected request would put the resource in an errored state that re-throws when read in theoptionsmemo.Same failure class addressed for the move dialog (#32241) and the console org dialog (#33040).
Fix
Switch the fetch to
throwOnError: trueand funnel both failure modes (error responses and rejections) into aloadErrorsignal via.then().catch(), then render an inline error inside the dialog instead of a silent empty list / crash. Reuses theemptyViewslot onDialogSelect:renderFilter={false},locked, andoptions={[]}in the error stateescdismisses; same dialog shellSingle-shot load (no source signal / refetch): success renders the list, failure renders the inline error.
Testing
bun typecheckandbun prettier --checkpass frompackages/tui.escdismisses cleanly, no crash.