robopark 3.3.61 → 3.3.63

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 (73) hide show
  1. package/package.json +1 -1
  2. package/scheduler/main.py +40 -3
  3. package/scheduler/static/voice-join.html +5 -1
  4. package/ui/standalone/.next/BUILD_ID +1 -1
  5. package/ui/standalone/.next/app-build-manifest.json +75 -75
  6. package/ui/standalone/.next/app-path-routes-manifest.json +22 -22
  7. package/ui/standalone/.next/build-manifest.json +2 -2
  8. package/ui/standalone/.next/prerender-manifest.json +3 -3
  9. package/ui/standalone/.next/server/app/(app)/opengraph-image-xg4ifa/route_client-reference-manifest.js +1 -1
  10. package/ui/standalone/.next/server/app/(app)/page_client-reference-manifest.js +1 -1
  11. package/ui/standalone/.next/server/app/(app)/voice/page_client-reference-manifest.js +1 -1
  12. package/ui/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/ui/standalone/.next/server/app/api/connection-details/route_client-reference-manifest.js +1 -1
  14. package/ui/standalone/.next/server/app/api/device-character/route_client-reference-manifest.js +1 -1
  15. package/ui/standalone/.next/server/app/api/download-piper-model/route_client-reference-manifest.js +1 -1
  16. package/ui/standalone/.next/server/app/api/kiosk-hardware/route_client-reference-manifest.js +1 -1
  17. package/ui/standalone/.next/server/app/api/model-status/route_client-reference-manifest.js +1 -1
  18. package/ui/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  19. package/ui/standalone/.next/server/app/api/prewarm/route_client-reference-manifest.js +1 -1
  20. package/ui/standalone/.next/server/app/api/prompt/route_client-reference-manifest.js +1 -1
  21. package/ui/standalone/.next/server/app/api/reload-tools/route_client-reference-manifest.js +1 -1
  22. package/ui/standalone/.next/server/app/api/robopark/camera-token/route_client-reference-manifest.js +1 -1
  23. package/ui/standalone/.next/server/app/api/robopark/character-ai/route_client-reference-manifest.js +1 -1
  24. package/ui/standalone/.next/server/app/api/robopark/device-access/route_client-reference-manifest.js +1 -1
  25. package/ui/standalone/.next/server/app/api/robopark/devices/[deviceId]/control/route_client-reference-manifest.js +1 -1
  26. package/ui/standalone/.next/server/app/api/robopark/live-rooms/route.js +1 -1
  27. package/ui/standalone/.next/server/app/api/robopark/live-rooms/route_client-reference-manifest.js +1 -1
  28. package/ui/standalone/.next/server/app/api/robopark/monitor-token/route_client-reference-manifest.js +1 -1
  29. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/operations/route_client-reference-manifest.js +1 -1
  30. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/voice-engine/route_client-reference-manifest.js +1 -1
  31. package/ui/standalone/.next/server/app/api/robopark/robots/route_client-reference-manifest.js +1 -1
  32. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/metrics/route_client-reference-manifest.js +1 -1
  33. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/route_client-reference-manifest.js +1 -1
  34. package/ui/standalone/.next/server/app/api/robopark/servers/route_client-reference-manifest.js +1 -1
  35. package/ui/standalone/.next/server/app/api/robopark/sessions/[sessionId]/end/route_client-reference-manifest.js +1 -1
  36. package/ui/standalone/.next/server/app/api/robopark/sessions/route_client-reference-manifest.js +1 -1
  37. package/ui/standalone/.next/server/app/api/robopark/transcripts/[sessionId]/route_client-reference-manifest.js +1 -1
  38. package/ui/standalone/.next/server/app/api/robopark/transcripts/route_client-reference-manifest.js +1 -1
  39. package/ui/standalone/.next/server/app/api/robopark/vision-caption/route_client-reference-manifest.js +1 -1
  40. package/ui/standalone/.next/server/app/api/robovoice/robots/[robotId]/media-health/route_client-reference-manifest.js +1 -1
  41. package/ui/standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  42. package/ui/standalone/.next/server/app/api/setup/complete/route_client-reference-manifest.js +1 -1
  43. package/ui/standalone/.next/server/app/api/setup/status/route_client-reference-manifest.js +1 -1
  44. package/ui/standalone/.next/server/app/api/setup/test-groq/route_client-reference-manifest.js +1 -1
  45. package/ui/standalone/.next/server/app/api/setup/test-hass/route_client-reference-manifest.js +1 -1
  46. package/ui/standalone/.next/server/app/api/setup/test-n8n/route_client-reference-manifest.js +1 -1
  47. package/ui/standalone/.next/server/app/api/setup/test-ollama/route_client-reference-manifest.js +1 -1
  48. package/ui/standalone/.next/server/app/api/test-tts/route_client-reference-manifest.js +1 -1
  49. package/ui/standalone/.next/server/app/api/turn-credentials/route_client-reference-manifest.js +1 -1
  50. package/ui/standalone/.next/server/app/api/voices/route_client-reference-manifest.js +1 -1
  51. package/ui/standalone/.next/server/app/api/wake/route_client-reference-manifest.js +1 -1
  52. package/ui/standalone/.next/server/app/api/wake-word/models/route_client-reference-manifest.js +1 -1
  53. package/ui/standalone/.next/server/app/api/wake-word/status/route_client-reference-manifest.js +1 -1
  54. package/ui/standalone/.next/server/app/api/wake-word/upload/route_client-reference-manifest.js +1 -1
  55. package/ui/standalone/.next/server/app/camera-grid/route_client-reference-manifest.js +1 -1
  56. package/ui/standalone/.next/server/app/fed/[...path]/route_client-reference-manifest.js +1 -1
  57. package/ui/standalone/.next/server/app/fed/media/robots/[robotId]/video_feed/route_client-reference-manifest.js +1 -1
  58. package/ui/standalone/.next/server/app/robopark/[...path]/route_client-reference-manifest.js +1 -1
  59. package/ui/standalone/.next/server/app/robopark/api/[...path]/route_client-reference-manifest.js +1 -1
  60. package/ui/standalone/.next/server/app/robopark/api/robots/[robotId]/stream/route_client-reference-manifest.js +1 -1
  61. package/ui/standalone/.next/server/app/robopark/page_client-reference-manifest.js +1 -1
  62. package/ui/standalone/.next/server/app/tailnet/route_client-reference-manifest.js +1 -1
  63. package/ui/standalone/.next/server/app/vendor/livekit-client.umd.js/route_client-reference-manifest.js +1 -1
  64. package/ui/standalone/.next/server/app/voice-tester/page_client-reference-manifest.js +1 -1
  65. package/ui/standalone/.next/server/app-paths-manifest.json +22 -22
  66. package/ui/standalone/.next/server/functions-config-manifest.json +1 -1
  67. package/ui/standalone/.next/server/pages/500.html +1 -1
  68. package/ui/standalone/.next/server/pages-manifest.json +1 -1
  69. package/ui/standalone/.next/server/server-reference-manifest.json +1 -1
  70. package/ui/standalone/public/robopark-control.html +233 -17
  71. package/ui/standalone/public/voice-join.html +5 -1
  72. /package/ui/standalone/.next/static/{95wYdEKkTppMWNZn6Vr-N → yvZvIl5mqEgNQQCAaVeEm}/_buildManifest.js +0 -0
  73. /package/ui/standalone/.next/static/{95wYdEKkTppMWNZn6Vr-N → yvZvIl5mqEgNQQCAaVeEm}/_ssgManifest.js +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robopark",
3
- "version": "3.3.61",
3
+ "version": "3.3.63",
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": {
package/scheduler/main.py CHANGED
@@ -982,12 +982,15 @@ async def _ensure_local_livekit_server() -> None:
982
982
  "INSERT INTO livekit_servers (id, name, url, webhook_url, api_key, api_secret, "
983
983
  "max_sessions, status, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
984
984
  (
985
- "livekit-local", "Local LiveKit", "ws://localhost:7883", "",
985
+ # 127.0.0.1, not localhost: on Windows localhost resolves
986
+ # to ::1 and livekit-server listens on IPv4 only, which
987
+ # broke every scheduler-side call to the media server.
988
+ "livekit-local", "Local LiveKit", "ws://127.0.0.1:7883", "",
986
989
  api_key, api_secret, 8, "unknown", now,
987
990
  ),
988
991
  )
989
992
  await db.commit()
990
- logger.info("Registered a local LiveKit server (ws://localhost:7883) for camera streaming")
993
+ logger.info("Registered a local LiveKit server (ws://127.0.0.1:7883) for camera streaming")
991
994
  except Exception as exc:
992
995
  logger.warning("Could not register a local LiveKit server: %s", exc)
993
996
 
@@ -3345,6 +3348,28 @@ async def health_checker():
3345
3348
  servers = await cursor.fetchall()
3346
3349
 
3347
3350
  for server in servers:
3351
+ # A local registry entry has no webhook sidecar at all —
3352
+ # its webhook_url is empty, every probe below threw, and
3353
+ # the server sat marked "offline" while happily serving
3354
+ # calls. Probe LiveKit's own HTTP root instead.
3355
+ if not (server["webhook_url"] or "").strip():
3356
+ probe_url = re.sub(r"^ws", "http", _lk_local_url(server["url"] or ""))
3357
+ try:
3358
+ async with httpx.AsyncClient(timeout=5.0) as client:
3359
+ resp = await client.get(probe_url)
3360
+ new_status = "online" if resp.status_code == 200 else "offline"
3361
+ except Exception:
3362
+ new_status = "offline"
3363
+ if new_status != server["status"]:
3364
+ await db.execute(
3365
+ "UPDATE livekit_servers SET status = ? WHERE id = ?",
3366
+ (new_status, server["id"])
3367
+ )
3368
+ await broadcast("server_status_changed", {
3369
+ "server_id": server["id"],
3370
+ "status": new_status
3371
+ })
3372
+ continue
3348
3373
  try:
3349
3374
  async with httpx.AsyncClient(timeout=5.0) as client:
3350
3375
  resp = await client.get(f"{server['webhook_url']}/health")
@@ -3718,6 +3743,18 @@ async def issue_livekit_token(payload: LiveKitTokenRequest,
3718
3743
  identity=payload.identity, expires_at=expires,
3719
3744
  )
3720
3745
 
3746
+ def _lk_local_url(url: str) -> str:
3747
+ """The LiveKit URL THIS process should dial.
3748
+
3749
+ The registry historically stored ws://localhost:7883, and on Windows
3750
+ "localhost" resolves to ::1 first while livekit-server listens on IPv4
3751
+ only — so every server-side call (room census, health checks) died with
3752
+ "Server disconnected" while browsers, routed via 127.0.0.1 by tailscale
3753
+ serve, worked fine. Dial the IPv4 loopback explicitly.
3754
+ """
3755
+ return re.sub(r"(?<=://)localhost(?=[:/]|$)", "127.0.0.1", url or "")
3756
+
3757
+
3721
3758
  def _lk_public_url(url: str, request: Optional[Request] = None) -> str:
3722
3759
  """The LiveKit URL a BROWSER should use.
3723
3760
 
@@ -3802,7 +3839,7 @@ async def list_live_rooms():
3802
3839
  raise HTTPException(503, "livekit-api not installed on scheduler")
3803
3840
 
3804
3841
  # The room service speaks HTTP; the registry stores the signalling ws URL.
3805
- http_url = re.sub(r"^ws", "http", url or "")
3842
+ http_url = re.sub(r"^ws", "http", _lk_local_url(url))
3806
3843
  client = lkapi.LiveKitAPI(http_url, key, sec)
3807
3844
  try:
3808
3845
  result = await client.room.list_rooms(lkapi.ListRoomsRequest())
@@ -145,7 +145,11 @@
145
145
  }
146
146
  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}
147
147
  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)}
148
- 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})}
148
+ // simulcast:false is load-bearing: livekit-server 1.13.4 ACKs a simulcast
149
+ // publish (the page logs "Camera relay live") but never adds the track to
150
+ // room state, so every subscriber — including the fleet grid — waits for a
151
+ // camera track that never comes. Single-layer publishes propagate normally.
152
+ 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,simulcast:false})}).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})}
149
153
  // camera=off: the RoboPark vision server is the sole owner of this kiosk's
150
154
  // camera, and the control centre watches its MJPEG stream rather than a
151
155
  // browser LiveKit publisher. A second opener of a USB camera just fails on
@@ -1 +1 @@
1
- 95wYdEKkTppMWNZn6Vr-N
1
+ yvZvIl5mqEgNQQCAaVeEm
@@ -7,13 +7,6 @@
7
7
  "static/chunks/main-app-a1f59168303c7f84.js",
8
8
  "static/chunks/app/_not-found/page-cfd7daa82d71540c.js"
9
9
  ],
10
- "/api/device-character/route": [
11
- "static/chunks/webpack-5252e5254da079b5.js",
12
- "static/chunks/4bd1b696-f785427dddbba9fb.js",
13
- "static/chunks/1255-404bb8de49c90395.js",
14
- "static/chunks/main-app-a1f59168303c7f84.js",
15
- "static/chunks/app/api/device-character/route-0952b44bda5bfb6d.js"
16
- ],
17
10
  "/layout": [
18
11
  "static/chunks/webpack-5252e5254da079b5.js",
19
12
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
@@ -32,12 +25,19 @@
32
25
  "static/chunks/main-app-a1f59168303c7f84.js",
33
26
  "static/chunks/app/api/download-piper-model/route-0952b44bda5bfb6d.js"
34
27
  ],
35
- "/api/prewarm/route": [
28
+ "/api/device-character/route": [
36
29
  "static/chunks/webpack-5252e5254da079b5.js",
37
30
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
38
31
  "static/chunks/1255-404bb8de49c90395.js",
39
32
  "static/chunks/main-app-a1f59168303c7f84.js",
40
- "static/chunks/app/api/prewarm/route-0952b44bda5bfb6d.js"
33
+ "static/chunks/app/api/device-character/route-0952b44bda5bfb6d.js"
34
+ ],
35
+ "/api/prompt/route": [
36
+ "static/chunks/webpack-5252e5254da079b5.js",
37
+ "static/chunks/4bd1b696-f785427dddbba9fb.js",
38
+ "static/chunks/1255-404bb8de49c90395.js",
39
+ "static/chunks/main-app-a1f59168303c7f84.js",
40
+ "static/chunks/app/api/prompt/route-0952b44bda5bfb6d.js"
41
41
  ],
42
42
  "/api/models/route": [
43
43
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -46,12 +46,12 @@
46
46
  "static/chunks/main-app-a1f59168303c7f84.js",
47
47
  "static/chunks/app/api/models/route-0952b44bda5bfb6d.js"
48
48
  ],
49
- "/api/prompt/route": [
49
+ "/api/prewarm/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/prompt/route-0952b44bda5bfb6d.js"
54
+ "static/chunks/app/api/prewarm/route-0952b44bda5bfb6d.js"
55
55
  ],
56
56
  "/api/reload-tools/route": [
57
57
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -88,19 +88,19 @@
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": [
91
+ "/api/setup/status/route": [
92
92
  "static/chunks/webpack-5252e5254da079b5.js",
93
93
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
94
94
  "static/chunks/1255-404bb8de49c90395.js",
95
95
  "static/chunks/main-app-a1f59168303c7f84.js",
96
- "static/chunks/app/api/setup/complete/route-0952b44bda5bfb6d.js"
96
+ "static/chunks/app/api/setup/status/route-0952b44bda5bfb6d.js"
97
97
  ],
98
- "/api/setup/status/route": [
98
+ "/api/setup/complete/route": [
99
99
  "static/chunks/webpack-5252e5254da079b5.js",
100
100
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
101
101
  "static/chunks/1255-404bb8de49c90395.js",
102
102
  "static/chunks/main-app-a1f59168303c7f84.js",
103
- "static/chunks/app/api/setup/status/route-0952b44bda5bfb6d.js"
103
+ "static/chunks/app/api/setup/complete/route-0952b44bda5bfb6d.js"
104
104
  ],
105
105
  "/api/setup/test-groq/route": [
106
106
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -116,19 +116,19 @@
116
116
  "static/chunks/main-app-a1f59168303c7f84.js",
117
117
  "static/chunks/app/api/setup/test-hass/route-0952b44bda5bfb6d.js"
118
118
  ],
119
- "/api/setup/test-n8n/route": [
119
+ "/api/setup/test-ollama/route": [
120
120
  "static/chunks/webpack-5252e5254da079b5.js",
121
121
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
122
122
  "static/chunks/1255-404bb8de49c90395.js",
123
123
  "static/chunks/main-app-a1f59168303c7f84.js",
124
- "static/chunks/app/api/setup/test-n8n/route-0952b44bda5bfb6d.js"
124
+ "static/chunks/app/api/setup/test-ollama/route-0952b44bda5bfb6d.js"
125
125
  ],
126
- "/api/setup/test-ollama/route": [
126
+ "/api/setup/test-n8n/route": [
127
127
  "static/chunks/webpack-5252e5254da079b5.js",
128
128
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
129
129
  "static/chunks/1255-404bb8de49c90395.js",
130
130
  "static/chunks/main-app-a1f59168303c7f84.js",
131
- "static/chunks/app/api/setup/test-ollama/route-0952b44bda5bfb6d.js"
131
+ "static/chunks/app/api/setup/test-n8n/route-0952b44bda5bfb6d.js"
132
132
  ],
133
133
  "/api/test-tts/route": [
134
134
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -172,26 +172,26 @@
172
172
  "static/chunks/main-app-a1f59168303c7f84.js",
173
173
  "static/chunks/app/api/kiosk-hardware/route-0952b44bda5bfb6d.js"
174
174
  ],
175
- "/api/connection-details/route": [
175
+ "/api/model-status/route": [
176
176
  "static/chunks/webpack-5252e5254da079b5.js",
177
177
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
178
178
  "static/chunks/1255-404bb8de49c90395.js",
179
179
  "static/chunks/main-app-a1f59168303c7f84.js",
180
- "static/chunks/app/api/connection-details/route-0952b44bda5bfb6d.js"
180
+ "static/chunks/app/api/model-status/route-0952b44bda5bfb6d.js"
181
181
  ],
182
- "/api/model-status/route": [
182
+ "/api/connection-details/route": [
183
183
  "static/chunks/webpack-5252e5254da079b5.js",
184
184
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
185
185
  "static/chunks/1255-404bb8de49c90395.js",
186
186
  "static/chunks/main-app-a1f59168303c7f84.js",
187
- "static/chunks/app/api/model-status/route-0952b44bda5bfb6d.js"
187
+ "static/chunks/app/api/connection-details/route-0952b44bda5bfb6d.js"
188
188
  ],
189
- "/api/robopark/live-rooms/route": [
189
+ "/api/robopark/character-ai/route": [
190
190
  "static/chunks/webpack-5252e5254da079b5.js",
191
191
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
192
192
  "static/chunks/1255-404bb8de49c90395.js",
193
193
  "static/chunks/main-app-a1f59168303c7f84.js",
194
- "static/chunks/app/api/robopark/live-rooms/route-0952b44bda5bfb6d.js"
194
+ "static/chunks/app/api/robopark/character-ai/route-0952b44bda5bfb6d.js"
195
195
  ],
196
196
  "/api/robopark/camera-token/route": [
197
197
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -200,33 +200,33 @@
200
200
  "static/chunks/main-app-a1f59168303c7f84.js",
201
201
  "static/chunks/app/api/robopark/camera-token/route-0952b44bda5bfb6d.js"
202
202
  ],
203
- "/api/robopark/monitor-token/route": [
203
+ "/api/robopark/device-access/route": [
204
204
  "static/chunks/webpack-5252e5254da079b5.js",
205
205
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
206
206
  "static/chunks/1255-404bb8de49c90395.js",
207
207
  "static/chunks/main-app-a1f59168303c7f84.js",
208
- "static/chunks/app/api/robopark/monitor-token/route-0952b44bda5bfb6d.js"
208
+ "static/chunks/app/api/robopark/device-access/route-0952b44bda5bfb6d.js"
209
209
  ],
210
- "/api/robopark/character-ai/route": [
210
+ "/api/robopark/monitor-token/route": [
211
211
  "static/chunks/webpack-5252e5254da079b5.js",
212
212
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
213
213
  "static/chunks/1255-404bb8de49c90395.js",
214
214
  "static/chunks/main-app-a1f59168303c7f84.js",
215
- "static/chunks/app/api/robopark/character-ai/route-0952b44bda5bfb6d.js"
215
+ "static/chunks/app/api/robopark/monitor-token/route-0952b44bda5bfb6d.js"
216
216
  ],
217
- "/api/robopark/device-access/route": [
217
+ "/api/robopark/servers/route": [
218
218
  "static/chunks/webpack-5252e5254da079b5.js",
219
219
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
220
220
  "static/chunks/1255-404bb8de49c90395.js",
221
221
  "static/chunks/main-app-a1f59168303c7f84.js",
222
- "static/chunks/app/api/robopark/device-access/route-0952b44bda5bfb6d.js"
222
+ "static/chunks/app/api/robopark/servers/route-0952b44bda5bfb6d.js"
223
223
  ],
224
- "/api/robopark/robots/route": [
224
+ "/api/robopark/live-rooms/route": [
225
225
  "static/chunks/webpack-5252e5254da079b5.js",
226
226
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
227
227
  "static/chunks/1255-404bb8de49c90395.js",
228
228
  "static/chunks/main-app-a1f59168303c7f84.js",
229
- "static/chunks/app/api/robopark/robots/route-0952b44bda5bfb6d.js"
229
+ "static/chunks/app/api/robopark/live-rooms/route-0952b44bda5bfb6d.js"
230
230
  ],
231
231
  "/api/robopark/servers/[serverId]/metrics/route": [
232
232
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -235,19 +235,12 @@
235
235
  "static/chunks/main-app-a1f59168303c7f84.js",
236
236
  "static/chunks/app/api/robopark/servers/[serverId]/metrics/route-0952b44bda5bfb6d.js"
237
237
  ],
238
- "/api/robopark/servers/[serverId]/route": [
239
- "static/chunks/webpack-5252e5254da079b5.js",
240
- "static/chunks/4bd1b696-f785427dddbba9fb.js",
241
- "static/chunks/1255-404bb8de49c90395.js",
242
- "static/chunks/main-app-a1f59168303c7f84.js",
243
- "static/chunks/app/api/robopark/servers/[serverId]/route-0952b44bda5bfb6d.js"
244
- ],
245
- "/api/robopark/vision-caption/route": [
238
+ "/api/robopark/robots/route": [
246
239
  "static/chunks/webpack-5252e5254da079b5.js",
247
240
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
248
241
  "static/chunks/1255-404bb8de49c90395.js",
249
242
  "static/chunks/main-app-a1f59168303c7f84.js",
250
- "static/chunks/app/api/robopark/vision-caption/route-0952b44bda5bfb6d.js"
243
+ "static/chunks/app/api/robopark/robots/route-0952b44bda5bfb6d.js"
251
244
  ],
252
245
  "/api/robopark/sessions/route": [
253
246
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -256,33 +249,33 @@
256
249
  "static/chunks/main-app-a1f59168303c7f84.js",
257
250
  "static/chunks/app/api/robopark/sessions/route-0952b44bda5bfb6d.js"
258
251
  ],
259
- "/api/robopark/servers/route": [
252
+ "/api/robopark/servers/[serverId]/route": [
260
253
  "static/chunks/webpack-5252e5254da079b5.js",
261
254
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
262
255
  "static/chunks/1255-404bb8de49c90395.js",
263
256
  "static/chunks/main-app-a1f59168303c7f84.js",
264
- "static/chunks/app/api/robopark/servers/route-0952b44bda5bfb6d.js"
257
+ "static/chunks/app/api/robopark/servers/[serverId]/route-0952b44bda5bfb6d.js"
265
258
  ],
266
- "/api/robovoice/robots/[robotId]/media-health/route": [
259
+ "/api/robopark/vision-caption/route": [
267
260
  "static/chunks/webpack-5252e5254da079b5.js",
268
261
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
269
262
  "static/chunks/1255-404bb8de49c90395.js",
270
263
  "static/chunks/main-app-a1f59168303c7f84.js",
271
- "static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-0952b44bda5bfb6d.js"
264
+ "static/chunks/app/api/robopark/vision-caption/route-0952b44bda5bfb6d.js"
272
265
  ],
273
- "/api/settings/route": [
266
+ "/api/robopark/robots/[robotId]/voice-engine/route": [
274
267
  "static/chunks/webpack-5252e5254da079b5.js",
275
268
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
276
269
  "static/chunks/1255-404bb8de49c90395.js",
277
270
  "static/chunks/main-app-a1f59168303c7f84.js",
278
- "static/chunks/app/api/settings/route-0952b44bda5bfb6d.js"
271
+ "static/chunks/app/api/robopark/robots/[robotId]/voice-engine/route-0952b44bda5bfb6d.js"
279
272
  ],
280
- "/api/robopark/robots/[robotId]/voice-engine/route": [
273
+ "/api/robovoice/robots/[robotId]/media-health/route": [
281
274
  "static/chunks/webpack-5252e5254da079b5.js",
282
275
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
283
276
  "static/chunks/1255-404bb8de49c90395.js",
284
277
  "static/chunks/main-app-a1f59168303c7f84.js",
285
- "static/chunks/app/api/robopark/robots/[robotId]/voice-engine/route-0952b44bda5bfb6d.js"
278
+ "static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-0952b44bda5bfb6d.js"
286
279
  ],
287
280
  "/api/turn-credentials/route": [
288
281
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -291,19 +284,19 @@
291
284
  "static/chunks/main-app-a1f59168303c7f84.js",
292
285
  "static/chunks/app/api/turn-credentials/route-0952b44bda5bfb6d.js"
293
286
  ],
294
- "/api/robopark/transcripts/route": [
287
+ "/api/settings/route": [
295
288
  "static/chunks/webpack-5252e5254da079b5.js",
296
289
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
297
290
  "static/chunks/1255-404bb8de49c90395.js",
298
291
  "static/chunks/main-app-a1f59168303c7f84.js",
299
- "static/chunks/app/api/robopark/transcripts/route-0952b44bda5bfb6d.js"
292
+ "static/chunks/app/api/settings/route-0952b44bda5bfb6d.js"
300
293
  ],
301
- "/fed/media/robots/[robotId]/video_feed/route": [
294
+ "/camera-grid/route": [
302
295
  "static/chunks/webpack-5252e5254da079b5.js",
303
296
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
304
297
  "static/chunks/1255-404bb8de49c90395.js",
305
298
  "static/chunks/main-app-a1f59168303c7f84.js",
306
- "static/chunks/app/fed/media/robots/[robotId]/video_feed/route-0952b44bda5bfb6d.js"
299
+ "static/chunks/app/camera-grid/route-0952b44bda5bfb6d.js"
307
300
  ],
308
301
  "/api/wake/route": [
309
302
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -312,40 +305,33 @@
312
305
  "static/chunks/main-app-a1f59168303c7f84.js",
313
306
  "static/chunks/app/api/wake/route-0952b44bda5bfb6d.js"
314
307
  ],
315
- "/camera-grid/route": [
316
- "static/chunks/webpack-5252e5254da079b5.js",
317
- "static/chunks/4bd1b696-f785427dddbba9fb.js",
318
- "static/chunks/1255-404bb8de49c90395.js",
319
- "static/chunks/main-app-a1f59168303c7f84.js",
320
- "static/chunks/app/camera-grid/route-0952b44bda5bfb6d.js"
321
- ],
322
- "/robopark/api/robots/[robotId]/stream/route": [
308
+ "/robopark/[...path]/route": [
323
309
  "static/chunks/webpack-5252e5254da079b5.js",
324
310
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
325
311
  "static/chunks/1255-404bb8de49c90395.js",
326
312
  "static/chunks/main-app-a1f59168303c7f84.js",
327
- "static/chunks/app/robopark/api/robots/[robotId]/stream/route-0952b44bda5bfb6d.js"
313
+ "static/chunks/app/robopark/[...path]/route-0952b44bda5bfb6d.js"
328
314
  ],
329
- "/fed/[...path]/route": [
315
+ "/api/robopark/transcripts/route": [
330
316
  "static/chunks/webpack-5252e5254da079b5.js",
331
317
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
332
318
  "static/chunks/1255-404bb8de49c90395.js",
333
319
  "static/chunks/main-app-a1f59168303c7f84.js",
334
- "static/chunks/app/fed/[...path]/route-0952b44bda5bfb6d.js"
320
+ "static/chunks/app/api/robopark/transcripts/route-0952b44bda5bfb6d.js"
335
321
  ],
336
- "/vendor/livekit-client.umd.js/route": [
322
+ "/fed/media/robots/[robotId]/video_feed/route": [
337
323
  "static/chunks/webpack-5252e5254da079b5.js",
338
324
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
339
325
  "static/chunks/1255-404bb8de49c90395.js",
340
326
  "static/chunks/main-app-a1f59168303c7f84.js",
341
- "static/chunks/app/vendor/livekit-client.umd.js/route-0952b44bda5bfb6d.js"
327
+ "static/chunks/app/fed/media/robots/[robotId]/video_feed/route-0952b44bda5bfb6d.js"
342
328
  ],
343
- "/robopark/[...path]/route": [
329
+ "/fed/[...path]/route": [
344
330
  "static/chunks/webpack-5252e5254da079b5.js",
345
331
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
346
332
  "static/chunks/1255-404bb8de49c90395.js",
347
333
  "static/chunks/main-app-a1f59168303c7f84.js",
348
- "static/chunks/app/robopark/[...path]/route-0952b44bda5bfb6d.js"
334
+ "static/chunks/app/fed/[...path]/route-0952b44bda5bfb6d.js"
349
335
  ],
350
336
  "/tailnet/route": [
351
337
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -361,26 +347,26 @@
361
347
  "static/chunks/main-app-a1f59168303c7f84.js",
362
348
  "static/chunks/app/(app)/opengraph-image-xg4ifa/route-0952b44bda5bfb6d.js"
363
349
  ],
364
- "/robopark/api/[...path]/route": [
350
+ "/robopark/api/robots/[robotId]/stream/route": [
365
351
  "static/chunks/webpack-5252e5254da079b5.js",
366
352
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
367
353
  "static/chunks/1255-404bb8de49c90395.js",
368
354
  "static/chunks/main-app-a1f59168303c7f84.js",
369
- "static/chunks/app/robopark/api/[...path]/route-0952b44bda5bfb6d.js"
355
+ "static/chunks/app/robopark/api/robots/[robotId]/stream/route-0952b44bda5bfb6d.js"
370
356
  ],
371
- "/voice-tester/page": [
357
+ "/vendor/livekit-client.umd.js/route": [
372
358
  "static/chunks/webpack-5252e5254da079b5.js",
373
359
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
374
360
  "static/chunks/1255-404bb8de49c90395.js",
375
361
  "static/chunks/main-app-a1f59168303c7f84.js",
376
- "static/chunks/app/voice-tester/page-ae699e048e0eb834.js"
362
+ "static/chunks/app/vendor/livekit-client.umd.js/route-0952b44bda5bfb6d.js"
377
363
  ],
378
- "/robopark/page": [
364
+ "/robopark/api/[...path]/route": [
379
365
  "static/chunks/webpack-5252e5254da079b5.js",
380
366
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
381
367
  "static/chunks/1255-404bb8de49c90395.js",
382
368
  "static/chunks/main-app-a1f59168303c7f84.js",
383
- "static/chunks/app/robopark/page-0952b44bda5bfb6d.js"
369
+ "static/chunks/app/robopark/api/[...path]/route-0952b44bda5bfb6d.js"
384
370
  ],
385
371
  "/(app)/layout": [
386
372
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -396,6 +382,13 @@
396
382
  "static/chunks/main-app-a1f59168303c7f84.js",
397
383
  "static/chunks/app/(app)/page-0952b44bda5bfb6d.js"
398
384
  ],
385
+ "/robopark/page": [
386
+ "static/chunks/webpack-5252e5254da079b5.js",
387
+ "static/chunks/4bd1b696-f785427dddbba9fb.js",
388
+ "static/chunks/1255-404bb8de49c90395.js",
389
+ "static/chunks/main-app-a1f59168303c7f84.js",
390
+ "static/chunks/app/robopark/page-0952b44bda5bfb6d.js"
391
+ ],
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
+ "/voice-tester/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/voice-tester/page-ae699e048e0eb834.js"
410
410
  ]
411
411
  }
412
412
  }
@@ -1,21 +1,21 @@
1
1
  {
2
- "/api/device-character/route": "/api/device-character",
3
2
  "/_not-found/page": "/_not-found",
4
3
  "/api/download-piper-model/route": "/api/download-piper-model",
5
- "/api/prewarm/route": "/api/prewarm",
6
- "/api/models/route": "/api/models",
4
+ "/api/device-character/route": "/api/device-character",
7
5
  "/api/prompt/route": "/api/prompt",
6
+ "/api/models/route": "/api/models",
7
+ "/api/prewarm/route": "/api/prewarm",
8
8
  "/api/reload-tools/route": "/api/reload-tools",
9
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",
14
13
  "/api/setup/status/route": "/api/setup/status",
14
+ "/api/setup/complete/route": "/api/setup/complete",
15
15
  "/api/setup/test-groq/route": "/api/setup/test-groq",
16
16
  "/api/setup/test-hass/route": "/api/setup/test-hass",
17
- "/api/setup/test-n8n/route": "/api/setup/test-n8n",
18
17
  "/api/setup/test-ollama/route": "/api/setup/test-ollama",
18
+ "/api/setup/test-n8n/route": "/api/setup/test-n8n",
19
19
  "/api/test-tts/route": "/api/test-tts",
20
20
  "/api/voices/route": "/api/voices",
21
21
  "/api/wake-word/models/route": "/api/wake-word/models",
@@ -23,36 +23,36 @@
23
23
  "/api/wake-word/upload/route": "/api/wake-word/upload",
24
24
  "/favicon.ico/route": "/favicon.ico",
25
25
  "/api/kiosk-hardware/route": "/api/kiosk-hardware",
26
- "/api/connection-details/route": "/api/connection-details",
27
26
  "/api/model-status/route": "/api/model-status",
28
- "/api/robopark/live-rooms/route": "/api/robopark/live-rooms",
29
- "/api/robopark/camera-token/route": "/api/robopark/camera-token",
30
- "/api/robopark/monitor-token/route": "/api/robopark/monitor-token",
27
+ "/api/connection-details/route": "/api/connection-details",
31
28
  "/api/robopark/character-ai/route": "/api/robopark/character-ai",
29
+ "/api/robopark/camera-token/route": "/api/robopark/camera-token",
32
30
  "/api/robopark/device-access/route": "/api/robopark/device-access",
33
- "/api/robopark/robots/route": "/api/robopark/robots",
31
+ "/api/robopark/monitor-token/route": "/api/robopark/monitor-token",
32
+ "/api/robopark/servers/route": "/api/robopark/servers",
33
+ "/api/robopark/live-rooms/route": "/api/robopark/live-rooms",
34
34
  "/api/robopark/servers/[serverId]/metrics/route": "/api/robopark/servers/[serverId]/metrics",
35
+ "/api/robopark/robots/route": "/api/robopark/robots",
36
+ "/api/robopark/sessions/route": "/api/robopark/sessions",
35
37
  "/api/robopark/servers/[serverId]/route": "/api/robopark/servers/[serverId]",
36
38
  "/api/robopark/vision-caption/route": "/api/robopark/vision-caption",
37
- "/api/robopark/sessions/route": "/api/robopark/sessions",
38
- "/api/robopark/servers/route": "/api/robopark/servers",
39
- "/api/robovoice/robots/[robotId]/media-health/route": "/api/robovoice/robots/[robotId]/media-health",
40
- "/api/settings/route": "/api/settings",
41
39
  "/api/robopark/robots/[robotId]/voice-engine/route": "/api/robopark/robots/[robotId]/voice-engine",
40
+ "/api/robovoice/robots/[robotId]/media-health/route": "/api/robovoice/robots/[robotId]/media-health",
42
41
  "/api/turn-credentials/route": "/api/turn-credentials",
42
+ "/api/settings/route": "/api/settings",
43
+ "/camera-grid/route": "/camera-grid",
44
+ "/api/wake/route": "/api/wake",
45
+ "/robopark/[...path]/route": "/robopark/[...path]",
43
46
  "/api/robopark/transcripts/route": "/api/robopark/transcripts",
44
47
  "/fed/media/robots/[robotId]/video_feed/route": "/fed/media/robots/[robotId]/video_feed",
45
- "/api/wake/route": "/api/wake",
46
- "/camera-grid/route": "/camera-grid",
47
- "/robopark/api/robots/[robotId]/stream/route": "/robopark/api/robots/[robotId]/stream",
48
48
  "/fed/[...path]/route": "/fed/[...path]",
49
- "/vendor/livekit-client.umd.js/route": "/vendor/livekit-client.umd.js",
50
- "/robopark/[...path]/route": "/robopark/[...path]",
51
49
  "/tailnet/route": "/tailnet",
52
50
  "/(app)/opengraph-image-xg4ifa/route": "/opengraph-image-xg4ifa",
51
+ "/robopark/api/robots/[robotId]/stream/route": "/robopark/api/robots/[robotId]/stream",
52
+ "/vendor/livekit-client.umd.js/route": "/vendor/livekit-client.umd.js",
53
53
  "/robopark/api/[...path]/route": "/robopark/api/[...path]",
54
- "/voice-tester/page": "/voice-tester",
55
- "/robopark/page": "/robopark",
56
54
  "/(app)/page": "/",
57
- "/(app)/voice/page": "/voice"
55
+ "/robopark/page": "/robopark",
56
+ "/(app)/voice/page": "/voice",
57
+ "/voice-tester/page": "/voice-tester"
58
58
  }
@@ -5,8 +5,8 @@
5
5
  "devFiles": [],
6
6
  "ampDevFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/95wYdEKkTppMWNZn6Vr-N/_buildManifest.js",
9
- "static/95wYdEKkTppMWNZn6Vr-N/_ssgManifest.js"
8
+ "static/yvZvIl5mqEgNQQCAaVeEm/_buildManifest.js",
9
+ "static/yvZvIl5mqEgNQQCAaVeEm/_ssgManifest.js"
10
10
  ],
11
11
  "rootMainFiles": [
12
12
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -34,8 +34,8 @@
34
34
  "dynamicRoutes": {},
35
35
  "notFoundRoutes": [],
36
36
  "preview": {
37
- "previewModeId": "e46ba0ff266edc530143151a59c32f3b",
38
- "previewModeSigningKey": "4b0a605999a0372ef849785e10e12ef37b7983b5f6facefdba6884fcbf7a41fc",
39
- "previewModeEncryptionKey": "30aeae8a6ca4d1ee490d3f911a3c862f2ba26858bf42673238593480dc236648"
37
+ "previewModeId": "79dee4bf15e47d07001394005a05b800",
38
+ "previewModeSigningKey": "e54b694316968fa748bda149e62078ba9c536fc866d556de2647b52e303895d7",
39
+ "previewModeEncryptionKey": "79be9b11a4716c565b47b2bed7ca625905cd144b03603da7b7ff704268cc18e1"
40
40
  }
41
41
  }