The package check expected an exact node_modules member, but a symlink from the build tree is not a runtime other machines can run. Co-authored-by: Cursor <[email protected]>
2.4 KiB
Bare runtime
The installed JARVIS daemon runs on the packaged Bare ELF runtime. Node.js is used in CI for npm dependency resolution and the portable test suite; it is not required on an end user’s machine.
flowchart LR
Install[web installer] --> Bundle[rolling Bare bundle]
Bundle --> ELF[bare-runtime ELF]
ELF --> Entry[daemon/bare-entry.js]
Entry --> Compat[bare-node-runtime map]
Compat --> Harness[copied agent harness]
Entry --> QVAC[@qvac/inference in process]
QVAC --> GPU[QVAC GPU backend]
Bare has no Node standard library. JARVIS carries the official
bare-node-runtime conditional map at the root, daemon, computer-use, and
copied harness package boundaries. Portable source imports such as
node:fs, node:path, and node:events resolve to bare-fs, bare-path,
and bare-events. Process execution resolves to bare-subprocess. New direct
runtime code should prefer bare-* names when it has no Node test counterpart.
The QVAC boundary has one deliberate runtime switch. Node uses the existing
@qvac/sdk surface. Bare uses @qvac/inference in process and registers the
LLM plugin once inside the copied harness engine. The daemon remains the single
QVAC owner: no skill, job, or extension creates another inference runtime.
packaging/prepare-bare-deps.py applies the same official map to CommonJS
dependencies at bundle-build time. Bare resolves imports at each package
boundary, and some third party CommonJS packages do not declare their own map.
The preparation changes only the release copy under node_modules.
Build and verify the bundle with:
npm ci
npm run bare:smoke
npm run package:bare
The release archive stores the Bare ELF at runtime/bare, copied into the
bundle as a regular file so it is not a symlink back to the build machine.
The installer also accepts node_modules/bare-runtime-linux-*/bin/bare. It
does not fall back to a bare binary on PATH. The user unit starts
%h/.local/share/jarvis-qvac/packaging/jarvisd-launch.sh, which resolves that
ELF relative to the install. The checkout unit under systemd/user/ is not
shipped.
GPU policy remains strict. The Bare QVAC engine must report a visible GPU and
the master load path passes device: "gpu", full GPU layer offload, and GPU
multimodal projection settings. A missing or unusable GPU stops inference and
is reported by gpu-doctor; it never silently falls back to CPU.