aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/companion
AgeCommit message (Collapse)AuthorFilesLines
9 hourscompanion: wave goodbye on hideDanilo M.6-8/+69
SUPER+\ now plays a short goodbye instead of dropping her at once: she cycles wave-l and wave-r around the existing wave for a sway, then the normal drop. One hide in four she also says a bye line, non-forced so the usual 30 s cooldown applies; the hold matches what showed, 2 s with a line and 1 s silent. The sway is klein edits of dress/wave rather than base, so the arm stays up and only the hand moves; the leotard twins come from their dress frames. The leotard rerolled to seed 7 because the first seed left a faint alpha fringe that widened the canvas and made the flip jitter. Fullscreen, the lock screen and the monitor hop keep their own exits and do not wave. Also carries the pending onFocusedChanged guard: with no focused monitor, or already away, she moves at once rather than waiting for an exit that will never settle.
11 hourscompanion: editable per-app lines in a settings pageDanilo M.4-24/+138
Her per-app lines were hardcoded in Lines.js under app:<class>. They now live in Prefs.companionApps once edited and fall back to Lines.js until then, read live by Companion.qml so a save needs no restart. The new Companion phrases page does full CRUD on apps and their phrases, with a draft, SaveBar and Reset to the built-in set, mirroring Ask presets. Companion settings move out of Desktop into their own Companion group.
12 hourscompanion: the leotard's timeout is a setting, or none at allDanilo M.3-12/+19
Settings > Desktop > Companion takes the seconds she stays in the leotard after the self-destruct, 60 as before. Switched off, she keeps it until she is hidden and shown again, which already put the dress back early. Mood.outfit takes the time instead of reading T. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
12 hourscompanion: she trembles while she blushes at a wallpaperDanilo M.2-3/+16
A 1.5 px shiver side to side, 160 ms a cycle, for the blush3 half of admire only; a click burst's blush3 stays still. Put back to rest on stop, since an infinite animation stopped mid-swing keeps its offset. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
12 hourscompanion: README for the wallpaper blush, spec matches the triggerDanilo M.1-0/+8
The trigger fires whenever she stops being away, which is a dodge and fullscreen as well as the three appearances the spec named. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
12 hourscompanion: blushes at a listed wallpaper on an empty workspaceDanilo M.2-2/+27
Checked on switching workspace or closing a window, and whenever she stops being away, which covers being shown, a remap, a hop to another monitor, a dodge and fullscreen. The 3 minute cooldown keeps workspace flicking from repeating it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
12 hourscompanion: Admired, the wallpaper list and what each monitor showsDanilo M.1-0/+101
The list is a plain text file whose path is a preference, the default under ~/.config/keystone. Written through cat because an emptied list is an empty file, which FileView.setText does not write. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
12 hourscompanion: admire, turned to a wallpaper and then blushingDanilo M.2-2/+18
The watch back view for 1.5 s, then blush3 for 3 s, at most every 3 minutes. Below clicks, so a click during it wins; above the mock and typing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
12 hourscompanion: ListFile.js, the wallpaper list as plain textDanilo M.2-0/+63
Toggling keeps comments and every other line, so a hand-edited list survives the picker's heart. wallp.conf's outputs map a monitor to the H or V wallpaper. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hourscompanion: a remark for the program in front of herDanilo M.3-0/+32
The focused window's class, from Hyprland's activewindow event, picks a line from Lines.js keyed app:<class>. The event fires on every title change too, so she reacts only when the class changes, and a third of the time, under the existing 30 s line cooldown so alt-tabbing does not make her chatter. Classes come from the window rules in the live config; one without lines says nothing. Lines only, no frames of her own yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hourscompanion: shown or hidden survives a restart, with a settings switchDanilo M.2-19/+21
SUPER+\ only flipped a property, so every restart of the desktop shell brought her back. Whether she is shown is now `companion` in Prefs.qml, set by the IPC and by a switch on a new Settings > Desktop > Companion page. Prefs gains `ready`, so she waits for the file rather than showing at the default and then vanishing; the greeting now plays on every appearance, the one at login included. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hourscompanion: idle in step with wscreensavers, and despite No lockDanilo M.2-8/+35
Her stages sat at 1, 3 and 5 minutes, and the saver starts at 5, so she lay down under it. They are now 20, 40 and 70% of wscreensavers' idleTimeoutMinutes, read live from its config: 1, 2 and 3.5 minutes at its default. She never idled at all while No lock was on: it holds an idle inhibitor and her monitors respected inhibitors. Measured with a throwaway shell, a 5 s monitor respecting them never fired while one ignoring them did. They now ignore inhibitors, as the saver does, and presentation and gaming mode keep her awake by name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hourscompanion: above every overlay that opens, with a hop back inDanilo M.2-17/+20
Remapping only when the assistant opened left her under rofi and the keybind reminder, which map on the same Overlay layer later. She now remaps on Hyprland's openlayer event for any namespace but her own, restarting the timer so a burst of openings ends with her on top. The bare remap read as a flicker. Unmapped she now counts as away, so her figure drops out unseen during the 400 ms and plays its entrance when she is back: a vanish and a hop in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hourscompanion: above the assistant's dim, and typing means a run of keysDanilo M.2-2/+31
The assistant canvas is a full-screen Overlay surface mapped on open, so it covered her and her think and wave were never seen. She moves to the Overlay layer and unmaps and maps again when the canvas opens, since a later surface stacks above an earlier one and Hyprland 0.56.2 has no layer rule to order them: an `order` key was tried, raised no config error, and did nothing. Every key sent her into watching, a shortcut included. The pulse comes at most once a second, so a lone key is one pulse; she now watches from the second pulse within 2.5 s. The hypr-theme hook drops modifiers and chords on its side. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hourscompanion: a shorter shove, 0.5 sDanilo M.1-1/+1
The balloon arrives almost at once, so 1.2 s of stumbling outlasted the push. She turns mad beside it after half a second. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hourscompanion: shoved for a moment, then mad beside the balloonDanilo M.3-5/+15
The shoved frame held for as long as a balloon stayed, which read as her stumbling for ten seconds. It now lasts T.shoveHold (1.2 s), then she is mad beside the balloon until it goes. shovedAt is reset to 0 when the shove ends and 0 reads as the shove's first instant, so the binding cannot show mad for a tick before the handler stamps the time. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
14 hourscompanion: README, AGENTS listing, Lines.js and Figure.qml in the specDanilo M.1-0/+51
The README records the measurements the code depends on: where typing and BackSpace come from, why the dodge waits for the pointer, the IdleMonitor enabled default, and fullscreen 2 against maximised 1. AGENTS.md gains the QtQuick Sprite trap beside the Controls Button one, since it took the desktop shell down on restart. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
14 hourscompanion: the window, her inputs and her drawingDanilo M.2-0/+516
Companion.qml is a Top-layer PanelWindow bottom-right of the focused monitor, masked to her body so every other click passes through. It gathers the inputs (Hyprland's custom typing and delete events, the assistant's state and replied signal, the balloons on her screen, three IdleMonitors, clicks and a hover), hands a snapshot to Mood.js, and speaks from Lines.js. Figure.qml crossfades frames, bobs, drops out of view and back, and plays the self-destruct. Figure.qml was planned as Sprite.qml, but QtQuick ships a Sprite type and an explicit import beats the directory's own file: the shell failed to load with "Cannot assign to non-existent property onSettled". Maximised windows report fullscreen 1 and most windows here are, so only 2 hides her. She only feels the pointer once it is on her, so the dodge waits 0.6 s and a quick click still lands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
14 hourscompanion: her lines and the opening monologueDanilo M.1-0/+45
Fixed English lines per reaction, terse in the game's register, and the opening monologue split at its sentences so each fills one bubble. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
14 hourscompanion: Mood.js, which state winsDanilo M.2-0/+212
The spec's priority table as a pure function over a snapshot of her inputs, with the click burst, the outfit after the self-destruct, the mock and line cooldowns and the monologue's odds beside it. Pure so the node check can drive it with a fake clock; Companion.qml will own the inputs and timers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
14 hourscompanion: the leotard setDanilo M.1-6/+14
All 37 frames are made. The generic leotard line kept pose and mood only where the dress frame showed her eyes; elsewhere klein drew new ones and lost the mood (mad went sad, yawn laughed), so those name the mood. It also could not take the blindfold off a face it could not see: through three prompts, by name and by position, the back view and the sleeping face kept its band. From leotard/base, which never had one, both are ordinary pose edits. scorched names where the white shows, below the waist only, after it painted the bodice white too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
15 hourscompanion: shoved's reference lives in refs/, not candidates/Danilo M.1-3/+3
candidates/ held rerolls to choose between and is cleared once a choice is made; the seed-7 attempt dress/shoved is edited from is a reference, so it moves to refs/ with the official art. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
15 hourscompanion: the dress set, a shoved frame, several references per frameDanilo M.2-21/+52
The dress frames are made. What the tries taught is in frames.txt beside each line: klein turns the blindfold into an eye mask under strong expressions, so those take it off (BARE) and the rest name it as one solid band (EYES); standing "shoved" read as walking in four seeds, so it is airborne, edited from the seed-7 attempt kept in candidates/; a back view fits "watch", her watching the screen while the user types; klein would neither draw the game's Virtuous Treaty nor move a sword, nor turn her three-quarters, so muse takes only the arms of her official art. gen-frames now takes several references per frame (a + b): the first is edited, the rest are images the prompt points at. The leotard set loses the blindfold too. shoved gets a frame of its own instead of mad: in the spec's table and the plan's Mood.js and its test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
17 hourscompanion: frames.txt, gen-frames and prep-framesDanilo M.3-0/+255
The frames are a list now, not a session in the web UI: frames.txt holds one line per frame (output, the image klein edits, the prompt, with shared sentences as variables), and gen-frames makes the missing ones, or the ones named, through the running sd-server's job API (/sdcpp/v1/img_gen, polled at /sdcpp/v1/jobs/<id>). sd-cli would reload the model for every frame. Adding or changing a frame is an edit and a rerun; --seed rerolls one. Then prep-frames cuts each out of its white background at one common scale. Checked on dress/smile: about 2 minutes a frame on klein, pose and outfit kept. The art stays outside the repo, in ~/.local/share/keystone/companion. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>