Files
wehub-resource-sync 426e9eeabd
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Waiting to run
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Waiting to run
Build Agent Image / build-and-push (push) Waiting to run
Chat shell gestures / Chat shell gesture + parity e2e (push) Waiting to run
ci / test (push) Waiting to run
ci / lint-and-format (push) Waiting to run
ci / build (push) Waiting to run
ci / dev-startup (push) Waiting to run
Cloud Gateway Discord / Test (push) Waiting to run
Cloud Gateway Webhook / Test (push) Waiting to run
Cloud Tests / lint-and-types (push) Waiting to run
Cloud Tests / unit-tests (push) Waiting to run
Cloud Tests / integration-tests (push) Waiting to run
Cloud Tests / e2e-tests (push) Blocked by required conditions
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Deploy Apps Worker (Product 2) / Determine environment (push) Waiting to run
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Blocked by required conditions
Deploy Eliza Provisioning Worker / Determine environment (push) Waiting to run
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Blocked by required conditions
Dev Smoke / Classify changed paths (push) Waiting to run
Dev Smoke / bun run dev onboarding chat (push) Blocked by required conditions
Dev Smoke / Vite HMR dependency-level smoke (push) Blocked by required conditions
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Waiting to run
gitleaks / gitleaks (push) Waiting to run
Markdown Links / Relative Markdown Links (push) Waiting to run
Publish @elizaos/example-code / check_npm (push) Waiting to run
Publish @elizaos/example-code / publish_npm (push) Blocked by required conditions
Publish @elizaos/plugin-elizacloud / verify_version (push) Waiting to run
Publish @elizaos/plugin-elizacloud / publish_npm (push) Blocked by required conditions
Quality (Extended) / Homepage Build (PR smoke) (push) Waiting to run
Quality (Extended) / Comment-only diff guard (push) Waiting to run
Quality (Extended) / Format + Type Safety Ratchet (push) Waiting to run
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Waiting to run
Quality (Extended) / Develop Gate (lint) (push) Waiting to run
Sandbox Live Smoke / Sandbox live smoke (push) Waiting to run
Snap Build & Test / Build Snap (amd64) (push) Waiting to run
Snap Build & Test / Build Snap (arm64) (push) Waiting to run
supply-chain / sbom (push) Waiting to run
supply-chain / vulnerability-scan (push) Waiting to run
Build, Push & Deploy to Phala Cloud / build-and-push (push) Waiting to run
Test Packaging / Validate Packaging Configs (push) Waiting to run
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Waiting to run
Test Packaging / Pack & Test JS Tarballs (push) Waiting to run
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Waiting to run
UI Fixture E2E / ui-fixture-e2e (push) Waiting to run
UI Fixture E2E / fixture-e2e (push) Waiting to run
UI Story Gate / story-gate (push) Waiting to run
vault-ci / test (macos-latest) (push) Waiting to run
vault-ci / test (ubuntu-latest) (push) Waiting to run
vault-ci / test (windows-latest) (push) Waiting to run
vault-ci / app-core wiring tests (push) Waiting to run
verify-patches / verify patches/CHECKSUMS.sha256 (push) Waiting to run
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Waiting to run
Voice Benchmark Smoke / voice bench smoke summary (push) Blocked by required conditions
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) Waiting to run
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) Waiting to run
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) Waiting to run
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) Waiting to run
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) Waiting to run
Test Packaging / Build & Test PyPI Package (push) Waiting to run
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:43:05 +08:00
..

Flatpak packaging — store and direct variants

Two manifests live in this directory. They produce the same ai.elizaos.App app-id, but with very different sandbox postures.

Variant Manifest Wrapper Posture Distribution
Store (Flathub) ai.elizaos.App.store.yml elizaos-app-wrapper.store.sh Locked-down sandbox, no host escape Flathub
Direct (power-user) ai.elizaos.App.yml elizaos-app-wrapper.sh Full $HOME access, host shell reach, EXECUTE_CODE permitted Self-hosted repo, side-loaded bundles

Pick the variant that matches the audience. Flathub will reject the direct manifest on review. Power users who want host-Ollama, docker reach, and EXECUTE_CODE want the direct manifest (or, equivalently, the AppImage / .deb / .rpm builds).

The build is selected by the ELIZA_BUILD_VARIANT env var at build time — see bun run build:flatpak (packages/app-core/scripts/build-flatpak.mjs).

Sandbox philosophy (store variant)

The store manifest grants only the capabilities a managed-cloud Eliza agent needs:

  • --share=network — cloud APIs, model providers, plugin registry, the loopback web dashboard.
  • --share=ipc — required for localhost loopback the dashboard binds.
  • --socket=wayland + --socket=fallback-x11 — desktop integration.
  • --filesystem=xdg-documents/Eliza:create — a single user-granted workspace folder under ~/Documents/Eliza. The user picks (or confirms) this through the FileChooser portal at first run.
  • --filesystem=xdg-config/elizaos-app:create — config and account storage under ~/.config/elizaos-app.
  • --persist=.eliza~/.eliza is rewritten transparently by Flatpak to ~/.var/app/ai.elizaos.App/.eliza, surviving upgrades.
  • --talk-name=org.freedesktop.Notifications — desktop notifications.
  • --talk-name=org.kde.StatusNotifierWatcher — system tray.

What it explicitly does NOT grant — and what bubblewrap therefore blocks unconditionally:

  • No --filesystem=home / --filesystem=host. No reading or writing outside the granted folders.
  • No --talk-name=org.freedesktop.Flatpak. That D-Bus name is the host-spawn portal; it is the standard way for sandboxed apps to escape the sandbox and run host commands. The store posture forbids host escape, so it is excluded.
  • No --device=all. No raw device access.
  • No --socket=session-bus / --socket=system-bus. Direct D-Bus exposure would let the runtime talk to anything; we go through the portal stack instead.

The runtime reads ELIZA_BUILD_VARIANT=store (set by the store wrapper) and gates off:

  • PATH-lookup CLI spawning (no bun, python, git, docker, etc. on the host PATH — they're not in $PATH inside the sandbox anyway, but the runtime reports the disablement explicitly so users see "local agent execution disabled in this build" instead of opaque ENOENT).
  • The EXECUTE_CODE action.
  • Host-Ollama discovery (no 127.0.0.1:11434 reach — the sandbox sees its own loopback, not the host's, so Ollama-on-host wouldn't work even if we tried).

Hosting flips to the cloud-only routing: the agent talks to Eliza Cloud for inference, plugin registry, app deploys, billing, and any other backend that would otherwise have a local fallback.

Required portals

The store variant relies on these portals (ambient on the org.freedesktop.Platform//24.08 runtime — no extra --talk-name= needed):

Portal Purpose
org.freedesktop.portal.FileChooser Workspace folder picker (first run + "open in workspace")
org.freedesktop.portal.OpenURI Browser launches for OAuth flows (Eliza Cloud sign-in, app domain verification)
org.freedesktop.portal.Notification Notification fallback (the older org.freedesktop.Notifications D-Bus name is also granted)

If a future feature needs camera, microphone, or location, add the corresponding portal — do NOT add a raw --device= or --socket= rule.

Local testing

# Install build tooling.
sudo apt install flatpak flatpak-builder        # Debian / Ubuntu
sudo dnf install flatpak flatpak-builder        # Fedora

# Install the runtime + SDK once.
flatpak install --user flathub org.freedesktop.Platform//24.08
flatpak install --user flathub org.freedesktop.Sdk//24.08

# Build the store variant.
ELIZA_BUILD_VARIANT=store bun run build:flatpak

# Or call flatpak-builder directly.
cd packages/app-core/packaging/flatpak
flatpak-builder --user --install --force-clean build-dir ai.elizaos.App.store.yml

# Run.
flatpak run ai.elizaos.App --version
flatpak run ai.elizaos.App start

# Inspect the granted permissions to confirm the lockdown.
flatpak info --show-permissions ai.elizaos.App
# Expect: shared=network;ipc; sockets=wayland;fallback-x11; filesystems
# limited to xdg-documents/Eliza and xdg-config/elizaos-app; talk-names
# limited to Notifications + StatusNotifierWatcher.

Flathub submission checklist

When you're ready to submit the store variant to Flathub:

  1. Vendor the npm tree as offline sources. Flathub's build infrastructure does not allow network access during build. The test-flatpak.yml CI workflow regenerates node-sources.json on every run via ./generate-sources.sh and uploads it as the flatpak-node-sources artifact. To refresh the committed copy locally (Linux only):
    ./generate-sources.sh        # writes node-sources.json next to this README
    
    Or download the CI artifact from the most recent successful Test Flatpak Build workflow run on develop and drop it next to this README. Once node-sources.json is committed, the manifest can build offline (npm install -g --offline) and the build-options.build-args: --share=network shim is no longer needed.
  2. Replace screenshot URLs in ai.elizaos.App.metainfo.xml. Three placeholder <screenshot> entries currently point at https://app.elizacloud.ai/screenshots/{dashboard,onboarding,plugins}.png — host the real 1280×720 PNGs at those paths (or update the URLs to wherever they're served from) before submitting. Flathub fetches the URLs at review time.
  3. Verify the manifest with appstream-util validate and flatpak-builder --show-manifest --show-deps.
  4. Open a submission issue at https://github.com/flathub/flathub/issues/new — pick the "App submission" template, link to this manifest in the public elizaos repo, and explicitly call out:
    • The store variant uses portal-mediated FS access (no --filesystem=home).
    • The runtime hosting mode is forced to Eliza Cloud — no local CLI spawning, no host Ollama.
    • This Flathub submission is the store variant; an unrestricted "direct" build for power users is published separately as a side-loadable bundle and is not on Flathub.
  5. Hand over to a Flathub maintainer who creates github.com/flathub/ai.elizaos.App and applies the manifest + supporting files.

Direct variant

The direct manifest (ai.elizaos.App.yml) keeps the existing --filesystem=home posture so power users who self-host a Flatpak repo or side-load a bundle get the same experience as the AppImage / .deb / .rpm builds. It does NOT set ELIZA_BUILD_VARIANT=store, so the runtime exposes the full coding-agent surface.

Don't submit this manifest to Flathub. It will fail review.