Files
gnome-jarvis/docs/troubleshooting.md
snxraven ac5f18f79d
Rolling release / release (push) Failing after 2m11s
Updates
2026-09-14 10:19:13 -04:00

124 lines
4.8 KiB
Markdown

# Troubleshooting
## `gpu-doctor` reports no GPU
Confirm the driver and Vulkan/CUDA runtime are installed, then run the doctor
under the same graphical user session that will run `jarvisd`. A host command
such as `vulkaninfo` is insufficient if QVAC itself reports no device. Jarvis
will remain available for diagnostics but refuses inference until QVAC sees a
GPU.
## Voice doctor finds no wake engine
Fresh installs use the built-in CPU detector (`jarvis-wake-bridge`). If
`listeningMode` is Hold Talk only, or `wakeCommand` is empty, the detector is
disabled. A custom openWakeWord or sherpa-onnx bridge must read raw 16 kHz mono
PCM from stdin and write detected phrases, one per line, to stdout. Push-to-talk
remains useful for typed or manually triggered testing.
## Portal consent succeeds but input is unavailable
Grant desktop starts RemoteDesktop, then Jarvis connects to EIS with the
bundled libei sender. An external `JARVIS_LIBEI_BRIDGE` is optional. If input
still fails, run `npm run cu-doctor` and confirm `libei` is installed. Observation
does not need the injector: after a grant, `cu_observe` should return a screenshot
and accessibility tree even when pointer injection is down.
## Stylesheet parse `errcode:15`
GNOME Shell's St CSS parser rejects comments that contain `--`, `alpha(var())`,
and `icon-size`. If `journalctl` shows a stylesheet parse error on
`[email protected]`, copy the current `stylesheet.css` into the live extension
directory and disable/enable the extension (GNOME 50 cannot `ReloadExtension`).
See [brand](brand.md).
## Settings window crashes on accent hex
GTK 4 `Gtk.Entry` has no `maxLength` constructor property. The hex field uses
`entry.get_buffer().set_max_length(7)`. If an older checkout still constructs
`maxlength`, Settings will abort when opening the Desktop page.
## Panel label shows “Jarv…”
The panel used to show the product name and a state chip at the same time,
which GNOME truncated. Idle is mark plus **Jarvis**; busy is mark plus one
state chip (Listening / Thinking / Speaking / Privacy). Never both.
## The extension is missing
Preferences can open while the panel HUD is gone if the extension is installed
but not enabled in the running GNOME Shell. Re-run the installer so it copies
the HUD files and asks Shell to enable `[email protected]`. On GNOME 50 that
does not hot-reload; disable/enable the extension or log out if the panel is
still gone. The installer also keeps a copy at
`~/.local/share/gnome-shell/extensions/[email protected]`:
```bash
curl -fsSL https://git.ssh.surf/snxraven/gnome-jarvis/raw/branch/main/packaging/web-installer.sh | bash -s -- --enable
```
Then confirm `metadata.json` has UUID `[email protected]` and run:
```bash
gnome-extensions enable [email protected]
journalctl --user -b | grep -i jarvis
```
If the extension still does not appear, log out and back in once so GNOME Shell
reloads its extension search path.
## Browser tool says `no such file or directory`
`jarvisd` runs under Bare and starts a Node Playwright sidecar. Systemd user
services often do not have `node` on `PATH`, so spawn used to fail with that
message. Reinstall so `jarvisd.service` records `JARVIS_BROWSER_NODE`, then:
```bash
npm install
npm run browser:install
systemctl --user daemon-reload
systemctl --user restart jarvisd.service
```
To pin Node yourself:
```bash
systemctl --user edit jarvisd.service
```
Add `Environment=JARVIS_BROWSER_NODE=/usr/bin/node` under `[Service]`.
## The service reports `203/EXEC`
Current `jarvisd.service` starts packaged Bare, not `/usr/bin/node`. If
`ExecStart` still points at a missing `node` or Bare binary, re-run
`packaging/install.sh --enable` or the web installer. Check the result with:
```bash
systemctl --user cat jarvisd.service | grep ExecStart
```
## The daemon restarts
Inspect `journalctl --user -u jarvisd.service`. Common causes are a missing
Bare binary, invalid QVAC config, missing session D-Bus, missing GPU
visibility, or a stale portal grant. Run the three doctor commands before
changing model settings. Restarting `jarvisd` also clears an active desktop
grant.
## Groq agent chat fails immediately
Settings → Models → Agent inference → Groq requires a key in the Groq API key
field, or `GROQ_API_KEY` / `JARVIS_GROQ_API_KEY`. Jarvis does not fall back to
local QVAC chat. `401` means the key was rejected; `429` is rate limiting.
Speech, wake, tools, desktop, browser, and camera stay local. Webcam stills
reach Groq only if you pick a Qwen Groq vision model. Restart `jarvisd` after
switching between Local QVAC and Groq.
## Rolling release did not publish
Check the Gitea Actions log and repository secret name. It must be exactly
`RELEASE_TOKEN` with repository write permission. The workflow only publishes
from `main`; pull requests and other branches run CI but do not replace the
`rolling` prerelease.