feat(tui): wire Queue overlay to JobQueue for real-time management #103
No reviewers
Labels
No labels
area:agents
area:ai
area:config
area:dashboard
area:design
area:design-review
area:devtools
area:entities
area:gallery
area:generate
area:image
area:infra
area:meta
area:model-browser
area:navigation
area:presets
area:security
area:sessions
area:settings
area:sharing
area:test
area:ux
area:webhook
area:workdir
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/loom!103
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "tui/queue-wire-95"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
QueueStatecomponent toloom-core'sJobQueueviaAppCtx, replacing placeholder data with live job snapshotsEvent::CoreMsg(LoomEvent::QueueChanged{..})to refresh the overlay in real timed(cancel/dismiss),r(retry failed),j/k(navigate) keybinds inside the modal overlayCtrl+Jglobal keybind and command palette entry to open the Queue overlayCloses charles/loom#95
Test plan
cargo clippy -p loom-tui -- -D warningscleancargo test -p loom-tuipasses (113 tests)just qapasses (fmt, lint, test)Ctrl+J, verify jobs render with correct status colorsdto cancel, verify removalrto retry, verify status resets to Pending🤖 Generated with Claude Code
Review — PR #103: Queue overlay wired to JobQueue
Good. Functional queue overlay with cancel/retry and progress gauge.
Concern:
q.remove(id) || q.dismiss(id)This uses
||with side effects —dismissonly runs ifremovereturnsfalse. This works but is surprising to read. Consider making it explicit:Concern:
sync_from_ctxon every renderrender()callsself.sync_from_ctx(ctx)which doesctx.queue.try_read()and rebuilds the snapshot on every frame. For a ~60fps render loop this is 60 lock acquisitions per second while the overlay is open. Consider syncing only onEvent::Tick(which is typically slower) or onQueueChangedevents.Cross-PR: duplicated
centered_rectcentered_rectis copy-pasted here and also in PRs #106 (sharing) and #109 (LoRA picker). Extract it tocrate::utilorcrate::components::layoutto avoid three copies.Nit
Ctrl+jbinding for opening the queue is a good default, butCtrl+jis traditionally "newline" in terminal emulators. Could conflict with text input in prompts. Since the keybinds are configurable this is fine, just noting it.e76c2423c4to21abb3f474