Skip to content

feat(opencode): unify prompt queue across surfaces - #4

Merged
henry701 merged 20 commits into
productionfrom
feat/main-tui-prompt-queue
Jun 4, 2026
Merged

henry701 merged 20 commits into
productionfrom
feat/main-tui-prompt-queue

Conversation

@henry701

@henry701 henry701 commented Jun 1, 2026 •

Copy link
Copy Markdown
Owner

[ai-agent-generated] LLM-generated PR description.

Summary

Unifies prompt queue behavior across the web app, full TUI, and direct opencode run -i around the server-backed session.queue.* flow.

  • Adds durable prompt queue storage, HTTP API routes, SDK types, sync events, queue detail loading, and drain pause/resume controls for edit mode.
  • Wires queue enqueue/edit/remove/send-now behavior through the web composer, full TUI prompt, and direct interactive footer.
  • Keeps deferred queued prompts out of the transcript until materialized, preserves queue metadata, supports steering queued prompts while a session is busy, removes empty queued edits, and discards unsaved edits on queue selection changes.
  • Stabilizes queue dock layout across surfaces with idle bottom padding, one-line previews, and a three-item edit window around the active queued prompt.
  • Hardens drain resume so paused queues restart an idle loop, resumes web drain on session/page exit or failed edit save, tokenizes abandoned server-side pause expiry, and protects send-now/auto-drain from duplicate persistence races.
  • Recovers claimed queue items if transcript persistence fails, clears queued prompts on session revert, and tolerates partial app session-cache stores that predate queue state.
  • Migrates deferred legacy messages into the queue in deterministic, transactional order while preserving in-flight assistant turns as immediate transcript turns; migrations finish during setup before live sync traffic observes partial queue/message changes.
  • Adds regression coverage for queue persistence, HTTP routes, drain pause/resume, busy send-now, edit switching, empty dequeue, migration ordering/in-flight guards, revert queue clearing, direct footer behavior, cache cleanup, and TUI smoke rendering.

Architectural Flow

  • Queue mutations use the dedicated session.queue.* API and emit session.queue.updated events for UI sync.
  • Prompt edit mode pauses automatic FIFO drain; explicit queue save, send-now, cancel, normal submit, failed edit save, session/page exit, or matching pause-token expiry restores the intended drain state.
  • Shared queue preview/dock helpers drive both full TUI and run -i, so row reservation and rendered queue rows stay aligned.
  • Web and terminal surfaces load full queued prompt detail for editing, but queued prompts remain deferred until sent-now or dequeued by the session loop.
  • Legacy deferred user-message migration enqueues and deletes dormant deferred prompts in one DB transaction, ordered by session, creation time, and id.
  • Queue enqueue and dequeue are serialized in immediate transactions to preserve FIFO ordering and avoid peek/remove races under concurrent requests.

Validation

  • git diff --check
  • cd packages/opencode && bun typecheck
  • cd packages/app && bun typecheck
  • bun typecheck
  • bun turbo test:ci
  • cd packages/opencode && bun test test/session/prompt.test.ts --grep "resuming paused queue drain|sending a queued prompt while busy"
  • cd packages/opencode && bun test test/session/revert-compact.test.ts --grep "clears queued prompts after revert"
  • cd packages/opencode && bun test test/data-migration.test.ts test/session/prompt-queue-drain.test.ts
  • cd packages/app && bun test src/components/prompt-input/submit.test.ts src/pages/session.queue-save.test.ts
  • Earlier queue surface validation: cd packages/opencode && bun test test/cli/tui/prompt-queue-actions.test.ts test/cli/tui/prompt-queue.test.ts test/cli/tui/prompt-queue-dock.test.ts test/cli/tui/prompt-queue-smoke.test.tsx test/cli/run/runtime.queue.test.ts test/cli/run/runtime.queue-remote.test.ts test/cli/run/footer.view.test.tsx test/cli/run/footer.queue-dock.test.tsx test/cli/run/prompt.shared.test.ts test/session/prompt.test.ts test/server/session-queue.test.ts test/session/prompt-queue-drain.test.ts
  • Earlier app validation: cd packages/app && bun test src/components/prompt-input/submit.test.ts src/components/prompt-input/build-request-parts.test.ts src/context/global-sync/session-cache.test.ts src/context/global-sync/bootstrap.test.ts
  • ./build-local.sh
  • Manual tmux smoke on opencode-local run -i with Nemotron: busy turn, queue edit switching, empty dequeue, send-now steering, and three-item edit dock window.
  • Manual tmux smoke on full opencode-local TUI: queue edit switching and three-item edit dock window.

henry701 added 6 commits June 1, 2026 01:35
Register input.queue on the session prompt textarea, send
delivery=deferred via session.prompt, and share submit guards
with a common promptInFlight lock.
Process deferred prompts one at a time after the open turn completes,
persist delivery on user messages, and exclude sibling queued rows from
model context. Add dock/queue helpers, run TUI parity, and serve+script
smoke tests with a mocked LLM endpoint.
Keep deferred prompts in memory until the open turn (including steer
follow-ups) settles, re-key on persist for correct transcript order, and
drive the TUI queue dock from session.deferred.updated instead of the DB.
Extract QueueDock for TUI and run --interactive, reserve footer rows when
the queue is visible, and edit queued prompts in place (Alt+Up/Down cycle)
instead of removing them from the queue.
Pause FIFO auto-drain while editing queued prompts so items are not sent
until the user wakes the session via send-now or a normal submit. Allow the
run loop to exit when drain is paused but items remain. Add service and HTTP
coverage for pause/resume edge cases across sessions, clear, and queue CRUD.
@henry701 henry701 changed the title feat(tui): wire deferred prompt queue in main TUI feat(opencode): unify prompt queue across TUI and web Jun 2, 2026
@henry701 henry701 changed the title feat(opencode): unify prompt queue across TUI and web feat(opencode): unify prompt queue across surfaces Jun 4, 2026
@henry701
henry701 merged commit 42cb341 into production Jun 4, 2026
0 of 4 checks passed
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