426e9eeabd
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
ci / test (push) Has been cancelled
ci / lint-and-format (push) Has been cancelled
ci / build (push) Has been cancelled
ci / dev-startup (push) Has been cancelled
gitleaks / gitleaks (push) Has been cancelled
Markdown Links / Relative Markdown Links (push) Has been cancelled
Quality (Extended) / Homepage Build (PR smoke) (push) Has been cancelled
Quality (Extended) / Comment-only diff guard (push) Has been cancelled
Quality (Extended) / Format + Type Safety Ratchet (push) Has been cancelled
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Has been cancelled
Quality (Extended) / Develop Gate (lint) (push) Has been cancelled
Chat shell gestures / Chat shell gesture + parity e2e (push) Has been cancelled
Cloud Gateway Discord / Test (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Has been cancelled
Build Agent Image / build-and-push (push) Has been cancelled
Dev Smoke / bun run dev onboarding chat (push) Has been cancelled
Dev Smoke / Vite HMR dependency-level smoke (push) Has been cancelled
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Has been cancelled
Publish @elizaos/example-code / check_npm (push) Has been cancelled
Publish @elizaos/example-code / publish_npm (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / verify_version (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / publish_npm (push) Has been cancelled
Sandbox Live Smoke / Sandbox live smoke (push) Has been cancelled
Snap Build & Test / Build Snap (amd64) (push) Has been cancelled
Snap Build & Test / Build Snap (arm64) (push) Has been cancelled
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Has been cancelled
Cloud Gateway Webhook / Test (push) Has been cancelled
Cloud Tests / lint-and-types (push) Has been cancelled
Cloud Tests / unit-tests (push) Has been cancelled
Cloud Tests / integration-tests (push) Has been cancelled
Cloud Tests / e2e-tests (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Apps Worker (Product 2) / Determine environment (push) Has been cancelled
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Has been cancelled
Deploy Eliza Provisioning Worker / Determine environment (push) Has been cancelled
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Has been cancelled
Dev Smoke / Classify changed paths (push) Has been cancelled
supply-chain / sbom (push) Has been cancelled
supply-chain / vulnerability-scan (push) Has been cancelled
Build, Push & Deploy to Phala Cloud / build-and-push (push) Has been cancelled
Test Packaging / Validate Packaging Configs (push) Has been cancelled
Test Packaging / Build & Test PyPI Package (push) Has been cancelled
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Has been cancelled
Test Packaging / Pack & Test JS Tarballs (push) Has been cancelled
UI Fixture E2E / ui-fixture-e2e (push) Has been cancelled
UI Fixture E2E / fixture-e2e (push) Has been cancelled
UI Story Gate / story-gate (push) Has been cancelled
vault-ci / test (macos-latest) (push) Has been cancelled
vault-ci / test (ubuntu-latest) (push) Has been cancelled
vault-ci / test (windows-latest) (push) Has been cancelled
vault-ci / app-core wiring tests (push) Has been cancelled
verify-patches / verify patches/CHECKSUMS.sha256 (push) Has been cancelled
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Has been cancelled
Voice Benchmark Smoke / voice bench smoke summary (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Has been cancelled
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Has been cancelled
110 lines
4.7 KiB
Markdown
110 lines
4.7 KiB
Markdown
# Runtime Packaging
|
|
|
|
The elizaOS/Electrobun app is staged into the live-build overlay at:
|
|
|
|
```text
|
|
tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app/
|
|
```
|
|
|
|
The `9100-install-elizaos` chroot hook copies that tree to `/opt/elizaos`.
|
|
The staged app is intentionally not slimmed in this step; the current goal is
|
|
to make the bundled runtime auditable before any ISO build runs.
|
|
|
|
This is not a post-boot injection path. The app is built before the ISO build,
|
|
staged as a live-build overlay artifact, installed into the read-only root
|
|
filesystem during the chroot hook phase, and launched from `/opt/elizaos` as the
|
|
normal live user. The chroot hook may set ownership, permissions, metadata, and
|
|
runtime compatibility defaults; it must not download packages, resolve Node
|
|
dependencies, or mutate user data.
|
|
|
|
## Review Decision
|
|
|
|
Current status: acceptable for demo and release-candidate validation, not the
|
|
final production packaging shape.
|
|
|
|
The current path is clean enough for a working ISO demo because it has a single
|
|
staged runtime root, root-owned install destination, manifest, validation
|
|
script, and smoke coverage. It is still not the ideal enterprise artifact
|
|
because the Electrobun runtime tree is large and the live overlay still carries
|
|
generated compatibility stubs for optional packages.
|
|
|
|
Production replacement:
|
|
|
|
- build the desktop app in CI as a deterministic signed artifact
|
|
- publish a runtime manifest with complete file inventory and package inventory
|
|
- install the signed artifact into `/opt/elizaos` or a versioned root-owned
|
|
runtime store during image build
|
|
- keep `/opt/elizaos` as the immutable factory fallback
|
|
- activate later app/runtime updates only through the signed update-manager path
|
|
- remove generated stubs for required features by fixing the app dependency
|
|
graph, not by hiding missing packages
|
|
- make clean checkout builds explicit: `just elizaos-app` must stage the app
|
|
payload before `just build`/`just binary`; source-only smoke is expected to
|
|
pass without the ignored 2.5-2.9 GB payload, full smoke requires the stage
|
|
|
|
The build-time prepare script is allowed only as a packaging adapter. It must
|
|
stay idempotent and auditable, and every generated fallback must be declared in
|
|
`Resources/app/elizaos-live-overlay-manifest.json`.
|
|
|
|
## Manifest
|
|
|
|
`scripts/prepare-elizaos-app-overlay.mjs` writes:
|
|
|
|
```text
|
|
Resources/app/elizaos-live-overlay-manifest.json
|
|
```
|
|
|
|
inside the staged app root. The manifest is an SBOM-style audit record for the
|
|
runtime overlay. It records:
|
|
|
|
- the staged app root and installed app root (`/opt/elizaos`)
|
|
- source git commit and generation time
|
|
- package manifest count plus package inventory from `eliza-dist/node_modules`
|
|
- generated live packages and optional plugin stubs
|
|
- key app and OS entrypoints
|
|
- expected API and renderer ports
|
|
- known repository-resolution strings that must not regress to elizaOS defaults
|
|
|
|
Optional connector stubs are deliberately listed under
|
|
`generated.optionalPluginStubs`. If a full package is present, the manifest
|
|
records that the stub was not generated. If a live stub package exists without a
|
|
matching manifest entry, validation fails.
|
|
|
|
## Validation
|
|
|
|
Run the cheap validator after staging the app:
|
|
|
|
```sh
|
|
node scripts/validate-runtime-overlay.mjs --stage tails/config/chroot_local-includes/usr/share/elizaos/elizaos-app
|
|
```
|
|
|
|
The validator does not build an ISO. It checks:
|
|
|
|
- required app entrypoints such as `bin/launcher`, `bin/bun`,
|
|
`Resources/app/eliza-dist/entry.js`, and renderer `index.html`
|
|
- OS overlay entrypoints such as `/usr/local/bin/elizaos`, the user service
|
|
launchers, the renderer server, and systemd units
|
|
- manifest package count against actual `package.json` files
|
|
- generated optional plugin stubs and undeclared live stub packages
|
|
- dependency symlinks from the app root and `bin/`
|
|
- elizaOS branding in `version.json` and `brand-config.json`
|
|
- hard-coded elizaOS repo/app resolution strings in renderer and brand config
|
|
- API and renderer port defaults across the manifest, launcher wrappers,
|
|
renderer server, and WebKit shell
|
|
|
|
`scripts/prepare-elizaos-app-overlay.mjs --check` still verifies that the staged
|
|
overlay has already been patched by the prepare script. The validator is the
|
|
more explicit runtime-packaging audit and should be used when the staged app is
|
|
present.
|
|
|
|
## Remaining Debt
|
|
|
|
This slice does not solve package slimming. The app still carries the bundled
|
|
runtime tree produced by the desktop build, plus compatibility stubs for optional
|
|
connectors that are not part of the live USB base runtime.
|
|
|
|
The manifest is a static audit record, not a runtime attestation. It can prove
|
|
that staged files and defaults are internally consistent before a build; it
|
|
cannot prove that the final ISO boots, that Electrobun launches successfully, or
|
|
that no dynamic runtime import path is missed.
|