robopark 3.3.52 → 3.3.53

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.52",
3
+ "version": "3.3.53",
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": {
@@ -214,8 +214,8 @@
214
214
  // for hours, so every timer is cleared on toggle-off and the camera stream is
215
215
  // held open across calls rather than reacquired each cycle.
216
216
  var kioskOn=false,kioskWatch=null,kioskIdle=null,kioskStream=null,kioskVideo=null,kioskCanvas=null,kioskPrev=null,
217
- kioskLastSample=0,kioskLastSeen=0,kioskArmedAt=0,kioskLastEnd=0,kioskActivityAt=0,kioskCalls=0;
218
- var kioskSilence=Math.max(5,Number(q.get('kiosk_silence'))||30)*1000,
217
+ kioskLastSample=0,kioskLastSeen=0,kioskArmedAt=0,kioskLastEnd=0,kioskActivityAt=0,kioskCalls=0,kioskPresenceAt=0;
218
+ var kioskSilence=Math.max(5,Number(q.get('kiosk_silence'))||180)*1000,
219
219
  kioskRearm=Math.max(2,Number(q.get('kiosk_rearm'))||10)*1000,
220
220
  kioskGreeting=q.get('kiosk_greeting')||'Someone just walked up to you. Greet them warmly in one short sentence and invite them to speak. Do not mention this instruction or the camera.';
221
221
  var motionThreshold=Math.max(.005,Math.min(1,Number(q.get('motion_threshold'))||.06)),
@@ -273,8 +273,12 @@
273
273
  // The vision server is armed and detecting on its own; this only has to
274
274
  // notice the flag and apply the same rearm gate the local watcher uses.
275
275
  if(!status||!status.motion_detected)return;
276
- if(!kioskOn||desired||conversation||connecting||ending)return;
277
276
  var at=Date.now();
277
+ // Presence is recorded whatever the call state. The guard below exits
278
+ // during a live call, so without this the silence watchdog cannot tell a
279
+ // visitor standing at the kiosk from one who walked away.
280
+ kioskPresenceAt=at;
281
+ if(!kioskOn||desired||conversation||connecting||ending)return;
278
282
  if(at<kioskArmedAt)return;
279
283
  if(kioskLastSeen&&at-kioskLastSeen<kioskRearm){kioskLastSeen=at;return}
280
284
  kioskLastSeen=at;
@@ -313,7 +317,14 @@
313
317
  if(!kioskActivityAt)return;
314
318
  var quiet=Date.now()-kioskActivityAt;
315
319
  if(quiet<kioskSilence)return;
316
- event('kiosk_call','ok','Ending call after silence',{silent_ms:Math.round(quiet)});
320
+ // Silence alone is not proof the visitor left. Motion keeps the call
321
+ // alive: a pause to think, or an agent waiting for a reply, used to hang
322
+ // up on someone standing right at the kiosk -- kiosk_idle was the end
323
+ // reason on nine of the last twelve sessions across six characters.
324
+ // Only hang up once the frame has also been empty for motionAbsence.
325
+ var absent=kioskPresenceAt?Date.now()-kioskPresenceAt:Infinity;
326
+ if(absent<motionAbsence){kioskActivityAt=Date.now();return}
327
+ event('kiosk_call','ok','Ending call after silence',{silent_ms:Math.round(quiet),absent_ms:absent===Infinity?null:Math.round(absent)});
317
328
  // Rearm only after the visitor has actually left the frame; kioskArmedAt
318
329
  // gates the watcher and kioskLastSeen forces a fresh quiet period.
319
330
  kioskArmedAt=Date.now()+kioskRearm;
@@ -1 +1 @@
1
- s3wbgjEOXxnix6TIbmHp0
1
+ _MtRTX4uPtowvXpWtukUO
@@ -39,26 +39,26 @@
39
39
  "static/chunks/main-app-a1f59168303c7f84.js",
40
40
  "static/chunks/app/api/models/route-0952b44bda5bfb6d.js"
41
41
  ],
42
- "/api/prewarm/route": [
42
+ "/api/prompt/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/prewarm/route-0952b44bda5bfb6d.js"
47
+ "static/chunks/app/api/prompt/route-0952b44bda5bfb6d.js"
48
48
  ],
49
- "/api/prompt/route": [
49
+ "/api/reload-tools/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/reload-tools/route-0952b44bda5bfb6d.js"
55
55
  ],
56
- "/api/reload-tools/route": [
56
+ "/api/prewarm/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/reload-tools/route-0952b44bda5bfb6d.js"
61
+ "static/chunks/app/api/prewarm/route-0952b44bda5bfb6d.js"
62
62
  ],
63
63
  "/api/robopark/devices/[deviceId]/control/route": [
64
64
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -74,19 +74,19 @@
74
74
  "static/chunks/main-app-a1f59168303c7f84.js",
75
75
  "static/chunks/app/api/robopark/robots/[robotId]/operations/route-0952b44bda5bfb6d.js"
76
76
  ],
77
- "/api/robopark/transcripts/[sessionId]/route": [
77
+ "/api/robopark/sessions/[sessionId]/end/route": [
78
78
  "static/chunks/webpack-5252e5254da079b5.js",
79
79
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
80
80
  "static/chunks/1255-404bb8de49c90395.js",
81
81
  "static/chunks/main-app-a1f59168303c7f84.js",
82
- "static/chunks/app/api/robopark/transcripts/[sessionId]/route-0952b44bda5bfb6d.js"
82
+ "static/chunks/app/api/robopark/sessions/[sessionId]/end/route-0952b44bda5bfb6d.js"
83
83
  ],
84
- "/api/robopark/sessions/[sessionId]/end/route": [
84
+ "/api/robopark/transcripts/[sessionId]/route": [
85
85
  "static/chunks/webpack-5252e5254da079b5.js",
86
86
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
87
87
  "static/chunks/1255-404bb8de49c90395.js",
88
88
  "static/chunks/main-app-a1f59168303c7f84.js",
89
- "static/chunks/app/api/robopark/sessions/[sessionId]/end/route-0952b44bda5bfb6d.js"
89
+ "static/chunks/app/api/robopark/transcripts/[sessionId]/route-0952b44bda5bfb6d.js"
90
90
  ],
91
91
  "/api/setup/status/route": [
92
92
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -102,12 +102,12 @@
102
102
  "static/chunks/main-app-a1f59168303c7f84.js",
103
103
  "static/chunks/app/api/setup/complete/route-0952b44bda5bfb6d.js"
104
104
  ],
105
- "/api/setup/test-hass/route": [
105
+ "/api/setup/test-n8n/route": [
106
106
  "static/chunks/webpack-5252e5254da079b5.js",
107
107
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
108
108
  "static/chunks/1255-404bb8de49c90395.js",
109
109
  "static/chunks/main-app-a1f59168303c7f84.js",
110
- "static/chunks/app/api/setup/test-hass/route-0952b44bda5bfb6d.js"
110
+ "static/chunks/app/api/setup/test-n8n/route-0952b44bda5bfb6d.js"
111
111
  ],
112
112
  "/api/setup/test-groq/route": [
113
113
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -116,12 +116,12 @@
116
116
  "static/chunks/main-app-a1f59168303c7f84.js",
117
117
  "static/chunks/app/api/setup/test-groq/route-0952b44bda5bfb6d.js"
118
118
  ],
119
- "/api/setup/test-n8n/route": [
119
+ "/api/setup/test-hass/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-hass/route-0952b44bda5bfb6d.js"
125
125
  ],
126
126
  "/api/setup/test-ollama/route": [
127
127
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -165,19 +165,19 @@
165
165
  "static/chunks/main-app-a1f59168303c7f84.js",
166
166
  "static/chunks/app/api/wake-word/upload/route-0952b44bda5bfb6d.js"
167
167
  ],
168
- "/api/kiosk-hardware/route": [
168
+ "/api/model-status/route": [
169
169
  "static/chunks/webpack-5252e5254da079b5.js",
170
170
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
171
171
  "static/chunks/1255-404bb8de49c90395.js",
172
172
  "static/chunks/main-app-a1f59168303c7f84.js",
173
- "static/chunks/app/api/kiosk-hardware/route-0952b44bda5bfb6d.js"
173
+ "static/chunks/app/api/model-status/route-0952b44bda5bfb6d.js"
174
174
  ],
175
- "/api/model-status/route": [
175
+ "/api/kiosk-hardware/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/model-status/route-0952b44bda5bfb6d.js"
180
+ "static/chunks/app/api/kiosk-hardware/route-0952b44bda5bfb6d.js"
181
181
  ],
182
182
  "/api/connection-details/route": [
183
183
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -186,33 +186,33 @@
186
186
  "static/chunks/main-app-a1f59168303c7f84.js",
187
187
  "static/chunks/app/api/connection-details/route-0952b44bda5bfb6d.js"
188
188
  ],
189
- "/api/robopark/character-ai/route": [
189
+ "/api/robopark/device-access/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/character-ai/route-0952b44bda5bfb6d.js"
194
+ "static/chunks/app/api/robopark/device-access/route-0952b44bda5bfb6d.js"
195
195
  ],
196
- "/api/robopark/camera-token/route": [
196
+ "/api/robopark/character-ai/route": [
197
197
  "static/chunks/webpack-5252e5254da079b5.js",
198
198
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
199
199
  "static/chunks/1255-404bb8de49c90395.js",
200
200
  "static/chunks/main-app-a1f59168303c7f84.js",
201
- "static/chunks/app/api/robopark/camera-token/route-0952b44bda5bfb6d.js"
201
+ "static/chunks/app/api/robopark/character-ai/route-0952b44bda5bfb6d.js"
202
202
  ],
203
- "/api/robopark/device-access/route": [
203
+ "/api/robopark/live-rooms/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/device-access/route-0952b44bda5bfb6d.js"
208
+ "static/chunks/app/api/robopark/live-rooms/route-0952b44bda5bfb6d.js"
209
209
  ],
210
- "/api/robopark/live-rooms/route": [
210
+ "/api/robopark/camera-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/live-rooms/route-0952b44bda5bfb6d.js"
215
+ "static/chunks/app/api/robopark/camera-token/route-0952b44bda5bfb6d.js"
216
216
  ],
217
217
  "/api/robopark/monitor-token/route": [
218
218
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -228,19 +228,12 @@
228
228
  "static/chunks/main-app-a1f59168303c7f84.js",
229
229
  "static/chunks/app/api/robopark/robots/route-0952b44bda5bfb6d.js"
230
230
  ],
231
- "/api/robopark/servers/[serverId]/metrics/route": [
232
- "static/chunks/webpack-5252e5254da079b5.js",
233
- "static/chunks/4bd1b696-f785427dddbba9fb.js",
234
- "static/chunks/1255-404bb8de49c90395.js",
235
- "static/chunks/main-app-a1f59168303c7f84.js",
236
- "static/chunks/app/api/robopark/servers/[serverId]/metrics/route-0952b44bda5bfb6d.js"
237
- ],
238
- "/api/robopark/servers/route": [
231
+ "/api/robopark/sessions/route": [
239
232
  "static/chunks/webpack-5252e5254da079b5.js",
240
233
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
241
234
  "static/chunks/1255-404bb8de49c90395.js",
242
235
  "static/chunks/main-app-a1f59168303c7f84.js",
243
- "static/chunks/app/api/robopark/servers/route-0952b44bda5bfb6d.js"
236
+ "static/chunks/app/api/robopark/sessions/route-0952b44bda5bfb6d.js"
244
237
  ],
245
238
  "/api/robopark/servers/[serverId]/route": [
246
239
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -249,26 +242,26 @@
249
242
  "static/chunks/main-app-a1f59168303c7f84.js",
250
243
  "static/chunks/app/api/robopark/servers/[serverId]/route-0952b44bda5bfb6d.js"
251
244
  ],
252
- "/api/robopark/sessions/route": [
245
+ "/api/robopark/servers/route": [
253
246
  "static/chunks/webpack-5252e5254da079b5.js",
254
247
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
255
248
  "static/chunks/1255-404bb8de49c90395.js",
256
249
  "static/chunks/main-app-a1f59168303c7f84.js",
257
- "static/chunks/app/api/robopark/sessions/route-0952b44bda5bfb6d.js"
250
+ "static/chunks/app/api/robopark/servers/route-0952b44bda5bfb6d.js"
258
251
  ],
259
- "/api/robovoice/robots/[robotId]/media-health/route": [
252
+ "/api/robopark/vision-caption/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/robovoice/robots/[robotId]/media-health/route-0952b44bda5bfb6d.js"
257
+ "static/chunks/app/api/robopark/vision-caption/route-0952b44bda5bfb6d.js"
265
258
  ],
266
- "/api/robopark/vision-caption/route": [
259
+ "/api/robopark/servers/[serverId]/metrics/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/robopark/vision-caption/route-0952b44bda5bfb6d.js"
264
+ "static/chunks/app/api/robopark/servers/[serverId]/metrics/route-0952b44bda5bfb6d.js"
272
265
  ],
273
266
  "/api/settings/route": [
274
267
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -277,12 +270,12 @@
277
270
  "static/chunks/main-app-a1f59168303c7f84.js",
278
271
  "static/chunks/app/api/settings/route-0952b44bda5bfb6d.js"
279
272
  ],
280
- "/api/turn-credentials/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/turn-credentials/route-0952b44bda5bfb6d.js"
278
+ "static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-0952b44bda5bfb6d.js"
286
279
  ],
287
280
  "/api/robopark/robots/[robotId]/voice-engine/route": [
288
281
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -298,12 +291,12 @@
298
291
  "static/chunks/main-app-a1f59168303c7f84.js",
299
292
  "static/chunks/app/api/robopark/transcripts/route-0952b44bda5bfb6d.js"
300
293
  ],
301
- "/camera-grid/route": [
294
+ "/api/turn-credentials/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/camera-grid/route-0952b44bda5bfb6d.js"
299
+ "static/chunks/app/api/turn-credentials/route-0952b44bda5bfb6d.js"
307
300
  ],
308
301
  "/api/wake/route": [
309
302
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -312,6 +305,13 @@
312
305
  "static/chunks/main-app-a1f59168303c7f84.js",
313
306
  "static/chunks/app/api/wake/route-0952b44bda5bfb6d.js"
314
307
  ],
308
+ "/camera-grid/route": [
309
+ "static/chunks/webpack-5252e5254da079b5.js",
310
+ "static/chunks/4bd1b696-f785427dddbba9fb.js",
311
+ "static/chunks/1255-404bb8de49c90395.js",
312
+ "static/chunks/main-app-a1f59168303c7f84.js",
313
+ "static/chunks/app/camera-grid/route-0952b44bda5bfb6d.js"
314
+ ],
315
315
  "/robopark/[...path]/route": [
316
316
  "static/chunks/webpack-5252e5254da079b5.js",
317
317
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
@@ -333,12 +333,12 @@
333
333
  "static/chunks/main-app-a1f59168303c7f84.js",
334
334
  "static/chunks/app/fed/[...path]/route-0952b44bda5bfb6d.js"
335
335
  ],
336
- "/robopark/api/robots/[robotId]/stream/route": [
336
+ "/vendor/livekit-client.umd.js/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/robopark/api/robots/[robotId]/stream/route-0952b44bda5bfb6d.js"
341
+ "static/chunks/app/vendor/livekit-client.umd.js/route-0952b44bda5bfb6d.js"
342
342
  ],
343
343
  "/tailnet/route": [
344
344
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -347,12 +347,12 @@
347
347
  "static/chunks/main-app-a1f59168303c7f84.js",
348
348
  "static/chunks/app/tailnet/route-0952b44bda5bfb6d.js"
349
349
  ],
350
- "/vendor/livekit-client.umd.js/route": [
350
+ "/robopark/api/robots/[robotId]/stream/route": [
351
351
  "static/chunks/webpack-5252e5254da079b5.js",
352
352
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
353
353
  "static/chunks/1255-404bb8de49c90395.js",
354
354
  "static/chunks/main-app-a1f59168303c7f84.js",
355
- "static/chunks/app/vendor/livekit-client.umd.js/route-0952b44bda5bfb6d.js"
355
+ "static/chunks/app/robopark/api/robots/[robotId]/stream/route-0952b44bda5bfb6d.js"
356
356
  ],
357
357
  "/(app)/opengraph-image-xg4ifa/route": [
358
358
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -368,19 +368,19 @@
368
368
  "static/chunks/main-app-a1f59168303c7f84.js",
369
369
  "static/chunks/app/robopark/api/[...path]/route-0952b44bda5bfb6d.js"
370
370
  ],
371
- "/voice-tester/page": [
371
+ "/robopark/page": [
372
372
  "static/chunks/webpack-5252e5254da079b5.js",
373
373
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
374
374
  "static/chunks/1255-404bb8de49c90395.js",
375
375
  "static/chunks/main-app-a1f59168303c7f84.js",
376
- "static/chunks/app/voice-tester/page-ae699e048e0eb834.js"
376
+ "static/chunks/app/robopark/page-0952b44bda5bfb6d.js"
377
377
  ],
378
- "/robopark/page": [
378
+ "/voice-tester/page": [
379
379
  "static/chunks/webpack-5252e5254da079b5.js",
380
380
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
381
381
  "static/chunks/1255-404bb8de49c90395.js",
382
382
  "static/chunks/main-app-a1f59168303c7f84.js",
383
- "static/chunks/app/robopark/page-0952b44bda5bfb6d.js"
383
+ "static/chunks/app/voice-tester/page-ae699e048e0eb834.js"
384
384
  ],
385
385
  "/(app)/layout": [
386
386
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -389,6 +389,13 @@
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
+ ],
392
399
  "/(app)/voice/page": [
393
400
  "static/chunks/webpack-5252e5254da079b5.js",
394
401
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
@@ -400,13 +407,6 @@
400
407
  "static/chunks/9880-53262785284464cc.js",
401
408
  "static/chunks/2333-43c39acb531f7d4e.js",
402
409
  "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,18 +3,18 @@
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/prewarm/route": "/api/prewarm",
7
6
  "/api/prompt/route": "/api/prompt",
8
7
  "/api/reload-tools/route": "/api/reload-tools",
8
+ "/api/prewarm/route": "/api/prewarm",
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
- "/api/robopark/transcripts/[sessionId]/route": "/api/robopark/transcripts/[sessionId]",
12
11
  "/api/robopark/sessions/[sessionId]/end/route": "/api/robopark/sessions/[sessionId]/end",
12
+ "/api/robopark/transcripts/[sessionId]/route": "/api/robopark/transcripts/[sessionId]",
13
13
  "/api/setup/status/route": "/api/setup/status",
14
14
  "/api/setup/complete/route": "/api/setup/complete",
15
- "/api/setup/test-hass/route": "/api/setup/test-hass",
16
- "/api/setup/test-groq/route": "/api/setup/test-groq",
17
15
  "/api/setup/test-n8n/route": "/api/setup/test-n8n",
16
+ "/api/setup/test-groq/route": "/api/setup/test-groq",
17
+ "/api/setup/test-hass/route": "/api/setup/test-hass",
18
18
  "/api/setup/test-ollama/route": "/api/setup/test-ollama",
19
19
  "/api/test-tts/route": "/api/test-tts",
20
20
  "/api/voices/route": "/api/voices",
@@ -22,37 +22,37 @@
22
22
  "/api/wake-word/status/route": "/api/wake-word/status",
23
23
  "/api/wake-word/upload/route": "/api/wake-word/upload",
24
24
  "/favicon.ico/route": "/favicon.ico",
25
- "/api/kiosk-hardware/route": "/api/kiosk-hardware",
26
25
  "/api/model-status/route": "/api/model-status",
26
+ "/api/kiosk-hardware/route": "/api/kiosk-hardware",
27
27
  "/api/connection-details/route": "/api/connection-details",
28
- "/api/robopark/character-ai/route": "/api/robopark/character-ai",
29
- "/api/robopark/camera-token/route": "/api/robopark/camera-token",
30
28
  "/api/robopark/device-access/route": "/api/robopark/device-access",
29
+ "/api/robopark/character-ai/route": "/api/robopark/character-ai",
31
30
  "/api/robopark/live-rooms/route": "/api/robopark/live-rooms",
31
+ "/api/robopark/camera-token/route": "/api/robopark/camera-token",
32
32
  "/api/robopark/monitor-token/route": "/api/robopark/monitor-token",
33
33
  "/api/robopark/robots/route": "/api/robopark/robots",
34
- "/api/robopark/servers/[serverId]/metrics/route": "/api/robopark/servers/[serverId]/metrics",
35
- "/api/robopark/servers/route": "/api/robopark/servers",
36
- "/api/robopark/servers/[serverId]/route": "/api/robopark/servers/[serverId]",
37
34
  "/api/robopark/sessions/route": "/api/robopark/sessions",
38
- "/api/robovoice/robots/[robotId]/media-health/route": "/api/robovoice/robots/[robotId]/media-health",
35
+ "/api/robopark/servers/[serverId]/route": "/api/robopark/servers/[serverId]",
36
+ "/api/robopark/servers/route": "/api/robopark/servers",
39
37
  "/api/robopark/vision-caption/route": "/api/robopark/vision-caption",
38
+ "/api/robopark/servers/[serverId]/metrics/route": "/api/robopark/servers/[serverId]/metrics",
40
39
  "/api/settings/route": "/api/settings",
41
- "/api/turn-credentials/route": "/api/turn-credentials",
40
+ "/api/robovoice/robots/[robotId]/media-health/route": "/api/robovoice/robots/[robotId]/media-health",
42
41
  "/api/robopark/robots/[robotId]/voice-engine/route": "/api/robopark/robots/[robotId]/voice-engine",
43
42
  "/api/robopark/transcripts/route": "/api/robopark/transcripts",
44
- "/camera-grid/route": "/camera-grid",
43
+ "/api/turn-credentials/route": "/api/turn-credentials",
45
44
  "/api/wake/route": "/api/wake",
45
+ "/camera-grid/route": "/camera-grid",
46
46
  "/robopark/[...path]/route": "/robopark/[...path]",
47
47
  "/fed/media/robots/[robotId]/video_feed/route": "/fed/media/robots/[robotId]/video_feed",
48
48
  "/fed/[...path]/route": "/fed/[...path]",
49
- "/robopark/api/robots/[robotId]/stream/route": "/robopark/api/robots/[robotId]/stream",
50
- "/tailnet/route": "/tailnet",
51
49
  "/vendor/livekit-client.umd.js/route": "/vendor/livekit-client.umd.js",
50
+ "/tailnet/route": "/tailnet",
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
- "/voice-tester/page": "/voice-tester",
55
54
  "/robopark/page": "/robopark",
56
- "/(app)/voice/page": "/voice",
57
- "/(app)/page": "/"
55
+ "/voice-tester/page": "/voice-tester",
56
+ "/(app)/page": "/",
57
+ "/(app)/voice/page": "/voice"
58
58
  }
@@ -5,8 +5,8 @@
5
5
  "devFiles": [],
6
6
  "ampDevFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/s3wbgjEOXxnix6TIbmHp0/_buildManifest.js",
9
- "static/s3wbgjEOXxnix6TIbmHp0/_ssgManifest.js"
8
+ "static/_MtRTX4uPtowvXpWtukUO/_buildManifest.js",
9
+ "static/_MtRTX4uPtowvXpWtukUO/_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": "124087a5735945d1180c61155293dbf6",
38
- "previewModeSigningKey": "a578d46df24ddfacf507f1914215df8d97bbaba37195550357172983aeb992d9",
39
- "previewModeEncryptionKey": "983a8f45de8c3af6d6295535a092e0d83c6c1dbe5247f6c9147291943385e74c"
37
+ "previewModeId": "d98b6b9c2a458f9f04f94be62f0c1f46",
38
+ "previewModeSigningKey": "c3afef119d1bc3e9f8883c1f34b10cf942f85d6e5539eb884f19d411a3613608",
39
+ "previewModeEncryptionKey": "0b21269eb42a17dcd8edda002b25a5805007d514507d83e8b6ea328573022861"
40
40
  }
41
41
  }
@@ -3,18 +3,18 @@
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/prewarm/route": "app/api/prewarm/route.js",
7
6
  "/api/prompt/route": "app/api/prompt/route.js",
8
7
  "/api/reload-tools/route": "app/api/reload-tools/route.js",
8
+ "/api/prewarm/route": "app/api/prewarm/route.js",
9
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
- "/api/robopark/transcripts/[sessionId]/route": "app/api/robopark/transcripts/[sessionId]/route.js",
12
11
  "/api/robopark/sessions/[sessionId]/end/route": "app/api/robopark/sessions/[sessionId]/end/route.js",
12
+ "/api/robopark/transcripts/[sessionId]/route": "app/api/robopark/transcripts/[sessionId]/route.js",
13
13
  "/api/setup/status/route": "app/api/setup/status/route.js",
14
14
  "/api/setup/complete/route": "app/api/setup/complete/route.js",
15
- "/api/setup/test-hass/route": "app/api/setup/test-hass/route.js",
16
- "/api/setup/test-groq/route": "app/api/setup/test-groq/route.js",
17
15
  "/api/setup/test-n8n/route": "app/api/setup/test-n8n/route.js",
16
+ "/api/setup/test-groq/route": "app/api/setup/test-groq/route.js",
17
+ "/api/setup/test-hass/route": "app/api/setup/test-hass/route.js",
18
18
  "/api/setup/test-ollama/route": "app/api/setup/test-ollama/route.js",
19
19
  "/api/test-tts/route": "app/api/test-tts/route.js",
20
20
  "/api/voices/route": "app/api/voices/route.js",
@@ -22,37 +22,37 @@
22
22
  "/api/wake-word/status/route": "app/api/wake-word/status/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/kiosk-hardware/route": "app/api/kiosk-hardware/route.js",
26
25
  "/api/model-status/route": "app/api/model-status/route.js",
26
+ "/api/kiosk-hardware/route": "app/api/kiosk-hardware/route.js",
27
27
  "/api/connection-details/route": "app/api/connection-details/route.js",
28
- "/api/robopark/character-ai/route": "app/api/robopark/character-ai/route.js",
29
- "/api/robopark/camera-token/route": "app/api/robopark/camera-token/route.js",
30
28
  "/api/robopark/device-access/route": "app/api/robopark/device-access/route.js",
29
+ "/api/robopark/character-ai/route": "app/api/robopark/character-ai/route.js",
31
30
  "/api/robopark/live-rooms/route": "app/api/robopark/live-rooms/route.js",
31
+ "/api/robopark/camera-token/route": "app/api/robopark/camera-token/route.js",
32
32
  "/api/robopark/monitor-token/route": "app/api/robopark/monitor-token/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",
35
- "/api/robopark/servers/route": "app/api/robopark/servers/route.js",
36
- "/api/robopark/servers/[serverId]/route": "app/api/robopark/servers/[serverId]/route.js",
37
34
  "/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",
35
+ "/api/robopark/servers/[serverId]/route": "app/api/robopark/servers/[serverId]/route.js",
36
+ "/api/robopark/servers/route": "app/api/robopark/servers/route.js",
39
37
  "/api/robopark/vision-caption/route": "app/api/robopark/vision-caption/route.js",
38
+ "/api/robopark/servers/[serverId]/metrics/route": "app/api/robopark/servers/[serverId]/metrics/route.js",
40
39
  "/api/settings/route": "app/api/settings/route.js",
41
- "/api/turn-credentials/route": "app/api/turn-credentials/route.js",
40
+ "/api/robovoice/robots/[robotId]/media-health/route": "app/api/robovoice/robots/[robotId]/media-health/route.js",
42
41
  "/api/robopark/robots/[robotId]/voice-engine/route": "app/api/robopark/robots/[robotId]/voice-engine/route.js",
43
42
  "/api/robopark/transcripts/route": "app/api/robopark/transcripts/route.js",
44
- "/camera-grid/route": "app/camera-grid/route.js",
43
+ "/api/turn-credentials/route": "app/api/turn-credentials/route.js",
45
44
  "/api/wake/route": "app/api/wake/route.js",
45
+ "/camera-grid/route": "app/camera-grid/route.js",
46
46
  "/robopark/[...path]/route": "app/robopark/[...path]/route.js",
47
47
  "/fed/media/robots/[robotId]/video_feed/route": "app/fed/media/robots/[robotId]/video_feed/route.js",
48
48
  "/fed/[...path]/route": "app/fed/[...path]/route.js",
49
- "/robopark/api/robots/[robotId]/stream/route": "app/robopark/api/robots/[robotId]/stream/route.js",
50
- "/tailnet/route": "app/tailnet/route.js",
51
49
  "/vendor/livekit-client.umd.js/route": "app/vendor/livekit-client.umd.js/route.js",
50
+ "/tailnet/route": "app/tailnet/route.js",
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
- "/voice-tester/page": "app/voice-tester/page.js",
55
54
  "/robopark/page": "app/robopark/page.js",
56
- "/(app)/voice/page": "app/(app)/voice/page.js",
57
- "/(app)/page": "app/(app)/page.js"
55
+ "/voice-tester/page": "app/voice-tester/page.js",
56
+ "/(app)/page": "app/(app)/page.js",
57
+ "/(app)/voice/page": "app/(app)/voice/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/s3wbgjEOXxnix6TIbmHp0/_buildManifest.js" defer=""></script><script src="/_next/static/s3wbgjEOXxnix6TIbmHp0/_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":"s3wbgjEOXxnix6TIbmHp0","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/_MtRTX4uPtowvXpWtukUO/_buildManifest.js" defer=""></script><script src="/_next/static/_MtRTX4uPtowvXpWtukUO/_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":"_MtRTX4uPtowvXpWtukUO","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- {"node":{},"edge":{},"encryptionKey":"lIYglOFKxuDC4G6dHP8+8oH+ujQr2OVpj2TErV3PxSI="}
1
+ {"node":{},"edge":{},"encryptionKey":"kyP4PKOhO9s1fH56OyhwJpjSOiIHtuvzvGso5iS1O4U="}
@@ -213,8 +213,8 @@
213
213
  // for hours, so every timer is cleared on toggle-off and the camera stream is
214
214
  // held open across calls rather than reacquired each cycle.
215
215
  var kioskOn=false,kioskWatch=null,kioskIdle=null,kioskStream=null,kioskVideo=null,kioskCanvas=null,kioskPrev=null,
216
- kioskLastSample=0,kioskLastSeen=0,kioskArmedAt=0,kioskLastEnd=0,kioskActivityAt=0,kioskCalls=0;
217
- var kioskSilence=Math.max(5,Number(q.get('kiosk_silence'))||30)*1000,
216
+ kioskLastSample=0,kioskLastSeen=0,kioskArmedAt=0,kioskLastEnd=0,kioskActivityAt=0,kioskCalls=0,kioskPresenceAt=0;
217
+ var kioskSilence=Math.max(5,Number(q.get('kiosk_silence'))||180)*1000,
218
218
  kioskRearm=Math.max(2,Number(q.get('kiosk_rearm'))||10)*1000,
219
219
  kioskGreeting=q.get('kiosk_greeting')||'Someone just walked up to you. Greet them warmly in one short sentence and invite them to speak. Do not mention this instruction or the camera.';
220
220
  var motionThreshold=Math.max(.005,Math.min(1,Number(q.get('motion_threshold'))||.06)),
@@ -272,8 +272,12 @@
272
272
  // The vision server is armed and detecting on its own; this only has to
273
273
  // notice the flag and apply the same rearm gate the local watcher uses.
274
274
  if(!status||!status.motion_detected)return;
275
- if(!kioskOn||desired||conversation||connecting||ending)return;
276
275
  var at=Date.now();
276
+ // Presence is recorded whatever the call state. The guard below exits
277
+ // during a live call, so without this the silence watchdog cannot tell a
278
+ // visitor standing at the kiosk from one who walked away.
279
+ kioskPresenceAt=at;
280
+ if(!kioskOn||desired||conversation||connecting||ending)return;
277
281
  if(at<kioskArmedAt)return;
278
282
  if(kioskLastSeen&&at-kioskLastSeen<kioskRearm){kioskLastSeen=at;return}
279
283
  kioskLastSeen=at;
@@ -312,7 +316,14 @@
312
316
  if(!kioskActivityAt)return;
313
317
  var quiet=Date.now()-kioskActivityAt;
314
318
  if(quiet<kioskSilence)return;
315
- event('kiosk_call','ok','Ending call after silence',{silent_ms:Math.round(quiet)});
319
+ // Silence alone is not proof the visitor left. Motion keeps the call
320
+ // alive: a pause to think, or an agent waiting for a reply, used to hang
321
+ // up on someone standing right at the kiosk -- kiosk_idle was the end
322
+ // reason on nine of the last twelve sessions across six characters.
323
+ // Only hang up once the frame has also been empty for motionAbsence.
324
+ var absent=kioskPresenceAt?Date.now()-kioskPresenceAt:Infinity;
325
+ if(absent<motionAbsence){kioskActivityAt=Date.now();return}
326
+ event('kiosk_call','ok','Ending call after silence',{silent_ms:Math.round(quiet),absent_ms:absent===Infinity?null:Math.round(absent)});
316
327
  // Rearm only after the visitor has actually left the frame; kioskArmedAt
317
328
  // gates the watcher and kioskLastSeen forces a fresh quiet period.
318
329
  kioskArmedAt=Date.now()+kioskRearm;