fix: harden cloud E2E and elizaOS USB live path #3423
test.yml
on: pull_request
Cloud Live E2E (Eliza Cloud)
2m 54s
Remote Capability Provider Live E2E
4s
Server Tests
11m 18s
Client Tests
11m 1s
Plugin Tests
6m 2s
Electrobun Desktop Contract
5m 26s
Remote Capability GitHub Live Artifact Validator
0s
All Tests Passed
3s
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.
|