ui.matches/string waitFor hangs the run when screen() hits OpenTUI OutputBusy
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 69/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
- Área
- testing
Línea de trabajo
Empieza con packages/simulation/src/frontend/actions.ts, donde el issue identifica screen() y matches() como la ruta que falla; compárala con la ruta de espera de inactividad del renderizado que usa ui.capture. Reproduce el problema con las dos llamadas consecutivas a ui.waitFor() descritas en el issue y comprueba que el endpoint de simulación responde cuando falla una lectura del búfer. El trabajo estará hecho cuando matches espere a que el renderizado quede inactivo y los errores devuelvan una respuesta en lugar de dejar el RPC sin responder.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- TypeScript
- Estrellas
- 41
- Forks
- 9
- Merge medio
- 39 min
- PR fusionados (30 d)
- 9
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de anomalyco/opencode-drive
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
anomalyco/opencode-drive#141 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
anomalyco/opencode-drive#107 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
anomalyco/opencode-drive#102 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
llm settlement waits on a reply whose request an interrupt already abortedPosiblemente ocupada @mikemikimike la tomó hace 4 días. Abiertobug
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
anomalyco/opencode-drive#135 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
anomalyco/opencode-drive#132 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de anomalyco/opencode-drive
Issues similares
-
area:tooling good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
interledger/publisher-tools#1007 ·
Los mantenedores suelen responder en 1 día
-
priority/medium roadmap/v1.1.1 stakeholder/rapr type/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
databrickslabs/ontos#1420 ·
Los mantenedores suelen responder en 3 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
vercel-labs/just-bash#756 ·
Los mantenedores suelen responder en 1 día
-
area: ci good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
interledger/web-monetization-extension#1555 ·
Los mantenedores suelen responder en 1 día
-
[t-dialog] 弹窗组件和抽屉组件的文档说明不够详细清楚Abierto🐞 bug 🧐 unconfirmed
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Tencent/tdesign-vue-next#7056 · 1 comentario ·
Los mantenedores suelen responder en 1 día