Skip to content

fix: harden cloud E2E and elizaOS USB live path #3423

fix: harden cloud E2E and elizaOS USB live path

fix: harden cloud E2E and elizaOS USB live path #3423

Triggered via pull request May 20, 2026 06:55
Status Failure
Total duration 11m 27s
Artifacts

test.yml

on: pull_request
Cloud Live E2E (Eliza Cloud)
2m 54s
Cloud Live E2E (Eliza Cloud)
Remote Capability Provider Live E2E
4s
Remote Capability Provider Live E2E
Remote Capability GitHub Live Artifact Validator
0s
Remote Capability GitHub Live Artifact Validator
All Tests Passed
3s
All Tests Passed
Fit to window
Zoom out
Zoom in

Annotations

12 errors, 7 warnings, and 1 notice
src/__tests__/xr-feature-parity.test.ts > XR feature parity audit > axis 6 — XReal Android project has complete Gradle project structure: plugins/plugin-xr/src/__tests__/xr-feature-parity.test.ts#L302
AssertionError: expected false to be true // Object.is equality - Expected + Received - true + false ❯ src/__tests__/xr-feature-parity.test.ts:302:63
src/__tests__/xr-feature-parity.test.ts > XR feature parity audit > axis 6 — Quest 3 Bubblewrap APK configuration is present and complete: plugins/plugin-xr/src/__tests__/xr-feature-parity.test.ts#L292
AssertionError: expected false to be true // Object.is equality - Expected + Received - true + false ❯ src/__tests__/xr-feature-parity.test.ts:292:62
src/__tests__/xr-feature-parity.test.ts > XR feature parity audit > axis 5 — view-host pages have voice transcript routing for INPUT, TEXTAREA, SELECT, and ARIA widgets: plugins/plugin-xr/src/__tests__/xr-feature-parity.test.ts#L278
AssertionError: wallet: fillFocusedInput for SELECT: expected '<!DOCTYPE html>\n<html lang="en" data…' to contain 'HTMLSelectElement' - Expected + Received - HTMLSelectElement + <!DOCTYPE html> + <html lang="en" data-view-id="wallet"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" /> + <title>XR – wallet</title> + <style> + *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0 } + + :root { + --bg: #0d0d0f; + --surface: #18181b; + --border: rgba(255,255,255,0.08); + --text: #f4f4f5; + --muted: #a1a1aa; + --accent: #6366f1; + --radius: 12px; + --font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + } + + html, body { + width: 100%; height: 100%; + background: var(--bg); + color: var(--text); + font-family: var(--font); + font-size: 18px; /* large for XR readability */ + line-height: 1.5; + overflow: hidden; + } + + #xr-shell { + display: flex; + flex-direction: column; + height: 100%; + position: relative; + } + + /* XR header bar */ + #xr-bar { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 16px; + background: var(--surface); + border-bottom: 1px solid var(--border); + flex-shrink: 0; + user-select: none; + } + #xr-bar-title { + flex: 1; + font-weight: 600; + font-size: 1rem; + color: var(--text); + } + .xr-btn { + background: var(--border); + border: none; + border-radius: 8px; + color: var(--text); + cursor: pointer; + font-size: 1rem; + padding: 6px 12px; + transition: background 0.15s; + } + .xr-btn:hover { background: rgba(255,255,255,0.15) } + + /* Voice indicator */ + #voice-indicator { + display: none; + align-items: center; + gap: 6px; + padding: 4px 10px; + border-radius: 20px; + background: var(--accent); + font-size: 0.8rem; + font-weight: 600; + } + #voice-indicator.active { display: flex } + .voice-dot { + width: 8px; height: 8px; + border-radius: 50%; + background: #fff; + animation: pulse 1s ease-in-out infinite; + } + @Keyframes pulse { 0%,100% { opacity: 1 } 50% { opacity: 0.4 } } + + /* Content area */ + #view-mount { + flex: 1; + overflow: auto; + position: relative; + } + + /* Loading / error states */ + #view-loader { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + gap: 12px; + color: var(--muted); + } + .spinner { + width: 36px; height: 36px; + border: 3px solid var(--border); + border-top-color: var(--accent); + border-radius: 50%; + animation: spin 0.8s linear infinite; + } + @Keyframes spin { to { transform: rotate(360deg) } } + + /* XR-friendly form overrides for injected views */ + #view-mount input, #view-mount textarea, #view-mount select { + font-size: 1rem !important; + min-height: 44px; + } + #view-mount button { + min-height: 44px; + min-width: 44px; + } + + /* Transcript toast */ + #transcript-toast { + position: fixed; + bottom: 12px; left: 50%; + transform: translateX(-50%); + background: rgba(99,102,241,0.9); + color: #fff; + border-radius: 20px; + padding: 6px 16px; + font-size: 0.85rem; + pointer-events: none; + opacity: 0; + transition: opacity 0.2s; + white-space: nowrap; + max-width: 90vw; + overflow: hidden; + text-overflow: ellipsis; + } + #transcript-toast.show { opacity: 1 } + </style> + </head> + <body> + <div id="xr-shell"> + <div id="xr-bar"> + <span id="xr-bar-title">wallet</span> +
src/__tests__/xr-feature-parity.test.ts > XR feature parity audit > axis 4 — AgentSocket supports hot reconnect for mode switching: plugins/plugin-xr/src/__tests__/xr-feature-parity.test.ts#L46
Error: ENOENT: no such file or directory, open '/home/runner/work/eliza/apps/app-xr/src/agent-socket.ts' ❯ readAppXr src/__tests__/xr-feature-parity.test.ts:46:10 ❯ src/__tests__/xr-feature-parity.test.ts:252:23 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { errno: -2, code: 'ENOENT', syscall: 'open', path: '/home/runner/work/eliza/apps/app-xr/src/agent-socket.ts' }
src/__tests__/xr-feature-parity.test.ts > XR feature parity audit > axis 4 — app-xr connection-setup.ts renders the mode picker UI: plugins/plugin-xr/src/__tests__/xr-feature-parity.test.ts#L46
Error: ENOENT: no such file or directory, open '/home/runner/work/eliza/apps/app-xr/src/ui/connection-setup.ts' ❯ readAppXr src/__tests__/xr-feature-parity.test.ts:46:10 ❯ src/__tests__/xr-feature-parity.test.ts:245:17 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { errno: -2, code: 'ENOENT', syscall: 'open', path: '/home/runner/work/eliza/apps/app-xr/src/ui/connection-setup.ts' }
src/__tests__/xr-feature-parity.test.ts > XR feature parity audit > axis 4 — app-xr connection-config.ts implements Local/Cloud/Custom modes: plugins/plugin-xr/src/__tests__/xr-feature-parity.test.ts#L46
Error: ENOENT: no such file or directory, open '/home/runner/work/eliza/apps/app-xr/src/connection-config.ts' ❯ readAppXr src/__tests__/xr-feature-parity.test.ts:46:10 ❯ src/__tests__/xr-feature-parity.test.ts:237:17 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { errno: -2, code: 'ENOENT', syscall: 'open', path: '/home/runner/work/eliza/apps/app-xr/src/connection-config.ts' }
src/__tests__/xr-feature-parity.test.ts > XR feature parity audit > axis 3 — extractViewId() knows all 24 view ids for natural-language routing: plugins/plugin-xr/src/__tests__/xr-feature-parity.test.ts#L231
AssertionError: view IDs missing from extractViewId(): expected [ 'clawville', 'hyperliquid', …(7) ] to deeply equal [] - Expected + Received - [] + [ + "clawville", + "hyperliquid", + "hyperscape", + "lifeops", + "scape", + "screenshare", + "trajectory-logger", + "model-tester", + "smartglasses", + ] ❯ src/__tests__/xr-feature-parity.test.ts:231:62
src/__tests__/xr-feature-parity.test.ts > XR feature parity audit > axis 1 — every gui plugin view has a matching xr view in the plugin manifest: plugins/plugin-xr/src/__tests__/xr-feature-parity.test.ts#L172
AssertionError: plugins missing XR views: expected [ …(24) ] to deeply equal [] - Expected + Received - [] + [ + "plugins/plugin-companion/src/plugin.ts: missing xr view for \"companion\"", + "plugins/plugin-contacts/src/plugin.ts: missing xr view for \"contacts\"", + "plugins/plugin-hyperliquid-app/src/plugin.ts: missing xr view for \"hyperliquid\"", + "plugins/plugin-lifeops/src/plugin.ts: missing xr view for \"lifeops\"", + "plugins/plugin-messages/src/plugin.ts: missing xr view for \"messages\"", + "plugins/app-model-tester/src/plugin.ts: missing xr view for \"model-tester\"", + "plugins/plugin-phone/src/plugin.ts: missing xr view for \"phone\"", + "plugins/plugin-polymarket-app/src/plugin.ts: missing xr view for \"polymarket\"", + "plugins/plugin-shopify-ui/src/plugin.ts: missing xr view for \"shopify\"", + "plugins/plugin-steward-app/src/plugin.ts: missing xr view for \"steward\"", + "plugins/plugin-vincent/src/plugin.ts: missing xr view for \"vincent\"", + "plugins/plugin-wallet-ui/src/plugin.ts: missing xr view for \"wallet\"", + "plugins/plugin-2004scape/src/index.ts: missing xr view for \"2004scape\"", + "plugins/plugin-babylon/src/index.ts: missing xr view for \"babylon\"", + "plugins/plugin-app-control/src/index.ts: missing xr view for \"views-manager\"", + "plugins/plugin-clawville/src/index.ts: missing xr view for \"clawville\"", + "plugins/plugin-defense-of-the-agents/src/index.ts: missing xr view for \"defense-of-the-agents\"", + "plugins/plugin-hyperscape/src/index.ts: missing xr view for \"hyperscape\"", + "plugins/plugin-scape/src/index.ts: missing xr view for \"scape\"", + "plugins/plugin-screenshare/src/index.ts: missing xr view for \"screenshare\"", + "plugins/plugin-task-coordinator/src/index.ts: missing xr view for \"task-coordinator\"", + "plugins/plugin-trajectory-logger/src/index.ts: missing xr view for \"trajectory-logger\"", + "plugins/plugin-training/src/setup-routes.ts: missing xr view for \"training\"", + "plugins/plugin-smartglasses/src/index.ts: missing xr view for \"smartglasses\"", + ] ❯ src/__tests__/xr-feature-parity.test.ts:172:49
src/__tests__/xr-bundle-coverage.test.ts > XR view bundle coverage — all 24 plugin bundles built and valid > every bundle.js is non-empty (at least 1 KB of content): plugins/plugin-xr/src/__tests__/xr-bundle-coverage.test.ts#L221
AssertionError: bundles too small to contain real content: expected [ …(23) ] to deeply equal [] - Expected + Received - [] + [ + "plugins/plugin-companion/dist/views/bundle.js: 0 bytes", + "plugins/plugin-contacts/dist/views/bundle.js: 0 bytes", + "plugins/plugin-hyperliquid-app/dist/views/bundle.js: 0 bytes", + "plugins/plugin-lifeops/dist/views/bundle.js: 0 bytes", + "plugins/plugin-messages/dist/views/bundle.js: 0 bytes", + "plugins/app-model-tester/dist/views/bundle.js: 0 bytes", + "plugins/plugin-phone/dist/views/bundle.js: 0 bytes", + "plugins/plugin-polymarket-app/dist/views/bundle.js: 0 bytes", + "plugins/plugin-shopify-ui/dist/views/bundle.js: 0 bytes", + "plugins/plugin-steward-app/dist/views/bundle.js: 0 bytes", + "plugins/plugin-vincent/dist/views/bundle.js: 0 bytes", + "plugins/plugin-wallet-ui/dist/views/bundle.js: 0 bytes", + "plugins/plugin-2004scape/dist/views/bundle.js: 0 bytes", + "plugins/plugin-babylon/dist/views/bundle.js: 0 bytes", + "plugins/plugin-app-control/dist/views/bundle.js: 0 bytes", + "plugins/plugin-clawville/dist/views/bundle.js: 0 bytes", + "plugins/plugin-defense-of-the-agents/dist/views/bundle.js: 0 bytes", + "plugins/plugin-hyperscape/dist/views/bundle.js: 0 bytes", + "plugins/plugin-scape/dist/views/bundle.js: 0 bytes", + "plugins/plugin-screenshare/dist/views/bundle.js: 0 bytes", + "plugins/plugin-trajectory-logger/dist/views/bundle.js: 0 bytes", + "plugins/plugin-training/dist/views/bundle.js: 0 bytes", + "plugins/plugin-smartglasses/dist/views/bundle.js: 0 bytes", + ] ❯ src/__tests__/xr-bundle-coverage.test.ts:221:67
src/__tests__/xr-bundle-coverage.test.ts > XR view bundle coverage — all 24 plugin bundles built and valid > dist/views/bundle.js exists for every plugin with an XR view: plugins/plugin-xr/src/__tests__/xr-bundle-coverage.test.ts#L209
AssertionError: plugins with missing view bundles (run `bun run build:views`): expected [ …(23) ] to deeply equal [] - Expected + Received - [] + [ + "plugins/plugin-companion/dist/views/bundle.js", + "plugins/plugin-contacts/dist/views/bundle.js", + "plugins/plugin-hyperliquid-app/dist/views/bundle.js", + "plugins/plugin-lifeops/dist/views/bundle.js", + "plugins/plugin-messages/dist/views/bundle.js", + "plugins/app-model-tester/dist/views/bundle.js", + "plugins/plugin-phone/dist/views/bundle.js", + "plugins/plugin-polymarket-app/dist/views/bundle.js", + "plugins/plugin-shopify-ui/dist/views/bundle.js", + "plugins/plugin-steward-app/dist/views/bundle.js", + "plugins/plugin-vincent/dist/views/bundle.js", + "plugins/plugin-wallet-ui/dist/views/bundle.js", + "plugins/plugin-2004scape/dist/views/bundle.js", + "plugins/plugin-babylon/dist/views/bundle.js", + "plugins/plugin-app-control/dist/views/bundle.js", + "plugins/plugin-clawville/dist/views/bundle.js", + "plugins/plugin-defense-of-the-agents/dist/views/bundle.js", + "plugins/plugin-hyperscape/dist/views/bundle.js", + "plugins/plugin-scape/dist/views/bundle.js", + "plugins/plugin-screenshare/dist/views/bundle.js", + "plugins/plugin-trajectory-logger/dist/views/bundle.js", + "plugins/plugin-training/dist/views/bundle.js", + "plugins/plugin-smartglasses/dist/views/bundle.js", + ] ❯ src/__tests__/xr-bundle-coverage.test.ts:209:7
All Tests Passed
Process completed with exit code 1.
Test gate
Required job 'plugin-tests' finished with 'failure' (expected success)
Remote Capability Provider Live E2E
No remote capability provider endpoints configured - skipping optional provider live E2E.
Cloud Live E2E (Eliza Cloud)
No bun/install.js found; downstream bun run calls may fail
Electrobun Desktop Contract
No bun/install.js found; downstream bun run calls may fail
Plugin Tests
No bun/install.js found; downstream bun run calls may fail
Client Tests
No bun/install.js found; downstream bun run calls may fail
Server Tests
No bun/install.js found; downstream bun run calls may fail
Test gate
Live-only job 'github-live-artifact-validate' was skipped for this PR context.
Cloud Live E2E (Eliza Cloud)
Remote capability cloud sandbox live smoke is only observed on workflow_dispatch or schedule events.