robopark 3.3.35 → 3.3.36
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 +1 -1
- package/scheduler/static/voice-join.html +1 -1
- package/ui/standalone/.next/BUILD_ID +1 -1
- package/ui/standalone/.next/app-build-manifest.json +82 -82
- package/ui/standalone/.next/app-path-routes-manifest.json +21 -21
- package/ui/standalone/.next/build-manifest.json +2 -2
- package/ui/standalone/.next/server/app/robopark/api/[...path]/route.js +1 -1
- package/ui/standalone/.next/server/app-paths-manifest.json +21 -21
- package/ui/standalone/.next/server/functions-config-manifest.json +1 -1
- package/ui/standalone/.next/server/pages/500.html +1 -1
- package/ui/standalone/.next/server/pages-manifest.json +1 -1
- package/ui/standalone/.next/static/ULHwbueNr3RGevy8FSrTW/_buildManifest.js +1 -0
- package/ui/standalone/.next/static/ULHwbueNr3RGevy8FSrTW/_ssgManifest.js +1 -0
- package/ui/standalone/public/tailnet/index.html +31 -1
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
:root{--bg:#080704;--panel:rgba(20,17,11,.88);--line:rgba(247,211,116,.22);--gold:#f4cf72;--pale:#fff0bd;--ink:#f7f1df;--muted:#a99e84;--ok:#64dfa0;--warn:#f0bd55;--bad:#ff776c;--mono:"JetBrains Mono","Cascadia Code",monospace;--display:Georgia,"Times New Roman",serif}*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:radial-gradient(circle at 50% 8%,#332510 0,#100d08 35%,#050403 78%);color:var(--ink);font-family:Verdana,Geneva,sans-serif}body:before{content:"";position:fixed;inset:0;pointer-events:none;background:linear-gradient(115deg,transparent 0 48%,rgba(244,207,114,.025) 49% 50%,transparent 51%),repeating-linear-gradient(0deg,transparent 0 34px,rgba(255,255,255,.012) 35px)}button,input{font:inherit}.shell{width:min(1120px,100%);min-height:100vh;margin:auto;padding:clamp(14px,3vw,34px);display:grid;grid-template-rows:auto 1fr auto;gap:18px}.top{display:flex;align-items:center;justify-content:space-between;gap:16px}.brand{font:700 .65rem var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--gold)}.ops-toggle{border:1px solid var(--line);border-radius:999px;background:rgba(0,0,0,.35);color:var(--muted);padding:.55rem .8rem;cursor:pointer}.ops-toggle.on{color:var(--pale);border-color:var(--gold)}.stage{position:relative;min-height:620px;display:grid;grid-template-columns:minmax(0,1.3fr) minmax(280px,.7fr);overflow:hidden;border:1px solid var(--line);border-radius:28px;background:linear-gradient(145deg,rgba(34,27,14,.82),rgba(8,7,5,.92));box-shadow:0 28px 90px rgba(0,0,0,.45)}.hero{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:34px;text-align:center;overflow:hidden}.hero:before{content:"";position:absolute;width:500px;height:500px;border:1px solid rgba(244,207,114,.1);border-radius:50%;box-shadow:0 0 0 55px rgba(244,207,114,.018),0 0 0 120px rgba(244,207,114,.012)}.avatar-wrap{position:relative;width:min(330px,72vw);aspect-ratio:1;display:grid;place-items:center;border:1px solid rgba(244,207,114,.3);border-radius:50%;background:radial-gradient(circle,rgba(244,207,114,.16),rgba(8,7,5,.62) 58%,#050403 74%);box-shadow:0 0 90px rgba(214,164,55,.16)}.avatar-wrap.live{animation:breathe 2.2s ease-in-out infinite}.avatar-wrap.speaking{box-shadow:0 0 110px rgba(244,207,114,.42);border-color:var(--pale)}@keyframes breathe{50%{transform:scale(1.018)}}.avatar{position:relative;z-index:2;width:78%;height:78%;object-fit:contain;filter:drop-shadow(0 20px 28px rgba(0,0,0,.58))}.fallback{position:absolute;font:700 4rem var(--display);color:var(--gold)}h1{position:relative;margin:22px 0 5px;font:700 clamp(2rem,5vw,3.5rem) var(--display);color:var(--pale)}.subtitle{position:relative;color:var(--muted);font-size:.8rem}.state{position:relative;margin-top:14px;font:600 .68rem var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--gold)}.join{position:relative;margin-top:22px;min-width:210px;border:1px solid var(--gold);border-radius:999px;padding:.9rem 1.25rem;background:linear-gradient(135deg,#f5d77f,#b87b1d);color:#171005;font-weight:800;cursor:pointer;box-shadow:0 12px 30px rgba(184,123,29,.24)}.join:disabled{opacity:.48;cursor:not-allowed}.end{position:relative;margin-top:10px;border:0;background:transparent;color:var(--muted);cursor:pointer}.side{position:relative;border-left:1px solid var(--line);padding:25px;display:flex;flex-direction:column;gap:14px;background:rgba(0,0,0,.2)}.vision{position:relative;aspect-ratio:16/10;border:1px solid var(--line);border-radius:17px;overflow:hidden;background:#050403}.vision img,.vision video{width:100%;height:100%;object-fit:contain;background:#050403}.vision .label{position:absolute;left:9px;top:9px;padding:.32rem .45rem;border-radius:7px;background:rgba(0,0,0,.7);font:600 .5rem var(--mono);color:var(--gold)}.transcript{flex:1;min-height:220px;max-height:360px;overflow:auto;padding:.65rem;border:1px solid var(--line);border-radius:15px;background:rgba(0,0,0,.22)}.turn{margin:.45rem 0;padding:.55rem .65rem;border-radius:11px;font-size:.75rem;line-height:1.45}.turn.user{margin-left:13%;background:rgba(244,207,114,.12);border:1px solid rgba(244,207,114,.18)}.turn.assistant{margin-right:13%;background:rgba(255,255,255,.045)}.compose{display:flex;gap:8px}.compose input{min-width:0;flex:1;border:1px solid var(--line);border-radius:11px;background:#090805;color:var(--ink);padding:.7rem}.compose button{border:1px solid var(--line);border-radius:11px;background:rgba(244,207,114,.12);color:var(--gold);padding:.7rem;cursor:pointer}.ops{display:none;position:absolute;inset:12px;z-index:8;padding:16px;border:1px solid rgba(244,207,114,.35);border-radius:18px;background:rgba(5,4,3,.94);backdrop-filter:blur(16px);overflow:auto}.ops.open{display:block}.ops-head{display:flex;align-items:center;justify-content:space-between}.ops h2{margin:0;font:700 1.2rem var(--display);color:var(--pale)}.close{border:1px solid var(--line);border-radius:9px;background:transparent;color:var(--muted);padding:.4rem .55rem;cursor:pointer}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px;margin:14px 0}.fact{padding:.7rem;border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.025)}.fact span{display:block;color:var(--muted);font:500 .49rem var(--mono);text-transform:uppercase;letter-spacing:.11em}.fact b{display:block;margin-top:.3rem;color:var(--ink);font:600 .64rem var(--mono);word-break:break-all}.pipeline{display:grid;grid-template-columns:repeat(5,1fr);gap:7px;margin:15px 0}.step{padding:.65rem .3rem;border:1px solid var(--line);border-radius:11px;text-align:center;color:var(--muted);font:600 .52rem var(--mono);text-transform:uppercase}.step.done{color:var(--ok);border-color:rgba(100,223,160,.4)}.step.live{color:#171005;border-color:var(--gold);background:var(--gold);box-shadow:0 0 24px rgba(244,207,114,.25)}.step.bad{color:var(--bad);border-color:rgba(255,119,108,.5)}.events{display:grid;gap:7px}.event{display:grid;grid-template-columns:95px 70px 1fr;gap:8px;padding:.6rem;border-bottom:1px solid var(--line);font:500 .55rem var(--mono)}.event .ok{color:var(--ok)}.event .error,.event .failed{color:var(--bad)}.foot{text-align:center;color:#716956;font:500 .52rem var(--mono);letter-spacing:.08em}.error-box{display:none;margin-top:12px;color:var(--bad);font:.65rem var(--mono)}@media(max-width:780px){.shell{padding:10px}.stage{grid-template-columns:1fr;min-height:0}.hero{min-height:600px;padding:24px 15px}.side{border-left:0;border-top:1px solid var(--line)}.pipeline{grid-template-columns:1fr 1fr}.top{padding:4px}.event{grid-template-columns:75px 55px 1fr}}
|
|
9
9
|
</style></head><body><main class="shell"><header class="top"><div class="brand">RoboPark / managed character channel</div><div><button class="ops-toggle on" id="always-on" aria-pressed="true" hidden>Always on: ON</button><button class="ops-toggle" id="kiosk" aria-pressed="false">Motion calls: OFF</button> <button class="ops-toggle" id="ops-toggle">Operations</button></div></header><section class="stage"><div class="hero"><div class="avatar-wrap" id="avatar-wrap"><div class="fallback" id="fallback">RP</div><img class="avatar" id="avatar" alt=""></div><h1 id="character-name">Loading character...</h1><div class="subtitle" id="subtitle">Secure ElevenLabs conversation managed by RoboPark</div><div class="state" id="state">validating link</div><button class="join" id="join" disabled>Join conversation</button><button class="end" id="end" hidden>End conversation</button><div class="error-box" id="error"></div></div><aside class="side"><div class="vision" id="vision" hidden><img id="robot-video" alt="Live robot camera"><span class="label">LIVE ROBOT VISION</span></div><div class="transcript" id="transcript"><div class="turn assistant">The transcript will appear here when the conversation begins.</div></div><form class="compose" id="compose"><input id="message" placeholder="Type a message" disabled><button id="send" disabled>Send</button></form></aside><section class="ops" id="ops"><div class="ops-head"><h2>Live management overlay</h2><button class="close" id="ops-close">Close</button></div><div class="facts"><div class="fact"><span>Session</span><b id="f-session">not started</b></div><div class="fact"><span>Character</span><b id="f-character">--</b></div><div class="fact"><span>Agent</span><b id="f-agent">--</b></div><div class="fact"><span>Branch</span><b id="f-branch">default</b></div><div class="fact"><span>Robot</span><b id="f-robot">operator only</b></div><div class="fact"><span>Share link</span><b id="f-share">--</b></div></div><div class="pipeline" id="pipeline"><div class="step live" data-stage="configured">configured</div><div class="step" data-stage="permission">permission</div><div class="step" data-stage="signed_session">signed</div><div class="step" data-stage="connected">connected</div><div class="step" data-stage="conversation">conversation</div></div><div class="events" id="events"><div class="event"><span>waiting</span><span>info</span><span>Session telemetry will stream here.</span></div></div></section></section><footer class="foot">No API credentials are stored in this link. Each visit creates an isolated signed session.</footer></main><script src="/vendor/elevenlabs-client.iife.js"></script><script>
|
|
10
10
|
(function(){
|
|
11
|
-
var API_BASE=''
|
|
11
|
+
var API_BASE=(location.port==='8080'||location.port==='8000')?'':'/robopark'/* This page is served from TWO origins: the scheduler itself (where /api/* is its own API) and the tailnet root (where Next.js owns /api/* and the scheduler is reachable only under /robopark). Hardcoding '' made every call 404 at the root -- which is why no camera publisher ever reached LiveKit. Resolve it from the origin instead. */;
|
|
12
12
|
var deployment=document.createElement('div');deployment.id='deployment';deployment.className='deployment';deployment.innerHTML='<div class="deployment-row"><b>Character hardware</b><span>Loading registered voice, vision, and motor nodes...</span><span></span></div>';document.getElementById('pipeline').before(deployment);
|
|
13
13
|
var audioControls=document.createElement('details');audioControls.id='audio-controls';audioControls.className='audio-controls';audioControls.innerHTML='<summary>Audio levels</summary><div class="audio-panel"><div class="audio-row"><label for="speaker-volume">Speaker</label><input id="speaker-volume" type="range" min="0" max="100" step="1"><output class="audio-value" id="speaker-value"></output></div><div class="audio-row"><label for="mic-sensitivity">Microphone</label><input id="mic-sensitivity" type="range" min="0" max="100" step="1"><output class="audio-value" id="mic-value"></output></div><p class="audio-note">Changes apply immediately and stay on this browser.</p></div>';document.getElementById('error').after(audioControls);
|
|
14
14
|
var callControls=document.createElement('details');callControls.id='call-controls';callControls.className='call-controls';callControls.open=true;callControls.innerHTML='<summary>Microphone and speaker</summary><div class=call-panel id=call-panel></div>';audioControls.open=true;audioControls.after(callControls);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
ULHwbueNr3RGevy8FSrTW
|
|
@@ -7,17 +7,6 @@
|
|
|
7
7
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
8
8
|
"static/chunks/app/_not-found/page-cfd7daa82d71540c.js"
|
|
9
9
|
],
|
|
10
|
-
"/layout": [
|
|
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/css/3f478a573f9be82e.css",
|
|
16
|
-
"static/css/51560c4af1d5a21f.css",
|
|
17
|
-
"static/chunks/144d3bae-bd5d150c0cab972e.js",
|
|
18
|
-
"static/chunks/9880-53262785284464cc.js",
|
|
19
|
-
"static/chunks/app/layout-fcce963da1d8220f.js"
|
|
20
|
-
],
|
|
21
10
|
"/api/device-character/route": [
|
|
22
11
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
23
12
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
@@ -53,6 +42,17 @@
|
|
|
53
42
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
54
43
|
"static/chunks/app/api/prompt/route-0952b44bda5bfb6d.js"
|
|
55
44
|
],
|
|
45
|
+
"/layout": [
|
|
46
|
+
"static/chunks/webpack-5252e5254da079b5.js",
|
|
47
|
+
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
48
|
+
"static/chunks/1255-404bb8de49c90395.js",
|
|
49
|
+
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
50
|
+
"static/css/3f478a573f9be82e.css",
|
|
51
|
+
"static/css/51560c4af1d5a21f.css",
|
|
52
|
+
"static/chunks/144d3bae-bd5d150c0cab972e.js",
|
|
53
|
+
"static/chunks/9880-53262785284464cc.js",
|
|
54
|
+
"static/chunks/app/layout-fcce963da1d8220f.js"
|
|
55
|
+
],
|
|
56
56
|
"/api/reload-tools/route": [
|
|
57
57
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
58
58
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
@@ -74,33 +74,33 @@
|
|
|
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/
|
|
77
|
+
"/api/robopark/transcripts/[sessionId]/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/
|
|
82
|
+
"static/chunks/app/api/robopark/transcripts/[sessionId]/route-0952b44bda5bfb6d.js"
|
|
83
83
|
],
|
|
84
|
-
"/api/robopark/
|
|
84
|
+
"/api/robopark/sessions/[sessionId]/end/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/
|
|
89
|
+
"static/chunks/app/api/robopark/sessions/[sessionId]/end/route-0952b44bda5bfb6d.js"
|
|
90
90
|
],
|
|
91
|
-
"/api/setup/
|
|
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/
|
|
96
|
+
"static/chunks/app/api/setup/status/route-0952b44bda5bfb6d.js"
|
|
97
97
|
],
|
|
98
|
-
"/api/setup/
|
|
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/
|
|
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",
|
|
@@ -109,12 +109,12 @@
|
|
|
109
109
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
110
110
|
"static/chunks/app/api/setup/test-groq/route-0952b44bda5bfb6d.js"
|
|
111
111
|
],
|
|
112
|
-
"/api/setup/test-
|
|
112
|
+
"/api/setup/test-n8n/route": [
|
|
113
113
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
114
114
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
115
115
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
116
116
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
117
|
-
"static/chunks/app/api/setup/test-
|
|
117
|
+
"static/chunks/app/api/setup/test-n8n/route-0952b44bda5bfb6d.js"
|
|
118
118
|
],
|
|
119
119
|
"/api/setup/test-ollama/route": [
|
|
120
120
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
@@ -123,12 +123,12 @@
|
|
|
123
123
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
124
124
|
"static/chunks/app/api/setup/test-ollama/route-0952b44bda5bfb6d.js"
|
|
125
125
|
],
|
|
126
|
-
"/api/setup/test-
|
|
126
|
+
"/api/setup/test-hass/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-
|
|
131
|
+
"static/chunks/app/api/setup/test-hass/route-0952b44bda5bfb6d.js"
|
|
132
132
|
],
|
|
133
133
|
"/api/test-tts/route": [
|
|
134
134
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
@@ -137,33 +137,33 @@
|
|
|
137
137
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
138
138
|
"static/chunks/app/api/test-tts/route-0952b44bda5bfb6d.js"
|
|
139
139
|
],
|
|
140
|
-
"/api/
|
|
140
|
+
"/api/voices/route": [
|
|
141
141
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
142
142
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
143
143
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
144
144
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
145
|
-
"static/chunks/app/api/
|
|
145
|
+
"static/chunks/app/api/voices/route-0952b44bda5bfb6d.js"
|
|
146
146
|
],
|
|
147
|
-
"/api/wake-word/
|
|
147
|
+
"/api/wake-word/status/route": [
|
|
148
148
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
149
149
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
150
150
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
151
151
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
152
|
-
"static/chunks/app/api/wake-word/
|
|
152
|
+
"static/chunks/app/api/wake-word/status/route-0952b44bda5bfb6d.js"
|
|
153
153
|
],
|
|
154
|
-
"/api/
|
|
154
|
+
"/api/wake-word/upload/route": [
|
|
155
155
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
156
156
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
157
157
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
158
158
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
159
|
-
"static/chunks/app/api/
|
|
159
|
+
"static/chunks/app/api/wake-word/upload/route-0952b44bda5bfb6d.js"
|
|
160
160
|
],
|
|
161
|
-
"/api/wake-word/
|
|
161
|
+
"/api/wake-word/models/route": [
|
|
162
162
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
163
163
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
164
164
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
165
165
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
166
|
-
"static/chunks/app/api/wake-word/
|
|
166
|
+
"static/chunks/app/api/wake-word/models/route-0952b44bda5bfb6d.js"
|
|
167
167
|
],
|
|
168
168
|
"/api/model-status/route": [
|
|
169
169
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
@@ -186,40 +186,40 @@
|
|
|
186
186
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
187
187
|
"static/chunks/app/api/connection-details/route-0952b44bda5bfb6d.js"
|
|
188
188
|
],
|
|
189
|
-
"/api/robopark/
|
|
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/
|
|
194
|
+
"static/chunks/app/api/robopark/character-ai/route-0952b44bda5bfb6d.js"
|
|
195
195
|
],
|
|
196
|
-
"/api/robopark/
|
|
196
|
+
"/api/robopark/live-rooms/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/
|
|
201
|
+
"static/chunks/app/api/robopark/live-rooms/route-0952b44bda5bfb6d.js"
|
|
202
202
|
],
|
|
203
|
-
"/api/robopark/
|
|
203
|
+
"/api/robopark/camera-token/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/
|
|
208
|
+
"static/chunks/app/api/robopark/camera-token/route-0952b44bda5bfb6d.js"
|
|
209
209
|
],
|
|
210
|
-
"/api/robopark/
|
|
210
|
+
"/api/robopark/device-access/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/
|
|
215
|
+
"static/chunks/app/api/robopark/device-access/route-0952b44bda5bfb6d.js"
|
|
216
216
|
],
|
|
217
|
-
"/api/robopark/
|
|
217
|
+
"/api/robopark/servers/[serverId]/metrics/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/
|
|
222
|
+
"static/chunks/app/api/robopark/servers/[serverId]/metrics/route-0952b44bda5bfb6d.js"
|
|
223
223
|
],
|
|
224
224
|
"/api/robopark/robots/route": [
|
|
225
225
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
@@ -228,19 +228,19 @@
|
|
|
228
228
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
229
229
|
"static/chunks/app/api/robopark/robots/route-0952b44bda5bfb6d.js"
|
|
230
230
|
],
|
|
231
|
-
"/api/robopark/
|
|
231
|
+
"/api/robopark/monitor-token/route": [
|
|
232
232
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
233
233
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
234
234
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
235
235
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
236
|
-
"static/chunks/app/api/robopark/
|
|
236
|
+
"static/chunks/app/api/robopark/monitor-token/route-0952b44bda5bfb6d.js"
|
|
237
237
|
],
|
|
238
|
-
"/api/robopark/
|
|
238
|
+
"/api/robopark/sessions/route": [
|
|
239
239
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
240
240
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
241
241
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
242
242
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
243
|
-
"static/chunks/app/api/robopark/
|
|
243
|
+
"static/chunks/app/api/robopark/sessions/route-0952b44bda5bfb6d.js"
|
|
244
244
|
],
|
|
245
245
|
"/api/robopark/servers/route": [
|
|
246
246
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
@@ -249,40 +249,40 @@
|
|
|
249
249
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
250
250
|
"static/chunks/app/api/robopark/servers/route-0952b44bda5bfb6d.js"
|
|
251
251
|
],
|
|
252
|
-
"/api/robopark/
|
|
252
|
+
"/api/robopark/servers/[serverId]/route": [
|
|
253
253
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
254
254
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
255
255
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
256
256
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
257
|
-
"static/chunks/app/api/robopark/
|
|
257
|
+
"static/chunks/app/api/robopark/servers/[serverId]/route-0952b44bda5bfb6d.js"
|
|
258
258
|
],
|
|
259
|
-
"/api/
|
|
259
|
+
"/api/robopark/vision-caption/route": [
|
|
260
260
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
261
261
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
262
262
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
263
263
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
264
|
-
"static/chunks/app/api/
|
|
264
|
+
"static/chunks/app/api/robopark/vision-caption/route-0952b44bda5bfb6d.js"
|
|
265
265
|
],
|
|
266
|
-
"/api/
|
|
266
|
+
"/api/settings/route": [
|
|
267
267
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
268
268
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
269
269
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
270
270
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
271
|
-
"static/chunks/app/api/
|
|
271
|
+
"static/chunks/app/api/settings/route-0952b44bda5bfb6d.js"
|
|
272
272
|
],
|
|
273
|
-
"/api/
|
|
273
|
+
"/api/robovoice/robots/[robotId]/media-health/route": [
|
|
274
274
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
275
275
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
276
276
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
277
277
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
278
|
-
"static/chunks/app/api/
|
|
278
|
+
"static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-0952b44bda5bfb6d.js"
|
|
279
279
|
],
|
|
280
|
-
"/api/
|
|
280
|
+
"/api/robopark/robots/[robotId]/voice-engine/route": [
|
|
281
281
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
282
282
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
283
283
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
284
284
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
285
|
-
"static/chunks/app/api/
|
|
285
|
+
"static/chunks/app/api/robopark/robots/[robotId]/voice-engine/route-0952b44bda5bfb6d.js"
|
|
286
286
|
],
|
|
287
287
|
"/api/robopark/transcripts/route": [
|
|
288
288
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
@@ -298,61 +298,61 @@
|
|
|
298
298
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
299
299
|
"static/chunks/app/api/turn-credentials/route-0952b44bda5bfb6d.js"
|
|
300
300
|
],
|
|
301
|
-
"/
|
|
301
|
+
"/camera-grid/route": [
|
|
302
302
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
303
303
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
304
304
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
305
305
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
306
|
-
"static/chunks/app/
|
|
306
|
+
"static/chunks/app/camera-grid/route-0952b44bda5bfb6d.js"
|
|
307
307
|
],
|
|
308
|
-
"/
|
|
308
|
+
"/robopark/[...path]/route": [
|
|
309
309
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
310
310
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
311
311
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
312
312
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
313
|
-
"static/chunks/app/
|
|
313
|
+
"static/chunks/app/robopark/[...path]/route-0952b44bda5bfb6d.js"
|
|
314
314
|
],
|
|
315
|
-
"/
|
|
315
|
+
"/fed/media/robots/[robotId]/video_feed/route": [
|
|
316
316
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
317
317
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
318
318
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
319
319
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
320
|
-
"static/chunks/app/
|
|
320
|
+
"static/chunks/app/fed/media/robots/[robotId]/video_feed/route-0952b44bda5bfb6d.js"
|
|
321
321
|
],
|
|
322
|
-
"/
|
|
322
|
+
"/api/wake/route": [
|
|
323
323
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
324
324
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
325
325
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
326
326
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
327
|
-
"static/chunks/app/
|
|
327
|
+
"static/chunks/app/api/wake/route-0952b44bda5bfb6d.js"
|
|
328
328
|
],
|
|
329
|
-
"/
|
|
329
|
+
"/robopark/api/robots/[robotId]/stream/route": [
|
|
330
330
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
331
331
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
332
332
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
333
333
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
334
|
-
"static/chunks/app/
|
|
334
|
+
"static/chunks/app/robopark/api/robots/[robotId]/stream/route-0952b44bda5bfb6d.js"
|
|
335
335
|
],
|
|
336
|
-
"/
|
|
336
|
+
"/fed/[...path]/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/
|
|
341
|
+
"static/chunks/app/fed/[...path]/route-0952b44bda5bfb6d.js"
|
|
342
342
|
],
|
|
343
|
-
"/
|
|
343
|
+
"/tailnet/route": [
|
|
344
344
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
345
345
|
"static/chunks/4bd1b696-f785427dddbba9fb.js",
|
|
346
346
|
"static/chunks/1255-404bb8de49c90395.js",
|
|
347
347
|
"static/chunks/main-app-a1f59168303c7f84.js",
|
|
348
|
-
"static/chunks/app/
|
|
348
|
+
"static/chunks/app/tailnet/route-0952b44bda5bfb6d.js"
|
|
349
349
|
],
|
|
350
|
-
"/
|
|
350
|
+
"/vendor/livekit-client.umd.js/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/
|
|
355
|
+
"static/chunks/app/vendor/livekit-client.umd.js/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
|
-
"/
|
|
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/
|
|
376
|
+
"static/chunks/app/robopark/page-0952b44bda5bfb6d.js"
|
|
377
377
|
],
|
|
378
|
-
"/
|
|
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/
|
|
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
|
}
|
|
@@ -1,58 +1,58 @@
|
|
|
1
1
|
{
|
|
2
|
-
"/_not-found/page": "/_not-found",
|
|
3
2
|
"/api/device-character/route": "/api/device-character",
|
|
4
3
|
"/api/download-piper-model/route": "/api/download-piper-model",
|
|
5
4
|
"/api/models/route": "/api/models",
|
|
6
5
|
"/api/prewarm/route": "/api/prewarm",
|
|
7
6
|
"/api/prompt/route": "/api/prompt",
|
|
7
|
+
"/_not-found/page": "/_not-found",
|
|
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
|
-
"/api/robopark/sessions/[sessionId]/end/route": "/api/robopark/sessions/[sessionId]/end",
|
|
12
11
|
"/api/robopark/transcripts/[sessionId]/route": "/api/robopark/transcripts/[sessionId]",
|
|
13
|
-
"/api/
|
|
12
|
+
"/api/robopark/sessions/[sessionId]/end/route": "/api/robopark/sessions/[sessionId]/end",
|
|
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
|
-
"/api/setup/test-hass/route": "/api/setup/test-hass",
|
|
17
|
-
"/api/setup/test-ollama/route": "/api/setup/test-ollama",
|
|
18
16
|
"/api/setup/test-n8n/route": "/api/setup/test-n8n",
|
|
17
|
+
"/api/setup/test-ollama/route": "/api/setup/test-ollama",
|
|
18
|
+
"/api/setup/test-hass/route": "/api/setup/test-hass",
|
|
19
19
|
"/api/test-tts/route": "/api/test-tts",
|
|
20
|
-
"/api/wake-word/status/route": "/api/wake-word/status",
|
|
21
|
-
"/api/wake-word/models/route": "/api/wake-word/models",
|
|
22
20
|
"/api/voices/route": "/api/voices",
|
|
21
|
+
"/api/wake-word/status/route": "/api/wake-word/status",
|
|
23
22
|
"/api/wake-word/upload/route": "/api/wake-word/upload",
|
|
23
|
+
"/api/wake-word/models/route": "/api/wake-word/models",
|
|
24
24
|
"/favicon.ico/route": "/favicon.ico",
|
|
25
25
|
"/api/model-status/route": "/api/model-status",
|
|
26
26
|
"/api/kiosk-hardware/route": "/api/kiosk-hardware",
|
|
27
27
|
"/api/connection-details/route": "/api/connection-details",
|
|
28
|
-
"/api/robopark/live-rooms/route": "/api/robopark/live-rooms",
|
|
29
|
-
"/api/robopark/monitor-token/route": "/api/robopark/monitor-token",
|
|
30
28
|
"/api/robopark/character-ai/route": "/api/robopark/character-ai",
|
|
29
|
+
"/api/robopark/live-rooms/route": "/api/robopark/live-rooms",
|
|
31
30
|
"/api/robopark/camera-token/route": "/api/robopark/camera-token",
|
|
32
31
|
"/api/robopark/device-access/route": "/api/robopark/device-access",
|
|
33
|
-
"/api/robopark/robots/route": "/api/robopark/robots",
|
|
34
32
|
"/api/robopark/servers/[serverId]/metrics/route": "/api/robopark/servers/[serverId]/metrics",
|
|
35
|
-
"/api/robopark/
|
|
36
|
-
"/api/robopark/
|
|
33
|
+
"/api/robopark/robots/route": "/api/robopark/robots",
|
|
34
|
+
"/api/robopark/monitor-token/route": "/api/robopark/monitor-token",
|
|
37
35
|
"/api/robopark/sessions/route": "/api/robopark/sessions",
|
|
38
|
-
"/api/
|
|
36
|
+
"/api/robopark/servers/route": "/api/robopark/servers",
|
|
37
|
+
"/api/robopark/servers/[serverId]/route": "/api/robopark/servers/[serverId]",
|
|
39
38
|
"/api/robopark/vision-caption/route": "/api/robopark/vision-caption",
|
|
40
|
-
"/api/robopark/robots/[robotId]/voice-engine/route": "/api/robopark/robots/[robotId]/voice-engine",
|
|
41
39
|
"/api/settings/route": "/api/settings",
|
|
40
|
+
"/api/robovoice/robots/[robotId]/media-health/route": "/api/robovoice/robots/[robotId]/media-health",
|
|
41
|
+
"/api/robopark/robots/[robotId]/voice-engine/route": "/api/robopark/robots/[robotId]/voice-engine",
|
|
42
42
|
"/api/robopark/transcripts/route": "/api/robopark/transcripts",
|
|
43
43
|
"/api/turn-credentials/route": "/api/turn-credentials",
|
|
44
|
-
"/
|
|
45
|
-
"/fed/media/robots/[robotId]/video_feed/route": "/fed/media/robots/[robotId]/video_feed",
|
|
44
|
+
"/camera-grid/route": "/camera-grid",
|
|
46
45
|
"/robopark/[...path]/route": "/robopark/[...path]",
|
|
46
|
+
"/fed/media/robots/[robotId]/video_feed/route": "/fed/media/robots/[robotId]/video_feed",
|
|
47
|
+
"/api/wake/route": "/api/wake",
|
|
48
|
+
"/robopark/api/robots/[robotId]/stream/route": "/robopark/api/robots/[robotId]/stream",
|
|
47
49
|
"/fed/[...path]/route": "/fed/[...path]",
|
|
48
50
|
"/tailnet/route": "/tailnet",
|
|
49
|
-
"/camera-grid/route": "/camera-grid",
|
|
50
51
|
"/vendor/livekit-client.umd.js/route": "/vendor/livekit-client.umd.js",
|
|
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
|
-
"/
|
|
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/
|
|
9
|
-
"static/
|
|
8
|
+
"static/ULHwbueNr3RGevy8FSrTW/_buildManifest.js",
|
|
9
|
+
"static/ULHwbueNr3RGevy8FSrTW/_ssgManifest.js"
|
|
10
10
|
],
|
|
11
11
|
"rootMainFiles": [
|
|
12
12
|
"static/chunks/webpack-5252e5254da079b5.js",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var a={};a.id=1426,a.ids=[1426],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},3787:(a,b,c)=>{"use strict";c.d(b,{i:()=>g});let d=(process.env.WEBHOOK_URL||"http://agent:8889").replace(/\/+$/,""),e=Promise.resolve();async function f(a){let b=await fetch(`${d}/settings`,{cache:"no-store",signal:AbortSignal.timeout(8e3)});if(!b.ok)throw Error(`Settings registry returned ${b.status}`);let c=await b.json(),e=structuredClone(c.settings?.device_registry||{}),f=await a(e),g=await fetch(`${d}/settings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:{device_registry:e}}),signal:AbortSignal.timeout(8e3)});if(!g.ok)throw Error(`Settings registry update returned ${g.status}`);return f}function g(a){let b=e.then(()=>f(a),()=>f(a));return e=b.then(()=>void 0,()=>void 0),b}},4573:a=>{"use strict";a.exports=require("node:buffer")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},24008:(a,b,c)=>{"use strict";function d(a,b){let c=a.device_registry||{},d=String(b.robotId||"").trim(),g=String(b.characterId||"").trim();for(let a of[d,g])if(a&&c[a])return f(a);for(let a of[d,g]){let b=e(a);if(!b)continue;let d=Object.entries(c).find(([,a])=>e(a?.character_id)===b);if(d)return f(d[0])}return f(d||g)}function e(a){return String(a||"").trim().toLowerCase().replace(/_heb$/,"")}function f(a){return a.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}c.d(b,{_1:()=>d})},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},46131:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>ai,patchFetch:()=>ah,routeModule:()=>ad,serverHooks:()=>ag,workAsyncStorage:()=>ae,workUnitAsyncStorage:()=>af});var d={};c.r(d),c.d(d,{DELETE:()=>ac,GET:()=>$,PATCH:()=>ab,POST:()=>_,PUT:()=>aa,dynamic:()=>D});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(10641),v=c(58755),w=c(58553),x=c(99435);let y=(process.env.V2_SCHEDULER_URL||process.env.SCHEDULER_URL||"http://192.168.1.14:8080").replace(/\/+$/,"");async function z(a,b=""){let c=b&&!a.includes("?")?b.startsWith("?")?b:`?${b}`:"";try{let b=await fetch(`${y}${a}${c}`,{cache:"no-store",signal:AbortSignal.timeout(12e3)});return new Response(b.body,{status:b.status,headers:{"content-type":b.headers.get("content-type")||"application/json","cache-control":"no-store","x-data-source":"robot-scheduler"}})}catch(a){return u.NextResponse.json({error:a instanceof Error?a.message:"Scheduler unavailable"},{status:503})}}var A=c(3787),B=c(75310),C=c(24008);let D="force-dynamic",E=process.env.V2_AGENT_URL||process.env.WEBHOOK_URL||"http://agent:8889",F=(process.env.V2_SCHEDULER_URL||process.env.SCHEDULER_URL||"").replace(/\/+$/,""),G={barracuda:"agent_3001ky0z8wq0fht8xyb0tnkdksdz",jaguar:"agent_4201ky0zhwn4fz7bwy9767wt6g3t",magnus:"agent_5601ky0ymahreyft2xz9xht0dj4v",palladin:"agent_0001ky7mxx2ce4pseeyn6wrtnrz8",panda:"agent_4701ky0xkz89f8t993tmg5t8t23r",titan:"agent_2501ky0x8t39fh5ske8tz3148b26",vixen:"agent_6701ky0nfavke0ysrpj5v38m1cry",volt:"agent_4101ky97n2pze4p8ax3dgb3hbc3c"},H=[{id:"barracuda",name:"Barracuda",img:"/static/robopark/barracuda.png"},{id:"jaguar",name:"Jaguar",img:"/static/robopark/jaguar.png"},{id:"magnus",name:"Magnus",img:"/static/robopark/magnus.jpg"},{id:"palladin",name:"Paladin",img:"/static/robopark/titan.jpg"},{id:"panda",name:"RoboPanda",img:"/static/robopark/panda.png"},{id:"titan",name:"Titan",img:"/static/robopark/titan.jpg"},{id:"vixen",name:"RoboVixen",img:"/static/robopark/bmw.png"},{id:"volt",name:"Volt",img:"/static/robopark/volt.png"}];function I(a){return String(a||"").toLowerCase().replace(/\bvoice\b/g,"").replace(/^robo/,"").replace(/[^a-z0-9]/g,"").replace(/^paladin$/,"palladin").replace(/^ronin$/,"panda")}function J(a){let b=[a.id,a.display_name,a.name].map(I);return a.elevenlabs_agent_id||b.map(a=>G[a]).find(Boolean)||null}function K(a,b=[]){let c=[...b,...a.characters||[]],d=new Set;return[...H.map(a=>{let b=new Set([I(a.id),I(a.name)]),e=c.find(a=>!d.has(a)&&[a.id,a.name,a.display_name].some(a=>b.has(I(a))));e&&d.add(e);let f={...a,...e||{}};return{...f,canonical_id:a.id,display_name:f.display_name||a.name,voice_stack_id:f.voice_stack_id||f.id,img:f.img||a.img,elevenlabs_agent_id:J(f)||G[a.id],binding_source:e?.elevenlabs_agent_id?"scheduler":"verified-session-ledger"}}),...c.filter(a=>!d.has(a)).map(a=>({...a,display_name:a.display_name||a.name,voice_stack_id:a.voice_stack_id||a.id,elevenlabs_agent_id:J(a),binding_source:a.elevenlabs_agent_id?"scheduler":J(a)?"verified-session-ledger":null}))]}async function L(a){try{let b=await fetch(`${F}/api/character-presets`,{cache:"no-store",signal:AbortSignal.timeout(3e3)});if(!b.ok)throw Error(`scheduler returned ${b.status}`);let c=await b.json(),d=Array.isArray(c)?c:Array.isArray(c?.presets)?c.presets:[];return u.NextResponse.json(K(a,d),{headers:{"cache-control":"no-store","x-data-source":"scheduler+durable-character-catalog"}})}catch{return u.NextResponse.json(K(a),{headers:{"cache-control":"no-store","x-data-source":"durable-character-catalog"}})}}async function M(a){let b=process.env.ROBOPARK_DEVICE_TOKEN||process.env.ROBOPARK_FLEET_TOKEN;if(F&&b)try{await fetch(`${F}/api/transcript-ledger/ingest`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${b}`},body:JSON.stringify(a),signal:AbortSignal.timeout(8e3)})}catch{}}async function N(a){let{LIVEKIT_API_KEY:b,LIVEKIT_API_SECRET:c}=process.env;if(!b||!c)return u.NextResponse.json({error:"LiveKit browser-call signing is unavailable"},{status:503});let d=await a.json().catch(()=>({})),e="string"==typeof d.character_preset_id?d.character_preset_id:"",f=await (0,x.U)(),g=(f.characters||[]).find(a=>a.id===e);if(!g)return u.NextResponse.json({error:"Character preset was not found"},{status:404});let h=crypto.randomUUID().replaceAll("-",""),i=`browser-test-${h}`,j=`operator:${h}`,k=crypto.randomUUID().replaceAll("-",""),l=new v.mk(b,c,{identity:j,name:"string"==typeof d.client_name&&d.client_name.trim()?d.client_name.trim().slice(0,80):"RoboPark Operator",metadata:JSON.stringify({character_id:e,voice_stack_id:"string"==typeof d.voice_stack_id?d.voice_stack_id:e,participant_role:"operator_test"}),ttl:"30m"});return l.addGrant({room:i,roomJoin:!0,canPublish:!0,canPublishData:!0,canSubscribe:!0}),l.roomConfig=new w.w7_({emptyTimeout:30,departureTimeout:2,agents:[new w.JsN({agentName:"",metadata:JSON.stringify({mode:"browser_test"})})]}),await M({source:"robovoice",engine:"robovoice",engine_conversation_id:i,robot_id:"operator-call",character_id:e,model_provider:g.llm_provider||f.llm_provider,model_name:g.ollama_model||g.groq_model||f.ollama_model||f.groq_model,started_at:new Date().toISOString(),labels:["browser-call"],metadata:{room_name:i,voice_stack_id:"string"==typeof d.voice_stack_id?d.voice_stack_id:e},turns:[]}),(0,B.Qy)({session_id:i,robot_id:null,character_id:e,character_name:g.name||e,engine:"robovoice",room_name:i,source:"browser-test",started_at:new Date().toISOString()}),u.NextResponse.json({session_id:i,event_token:k,server_url:function(a){let b=process.env.LIVEKIT_PUBLIC_URL||process.env.NEXT_PUBLIC_LIVEKIT_URL;if(b&&"auto"!==b)return b;let c=new URL(a.url);return`${"https:"===c.protocol?"wss":"ws"}://${c.host}`}(a),token:await l.toJwt(),room_name:i,character:{id:g.id,name:g.name}},{headers:{"Cache-Control":"no-store"}})}async function O(a){let b,c=String(a.agent_id||"").trim();if(!/^agent_[A-Za-z0-9]{8,80}$/.test(c))return u.NextResponse.json({error:"A valid ElevenLabs agent binding is required"},{status:400});try{let d="string"==typeof a.branch_id&&/^agtbrch_[A-Za-z0-9]+$/.test(a.branch_id)?`?branch_id=${encodeURIComponent(a.branch_id)}`:"";b=await fetch(`${E.replace(/\/$/,"")}/elevenlabs/agents/${encodeURIComponent(c)}/signed-url${d}`,{cache:"no-store",signal:AbortSignal.timeout(2e4)})}catch(c){let a=c instanceof Error?c.name:"",b="TimeoutError"===a||"AbortError"===a;return u.NextResponse.json({error:b?"Voice signing timed out while contacting the agent service":`Voice signing service is unreachable: ${c instanceof Error?c.message:String(c)}`,retryable:!0},{status:b?504:502,headers:{"cache-control":"no-store"}})}let d=await b.json().catch(()=>({}));if(!b.ok||!d.signed_url)return u.NextResponse.json({error:d.detail||d.error||`ElevenLabs signing returned ${b.status}`},{status:b.status>=400?b.status:502});let e=`browser-test-${crypto.randomUUID().replaceAll("-","")}`,f=await (0,x.U)(),g=a.robot_id?(0,C._1)(f,{robotId:a.robot_id,characterId:a.character_preset_id}):null;return(0,B.Qy)({session_id:e,robot_id:g,character_id:a.character_preset_id||null,character_name:Q(f)[a.character_preset_id||""]||a.character_preset_id||null,engine:"elevenlabs",room_name:g?`robopark-${g}`:null,source:"character-link",started_at:new Date().toISOString()}),u.NextResponse.json({session_id:e,event_token:crypto.randomUUID().replaceAll("-",""),signed_url:d.signed_url,agent_id:c,branch_id:a.branch_id||null,robot_id:a.robot_id||null,robot_video_ref:a.robot_id||null,character_id:a.character_preset_id||null,source:"frontend-compatibility-fallback"},{headers:{"cache-control":"no-store"}})}async function P(a){if(!a.startsWith("browser-test-"))return u.NextResponse.json({error:"Invalid browser-call session"},{status:400});let{LIVEKIT_URL:b,LIVEKIT_API_KEY:c,LIVEKIT_API_SECRET:d}=process.env;if(b&&c&&d){let e=new v.iz(b.replace(/^ws/,"http"),c,d);await e.deleteRoom(a).catch(()=>void 0)}return u.NextResponse.json({status:"ended",session_id:a})}function Q(a){return Object.fromEntries((a.characters||[]).map(a=>[a.id,a.name]))}let R=["name","description","system_prompt","voice_stack_id","motors","nx","ny","img","elevenlabs_agent_id","elevenlabs_first_message","tts_voice_elevenlabs","prompt_editor_model","prompt_editor_precision"];async function S(a){let b=await fetch(`${E.replace(/\/$/,"")}/settings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:{characters:a}}),signal:AbortSignal.timeout(12e3)});if(!b.ok)throw Error(`Settings registry returned ${b.status}`)}function T(a){let b="string"==typeof a?a.trim().toLowerCase():"";if(!/^[a-z0-9][a-z0-9_-]{0,47}$/.test(b))throw Error("Character ID must use lowercase letters, numbers, hyphens, or underscores");return b}function U(a,b){for(let c of R)void 0!==b[c]&&(a[c]=b[c])}function V(a,b){let c=a.stt_provider||b.stt_provider||"speaches",d="groq"===c?a.stt_model_groq||b.stt_model_groq||"whisper-large-v3-turbo":a.stt_model_speaches||b.stt_model_speaches||"Systran/faster-whisper-small",e=a.llm_provider||b.llm_provider||"ollama",f="groq"===e?a.groq_model||b.groq_model||"":a.ollama_model||b.ollama_model||"";return{...a,name:`${a.name} voice`,stt_provider:c,stt_model:d,stt_language:a.stt_language||b.stt_language||"auto",llm_provider:e,llm_model:f,tts_provider:a.tts_provider||"configured default",tts_voice:a.tts_voice_elevenlabs||a.tts_voice_kokoro||"",voice_id:a.tts_voice_elevenlabs||a.tts_voice_kokoro||""}}async function W(a){let{LIVEKIT_URL:b,LIVEKIT_API_KEY:c,LIVEKIT_API_SECRET:d}=process.env;if(!b||!c||!d)return[];let e=new v.iz(b.replace(/^ws/,"http"),c,d),f=a.device_registry||{},g=Q(a),h=(await e.listRooms()).filter(a=>a.name.startsWith("robopark-")),i=new Map(await Promise.all(h.map(async a=>{let b=a.name.slice(9),c=await e.listParticipants(a.name).catch(()=>[]),d=c.find(a=>a.identity.startsWith(`robopanda_${b}_`)),f=c.find(a=>a.identity.startsWith("agent-")||4===Number(a.kind)),g=!!d?.tracks?.some(a=>2===Number(a.source)&&!a.muted),h=!!d?.tracks?.some(a=>1===Number(a.source)&&!a.muted);return[b,{room:a,physical:d,agent:f,microphone:g,camera:h}]}))),j=(0,B.f6)();return[...Object.keys(f).map(b=>{let c=i.get(b),d=c?.room,e=j.get(b)||null,h=!!e,k=g[f[b]?.character_id||""],l=!!c?.physical,m=!!c?.microphone,n=!!c?.camera,o=!!c?.agent,p=!!f[b]?.maintenance,q=f[b]?.voice_engine==="elevenlabs"?"elevenlabs":"robovoice",r=l&&(!m||!n||!o),s=a.stt_provider||"speaches",t="groq"===s?a.stt_model_groq:a.stt_model_speaches;return{id:b,robot_id:b,name:k||f[b]?.name||`RoboPark ${b.slice(0,6)}`,character_id:f[b]?.character_id||null,character_name:k||null,voice_engine:q,elevenlabs_agent_id:f[b]?.elevenlabs_agent_id||null,elevenlabs_configured:!!f[b]?.elevenlabs_agent_id,conversation_name:f[b]?.conversation_name||b,camera_url:f[b]?.camera_url||`/fed/media/robots/${encodeURIComponent(b)}/video_feed`,maintenance:p,maintenance_note:f[b]?.maintenance_note||"",status:p?"maintenance":l?r?"degraded":"online":h?"online":"offline",connection_status:l||h?"online":"offline",readiness_code:p?"maintenance":l?r?"degraded":"in_session":h?"in_session":"offline",readiness_message:p?f[b]?.maintenance_note||"Marked for maintenance":!l&&h?"Managed character call is active on this device":l?m?n?o?"Physical kiosk, media and voice worker connected":"Voice worker is not attached":"Camera is not publishing":"Microphone is not publishing":"No physical kiosk participant",room_name:d?.name||`robopark-${b}`,active_session:l||h,monitoring_session:h&&!l,in_session:l&&o||h,call_source:e?.source||null,call_started_at:e?.started_at||null,camera:n,microphone:m,voice_worker:o,hardware:f[b]?.hardware||null,effective_config:{character_id:f[b]?.character_id||null,character_name:k||null,voice_engine:q,elevenlabs_agent_id:f[b]?.elevenlabs_agent_id||null,stt_provider:s,stt_model:t,stt_language:a.stt_language||"auto",hardware_selection:f[b]?.hardware?.desired||f[b]?.hardware?.observed?.selected||null},current_session_id:l?d?.sid:e?e.session_id:null,current_stage:{stage:p?"maintenance":!l&&h?"conversation":l?m?o?"stt_listening":"voice_worker":"microphone_published":"offline",status:p||r?"blocked":l||h?"active":"waiting",label:p?"Maintenance mode":!l&&h?"Managed character call active":l?m?n?o?"Listening for visitor speech":"Waiting for voice worker":"Camera blocked":"Microphone blocked":"Physical kiosk offline"}}}),...Array.from(i.entries()).filter(([a])=>!f[a]).map(([a,b])=>({id:a,robot_id:a,name:`RoboPark ${a.slice(0,6)}`,status:b.physical?"unregistered":"ghost",room_name:b.room.name,active_session:!!b.physical,camera:b.camera,microphone:b.microphone}))]}async function X(a){if(!F)return null;let b=await fetch(`${F}${a}`,{cache:"no-store",signal:AbortSignal.timeout(15e3)});if(!b.ok)throw Error(`Scheduler ${a} returned ${b.status}`);return b.json()}async function Y(a){let[b,c,d]=await Promise.all([W(a).catch(()=>[]),X("/api/devices").catch(()=>[]),X("/api/sessions?active_only=true&limit=200").catch(()=>[])]),e=new Map;for(let a of Array.isArray(c)?c:[]){let b=String(a.id||a.device_id||a.robot_id||"");b&&e.set(b,{...a,id:b,robot_id:b})}for(let a of b){let b=String(a.id||a.robot_id||"");b&&e.set(b,{...e.get(b)||{},...a,id:b,robot_id:b})}for(let a of Array.isArray(d)?d:[]){let b=String(a.robot_id||"");if(!b||"operator-call"===b)continue;let c=e.get(b)||{id:b,robot_id:b,name:a.robot_name||a.character_name||b};e.set(b,{...c,character_id:a.character_id||c.character_id||null,character_name:a.character_name||c.character_name||null,voice_engine:a.engine||c.voice_engine||"elevenlabs",status:"online",connection_status:"online",readiness_code:"in_session",readiness_message:"Managed character call is active",active_session:!0,in_session:!0,monitoring_session:!0,current_session_id:a.session_id||a.id,room_name:a.room_name||c.room_name,current_stage:{stage:"conversation",status:"active",label:"Managed character call active"},call_source:a.source||"control_center",last_activity_at:a.last_activity_at||c.last_activity_at})}return Array.from(e.values())}async function Z(a){let b=await Y(a),c=b.filter(a=>a.active_session).map(a=>({id:a.current_session_id||a.room_name,session_id:a.current_session_id||a.room_name,robot_id:a.id,robot_name:a.name,character_id:a.character_id,character_name:a.character_name,room_name:a.room_name,started_at:a.call_started_at||a.started_at||new Date().toISOString(),status:"active",voice_engine:a.voice_engine||"robovoice",camera_url:a.camera_url,source:a.call_source||("elevenlabs"===a.voice_engine?"elevenlabs-direct":"livekit-v2")})),d=new Set(c.map(a=>a.session_id));for(let a of(0,B.i0)())!d.has(a.session_id)&&(a.robot_id&&b.some(b=>b.id===a.robot_id&&b.active_session)||c.push({id:a.session_id,session_id:a.session_id,robot_id:a.robot_id||"operator-call",robot_name:a.character_name||a.robot_id||"Operator call",character_id:a.character_id,character_name:a.character_name,room_name:a.room_name||a.session_id,started_at:a.started_at,status:"active",voice_engine:a.engine,camera_url:a.robot_id?`/fed/media/robots/${encodeURIComponent(a.robot_id)}/video_feed`:null,source:a.source}));return c}async function $(a,b){let c=(await b.params).path.join("/"),d=new URL(a.url).search;if("character-presets"===c){let a=await (0,x.U)();return F?L(a):u.NextResponse.json(K(a),{headers:{"cache-control":"no-store","x-data-source":"durable-character-catalog"}})}if("elevenlabs/agents"===c)return u.NextResponse.json({agents:H.map(a=>({agent_id:G[a.id],name:a.name,character_id:a.id})),source:"verified-session-ledger"},{headers:{"cache-control":"no-store"}});let e=c.match(/^character-presets\/([^/]+)$/);if(e){let a=decodeURIComponent(e[1]),b=K(await (0,x.U)()).find(b=>b.id===a||b.canonical_id===a||I(b.id)===I(a)||I(b.display_name||b.name)===I(a));return b?u.NextResponse.json(b,{headers:{"cache-control":"no-store","x-data-source":"durable-character-catalog"}}):u.NextResponse.json({error:"Character preset not found"},{status:404})}let f=new Set(["voice-stacks","settings","sessions/stats","history","servers"]);if(F&&(f.has(c)||c.startsWith("voices/")))return z(`/api/${c}`,d);let g=await (0,x.U)();if("voice-stacks"===c)return u.NextResponse.json((g.characters||[]).map(a=>({...a,display_name:a.name,voice_stack_id:a.voice_stack_id||a.id,img:a.img||`/static/robopark/${"robopanda"===a.id?"panda":a.name.toLowerCase().includes("vixen")?"bmw":a.id}.png`})).map(a=>V(a,g)));if(c.startsWith("voices/")){let a=c.slice(7);try{let b=await fetch(`${E.replace(/\/$/,"")}/voices?provider=${encodeURIComponent(a)}`,{cache:"no-store",signal:AbortSignal.timeout(12e3)});if(!b.ok)throw Error(`voice provider returned ${b.status}`);let c=await b.json(),d=Array.isArray(c)?c:c.voices||[];return u.NextResponse.json({provider:a,source:"elevenlabs"===a?"elevenlabs-account-live":"production-provider-live",count:d.length,voices:d})}catch(b){return u.NextResponse.json({provider:a,source:"provider-error",count:0,voices:[],warning:b instanceof Error?b.message:"Voice catalog unavailable"},{status:502})}}if("devices"===c){if(F){let a=await z("/api/devices",d);if(a.ok)return a}return u.NextResponse.json(function(a){let b=a.device_registry||{},c=Q(a);return Object.entries(b).map(([a,b])=>({id:a,device_id:a,name:b.name||`RoboPark ${a.slice(0,6)}`,device_role:b.device_role||"combined",character_id:b.character_id||null,character_name:c[b.character_id||""]||null,status:b.maintenance?"maintenance":"enrolled",connection_status:"offline",voice_engine:b.voice_engine||"robovoice",camera_url:b.camera_url||`/fed/media/robots/${encodeURIComponent(a)}/video_feed`,maintenance:!!b.maintenance,maintenance_note:b.maintenance_note||"",control:b.control||{},source:"local-device-registry"}))}(g),{headers:{"cache-control":"no-store","x-data-source":"local-device-registry"}})}if("robots"===c)return u.NextResponse.json(await Y(g));if("settings"===c)return z("/api/settings",d);if("knowledge-documents"===c)return u.NextResponse.json([]);if("knowledge/models"===c)return u.NextResponse.json({configured:!1,models:[]});if("sessions"===c)return"true"!==new URL(a.url).searchParams.get("active_only")?F?z("/api/sessions",d):u.NextResponse.json([]):u.NextResponse.json(await Z(g));if("sessions/stats"===c)return z("/api/sessions/stats",d);if("telemetry"===c){let a=await Y(g);return u.NextResponse.json({robots:a,totals:{online:a.filter(a=>"online"===a.status).length}})}if("history"===c)return u.NextResponse.json([]);if("servers"===c)return z("/api/servers",d);let h=c.match(/^characters\/([^/]+)\/deployment$/);if(h){let a=decodeURIComponent(h[1]),b=await X("/api/devices").catch(()=>[]),c=(Array.isArray(b)?b:[]).filter(b=>String(b.character_id||b.character_preset_id||"").toLowerCase()===a.toLowerCase()),d=a=>String(a.device_role||a.role||"combined").toLowerCase();return u.NextResponse.json({character_id:a,voice_vision_boxes:c.filter(a=>["voice_vision","combined"].includes(d(a))),motor_nodes:c.filter(a=>["motor","combined"].includes(d(a))),combined_nodes:c.filter(a=>"combined"===d(a)),control_nodes:c,source:"frontend-compatibility-fallback"},{headers:{"cache-control":"no-store"}})}let i=c.match(/^robots\/([^/]+)\/pipeline-status$/);if(i){let a=decodeURIComponent(i[1]),b=(await W(g)).find(b=>b.id===a||b.name===a);return b?u.NextResponse.json({robot_id:b.id,readiness_code:b.readiness_code,readiness_message:b.readiness_message,current_stage:b.current_stage,camera:b.camera,microphone:b.microphone,voice_worker:b.voice_worker,hardware:b.hardware,effective_config:b.effective_config}):u.NextResponse.json({error:"Robot not found"},{status:404})}let j=c.match(/^robots\/([^/]+)\/voice-config$/);if(j){let a=decodeURIComponent(j[1]),b=g.device_registry?.[a];if(!b)return u.NextResponse.json({error:"Robot is not registered"},{status:404});let c=b.voice_stack_id||b.character_id||"",d=(g.characters||[]).find(a=>a.id===c);if(!d)return u.NextResponse.json({error:"Robot has no valid voice stack assignment"},{status:409});let e=V(d,g);return u.NextResponse.json({character_id:b.character_id||null,character_name:Q(g)[b.character_id||""]||null,voice_stack_id:c,voice_stack:e})}return"voice-stacks"===c||"character-presets"===c?u.NextResponse.json([]):u.NextResponse.json({error:"V2 endpoint is not implemented",path:c},{status:501})}async function _(a,b){let c=(await b.params).path.join("/");if("character-presets"===c)try{let b=await (0,x.U)(),c=await a.json(),d=T(c.id||c.name),e=structuredClone(b.characters||[]);if(e.some(a=>a.id===d))return u.NextResponse.json({error:"Character ID already exists"},{status:409});let f={id:d,name:String(c.name||d).trim()};return U(f,c),e.push(f),await S(e),u.NextResponse.json(f,{status:201})}catch(a){return u.NextResponse.json({error:a instanceof Error?a.message:"Character creation failed"},{status:400})}if("sessions/voice-call"===c&&!F)return N(a);let d=c.match(/^sessions\/(browser-test-[a-f0-9]+)\/(joined|transcript|end|heartbeat)$/);if(d){let b=d[1],c=d[2];if("heartbeat"===c)return u.NextResponse.json({status:(0,B.i$)(b)?"ok":"expired",session_id:b});if("joined"===c){let c=await a.json().catch(()=>({}));return(0,B.i$)(b,{connected:!0,conversation_id:"string"==typeof c.conversation_id?c.conversation_id:null}),u.NextResponse.json({status:"ok",session_id:b})}if("end"===c)return(0,B.cJ)(b),await M({source:"robovoice",engine:"robovoice",engine_conversation_id:b,ended_at:new Date().toISOString(),labels:["browser-call"],turns:[]}),P(b);if("transcript"===c){(0,B.i$)(b);let c=await a.json().catch(()=>({})),d="string"==typeof c.text?c.text.trim():"";d&&await M({source:"robovoice",engine:"robovoice",engine_conversation_id:b,robot_id:"operator-call",started_at:"string"==typeof c.timestamp?c.timestamp:new Date().toISOString(),labels:["browser-call"],turns:[{role:"string"==typeof c.role?c.role:"user",text:d,sequence:"number"==typeof c.sequence?c.sequence:void 0,timestamp:"string"==typeof c.timestamp?c.timestamp:new Date().toISOString(),source_id:`${b}:${"number"==typeof c.sequence?c.sequence:crypto.randomUUID()}`}]})}return u.NextResponse.json({status:"ok",session_id:d[1]})}if(!("sessions/voice-call"===c||/^sessions\/[^/]+\/(joined|transcript|end|heartbeat|keepalive)$/.test(c)||/^robots\/[^/]+\/end-session$/.test(c)))return u.NextResponse.json({error:"Canary control actions are read-only"},{status:409});if(!F)return u.NextResponse.json({error:"V2 scheduler is not configured"},{status:503});let e=await a.text();try{let b=new URL(a.url),d=`${F.replace(/\/$/,"")}/api/${c}${b.search}`,f={"content-type":a.headers.get("content-type")||"application/json"},g=a.headers.get("x-robopark-session-token");g&&(f["x-robopark-session-token"]=g);let h=await fetch(d,{method:"POST",headers:f,body:e||void 0,signal:AbortSignal.timeout(12e3)});if("sessions/voice-call"===c&&(404===h.status||501===h.status))return O(JSON.parse(e||"{}"));return new Response(h.body,{status:h.status,headers:{"content-type":h.headers.get("content-type")||"application/json","x-data-source":"v2-scheduler"}})}catch(a){if("sessions/voice-call"===c)return O(JSON.parse(e||"{}"));return u.NextResponse.json({error:a instanceof Error?a.message:"V2 scheduler action failed"},{status:503})}}async function aa(a,b){let c=(await b.params).path.join("/");if("settings"===c){if(!F)return u.NextResponse.json({error:"Scheduler is not configured"},{status:503});try{let b=await fetch(`${F}/api/settings`,{method:"PUT",headers:{"content-type":a.headers.get("content-type")||"application/json"},body:await a.text(),signal:AbortSignal.timeout(12e3)});return new Response(b.body,{status:b.status,headers:{"content-type":b.headers.get("content-type")||"application/json","cache-control":"no-store","x-data-source":"scheduler"}})}catch(a){return u.NextResponse.json({error:a instanceof Error?a.message:"Scheduler settings update failed"},{status:503})}}let d=c.match(/^character-presets\/([^/]+)$/);if(d)try{let b=T(decodeURIComponent(d[1])),c=await (0,x.U)(),e=structuredClone(c.characters||[]),f=e.find(a=>a.id===b);if(!f)return u.NextResponse.json({error:"Character preset not found"},{status:404});let g=await a.json();return U(f,g),await S(e),u.NextResponse.json(f)}catch(a){return u.NextResponse.json({error:a instanceof Error?a.message:"Character update failed"},{status:400})}let e=c.match(/^robots\/([^/]+)\/voice-config$/);if(e){let b=decodeURIComponent(e[1]),c=await (0,x.U)(),d=c.device_registry?.[b];if(!d?.character_id)return u.NextResponse.json({error:"Robot has no assigned character"},{status:409});let f=await a.json(),g="string"==typeof f.voice_stack_id?f.voice_stack_id:d.voice_stack_id||d.character_id,h=structuredClone(c.characters||[]),i=h.find(a=>a.id===g),j=h.find(a=>a.id===d.character_id);if(!i||!j)return u.NextResponse.json({error:"Selected voice stack or robot character was not found"},{status:404});for(let a of["stt_provider","stt_model_groq","stt_model_speaches","stt_language","llm_provider","groq_model","ollama_model","llm_api_key","temperature","num_ctx","tts_provider","tts_voice_elevenlabs","tts_voice_kokoro","tts_language","max_turns","min_endpointing_delay","allow_interruptions","wake_word_enabled","wake_word_model","wake_word_threshold","wake_word_timeout"])void 0===i[a]?delete j[a]:j[a]=i[a];let k=await fetch(`${E.replace(/\/$/,"")}/settings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:{characters:h}})});if(!k.ok)return u.NextResponse.json({error:`Settings registry returned ${k.status}`},{status:502});await (0,A.i)(a=>{let c=a[b];if(!c)throw Error("DEVICE_NOT_REGISTERED");return a[b]={...c,voice_stack_id:g,updated_at:new Date().toISOString()},a[b]});let l=V(j,{...c,characters:h});return u.NextResponse.json({character_id:d.character_id,character_name:j.name,voice_stack_id:g,voice_stack:l})}let f=c.match(/^voice-stacks\/([^/]+)$/);if(!f)return u.NextResponse.json({error:"V2 control action is not implemented",path:c},{status:501});let g=decodeURIComponent(f[1]),h=await (0,x.U)(),i=structuredClone(h.characters||[]),j=i.find(a=>a.id===g);if(!j)return u.NextResponse.json({error:"Character voice stack not found"},{status:404});let k=await a.json();for(let a of("string"==typeof k.tts_provider&&(j.tts_provider=k.tts_provider),"string"==typeof k.tts_voice&&k.tts_voice&&("elevenlabs"===(k.tts_provider||j.tts_provider)?j.tts_voice_elevenlabs=k.tts_voice:j.tts_voice_kokoro=k.tts_voice),["stt_provider","stt_language","llm_provider","temperature","num_ctx","max_turns","min_endpointing_delay","allow_interruptions","wake_word_enabled","wake_word_model","wake_word_threshold","wake_word_timeout"]))void 0!==k[a]&&(j[a]=k[a]);"string"==typeof k.stt_model&&("groq"===(k.stt_provider||j.stt_provider||h.stt_provider)?j.stt_model_groq=k.stt_model:j.stt_model_speaches=k.stt_model),"string"==typeof k.llm_model&&("groq"===(k.llm_provider||j.llm_provider||h.llm_provider)?j.groq_model=k.llm_model:j.ollama_model=k.llm_model);let l=await fetch(`${E.replace(/\/$/,"")}/settings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:{characters:i}})});return l.ok?u.NextResponse.json(V(j,h)):u.NextResponse.json({error:`Settings registry returned ${l.status}`},{status:502})}async function ab(){return u.NextResponse.json({error:"Canary control actions are read-only"},{status:409})}async function ac(a,b){let c=(await b.params).path.join("/").match(/^character-presets\/([^/]+)$/);if(!c)return u.NextResponse.json({error:"Canary control actions are read-only"},{status:409});try{let a=T(decodeURIComponent(c[1])),b=await (0,x.U)(),d=Object.entries(b.device_registry||{}).find(([,b])=>b.character_id===a);if(d)return u.NextResponse.json({error:`Character is assigned to robot ${d[0]}`},{status:409});let e=structuredClone(b.characters||[]),f=e.filter(b=>b.id!==a);if(f.length===e.length)return u.NextResponse.json({error:"Character preset not found"},{status:404});return await S(f),u.NextResponse.json({ok:!0,id:a})}catch(a){return u.NextResponse.json({error:a instanceof Error?a.message:"Character deletion failed"},{status:400})}}let ad=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/robopark/api/[...path]/route",pathname:"/robopark/api/[...path]",filename:"route",bundlePath:"app/robopark/api/[...path]/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\robopark\\api\\[...path]\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:ae,workUnitAsyncStorage:af,serverHooks:ag}=ad;function ah(){return(0,g.patchFetch)({workAsyncStorage:ae,workUnitAsyncStorage:af})}async function ai(a,b,c){var d;let e="/robopark/api/[...path]/route";"/index"===e&&(e="/");let g=await ad.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:y,routerServerContext:z,isOnDemandRevalidate:A,revalidateOnlyGenerated:B,resolvedPathname:C}=g,D=(0,j.normalizeAppPath)(e),E=!!(y.dynamicRoutes[D]||y.routes[C]);if(E&&!x){let a=!!y.routes[C],b=y.dynamicRoutes[D];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let F=null;!E||ad.isDev||x||(F="/index"===(F=C)?"/":F);let G=!0===ad.isDev||!E,H=E&&!G,I=a.method||"GET",J=(0,i.getTracer)(),K=J.getActiveScopeSpan(),L={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:G,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:H,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>ad.onRequestError(a,b,d,z)},sharedContext:{buildId:u}},M=new k.NodeNextRequest(a),N=new k.NodeNextResponse(b),O=l.NextRequestAdapter.fromNodeNextRequest(M,(0,l.signalFromNodeResponse)(b));try{let d=async c=>ad.handle(O,L).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=J.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${I} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${I} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&A&&B&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=L.renderOpts.fetchMetrics;let i=L.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=L.renderOpts.collectedTags;if(!E)return await (0,o.I)(M,N,e,L.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==L.renderOpts.collectedRevalidate&&!(L.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&L.renderOpts.collectedRevalidate,d=void 0===L.renderOpts.collectedExpire||L.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:L.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await ad.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:H,isOnDemandRevalidate:A})},z),b}},l=await ad.handleResponse({req:a,nextConfig:w,cacheKey:F,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:B,responseGenerator:k,waitUntil:c.waitUntil});if(!E)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",A?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&E||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(M,N,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};K?await g(K):await J.withPropagatedContext(a.headers,()=>J.trace(m.BaseServerSpan.handleRequest,{spanName:`${I} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":I,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await ad.onRequestError(a,b,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:H,isOnDemandRevalidate:A})}),E)throw b;return await (0,o.I)(M,N,new Response(null,{status:500})),null}}},51455:a=>{"use strict";a.exports=require("node:fs/promises")},57975:a=>{"use strict";a.exports=require("node:util")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},75310:(a,b,c)=>{"use strict";c.d(b,{Qy:()=>f,cJ:()=>h,f6:()=>j,i$:()=>g,i0:()=>i});let d=new Map;function e(){let a=Date.now()-1e5;for(let[b,c]of d)c.last_seen<a&&d.delete(b)}function f(a){e(),d.set(a.session_id,{conversation_id:null,connected:!1,...a,last_seen:Date.now()})}function g(a,b){let c=d.get(a);return!!c&&(d.set(a,{...c,...b,last_seen:Date.now()}),!0)}function h(a){return d.delete(a)}function i(){return e(),Array.from(d.values())}function j(){let a=new Map;for(let b of i()){if(!b.robot_id)continue;let c=a.get(b.robot_id);c&&(c.connected||!b.connected)||a.set(b.robot_id,b)}return a}},76760:a=>{"use strict";a.exports=require("node:path")},77598:a=>{"use strict";a.exports=require("node:crypto")},78335:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},96487:()=>{},99435:(a,b,c)=>{"use strict";c.d(b,{U:()=>l});var d=c(51455),e=c(76760);let f=(process.env.WEBHOOK_URL||"http://agent:8889").replace(/\/+$/,""),g=null,h=0,i=null;function j(a,b){return{...a,characters:Array.isArray(a.characters)?a.characters:[],device_registry:a.device_registry&&"object"==typeof a.device_registry?a.device_registry:{},registry_source:b}}async function k(){for(let a of[process.env.CAAL_SETTINGS_PATH,process.env.ROBOVOICE_SETTINGS_PATH,(0,e.resolve)(process.cwd(),"..","settings.json"),(0,e.resolve)(process.cwd(),"settings.json")].filter(a=>!!a))try{let b=JSON.parse(await (0,d.readFile)(a,"utf8"));return j(b,"persisted-snapshot")}catch{}return j({},"empty")}async function l(){if(g&&Date.now()<h)return g;if(i)return i;i=(async()=>{try{let a=await fetch(`${f}/settings`,{cache:"no-store",signal:AbortSignal.timeout(1500)});if(!a.ok)throw Error(`Settings registry returned ${a.status}`);let b=await a.json();return g=null,h=0,j(b.settings||b,"live-agent")}catch{return g=await k(),h=Date.now()+15e3,g}})();try{return await i}finally{i=null}}}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,1428,1692,8755],()=>b(b.s=46131));module.exports=c})();
|
|
1
|
+
(()=>{var a={};a.id=1426,a.ids=[1426],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},3787:(a,b,c)=>{"use strict";c.d(b,{i:()=>g});let d=(process.env.WEBHOOK_URL||"http://agent:8889").replace(/\/+$/,""),e=Promise.resolve();async function f(a){let b=await fetch(`${d}/settings`,{cache:"no-store",signal:AbortSignal.timeout(8e3)});if(!b.ok)throw Error(`Settings registry returned ${b.status}`);let c=await b.json(),e=structuredClone(c.settings?.device_registry||{}),f=await a(e),g=await fetch(`${d}/settings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:{device_registry:e}}),signal:AbortSignal.timeout(8e3)});if(!g.ok)throw Error(`Settings registry update returned ${g.status}`);return f}function g(a){let b=e.then(()=>f(a),()=>f(a));return e=b.then(()=>void 0,()=>void 0),b}},4573:a=>{"use strict";a.exports=require("node:buffer")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},24008:(a,b,c)=>{"use strict";function d(a,b){let c=a.device_registry||{},d=String(b.robotId||"").trim(),g=String(b.characterId||"").trim();for(let a of[d,g])if(a&&c[a])return f(a);for(let a of[d,g]){let b=e(a);if(!b)continue;let d=Object.entries(c).find(([,a])=>e(a?.character_id)===b);if(d)return f(d[0])}return f(d||g)}function e(a){return String(a||"").trim().toLowerCase().replace(/_heb$/,"")}function f(a){return a.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}c.d(b,{_1:()=>d})},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},46131:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>ai,patchFetch:()=>ah,routeModule:()=>ad,serverHooks:()=>ag,workAsyncStorage:()=>ae,workUnitAsyncStorage:()=>af});var d={};c.r(d),c.d(d,{DELETE:()=>ac,GET:()=>$,PATCH:()=>ab,POST:()=>_,PUT:()=>aa,dynamic:()=>D});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(10641),v=c(58755),w=c(58553),x=c(99435);let y=(process.env.V2_SCHEDULER_URL||process.env.SCHEDULER_URL||"http://192.168.1.14:8080").replace(/\/+$/,"");async function z(a,b=""){let c=b&&!a.includes("?")?b.startsWith("?")?b:`?${b}`:"";try{let b=await fetch(`${y}${a}${c}`,{cache:"no-store",signal:AbortSignal.timeout(12e3)});return new Response(b.body,{status:b.status,headers:{"content-type":b.headers.get("content-type")||"application/json","cache-control":"no-store","x-data-source":"robot-scheduler"}})}catch(a){return u.NextResponse.json({error:a instanceof Error?a.message:"Scheduler unavailable"},{status:503})}}var A=c(3787),B=c(75310),C=c(24008);let D="force-dynamic",E=process.env.V2_AGENT_URL||process.env.WEBHOOK_URL||"http://agent:8889",F=(process.env.V2_SCHEDULER_URL||process.env.SCHEDULER_URL||"").replace(/\/+$/,""),G={barracuda:"agent_3001ky0z8wq0fht8xyb0tnkdksdz",jaguar:"agent_4201ky0zhwn4fz7bwy9767wt6g3t",magnus:"agent_5601ky0ymahreyft2xz9xht0dj4v",palladin:"agent_0001ky7mxx2ce4pseeyn6wrtnrz8",panda:"agent_4701ky0xkz89f8t993tmg5t8t23r",titan:"agent_2501ky0x8t39fh5ske8tz3148b26",vixen:"agent_6701ky0nfavke0ysrpj5v38m1cry",volt:"agent_4101ky97n2pze4p8ax3dgb3hbc3c"},H=[{id:"barracuda",name:"Barracuda",img:"/static/robopark/barracuda.png"},{id:"jaguar",name:"Jaguar",img:"/static/robopark/jaguar.png"},{id:"magnus",name:"Magnus",img:"/static/robopark/magnus.jpg"},{id:"palladin",name:"Paladin",img:"/static/robopark/titan.jpg"},{id:"panda",name:"RoboPanda",img:"/static/robopark/panda.png"},{id:"titan",name:"Titan",img:"/static/robopark/titan.jpg"},{id:"vixen",name:"RoboVixen",img:"/static/robopark/bmw.png"},{id:"volt",name:"Volt",img:"/static/robopark/volt.png"}];function I(a){return String(a||"").toLowerCase().replace(/\bvoice\b/g,"").replace(/^robo/,"").replace(/[^a-z0-9]/g,"").replace(/^paladin$/,"palladin").replace(/^ronin$/,"panda")}function J(a){let b=[a.id,a.display_name,a.name].map(I);return a.elevenlabs_agent_id||b.map(a=>G[a]).find(Boolean)||null}function K(a,b=[]){let c=[...b,...a.characters||[]],d=new Set;return[...H.map(a=>{let b=new Set([I(a.id),I(a.name)]),e=c.find(a=>!d.has(a)&&[a.id,a.name,a.display_name].some(a=>b.has(I(a))));e&&d.add(e);let f={...a,...e||{}};return{...f,canonical_id:a.id,display_name:f.display_name||a.name,voice_stack_id:f.voice_stack_id||f.id,img:f.img||a.img,elevenlabs_agent_id:J(f)||G[a.id],binding_source:e?.elevenlabs_agent_id?"scheduler":"verified-session-ledger"}}),...c.filter(a=>!d.has(a)).map(a=>({...a,display_name:a.display_name||a.name,voice_stack_id:a.voice_stack_id||a.id,elevenlabs_agent_id:J(a),binding_source:a.elevenlabs_agent_id?"scheduler":J(a)?"verified-session-ledger":null}))]}async function L(a){try{let b=await fetch(`${F}/api/character-presets`,{cache:"no-store",signal:AbortSignal.timeout(3e3)});if(!b.ok)throw Error(`scheduler returned ${b.status}`);let c=await b.json(),d=Array.isArray(c)?c:Array.isArray(c?.presets)?c.presets:[];return u.NextResponse.json(K(a,d),{headers:{"cache-control":"no-store","x-data-source":"scheduler+durable-character-catalog"}})}catch{return u.NextResponse.json(K(a),{headers:{"cache-control":"no-store","x-data-source":"durable-character-catalog"}})}}async function M(a){let b=process.env.ROBOPARK_DEVICE_TOKEN||process.env.ROBOPARK_FLEET_TOKEN;if(F&&b)try{await fetch(`${F}/api/transcript-ledger/ingest`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${b}`},body:JSON.stringify(a),signal:AbortSignal.timeout(8e3)})}catch{}}async function N(a){let{LIVEKIT_API_KEY:b,LIVEKIT_API_SECRET:c}=process.env;if(!b||!c)return u.NextResponse.json({error:"LiveKit browser-call signing is unavailable"},{status:503});let d=await a.json().catch(()=>({})),e="string"==typeof d.character_preset_id?d.character_preset_id:"",f=await (0,x.U)(),g=(f.characters||[]).find(a=>a.id===e);if(!g)return u.NextResponse.json({error:"Character preset was not found"},{status:404});let h=crypto.randomUUID().replaceAll("-",""),i=`browser-test-${h}`,j=`operator:${h}`,k=crypto.randomUUID().replaceAll("-",""),l=new v.mk(b,c,{identity:j,name:"string"==typeof d.client_name&&d.client_name.trim()?d.client_name.trim().slice(0,80):"RoboPark Operator",metadata:JSON.stringify({character_id:e,voice_stack_id:"string"==typeof d.voice_stack_id?d.voice_stack_id:e,participant_role:"operator_test"}),ttl:"30m"});return l.addGrant({room:i,roomJoin:!0,canPublish:!0,canPublishData:!0,canSubscribe:!0}),l.roomConfig=new w.w7_({emptyTimeout:30,departureTimeout:2,agents:[new w.JsN({agentName:"",metadata:JSON.stringify({mode:"browser_test"})})]}),await M({source:"robovoice",engine:"robovoice",engine_conversation_id:i,robot_id:"operator-call",character_id:e,model_provider:g.llm_provider||f.llm_provider,model_name:g.ollama_model||g.groq_model||f.ollama_model||f.groq_model,started_at:new Date().toISOString(),labels:["browser-call"],metadata:{room_name:i,voice_stack_id:"string"==typeof d.voice_stack_id?d.voice_stack_id:e},turns:[]}),(0,B.Qy)({session_id:i,robot_id:null,character_id:e,character_name:g.name||e,engine:"robovoice",room_name:i,source:"browser-test",started_at:new Date().toISOString()}),u.NextResponse.json({session_id:i,event_token:k,server_url:function(a){let b=process.env.LIVEKIT_PUBLIC_URL||process.env.NEXT_PUBLIC_LIVEKIT_URL;if(b&&"auto"!==b)return b;let c=new URL(a.url);return`${"https:"===c.protocol?"wss":"ws"}://${c.host}`}(a),token:await l.toJwt(),room_name:i,character:{id:g.id,name:g.name}},{headers:{"Cache-Control":"no-store"}})}async function O(a){let b,c=String(a.agent_id||"").trim();if(!/^agent_[A-Za-z0-9]{8,80}$/.test(c))return u.NextResponse.json({error:"A valid ElevenLabs agent binding is required"},{status:400});try{let d="string"==typeof a.branch_id&&/^agtbrch_[A-Za-z0-9]+$/.test(a.branch_id)?`?branch_id=${encodeURIComponent(a.branch_id)}`:"";b=await fetch(`${E.replace(/\/$/,"")}/elevenlabs/agents/${encodeURIComponent(c)}/signed-url${d}`,{cache:"no-store",signal:AbortSignal.timeout(2e4)})}catch(c){let a=c instanceof Error?c.name:"",b="TimeoutError"===a||"AbortError"===a;return u.NextResponse.json({error:b?"Voice signing timed out while contacting the agent service":`Voice signing service is unreachable: ${c instanceof Error?c.message:String(c)}`,retryable:!0},{status:b?504:502,headers:{"cache-control":"no-store"}})}let d=await b.json().catch(()=>({}));if(!b.ok||!d.signed_url)return u.NextResponse.json({error:d.detail||d.error||`ElevenLabs signing returned ${b.status}`},{status:b.status>=400?b.status:502});let e=`browser-test-${crypto.randomUUID().replaceAll("-","")}`,f=await (0,x.U)(),g=a.robot_id?(0,C._1)(f,{robotId:a.robot_id,characterId:a.character_preset_id}):null;return(0,B.Qy)({session_id:e,robot_id:g,character_id:a.character_preset_id||null,character_name:Q(f)[a.character_preset_id||""]||a.character_preset_id||null,engine:"elevenlabs",room_name:g?`robopark-${g}`:null,source:"character-link",started_at:new Date().toISOString()}),u.NextResponse.json({session_id:e,event_token:crypto.randomUUID().replaceAll("-",""),signed_url:d.signed_url,agent_id:c,branch_id:a.branch_id||null,robot_id:a.robot_id||null,robot_video_ref:a.robot_id||null,character_id:a.character_preset_id||null,source:"frontend-compatibility-fallback"},{headers:{"cache-control":"no-store"}})}async function P(a){if(!a.startsWith("browser-test-"))return u.NextResponse.json({error:"Invalid browser-call session"},{status:400});let{LIVEKIT_URL:b,LIVEKIT_API_KEY:c,LIVEKIT_API_SECRET:d}=process.env;if(b&&c&&d){let e=new v.iz(b.replace(/^ws/,"http"),c,d);await e.deleteRoom(a).catch(()=>void 0)}return u.NextResponse.json({status:"ended",session_id:a})}function Q(a){return Object.fromEntries((a.characters||[]).map(a=>[a.id,a.name]))}let R=["name","description","system_prompt","voice_stack_id","motors","nx","ny","img","elevenlabs_agent_id","elevenlabs_first_message","tts_voice_elevenlabs","prompt_editor_model","prompt_editor_precision"];async function S(a){let b=await fetch(`${E.replace(/\/$/,"")}/settings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:{characters:a}}),signal:AbortSignal.timeout(12e3)});if(!b.ok)throw Error(`Settings registry returned ${b.status}`)}function T(a){let b="string"==typeof a?a.trim().toLowerCase():"";if(!/^[a-z0-9][a-z0-9_-]{0,47}$/.test(b))throw Error("Character ID must use lowercase letters, numbers, hyphens, or underscores");return b}function U(a,b){for(let c of R)void 0!==b[c]&&(a[c]=b[c])}function V(a,b){let c=a.stt_provider||b.stt_provider||"speaches",d="groq"===c?a.stt_model_groq||b.stt_model_groq||"whisper-large-v3-turbo":a.stt_model_speaches||b.stt_model_speaches||"Systran/faster-whisper-small",e=a.llm_provider||b.llm_provider||"ollama",f="groq"===e?a.groq_model||b.groq_model||"":a.ollama_model||b.ollama_model||"";return{...a,name:`${a.name} voice`,stt_provider:c,stt_model:d,stt_language:a.stt_language||b.stt_language||"auto",llm_provider:e,llm_model:f,tts_provider:a.tts_provider||"configured default",tts_voice:a.tts_voice_elevenlabs||a.tts_voice_kokoro||"",voice_id:a.tts_voice_elevenlabs||a.tts_voice_kokoro||""}}async function W(a){let{LIVEKIT_URL:b,LIVEKIT_API_KEY:c,LIVEKIT_API_SECRET:d}=process.env;if(!b||!c||!d)return[];let e=new v.iz(b.replace(/^ws/,"http"),c,d),f=a.device_registry||{},g=Q(a),h=(await e.listRooms()).filter(a=>a.name.startsWith("robopark-")),i=new Map(await Promise.all(h.map(async a=>{let b=a.name.slice(9),c=await e.listParticipants(a.name).catch(()=>[]),d=c.find(a=>a.identity.startsWith(`robopanda_${b}_`)),f=c.find(a=>a.identity.startsWith("agent-")||4===Number(a.kind)),g=!!d?.tracks?.some(a=>2===Number(a.source)&&!a.muted),h=!!d?.tracks?.some(a=>1===Number(a.source)&&!a.muted);return[b,{room:a,physical:d,agent:f,microphone:g,camera:h}]}))),j=(0,B.f6)();return[...Object.keys(f).map(b=>{let c=i.get(b),d=c?.room,e=j.get(b)||null,h=!!e,k=g[f[b]?.character_id||""],l=!!c?.physical,m=!!c?.microphone,n=!!c?.camera,o=!!c?.agent,p=!!f[b]?.maintenance,q=f[b]?.voice_engine==="elevenlabs"?"elevenlabs":"robovoice",r=l&&(!m||!n||!o),s=a.stt_provider||"speaches",t="groq"===s?a.stt_model_groq:a.stt_model_speaches;return{id:b,robot_id:b,name:k||f[b]?.name||`RoboPark ${b.slice(0,6)}`,character_id:f[b]?.character_id||null,character_name:k||null,voice_engine:q,elevenlabs_agent_id:f[b]?.elevenlabs_agent_id||null,elevenlabs_configured:!!f[b]?.elevenlabs_agent_id,conversation_name:f[b]?.conversation_name||b,camera_url:f[b]?.camera_url||`/fed/media/robots/${encodeURIComponent(b)}/video_feed`,maintenance:p,maintenance_note:f[b]?.maintenance_note||"",status:p?"maintenance":l?r?"degraded":"online":h?"online":"offline",connection_status:l||h?"online":"offline",readiness_code:p?"maintenance":l?r?"degraded":"in_session":h?"in_session":"offline",readiness_message:p?f[b]?.maintenance_note||"Marked for maintenance":!l&&h?"Managed character call is active on this device":l?m?n?o?"Physical kiosk, media and voice worker connected":"Voice worker is not attached":"Camera is not publishing":"Microphone is not publishing":"No physical kiosk participant",room_name:d?.name||`robopark-${b}`,active_session:l||h,monitoring_session:h&&!l,in_session:l&&o||h,call_source:e?.source||null,call_started_at:e?.started_at||null,camera:n,microphone:m,voice_worker:o,hardware:f[b]?.hardware||null,effective_config:{character_id:f[b]?.character_id||null,character_name:k||null,voice_engine:q,elevenlabs_agent_id:f[b]?.elevenlabs_agent_id||null,stt_provider:s,stt_model:t,stt_language:a.stt_language||"auto",hardware_selection:f[b]?.hardware?.desired||f[b]?.hardware?.observed?.selected||null},current_session_id:l?d?.sid:e?e.session_id:null,current_stage:{stage:p?"maintenance":!l&&h?"conversation":l?m?o?"stt_listening":"voice_worker":"microphone_published":"offline",status:p||r?"blocked":l||h?"active":"waiting",label:p?"Maintenance mode":!l&&h?"Managed character call active":l?m?n?o?"Listening for visitor speech":"Waiting for voice worker":"Camera blocked":"Microphone blocked":"Physical kiosk offline"}}}),...Array.from(i.entries()).filter(([a])=>!f[a]).map(([a,b])=>({id:a,robot_id:a,name:`RoboPark ${a.slice(0,6)}`,status:b.physical?"unregistered":"ghost",room_name:b.room.name,active_session:!!b.physical,camera:b.camera,microphone:b.microphone}))]}async function X(a){if(!F)return null;let b=await fetch(`${F}${a}`,{cache:"no-store",signal:AbortSignal.timeout(15e3)});if(!b.ok)throw Error(`Scheduler ${a} returned ${b.status}`);return b.json()}async function Y(a){let[b,c,d]=await Promise.all([W(a).catch(()=>[]),X("/api/devices").catch(()=>[]),X("/api/sessions?active_only=true&limit=200").catch(()=>[])]),e=new Map;for(let a of Array.isArray(c)?c:[]){let b=String(a.id||a.device_id||a.robot_id||"");b&&e.set(b,{...a,id:b,robot_id:b})}for(let a of b){let b=String(a.id||a.robot_id||"");b&&e.set(b,{...e.get(b)||{},...a,id:b,robot_id:b})}for(let a of Array.isArray(d)?d:[]){let b=String(a.robot_id||"");if(!b||"operator-call"===b)continue;let c=e.get(b)||{id:b,robot_id:b,name:a.robot_name||a.character_name||b};e.set(b,{...c,character_id:a.character_id||c.character_id||null,character_name:a.character_name||c.character_name||null,voice_engine:a.engine||c.voice_engine||"elevenlabs",status:"online",connection_status:"online",readiness_code:"in_session",readiness_message:"Managed character call is active",active_session:!0,in_session:!0,monitoring_session:!0,current_session_id:a.session_id||a.id,room_name:a.room_name||c.room_name,current_stage:{stage:"conversation",status:"active",label:"Managed character call active"},call_source:a.source||"control_center",last_activity_at:a.last_activity_at||c.last_activity_at})}return Array.from(e.values())}async function Z(a){let b=await Y(a),c=b.filter(a=>a.active_session).map(a=>({id:a.current_session_id||a.room_name,session_id:a.current_session_id||a.room_name,robot_id:a.id,robot_name:a.name,character_id:a.character_id,character_name:a.character_name,room_name:a.room_name,started_at:a.call_started_at||a.started_at||new Date().toISOString(),status:"active",voice_engine:a.voice_engine||"robovoice",camera_url:a.camera_url,source:a.call_source||("elevenlabs"===a.voice_engine?"elevenlabs-direct":"livekit-v2")})),d=new Set(c.map(a=>a.session_id));for(let a of(0,B.i0)())!d.has(a.session_id)&&(a.robot_id&&b.some(b=>b.id===a.robot_id&&b.active_session)||c.push({id:a.session_id,session_id:a.session_id,robot_id:a.robot_id||"operator-call",robot_name:a.character_name||a.robot_id||"Operator call",character_id:a.character_id,character_name:a.character_name,room_name:a.room_name||a.session_id,started_at:a.started_at,status:"active",voice_engine:a.engine,camera_url:a.robot_id?`/fed/media/robots/${encodeURIComponent(a.robot_id)}/video_feed`:null,source:a.source}));return c}async function $(a,b){let c=(await b.params).path.join("/"),d=new URL(a.url).search;if("character-presets"===c){let a=await (0,x.U)();return F?L(a):u.NextResponse.json(K(a),{headers:{"cache-control":"no-store","x-data-source":"durable-character-catalog"}})}if("elevenlabs/agents"===c)return u.NextResponse.json({agents:H.map(a=>({agent_id:G[a.id],name:a.name,character_id:a.id})),source:"verified-session-ledger"},{headers:{"cache-control":"no-store"}});let e=c.match(/^character-presets\/([^/]+)$/);if(e){let a=decodeURIComponent(e[1]),b=K(await (0,x.U)()).find(b=>b.id===a||b.canonical_id===a||I(b.id)===I(a)||I(b.display_name||b.name)===I(a));return b?u.NextResponse.json(b,{headers:{"cache-control":"no-store","x-data-source":"durable-character-catalog"}}):u.NextResponse.json({error:"Character preset not found"},{status:404})}let f=new Set(["voice-stacks","settings","sessions/stats","history","servers"]);if(F&&(f.has(c)||c.startsWith("voices/")))return z(`/api/${c}`,d);let g=await (0,x.U)();if("voice-stacks"===c)return u.NextResponse.json((g.characters||[]).map(a=>({...a,display_name:a.name,voice_stack_id:a.voice_stack_id||a.id,img:a.img||`/static/robopark/${"robopanda"===a.id?"panda":a.name.toLowerCase().includes("vixen")?"bmw":a.id}.png`})).map(a=>V(a,g)));if(c.startsWith("voices/")){let a=c.slice(7);try{let b=await fetch(`${E.replace(/\/$/,"")}/voices?provider=${encodeURIComponent(a)}`,{cache:"no-store",signal:AbortSignal.timeout(12e3)});if(!b.ok)throw Error(`voice provider returned ${b.status}`);let c=await b.json(),d=Array.isArray(c)?c:c.voices||[];return u.NextResponse.json({provider:a,source:"elevenlabs"===a?"elevenlabs-account-live":"production-provider-live",count:d.length,voices:d})}catch(b){return u.NextResponse.json({provider:a,source:"provider-error",count:0,voices:[],warning:b instanceof Error?b.message:"Voice catalog unavailable"},{status:502})}}if("devices"===c){if(F){let a=await z("/api/devices",d);if(a.ok)return a}return u.NextResponse.json(function(a){let b=a.device_registry||{},c=Q(a);return Object.entries(b).map(([a,b])=>({id:a,device_id:a,name:b.name||`RoboPark ${a.slice(0,6)}`,device_role:b.device_role||"combined",character_id:b.character_id||null,character_name:c[b.character_id||""]||null,status:b.maintenance?"maintenance":"enrolled",connection_status:"offline",voice_engine:b.voice_engine||"robovoice",camera_url:b.camera_url||`/fed/media/robots/${encodeURIComponent(a)}/video_feed`,maintenance:!!b.maintenance,maintenance_note:b.maintenance_note||"",control:b.control||{},source:"local-device-registry"}))}(g),{headers:{"cache-control":"no-store","x-data-source":"local-device-registry"}})}if("robots"===c)return u.NextResponse.json(await Y(g));if("settings"===c)return z("/api/settings",d);if("knowledge-documents"===c)return u.NextResponse.json([]);if("knowledge/models"===c)return u.NextResponse.json({configured:!1,models:[]});if("sessions"===c)return"true"!==new URL(a.url).searchParams.get("active_only")?F?z("/api/sessions",d):u.NextResponse.json([]):u.NextResponse.json(await Z(g));if("sessions/stats"===c)return z("/api/sessions/stats",d);if("telemetry"===c){let a=await Y(g);return u.NextResponse.json({robots:a,totals:{online:a.filter(a=>"online"===a.status).length}})}if("history"===c)return u.NextResponse.json([]);if("servers"===c)return z("/api/servers",d);let h=c.match(/^characters\/([^/]+)\/deployment$/);if(h){let a=decodeURIComponent(h[1]),b=await X("/api/devices").catch(()=>[]),c=(Array.isArray(b)?b:[]).filter(b=>String(b.character_id||b.character_preset_id||"").toLowerCase()===a.toLowerCase()),d=a=>String(a.device_role||a.role||"combined").toLowerCase();return u.NextResponse.json({character_id:a,voice_vision_boxes:c.filter(a=>["voice_vision","combined"].includes(d(a))),motor_nodes:c.filter(a=>["motor","combined"].includes(d(a))),combined_nodes:c.filter(a=>"combined"===d(a)),control_nodes:c,source:"frontend-compatibility-fallback"},{headers:{"cache-control":"no-store"}})}let i=c.match(/^robots\/([^/]+)\/pipeline-status$/);if(i){let a=decodeURIComponent(i[1]),b=(await W(g)).find(b=>b.id===a||b.name===a);return b?u.NextResponse.json({robot_id:b.id,readiness_code:b.readiness_code,readiness_message:b.readiness_message,current_stage:b.current_stage,camera:b.camera,microphone:b.microphone,voice_worker:b.voice_worker,hardware:b.hardware,effective_config:b.effective_config}):u.NextResponse.json({error:"Robot not found"},{status:404})}let j=c.match(/^robots\/([^/]+)\/voice-config$/);if(j){let a=decodeURIComponent(j[1]),b=g.device_registry?.[a];if(!b)return u.NextResponse.json({error:"Robot is not registered"},{status:404});let c=b.voice_stack_id||b.character_id||"",d=(g.characters||[]).find(a=>a.id===c);if(!d)return u.NextResponse.json({error:"Robot has no valid voice stack assignment"},{status:409});let e=V(d,g);return u.NextResponse.json({character_id:b.character_id||null,character_name:Q(g)[b.character_id||""]||null,voice_stack_id:c,voice_stack:e})}return"voice-stacks"===c||"character-presets"===c?u.NextResponse.json([]):u.NextResponse.json({error:"V2 endpoint is not implemented",path:c},{status:501})}async function _(a,b){let c=(await b.params).path.join("/");if("character-presets"===c)try{let b=await (0,x.U)(),c=await a.json(),d=T(c.id||c.name),e=structuredClone(b.characters||[]);if(e.some(a=>a.id===d))return u.NextResponse.json({error:"Character ID already exists"},{status:409});let f={id:d,name:String(c.name||d).trim()};return U(f,c),e.push(f),await S(e),u.NextResponse.json(f,{status:201})}catch(a){return u.NextResponse.json({error:a instanceof Error?a.message:"Character creation failed"},{status:400})}if("sessions/voice-call"===c&&!F)return N(a);let d=c.match(/^sessions\/(browser-test-[a-f0-9]+)\/(joined|transcript|end|heartbeat)$/);if(d){let b=d[1],c=d[2];if("heartbeat"===c)return u.NextResponse.json({status:(0,B.i$)(b)?"ok":"expired",session_id:b});if("joined"===c){let c=await a.json().catch(()=>({}));return(0,B.i$)(b,{connected:!0,conversation_id:"string"==typeof c.conversation_id?c.conversation_id:null}),u.NextResponse.json({status:"ok",session_id:b})}if("end"===c)return(0,B.cJ)(b),await M({source:"robovoice",engine:"robovoice",engine_conversation_id:b,ended_at:new Date().toISOString(),labels:["browser-call"],turns:[]}),P(b);if("transcript"===c){(0,B.i$)(b);let c=await a.json().catch(()=>({})),d="string"==typeof c.text?c.text.trim():"";d&&await M({source:"robovoice",engine:"robovoice",engine_conversation_id:b,robot_id:"operator-call",started_at:"string"==typeof c.timestamp?c.timestamp:new Date().toISOString(),labels:["browser-call"],turns:[{role:"string"==typeof c.role?c.role:"user",text:d,sequence:"number"==typeof c.sequence?c.sequence:void 0,timestamp:"string"==typeof c.timestamp?c.timestamp:new Date().toISOString(),source_id:`${b}:${"number"==typeof c.sequence?c.sequence:crypto.randomUUID()}`}]})}return u.NextResponse.json({status:"ok",session_id:d[1]})}if(!("sessions/voice-call"===c||/^sessions\/[^/]+\/(joined|transcript|end|heartbeat|keepalive)$/.test(c)||/^robots\/[^/]+\/end-session$/.test(c)||"vision/caption"===c))return u.NextResponse.json({error:"Canary control actions are read-only"},{status:409});if(!F)return u.NextResponse.json({error:"V2 scheduler is not configured"},{status:503});let e=await a.text();try{let b=new URL(a.url),d=`${F.replace(/\/$/,"")}/api/${c}${b.search}`,f={"content-type":a.headers.get("content-type")||"application/json"},g=a.headers.get("x-robopark-session-token");g&&(f["x-robopark-session-token"]=g);let h=await fetch(d,{method:"POST",headers:f,body:e||void 0,signal:AbortSignal.timeout(12e3)});if("sessions/voice-call"===c&&(404===h.status||501===h.status))return O(JSON.parse(e||"{}"));return new Response(h.body,{status:h.status,headers:{"content-type":h.headers.get("content-type")||"application/json","x-data-source":"v2-scheduler"}})}catch(a){if("sessions/voice-call"===c)return O(JSON.parse(e||"{}"));return u.NextResponse.json({error:a instanceof Error?a.message:"V2 scheduler action failed"},{status:503})}}async function aa(a,b){let c=(await b.params).path.join("/");if("settings"===c){if(!F)return u.NextResponse.json({error:"Scheduler is not configured"},{status:503});try{let b=await fetch(`${F}/api/settings`,{method:"PUT",headers:{"content-type":a.headers.get("content-type")||"application/json"},body:await a.text(),signal:AbortSignal.timeout(12e3)});return new Response(b.body,{status:b.status,headers:{"content-type":b.headers.get("content-type")||"application/json","cache-control":"no-store","x-data-source":"scheduler"}})}catch(a){return u.NextResponse.json({error:a instanceof Error?a.message:"Scheduler settings update failed"},{status:503})}}let d=c.match(/^character-presets\/([^/]+)$/);if(d)try{let b=T(decodeURIComponent(d[1])),c=await (0,x.U)(),e=structuredClone(c.characters||[]),f=e.find(a=>a.id===b);if(!f)return u.NextResponse.json({error:"Character preset not found"},{status:404});let g=await a.json();return U(f,g),await S(e),u.NextResponse.json(f)}catch(a){return u.NextResponse.json({error:a instanceof Error?a.message:"Character update failed"},{status:400})}let e=c.match(/^robots\/([^/]+)\/voice-config$/);if(e){let b=decodeURIComponent(e[1]),c=await (0,x.U)(),d=c.device_registry?.[b];if(!d?.character_id)return u.NextResponse.json({error:"Robot has no assigned character"},{status:409});let f=await a.json(),g="string"==typeof f.voice_stack_id?f.voice_stack_id:d.voice_stack_id||d.character_id,h=structuredClone(c.characters||[]),i=h.find(a=>a.id===g),j=h.find(a=>a.id===d.character_id);if(!i||!j)return u.NextResponse.json({error:"Selected voice stack or robot character was not found"},{status:404});for(let a of["stt_provider","stt_model_groq","stt_model_speaches","stt_language","llm_provider","groq_model","ollama_model","llm_api_key","temperature","num_ctx","tts_provider","tts_voice_elevenlabs","tts_voice_kokoro","tts_language","max_turns","min_endpointing_delay","allow_interruptions","wake_word_enabled","wake_word_model","wake_word_threshold","wake_word_timeout"])void 0===i[a]?delete j[a]:j[a]=i[a];let k=await fetch(`${E.replace(/\/$/,"")}/settings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:{characters:h}})});if(!k.ok)return u.NextResponse.json({error:`Settings registry returned ${k.status}`},{status:502});await (0,A.i)(a=>{let c=a[b];if(!c)throw Error("DEVICE_NOT_REGISTERED");return a[b]={...c,voice_stack_id:g,updated_at:new Date().toISOString()},a[b]});let l=V(j,{...c,characters:h});return u.NextResponse.json({character_id:d.character_id,character_name:j.name,voice_stack_id:g,voice_stack:l})}let f=c.match(/^voice-stacks\/([^/]+)$/);if(!f)return u.NextResponse.json({error:"V2 control action is not implemented",path:c},{status:501});let g=decodeURIComponent(f[1]),h=await (0,x.U)(),i=structuredClone(h.characters||[]),j=i.find(a=>a.id===g);if(!j)return u.NextResponse.json({error:"Character voice stack not found"},{status:404});let k=await a.json();for(let a of("string"==typeof k.tts_provider&&(j.tts_provider=k.tts_provider),"string"==typeof k.tts_voice&&k.tts_voice&&("elevenlabs"===(k.tts_provider||j.tts_provider)?j.tts_voice_elevenlabs=k.tts_voice:j.tts_voice_kokoro=k.tts_voice),["stt_provider","stt_language","llm_provider","temperature","num_ctx","max_turns","min_endpointing_delay","allow_interruptions","wake_word_enabled","wake_word_model","wake_word_threshold","wake_word_timeout"]))void 0!==k[a]&&(j[a]=k[a]);"string"==typeof k.stt_model&&("groq"===(k.stt_provider||j.stt_provider||h.stt_provider)?j.stt_model_groq=k.stt_model:j.stt_model_speaches=k.stt_model),"string"==typeof k.llm_model&&("groq"===(k.llm_provider||j.llm_provider||h.llm_provider)?j.groq_model=k.llm_model:j.ollama_model=k.llm_model);let l=await fetch(`${E.replace(/\/$/,"")}/settings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:{characters:i}})});return l.ok?u.NextResponse.json(V(j,h)):u.NextResponse.json({error:`Settings registry returned ${l.status}`},{status:502})}async function ab(){return u.NextResponse.json({error:"Canary control actions are read-only"},{status:409})}async function ac(a,b){let c=(await b.params).path.join("/").match(/^character-presets\/([^/]+)$/);if(!c)return u.NextResponse.json({error:"Canary control actions are read-only"},{status:409});try{let a=T(decodeURIComponent(c[1])),b=await (0,x.U)(),d=Object.entries(b.device_registry||{}).find(([,b])=>b.character_id===a);if(d)return u.NextResponse.json({error:`Character is assigned to robot ${d[0]}`},{status:409});let e=structuredClone(b.characters||[]),f=e.filter(b=>b.id!==a);if(f.length===e.length)return u.NextResponse.json({error:"Character preset not found"},{status:404});return await S(f),u.NextResponse.json({ok:!0,id:a})}catch(a){return u.NextResponse.json({error:a instanceof Error?a.message:"Character deletion failed"},{status:400})}}let ad=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/robopark/api/[...path]/route",pathname:"/robopark/api/[...path]",filename:"route",bundlePath:"app/robopark/api/[...path]/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\robopark\\api\\[...path]\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:ae,workUnitAsyncStorage:af,serverHooks:ag}=ad;function ah(){return(0,g.patchFetch)({workAsyncStorage:ae,workUnitAsyncStorage:af})}async function ai(a,b,c){var d;let e="/robopark/api/[...path]/route";"/index"===e&&(e="/");let g=await ad.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:y,routerServerContext:z,isOnDemandRevalidate:A,revalidateOnlyGenerated:B,resolvedPathname:C}=g,D=(0,j.normalizeAppPath)(e),E=!!(y.dynamicRoutes[D]||y.routes[C]);if(E&&!x){let a=!!y.routes[C],b=y.dynamicRoutes[D];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let F=null;!E||ad.isDev||x||(F="/index"===(F=C)?"/":F);let G=!0===ad.isDev||!E,H=E&&!G,I=a.method||"GET",J=(0,i.getTracer)(),K=J.getActiveScopeSpan(),L={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:G,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:H,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>ad.onRequestError(a,b,d,z)},sharedContext:{buildId:u}},M=new k.NodeNextRequest(a),N=new k.NodeNextResponse(b),O=l.NextRequestAdapter.fromNodeNextRequest(M,(0,l.signalFromNodeResponse)(b));try{let d=async c=>ad.handle(O,L).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=J.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${I} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${I} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&A&&B&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=L.renderOpts.fetchMetrics;let i=L.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=L.renderOpts.collectedTags;if(!E)return await (0,o.I)(M,N,e,L.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==L.renderOpts.collectedRevalidate&&!(L.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&L.renderOpts.collectedRevalidate,d=void 0===L.renderOpts.collectedExpire||L.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:L.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await ad.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:H,isOnDemandRevalidate:A})},z),b}},l=await ad.handleResponse({req:a,nextConfig:w,cacheKey:F,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:B,responseGenerator:k,waitUntil:c.waitUntil});if(!E)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",A?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&E||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(M,N,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};K?await g(K):await J.withPropagatedContext(a.headers,()=>J.trace(m.BaseServerSpan.handleRequest,{spanName:`${I} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":I,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await ad.onRequestError(a,b,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:H,isOnDemandRevalidate:A})}),E)throw b;return await (0,o.I)(M,N,new Response(null,{status:500})),null}}},51455:a=>{"use strict";a.exports=require("node:fs/promises")},57975:a=>{"use strict";a.exports=require("node:util")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},75310:(a,b,c)=>{"use strict";c.d(b,{Qy:()=>f,cJ:()=>h,f6:()=>j,i$:()=>g,i0:()=>i});let d=new Map;function e(){let a=Date.now()-1e5;for(let[b,c]of d)c.last_seen<a&&d.delete(b)}function f(a){e(),d.set(a.session_id,{conversation_id:null,connected:!1,...a,last_seen:Date.now()})}function g(a,b){let c=d.get(a);return!!c&&(d.set(a,{...c,...b,last_seen:Date.now()}),!0)}function h(a){return d.delete(a)}function i(){return e(),Array.from(d.values())}function j(){let a=new Map;for(let b of i()){if(!b.robot_id)continue;let c=a.get(b.robot_id);c&&(c.connected||!b.connected)||a.set(b.robot_id,b)}return a}},76760:a=>{"use strict";a.exports=require("node:path")},77598:a=>{"use strict";a.exports=require("node:crypto")},78335:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},96487:()=>{},99435:(a,b,c)=>{"use strict";c.d(b,{U:()=>l});var d=c(51455),e=c(76760);let f=(process.env.WEBHOOK_URL||"http://agent:8889").replace(/\/+$/,""),g=null,h=0,i=null;function j(a,b){return{...a,characters:Array.isArray(a.characters)?a.characters:[],device_registry:a.device_registry&&"object"==typeof a.device_registry?a.device_registry:{},registry_source:b}}async function k(){for(let a of[process.env.CAAL_SETTINGS_PATH,process.env.ROBOVOICE_SETTINGS_PATH,(0,e.resolve)(process.cwd(),"..","settings.json"),(0,e.resolve)(process.cwd(),"settings.json")].filter(a=>!!a))try{let b=JSON.parse(await (0,d.readFile)(a,"utf8"));return j(b,"persisted-snapshot")}catch{}return j({},"empty")}async function l(){if(g&&Date.now()<h)return g;if(i)return i;i=(async()=>{try{let a=await fetch(`${f}/settings`,{cache:"no-store",signal:AbortSignal.timeout(1500)});if(!a.ok)throw Error(`Settings registry returned ${a.status}`);let b=await a.json();return g=null,h=0,j(b.settings||b,"live-agent")}catch{return g=await k(),h=Date.now()+15e3,g}})();try{return await i}finally{i=null}}}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,1428,1692,8755],()=>b(b.s=46131));module.exports=c})();
|
|
@@ -1,58 +1,58 @@
|
|
|
1
1
|
{
|
|
2
|
-
"/_not-found/page": "app/_not-found/page.js",
|
|
3
2
|
"/api/device-character/route": "app/api/device-character/route.js",
|
|
4
3
|
"/api/download-piper-model/route": "app/api/download-piper-model/route.js",
|
|
5
4
|
"/api/models/route": "app/api/models/route.js",
|
|
6
5
|
"/api/prewarm/route": "app/api/prewarm/route.js",
|
|
7
6
|
"/api/prompt/route": "app/api/prompt/route.js",
|
|
7
|
+
"/_not-found/page": "app/_not-found/page.js",
|
|
8
8
|
"/api/reload-tools/route": "app/api/reload-tools/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/sessions/[sessionId]/end/route": "app/api/robopark/sessions/[sessionId]/end/route.js",
|
|
12
11
|
"/api/robopark/transcripts/[sessionId]/route": "app/api/robopark/transcripts/[sessionId]/route.js",
|
|
13
|
-
"/api/
|
|
12
|
+
"/api/robopark/sessions/[sessionId]/end/route": "app/api/robopark/sessions/[sessionId]/end/route.js",
|
|
14
13
|
"/api/setup/status/route": "app/api/setup/status/route.js",
|
|
14
|
+
"/api/setup/complete/route": "app/api/setup/complete/route.js",
|
|
15
15
|
"/api/setup/test-groq/route": "app/api/setup/test-groq/route.js",
|
|
16
|
-
"/api/setup/test-hass/route": "app/api/setup/test-hass/route.js",
|
|
17
|
-
"/api/setup/test-ollama/route": "app/api/setup/test-ollama/route.js",
|
|
18
16
|
"/api/setup/test-n8n/route": "app/api/setup/test-n8n/route.js",
|
|
17
|
+
"/api/setup/test-ollama/route": "app/api/setup/test-ollama/route.js",
|
|
18
|
+
"/api/setup/test-hass/route": "app/api/setup/test-hass/route.js",
|
|
19
19
|
"/api/test-tts/route": "app/api/test-tts/route.js",
|
|
20
|
-
"/api/wake-word/status/route": "app/api/wake-word/status/route.js",
|
|
21
|
-
"/api/wake-word/models/route": "app/api/wake-word/models/route.js",
|
|
22
20
|
"/api/voices/route": "app/api/voices/route.js",
|
|
21
|
+
"/api/wake-word/status/route": "app/api/wake-word/status/route.js",
|
|
23
22
|
"/api/wake-word/upload/route": "app/api/wake-word/upload/route.js",
|
|
23
|
+
"/api/wake-word/models/route": "app/api/wake-word/models/route.js",
|
|
24
24
|
"/favicon.ico/route": "app/favicon.ico/route.js",
|
|
25
25
|
"/api/model-status/route": "app/api/model-status/route.js",
|
|
26
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/live-rooms/route": "app/api/robopark/live-rooms/route.js",
|
|
29
|
-
"/api/robopark/monitor-token/route": "app/api/robopark/monitor-token/route.js",
|
|
30
28
|
"/api/robopark/character-ai/route": "app/api/robopark/character-ai/route.js",
|
|
29
|
+
"/api/robopark/live-rooms/route": "app/api/robopark/live-rooms/route.js",
|
|
31
30
|
"/api/robopark/camera-token/route": "app/api/robopark/camera-token/route.js",
|
|
32
31
|
"/api/robopark/device-access/route": "app/api/robopark/device-access/route.js",
|
|
33
|
-
"/api/robopark/robots/route": "app/api/robopark/robots/route.js",
|
|
34
32
|
"/api/robopark/servers/[serverId]/metrics/route": "app/api/robopark/servers/[serverId]/metrics/route.js",
|
|
35
|
-
"/api/robopark/
|
|
36
|
-
"/api/robopark/
|
|
33
|
+
"/api/robopark/robots/route": "app/api/robopark/robots/route.js",
|
|
34
|
+
"/api/robopark/monitor-token/route": "app/api/robopark/monitor-token/route.js",
|
|
37
35
|
"/api/robopark/sessions/route": "app/api/robopark/sessions/route.js",
|
|
38
|
-
"/api/
|
|
36
|
+
"/api/robopark/servers/route": "app/api/robopark/servers/route.js",
|
|
37
|
+
"/api/robopark/servers/[serverId]/route": "app/api/robopark/servers/[serverId]/route.js",
|
|
39
38
|
"/api/robopark/vision-caption/route": "app/api/robopark/vision-caption/route.js",
|
|
40
|
-
"/api/robopark/robots/[robotId]/voice-engine/route": "app/api/robopark/robots/[robotId]/voice-engine/route.js",
|
|
41
39
|
"/api/settings/route": "app/api/settings/route.js",
|
|
40
|
+
"/api/robovoice/robots/[robotId]/media-health/route": "app/api/robovoice/robots/[robotId]/media-health/route.js",
|
|
41
|
+
"/api/robopark/robots/[robotId]/voice-engine/route": "app/api/robopark/robots/[robotId]/voice-engine/route.js",
|
|
42
42
|
"/api/robopark/transcripts/route": "app/api/robopark/transcripts/route.js",
|
|
43
43
|
"/api/turn-credentials/route": "app/api/turn-credentials/route.js",
|
|
44
|
-
"/
|
|
45
|
-
"/fed/media/robots/[robotId]/video_feed/route": "app/fed/media/robots/[robotId]/video_feed/route.js",
|
|
44
|
+
"/camera-grid/route": "app/camera-grid/route.js",
|
|
46
45
|
"/robopark/[...path]/route": "app/robopark/[...path]/route.js",
|
|
46
|
+
"/fed/media/robots/[robotId]/video_feed/route": "app/fed/media/robots/[robotId]/video_feed/route.js",
|
|
47
|
+
"/api/wake/route": "app/api/wake/route.js",
|
|
48
|
+
"/robopark/api/robots/[robotId]/stream/route": "app/robopark/api/robots/[robotId]/stream/route.js",
|
|
47
49
|
"/fed/[...path]/route": "app/fed/[...path]/route.js",
|
|
48
50
|
"/tailnet/route": "app/tailnet/route.js",
|
|
49
|
-
"/camera-grid/route": "app/camera-grid/route.js",
|
|
50
51
|
"/vendor/livekit-client.umd.js/route": "app/vendor/livekit-client.umd.js/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
|
-
"/
|
|
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
|
}
|
|
@@ -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/
|
|
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/ULHwbueNr3RGevy8FSrTW/_buildManifest.js" defer=""></script><script src="/_next/static/ULHwbueNr3RGevy8FSrTW/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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":"ULHwbueNr3RGevy8FSrTW","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__BUILD_MANIFEST=function(e,a,s,r,t){return{__rewrites:{afterFiles:[{has:s,source:"/api/announce",destination:s},{has:s,source:"/api/reload-tools",destination:s},{has:s,source:"/api/wake",destination:s},{has:s,source:"/api/health",destination:s},{has:s,source:"/api/prompt",destination:s},{has:s,source:"/api/voices",destination:s},{has:s,source:"/api/models",destination:s},{has:s,source:"/api/wake-word/:path*",destination:s},{has:s,source:"/api/metrics",destination:s}],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:43,errorRate:1e-4,numBits:825,numHashes:14,bitArray:[1,1,e,e,0,0,a,e,e,a,a,a,a,e,e,a,a,e,a,a,e,e,e,a,e,e,e,a,a,e,a,e,e,a,a,e,a,a,e,e,e,a,e,e,e,a,a,a,a,e,e,a,e,a,e,e,e,a,e,e,a,e,e,e,e,e,e,a,e,a,a,e,a,a,a,a,a,a,a,a,e,e,a,a,e,e,a,a,a,a,e,e,e,e,a,a,a,a,e,a,e,e,e,e,e,a,a,e,a,a,e,e,a,a,a,a,a,e,e,e,a,e,a,a,a,e,a,e,e,a,e,e,a,e,a,e,e,a,a,e,e,a,e,a,e,e,e,e,a,e,a,e,e,a,a,a,a,e,a,e,a,a,a,e,e,e,e,e,e,a,a,e,a,e,e,a,a,a,e,e,a,e,e,a,a,e,a,a,a,a,e,e,e,e,a,e,a,a,e,e,e,e,a,a,e,e,e,e,e,e,e,e,a,e,e,e,a,e,a,a,a,e,e,e,a,e,a,a,e,a,a,e,a,a,e,a,a,a,e,a,a,a,a,a,a,e,e,a,a,e,a,e,e,a,a,a,a,e,a,e,a,a,e,e,a,e,e,e,a,a,e,a,e,a,e,e,a,a,e,a,a,e,a,e,a,a,a,a,a,e,a,e,e,e,a,a,e,e,a,e,a,a,e,e,e,e,a,e,e,e,e,a,e,e,a,a,e,e,e,a,e,a,a,a,a,a,e,e,e,a,a,e,a,a,a,e,a,e,a,e,a,a,e,a,a,e,a,e,a,e,a,e,e,e,e,a,e,e,e,e,a,e,a,e,a,a,e,e,a,e,e,e,e,a,e,e,e,a,a,e,a,e,a,e,e,e,e,e,e,e,e,a,e,a,a,a,a,e,a,e,a,a,a,a,e,e,e,e,a,e,a,e,e,e,a,a,e,e,a,a,a,a,e,e,e,e,e,a,a,a,a,e,e,e,e,e,e,a,e,e,e,e,e,a,a,e,a,a,a,e,e,a,a,e,e,e,a,e,e,a,e,e,e,a,e,a,a,a,a,a,a,a,a,e,a,e,e,a,e,a,a,e,e,e,e,a,e,a,a,a,e,a,a,a,a,a,a,a,a,e,a,e,a,e,a,e,a,e,e,e,a,e,a,e,a,e,e,e,a,a,a,a,a,a,e,a,e,e,a,a,e,a,e,a,e,e,a,a,e,a,a,e,a,a,a,a,e,e,e,e,a,e,a,a,a,e,a,e,e,e,e,a,e,e,e,a,a,e,e,e,e,a,a,e,e,e,a,a,e,e,a,e,e,e,a,e,e,e,a,a,a,a,a,e,e,a,a,a,a,e,e,e,e,e,e,a,a,a,a,a,e,a,a,a,a,e,a,a,a,e,a,e,e,a,e,e,e,e,e,a,e,e,e,a,e,e,e,a,e,e,e,e,a,e,e,e,e,a,e,a,a,a,a,a,e,a,a,e,a,e,e,a,a,a,a,e,a,e,e,a,a,a,a,a,a,a,e,e,a,e,e,e,e,a,a,e,e,e,a,e,e,a,a,e,a,e,e,e,a,e,a,e,e,e,e,a,e,e,e,a,e,e,a,a,a,a,a,e,e,a,a,e,e,a,a,a,e,e,e,a,a,e,a,a,e,e,e,a,e,a,a,e,a,a,a,e,a,e,a,a,e,e,e,a,a,a,a,e,a,e,e,e,a,e,e,a,a,a,e,a,a,e,a,e,e,e,a,a,a,a,e,e,a,a,a,a,a,e,e,e,e,e,a,a,e,a,a,e,e,e,e,e,e,e,e,e,e,e,a,a,e,a,a,a,e,e,a,a,a,a,a,a,a,a,e]},__routerFilterDynamic:{numItems:11,errorRate:1e-4,numBits:211,numHashes:14,bitArray:[a,a,a,a,a,a,a,a,a,e,a,e,a,a,e,e,a,a,a,a,e,e,e,e,a,e,e,e,e,e,a,e,e,e,e,e,a,e,e,e,a,e,e,a,e,a,e,e,a,e,a,a,e,e,e,a,e,e,a,a,a,a,e,a,e,a,a,e,a,a,e,a,a,e,a,e,e,e,e,a,a,a,a,e,e,a,a,a,e,e,e,a,a,e,e,e,e,e,e,a,e,e,e,e,a,a,a,a,e,e,a,e,a,a,e,e,a,e,a,a,a,a,e,a,a,e,e,e,a,e,a,a,e,e,e,e,a,a,a,a,e,a,a,e,a,a,e,e,a,e,a,a,e,e,a,a,e,e,a,e,e,a,e,a,e,a,a,e,a,e,e,a,a,e,e,a,e,a,e,a,e,e,a,a,a,a,e,a,a,e,a,a,e,e,a,a,e,e,e,e,e,e,e,a,a,a,a,e,e,a,a]},"/_error":["static/chunks/pages/_error-e4ba546eb376bdf4.js"],sortedPages:["/_app","/_error"]}}(1,0,void 0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
|
|
@@ -1453,6 +1453,36 @@ footer.cmd{left:var(--global-nav-width);transition:left .24s cubic-bezier(.2,.8,
|
|
|
1453
1453
|
entry.dataHandlers=(entry.dataHandlers||[]).filter(function(handler){return !handler.node||handler.node.isConnected;});
|
|
1454
1454
|
return entry;
|
|
1455
1455
|
}
|
|
1456
|
+
// Always disconnect before dropping a room reference. Abandoning the object
|
|
1457
|
+
// left the monitor joined server-side, so every refresh or re-render stacked
|
|
1458
|
+
// another "RoboPark Control monitor" in the room -- rooms were carrying 3-4
|
|
1459
|
+
// of them, none publishing anything.
|
|
1460
|
+
function closeFleetCameraRoom(deviceId,entry){
|
|
1461
|
+
entry=entry||fleetLiveKitRooms[deviceId];
|
|
1462
|
+
if(!entry)return;
|
|
1463
|
+
if(entry.retry){clearTimeout(entry.retry);entry.retry=null;}
|
|
1464
|
+
var room=entry.room;entry.room=null;
|
|
1465
|
+
if(room){try{room.disconnect(true);}catch(e){}}
|
|
1466
|
+
if(fleetLiveKitRooms[deviceId]===entry)delete fleetLiveKitRooms[deviceId];
|
|
1467
|
+
}
|
|
1468
|
+
// Sweep rooms whose cards are gone. Without this a room stayed joined for as
|
|
1469
|
+
// long as the tab lived, even after its tile was re-rendered away.
|
|
1470
|
+
function sweepFleetCameraRooms(){
|
|
1471
|
+
Object.keys(fleetLiveKitRooms||{}).forEach(function(deviceId){
|
|
1472
|
+
var entry=fleetLiveKitRooms[deviceId];if(!entry)return;
|
|
1473
|
+
pruneRoomTargets(entry);
|
|
1474
|
+
if(!entry.videos.length&&!entry.connecting)closeFleetCameraRoom(deviceId,entry);
|
|
1475
|
+
});
|
|
1476
|
+
}
|
|
1477
|
+
if(typeof window!=='undefined'&&!window.__rpFleetRoomTeardown){
|
|
1478
|
+
window.__rpFleetRoomTeardown=true;
|
|
1479
|
+
setInterval(sweepFleetCameraRooms,15000);
|
|
1480
|
+
// pagehide covers refresh, navigation and tab close; without it the monitor
|
|
1481
|
+
// lingered until LiveKit's own participant timeout.
|
|
1482
|
+
window.addEventListener('pagehide',function(){
|
|
1483
|
+
Object.keys(fleetLiveKitRooms||{}).forEach(function(deviceId){closeFleetCameraRoom(deviceId);});
|
|
1484
|
+
});
|
|
1485
|
+
}
|
|
1456
1486
|
function pushRoomHandler(entry,node,handler){
|
|
1457
1487
|
if(!entry)return;handler.node=node;pruneRoomTargets(entry);entry.dataHandlers.push(handler);
|
|
1458
1488
|
}
|
|
@@ -1480,7 +1510,7 @@ footer.cmd{left:var(--global-nav-width);transition:left .24s cubic-bezier(.2,.8,
|
|
|
1480
1510
|
if(fleetLiveKitRooms[deviceId]!==entry)return;
|
|
1481
1511
|
pruneRoomTargets(entry);
|
|
1482
1512
|
// Nothing on screen is waiting for this room any more.
|
|
1483
|
-
if(!entry.videos.length){
|
|
1513
|
+
if(!entry.videos.length){closeFleetCameraRoom(deviceId,entry);return;}
|
|
1484
1514
|
openFleetCameraRoom(deviceId);
|
|
1485
1515
|
},delay);
|
|
1486
1516
|
}
|