Repository navigation
launcher: hand off feature popups through their workspace actions - #12
Conversation
The launcher popup dispatched broadcast, peek, and quick-send by calling herdr plugin pane open from inside its own popup process. herdr keeps one popup per session and refuses a second with popup already open until the current popup has exited, so the open failed on a stderr nobody sees and the launcher exited 1. Open viewer and sign in/out never open a popup, which is why only those worked. The launcher now invokes the capability's workspace action through herdr plugin action invoke. herdr runs the action as its own child, outside the popup's process session, so it survives the launcher's teardown. open_popup retries the busy refusal briefly (up to 2s) while herdr reaps the old popup, and surfaces every other failure at once. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (3)
Included review availability: 2 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 5 reviews per hour. 📝 WalkthroughWalkthroughThe launcher now dispatches workspace actions for feature transitions. ChangesPopup action flow
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to The launcher now hands feature popups through workspace actions and retries transient popup shutdown contention; no actionable merge-blocking risk remains after normal checks and review. Sequence Diagram(s)sequenceDiagram
participant Launcher
participant InvokeAction
participant ChatPlugin
Launcher->>InvokeAction: Invoke selected workspace action
InvokeAction->>ChatPlugin: Invoke manifest action
ChatPlugin-->>Launcher: Return action result
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 83.33% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 18 functions across 2 files. (1 skipped: 1 unsupported.) ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
What
Broadcast to panes, Chat peek, and Quick send did nothing when picked from the launcher popup (prefix+C, then b/p/s or Enter). Open viewer and sign in/out kept working.
Why
The launcher dispatched those three by calling
herdr plugin pane openfrom inside its own popup process. herdr keeps one popup per session and refuses a second withpopup already openuntil the current popup's process has exited, so the open failed on a stderr nobody sees and the launcher exited 1. The server log shows the pair every time: launcher open ok, chained open error, launcher pane exit code 1 a millisecond later. The two entries that worked never open a popup.How
src/cmd/launcher.rs:dispatchinvokes the capability's workspace action viaherdr plugin action invoke <id> --plugin m4ttstack.chat. herdr runs the action as its own child, outside the popup's process session, so it survives the launcher's teardown (herdr signals the whole session on popup exit, so a detached helper would not).src/herdr.rs:open_popupretries the busy refusal at 50ms for up to 2s while herdr reaps the old popup; every other failure surfaces at once. Newinvoke_actionhelper.PLUGIN_IDconst replaces the inline literal.AGENTS.md: gotcha for chaining one popup into another.Tests
4 new in
herdr.rs(retry while closing, retry budget, no retry on other errors, invoke argv), launcher dispatch test updated to the action hand-off; 92/92 green, clippy clean, purity gate ok.Not verified live yet: the retry window is sized from the server log (popup exit processed ~1ms after the process ends), and the popup itself needs a keypress to close. Matt,
herdr plugin linkthis branch's checkout and press prefix+C then b to confirm.🤖 Generated with Claude Code
Summary by CodeRabbit