From 2b05dad2041cbefe9551d0dd475e52fc229e2798 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Sat, 24 Oct 2026 12:18:21 +0200 Subject: docs: the companion's seat on the assistant card Records that Hyprland's typing binds fire under the canvas's exclusive keyboard, which is why the canvas reports no typing of its own, and that the seat fixes her right edge rather than her centre. Co-Authored-By: Claude Opus 5.5 --- desktop/companion/README.md | 7 +++++++ .../specs/2026-10-24-companion-seat-design.md | 20 +++++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/desktop/companion/README.md b/desktop/companion/README.md index 4fbe887..2bd6c4e 100644 --- a/desktop/companion/README.md +++ b/desktop/companion/README.md @@ -60,6 +60,13 @@ frame falls back to its outfit's `base`. stacks a later surface above an earlier one on a layer, and 0.56.2 has no layer rule to order them (no `order` key in the binary; an unknown key raises no config error). +- The assistant's tall card (a chat, or its history, picker or models + panel) seats her on its top edge, right of centre, through the monitor + hop. `Assistant.qml` gives `tall` and `cardTop`; seated she ignores + balloons and shows `Mood.seatFrame` of her frame, the `sit-*` set. The + bar and the file card leave her in the corner: standing frames face + out, not down at the text. Typing and BackSpace still reach her under + the canvas's exclusive keyboard (checked on socket2). - The program in front of her is Hyprland's `activewindow` event, `class,title`. It also fires on every title change, so she reacts only when the class changes, a third of the time, under the 30 s line diff --git a/docs/superpowers/specs/2026-10-24-companion-seat-design.md b/docs/superpowers/specs/2026-10-24-companion-seat-design.md index b858e5a..3e7fb0f 100644 --- a/docs/superpowers/specs/2026-10-24-companion-seat-design.md +++ b/docs/superpowers/specs/2026-10-24-companion-seat-design.md @@ -1,6 +1,6 @@ # Companion seat: design -Date: 2026-10-24. Status: designed, not implemented. +Date: 2026-10-24. Status: implemented; the sitting art is generated by the user. ## Goal @@ -14,6 +14,10 @@ short card would need its own art to read anything below her feet. ## Verified before designing +- **Hyprland's typing binds fire under the canvas.** With the canvas open + and holding the keyboard `Exclusive`, socket2 carried + `custom>>keystone-typing` and `custom>>keystone-delete` for every burst + typed into it, so the companion needs no input of the canvas's own. - **The tall card has a fixed top.** `Card.tall` is `mode === "chat" || panel`, and while tall its height is `fullHeight`, set by the window to 70% of the screen height. The card is centred, so its top is @@ -41,9 +45,11 @@ card. The companion's `seated` is `asst.open && asst.tall`. Seated, her window is on `asst.screenObj` and its margins put her seat's bottom 35 px below -the card's top, with her centre 60 px right of the screen's centre: the -window stays anchored right and bottom, `margins.bottom = screenH - cardTop -- 35`, `margins.right = screenW / 2 - 60 - seatWidth / 2`. Not seated, the +the card's top, with her right edge 90 px right of the screen's centre: +the window stays anchored right and bottom, `margins.bottom = screenH - +cardTop - 35`, `margins.right = screenW / 2 - 90`. Her right edge rather +than her centre, because frames differ in width and the window would move +with every frame. Both numbers were checked by eye. Not seated, the margins are today's 24 and 16. `seated` changing runs the monitor hop's path: she drops out, the window @@ -82,11 +88,7 @@ ungenerated set shows. ### Inputs Typing and BackSpace keep arriving as `keystone-typing` and -`keystone-delete` from Hyprland. The canvas holds the keyboard -`Exclusive`; Hyprland binds should still fire, since the compositor -matches binds before delivering keys. Checked first, by typing into the -canvas with `qs log` open. If they do not fire, the card's input -`onTextChanged` sets `typingAt`, and a shorter text sets the mock. +`keystone-delete` from Hyprland, which fire under the canvas (see above). ## Check -- cgit v1.2.3