@elizaos/plugin-xr 2.0.3-beta.5 → 2.0.3-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/actions/xr-query-vision.d.ts +3 -0
  2. package/dist/actions/xr-query-vision.d.ts.map +1 -0
  3. package/dist/actions/xr-query-vision.js +39 -0
  4. package/dist/actions/xr-query-vision.js.map +1 -0
  5. package/dist/actions/xr-view-actions.d.ts +18 -0
  6. package/dist/actions/xr-view-actions.d.ts.map +1 -0
  7. package/dist/actions/xr-view-actions.js +304 -0
  8. package/dist/actions/xr-view-actions.js.map +1 -0
  9. package/dist/index.d.ts +8 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +57 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/protocol.d.ts +124 -0
  14. package/dist/protocol.d.ts.map +1 -0
  15. package/dist/protocol.js +18 -0
  16. package/dist/protocol.js.map +1 -0
  17. package/dist/providers/xr-context.d.ts +3 -0
  18. package/dist/providers/xr-context.d.ts.map +1 -0
  19. package/dist/providers/xr-context.js +34 -0
  20. package/dist/providers/xr-context.js.map +1 -0
  21. package/dist/routes/xr-connect.d.ts +3 -0
  22. package/dist/routes/xr-connect.d.ts.map +1 -0
  23. package/{src/routes/xr-connect.ts → dist/routes/xr-connect.js} +12 -15
  24. package/dist/routes/xr-connect.js.map +1 -0
  25. package/dist/routes/xr-simulator-route.d.ts +8 -0
  26. package/dist/routes/xr-simulator-route.d.ts.map +1 -0
  27. package/{src/routes/xr-simulator-route.ts → dist/routes/xr-simulator-route.js} +10 -16
  28. package/dist/routes/xr-simulator-route.js.map +1 -0
  29. package/dist/routes/xr-status.d.ts +3 -0
  30. package/dist/routes/xr-status.d.ts.map +1 -0
  31. package/{src/routes/xr-status.ts → dist/routes/xr-status.js} +13 -15
  32. package/dist/routes/xr-status.js.map +1 -0
  33. package/dist/routes/xr-view-host.d.ts +24 -0
  34. package/dist/routes/xr-view-host.d.ts.map +1 -0
  35. package/{src/routes/xr-view-host.ts → dist/routes/xr-view-host.js} +22 -59
  36. package/dist/routes/xr-view-host.js.map +1 -0
  37. package/dist/routes/xr-views.d.ts +8 -0
  38. package/dist/routes/xr-views.d.ts.map +1 -0
  39. package/dist/routes/xr-views.js +31 -0
  40. package/dist/routes/xr-views.js.map +1 -0
  41. package/dist/services/audio-pipeline.d.ts +20 -0
  42. package/dist/services/audio-pipeline.d.ts.map +1 -0
  43. package/{src/services/audio-pipeline.ts → dist/services/audio-pipeline.js} +25 -58
  44. package/dist/services/audio-pipeline.js.map +1 -0
  45. package/dist/services/vision-pipeline.d.ts +16 -0
  46. package/dist/services/vision-pipeline.d.ts.map +1 -0
  47. package/dist/services/vision-pipeline.js +39 -0
  48. package/dist/services/vision-pipeline.js.map +1 -0
  49. package/dist/services/xr-session-service.d.ts +50 -0
  50. package/dist/services/xr-session-service.d.ts.map +1 -0
  51. package/{src/services/xr-session-service.ts → dist/services/xr-session-service.js} +85 -194
  52. package/dist/services/xr-session-service.js.map +1 -0
  53. package/package.json +9 -4
  54. package/AGENTS.md +0 -151
  55. package/CLAUDE.md +0 -151
  56. package/simulator/bun.lock +0 -159
  57. package/simulator/package.json +0 -28
  58. package/simulator/src/emulator.ts +0 -174
  59. package/simulator/src/mock-agent.ts +0 -233
  60. package/simulator/src/node.ts +0 -9
  61. package/simulator/src/playwright-fixture.ts +0 -169
  62. package/simulator/src/types.ts +0 -51
  63. package/simulator/tsconfig.json +0 -13
  64. package/simulator/vite.config.ts +0 -25
  65. package/src/__tests__/audio-pipeline.test.ts +0 -129
  66. package/src/__tests__/protocol.test.ts +0 -53
  67. package/src/__tests__/routes-e2e.test.ts +0 -276
  68. package/src/__tests__/vision-pipeline.test.ts +0 -73
  69. package/src/__tests__/xr-bundle-coverage.test.ts +0 -303
  70. package/src/__tests__/xr-feature-parity.test.ts +0 -524
  71. package/src/__tests__/xr-functional-parity.test.ts +0 -522
  72. package/src/__tests__/xr-view-host-http.test.ts +0 -239
  73. package/src/__tests__/xr-view-host.test.ts +0 -174
  74. package/src/actions/xr-query-vision.ts +0 -64
  75. package/src/actions/xr-view-actions.ts +0 -386
  76. package/src/index.ts +0 -55
  77. package/src/protocol.ts +0 -126
  78. package/src/providers/xr-context.ts +0 -49
  79. package/src/routes/xr-views.ts +0 -43
  80. package/src/services/vision-pipeline.ts +0 -57
  81. package/tsconfig.build.json +0 -9
  82. package/tsconfig.json +0 -30
  83. package/vitest.config.ts +0 -21
package/AGENTS.md DELETED
@@ -1,151 +0,0 @@
1
- # @elizaos/plugin-xr
2
-
3
- WebXR audio/video streaming for elizaOS — Quest 3 and XReal glasses.
4
-
5
- ## Purpose / role
6
-
7
- Adds a WebXR streaming surface to an Eliza agent: a WebSocket server accepts
8
- connections from XR headsets (Quest 3, XReal, or a browser simulator), pipes
9
- microphone audio through the runtime's TRANSCRIPTION model, and routes the
10
- transcript through the standard message pipeline. Voice responses are generated
11
- via the TEXT_TO_SPEECH model and sent back as binary audio frames. The plugin
12
- is opt-in — register `xrPlugin` in your character's plugins array.
13
-
14
- ## Plugin surface
15
-
16
- **Service**
17
- - `XRSessionService` (`xr-session`) — WebSocket server on port 31338 (default).
18
- Manages per-connection lifecycle, delegates audio to `AudioPipeline` and
19
- camera frames to `VisionPipeline`, routes transcripts into the agent message
20
- pipeline, and sends TTS audio back to the headset.
21
-
22
- **Actions**
23
- - `XR_QUERY_VISION` — describes what the user's XR camera currently sees
24
- (calls `VisionPipeline.describeFrame` → `ModelType.IMAGE_DESCRIPTION`).
25
- Only validates when a recent camera frame exists.
26
- - `XR_OPEN_VIEW` — opens a named view panel on the headset (sends
27
- `view_open` control message).
28
- - `XR_CLOSE_VIEW` — closes a named view (or all views if no id given).
29
- - `XR_SWITCH_VIEW` — brings a view to the foreground without closing others.
30
- - `XR_LIST_VIEWS` — enumerates views with `viewType: "xr"` from all loaded
31
- plugins and optionally sends the catalog to the device.
32
- - `XR_RESIZE_VIEW` — resizes/repositions the active panel (`scale`,
33
- `distance`, `fullscreen` options).
34
-
35
- **Provider**
36
- - `XR_SESSION` (`xr-context.ts`) — injects connected device list and camera
37
- state into the agent context block when at least one headset is connected.
38
-
39
- **Routes** (all under `/api/xr/`)
40
- - `GET /xr/status` — JSON list of connected sessions and camera-frame state.
41
- - `GET /xr/connect` — HTML page with QR code for pairing a headset.
42
- - `GET /xr/views` — JSON list of all `viewType: "xr"` views registered by
43
- loaded plugins, plus active connections.
44
- - `GET /xr/view-host/:id` — self-contained HTML shell that dynamically imports
45
- a plugin view bundle and renders it with an XR-optimised chrome.
46
- - `GET /xr/simulator.js` — serves the built WebXR emulator bundle (only
47
- available after `bun run build:all`).
48
-
49
- ## Layout
50
-
51
- ```
52
- plugins/plugin-xr/
53
- src/
54
- index.ts Plugin entry — exports xrPlugin and public types
55
- protocol.ts Wire types: XRClientControl, XRServerControl,
56
- XRBinaryHeader, XRTTSAudioHeader; encode/decode helpers
57
- actions/
58
- xr-query-vision.ts XR_QUERY_VISION action
59
- xr-view-actions.ts XR_OPEN/CLOSE/SWITCH/LIST/RESIZE_VIEW actions
60
- providers/
61
- xr-context.ts XR_SESSION provider
62
- services/
63
- xr-session-service.ts XRSessionService (WebSocket server, main orchestrator)
64
- audio-pipeline.ts AudioPipeline — buffers audio chunks, flushes to
65
- TRANSCRIPTION model after 2 s or 1.5 s silence
66
- vision-pipeline.ts VisionPipeline — stores latest camera frame (max age
67
- 10 s), calls IMAGE_DESCRIPTION model on demand
68
- routes/
69
- xr-status.ts GET /xr/status
70
- xr-connect.ts GET /xr/connect
71
- xr-views.ts GET /xr/views
72
- xr-view-host.ts GET /xr/view-host/:id
73
- xr-simulator-route.ts GET /xr/simulator.js
74
- __tests__/
75
- audio-pipeline.test.ts
76
- protocol.test.ts
77
- vision-pipeline.test.ts
78
- xr-bundle-coverage.test.ts
79
- xr-feature-parity.test.ts
80
- xr-functional-parity.test.ts
81
- xr-view-host.test.ts
82
- xr-view-host-http.test.ts
83
- simulator/ Browser-side WebXR emulator (Vite build)
84
- ```
85
-
86
- ## Commands
87
-
88
- ```bash
89
- bun run --cwd plugins/plugin-xr typecheck
90
- bun run --cwd plugins/plugin-xr lint
91
- bun run --cwd plugins/plugin-xr test
92
- bun run --cwd plugins/plugin-xr build
93
- bun run --cwd plugins/plugin-xr build:all # also builds simulator/
94
- bun run --cwd plugins/plugin-xr simulator:build
95
- bun run --cwd plugins/plugin-xr simulator:watch
96
- bun run --cwd plugins/plugin-xr clean
97
- ```
98
-
99
- ## Config / env vars
100
-
101
- | Var | Default | Required | Purpose |
102
- |-----|---------|----------|---------|
103
- | `XR_WS_PORT` | `31338` | no | WebSocket server port |
104
- | `XR_AGENT_URL` | `http://localhost:<agent-port>` | no | Public base URL sent to the headset for view bundles |
105
- | `XR_APP_URL` | derived from `VITE_PORT` | no | URL shown on the `/xr/connect` pairing page |
106
-
107
- The plugin sets `config: { XR_WS_PORT: 31338 }` in the Plugin object so the
108
- runtime exposes it via `runtime.getSetting("XR_WS_PORT")`.
109
-
110
- The agent must have a TRANSCRIPTION model and TEXT_TO_SPEECH model configured
111
- (e.g., via `@elizaos/plugin-openai` or a local inference plugin) for audio
112
- streaming to work. IMAGE_DESCRIPTION is required for `XR_QUERY_VISION`.
113
-
114
- ## How to extend
115
-
116
- **Add an action** — create `src/actions/<name>.ts`, implement `Action` from
117
- `@elizaos/core`, get `XRSessionService` via
118
- `runtime.getService<XRSessionService>(XR_SERVICE_TYPE)`, then add the import
119
- and the object to the `actions` array in `src/index.ts`.
120
-
121
- **Add a provider** — create `src/providers/<name>.ts`, implement `Provider`,
122
- add to `providers` array in `src/index.ts`.
123
-
124
- **Add a route** — create `src/routes/<name>.ts`, implement `Route`, add to
125
- `routes` array in `src/index.ts`.
126
-
127
- **Expose a view in XR** — in any other plugin, add a `views` array entry with
128
- `viewType: "xr"`. `XR_LIST_VIEWS` and `GET /xr/views` collect views with this
129
- field across all loaded plugins at runtime.
130
-
131
- ## Conventions / gotchas
132
-
133
- - **WebXR requires HTTPS on device.** The `/xr/connect` page warns when the
134
- URL is plain HTTP. Use a local tunnel (e.g., `cloudflared`) and set
135
- `XR_APP_URL` to the HTTPS tunnel URL.
136
- - **Binary frame framing** is defined in `src/protocol.ts`: 4-byte big-endian
137
- header length, then UTF-8 JSON header, then raw payload. Use
138
- `encodeBinaryFrame` / `decodeBinaryFrame` from that module — do not
139
- reimplement the framing.
140
- - **Audio buffering** — `AudioPipeline` accumulates chunks and flushes after
141
- 2 000 ms of audio or 1 500 ms of silence. Chunks shorter than 512 bytes are
142
- dropped. `pcm-f32` encoding (ScriptProcessorNode fallback) is wrapped in a
143
- WAV header before being passed to TRANSCRIPTION.
144
- - **Simulator bundle** — `simulator/` is a separate Vite project. Run
145
- `bun run build:all` (or `simulator:build`) before the `/xr/simulator.js`
146
- route will serve anything. The route returns 404 until the bundle exists.
147
- - **`XR_AGENT_URL`** must be a reachable URL from inside the XR headset
148
- browser when loading view bundles. `localhost` will only work when testing
149
- on the same machine via the browser simulator.
150
- - See repo root `AGENTS.md` for repo-wide architecture rules, logger
151
- conventions, ESM requirements, and naming standards.
package/CLAUDE.md DELETED
@@ -1,151 +0,0 @@
1
- # @elizaos/plugin-xr
2
-
3
- WebXR audio/video streaming for elizaOS — Quest 3 and XReal glasses.
4
-
5
- ## Purpose / role
6
-
7
- Adds a WebXR streaming surface to an Eliza agent: a WebSocket server accepts
8
- connections from XR headsets (Quest 3, XReal, or a browser simulator), pipes
9
- microphone audio through the runtime's TRANSCRIPTION model, and routes the
10
- transcript through the standard message pipeline. Voice responses are generated
11
- via the TEXT_TO_SPEECH model and sent back as binary audio frames. The plugin
12
- is opt-in — register `xrPlugin` in your character's plugins array.
13
-
14
- ## Plugin surface
15
-
16
- **Service**
17
- - `XRSessionService` (`xr-session`) — WebSocket server on port 31338 (default).
18
- Manages per-connection lifecycle, delegates audio to `AudioPipeline` and
19
- camera frames to `VisionPipeline`, routes transcripts into the agent message
20
- pipeline, and sends TTS audio back to the headset.
21
-
22
- **Actions**
23
- - `XR_QUERY_VISION` — describes what the user's XR camera currently sees
24
- (calls `VisionPipeline.describeFrame` → `ModelType.IMAGE_DESCRIPTION`).
25
- Only validates when a recent camera frame exists.
26
- - `XR_OPEN_VIEW` — opens a named view panel on the headset (sends
27
- `view_open` control message).
28
- - `XR_CLOSE_VIEW` — closes a named view (or all views if no id given).
29
- - `XR_SWITCH_VIEW` — brings a view to the foreground without closing others.
30
- - `XR_LIST_VIEWS` — enumerates views with `viewType: "xr"` from all loaded
31
- plugins and optionally sends the catalog to the device.
32
- - `XR_RESIZE_VIEW` — resizes/repositions the active panel (`scale`,
33
- `distance`, `fullscreen` options).
34
-
35
- **Provider**
36
- - `XR_SESSION` (`xr-context.ts`) — injects connected device list and camera
37
- state into the agent context block when at least one headset is connected.
38
-
39
- **Routes** (all under `/api/xr/`)
40
- - `GET /xr/status` — JSON list of connected sessions and camera-frame state.
41
- - `GET /xr/connect` — HTML page with QR code for pairing a headset.
42
- - `GET /xr/views` — JSON list of all `viewType: "xr"` views registered by
43
- loaded plugins, plus active connections.
44
- - `GET /xr/view-host/:id` — self-contained HTML shell that dynamically imports
45
- a plugin view bundle and renders it with an XR-optimised chrome.
46
- - `GET /xr/simulator.js` — serves the built WebXR emulator bundle (only
47
- available after `bun run build:all`).
48
-
49
- ## Layout
50
-
51
- ```
52
- plugins/plugin-xr/
53
- src/
54
- index.ts Plugin entry — exports xrPlugin and public types
55
- protocol.ts Wire types: XRClientControl, XRServerControl,
56
- XRBinaryHeader, XRTTSAudioHeader; encode/decode helpers
57
- actions/
58
- xr-query-vision.ts XR_QUERY_VISION action
59
- xr-view-actions.ts XR_OPEN/CLOSE/SWITCH/LIST/RESIZE_VIEW actions
60
- providers/
61
- xr-context.ts XR_SESSION provider
62
- services/
63
- xr-session-service.ts XRSessionService (WebSocket server, main orchestrator)
64
- audio-pipeline.ts AudioPipeline — buffers audio chunks, flushes to
65
- TRANSCRIPTION model after 2 s or 1.5 s silence
66
- vision-pipeline.ts VisionPipeline — stores latest camera frame (max age
67
- 10 s), calls IMAGE_DESCRIPTION model on demand
68
- routes/
69
- xr-status.ts GET /xr/status
70
- xr-connect.ts GET /xr/connect
71
- xr-views.ts GET /xr/views
72
- xr-view-host.ts GET /xr/view-host/:id
73
- xr-simulator-route.ts GET /xr/simulator.js
74
- __tests__/
75
- audio-pipeline.test.ts
76
- protocol.test.ts
77
- vision-pipeline.test.ts
78
- xr-bundle-coverage.test.ts
79
- xr-feature-parity.test.ts
80
- xr-functional-parity.test.ts
81
- xr-view-host.test.ts
82
- xr-view-host-http.test.ts
83
- simulator/ Browser-side WebXR emulator (Vite build)
84
- ```
85
-
86
- ## Commands
87
-
88
- ```bash
89
- bun run --cwd plugins/plugin-xr typecheck
90
- bun run --cwd plugins/plugin-xr lint
91
- bun run --cwd plugins/plugin-xr test
92
- bun run --cwd plugins/plugin-xr build
93
- bun run --cwd plugins/plugin-xr build:all # also builds simulator/
94
- bun run --cwd plugins/plugin-xr simulator:build
95
- bun run --cwd plugins/plugin-xr simulator:watch
96
- bun run --cwd plugins/plugin-xr clean
97
- ```
98
-
99
- ## Config / env vars
100
-
101
- | Var | Default | Required | Purpose |
102
- |-----|---------|----------|---------|
103
- | `XR_WS_PORT` | `31338` | no | WebSocket server port |
104
- | `XR_AGENT_URL` | `http://localhost:<agent-port>` | no | Public base URL sent to the headset for view bundles |
105
- | `XR_APP_URL` | derived from `VITE_PORT` | no | URL shown on the `/xr/connect` pairing page |
106
-
107
- The plugin sets `config: { XR_WS_PORT: 31338 }` in the Plugin object so the
108
- runtime exposes it via `runtime.getSetting("XR_WS_PORT")`.
109
-
110
- The agent must have a TRANSCRIPTION model and TEXT_TO_SPEECH model configured
111
- (e.g., via `@elizaos/plugin-openai` or a local inference plugin) for audio
112
- streaming to work. IMAGE_DESCRIPTION is required for `XR_QUERY_VISION`.
113
-
114
- ## How to extend
115
-
116
- **Add an action** — create `src/actions/<name>.ts`, implement `Action` from
117
- `@elizaos/core`, get `XRSessionService` via
118
- `runtime.getService<XRSessionService>(XR_SERVICE_TYPE)`, then add the import
119
- and the object to the `actions` array in `src/index.ts`.
120
-
121
- **Add a provider** — create `src/providers/<name>.ts`, implement `Provider`,
122
- add to `providers` array in `src/index.ts`.
123
-
124
- **Add a route** — create `src/routes/<name>.ts`, implement `Route`, add to
125
- `routes` array in `src/index.ts`.
126
-
127
- **Expose a view in XR** — in any other plugin, add a `views` array entry with
128
- `viewType: "xr"`. `XR_LIST_VIEWS` and `GET /xr/views` collect views with this
129
- field across all loaded plugins at runtime.
130
-
131
- ## Conventions / gotchas
132
-
133
- - **WebXR requires HTTPS on device.** The `/xr/connect` page warns when the
134
- URL is plain HTTP. Use a local tunnel (e.g., `cloudflared`) and set
135
- `XR_APP_URL` to the HTTPS tunnel URL.
136
- - **Binary frame framing** is defined in `src/protocol.ts`: 4-byte big-endian
137
- header length, then UTF-8 JSON header, then raw payload. Use
138
- `encodeBinaryFrame` / `decodeBinaryFrame` from that module — do not
139
- reimplement the framing.
140
- - **Audio buffering** — `AudioPipeline` accumulates chunks and flushes after
141
- 2 000 ms of audio or 1 500 ms of silence. Chunks shorter than 512 bytes are
142
- dropped. `pcm-f32` encoding (ScriptProcessorNode fallback) is wrapped in a
143
- WAV header before being passed to TRANSCRIPTION.
144
- - **Simulator bundle** — `simulator/` is a separate Vite project. Run
145
- `bun run build:all` (or `simulator:build`) before the `/xr/simulator.js`
146
- route will serve anything. The route returns 404 until the bundle exists.
147
- - **`XR_AGENT_URL`** must be a reachable URL from inside the XR headset
148
- browser when loading view bundles. `localhost` will only work when testing
149
- on the same machine via the browser simulator.
150
- - See repo root `AGENTS.md` for repo-wide architecture rules, logger
151
- conventions, ESM requirements, and naming standards.
@@ -1,159 +0,0 @@
1
- {
2
- "lockfileVersion": 1,
3
- "configVersion": 1,
4
- "workspaces": {
5
- "": {
6
- "name": "@elizaos/plugin-xr-simulator",
7
- "dependencies": {
8
- "iwer": "^2.1.1",
9
- "ws": "^8.18.0",
10
- },
11
- "devDependencies": {
12
- "@playwright/test": "^1.48.0",
13
- "@types/node": "^25.0.3",
14
- "@types/ws": "^8.5.10",
15
- "typescript": "^5.5.0",
16
- "vite": "^5.4.0",
17
- },
18
- },
19
- },
20
- "packages": {
21
- "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="],
22
-
23
- "@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="],
24
-
25
- "@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="],
26
-
27
- "@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="],
28
-
29
- "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="],
30
-
31
- "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="],
32
-
33
- "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="],
34
-
35
- "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="],
36
-
37
- "@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="],
38
-
39
- "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="],
40
-
41
- "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="],
42
-
43
- "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="],
44
-
45
- "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="],
46
-
47
- "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="],
48
-
49
- "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="],
50
-
51
- "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="],
52
-
53
- "@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="],
54
-
55
- "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="],
56
-
57
- "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="],
58
-
59
- "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="],
60
-
61
- "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="],
62
-
63
- "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="],
64
-
65
- "@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="],
66
-
67
- "@playwright/test": ["@playwright/test@1.60.0", "", { "dependencies": { "playwright": "1.60.0" }, "bin": { "playwright": "cli.js" } }, "sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag=="],
68
-
69
- "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.4", "", { "os": "android", "cpu": "arm" }, "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ=="],
70
-
71
- "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.4", "", { "os": "android", "cpu": "arm64" }, "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw=="],
72
-
73
- "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.60.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA=="],
74
-
75
- "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.60.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg=="],
76
-
77
- "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.60.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g=="],
78
-
79
- "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.60.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw=="],
80
-
81
- "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.60.4", "", { "os": "linux", "cpu": "arm" }, "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA=="],
82
-
83
- "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.60.4", "", { "os": "linux", "cpu": "arm" }, "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w=="],
84
-
85
- "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.60.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg=="],
86
-
87
- "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.60.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A=="],
88
-
89
- "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.60.4", "", { "os": "linux", "cpu": "none" }, "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ=="],
90
-
91
- "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.60.4", "", { "os": "linux", "cpu": "none" }, "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw=="],
92
-
93
- "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.60.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg=="],
94
-
95
- "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.60.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A=="],
96
-
97
- "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.60.4", "", { "os": "linux", "cpu": "none" }, "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA=="],
98
-
99
- "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.60.4", "", { "os": "linux", "cpu": "none" }, "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw=="],
100
-
101
- "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.60.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ=="],
102
-
103
- "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.60.4", "", { "os": "linux", "cpu": "x64" }, "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ=="],
104
-
105
- "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.60.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg=="],
106
-
107
- "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.60.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA=="],
108
-
109
- "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.60.4", "", { "os": "none", "cpu": "arm64" }, "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg=="],
110
-
111
- "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.60.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw=="],
112
-
113
- "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.60.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA=="],
114
-
115
- "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.60.4", "", { "os": "win32", "cpu": "x64" }, "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw=="],
116
-
117
- "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.4", "", { "os": "win32", "cpu": "x64" }, "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw=="],
118
-
119
- "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="],
120
-
121
- "@types/node": ["@types/node@25.9.0", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-AOQwYUNolgy3VosiRqXrACUXTN8nJUtPl7FJXMqZVyxiiCLhQuG3jXKvCS1ALr+Y2OmZhzzLVlYPEqJaiqkaJQ=="],
122
-
123
- "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="],
124
-
125
- "esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="],
126
-
127
- "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
128
-
129
- "gl-matrix": ["gl-matrix@3.4.4", "", {}, "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ=="],
130
-
131
- "iwer": ["iwer@2.2.1", "", { "dependencies": { "gl-matrix": "^3.4.3", "webxr-layers-polyfill": "^1.1.0" } }, "sha512-TBGgUlOpYsJpYmBCDRrW2KDHC70XZeFrlOwlDNiso+dp83wwRyCLaeN50/qo4JRIKyn08+cD6iaw5+t+D7U+uQ=="],
132
-
133
- "nanoid": ["nanoid@3.3.12", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ=="],
134
-
135
- "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
136
-
137
- "playwright": ["playwright@1.60.0", "", { "dependencies": { "playwright-core": "1.60.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA=="],
138
-
139
- "playwright-core": ["playwright-core@1.60.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA=="],
140
-
141
- "postcss": ["postcss@8.5.14", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg=="],
142
-
143
- "rollup": ["rollup@4.60.4", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.4", "@rollup/rollup-android-arm64": "4.60.4", "@rollup/rollup-darwin-arm64": "4.60.4", "@rollup/rollup-darwin-x64": "4.60.4", "@rollup/rollup-freebsd-arm64": "4.60.4", "@rollup/rollup-freebsd-x64": "4.60.4", "@rollup/rollup-linux-arm-gnueabihf": "4.60.4", "@rollup/rollup-linux-arm-musleabihf": "4.60.4", "@rollup/rollup-linux-arm64-gnu": "4.60.4", "@rollup/rollup-linux-arm64-musl": "4.60.4", "@rollup/rollup-linux-loong64-gnu": "4.60.4", "@rollup/rollup-linux-loong64-musl": "4.60.4", "@rollup/rollup-linux-ppc64-gnu": "4.60.4", "@rollup/rollup-linux-ppc64-musl": "4.60.4", "@rollup/rollup-linux-riscv64-gnu": "4.60.4", "@rollup/rollup-linux-riscv64-musl": "4.60.4", "@rollup/rollup-linux-s390x-gnu": "4.60.4", "@rollup/rollup-linux-x64-gnu": "4.60.4", "@rollup/rollup-linux-x64-musl": "4.60.4", "@rollup/rollup-openbsd-x64": "4.60.4", "@rollup/rollup-openharmony-arm64": "4.60.4", "@rollup/rollup-win32-arm64-msvc": "4.60.4", "@rollup/rollup-win32-ia32-msvc": "4.60.4", "@rollup/rollup-win32-x64-gnu": "4.60.4", "@rollup/rollup-win32-x64-msvc": "4.60.4", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g=="],
144
-
145
- "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
146
-
147
- "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
148
-
149
- "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="],
150
-
151
- "vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="],
152
-
153
- "webxr-layers-polyfill": ["webxr-layers-polyfill@1.1.0", "", { "dependencies": { "gl-matrix": "^3.4.3" } }, "sha512-GqWE6IFlut8a1Lnh9t1RPnOXud1rZ7wLPvWp7mqTDOYtgorXqlNMhEnI9EqjU33grBx0v3jm0Oc13opkAdmgMQ=="],
154
-
155
- "ws": ["ws@8.20.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w=="],
156
-
157
- "playwright/fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="],
158
- }
159
- }
@@ -1,28 +0,0 @@
1
- {
2
- "name": "@elizaos/plugin-xr-simulator",
3
- "version": "0.1.0",
4
- "private": true,
5
- "type": "module",
6
- "description": "WebXR device emulator and Playwright fixtures for plugin-xr development and testing",
7
- "main": "./src/node.ts",
8
- "exports": {
9
- ".": "./src/node.ts",
10
- "./emulator": "./dist/emulator.js"
11
- },
12
- "scripts": {
13
- "build": "vite build",
14
- "build:watch": "vite build --watch",
15
- "typecheck": "tsgo --noEmit"
16
- },
17
- "dependencies": {
18
- "iwer": "^2.1.1",
19
- "ws": "^8.18.0"
20
- },
21
- "devDependencies": {
22
- "@playwright/test": "^1.48.0",
23
- "@types/node": "^25.0.3",
24
- "@types/ws": "^8.5.10",
25
- "typescript": "^5.5.0",
26
- "vite": "^8.0.13"
27
- }
28
- }