robopark 3.1.1 → 3.2.0
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/README.md +15 -5
- package/dist/robopark/frontend-service.js +80 -0
- package/dist/robopark/serve.js +2 -2
- package/dist/robopark/standalone.js +106 -8
- package/package.json +35 -3
- package/ui/ROBOVOICE_BUILD.json +9 -0
- package/ui/standalone/.next/BUILD_ID +1 -0
- package/ui/standalone/.next/app-build-manifest.json +391 -0
- package/ui/standalone/.next/app-path-routes-manifest.json +55 -0
- package/ui/standalone/.next/build-manifest.json +33 -0
- package/ui/standalone/.next/package.json +1 -0
- package/ui/standalone/.next/prerender-manifest.json +41 -0
- package/ui/standalone/.next/react-loadable-manifest.json +14 -0
- package/ui/standalone/.next/required-server-files.json +362 -0
- package/ui/standalone/.next/routes-manifest.json +246 -0
- package/ui/standalone/.next/server/app/(app)/opengraph-image-xg4ifa/route.js +1 -0
- package/ui/standalone/.next/server/app/(app)/opengraph-image-xg4ifa/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/(app)/opengraph-image-xg4ifa/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/(app)/page.js +2 -0
- package/ui/standalone/.next/server/app/(app)/page.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/(app)/page_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/(app)/voice/page.js +12 -0
- package/ui/standalone/.next/server/app/(app)/voice/page.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/(app)/voice/page_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/_not-found/page.js +12 -0
- package/ui/standalone/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/connection-details/route.js +1 -0
- package/ui/standalone/.next/server/app/api/connection-details/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/connection-details/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/device-character/route.js +1 -0
- package/ui/standalone/.next/server/app/api/device-character/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/device-character/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/download-piper-model/route.js +1 -0
- package/ui/standalone/.next/server/app/api/download-piper-model/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/download-piper-model/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/model-status/route.js +1 -0
- package/ui/standalone/.next/server/app/api/model-status/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/model-status/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/models/route.js +1 -0
- package/ui/standalone/.next/server/app/api/models/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/prewarm/route.js +1 -0
- package/ui/standalone/.next/server/app/api/prewarm/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/prewarm/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/prompt/route.js +1 -0
- package/ui/standalone/.next/server/app/api/prompt/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/prompt/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/reload-tools/route.js +1 -0
- package/ui/standalone/.next/server/app/api/reload-tools/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/reload-tools/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/camera-token/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/camera-token/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/camera-token/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/character-ai/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/character-ai/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/character-ai/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/device-access/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/device-access/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/device-access/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/devices/[deviceId]/control/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/devices/[deviceId]/control/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/devices/[deviceId]/control/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/live-rooms/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/live-rooms/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/live-rooms/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/monitor-token/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/monitor-token/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/monitor-token/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/operations/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/operations/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/operations/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/voice-engine/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/voice-engine/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/voice-engine/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/robots/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/robots/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/robots/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/metrics/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/metrics/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/metrics/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/servers/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/servers/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/servers/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/sessions/[sessionId]/end/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/sessions/[sessionId]/end/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/sessions/[sessionId]/end/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/sessions/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/sessions/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/sessions/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/transcripts/[sessionId]/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/transcripts/[sessionId]/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/transcripts/[sessionId]/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/transcripts/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robopark/transcripts/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robopark/transcripts/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/robovoice/robots/[robotId]/media-health/route.js +1 -0
- package/ui/standalone/.next/server/app/api/robovoice/robots/[robotId]/media-health/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/robovoice/robots/[robotId]/media-health/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/settings/route.js +1 -0
- package/ui/standalone/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/setup/complete/route.js +1 -0
- package/ui/standalone/.next/server/app/api/setup/complete/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/setup/complete/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/setup/status/route.js +1 -0
- package/ui/standalone/.next/server/app/api/setup/status/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/setup/status/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/setup/test-groq/route.js +1 -0
- package/ui/standalone/.next/server/app/api/setup/test-groq/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/setup/test-groq/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/setup/test-hass/route.js +1 -0
- package/ui/standalone/.next/server/app/api/setup/test-hass/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/setup/test-hass/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/setup/test-n8n/route.js +1 -0
- package/ui/standalone/.next/server/app/api/setup/test-n8n/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/setup/test-n8n/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/setup/test-ollama/route.js +1 -0
- package/ui/standalone/.next/server/app/api/setup/test-ollama/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/setup/test-ollama/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/test-tts/route.js +1 -0
- package/ui/standalone/.next/server/app/api/test-tts/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/test-tts/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/turn-credentials/route.js +1 -0
- package/ui/standalone/.next/server/app/api/turn-credentials/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/turn-credentials/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/voices/route.js +1 -0
- package/ui/standalone/.next/server/app/api/voices/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/voices/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/wake/route.js +1 -0
- package/ui/standalone/.next/server/app/api/wake/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/wake/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/wake-word/models/route.js +1 -0
- package/ui/standalone/.next/server/app/api/wake-word/models/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/wake-word/models/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/wake-word/status/route.js +1 -0
- package/ui/standalone/.next/server/app/api/wake-word/status/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/wake-word/status/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/api/wake-word/upload/route.js +1 -0
- package/ui/standalone/.next/server/app/api/wake-word/upload/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/api/wake-word/upload/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/favicon.ico/route.js +1 -0
- package/ui/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/favicon.ico.body +0 -0
- package/ui/standalone/.next/server/app/favicon.ico.meta +1 -0
- package/ui/standalone/.next/server/app/fed/[...path]/route.js +4 -0
- package/ui/standalone/.next/server/app/fed/[...path]/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/fed/[...path]/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/fed/media/robots/[robotId]/video_feed/route.js +1 -0
- package/ui/standalone/.next/server/app/fed/media/robots/[robotId]/video_feed/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/fed/media/robots/[robotId]/video_feed/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/robopark/[...path]/route.js +1 -0
- package/ui/standalone/.next/server/app/robopark/[...path]/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/robopark/[...path]/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/robopark/api/[...path]/route.js +1 -0
- package/ui/standalone/.next/server/app/robopark/api/[...path]/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/robopark/api/[...path]/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/robopark/api/robots/[robotId]/stream/route.js +1 -0
- package/ui/standalone/.next/server/app/robopark/api/robots/[robotId]/stream/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/robopark/api/robots/[robotId]/stream/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/robopark/page.js +2 -0
- package/ui/standalone/.next/server/app/robopark/page.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/robopark/page_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/tailnet/route.js +1 -0
- package/ui/standalone/.next/server/app/tailnet/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/tailnet/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/vendor/livekit-client.umd.js/route.js +1 -0
- package/ui/standalone/.next/server/app/vendor/livekit-client.umd.js/route.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/vendor/livekit-client.umd.js/route_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app/voice-tester/page.js +2 -0
- package/ui/standalone/.next/server/app/voice-tester/page.js.nft.json +1 -0
- package/ui/standalone/.next/server/app/voice-tester/page_client-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/app-paths-manifest.json +55 -0
- package/ui/standalone/.next/server/chunks/1428.js +1 -0
- package/ui/standalone/.next/server/chunks/1692.js +1 -0
- package/ui/standalone/.next/server/chunks/37.js +1 -0
- package/ui/standalone/.next/server/chunks/4876.js +1 -0
- package/ui/standalone/.next/server/chunks/5232.js +9 -0
- package/ui/standalone/.next/server/chunks/5455.js +11 -0
- package/ui/standalone/.next/server/chunks/5611.js +6 -0
- package/ui/standalone/.next/server/chunks/5873.js +22 -0
- package/ui/standalone/.next/server/chunks/6018.js +1 -0
- package/ui/standalone/.next/server/chunks/8755.js +1 -0
- package/ui/standalone/.next/server/chunks/9077.js +11 -0
- package/ui/standalone/.next/server/functions-config-manifest.json +9 -0
- package/ui/standalone/.next/server/middleware-build-manifest.js +1 -0
- package/ui/standalone/.next/server/middleware-manifest.json +6 -0
- package/ui/standalone/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/ui/standalone/.next/server/next-font-manifest.js +1 -0
- package/ui/standalone/.next/server/next-font-manifest.json +1 -0
- package/ui/standalone/.next/server/pages/500.html +1 -0
- package/ui/standalone/.next/server/pages/_app.js +1 -0
- package/ui/standalone/.next/server/pages/_app.js.nft.json +1 -0
- package/ui/standalone/.next/server/pages/_document.js +1 -0
- package/ui/standalone/.next/server/pages/_document.js.nft.json +1 -0
- package/ui/standalone/.next/server/pages/_error.js +19 -0
- package/ui/standalone/.next/server/pages/_error.js.nft.json +1 -0
- package/ui/standalone/.next/server/pages-manifest.json +5 -0
- package/ui/standalone/.next/server/server-reference-manifest.js +1 -0
- package/ui/standalone/.next/server/server-reference-manifest.json +1 -0
- package/ui/standalone/.next/server/webpack-runtime.js +1 -0
- package/ui/standalone/.next/static/T3eGaQUuZNb6rhEStcouc/_buildManifest.js +1 -0
- package/ui/standalone/.next/static/T3eGaQUuZNb6rhEStcouc/_ssgManifest.js +1 -0
- package/ui/standalone/.next/static/chunks/1255-404bb8de49c90395.js +1 -0
- package/ui/standalone/.next/static/chunks/144d3bae-bd5d150c0cab972e.js +1 -0
- package/ui/standalone/.next/static/chunks/1646.9123ee47220ed70b.js +1 -0
- package/ui/standalone/.next/static/chunks/2333-43c39acb531f7d4e.js +3 -0
- package/ui/standalone/.next/static/chunks/4bd1b696-f785427dddbba9fb.js +1 -0
- package/ui/standalone/.next/static/chunks/5139.c5e46d26064a85db.js +1 -0
- package/ui/standalone/.next/static/chunks/76e8f37e-2ae0e3fe7b44d874.js +1 -0
- package/ui/standalone/.next/static/chunks/9880-53262785284464cc.js +1 -0
- package/ui/standalone/.next/static/chunks/adfb71a7-625c1b5ebd039b6a.js +1 -0
- package/ui/standalone/.next/static/chunks/app/(app)/layout-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/(app)/opengraph-image-xg4ifa/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/(app)/page-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/(app)/voice/page-72d72d9a70d9c1d4.js +1 -0
- package/ui/standalone/.next/static/chunks/app/_not-found/page-cfd7daa82d71540c.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/connection-details/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/device-character/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/download-piper-model/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/model-status/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/models/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/prewarm/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/prompt/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/reload-tools/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/camera-token/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/character-ai/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/device-access/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/devices/[deviceId]/control/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/live-rooms/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/monitor-token/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/robots/[robotId]/operations/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/robots/[robotId]/voice-engine/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/robots/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/servers/[serverId]/metrics/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/servers/[serverId]/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/servers/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/sessions/[sessionId]/end/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/sessions/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/transcripts/[sessionId]/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robopark/transcripts/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/settings/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/setup/complete/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/setup/status/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/setup/test-groq/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/setup/test-hass/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/setup/test-n8n/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/setup/test-ollama/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/test-tts/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/turn-credentials/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/voices/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/wake/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/wake-word/models/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/wake-word/status/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/api/wake-word/upload/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/fed/[...path]/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/fed/media/robots/[robotId]/video_feed/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/layout-fcce963da1d8220f.js +1 -0
- package/ui/standalone/.next/static/chunks/app/robopark/[...path]/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/robopark/api/[...path]/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/robopark/api/robots/[robotId]/stream/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/robopark/page-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/tailnet/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/vendor/livekit-client.umd.js/route-5f312b128a0caf75.js +1 -0
- package/ui/standalone/.next/static/chunks/app/voice-tester/page-ae699e048e0eb834.js +1 -0
- package/ui/standalone/.next/static/chunks/framework-e60c938074ff7136.js +1 -0
- package/ui/standalone/.next/static/chunks/main-9e24e8708ff075fc.js +1 -0
- package/ui/standalone/.next/static/chunks/main-app-a1f59168303c7f84.js +1 -0
- package/ui/standalone/.next/static/chunks/pages/_app-131c90850aef965b.js +1 -0
- package/ui/standalone/.next/static/chunks/pages/_error-e4ba546eb376bdf4.js +1 -0
- package/ui/standalone/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/ui/standalone/.next/static/chunks/webpack-5252e5254da079b5.js +1 -0
- package/ui/standalone/.next/static/css/3f478a573f9be82e.css +1 -0
- package/ui/standalone/.next/static/css/51560c4af1d5a21f.css +1 -0
- package/ui/standalone/.next/static/media/27fe93087559d480-s.p.otf +0 -0
- package/ui/standalone/.next/static/media/4d3869dd8a56345a-s.p.otf +0 -0
- package/ui/standalone/.next/static/media/63f3bb9ce29e22d5-s.p.otf +0 -0
- package/ui/standalone/.next/static/media/79e1c5d0f2fe9f68-s.p.otf +0 -0
- package/ui/standalone/.next/static/media/8bf7b2ceda89477b-s.p.woff2 +0 -0
- package/ui/standalone/.next/static/media/98baa4a7809fbf72-s.woff2 +0 -0
- package/ui/standalone/.next/static/media/f7650dfaa438c37c-s.woff2 +0 -0
- package/ui/standalone/package.json +57 -0
- package/ui/standalone/public/caal-logo.svg +3 -0
- package/ui/standalone/public/commit-mono-400-regular.woff +0 -0
- package/ui/standalone/public/cwl-logo-round.png +0 -0
- package/ui/standalone/public/everett-light.woff +0 -0
- package/ui/standalone/public/hey_cal.ppn +0 -0
- package/ui/standalone/public/install-robot-kiosk.sh +242 -0
- package/ui/standalone/public/lk-logo-dark.svg +18 -0
- package/ui/standalone/public/lk-logo.svg +18 -0
- package/ui/standalone/public/lk-wordmark.svg +12 -0
- package/ui/standalone/public/opengraph-image-bg.png +0 -0
- package/ui/standalone/public/porcupine_params.pv +0 -0
- package/ui/standalone/public/robopark-control.html +9200 -0
- package/ui/standalone/public/static/robopark/barracuda.png +0 -0
- package/ui/standalone/public/static/robopark/bmw.png +0 -0
- package/ui/standalone/public/static/robopark/jaguar.png +0 -0
- package/ui/standalone/public/static/robopark/magnus.jpg +0 -0
- package/ui/standalone/public/static/robopark/panda.png +0 -0
- package/ui/standalone/public/static/robopark/tesla.png +0 -0
- package/ui/standalone/public/static/robopark/titan.jpg +0 -0
- package/ui/standalone/public/static/robopark/volt.png +0 -0
- package/ui/standalone/public/tailnet/index.html +8995 -0
- package/ui/standalone/public/transcript-analytics.html +72 -0
- package/ui/standalone/public/vendor/elevenlabs-client.iife.js +24200 -0
- package/ui/standalone/public/vendor/livekit-client.umd.js +2 -0
- package/ui/standalone/public/voice-join.html +89 -0
- package/ui/standalone/server.js +38 -0
package/README.md
CHANGED
|
@@ -24,12 +24,22 @@ On the gateway:
|
|
|
24
24
|
robopark --password '<activation-password>' gateway start --public-url https://robopark.example.com
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
`gateway start` owns
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
`gateway start` owns the complete stable ROBOVOICE frontend and RoboPark
|
|
28
|
+
services:
|
|
29
|
+
|
|
30
|
+
- Full ROBOVOICE stable frontend: port 47913
|
|
31
|
+
- Park Control Center: `/robopark` or `/robopark-control.html`
|
|
32
|
+
- Voice operations: `/voice`
|
|
33
|
+
- Voice tester: `/voice-tester`
|
|
34
|
+
- Managed character joins: `/voice-join.html`
|
|
30
35
|
- Private scheduler/API service: port 8080
|
|
36
|
+
- Private control compatibility adapter: port 47914
|
|
31
37
|
|
|
32
|
-
|
|
38
|
+
The frontend is the prebuilt production output from
|
|
39
|
+
`MrYungCEO/ROBOVOICE-main` stable, including its React application, Next API
|
|
40
|
+
routes, static Park operator UI, native microphone handling, live room/camera
|
|
41
|
+
discovery, transcript surfaces, settings, setup, and device operations.
|
|
42
|
+
InfiniCode is not required to render or operate any RoboPark surface.
|
|
33
43
|
|
|
34
44
|
The gateway prints a complete connection command. Run it once on a device:
|
|
35
45
|
|
|
@@ -82,7 +92,7 @@ RoboPark owns device connectivity, camera/audio, sessions, transcripts, and the
|
|
|
82
92
|
operator gateway. InfiniCode is an optional management/orchestration layer and
|
|
83
93
|
is not a runtime dependency.
|
|
84
94
|
|
|
85
|
-
The 3.
|
|
95
|
+
The 3.2 artifact deliberately preserves the current scheduler, Pi client,
|
|
86
96
|
ElevenLabs conversation worker, camera/vision service, screen relay, motor
|
|
87
97
|
bridge, configuration filenames, and service names. Existing enrolled robots
|
|
88
98
|
are grandfathered on upgrade and continue using their current device identity
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
function packageRoot() {
|
|
6
|
+
return dirname(dirname(dirname(fileURLToPath(import.meta.url))));
|
|
7
|
+
}
|
|
8
|
+
export function frontendServerPath() {
|
|
9
|
+
return join(packageRoot(), 'ui', 'standalone', 'server.js');
|
|
10
|
+
}
|
|
11
|
+
async function waitForFrontend(port, child) {
|
|
12
|
+
const deadline = Date.now() + 60_000;
|
|
13
|
+
let lastError = 'not responding';
|
|
14
|
+
while (Date.now() < deadline) {
|
|
15
|
+
if (child.exitCode !== null) {
|
|
16
|
+
throw new Error(`ROBOVOICE frontend exited before readiness (code ${child.exitCode})`);
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const response = await fetch(`http://127.0.0.1:${port}/fed/ui-build`, {
|
|
20
|
+
signal: AbortSignal.timeout(1_500),
|
|
21
|
+
});
|
|
22
|
+
if (response.ok) {
|
|
23
|
+
const body = await response.json();
|
|
24
|
+
if (body.source === 'robovoice-control' && body.build)
|
|
25
|
+
return;
|
|
26
|
+
lastError = `unexpected UI owner ${JSON.stringify(body)}`;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
lastError = `HTTP ${response.status}`;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
lastError = error instanceof Error ? error.message : String(error);
|
|
34
|
+
}
|
|
35
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
36
|
+
}
|
|
37
|
+
throw new Error(`ROBOVOICE frontend did not become healthy on port ${port}: ${lastError}`);
|
|
38
|
+
}
|
|
39
|
+
export async function startFrontendService(opts) {
|
|
40
|
+
const server = frontendServerPath();
|
|
41
|
+
if (!existsSync(server)) {
|
|
42
|
+
throw new Error('packaged ROBOVOICE stable frontend is missing; reinstall robopark');
|
|
43
|
+
}
|
|
44
|
+
const root = dirname(server);
|
|
45
|
+
const child = spawn(process.execPath, [server], {
|
|
46
|
+
cwd: root,
|
|
47
|
+
windowsHide: true,
|
|
48
|
+
stdio: ['ignore', 'inherit', 'inherit'],
|
|
49
|
+
env: {
|
|
50
|
+
...process.env,
|
|
51
|
+
NODE_ENV: 'production',
|
|
52
|
+
HOSTNAME: opts.host,
|
|
53
|
+
PORT: String(opts.port),
|
|
54
|
+
ROBOPARK_CONTROL_URL: `http://127.0.0.1:${opts.adapterPort}`,
|
|
55
|
+
ROBOPARK_SCHEDULER_URL: `http://127.0.0.1:${opts.schedulerPort}`,
|
|
56
|
+
SCHEDULER_URL: `http://127.0.0.1:${opts.schedulerPort}`,
|
|
57
|
+
V2_SCHEDULER_URL: `http://127.0.0.1:${opts.schedulerPort}`,
|
|
58
|
+
NEXT_PUBLIC_LIVEKIT_URL: process.env.NEXT_PUBLIC_LIVEKIT_URL || 'auto',
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
try {
|
|
62
|
+
await waitForFrontend(opts.port, child);
|
|
63
|
+
return child;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
try {
|
|
67
|
+
child.kill('SIGTERM');
|
|
68
|
+
}
|
|
69
|
+
catch { /* already stopped */ }
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export function stopFrontendService(child) {
|
|
74
|
+
if (!child || child.exitCode !== null)
|
|
75
|
+
return;
|
|
76
|
+
try {
|
|
77
|
+
child.kill('SIGTERM');
|
|
78
|
+
}
|
|
79
|
+
catch { /* already stopped */ }
|
|
80
|
+
}
|
package/dist/robopark/serve.js
CHANGED
|
@@ -255,11 +255,11 @@ function openBrowser(url) {
|
|
|
255
255
|
// Use detached platform-native launchers so robopark serve remains usable
|
|
256
256
|
// from terminals and does not inherit browser stdio or lifecycle.
|
|
257
257
|
const command = process.platform === 'win32'
|
|
258
|
-
? '
|
|
258
|
+
? 'explorer.exe'
|
|
259
259
|
: process.platform === 'darwin'
|
|
260
260
|
? 'open'
|
|
261
261
|
: 'xdg-open';
|
|
262
|
-
const args =
|
|
262
|
+
const args = [url];
|
|
263
263
|
try {
|
|
264
264
|
spawn(command, args, { detached: true, stdio: 'ignore', windowsHide: true }).unref();
|
|
265
265
|
}
|
|
@@ -8,6 +8,7 @@ import { registerAutoStart } from './auto-start.js';
|
|
|
8
8
|
import { findPython, findSchedulerPath, prepareRobotPython } from './python-env.js';
|
|
9
9
|
import { roboparkServe, schedulerHealthy } from './serve.js';
|
|
10
10
|
import { startControlServer } from './control-server.js';
|
|
11
|
+
import { startFrontendService, stopFrontendService } from './frontend-service.js';
|
|
11
12
|
import { activateFromPairing } from './access.js';
|
|
12
13
|
const STATE_DIR = process.env.ROBOPARK_HOME
|
|
13
14
|
? resolve(process.env.ROBOPARK_HOME)
|
|
@@ -150,6 +151,7 @@ export async function connectDevice(token, opts = {}) {
|
|
|
150
151
|
deviceToken: enrolled.device_token,
|
|
151
152
|
name,
|
|
152
153
|
connectedAt: new Date().toISOString(),
|
|
154
|
+
controlPort: pairing.controlPort,
|
|
153
155
|
};
|
|
154
156
|
atomicJson(CONNECTION_PATH, connection);
|
|
155
157
|
writeFileSync(join(STATE_DIR, 'device_token'), connection.deviceToken, { encoding: 'utf8', mode: 0o600 });
|
|
@@ -196,6 +198,56 @@ function positiveInteger(value, fallback, label) {
|
|
|
196
198
|
throw new Error(`${label} must be a positive integer`);
|
|
197
199
|
return parsed;
|
|
198
200
|
}
|
|
201
|
+
function openBrowser(url) {
|
|
202
|
+
// Use detached platform-native launchers so this CLI remains usable from
|
|
203
|
+
// terminals and does not inherit browser stdio or lifecycle.
|
|
204
|
+
const command = process.platform === 'win32'
|
|
205
|
+
? 'explorer.exe'
|
|
206
|
+
: process.platform === 'darwin'
|
|
207
|
+
? 'open'
|
|
208
|
+
: 'xdg-open';
|
|
209
|
+
// Do not route URLs through cmd.exe. Character links contain "&"; cmd
|
|
210
|
+
// treats each query parameter after the first as a separate shell command,
|
|
211
|
+
// causing the browser to receive an incomplete join link.
|
|
212
|
+
const args = [url];
|
|
213
|
+
try {
|
|
214
|
+
spawn(command, args, { detached: true, stdio: 'ignore', windowsHide: true }).unref();
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
console.log(chalk.yellow(` ⚠ could not open browser: ${err instanceof Error ? err.message : String(err)}`));
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Opens the character-specific ElevenLabs voice-join page (served by the Park
|
|
222
|
+
* Control Center, not the scheduler) for the device just configured. Best
|
|
223
|
+
* effort only: a browser-less robot host or an unreachable control server
|
|
224
|
+
* must never fail `robopark start`/`robopark connect`.
|
|
225
|
+
*/
|
|
226
|
+
async function openCharacterCallPage(connection, character) {
|
|
227
|
+
try {
|
|
228
|
+
const preset = await jsonRequest(`${connection.schedulerUrl}/api/character-presets/${encodeURIComponent(character)}`, {});
|
|
229
|
+
if (!preset.elevenlabs_agent_id) {
|
|
230
|
+
console.log(chalk.yellow(` ⚠ character "${character}" has no ElevenLabs agent configured; not opening a call page.`));
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
const controlPort = connection.controlPort ?? 47913;
|
|
234
|
+
const controlHost = new URL(connection.schedulerUrl).hostname;
|
|
235
|
+
const params = new URLSearchParams({
|
|
236
|
+
character,
|
|
237
|
+
agent_id: preset.elevenlabs_agent_id,
|
|
238
|
+
mode: 'production',
|
|
239
|
+
robot: connection.deviceId,
|
|
240
|
+
});
|
|
241
|
+
if (preset.elevenlabs_branch_id)
|
|
242
|
+
params.set('branch_id', preset.elevenlabs_branch_id);
|
|
243
|
+
const url = `http://${controlHost}:${controlPort}/voice-join.html?${params.toString()}`;
|
|
244
|
+
console.log(` call page: ${chalk.cyan(url)}`);
|
|
245
|
+
openBrowser(url);
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
console.log(chalk.yellow(` ⚠ could not open the character call page: ${err instanceof Error ? err.message : String(err)}`));
|
|
249
|
+
}
|
|
250
|
+
}
|
|
199
251
|
export async function startDevice(opts) {
|
|
200
252
|
const connection = readConnection();
|
|
201
253
|
const desired = {
|
|
@@ -216,6 +268,9 @@ export async function startDevice(opts) {
|
|
|
216
268
|
}
|
|
217
269
|
await updateDeviceConfiguration(desired);
|
|
218
270
|
atomicJson(DESIRED_PATH, desired);
|
|
271
|
+
if (desired.character) {
|
|
272
|
+
await openCharacterCallPage(connection, desired.character);
|
|
273
|
+
}
|
|
219
274
|
if (opts.foreground) {
|
|
220
275
|
await superviseDevice(DESIRED_PATH);
|
|
221
276
|
return;
|
|
@@ -424,20 +479,37 @@ export async function gatewayStart(opts) {
|
|
|
424
479
|
}
|
|
425
480
|
const schedulerUrl = localPublicUrl(host, port, opts.publicUrl);
|
|
426
481
|
const healthUrl = `http://127.0.0.1:${port}`;
|
|
482
|
+
const controlHealthUrl = `http://127.0.0.1:${controlPort}/fed/ui-build`;
|
|
427
483
|
const deadline = Date.now() + 30_000;
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
484
|
+
let schedulerReady = false;
|
|
485
|
+
let controlReady = false;
|
|
486
|
+
while (!schedulerReady || !controlReady) {
|
|
487
|
+
[schedulerReady, controlReady] = await Promise.all([
|
|
488
|
+
schedulerHealthy(healthUrl, 1_000),
|
|
489
|
+
fetch(controlHealthUrl, { signal: AbortSignal.timeout(1_000) })
|
|
490
|
+
.then(async (response) => {
|
|
491
|
+
if (!response.ok)
|
|
492
|
+
return false;
|
|
493
|
+
const body = await response.json();
|
|
494
|
+
return body.owner === 'robopark' || body.source === 'robovoice-control';
|
|
495
|
+
})
|
|
496
|
+
.catch(() => false),
|
|
497
|
+
]);
|
|
498
|
+
if (Date.now() >= deadline) {
|
|
499
|
+
throw new Error(`gateway did not become healthy (scheduler ${port}: ${schedulerReady ? 'ready' : 'down'}, `
|
|
500
|
+
+ `Control Center ${controlPort}: ${controlReady ? 'ready' : 'down'})`);
|
|
501
|
+
}
|
|
431
502
|
await wait(500);
|
|
432
503
|
}
|
|
433
|
-
const token = await createGatewayTokenAt(healthUrl, schedulerUrl);
|
|
504
|
+
const token = await createGatewayTokenAt(healthUrl, schedulerUrl, controlPort);
|
|
434
505
|
const controlHost = new URL(schedulerUrl).hostname;
|
|
435
|
-
console.log(` Park Control Center: ${chalk.cyan(`http://${controlHost}:${controlPort}
|
|
506
|
+
console.log(` Park Control Center: ${chalk.cyan(`http://${controlHost}:${controlPort}/robopark`)}`);
|
|
507
|
+
console.log(` Voice operations: ${chalk.cyan(`http://${controlHost}:${controlPort}/voice`)}`);
|
|
436
508
|
console.log(chalk.bold('\n Connect a device'));
|
|
437
509
|
console.log(` ${chalk.cyan(`robopark connect ${token}`)}`);
|
|
438
510
|
console.log(chalk.dim(' This pairing token expires in 24 hours. Connected devices keep their own durable credentials.\n'));
|
|
439
511
|
}
|
|
440
|
-
async function createGatewayTokenAt(localUrl, publicUrl) {
|
|
512
|
+
async function createGatewayTokenAt(localUrl, publicUrl, controlPort) {
|
|
441
513
|
await jsonRequest(`${localUrl}/api/settings`, {
|
|
442
514
|
method: 'PUT',
|
|
443
515
|
headers: { 'content-type': 'application/json' },
|
|
@@ -449,6 +521,7 @@ async function createGatewayTokenAt(localUrl, publicUrl) {
|
|
|
449
521
|
schedulerUrl: publicUrl,
|
|
450
522
|
enrollmentToken: result.enrollment_token,
|
|
451
523
|
expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(),
|
|
524
|
+
controlPort,
|
|
452
525
|
});
|
|
453
526
|
atomicJson(GATEWAY_PATH, { schedulerUrl: publicUrl, pairingToken: pairing, createdAt: new Date().toISOString() });
|
|
454
527
|
return pairing;
|
|
@@ -456,14 +529,26 @@ async function createGatewayTokenAt(localUrl, publicUrl) {
|
|
|
456
529
|
export async function runGatewayService(opts) {
|
|
457
530
|
const schedulerPort = positiveInteger(opts.port, 8080, 'port');
|
|
458
531
|
const controlPort = positiveInteger(opts.controlPort, 47913, 'control port');
|
|
532
|
+
const adapterPort = controlPort + 1;
|
|
459
533
|
const host = opts.host ?? '0.0.0.0';
|
|
460
534
|
const control = await startControlServer({
|
|
461
535
|
host,
|
|
462
|
-
port:
|
|
536
|
+
port: adapterPort,
|
|
463
537
|
schedulerUrl: `http://127.0.0.1:${schedulerPort}`,
|
|
464
538
|
});
|
|
465
|
-
|
|
539
|
+
let frontend;
|
|
466
540
|
try {
|
|
541
|
+
frontend = await startFrontendService({
|
|
542
|
+
host,
|
|
543
|
+
port: controlPort,
|
|
544
|
+
adapterPort,
|
|
545
|
+
schedulerPort,
|
|
546
|
+
});
|
|
547
|
+
console.log(` ROBOVOICE stable frontend listening on ${host}:${controlPort}`);
|
|
548
|
+
console.log(` RoboPark control adapter listening on ${host}:${adapterPort}`);
|
|
549
|
+
const frontendExit = new Promise(resolve => {
|
|
550
|
+
frontend?.once('exit', () => resolve('frontend-exit'));
|
|
551
|
+
});
|
|
467
552
|
await roboparkServe({
|
|
468
553
|
port: String(schedulerPort),
|
|
469
554
|
host,
|
|
@@ -471,8 +556,21 @@ export async function runGatewayService(opts) {
|
|
|
471
556
|
open: false,
|
|
472
557
|
foreground: true,
|
|
473
558
|
});
|
|
559
|
+
// roboparkServe wires the scheduler child's lifecycle handlers and then
|
|
560
|
+
// returns once it has launched. Keep this outer gateway process alive so
|
|
561
|
+
// the sibling Control Center server is not closed by the finally block.
|
|
562
|
+
const shutdown = new Promise(resolve => {
|
|
563
|
+
const stop = () => resolve('shutdown');
|
|
564
|
+
process.once('SIGINT', stop);
|
|
565
|
+
process.once('SIGTERM', stop);
|
|
566
|
+
});
|
|
567
|
+
const ended = await Promise.race([shutdown, frontendExit]);
|
|
568
|
+
if (ended === 'frontend-exit') {
|
|
569
|
+
throw new Error('ROBOVOICE stable frontend stopped unexpectedly');
|
|
570
|
+
}
|
|
474
571
|
}
|
|
475
572
|
finally {
|
|
573
|
+
stopFrontendService(frontend);
|
|
476
574
|
control.close();
|
|
477
575
|
}
|
|
478
576
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "robopark",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "Standalone packaged RoboPark control center and supervised robot runtime.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
"bin/robopark.js",
|
|
11
11
|
"dist",
|
|
12
|
+
"ui",
|
|
12
13
|
"scripts/windows-shim-fix.cjs",
|
|
13
14
|
"scheduler",
|
|
14
15
|
"pi-client",
|
|
@@ -29,16 +30,42 @@
|
|
|
29
30
|
"node": ">=20"
|
|
30
31
|
},
|
|
31
32
|
"dependencies": {
|
|
33
|
+
"@livekit/components-react": "^2.9.15",
|
|
34
|
+
"@livekit/protocol": "^1.40.0",
|
|
35
|
+
"@phosphor-icons/react": "^2.1.8",
|
|
36
|
+
"@picovoice/porcupine-web": "^4.0.0",
|
|
37
|
+
"@picovoice/web-voice-processor": "^4.0.9",
|
|
38
|
+
"@radix-ui/react-select": "^2.2.5",
|
|
39
|
+
"@radix-ui/react-slot": "^1.2.3",
|
|
40
|
+
"@radix-ui/react-toggle": "^1.1.9",
|
|
41
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
42
|
+
"buffer-image-size": "^0.6.4",
|
|
43
|
+
"class-variance-authority": "^0.7.1",
|
|
32
44
|
"chalk": "^5.3.0",
|
|
45
|
+
"clsx": "^2.1.1",
|
|
33
46
|
"commander": "^12.1.0",
|
|
34
47
|
"conf": "^12.0.0",
|
|
35
48
|
"execa": "^9.3.0",
|
|
36
|
-
"
|
|
49
|
+
"jose": "^6.0.12",
|
|
50
|
+
"livekit-client": "^2.20.1",
|
|
51
|
+
"livekit-server-sdk": "^2.13.2",
|
|
52
|
+
"mime": "^4.0.7",
|
|
53
|
+
"motion": "^12.16.0",
|
|
54
|
+
"next": "15.5.21",
|
|
55
|
+
"next-themes": "^0.4.6",
|
|
56
|
+
"react": "^19.0.0",
|
|
57
|
+
"react-dom": "^19.0.0",
|
|
58
|
+
"sonner": "^2.0.7",
|
|
59
|
+
"tailwind-merge": "^3.3.0"
|
|
37
60
|
},
|
|
38
61
|
"devDependencies": {
|
|
39
62
|
"@types/node": "^20.14.0",
|
|
40
63
|
"typescript": "^5.4.5"
|
|
41
64
|
},
|
|
65
|
+
"overrides": {
|
|
66
|
+
"postcss": "8.5.23",
|
|
67
|
+
"sharp": "0.35.3"
|
|
68
|
+
},
|
|
42
69
|
"keywords": [
|
|
43
70
|
"robopark",
|
|
44
71
|
"fleet",
|
|
@@ -53,6 +80,11 @@
|
|
|
53
80
|
"license": "MIT",
|
|
54
81
|
"repository": {
|
|
55
82
|
"type": "git",
|
|
56
|
-
"url": "https://github.com/MrYungCEO/
|
|
83
|
+
"url": "https://github.com/MrYungCEO/ROBOVOICE-main"
|
|
84
|
+
},
|
|
85
|
+
"roboparkBuild": {
|
|
86
|
+
"uiSourceBranch": "stable",
|
|
87
|
+
"uiSourceCommit": "be4ecb0",
|
|
88
|
+
"uiBuild": "production-native-microphone-20260725-8"
|
|
57
89
|
}
|
|
58
90
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"repository": "https://github.com/MrYungCEO/ROBOVOICE-main",
|
|
3
|
+
"branch": "stable",
|
|
4
|
+
"commit": "be4ecb0",
|
|
5
|
+
"control_ui_build": "production-native-microphone-20260725-8",
|
|
6
|
+
"next_build_version": "15.5.7",
|
|
7
|
+
"next_runtime_version": "15.5.21",
|
|
8
|
+
"packaged_at": "2026-07-26"
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
T3eGaQUuZNb6rhEStcouc
|