Polish Round
This commit is contained in:
@@ -17,3 +17,4 @@ jobs:
|
|||||||
- run: node --check daemon/dbus-service.js
|
- run: node --check daemon/dbus-service.js
|
||||||
- run: node --check apps/gnome-extension/[email protected]/extension.js
|
- run: node --check apps/gnome-extension/[email protected]/extension.js
|
||||||
- run: python3 -c "import xml.etree.ElementTree as E; E.parse('dbus/io.qvac.Jarvis.Session.xml')"
|
- run: python3 -c "import xml.etree.ElementTree as E; E.parse('dbus/io.qvac.Jarvis.Session.xml')"
|
||||||
|
- run: python3 -m py_compile apps/control-center/main.py computer-use/py/*.py
|
||||||
|
|||||||
@@ -3,3 +3,5 @@ qvac.config.local.json
|
|||||||
.env
|
.env
|
||||||
dist/
|
dist/
|
||||||
*.log
|
*.log
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# JARVIS-QVAC
|
# JARVIS-QVAC
|
||||||
|
|
||||||
Local-first Ubuntu GNOME voice assistant scaffold. The cognitive core is the
|
Local-first Ubuntu GNOME voice assistant. The cognitive core is the
|
||||||
already-extracted `/home/raven/dev/agent-harness`, copied into
|
already-extracted `/home/raven/dev/agent-harness`, copied into
|
||||||
`vendor/agent-harness`; Jarvis does not copy or depend on `/home/raven/dev/dlinux`.
|
`vendor/agent-harness`; Jarvis does not copy or depend on `/home/raven/dev/dlinux`.
|
||||||
|
|
||||||
@@ -25,8 +25,14 @@ GPU inference is a hard requirement. `gpu-doctor` must report a QVAC-visible
|
|||||||
GPU and `jarvisd` refuses to continue if the loaded model reports `device: cpu`.
|
GPU and `jarvisd` refuses to continue if the loaded model reports `device: cpu`.
|
||||||
This prevents a misleading CPU mode and competing QVAC workers.
|
This prevents a misleading CPU mode and competing QVAC workers.
|
||||||
|
|
||||||
Current repository scope is phase-0/phase-1 bootstrap plus the computer-use
|
The repository contains the daemon, single GPU-only QVAC master, copied agent
|
||||||
grant boundary. Portal ScreenCast/RemoteDesktop, AT-SPI, PipeWire audio, the
|
harness, voice loop, GNOME ARC extension, GTK4/libadwaita control center,
|
||||||
full D-Bus adapter, GTK control-center pages, and the voice state machine are
|
computer-use observation and safety boundaries, and the full QVAC capability
|
||||||
the next implementation slices. See [docs/agent-harness-map.md](docs/agent-harness-map.md)
|
skill registry. See [docs/ROADMAP.md](docs/ROADMAP.md),
|
||||||
and [docs/cu-acceptance.md](docs/cu-acceptance.md).
|
[docs/agent-harness-map.md](docs/agent-harness-map.md), and
|
||||||
|
[docs/cu-acceptance.md](docs/cu-acceptance.md).
|
||||||
|
|
||||||
|
Runtime inference refuses to start until the QVAC SDK reports a usable GPU.
|
||||||
|
The RemoteDesktop/libei input bridge also remains unavailable until the local
|
||||||
|
GNOME portal session and a real EIS injector are present; Jarvis never claims
|
||||||
|
that an action succeeded when the backend is missing.
|
||||||
|
|||||||
Binary file not shown.
@@ -2,6 +2,8 @@
|
|||||||
"""RemoteDesktop consent broker for the local EIS input worker."""
|
"""RemoteDesktop consent broker for the local EIS input worker."""
|
||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
try:
|
try:
|
||||||
import gi
|
import gi
|
||||||
gi.require_version('Gio', '2.0')
|
gi.require_version('Gio', '2.0')
|
||||||
@@ -26,6 +28,9 @@ try:
|
|||||||
session = request('CreateSession', '(a{sv})', ({'session_handle_token': GLib.Variant('s', token)},))['session_handle']
|
session = request('CreateSession', '(a{sv})', ({'session_handle_token': GLib.Variant('s', token)},))['session_handle']
|
||||||
request('SelectDevices', '(oa{sv})', (session, {'types': GLib.Variant('u', 3), 'persist_mode': GLib.Variant('u', 2)}))
|
request('SelectDevices', '(oa{sv})', (session, {'types': GLib.Variant('u', 3), 'persist_mode': GLib.Variant('u', 2)}))
|
||||||
request('Start', '(osa{sv})', (session, '', {}))
|
request('Start', '(osa{sv})', (session, '', {}))
|
||||||
|
if not os.environ.get('JARVIS_LIBEI_BRIDGE'):
|
||||||
|
raise RuntimeError('portal consent succeeded but no local libei injector is configured; refusing to claim input readiness')
|
||||||
|
injector = subprocess.Popen(os.environ['JARVIS_LIBEI_BRIDGE'], shell=True, stdin=subprocess.PIPE, text=True)
|
||||||
print(json.dumps({'type': 'ready', 'session': session, 'restore_token_present': True}), flush=True)
|
print(json.dumps({'type': 'ready', 'session': session, 'restore_token_present': True}), flush=True)
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
print(json.dumps({'type': 'error', 'reason': str(exc)}), flush=True)
|
print(json.dumps({'type': 'error', 'reason': str(exc)}), flush=True)
|
||||||
@@ -34,5 +39,9 @@ for line in sys.stdin:
|
|||||||
action = json.loads(line)
|
action = json.loads(line)
|
||||||
if action.get('type') == 'close':
|
if action.get('type') == 'close':
|
||||||
break
|
break
|
||||||
|
if 'injector' in globals() and injector.stdin:
|
||||||
|
injector.stdin.write(json.dumps(action) + '\n'); injector.stdin.flush()
|
||||||
except Exception:
|
except Exception:
|
||||||
continue
|
continue
|
||||||
|
if 'injector' in globals():
|
||||||
|
injector.terminate()
|
||||||
|
|||||||
+1
-1
@@ -83,5 +83,5 @@ if (import.meta.url === `file://${process.argv[1]}`) {
|
|||||||
console.error(`jarvisd: D-Bus unavailable: ${error.message}`);
|
console.error(`jarvisd: D-Bus unavailable: ${error.message}`);
|
||||||
});
|
});
|
||||||
process.on('SIGINT', () => daemon.close().finally(() => process.exit(0)));
|
process.on('SIGINT', () => daemon.close().finally(() => process.exit(0)));
|
||||||
console.log('jarvisd scaffold ready; use the D-Bus adapter when installed');
|
console.log('jarvisd ready; QVAC inference remains GPU-gated');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,13 @@
|
|||||||
|
|
||||||
Run these on Ubuntu GNOME after `npm run cu-doctor` reports its required portal,
|
Run these on Ubuntu GNOME after `npm run cu-doctor` reports its required portal,
|
||||||
PipeWire, AT-SPI, and libei checks as passed. The ydotool result is optional.
|
PipeWire, AT-SPI, and libei checks as passed. The ydotool result is optional.
|
||||||
Phase 6 is observe-only: the explicit
|
The explicit computer-use grant is required, screenshots stay in
|
||||||
computer-use grant is required, screenshots stay in `/tmp/jarvis-cu`, and
|
`/tmp/jarvis-cu`, and actuation is enabled only after the local EIS injector
|
||||||
actuation remains a Phase 7 concern.
|
reports ready.
|
||||||
|
|
||||||
|
For live pointer and keyboard injection, configure `JARVIS_LIBEI_BRIDGE` with
|
||||||
|
the local EIS injector command. The portal helper refuses readiness without it;
|
||||||
|
this prevents a consent-only session from being mistaken for working input.
|
||||||
|
|
||||||
1. Observe Settings and toggle Night Light.
|
1. Observe Settings and toggle Night Light.
|
||||||
2. Type a sentence into Text Editor and save it.
|
2. Type a sentence into Text Editor and save it.
|
||||||
|
|||||||
Reference in New Issue
Block a user