conductor-oss 0.57.0 → 0.57.2

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.
Files changed (91) hide show
  1. package/package.json +5 -5
  2. package/web/.next/standalone/packages/web/.next/BUILD_ID +1 -1
  3. package/web/.next/standalone/packages/web/.next/app-path-routes-manifest.json +3 -3
  4. package/web/.next/standalone/packages/web/.next/build-manifest.json +3 -3
  5. package/web/.next/standalone/packages/web/.next/prerender-manifest.json +3 -3
  6. package/web/.next/standalone/packages/web/.next/react-loadable-manifest.json +4 -4
  7. package/web/.next/standalone/packages/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/web/.next/standalone/packages/web/.next/server/app/_global-error.html +1 -1
  9. package/web/.next/standalone/packages/web/.next/server/app/_global-error.rsc +1 -1
  10. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  13. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js +1 -1
  17. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/web/.next/standalone/packages/web/.next/server/app/bridge/connect/page.js +1 -1
  20. package/web/.next/standalone/packages/web/.next/server/app/bridge/connect/page.js.nft.json +1 -1
  21. package/web/.next/standalone/packages/web/.next/server/app/bridge/connect/page_client-reference-manifest.js +1 -1
  22. package/web/.next/standalone/packages/web/.next/server/app/bridge/install.ps1/route.js +51 -0
  23. package/web/.next/standalone/packages/web/.next/server/app/page.js +1 -1
  24. package/web/.next/standalone/packages/web/.next/server/app/page.js.nft.json +1 -1
  25. package/web/.next/standalone/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
  26. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js +1 -1
  27. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
  28. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  29. package/web/.next/standalone/packages/web/.next/server/app/settings/bridge/page.js +1 -1
  30. package/web/.next/standalone/packages/web/.next/server/app/settings/bridge/page.js.nft.json +1 -1
  31. package/web/.next/standalone/packages/web/.next/server/app/settings/bridge/page_client-reference-manifest.js +1 -1
  32. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js +1 -1
  33. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
  34. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
  35. package/web/.next/standalone/packages/web/.next/server/app/sign-in/hosted/page.js +1 -1
  36. package/web/.next/standalone/packages/web/.next/server/app/sign-in/hosted/page.js.nft.json +1 -1
  37. package/web/.next/standalone/packages/web/.next/server/app/sign-in/hosted/page_client-reference-manifest.js +1 -1
  38. package/web/.next/standalone/packages/web/.next/server/app/sign-in/sso-callback/page.js +1 -1
  39. package/web/.next/standalone/packages/web/.next/server/app/sign-in/sso-callback/page.js.nft.json +1 -1
  40. package/web/.next/standalone/packages/web/.next/server/app/sign-in/sso-callback/page_client-reference-manifest.js +1 -1
  41. package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js +1 -1
  42. package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js.nft.json +1 -1
  43. package/web/.next/standalone/packages/web/.next/server/app/unlock/page_client-reference-manifest.js +1 -1
  44. package/web/.next/standalone/packages/web/.next/server/app-paths-manifest.json +3 -3
  45. package/web/.next/standalone/packages/web/.next/server/chunks/1379.js +1 -0
  46. package/web/.next/standalone/packages/web/.next/server/chunks/2089.js +3 -3
  47. package/web/.next/standalone/packages/web/.next/server/chunks/3364.js +2 -2
  48. package/web/.next/standalone/packages/web/.next/server/chunks/3540.js +2 -2
  49. package/web/.next/standalone/packages/web/.next/server/chunks/6941.js +1 -0
  50. package/web/.next/standalone/packages/web/.next/server/chunks/9455.js +1 -1
  51. package/web/.next/standalone/packages/web/.next/server/middleware-build-manifest.js +1 -1
  52. package/web/.next/standalone/packages/web/.next/server/middleware-react-loadable-manifest.js +1 -1
  53. package/web/.next/standalone/packages/web/.next/server/next-font-manifest.js +1 -1
  54. package/web/.next/standalone/packages/web/.next/server/next-font-manifest.json +1 -1
  55. package/web/.next/standalone/packages/web/.next/server/pages/500.html +1 -1
  56. package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.js +1 -1
  57. package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.json +1 -1
  58. package/web/.next/standalone/packages/web/.next/static/chunks/2511.f9c50af82a92b765.js +1 -0
  59. package/web/.next/standalone/packages/web/.next/static/chunks/4443.92d3f55443935b8d.js +1 -0
  60. package/web/.next/standalone/packages/web/.next/static/chunks/{8510-cceb88b11c23d839.js → 8510-6a5263212ae38d21.js} +1 -1
  61. package/web/.next/standalone/packages/web/.next/static/chunks/883-f4ba367a01fba2f4.js +3 -0
  62. package/web/.next/standalone/packages/web/.next/static/chunks/{9703-a26340744c97b6da.js → 9703-93347b812923255f.js} +2 -2
  63. package/web/.next/standalone/packages/web/.next/static/chunks/app/bridge/connect/page-db45b6c9643666ca.js +1 -0
  64. package/web/.next/standalone/packages/web/.next/static/chunks/app/layout-8d9ade8741da3f8a.js +1 -0
  65. package/web/.next/standalone/packages/web/.next/static/chunks/webpack-ef4988b228495036.js +1 -0
  66. package/web/.next/static/chunks/2511.f9c50af82a92b765.js +1 -0
  67. package/web/.next/static/chunks/4443.92d3f55443935b8d.js +1 -0
  68. package/web/.next/static/chunks/{8510-cceb88b11c23d839.js → 8510-6a5263212ae38d21.js} +1 -1
  69. package/web/.next/static/chunks/883-f4ba367a01fba2f4.js +3 -0
  70. package/web/.next/static/chunks/{9703-a26340744c97b6da.js → 9703-93347b812923255f.js} +2 -2
  71. package/web/.next/static/chunks/app/bridge/connect/page-db45b6c9643666ca.js +1 -0
  72. package/web/.next/static/chunks/app/layout-8d9ade8741da3f8a.js +1 -0
  73. package/web/.next/static/chunks/webpack-ef4988b228495036.js +1 -0
  74. package/web/.next/standalone/packages/web/.next/server/chunks/1375.js +0 -1
  75. package/web/.next/standalone/packages/web/.next/server/chunks/1989.js +0 -1
  76. package/web/.next/standalone/packages/web/.next/static/chunks/4443.dda0426fdba73321.js +0 -1
  77. package/web/.next/standalone/packages/web/.next/static/chunks/7611.e41fdb3134887d76.js +0 -1
  78. package/web/.next/standalone/packages/web/.next/static/chunks/883-ad6886260b32bbf6.js +0 -3
  79. package/web/.next/standalone/packages/web/.next/static/chunks/app/bridge/connect/page-e297d19e6a140ae4.js +0 -1
  80. package/web/.next/standalone/packages/web/.next/static/chunks/app/layout-e4973df05d64e1e3.js +0 -1
  81. package/web/.next/standalone/packages/web/.next/static/chunks/webpack-9c22de248dd68981.js +0 -1
  82. package/web/.next/static/chunks/4443.dda0426fdba73321.js +0 -1
  83. package/web/.next/static/chunks/7611.e41fdb3134887d76.js +0 -1
  84. package/web/.next/static/chunks/883-ad6886260b32bbf6.js +0 -3
  85. package/web/.next/static/chunks/app/bridge/connect/page-e297d19e6a140ae4.js +0 -1
  86. package/web/.next/static/chunks/app/layout-e4973df05d64e1e3.js +0 -1
  87. package/web/.next/static/chunks/webpack-9c22de248dd68981.js +0 -1
  88. /package/web/.next/standalone/packages/web/.next/static/{PWDnetuxPxtH-yxFZlb7m → YizOdw4hydXardZ1w8CtH}/_buildManifest.js +0 -0
  89. /package/web/.next/standalone/packages/web/.next/static/{PWDnetuxPxtH-yxFZlb7m → YizOdw4hydXardZ1w8CtH}/_ssgManifest.js +0 -0
  90. /package/web/.next/static/{PWDnetuxPxtH-yxFZlb7m → YizOdw4hydXardZ1w8CtH}/_buildManifest.js +0 -0
  91. /package/web/.next/static/{PWDnetuxPxtH-yxFZlb7m → YizOdw4hydXardZ1w8CtH}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- "use strict";exports.id=3364,exports.ids=[3364],exports.modules={3364:(a,b,c)=>{c.r(b),c.d(b,{SessionTerminal:()=>w});var d=c(92692),e=c(64583),f=c(37303);let g=(0,f.A)("file-up",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M12 12v6",key:"3ahymv"}],["path",{d:"m15 15-3-3-3 3",key:"15xj92"}]]);var h=c(71943);let i=(0,f.A)("square-stop",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["rect",{x:"9",y:"9",width:"6",height:"6",rx:"1",key:"1ssd4o"}]]);var j=c(75185),k=c(60790),l=c(2625),m=c(76680),n=c(71277),o=c(1071),p=c(49071),q=c(46818);let r=new Set(["queued","spawning","running","working","needs_input","stuck"]),s=new Set(["done","needs_input","stuck","errored","terminated","killed"]);c(62465);let t=new Set(["archived","killed","terminated","restored"]);async function u(a,b,c){let d=await fetch((0,q.S)(`/api/sessions/${encodeURIComponent(a)}/keys`,c),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({keys:b})});if(!d.ok){let a=await d.json().catch(()=>null);throw Error(a?.error??`Failed to queue terminal input (${d.status})`)}}function v(a){let{sessionId:b,projectId:c,bridgeId:f,sessionState:v,runtimeMode:w,pendingInsert:x,immersiveMobileMode:y=!1,panelVisible:z=!0,onPendingInsertConsumed:A}=a,B=(0,n.useRef)(null),C=(0,n.useRef)(null);(0,n.useRef)(0);let D=(0,n.useRef)(0),E=(0,n.useRef)(null),F=(0,n.useRef)(null);(0,n.useRef)([]),(0,n.useRef)(!1),(0,n.useRef)(null),(0,n.useRef)(0),(0,n.useRef)(Date.now());let G=(0,n.useRef)(null),H=(0,n.useRef)(null),I=(0,n.useRef)(0);(0,n.useRef)(0),(0,n.useRef)(0),(0,n.useRef)(0);let J=(0,n.useRef)(0);(0,n.useRef)(null);let K=(0,n.useMemo)(()=>v.trim().toLowerCase(),[v]),L="ttyd"===(w?.trim().toLowerCase()??null),M=L?!t.has(K):r.has(K),N=!L&&!y&&s.has(K);(0,n.useRef)(M).current=M,(0,n.useRef)(null),(0,n.useRef)(null);let[O,P]=(0,n.useState)(null),[Q,R]=(0,n.useState)(null),[S,T]=(0,n.useState)(M),[U,V]=(0,n.useState)(null),[W,X]=(0,n.useState)(!1),[Y,Z]=(0,n.useState)(0),[$,_]=(0,n.useState)(""),[aa,ab]=(0,n.useState)(!1),[ac,ad]=(0,n.useState)(null),[ae,af]=(0,n.useState)(null),[ag,ah]=(0,n.useState)(null),[ai,aj]=(0,n.useState)(!1),[ak,al]=(0,n.useState)(!1);(0,n.useRef)(null);let am=(0,n.useRef)(!1);(0,n.useRef)(0),(0,n.useRef)(null),(0,n.useRef)(null);let an=(0,n.useCallback)(()=>{},[]),ao=(0,n.useCallback)(()=>{F.current,E.current},[]),ap=(0,n.useCallback)(()=>{},[an,ao]),aq=(0,n.useCallback)(()=>{let a=function(a){if(!a)return null;try{let b=new URL(a).searchParams.get("token")?.trim();return b&&b.length>0?b:null}catch{return null}}(Q);a&&function(a,b){let c;if(a&&b&&null!==a.contentWindow){try{c=new URL(a.src).origin}catch{c=""}c&&"null"!==c&&a.contentWindow.postMessage({type:"conductor-ttyd-auth-token",token:b},c)}}(F.current,a)},[Q]),ar=(0,n.useCallback)(a=>{},[M,ap,aq]);(0,n.useCallback)(()=>{},[M,ar]);let as=(0,n.useCallback)(async()=>{let a=$.trim();if(0!==a.length&&!aa){ab(!0),ad(null);try{let c=await fetch((0,q.S)(`/api/sessions/${encodeURIComponent(b)}/actions`,f),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"send",message:a})});if(!c.ok){let a=await c.json().catch(()=>null);throw Error(a?.error??`Failed to send message (${c.status})`)}_(""),B.current?.focus()}catch(a){ad(a instanceof Error?a.message:"Failed to send message")}finally{ab(!1)}}},[f,$,aa,b]);(0,n.useCallback)(async()=>{try{let a=await navigator.clipboard.readText();a&&await u(b,a,f)}catch{}},[f,b]);let at=(0,n.useCallback)(()=>{C.current?.click()},[]),au=(0,n.useCallback)(async a=>{let{files:d}=a.target;if(a.target.value="",d&&0!==d.length){ah(null),aj(!0);try{for(let a of(await (0,p.P)({files:Array.from(d),projectId:c,taskRef:b,bridgeId:f})))await u(b,`\r
1
+ "use strict";exports.id=3364,exports.ids=[3364],exports.modules={3364:(a,b,c)=>{c.r(b),c.d(b,{SessionTerminal:()=>x});var d=c(92692),e=c(64583),f=c(37303);let g=(0,f.A)("file-up",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M12 12v6",key:"3ahymv"}],["path",{d:"m15 15-3-3-3 3",key:"15xj92"}]]);var h=c(71943);let i=(0,f.A)("square-stop",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["rect",{x:"9",y:"9",width:"6",height:"6",rx:"1",key:"1ssd4o"}]]);var j=c(75185),k=c(60790),l=c(2625),m=c(76680),n=c(71277),o=c(1071),p=c(49071),q=c(46818),r=c(31084);let s=new Set(["queued","spawning","running","working","needs_input","stuck"]),t=new Set(["done","needs_input","stuck","errored","terminated","killed"]);c(62465);let u=new Set(["archived","killed","terminated","restored"]);async function v(a,b,c){let d=await fetch((0,q.S)(`/api/sessions/${encodeURIComponent(a)}/keys`,c),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({keys:b})});if(!d.ok){let a=await d.json().catch(()=>null);throw Error(a?.error??`Failed to queue terminal input (${d.status})`)}}function w(a){let{sessionId:b,projectId:c,bridgeId:f,sessionState:w,runtimeMode:x,pendingInsert:y,immersiveMobileMode:z=!1,panelVisible:A=!0,onPendingInsertConsumed:B}=a,C=(0,n.useRef)(null),D=(0,n.useRef)(null);(0,n.useRef)(0);let E=(0,n.useRef)(0),F=(0,n.useRef)(null),G=(0,n.useRef)(null);(0,n.useRef)([]),(0,n.useRef)(!1),(0,n.useRef)(null),(0,n.useRef)(0),(0,n.useRef)(Date.now());let H=(0,n.useRef)(null),I=(0,n.useRef)(null),J=(0,n.useRef)(0);(0,n.useRef)(0),(0,n.useRef)(0),(0,n.useRef)(0);let K=(0,n.useRef)(0);(0,n.useRef)(null);let L=(0,n.useMemo)(()=>w.trim().toLowerCase(),[w]),M="ttyd"===(x?.trim().toLowerCase()??null),N=M?!u.has(L):s.has(L),O=!M&&!z&&t.has(L);(0,n.useRef)(N).current=N,(0,n.useRef)(null),(0,n.useRef)(null);let[P,Q]=(0,n.useState)(null),[R,S]=(0,n.useState)(null),[T,U]=(0,n.useState)(N),[V,W]=(0,n.useState)(null),[X,Y]=(0,n.useState)(!1),[Z,$]=(0,n.useState)(0),[_,aa]=(0,n.useState)(""),[ab,ac]=(0,n.useState)(!1),[ad,ae]=(0,n.useState)(null),[af,ag]=(0,n.useState)(null),[ah,ai]=(0,n.useState)(null),[aj,ak]=(0,n.useState)(!1),[al,am]=(0,n.useState)(!1);(0,n.useRef)(null);let an=(0,n.useRef)(!1);(0,n.useRef)(0),(0,n.useRef)(null),(0,n.useRef)(null);let ao=(0,n.useCallback)(()=>{},[]),ap=(0,n.useCallback)(()=>{G.current,F.current},[]),aq=(0,n.useCallback)(()=>{},[ao,ap]),ar=(0,n.useCallback)(()=>{let a=function(a){if(!a)return null;try{let b=new URL(a).searchParams.get("token")?.trim();return b&&b.length>0?b:null}catch{return null}}(R);a&&function(a,b){let c;if(a&&b&&null!==a.contentWindow){try{c=new URL(a.src).origin}catch{c=""}c&&"null"!==c&&a.contentWindow.postMessage({type:"conductor-ttyd-auth-token",token:b},c)}}(G.current,a)},[R]),as=(0,n.useCallback)(a=>{},[N,aq,ar]);(0,n.useCallback)(()=>{},[N,as]);let at=(0,n.useCallback)(async()=>{let a=_.trim();if(0!==a.length&&!ab){ac(!0),ae(null);try{let c=await fetch((0,q.S)(`/api/sessions/${encodeURIComponent(b)}/actions`,f),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"send",message:a})});if(!c.ok){let a=await c.json().catch(()=>null);throw Error(a?.error??`Failed to send message (${c.status})`)}aa(""),C.current?.focus()}catch(a){ae(a instanceof Error?a.message:"Failed to send message")}finally{ac(!1)}}},[f,_,ab,b]);(0,n.useCallback)(async()=>{try{let a=await navigator.clipboard.readText();a&&await v(b,a,f)}catch{}},[f,b]);let au=(0,n.useCallback)(()=>{D.current?.click()},[]),av=(0,n.useCallback)(async a=>{let{files:d}=a.target;if(a.target.value="",d&&0!==d.length){ai(null),ak(!0);try{for(let a of(await (0,p.P)({files:Array.from(d),projectId:c,taskRef:b,bridgeId:f})))await v(b,`\r
2
2
  [attached file: ${a}]\r
3
- `,f)}catch(a){ah(a instanceof Error?a.message:"Failed to upload attachment.")}finally{aj(!1)}}},[f,c,b]),av=(0,n.useCallback)(async()=>{await u(b,"\x03",f)},[f,b]),aw=(0,n.useCallback)(()=>{E.current},[]),ax=(0,n.useCallback)(()=>{J.current+=1,V(null),D.current=0,am.current=!0,Z(a=>a+1)},[]),ay=M?"Connecting live terminal":N?"Session is waiting for input":"Live terminal is not active",az=U??(M?"Reconnecting to the existing ttyd terminal.":L?"This ttyd terminal is no longer attached. It only closes after an explicit kill or archive.":N?"Send a follow-up below to relaunch the agent in a fresh ttyd terminal.":`Session status is \`${K}\`. Interactive ttyd terminals only run while the agent is active.`),aA=Q??O??void 0;return(0,d.jsxs)("div",{className:y?"group/terminal relative flex min-h-0 min-w-0 w-full flex-1 flex-col overflow-hidden bg-[#060404]":"group/terminal relative flex min-h-0 min-w-0 w-full flex-1 flex-col overflow-hidden rounded-none border-0 bg-[#060404] lg:rounded-[14px] lg:border lg:border-white/10 lg:shadow-[inset_0_1px_0_rgba(255,255,255,0.04)]",children:[(0,d.jsxs)("div",{className:"absolute right-2 top-2 z-20 flex items-center gap-2 sm:right-3 sm:top-3",children:[(0,d.jsx)("input",{ref:C,type:"file",multiple:!0,accept:"*/*",className:"sr-only",tabIndex:-1,"aria-hidden":!0,onChange:a=>void au(a)}),(0,d.jsx)(o.$,{type:"button",size:"icon",variant:"ghost",disabled:!M||!O||ai,className:"h-9 w-9 rounded-full border border-white/10 bg-[#141010]/92 text-[#c9c0b7] backdrop-blur-sm hover:bg-[#201818] disabled:opacity-40 sm:h-7 sm:w-7",onClick:at,"aria-label":"Attach photos or files",children:ai?(0,d.jsx)(e.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(g,{className:"h-3.5 w-3.5"})}),aA?(0,d.jsx)(o.$,{asChild:!0,size:"icon",variant:"ghost",className:"h-9 w-9 rounded-full border border-white/10 bg-[#141010]/92 text-[#c9c0b7] backdrop-blur-sm hover:bg-[#201818] sm:h-7 sm:w-7",children:(0,d.jsx)("a",{href:aA,target:"_blank",rel:"noreferrer","aria-label":"Open terminal in new tab",children:(0,d.jsx)(h.A,{className:"h-3.5 w-3.5"})})}):null,null,(0,d.jsx)(o.$,{type:"button",size:"icon",variant:"ghost",className:"h-9 w-9 rounded-full border border-white/10 bg-[#141010]/92 text-[#c9c0b7] backdrop-blur-sm hover:bg-[#201818] sm:h-7 sm:w-7",onClick:av,"aria-label":"Soft stop (Ctrl+C)",children:(0,d.jsx)(i,{className:"h-3.5 w-3.5"})}),(0,d.jsx)(o.$,{type:"button",size:"icon",variant:"ghost",className:"h-9 w-9 rounded-full border border-white/10 bg-[#141010]/92 text-[#c9c0b7] backdrop-blur-sm hover:bg-[#201818] sm:h-7 sm:w-7",onClick:ax,"aria-label":"Reload ttyd terminal",children:S?(0,d.jsx)(e.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(j.A,{className:"h-3.5 w-3.5"})})]}),(0,d.jsx)("div",{className:y?"min-h-0 min-w-0 h-0 flex-1 overflow-hidden px-0 pb-[env(safe-area-inset-bottom)] pt-0 w-full":"min-h-0 min-w-0 h-0 flex-1 overflow-hidden px-0.5 pb-0 pt-0.5 lg:px-1.5 lg:pb-1 lg:pt-3 w-full",children:M&&O?(0,d.jsxs)("div",{ref:E,className:"relative flex h-full min-h-0 w-full flex-1 flex-col overflow-hidden rounded-[10px] bg-[#060404] pb-[env(safe-area-inset-bottom)]",children:[W?null:(0,d.jsx)("div",{className:"absolute inset-0 z-10 flex items-center justify-center bg-[#060404]",children:(0,d.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-white/10 bg-[#141010]/92 px-3 py-2 text-[12px] text-[#c9c0b7] backdrop-blur-sm",children:[(0,d.jsx)(e.A,{className:"h-3.5 w-3.5 animate-spin"}),(0,d.jsx)("span",{children:"Loading ttyd terminal…"})]})}),(0,d.jsx)("iframe",{ref:F,title:`ttyd terminal for ${b}`,src:O,className:"block h-full min-h-0 w-full flex-1 border-0 bg-[#060404]",allow:"clipboard-read; clipboard-write",loading:"eager",onError:()=>{V("Failed to load the terminal frame. Try reload or open in a new tab.")},onLoad:()=>{let a=Date.now();I.current+=1,H.current=a,null===G.current&&(G.current=a),X(!0),V(null),aw(),aq(),ap()}},b)]}):(0,d.jsx)("div",{className:"flex h-full items-center justify-center p-4",children:(0,d.jsx)("div",{className:"max-w-lg rounded-[16px] border border-white/10 bg-[#141010]/92 p-5 text-[#efe8e1] shadow-[0_24px_48px_rgba(0,0,0,0.34)]",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("div",{className:"mt-0.5 rounded-full border border-white/10 bg-[#201818] p-2 text-[#c9c0b7]",children:U?(0,d.jsx)(k.A,{className:"h-4 w-4"}):(0,d.jsx)(e.A,{className:`h-4 w-4 ${S?"animate-spin":""}`})}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("div",{className:"text-[14px] font-medium",children:ay}),(0,d.jsx)("div",{className:"mt-1 text-[12px] leading-5 text-[#a79c94]",children:az}),aA?(0,d.jsx)("div",{className:"mt-3",children:(0,d.jsx)("a",{href:aA,target:"_blank",rel:"noreferrer",className:"text-[12px] text-[#d7c6b7] underline underline-offset-4",children:"Open the ttyd terminal directly"})}):null]})]})})})}),!N&&(ae||ag)?(0,d.jsxs)("div",{className:"absolute inset-x-0 bottom-0 z-10 border-t border-white/12 bg-[#161212] px-3 py-2 text-[11px] text-[#ffb39e] backdrop-blur-sm [padding-bottom:env(safe-area-inset-bottom)]",children:[ae?(0,d.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,d.jsx)(k.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:ae}),(0,d.jsx)("button",{type:"button",className:"ml-auto shrink-0 text-[#8e847d] hover:text-[#c9c0b7]",onClick:()=>af(null),children:(0,d.jsx)(l.A,{className:"h-3 w-3"})})]}):null,ag?(0,d.jsxs)("div",{className:`flex items-center gap-1.5 ${ae?"mt-2":""}`,children:[(0,d.jsx)(k.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:ag}),(0,d.jsx)("button",{type:"button",className:"ml-auto shrink-0 text-[#8e847d] hover:text-[#c9c0b7]",onClick:()=>ah(null),children:(0,d.jsx)(l.A,{className:"h-3 w-3"})})]}):null]}):null,N?(0,d.jsxs)("div",{className:"absolute inset-x-0 bottom-0 z-10 border-t border-white/12 bg-[#161212] backdrop-blur-sm [padding-bottom:env(safe-area-inset-bottom)]",children:[ae?(0,d.jsxs)("div",{className:"flex items-center gap-1.5 px-3 pt-1.5 text-[11px] text-[#ffb39e]",children:[(0,d.jsx)(k.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:ae}),(0,d.jsx)("button",{type:"button",className:"ml-auto shrink-0 text-[#8e847d] hover:text-[#c9c0b7]",onClick:()=>af(null),children:(0,d.jsx)(l.A,{className:"h-3 w-3"})})]}):null,ag?(0,d.jsxs)("div",{className:"flex items-center gap-1.5 px-3 pt-1.5 text-[11px] text-[#ffb39e]",children:[(0,d.jsx)(k.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:ag}),(0,d.jsx)("button",{type:"button",className:"ml-auto shrink-0 text-[#8e847d] hover:text-[#c9c0b7]",onClick:()=>ah(null),children:(0,d.jsx)(l.A,{className:"h-3 w-3"})})]}):null,ac?(0,d.jsxs)("div",{className:"flex items-center gap-1.5 px-3 pt-1.5 text-[11px] text-[#ff8f7a]",children:[(0,d.jsx)(k.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:ac}),(0,d.jsx)("button",{type:"button",className:"ml-auto shrink-0 text-[#8e847d] hover:text-[#c9c0b7]",onClick:()=>ad(null),children:(0,d.jsx)(l.A,{className:"h-3 w-3"})})]}):null,(0,d.jsxs)("form",{onSubmit:a=>{a.preventDefault(),as()},className:"flex items-center gap-2 px-2 py-2 lg:px-3",children:[(0,d.jsx)("input",{ref:B,type:"text",value:$,onChange:a=>_(a.target.value),placeholder:"Send a follow-up message…",enterKeyHint:"done",disabled:aa,className:"h-8 min-w-0 flex-1 rounded-md border border-white/10 bg-[#0c0808] px-2.5 text-[12px] text-[#efe8e1] outline-none placeholder:text-[#7d746e] focus:border-white/20 disabled:opacity-50",onKeyDown:a=>{"Escape"===a.key&&(a.preventDefault(),a.currentTarget.blur())}}),(0,d.jsx)(o.$,{type:"submit",size:"icon",variant:"ghost",disabled:aa||0===$.trim().length,className:"h-8 w-8 shrink-0 rounded-md border border-white/10 bg-[#0c0808] text-[#c9c0b7] hover:bg-[#201818] disabled:opacity-30","aria-label":"Send message",children:aa?(0,d.jsx)(e.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(m.A,{className:"h-3.5 w-3.5"})})]})]}):null]})}let w=(0,n.memo)(function(a){return(0,d.jsx)(v,{...a})},function(a,b){var c,d;let e=a.panelVisible??!0,f=b.panelVisible??!0;return a.sessionId===b.sessionId&&a.projectId===b.projectId&&a.bridgeId===b.bridgeId&&e===f&&((c=a.pendingInsert)===(d=b.pendingInsert)||!!c&&!!d&&c.nonce===d.nonce&&c.inlineText===d.inlineText)&&(!e&&!f||a.sessionState===b.sessionState&&a.runtimeMode===b.runtimeMode&&a.immersiveMobileMode===b.immersiveMobileMode)})},49071:(a,b,c)=>{c.d(b,{P:()=>f});var d=c(46818);function e(a){return a&&"object"==typeof a?a:null}async function f({files:a,projectId:b,taskRef:c,bridgeId:g,preferAbsolute:h=!0}){if(!a.length)return[];let i=b.trim();if(!i)throw Error("Project id is required to upload attachments");let j=new FormData;j.append("projectId",i);let k=c?.trim();for(let b of(k&&j.append("taskRef",k),a))j.append("files",b);let l=await fetch((0,d.S)("/api/attachments",g),{method:"POST",body:j}),m=await l.json().catch(()=>null);if(!l.ok){let b=1===a.length?a[0]?.name??"attachment":`${a.length} attachments`;throw Error(m?.error??`Failed to upload ${b}`)}let n=(Array.isArray(m?.files)?m.files:m?[m]:[]).map(a=>(function(a,b){let c=e(a);if(!c)return null;let d=e(c.attachment);for(let a of b?[c.absolutePath,c.path,c.filePath,d?.absolutePath,d?.path,d?.filePath]:[c.path,c.absolutePath,c.filePath,d?.path,d?.absolutePath,d?.filePath])if("string"==typeof a&&a.trim().length>0)return a.trim();return null})(a,h)).filter(a=>!!a);if(0===n.length)throw Error("Attachment upload succeeded but did not return a usable file path");return n}},60790:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(37303).A)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]])},76680:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(37303).A)("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]])}};
3
+ `,f)}catch(a){ai(a instanceof Error?a.message:"Failed to upload attachment.")}finally{ak(!1)}}},[f,c,b]),aw=(0,n.useCallback)(async()=>{await v(b,"\x03",f)},[f,b]),ax=(0,n.useCallback)(()=>{F.current},[]),ay=(0,n.useCallback)(()=>{K.current+=1,W(null),E.current=0,an.current=!0,$(a=>a+1)},[]),az=N?"Connecting live terminal":O?"Session is waiting for input":"Live terminal is not active",aA=V??(N?"Reconnecting to the existing ttyd terminal.":M?"This ttyd terminal is no longer attached. It only closes after an explicit kill or archive.":O?"Send a follow-up below to relaunch the agent in a fresh ttyd terminal.":`Session status is \`${L}\`. Interactive ttyd terminals only run while the agent is active.`),aB=R??P??void 0,aC=(0,r.s)(b,{bridgeId:f,tab:"terminal"});return(0,d.jsxs)("div",{className:z?"group/terminal relative flex min-h-0 min-w-0 w-full flex-1 flex-col overflow-hidden bg-[#060404]":"group/terminal relative flex min-h-0 min-w-0 w-full flex-1 flex-col overflow-hidden rounded-none border-0 bg-[#060404] lg:rounded-[14px] lg:border lg:border-white/10 lg:shadow-[inset_0_1px_0_rgba(255,255,255,0.04)]",children:[(0,d.jsxs)("div",{className:"absolute right-2 top-2 z-20 flex items-center gap-2 sm:right-3 sm:top-3",children:[(0,d.jsx)("input",{ref:D,type:"file",multiple:!0,accept:"*/*",className:"sr-only",tabIndex:-1,"aria-hidden":!0,onChange:a=>void av(a)}),(0,d.jsx)(o.$,{type:"button",size:"icon",variant:"ghost",disabled:!N||!P||aj,className:"h-9 w-9 rounded-full border border-white/10 bg-[#141010]/92 text-[#c9c0b7] backdrop-blur-sm hover:bg-[#201818] disabled:opacity-40 sm:h-7 sm:w-7",onClick:au,"aria-label":"Attach photos or files",children:aj?(0,d.jsx)(e.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(g,{className:"h-3.5 w-3.5"})}),aB?(0,d.jsx)(o.$,{asChild:!0,size:"icon",variant:"ghost",className:"h-9 w-9 rounded-full border border-white/10 bg-[#141010]/92 text-[#c9c0b7] backdrop-blur-sm hover:bg-[#201818] sm:h-7 sm:w-7",children:(0,d.jsx)("a",{href:aC,target:"_blank",rel:"noreferrer","aria-label":"Open full terminal page in new tab",children:(0,d.jsx)(h.A,{className:"h-3.5 w-3.5"})})}):null,null,(0,d.jsx)(o.$,{type:"button",size:"icon",variant:"ghost",className:"h-9 w-9 rounded-full border border-white/10 bg-[#141010]/92 text-[#c9c0b7] backdrop-blur-sm hover:bg-[#201818] sm:h-7 sm:w-7",onClick:aw,"aria-label":"Soft stop (Ctrl+C)",children:(0,d.jsx)(i,{className:"h-3.5 w-3.5"})}),(0,d.jsx)(o.$,{type:"button",size:"icon",variant:"ghost",className:"h-9 w-9 rounded-full border border-white/10 bg-[#141010]/92 text-[#c9c0b7] backdrop-blur-sm hover:bg-[#201818] sm:h-7 sm:w-7",onClick:ay,"aria-label":"Reload ttyd terminal",children:T?(0,d.jsx)(e.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(j.A,{className:"h-3.5 w-3.5"})})]}),(0,d.jsx)("div",{className:z?"min-h-0 min-w-0 h-0 flex-1 overflow-hidden px-0 pb-[env(safe-area-inset-bottom)] pt-0 w-full":"min-h-0 min-w-0 h-0 flex-1 overflow-hidden px-0.5 pb-0 pt-0.5 lg:px-1.5 lg:pb-1 lg:pt-3 w-full",children:N&&P?(0,d.jsxs)("div",{ref:F,className:"relative flex h-full min-h-0 w-full flex-1 flex-col overflow-hidden rounded-[10px] bg-[#060404] pb-[env(safe-area-inset-bottom)]",children:[X?null:(0,d.jsx)("div",{className:"absolute inset-0 z-10 flex items-center justify-center bg-[#060404]",children:(0,d.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-white/10 bg-[#141010]/92 px-3 py-2 text-[12px] text-[#c9c0b7] backdrop-blur-sm",children:[(0,d.jsx)(e.A,{className:"h-3.5 w-3.5 animate-spin"}),(0,d.jsx)("span",{children:"Loading ttyd terminal…"})]})}),(0,d.jsx)("iframe",{ref:G,title:`ttyd terminal for ${b}`,src:P,className:"block h-full min-h-0 w-full flex-1 border-0 bg-[#060404]",allow:"clipboard-read; clipboard-write",loading:"eager",onError:()=>{W("Failed to load the terminal frame. Try reload or open in a new tab.")},onLoad:()=>{let a=Date.now();J.current+=1,I.current=a,null===H.current&&(H.current=a),Y(!0),W(null),ax(),ar(),aq()}},b)]}):(0,d.jsx)("div",{className:"flex h-full items-center justify-center p-4",children:(0,d.jsx)("div",{className:"max-w-lg rounded-[16px] border border-white/10 bg-[#141010]/92 p-5 text-[#efe8e1] shadow-[0_24px_48px_rgba(0,0,0,0.34)]",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("div",{className:"mt-0.5 rounded-full border border-white/10 bg-[#201818] p-2 text-[#c9c0b7]",children:V?(0,d.jsx)(k.A,{className:"h-4 w-4"}):(0,d.jsx)(e.A,{className:`h-4 w-4 ${T?"animate-spin":""}`})}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("div",{className:"text-[14px] font-medium",children:az}),(0,d.jsx)("div",{className:"mt-1 text-[12px] leading-5 text-[#a79c94]",children:aA}),aB?(0,d.jsxs)("div",{className:"mt-3 flex flex-wrap items-center gap-x-3 gap-y-1",children:[(0,d.jsx)("a",{href:aC,target:"_blank",rel:"noreferrer",className:"text-[12px] text-[#d7c6b7] underline underline-offset-4",children:"Open the full terminal page"}),(0,d.jsx)("a",{href:aB,target:"_blank",rel:"noreferrer",className:"text-[12px] text-[#a79c94] underline underline-offset-4",children:"Open the ttyd terminal directly"})]}):null]})]})})})}),!O&&(af||ah)?(0,d.jsxs)("div",{className:"absolute inset-x-0 bottom-0 z-10 border-t border-white/12 bg-[#161212] px-3 py-2 text-[11px] text-[#ffb39e] backdrop-blur-sm [padding-bottom:env(safe-area-inset-bottom)]",children:[af?(0,d.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,d.jsx)(k.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:af}),(0,d.jsx)("button",{type:"button",className:"ml-auto shrink-0 text-[#8e847d] hover:text-[#c9c0b7]",onClick:()=>ag(null),children:(0,d.jsx)(l.A,{className:"h-3 w-3"})})]}):null,ah?(0,d.jsxs)("div",{className:`flex items-center gap-1.5 ${af?"mt-2":""}`,children:[(0,d.jsx)(k.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:ah}),(0,d.jsx)("button",{type:"button",className:"ml-auto shrink-0 text-[#8e847d] hover:text-[#c9c0b7]",onClick:()=>ai(null),children:(0,d.jsx)(l.A,{className:"h-3 w-3"})})]}):null]}):null,O?(0,d.jsxs)("div",{className:"absolute inset-x-0 bottom-0 z-10 border-t border-white/12 bg-[#161212] backdrop-blur-sm [padding-bottom:env(safe-area-inset-bottom)]",children:[af?(0,d.jsxs)("div",{className:"flex items-center gap-1.5 px-3 pt-1.5 text-[11px] text-[#ffb39e]",children:[(0,d.jsx)(k.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:af}),(0,d.jsx)("button",{type:"button",className:"ml-auto shrink-0 text-[#8e847d] hover:text-[#c9c0b7]",onClick:()=>ag(null),children:(0,d.jsx)(l.A,{className:"h-3 w-3"})})]}):null,ah?(0,d.jsxs)("div",{className:"flex items-center gap-1.5 px-3 pt-1.5 text-[11px] text-[#ffb39e]",children:[(0,d.jsx)(k.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:ah}),(0,d.jsx)("button",{type:"button",className:"ml-auto shrink-0 text-[#8e847d] hover:text-[#c9c0b7]",onClick:()=>ai(null),children:(0,d.jsx)(l.A,{className:"h-3 w-3"})})]}):null,ad?(0,d.jsxs)("div",{className:"flex items-center gap-1.5 px-3 pt-1.5 text-[11px] text-[#ff8f7a]",children:[(0,d.jsx)(k.A,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:ad}),(0,d.jsx)("button",{type:"button",className:"ml-auto shrink-0 text-[#8e847d] hover:text-[#c9c0b7]",onClick:()=>ae(null),children:(0,d.jsx)(l.A,{className:"h-3 w-3"})})]}):null,(0,d.jsxs)("form",{onSubmit:a=>{a.preventDefault(),at()},className:"flex items-center gap-2 px-2 py-2 lg:px-3",children:[(0,d.jsx)("input",{ref:C,type:"text",value:_,onChange:a=>aa(a.target.value),placeholder:"Send a follow-up message…",enterKeyHint:"done",disabled:ab,className:"h-8 min-w-0 flex-1 rounded-md border border-white/10 bg-[#0c0808] px-2.5 text-[12px] text-[#efe8e1] outline-none placeholder:text-[#7d746e] focus:border-white/20 disabled:opacity-50",onKeyDown:a=>{"Escape"===a.key&&(a.preventDefault(),a.currentTarget.blur())}}),(0,d.jsx)(o.$,{type:"submit",size:"icon",variant:"ghost",disabled:ab||0===_.trim().length,className:"h-8 w-8 shrink-0 rounded-md border border-white/10 bg-[#0c0808] text-[#c9c0b7] hover:bg-[#201818] disabled:opacity-30","aria-label":"Send message",children:ab?(0,d.jsx)(e.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(m.A,{className:"h-3.5 w-3.5"})})]})]}):null]})}let x=(0,n.memo)(function(a){return(0,d.jsx)(w,{...a})},function(a,b){var c,d;let e=a.panelVisible??!0,f=b.panelVisible??!0;return a.sessionId===b.sessionId&&a.projectId===b.projectId&&a.bridgeId===b.bridgeId&&e===f&&((c=a.pendingInsert)===(d=b.pendingInsert)||!!c&&!!d&&c.nonce===d.nonce&&c.inlineText===d.inlineText)&&(!e&&!f||a.sessionState===b.sessionState&&a.runtimeMode===b.runtimeMode&&a.immersiveMobileMode===b.immersiveMobileMode)})},31084:(a,b,c)=>{c.d(b,{J:()=>e,s:()=>f});var d=c(19954);function e(a){let b=(0,d.C0)(a);if(!b)return"/";let c=new URLSearchParams;return c.set("bridge",b),`/?${c.toString()}`}function f(a,b={}){let c,e=a.trim(),g=(0,d.DW)(e)?e:(c=(0,d.C0)(b.bridgeId))?(0,d.Bp)(c,e):e,h=new URLSearchParams,i=b.tab?.trim();i&&h.set("tab",i);let j=h.toString(),k=`/sessions/${encodeURIComponent(g)}`;return j.length>0?`${k}?${j}`:k}},49071:(a,b,c)=>{c.d(b,{P:()=>f});var d=c(46818);function e(a){return a&&"object"==typeof a?a:null}async function f({files:a,projectId:b,taskRef:c,bridgeId:g,preferAbsolute:h=!0}){if(!a.length)return[];let i=b.trim();if(!i)throw Error("Project id is required to upload attachments");let j=new FormData;j.append("projectId",i);let k=c?.trim();for(let b of(k&&j.append("taskRef",k),a))j.append("files",b);let l=await fetch((0,d.S)("/api/attachments",g),{method:"POST",body:j}),m=await l.json().catch(()=>null);if(!l.ok){let b=1===a.length?a[0]?.name??"attachment":`${a.length} attachments`;throw Error(m?.error??`Failed to upload ${b}`)}let n=(Array.isArray(m?.files)?m.files:m?[m]:[]).map(a=>(function(a,b){let c=e(a);if(!c)return null;let d=e(c.attachment);for(let a of b?[c.absolutePath,c.path,c.filePath,d?.absolutePath,d?.path,d?.filePath]:[c.path,c.absolutePath,c.filePath,d?.path,d?.absolutePath,d?.filePath])if("string"==typeof a&&a.trim().length>0)return a.trim();return null})(a,h)).filter(a=>!!a);if(0===n.length)throw Error("Attachment upload succeeded but did not return a usable file path");return n}},60790:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(37303).A)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]])},76680:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(37303).A)("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]])}};
@@ -1,2 +1,2 @@
1
- "use strict";exports.id=3540,exports.ids=[3540],exports.modules={1071:(a,b,c)=>{c.d(b,{$:()=>j});var d=c(92692),e=c(93544),f=c(74745),g=c(71277);let h={default:"border-[var(--vk-border)] bg-[var(--vk-bg-panel)] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)]",primary:"border-[var(--vk-border)] bg-[var(--vk-bg-active)] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)]",ghost:"border-transparent bg-transparent text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)] hover:text-[var(--vk-text-normal)]",danger:"border-[var(--vk-red)]/40 bg-[color:color-mix(in_srgb,var(--vk-red)_18%,transparent)] text-[var(--vk-red)] hover:bg-[color:color-mix(in_srgb,var(--vk-red)_24%,transparent)]",outline:"border-[var(--vk-border)] bg-transparent text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)]"},i={sm:"h-7 px-2.5 text-[12px] gap-1",md:"h-8 px-3 text-[13px] gap-1.5",lg:"h-9 px-3.5 text-[14px] gap-2",icon:"h-8 w-8 p-0"},j=(0,g.forwardRef)(({variant:a="default",size:b="md",asChild:c,className:g,children:j,...k},l)=>{let m=c?f.DX:"button";return(0,d.jsx)(m,{ref:l,className:(0,e.cn)("inline-flex items-center justify-center rounded-[var(--radius-sm)] border font-medium","transition-colors duration-150","focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--vk-orange)]","disabled:pointer-events-none disabled:opacity-45",h[a],i[b],g),...k,children:j})});j.displayName="Button"},19954:(a,b,c)=>{c.d(b,{Bp:()=>f,C0:()=>e,DW:()=>g,kV:()=>h});let d="bridge:";function e(a){let b=a?.trim();return b&&b.length>0?b:null}function f(a,b){return`${d}${a}:${b}`}function g(a){let b=a?.trim();if(!b||!b.startsWith(d))return null;let c=b.slice(d.length),f=c.indexOf(":");if(f<=0||f>=c.length-1)return null;let g=e(c.slice(0,f)),h=c.slice(f+1).trim();return g&&0!==h.length?{bridgeId:g,sessionId:h}:null}function h(a){let b=a?.trim()??"";return b?g(b)?.sessionId??b:""}},30144:(a,b,c)=>{c.d(b,{Xt:()=>d});function d(a){let b=a?.trim();return"Bridge relay URL is not configured"===b||"RELAY_JWT_SECRET is required for bridge relay access"===b}},46818:(a,b,c)=>{c.d(b,{S:()=>e,y:()=>f});var d=c(19954);function e(a,b){let c=(0,d.C0)(b);if(!c)return a;let e=new URL(a,"http://127.0.0.1");return e.searchParams.set("bridgeId",c),`${e.pathname}${e.search}${e.hash}`}function f(a){let b=function(a){if(!a)return null;if(a instanceof URL)return a;if("string"==typeof a)try{return new URL(a,"http://127.0.0.1")}catch{return null}if("string"==typeof a.href)try{return new URL(a.href)}catch{}return null}(a);if(!b)return null;let c=(0,d.C0)(b.searchParams.get("bridge")??b.searchParams.get("bridgeId"));if(c)return c;let e=(0,d.DW)(b.searchParams.get("session"))?.bridgeId;if(e)return e;let f=b.pathname.match(/^\/sessions\/([^/]+)$/);if(!f)return null;try{return(0,d.DW)(decodeURIComponent(f[1]))?.bridgeId??null}catch{return null}}},48980:(a,b,c)=>{function d(a){let b=a?.trim().toLowerCase()??"";return!!b&&(b.includes("127.0.0.1:4749")||b.includes("older bridge build")||b.includes("one-time local bridge upgrade"))}function e(a){return`This laptop needs a one-time local bridge upgrade before ${function(a){switch(a){case"repair":return"Repair bridge";case"restart":return"Restart service";case"update":return"Update Conductor"}}(a)} can run from the dashboard.`}function f(a){let b=a?.trim()||"This laptop";return`${b} is still on an older bridge build, so Conductor cannot repair, restart, or update it remotely yet. Upgrade the bridge once on that laptop, then future fixes run from the dashboard.`}c.d(b,{Az:()=>d,IG:()=>e,_5:()=>f})},60361:(a,b,c)=>{c.d(b,{i:()=>o});var d=c(92692),e=c(71277),f=c(58599),g=c.n(f),h=c(26996),i=c(13636),j=c(3216),k=c(1071),l=c(93544),m=c(48980),n=c(81461);function o({deviceId:a,deviceName:b,deviceOs:c,dashboardUrl:f,installScriptUrl:p,installPowerShellUrl:q,relayUrl:r,className:s}){let[t,u]=(0,e.useState)(!1),v=(0,e.useMemo)(()=>(0,n.Y8)(c),[c]),w="windows"===v?q:p,x=(0,e.useMemo)(()=>(0,n.$y)(w,f,r,v),[f,r,w,v]),y=(0,e.useMemo)(()=>(0,n.kw)(a),[a]);return(0,d.jsxs)("div",{className:(0,l.cn)("mt-3 rounded-[14px] border border-[color:color-mix(in_srgb,var(--vk-orange)_28%,transparent)] bg-[color:color-mix(in_srgb,var(--vk-orange)_10%,transparent)] px-3 py-3",s),children:[(0,d.jsx)("div",{className:"text-[11px] font-semibold uppercase tracking-[0.18em] text-[var(--vk-text-muted)]",children:"One-time local repair"}),(0,d.jsx)("div",{className:"mt-2 text-[12px] leading-5 text-[var(--vk-text-normal)]",children:(0,m._5)(b)}),(0,d.jsxs)("div",{className:"mt-3 flex flex-wrap gap-2",children:[(0,d.jsxs)(k.$,{type:"button",variant:"outline",size:"sm",onClick:()=>{navigator.clipboard?.writeText?(u(!1),navigator.clipboard.writeText(x).then(()=>{u(!0)}).catch(()=>{u(!1)})):u(!1)},children:[t?(0,d.jsx)(h.A,{className:"h-4 w-4"}):(0,d.jsx)(i.A,{className:"h-4 w-4"}),t?"Repair command copied":"Copy repair command"]}),(0,d.jsx)(k.$,{asChild:!0,variant:"outline",size:"sm",children:(0,d.jsxs)(g(),{href:y,children:[(0,d.jsx)(j.A,{className:"h-4 w-4"}),"Open repair steps"]})})]})]})}},62465:(a,b,c)=>{function d(){return!1}function e(a,b,c,d){let e=Number.isFinite(a)?Math.max(0,a):0,f=Number.isFinite(b)?Math.max(0,b):e,g=Number.isFinite(c)?Math.max(0,c):0,h=Number.isFinite(d)?Math.max(0,d):0,i=Math.max(0,e-(f+g));return{usableHeight:Math.round(Math.max(0,f-Math.max(0,h-g))),keyboardInset:Math.round(i),keyboardVisible:i>=80}}c.d(b,{k$:()=>d,wP:()=>e})},66562:(a,b,c)=>{c.d(b,{y:()=>d});function d(){let a=function(a){let b=a?.trim();if(!b)return null;try{let a=new URL(b);if("http:"!==a.protocol&&"https:"!==a.protocol)return null;return a.toString()}catch{return null}}(process.env.CONDUCTOR_BRIDGE_RELAY_URL??process.env.NEXT_PUBLIC_CONDUCTOR_BRIDGE_RELAY_URL);return a||null}},69125:(a,b,c)=>{function d(a,b){return"string"==typeof a&&a.trim().length>0?a.trim():b}function e(a){let b="string"==typeof a?a.trim():"";return b?` (build ${b})`:""}function f(a){return Array.isArray(a)?a.filter(a=>!!a&&"object"==typeof a).map(a=>{let b,c,e;return b=d(a.hostname,"unknown-host"),c=d(a.os,"unknown-os"),e=d(a.arch,"unknown-arch"),{device_id:d(a.device_id,b),device_name:d(a.device_name,b),hostname:b,os:c,arch:e,connected:!0===a.connected,last_status:a.last_status?{hostname:d(a.last_status.hostname,b),os:d(a.last_status.os,c),connected:!0===a.last_status.connected,version:"string"==typeof a.last_status.version&&a.last_status.version.trim().length>0?a.last_status.version.trim():null}:null}}):[]}c.d(b,{oH:()=>f,wj:()=>e})},81461:(a,b,c)=>{function d(a){return/^[A-Za-z0-9_./:=@%+-]+$/.test(a)?a:`'${a.replace(/'/g,"'\"'\"'")}'`}function e(a){return a.map(d).join(" ")}function f(a){return`'${a.replace(/'/g,"''")}'`}function g(a){return(a?.trim().toLowerCase()??"").startsWith("windows")?"windows":"unix"}function h(a,b="unix"){return new URL("windows"===b?"/bridge/install.ps1":"/bridge/install.sh",a).toString()}function i(a){return`/bridge/connect?device=${encodeURIComponent(a)}#bridge-setup`}function j(a,b="unix"){return"windows"===b?`& ([scriptblock]::Create((Invoke-RestMethod -Uri ${f(a)})))`:`curl -fsSL ${d(a)} | sh`}function k(a,b,c,g="unix"){if("windows"===g){let d=[`& ([scriptblock]::Create((Invoke-RestMethod -Uri ${f(a)})))`,"-Connect","-DashboardUrl",f(b)];return c?.trim()&&d.push("-RelayUrl",f(c.trim())),d.join(" ")}let h=["sh","-s","--","--connect","--dashboard-url",b];return c?.trim()&&h.push("--relay-url",c.trim()),`curl -fsSL ${d(a)} | ${e(h)}`}function l(a,b){let c=["conductor-bridge","connect","--dashboard-url",a];return b?.trim()&&c.push("--relay-url",b.trim()),e(c)}function m(a,b){let c=["conductor-bridge","pair","--code",a?.trim()||"ABC123"],d=["conductor-bridge","daemon"];return b?.trim()&&(c.push("--relay-url",b.trim()),d.push("--relay-url",b.trim())),`${e(c)}
2
- ${e(d)}`}c.d(b,{$y:()=>k,G7:()=>j,Y8:()=>g,hI:()=>l,kw:()=>i,pj:()=>h,zd:()=>m})},89612:(a,b,c)=>{c.d(b,{C:()=>d,n:()=>e});let d=new Set(["archived","done","killed","errored","terminated","merged","cleanup"]);function e(a){return"merged"===a.status||"archived"===a.status||"killed"===a.status||"errored"===a.status||"cleanup"===a.status||"done"===a.status||"terminated"===a.status||a.pr&&("merged"===a.pr.state||"closed"===a.pr.state)?"done":"mergeable"===a.status||"approved"===a.status||a.pr?.mergeability.mergeable?"merge":"waiting_input"===a.activity||"blocked"===a.activity||"needs_input"===a.status||"stuck"===a.status?"respond":"queued"===a.status?"pending":"exited"===a.activity?"respond":"ci_failed"===a.status||"changes_requested"===a.status||a.pr&&("failing"===a.pr.ciStatus||"changes_requested"===a.pr.reviewDecision||!a.pr.mergeability.noConflicts)?"review":"review_pending"===a.status||a.pr&&!a.pr.isDraft&&("pending"===a.pr.reviewDecision||"none"===a.pr.reviewDecision)?"pending":"working"}},94297:(a,b,c)=>{c.d(b,{E:()=>f,b:()=>e});var d=c(48980);async function e(a){let b=await g(a,"service-restart",{});return b?.message??"Bridge service restart scheduled. This laptop should reconnect once the bridge is back online."}async function f(a,b){let c=await g(a,"repair",{installScriptUrl:b});return c?.message??"Bridge reinstall requested. This laptop should reconnect shortly."}async function g(a,b,c){let e=await fetch(`/api/bridge/devices/${encodeURIComponent(a)}/${b}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c),cache:"no-store"}),f=await e.json().catch(()=>null);if(!e.ok){var g,h;let a;throw Error((g=f?.error??f?.message??null,h=e.status,a=g?.trim()??"",(0,d.Az)(a)?(0,d.IG)("repair"===b?"repair":"restart"):a||`Failed to run ${b} on the bridge service (${h})`))}return f}},95528:(a,b,c)=>{c.d(b,{N8:()=>j,Tr:()=>m,jV:()=>n,m7:()=>l,qv:()=>f,xv:()=>g});var d=c(46818),e=c(48980);function f(a){switch(a){case"checking":return"Checking";case"updating":return"Updating";case"restarting":return"Restarting";case"completed":return"Completed";case"skipped":return"Skipped";case"failed":return"Failed";default:return"Idle"}}function g(a,b){return a.deviceId===b&&("checking"===a.phase||"updating"===a.phase||"restarting"===a.phase)}function h(a,b){return b.jobMessage??`Installing Conductor ${b.latestVersion??"latest"} on ${a.device_name}.`}function i(a){let b=a.currentVersion?.trim();return b?` (build ${b})`:""}function j(a){if(!a.enabled)switch(a.reason){case"source-checkout":return"This laptop is running from a source checkout, so there is no published package to auto-update.";case"missing-cli-metadata":return"This install could not determine its update metadata, so automatic package updates are unavailable.";default:return"Automatic package updates are unavailable for this laptop."}return a.updateAvailable?a.canAutoUpdate?`This laptop is already running the latest Conductor release${i(a)}.`:"npx"===a.installMode?"This laptop was launched via npx, so the next launch will pick up the latest package automatically.":a.updateCommand?`A newer Conductor release is available, but this install still needs a manual update: ${a.updateCommand}`:"A newer Conductor release is available, but this install cannot update itself automatically.":`This laptop is already running the latest Conductor release${i(a)}.`}async function k(a,b){var c,f;let g=b?.method??"GET",h=`/api/bridge/devices/${encodeURIComponent(a)}/app-update`,i=new URL((0,d.S)(h,a),window.location.origin);b?.force&&i.searchParams.set("force","1");let j=await fetch(i.toString(),{method:g,headers:b?.body?{"Content-Type":"application/json"}:void 0,body:b?.body?JSON.stringify(b.body):void 0,cache:"no-store"}),k=await j.json().catch(()=>null);if(!j.ok){let a;throw Error((c=k&&"object"==typeof k&&"error"in k&&"string"==typeof k.error?k.error:null,f=j.status,a=c?.trim()??"",(0,e.Az)(a)?(0,e.IG)("update"):a||`Failed to update Conductor on this laptop (${f})`))}let l=k&&"object"==typeof k?k:null;if(!l)throw Error("Paired device returned an invalid update payload.");return l}function l(a){}function m(){return null}async function n(a,b){let c=(c,d)=>{b({deviceId:a.device_id,phase:c,message:d})};c("checking",`Checking for Conductor updates on ${a.device_name}.`);try{let b=await k(a.device_id,{force:!0});if(b.restarting)return void c("restarting",b.jobMessage??`Restart scheduled on ${a.device_name}. This page will reconnect once the bridge runtime is back online.`);if("running"===b.jobStatus)c("updating",h(a,b));else{if(!b.updateAvailable||!b.enabled||!b.canAutoUpdate)return void c(b.enabled&&b.canAutoUpdate?"completed":"skipped",j(b));b=await k(a.device_id,{method:"POST"}),c("updating",h(a,b))}let d=Date.now()+3e5;for(;Date.now()<d&&"running"===b.jobStatus;){if(await new Promise(a=>{window.setTimeout(a,1500)}),(b=await k(a.device_id)).restarting)return void c("restarting",b.jobMessage??`Restart scheduled on ${a.device_name}. This page will reconnect once the bridge runtime is back online.`);c("updating",h(a,b))}if("running"===b.jobStatus)return void c("updating",`The package update is still running on ${a.device_name}. Leave this page open and Conductor will finish applying it in the background.`);if("failed"===b.jobStatus)throw Error(b.jobMessage??b.error??`Automatic package update failed on ${a.device_name}.`);if(b.restartRequired){if(b.canRestart){b=await k(a.device_id,{method:"POST",body:{action:"restart"}}),c("restarting",b.jobMessage??`Restart scheduled on ${a.device_name} to finish updating Conductor.`);return}c("completed",b.jobMessage??`The latest Conductor package is installed on ${a.device_name}. Restart that laptop to finish updating.`);return}c("completed",b.jobMessage??`${a.device_name} is now updated to Conductor ${b.latestVersion??"latest"}.`)}catch(b){c("failed",b instanceof Error?b.message:`Failed to auto-update ${a.device_name}.`)}}},96956:(a,b,c)=>{c.d(b,{J:()=>B});var d=c(92692),e=c(71277),f=c(140),g=c(58599),h=c.n(g),i=c(67994),j=c(37035),k=c(86263),l=c(64583),m=c(3216),n=c(32165),o=c(75185),p=c(42765),q=(c(60361),c(95528)),r=c(48980),s=c(93544),t=c(94297),u=c(30144),v=c(81461),w=c(69125),x=c(66562);let y="/bridge/connect";function z({connected:a,className:b,title:c,suffix:e}){return(0,d.jsxs)("span",{className:(0,s.cn)("inline-flex items-center gap-2 rounded-full border px-2.5 py-1 text-[12px] font-medium",a?"border-[rgba(24,197,143,0.35)] bg-[rgba(24,197,143,0.12)] text-[var(--vk-green)]":"border-[rgba(255,143,122,0.24)] bg-[rgba(255,143,122,0.08)] text-[var(--vk-red)]",b),title:c,children:[(0,d.jsx)("span",{className:(0,s.cn)("h-2.5 w-2.5 rounded-full",a?"bg-[var(--vk-green)]":"bg-[var(--vk-red)]")}),(0,d.jsx)("span",{children:a?"Online":"Offline"}),e]})}function A({className:a}){(0,i.useRouter)(),(0,i.usePathname)();let b=(0,i.useSearchParams)(),[c,g]=(0,e.useState)([]),[B,C]=(0,e.useState)(!0),[D,E]=(0,e.useState)(null),[F,G]=(0,e.useState)(null),[H,I]=(0,e.useState)({deviceId:null,phase:"idle",message:null}),[J,K]=(0,e.useState)({deviceId:null,kind:null,status:"idle",message:null}),[L,M]=(0,e.useState)(null);(0,e.useRef)(new Set);let N=!!(0,x.y)()&&null===L,O=(0,e.useCallback)(async a=>{if(!N){a&&C(!1),g([]),E(null);return}a&&C(!0);try{let a=await fetch("/api/bridge/devices",{cache:"no-store"}),b=await a.json().catch(()=>null);if(!a.ok){if((0,u.Xt)(b?.error)){M(b?.error??null),g([]),E(null);return}throw Error(b?.error??`Failed to load bridge devices (${a.status})`)}g((0,w.oH)(b?.devices)),M(null),E(null)}catch(a){E(a instanceof Error?a.message:"Failed to load bridge devices.")}finally{C(!1)}},[N]),P=c.filter(a=>a.connected),Q=b.get("bridge")?.trim()||null,R=Q?c.find(a=>a.device_id===Q)??null:null,S=!B&&0===P.length,T=F?c.find(a=>a.device_id===F)??null:null,U=S?R?.device_id?(0,v.kw)(R.device_id):T?.device_id?(0,v.kw)(T.device_id):c[0]?.device_id?(0,v.kw)(c[0].device_id):y:y,V=P.length>0,W=N?D??(V?`${P.length} bridge${1===P.length?"":"s"} online`:c.length>0?"No paired bridges are online":"No paired bridges yet"):L??"Bridge relay URL is not configured",X=(0,e.useCallback)(async a=>{K({deviceId:a.device_id,kind:"restart",status:"running",message:`Restarting the bridge service on ${a.device_name}.`});try{let b=await (0,t.b)(a.device_id);K({deviceId:a.device_id,kind:"restart",status:"completed",message:`${b} Waiting for ${a.device_name} to reconnect.`}),[2e3,5e3,1e4,2e4,35e3].forEach(a=>{window.setTimeout(()=>{O(!1)},a)})}catch(b){K({deviceId:a.device_id,kind:"restart",status:"failed",message:b instanceof Error?b.message:`Failed to restart ${a.device_name}.`})}},[O]),Y=(0,e.useCallback)(async a=>{K({deviceId:a.device_id,kind:"repair",status:"running",message:`Reinstalling the bridge service on ${a.device_name}.`});try{let b=(0,v.pj)(window.location.origin,(0,v.Y8)(a.os)),c=await (0,t.E)(a.device_id,b);K({deviceId:a.device_id,kind:"repair",status:"completed",message:c}),window.setTimeout(()=>{O(!1)},2e3)}catch(b){K({deviceId:a.device_id,kind:"repair",status:"failed",message:b instanceof Error?b.message:`Failed to repair ${a.device_name}.`})}},[O]),Z=(0,e.useCallback)(async a=>{await (0,q.jV)(a,I),window.setTimeout(()=>{O(!1)},2e3)},[O]);return S?(0,d.jsx)(h(),{href:U,prefetch:!0,className:"inline-flex",title:c.length>0?"Reconnect paired device":"Pair a device",children:(0,d.jsx)(z,{connected:!1,className:a,title:c.length>0?"Reconnect paired device":"Pair a device",suffix:(0,d.jsx)(j.A,{className:"h-3.5 w-3.5"})})}):(0,d.jsxs)(f.bL,{children:[(0,d.jsx)(f.l9,{asChild:!0,children:(0,d.jsx)("button",{type:"button",className:"outline-none",children:(0,d.jsx)(z,{connected:V,className:a,title:W,suffix:(0,d.jsx)(k.A,{className:"h-3.5 w-3.5 text-current/70"})})})}),(0,d.jsx)(f.ZL,{children:(0,d.jsxs)(f.UC,{align:"end",sideOffset:8,className:"z-[90] w-[320px] rounded-[18px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] p-2 text-[var(--vk-text-normal)] shadow-[0_22px_48px_rgba(0,0,0,0.34)]",children:[(0,d.jsxs)("div",{className:"rounded-[14px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-3 py-3",children:[(0,d.jsx)("div",{className:"text-[11px] font-semibold uppercase tracking-[0.22em] text-[var(--vk-text-muted)]",children:"Conductor Bridge"}),(0,d.jsx)("div",{className:"mt-2 text-[13px] text-[var(--vk-text-normal)]",children:V?`${P.length} device${1===P.length?"":"s"} online`:B?"Loading device status":"No live bridge connection"}),(0,d.jsx)("div",{className:"mt-2 text-[11px] leading-5 text-[var(--vk-text-faint)]",children:"If a laptop is online but misbehaving, repair the bridge, update Conductor, or restart the service here."}),D?(0,d.jsx)("div",{className:"mt-2 text-[12px] leading-5 text-[var(--vk-red)]",children:D}):null,H.message?(0,d.jsxs)("div",{className:(0,s.cn)("mt-2 flex flex-wrap items-center gap-2 text-[12px] leading-5","failed"===H.phase?"text-[var(--vk-red)]":"skipped"===H.phase?"text-[var(--vk-text-muted)]":"text-[var(--vk-text-faint)]"),children:[(0,d.jsx)("span",{className:"inline-flex items-center rounded-full border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] text-[var(--vk-text-muted)]",children:(0,q.qv)(H.phase)}),(0,d.jsx)("span",{children:H.message})]}):null]}),(0,d.jsx)("div",{className:"mt-2 max-h-[280px] overflow-y-auto",children:c.length>0?c.map(a=>{let b=(0,q.xv)(H,a.device_id),c="running"===J.status&&J.deviceId===a.device_id,e=c&&"repair"===J.kind,f=c&&"restart"===J.kind;return J.deviceId===a.device_id&&(0,r.Az)(J.message)||H.deviceId===a.device_id&&(0,r.Az)(H.message),(0,d.jsx)("div",{className:"rounded-[14px] px-3 py-2.5 transition-colors hover:bg-[var(--vk-bg-hover)]",children:(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("div",{className:"truncate text-[13px] font-medium text-[var(--vk-text-strong)]",children:a.device_name}),(0,d.jsxs)("div",{className:"mt-1 text-[12px] text-[var(--vk-text-muted)]",children:[a.hostname," \xb7 ",a.os,"/",a.arch,(0,w.wj)(a.last_status?.version)]}),(0,d.jsxs)("div",{className:"mt-1 text-[11px] text-[var(--vk-text-muted)]",children:["Relay: ",a.last_status?.hostname??a.hostname,(0,w.wj)(a.last_status?.version)]}),H.message&&H.deviceId===a.device_id?(0,d.jsxs)("div",{className:(0,s.cn)("mt-1 flex flex-wrap items-center gap-2 text-[11px] leading-5","failed"===H.phase?"text-[var(--vk-red)]":"skipped"===H.phase?"text-[var(--vk-text-muted)]":"text-[var(--vk-text-faint)]"),children:[(0,d.jsx)("span",{className:"inline-flex items-center rounded-full border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] text-[var(--vk-text-muted)]",children:(0,q.qv)(H.phase)}),(0,d.jsx)("span",{children:H.message})]}):null,J.message&&J.deviceId===a.device_id?(0,d.jsx)("div",{className:(0,s.cn)("mt-1 text-[11px] leading-5","failed"===J.status?"text-[var(--vk-red)]":"completed"===J.status?"text-[var(--vk-green)]":"text-[var(--vk-text-faint)]"),children:J.message}):null,null,a.connected?(0,d.jsxs)("div",{className:"mt-2 flex flex-wrap gap-2",children:[(0,d.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1.5 rounded-[10px] border border-[var(--vk-border)] px-2.5 py-1 text-[11px] font-medium text-[var(--vk-text-normal)] transition-colors hover:bg-[var(--vk-bg-hover)]",disabled:c||b,onClick:()=>{Y(a)},children:[e?(0,d.jsx)(l.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(m.A,{className:"h-3.5 w-3.5"}),"Repair bridge"]}),(0,d.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1.5 rounded-[10px] border border-[var(--vk-border)] px-2.5 py-1 text-[11px] font-medium text-[var(--vk-text-normal)] transition-colors hover:bg-[var(--vk-bg-hover)]",disabled:b||c,onClick:()=>{Z(a)},children:[b?(0,d.jsx)(l.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(n.A,{className:"h-3.5 w-3.5"}),b?"Updating...":"Update Conductor"]}),(0,d.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1.5 rounded-[10px] border border-[var(--vk-border)] px-2.5 py-1 text-[11px] font-medium text-[var(--vk-text-normal)] transition-colors hover:bg-[var(--vk-bg-hover)]",disabled:c||b,onClick:()=>{X(a)},children:[f?(0,d.jsx)(l.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(o.A,{className:"h-3.5 w-3.5"}),"Restart service"]})]}):null]}),(0,d.jsx)(z,{connected:!0===a.connected})]})},a.device_id)}):(0,d.jsx)("div",{className:"rounded-[14px] border border-dashed border-[var(--vk-border)] px-3 py-4 text-[12px] text-[var(--vk-text-muted)]",children:B?"Loading paired devices...":"Pair a laptop to see bridge status here."})}),(0,d.jsx)(f.wv,{className:"my-2 h-px bg-[var(--vk-border)]"}),(0,d.jsx)(f.q7,{asChild:!0,children:(0,d.jsxs)(h(),{href:y,prefetch:!0,className:"flex items-center justify-between rounded-[12px] px-3 py-2 text-[13px] font-medium text-[var(--vk-text-normal)] outline-none transition-colors hover:bg-[var(--vk-bg-hover)] focus:bg-[var(--vk-bg-hover)]",children:[(0,d.jsx)("span",{children:"Open paired devices"}),(0,d.jsx)(p.A,{className:"h-4 w-4 text-[var(--vk-text-muted)]"})]})})]})})]})}function B({connected:a,className:b,title:c}={}){return"boolean"==typeof a?(0,d.jsx)(z,{connected:a,className:b,title:c}):(0,d.jsx)(A,{className:b})}}};
1
+ "use strict";exports.id=3540,exports.ids=[3540],exports.modules={1071:(a,b,c)=>{c.d(b,{$:()=>j});var d=c(92692),e=c(93544),f=c(74745),g=c(71277);let h={default:"border-[var(--vk-border)] bg-[var(--vk-bg-panel)] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)]",primary:"border-[var(--vk-border)] bg-[var(--vk-bg-active)] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)]",ghost:"border-transparent bg-transparent text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)] hover:text-[var(--vk-text-normal)]",danger:"border-[var(--vk-red)]/40 bg-[color:color-mix(in_srgb,var(--vk-red)_18%,transparent)] text-[var(--vk-red)] hover:bg-[color:color-mix(in_srgb,var(--vk-red)_24%,transparent)]",outline:"border-[var(--vk-border)] bg-transparent text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)]"},i={sm:"h-7 px-2.5 text-[12px] gap-1",md:"h-8 px-3 text-[13px] gap-1.5",lg:"h-9 px-3.5 text-[14px] gap-2",icon:"h-8 w-8 p-0"},j=(0,g.forwardRef)(({variant:a="default",size:b="md",asChild:c,className:g,children:j,...k},l)=>{let m=c?f.DX:"button";return(0,d.jsx)(m,{ref:l,className:(0,e.cn)("inline-flex items-center justify-center rounded-[var(--radius-sm)] border font-medium","transition-colors duration-150","focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--vk-orange)]","disabled:pointer-events-none disabled:opacity-45",h[a],i[b],g),...k,children:j})});j.displayName="Button"},19954:(a,b,c)=>{c.d(b,{Bp:()=>f,C0:()=>e,DW:()=>g,kV:()=>h});let d="bridge:";function e(a){let b=a?.trim();return b&&b.length>0?b:null}function f(a,b){return`${d}${a}:${b}`}function g(a){let b=a?.trim();if(!b||!b.startsWith(d))return null;let c=b.slice(d.length),f=c.indexOf(":");if(f<=0||f>=c.length-1)return null;let g=e(c.slice(0,f)),h=c.slice(f+1).trim();return g&&0!==h.length?{bridgeId:g,sessionId:h}:null}function h(a){let b=a?.trim()??"";return b?g(b)?.sessionId??b:""}},30144:(a,b,c)=>{c.d(b,{Xt:()=>d});function d(a){let b=a?.trim();return"Bridge relay URL is not configured"===b||"RELAY_JWT_SECRET is required for bridge relay access"===b}},46818:(a,b,c)=>{c.d(b,{S:()=>e,y:()=>f});var d=c(19954);function e(a,b){let c=(0,d.C0)(b);if(!c)return a;let e=new URL(a,"http://127.0.0.1");return e.searchParams.set("bridgeId",c),`${e.pathname}${e.search}${e.hash}`}function f(a){let b=function(a){if(!a)return null;if(a instanceof URL)return a;if("string"==typeof a)try{return new URL(a,"http://127.0.0.1")}catch{return null}if("string"==typeof a.href)try{return new URL(a.href)}catch{}return null}(a);if(!b)return null;let c=(0,d.C0)(b.searchParams.get("bridge")??b.searchParams.get("bridgeId"));if(c)return c;let e=(0,d.DW)(b.searchParams.get("session"))?.bridgeId;if(e)return e;let f=b.pathname.match(/^\/sessions\/([^/]+)$/);if(!f)return null;try{return(0,d.DW)(decodeURIComponent(f[1]))?.bridgeId??null}catch{return null}}},48980:(a,b,c)=>{function d(a){let b=a?.trim().toLowerCase()??"";return!!b&&(b.includes("127.0.0.1:4749")||b.includes("older bridge build")||b.includes("one-time local bridge upgrade"))}function e(a){return`This laptop needs a one-time local bridge upgrade before ${function(a){switch(a){case"repair":return"Repair bridge";case"restart":return"Restart service";case"update":return"Update Conductor"}}(a)} can run from the dashboard.`}function f(a){let b=a?.trim()||"This laptop";return`${b} is still on an older bridge build, so Conductor cannot repair, restart, or update it remotely yet. Upgrade the bridge once on that laptop, then future fixes run from the dashboard.`}c.d(b,{Az:()=>d,IG:()=>e,_5:()=>f})},60361:(a,b,c)=>{c.d(b,{i:()=>o});var d=c(92692),e=c(71277),f=c(58599),g=c.n(f),h=c(26996),i=c(13636),j=c(3216),k=c(1071),l=c(93544),m=c(48980),n=c(81461);function o({deviceId:a,deviceName:b,deviceOs:c,dashboardUrl:f,installScriptUrl:p,installPowerShellUrl:q,relayUrl:r,className:s}){let[t,u]=(0,e.useState)(!1),v=(0,e.useMemo)(()=>(0,n.Y8)(c),[c]),w="windows"===v?q:p,x=(0,e.useMemo)(()=>(0,n.$y)(w,f,r,v),[f,r,w,v]),y=(0,e.useMemo)(()=>(0,n.kw)(a),[a]);return(0,d.jsxs)("div",{className:(0,l.cn)("mt-3 rounded-[14px] border border-[color:color-mix(in_srgb,var(--vk-orange)_28%,transparent)] bg-[color:color-mix(in_srgb,var(--vk-orange)_10%,transparent)] px-3 py-3",s),children:[(0,d.jsx)("div",{className:"text-[11px] font-semibold uppercase tracking-[0.18em] text-[var(--vk-text-muted)]",children:"One-time local repair"}),(0,d.jsx)("div",{className:"mt-2 text-[12px] leading-5 text-[var(--vk-text-normal)]",children:(0,m._5)(b)}),(0,d.jsxs)("div",{className:"mt-3 flex flex-wrap gap-2",children:[(0,d.jsxs)(k.$,{type:"button",variant:"outline",size:"sm",onClick:()=>{navigator.clipboard?.writeText?(u(!1),navigator.clipboard.writeText(x).then(()=>{u(!0)}).catch(()=>{u(!1)})):u(!1)},children:[t?(0,d.jsx)(h.A,{className:"h-4 w-4"}):(0,d.jsx)(i.A,{className:"h-4 w-4"}),t?"Repair command copied":"Copy repair command"]}),(0,d.jsx)(k.$,{asChild:!0,variant:"outline",size:"sm",children:(0,d.jsxs)(g(),{href:y,children:[(0,d.jsx)(j.A,{className:"h-4 w-4"}),"Open repair steps"]})})]})]})}},62465:(a,b,c)=>{function d(){return!1}function e(a,b,c,d){let e=Number.isFinite(a)?Math.max(0,a):0,f=Number.isFinite(b)?Math.max(0,b):e,g=Number.isFinite(c)?Math.max(0,c):0,h=Number.isFinite(d)?Math.max(0,d):0,i=Math.max(0,e-(f+g));return{usableHeight:Math.round(Math.max(0,f-Math.max(0,h-g))),keyboardInset:Math.round(i),keyboardVisible:i>=80}}c.d(b,{k$:()=>d,wP:()=>e})},66562:(a,b,c)=>{c.d(b,{y:()=>d});function d(){let a=function(a){let b=a?.trim();if(!b)return null;try{let a=new URL(b);if("http:"!==a.protocol&&"https:"!==a.protocol)return null;return a.toString()}catch{return null}}(process.env.CONDUCTOR_BRIDGE_RELAY_URL??process.env.NEXT_PUBLIC_CONDUCTOR_BRIDGE_RELAY_URL);return a||null}},69125:(a,b,c)=>{function d(a,b){return"string"==typeof a&&a.trim().length>0?a.trim():b}function e(a){let b="string"==typeof a?a.trim():"";return b?` (build ${b})`:""}function f(a){return Array.isArray(a)?a.filter(a=>!!a&&"object"==typeof a).map(a=>{let b,c,e;return b=d(a.hostname,"unknown-host"),c=d(a.os,"unknown-os"),e=d(a.arch,"unknown-arch"),{device_id:d(a.device_id,b),device_name:d(a.device_name,b),hostname:b,os:c,arch:e,connected:!0===a.connected,last_status:a.last_status?{hostname:d(a.last_status.hostname,b),os:d(a.last_status.os,c),connected:!0===a.last_status.connected,version:"string"==typeof a.last_status.version&&a.last_status.version.trim().length>0?a.last_status.version.trim():null}:null}}):[]}c.d(b,{oH:()=>f,wj:()=>e})},81461:(a,b,c)=>{function d(a){return/^[A-Za-z0-9_./:=@%+-]+$/.test(a)?a:`'${a.replace(/'/g,"'\"'\"'")}'`}function e(a){return a.map(d).join(" ")}function f(a){return`'${a.replace(/'/g,"''")}'`}function g(a){return/^[A-Za-z0-9_./:=@%+\\-]+$/.test(a)?a:f(a)}function h(a,b="unix"){return"windows"===b?["& (Join-Path $HOME '.conductor\\bin\\conductor-bridge.exe')",...a.map(g)].join(" "):e(["conductor-bridge",...a])}function i(a){return(a?.trim().toLowerCase()??"").startsWith("windows")?"windows":"unix"}function j(a,b="unix"){return new URL("windows"===b?"/bridge/install.ps1":"/bridge/install.sh",a).toString()}function k(a){return`/bridge/connect?device=${encodeURIComponent(a)}#bridge-setup`}function l(a,b="unix"){return"windows"===b?`& ([scriptblock]::Create((Invoke-RestMethod -Uri ${f(a)})))`:`curl -fsSL ${d(a)} | sh`}function m(a,b,c,g="unix"){if("windows"===g){let d=[`& ([scriptblock]::Create((Invoke-RestMethod -Uri ${f(a)})))`,"-Connect","-DashboardUrl",f(b)];return c?.trim()&&d.push("-RelayUrl",f(c.trim())),d.join(" ")}let h=["sh","-s","--","--connect","--dashboard-url",b];return c?.trim()&&h.push("--relay-url",c.trim()),`curl -fsSL ${d(a)} | ${e(h)}`}function n(a,b,c="unix"){let d=["connect","--dashboard-url",a];return b?.trim()&&d.push("--relay-url",b.trim()),h(d,c)}function o(a,b,c="unix"){let d=["pair","--code",a?.trim()||"ABC123"],e=["daemon"];return b?.trim()&&(d.push("--relay-url",b.trim()),e.push("--relay-url",b.trim())),`${h(d,c)}
2
+ ${h(e,c)}`}c.d(b,{$y:()=>m,G7:()=>l,Y8:()=>i,hI:()=>n,kw:()=>k,pj:()=>j,zd:()=>o})},89612:(a,b,c)=>{c.d(b,{C:()=>d,n:()=>e});let d=new Set(["archived","done","killed","errored","terminated","merged","cleanup"]);function e(a){return"merged"===a.status||"archived"===a.status||"killed"===a.status||"errored"===a.status||"cleanup"===a.status||"done"===a.status||"terminated"===a.status||a.pr&&("merged"===a.pr.state||"closed"===a.pr.state)?"done":"mergeable"===a.status||"approved"===a.status||a.pr?.mergeability.mergeable?"merge":"waiting_input"===a.activity||"blocked"===a.activity||"needs_input"===a.status||"stuck"===a.status?"respond":"queued"===a.status?"pending":"exited"===a.activity?"respond":"ci_failed"===a.status||"changes_requested"===a.status||a.pr&&("failing"===a.pr.ciStatus||"changes_requested"===a.pr.reviewDecision||!a.pr.mergeability.noConflicts)?"review":"review_pending"===a.status||a.pr&&!a.pr.isDraft&&("pending"===a.pr.reviewDecision||"none"===a.pr.reviewDecision)?"pending":"working"}},94297:(a,b,c)=>{c.d(b,{E:()=>f,b:()=>e});var d=c(48980);async function e(a){let b=await g(a,"service-restart",{});return b?.message??"Bridge service restart scheduled. This laptop should reconnect once the bridge is back online."}async function f(a,b){let c=await g(a,"repair",{installScriptUrl:b});return c?.message??"Bridge reinstall requested. This laptop should reconnect shortly."}async function g(a,b,c){let e=await fetch(`/api/bridge/devices/${encodeURIComponent(a)}/${b}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c),cache:"no-store"}),f=await e.json().catch(()=>null);if(!e.ok){var g,h;let a;throw Error((g=f?.error??f?.message??null,h=e.status,a=g?.trim()??"",(0,d.Az)(a)?(0,d.IG)("repair"===b?"repair":"restart"):a||`Failed to run ${b} on the bridge service (${h})`))}return f}},95528:(a,b,c)=>{c.d(b,{N8:()=>j,Tr:()=>m,jV:()=>n,m7:()=>l,qv:()=>f,xv:()=>g});var d=c(46818),e=c(48980);function f(a){switch(a){case"checking":return"Checking";case"updating":return"Updating";case"restarting":return"Restarting";case"completed":return"Completed";case"skipped":return"Skipped";case"failed":return"Failed";default:return"Idle"}}function g(a,b){return a.deviceId===b&&("checking"===a.phase||"updating"===a.phase||"restarting"===a.phase)}function h(a,b){return b.jobMessage??`Installing Conductor ${b.latestVersion??"latest"} on ${a.device_name}.`}function i(a){let b=a.currentVersion?.trim();return b?` (build ${b})`:""}function j(a){if(!a.enabled)switch(a.reason){case"source-checkout":return"This laptop is running from a source checkout, so there is no published package to auto-update.";case"missing-cli-metadata":return"This install could not determine its update metadata, so automatic package updates are unavailable.";default:return"Automatic package updates are unavailable for this laptop."}return a.updateAvailable?a.canAutoUpdate?`This laptop is already running the latest Conductor release${i(a)}.`:"npx"===a.installMode?"This laptop was launched via npx, so the next launch will pick up the latest package automatically.":a.updateCommand?`A newer Conductor release is available, but this install still needs a manual update: ${a.updateCommand}`:"A newer Conductor release is available, but this install cannot update itself automatically.":`This laptop is already running the latest Conductor release${i(a)}.`}async function k(a,b){var c,f;let g=b?.method??"GET",h=`/api/bridge/devices/${encodeURIComponent(a)}/app-update`,i=new URL((0,d.S)(h,a),window.location.origin);b?.force&&i.searchParams.set("force","1");let j=await fetch(i.toString(),{method:g,headers:b?.body?{"Content-Type":"application/json"}:void 0,body:b?.body?JSON.stringify(b.body):void 0,cache:"no-store"}),k=await j.json().catch(()=>null);if(!j.ok){let a;throw Error((c=k&&"object"==typeof k&&"error"in k&&"string"==typeof k.error?k.error:null,f=j.status,a=c?.trim()??"",(0,e.Az)(a)?(0,e.IG)("update"):a||`Failed to update Conductor on this laptop (${f})`))}let l=k&&"object"==typeof k?k:null;if(!l)throw Error("Paired device returned an invalid update payload.");return l}function l(a){}function m(){return null}async function n(a,b){let c=(c,d)=>{b({deviceId:a.device_id,phase:c,message:d})};c("checking",`Checking for Conductor updates on ${a.device_name}.`);try{let b=await k(a.device_id,{force:!0});if(b.restarting)return void c("restarting",b.jobMessage??`Restart scheduled on ${a.device_name}. This page will reconnect once the bridge runtime is back online.`);if("running"===b.jobStatus)c("updating",h(a,b));else{if(!b.updateAvailable||!b.enabled||!b.canAutoUpdate)return void c(b.enabled&&b.canAutoUpdate?"completed":"skipped",j(b));b=await k(a.device_id,{method:"POST"}),c("updating",h(a,b))}let d=Date.now()+3e5;for(;Date.now()<d&&"running"===b.jobStatus;){if(await new Promise(a=>{window.setTimeout(a,1500)}),(b=await k(a.device_id)).restarting)return void c("restarting",b.jobMessage??`Restart scheduled on ${a.device_name}. This page will reconnect once the bridge runtime is back online.`);c("updating",h(a,b))}if("running"===b.jobStatus)return void c("updating",`The package update is still running on ${a.device_name}. Leave this page open and Conductor will finish applying it in the background.`);if("failed"===b.jobStatus)throw Error(b.jobMessage??b.error??`Automatic package update failed on ${a.device_name}.`);if(b.restartRequired){if(b.canRestart){b=await k(a.device_id,{method:"POST",body:{action:"restart"}}),c("restarting",b.jobMessage??`Restart scheduled on ${a.device_name} to finish updating Conductor.`);return}c("completed",b.jobMessage??`The latest Conductor package is installed on ${a.device_name}. Restart that laptop to finish updating.`);return}c("completed",b.jobMessage??`${a.device_name} is now updated to Conductor ${b.latestVersion??"latest"}.`)}catch(b){c("failed",b instanceof Error?b.message:`Failed to auto-update ${a.device_name}.`)}}},96956:(a,b,c)=>{c.d(b,{J:()=>B});var d=c(92692),e=c(71277),f=c(140),g=c(58599),h=c.n(g),i=c(67994),j=c(37035),k=c(86263),l=c(64583),m=c(3216),n=c(32165),o=c(75185),p=c(42765),q=(c(60361),c(95528)),r=c(48980),s=c(93544),t=c(94297),u=c(30144),v=c(81461),w=c(69125),x=c(66562);let y="/bridge/connect";function z({connected:a,className:b,title:c,suffix:e}){return(0,d.jsxs)("span",{className:(0,s.cn)("inline-flex items-center gap-2 rounded-full border px-2.5 py-1 text-[12px] font-medium",a?"border-[rgba(24,197,143,0.35)] bg-[rgba(24,197,143,0.12)] text-[var(--vk-green)]":"border-[rgba(255,143,122,0.24)] bg-[rgba(255,143,122,0.08)] text-[var(--vk-red)]",b),title:c,children:[(0,d.jsx)("span",{className:(0,s.cn)("h-2.5 w-2.5 rounded-full",a?"bg-[var(--vk-green)]":"bg-[var(--vk-red)]")}),(0,d.jsx)("span",{children:a?"Online":"Offline"}),e]})}function A({className:a}){(0,i.useRouter)(),(0,i.usePathname)();let b=(0,i.useSearchParams)(),[c,g]=(0,e.useState)([]),[B,C]=(0,e.useState)(!0),[D,E]=(0,e.useState)(null),[F,G]=(0,e.useState)(null),[H,I]=(0,e.useState)({deviceId:null,phase:"idle",message:null}),[J,K]=(0,e.useState)({deviceId:null,kind:null,status:"idle",message:null}),[L,M]=(0,e.useState)(null);(0,e.useRef)(new Set);let N=!!(0,x.y)()&&null===L,O=(0,e.useCallback)(async a=>{if(!N){a&&C(!1),g([]),E(null);return}a&&C(!0);try{let a=await fetch("/api/bridge/devices",{cache:"no-store"}),b=await a.json().catch(()=>null);if(!a.ok){if((0,u.Xt)(b?.error)){M(b?.error??null),g([]),E(null);return}throw Error(b?.error??`Failed to load bridge devices (${a.status})`)}g((0,w.oH)(b?.devices)),M(null),E(null)}catch(a){E(a instanceof Error?a.message:"Failed to load bridge devices.")}finally{C(!1)}},[N]),P=c.filter(a=>a.connected),Q=b.get("bridge")?.trim()||null,R=Q?c.find(a=>a.device_id===Q)??null:null,S=!B&&0===P.length,T=F?c.find(a=>a.device_id===F)??null:null,U=S?R?.device_id?(0,v.kw)(R.device_id):T?.device_id?(0,v.kw)(T.device_id):c[0]?.device_id?(0,v.kw)(c[0].device_id):y:y,V=P.length>0,W=N?D??(V?`${P.length} bridge${1===P.length?"":"s"} online`:c.length>0?"No paired bridges are online":"No paired bridges yet"):L??"Bridge relay URL is not configured",X=(0,e.useCallback)(async a=>{K({deviceId:a.device_id,kind:"restart",status:"running",message:`Restarting the bridge service on ${a.device_name}.`});try{let b=await (0,t.b)(a.device_id);K({deviceId:a.device_id,kind:"restart",status:"completed",message:`${b} Waiting for ${a.device_name} to reconnect.`}),[2e3,5e3,1e4,2e4,35e3].forEach(a=>{window.setTimeout(()=>{O(!1)},a)})}catch(b){K({deviceId:a.device_id,kind:"restart",status:"failed",message:b instanceof Error?b.message:`Failed to restart ${a.device_name}.`})}},[O]),Y=(0,e.useCallback)(async a=>{K({deviceId:a.device_id,kind:"repair",status:"running",message:`Reinstalling the bridge service on ${a.device_name}.`});try{let b=(0,v.pj)(window.location.origin,(0,v.Y8)(a.os)),c=await (0,t.E)(a.device_id,b);K({deviceId:a.device_id,kind:"repair",status:"completed",message:c}),window.setTimeout(()=>{O(!1)},2e3)}catch(b){K({deviceId:a.device_id,kind:"repair",status:"failed",message:b instanceof Error?b.message:`Failed to repair ${a.device_name}.`})}},[O]),Z=(0,e.useCallback)(async a=>{await (0,q.jV)(a,I),window.setTimeout(()=>{O(!1)},2e3)},[O]);return S?(0,d.jsx)(h(),{href:U,prefetch:!0,className:"inline-flex",title:c.length>0?"Reconnect paired device":"Pair a device",children:(0,d.jsx)(z,{connected:!1,className:a,title:c.length>0?"Reconnect paired device":"Pair a device",suffix:(0,d.jsx)(j.A,{className:"h-3.5 w-3.5"})})}):(0,d.jsxs)(f.bL,{children:[(0,d.jsx)(f.l9,{asChild:!0,children:(0,d.jsx)("button",{type:"button",className:"outline-none",children:(0,d.jsx)(z,{connected:V,className:a,title:W,suffix:(0,d.jsx)(k.A,{className:"h-3.5 w-3.5 text-current/70"})})})}),(0,d.jsx)(f.ZL,{children:(0,d.jsxs)(f.UC,{align:"end",sideOffset:8,className:"z-[90] w-[320px] rounded-[18px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] p-2 text-[var(--vk-text-normal)] shadow-[0_22px_48px_rgba(0,0,0,0.34)]",children:[(0,d.jsxs)("div",{className:"rounded-[14px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-3 py-3",children:[(0,d.jsx)("div",{className:"text-[11px] font-semibold uppercase tracking-[0.22em] text-[var(--vk-text-muted)]",children:"Conductor Bridge"}),(0,d.jsx)("div",{className:"mt-2 text-[13px] text-[var(--vk-text-normal)]",children:V?`${P.length} device${1===P.length?"":"s"} online`:B?"Loading device status":"No live bridge connection"}),(0,d.jsx)("div",{className:"mt-2 text-[11px] leading-5 text-[var(--vk-text-faint)]",children:"If a laptop is online but misbehaving, repair the bridge, update Conductor, or restart the service here."}),D?(0,d.jsx)("div",{className:"mt-2 text-[12px] leading-5 text-[var(--vk-red)]",children:D}):null,H.message?(0,d.jsxs)("div",{className:(0,s.cn)("mt-2 flex flex-wrap items-center gap-2 text-[12px] leading-5","failed"===H.phase?"text-[var(--vk-red)]":"skipped"===H.phase?"text-[var(--vk-text-muted)]":"text-[var(--vk-text-faint)]"),children:[(0,d.jsx)("span",{className:"inline-flex items-center rounded-full border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] text-[var(--vk-text-muted)]",children:(0,q.qv)(H.phase)}),(0,d.jsx)("span",{children:H.message})]}):null]}),(0,d.jsx)("div",{className:"mt-2 max-h-[280px] overflow-y-auto",children:c.length>0?c.map(a=>{let b=(0,q.xv)(H,a.device_id),c="running"===J.status&&J.deviceId===a.device_id,e=c&&"repair"===J.kind,f=c&&"restart"===J.kind;return J.deviceId===a.device_id&&(0,r.Az)(J.message)||H.deviceId===a.device_id&&(0,r.Az)(H.message),(0,d.jsx)("div",{className:"rounded-[14px] px-3 py-2.5 transition-colors hover:bg-[var(--vk-bg-hover)]",children:(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("div",{className:"truncate text-[13px] font-medium text-[var(--vk-text-strong)]",children:a.device_name}),(0,d.jsxs)("div",{className:"mt-1 text-[12px] text-[var(--vk-text-muted)]",children:[a.hostname," \xb7 ",a.os,"/",a.arch,(0,w.wj)(a.last_status?.version)]}),(0,d.jsxs)("div",{className:"mt-1 text-[11px] text-[var(--vk-text-muted)]",children:["Relay: ",a.last_status?.hostname??a.hostname,(0,w.wj)(a.last_status?.version)]}),H.message&&H.deviceId===a.device_id?(0,d.jsxs)("div",{className:(0,s.cn)("mt-1 flex flex-wrap items-center gap-2 text-[11px] leading-5","failed"===H.phase?"text-[var(--vk-red)]":"skipped"===H.phase?"text-[var(--vk-text-muted)]":"text-[var(--vk-text-faint)]"),children:[(0,d.jsx)("span",{className:"inline-flex items-center rounded-full border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] text-[var(--vk-text-muted)]",children:(0,q.qv)(H.phase)}),(0,d.jsx)("span",{children:H.message})]}):null,J.message&&J.deviceId===a.device_id?(0,d.jsx)("div",{className:(0,s.cn)("mt-1 text-[11px] leading-5","failed"===J.status?"text-[var(--vk-red)]":"completed"===J.status?"text-[var(--vk-green)]":"text-[var(--vk-text-faint)]"),children:J.message}):null,null,a.connected?(0,d.jsxs)("div",{className:"mt-2 flex flex-wrap gap-2",children:[(0,d.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1.5 rounded-[10px] border border-[var(--vk-border)] px-2.5 py-1 text-[11px] font-medium text-[var(--vk-text-normal)] transition-colors hover:bg-[var(--vk-bg-hover)]",disabled:c||b,onClick:()=>{Y(a)},children:[e?(0,d.jsx)(l.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(m.A,{className:"h-3.5 w-3.5"}),"Repair bridge"]}),(0,d.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1.5 rounded-[10px] border border-[var(--vk-border)] px-2.5 py-1 text-[11px] font-medium text-[var(--vk-text-normal)] transition-colors hover:bg-[var(--vk-bg-hover)]",disabled:b||c,onClick:()=>{Z(a)},children:[b?(0,d.jsx)(l.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(n.A,{className:"h-3.5 w-3.5"}),b?"Updating...":"Update Conductor"]}),(0,d.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1.5 rounded-[10px] border border-[var(--vk-border)] px-2.5 py-1 text-[11px] font-medium text-[var(--vk-text-normal)] transition-colors hover:bg-[var(--vk-bg-hover)]",disabled:c||b,onClick:()=>{X(a)},children:[f?(0,d.jsx)(l.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(o.A,{className:"h-3.5 w-3.5"}),"Restart service"]})]}):null]}),(0,d.jsx)(z,{connected:!0===a.connected})]})},a.device_id)}):(0,d.jsx)("div",{className:"rounded-[14px] border border-dashed border-[var(--vk-border)] px-3 py-4 text-[12px] text-[var(--vk-text-muted)]",children:B?"Loading paired devices...":"Pair a laptop to see bridge status here."})}),(0,d.jsx)(f.wv,{className:"my-2 h-px bg-[var(--vk-border)]"}),(0,d.jsx)(f.q7,{asChild:!0,children:(0,d.jsxs)(h(),{href:y,prefetch:!0,className:"flex items-center justify-between rounded-[12px] px-3 py-2 text-[13px] font-medium text-[var(--vk-text-normal)] outline-none transition-colors hover:bg-[var(--vk-bg-hover)] focus:bg-[var(--vk-bg-hover)]",children:[(0,d.jsx)("span",{children:"Open paired devices"}),(0,d.jsx)(p.A,{className:"h-4 w-4 text-[var(--vk-text-muted)]"})]})})]})})]})}function B({connected:a,className:b,title:c}={}){return"boolean"==typeof a?(0,d.jsx)(z,{connected:a,className:b,title:c}):(0,d.jsx)(A,{className:b})}}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=6941,exports.ids=[6941],exports.modules={19349:(a,b,c)=>{c.d(b,{a:()=>e});var d=c(85660);let e=(0,d.createServerReference)("0039aeb4d339adb23250ee5f1bd66c488a84e612f0",d.callServer,void 0,d.findSourceMapURL,"createOrReadKeylessAction")},56941:(a,b,c)=>{c.r(b),c.d(b,{createOrReadKeylessAction:()=>e.a,deleteKeylessAction:()=>g,detectKeylessEnvDriftAction:()=>d.A,syncKeylessConfigAction:()=>h});var d=c(53218),e=c(19349),f=c(85660);let g=(0,f.createServerReference)("005d3b2f87e3cc7cab31ec5cf567825a45450a4a9c",f.callServer,void 0,f.findSourceMapURL,"deleteKeylessAction"),h=(0,f.createServerReference)("409692d92f11e75e1d75d356424c50de72dfa9190b",f.callServer,void 0,f.findSourceMapURL,"syncKeylessConfigAction")}};
@@ -1 +1 @@
1
- "use strict";exports.id=9455,exports.ids=[9455],exports.modules={9455:(a,b,c)=>{c.r(b),c.d(b,{KeylessCreatorOrReader:()=>h});var d=c(67994),e=c(71277),f=c.n(e),g=c(16399);let h=a=>{var b;let{children:c}=a,h=(null==(b=(0,d.useSelectedLayoutSegments)()[0])?void 0:b.startsWith("/_not-found"))||!1,[i,j]=f().useActionState(g.a,null);return((0,e.useEffect)(()=>{h||f().startTransition(()=>{j()})},[h]),f().isValidElement(c))?f().cloneElement(c,{key:null==i?void 0:i.publishableKey,publishableKey:null==i?void 0:i.publishableKey,__internal_keyless_claimKeylessApplicationUrl:null==i?void 0:i.claimUrl,__internal_keyless_copyInstanceKeysUrl:null==i?void 0:i.apiKeysUrl,__internal_bypassMissingPublishableKey:!0}):c}},16399:(a,b,c)=>{c.d(b,{a:()=>e});var d=c(85660);let e=(0,d.createServerReference)("00fed051d4f145122790bda1c80f9927e4c7dbb412",d.callServer,void 0,d.findSourceMapURL,"createOrReadKeylessAction")}};
1
+ "use strict";exports.id=9455,exports.ids=[9455],exports.modules={9455:(a,b,c)=>{c.r(b),c.d(b,{KeylessCreatorOrReader:()=>h});var d=c(67994),e=c(71277),f=c.n(e),g=c(19349);let h=a=>{var b;let{children:c}=a,h=(null==(b=(0,d.useSelectedLayoutSegments)()[0])?void 0:b.startsWith("/_not-found"))||!1,[i,j]=f().useActionState(g.a,null);return((0,e.useEffect)(()=>{h||f().startTransition(()=>{j()})},[h]),f().isValidElement(c))?f().cloneElement(c,{key:null==i?void 0:i.publishableKey,publishableKey:null==i?void 0:i.publishableKey,__internal_keyless_claimKeylessApplicationUrl:null==i?void 0:i.claimUrl,__internal_keyless_copyInstanceKeysUrl:null==i?void 0:i.apiKeysUrl,__internal_bypassMissingPublishableKey:!0}):c}},19349:(a,b,c)=>{c.d(b,{a:()=>e});var d=c(85660);let e=(0,d.createServerReference)("0039aeb4d339adb23250ee5f1bd66c488a84e612f0",d.callServer,void 0,d.findSourceMapURL,"createOrReadKeylessAction")}};
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/PWDnetuxPxtH-yxFZlb7m/_buildManifest.js","static/PWDnetuxPxtH-yxFZlb7m/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-9c22de248dd68981.js","static/chunks/87c73c54-014124adcece3495.js","static/chunks/1968-281077ad765d1294.js","static/chunks/main-app-d6167a36ed763f15.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/YizOdw4hydXardZ1w8CtH/_buildManifest.js","static/YizOdw4hydXardZ1w8CtH/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-ef4988b228495036.js","static/chunks/87c73c54-014124adcece3495.js","static/chunks/1968-281077ad765d1294.js","static/chunks/main-app-d6167a36ed763f15.js"],rootMainFilesTree:{},pages:{"/_app":[]}};