robopark 3.3.53 → 3.3.54

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.
@@ -62,6 +62,52 @@ export function resolveTailnet() {
62
62
  return { identity: { host: ipv4, magicDns: false, hostName: self.HostName } };
63
63
  return { error: 'tailscale reported no address for this machine' };
64
64
  }
65
+ /**
66
+ * Front a local port with HTTPS on the tailnet.
67
+ *
68
+ * Printing an http:// tailnet URL is not enough to be useful: browsers expose
69
+ * navigator.mediaDevices only in a secure context, so on plain http the call
70
+ * page cannot open a microphone or camera at all. `tailscale serve` terminates
71
+ * TLS with a real cert for the MagicDNS name, which is what makes the link
72
+ * work on a phone or a robot PC. Returns the https origin, or an error.
73
+ */
74
+ /**
75
+ * Front a local port with HTTPS on a *dedicated* tailnet port instead of the
76
+ * 443 root.
77
+ *
78
+ * `serveHttps` claims the tailnet root, which fails when another service on the
79
+ * box already owns it (the InfiniBot gateway, another app, …). Call links only
80
+ * need *a* secure origin, not the root, so this mounts the target on its own
81
+ * https port and returns `https://host:httpsPort`. Idempotent: re-running just
82
+ * re-asserts the same mapping. Returns the origin, or an error.
83
+ */
84
+ export function serveHttpsPort(targetPort, httpsPort) {
85
+ const bin = tailscaleBin();
86
+ if (!bin)
87
+ return { error: 'the tailscale CLI was not found on this machine' };
88
+ const { identity, error } = resolveTailnet();
89
+ if (!identity)
90
+ return { error };
91
+ try {
92
+ execFileSync(bin, ['serve', '--bg', '--https', String(httpsPort), `http://127.0.0.1:${targetPort}`], { stdio: 'pipe' });
93
+ }
94
+ catch (err) {
95
+ const detail = err instanceof Error ? err.message : String(err);
96
+ return { error: `tailscale serve failed: ${detail.split(String.fromCharCode(10))[0]}` };
97
+ }
98
+ // Exit 0 is not proof it bound (a tagged node without the serve attribute
99
+ // silently no-ops), so confirm the mapping is actually present.
100
+ let bound = false;
101
+ try {
102
+ const status = execFileSync(bin, ['serve', 'status'], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
103
+ bound = status.includes(`:${httpsPort}`) && status.includes(identity.host);
104
+ }
105
+ catch { /* status failed; treat as not bound */ }
106
+ if (!bound) {
107
+ return { error: `tailscale serve did not bind https://${identity.host}:${httpsPort} (check "tailscale serve status"; a tagged node needs the serve attribute in your tailnet ACL)` };
108
+ }
109
+ return { origin: `https://${identity.host}:${httpsPort}` };
110
+ }
65
111
  /**
66
112
  * Front a local port with HTTPS on the tailnet.
67
113
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tailscale.js","sourceRoot":"","sources":["../../src/robopark/tailscale.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAUrC;;;;GAIG;AACH,SAAS,YAAY;IACnB,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC7C,CAAC,CAAC,CAAC,WAAW,EAAE,6CAA6C,EAAE,mDAAmD,CAAC;QACnH,CAAC,CAAC,CAAC,WAAW,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,sDAAsD,CAAC,CAAC;IAC5H,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,IAAI,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC5C,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,YAAY,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1D,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,KAAK,EAAE,iDAAiD,EAAE,CAAC;IAE9E,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7G,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IACnG,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,EAAE,YAAY,CAAC;IACnC,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,EAAE,KAAK,EAAE,oDAAoD,KAAK,wBAAwB,EAAE,CAAC;IACtG,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;IAChC,4EAA4E;IAC5E,0EAA0E;IAC1E,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1D,IAAI,GAAG;QAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;IAErF,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,IAAI,IAAI;QAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;IAExF,OAAO,EAAE,KAAK,EAAE,gDAAgD,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,aAAsD,EAAE;IAEjG,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,KAAK,EAAE,iDAAiD,EAAE,CAAC;IAC9E,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,cAAc,EAAE,CAAC;IAC7C,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAEhC,IAAI,CAAC;QACH,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,uEAAuE;QACvE,OAAO,EAAE,KAAK,EAAE,2BAA2B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1F,CAAC;IAED,2EAA2E;IAC3E,2EAA2E;IAC3E,mDAAmD;IACnD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAClG,CAAC;QAAC,MAAM,CAAC,CAAC,2CAA2C,CAAC,CAAC;IACzD,CAAC;IAED,uEAAuE;IACvE,2EAA2E;IAC3E,2EAA2E;IAC3E,wEAAwE;IACxE,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/G,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC,CAAC,8CAA8C,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,KAAK,EAAE,wCAAwC,QAAQ,CAAC,IAAI,gGAAgG,EAAE,CAAC;IAC1K,CAAC;IAED,4EAA4E;IAC5E,yEAAyE;IACzE,oCAAoC;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE;QACxC,IAAI;QACJ,kBAAkB,QAAQ,CAAC,IAAI,yCAAyC;YACtE,qEAAqE;KACxE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,WAAW,QAAQ,CAAC,IAAI,oIAAoI,EAAE,CAAC;IACjL,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"tailscale.js","sourceRoot":"","sources":["../../src/robopark/tailscale.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,12 @@
7
7
  * printed link works from anywhere on the tailnet.
8
8
  */
9
9
  import chalk from 'chalk';
10
- import { resolveTailnet } from './tailscale.js';
10
+ import { resolveTailnet, serveHttpsPort } from './tailscale.js';
11
+ // Dedicated tailnet HTTPS port that fronts the scheduler for call links. The
12
+ // 443 root is often already claimed on the box, and browsers only expose the
13
+ // microphone in a secure context — so `--tailscale` stands up its own https
14
+ // port to the scheduler rather than printing an http link the mic can't use.
15
+ const VOICE_HTTPS_PORT = 8446;
11
16
  /**
12
17
  * The one place a /voice-join.html link is assembled.
13
18
  *
@@ -37,19 +42,27 @@ export async function roboparkVoiceList(opts) {
37
42
  // is reachable on loopback but the link has to be shared.
38
43
  let linkHost = configured;
39
44
  if (opts.tailscale) {
40
- const { identity, error } = resolveTailnet();
41
- if (identity) {
42
- const port = (() => { try {
43
- return new URL(configured).port || '8080';
44
- }
45
- catch {
46
- return '8080';
47
- } })();
48
- linkHost = `http://${identity.host}:${port}`;
45
+ const schedulerPort = (() => { try {
46
+ return Number(new URL(configured).port) || 8080;
47
+ }
48
+ catch {
49
+ return 8080;
50
+ } })();
51
+ // Stand up (idempotently) an https tailnet front to the scheduler so the
52
+ // printed links open the microphone. Only the scheduler serves
53
+ // voice-join.html + /api, so this must front the scheduler, not the UI.
54
+ const { origin, error } = serveHttpsPort(schedulerPort, VOICE_HTTPS_PORT);
55
+ if (origin) {
56
+ linkHost = origin;
49
57
  }
50
58
  else {
51
- console.log(chalk.yellow(` ⚠ --tailscale: ${error}`));
52
- console.log(chalk.dim(' printing localhost links instead.'));
59
+ // Still list the links so the command is useful, but over http — and say
60
+ // why the mic will be blocked until https is available.
61
+ const { identity } = resolveTailnet();
62
+ if (identity)
63
+ linkHost = `http://${identity.host}:${schedulerPort}`;
64
+ console.log(chalk.yellow(` ⚠ --tailscale: could not enable https (${error})`));
65
+ console.log(chalk.dim(' printing http links; a browser will block the microphone until https works.'));
53
66
  }
54
67
  }
55
68
  let presets;
@@ -1 +1 @@
1
- {"version":3,"file":"voice-list.js","sourceRoot":"","sources":["../../src/robopark/voice-list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"voice-list.js","sourceRoot":"","sources":["../../src/robopark/voice-list.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robopark",
3
- "version": "3.3.53",
3
+ "version": "3.3.54",
4
4
  "description": "RoboPark fleet control CLI — scheduler, control UI, and character voice calls. Standalone: no infinicode runtime.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- _MtRTX4uPtowvXpWtukUO
1
+ 18X2Kr5XPUrJm-7AyZRXE
@@ -18,26 +18,26 @@
18
18
  "static/chunks/9880-53262785284464cc.js",
19
19
  "static/chunks/app/layout-fcce963da1d8220f.js"
20
20
  ],
21
- "/api/device-character/route": [
21
+ "/api/download-piper-model/route": [
22
22
  "static/chunks/webpack-5252e5254da079b5.js",
23
23
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
24
24
  "static/chunks/1255-404bb8de49c90395.js",
25
25
  "static/chunks/main-app-a1f59168303c7f84.js",
26
- "static/chunks/app/api/device-character/route-0952b44bda5bfb6d.js"
26
+ "static/chunks/app/api/download-piper-model/route-0952b44bda5bfb6d.js"
27
27
  ],
28
- "/api/download-piper-model/route": [
28
+ "/api/models/route": [
29
29
  "static/chunks/webpack-5252e5254da079b5.js",
30
30
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
31
31
  "static/chunks/1255-404bb8de49c90395.js",
32
32
  "static/chunks/main-app-a1f59168303c7f84.js",
33
- "static/chunks/app/api/download-piper-model/route-0952b44bda5bfb6d.js"
33
+ "static/chunks/app/api/models/route-0952b44bda5bfb6d.js"
34
34
  ],
35
- "/api/models/route": [
35
+ "/api/device-character/route": [
36
36
  "static/chunks/webpack-5252e5254da079b5.js",
37
37
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
38
38
  "static/chunks/1255-404bb8de49c90395.js",
39
39
  "static/chunks/main-app-a1f59168303c7f84.js",
40
- "static/chunks/app/api/models/route-0952b44bda5bfb6d.js"
40
+ "static/chunks/app/api/device-character/route-0952b44bda5bfb6d.js"
41
41
  ],
42
42
  "/api/prompt/route": [
43
43
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -60,19 +60,19 @@
60
60
  "static/chunks/main-app-a1f59168303c7f84.js",
61
61
  "static/chunks/app/api/prewarm/route-0952b44bda5bfb6d.js"
62
62
  ],
63
- "/api/robopark/devices/[deviceId]/control/route": [
63
+ "/api/robopark/robots/[robotId]/operations/route": [
64
64
  "static/chunks/webpack-5252e5254da079b5.js",
65
65
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
66
66
  "static/chunks/1255-404bb8de49c90395.js",
67
67
  "static/chunks/main-app-a1f59168303c7f84.js",
68
- "static/chunks/app/api/robopark/devices/[deviceId]/control/route-0952b44bda5bfb6d.js"
68
+ "static/chunks/app/api/robopark/robots/[robotId]/operations/route-0952b44bda5bfb6d.js"
69
69
  ],
70
- "/api/robopark/robots/[robotId]/operations/route": [
70
+ "/api/robopark/devices/[deviceId]/control/route": [
71
71
  "static/chunks/webpack-5252e5254da079b5.js",
72
72
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
73
73
  "static/chunks/1255-404bb8de49c90395.js",
74
74
  "static/chunks/main-app-a1f59168303c7f84.js",
75
- "static/chunks/app/api/robopark/robots/[robotId]/operations/route-0952b44bda5bfb6d.js"
75
+ "static/chunks/app/api/robopark/devices/[deviceId]/control/route-0952b44bda5bfb6d.js"
76
76
  ],
77
77
  "/api/robopark/sessions/[sessionId]/end/route": [
78
78
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -88,13 +88,6 @@
88
88
  "static/chunks/main-app-a1f59168303c7f84.js",
89
89
  "static/chunks/app/api/robopark/transcripts/[sessionId]/route-0952b44bda5bfb6d.js"
90
90
  ],
91
- "/api/setup/status/route": [
92
- "static/chunks/webpack-5252e5254da079b5.js",
93
- "static/chunks/4bd1b696-f785427dddbba9fb.js",
94
- "static/chunks/1255-404bb8de49c90395.js",
95
- "static/chunks/main-app-a1f59168303c7f84.js",
96
- "static/chunks/app/api/setup/status/route-0952b44bda5bfb6d.js"
97
- ],
98
91
  "/api/setup/complete/route": [
99
92
  "static/chunks/webpack-5252e5254da079b5.js",
100
93
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
@@ -102,12 +95,12 @@
102
95
  "static/chunks/main-app-a1f59168303c7f84.js",
103
96
  "static/chunks/app/api/setup/complete/route-0952b44bda5bfb6d.js"
104
97
  ],
105
- "/api/setup/test-n8n/route": [
98
+ "/api/setup/status/route": [
106
99
  "static/chunks/webpack-5252e5254da079b5.js",
107
100
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
108
101
  "static/chunks/1255-404bb8de49c90395.js",
109
102
  "static/chunks/main-app-a1f59168303c7f84.js",
110
- "static/chunks/app/api/setup/test-n8n/route-0952b44bda5bfb6d.js"
103
+ "static/chunks/app/api/setup/status/route-0952b44bda5bfb6d.js"
111
104
  ],
112
105
  "/api/setup/test-groq/route": [
113
106
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -123,12 +116,12 @@
123
116
  "static/chunks/main-app-a1f59168303c7f84.js",
124
117
  "static/chunks/app/api/setup/test-hass/route-0952b44bda5bfb6d.js"
125
118
  ],
126
- "/api/setup/test-ollama/route": [
119
+ "/api/setup/test-n8n/route": [
127
120
  "static/chunks/webpack-5252e5254da079b5.js",
128
121
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
129
122
  "static/chunks/1255-404bb8de49c90395.js",
130
123
  "static/chunks/main-app-a1f59168303c7f84.js",
131
- "static/chunks/app/api/setup/test-ollama/route-0952b44bda5bfb6d.js"
124
+ "static/chunks/app/api/setup/test-n8n/route-0952b44bda5bfb6d.js"
132
125
  ],
133
126
  "/api/test-tts/route": [
134
127
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -137,19 +130,19 @@
137
130
  "static/chunks/main-app-a1f59168303c7f84.js",
138
131
  "static/chunks/app/api/test-tts/route-0952b44bda5bfb6d.js"
139
132
  ],
140
- "/api/voices/route": [
133
+ "/api/wake-word/models/route": [
141
134
  "static/chunks/webpack-5252e5254da079b5.js",
142
135
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
143
136
  "static/chunks/1255-404bb8de49c90395.js",
144
137
  "static/chunks/main-app-a1f59168303c7f84.js",
145
- "static/chunks/app/api/voices/route-0952b44bda5bfb6d.js"
138
+ "static/chunks/app/api/wake-word/models/route-0952b44bda5bfb6d.js"
146
139
  ],
147
- "/api/wake-word/models/route": [
140
+ "/api/setup/test-ollama/route": [
148
141
  "static/chunks/webpack-5252e5254da079b5.js",
149
142
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
150
143
  "static/chunks/1255-404bb8de49c90395.js",
151
144
  "static/chunks/main-app-a1f59168303c7f84.js",
152
- "static/chunks/app/api/wake-word/models/route-0952b44bda5bfb6d.js"
145
+ "static/chunks/app/api/setup/test-ollama/route-0952b44bda5bfb6d.js"
153
146
  ],
154
147
  "/api/wake-word/status/route": [
155
148
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -165,12 +158,12 @@
165
158
  "static/chunks/main-app-a1f59168303c7f84.js",
166
159
  "static/chunks/app/api/wake-word/upload/route-0952b44bda5bfb6d.js"
167
160
  ],
168
- "/api/model-status/route": [
161
+ "/api/voices/route": [
169
162
  "static/chunks/webpack-5252e5254da079b5.js",
170
163
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
171
164
  "static/chunks/1255-404bb8de49c90395.js",
172
165
  "static/chunks/main-app-a1f59168303c7f84.js",
173
- "static/chunks/app/api/model-status/route-0952b44bda5bfb6d.js"
166
+ "static/chunks/app/api/voices/route-0952b44bda5bfb6d.js"
174
167
  ],
175
168
  "/api/kiosk-hardware/route": [
176
169
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -179,19 +172,19 @@
179
172
  "static/chunks/main-app-a1f59168303c7f84.js",
180
173
  "static/chunks/app/api/kiosk-hardware/route-0952b44bda5bfb6d.js"
181
174
  ],
182
- "/api/connection-details/route": [
175
+ "/api/model-status/route": [
183
176
  "static/chunks/webpack-5252e5254da079b5.js",
184
177
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
185
178
  "static/chunks/1255-404bb8de49c90395.js",
186
179
  "static/chunks/main-app-a1f59168303c7f84.js",
187
- "static/chunks/app/api/connection-details/route-0952b44bda5bfb6d.js"
180
+ "static/chunks/app/api/model-status/route-0952b44bda5bfb6d.js"
188
181
  ],
189
- "/api/robopark/device-access/route": [
182
+ "/api/connection-details/route": [
190
183
  "static/chunks/webpack-5252e5254da079b5.js",
191
184
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
192
185
  "static/chunks/1255-404bb8de49c90395.js",
193
186
  "static/chunks/main-app-a1f59168303c7f84.js",
194
- "static/chunks/app/api/robopark/device-access/route-0952b44bda5bfb6d.js"
187
+ "static/chunks/app/api/connection-details/route-0952b44bda5bfb6d.js"
195
188
  ],
196
189
  "/api/robopark/character-ai/route": [
197
190
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -200,26 +193,26 @@
200
193
  "static/chunks/main-app-a1f59168303c7f84.js",
201
194
  "static/chunks/app/api/robopark/character-ai/route-0952b44bda5bfb6d.js"
202
195
  ],
203
- "/api/robopark/live-rooms/route": [
196
+ "/api/robopark/device-access/route": [
204
197
  "static/chunks/webpack-5252e5254da079b5.js",
205
198
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
206
199
  "static/chunks/1255-404bb8de49c90395.js",
207
200
  "static/chunks/main-app-a1f59168303c7f84.js",
208
- "static/chunks/app/api/robopark/live-rooms/route-0952b44bda5bfb6d.js"
201
+ "static/chunks/app/api/robopark/device-access/route-0952b44bda5bfb6d.js"
209
202
  ],
210
- "/api/robopark/camera-token/route": [
203
+ "/api/robopark/live-rooms/route": [
211
204
  "static/chunks/webpack-5252e5254da079b5.js",
212
205
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
213
206
  "static/chunks/1255-404bb8de49c90395.js",
214
207
  "static/chunks/main-app-a1f59168303c7f84.js",
215
- "static/chunks/app/api/robopark/camera-token/route-0952b44bda5bfb6d.js"
208
+ "static/chunks/app/api/robopark/live-rooms/route-0952b44bda5bfb6d.js"
216
209
  ],
217
- "/api/robopark/monitor-token/route": [
210
+ "/api/robopark/camera-token/route": [
218
211
  "static/chunks/webpack-5252e5254da079b5.js",
219
212
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
220
213
  "static/chunks/1255-404bb8de49c90395.js",
221
214
  "static/chunks/main-app-a1f59168303c7f84.js",
222
- "static/chunks/app/api/robopark/monitor-token/route-0952b44bda5bfb6d.js"
215
+ "static/chunks/app/api/robopark/camera-token/route-0952b44bda5bfb6d.js"
223
216
  ],
224
217
  "/api/robopark/robots/route": [
225
218
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -228,19 +221,19 @@
228
221
  "static/chunks/main-app-a1f59168303c7f84.js",
229
222
  "static/chunks/app/api/robopark/robots/route-0952b44bda5bfb6d.js"
230
223
  ],
231
- "/api/robopark/sessions/route": [
224
+ "/api/robopark/monitor-token/route": [
232
225
  "static/chunks/webpack-5252e5254da079b5.js",
233
226
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
234
227
  "static/chunks/1255-404bb8de49c90395.js",
235
228
  "static/chunks/main-app-a1f59168303c7f84.js",
236
- "static/chunks/app/api/robopark/sessions/route-0952b44bda5bfb6d.js"
229
+ "static/chunks/app/api/robopark/monitor-token/route-0952b44bda5bfb6d.js"
237
230
  ],
238
- "/api/robopark/servers/[serverId]/route": [
231
+ "/api/robopark/servers/[serverId]/metrics/route": [
239
232
  "static/chunks/webpack-5252e5254da079b5.js",
240
233
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
241
234
  "static/chunks/1255-404bb8de49c90395.js",
242
235
  "static/chunks/main-app-a1f59168303c7f84.js",
243
- "static/chunks/app/api/robopark/servers/[serverId]/route-0952b44bda5bfb6d.js"
236
+ "static/chunks/app/api/robopark/servers/[serverId]/metrics/route-0952b44bda5bfb6d.js"
244
237
  ],
245
238
  "/api/robopark/servers/route": [
246
239
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -249,33 +242,33 @@
249
242
  "static/chunks/main-app-a1f59168303c7f84.js",
250
243
  "static/chunks/app/api/robopark/servers/route-0952b44bda5bfb6d.js"
251
244
  ],
252
- "/api/robopark/vision-caption/route": [
245
+ "/api/robopark/sessions/route": [
253
246
  "static/chunks/webpack-5252e5254da079b5.js",
254
247
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
255
248
  "static/chunks/1255-404bb8de49c90395.js",
256
249
  "static/chunks/main-app-a1f59168303c7f84.js",
257
- "static/chunks/app/api/robopark/vision-caption/route-0952b44bda5bfb6d.js"
250
+ "static/chunks/app/api/robopark/sessions/route-0952b44bda5bfb6d.js"
258
251
  ],
259
- "/api/robopark/servers/[serverId]/metrics/route": [
252
+ "/api/robopark/servers/[serverId]/route": [
260
253
  "static/chunks/webpack-5252e5254da079b5.js",
261
254
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
262
255
  "static/chunks/1255-404bb8de49c90395.js",
263
256
  "static/chunks/main-app-a1f59168303c7f84.js",
264
- "static/chunks/app/api/robopark/servers/[serverId]/metrics/route-0952b44bda5bfb6d.js"
257
+ "static/chunks/app/api/robopark/servers/[serverId]/route-0952b44bda5bfb6d.js"
265
258
  ],
266
- "/api/settings/route": [
259
+ "/api/robopark/vision-caption/route": [
267
260
  "static/chunks/webpack-5252e5254da079b5.js",
268
261
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
269
262
  "static/chunks/1255-404bb8de49c90395.js",
270
263
  "static/chunks/main-app-a1f59168303c7f84.js",
271
- "static/chunks/app/api/settings/route-0952b44bda5bfb6d.js"
264
+ "static/chunks/app/api/robopark/vision-caption/route-0952b44bda5bfb6d.js"
272
265
  ],
273
- "/api/robovoice/robots/[robotId]/media-health/route": [
266
+ "/api/settings/route": [
274
267
  "static/chunks/webpack-5252e5254da079b5.js",
275
268
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
276
269
  "static/chunks/1255-404bb8de49c90395.js",
277
270
  "static/chunks/main-app-a1f59168303c7f84.js",
278
- "static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-0952b44bda5bfb6d.js"
271
+ "static/chunks/app/api/settings/route-0952b44bda5bfb6d.js"
279
272
  ],
280
273
  "/api/robopark/robots/[robotId]/voice-engine/route": [
281
274
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -284,12 +277,12 @@
284
277
  "static/chunks/main-app-a1f59168303c7f84.js",
285
278
  "static/chunks/app/api/robopark/robots/[robotId]/voice-engine/route-0952b44bda5bfb6d.js"
286
279
  ],
287
- "/api/robopark/transcripts/route": [
280
+ "/api/robovoice/robots/[robotId]/media-health/route": [
288
281
  "static/chunks/webpack-5252e5254da079b5.js",
289
282
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
290
283
  "static/chunks/1255-404bb8de49c90395.js",
291
284
  "static/chunks/main-app-a1f59168303c7f84.js",
292
- "static/chunks/app/api/robopark/transcripts/route-0952b44bda5bfb6d.js"
285
+ "static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-0952b44bda5bfb6d.js"
293
286
  ],
294
287
  "/api/turn-credentials/route": [
295
288
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -298,12 +291,12 @@
298
291
  "static/chunks/main-app-a1f59168303c7f84.js",
299
292
  "static/chunks/app/api/turn-credentials/route-0952b44bda5bfb6d.js"
300
293
  ],
301
- "/api/wake/route": [
294
+ "/api/robopark/transcripts/route": [
302
295
  "static/chunks/webpack-5252e5254da079b5.js",
303
296
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
304
297
  "static/chunks/1255-404bb8de49c90395.js",
305
298
  "static/chunks/main-app-a1f59168303c7f84.js",
306
- "static/chunks/app/api/wake/route-0952b44bda5bfb6d.js"
299
+ "static/chunks/app/api/robopark/transcripts/route-0952b44bda5bfb6d.js"
307
300
  ],
308
301
  "/camera-grid/route": [
309
302
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -312,19 +305,19 @@
312
305
  "static/chunks/main-app-a1f59168303c7f84.js",
313
306
  "static/chunks/app/camera-grid/route-0952b44bda5bfb6d.js"
314
307
  ],
315
- "/robopark/[...path]/route": [
308
+ "/api/wake/route": [
316
309
  "static/chunks/webpack-5252e5254da079b5.js",
317
310
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
318
311
  "static/chunks/1255-404bb8de49c90395.js",
319
312
  "static/chunks/main-app-a1f59168303c7f84.js",
320
- "static/chunks/app/robopark/[...path]/route-0952b44bda5bfb6d.js"
313
+ "static/chunks/app/api/wake/route-0952b44bda5bfb6d.js"
321
314
  ],
322
- "/fed/media/robots/[robotId]/video_feed/route": [
315
+ "/robopark/[...path]/route": [
323
316
  "static/chunks/webpack-5252e5254da079b5.js",
324
317
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
325
318
  "static/chunks/1255-404bb8de49c90395.js",
326
319
  "static/chunks/main-app-a1f59168303c7f84.js",
327
- "static/chunks/app/fed/media/robots/[robotId]/video_feed/route-0952b44bda5bfb6d.js"
320
+ "static/chunks/app/robopark/[...path]/route-0952b44bda5bfb6d.js"
328
321
  ],
329
322
  "/fed/[...path]/route": [
330
323
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -333,12 +326,12 @@
333
326
  "static/chunks/main-app-a1f59168303c7f84.js",
334
327
  "static/chunks/app/fed/[...path]/route-0952b44bda5bfb6d.js"
335
328
  ],
336
- "/vendor/livekit-client.umd.js/route": [
329
+ "/fed/media/robots/[robotId]/video_feed/route": [
337
330
  "static/chunks/webpack-5252e5254da079b5.js",
338
331
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
339
332
  "static/chunks/1255-404bb8de49c90395.js",
340
333
  "static/chunks/main-app-a1f59168303c7f84.js",
341
- "static/chunks/app/vendor/livekit-client.umd.js/route-0952b44bda5bfb6d.js"
334
+ "static/chunks/app/fed/media/robots/[robotId]/video_feed/route-0952b44bda5bfb6d.js"
342
335
  ],
343
336
  "/tailnet/route": [
344
337
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -361,19 +354,19 @@
361
354
  "static/chunks/main-app-a1f59168303c7f84.js",
362
355
  "static/chunks/app/(app)/opengraph-image-xg4ifa/route-0952b44bda5bfb6d.js"
363
356
  ],
364
- "/robopark/api/[...path]/route": [
357
+ "/vendor/livekit-client.umd.js/route": [
365
358
  "static/chunks/webpack-5252e5254da079b5.js",
366
359
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
367
360
  "static/chunks/1255-404bb8de49c90395.js",
368
361
  "static/chunks/main-app-a1f59168303c7f84.js",
369
- "static/chunks/app/robopark/api/[...path]/route-0952b44bda5bfb6d.js"
362
+ "static/chunks/app/vendor/livekit-client.umd.js/route-0952b44bda5bfb6d.js"
370
363
  ],
371
- "/robopark/page": [
364
+ "/robopark/api/[...path]/route": [
372
365
  "static/chunks/webpack-5252e5254da079b5.js",
373
366
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
374
367
  "static/chunks/1255-404bb8de49c90395.js",
375
368
  "static/chunks/main-app-a1f59168303c7f84.js",
376
- "static/chunks/app/robopark/page-0952b44bda5bfb6d.js"
369
+ "static/chunks/app/robopark/api/[...path]/route-0952b44bda5bfb6d.js"
377
370
  ],
378
371
  "/voice-tester/page": [
379
372
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -382,6 +375,13 @@
382
375
  "static/chunks/main-app-a1f59168303c7f84.js",
383
376
  "static/chunks/app/voice-tester/page-ae699e048e0eb834.js"
384
377
  ],
378
+ "/robopark/page": [
379
+ "static/chunks/webpack-5252e5254da079b5.js",
380
+ "static/chunks/4bd1b696-f785427dddbba9fb.js",
381
+ "static/chunks/1255-404bb8de49c90395.js",
382
+ "static/chunks/main-app-a1f59168303c7f84.js",
383
+ "static/chunks/app/robopark/page-0952b44bda5bfb6d.js"
384
+ ],
385
385
  "/(app)/layout": [
386
386
  "static/chunks/webpack-5252e5254da079b5.js",
387
387
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
@@ -1,58 +1,58 @@
1
1
  {
2
2
  "/_not-found/page": "/_not-found",
3
- "/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",
5
+ "/api/device-character/route": "/api/device-character",
6
6
  "/api/prompt/route": "/api/prompt",
7
7
  "/api/reload-tools/route": "/api/reload-tools",
8
8
  "/api/prewarm/route": "/api/prewarm",
9
- "/api/robopark/devices/[deviceId]/control/route": "/api/robopark/devices/[deviceId]/control",
10
9
  "/api/robopark/robots/[robotId]/operations/route": "/api/robopark/robots/[robotId]/operations",
10
+ "/api/robopark/devices/[deviceId]/control/route": "/api/robopark/devices/[deviceId]/control",
11
11
  "/api/robopark/sessions/[sessionId]/end/route": "/api/robopark/sessions/[sessionId]/end",
12
12
  "/api/robopark/transcripts/[sessionId]/route": "/api/robopark/transcripts/[sessionId]",
13
- "/api/setup/status/route": "/api/setup/status",
14
13
  "/api/setup/complete/route": "/api/setup/complete",
15
- "/api/setup/test-n8n/route": "/api/setup/test-n8n",
14
+ "/api/setup/status/route": "/api/setup/status",
16
15
  "/api/setup/test-groq/route": "/api/setup/test-groq",
17
16
  "/api/setup/test-hass/route": "/api/setup/test-hass",
18
- "/api/setup/test-ollama/route": "/api/setup/test-ollama",
17
+ "/api/setup/test-n8n/route": "/api/setup/test-n8n",
19
18
  "/api/test-tts/route": "/api/test-tts",
20
- "/api/voices/route": "/api/voices",
21
19
  "/api/wake-word/models/route": "/api/wake-word/models",
20
+ "/api/setup/test-ollama/route": "/api/setup/test-ollama",
22
21
  "/api/wake-word/status/route": "/api/wake-word/status",
23
22
  "/api/wake-word/upload/route": "/api/wake-word/upload",
23
+ "/api/voices/route": "/api/voices",
24
24
  "/favicon.ico/route": "/favicon.ico",
25
- "/api/model-status/route": "/api/model-status",
26
25
  "/api/kiosk-hardware/route": "/api/kiosk-hardware",
26
+ "/api/model-status/route": "/api/model-status",
27
27
  "/api/connection-details/route": "/api/connection-details",
28
- "/api/robopark/device-access/route": "/api/robopark/device-access",
29
28
  "/api/robopark/character-ai/route": "/api/robopark/character-ai",
29
+ "/api/robopark/device-access/route": "/api/robopark/device-access",
30
30
  "/api/robopark/live-rooms/route": "/api/robopark/live-rooms",
31
31
  "/api/robopark/camera-token/route": "/api/robopark/camera-token",
32
- "/api/robopark/monitor-token/route": "/api/robopark/monitor-token",
33
32
  "/api/robopark/robots/route": "/api/robopark/robots",
33
+ "/api/robopark/monitor-token/route": "/api/robopark/monitor-token",
34
+ "/api/robopark/servers/[serverId]/metrics/route": "/api/robopark/servers/[serverId]/metrics",
35
+ "/api/robopark/servers/route": "/api/robopark/servers",
34
36
  "/api/robopark/sessions/route": "/api/robopark/sessions",
35
37
  "/api/robopark/servers/[serverId]/route": "/api/robopark/servers/[serverId]",
36
- "/api/robopark/servers/route": "/api/robopark/servers",
37
38
  "/api/robopark/vision-caption/route": "/api/robopark/vision-caption",
38
- "/api/robopark/servers/[serverId]/metrics/route": "/api/robopark/servers/[serverId]/metrics",
39
39
  "/api/settings/route": "/api/settings",
40
- "/api/robovoice/robots/[robotId]/media-health/route": "/api/robovoice/robots/[robotId]/media-health",
41
40
  "/api/robopark/robots/[robotId]/voice-engine/route": "/api/robopark/robots/[robotId]/voice-engine",
42
- "/api/robopark/transcripts/route": "/api/robopark/transcripts",
41
+ "/api/robovoice/robots/[robotId]/media-health/route": "/api/robovoice/robots/[robotId]/media-health",
43
42
  "/api/turn-credentials/route": "/api/turn-credentials",
44
- "/api/wake/route": "/api/wake",
43
+ "/api/robopark/transcripts/route": "/api/robopark/transcripts",
45
44
  "/camera-grid/route": "/camera-grid",
45
+ "/api/wake/route": "/api/wake",
46
46
  "/robopark/[...path]/route": "/robopark/[...path]",
47
- "/fed/media/robots/[robotId]/video_feed/route": "/fed/media/robots/[robotId]/video_feed",
48
47
  "/fed/[...path]/route": "/fed/[...path]",
49
- "/vendor/livekit-client.umd.js/route": "/vendor/livekit-client.umd.js",
48
+ "/fed/media/robots/[robotId]/video_feed/route": "/fed/media/robots/[robotId]/video_feed",
50
49
  "/tailnet/route": "/tailnet",
51
50
  "/robopark/api/robots/[robotId]/stream/route": "/robopark/api/robots/[robotId]/stream",
52
51
  "/(app)/opengraph-image-xg4ifa/route": "/opengraph-image-xg4ifa",
52
+ "/vendor/livekit-client.umd.js/route": "/vendor/livekit-client.umd.js",
53
53
  "/robopark/api/[...path]/route": "/robopark/api/[...path]",
54
- "/robopark/page": "/robopark",
55
54
  "/voice-tester/page": "/voice-tester",
55
+ "/robopark/page": "/robopark",
56
56
  "/(app)/page": "/",
57
57
  "/(app)/voice/page": "/voice"
58
58
  }
@@ -5,8 +5,8 @@
5
5
  "devFiles": [],
6
6
  "ampDevFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/_MtRTX4uPtowvXpWtukUO/_buildManifest.js",
9
- "static/_MtRTX4uPtowvXpWtukUO/_ssgManifest.js"
8
+ "static/18X2Kr5XPUrJm-7AyZRXE/_buildManifest.js",
9
+ "static/18X2Kr5XPUrJm-7AyZRXE/_ssgManifest.js"
10
10
  ],
11
11
  "rootMainFiles": [
12
12
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -34,8 +34,8 @@
34
34
  "dynamicRoutes": {},
35
35
  "notFoundRoutes": [],
36
36
  "preview": {
37
- "previewModeId": "d98b6b9c2a458f9f04f94be62f0c1f46",
38
- "previewModeSigningKey": "c3afef119d1bc3e9f8883c1f34b10cf942f85d6e5539eb884f19d411a3613608",
39
- "previewModeEncryptionKey": "0b21269eb42a17dcd8edda002b25a5805007d514507d83e8b6ea328573022861"
37
+ "previewModeId": "e4bb612eaf8c0837c4fc576f3f648ae9",
38
+ "previewModeSigningKey": "449d9090b133c8e88fbec8137fcee0f4222da2bfde4a44f5523ce7f6efe448fa",
39
+ "previewModeEncryptionKey": "4ba9486101a12bd914afb2752de27f55c248b3a44319fe054f740e5cb3d9419a"
40
40
  }
41
41
  }
@@ -1,58 +1,58 @@
1
1
  {
2
2
  "/_not-found/page": "app/_not-found/page.js",
3
- "/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",
5
+ "/api/device-character/route": "app/api/device-character/route.js",
6
6
  "/api/prompt/route": "app/api/prompt/route.js",
7
7
  "/api/reload-tools/route": "app/api/reload-tools/route.js",
8
8
  "/api/prewarm/route": "app/api/prewarm/route.js",
9
- "/api/robopark/devices/[deviceId]/control/route": "app/api/robopark/devices/[deviceId]/control/route.js",
10
9
  "/api/robopark/robots/[robotId]/operations/route": "app/api/robopark/robots/[robotId]/operations/route.js",
10
+ "/api/robopark/devices/[deviceId]/control/route": "app/api/robopark/devices/[deviceId]/control/route.js",
11
11
  "/api/robopark/sessions/[sessionId]/end/route": "app/api/robopark/sessions/[sessionId]/end/route.js",
12
12
  "/api/robopark/transcripts/[sessionId]/route": "app/api/robopark/transcripts/[sessionId]/route.js",
13
- "/api/setup/status/route": "app/api/setup/status/route.js",
14
13
  "/api/setup/complete/route": "app/api/setup/complete/route.js",
15
- "/api/setup/test-n8n/route": "app/api/setup/test-n8n/route.js",
14
+ "/api/setup/status/route": "app/api/setup/status/route.js",
16
15
  "/api/setup/test-groq/route": "app/api/setup/test-groq/route.js",
17
16
  "/api/setup/test-hass/route": "app/api/setup/test-hass/route.js",
18
- "/api/setup/test-ollama/route": "app/api/setup/test-ollama/route.js",
17
+ "/api/setup/test-n8n/route": "app/api/setup/test-n8n/route.js",
19
18
  "/api/test-tts/route": "app/api/test-tts/route.js",
20
- "/api/voices/route": "app/api/voices/route.js",
21
19
  "/api/wake-word/models/route": "app/api/wake-word/models/route.js",
20
+ "/api/setup/test-ollama/route": "app/api/setup/test-ollama/route.js",
22
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/voices/route": "app/api/voices/route.js",
24
24
  "/favicon.ico/route": "app/favicon.ico/route.js",
25
- "/api/model-status/route": "app/api/model-status/route.js",
26
25
  "/api/kiosk-hardware/route": "app/api/kiosk-hardware/route.js",
26
+ "/api/model-status/route": "app/api/model-status/route.js",
27
27
  "/api/connection-details/route": "app/api/connection-details/route.js",
28
- "/api/robopark/device-access/route": "app/api/robopark/device-access/route.js",
29
28
  "/api/robopark/character-ai/route": "app/api/robopark/character-ai/route.js",
29
+ "/api/robopark/device-access/route": "app/api/robopark/device-access/route.js",
30
30
  "/api/robopark/live-rooms/route": "app/api/robopark/live-rooms/route.js",
31
31
  "/api/robopark/camera-token/route": "app/api/robopark/camera-token/route.js",
32
- "/api/robopark/monitor-token/route": "app/api/robopark/monitor-token/route.js",
33
32
  "/api/robopark/robots/route": "app/api/robopark/robots/route.js",
33
+ "/api/robopark/monitor-token/route": "app/api/robopark/monitor-token/route.js",
34
+ "/api/robopark/servers/[serverId]/metrics/route": "app/api/robopark/servers/[serverId]/metrics/route.js",
35
+ "/api/robopark/servers/route": "app/api/robopark/servers/route.js",
34
36
  "/api/robopark/sessions/route": "app/api/robopark/sessions/route.js",
35
37
  "/api/robopark/servers/[serverId]/route": "app/api/robopark/servers/[serverId]/route.js",
36
- "/api/robopark/servers/route": "app/api/robopark/servers/route.js",
37
38
  "/api/robopark/vision-caption/route": "app/api/robopark/vision-caption/route.js",
38
- "/api/robopark/servers/[serverId]/metrics/route": "app/api/robopark/servers/[serverId]/metrics/route.js",
39
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
40
  "/api/robopark/robots/[robotId]/voice-engine/route": "app/api/robopark/robots/[robotId]/voice-engine/route.js",
42
- "/api/robopark/transcripts/route": "app/api/robopark/transcripts/route.js",
41
+ "/api/robovoice/robots/[robotId]/media-health/route": "app/api/robovoice/robots/[robotId]/media-health/route.js",
43
42
  "/api/turn-credentials/route": "app/api/turn-credentials/route.js",
44
- "/api/wake/route": "app/api/wake/route.js",
43
+ "/api/robopark/transcripts/route": "app/api/robopark/transcripts/route.js",
45
44
  "/camera-grid/route": "app/camera-grid/route.js",
45
+ "/api/wake/route": "app/api/wake/route.js",
46
46
  "/robopark/[...path]/route": "app/robopark/[...path]/route.js",
47
- "/fed/media/robots/[robotId]/video_feed/route": "app/fed/media/robots/[robotId]/video_feed/route.js",
48
47
  "/fed/[...path]/route": "app/fed/[...path]/route.js",
49
- "/vendor/livekit-client.umd.js/route": "app/vendor/livekit-client.umd.js/route.js",
48
+ "/fed/media/robots/[robotId]/video_feed/route": "app/fed/media/robots/[robotId]/video_feed/route.js",
50
49
  "/tailnet/route": "app/tailnet/route.js",
51
50
  "/robopark/api/robots/[robotId]/stream/route": "app/robopark/api/robots/[robotId]/stream/route.js",
52
51
  "/(app)/opengraph-image-xg4ifa/route": "app/(app)/opengraph-image-xg4ifa/route.js",
52
+ "/vendor/livekit-client.umd.js/route": "app/vendor/livekit-client.umd.js/route.js",
53
53
  "/robopark/api/[...path]/route": "app/robopark/api/[...path]/route.js",
54
- "/robopark/page": "app/robopark/page.js",
55
54
  "/voice-tester/page": "app/voice-tester/page.js",
55
+ "/robopark/page": "app/robopark/page.js",
56
56
  "/(app)/page": "app/(app)/page.js",
57
57
  "/(app)/voice/page": "app/(app)/voice/page.js"
58
58
  }
@@ -3,8 +3,8 @@
3
3
  "functions": {
4
4
  "/api/kiosk-hardware": {},
5
5
  "/api/robovoice/robots/[robotId]/media-health": {},
6
- "/robopark/[...path]": {},
7
6
  "/fed/media/robots/[robotId]/video_feed": {},
7
+ "/robopark/[...path]": {},
8
8
  "/robopark/api/robots/[robotId]/stream": {}
9
9
  }
10
10
  }
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-5252e5254da079b5.js" defer=""></script><script src="/_next/static/chunks/framework-e60c938074ff7136.js" defer=""></script><script src="/_next/static/chunks/main-9e24e8708ff075fc.js" defer=""></script><script src="/_next/static/chunks/pages/_app-131c90850aef965b.js" defer=""></script><script src="/_next/static/chunks/pages/_error-e4ba546eb376bdf4.js" defer=""></script><script src="/_next/static/_MtRTX4uPtowvXpWtukUO/_buildManifest.js" defer=""></script><script src="/_next/static/_MtRTX4uPtowvXpWtukUO/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"_MtRTX4uPtowvXpWtukUO","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!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/18X2Kr5XPUrJm-7AyZRXE/_buildManifest.js" defer=""></script><script src="/_next/static/18X2Kr5XPUrJm-7AyZRXE/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"18X2Kr5XPUrJm-7AyZRXE","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- {"node":{},"edge":{},"encryptionKey":"kyP4PKOhO9s1fH56OyhwJpjSOiIHtuvzvGso5iS1O4U="}
1
+ {"node":{},"edge":{},"encryptionKey":"rNGxr5n7PWPkpyO0LE79AJx3jRTg4Fpdyxs3nl9k67A="}