52 lines
2.2 KiB
Markdown
52 lines
2.2 KiB
Markdown
# 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.
|
||
|
||
```mermaid
|
||
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:
|
||
|
||
```bash
|
||
npm ci
|
||
npm run bare:smoke
|
||
npm run package:bare
|
||
```
|
||
|
||
The installer executes `node_modules/bare-runtime-linux-*/bin/bare` directly.
|
||
The `node_modules/.bin/bare` convenience script is a Node launcher and is not
|
||
used by the service. The generated systemd unit therefore has no Node
|
||
executable in its `ExecStart` line.
|
||
|
||
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.
|