Check Point
Rolling release / release (push) Successful in 6m36s

This commit is contained in:
2026-09-12 09:07:09 -04:00
parent e9040d110a
commit a4073b9020
63 changed files with 2459 additions and 632 deletions
+10
View File
@@ -24,3 +24,13 @@ hand.
The uninstall command requires `--yes` and preserves data. Add
`--purge-data` only when the user explicitly wants Jarvis-owned memory, cache,
and generated media removed.
## Shared settings and configurable speech
The GNOME preferences and standalone Control Center now share one window.
Daemon controls use `config.json`; only appearance and shortcuts use GSettings.
Opening preferences no longer copies GSettings defaults over JSON values.
Legacy snake_case settings and explicit GSettings customizations migrate when
you press Apply. See [settings](settings.md) for keys, application timing,
model compatibility, and controls that were removed because they had no
working backend.
+2
View File
@@ -55,3 +55,5 @@ must be verified on the target GNOME session.
- `jarvisd` means the user service and its packaged Bare process.
- “Master” means the singleton in `daemon/qvac-master.js`.
- Mermaid diagrams use Gitea-compatible fenced Markdown.
- [Settings and voice customization](settings.md)
+1 -1
View File
@@ -8,7 +8,7 @@
2. Run `npm ci`, `npm test`, and `npm run package:test`.
3. Review `dist/SHA256SUMS` and test the user installer in a disposable user
session with `packaging/install.sh --enable`.
4. Run the typed first-run smoke test and the computer-use acceptance flow.
4. Send a typed `Ask` over the session bus and run the computer-use acceptance flow.
## Gitea rolling release
+1 -1
View File
@@ -43,7 +43,7 @@ flowchart TB
| --- | --- | --- |
| GNOME Shell extension | panel, ARC overlay, highlights, Shell facts, D-Bus client | model loading, microphone capture, input injection, blocking work |
| `jarvisd` | voice state, QVAC master, harness bridge, jobs, D-Bus service | arbitrary Shell evaluation or a second planner |
| Control Center | settings, model fit, permissions, first-run controls | inference loop or hidden data deletion |
| Control Center | settings, model fit, permissions | inference loop or hidden data deletion |
| Computer-use helpers | portal sessions, frames, AT-SPI, EIS/legacy backend | model planning or lock-screen bypass |
| Agent harness | session history, planning, memory, tool loop, permissions | direct QVAC ownership or direct desktop hacks |
| QVAC master | SDK worker, GPU admission, lifecycle, serialization, cancellation | cloud APIs or independent model instances |
+2 -3
View File
@@ -14,12 +14,11 @@ On a logged-in GNOME session with a visible QVAC GPU backend:
```bash
bash packaging/install.sh --enable
bash packaging/first-run.sh
systemctl --user status jarvisd.service
gnome-extensions enable [email protected]
```
Complete the typed prompt first, then say “Hey Jarvis, whats on my screen?”
and approve a computer-use grant only for the acceptance actions in
Complete the typed prompt from the tray, then say “Hey Jarvis, whats on my
screen?” and approve a computer-use grant only for the acceptance actions in
`docs/cu-acceptance.md`. If the doctor reports no GPU, stop at diagnostics and
fix the QVAC runtime/driver path before attempting inference.
+180
View File
@@ -0,0 +1,180 @@
# Settings and voice customization
Open **Settings** in the Jarvis tray or conversation header. The standalone
Control Center (`python3 apps/control-center/main.py`) uses the same pages.
Search is available in the window header.
## Choosing a voice
1. On **Voice**, enable **Spoken replies** and choose a speech model.
2. For Supertonic, choose a voice (F1F5 or M1M5), then adjust speed,
quality steps, and volume. Start at speed 1.01.05 and 5 steps.
3. Edit **Preview text** and press **Apply & Preview**. **Stop** interrupts
playback. The preview does not add a chat message or replace the last reply.
4. Use **Reset this page** to restore defaults in the form, then Apply.
Models offered by the installed QVAC SDK:
- **Supertonic English:** the existing lightweight default. Uses English.
- **Supertonic 3:** multilingual speech with a language picker. Its registry
model supports the 31 languages listed in the window.
- **Chatterbox Turbo:** English speech with an optional local reference voice
recording. Choose a clear mono WAV of at least five seconds. Leave it empty
for the model's default voice. Supertonic voice IDs and speed do not apply.
- **Parler Mini:** English speech controlled by a written voice description.
Describe pitch, tone, pace, and recording style. Variation, seed, CPU threads,
and GPU acceleration are available. It does not use Supertonic voice IDs.
The preset voice IDs follow the [official Supertonic voice list](https://github.com/supertone-inc/supertonic/blob/main/web/README.md).
Older GGUF bundles may contain fewer voices. Unsupported voices or unavailable
models produce an error in Settings rather than silently falling back.
The presets and configuration fields were checked against the installed
`@qvac/inference` 0.19.1 schemas, model registry, and `@qvac/tts-ggml` 0.8.1
implementation. Each engine's native audio rate is used for playback (24 kHz
for Chatterbox, 44.1 kHz for Supertonic and Parler).
## Saving and applying
**Apply** saves the form and reloads voice, listening, audio routing, and desktop
settings. A running chat request must finish first. Loading a new model may
require a download and take time; the status row reports progress or errors.
Already downloaded assets use the QVAC cache. The preview requires spoken
replies to be enabled.
Chat model and agent-limit changes require **Models → Save & Restart**.
This saves pending changes and restarts `jarvisd.service`, ending current work.
If the service is not installed or D-Bus is unavailable, settings remain saved;
the status explains what still needs applying. The daemon also reads them on
its next launch. Appearance and hotkey changes apply immediately through GNOME.
Settings live in `$XDG_CONFIG_HOME/jarvis/config.json`, defaulting to
`~/.config/jarvis/config.json`. Opening a window does not write to this file.
Saving re-reads it and merges only changed fields, preserving unrelated keys
and changes from another window. Invalid JSON is reported and not overwritten.
Legacy snake_case keys and explicitly customized voice GSettings are migrated;
the JSON file takes precedence over GSettings. New writes use the keys below.
`JARVIS_TTS_MODEL`, `JARVIS_ASR_MODEL`, `JARVIS_WAKE_COMMAND`, and
`JARVIS_QVAC_MODEL` environment variables take precedence over the form. Apply
reports active overrides. The custom speech model must match the selected
engine; an arbitrary model does not change the engine automatically.
## Listening and desktop behavior
**Microphone input** disables capture entirely when off. **Hold Talk only**
keeps automatic wake and follow-up listening off; **One request per wake**
returns to the armed state after a reply. A wake phrase needs a configured
local detector trained to recognize it. Changing the text alone does not train
or install a detector.
Microphone and speaker pickers list PipeWire devices by name. An empty value
means the system default. Refresh after plugging in a device. Speech detection
controls adjust quiet-speech sensitivity, pause timing, minimum speech, maximum
recording duration, and post-playback echo protection.
Desktop mode is enforced: Disabled refuses grants, Observe only refuses input,
and Observe and control permits input within an explicit temporary grant.
Changing mode, duration, or budget revokes existing access. Screenshot dimensions
and WebP quality tune observation detail and processing cost.
## Complete daemon setting reference
### Speech
- **Spoken replies** — `ttsEnabled`, default `true`. Read replies aloud using local speech synthesis.
- **Speech model** — `ttsPreset`, default `"supertonic-en"`. Models download on first use. Larger models need more memory. Choices: `supertonic-en`, `supertonic3`, `chatterbox`, `parler`.
- **Voice** — `voiceId`, default `"F1"`. Try the same preview with different voices. Available voices depend on the model bundle. Choices: `F1`, `F2`, `F3`, `F4`, `F5`, `M1`, `M2`, `M3`, `M4`, `M5`.
- **Speech language** — `ttsLanguage`, default `"en"`. The English models always use English. Choose Supertonic 3 for other languages. Choices: `en`, `ko`, `ja`, `ar`, `bg`, `cs`, `da`, `de`, `el`, `es`, `et`, `fi`, `fr`, `hi`, `hr`, `hu`, `id`, `it`, `lt`, `lv`, `nl`, `pl`, `pt`, `ro`, `ru`, `sk`, `sl`, `sv`, `tr`, `uk`, `vi`.
- **Speaking speed** — `ttsSpeed`, default `1.05`. 1 is normal speed; lower is slower. Range: 0.254.
- **Voice quality steps** — `ttsSteps`, default `5`. More steps can improve quality but take longer. Range: 130.
- **Reply volume (%)** — `ttsVolume`, default `100`. Relative to the system speaker volume. Does not change other apps. Range: 0100.
- **Preview text** — `previewText`, default `"Hello. I am Jarvis. This is how I will sound with your settings."`. Use the same sentence to compare voices.
### Voice design
- **Reference voice recording** — `ttsReferenceAudio`, default `""`. Choose a clear mono WAV recording of at least 5 seconds. Leave empty for the models default voice.
- **Synthesis quality steps** — `ttsCfmSteps`, default `2`. Chatterbox: fewer steps respond faster. Range: 110.
- **Describe the voice** — `ttsDescription`, default `"A clear, warm voice speaks at a natural pace in a quiet room."`. Parler: describe tone, pace, pitch, and recording style in English.
- **Voice variation** — `ttsTemperature`, default `1`. Parler: higher values produce more variation. Range: 02.
- **Voice seed** — `ttsSeed`, default `42`. Use a fixed seed for repeatable speech generation. Range: 02147483647.
- **Speech CPU threads** — `ttsThreads`, default `4`. Limit CPU work for Chatterbox and Parler. Range: 132.
- **Accelerate speech with GPU** — `ttsUseGpu`, default `false`. Use a supported GPU backend for speech synthesis. May increase GPU memory use.
- **Custom speech model** — `ttsModel`, default `""`. Advanced: registry name or local GGUF matching the selected speech model. Empty uses the bundled preset.
### Listening
- **Microphone input** — `microphoneEnabled`, default `true`. Turn off for typed chat and speech output only.
- **Recognition model** — `asrModel`, default `"WHISPER_TINY"`. Larger models need more memory and download on first use. Choices: `WHISPER_TINY`, `WHISPER_BASE_Q8_0`, `WHISPER_SMALL_Q8_0`.
- **Recognition language** — `asrLanguage`, default `"en"`. Whisper language code such as en, es, fr, or auto.
### Wake and privacy
- **Wake phrase** — `wakePhrase`, default `"hey jarvis"`. Must match a phrase supported by your local wake detector.
- **Wake aliases** — `aliases`, default `["jarvis", "okay jarvis"]`. Additional detector phrases, separated by commas.
- **Wake detector command** — `wakeCommand`, default `""`. Advanced: local program that receives microphone audio. Leave empty to use Hold Talk.
- **Listening behavior** — `listeningMode`, default `"conversation"`. Hold Talk only disables the wake detector and automatic follow-up listening. Choices: `conversation`, `single`, `ptt`.
- **Idle sleep delay (minutes)** — `idleMinutes`, default `30`. Sleep after this much listening inactivity. Range: 1240.
### Detection tuning
- **Speech detection threshold** — `vadThreshold`, default `0.6`. Lower picks up quieter speech; higher rejects more background noise. Range: 0.051.
- **Minimum speech (ms)** — `vadMinSpeechMs`, default `300`. Ignore very short sounds during automatic listening. Range: 1002000.
- **Pause before sending (ms)** — `vadSilenceMs`, default `700`. Wait this long after speech before sending your request. Range: 2003000.
- **Maximum recording (seconds)** — `vadMaxSpeechSeconds`, default `15`. Limit each recorded utterance, including pauses. Range: 3120.
- **Echo protection after replies (ms)** — `playbackCooldownMs`, default `400`. Delay microphone processing after speech output ends. Range: 02000.
### Audio routing
- **Microphone device** — `inputTarget`, default `""`. System default follows your desktop sound settings. Refresh the list after connecting a device.
- **Speaker device** — `outputTarget`, default `""`. System default follows your desktop sound settings. Refresh the list after connecting a device.
### Desktop access
- **Desktop access mode** — `computerMode`, default `"act"`. A temporary Allow now grant is always required. Changing this revokes existing access. Choices: `off`, `observe`, `act`.
- **Actions per grant** — `computerSteps`, default `20`. Maximum input actions before another grant is needed. Range: 1100.
- **Grant duration (minutes)** — `computerGrantMinutes`, default `3`. Desktop access expires automatically. Range: 115.
### Desktop images
- **Screenshot maximum edge (pixels)** — `screenshotMaxEdge`, default `1280`. Larger screenshots preserve detail but take more memory. Range: 6402560.
- **Screenshot quality (%)** — `screenshotQuality`, default `70`. Higher WebP quality preserves more text detail. Range: 3095.
### Chat model
- **Chat model profile** — `modelProfile`, default `"laptop-16gb"`. Requires a daemon restart. GPU inference remains required. Choices: `laptop-8gb`, `laptop-16gb`, `desktop-gpu`.
- **Custom chat model** — `chatModel`, default `""`. Advanced: overrides the profile. Empty uses the profile model. Requires restart.
### Agent limits
- **Maximum reasoning turns** — `maxTurns`, default `6`. Requires restart. Limits how long the assistant works on one request. Range: 130.
- **Shell commands per request** — `maxShellCalls`, default `1`. Requires restart. Commands still require normal permissions. Range: 110.
- **Tool rounds per request** — `maxToolRounds`, default `4`. Requires restart. Limits repeated tool use. Range: 120.
## GNOME appearance and boundaries
The Desktop page also exposes the GNOME hotkey, accent color, and tray versus
expanded layout. These retain their GSettings keys: `hotkey`, `accent-color`,
and `overlay-style`.
Previously displayed controls for chimes, legacy input fallback, enrollment,
startup, memory ingestion, Lab toggles, transcript retention, and disabling
confirmations did not consistently have working consumers. They are not
presented as working controls in the shared window. Their stored values are
preserved. Confirmations remain enforced; desktop mode is not a permission
bypass. CosyVoice3 and Audio8 need additional component and reference-text
configuration and are not offered as presets in this change.
## Verification
- `npm test`: migration, merging, validation, installed SDK schemas and registry,
adapter forwarding, volume, device routing, listening modes, VAD limits,
grant enforcement, preview behavior, and settings reload.
- `bash packaging/bare-launch.sh packaging/bare-run.js scripts/smoke-settings-runtime.js`:
validates the settings-to-adapter path under Bare without loading models.
- `XDG_CONFIG_HOME=/tmp/jarvis-settings-smoke GSETTINGS_BACKEND=memory gjs -m scripts/smoke-settings-ui.js`:
opens all four pages, saves page images under `/tmp`, checks engine-specific
control visibility, and closes. It does not save or apply settings.
Live audio quality, model downloads, and GPU support depend on the host and
selected model; the automated schema checks do not establish those results.