robopark 3.3.32 → 3.3.34

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robopark",
3
- "version": "3.3.32",
3
+ "version": "3.3.34",
4
4
  "description": "RoboPark fleet control CLI — scheduler, control UI, and character voice calls. Standalone: no infinicode runtime.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -55,7 +55,7 @@
55
55
  function refreshHardware(requestPermission){if(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices){setHardwareStatus(mediaBlockedReason(),'bad');return Promise.reject(new Error('media devices unavailable'))}var permission=Promise.resolve();if(requestPermission){permission=navigator.mediaDevices.getUserMedia({audio:true,video:true}).catch(function(){return navigator.mediaDevices.getUserMedia({audio:true})}).then(function(stream){stream.getTracks().forEach(function(track){track.stop()})})}setHardwareStatus(requestPermission?'Requesting browser media access...':'Scanning browser hardware...','');return permission.then(function(){return navigator.mediaDevices.enumerateDevices()}).then(function(devices){fillHardwareSelect('call-microphone',devices,'audioinput','microphone');fillHardwareSelect('call-camera',devices,'videoinput','camera');fillHardwareSelect('call-speaker',devices,'audiooutput','speaker');var mic=devices.filter(function(device){return device.kind==='audioinput'}).length,cam=devices.filter(function(device){return device.kind==='videoinput'}).length,out=devices.filter(function(device){return device.kind==='audiooutput'}).length;setHardwareStatus('Ready: '+mic+' microphone(s), '+cam+' camera(s), '+out+' speaker output(s).','ok');return devices}).catch(function(error){setHardwareStatus(error&&error.message||String(error),'bad');throw error})}
56
56
  function ensureCameraSdk(){if(window.LivekitClient)return Promise.resolve(window.LivekitClient);if(cameraSdkPromise)return cameraSdkPromise;cameraSdkPromise=new Promise(function(resolve,reject){var script=document.createElement('script');script.src='/vendor/livekit-client.umd.js';script.onload=function(){window.LivekitClient?resolve(window.LivekitClient):reject(new Error('LiveKit camera SDK unavailable'))};script.onerror=function(){reject(new Error('LiveKit camera SDK failed to load'))};document.head.appendChild(script)});return cameraSdkPromise}
57
57
  function scheduleCameraPublishRetry(){if(cameraPublishRetry||ending||!localVideoStream)return;if(cameraRetryCount>=8){event('camera_published','failed','Giving up after 8 attempts - the media server is not reachable.',{attempts:cameraRetryCount});return}var delay=Math.min(30000,3000*Math.pow(1.6,cameraRetryCount));cameraRetryCount++;cameraPublishRetry=setTimeout(function(){cameraPublishRetry=null;publishLocalVideo().catch(function(){})},delay)}
58
- function publishLocalVideo(){if(!localVideoStream||!localVideoStream.getVideoTracks().length)return Promise.resolve();if(cameraRoom)return Promise.resolve();return Promise.all([ensureCameraSdk(),fetch(API_BASE+'/api/camera-token',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({character_id:character,robot_id:robot||null})}).then(function(response){if(!response.ok)throw new Error('camera token '+response.status);return response.json()})]).then(function(parts){var LK=parts[0],info=parts[1],room=new LK.Room();cameraRoom=room;room.on(LK.RoomEvent.Disconnected,function(){if(cameraRoom===room){cameraRoom=null;scheduleCameraPublishRetry()}});return room.connect(info.url,info.token).then(function(){return room.localParticipant.publishTrack(localVideoStream.getVideoTracks()[0],{name:'camera',source:LK.Track.Source.Camera})}).then(function(){cameraRetryCount=0;if(cameraPublishRetry){clearTimeout(cameraPublishRetry);cameraPublishRetry=null}event('camera_published','ok','Camera relay live',{})})}).catch(function(error){try{if(room&&room.disconnect)room.disconnect(true)}catch(_){}cameraRoom=null;event('camera_published','failed',error.message,{});scheduleCameraPublishRetry();throw error})}
58
+ function publishLocalVideo(){var pendingCameraRoom=null;if(!localVideoStream||!localVideoStream.getVideoTracks().length)return Promise.resolve();if(cameraRoom)return Promise.resolve();return Promise.all([ensureCameraSdk(),fetch(API_BASE+'/api/camera-token',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({character_id:character,robot_id:robot||null})}).then(function(response){if(!response.ok)throw new Error('camera token '+response.status);return response.json()})]).then(function(parts){var LK=parts[0],info=parts[1],room=new LK.Room();pendingCameraRoom=room;cameraRoom=room;room.on(LK.RoomEvent.Disconnected,function(){if(cameraRoom===room){cameraRoom=null;scheduleCameraPublishRetry()}});return room.connect(info.url,info.token).then(function(){return room.localParticipant.publishTrack(localVideoStream.getVideoTracks()[0],{name:'camera',source:LK.Track.Source.Camera})}).then(function(){cameraRetryCount=0;if(cameraPublishRetry){clearTimeout(cameraPublishRetry);cameraPublishRetry=null}event('camera_published','ok','Camera relay live',{})})}).catch(function(error){try{if(pendingCameraRoom&&pendingCameraRoom.disconnect)pendingCameraRoom.disconnect(true)}catch(_){}pendingCameraRoom=null;cameraRoom=null;event('camera_published','failed',error.message,{});scheduleCameraPublishRetry();throw error})}
59
59
  function startLocalVideo(){if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)return Promise.resolve();if(localVideoStream&&activeCameraDevice===cameraDeviceId)return publishLocalVideo();if(localVideoStream)localVideoStream.getTracks().forEach(function(track){track.stop()});if(cameraRoom){cameraRoom.disconnect();cameraRoom=null}var video=cameraDeviceId?{deviceId:{exact:cameraDeviceId}}:true;return navigator.mediaDevices.getUserMedia({video:video,audio:false}).then(function(stream){localVideoStream=stream;activeCameraDevice=cameraDeviceId;el('robot-video').srcObject=stream;if(!robotStreamActive())el('robot-video').hidden=false;el('vision').hidden=false;return publishLocalVideo().catch(function(){})}).catch(function(error){localVideoStream=null;activeCameraDevice=null;el('robot-video').srcObject=null;if(!robotStreamActive()){el('robot-video').hidden=true;el('vision').hidden=true}throw error})}
60
60
  function robotStreamActive(){var stream=el('robot-stream');return Boolean(stream&&stream.getAttribute('src'))}
61
61
  // Ambient vision. The ElevenLabs contextual_update channel carries text only, so a
@@ -1 +1 @@
1
- Xg-e8h70WpdFcsZ2vcfOG
1
+ gGysrZrp8HXGK_0MbZa9v
@@ -39,33 +39,33 @@
39
39
  "static/chunks/main-app-a1f59168303c7f84.js",
40
40
  "static/chunks/app/api/models/route-0952b44bda5bfb6d.js"
41
41
  ],
42
- "/api/reload-tools/route": [
42
+ "/api/prewarm/route": [
43
43
  "static/chunks/webpack-5252e5254da079b5.js",
44
44
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
45
45
  "static/chunks/1255-404bb8de49c90395.js",
46
46
  "static/chunks/main-app-a1f59168303c7f84.js",
47
- "static/chunks/app/api/reload-tools/route-0952b44bda5bfb6d.js"
47
+ "static/chunks/app/api/prewarm/route-0952b44bda5bfb6d.js"
48
48
  ],
49
- "/api/prewarm/route": [
49
+ "/api/prompt/route": [
50
50
  "static/chunks/webpack-5252e5254da079b5.js",
51
51
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
52
52
  "static/chunks/1255-404bb8de49c90395.js",
53
53
  "static/chunks/main-app-a1f59168303c7f84.js",
54
- "static/chunks/app/api/prewarm/route-0952b44bda5bfb6d.js"
54
+ "static/chunks/app/api/prompt/route-0952b44bda5bfb6d.js"
55
55
  ],
56
- "/api/robopark/devices/[deviceId]/control/route": [
56
+ "/api/reload-tools/route": [
57
57
  "static/chunks/webpack-5252e5254da079b5.js",
58
58
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
59
59
  "static/chunks/1255-404bb8de49c90395.js",
60
60
  "static/chunks/main-app-a1f59168303c7f84.js",
61
- "static/chunks/app/api/robopark/devices/[deviceId]/control/route-0952b44bda5bfb6d.js"
61
+ "static/chunks/app/api/reload-tools/route-0952b44bda5bfb6d.js"
62
62
  ],
63
- "/api/prompt/route": [
63
+ "/api/robopark/devices/[deviceId]/control/route": [
64
64
  "static/chunks/webpack-5252e5254da079b5.js",
65
65
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
66
66
  "static/chunks/1255-404bb8de49c90395.js",
67
67
  "static/chunks/main-app-a1f59168303c7f84.js",
68
- "static/chunks/app/api/prompt/route-0952b44bda5bfb6d.js"
68
+ "static/chunks/app/api/robopark/devices/[deviceId]/control/route-0952b44bda5bfb6d.js"
69
69
  ],
70
70
  "/api/robopark/robots/[robotId]/operations/route": [
71
71
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -88,6 +88,13 @@
88
88
  "static/chunks/main-app-a1f59168303c7f84.js",
89
89
  "static/chunks/app/api/robopark/transcripts/[sessionId]/route-0952b44bda5bfb6d.js"
90
90
  ],
91
+ "/api/setup/complete/route": [
92
+ "static/chunks/webpack-5252e5254da079b5.js",
93
+ "static/chunks/4bd1b696-f785427dddbba9fb.js",
94
+ "static/chunks/1255-404bb8de49c90395.js",
95
+ "static/chunks/main-app-a1f59168303c7f84.js",
96
+ "static/chunks/app/api/setup/complete/route-0952b44bda5bfb6d.js"
97
+ ],
91
98
  "/api/setup/status/route": [
92
99
  "static/chunks/webpack-5252e5254da079b5.js",
93
100
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
@@ -109,19 +116,19 @@
109
116
  "static/chunks/main-app-a1f59168303c7f84.js",
110
117
  "static/chunks/app/api/setup/test-hass/route-0952b44bda5bfb6d.js"
111
118
  ],
112
- "/api/setup/complete/route": [
119
+ "/api/setup/test-ollama/route": [
113
120
  "static/chunks/webpack-5252e5254da079b5.js",
114
121
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
115
122
  "static/chunks/1255-404bb8de49c90395.js",
116
123
  "static/chunks/main-app-a1f59168303c7f84.js",
117
- "static/chunks/app/api/setup/complete/route-0952b44bda5bfb6d.js"
124
+ "static/chunks/app/api/setup/test-ollama/route-0952b44bda5bfb6d.js"
118
125
  ],
119
- "/api/setup/test-ollama/route": [
126
+ "/api/setup/test-n8n/route": [
120
127
  "static/chunks/webpack-5252e5254da079b5.js",
121
128
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
122
129
  "static/chunks/1255-404bb8de49c90395.js",
123
130
  "static/chunks/main-app-a1f59168303c7f84.js",
124
- "static/chunks/app/api/setup/test-ollama/route-0952b44bda5bfb6d.js"
131
+ "static/chunks/app/api/setup/test-n8n/route-0952b44bda5bfb6d.js"
125
132
  ],
126
133
  "/api/test-tts/route": [
127
134
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -130,12 +137,19 @@
130
137
  "static/chunks/main-app-a1f59168303c7f84.js",
131
138
  "static/chunks/app/api/test-tts/route-0952b44bda5bfb6d.js"
132
139
  ],
133
- "/api/setup/test-n8n/route": [
140
+ "/api/wake-word/status/route": [
134
141
  "static/chunks/webpack-5252e5254da079b5.js",
135
142
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
136
143
  "static/chunks/1255-404bb8de49c90395.js",
137
144
  "static/chunks/main-app-a1f59168303c7f84.js",
138
- "static/chunks/app/api/setup/test-n8n/route-0952b44bda5bfb6d.js"
145
+ "static/chunks/app/api/wake-word/status/route-0952b44bda5bfb6d.js"
146
+ ],
147
+ "/api/wake-word/models/route": [
148
+ "static/chunks/webpack-5252e5254da079b5.js",
149
+ "static/chunks/4bd1b696-f785427dddbba9fb.js",
150
+ "static/chunks/1255-404bb8de49c90395.js",
151
+ "static/chunks/main-app-a1f59168303c7f84.js",
152
+ "static/chunks/app/api/wake-word/models/route-0952b44bda5bfb6d.js"
139
153
  ],
140
154
  "/api/voices/route": [
141
155
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -144,26 +158,26 @@
144
158
  "static/chunks/main-app-a1f59168303c7f84.js",
145
159
  "static/chunks/app/api/voices/route-0952b44bda5bfb6d.js"
146
160
  ],
147
- "/api/wake-word/models/route": [
161
+ "/api/wake-word/upload/route": [
148
162
  "static/chunks/webpack-5252e5254da079b5.js",
149
163
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
150
164
  "static/chunks/1255-404bb8de49c90395.js",
151
165
  "static/chunks/main-app-a1f59168303c7f84.js",
152
- "static/chunks/app/api/wake-word/models/route-0952b44bda5bfb6d.js"
166
+ "static/chunks/app/api/wake-word/upload/route-0952b44bda5bfb6d.js"
153
167
  ],
154
- "/api/wake-word/status/route": [
168
+ "/api/model-status/route": [
155
169
  "static/chunks/webpack-5252e5254da079b5.js",
156
170
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
157
171
  "static/chunks/1255-404bb8de49c90395.js",
158
172
  "static/chunks/main-app-a1f59168303c7f84.js",
159
- "static/chunks/app/api/wake-word/status/route-0952b44bda5bfb6d.js"
173
+ "static/chunks/app/api/model-status/route-0952b44bda5bfb6d.js"
160
174
  ],
161
- "/api/wake-word/upload/route": [
175
+ "/api/kiosk-hardware/route": [
162
176
  "static/chunks/webpack-5252e5254da079b5.js",
163
177
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
164
178
  "static/chunks/1255-404bb8de49c90395.js",
165
179
  "static/chunks/main-app-a1f59168303c7f84.js",
166
- "static/chunks/app/api/wake-word/upload/route-0952b44bda5bfb6d.js"
180
+ "static/chunks/app/api/kiosk-hardware/route-0952b44bda5bfb6d.js"
167
181
  ],
168
182
  "/api/connection-details/route": [
169
183
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -172,19 +186,19 @@
172
186
  "static/chunks/main-app-a1f59168303c7f84.js",
173
187
  "static/chunks/app/api/connection-details/route-0952b44bda5bfb6d.js"
174
188
  ],
175
- "/api/kiosk-hardware/route": [
189
+ "/api/robopark/live-rooms/route": [
176
190
  "static/chunks/webpack-5252e5254da079b5.js",
177
191
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
178
192
  "static/chunks/1255-404bb8de49c90395.js",
179
193
  "static/chunks/main-app-a1f59168303c7f84.js",
180
- "static/chunks/app/api/kiosk-hardware/route-0952b44bda5bfb6d.js"
194
+ "static/chunks/app/api/robopark/live-rooms/route-0952b44bda5bfb6d.js"
181
195
  ],
182
- "/api/model-status/route": [
196
+ "/api/robopark/monitor-token/route": [
183
197
  "static/chunks/webpack-5252e5254da079b5.js",
184
198
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
185
199
  "static/chunks/1255-404bb8de49c90395.js",
186
200
  "static/chunks/main-app-a1f59168303c7f84.js",
187
- "static/chunks/app/api/model-status/route-0952b44bda5bfb6d.js"
201
+ "static/chunks/app/api/robopark/monitor-token/route-0952b44bda5bfb6d.js"
188
202
  ],
189
203
  "/api/robopark/character-ai/route": [
190
204
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -193,26 +207,26 @@
193
207
  "static/chunks/main-app-a1f59168303c7f84.js",
194
208
  "static/chunks/app/api/robopark/character-ai/route-0952b44bda5bfb6d.js"
195
209
  ],
196
- "/api/robopark/device-access/route": [
210
+ "/api/robopark/camera-token/route": [
197
211
  "static/chunks/webpack-5252e5254da079b5.js",
198
212
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
199
213
  "static/chunks/1255-404bb8de49c90395.js",
200
214
  "static/chunks/main-app-a1f59168303c7f84.js",
201
- "static/chunks/app/api/robopark/device-access/route-0952b44bda5bfb6d.js"
215
+ "static/chunks/app/api/robopark/camera-token/route-0952b44bda5bfb6d.js"
202
216
  ],
203
- "/api/robopark/live-rooms/route": [
217
+ "/api/robopark/device-access/route": [
204
218
  "static/chunks/webpack-5252e5254da079b5.js",
205
219
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
206
220
  "static/chunks/1255-404bb8de49c90395.js",
207
221
  "static/chunks/main-app-a1f59168303c7f84.js",
208
- "static/chunks/app/api/robopark/live-rooms/route-0952b44bda5bfb6d.js"
222
+ "static/chunks/app/api/robopark/device-access/route-0952b44bda5bfb6d.js"
209
223
  ],
210
- "/api/robopark/monitor-token/route": [
224
+ "/api/robopark/robots/route": [
211
225
  "static/chunks/webpack-5252e5254da079b5.js",
212
226
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
213
227
  "static/chunks/1255-404bb8de49c90395.js",
214
228
  "static/chunks/main-app-a1f59168303c7f84.js",
215
- "static/chunks/app/api/robopark/monitor-token/route-0952b44bda5bfb6d.js"
229
+ "static/chunks/app/api/robopark/robots/route-0952b44bda5bfb6d.js"
216
230
  ],
217
231
  "/api/robopark/servers/[serverId]/metrics/route": [
218
232
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -221,19 +235,19 @@
221
235
  "static/chunks/main-app-a1f59168303c7f84.js",
222
236
  "static/chunks/app/api/robopark/servers/[serverId]/metrics/route-0952b44bda5bfb6d.js"
223
237
  ],
224
- "/api/robopark/robots/route": [
238
+ "/api/robopark/servers/[serverId]/route": [
225
239
  "static/chunks/webpack-5252e5254da079b5.js",
226
240
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
227
241
  "static/chunks/1255-404bb8de49c90395.js",
228
242
  "static/chunks/main-app-a1f59168303c7f84.js",
229
- "static/chunks/app/api/robopark/robots/route-0952b44bda5bfb6d.js"
243
+ "static/chunks/app/api/robopark/servers/[serverId]/route-0952b44bda5bfb6d.js"
230
244
  ],
231
- "/api/robopark/servers/[serverId]/route": [
245
+ "/api/robopark/servers/route": [
232
246
  "static/chunks/webpack-5252e5254da079b5.js",
233
247
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
234
248
  "static/chunks/1255-404bb8de49c90395.js",
235
249
  "static/chunks/main-app-a1f59168303c7f84.js",
236
- "static/chunks/app/api/robopark/servers/[serverId]/route-0952b44bda5bfb6d.js"
250
+ "static/chunks/app/api/robopark/servers/route-0952b44bda5bfb6d.js"
237
251
  ],
238
252
  "/api/robopark/sessions/route": [
239
253
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -242,12 +256,12 @@
242
256
  "static/chunks/main-app-a1f59168303c7f84.js",
243
257
  "static/chunks/app/api/robopark/sessions/route-0952b44bda5bfb6d.js"
244
258
  ],
245
- "/api/robopark/servers/route": [
259
+ "/api/robovoice/robots/[robotId]/media-health/route": [
246
260
  "static/chunks/webpack-5252e5254da079b5.js",
247
261
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
248
262
  "static/chunks/1255-404bb8de49c90395.js",
249
263
  "static/chunks/main-app-a1f59168303c7f84.js",
250
- "static/chunks/app/api/robopark/servers/route-0952b44bda5bfb6d.js"
264
+ "static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-0952b44bda5bfb6d.js"
251
265
  ],
252
266
  "/api/robopark/vision-caption/route": [
253
267
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -263,12 +277,12 @@
263
277
  "static/chunks/main-app-a1f59168303c7f84.js",
264
278
  "static/chunks/app/api/robopark/robots/[robotId]/voice-engine/route-0952b44bda5bfb6d.js"
265
279
  ],
266
- "/api/robovoice/robots/[robotId]/media-health/route": [
280
+ "/api/settings/route": [
267
281
  "static/chunks/webpack-5252e5254da079b5.js",
268
282
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
269
283
  "static/chunks/1255-404bb8de49c90395.js",
270
284
  "static/chunks/main-app-a1f59168303c7f84.js",
271
- "static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-0952b44bda5bfb6d.js"
285
+ "static/chunks/app/api/settings/route-0952b44bda5bfb6d.js"
272
286
  ],
273
287
  "/api/robopark/transcripts/route": [
274
288
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -284,20 +298,6 @@
284
298
  "static/chunks/main-app-a1f59168303c7f84.js",
285
299
  "static/chunks/app/api/turn-credentials/route-0952b44bda5bfb6d.js"
286
300
  ],
287
- "/api/robopark/camera-token/route": [
288
- "static/chunks/webpack-5252e5254da079b5.js",
289
- "static/chunks/4bd1b696-f785427dddbba9fb.js",
290
- "static/chunks/1255-404bb8de49c90395.js",
291
- "static/chunks/main-app-a1f59168303c7f84.js",
292
- "static/chunks/app/api/robopark/camera-token/route-0952b44bda5bfb6d.js"
293
- ],
294
- "/api/settings/route": [
295
- "static/chunks/webpack-5252e5254da079b5.js",
296
- "static/chunks/4bd1b696-f785427dddbba9fb.js",
297
- "static/chunks/1255-404bb8de49c90395.js",
298
- "static/chunks/main-app-a1f59168303c7f84.js",
299
- "static/chunks/app/api/settings/route-0952b44bda5bfb6d.js"
300
- ],
301
301
  "/api/wake/route": [
302
302
  "static/chunks/webpack-5252e5254da079b5.js",
303
303
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
@@ -305,26 +305,26 @@
305
305
  "static/chunks/main-app-a1f59168303c7f84.js",
306
306
  "static/chunks/app/api/wake/route-0952b44bda5bfb6d.js"
307
307
  ],
308
- "/robopark/[...path]/route": [
308
+ "/fed/media/robots/[robotId]/video_feed/route": [
309
309
  "static/chunks/webpack-5252e5254da079b5.js",
310
310
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
311
311
  "static/chunks/1255-404bb8de49c90395.js",
312
312
  "static/chunks/main-app-a1f59168303c7f84.js",
313
- "static/chunks/app/robopark/[...path]/route-0952b44bda5bfb6d.js"
313
+ "static/chunks/app/fed/media/robots/[robotId]/video_feed/route-0952b44bda5bfb6d.js"
314
314
  ],
315
- "/camera-grid/route": [
315
+ "/robopark/[...path]/route": [
316
316
  "static/chunks/webpack-5252e5254da079b5.js",
317
317
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
318
318
  "static/chunks/1255-404bb8de49c90395.js",
319
319
  "static/chunks/main-app-a1f59168303c7f84.js",
320
- "static/chunks/app/camera-grid/route-0952b44bda5bfb6d.js"
320
+ "static/chunks/app/robopark/[...path]/route-0952b44bda5bfb6d.js"
321
321
  ],
322
- "/fed/media/robots/[robotId]/video_feed/route": [
322
+ "/fed/[...path]/route": [
323
323
  "static/chunks/webpack-5252e5254da079b5.js",
324
324
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
325
325
  "static/chunks/1255-404bb8de49c90395.js",
326
326
  "static/chunks/main-app-a1f59168303c7f84.js",
327
- "static/chunks/app/fed/media/robots/[robotId]/video_feed/route-0952b44bda5bfb6d.js"
327
+ "static/chunks/app/fed/[...path]/route-0952b44bda5bfb6d.js"
328
328
  ],
329
329
  "/tailnet/route": [
330
330
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -333,19 +333,19 @@
333
333
  "static/chunks/main-app-a1f59168303c7f84.js",
334
334
  "static/chunks/app/tailnet/route-0952b44bda5bfb6d.js"
335
335
  ],
336
- "/vendor/livekit-client.umd.js/route": [
336
+ "/camera-grid/route": [
337
337
  "static/chunks/webpack-5252e5254da079b5.js",
338
338
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
339
339
  "static/chunks/1255-404bb8de49c90395.js",
340
340
  "static/chunks/main-app-a1f59168303c7f84.js",
341
- "static/chunks/app/vendor/livekit-client.umd.js/route-0952b44bda5bfb6d.js"
341
+ "static/chunks/app/camera-grid/route-0952b44bda5bfb6d.js"
342
342
  ],
343
- "/fed/[...path]/route": [
343
+ "/vendor/livekit-client.umd.js/route": [
344
344
  "static/chunks/webpack-5252e5254da079b5.js",
345
345
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
346
346
  "static/chunks/1255-404bb8de49c90395.js",
347
347
  "static/chunks/main-app-a1f59168303c7f84.js",
348
- "static/chunks/app/fed/[...path]/route-0952b44bda5bfb6d.js"
348
+ "static/chunks/app/vendor/livekit-client.umd.js/route-0952b44bda5bfb6d.js"
349
349
  ],
350
350
  "/robopark/api/robots/[robotId]/stream/route": [
351
351
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -389,13 +389,6 @@
389
389
  "static/chunks/main-app-a1f59168303c7f84.js",
390
390
  "static/chunks/app/(app)/layout-0952b44bda5bfb6d.js"
391
391
  ],
392
- "/(app)/page": [
393
- "static/chunks/webpack-5252e5254da079b5.js",
394
- "static/chunks/4bd1b696-f785427dddbba9fb.js",
395
- "static/chunks/1255-404bb8de49c90395.js",
396
- "static/chunks/main-app-a1f59168303c7f84.js",
397
- "static/chunks/app/(app)/page-0952b44bda5bfb6d.js"
398
- ],
399
392
  "/(app)/voice/page": [
400
393
  "static/chunks/webpack-5252e5254da079b5.js",
401
394
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
@@ -407,6 +400,13 @@
407
400
  "static/chunks/9880-53262785284464cc.js",
408
401
  "static/chunks/2333-43c39acb531f7d4e.js",
409
402
  "static/chunks/app/(app)/voice/page-72d72d9a70d9c1d4.js"
403
+ ],
404
+ "/(app)/page": [
405
+ "static/chunks/webpack-5252e5254da079b5.js",
406
+ "static/chunks/4bd1b696-f785427dddbba9fb.js",
407
+ "static/chunks/1255-404bb8de49c90395.js",
408
+ "static/chunks/main-app-a1f59168303c7f84.js",
409
+ "static/chunks/app/(app)/page-0952b44bda5bfb6d.js"
410
410
  ]
411
411
  }
412
412
  }
@@ -3,56 +3,56 @@
3
3
  "/api/device-character/route": "/api/device-character",
4
4
  "/api/download-piper-model/route": "/api/download-piper-model",
5
5
  "/api/models/route": "/api/models",
6
- "/api/reload-tools/route": "/api/reload-tools",
7
6
  "/api/prewarm/route": "/api/prewarm",
8
- "/api/robopark/devices/[deviceId]/control/route": "/api/robopark/devices/[deviceId]/control",
9
7
  "/api/prompt/route": "/api/prompt",
8
+ "/api/reload-tools/route": "/api/reload-tools",
9
+ "/api/robopark/devices/[deviceId]/control/route": "/api/robopark/devices/[deviceId]/control",
10
10
  "/api/robopark/robots/[robotId]/operations/route": "/api/robopark/robots/[robotId]/operations",
11
11
  "/api/robopark/sessions/[sessionId]/end/route": "/api/robopark/sessions/[sessionId]/end",
12
12
  "/api/robopark/transcripts/[sessionId]/route": "/api/robopark/transcripts/[sessionId]",
13
+ "/api/setup/complete/route": "/api/setup/complete",
13
14
  "/api/setup/status/route": "/api/setup/status",
14
15
  "/api/setup/test-groq/route": "/api/setup/test-groq",
15
16
  "/api/setup/test-hass/route": "/api/setup/test-hass",
16
- "/api/setup/complete/route": "/api/setup/complete",
17
17
  "/api/setup/test-ollama/route": "/api/setup/test-ollama",
18
- "/api/test-tts/route": "/api/test-tts",
19
18
  "/api/setup/test-n8n/route": "/api/setup/test-n8n",
20
- "/api/voices/route": "/api/voices",
21
- "/api/wake-word/models/route": "/api/wake-word/models",
19
+ "/api/test-tts/route": "/api/test-tts",
22
20
  "/api/wake-word/status/route": "/api/wake-word/status",
21
+ "/api/wake-word/models/route": "/api/wake-word/models",
22
+ "/api/voices/route": "/api/voices",
23
23
  "/api/wake-word/upload/route": "/api/wake-word/upload",
24
24
  "/favicon.ico/route": "/favicon.ico",
25
- "/api/connection-details/route": "/api/connection-details",
26
- "/api/kiosk-hardware/route": "/api/kiosk-hardware",
27
25
  "/api/model-status/route": "/api/model-status",
28
- "/api/robopark/character-ai/route": "/api/robopark/character-ai",
29
- "/api/robopark/device-access/route": "/api/robopark/device-access",
26
+ "/api/kiosk-hardware/route": "/api/kiosk-hardware",
27
+ "/api/connection-details/route": "/api/connection-details",
30
28
  "/api/robopark/live-rooms/route": "/api/robopark/live-rooms",
31
29
  "/api/robopark/monitor-token/route": "/api/robopark/monitor-token",
32
- "/api/robopark/servers/[serverId]/metrics/route": "/api/robopark/servers/[serverId]/metrics",
30
+ "/api/robopark/character-ai/route": "/api/robopark/character-ai",
31
+ "/api/robopark/camera-token/route": "/api/robopark/camera-token",
32
+ "/api/robopark/device-access/route": "/api/robopark/device-access",
33
33
  "/api/robopark/robots/route": "/api/robopark/robots",
34
+ "/api/robopark/servers/[serverId]/metrics/route": "/api/robopark/servers/[serverId]/metrics",
34
35
  "/api/robopark/servers/[serverId]/route": "/api/robopark/servers/[serverId]",
35
- "/api/robopark/sessions/route": "/api/robopark/sessions",
36
36
  "/api/robopark/servers/route": "/api/robopark/servers",
37
+ "/api/robopark/sessions/route": "/api/robopark/sessions",
38
+ "/api/robovoice/robots/[robotId]/media-health/route": "/api/robovoice/robots/[robotId]/media-health",
37
39
  "/api/robopark/vision-caption/route": "/api/robopark/vision-caption",
38
40
  "/api/robopark/robots/[robotId]/voice-engine/route": "/api/robopark/robots/[robotId]/voice-engine",
39
- "/api/robovoice/robots/[robotId]/media-health/route": "/api/robovoice/robots/[robotId]/media-health",
41
+ "/api/settings/route": "/api/settings",
40
42
  "/api/robopark/transcripts/route": "/api/robopark/transcripts",
41
43
  "/api/turn-credentials/route": "/api/turn-credentials",
42
- "/api/robopark/camera-token/route": "/api/robopark/camera-token",
43
- "/api/settings/route": "/api/settings",
44
44
  "/api/wake/route": "/api/wake",
45
- "/robopark/[...path]/route": "/robopark/[...path]",
46
- "/camera-grid/route": "/camera-grid",
47
45
  "/fed/media/robots/[robotId]/video_feed/route": "/fed/media/robots/[robotId]/video_feed",
46
+ "/robopark/[...path]/route": "/robopark/[...path]",
47
+ "/fed/[...path]/route": "/fed/[...path]",
48
48
  "/tailnet/route": "/tailnet",
49
+ "/camera-grid/route": "/camera-grid",
49
50
  "/vendor/livekit-client.umd.js/route": "/vendor/livekit-client.umd.js",
50
- "/fed/[...path]/route": "/fed/[...path]",
51
51
  "/robopark/api/robots/[robotId]/stream/route": "/robopark/api/robots/[robotId]/stream",
52
52
  "/(app)/opengraph-image-xg4ifa/route": "/opengraph-image-xg4ifa",
53
53
  "/robopark/api/[...path]/route": "/robopark/api/[...path]",
54
54
  "/voice-tester/page": "/voice-tester",
55
55
  "/robopark/page": "/robopark",
56
- "/(app)/page": "/",
57
- "/(app)/voice/page": "/voice"
56
+ "/(app)/voice/page": "/voice",
57
+ "/(app)/page": "/"
58
58
  }
@@ -5,8 +5,8 @@
5
5
  "devFiles": [],
6
6
  "ampDevFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/Xg-e8h70WpdFcsZ2vcfOG/_buildManifest.js",
9
- "static/Xg-e8h70WpdFcsZ2vcfOG/_ssgManifest.js"
8
+ "static/gGysrZrp8HXGK_0MbZa9v/_buildManifest.js",
9
+ "static/gGysrZrp8HXGK_0MbZa9v/_ssgManifest.js"
10
10
  ],
11
11
  "rootMainFiles": [
12
12
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -3,56 +3,56 @@
3
3
  "/api/device-character/route": "app/api/device-character/route.js",
4
4
  "/api/download-piper-model/route": "app/api/download-piper-model/route.js",
5
5
  "/api/models/route": "app/api/models/route.js",
6
- "/api/reload-tools/route": "app/api/reload-tools/route.js",
7
6
  "/api/prewarm/route": "app/api/prewarm/route.js",
8
- "/api/robopark/devices/[deviceId]/control/route": "app/api/robopark/devices/[deviceId]/control/route.js",
9
7
  "/api/prompt/route": "app/api/prompt/route.js",
8
+ "/api/reload-tools/route": "app/api/reload-tools/route.js",
9
+ "/api/robopark/devices/[deviceId]/control/route": "app/api/robopark/devices/[deviceId]/control/route.js",
10
10
  "/api/robopark/robots/[robotId]/operations/route": "app/api/robopark/robots/[robotId]/operations/route.js",
11
11
  "/api/robopark/sessions/[sessionId]/end/route": "app/api/robopark/sessions/[sessionId]/end/route.js",
12
12
  "/api/robopark/transcripts/[sessionId]/route": "app/api/robopark/transcripts/[sessionId]/route.js",
13
+ "/api/setup/complete/route": "app/api/setup/complete/route.js",
13
14
  "/api/setup/status/route": "app/api/setup/status/route.js",
14
15
  "/api/setup/test-groq/route": "app/api/setup/test-groq/route.js",
15
16
  "/api/setup/test-hass/route": "app/api/setup/test-hass/route.js",
16
- "/api/setup/complete/route": "app/api/setup/complete/route.js",
17
17
  "/api/setup/test-ollama/route": "app/api/setup/test-ollama/route.js",
18
- "/api/test-tts/route": "app/api/test-tts/route.js",
19
18
  "/api/setup/test-n8n/route": "app/api/setup/test-n8n/route.js",
20
- "/api/voices/route": "app/api/voices/route.js",
21
- "/api/wake-word/models/route": "app/api/wake-word/models/route.js",
19
+ "/api/test-tts/route": "app/api/test-tts/route.js",
22
20
  "/api/wake-word/status/route": "app/api/wake-word/status/route.js",
21
+ "/api/wake-word/models/route": "app/api/wake-word/models/route.js",
22
+ "/api/voices/route": "app/api/voices/route.js",
23
23
  "/api/wake-word/upload/route": "app/api/wake-word/upload/route.js",
24
24
  "/favicon.ico/route": "app/favicon.ico/route.js",
25
- "/api/connection-details/route": "app/api/connection-details/route.js",
26
- "/api/kiosk-hardware/route": "app/api/kiosk-hardware/route.js",
27
25
  "/api/model-status/route": "app/api/model-status/route.js",
28
- "/api/robopark/character-ai/route": "app/api/robopark/character-ai/route.js",
29
- "/api/robopark/device-access/route": "app/api/robopark/device-access/route.js",
26
+ "/api/kiosk-hardware/route": "app/api/kiosk-hardware/route.js",
27
+ "/api/connection-details/route": "app/api/connection-details/route.js",
30
28
  "/api/robopark/live-rooms/route": "app/api/robopark/live-rooms/route.js",
31
29
  "/api/robopark/monitor-token/route": "app/api/robopark/monitor-token/route.js",
32
- "/api/robopark/servers/[serverId]/metrics/route": "app/api/robopark/servers/[serverId]/metrics/route.js",
30
+ "/api/robopark/character-ai/route": "app/api/robopark/character-ai/route.js",
31
+ "/api/robopark/camera-token/route": "app/api/robopark/camera-token/route.js",
32
+ "/api/robopark/device-access/route": "app/api/robopark/device-access/route.js",
33
33
  "/api/robopark/robots/route": "app/api/robopark/robots/route.js",
34
+ "/api/robopark/servers/[serverId]/metrics/route": "app/api/robopark/servers/[serverId]/metrics/route.js",
34
35
  "/api/robopark/servers/[serverId]/route": "app/api/robopark/servers/[serverId]/route.js",
35
- "/api/robopark/sessions/route": "app/api/robopark/sessions/route.js",
36
36
  "/api/robopark/servers/route": "app/api/robopark/servers/route.js",
37
+ "/api/robopark/sessions/route": "app/api/robopark/sessions/route.js",
38
+ "/api/robovoice/robots/[robotId]/media-health/route": "app/api/robovoice/robots/[robotId]/media-health/route.js",
37
39
  "/api/robopark/vision-caption/route": "app/api/robopark/vision-caption/route.js",
38
40
  "/api/robopark/robots/[robotId]/voice-engine/route": "app/api/robopark/robots/[robotId]/voice-engine/route.js",
39
- "/api/robovoice/robots/[robotId]/media-health/route": "app/api/robovoice/robots/[robotId]/media-health/route.js",
41
+ "/api/settings/route": "app/api/settings/route.js",
40
42
  "/api/robopark/transcripts/route": "app/api/robopark/transcripts/route.js",
41
43
  "/api/turn-credentials/route": "app/api/turn-credentials/route.js",
42
- "/api/robopark/camera-token/route": "app/api/robopark/camera-token/route.js",
43
- "/api/settings/route": "app/api/settings/route.js",
44
44
  "/api/wake/route": "app/api/wake/route.js",
45
- "/robopark/[...path]/route": "app/robopark/[...path]/route.js",
46
- "/camera-grid/route": "app/camera-grid/route.js",
47
45
  "/fed/media/robots/[robotId]/video_feed/route": "app/fed/media/robots/[robotId]/video_feed/route.js",
46
+ "/robopark/[...path]/route": "app/robopark/[...path]/route.js",
47
+ "/fed/[...path]/route": "app/fed/[...path]/route.js",
48
48
  "/tailnet/route": "app/tailnet/route.js",
49
+ "/camera-grid/route": "app/camera-grid/route.js",
49
50
  "/vendor/livekit-client.umd.js/route": "app/vendor/livekit-client.umd.js/route.js",
50
- "/fed/[...path]/route": "app/fed/[...path]/route.js",
51
51
  "/robopark/api/robots/[robotId]/stream/route": "app/robopark/api/robots/[robotId]/stream/route.js",
52
52
  "/(app)/opengraph-image-xg4ifa/route": "app/(app)/opengraph-image-xg4ifa/route.js",
53
53
  "/robopark/api/[...path]/route": "app/robopark/api/[...path]/route.js",
54
54
  "/voice-tester/page": "app/voice-tester/page.js",
55
55
  "/robopark/page": "app/robopark/page.js",
56
- "/(app)/page": "app/(app)/page.js",
57
- "/(app)/voice/page": "app/(app)/voice/page.js"
56
+ "/(app)/voice/page": "app/(app)/voice/page.js",
57
+ "/(app)/page": "app/(app)/page.js"
58
58
  }
@@ -3,8 +3,8 @@
3
3
  "functions": {
4
4
  "/api/kiosk-hardware": {},
5
5
  "/api/robovoice/robots/[robotId]/media-health": {},
6
- "/fed/media/robots/[robotId]/video_feed": {},
7
6
  "/robopark/[...path]": {},
7
+ "/fed/media/robots/[robotId]/video_feed": {},
8
8
  "/robopark/api/robots/[robotId]/stream": {}
9
9
  }
10
10
  }
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-5252e5254da079b5.js" defer=""></script><script src="/_next/static/chunks/framework-e60c938074ff7136.js" defer=""></script><script src="/_next/static/chunks/main-9e24e8708ff075fc.js" defer=""></script><script src="/_next/static/chunks/pages/_app-131c90850aef965b.js" defer=""></script><script src="/_next/static/chunks/pages/_error-e4ba546eb376bdf4.js" defer=""></script><script src="/_next/static/Xg-e8h70WpdFcsZ2vcfOG/_buildManifest.js" defer=""></script><script src="/_next/static/Xg-e8h70WpdFcsZ2vcfOG/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"Xg-e8h70WpdFcsZ2vcfOG","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-5252e5254da079b5.js" defer=""></script><script src="/_next/static/chunks/framework-e60c938074ff7136.js" defer=""></script><script src="/_next/static/chunks/main-9e24e8708ff075fc.js" defer=""></script><script src="/_next/static/chunks/pages/_app-131c90850aef965b.js" defer=""></script><script src="/_next/static/chunks/pages/_error-e4ba546eb376bdf4.js" defer=""></script><script src="/_next/static/gGysrZrp8HXGK_0MbZa9v/_buildManifest.js" defer=""></script><script src="/_next/static/gGysrZrp8HXGK_0MbZa9v/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"gGysrZrp8HXGK_0MbZa9v","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1,5 +1,5 @@
1
1
  {
2
- "/_app": "pages/_app.js",
3
2
  "/_error": "pages/_error.js",
3
+ "/_app": "pages/_app.js",
4
4
  "/_document": "pages/_document.js"
5
5
  }
@@ -0,0 +1 @@
1
+ self.__BUILD_MANIFEST=function(e,a,s,r,t){return{__rewrites:{afterFiles:[{has:s,source:"/api/announce",destination:s},{has:s,source:"/api/reload-tools",destination:s},{has:s,source:"/api/wake",destination:s},{has:s,source:"/api/health",destination:s},{has:s,source:"/api/prompt",destination:s},{has:s,source:"/api/voices",destination:s},{has:s,source:"/api/models",destination:s},{has:s,source:"/api/wake-word/:path*",destination:s},{has:s,source:"/api/metrics",destination:s}],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:43,errorRate:1e-4,numBits:825,numHashes:14,bitArray:[1,1,e,e,0,0,a,e,e,a,a,a,a,e,e,a,a,e,a,a,e,e,e,a,e,e,e,a,a,e,a,e,e,a,a,e,a,a,e,e,e,a,e,e,e,a,a,a,a,e,e,a,e,a,e,e,e,a,e,e,a,e,e,e,e,e,e,a,e,a,a,e,a,a,a,a,a,a,a,a,e,e,a,a,e,e,a,a,a,a,e,e,e,e,a,a,a,a,e,a,e,e,e,e,e,a,a,e,a,a,e,e,a,a,a,a,a,e,e,e,a,e,a,a,a,e,a,e,e,a,e,e,a,e,a,e,e,a,a,e,e,a,e,a,e,e,e,e,a,e,a,e,e,a,a,a,a,e,a,e,a,a,a,e,e,e,e,e,e,a,a,e,a,e,e,a,a,a,e,e,a,e,e,a,a,e,a,a,a,a,e,e,e,e,a,e,a,a,e,e,e,e,a,a,e,e,e,e,e,e,e,e,a,e,e,e,a,e,a,a,a,e,e,e,a,e,a,a,e,a,a,e,a,a,e,a,a,a,e,a,a,a,a,a,a,e,e,a,a,e,a,e,e,a,a,a,a,e,a,e,a,a,e,e,a,e,e,e,a,a,e,a,e,a,e,e,a,a,e,a,a,e,a,e,a,a,a,a,a,e,a,e,e,e,a,a,e,e,a,e,a,a,e,e,e,e,a,e,e,e,e,a,e,e,a,a,e,e,e,a,e,a,a,a,a,a,e,e,e,a,a,e,a,a,a,e,a,e,a,e,a,a,e,a,a,e,a,e,a,e,a,e,e,e,e,a,e,e,e,e,a,e,a,e,a,a,e,e,a,e,e,e,e,a,e,e,e,a,a,e,a,e,a,e,e,e,e,e,e,e,e,a,e,a,a,a,a,e,a,e,a,a,a,a,e,e,e,e,a,e,a,e,e,e,a,a,e,e,a,a,a,a,e,e,e,e,e,a,a,a,a,e,e,e,e,e,e,a,e,e,e,e,e,a,a,e,a,a,a,e,e,a,a,e,e,e,a,e,e,a,e,e,e,a,e,a,a,a,a,a,a,a,a,e,a,e,e,a,e,a,a,e,e,e,e,a,e,a,a,a,e,a,a,a,a,a,a,a,a,e,a,e,a,e,a,e,a,e,e,e,a,e,a,e,a,e,e,e,a,a,a,a,a,a,e,a,e,e,a,a,e,a,e,a,e,e,a,a,e,a,a,e,a,a,a,a,e,e,e,e,a,e,a,a,a,e,a,e,e,e,e,a,e,e,e,a,a,e,e,e,e,a,a,e,e,e,a,a,e,e,a,e,e,e,a,e,e,e,a,a,a,a,a,e,e,a,a,a,a,e,e,e,e,e,e,a,a,a,a,a,e,a,a,a,a,e,a,a,a,e,a,e,e,a,e,e,e,e,e,a,e,e,e,a,e,e,e,a,e,e,e,e,a,e,e,e,e,a,e,a,a,a,a,a,e,a,a,e,a,e,e,a,a,a,a,e,a,e,e,a,a,a,a,a,a,a,e,e,a,e,e,e,e,a,a,e,e,e,a,e,e,a,a,e,a,e,e,e,a,e,a,e,e,e,e,a,e,e,e,a,e,e,a,a,a,a,a,e,e,a,a,e,e,a,a,a,e,e,e,a,a,e,a,a,e,e,e,a,e,a,a,e,a,a,a,e,a,e,a,a,e,e,e,a,a,a,a,e,a,e,e,e,a,e,e,a,a,a,e,a,a,e,a,e,e,e,a,a,a,a,e,e,a,a,a,a,a,e,e,e,e,e,a,a,e,a,a,e,e,e,e,e,e,e,e,e,e,e,a,a,e,a,a,a,e,e,a,a,a,a,a,a,a,a,e]},__routerFilterDynamic:{numItems:11,errorRate:1e-4,numBits:211,numHashes:14,bitArray:[a,a,a,a,a,a,a,a,a,e,a,e,a,a,e,e,a,a,a,a,e,e,e,e,a,e,e,e,e,e,a,e,e,e,e,e,a,e,e,e,a,e,e,a,e,a,e,e,a,e,a,a,e,e,e,a,e,e,a,a,a,a,e,a,e,a,a,e,a,a,e,a,a,e,a,e,e,e,e,a,a,a,a,e,e,a,a,a,e,e,e,a,a,e,e,e,e,e,e,a,e,e,e,e,a,a,a,a,e,e,a,e,a,a,e,e,a,e,a,a,a,a,e,a,a,e,e,e,a,e,a,a,e,e,e,e,a,a,a,a,e,a,a,e,a,a,e,e,a,e,a,a,e,e,a,a,e,e,a,e,e,a,e,a,e,a,a,e,a,e,e,a,a,e,e,a,e,a,e,a,e,e,a,a,a,a,e,a,a,e,a,a,e,e,a,a,e,e,e,e,e,e,e,a,a,a,a,e,e,a,a]},"/_error":["static/chunks/pages/_error-e4ba546eb376bdf4.js"],sortedPages:["/_app","/_error"]}}(1,0,void 0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
@@ -0,0 +1 @@
1
+ self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
@@ -54,7 +54,7 @@
54
54
  function refreshHardware(requestPermission){if(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices){setHardwareStatus(mediaBlockedReason(),'bad');return Promise.reject(new Error('media devices unavailable'))}var permission=Promise.resolve();if(requestPermission){permission=navigator.mediaDevices.getUserMedia({audio:true,video:true}).catch(function(){return navigator.mediaDevices.getUserMedia({audio:true})}).then(function(stream){stream.getTracks().forEach(function(track){track.stop()})})}setHardwareStatus(requestPermission?'Requesting browser media access...':'Scanning browser hardware...','');return permission.then(function(){return navigator.mediaDevices.enumerateDevices()}).then(function(devices){fillHardwareSelect('call-microphone',devices,'audioinput','microphone');fillHardwareSelect('call-camera',devices,'videoinput','camera');fillHardwareSelect('call-speaker',devices,'audiooutput','speaker');var mic=devices.filter(function(device){return device.kind==='audioinput'}).length,cam=devices.filter(function(device){return device.kind==='videoinput'}).length,out=devices.filter(function(device){return device.kind==='audiooutput'}).length;setHardwareStatus('Ready: '+mic+' microphone(s), '+cam+' camera(s), '+out+' speaker output(s).','ok');return devices}).catch(function(error){setHardwareStatus(error&&error.message||String(error),'bad');throw error})}
55
55
  function ensureCameraSdk(){if(window.LivekitClient)return Promise.resolve(window.LivekitClient);if(cameraSdkPromise)return cameraSdkPromise;cameraSdkPromise=new Promise(function(resolve,reject){var script=document.createElement('script');script.src='/vendor/livekit-client.umd.js';script.onload=function(){window.LivekitClient?resolve(window.LivekitClient):reject(new Error('LiveKit camera SDK unavailable'))};script.onerror=function(){reject(new Error('LiveKit camera SDK failed to load'))};document.head.appendChild(script)});return cameraSdkPromise}
56
56
  function scheduleCameraPublishRetry(){if(cameraPublishRetry||ending||!localVideoStream)return;if(cameraRetryCount>=8){event('camera_published','failed','Giving up after 8 attempts - the media server is not reachable.',{attempts:cameraRetryCount});return}var delay=Math.min(30000,3000*Math.pow(1.6,cameraRetryCount));cameraRetryCount++;cameraPublishRetry=setTimeout(function(){cameraPublishRetry=null;publishLocalVideo().catch(function(){})},delay)}
57
- function publishLocalVideo(){if(!localVideoStream||!localVideoStream.getVideoTracks().length)return Promise.resolve();if(cameraRoom)return Promise.resolve();return Promise.all([ensureCameraSdk(),fetch('/api/robopark/camera-token',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({character_id:character,robot_id:robot||null})}).then(function(response){if(!response.ok)throw new Error('camera token '+response.status);return response.json()})]).then(function(parts){var LK=parts[0],info=parts[1],room=new LK.Room();cameraRoom=room;room.on(LK.RoomEvent.Disconnected,function(){if(cameraRoom===room){cameraRoom=null;scheduleCameraPublishRetry()}});return room.connect(info.url,info.token).then(function(){return room.localParticipant.publishTrack(localVideoStream.getVideoTracks()[0],{name:'camera',source:LK.Track.Source.Camera})}).then(function(){cameraRetryCount=0;if(cameraPublishRetry){clearTimeout(cameraPublishRetry);cameraPublishRetry=null}event('camera_published','ok','Camera relay live',{})})}).catch(function(error){try{if(room&&room.disconnect)room.disconnect(true)}catch(_){}cameraRoom=null;event('camera_published','failed',error.message,{});scheduleCameraPublishRetry();throw error})}
57
+ function publishLocalVideo(){var pendingCameraRoom=null;if(!localVideoStream||!localVideoStream.getVideoTracks().length)return Promise.resolve();if(cameraRoom)return Promise.resolve();return Promise.all([ensureCameraSdk(),fetch('/api/robopark/camera-token',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({character_id:character,robot_id:robot||null})}).then(function(response){if(!response.ok)throw new Error('camera token '+response.status);return response.json()})]).then(function(parts){var LK=parts[0],info=parts[1],room=new LK.Room();pendingCameraRoom=room;cameraRoom=room;room.on(LK.RoomEvent.Disconnected,function(){if(cameraRoom===room){cameraRoom=null;scheduleCameraPublishRetry()}});return room.connect(info.url,info.token).then(function(){return room.localParticipant.publishTrack(localVideoStream.getVideoTracks()[0],{name:'camera',source:LK.Track.Source.Camera})}).then(function(){cameraRetryCount=0;if(cameraPublishRetry){clearTimeout(cameraPublishRetry);cameraPublishRetry=null}event('camera_published','ok','Camera relay live',{})})}).catch(function(error){try{if(pendingCameraRoom&&pendingCameraRoom.disconnect)pendingCameraRoom.disconnect(true)}catch(_){}pendingCameraRoom=null;cameraRoom=null;event('camera_published','failed',error.message,{});scheduleCameraPublishRetry();throw error})}
58
58
  function startLocalVideo(){if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)return Promise.resolve();if(localVideoStream&&activeCameraDevice===cameraDeviceId)return publishLocalVideo();if(localVideoStream)localVideoStream.getTracks().forEach(function(track){track.stop()});if(cameraRoom){cameraRoom.disconnect();cameraRoom=null}var video=cameraDeviceId?{deviceId:{exact:cameraDeviceId}}:true;return navigator.mediaDevices.getUserMedia({video:video,audio:false}).then(function(stream){localVideoStream=stream;activeCameraDevice=cameraDeviceId;el('robot-video').srcObject=stream;if(!robotStreamActive())el('robot-video').hidden=false;el('vision').hidden=false;return publishLocalVideo().catch(function(){})}).catch(function(error){localVideoStream=null;activeCameraDevice=null;el('robot-video').srcObject=null;if(!robotStreamActive()){el('robot-video').hidden=true;el('vision').hidden=true}throw error})}
59
59
  function robotStreamActive(){var stream=el('robot-stream');return Boolean(stream&&stream.getAttribute('src'))}
60
60
  // Ambient vision. The ElevenLabs contextual_update channel carries text only, so a