feat: 0.15 Alpha compact VN-style companion panel - #75
Merged
Merged
Conversation
Open
14 tasks
Lucas1479
marked this pull request as ready for review
September 15, 2026 07:48
Lucas1479
pushed a commit
that referenced
this pull request
Sep 15, 2026
This is a follow-up to #75. This bug was found while testing the companion panel on macOS. Unlike Windows/Linux, macOS uses a split-window architecture: the interactive Canvas containing the W and portrait controls runs in a separate wallpaperCanvasLifecycle.ts window, while the wallpaper scene is managed by index.ts. PR #75 only authorized companion IPC from electronSliceWindow, so requests sent from the macOS Canvas window were rejected as unauthorized and returned false before reaching CompanionPanel.toggle(), making the portrait button appear unresponsive. Changes: - Treat both the main Canvas and the separate Slice as trusted companion-control surfaces. - Keep the existing main-frame check for toggle requests and continue rejecting unrelated renderer senders. - Broadcast companion open/closed state to every live trusted surface so duplicate controls remain synchronized. - Add hover feedback to the portrait button so its interactive state is visible. The companion window remains a singleton, and the main process continues to own authorization and lifecycle state. Reproduced and tested on macOS 26.6.2 on Apple Silicon. Co-authored-by: FDU-ZJN <FDU-ZJN@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes
Add an optional compact VN-style companion card for 0.15 Alpha. The Slice button opens the portrait and dialogue beside a selected Work preview; docking, dragging, closing and reconnecting preserve Host-owned window placement and presentation.
Local UI preview using the optional VN portrait cache and test presentation events. The still image captures the VOICE indicator and animated signal bars.
Fix the open card resetting to a welcome line after every spoken reply: speech ending keeps the just-spoken caption on screen. Empty subtitle cleanup and returning to standby no longer erase it, regardless of event order. Only the next non-empty subtitle replaces the line. Reopening/reconnecting also restores the latest caption, including speech received while closed. Retention lasts for the current bridge instance and is not saved chat history; wallpaper subtitles still clear normally.
The card shows VOICE with animated signal bars while speaking, then flat bars at standby, matching the existing VN card's visual language. Signals follow Host speaking state, not measured amplitude.
Existing portrait-cache and subtitle/emotion/speaking signals supply the display. Missing optional portraits retain a text avatar. Only an attached panel suppresses the matching wallpaper layers; closing or disconnecting restores them without stopping audio or Work. Atomic subscription replay and refreshed bridge credentials cover reconnection. Public macOS wallpaper and keyboard behavior remain intact.
Validation
.venv_cu124, in both the public worktree and integration workspace.This standalone Draft targets public
main. Routing is #74, ACP is #76 and Slice export review is #77. See companion behavior.