conductor-oss 0.26.1 → 0.26.3

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 (104) 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 +4 -4
  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 +5 -5
  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/page.js +2 -2
  23. package/web/.next/standalone/packages/web/.next/server/app/page.js.nft.json +1 -1
  24. package/web/.next/standalone/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
  25. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js +1 -1
  26. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
  27. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  28. package/web/.next/standalone/packages/web/.next/server/app/settings/bridge/page.js +1 -1
  29. package/web/.next/standalone/packages/web/.next/server/app/settings/bridge/page.js.nft.json +1 -1
  30. package/web/.next/standalone/packages/web/.next/server/app/settings/bridge/page_client-reference-manifest.js +1 -1
  31. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js +1 -1
  32. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
  33. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
  34. package/web/.next/standalone/packages/web/.next/server/app/sign-in/hosted/page.js +1 -1
  35. package/web/.next/standalone/packages/web/.next/server/app/sign-in/hosted/page.js.nft.json +1 -1
  36. package/web/.next/standalone/packages/web/.next/server/app/sign-in/hosted/page_client-reference-manifest.js +1 -1
  37. package/web/.next/standalone/packages/web/.next/server/app/sign-in/sso-callback/page.js +1 -1
  38. package/web/.next/standalone/packages/web/.next/server/app/sign-in/sso-callback/page.js.nft.json +1 -1
  39. package/web/.next/standalone/packages/web/.next/server/app/sign-in/sso-callback/page_client-reference-manifest.js +1 -1
  40. package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js +1 -1
  41. package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js.nft.json +1 -1
  42. package/web/.next/standalone/packages/web/.next/server/app/unlock/page_client-reference-manifest.js +1 -1
  43. package/web/.next/standalone/packages/web/.next/server/app-paths-manifest.json +4 -4
  44. package/web/.next/standalone/packages/web/.next/server/chunks/3785.js +1 -0
  45. package/web/.next/standalone/packages/web/.next/server/chunks/3947.js +1 -1
  46. package/web/.next/standalone/packages/web/.next/server/chunks/5164.js +3 -3
  47. package/web/.next/standalone/packages/web/.next/server/chunks/5295.js +2 -2
  48. package/web/.next/standalone/packages/web/.next/server/chunks/5538.js +1 -1
  49. package/web/.next/standalone/packages/web/.next/server/chunks/6054.js +1 -1
  50. package/web/.next/standalone/packages/web/.next/server/chunks/7517.js +1 -0
  51. package/web/.next/standalone/packages/web/.next/server/chunks/9455.js +1 -1
  52. package/web/.next/standalone/packages/web/.next/server/middleware-build-manifest.js +1 -1
  53. package/web/.next/standalone/packages/web/.next/server/middleware-react-loadable-manifest.js +1 -1
  54. package/web/.next/standalone/packages/web/.next/server/pages/500.html +1 -1
  55. package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.js +1 -1
  56. package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.json +1 -1
  57. package/web/.next/standalone/packages/web/.next/static/chunks/1665-3304dc3ed2c2954d.js +2 -0
  58. package/web/.next/standalone/packages/web/.next/static/chunks/1679-53e3e1cfd3946974.js +1 -0
  59. package/web/.next/standalone/packages/web/.next/static/chunks/4443.6f2ac9dd6bcd1a0d.js +1 -0
  60. package/web/.next/standalone/packages/web/.next/static/chunks/474.e2261e8fe56e5d2b.js +1 -0
  61. package/web/.next/standalone/packages/web/.next/static/chunks/6370.78506ef2e7e20783.js +1 -0
  62. package/web/.next/{static/chunks/7220-282a3657ce238e14.js → standalone/packages/web/.next/static/chunks/7220-2227a00d709e6a2c.js} +1 -1
  63. package/web/.next/{static/chunks/9450-f02dffa3b1feb3fd.js → standalone/packages/web/.next/static/chunks/9450-296374d8c386d1aa.js} +1 -1
  64. package/web/.next/standalone/packages/web/.next/static/chunks/app/bridge/connect/page-275fc646fd4987e9.js +1 -0
  65. package/web/.next/standalone/packages/web/.next/static/chunks/app/layout-5f47b2135c9f8461.js +1 -0
  66. package/web/.next/standalone/packages/web/.next/static/chunks/app/page-1ac1cc5459a770b6.js +1 -0
  67. package/web/.next/standalone/packages/web/.next/static/chunks/app/settings/bridge/page-4dfc9835f8642e46.js +1 -0
  68. package/web/.next/{static/chunks/webpack-dcd19a83d0738560.js → standalone/packages/web/.next/static/chunks/webpack-d00800ad87c9e912.js} +1 -1
  69. package/web/.next/static/chunks/1665-3304dc3ed2c2954d.js +2 -0
  70. package/web/.next/static/chunks/1679-53e3e1cfd3946974.js +1 -0
  71. package/web/.next/static/chunks/4443.6f2ac9dd6bcd1a0d.js +1 -0
  72. package/web/.next/static/chunks/474.e2261e8fe56e5d2b.js +1 -0
  73. package/web/.next/static/chunks/6370.78506ef2e7e20783.js +1 -0
  74. package/web/.next/{standalone/packages/web/.next/static/chunks/7220-282a3657ce238e14.js → static/chunks/7220-2227a00d709e6a2c.js} +1 -1
  75. package/web/.next/{standalone/packages/web/.next/static/chunks/9450-f02dffa3b1feb3fd.js → static/chunks/9450-296374d8c386d1aa.js} +1 -1
  76. package/web/.next/static/chunks/app/bridge/connect/page-275fc646fd4987e9.js +1 -0
  77. package/web/.next/static/chunks/app/layout-5f47b2135c9f8461.js +1 -0
  78. package/web/.next/static/chunks/app/page-1ac1cc5459a770b6.js +1 -0
  79. package/web/.next/static/chunks/app/settings/bridge/page-4dfc9835f8642e46.js +1 -0
  80. package/web/.next/{standalone/packages/web/.next/static/chunks/webpack-dcd19a83d0738560.js → static/chunks/webpack-d00800ad87c9e912.js} +1 -1
  81. package/web/.next/standalone/packages/web/.next/server/chunks/3416.js +0 -1
  82. package/web/.next/standalone/packages/web/.next/server/chunks/5867.js +0 -1
  83. package/web/.next/standalone/packages/web/.next/static/chunks/1474.54d5770ae832512a.js +0 -1
  84. package/web/.next/standalone/packages/web/.next/static/chunks/1665-2e1a4a370eb532dd.js +0 -2
  85. package/web/.next/standalone/packages/web/.next/static/chunks/1679-517f9d8b8b973bcb.js +0 -1
  86. package/web/.next/standalone/packages/web/.next/static/chunks/4443.c4a0a422bd6367b8.js +0 -1
  87. package/web/.next/standalone/packages/web/.next/static/chunks/474.5c65338e98fea7c5.js +0 -1
  88. package/web/.next/standalone/packages/web/.next/static/chunks/app/bridge/connect/page-71ae2992e5244ace.js +0 -1
  89. package/web/.next/standalone/packages/web/.next/static/chunks/app/layout-e147ccb08143c106.js +0 -1
  90. package/web/.next/standalone/packages/web/.next/static/chunks/app/page-3db8d98e56ab346c.js +0 -1
  91. package/web/.next/standalone/packages/web/.next/static/chunks/app/settings/bridge/page-0c2bacf3f3816e04.js +0 -1
  92. package/web/.next/static/chunks/1474.54d5770ae832512a.js +0 -1
  93. package/web/.next/static/chunks/1665-2e1a4a370eb532dd.js +0 -2
  94. package/web/.next/static/chunks/1679-517f9d8b8b973bcb.js +0 -1
  95. package/web/.next/static/chunks/4443.c4a0a422bd6367b8.js +0 -1
  96. package/web/.next/static/chunks/474.5c65338e98fea7c5.js +0 -1
  97. package/web/.next/static/chunks/app/bridge/connect/page-71ae2992e5244ace.js +0 -1
  98. package/web/.next/static/chunks/app/layout-e147ccb08143c106.js +0 -1
  99. package/web/.next/static/chunks/app/page-3db8d98e56ab346c.js +0 -1
  100. package/web/.next/static/chunks/app/settings/bridge/page-0c2bacf3f3816e04.js +0 -1
  101. /package/web/.next/standalone/packages/web/.next/static/{0QakOdvUSk6gC9D_igOOe → 1DoUM34xtyLdDqxmh9zXb}/_buildManifest.js +0 -0
  102. /package/web/.next/standalone/packages/web/.next/static/{0QakOdvUSk6gC9D_igOOe → 1DoUM34xtyLdDqxmh9zXb}/_ssgManifest.js +0 -0
  103. /package/web/.next/static/{0QakOdvUSk6gC9D_igOOe → 1DoUM34xtyLdDqxmh9zXb}/_buildManifest.js +0 -0
  104. /package/web/.next/static/{0QakOdvUSk6gC9D_igOOe → 1DoUM34xtyLdDqxmh9zXb}/_ssgManifest.js +0 -0
@@ -1,2 +1,2 @@
1
- "use strict";exports.id=5295,exports.ids=[5295],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"},5295:(a,b,c)=>{c.d(b,{J:()=>x});var d=c(92692),e=c(71277),f=c(140),g=c(58599),h=c.n(g),i=c(67994),j=c(86263),k=c(64583),l=c(3216),m=c(32165),n=c(75185),o=c(42765),p=(c(60361),c(95528)),q=c(48980),r=c(93544),s=c(94297),t=c(81461),u=c(69125);function v({connected:a,className:b,title:c,suffix:e}){return(0,d.jsxs)("span",{className:(0,r.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,r.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 w({className:a}){let b;(0,i.useRouter)(),(0,i.usePathname)();let c=(0,i.useSearchParams)(),[g,x]=(0,e.useState)([]),[y,z]=(0,e.useState)(!0),[A,B]=(0,e.useState)(null),[C,D]=(0,e.useState)(null),[E,F]=(0,e.useState)({deviceId:null,phase:"idle",message:null}),[G,H]=(0,e.useState)({deviceId:null,kind:null,status:"idle",message:null});(0,e.useRef)(new Set);let I=(0,e.useCallback)(async a=>{a&&z(!0);try{let a=await fetch("/api/bridge/devices",{cache:"no-store"}),b=await a.json().catch(()=>null);if(!a.ok)throw Error(b?.error??`Failed to load bridge devices (${a.status})`);x((0,u.o)(b?.devices)),B(null)}catch(a){B(a instanceof Error?a.message:"Failed to load bridge devices.")}finally{z(!1)}},[]),J=g.filter(a=>a.connected),K=c.get("bridge")?.trim()||null;b=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),K&&g.find(a=>a.device_id===K),C&&g.find(a=>a.device_id===C);let L=J.length>0,M=A??(L?`${J.length} bridge${1===J.length?"":"s"} online`:g.length>0?"No paired bridges are online":"No paired bridges yet"),N=(0,e.useCallback)(async a=>{H({deviceId:a.device_id,kind:"restart",status:"running",message:`Restarting the bridge service on ${a.device_name}.`});try{let b=await (0,s.b)(a.device_id);H({deviceId:a.device_id,kind:"restart",status:"completed",message:b}),window.setTimeout(()=>{I(!1)},2e3)}catch(b){H({deviceId:a.device_id,kind:"restart",status:"failed",message:b instanceof Error?b.message:`Failed to restart ${a.device_name}.`})}},[I]),O=(0,e.useCallback)(async a=>{H({deviceId:a.device_id,kind:"repair",status:"running",message:`Reinstalling the bridge service on ${a.device_name}.`});try{let b=(0,t.pj)(window.location.origin),c=await (0,s.E)(a.device_id,b);H({deviceId:a.device_id,kind:"repair",status:"completed",message:c}),window.setTimeout(()=>{I(!1)},2e3)}catch(b){H({deviceId:a.device_id,kind:"repair",status:"failed",message:b instanceof Error?b.message:`Failed to repair ${a.device_name}.`})}},[I]),P=(0,e.useCallback)(async a=>{await (0,p.jV)(a,F),window.setTimeout(()=>{I(!1)},2e3)},[I]);return(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)(v,{connected:L,className:a,title:M,suffix:(0,d.jsx)(j.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:L?`${J.length} device${1===J.length?"":"s"} online`:y?"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."}),A?(0,d.jsx)("div",{className:"mt-2 text-[12px] leading-5 text-[var(--vk-red)]",children:A}):null,E.message?(0,d.jsx)("div",{className:(0,r.cn)("mt-2 text-[12px] leading-5","failed"===E.phase?"text-[var(--vk-red)]":"skipped"===E.phase?"text-[var(--vk-text-muted)]":"text-[var(--vk-text-faint)]"),children:E.message}):null]}),(0,d.jsx)("div",{className:"mt-2 max-h-[280px] overflow-y-auto",children:g.length>0?g.map(a=>{let b=(0,p.xv)(E,a.device_id),c="running"===G.status&&G.deviceId===a.device_id,e=c&&"repair"===G.kind,f=c&&"restart"===G.kind;return G.deviceId===a.device_id&&(0,q.Az)(G.message)||E.deviceId===a.device_id&&(0,q.Az)(E.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,d.jsxs)("div",{className:"mt-1 text-[11px] text-[var(--vk-text-muted)]",children:["Relay: ",a.last_status?.hostname??a.hostname]}),E.message&&E.deviceId===a.device_id?(0,d.jsx)("div",{className:(0,r.cn)("mt-1 text-[11px] leading-5","failed"===E.phase?"text-[var(--vk-red)]":"skipped"===E.phase?"text-[var(--vk-text-muted)]":"text-[var(--vk-text-faint)]"),children:E.message}):null,G.message&&G.deviceId===a.device_id?(0,d.jsx)("div",{className:(0,r.cn)("mt-1 text-[11px] leading-5","failed"===G.status?"text-[var(--vk-red)]":"completed"===G.status?"text-[var(--vk-green)]":"text-[var(--vk-text-faint)]"),children:G.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:()=>{O(a)},children:[e?(0,d.jsx)(k.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(l.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:()=>{P(a)},children:[b?(0,d.jsx)(k.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(m.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:()=>{N(a)},children:[f?(0,d.jsx)(k.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(n.A,{className:"h-3.5 w-3.5"}),"Restart service"]})]}):null]}),(0,d.jsx)(v,{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:y?"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:"/bridge/connect",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 bridge connection"}),(0,d.jsx)(o.A,{className:"h-4 w-4 text-[var(--vk-text-muted)]"})]})})]})})]})}function x({connected:a,className:b,title:c}={}){return"boolean"==typeof a?(0,d.jsx)(v,{connected:a,className:b,title:c}):(0,d.jsx)(w,{className:b})}},19954:(a,b,c)=>{c.d(b,{C0:()=>e,DW:()=>f});let d="bridge:";function e(a){let b=a?.trim();return b&&b.length>0?b:null}function f(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}},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,dashboardUrl:c,installScriptUrl:f,relayUrl:p,className:q}){let[r,s]=(0,e.useState)(!1),t=(0,e.useMemo)(()=>(0,n.$y)(f,c,p),[c,f,p]),u=(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",q),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?(s(!1),navigator.clipboard.writeText(t).then(()=>{s(!0)}).catch(()=>{s(!1)})):s(!1)},children:[r?(0,d.jsx)(h.A,{className:"h-4 w-4"}):(0,d.jsx)(i.A,{className:"h-4 w-4"}),r?"Repair command copied":"Copy repair command"]}),(0,d.jsx)(k.$,{asChild:!0,variant:"outline",size:"sm",children:(0,d.jsxs)(g(),{href:u,children:[(0,d.jsx)(j.A,{className:"h-4 w-4"}),"Open repair steps"]})})]})]})}},69125:(a,b,c)=>{function d(a,b){return"string"==typeof a&&a.trim().length>0?a.trim():b}function e(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}:null}}):[]}c.d(b,{o:()=>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 new URL("/bridge/install.sh",a).toString()}function g(a){return`/bridge/connect?device=${encodeURIComponent(a)}#bridge-setup`}function h(a){return`curl -fsSL ${d(a)} | sh`}function i(a,b,c){let d=["npx","--yes","conductor-oss@latest","bridge","setup","--dashboard-url",b];return c?.trim()&&d.push("--relay-url",c.trim()),e(d)}function j(a,b){let c=["conductor-bridge","connect","--dashboard-url",a];return b?.trim()&&c.push("--relay-url",b.trim()),e(c)}function k(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:()=>i,G7:()=>h,hI:()=>j,kw:()=>g,pj:()=>f,zd:()=>k})},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 requested. This laptop should reconnect shortly."}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:()=>h,Tr:()=>k,jV:()=>l,m7:()=>j,xv:()=>f});var d=c(46818),e=c(48980);function f(a,b){return a.deviceId===b&&("checking"===a.phase||"updating"===a.phase||"restarting"===a.phase)}function g(a,b){return b.jobMessage??`Installing Conductor ${b.latestVersion??"latest"} on ${a.device_name}.`}function h(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.":"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."}async function i(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 j(a){}function k(){return null}async function l(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 i(a.device_id,{force:!0});if(b.restarting)return void c("restarting",b.jobMessage??`Restart requested on ${a.device_name}. This page will reconnect once the bridge runtime is back online.`);if("running"===b.jobStatus)c("updating",g(a,b));else{if(!b.updateAvailable||!b.enabled||!b.canAutoUpdate)return void c(b.enabled&&b.canAutoUpdate?"completed":"skipped",h(b));b=await i(a.device_id,{method:"POST"}),c("updating",g(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 i(a.device_id)).restarting)return void c("restarting",b.jobMessage??`Restart requested on ${a.device_name}. This page will reconnect once the bridge runtime is back online.`);c("updating",g(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 i(a.device_id,{method:"POST",body:{action:"restart"}}),c("restarting",b.jobMessage??`Restart requested 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}.`)}}}};
1
+ "use strict";exports.id=5295,exports.ids=[5295],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"},5295:(a,b,c)=>{c.d(b,{J:()=>x});var d=c(92692),e=c(71277),f=c(140),g=c(58599),h=c.n(g),i=c(67994),j=c(86263),k=c(64583),l=c(3216),m=c(32165),n=c(75185),o=c(42765),p=(c(60361),c(95528)),q=c(48980),r=c(93544),s=c(94297),t=c(81461),u=c(69125);function v({connected:a,className:b,title:c,suffix:e}){return(0,d.jsxs)("span",{className:(0,r.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,r.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 w({className:a}){let b;(0,i.useRouter)(),(0,i.usePathname)();let c=(0,i.useSearchParams)(),[g,x]=(0,e.useState)([]),[y,z]=(0,e.useState)(!0),[A,B]=(0,e.useState)(null),[C,D]=(0,e.useState)(null),[E,F]=(0,e.useState)({deviceId:null,phase:"idle",message:null}),[G,H]=(0,e.useState)({deviceId:null,kind:null,status:"idle",message:null});(0,e.useRef)(new Set);let I=(0,e.useCallback)(async a=>{a&&z(!0);try{let a=await fetch("/api/bridge/devices",{cache:"no-store"}),b=await a.json().catch(()=>null);if(!a.ok)throw Error(b?.error??`Failed to load bridge devices (${a.status})`);x((0,u.oH)(b?.devices)),B(null)}catch(a){B(a instanceof Error?a.message:"Failed to load bridge devices.")}finally{z(!1)}},[]),J=g.filter(a=>a.connected),K=c.get("bridge")?.trim()||null;b=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),K&&g.find(a=>a.device_id===K),C&&g.find(a=>a.device_id===C);let L=J.length>0,M=A??(L?`${J.length} bridge${1===J.length?"":"s"} online`:g.length>0?"No paired bridges are online":"No paired bridges yet"),N=(0,e.useCallback)(async a=>{H({deviceId:a.device_id,kind:"restart",status:"running",message:`Restarting the bridge service on ${a.device_name}.`});try{let b=await (0,s.b)(a.device_id);H({deviceId:a.device_id,kind:"restart",status:"completed",message:b}),window.setTimeout(()=>{I(!1)},2e3)}catch(b){H({deviceId:a.device_id,kind:"restart",status:"failed",message:b instanceof Error?b.message:`Failed to restart ${a.device_name}.`})}},[I]),O=(0,e.useCallback)(async a=>{H({deviceId:a.device_id,kind:"repair",status:"running",message:`Reinstalling the bridge service on ${a.device_name}.`});try{let b=(0,t.pj)(window.location.origin),c=await (0,s.E)(a.device_id,b);H({deviceId:a.device_id,kind:"repair",status:"completed",message:c}),window.setTimeout(()=>{I(!1)},2e3)}catch(b){H({deviceId:a.device_id,kind:"repair",status:"failed",message:b instanceof Error?b.message:`Failed to repair ${a.device_name}.`})}},[I]),P=(0,e.useCallback)(async a=>{await (0,p.jV)(a,F),window.setTimeout(()=>{I(!1)},2e3)},[I]);return(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)(v,{connected:L,className:a,title:M,suffix:(0,d.jsx)(j.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:L?`${J.length} device${1===J.length?"":"s"} online`:y?"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."}),A?(0,d.jsx)("div",{className:"mt-2 text-[12px] leading-5 text-[var(--vk-red)]",children:A}):null,E.message?(0,d.jsx)("div",{className:(0,r.cn)("mt-2 text-[12px] leading-5","failed"===E.phase?"text-[var(--vk-red)]":"skipped"===E.phase?"text-[var(--vk-text-muted)]":"text-[var(--vk-text-faint)]"),children:E.message}):null]}),(0,d.jsx)("div",{className:"mt-2 max-h-[280px] overflow-y-auto",children:g.length>0?g.map(a=>{let b=(0,p.xv)(E,a.device_id),c="running"===G.status&&G.deviceId===a.device_id,e=c&&"repair"===G.kind,f=c&&"restart"===G.kind;return G.deviceId===a.device_id&&(0,q.Az)(G.message)||E.deviceId===a.device_id&&(0,q.Az)(E.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,u.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,u.wj)(a.last_status?.version)]}),E.message&&E.deviceId===a.device_id?(0,d.jsx)("div",{className:(0,r.cn)("mt-1 text-[11px] leading-5","failed"===E.phase?"text-[var(--vk-red)]":"skipped"===E.phase?"text-[var(--vk-text-muted)]":"text-[var(--vk-text-faint)]"),children:E.message}):null,G.message&&G.deviceId===a.device_id?(0,d.jsx)("div",{className:(0,r.cn)("mt-1 text-[11px] leading-5","failed"===G.status?"text-[var(--vk-red)]":"completed"===G.status?"text-[var(--vk-green)]":"text-[var(--vk-text-faint)]"),children:G.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:()=>{O(a)},children:[e?(0,d.jsx)(k.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(l.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:()=>{P(a)},children:[b?(0,d.jsx)(k.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(m.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:()=>{N(a)},children:[f?(0,d.jsx)(k.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,d.jsx)(n.A,{className:"h-3.5 w-3.5"}),"Restart service"]})]}):null]}),(0,d.jsx)(v,{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:y?"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:"/bridge/connect",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 bridge connection"}),(0,d.jsx)(o.A,{className:"h-4 w-4 text-[var(--vk-text-muted)]"})]})})]})})]})}function x({connected:a,className:b,title:c}={}){return"boolean"==typeof a?(0,d.jsx)(v,{connected:a,className:b,title:c}):(0,d.jsx)(w,{className:b})}},19954:(a,b,c)=>{c.d(b,{C0:()=>e,DW:()=>f});let d="bridge:";function e(a){let b=a?.trim();return b&&b.length>0?b:null}function f(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}},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,dashboardUrl:c,installScriptUrl:f,relayUrl:p,className:q}){let[r,s]=(0,e.useState)(!1),t=(0,e.useMemo)(()=>(0,n.$y)(f,c,p),[c,f,p]),u=(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",q),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?(s(!1),navigator.clipboard.writeText(t).then(()=>{s(!0)}).catch(()=>{s(!1)})):s(!1)},children:[r?(0,d.jsx)(h.A,{className:"h-4 w-4"}):(0,d.jsx)(i.A,{className:"h-4 w-4"}),r?"Repair command copied":"Copy repair command"]}),(0,d.jsx)(k.$,{asChild:!0,variant:"outline",size:"sm",children:(0,d.jsxs)(g(),{href:u,children:[(0,d.jsx)(j.A,{className:"h-4 w-4"}),"Open repair steps"]})})]})]})}},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 new URL("/bridge/install.sh",a).toString()}function g(a){return`/bridge/connect?device=${encodeURIComponent(a)}#bridge-setup`}function h(a){return`curl -fsSL ${d(a)} | sh`}function i(a,b,c){let d=["npx","--yes","conductor-oss@latest","bridge","setup","--dashboard-url",b];return c?.trim()&&d.push("--relay-url",c.trim()),e(d)}function j(a,b){let c=["conductor-bridge","connect","--dashboard-url",a];return b?.trim()&&c.push("--relay-url",b.trim()),e(c)}function k(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:()=>i,G7:()=>h,hI:()=>j,kw:()=>g,pj:()=>f,zd:()=>k})},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 requested. This laptop should reconnect shortly."}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:()=>i,Tr:()=>l,jV:()=>m,m7:()=>k,xv:()=>f});var d=c(46818),e=c(48980);function f(a,b){return a.deviceId===b&&("checking"===a.phase||"updating"===a.phase||"restarting"===a.phase)}function g(a,b){return b.jobMessage??`Installing Conductor ${b.latestVersion??"latest"} on ${a.device_name}.`}function h(a){let b=a.currentVersion?.trim();return b?` (build ${b})`:""}function i(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${h(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${h(a)}.`}async function j(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 k(a){}function l(){return null}async function m(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 j(a.device_id,{force:!0});if(b.restarting)return void c("restarting",b.jobMessage??`Restart requested on ${a.device_name}. This page will reconnect once the bridge runtime is back online.`);if("running"===b.jobStatus)c("updating",g(a,b));else{if(!b.updateAvailable||!b.enabled||!b.canAutoUpdate)return void c(b.enabled&&b.canAutoUpdate?"completed":"skipped",i(b));b=await j(a.device_id,{method:"POST"}),c("updating",g(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 j(a.device_id)).restarting)return void c("restarting",b.jobMessage??`Restart requested on ${a.device_name}. This page will reconnect once the bridge runtime is back online.`);c("updating",g(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 j(a.device_id,{method:"POST",body:{action:"restart"}}),c("restarting",b.jobMessage??`Restart requested 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}.`)}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=5538,exports.ids=[5538],exports.modules={9249:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(37303).A)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},45538:(a,b,c)=>{c.r(b),c.d(b,{WorkspaceSidebarPanel:()=>w});var d=c(92692),e=c(71277),f=c(56192),g=c(9249),h=c(2625),i=c(93544),j=c(89612),k=c(59789);let l=(0,c(37303).A)("archive",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]]);var m=c(44462);let n=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"];function o(a){let b=a.metadata.worktree?.trim()??"";return b&&b.replace(/\\/g,"/").replace(/\/+$/,"").includes("/worktrees/")?"worktree":"local"}function p(a){let b=a.branch?.trim();if(b)return b;let c=a.summary?.trim()||a.metadata.summary?.trim();return c||(a.status?.trim()?a.status.replace(/[_-]+/g," "):a.id.slice(0,8))}function q(){let[a,b]=(0,e.useState)(0);return(0,d.jsx)("span",{"aria-hidden":"true",className:"inline-block select-none font-mono text-[18px] leading-none text-[var(--vk-text-strong)]",children:n[a]})}function r({running:a}){return a?(0,d.jsx)("span",{className:"mt-0.5 inline-flex h-5 w-5 shrink-0 items-center justify-center",children:(0,d.jsx)(q,{})}):null}function s({additions:a,deletions:b,isSelected:c}){return(0,d.jsx)("span",{className:(0,i.cn)("inline-flex shrink-0 items-center rounded-[10px] px-3 py-1.5 font-mono text-[12px] leading-none tabular-nums",c?"bg-[rgba(255,255,255,0.1)]":"bg-[rgba(255,255,255,0.06)]"),children:(0,d.jsxs)("span",{className:"inline-flex items-center gap-3",children:[(0,d.jsxs)("span",{className:"text-[#18c58f]",children:["+",a]}),(0,d.jsxs)("span",{className:"text-[#f26d6d]",children:["−",b]})]})})}function t(a,b,c){a.stopPropagation(),a.preventDefault(),c(b,{tab:"diff"})}function u({sessions:a,selectedId:b,onSelect:c,onArchive:f,onCreateWorkspace:g,showHeader:h=!0}){let[n,q]=(0,e.useState)(""),[v,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(null),z=(0,e.useMemo)(()=>{let b=a.filter(a=>"archived"!==a.status);if(!n.trim())return b;let c=n.toLowerCase();return b.filter(a=>{let b=a.summary??"",d=a.branch??"",e=a.metadata.agent??"",f=o(a),g=p(a);return a.id.toLowerCase().includes(c)||a.projectId.toLowerCase().includes(c)||b.toLowerCase().includes(c)||d.toLowerCase().includes(c)||e.toLowerCase().includes(c)||f.toLowerCase().includes(c)||g.toLowerCase().includes(c)})},[n,a]),A=async(a,b)=>{if(a.stopPropagation(),a.preventDefault(),f&&v!==b){w(b);try{await f(b)}catch(a){console.error("Failed to archive session",a),y(b),window.setTimeout(()=>y(null),3e3)}finally{w(a=>a===b?null:a)}}},B=(0,e.useMemo)(()=>[...z].sort((a,b)=>new Date(b.lastActivityAt).getTime()-new Date(a.lastActivityAt).getTime()),[z]);return(0,d.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[h&&(0,d.jsxs)("div",{className:"flex h-[33px] items-center gap-1 px-2",children:[(0,d.jsx)("p",{className:"text-[16px] text-[var(--vk-text-normal)]",children:"Workspaces"}),g&&(0,d.jsx)("button",{type:"button",onClick:g,className:"ml-auto inline-flex h-5 w-5 items-center justify-center rounded-[3px] text-[var(--vk-orange)] hover:bg-[var(--vk-bg-hover)] lg:hidden","aria-label":"New workspace",children:(0,d.jsx)("span",{className:"text-[14px]",children:"+"})})]}),(0,d.jsx)("div",{className:(0,i.cn)("flex h-[38px] items-center px-2 pb-1.5",!h&&"pt-1.5"),children:(0,d.jsxs)("label",{className:"flex h-[38px] flex-1 items-center rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2 sm:h-[30px]",children:[(0,d.jsx)(k.A,{className:"h-3.5 w-3.5 text-[var(--vk-text-muted)]"}),(0,d.jsx)("input",{value:n,onChange:a=>q(a.target.value),placeholder:"Search...",className:"ml-1.5 w-full bg-transparent text-[14px] text-[var(--vk-text-normal)] outline-none placeholder:text-[var(--vk-text-muted)]"})]})}),(0,d.jsx)("div",{className:"flex-1 overflow-y-auto px-2 pb-2",children:0===B.length?(0,d.jsx)("p",{className:"px-2 py-2 text-[14px] text-[var(--vk-text-muted)]",children:"No sessions"}):(0,d.jsx)("div",{className:"space-y-2",children:B.map(a=>{let e=(0,j.n)(a),g=function(a){for(let b of[a.metadata.lastStderr,a.metadata.summary,a.summary]){if(!b)continue;let a=b.match(/(\d+)\s+insertions?\(\+\),\s+(\d+)\s+deletions?\(-\)/i);if(!a)continue;let c=Number.parseInt(a[1]??"0",10),d=Number.parseInt(a[2]??"0",10);if(Number.isFinite(c)&&Number.isFinite(d))return{additions:c,deletions:d}}return null}(a),h=function(a,b){let c=`${a.summary??""} ${a.metadata.summary??""}`.toLowerCase();if("killed"===a.status||c.includes("interrupted"))return{label:"Interrupted",className:"text-[var(--vk-orange)]"};switch(b){case"merge":return{label:"Ready",className:"text-[var(--vk-green)]"};case"respond":return{label:"Needs input",className:"text-[var(--vk-red)]"};case"review":return{label:"Review",className:"text-[var(--vk-orange)]"};case"working":return{label:"Running",className:"text-[#4e87f3]"};case"done":return{label:"Done",className:"text-[var(--vk-text-muted)]"};default:return{label:"Queued",className:"text-[var(--vk-text-muted)]"}}}(a,e),k=a.metadata.agent?.trim()||null,n=a.id===b,q="waiting_input"!==a.activity&&"blocked"!==a.activity&&("spawning"===a.status||"working"===a.status),u=v===a.id,w=x===a.id;return(0,d.jsxs)("div",{onClick:()=>c(a.id),onKeyDown:b=>{var d;return d=a.id,void(("Enter"===b.key||" "===b.key)&&(b.preventDefault(),c(d)))},role:"button",tabIndex:0,className:(0,i.cn)("group flex w-full items-start gap-3 rounded-[8px] border px-3 py-3 text-left transition-colors","[content-visibility:auto] [contain-intrinsic-size:92px]",n?"border-[rgba(234,122,42,0.28)] bg-[rgba(255,255,255,0.08)]":"border-[var(--vk-border)] bg-[rgba(255,255,255,0.02)] hover:bg-[var(--vk-bg-hover)]"),children:[(0,d.jsx)(r,{running:q}),(0,d.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,d.jsxs)("span",{className:"flex min-w-0 items-start gap-2",children:[(0,d.jsxs)("span",{className:"min-w-0 flex flex-1 items-center gap-2",children:[k?(0,d.jsx)("span",{className:"inline-flex h-5 w-5 shrink-0 items-center justify-center",title:k,"aria-label":`${k} agent`,children:(0,d.jsx)(m.N,{seed:{label:k},className:"h-4 w-4"})}):null,(0,d.jsx)("span",{className:"min-w-0 truncate text-[14px] font-medium text-[var(--vk-text-strong)]",children:o(a)})]}),g?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("span",{className:"hidden shrink-0 sm:block",children:(0,d.jsx)("button",{type:"button",onClick:b=>t(b,a.id,c),onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&t(b,a.id,c)},className:"rounded-[10px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--vk-orange)]","aria-label":`Open diff for session ${a.id}`,title:"Open diff tab",children:(0,d.jsx)(s,{additions:g.additions,deletions:g.deletions,isSelected:n})})}),(0,d.jsx)("span",{className:"shrink-0 rounded-[8px] bg-[rgba(255,255,255,0.06)] px-2.5 py-1 text-[11px] font-medium sm:hidden",children:(0,d.jsx)("span",{className:h.className,children:h.label})})]}):(0,d.jsx)("span",{className:"shrink-0 rounded-[8px] bg-[rgba(255,255,255,0.06)] px-2.5 py-1 text-[11px] font-medium",children:(0,d.jsx)("span",{className:h.className,children:h.label})})]}),(0,d.jsx)("span",{className:"mt-1 block truncate text-[12px] text-[var(--vk-text-muted)]",children:p(a)})]}),f?(0,d.jsx)("button",{type:"button",onClick:b=>void A(b,a.id),disabled:u,className:(0,i.cn)("mt-0.5 inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-[6px] border border-[var(--vk-border)] text-[var(--vk-text-muted)] transition sm:h-7 sm:w-7","opacity-70 group-hover:opacity-100 focus-visible:opacity-100","hover:border-[var(--vk-border)] hover:bg-[var(--vk-bg-hover)] hover:text-[var(--vk-text-normal)]",u&&"cursor-wait opacity-100"),"aria-label":`Archive session ${a.id}`,title:w?"Archive failed":"Archive session",children:(0,d.jsx)(l,{className:(0,i.cn)("h-3.5 w-3.5",w&&"text-red-400")})}):null]},a.id)})})})]})}var v=c(1071);let w=(0,e.memo)(function({projects:a,selectedProjectId:b,onSelectProject:c,onUnlinkProject:k,sessions:l,selectedSessionId:m,onSelectSession:n,onArchiveSession:o,onCreateWorkspace:p}){let[q,r]=(0,e.useState)(null),[s,t]=(0,e.useState)(null),[w,x]=(0,e.useState)(null),y=(0,e.useMemo)(()=>{let a=new Map;for(let b of l){if("archived"===b.status)continue;let c=a.get(b.projectId)??{total:0,active:0};c.total+=1,"done"!==(0,j.n)(b)&&(c.active+=1),a.set(b.projectId,c)}return a},[l]),z=(0,e.useMemo)(()=>a.find(a=>a.id===s)??null,[s,a]);async function A(){if(k&&s){r(s),x(null);try{await k(s),t(null)}catch(a){x(a instanceof Error?a.message:"Failed to unlink project.")}finally{r(null)}}}return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col bg-[var(--vk-bg-panel)]",children:[(0,d.jsxs)("section",{className:"border-b border-[var(--vk-border)] px-4 py-4",children:[(0,d.jsx)("div",{className:"flex justify-center text-center",children:(0,d.jsx)("p",{className:"font-brand-header text-[22px] font-bold leading-none uppercase tracking-[0.32em] text-[var(--vk-text-strong)]",children:"Conductor"})}),(0,d.jsxs)("button",{type:"button",onClick:p,className:"mt-3 inline-flex h-11 w-full items-center justify-center gap-1 rounded-[6px] border border-[var(--vk-border)] px-2 text-[12px] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)] sm:h-8","aria-label":"Add workspace",children:[(0,d.jsx)(g.A,{className:"h-3.5 w-3.5"}),(0,d.jsx)("span",{children:"Add Workspace"})]})]}),(0,d.jsxs)("section",{className:"border-b border-[var(--vk-border)] pb-2 pt-1.5",children:[(0,d.jsx)("div",{className:"flex h-[28px] items-center px-3",children:(0,d.jsx)("p",{className:"text-[11px] uppercase tracking-[0.08em] text-[var(--vk-text-muted)]",children:"Projects"})}),(0,d.jsxs)("div",{className:"max-h-[260px] overflow-y-auto px-2",children:[(0,d.jsxs)("button",{type:"button",onClick:()=>c(null),className:(0,i.cn)("mb-1.5 flex w-full items-center gap-3 rounded-[6px] px-3 py-2.5 text-left text-[14px] leading-[21px]",null===b?"bg-[var(--vk-bg-hover)] text-[var(--vk-text-normal)]":"text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]"),children:[(0,d.jsx)("span",{className:"h-2.5 w-2.5 rounded-full bg-[var(--vk-text-muted)]"}),(0,d.jsx)("span",{className:"truncate",children:"All projects"}),(0,d.jsx)("span",{className:"ml-auto text-[11px] text-[var(--vk-text-muted)]",children:a.length})]}),a.map(a=>{let e=b===a.id,f=y.get(a.id)??{total:0,active:0},g=q===a.id;return(0,d.jsxs)("div",{className:(0,i.cn)("group relative mb-1.5 flex items-center rounded-[6px]",e?"bg-[var(--vk-bg-hover)]":"hover:bg-[var(--vk-bg-hover)]"),children:[(0,d.jsxs)("button",{type:"button",onClick:()=>c(a.id),className:(0,i.cn)("flex min-w-0 flex-1 items-center gap-3 px-3 py-2.5 text-left text-[14px] leading-[21px]",e?"text-[var(--vk-text-normal)]":"text-[var(--vk-text-muted)]"),children:[(0,d.jsx)("span",{className:"mt-1 h-2.5 w-2.5 shrink-0 rounded-full bg-[#3c83f6]"}),(0,d.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,d.jsx)("span",{className:"block truncate",children:a.id}),a.description?(0,d.jsx)("span",{className:"block truncate text-[11px] text-[var(--vk-text-muted)]",children:a.description}):null]}),(0,d.jsxs)("span",{className:"shrink-0 text-right",children:[(0,d.jsxs)("span",{className:"block text-[11px] text-[var(--vk-text-normal)]",children:[f.active," active"]}),(0,d.jsxs)("span",{className:"block text-[10px] text-[var(--vk-text-muted)]",children:[f.total," total"]})]})]}),k&&(0,d.jsx)("button",{type:"button",disabled:g,onClick:b=>{b.stopPropagation(),x(null),t(a.id)},className:"mr-2 inline-flex shrink-0 items-center justify-center rounded-[4px] p-1 text-[var(--vk-text-muted)] hover:bg-[var(--vk-red)]/10 hover:text-[var(--vk-red)] disabled:opacity-50","aria-label":`Unlink ${a.id}`,title:"Unlink project",children:(0,d.jsx)(h.A,{className:"h-3.5 w-3.5"})})]},a.id)})]})]}),(0,d.jsx)("section",{className:"flex min-h-0 flex-1 flex-col pt-1.5",children:(0,d.jsx)(u,{sessions:l,selectedId:m,onSelect:n,onArchive:o,onCreateWorkspace:p,showHeader:!1})})]}),z&&"u">typeof document?(0,f.createPortal)((0,d.jsx)("div",{className:"fixed inset-0 z-[80] flex items-center justify-center bg-black/60 px-4",onClick:()=>{q||(t(null),x(null))},children:(0,d.jsxs)("div",{className:"surface-card w-full max-w-md rounded-[var(--radius-lg)] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] shadow-[0_28px_90px_rgba(0,0,0,0.55)]",onClick:a=>a.stopPropagation(),role:"dialog","aria-modal":"true","aria-labelledby":"unlink-project-title",children:[(0,d.jsxs)("div",{className:"border-b border-[var(--vk-border)] px-4 py-3",children:[(0,d.jsx)("h2",{id:"unlink-project-title",className:"text-[17px] font-medium text-[var(--vk-text-strong)]",children:"Unlink Project"}),(0,d.jsxs)("p",{className:"mt-1 text-[12px] text-[var(--vk-text-muted)]",children:["Remove ",(0,d.jsx)("span",{className:"font-medium text-[var(--vk-text-normal)]",children:z.id})," from this workspace configuration."]})]}),(0,d.jsxs)("div",{className:"space-y-3 px-4 py-4",children:[(0,d.jsx)("p",{className:"text-[13px] leading-5 text-[var(--vk-text-normal)]",children:"This only removes the project from Conductor. Repository files on disk are not deleted."}),w?(0,d.jsx)("div",{className:"rounded-[var(--radius-md)] border border-[var(--vk-red)]/35 bg-[color:color-mix(in_srgb,var(--vk-red)_12%,transparent)] px-3 py-2 text-[12px] text-[var(--vk-red)]",children:w}):null]}),(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2 border-t border-[var(--vk-border)] px-4 py-3",children:[(0,d.jsx)(v.$,{type:"button",variant:"ghost",onClick:()=>{t(null),x(null)},disabled:null!==q,children:"Cancel"}),(0,d.jsx)(v.$,{type:"button",variant:"danger",onClick:()=>void A(),disabled:null!==q,children:q===z.id?"Unlinking...":"Unlink Project"})]})]})}),document.body):null]})})},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"}}};
1
+ "use strict";exports.id=5538,exports.ids=[5538],exports.modules={9249:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(37303).A)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},45538:(a,b,c)=>{c.r(b),c.d(b,{WorkspaceSidebarPanel:()=>w});var d=c(92692),e=c(71277),f=c(56192),g=c(9249),h=c(2625),i=c(93544),j=c(89612),k=c(59789);let l=(0,c(37303).A)("archive",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]]);var m=c(44462);let n=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"];function o(a){let b=a.metadata.worktree?.trim()??"";return b&&b.replace(/\\/g,"/").replace(/\/+$/,"").includes("/worktrees/")?"worktree":"local"}function p(a){let b=a.branch?.trim();if(b)return b;let c=a.summary?.trim()||a.metadata.summary?.trim();return c||(a.status?.trim()?a.status.replace(/[_-]+/g," "):a.id.slice(0,8))}function q(){let[a,b]=(0,e.useState)(0);return(0,d.jsx)("span",{"aria-hidden":"true",className:"inline-block select-none font-mono text-[18px] leading-none text-[var(--vk-text-strong)]",children:n[a]})}function r({running:a}){return a?(0,d.jsx)("span",{className:"mt-0.5 inline-flex h-5 w-5 shrink-0 items-center justify-center",children:(0,d.jsx)(q,{})}):null}function s({additions:a,deletions:b,isSelected:c}){return(0,d.jsx)("span",{className:(0,i.cn)("inline-flex shrink-0 items-center rounded-[10px] px-3 py-1.5 font-mono text-[12px] leading-none tabular-nums",c?"bg-[rgba(255,255,255,0.1)]":"bg-[rgba(255,255,255,0.06)]"),children:(0,d.jsxs)("span",{className:"inline-flex items-center gap-3",children:[(0,d.jsxs)("span",{className:"text-[#18c58f]",children:["+",a]}),(0,d.jsxs)("span",{className:"text-[#f26d6d]",children:["−",b]})]})})}function t(a,b,c){a.stopPropagation(),a.preventDefault(),c(b,{tab:"diff"})}function u({sessions:a,selectedId:b,onSelect:c,onArchive:f,onCreateWorkspace:g,showHeader:h=!0}){let[n,q]=(0,e.useState)(""),[v,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(null),z=(0,e.useMemo)(()=>{let b=a.filter(a=>"archived"!==a.status);if(!n.trim())return b;let c=n.toLowerCase();return b.filter(a=>{let b=a.summary??"",d=a.branch??"",e=a.metadata.agent??"",f=o(a),g=p(a);return a.id.toLowerCase().includes(c)||a.projectId.toLowerCase().includes(c)||b.toLowerCase().includes(c)||d.toLowerCase().includes(c)||e.toLowerCase().includes(c)||f.toLowerCase().includes(c)||g.toLowerCase().includes(c)})},[n,a]),A=async(a,b)=>{if(a.stopPropagation(),a.preventDefault(),f&&v!==b){w(b);try{await f(b)}catch(a){console.error("Failed to archive session",a),y(b),window.setTimeout(()=>y(null),3e3)}finally{w(a=>a===b?null:a)}}},B=(0,e.useMemo)(()=>[...z].sort((a,b)=>new Date(b.lastActivityAt).getTime()-new Date(a.lastActivityAt).getTime()),[z]);return(0,d.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[h&&(0,d.jsxs)("div",{className:"flex h-[33px] items-center gap-1 px-2",children:[(0,d.jsx)("p",{className:"text-[16px] text-[var(--vk-text-normal)]",children:"Workspaces"}),g&&(0,d.jsx)("button",{type:"button",onClick:g,className:"ml-auto inline-flex h-5 w-5 items-center justify-center rounded-[3px] text-[var(--vk-orange)] hover:bg-[var(--vk-bg-hover)] lg:hidden","aria-label":"New workspace",children:(0,d.jsx)("span",{className:"text-[14px]",children:"+"})})]}),(0,d.jsx)("div",{className:(0,i.cn)("flex h-[38px] items-center px-2 pb-1.5",!h&&"pt-1.5"),children:(0,d.jsxs)("label",{className:"flex h-[38px] flex-1 items-center rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2 sm:h-[30px]",children:[(0,d.jsx)(k.A,{className:"h-3.5 w-3.5 text-[var(--vk-text-muted)]"}),(0,d.jsx)("input",{value:n,onChange:a=>q(a.target.value),placeholder:"Search...",className:"ml-1.5 w-full bg-transparent text-[14px] text-[var(--vk-text-normal)] outline-none placeholder:text-[var(--vk-text-muted)]"})]})}),(0,d.jsx)("div",{className:"flex-1 overflow-y-auto px-2 pb-2",children:0===B.length?(0,d.jsx)("p",{className:"px-2 py-2 text-[14px] text-[var(--vk-text-muted)]",children:"No sessions"}):(0,d.jsx)("div",{className:"space-y-2",children:B.map(a=>{let e=(0,j.n)(a),g=function(a){for(let b of[a.metadata.lastStderr,a.metadata.summary,a.summary]){if(!b)continue;let a=b.match(/(\d+)\s+insertions?\(\+\),\s+(\d+)\s+deletions?\(-\)/i);if(!a)continue;let c=Number.parseInt(a[1]??"0",10),d=Number.parseInt(a[2]??"0",10);if(Number.isFinite(c)&&Number.isFinite(d))return{additions:c,deletions:d}}return null}(a),h=function(a,b){let c=`${a.summary??""} ${a.metadata.summary??""}`.toLowerCase();if("killed"===a.status||c.includes("interrupted"))return{label:"Interrupted",className:"text-[var(--vk-orange)]"};switch(b){case"merge":return{label:"Ready",className:"text-[var(--vk-green)]"};case"respond":return{label:"Needs input",className:"text-[var(--vk-red)]"};case"review":return{label:"Review",className:"text-[var(--vk-orange)]"};case"working":return{label:"Running",className:"text-[#4e87f3]"};case"done":return{label:"Done",className:"text-[var(--vk-text-muted)]"};default:return{label:"Queued",className:"text-[var(--vk-text-muted)]"}}}(a,e),k=a.metadata.agent?.trim()||null,n=a.id===b,q="waiting_input"!==a.activity&&"blocked"!==a.activity&&("spawning"===a.status||"working"===a.status),u=v===a.id,w=x===a.id;return(0,d.jsxs)("div",{onClick:()=>c(a.id),onKeyDown:b=>{var d;return d=a.id,void(("Enter"===b.key||" "===b.key)&&(b.preventDefault(),c(d)))},role:"button",tabIndex:0,className:(0,i.cn)("group flex w-full items-start gap-3 rounded-[8px] border px-3 py-3 text-left transition-colors","[content-visibility:auto] [contain-intrinsic-size:92px]",n?"border-[rgba(234,122,42,0.28)] bg-[rgba(255,255,255,0.08)]":"border-[var(--vk-border)] bg-[rgba(255,255,255,0.02)] hover:bg-[var(--vk-bg-hover)]"),children:[(0,d.jsx)(r,{running:q}),(0,d.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,d.jsxs)("span",{className:"flex min-w-0 items-start gap-2",children:[(0,d.jsxs)("span",{className:"min-w-0 flex flex-1 items-center gap-2",children:[k?(0,d.jsx)("span",{className:"inline-flex h-5 w-5 shrink-0 items-center justify-center",title:k,"aria-label":`${k} agent`,children:(0,d.jsx)(m.N,{seed:{label:k},className:"h-4 w-4"})}):null,(0,d.jsx)("span",{className:"min-w-0 truncate text-[14px] font-medium text-[var(--vk-text-strong)]",children:o(a)})]}),g?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("span",{className:"hidden shrink-0 sm:block",children:(0,d.jsx)("button",{type:"button",onClick:b=>t(b,a.id,c),onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&t(b,a.id,c)},className:"rounded-[10px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--vk-orange)]","aria-label":`Open diff for session ${a.id}`,title:"Open diff tab",children:(0,d.jsx)(s,{additions:g.additions,deletions:g.deletions,isSelected:n})})}),(0,d.jsx)("span",{className:"shrink-0 rounded-[8px] bg-[rgba(255,255,255,0.06)] px-2.5 py-1 text-[11px] font-medium sm:hidden",children:(0,d.jsx)("span",{className:h.className,children:h.label})})]}):(0,d.jsx)("span",{className:"shrink-0 rounded-[8px] bg-[rgba(255,255,255,0.06)] px-2.5 py-1 text-[11px] font-medium",children:(0,d.jsx)("span",{className:h.className,children:h.label})})]}),(0,d.jsx)("span",{className:"mt-1 block truncate text-[12px] text-[var(--vk-text-muted)]",children:p(a)})]}),f?(0,d.jsx)("button",{type:"button",onClick:b=>void A(b,a.id),disabled:u,className:(0,i.cn)("mt-0.5 inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-[6px] border border-[var(--vk-border)] text-[var(--vk-text-muted)] transition sm:h-7 sm:w-7","opacity-70 group-hover:opacity-100 focus-visible:opacity-100","hover:border-[var(--vk-border)] hover:bg-[var(--vk-bg-hover)] hover:text-[var(--vk-text-normal)]",u&&"cursor-wait opacity-100"),"aria-label":`Archive session ${a.id}`,title:w?"Archive failed":"Archive session",children:(0,d.jsx)(l,{className:(0,i.cn)("h-3.5 w-3.5",w&&"text-red-400")})}):null]},a.id)})})})]})}var v=c(1071);let w=(0,e.memo)(function({projects:a,selectedProjectId:b,onSelectProject:c,onUnlinkProject:k,sessions:l,selectedSessionId:m,onSelectSession:n,onArchiveSession:o,onCreateWorkspace:p}){let[q,r]=(0,e.useState)(null),[s,t]=(0,e.useState)(null),[w,x]=(0,e.useState)(null),y=(0,e.useMemo)(()=>{let a=new Map;for(let b of l){if("archived"===b.status)continue;let c=a.get(b.projectId)??{total:0,active:0};c.total+=1,"done"!==(0,j.n)(b)&&(c.active+=1),a.set(b.projectId,c)}return a},[l]),z=(0,e.useMemo)(()=>a.find(a=>a.id===s)??null,[s,a]);async function A(){if(k&&s){r(s),x(null);try{await k(s),t(null)}catch(a){x(a instanceof Error?a.message:"Failed to unlink project.")}finally{r(null)}}}return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col bg-[var(--vk-bg-panel)]",children:[(0,d.jsxs)("section",{className:"border-b border-[var(--vk-border)] px-4 py-4",children:[(0,d.jsx)("div",{className:"flex justify-center text-center",children:(0,d.jsx)("p",{className:"font-brand-header text-[22px] font-bold leading-none uppercase tracking-[0.32em] text-[var(--vk-text-strong)]",children:"Conductor"})}),(0,d.jsxs)("button",{type:"button",onClick:p,className:"mt-3 inline-flex h-11 w-full items-center justify-center gap-1 rounded-[6px] border border-[var(--vk-border)] px-2 text-[12px] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)] sm:h-8","aria-label":"Add workspace",children:[(0,d.jsx)(g.A,{className:"h-3.5 w-3.5"}),(0,d.jsx)("span",{children:"Add Workspace"})]})]}),(0,d.jsxs)("section",{className:"border-b border-[var(--vk-border)] pb-2 pt-1.5",children:[(0,d.jsx)("div",{className:"flex h-[28px] items-center px-3",children:(0,d.jsx)("p",{className:"text-[11px] uppercase tracking-[0.08em] text-[var(--vk-text-muted)]",children:"Projects"})}),(0,d.jsxs)("div",{className:"max-h-[260px] overflow-y-auto px-2",children:[(0,d.jsxs)("button",{type:"button",onClick:()=>c(null),className:(0,i.cn)("mb-1.5 flex w-full items-center gap-3 rounded-[6px] px-3 py-2.5 text-left text-[14px] leading-[21px]",null===b?"bg-[var(--vk-bg-hover)] text-[var(--vk-text-normal)]":"text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]"),children:[(0,d.jsx)("span",{className:"h-2.5 w-2.5 rounded-full bg-[var(--vk-text-muted)]"}),(0,d.jsx)("span",{className:"truncate",children:"All projects"}),(0,d.jsx)("span",{className:"ml-auto text-[11px] text-[var(--vk-text-muted)]",children:a.length})]}),a.map(a=>{let e,f=b===a.id,g=y.get(a.id)??{total:0,active:0},j=q===a.id,l=(e=[],a.agentModel?.trim()&&e.push(`Model: ${a.agentModel.trim()}`),a.agentReasoningEffort?.trim()&&e.push(`Reasoning: ${a.agentReasoningEffort.trim()}`),e.length>0?e.join(" \xb7 "):null);return(0,d.jsxs)("div",{className:(0,i.cn)("group relative mb-1.5 flex items-center rounded-[6px]",f?"bg-[var(--vk-bg-hover)]":"hover:bg-[var(--vk-bg-hover)]"),children:[(0,d.jsxs)("button",{type:"button",onClick:()=>c(a.id),className:(0,i.cn)("flex min-w-0 flex-1 items-center gap-3 px-3 py-2.5 text-left text-[14px] leading-[21px]",f?"text-[var(--vk-text-normal)]":"text-[var(--vk-text-muted)]"),children:[(0,d.jsx)("span",{className:"mt-1 h-2.5 w-2.5 shrink-0 rounded-full bg-[#3c83f6]"}),(0,d.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,d.jsx)("span",{className:"block truncate",children:a.id}),a.description?(0,d.jsx)("span",{className:"block truncate text-[11px] text-[var(--vk-text-muted)]",children:a.description}):null,l?(0,d.jsx)("span",{className:"block truncate text-[11px] text-[var(--vk-text-muted)]",children:l}):null]}),(0,d.jsxs)("span",{className:"shrink-0 text-right",children:[(0,d.jsxs)("span",{className:"block text-[11px] text-[var(--vk-text-normal)]",children:[g.active," active"]}),(0,d.jsxs)("span",{className:"block text-[10px] text-[var(--vk-text-muted)]",children:[g.total," total"]})]})]}),k&&(0,d.jsx)("button",{type:"button",disabled:j,onClick:b=>{b.stopPropagation(),x(null),t(a.id)},className:"mr-2 inline-flex shrink-0 items-center justify-center rounded-[4px] p-1 text-[var(--vk-text-muted)] hover:bg-[var(--vk-red)]/10 hover:text-[var(--vk-red)] disabled:opacity-50","aria-label":`Unlink ${a.id}`,title:"Unlink project",children:(0,d.jsx)(h.A,{className:"h-3.5 w-3.5"})})]},a.id)})]})]}),(0,d.jsx)("section",{className:"flex min-h-0 flex-1 flex-col pt-1.5",children:(0,d.jsx)(u,{sessions:l,selectedId:m,onSelect:n,onArchive:o,onCreateWorkspace:p,showHeader:!1})})]}),z&&"u">typeof document?(0,f.createPortal)((0,d.jsx)("div",{className:"fixed inset-0 z-[80] flex items-center justify-center bg-black/60 px-4",onClick:()=>{q||(t(null),x(null))},children:(0,d.jsxs)("div",{className:"surface-card w-full max-w-md rounded-[var(--radius-lg)] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] shadow-[0_28px_90px_rgba(0,0,0,0.55)]",onClick:a=>a.stopPropagation(),role:"dialog","aria-modal":"true","aria-labelledby":"unlink-project-title",children:[(0,d.jsxs)("div",{className:"border-b border-[var(--vk-border)] px-4 py-3",children:[(0,d.jsx)("h2",{id:"unlink-project-title",className:"text-[17px] font-medium text-[var(--vk-text-strong)]",children:"Unlink Project"}),(0,d.jsxs)("p",{className:"mt-1 text-[12px] text-[var(--vk-text-muted)]",children:["Remove ",(0,d.jsx)("span",{className:"font-medium text-[var(--vk-text-normal)]",children:z.id})," from this workspace configuration."]})]}),(0,d.jsxs)("div",{className:"space-y-3 px-4 py-4",children:[(0,d.jsx)("p",{className:"text-[13px] leading-5 text-[var(--vk-text-normal)]",children:"This only removes the project from Conductor. Repository files on disk are not deleted."}),w?(0,d.jsx)("div",{className:"rounded-[var(--radius-md)] border border-[var(--vk-red)]/35 bg-[color:color-mix(in_srgb,var(--vk-red)_12%,transparent)] px-3 py-2 text-[12px] text-[var(--vk-red)]",children:w}):null]}),(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2 border-t border-[var(--vk-border)] px-4 py-3",children:[(0,d.jsx)(v.$,{type:"button",variant:"ghost",onClick:()=>{t(null),x(null)},disabled:null!==q,children:"Cancel"}),(0,d.jsx)(v.$,{type:"button",variant:"danger",onClick:()=>void A(),disabled:null!==q,children:q===z.id?"Unlinking...":"Unlink Project"})]})]})}),document.body):null]})})},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"}}};