robopark 3.3.35 → 3.3.37
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/dist/robopark/add-robot.js +2 -2
- package/dist/robopark/add-robot.js.map +1 -1
- package/dist/robopark/kiosk-browser.js +145 -0
- package/dist/robopark/kiosk-browser.js.map +1 -0
- package/dist/robopark/start.js +295 -0
- package/dist/robopark/start.js.map +1 -0
- package/dist/robopark/voice-list.js +23 -12
- package/dist/robopark/voice-list.js.map +1 -1
- package/dist/robopark-cli.js +21 -0
- package/dist/robopark-cli.js.map +1 -1
- package/package.json +7 -3
- package/scheduler/main.py +150 -30
- package/scheduler/static/voice-join.html +1 -1
- package/ui/standalone/.next/BUILD_ID +1 -1
- package/ui/standalone/.next/app-build-manifest.json +63 -63
- package/ui/standalone/.next/app-path-routes-manifest.json +18 -18
- package/ui/standalone/.next/build-manifest.json +2 -2
- package/ui/standalone/.next/server/app/api/robovoice/robots/[robotId]/media-health/route.js +1 -1
- package/ui/standalone/.next/server/app/fed/[...path]/route.js +2 -2
- package/ui/standalone/.next/server/app/fed/media/robots/[robotId]/video_feed/route.js +1 -1
- package/ui/standalone/.next/server/app/robopark/[...path]/route.js +1 -1
- package/ui/standalone/.next/server/app/robopark/api/[...path]/route.js +1 -1
- package/ui/standalone/.next/server/app/robopark/api/robots/[robotId]/stream/route.js +1 -1
- package/ui/standalone/.next/server/app-paths-manifest.json +18 -18
- 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/public/tailnet/index.html +31 -1
- package/scheduler/__pycache__/main.cpython-312.pyc +0 -0
- package/ui/standalone/.next/server/chunks/5123.js +0 -11
- package/ui/standalone/.next/server/chunks/7661.js +0 -11
- package/ui/standalone/.next/static/Xg-e8h70WpdFcsZ2vcfOG/_buildManifest.js +0 -1
- package/ui/standalone/.next/static/Xg-e8h70WpdFcsZ2vcfOG/_ssgManifest.js +0 -1
- package/ui/standalone/.next/static/chunks/app/(app)/voice/page-d98593eea4888404.js +0 -1
- package/ui/standalone/.next/static/chunks/app/_not-found/page-9f0acae7481c60bb.js +0 -1
- package/ui/standalone/.next/static/chunks/app/layout-4829e027e68fded4.js +0 -1
- package/ui/standalone/.next/static/chunks/app/voice-tester/page-f5ad3acef9248b78.js +0 -1
- package/ui/standalone/.next/static/chunks/main-app-f2b2a716b0f3924b.js +0 -1
- package/ui/standalone/.next/static/gGysrZrp8HXGK_0MbZa9v/_buildManifest.js +0 -1
- package/ui/standalone/.next/static/gGysrZrp8HXGK_0MbZa9v/_ssgManifest.js +0 -1
- package/ui/standalone/.next/static/tDI_bBJ7vZjqqxcXg1GZn/_buildManifest.js +0 -1
- package/ui/standalone/.next/static/tDI_bBJ7vZjqqxcXg1GZn/_ssgManifest.js +0 -1
- package/ui/standalone/.next/static/zAWQgn-m46BFpT3z33lh-/_buildManifest.js +0 -1
- package/ui/standalone/.next/static/zAWQgn-m46BFpT3z33lh-/_ssgManifest.js +0 -1
- /package/ui/standalone/.next/static/{KwY1YC79lI9nQqOVYXOmY → 8E9-VDckMmTbkbuwnaatU}/_buildManifest.js +0 -0
- /package/ui/standalone/.next/static/{KwY1YC79lI9nQqOVYXOmY → 8E9-VDckMmTbkbuwnaatU}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var a={};a.id=1711,a.ids=[1711],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},36228:(a,b,c)=>{"use strict";c.d(b,{
|
|
1
|
+
(()=>{var a={};a.id=1711,a.ids=[1711],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},36228:(a,b,c)=>{"use strict";c.d(b,{n_:()=>i,wn:()=>k,z4:()=>h});var d=c(73024);let e=process.env.ROBOPARK_CONTROL_URL||"http://host.docker.internal:47913",f=process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080",g=function(){if(process.env.ROBOPARK_CONTROL_TOKEN)return process.env.ROBOPARK_CONTROL_TOKEN.trim();let a=process.env.ROBOPARK_CONTROL_TOKEN_FILE;if(!a)return"";try{return(0,d.readFileSync)(a,"utf8").trim()}catch{return""}}();function h(){return f.replace(/\/+$/,"")}function i(){return g}let j=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailers","transfer-encoding","upgrade","content-length"]);async function k(a,b){let c,d=new URL(a.url),h=d.searchParams.get("token");d.searchParams.delete("token");let i=b.startsWith("/robopark/"),k=new URL((i?b.slice(9):b)+d.search,i?f:e);!g&&h&&k.searchParams.set("token",h);let l=new Headers;for(let b of["accept","content-type","if-match","if-none-match"]){let c=a.headers.get(b);c&&l.set(b,c)}let m=a.headers.get("authorization");m&&l.set("authorization",m),g&&l.set("authorization","Bearer "+g);let n=a.method.toUpperCase(),o="GET"===n||"HEAD"===n?void 0:await a.arrayBuffer(),p=new AbortController,q=setTimeout(()=>p.abort(),7e3);try{c=await fetch(k,{method:n,headers:l,body:o&&o.byteLength?o:void 0,cache:"no-store",redirect:"manual",signal:p.signal})}catch(b){clearTimeout(q);let a=b instanceof Error?b.message:String(b);return Response.json({ok:!1,error:"RoboPark control upstream unavailable",detail:a,upstream:k.origin},{status:502,headers:{"cache-control":"no-store"}})}clearTimeout(q);let r=new Headers;return c.headers.forEach((a,b)=>{j.has(b.toLowerCase())||r.set(b,a)}),r.set("cache-control","no-store"),r.set("x-robopark-control-source",k.origin),new Response(c.body,{status:c.status,statusText:c.statusText,headers:r})}},43414:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>D,patchFetch:()=>C,routeModule:()=>y,serverHooks:()=>B,workAsyncStorage:()=>z,workUnitAsyncStorage:()=>A});var d={};c.r(d),c.d(d,{DELETE:()=>x,GET:()=>x,PATCH:()=>x,POST:()=>x,PUT:()=>x,dynamic:()=>v,runtime:()=>w});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(36228);let v="force-dynamic",w="nodejs";async function x(a,b){let{path:c}=await b.params;return(0,u.wn)(a,"/robopark/"+c.map(encodeURIComponent).join("/"))}let y=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/robopark/[...path]/route",pathname:"/robopark/[...path]",filename:"route",bundlePath:"app/robopark/[...path]/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\robopark\\[...path]\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:z,workUnitAsyncStorage:A,serverHooks:B}=y;function C(){return(0,g.patchFetch)({workAsyncStorage:z,workUnitAsyncStorage:A})}async function D(a,b,c){var d;let e="/robopark/[...path]/route";"/index"===e&&(e="/");let g=await y.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:z,routerServerContext:A,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(z.dynamicRoutes[E]||z.routes[D]);if(F&&!x){let a=!!z.routes[D],b=z.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||y.isDev||x||(G="/index"===(G=D)?"/":G);let H=!0===y.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:z,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>y.onRequestError(a,b,d,A)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>y.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.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=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&B&&C&&!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=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.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!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.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 y.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})},A),b}},l=await y.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:z,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)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",B?"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")&&F||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)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await y.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{"use strict";a.exports=require("node:fs")},78335:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};var b=require("../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873],()=>b(b.s=43414));module.exports=c})();
|
|
@@ -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 +1 @@
|
|
|
1
|
-
(()=>{var a={};a.id=9557,a.ids=[9557],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},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")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},35437:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>G,patchFetch:()=>F,routeModule:()=>B,serverHooks:()=>E,workAsyncStorage:()=>C,workUnitAsyncStorage:()=>D});var d={};c.r(d),c.d(d,{GET:()=>A,dynamic:()=>w,runtime:()=>x});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(58755),v=c(82680);let w="force-dynamic",x="nodejs",y=(process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080").replace(/\/+$/,"");async function z(a){let b=`${y}/api/robots/${encodeURIComponent(a)}/stream`;try{let a=await fetch(b,{cache:"no-store",signal:AbortSignal.timeout(8e3)}),c=await a.text();return new Response(c,{status:a.status,headers:{"content-type":a.headers.get("content-type")||"application/json","cache-control":"no-store"}})}catch(b){let a=b instanceof Error?b.message:"unknown error";return Response.json({active:!1,reason:"scheduler_unreachable",detail:`${y}: ${a}`},{status:503,headers:{"cache-control":"no-store"}})}}async function A(a,b){let{robotId:c}=await b.params,d=(0,v.b)(c),e=process.env.LIVEKIT_API_KEY,f=process.env.LIVEKIT_API_SECRET;if(!d||!e||!f)return z(c);let g="robopark-"+d.deviceId,h=g,i=!1;try{let a=(process.env.LIVEKIT_URL||"http://livekit:7880").replace(/^ws:/,"http:").replace(/^wss:/,"https:"),b=new u.iz(a,e,f),c=(await b.listRooms()).filter(a=>a.name===g||a.name.startsWith(g+"-"));c.sort((a,b)=>Number(b.creationTime||0)-Number(a.creationTime||0));let d=c.find(a=>a.name===g&&a.numParticipants>0)||c.find(a=>a.numParticipants>0)||c[0];d&&(h=d.name,i=!0)}catch(a){console.warn("LiveKit room discovery unavailable; using stable robot room:",a)}let j=new u.mk(e,f,{identity:"viewer:"+d.deviceId+":"+crypto.randomUUID().slice(0,8),name:"RoboPark Control monitor",ttl:"15m"}),k={room:h,roomJoin:!0,canSubscribe:!0,canPublish:!1,canPublishData:!1};return j.addGrant(k),Response.json({active:!0,url:function(a){let b=(a.headers.get("x-forwarded-host")||a.headers.get("host")||"").split(",")[0].trim().split(":")[0];if(b.endsWith(".ts.net"))return"wss://"+b;let c=process.env.LIVEKIT_PUBLIC_URL||process.env.NEXT_PUBLIC_LIVEKIT_URL;if(c&&"auto"!==c)return c;let d=a.headers.get("x-forwarded-proto"),e=a.headers.get("host")||"localhost",f=e.split(":")[0];return f.endsWith(".ts.net")?"wss://"+f:"https"===d||a.url.startsWith("https://")?"wss://"+e:"ws://"+f+":7880"}(a),token:await j.toJwt(),room:h,robot_id:d.deviceId,source:"robovoice-native",room_discovered:i},{headers:{"cache-control":"no-store"}})}let B=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/robopark/api/robots/[robotId]/stream/route",pathname:"/robopark/api/robots/[robotId]/stream",filename:"route",bundlePath:"app/robopark/api/robots/[robotId]/stream/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\robopark\\api\\robots\\[robotId]\\stream\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:C,workUnitAsyncStorage:D,serverHooks:E}=B;function F(){return(0,g.patchFetch)({workAsyncStorage:C,workUnitAsyncStorage:D})}async function G(a,b,c){var d;let e="/robopark/api/robots/[robotId]/stream/route";"/index"===e&&(e="/");let g=await B.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:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(y.dynamicRoutes[E]||y.routes[D]);if(F&&!x){let a=!!y.routes[D],b=y.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||B.isDev||x||(G="/index"===(G=D)?"/":G);let H=!0===B.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>B.onRequestError(a,b,d,z)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>B.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.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=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&A&&C&&!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=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.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!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.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 B.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})},z),b}},l=await B.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)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")&&F||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)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await B.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},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")},77598:a=>{"use strict";a.exports=require("node:crypto")},78335:()=>{},82680:(a,b,c)=>{"use strict";c.d(b,{b:()=>e});let d=[{id:"bmw",name:"BMW",deviceId:"dev_0422e545",host:process.env.ROBOVOICE_BMW_HOST||"192.168.0.178",visionPort:5e3,audioPort:8e3,aliases:["bmw","dev_0422e545"]}];function e(a){let b=decodeURIComponent(a).trim().toLowerCase();return(function(){let a=process.env.ROBOVOICE_ROBOTS_JSON;if(!a)return d;try{let b=JSON.parse(a);if(!Array.isArray(b))throw Error("expected a JSON array");return b.map(a=>({id:String(a.id||a.name).toLowerCase(),name:String(a.name||a.id),deviceId:String(a.deviceId||a.device_id||a.id),host:String(a.host||a.ip),visionPort:Number(a.visionPort||a.vision_port||5e3),audioPort:Number(a.audioPort||a.audio_port||8e3),aliases:Array.from(new Set([a.id,a.name,a.deviceId,a.device_id,...a.aliases||[]].filter(Boolean).map(String)))}))}catch(a){return console.error("Invalid ROBOVOICE_ROBOTS_JSON:",a),d}})().find(a=>[a.id,a.name,a.deviceId,...a.aliases].some(a=>String(a).toLowerCase()===b))}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};var b=require("../../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,8755],()=>b(b.s=35437));module.exports=c})();
|
|
1
|
+
(()=>{var a={};a.id=9557,a.ids=[9557],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},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")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},35437:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>G,patchFetch:()=>F,routeModule:()=>B,serverHooks:()=>E,workAsyncStorage:()=>C,workUnitAsyncStorage:()=>D});var d={};c.r(d),c.d(d,{GET:()=>A,dynamic:()=>w,runtime:()=>x});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(58755),v=c(82680);let w="force-dynamic",x="nodejs",y=(process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080").replace(/\/+$/,"");async function z(a){let b=`${y}/api/robots/${encodeURIComponent(a)}/stream`;try{let a=await fetch(b,{cache:"no-store",signal:AbortSignal.timeout(8e3)}),c=await a.text();return new Response(c,{status:a.status,headers:{"content-type":a.headers.get("content-type")||"application/json","cache-control":"no-store"}})}catch(b){let a=b instanceof Error?b.message:"unknown error";return Response.json({active:!1,reason:"scheduler_unreachable",detail:`${y}: ${a}`},{status:503,headers:{"cache-control":"no-store"}})}}async function A(a,b){let{robotId:c}=await b.params,d=(0,v.bR)(c),e=process.env.LIVEKIT_API_KEY,f=process.env.LIVEKIT_API_SECRET;if(!d||!e||!f)return z(c);let g="robopark-"+d.deviceId,h=g,i=!1;try{let a=(process.env.LIVEKIT_URL||"http://livekit:7880").replace(/^ws:/,"http:").replace(/^wss:/,"https:"),b=new u.iz(a,e,f),c=(await b.listRooms()).filter(a=>a.name===g||a.name.startsWith(g+"-"));c.sort((a,b)=>Number(b.creationTime||0)-Number(a.creationTime||0));let d=c.find(a=>a.name===g&&a.numParticipants>0)||c.find(a=>a.numParticipants>0)||c[0];d&&(h=d.name,i=!0)}catch(a){console.warn("LiveKit room discovery unavailable; using stable robot room:",a)}let j=new u.mk(e,f,{identity:"viewer:"+d.deviceId+":"+crypto.randomUUID().slice(0,8),name:"RoboPark Control monitor",ttl:"15m"}),k={room:h,roomJoin:!0,canSubscribe:!0,canPublish:!1,canPublishData:!1};return j.addGrant(k),Response.json({active:!0,url:function(a){let b=(a.headers.get("x-forwarded-host")||a.headers.get("host")||"").split(",")[0].trim().split(":")[0];if(b.endsWith(".ts.net"))return"wss://"+b;let c=process.env.LIVEKIT_PUBLIC_URL||process.env.NEXT_PUBLIC_LIVEKIT_URL;if(c&&"auto"!==c)return c;let d=a.headers.get("x-forwarded-proto"),e=a.headers.get("host")||"localhost",f=e.split(":")[0];return f.endsWith(".ts.net")?"wss://"+f:"https"===d||a.url.startsWith("https://")?"wss://"+e:"ws://"+f+":7880"}(a),token:await j.toJwt(),room:h,robot_id:d.deviceId,source:"robovoice-native",room_discovered:i},{headers:{"cache-control":"no-store"}})}let B=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/robopark/api/robots/[robotId]/stream/route",pathname:"/robopark/api/robots/[robotId]/stream",filename:"route",bundlePath:"app/robopark/api/robots/[robotId]/stream/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\robopark\\api\\robots\\[robotId]\\stream\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:C,workUnitAsyncStorage:D,serverHooks:E}=B;function F(){return(0,g.patchFetch)({workAsyncStorage:C,workUnitAsyncStorage:D})}async function G(a,b,c){var d;let e="/robopark/api/robots/[robotId]/stream/route";"/index"===e&&(e="/");let g=await B.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:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(y.dynamicRoutes[E]||y.routes[D]);if(F&&!x){let a=!!y.routes[D],b=y.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||B.isDev||x||(G="/index"===(G=D)?"/":G);let H=!0===B.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>B.onRequestError(a,b,d,z)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>B.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.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=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&A&&C&&!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=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.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!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.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 B.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})},z),b}},l=await B.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)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")&&F||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)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await B.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},36228:(a,b,c)=>{"use strict";c.d(b,{n_:()=>i,wn:()=>k,z4:()=>h});var d=c(73024);let e=process.env.ROBOPARK_CONTROL_URL||"http://host.docker.internal:47913",f=process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080",g=function(){if(process.env.ROBOPARK_CONTROL_TOKEN)return process.env.ROBOPARK_CONTROL_TOKEN.trim();let a=process.env.ROBOPARK_CONTROL_TOKEN_FILE;if(!a)return"";try{return(0,d.readFileSync)(a,"utf8").trim()}catch{return""}}();function h(){return f.replace(/\/+$/,"")}function i(){return g}let j=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailers","transfer-encoding","upgrade","content-length"]);async function k(a,b){let c,d=new URL(a.url),h=d.searchParams.get("token");d.searchParams.delete("token");let i=b.startsWith("/robopark/"),k=new URL((i?b.slice(9):b)+d.search,i?f:e);!g&&h&&k.searchParams.set("token",h);let l=new Headers;for(let b of["accept","content-type","if-match","if-none-match"]){let c=a.headers.get(b);c&&l.set(b,c)}let m=a.headers.get("authorization");m&&l.set("authorization",m),g&&l.set("authorization","Bearer "+g);let n=a.method.toUpperCase(),o="GET"===n||"HEAD"===n?void 0:await a.arrayBuffer(),p=new AbortController,q=setTimeout(()=>p.abort(),7e3);try{c=await fetch(k,{method:n,headers:l,body:o&&o.byteLength?o:void 0,cache:"no-store",redirect:"manual",signal:p.signal})}catch(b){clearTimeout(q);let a=b instanceof Error?b.message:String(b);return Response.json({ok:!1,error:"RoboPark control upstream unavailable",detail:a,upstream:k.origin},{status:502,headers:{"cache-control":"no-store"}})}clearTimeout(q);let r=new Headers;return c.headers.forEach((a,b)=>{j.has(b.toLowerCase())||r.set(b,a)}),r.set("cache-control","no-store"),r.set("x-robopark-control-source",k.origin),new Response(c.body,{status:c.status,statusText:c.statusText,headers:r})}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},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")},73024:a=>{"use strict";a.exports=require("node:fs")},77598:a=>{"use strict";a.exports=require("node:crypto")},78335:()=>{},82680:(a,b,c)=>{"use strict";c.d(b,{QX:()=>i,bR:()=>f});var d=c(36228);let e=[{id:"bmw",name:"BMW",deviceId:"dev_0422e545",host:process.env.ROBOVOICE_BMW_HOST||"192.168.0.178",visionPort:5e3,audioPort:8e3,aliases:["bmw","dev_0422e545"]}];function f(a){let b=decodeURIComponent(a).trim().toLowerCase();return(function(){let a=process.env.ROBOVOICE_ROBOTS_JSON;if(!a)return e;try{let b=JSON.parse(a);if(!Array.isArray(b))throw Error("expected a JSON array");return b.map(a=>({id:String(a.id||a.name).toLowerCase(),name:String(a.name||a.id),deviceId:String(a.deviceId||a.device_id||a.id),host:String(a.host||a.ip),visionPort:Number(a.visionPort||a.vision_port||5e3),audioPort:Number(a.audioPort||a.audio_port||8e3),aliases:Array.from(new Set([a.id,a.name,a.deviceId,a.device_id,...a.aliases||[]].filter(Boolean).map(String)))}))}catch(a){return console.error("Invalid ROBOVOICE_ROBOTS_JSON:",a),e}})().find(a=>[a.id,a.name,a.deviceId,...a.aliases].some(a=>String(a).toLowerCase()===b))}async function g(a){let b=(0,d.n_)();try{let c=await fetch((0,d.z4)()+a,{cache:"no-store",headers:b?{authorization:"Bearer "+b}:{},signal:AbortSignal.timeout(2500)});if(!c.ok)return null;return await c.json()}catch{return null}}function h(a){let b=String(a.lan_ip||a.tailscale_ip||a.last_seen_ip||"").trim();return b?{id:String(a.id),name:String(a.name||a.id),deviceId:String(a.id),host:b,visionPort:5e3,audioPort:8e3,aliases:[String(a.id),String(a.name||a.id)]}:null}async function i(a){let b=decodeURIComponent(a).trim();if(!b)return null;let c=await g("/api/devices/"+encodeURIComponent(b));if(c?.id)return h(c);let d=await g("/api/devices");if(!Array.isArray(d))return null;let e=b.toLowerCase(),f=d.find(a=>String(a.id)===b||String(a.name||"").toLowerCase()===e);return f?h(f):null}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};var b=require("../../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,8755],()=>b(b.s=35437));module.exports=c})();
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"/api/device-character/route": "app/api/device-character/route.js",
|
|
4
4
|
"/api/download-piper-model/route": "app/api/download-piper-model/route.js",
|
|
5
5
|
"/api/models/route": "app/api/models/route.js",
|
|
6
|
-
"/api/prewarm/route": "app/api/prewarm/route.js",
|
|
7
6
|
"/api/prompt/route": "app/api/prompt/route.js",
|
|
7
|
+
"/api/prewarm/route": "app/api/prewarm/route.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",
|
|
@@ -14,45 +14,45 @@
|
|
|
14
14
|
"/api/setup/status/route": "app/api/setup/status/route.js",
|
|
15
15
|
"/api/setup/test-groq/route": "app/api/setup/test-groq/route.js",
|
|
16
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
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/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
19
|
"/api/voices/route": "app/api/voices/route.js",
|
|
20
|
+
"/api/setup/test-ollama/route": "app/api/setup/test-ollama/route.js",
|
|
21
|
+
"/api/wake-word/models/route": "app/api/wake-word/models/route.js",
|
|
22
|
+
"/api/wake-word/status/route": "app/api/wake-word/status/route.js",
|
|
23
23
|
"/api/wake-word/upload/route": "app/api/wake-word/upload/route.js",
|
|
24
24
|
"/favicon.ico/route": "app/favicon.ico/route.js",
|
|
25
|
-
"/api/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/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",
|
|
31
|
-
"/api/robopark/camera-token/route": "app/api/robopark/camera-token/route.js",
|
|
32
29
|
"/api/robopark/device-access/route": "app/api/robopark/device-access/route.js",
|
|
33
|
-
"/api/robopark/
|
|
30
|
+
"/api/robopark/camera-token/route": "app/api/robopark/camera-token/route.js",
|
|
31
|
+
"/api/robopark/live-rooms/route": "app/api/robopark/live-rooms/route.js",
|
|
32
|
+
"/api/robopark/monitor-token/route": "app/api/robopark/monitor-token/route.js",
|
|
34
33
|
"/api/robopark/servers/[serverId]/metrics/route": "app/api/robopark/servers/[serverId]/metrics/route.js",
|
|
35
|
-
"/api/robopark/
|
|
34
|
+
"/api/robopark/robots/route": "app/api/robopark/robots/route.js",
|
|
36
35
|
"/api/robopark/servers/route": "app/api/robopark/servers/route.js",
|
|
36
|
+
"/api/robopark/servers/[serverId]/route": "app/api/robopark/servers/[serverId]/route.js",
|
|
37
37
|
"/api/robopark/sessions/route": "app/api/robopark/sessions/route.js",
|
|
38
38
|
"/api/robovoice/robots/[robotId]/media-health/route": "app/api/robovoice/robots/[robotId]/media-health/route.js",
|
|
39
|
+
"/api/settings/route": "app/api/settings/route.js",
|
|
39
40
|
"/api/robopark/vision-caption/route": "app/api/robopark/vision-caption/route.js",
|
|
40
41
|
"/api/robopark/robots/[robotId]/voice-engine/route": "app/api/robopark/robots/[robotId]/voice-engine/route.js",
|
|
41
|
-
"/api/settings/route": "app/api/settings/route.js",
|
|
42
|
-
"/api/robopark/transcripts/route": "app/api/robopark/transcripts/route.js",
|
|
43
42
|
"/api/turn-credentials/route": "app/api/turn-credentials/route.js",
|
|
43
|
+
"/api/robopark/transcripts/route": "app/api/robopark/transcripts/route.js",
|
|
44
|
+
"/camera-grid/route": "app/camera-grid/route.js",
|
|
45
|
+
"/robopark/[...path]/route": "app/robopark/[...path]/route.js",
|
|
44
46
|
"/api/wake/route": "app/api/wake/route.js",
|
|
45
47
|
"/fed/media/robots/[robotId]/video_feed/route": "app/fed/media/robots/[robotId]/video_feed/route.js",
|
|
46
|
-
"/robopark/[
|
|
47
|
-
"/fed/[...path]/route": "app/fed/[...path]/route.js",
|
|
48
|
+
"/robopark/api/robots/[robotId]/stream/route": "app/robopark/api/robots/[robotId]/stream/route.js",
|
|
48
49
|
"/tailnet/route": "app/tailnet/route.js",
|
|
49
|
-
"/
|
|
50
|
+
"/fed/[...path]/route": "app/fed/[...path]/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
54
|
"/voice-tester/page": "app/voice-tester/page.js",
|
|
55
55
|
"/robopark/page": "app/robopark/page.js",
|
|
56
|
-
"/(app)/
|
|
57
|
-
"/(app)/page": "app/(app)/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/8E9-VDckMmTbkbuwnaatU/_buildManifest.js" defer=""></script><script src="/_next/static/8E9-VDckMmTbkbuwnaatU/_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":"8E9-VDckMmTbkbuwnaatU","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
|
@@ -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
|
}
|
|
Binary file
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
exports.id=5123,exports.ids=[5123],exports.modules={16953:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>l});var d=c(75338),e=c(76235),f=c.n(e),g=c(91396),h=c.n(g),i=c(86802),j=c(43259),k=c(95012);async function l({children:a}){let b=await (0,i.b3)(),c=await (0,k.WE)(b),{pageTitle:e,pageDescription:g}=c,l=(0,k.$f)(c);return(0,d.jsxs)("html",{lang:"en",suppressHydrationWarning:!0,className:(0,k.cn)(f().variable,h().variable,"scroll-smooth font-sans antialiased"),children:[(0,d.jsxs)("head",{children:[(0,d.jsx)("script",{dangerouslySetInnerHTML:{__html:`
|
|
2
|
-
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID !== 'function') {
|
|
3
|
-
crypto.randomUUID = function() {
|
|
4
|
-
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
|
5
|
-
var r = Math.random() * 16 | 0;
|
|
6
|
-
var v = c === 'x' ? r : (r & 0x3 | 0x8);
|
|
7
|
-
return v.toString(16);
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
`}}),l&&(0,d.jsx)("style",{children:l}),(0,d.jsx)("title",{children:e}),(0,d.jsx)("meta",{name:"description",content:g})]}),(0,d.jsx)("body",{className:"overflow-x-hidden",children:(0,d.jsx)(j.ThemeProvider,{attribute:"class",defaultTheme:"dark",enableSystem:!1,disableTransitionOnChange:!0,children:a})})]})}c(23141)},23141:()=>{},25799:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=c(82831),e=c(43740),f=c(29305),g=c(61981),h=c(26906),i=c(69168);("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},29088:(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unauthorized",{enumerable:!0,get:function(){return d}}),c(98541).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},36736:(a,b,c)=>{"use strict";c.d(b,{Bc:()=>h,m_:()=>l});var d=c(21124),e=c(38301),f=c(89952),g=c(62692);let h=f.Kq,i=f.bL,j=f.l9,k=e.forwardRef(({className:a,sideOffset:b=4,...c},e)=>(0,d.jsx)(f.ZL,{children:(0,d.jsx)(f.UC,{ref:e,sideOffset:b,className:(0,g.cn)("bg-primary text-primary-foreground z-50 overflow-hidden rounded-md px-3 py-1.5 text-xs","animate-in fade-in-0 zoom-in-95","data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95","data-[side=bottom]:slide-in-from-top-2","data-[side=left]:slide-in-from-right-2","data-[side=right]:slide-in-from-left-2","data-[side=top]:slide-in-from-bottom-2",a),...c})}));function l({children:a,content:b,side:c="top",delayDuration:e=300}){return(0,d.jsxs)(i,{delayDuration:e,children:[(0,d.jsx)(j,{asChild:!0,children:a}),(0,d.jsx)(k,{side:c,children:b})]})}k.displayName=f.UC.displayName},41135:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,54160,23)),Promise.resolve().then(c.t.bind(c,31603,23)),Promise.resolve().then(c.t.bind(c,68495,23)),Promise.resolve().then(c.t.bind(c,75170,23)),Promise.resolve().then(c.t.bind(c,77526,23)),Promise.resolve().then(c.t.bind(c,78922,23)),Promise.resolve().then(c.t.bind(c,29234,23)),Promise.resolve().then(c.t.bind(c,12263,23)),Promise.resolve().then(c.bind(c,82146))},43259:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\yunge\\AppData\\Local\\Temp\\rp-uibuild\\frontend\\components\\app\\theme-provider.tsx","ThemeProvider")},46055:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(97523);let e=async a=>[{type:"image/x-icon",sizes:"16x16",url:(0,d.fillMetadataSegment)(".",await a.params,"favicon.ico")+""}]},47614:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{getRedirectError:function(){return g},getRedirectStatusCodeFromError:function(){return l},getRedirectTypeFromError:function(){return k},getURLFromRedirectError:function(){return j},permanentRedirect:function(){return i},redirect:function(){return h}});let d=c(91203),e=c(92781),f=c(19121).actionAsyncStorage;function g(a,b,c){void 0===c&&(c=d.RedirectStatusCode.TemporaryRedirect);let f=Object.defineProperty(Error(e.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return f.digest=e.REDIRECT_ERROR_CODE+";"+b+";"+a+";"+c+";",f}function h(a,b){var c;throw null!=b||(b=(null==f||null==(c=f.getStore())?void 0:c.isAction)?e.RedirectType.push:e.RedirectType.replace),g(a,b,d.RedirectStatusCode.TemporaryRedirect)}function i(a,b){throw void 0===b&&(b=e.RedirectType.replace),g(a,b,d.RedirectStatusCode.PermanentRedirect)}function j(a){return(0,e.isRedirectError)(a)?a.digest.split(";").slice(2,-2).join(";"):null}function k(a){if(!(0,e.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return a.digest.split(";",2)[1]}function l(a){if(!(0,e.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(a.digest.split(";").at(-2))}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},62692:(a,b,c)=>{"use strict";c.d(b,{cn:()=>k,Eq:()=>l});var d=c(38301),e=c(43249),f=c(44082),g=c(58829);let h={companyName:"RoboPark",pageTitle:"RoboPark Test Interface",pageDescription:"Voice control bay for RoboPark units",supportsChatInput:!0,supportsVideoInput:!0,supportsScreenShare:!0,isPreConnectBufferEnabled:!0,logo:"/cwl-logo-round.png",accent:"#3b82f6",logoDark:"/cwl-logo-round.png",accentDark:"#60a5fa",startButtonText:"Initialize Session",sandboxId:void 0,agentName:void 0},i=process.env.NEXT_PUBLIC_APP_CONFIG_ENDPOINT,j=process.env.SANDBOX_ID;function k(...a){return(0,g.QP)((0,e.$)(a))}function l(a){return f.xX.custom(async()=>{let b=new URL(process.env.NEXT_PUBLIC_CONN_DETAILS_ENDPOINT,window.location.origin),c=a.sandboxId??"",d=a.agentName?{agents:[{agent_name:a.agentName}]}:void 0;try{let a=await fetch(b.toString(),{method:"POST",headers:{"Content-Type":"application/json","X-Sandbox-Id":c},body:JSON.stringify({room_config:d})});return await a.json()}catch(a){throw console.error("Error fetching connection details:",a),Error("Error fetching connection details!")}})}(0,d.cache)(async a=>{if(i){let b=j??a.get("x-sandbox-id")??"";try{if(!b)throw Error("Sandbox ID is required");let a=await fetch(i,{cache:"no-store",headers:{"X-Sandbox-ID":b}});if(a.ok){let c=await a.json(),d={...h,sandboxId:b};for(let[a,b]of Object.entries(c))null!==b&&(a in h&&void 0===h[a]||typeof d[a]===b.type&&typeof d[a]==typeof b.value)&&(d[a]=b.value);return d}console.error(`ERROR: querying config endpoint failed with status ${a.status}: ${a.statusText}`)}catch(a){console.error("ERROR: getAppConfig() - lib/utils.ts",a)}}return h})},64404:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"notFound",{enumerable:!0,get:function(){return e}});let d=""+c(98541).HTTP_ERROR_FALLBACK_ERROR_CODE+";404";function e(){let a=Object.defineProperty(Error(d),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});throw a.digest=d,a}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},64712:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unstable_rethrow",{enumerable:!0,get:function(){return d}});let d=c(25799).unstable_rethrow;("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},67837:(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"forbidden",{enumerable:!0,get:function(){return d}}),c(98541).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},78335:()=>{},82023:(a,b,c)=>{Promise.resolve().then(c.bind(c,92681))},82161:(a,b,c)=>{"use strict";var d=c(93045);c.o(d,"redirect")&&c.d(b,{redirect:function(){return d.redirect}})},82757:(a,b,c)=>{"use strict";c.d(b,{C:()=>d});let d={companyName:"RoboPark",pageTitle:"RoboPark Test Interface",pageDescription:"Voice control bay for RoboPark units",supportsChatInput:!0,supportsVideoInput:!0,supportsScreenShare:!0,isPreConnectBufferEnabled:!0,logo:"/cwl-logo-round.png",accent:"#3b82f6",logoDark:"/cwl-logo-round.png",accentDark:"#60a5fa",startButtonText:"Initialize Session",sandboxId:void 0,agentName:void 0}},87991:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,81170,23)),Promise.resolve().then(c.t.bind(c,23597,23)),Promise.resolve().then(c.t.bind(c,36893,23)),Promise.resolve().then(c.t.bind(c,89748,23)),Promise.resolve().then(c.t.bind(c,6060,23)),Promise.resolve().then(c.t.bind(c,7184,23)),Promise.resolve().then(c.t.bind(c,69576,23)),Promise.resolve().then(c.t.bind(c,73041,23)),Promise.resolve().then(c.t.bind(c,51384,23))},92681:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>g});var d=c(21124);c(38301);var e=c(45523),f=c(36736);function g({children:a,...b}){return(0,d.jsx)(e.N,{...b,children:(0,d.jsx)(f.Bc,{delayDuration:300,children:a})})}},93045:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{ReadonlyURLSearchParams:function(){return k},RedirectType:function(){return e.RedirectType},forbidden:function(){return g.forbidden},notFound:function(){return f.notFound},permanentRedirect:function(){return d.permanentRedirect},redirect:function(){return d.redirect},unauthorized:function(){return h.unauthorized},unstable_isUnrecognizedActionError:function(){return l},unstable_rethrow:function(){return i.unstable_rethrow}});let d=c(47614),e=c(92781),f=c(64404),g=c(67837),h=c(29088),i=c(64712);class j extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class k extends URLSearchParams{append(){throw new j}delete(){throw new j}set(){throw new j}sort(){throw new j}}function l(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},95012:(a,b,c)=>{"use strict";c.d(b,{$f:()=>l,WE:()=>k,cn:()=>j});var d=c(74515),e=c(81171);c(38164);var f=c(11167),g=c(82757);let h=process.env.NEXT_PUBLIC_APP_CONFIG_ENDPOINT,i=process.env.SANDBOX_ID;function j(...a){return(0,f.QP)((0,e.$)(a))}let k=(0,d.cache)(async a=>{if(h){let b=i??a.get("x-sandbox-id")??"";try{if(!b)throw Error("Sandbox ID is required");let a=await fetch(h,{cache:"no-store",headers:{"X-Sandbox-ID":b}});if(a.ok){let c=await a.json(),d={...g.C,sandboxId:b};for(let[a,b]of Object.entries(c))null!==b&&(a in g.C&&void 0===g.C[a]||typeof d[a]===b.type&&typeof d[a]==typeof b.value)&&(d[a]=b.value);return d}console.error(`ERROR: querying config endpoint failed with status ${a.status}: ${a.statusText}`)}catch(a){console.error("ERROR: getAppConfig() - lib/utils.ts",a)}}return g.C});function l(a){let{accent:b,accentDark:c}=a;return[b?`:root { --primary: ${b}; --primary-hover: color-mix(in srgb, ${b} 80%, #000); }`:"",c?`.dark { --primary: ${c}; --primary-hover: color-mix(in srgb, ${c} 80%, #000); }`:""].filter(Boolean).join("\n")}},96487:()=>{},98895:(a,b,c)=>{Promise.resolve().then(c.bind(c,43259))}};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
exports.id=7661,exports.ids=[7661],exports.modules={16953:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>l});var d=c(75338),e=c(76235),f=c.n(e),g=c(91396),h=c.n(g),i=c(86802),j=c(43259),k=c(95012);async function l({children:a}){let b=await (0,i.b3)(),c=await (0,k.WE)(b),{pageTitle:e,pageDescription:g}=c,l=(0,k.$f)(c);return(0,d.jsxs)("html",{lang:"en",suppressHydrationWarning:!0,className:(0,k.cn)(f().variable,h().variable,"scroll-smooth font-sans antialiased"),children:[(0,d.jsxs)("head",{children:[(0,d.jsx)("script",{dangerouslySetInnerHTML:{__html:`
|
|
2
|
-
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID !== 'function') {
|
|
3
|
-
crypto.randomUUID = function() {
|
|
4
|
-
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
|
5
|
-
var r = Math.random() * 16 | 0;
|
|
6
|
-
var v = c === 'x' ? r : (r & 0x3 | 0x8);
|
|
7
|
-
return v.toString(16);
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
`}}),l&&(0,d.jsx)("style",{children:l}),(0,d.jsx)("title",{children:e}),(0,d.jsx)("meta",{name:"description",content:g})]}),(0,d.jsx)("body",{className:"overflow-x-hidden",children:(0,d.jsx)(j.ThemeProvider,{attribute:"class",defaultTheme:"dark",enableSystem:!1,disableTransitionOnChange:!0,children:a})})]})}c(23141)},23141:()=>{},36736:(a,b,c)=>{"use strict";c.d(b,{Bc:()=>h,m_:()=>l});var d=c(21124),e=c(38301),f=c(89952),g=c(62692);let h=f.Kq,i=f.bL,j=f.l9,k=e.forwardRef(({className:a,sideOffset:b=4,...c},e)=>(0,d.jsx)(f.ZL,{children:(0,d.jsx)(f.UC,{ref:e,sideOffset:b,className:(0,g.cn)("bg-primary text-primary-foreground z-50 overflow-hidden rounded-md px-3 py-1.5 text-xs","animate-in fade-in-0 zoom-in-95","data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95","data-[side=bottom]:slide-in-from-top-2","data-[side=left]:slide-in-from-right-2","data-[side=right]:slide-in-from-left-2","data-[side=top]:slide-in-from-bottom-2",a),...c})}));function l({children:a,content:b,side:c="top",delayDuration:e=300}){return(0,d.jsxs)(i,{delayDuration:e,children:[(0,d.jsx)(j,{asChild:!0,children:a}),(0,d.jsx)(k,{side:c,children:b})]})}k.displayName=f.UC.displayName},41135:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,54160,23)),Promise.resolve().then(c.t.bind(c,31603,23)),Promise.resolve().then(c.t.bind(c,68495,23)),Promise.resolve().then(c.t.bind(c,75170,23)),Promise.resolve().then(c.t.bind(c,77526,23)),Promise.resolve().then(c.t.bind(c,78922,23)),Promise.resolve().then(c.t.bind(c,29234,23)),Promise.resolve().then(c.t.bind(c,12263,23)),Promise.resolve().then(c.bind(c,82146))},43259:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\yunge\\AppData\\Local\\Temp\\rp-uibuild\\frontend\\components\\app\\theme-provider.tsx","ThemeProvider")},46055:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(97523);let e=async a=>[{type:"image/x-icon",sizes:"16x16",url:(0,d.fillMetadataSegment)(".",await a.params,"favicon.ico")+""}]},52751:(a,b,c)=>{"use strict";c.d(b,{A:()=>e});var d=c(38301);let e=new Map([["bold",d.createElement(d.Fragment,null,d.createElement("path",{d:"M236,128a108,108,0,0,1-216,0c0-42.52,24.73-81.34,63-98.9A12,12,0,1,1,93,50.91C63.24,64.57,44,94.83,44,128a84,84,0,0,0,168,0c0-33.17-19.24-63.43-49-77.09A12,12,0,1,1,173,29.1C211.27,46.66,236,85.48,236,128Z"}))],["duotone",d.createElement(d.Fragment,null,d.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),d.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["fill",d.createElement(d.Fragment,null,d.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,176A72,72,0,0,1,92,65.64a8,8,0,0,1,8,13.85,56,56,0,1,0,56,0,8,8,0,0,1,8-13.85A72,72,0,0,1,128,200Z"}))],["light",d.createElement(d.Fragment,null,d.createElement("path",{d:"M230,128a102,102,0,0,1-204,0c0-40.18,23.35-76.86,59.5-93.45a6,6,0,0,1,5,10.9C58.61,60.09,38,92.49,38,128a90,90,0,0,0,180,0c0-35.51-20.61-67.91-52.5-82.55a6,6,0,0,1,5-10.9C206.65,51.14,230,87.82,230,128Z"}))],["regular",d.createElement(d.Fragment,null,d.createElement("path",{d:"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z"}))],["thin",d.createElement(d.Fragment,null,d.createElement("path",{d:"M228,128a100,100,0,0,1-200,0c0-39.4,22.9-75.37,58.33-91.63a4,4,0,1,1,3.34,7.27C57.07,58.6,36,91.71,36,128a92,92,0,0,0,184,0c0-36.29-21.07-69.4-53.67-84.36a4,4,0,1,1,3.34-7.27C205.1,52.63,228,88.6,228,128Z"}))]])},62692:(a,b,c)=>{"use strict";c.d(b,{cn:()=>k,Eq:()=>l});var d=c(38301),e=c(43249),f=c(44082),g=c(58829);let h={companyName:"RoboPark",pageTitle:"RoboPark Test Interface",pageDescription:"Voice control bay for RoboPark units",supportsChatInput:!0,supportsVideoInput:!0,supportsScreenShare:!0,isPreConnectBufferEnabled:!0,logo:"/cwl-logo-round.png",accent:"#3b82f6",logoDark:"/cwl-logo-round.png",accentDark:"#60a5fa",startButtonText:"Initialize Session",sandboxId:void 0,agentName:void 0},i=process.env.NEXT_PUBLIC_APP_CONFIG_ENDPOINT,j=process.env.SANDBOX_ID;function k(...a){return(0,g.QP)((0,e.$)(a))}function l(a){return f.xX.custom(async()=>{let b=new URL(process.env.NEXT_PUBLIC_CONN_DETAILS_ENDPOINT,window.location.origin),c=a.sandboxId??"",d=a.agentName?{agents:[{agent_name:a.agentName}]}:void 0;try{let a=await fetch(b.toString(),{method:"POST",headers:{"Content-Type":"application/json","X-Sandbox-Id":c},body:JSON.stringify({room_config:d})});return await a.json()}catch(a){throw console.error("Error fetching connection details:",a),Error("Error fetching connection details!")}})}(0,d.cache)(async a=>{if(i){let b=j??a.get("x-sandbox-id")??"";try{if(!b)throw Error("Sandbox ID is required");let a=await fetch(i,{cache:"no-store",headers:{"X-Sandbox-ID":b}});if(a.ok){let c=await a.json(),d={...h,sandboxId:b};for(let[a,b]of Object.entries(c))null!==b&&(a in h&&void 0===h[a]||typeof d[a]===b.type&&typeof d[a]==typeof b.value)&&(d[a]=b.value);return d}console.error(`ERROR: querying config endpoint failed with status ${a.status}: ${a.statusText}`)}catch(a){console.error("ERROR: getAppConfig() - lib/utils.ts",a)}}return h})},70355:(a,b,c)=>{"use strict";c.d(b,{Z:()=>h,t:()=>i});var d=c(21124),e=c(38301),f=c(93384);let g=(0,e.createContext)(null);function h({children:a}){let[b,c]=(0,e.useState)(f.a),[h,i]=(0,e.useState)(!0),[j,k]=(0,e.useState)(null),l=(0,e.useCallback)(async()=>{i(!0),k(null);try{let a=await fetch("/api/settings");if(a.ok){let b=(await a.json()).settings||f.a;b.characters&&0!==b.characters.length||(b.characters=[f.o],b.active_character_id=f.o.id),c(b)}else c(f.a)}catch(a){console.error("Failed to load settings:",a),k("Failed to load settings")}finally{i(!1)}},[]),m=async a=>{try{if(c(a),!(await fetch("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:a})})).ok)throw Error("Failed to save settings")}catch(a){throw console.error("Failed to update settings:",a),k("Failed to save settings"),l(),a}},n=async a=>{let c={...b,active_character_id:a};await m(c)},o=b.characters.find(a=>a.id===b.active_character_id)||b.characters[0]||f.o;return(0,d.jsx)(g.Provider,{value:{settings:b,activeCharacter:o,loading:h,error:j,updateSettings:m,setActiveCharacterId:n,reloadSettings:l},children:a})}function i(){let a=(0,e.useContext)(g);if(!a)throw Error("useSettings must be used within a SettingsProvider");return a}},75433:(a,b,c)=>{"use strict";c.d(b,{A:()=>e});var d=c(38301);let e=d.forwardRef((a,b)=>{let{alt:c,color:e="currentColor",size:f="1em",weight:g="regular",mirrored:h=!1,children:i,weights:j,...k}=a;return d.createElement("svg",{ref:b,xmlns:"http://www.w3.org/2000/svg",width:f,height:f,fill:e,viewBox:"0 0 256 256",transform:h?"scale(-1, 1)":void 0,...k},!!c&&d.createElement("title",null,c),i,j.get(g))});e.displayName="SSRBase"},82023:(a,b,c)=>{Promise.resolve().then(c.bind(c,92681))},82757:(a,b,c)=>{"use strict";c.d(b,{C:()=>d});let d={companyName:"RoboPark",pageTitle:"RoboPark Test Interface",pageDescription:"Voice control bay for RoboPark units",supportsChatInput:!0,supportsVideoInput:!0,supportsScreenShare:!0,isPreConnectBufferEnabled:!0,logo:"/cwl-logo-round.png",accent:"#3b82f6",logoDark:"/cwl-logo-round.png",accentDark:"#60a5fa",startButtonText:"Initialize Session",sandboxId:void 0,agentName:void 0}},87991:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,81170,23)),Promise.resolve().then(c.t.bind(c,23597,23)),Promise.resolve().then(c.t.bind(c,36893,23)),Promise.resolve().then(c.t.bind(c,89748,23)),Promise.resolve().then(c.t.bind(c,6060,23)),Promise.resolve().then(c.t.bind(c,7184,23)),Promise.resolve().then(c.t.bind(c,69576,23)),Promise.resolve().then(c.t.bind(c,73041,23)),Promise.resolve().then(c.t.bind(c,51384,23))},92681:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>g});var d=c(21124);c(38301);var e=c(45523),f=c(36736);function g({children:a,...b}){return(0,d.jsx)(e.N,{...b,children:(0,d.jsx)(f.Bc,{delayDuration:300,children:a})})}},93384:(a,b,c)=>{"use strict";c.d(b,{a:()=>e,o:()=>d});let d={id:"default",name:"Cal",description:"Default assistant",system_prompt:"You are a helpful AI assistant.",wake_word_model:"models/hey_jarvis.onnx",tts_provider:"kokoro",tts_voice_kokoro:"am_puck",tts_voice_piper:"speaches-ai/piper-en_US-ryan-high",tts_voice_elevenlabs:"21m00Tcm4TlvDq8ikWAM",tts_speed:1},e={first_launch_completed:!1,characters:[d],active_character_id:"default",device_registry:{},stt_provider:"speaches",stt_language:"auto",stt_model_speaches:"Systran/faster-whisper-small",stt_model_groq:"whisper-large-v3-turbo",llm_provider:"ollama",ollama_host:"http://localhost:11434",ollama_model:"",groq_api_key:"",groq_model:"",gemini_api_key:"",gemini_model:"gemini-1.5-flash",elevenlabs_api_key:"",elevenlabs_model_id:"eleven_v3",elevenlabs_encoding:"mp3_44100_128",elevenlabs_language:"",elevenlabs_stability:.5,elevenlabs_similarity_boost:.75,elevenlabs_style:0,elevenlabs_speaker_boost:!0,hass_enabled:!1,hass_host:"",hass_token:"",n8n_enabled:!1,n8n_url:"",n8n_token:"",wake_word_enabled:!0,wake_word_threshold:.5,wake_word_timeout:3,allow_interruptions:!0,min_endpointing_delay:.5,vision_provider:"ollama_cloud",vision_model_ollama:"gemma4:e4b",vision_model_ollama_cloud:"gemma4:cloud",ollama_cloud_api_key:"",vision_model_groq:"meta-llama/llama-4-scout-17b-16e-instruct",vision_terminal:!0,always_on_session_enabled:!1,motion_greeting:"שלום! איך אפשר לעזור?",motion_threshold:.06,motion_cooldown_seconds:10,temperature:.7,num_ctx:8192,max_turns:20,tool_cache_size:3}},95012:(a,b,c)=>{"use strict";c.d(b,{$f:()=>l,WE:()=>k,cn:()=>j});var d=c(74515),e=c(81171);c(38164);var f=c(11167),g=c(82757);let h=process.env.NEXT_PUBLIC_APP_CONFIG_ENDPOINT,i=process.env.SANDBOX_ID;function j(...a){return(0,f.QP)((0,e.$)(a))}let k=(0,d.cache)(async a=>{if(h){let b=i??a.get("x-sandbox-id")??"";try{if(!b)throw Error("Sandbox ID is required");let a=await fetch(h,{cache:"no-store",headers:{"X-Sandbox-ID":b}});if(a.ok){let c=await a.json(),d={...g.C,sandboxId:b};for(let[a,b]of Object.entries(c))null!==b&&(a in g.C&&void 0===g.C[a]||typeof d[a]===b.type&&typeof d[a]==typeof b.value)&&(d[a]=b.value);return d}console.error(`ERROR: querying config endpoint failed with status ${a.status}: ${a.statusText}`)}catch(a){console.error("ERROR: getAppConfig() - lib/utils.ts",a)}}return g.C});function l(a){let{accent:b,accentDark:c}=a;return[b?`:root { --primary: ${b}; --primary-hover: color-mix(in srgb, ${b} 80%, #000); }`:"",c?`.dark { --primary: ${c}; --primary-hover: color-mix(in srgb, ${c} 80%, #000); }`:""].filter(Boolean).join("\n")}},96573:(a,b,c)=>{"use strict";c.d(b,{N:()=>h});var d=c(38301),e=c(75433),f=c(52751);let g=d.forwardRef((a,b)=>d.createElement(e.A,{ref:b,...a,weights:f.A}));g.displayName="CircleNotchIcon";let h=g},98895:(a,b,c)=>{Promise.resolve().then(c.bind(c,43259))}};
|
|
@@ -1 +0,0 @@
|
|
|
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();
|