ui.matches/string waitFor hangs the run when screen() hits OpenTUI OutputBusy
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 69/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
- Ambito
- testing
Direzione di ricerca
Inizia da packages/simulation/src/frontend/actions.ts, dove l’issue indica screen() e matches() come il percorso che non funziona; confrontalo con il percorso di attesa dell’inattività del rendering usato da ui.capture. Riproduci il problema con le due chiamate consecutive a ui.waitFor() descritte nell’issue e verifica che l’endpoint di simulazione risponda in caso di errore durante la lettura del buffer. Il lavoro è completato quando matches attende che il rendering sia inattivo e gli errori restituiscono una risposta invece di lasciare l’RPC senza risposta.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
ui.matches (and therefore ui.waitFor("some text"), which polls it) can fail permanently on a current V2 checkout:
opencode drive ui websocket: request failed cause="NativeError: ot_session_acquire_buffer_lease failed: OutputBusy"
at withResolvedChars (@opentui/core buffer.ts)
at screen (packages/simulation/src/frontend/actions.ts:94)
at matches (packages/simulation/src/frontend/actions.ts:150)
The simulation endpoint logs the failure and never answers the RPC, so Drive waits until UiTimeoutError (30s) and aborts the run. matches calls screen() (a direct currentRenderBuffer.getRealCharBytes() read) without waiting for the renderer to go idle, so it races a render that holds the buffer lease. ui.capture re-renders and waits for idle() first, and did not fail in 6+ consecutive calls in the same run.
The first matches usually succeeds and a later one fails, so a waitFor that has already matched once can still die mid-poll.
Reproduction
yield* ui.submit("Run something")
yield* ui.waitFor("step 3", { timeout: 30_000 }) // may succeed
yield* ui.waitFor("step 4", { timeout: 30_000 }) // UiTimeoutError: ui.matches timed out after 30000ms
100% reproducible across 3 runs on this checkout, with recording: false.
Expected
- The simulation endpoint answers the RPC with an error (or retries internally) instead of leaving it unanswered; a failed read should surface as a catchable
UiWaitTimeoutError/operation error, not hang the whole run. matches/screenshould use the same render-idle path ascapture.
Environment
- opencode-drive 2.4.0
- OpenCode
b032f90634(PR #62977 worktree), @opentui/core 0.8.1 - TUI stderr/log:
/tmp/opencode-drive/run-af7b2256-d917-4337-b2cd-c92c25a62afb/logs/opencode/log/opencode-local.log(searchOutputBusy)
Workaround
Poll ui.capture() and search the joined span text yourself (what I did for the recording), instead of ui.matches/string waitFor.
- Lingua principale
- TypeScript
- Stelle
- 41
- Fork
- 9
- Merge medio
- 39m
- PR unite (30g)
- 9
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di anomalyco/opencode-drive
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
anomalyco/opencode-drive#141 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
anomalyco/opencode-drive#107 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
anomalyco/opencode-drive#102 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
llm settlement waits on a reply whose request an interrupt already abortedForse già presa @mikemikimike l’ha presa 4 giorni fa. Apertabug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
anomalyco/opencode-drive#135 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
anomalyco/opencode-drive#132 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di anomalyco/opencode-drive
Issue simili
-
area:tooling good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
interledger/publisher-tools#1007 ·
I maintainer di solito rispondono entro 1 giorno
-
priority/medium roadmap/v1.1.1 stakeholder/rapr type/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
databrickslabs/ontos#1420 ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
vercel-labs/just-bash#756 ·
I maintainer di solito rispondono entro 1 giorno
-
area: ci good first issue
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
interledger/web-monetization-extension#1555 ·
I maintainer di solito rispondono entro 1 giorno
-
🐞 bug 🧐 unconfirmed
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
Tencent/tdesign-vue-next#7056 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno