Watch
1
0
Fork
You've already forked SouveraineOS
0
No description
  • Python 86.4%
  • C 8.4%
  • Shell 5.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Fimeg 49332838d3 TASK-26: correct the sensor claim; the machine absorbs the scripts
Wrong on two counts before. The sensors are not in question - SLPI bring-up
was solved 2026-07-10 and the 07-13 SUID sweep found accel/gyro (BMI160),
mag (LIS2MDL), pressure (BMP380), ambient_light/proximity (TMD2725) and
sensor_temperature; only amd lacks a SUID. A failed monitor-sensor
accelerometer claim was contention with blueline-autorotate, not absence.

And the target is not to make the scripts clients of the state machine. The
machine absorbs them: proximity-while-locked, the DT2W gate and rotation are
device state reactions by definition. Three scripts, two of them reading the
same proximity signal, are three state machines with no forensic log and no
coordination - which is why they land together, not one at a time.

Adds the 07-25 SLPI/hexagonrpcd outage as the concrete argument that
evidence-source health is itself device state.
2026-07-25 08:22:53 -04:00
blueline squeekboard: retired — stevia (patched for Hyprland) is the OSK now 2026-07-21 09:09:20 -04:00
docs TASK-26: correct the sensor claim; the machine absorbs the scripts 2026-07-25 08:22:53 -04:00
PAF PAF: bring the blueline architecture framework into SouveraineOS 2026-07-24 11:04:07 -04:00
STATE.md TASK-26: sensor evidence and a single authority over it 2026-07-25 08:14:15 -04:00

Souveraine quickshell surface

The desktop shell as a Souveraine surface — the primary visual frontend for SouveraineOS, with the TUI remaining the dive-in instrument.

Architecture

  • services/Souveraine.qml — the substrate singleton. The ONE server connection every shell module hangs off: agent inventory, conversation lifecycle, the SSE turn stream (raw events re-emitted via streamEvent(var)), the backchannel (cancelTurn() / interject(text)), and the desktop sensorium — every send carries ambient context (active window, open apps, cursor position) so she perceives the room she is being spoken to in. Device sensors (SouveraineOS positional data from the Pixel 3 kernel path) extend collectAmbient().
  • services/Ai.qml — ii-compat adapter. Keeps the API the illogical-impulse sidebar expects; owns no transport. Shapes wire events into the message objects the existing chat UI renders.
  • modules/ (coming) — presence (portrait PNGs from memfs, posture state machine), cockpit (subconscious pane), agents (masterdetail manager), settings, schedules. Each subscribes to the Souveraine singleton.

What changes

  • "Models" in the sidebar are Souveraine agents (GET /v1/agents). Picking one starts a conversation with that agent — memory, sensors, subconscious and all.
  • Messages stream over the server's SSE endpoint (POST /v1/conversations/:id/messages), authenticated with the agent's bearer token from ~/.souveraine/server/agents/<id>/api_token.
  • Subconscious surfacings, reflection, and archivist pressure render in the chat as interface notes (dedicated widgets later).
  • Reasoning and sensor activity render inside collapsible <think> blocks.
  • Keys/providers/temperature are owned by souveraine.toml — the sidebar's /key and /temp commands now just point there. The keyring path is dead.
  • Token pressure is fetched after each turn from GET /v1/conversations/:id/tokens.

Portability (KDE / non-Hyprland)

Souveraine.qml itself is compositor-agnostic: quickshell runs on any wlroots-ish Wayland compositor and KWin; window sensing uses the foreign-toplevel protocol (KWin implements it); the cursor read tries hyprctl, then kdotool, then degrades to nothing — ambient never blocks a send. Server autostart is desktop-neutral (systemd user unit, nohup fallback), so opening any surface summons her.

What is NOT portable yet is the chrome: the chat UI is illogical-impulse's sidebar. The path for "I run KDE, can I use this?" is a standalone quickshell config (own ShellRoot + a window hosting the chat/presence modules) that ships Souveraine.qml unchanged — planned once the modules stop being ii-embedded. Same service, same mappings, different shell.

Deploy

./deploy.sh        # backs up upstream Ai.qml, symlinks ours in
./deploy.sh -u     # restore upstream

Requires the server: souveraine server (default http://127.0.0.1:8484, override with ai.souveraineUrl in the ii config).

Wire contract

The server's SSE layer is a full mirror of BackendEvent (see src/api/models.rs::StreamEvent — exhaustive From impls both ways, so a new engine event is a compile error at the seam, not a silent skip). The surface consumes the personification channel: subconscious tokens buffer and flush as one bubble when the N+1 pass ends (subconscious_pass), halts land as body signals, interstitials render by register (cenno = quiet aside, her_voice = gutter passage), primary_complete releases the input while the stream stays open for the subconscious, and context_pressure drives the live token counter. atmosphere/outfit/itinerary are logged, awaiting their shell-chrome layer.

Server-side, the backchannel and verbs exist for every surface: POST /v1/conversations/:id/cancel (interrupt, *[raised hand]* semantics), .../interject (mid-turn notes, queued between turns), GET .../messages (transcript backfill), POST .../fork (/btw side-quests). SendMessageRequest.ambient injects the sensorium note. RemoteBackend rides all of it, so TUI remote mode gained cancel/interject/ fork/resume in the same stroke.

Not yet wired

  • Sidebar UI hooks for cancel (Esc) and interject (type-while-busy) — the service functions exist, the ii chat input doesn't call them yet
  • Conversation resume in the sidebar (server verb exists; surface always starts fresh)
  • Atmosphere/outfit/itinerary driving actual shell chrome (events arrive; modules pending)
  • File/image attachments (server has an image path; surface doesn't use it yet)
  • Regenerate (Souveraine conversations are forward-only by doctrine)
  • "Blank LLM mode" — a memoryless passthrough agent for throwaway questions; needs a server-side agent flavor first
  • Dedicated widgets for surfacing/subconscious bubbles instead of interface notes