| Age | Commit message (Collapse) | Author | Files | Lines |
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|