Files
gnome-jarvis/docs/ROADMAP.md
T
2026-09-11 13:50:53 -04:00

243 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# JARVIS-QVAC roadmap
This is the implementation tracker for the local Ubuntu GNOME assistant. The
roadmap is ordered by dependency: runtime authority first, then cognition,
voice, desktop observation, actuation, UI, capability coverage, hardening, and
packaging.
## Product contract
Jarvis is local-first and session-scoped. The GNOME Shell extension stays thin;
all inference, audio, jobs, memory, and computer-use decisions run outside
gnome-shell. The extracted `/home/raven/dev/agent-harness` remains the sole
cognitive loop and is wrapped rather than rewritten.
## Non-negotiable runtime architecture
- One user service, `jarvisd`, owns the QVAC SDK worker.
- One `QVAC_CONFIG_PATH` points every Jarvis process at the same
`qvac.config.json`.
- One model profile is active at a time. The QVAC master owns load, unload,
suspend, resume, cancellation, and model status.
- Harness sessions call the master; skills never import QVAC independently and
never call `loadModel()` directly.
- `qvac serve --openai` is an optional diagnostic/API surface and is never
started by `jarvisd`; it must not run beside the master in production.
- GPU is mandatory for Jarvis runtime inference. The bridge requests GPU,
enables all GPU layers and GPU multimodal projection, and rejects a load
that QVAC reports as CPU. There is no silent CPU fallback.
- Audio capture, TTS, OCR, embeddings, RAG, media jobs, and multimodal work
use the same QVAC master scheduler and obey a GPU memory budget.
- A capability may report `unavailable: gpu-required` without weakening the
GPU policy or starting a competing runtime.
## Status legend
- `[x]` implemented and locally verified
- `[~]` scaffolded or partially implemented
- `[ ]` planned
## Phase 0 — repository and authority bootstrap
- [x] Confirm `/home/raven/dev/agent-harness` exists.
- [x] Copy the extracted harness into `vendor/agent-harness`.
- [x] Document harness layout, entrypoints, sessions, tools, memory, planner,
and model path in `docs/agent-harness-map.md`.
- [x] Pin the QVAC 0.19.0 API rules in `QVAC.md`.
- [x] Create Node 22.17+ workspaces.
- [x] Add one root `qvac.config.json` with localhost server settings and a
single model alias.
- [x] Add the initial daemon, computer-use, GNOME extension, D-Bus, and
control-center boundaries.
- [x] Install and lock dependencies with a successful `npm install`.
- [~] Review runtime dependency audit: `npm audit --omit=dev` reports 10
transitive findings through `dbus-next` (3 critical, 1 high, 6 moderate;
upstream reports no available fixes).
- [ ] Add repository CI for syntax, unit, schema, and extension checks.
Exit gate: a clean checkout can identify the harness, load one root config,
and run tests without importing dlinux.
## Phase 1 — single GPU QVAC master
- [x] Add `daemon/qvac-master.js` as the only Jarvis QVAC owner.
- [x] Serialize model loading and share the resulting harness engine.
- [x] Request `device: "gpu"`, `gpu_layers: 99`, and GPU multimodal projection.
- [x] Reject a CPU result instead of accepting QVAC's internal fallback.
- [x] Preflight QVAC GPU visibility before downloading or loading a model.
- [x] Enforce the vendored `@qvac/sdk` 0.19.x version at master startup.
- [x] Add owner counting and a single close path.
- [x] Set `QVAC_CONFIG_PATH`, `JARVIS_QVAC_MODEL`, and GPU policy in the user
service.
- [~] Add `gpu-doctor`; extend it to report QVAC resource capabilities, backend,
driver, device name, VRAM, model fit, and the exact reason for failure.
- [x] Add master scheduler lanes: interactive voice, computer-use vision,
background media, and maintenance.
- [ ] Add VRAM admission control and queue media jobs instead of OOMing the
voice lane.
- [ ] Add model profile selection using `assessModelFit()` before downloads.
- [ ] Add master-level cancellation by request ID and job ID.
- [ ] Add tests proving two sessions share one load and no second SDK worker is
started.
Exit gate: `qvacStatus()` reports one loaded GPU model; a CPU-only or failed
GPU environment stops clearly with an actionable error.
## Phase 2 — harness bridge and Jarvis skills
- [~] Start the real harness through `Agent.create()` and route token events.
- [ ] Add the voice-native system prompt and structured HUD sidecar.
- [~] Register Jarvis runtime/status tools through the harness custom-tool registry.
- [ ] Implement permission classes: read, write, dangerous, and computer-use.
- [ ] Connect confirmation events to spoken confirmation and HUD controls.
- [ ] Add desktop tools: launch/list apps, focus/list windows, workspaces,
notify, screenshot, clipboard, media, settings, and focused text injection.
- [ ] Add file search/read/write with trash-first destructive handling.
- [ ] Add memory and RAG workspace tools.
- [ ] Add QVAC wrappers for embeddings, translation, OCR, classification,
image/video/music jobs, transcription, TTS, LoRA, BCI, VLA, and ABot-World.
- [ ] Ensure every wrapper obtains the master lease and never loads QVAC itself.
- [ ] Add fake-QVAC fixture tests for every tool schema and permission gate.
Exit gate: a typed prompt completes through the real harness, streams tokens,
executes a Jarvis tool, and returns a short local response through the same
GPU-owned worker.
## Phase 3 — daemon lifecycle and D-Bus
- [~] Define `io.qvac.Jarvis.Session` XML.
- [~] Implement `Arm`, `Sleep`, `Shutdown`, `Say`, `Ask`, `Cancel`, `SetMode`,
and state queries.
- [~] Implement token, transcript, reply, audio-level, chip, job, computer
step, and error signals.
- [~] Add the Node D-Bus service implementation. Live bus smoke testing remains
pending on a normal user session because this sandbox cannot bind a D-Bus
session socket.
- [ ] Keep payloads small; stream PCM and screenshots through a Unix socket or
tmpfs paths.
- [ ] Add lock-screen handling: mute, hide UI, revoke computer use.
- [~] Add idle sleep using QVAC `suspend()` and resume on wake.
- [ ] Add structured JSON logging with no prompt/audio/image contents by default.
Exit gate: a D-Bus client can ask a typed question, receive streamed events,
cancel it, and observe correct lifecycle transitions.
## Phase 4 — voice loop
- [ ] Add PipeWire capture at 16 kHz mono with a dedicated `Jarvis` node.
- [ ] Add wake-word engine behind a `WakeEngine` interface.
- [ ] Add VAD segmentation and the documented QVAC ASR stream.
- [ ] Implement `ARMED → LISTENING → THINKING → SPEAKING → LISTENING`.
- [ ] Add transcript filtering, TTS anti-feedback gate, and playback cooldown.
- [ ] Add sentence buffering from streamed harness output into QVAC TTS.
- [ ] Add fast-path cancel, sleep, privacy, dictate, screen, and computer-use
commands.
- [ ] Add push-to-talk and typed fallback.
- [ ] Add wake false-accept/false-reject and feedback measurements.
Exit gate: “Hey Jarvis” starts a local GPU-backed turn, speaks a response, and
does not self-trigger from its own TTS.
## Phase 5 — GNOME ARC surface
- [~] Add GNOME 45+ ESM extension metadata, panel indicator, and settings keys.
- [ ] Add async D-Bus client and panel state glyphs.
- [ ] Add ARC overlay, waveform, transcript rows, chips, local/model status,
reduced motion, high contrast, keyboard navigation, and screen-reader labels.
- [ ] Add listening halo, privacy slash, job theater, target highlights, and
visible computer-use cursor.
- [ ] Keep all extension work nonblocking and free of QVAC/native inference.
Exit gate: enabling/disabling the extension never starts inference in the Shell
process and reflects daemon state without jank.
## Phase 6 — computer-use observe and semantic action
- [ ] Complete `cu-doctor`: Wayland/X11, portal, PipeWire, AT-SPI, libei, and
optional fallback detection.
- [ ] Implement portal ScreenCast/Screenshot and tmpfs frame normalization.
- [ ] Implement GNOME Shell window truth and focus methods.
- [ ] Implement AT-SPI tree snapshots with per-step stable refs.
- [ ] Implement OCR and QVAC multimodal observe bundles.
- [ ] Implement `cu.observe`, `cu.zoom`, `cu.tree`, and `cu.find`.
- [ ] Implement `cu.act` and semantic `cu.click`.
- [ ] Implement grant/revoke, expiry, step budget, audit hashes, and no-frame
retention by default.
Exit gate: “whats on my screen?” returns grounded local observations without
actuation.
## Phase 7 — computer-use portal actuation
- [ ] Implement RemoteDesktop portal consent and restore tokens.
- [ ] Implement libei/EIS pointer, keyboard, scroll, drag, hover, and key input.
- [ ] Implement typed Unicode and submit behavior.
- [ ] Add target preview, agent cursor, and step ticker.
- [ ] Prefer domain tools, app D-Bus, AT-SPI, Shell helper, then vision
coordinates in that order.
- [ ] Refuse password/PAM roles and lock-screen/greeter actions.
- [ ] Require confirmation for destructive or high-impact actions.
- [ ] Keep ydotool and X11 tools disabled unless explicitly enabled.
- [ ] Add state-change self-checks, animation waits, and no-progress aborts.
Exit gate: Night Light, Text Editor save, Firefox URL entry, hands-off abort,
and lock-screen kill pass `docs/cu-acceptance.md`.
## Phase 8 — GTK4/libadwaita control center
- [ ] Implement General, Voice, Models, Memory, Skills, Computer use, Privacy,
Lab, and About pages.
- [ ] Show the single QVAC master status, GPU backend, VRAM, model, fit result,
queue, and failure reason.
- [ ] Make every capability visible even when its model does not fit.
- [ ] Add model download pause/resume through the master.
- [ ] Add voice enrollment and local preview.
- [ ] Add RAG workspace management, retention controls, audit export/delete,
and computer-use permissions.
Exit gate: a user can configure the complete system without editing JSON.
## Phase 9 — full QVAC capability coverage
- [ ] Chat, plan, summarize, rewrite, code, embeddings, RAG, batch prompts.
- [ ] Multimodal screenshot/file analysis, OCR, classification.
- [ ] Image generation/editing, video jobs, music jobs.
- [ ] ASR, diarized meetings, TTS, voice clone enrollment, translation relay.
- [ ] LoRA training with explicit confirmation and overnight job controls.
- [ ] BCI, VLA, and ABot-World as clearly labeled Lab capabilities.
- [ ] Registry/model manager, checksums, fit assessments, profiler, and job
cancellation.
- [ ] Optional P2P model fetch and memory sync only after local mode is stable.
Exit gate: every capability in the product inventory has a working skill or a
truthful GPU/model-unavailable state.
## Phase 10 — reliability, privacy, and performance
- [ ] OOM isolation: failed media jobs cannot kill the voice lane.
- [ ] GPU telemetry: utilization, VRAM, queue wait, load time, tokens/sec,
ASR latency, TTS latency, and dropped audio.
- [ ] Wake, feedback, Wayland/X11, accessibility, lock/unlock, crash/restart,
and nested Shell smoke tests.
- [ ] Verify no network calls except explicitly enabled model fetch/P2P paths.
- [ ] Verify no screenshots, microphone buffers, prompts, or transcripts are
retained unless the user enables retention.
- [ ] Audit computer actions with target metadata and screenshot hashes only.
- [ ] Add graceful restart and state recovery for daemon crashes.
Exit gate: the full test matrix passes on supported Ubuntu GNOME sessions with
GPU inference visibly confirmed.
## Phase 11 — packaging and release
- [ ] Build a `.deb`, extension bundle, and user-service installer.
- [ ] Add first-run wizard for microphone, wake phrase, GPU/model profile, TTS,
and a typed smoke test.
- [ ] Add uninstall that removes only Jarvis-owned data after explicit choice.
- [ ] Publish a hardware compatibility matrix for Vulkan/GPU backends.
- [ ] Add release checklist, migration notes, and a reproducible local demo.
Definition of done: all product behaviors in the specification work on Ubuntu
GNOME with one GPU-backed QVAC master, one harness planner, explicit computer-
use grants, and truthful capability status.