conductor-oss 0.58.39 → 0.58.41

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 (93) 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/api/sessions/[id]/preview/route.js +1 -1
  20. package/web/.next/standalone/packages/web/.next/server/app/bridge/connect/page.js +1 -1
  21. package/web/.next/standalone/packages/web/.next/server/app/bridge/connect/page.js.nft.json +1 -1
  22. package/web/.next/standalone/packages/web/.next/server/app/bridge/connect/page_client-reference-manifest.js +1 -1
  23. package/web/.next/standalone/packages/web/.next/server/app/embed/terminal/[id]/page.js +1 -1
  24. package/web/.next/standalone/packages/web/.next/server/app/embed/terminal/[id]/page.js.nft.json +1 -1
  25. package/web/.next/standalone/packages/web/.next/server/app/embed/terminal/[id]/page_client-reference-manifest.js +1 -1
  26. package/web/.next/standalone/packages/web/.next/server/app/page.js +1 -1
  27. package/web/.next/standalone/packages/web/.next/server/app/page.js.nft.json +1 -1
  28. package/web/.next/standalone/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
  29. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js +1 -1
  30. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
  31. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  32. package/web/.next/standalone/packages/web/.next/server/app/settings/bridge/page.js +1 -1
  33. package/web/.next/standalone/packages/web/.next/server/app/settings/bridge/page.js.nft.json +1 -1
  34. package/web/.next/standalone/packages/web/.next/server/app/settings/bridge/page_client-reference-manifest.js +1 -1
  35. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js +1 -1
  36. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
  37. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
  38. package/web/.next/standalone/packages/web/.next/server/app/sign-in/hosted/page.js +1 -1
  39. package/web/.next/standalone/packages/web/.next/server/app/sign-in/hosted/page.js.nft.json +1 -1
  40. package/web/.next/standalone/packages/web/.next/server/app/sign-in/hosted/page_client-reference-manifest.js +1 -1
  41. package/web/.next/standalone/packages/web/.next/server/app/sign-in/sso-callback/page.js +1 -1
  42. package/web/.next/standalone/packages/web/.next/server/app/sign-in/sso-callback/page.js.nft.json +1 -1
  43. package/web/.next/standalone/packages/web/.next/server/app/sign-in/sso-callback/page_client-reference-manifest.js +1 -1
  44. package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js +1 -1
  45. package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js.nft.json +1 -1
  46. package/web/.next/standalone/packages/web/.next/server/app/unlock/page_client-reference-manifest.js +1 -1
  47. package/web/.next/standalone/packages/web/.next/server/app-paths-manifest.json +4 -4
  48. package/web/.next/standalone/packages/web/.next/server/chunks/107.js +1 -0
  49. package/web/.next/standalone/packages/web/.next/server/chunks/1564.js +1 -1
  50. package/web/.next/standalone/packages/web/.next/server/chunks/177.js +1 -0
  51. package/web/.next/standalone/packages/web/.next/server/chunks/2089.js +3 -3
  52. package/web/.next/standalone/packages/web/.next/server/chunks/3990.js +1 -1
  53. package/web/.next/standalone/packages/web/.next/server/chunks/6054.js +1 -1
  54. package/web/.next/standalone/packages/web/.next/server/chunks/9455.js +1 -1
  55. package/web/.next/standalone/packages/web/.next/server/middleware-build-manifest.js +1 -1
  56. package/web/.next/standalone/packages/web/.next/server/middleware-react-loadable-manifest.js +1 -1
  57. package/web/.next/standalone/packages/web/.next/server/next-font-manifest.js +1 -1
  58. package/web/.next/standalone/packages/web/.next/server/next-font-manifest.json +1 -1
  59. package/web/.next/standalone/packages/web/.next/server/pages/500.html +1 -1
  60. package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.js +1 -1
  61. package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.json +1 -1
  62. package/web/.next/standalone/packages/web/.next/static/chunks/2799.1e0f8bbd84a63128.js +1 -0
  63. package/web/.next/standalone/packages/web/.next/static/chunks/{4443.611b659fd26e567b.js → 4443.21500483f2024d8e.js} +1 -1
  64. package/web/.next/standalone/packages/web/.next/static/chunks/474.0468442a7b5947e9.js +1 -0
  65. package/web/.next/standalone/packages/web/.next/static/chunks/8462.f878c844419c1a0c.js +1 -0
  66. package/web/.next/{static/chunks/8510-eb40f26ac825fca3.js → standalone/packages/web/.next/static/chunks/8510-5c551d5a3d4b390c.js} +1 -1
  67. package/web/.next/standalone/packages/web/.next/static/chunks/app/layout-b196fb7d7e558466.js +1 -0
  68. package/web/.next/standalone/packages/web/.next/static/chunks/app/page-970687afb211d9f8.js +1 -0
  69. package/web/.next/standalone/packages/web/.next/static/chunks/{webpack-b8e6b1ccb85a3faa.js → webpack-59e3530274e2a5a1.js} +1 -1
  70. package/web/.next/static/chunks/2799.1e0f8bbd84a63128.js +1 -0
  71. package/web/.next/static/chunks/{4443.611b659fd26e567b.js → 4443.21500483f2024d8e.js} +1 -1
  72. package/web/.next/static/chunks/474.0468442a7b5947e9.js +1 -0
  73. package/web/.next/static/chunks/8462.f878c844419c1a0c.js +1 -0
  74. package/web/.next/{standalone/packages/web/.next/static/chunks/8510-eb40f26ac825fca3.js → static/chunks/8510-5c551d5a3d4b390c.js} +1 -1
  75. package/web/.next/static/chunks/app/layout-b196fb7d7e558466.js +1 -0
  76. package/web/.next/static/chunks/app/page-970687afb211d9f8.js +1 -0
  77. package/web/.next/static/chunks/{webpack-b8e6b1ccb85a3faa.js → webpack-59e3530274e2a5a1.js} +1 -1
  78. package/web/.next/standalone/packages/web/.next/server/chunks/2553.js +0 -1
  79. package/web/.next/standalone/packages/web/.next/server/chunks/60.js +0 -1
  80. package/web/.next/standalone/packages/web/.next/static/chunks/2799.d54bac0b61a6c631.js +0 -1
  81. package/web/.next/standalone/packages/web/.next/static/chunks/474.d51d3c524fefdcc2.js +0 -1
  82. package/web/.next/standalone/packages/web/.next/static/chunks/7649.96df81c61d4eeaaa.js +0 -1
  83. package/web/.next/standalone/packages/web/.next/static/chunks/app/layout-40d6d4ccf615ee62.js +0 -1
  84. package/web/.next/standalone/packages/web/.next/static/chunks/app/page-b6a5c403840a5555.js +0 -1
  85. package/web/.next/static/chunks/2799.d54bac0b61a6c631.js +0 -1
  86. package/web/.next/static/chunks/474.d51d3c524fefdcc2.js +0 -1
  87. package/web/.next/static/chunks/7649.96df81c61d4eeaaa.js +0 -1
  88. package/web/.next/static/chunks/app/layout-40d6d4ccf615ee62.js +0 -1
  89. package/web/.next/static/chunks/app/page-b6a5c403840a5555.js +0 -1
  90. /package/web/.next/standalone/packages/web/.next/static/{W7Ix_gUgmq_cKa_iZEKIf → BoRHND7Qzg9aFwUgEoPWa}/_buildManifest.js +0 -0
  91. /package/web/.next/standalone/packages/web/.next/static/{W7Ix_gUgmq_cKa_iZEKIf → BoRHND7Qzg9aFwUgEoPWa}/_ssgManifest.js +0 -0
  92. /package/web/.next/static/{W7Ix_gUgmq_cKa_iZEKIf → BoRHND7Qzg9aFwUgEoPWa}/_buildManifest.js +0 -0
  93. /package/web/.next/static/{W7Ix_gUgmq_cKa_iZEKIf → BoRHND7Qzg9aFwUgEoPWa}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974,9847],{12529:(e,t,n)=>{Promise.resolve().then(n.bind(n,60594))},33866:(e,t,n)=>{"use strict";n.d(t,{BO:()=>l,Ge:()=>d,a6:()=>c,h7:()=>i,iQ:()=>o,pN:()=>a});var r=n(5739);let a=[{name:"codex",label:"Codex",description:"OpenAI Codex CLI",homepage:"https://github.com/openai/codex",iconUrl:"https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/openai.svg",installHint:"npm install -g @openai/codex",installUrl:"https://github.com/openai/codex",setupUrl:"https://chatgpt.com/codex"},{name:"gemini",label:"Gemini",description:"Google Gemini CLI",homepage:"https://ai.google.dev/gemini-api/docs",iconUrl:"https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/googlegemini.svg",installHint:"npm install -g @google/gemini-cli",installUrl:"https://ai.google.dev/gemini-api/docs",setupUrl:"https://aistudio.google.com/"},{name:"qwen-code",label:"Qwen Code",description:"Qwen Code CLI",homepage:"https://qwenlm.github.io/announcements/",iconUrl:null,installHint:"npm install -g @qwen-code/qwen-code@latest",installUrl:"https://qwenlm.github.io/announcements/",setupUrl:"https://chat.qwen.ai/"},{name:"droid",label:"Droid",description:"Factory Droid CLI",homepage:"https://github.com/Factory-AI/factory",iconUrl:"https://raw.githubusercontent.com/Factory-AI/factory/main/docs/images/droid_logo_cli.png",installHint:"npm install -g @factory/cli",installUrl:"https://github.com/Factory-AI/factory"},{name:"claude-code",label:"Claude Code",description:"Claude Code CLI",homepage:"https://www.anthropic.com/claude",iconUrl:"https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/claude.svg",installHint:"npm install -g @anthropic-ai/claude-code",installUrl:"https://www.anthropic.com/claude-code",setupUrl:"https://claude.ai/"},{name:"amp",label:"Amp",description:"Amp Code CLI",homepage:"https://www.ampcode.com",iconUrl:"https://ampcode.com/amp-mark-color.svg",installHint:"npm install -g @sourcegraph/amp",installUrl:"https://www.ampcode.com"},{name:"hermes",label:"Hermes",description:"Nous Research Hermes Agent CLI",homepage:"https://hermes-agent.nousresearch.com/",iconUrl:"/agents/hermes.png",installHint:"curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash",installUrl:"https://hermes-agent.nousresearch.com/docs/getting-started/installation/",setupUrl:"https://hermes-agent.nousresearch.com/docs/getting-started/installation/"},{name:"opencode",label:"OpenCode",description:"OpenCode CLI",homepage:"https://opencode.ai",iconUrl:null,installHint:"npm install -g opencode-ai",installUrl:"https://opencode.ai"},{name:"letta",label:"Letta Code",description:"Letta Code CLI (memory-first agent)",homepage:"https://docs.letta.com/letta-code",iconUrl:"/agents/letta-light.svg",installHint:"npm install -g @letta-ai/letta-code",installUrl:"https://docs.letta.com/letta-code",setupUrl:"https://app.letta.com/"},{name:"openclaw",label:"OpenClaw",description:"OpenClaw gateway-backed chat runtime",homepage:"https://github.com/openclaw/openclaw#readme",iconUrl:null,installHint:"Configure the OpenClaw gateway in backend runtime settings",installUrl:"https://github.com/openclaw/openclaw",setupUrl:"https://github.com/openclaw/openclaw",surfaces:["dispatcher"]},{name:"github-copilot",label:"GitHub Copilot",description:"GitHub Copilot CLI",homepage:"https://docs.github.com/copilot/how-tos/copilot-cli",iconUrl:"https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/githubcopilot.svg",installHint:"npm install -g @github/copilot",installUrl:"https://docs.github.com/copilot/how-tos/copilot-cli",setupUrl:"https://github.com/settings/copilot"},{name:"cursor-cli",label:"Cursor Agent",description:"Cursor Agent CLI",homepage:"https://www.cursor.com",iconUrl:"https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/cursor.svg",installHint:"npm install -g cursor-agent"},{name:"ccr",label:"CCR",description:"Claude Code Router",homepage:"https://www.npmjs.com/package/@musistudio/claude-code-router",iconUrl:"https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/claude.svg",installHint:"npm install -g @musistudio/claude-code-router",installUrl:"https://www.npmjs.com/package/@musistudio/claude-code-router"}],l=a.map(e=>e.name),s=new Map(a.map(e=>[(0,r.q)(e.name),e]));function i(e){return s.get((0,r.q)(e))??null}function o(e){let t=i(e);return!t||(t.surfaces?.includes("terminal")??!0)}function d(e){let t=[],n=new Set;for(let a of e){let e=a.trim();if(!e||!o(e))continue;let l=(0,r.q)(e);n.has(l)||(n.add(l),t.push(e))}return t}function c(e,t){let n="string"==typeof e?e.trim():"";if(n&&o(n))return n;let r=t.trim();return r&&o(r)?r:a.find(e=>o(e.name))?.name??"codex"}},51164:(e,t,n)=>{"use strict";n.d(t,{v:()=>c});var r=n(76196);let a=["pro","max","api"],l=["chatgpt","api"],s=["default"],i=["oauth","api"],o=["oauth","api"];function d(e,t,n){return"string"==typeof e&&t.includes(e)?e:n}function c(e){let t=!e||"object"!=typeof e||Array.isArray(e)?{}:{...e},n=(0,r.Zp)();return{amp:d(t.amp,s,n.amp),claudeCode:d(t.claudeCode,a,n.claudeCode),codex:d(t.codex,l,n.codex),cursorCli:d(t.cursorCli,s,n.cursorCli),droid:d(t.droid,s,n.droid),gemini:d(t.gemini,i,n.gemini),githubCopilot:d(t.githubCopilot,s,n.githubCopilot),opencode:d(t.opencode,s,n.opencode),qwenCode:d(t.qwenCode,o,n.qwenCode),ccr:d(t.ccr,s,n.ccr)}}},60594:(e,t,n)=>{"use strict";n.d(t,{default:()=>ej});var r=n(54568),a=n(42925),l=n(79748),s=n(7620),i=n(40448);n(76196);var o=n(52353),d=n(20487),c=n(50549),p=n(57917),u=n(21048),x=n(55341),m=n(30824),h=n(34737),g=n(20670),f=n(8008),v=n(58299),b=n(36645),w=n(84736),j=n(7086),k=n(54299),y=n(34041),N=n(34309),C=n(68476),A=n(20732),S=n(45894),I=n(5739),E=n(33866),M=n(35821),$=n(95106),L=n(53649),U=n(86011),P=n(31404),O=n(10926);let B=new Map,q=new Map;function F(e){let t=q.get(e);return t||(t={agents:[],loading:!0,lastFetchedAt:0,inFlight:null,retryTimeout:null},q.set(e,t)),t}function _(e){let t=B.get(e);return t||(t=new Set,B.set(e,t)),t}function T(e){for(let t of _(e))t()}function D(e){let t=F(e);return t.agents.length>0&&Date.now()-t.lastFetchedAt<3e4}function R(e,t){let n=F(e);null===n.retryTimeout&&(n.retryTimeout=window.setTimeout(()=>{F(e).retryTimeout=null,W(e,t,!0)},1e4))}async function W(e,t,n=!1){let r=F(e);if(!n&&D(e)){r.loading&&(r.loading=!1,T(e));return}return r.inFlight||(r.loading=!0,T(e),r.inFlight=(async()=>{try{var n;let a=await fetch((0,P.S)("/api/agents",t),{cache:"no-store"});if(!a.ok)throw Error(`Failed to fetch agents: ${a.status}`);let l=(n=await a.json(),Array.isArray(n)?n:n&&"object"==typeof n&&"agents"in n&&Array.isArray(n.agents)?n.agents:[]);l.length>0?(r.agents=l,r.lastFetchedAt=Date.now(),null!==r.retryTimeout&&(window.clearTimeout(r.retryTimeout),r.retryTimeout=null)):R(e,t)}catch{R(e,t)}finally{r.loading=!1,r.inFlight=null,T(e)}})()),r.inFlight}var H=n(46012),z=n(862),G=n(97882),V=n(39702),Z=n(86181),J=n(72410),X=n(85905),Q=n(84527),K=n(15115),Y=n(83770);function ee(e){return e.map(e=>(0,O.C0)(e)).filter(e=>null!==e)}var et=n(67506),en=n(76050),er=n(51164),ea=n(88272);let el="claude-code",es="conductor-board-dispatcher-panel-width";function ei(e){let t=e?.trim();return t&&t.length>0?t:null}function eo(e,t){return Math.min(Math.min(720,Math.max(320,Math.floor(.55*(Number.isFinite(t)&&t>0?t:720)))),Math.max(320,Math.round(e)))}let ed=(0,a.default)(()=>Promise.all([n.e(5493),n.e(5863)]).then(n.bind(n,35493)).then(e=>e.SessionDetail),{loadableGenerated:{webpack:()=>[35493]},loading:()=>(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-[13px] text-[var(--vk-text-muted)]",children:"Loading session..."})}),ec=(0,a.default)(()=>Promise.all([n.e(9450),n.e(9167)]).then(n.bind(n,29450)).then(e=>e.WorkspaceSidebarPanel),{loadableGenerated:{webpack:()=>[29450]},loading:()=>(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-[13px] text-[var(--vk-text-muted)]",children:"Loading workspace panel..."})}),ep=(0,a.default)(()=>n.e(6173).then(n.bind(n,66173)).then(e=>e.WorkspaceOverview),{loadableGenerated:{webpack:()=>[66173]},loading:()=>(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-[13px] text-[var(--vk-text-muted)]",children:"Loading workspace..."})}),eu=(0,a.default)(()=>n.e(9739).then(n.bind(n,79739)).then(e=>e.WorkspaceKanban),{loadableGenerated:{webpack:()=>[79739]},loading:()=>(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-[13px] text-[var(--vk-text-muted)]",children:"Loading board..."})}),ex=(0,a.default)(()=>Promise.all([n.e(9526),n.e(2651),n.e(2261),n.e(8607)]).then(n.bind(n,44838)).then(e=>e.ProjectDispatcherPanel),{loadableGenerated:{webpack:()=>[44838]},loading:()=>(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-[13px] text-[var(--vk-text-muted)]",children:"Loading dispatcher..."})}),em=(0,a.default)(()=>Promise.all([n.e(3470),n.e(524),n.e(474)]).then(n.bind(n,90474)).then(e=>e.NewWorkspaceDialog),{loadableGenerated:{webpack:()=>[90474]},loading:()=>null}),eh=(0,a.default)(()=>Promise.all([n.e(3470),n.e(524),n.e(474)]).then(n.bind(n,90474)).then(e=>e.SettingsDialog),{loadableGenerated:{webpack:()=>[90474]},loading:()=>null});function eg(e){let t=(0,E.h7)(e);return t?.label?t.label:e.split(/[-_\s]+/g).filter(Boolean).map(e=>e[0]?.toUpperCase()+e.slice(1)).join(" ")}function ef(e){return e.issueId?.trim()||e.taskRef?.trim()||e.id}function ev(e){let[t]=e.split(" - ");return(t??e).trim()}function eb(e){return!e||"object"!=typeof e||Array.isArray(e)?{}:{...e}}function ew(e,t){let n=eb(e),r=eb(n.notifications),a=r.soundFile,l="string"==typeof n.codingAgent&&n.codingAgent.trim().length>0?n.codingAgent.trim():t,s=(0,E.a6)(l,t),i="string"==typeof n.ide&&n.ide.trim().length>0?n.ide.trim():"vscode",o="string"==typeof n.markdownEditor&&n.markdownEditor.trim().length>0?n.markdownEditor.trim():"obsidian",d="string"==typeof n.markdownEditorPath?n.markdownEditorPath.trim():"";return{onboardingAcknowledged:!0===n.onboardingAcknowledged,codingAgent:s,ide:i,markdownEditor:o,markdownEditorPath:d,modelAccess:(0,er.v)(n.modelAccess),notifications:{soundEnabled:!1!==r.soundEnabled,soundFile:null===a?null:"string"==typeof a&&a.trim().length>0?a.trim():"abstract-sound-4"}}}function ej({requiresPairedDeviceScope:e=!1}){let t=(0,l.useRouter)(),n=(0,l.usePathname)(),a=(0,l.useSearchParams)(),i=(0,s.useMemo)(()=>ei(a.get("project")),[a]),o=(0,s.useMemo)(()=>ei(a.get("session")),[a]),d=(0,s.useMemo)(()=>"board"===a.get("view")?"board":"direct",[a]),c=(0,s.useMemo)(()=>ei(a.get("bridge")),[a]),[p,u]=(0,s.useState)(c??""),h=(0,O.C0)(p),g=(0,s.useMemo)(()=>(0,O.DW)(o)?.bridgeId??null,[o]),w=c??g,j=h??g,[k,y]=(0,s.useState)([]),[N,C]=(0,s.useState)("loading"),[A,S]=(0,s.useState)(null),B=!!(0,et.y)()&&null===A,q=(0,s.useMemo)(()=>k.filter(e=>e.connected),[k]),T=(0,s.useMemo)(()=>q.map(e=>e.bridgeId),[q]),R=(0,s.useMemo)(()=>(function({requiresPairedDeviceScope:e,effectiveBridgeId:t,connectedBridgeIds:n,bridgeInventoryStatus:r}){if(!e)return!1;let a=(0,O.C0)(t);return!!a&&("loading"===r||"ready"===r&&!ee(n).includes(a))})({requiresPairedDeviceScope:e,effectiveBridgeId:j,connectedBridgeIds:T,bridgeInventoryStatus:N}),[N,T,j,e]);(0,s.useMemo)(()=>(function({requiresPairedDeviceScope:e,effectiveBridgeId:t,connectedBridgeIds:n,bridgeInventoryStatus:r}){if(!e)return!0;let a=(0,O.C0)(t);return!!a&&"ready"===r&&ee(n).includes(a)})({requiresPairedDeviceScope:e,effectiveBridgeId:j,connectedBridgeIds:T,bridgeInventoryStatus:N}),[N,T,j,e]);let J=(0,s.useMemo)(()=>!e||!!j,[j,e]),{projects:X,loading:ef,error:ev,refresh:eb}=(0,L.U)(j,{enabled:J}),{agents:ey}=function(e,t){let n=t?.enabled??!0,r=(0,O.C0)(e)??"local",[a,l]=(0,s.useState)({agents:[],loading:n});return(0,s.useEffect)(()=>{if(!n)return void l({agents:[],loading:!1});let t=()=>{let e;return l({agents:(e=F(r)).agents,loading:e.loading})};_(r).add(t),t(),W(r,e);let a=()=>{D(r)||W(r,e,!0)},s=()=>{"visible"!==document.visibilityState||D(r)||W(r,e,!0)};return window.addEventListener("focus",a),document.addEventListener("visibilitychange",s),()=>{_(r).delete(t),window.removeEventListener("focus",a),document.removeEventListener("visibilitychange",s)}},[e,n,r]),n?a:{agents:[],loading:!1}}(j,{enabled:J}),{mobileSidebarOpen:eN,desktopSidebarOpen:eC,toggleSidebar:eA,closeSidebarOnMobile:eS,syncSidebarForViewport:eI}=(0,H.T)({initialDesktopOpen:!1}),eE=eN||eC,eM=!o||eE,{sessions:e$,loading:eL,error:eU,refresh:eP}=(0,$.t)(i,{enabled:eM&&J,bridgeId:j}),[eO,eB]=(0,s.useState)(""),[eq,eF]=(0,s.useState)(""),[e_,eT]=(0,s.useState)((0,ea.Z3)()),[eD,eR]=(0,s.useState)(!1),[eW,eH]=(0,s.useState)(null),[ez,eG]=(0,s.useState)(null),[eV,eZ]=(0,s.useState)(!1),[eJ,eX]=(0,s.useState)(!1),[eQ,eK]=(0,s.useState)(null),[eY,e0]=(0,s.useState)(null),[e1,e4]=(0,s.useState)(!0),[e3,e2]=(0,s.useState)(!1),[e5,e6]=(0,s.useState)(null),[e9,e7]=(0,s.useState)(!1),[e8,te]=(0,s.useState)(!1),[tt,tn]=(0,s.useState)(()=>o?[o]:[]),[tr,ta]=(0,s.useState)(!1),[tl,ts]=(0,s.useState)(!1),[ti,to]=(0,s.useState)(()=>o?"chat":"board"),[td,tc]=(0,s.useState)(!1),[tp,tu]=(0,s.useState)(405),[tx,tm]=(0,s.useState)(!1),th=(0,s.useRef)(null),tg=(0,s.useRef)(i);(0,s.useEffect)(()=>{let e="function"==typeof window.matchMedia?window.matchMedia("(pointer: coarse)"):null,t=()=>{ta((0,Z.k$)())};return t(),window.addEventListener("resize",t),e?.addEventListener?.("change",t),()=>{window.removeEventListener("resize",t),e?.removeEventListener?.("change",t)}},[]),(0,s.useEffect)(()=>{let e="function"==typeof window.matchMedia?window.matchMedia("(min-width: 1280px)"):null,t=()=>{ts(e?.matches??window.innerWidth>=1280)};return t(),window.addEventListener("resize",t),e?.addEventListener?.("change",t),()=>{window.removeEventListener("resize",t),e?.removeEventListener?.("change",t)}},[]),(0,s.useEffect)(()=>{if("board"!==d||null===i){tg.current=i,to("board");return}let e=tg.current!==i;(tg.current=i,o)?to("chat"):e&&to("board")},[i,o,d]),(0,s.useEffect)(()=>{try{let e=window.localStorage.getItem(es),t=e?Number.parseInt(e,10):NaN;Number.isFinite(t)&&tu(eo(t,window.innerWidth))}catch{}let e=()=>{tu(e=>eo(e,window.innerWidth))};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}},[]),(0,s.useEffect)(()=>{if(!tx)return;let e=e=>{let t=window.innerWidth;tu(eo(t-e.clientX,t))},t=()=>{tm(!1)};return window.addEventListener("mousemove",e),window.addEventListener("mouseup",t),document.body.style.userSelect="none",document.body.style.cursor="col-resize",()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",t),document.body.style.userSelect="",document.body.style.cursor="";try{window.localStorage.setItem(es,String(tp))}catch{}}},[tx,tp]),(0,s.useEffect)(()=>{if(!B){y([]),C("ready"),e&&t.replace("/bridge/connect");return}let n=!1,r=window.innerWidth<768,a=R?r?8e3:4e3:r?3e4:15e3;async function l(){try{let e=await fetch("/api/bridge/devices",{cache:"no-store"}),t=await e.json().catch(()=>null);if(!e.ok){if((0,Y.Xt)(t?.error)){n||(S(t?.error??null),y([]),C("ready"));return}throw Error(`Failed to fetch bridges: ${e.status}`)}n||(S(null),y((0,K.oH)(t?.devices).map(e=>({bridgeId:e.device_id,hostname:e.last_status?.hostname??e.hostname,os:`${e.last_status?.os??`${e.os}/${e.arch}`}${(0,K.wj)(e.last_status?.version)}`,capabilities:[],connected:e.connected,status:e.connected?"connected":"offline",connectedAt:"",lastSeenAt:""}))),C("ready"))}catch{n||(y([]),C("error"))}}l();let s=window.setInterval(()=>{l()},a);return()=>{n=!0,window.clearInterval(s)}},[B,R,e,t]),(0,s.useEffect)(()=>{let t=function({requiresPairedDeviceScope:e,requestedBridgeId:t,selectedBridgeId:n,connectedBridgeIds:r}){let a=(0,O.C0)(t),l=(0,O.C0)(n),s=ee(r);return e?a||(0===s.length?"":l&&s.includes(l)?l:s[0]??""):l&&s.includes(l)?l:""}({requiresPairedDeviceScope:e,requestedBridgeId:w,selectedBridgeId:p,connectedBridgeIds:T});t!==p&&u(t)},[T,w,e,p]),(0,s.useEffect)(()=>{!e||j||"ready"!==N||q.length>0||t.replace("/bridge/connect")},[N,q.length,j,e,t]),(0,s.useEffect)(()=>{u(c??"")},[c]);let tf=(0,s.useMemo)(()=>new Map(e$.map(e=>[e.id,e])),[e$]),{session:tv,loading:tb,error:tw}=(0,M.w)(o,null,{enabled:!!o&&J,bridgeId:j}),tj=eW??ev??eU??tw??e5,tk=(0,s.useMemo)(()=>{let e=new Map;for(let t of e$){let n=e.get(t.projectId);n?n.push(t):e.set(t.projectId,[t])}return e},[e$]),ty=(0,s.useCallback)((e,r="push")=>{let l=new URLSearchParams(a.toString()),s=(e,t)=>{let n="string"==typeof t?t.trim():"";n.length>0?l.set(e,n):l.delete(e)};"projectId"in e&&s("project",e.projectId),"sessionId"in e&&s("session",e.sessionId),"workspaceView"in e&&("board"===e.workspaceView?l.set("view","board"):l.delete("view")),"tab"in e&&(e.tab&&"dispatcher"!==e.tab?l.set("tab",e.tab):l.delete("tab")),"bridgeId"in e&&s("bridge",e.bridgeId),l.has("project")||l.delete("view"),l.has("session")||l.delete("tab");let i=l.toString(),o=i.length>0?`${n}?${i}`:n;"replace"===r?t.replace(o,{scroll:!1}):t.push(o,{scroll:!1})},[n,t,a]);(0,s.useEffect)(()=>{let e=(0,O.C0)(p);(c??null)!==e&&ty({bridgeId:e},"replace")},[c,ty,p]),(0,s.useEffect)(()=>{if(!ef&&!ev){if(0===X.length){null!==i&&ty({projectId:null,workspaceView:null},"replace");return}null===i||X.some(e=>e.id===i)||ty({projectId:o?null:X[0]?.id??null,workspaceView:o?null:d},"replace")}},[ev,ef,ty,X,i,o,d]),(0,s.useEffect)(()=>{if(o){if(eM){if(eL||eU)return;e$.some(e=>e.id===o)||ty({sessionId:null,tab:null},"replace");return}!tb&&(tv||ty({sessionId:null,tab:null},"replace"))}},[e$,ty,eM,o,tb,tv,eU,eL]),(0,s.useEffect)(()=>{o?tn(e=>[o,...e.filter(e=>e!==o)].slice(0,1)):tn([])},[o]),(0,s.useEffect)(()=>{o&&th.current&&th.current!==o&&(th.current=null)},[o]),(0,s.useEffect)(()=>{o&&eM&&!eL&&!eU&&tn(e=>e.filter(e=>e===o||tf.has(e)))},[eM,o,tf,eU,eL]);let tN=(0,s.useMemo)(()=>tv,[tv]),tC=(0,s.useMemo)(()=>X.find(e=>e.id===i)??null,[X,i]),tA=(0,s.useMemo)(()=>i?tk.get(i)??[]:[],[i,tk]),tS=(0,s.useMemo)(()=>tN??(o?tf.get(o)??null:null),[tN,o,tf]),tI=(0,s.useMemo)(()=>{let e=a.get("tab");return"overview"!==e&&"preview"!==e&&"diff"!==e&&"dispatcher"!==e&&"terminal"===(0,en.tK)(tS)},[tS,a]),tE=!!o&&tI&&tr,tM=(0,s.useMemo)(()=>tN?[tN.projectId,tN.branch].filter(Boolean).join(" \xb7 "):tC?[tC.id,tC.defaultBranch||"main"].filter(Boolean).join(" \xb7 "):"All Projects",[tC,tN]),t$=(0,s.useMemo)(()=>j?k.find(e=>e.bridgeId===j)??null:null,[k,j]),tL=t$?`Device \xb7 ${t$.hostname}`:R?"Device \xb7 Reconnecting":e?"Scope \xb7 Paired device required":"Scope \xb7 Local backend",tU=t$?`Showing projects and sessions from ${t$.hostname}.`:R?"Waiting for the selected laptop to reconnect before loading dashboard data.":e?"Hosted dashboard access must target a connected laptop.":"Showing projects and sessions from the local backend because no paired laptop is selected.",tP=t$?"border-[rgba(24,197,143,0.35)] bg-[rgba(24,197,143,0.12)] text-[var(--vk-green)]":R?"border-[color:color-mix(in_srgb,var(--vk-accent)_30%,transparent)] bg-[color:color-mix(in_srgb,var(--vk-accent)_12%,transparent)] text-[var(--vk-accent)]":e?"border-[rgba(255,143,122,0.24)] bg-[rgba(255,143,122,0.08)] text-[var(--vk-red)]":"border-[var(--vk-border)] bg-[var(--vk-bg-main)] text-[var(--vk-text-muted)]",tO=(0,s.useMemo)(()=>{let e=Array.isArray(ey)?ey:[],t=new Set;for(let e of E.pN)t.add(e.name);for(let n of e)n.name&&t.add(n.name);for(let e of X)e.agent&&t.add(e.agent);eY?.codingAgent&&t.add(eY.codingAgent),eq&&t.add(eq),0===t.size&&t.add(eY?.codingAgent||el);let n=(0,E.Ge)(t);return 0===n.length&&n.push((0,E.a6)(eY?.codingAgent||el,el)),n},[ey,eY?.codingAgent,X,eq]),tB=(0,s.useMemo)(()=>{let e={};for(let t of E.pN)e[(0,I.q)(t.name)]={name:t.name,ready:!1,installed:!1,configured:!1,homepage:t.homepage,description:t.description,installHint:t.installHint??null,installUrl:t.installUrl??t.homepage??null,setupUrl:t.setupUrl??t.homepage??null};for(let t of Array.isArray(ey)?ey:[]){if(!t.name)continue;let n=(0,I.q)(t.name),r=(0,E.h7)(t.name);e[(0,I.q)(t.name)]={name:r?.name??t.name,ready:!0===t.ready,installed:!1!==t.installed,configured:!0===t.configured,homepage:"string"==typeof t.homepage?t.homepage:r?.homepage??e[n]?.homepage??null,description:"string"==typeof t.description?t.description:r?.description??e[n]?.description??null,installHint:"string"==typeof t.installHint?t.installHint:r?.installHint??e[n]?.installHint??null,installUrl:"string"==typeof t.installUrl?t.installUrl:r?.installUrl??e[n]?.installUrl??null,setupUrl:"string"==typeof t.setupUrl?t.setupUrl:r?.setupUrl??e[n]?.setupUrl??null}}return e},[ey]),tq=(0,s.useMemo)(()=>{let e={};for(let t of Array.isArray(ey)?ey:[])t.name&&t.runtimeModelCatalog&&(e[(0,I.q)(t.name)]=t.runtimeModelCatalog);return e},[ey]),tF=(0,s.useCallback)(e=>{let t=tB[(0,I.q)(e)],n=(0,E.h7)(e),r=t?.installed?t?.setupUrl??n?.setupUrl??t?.homepage??n?.homepage:t?.installUrl??n?.installUrl??t?.setupUrl??n?.setupUrl??t?.homepage??n?.homepage;r&&window.open(r,"_blank","noopener,noreferrer")},[tB]);async function t_(t,n){e2(!0),e6(null);try{if(e&&!j)throw Error("Pair or reconnect a laptop before saving preferences.");let r=await fetch((0,P.S)("/api/preferences",j),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),a=await r.json().catch(()=>null);if(!r.ok)throw Error(a?.error??a?.reason??`Failed to save preferences: ${r.status}`);let l=ew(a?.preferences,t.codingAgent||el);return e0(l),eF(l.codingAgent),n?.closeDialog!==!1&&e7(!1),!0}catch(e){return e6(e instanceof Error?e.message:"Failed to save preferences"),!1}finally{e2(!1)}}(0,s.useEffect)(()=>{let e=!1;return async function(){if(!J){e||(e0(null),e6(null),e4(!1));return}e4(!0);try{let t=await fetch((0,P.S)("/api/preferences",j)),n=await t.json().catch(()=>null);if(!t.ok)throw Error(n?.error??n?.reason??`Failed to load preferences: ${t.status}`);if(e)return;let r=ew(n?.preferences,el);e0(r),e6(null)}catch(t){if(e)return;e0(ew(null,el)),e6(t instanceof Error?t.message:"Failed to load preferences")}finally{e||e4(!1)}}(),()=>{e=!0}},[j,J]),(0,s.useEffect)(()=>{eY&&(eq||eF(eY.codingAgent))},[eY,eq]),(0,s.useEffect)(()=>{if(!e1){if(!eY||e&&!j)return void e7(!1);eY.onboardingAcknowledged||e7(!0)}},[j,eY,e1,e]),(0,s.useEffect)(()=>{if(0!==tO.length&&(!eq||!tO.includes(eq))){let e=eY?.codingAgent||el;eF(tO.includes(e)?e:tO[0]??el)}},[tO,eY?.codingAgent,eq]),(0,s.useEffect)(()=>{let e=(0,E.a6)(eq||tC?.agent||eY?.codingAgent||el,el),t=tC&&(0,I.q)(tC.agent)===(0,I.q)(e)?tC.agentModel:null,n=tC&&(0,I.q)(tC.agent)===(0,I.q)(e)?tC.agentReasoningEffort:null;eT((0,ea.c0)(e,eY?.modelAccess??(0,er.v)(null),tq,t,n))},[eY?.modelAccess,eY?.codingAgent,tq,eq,tC]);let tT=(0,s.useCallback)(()=>{e&&!j?eG("Pair or reconnect a laptop before adding a workspace."):(eG(null),eK(null),eH(null),eZ(!0),eI())},[j,e,eI]);(0,s.useEffect)(()=>{e8&&!e9&&(te(!1),tT())},[e8,e9]),(0,s.useEffect)(()=>{(!e||j)&&eG(null)},[j,e]);let tD=(0,s.useCallback)(async t=>{let n=eO.trim(),r=(0,ea.xb)(e_),a=(0,ea.aB)(e_),l=t?.bridgeId??j??null;if(e&&!l)return eH("Pair or reconnect a laptop before launching an agent session."),!1;let s=t?.projectId??i??X[0]?.id;if(!s)return eH("No project is configured in conductor.yaml"),!1;let o=(0,E.a6)(eq||el,el),d=tB[(0,I.q)(o)]??null;if(d&&!d.ready)return eH(d.installed?`${eg(o)} is not ready yet. Finish setup or authentication and try again.`:`${eg(o)} is not installed on this machine yet. Open setup and try again.`),tF(o),!1;eR(!0),eH(null);try{let e=await fetch((0,P.S)("/api/sessions",l),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:s,prompt:n,...t?.issueId?.trim()?{issueId:t.issueId.trim()}:{},agent:o,...t?.branch?{branch:t.branch}:{},...t?.baseBranch?{baseBranch:t.baseBranch}:{},..."boolean"==typeof t?.useWorktree?{useWorktree:t.useWorktree}:{},...t?.permissionMode?{permissionMode:t.permissionMode}:{},...r?{model:r}:{},...a?{reasoningEffort:a}:{},...t?.attachments&&t.attachments.length>0?{attachments:t.attachments}:{}})}),i=await e.json().catch(()=>null);if(!e.ok)throw Error(i?.error??`Failed to create workspace: ${e.status}`);if(!i?.session?.id)throw Error("Session created but response is missing session id");return eB(""),eI(),th.current=i.session.id,await eP(),ty({projectId:s,sessionId:i.session.id,tab:null,bridgeId:l},"push"),!0}catch(e){return eH(e instanceof Error?e.message:"Failed to create workspace"),!1}finally{eR(!1)}},[tB,e_,ty,tF,X,eO,eP,eq,j,i,e,eI]),tR=(0,s.useCallback)(async e=>{(await (0,Q.J)(e,{bridgeId:j}),o===e)?ty({projectId:null,sessionId:null,workspaceView:null,tab:null},"replace"):j&&eP()},[j,ty,eP,o]),tW=(0,s.useCallback)(async t=>{if(e&&!j)return void eK("Pair or reconnect a laptop before adding a workspace.");eX(!0),eK(null);try{let e=await fetch((0,P.S)("/api/workspaces",j),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await e.json().catch(()=>null);if(!e.ok)throw Error(n?.error??`Failed to add workspace: ${e.status}`);let r=n?.project?.id;if(!r)throw Error("Workspace created but response is missing project id");await eb(),eB(""),eI(),eZ(!1),ty({projectId:r,sessionId:null,workspaceView:"direct",tab:null,bridgeId:j??null},"push")}catch(e){eK(e instanceof Error?e.message:"Failed to add workspace")}finally{eX(!1)}},[j,ty,eb,e,eI]),tH=!e1&&!!eY&&(!e||!!j)&&!eY.onboardingAcknowledged,tz=eY??ew(null,eq||el),tG=(0,E.a6)(eq||tz.codingAgent||el,el),tV=i??tv?.projectId??null;(0,U.Q)({enabled:!e1,projectId:tV,preferences:tz.notifications,bridgeId:j});let tZ=(0,s.useCallback)(e=>{ty({projectId:e,sessionId:null,workspaceView:e?d:null,tab:null},"push"),eF((0,E.a6)(eY?.codingAgent||el,el)),to("board"),eS()},[eS,ty,eY?.codingAgent,d]),tJ=(0,s.useCallback)((e,t)=>{var n,r;let a,l=tf.get(e)??null;ty((n=i??null,r=t?.tab,a={projectId:l?.projectId??n??null,sessionId:e,tab:r??(0,en.tK)(l)},"board"===d?{...a,workspaceView:"direct"}:a),"push"),eS()},[eS,ty,i,tf,d]),tX=(0,s.useCallback)(()=>{e&&!j?t.push("/bridge/connect"):e7(!0)},[j,e,t]),tQ=(0,s.useCallback)(()=>{eJ||eZ(!1)},[eJ]),tK=(0,s.useCallback)(()=>{e3||tH||(e7(!1),e6(null))},[tH,e3]),tY=(0,s.useCallback)(()=>{tc(e=>!e)},[]),t0=(0,s.useCallback)(async e=>{let t=encodeURIComponent(e),n=await fetch((0,P.S)(`/api/repositories/${t}`,j),{method:"DELETE"});(404===n.status||405===n.status)&&(n=await fetch((0,P.S)(`/api/repositories?id=${t}`,j),{method:"DELETE"}));let r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error??`Failed to unlink project (${n.status})`);await eb()},[j,eb]),t1=(0,s.useMemo)(()=>eE?(0,r.jsx)(ec,{projects:X,selectedProjectId:i,onSelectProject:tZ,onUnlinkProject:t0,sessions:e$,selectedSessionId:o,onSelectSession:tJ,onArchiveSession:tR,onCreateWorkspace:tT}):null,[e$,tR,tZ,tJ,t0,tT,X,i,o,eE]),t4=(0,s.useMemo)(()=>{let t=tC?(0,r.jsxs)("div",{className:"hidden w-fit rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] p-px xl:inline-flex",children:[(0,r.jsx)("button",{type:"button",onClick:()=>ty({projectId:tC.id,workspaceView:"direct"},"replace"),className:`min-h-[31px] rounded-[2px] px-3 text-[13px] ${"direct"===d?"bg-[var(--vk-bg-hover)] text-[var(--vk-text-normal)]":"text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]"}`,children:"Direct launch"}),(0,r.jsx)("button",{type:"button",onClick:()=>ty({projectId:tC.id,workspaceView:"board"},"replace"),className:`min-h-[31px] rounded-[2px] px-3 text-[13px] ${"board"===d?"bg-[var(--vk-bg-hover)] text-[var(--vk-text-normal)]":"text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]"}`,children:"Board view"})]}):null;return"board"===d?(0,r.jsx)(eu,{projectId:i,bridgeId:j,defaultAgent:tG,agentOptions:tO,projectSessions:tA,projectLabel:tC?.id??i,headerAccessory:t,onOpenSession:tJ}):(0,r.jsx)(ek,{prompt:eO,setPrompt:eB,selectedAgent:tG,setSelectedAgent:eF,agentStates:tB,modelSelection:e_,setModelSelection:eT,modelAccess:tz.modelAccess,runtimeModelCatalogs:tq,agentOptions:tO,projects:X,bridges:k,selectedBridgeId:p,setSelectedBridgeId:u,requiresPairedDeviceScope:e,selectedProjectId:i,onSelectProject:tZ,projectLabel:i??"All projects",hasProject:X.length>0,creating:eD,error:tj,onOpenAddWorkspace:tT,onOpenAgentSetup:tF,onCreate:tD})},[tO,tB,k,eD,tD,e_,tF,tT,X,tA,tC,o,tJ,eO,tG,tz.modelAccess,e,tq,p,i,eB,tj,d,ty]),t3=(0,s.useMemo)(()=>{if(!tC)return t4;let e=({fullWidth:e=!1,compact:t=!1}={})=>(0,r.jsxs)("div",{className:`inline-flex ${e?"w-full":"w-fit"} rounded-[6px] border border-[var(--vk-border)] ${t?"p-0.5":"p-1"}`,children:[(0,r.jsx)("button",{type:"button",onClick:()=>ty({projectId:tC.id,workspaceView:"direct"},"replace"),className:`${t?"min-h-[30px] px-3 text-[12px]":"min-h-[32px] px-3 text-[13px]"} flex-1 rounded-[4px] ${"direct"===d?"bg-[var(--vk-bg-active)] text-[var(--vk-text-strong)]":"text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]"}`,children:"Direct launch"}),(0,r.jsx)("button",{type:"button",onClick:()=>ty({projectId:tC.id,workspaceView:"board"},"replace"),className:`${t?"min-h-[30px] px-3 text-[12px]":"min-h-[32px] px-3 text-[13px]"} flex-1 rounded-[4px] ${"board"===d?"bg-[var(--vk-bg-active)] text-[var(--vk-text-strong)]":"text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]"}`,children:"Board view"})]});if("board"===d){let t={"--dispatcher-panel-width":`${tp}px`},n=!tl,a=!n||"board"===ti,l=!n||"chat"===ti,s=n&&null===o,i=tl&&td&&null===o,c=null!==o||!td;return(0,r.jsxs)("div",{style:t,className:"relative flex h-full min-h-0 flex-1 flex-col overflow-hidden",children:[n?(0,r.jsx)("div",{className:"border-b border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-3 py-2 xl:hidden",children:(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[e({fullWidth:!0,compact:!0}),s?(({fullWidth:e=!1,compact:t=!1}={})=>(0,r.jsxs)("div",{className:`inline-flex ${e?"w-full":"w-fit"} rounded-[6px] border border-[var(--vk-border)] ${t?"p-0.5":"p-1"}`,children:[(0,r.jsxs)("button",{type:"button",onClick:()=>{to("board"),ty({projectId:tC.id,workspaceView:"board"},"replace")},"aria-pressed":"board"===d&&"board"===ti,className:`inline-flex flex-1 items-center justify-center rounded-[4px] font-medium transition-colors ${t?"min-h-[30px] gap-1 px-2.5 text-[11px]":"min-h-[34px] gap-1.5 px-3 text-[12px]"} ${"board"===d&&"board"===ti?"bg-[var(--vk-bg-active)] text-[var(--vk-text-strong)]":"text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]"}`,children:[(0,r.jsx)(x.A,{className:`${t?"h-3 w-3":"h-3.5 w-3.5"} shrink-0`}),(0,r.jsx)("span",{children:"Board"})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>{to("chat"),ty({projectId:tC.id,workspaceView:"board"},"replace")},"aria-pressed":"board"===d&&"chat"===ti,className:`inline-flex flex-1 items-center justify-center rounded-[4px] font-medium transition-colors ${t?"min-h-[30px] gap-1 px-2.5 text-[11px]":"min-h-[34px] gap-1.5 px-3 text-[12px]"} ${"board"===d&&"chat"===ti?"bg-[var(--vk-bg-active)] text-[var(--vk-text-strong)]":"text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]"}`,children:[(0,r.jsx)(m.A,{className:`${t?"h-3 w-3":"h-3.5 w-3.5"} shrink-0`}),(0,r.jsx)("span",{children:"Dispatcher"})]})]}))({fullWidth:!0,compact:!0}):null]})}):null,(0,r.jsxs)("div",{className:"relative flex min-h-0 flex-1 flex-col overflow-hidden xl:flex-row",children:[(0,r.jsx)("div",{className:`${a?"block":"hidden"} min-h-0 min-w-0 flex-1 overflow-hidden xl:block`,children:t4}),c?(0,r.jsx)("div",{className:"absolute bottom-0 right-[var(--dispatcher-panel-width)] top-0 z-20 hidden w-2 translate-x-1/2 cursor-col-resize xl:block",onMouseDown:e=>{e.preventDefault(),tm(!0)},"aria-hidden":"true",children:(0,r.jsx)("div",{className:"mx-auto h-full w-px bg-transparent transition-colors hover:bg-[var(--vk-border)]"})}):null,(0,r.jsxs)("div",{className:`${l?"flex":"hidden xl:flex"} ${i?"flex-1 min-h-0 xl:h-auto xl:max-h-none xl:w-[56px] xl:flex-none xl:min-h-0":"flex-1 min-h-[min(360px,50dvh)] xl:w-[var(--dispatcher-panel-width)] xl:flex-none xl:min-h-0"} flex-col overflow-hidden border-t border-[var(--vk-border)] bg-[var(--vk-bg-panel)] xl:border-l xl:border-t-0`,children:[n&&l&&null!==o?(0,r.jsx)("div",{className:"flex items-center border-b border-[var(--vk-border)] px-3 py-2 xl:hidden",children:(0,r.jsxs)("button",{type:"button",onClick:()=>to("board"),className:"inline-flex items-center gap-1.5 rounded-[4px] px-2 py-1 text-[12px] font-medium text-[var(--vk-text-muted)] transition-colors hover:bg-[var(--vk-bg-hover)] hover:text-[var(--vk-text-strong)]",children:[(0,r.jsx)(f.A,{className:"h-3.5 w-3.5 shrink-0"}),(0,r.jsx)("span",{children:"Back to board"})]})}):null,o?tS?(0,r.jsx)("div",{className:"relative min-h-0 h-full min-w-0 flex-1 overflow-hidden",children:tt.map(e=>{let t=e===o,n=t?tS:tf.get(e)??null;return n&&n.projectId===tC.id?(0,r.jsx)("div",{"aria-hidden":!t,className:t?"relative z-10 h-full min-w-0":"pointer-events-none absolute inset-0 overflow-hidden opacity-0 select-none",children:(0,r.jsx)(ed,{sessionId:e,initialSession:n,bridgeId:j,active:t,suppressPreviewAutoOpen:t&&th.current===e,immersiveMobileMode:t&&tE})},e):null})}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center bg-[var(--vk-bg-panel)] text-[13px] text-[var(--vk-text-muted)]",children:"Loading session workspace..."}):(0,r.jsx)(ex,{projectId:tC.id,bridgeId:j,defaultAgent:tG,modelAccess:tz.modelAccess,runtimeModelCatalogs:tq,collapsed:i,onToggleCollapsed:tY})]})]})]})}return(0,r.jsxs)("div",{className:"flex h-full min-h-0 flex-col overflow-hidden",children:[(0,r.jsx)("div",{className:"border-b border-[var(--vk-border)] bg-[var(--vk-bg-panel)]/70 px-3 py-3 sm:px-4",children:(0,r.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("p",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--vk-text-muted)]",children:"Project Workspace"}),(0,r.jsxs)("p",{className:"mt-1 truncate text-[14px] text-[var(--vk-text-strong)]",children:[tC.id," \xb7 ",tC.defaultBranch||"main"]})]}),(0,r.jsx)("div",{className:"hidden xl:inline-flex",children:e()}),(0,r.jsx)("div",{className:"xl:hidden",children:e({fullWidth:!0,compact:!0})})]})}),(0,r.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:t4})]})},[ti,td,tp,tS,j,tY,tE,tt,ty,tG,tC,tA,o,tf,tl,t4,d]),t2=(0,s.useMemo)(()=>R?(0,r.jsx)("div",{className:"flex h-full min-h-0 flex-1 items-center justify-center bg-[var(--vk-bg-main)] px-4",children:(0,r.jsxs)("div",{className:"w-full max-w-md rounded-[12px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-5 py-5 text-center shadow-[0_18px_50px_rgba(0,0,0,0.18)]",children:[(0,r.jsx)("div",{className:"mx-auto flex h-11 w-11 items-center justify-center rounded-full border border-[color:color-mix(in_srgb,var(--vk-accent)_30%,transparent)] bg-[color:color-mix(in_srgb,var(--vk-accent)_12%,transparent)] text-[var(--vk-accent)]",children:(0,r.jsx)(v.A,{className:"h-5 w-5 animate-spin"})}),(0,r.jsx)("h2",{className:"mt-4 text-[18px] font-medium text-[var(--vk-text-strong)]",children:"Reconnecting paired laptop"}),(0,r.jsx)("p",{className:"mt-2 text-[14px] leading-6 text-[var(--vk-text-muted)]",children:"Waiting for the selected laptop to report online before loading its projects and sessions."})]})}):o&&("board"!==d||null===i)?(0,r.jsx)("div",{className:"relative min-h-0 h-full min-w-0 flex-1 overflow-hidden",children:tt.map(e=>{let t=e===o,n=t?tN:tf.get(e)??null;return(0,r.jsx)("div",{"aria-hidden":!t,className:t?"relative z-10 h-full min-w-0":"pointer-events-none absolute inset-0 overflow-hidden opacity-0 select-none",children:(0,r.jsx)(ed,{sessionId:e,initialSession:n,bridgeId:j,active:t,suppressPreviewAutoOpen:t&&th.current===e,immersiveMobileMode:t&&tE,onOpenSidebar:eA})},e)})}):null!==i?(0,r.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:t3}):(0,r.jsx)("div",{className:"flex h-full min-h-0 w-full flex-1 overflow-hidden",children:(0,r.jsx)(ep,{projects:X,sessions:e$,onCreateWorkspace:tT,onSelectSession:tJ})}),[e$,tt,t3,tN,o,tJ,tT,X,i,tf,R,eA,d]);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(z.G,{mobileSidebarOpen:eN,desktopSidebarOpen:eC,onToggleSidebar:eA,hideMobileSidebarToggle:tE,sidebar:t1,children:[tE?null:(0,r.jsx)(G.V,{title:tM,onOpenPreferences:tX,rightContent:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:`inline-flex items-center rounded-full border px-2 py-0.5 text-[11px] font-medium ${tP}`,title:tU,children:tL}),(0,r.jsx)(V.J,{})]})}),(0,r.jsxs)("div",{className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden ${tE?"bg-[#060404]":""}`,children:[ez?(0,r.jsx)("div",{className:"border-b border-[var(--vk-red)]/35 bg-[color:color-mix(in_srgb,var(--vk-red)_12%,var(--vk-bg-panel))] px-3 py-2 text-[13px] text-[var(--vk-red)] sm:px-4",children:(0,r.jsxs)("div",{className:"flex items-start gap-2",children:[(0,r.jsx)("p",{className:"min-w-0 flex-1",children:ez}),(0,r.jsx)("button",{type:"button",onClick:()=>eG(null),className:"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-[4px] text-[var(--vk-red)]/80 hover:bg-[var(--vk-red)]/10 hover:text-[var(--vk-red)]","aria-label":"Dismiss workspace action error",children:(0,r.jsx)(b.A,{className:"h-4 w-4"})})]})}):null,t2]})]}),eV?(0,r.jsx)(em,{open:eV,onClose:tQ,onCreate:tW,creating:eJ,error:eQ,defaultAgent:tG,agentOptions:tO,modelAccess:tz.modelAccess,runtimeModelCatalogs:tq,bridgeId:j}):null,e9||tH?(0,r.jsx)(eh,{open:e9,mode:tH?"onboarding":"settings",creating:e3,error:e5,current:tz,projectCount:X.length,agentOptions:tO,agentStates:tB,runtimeModelCatalogs:tq,onRepositoriesChanged:eb,onOnboardingComplete:({needsProject:e})=>{e&&te(!0)},onOpenAgentSetup:tF,onClose:tK,onSave:t_,bridgeId:j}):null]})}c.A,p.A,u.A,x.A,m.A,h.A,g.A,g.A,p.A,[{id:"vscode",label:"VS Code"},{id:"vscode-insiders",label:"VS Code Insiders"},{id:"cursor",label:"Cursor"},{id:"windsurf",label:"Windsurf"},{id:"intellij-idea",label:"IntelliJ IDEA"},{id:"zed",label:"Zed"},{id:"xcode",label:"Xcode"},{id:"antigravity",label:"Antigravity"},{id:"custom",label:"Custom"}].filter(e=>"custom"!==e.id),c.A,o.mWn,d.$$9,o.i4$,c.A;let ek=(0,s.memo)(function({prompt:e,setPrompt:t,selectedAgent:n,setSelectedAgent:a,agentStates:l,modelSelection:o,setModelSelection:d,modelAccess:c,runtimeModelCatalogs:p,agentOptions:u,projects:x,bridges:m,selectedBridgeId:f,setSelectedBridgeId:M,requiresPairedDeviceScope:$,selectedProjectId:L,onSelectProject:U,projectLabel:O,hasProject:B,creating:q,error:F,onOpenAddWorkspace:_,onOpenAgentSetup:T,onCreate:D}){let R=(0,s.useMemo)(()=>{let e=new Map(E.BO.map((e,t)=>[e,t]));return[...u].sort((t,n)=>{let r=e.get((0,I.q)(t))??Number.MAX_SAFE_INTEGER,a=e.get((0,I.q)(n))??Number.MAX_SAFE_INTEGER;return r!==a?r-a:eg(t).localeCompare(eg(n))})},[u]),W=eg(n),H=l[(0,I.q)(n)]??null,z=(0,s.useMemo)(()=>[...x].sort((e,t)=>e.id.localeCompare(t.id)),[x]),G=L??z[0]?.id??null,V=(0,s.useMemo)(()=>z.find(e=>e.id===G)??null,[G,z]),Z=(0,s.useMemo)(()=>m.filter(e=>e.connected),[m]),Q=(0,s.useMemo)(()=>!f||Z.some(e=>e.bridgeId===f),[Z,f]),[K,Y]=(0,s.useState)([]),[ee,et]=(0,s.useState)(!1),[en,er]=(0,s.useState)(""),[el,es]=(0,s.useState)(""),[ei,eo]=(0,s.useState)([]),[ed,ec]=(0,s.useState)(!1),[ep,eu]=(0,s.useState)(!1),[ex,em]=(0,s.useState)(!1),[eh,eb]=(0,s.useState)(!1),[ew,ej]=(0,s.useState)("default"),[ek,ey]=(0,s.useState)([]),[eN,eC]=(0,s.useState)(!1),[eA,eS]=(0,s.useState)(null);(0,s.useEffect)(()=>{if(!V){Y([]),er(""),et(!1);return}Y([]),er(V.defaultBranch.trim()||"main"),et(!1)},[V]),(0,s.useEffect)(()=>{if(!G){eo([]),es(""),ec(!1);return}eo([]),es(""),ec(!1)},[G]);let eI=(0,s.useCallback)(async()=>{if(!V)return;let e=V.defaultBranch.trim()||"main";if(!V.path?.trim()){Y([e]),er(t=>t.trim().length>0?t:e);return}et(!0);try{let t=new URLSearchParams({path:V.path}),n=await fetch((0,P.S)(`/api/workspaces/branches?${t.toString()}`,f)),r=await n.json().catch(()=>null),a=Array.isArray(r?.branches)?r.branches.filter(e=>"string"==typeof e&&e.trim().length>0):[],l="string"==typeof r?.defaultBranch&&r.defaultBranch.trim().length>0?r.defaultBranch.trim():e,s=a.length>0?a:[l];Y(s),er(e=>e.trim().length>0&&s.includes(e)?e:l)}catch{Y([e]),er(e)}finally{et(!1)}},[f,V]),eE=(0,s.useCallback)(async()=>{if(G){ec(!0);try{let e=await fetch((0,P.S)(`/api/boards?projectId=${encodeURIComponent(G)}`,f)),t=await e.json().catch(()=>null);if(!e.ok)throw Error(t?.error??`Failed to load tasks: ${e.status}`);let n=(Array.isArray(t?.columns)?t.columns:[]).flatMap(e=>Array.isArray(e.tasks)?e.tasks:[]),r=new Set,a=n.filter(e=>{let t=ef(e);return!(!t||r.has(t))&&(r.add(t),!0)});eo(a),es(e=>a.some(t=>ef(t)===e)?e:"")}catch{eo([]),es("")}finally{ec(!1)}}},[G,f]);(0,s.useEffect)(()=>{!ex||ee||K.length>0||eI()},[ee,ex,K.length,eI]),(0,s.useEffect)(()=>{!ep||ed||ei.length>0||eE()},[ei.length,eE,ed,ep]);let eM=(0,s.useMemo)(()=>(0,ea.Ik)(n,c,p),[c,p,n]),e$=(0,s.useMemo)(()=>ei.find(e=>ef(e)===el)??null,[ei,el]),eL=(0,ea.xb)(o)??"",eU=(0,s.useMemo)(()=>{let e=new Set,t=[],r=eL.trim();for(let n of eM)e.has(n.id)||(e.add(n.id),t.push(n));return r&&!e.has(r)&&(e.add(r),t.unshift({id:r,label:function(e,t){let n=t.trim(),r=(0,I.q)(e);if(!n)return n;if("claude-code"===r){let e=n.toLowerCase();if("opus"===e)return"Claude Opus";if("sonnet"===e)return"Claude Sonnet";if("haiku"===e)return"Claude Haiku";let t=e.match(/^claude-(sonnet|opus|haiku)-(\d+)-(\d+)(?:-\d{8})?$/);if(t){let e=t[1];return`Claude ${e[0]?.toUpperCase()+e.slice(1)} ${t[2]}.${t[3]}`}}return n.split(/[-_]+/g).filter(Boolean).map(e=>"gpt"===e.toLowerCase()?"GPT":/^\d+(?:\.\d+)?$/.test(e)?e:e[0]?.toUpperCase()+e.slice(1)).join("-")}(n,r),description:"Current selected model.",access:[]})),t},[eM,n,eL]),eP=(0,s.useMemo)(()=>!H||H.ready||eL?eL?eU.find(e=>e.id===eL)?.label??eL:"Default":"Setup required",[eU,H,eL]),eO=(0,s.useMemo)(()=>(0,ea.iL)(n,c,p,eL),[c,p,n,eL]),eB=(0,ea.aB)(o)??"",eq=(0,s.useMemo)(()=>{let e=eO.find(e=>e.id===eB);return e?e.label:eB||(eO[0]?.label??"Default")},[eO,eB]),eF="z-50 min-w-[240px] max-w-[calc(100vw-32px)] rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] p-2 shadow-[0_18px_50px_rgba(0,0,0,0.35)] sm:max-w-none",e_=`${eF} max-h-[min(360px,50vh)] overflow-y-auto`,eT="flex min-h-[44px] cursor-default items-center gap-2 rounded-[3px] px-3 py-2 text-[14px] leading-[21px] text-[var(--vk-text-normal)] outline-none hover:bg-[var(--vk-bg-hover)] focus:bg-[var(--vk-bg-hover)] sm:min-h-[36px]",eD=[{id:"default",label:"Default",icon:g.A},{id:"auto",label:"Auto",icon:w.A},{id:"ask",label:"Ask",icon:j.A},{id:"plan",label:"Plan",icon:k.A}],eR=eD.find(e=>e.id===ew)??eD[0],eW="launchpad-attachment-input",eH=q||eN,ez=e=>{let t=e.repo?.trim();if(t){let e=t.split("/").filter(Boolean),n=e[e.length-1]?.replace(/\.git$/i,"");if(n)return n}return e.id},eG=V?ez(V):null,eV=V?`${eG} \xb7 ${en||V.defaultBranch||"main"}`:B?O:"Select project",eZ=e$?.taskRef?.trim()||e$?.issueId?.trim()||e$?.id||"",eJ=e$?ev(e$.text):"Choose a task, bug, or issue from this project's board",eX=V?.id??G??null,eQ=(0,s.useCallback)(e=>{let t=Array.from(e.currentTarget.files??[]);if(e.currentTarget.value="",!t.length)return;let n=new Set(ek.map(e=>`${e.name}:${e.size}:${e.lastModified}`)),r=t.filter(e=>!n.has(`${e.name}:${e.size}:${e.lastModified}`));r.length>0&&ey(e=>[...e,...r]),eS(null)},[ek]),eK=(0,s.useCallback)(e=>{ey(t=>t.filter((t,n)=>n!==e))},[]),eY=(0,s.useCallback)(async()=>{let e;if(eS(null),!eX||!V)return D({projectId:eX??void 0,...eh?{baseBranch:en||V?.defaultBranch||void 0}:{branch:en||V?.defaultBranch||void 0},issueId:el.trim()||void 0,bridgeId:f||void 0,useWorktree:eh,permissionMode:ew});eC(!0),eS(null);try{ek.length>0&&(e=await (0,X.P)({files:ek,projectId:V.id,taskRef:el.trim()||void 0,bridgeId:f||void 0}))}catch(e){return eS(e instanceof Error?e.message:"Failed to upload attachment"),!1}finally{eC(!1)}let t=await D({projectId:eX??void 0,...eh?{baseBranch:en||V.defaultBranch||void 0}:{branch:en||V.defaultBranch||void 0},issueId:el.trim()||void 0,bridgeId:f||void 0,useWorktree:eh,permissionMode:ew,...e&&e.length>0?{attachments:e}:{}});return t&&(ey([]),eS(null)),t},[el,eX,D,ew,en,V,V?.defaultBranch,f,ek,eh]);return(0,s.useEffect)(()=>{ey([]),eS(null)},[eX]),(0,r.jsx)("section",{className:"flex h-full min-h-0 items-start justify-center overflow-auto bg-[var(--vk-bg-main)] px-3 py-4 sm:items-center sm:px-6 sm:py-6",children:(0,r.jsxs)("div",{className:"w-full max-w-[768px]",children:[(0,r.jsx)("h1",{className:"pb-4 text-center text-[30px] font-medium leading-[34px] tracking-[-0.7px] text-[var(--vk-text-strong)] sm:text-[36px] sm:leading-[40px] sm:tracking-[-0.9px]",children:"What would you like to work on?"}),f?null:(0,r.jsxs)("div",{className:"mb-4 flex items-start gap-2 rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-3 py-2 text-[12px] leading-[18px] text-[var(--vk-text-muted)]",children:[(0,r.jsx)(h.A,{className:"mt-0.5 h-[14px] w-[14px] shrink-0"}),(0,r.jsx)("span",{children:$?"Pair or reconnect a laptop to browse workspaces and launch coding agents from the web dashboard.":"Showing projects and sessions from the local backend. Pair a laptop and select it here to browse that device instead."})]}),(0,r.jsxs)("div",{className:"mx-auto w-full rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] p-px",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-2 border-b border-[var(--vk-border)] px-2 pb-[9px] pt-2 sm:flex-row sm:items-center",children:[(0,r.jsxs)("div",{className:"flex min-w-0 items-center gap-2 sm:flex-1",children:[(0,r.jsx)(J.N,{seed:{label:n},className:"h-[25px] w-[25px] shrink-0 border-none bg-transparent"}),(0,r.jsxs)(i.bL,{children:[(0,r.jsx)(i.l9,{asChild:!0,children:(0,r.jsxs)("button",{type:"button",className:"inline-flex h-[31px] min-w-0 max-w-full items-center rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-[9px] py-[5px] text-[14px] leading-[21px] text-[var(--vk-text-normal)] outline-none hover:bg-[var(--vk-bg-hover)] data-[state=open]:bg-[var(--vk-bg-hover)] sm:max-w-[280px]","aria-label":"Select agent",children:[(0,r.jsx)("span",{className:"min-w-0 flex-1 truncate pr-1 text-left",children:W}),(0,r.jsx)(y.A,{className:"h-3 w-3 shrink-0 text-[var(--vk-text-muted)]"})]})}),(0,r.jsx)(i.ZL,{children:(0,r.jsxs)(i.UC,{align:"start",sideOffset:6,className:e_,children:[(0,r.jsx)("p",{className:"px-3 pb-1 text-[14px] font-semibold leading-[21px] text-[var(--vk-text-muted)]",children:"Agents"}),R.map(e=>{let t=e===n,s=l[(0,I.q)(e)]??null;return(0,r.jsxs)(i.q7,{onSelect:()=>a(e),className:eT,children:[(0,r.jsx)(J.N,{seed:{label:e},className:"h-6 w-6 border-none bg-transparent"}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("div",{children:eg(e)}),s?.ready?null:(0,r.jsx)("div",{className:"truncate text-[12px] leading-[16px] text-[var(--vk-text-muted)]",children:s?.installed?"Setup required":"Not installed"})]}),(0,r.jsx)("span",{className:"ml-auto inline-flex h-4 w-4 items-center justify-center text-[var(--vk-text-strong)]",children:t?(0,r.jsx)(N.A,{className:"h-4 w-4"}):null})]},e)})]})})]})]}),(0,r.jsxs)(i.bL,{onOpenChange:eu,children:[(0,r.jsx)(i.l9,{asChild:!0,children:(0,r.jsxs)("button",{type:"button",disabled:!G,className:"flex h-[31px] w-full min-w-0 items-center rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-[9px] py-[5px] text-left disabled:cursor-not-allowed disabled:opacity-50 sm:w-[240px] sm:shrink-0","aria-label":"Select task",children:[(0,r.jsx)("span",{className:`min-w-0 flex-1 truncate text-[14px] leading-[21px] ${eZ?"text-[var(--vk-text-normal)]":"text-[var(--vk-text-muted)]"}`,children:eZ||"No task"}),(0,r.jsx)(y.A,{className:"h-3 w-3 shrink-0 text-[var(--vk-text-muted)]"})]})}),(0,r.jsx)(i.ZL,{children:(0,r.jsxs)(i.UC,{align:"end",side:"bottom",sideOffset:6,className:e_,children:[(0,r.jsx)("p",{className:"px-3 pb-1 text-[14px] font-semibold leading-[21px] text-[var(--vk-text-muted)]",children:"Tasks"}),(0,r.jsx)("p",{className:"px-3 pb-2 text-[12px] leading-[16px] text-[var(--text-faint)]",children:eJ}),(0,r.jsxs)(i.q7,{onSelect:()=>es(""),className:eT,children:[(0,r.jsx)("span",{children:"No linked task"}),(0,r.jsx)("span",{className:"ml-auto inline-flex h-4 w-4 items-center justify-center text-[var(--vk-text-strong)]",children:el?null:(0,r.jsx)(N.A,{className:"h-4 w-4"})})]}),ed?(0,r.jsx)("div",{className:"px-3 py-2 text-[12px] leading-[18px] text-[var(--vk-text-muted)]",children:"Loading board tasks..."}):ei.length>0?ei.map(e=>{let t=ef(e),n=ev(e.text),a=[e.type,e.priority].filter(Boolean).join(" \xb7 ");return(0,r.jsxs)(i.q7,{onSelect:()=>es(t),className:`${eT} min-w-[320px] items-start`,children:[(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("div",{className:"truncate",children:e.taskRef?.trim()||n}),(0,r.jsxs)("div",{className:"truncate text-[12px] leading-[16px] text-[var(--text-faint)]",children:[e.taskRef?.trim()?n:t,a?` \xb7 ${a}`:""]})]}),(0,r.jsx)("span",{className:"ml-auto inline-flex h-4 w-4 items-center justify-center text-[var(--vk-text-strong)]",children:el===t?(0,r.jsx)(N.A,{className:"h-4 w-4"}):null})]},t)}):(0,r.jsx)("div",{className:"px-3 py-2 text-[12px] leading-[18px] text-[var(--vk-text-muted)]",children:"No existing tasks were found for this project."})]})})]})]}),(0,r.jsx)("div",{className:"rounded-[3.5px]",children:(0,r.jsxs)("div",{className:"flex flex-col gap-3 p-2",children:[(0,r.jsxs)("div",{className:"relative w-full",children:[(0,r.jsx)("textarea",{value:e,onChange:e=>t(e.target.value),placeholder:"Optional launch prompt. Leave empty to open the native CLI.",rows:1,className:"min-h-[24px] w-full resize-none bg-transparent pr-16 text-[16px] leading-[24px] text-[var(--vk-text-normal)] outline-none placeholder:text-[var(--vk-text-muted)]"}),(0,r.jsxs)("label",{htmlFor:eW,className:`absolute right-[18px] top-0 inline-flex h-[24px] w-[24px] items-center justify-center rounded-[4px] ${eX?"text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]":"cursor-not-allowed opacity-50"}`,children:[(0,r.jsx)("input",{id:eW,type:"file",accept:"*/*",multiple:!0,onChange:eQ,disabled:!eX||eH,className:"hidden"}),(0,r.jsx)(C.A,{className:"h-[14px] w-[14px]"})]}),(0,r.jsx)("button",{type:"button","aria-label":"Preview",className:"absolute right-0 top-0 inline-flex h-[24px] w-[24px] items-center justify-center rounded-[4px] text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]",children:(0,r.jsx)(A.A,{className:"h-[14px] w-[14px]"})})]}),ek.length>0?(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:ek.map((e,t)=>(0,r.jsxs)("span",{className:"inline-flex max-w-full items-center gap-1 rounded-[999px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-2 py-1 text-[11px] text-[var(--vk-text-muted)]",children:[(0,r.jsx)("span",{className:"max-w-[160px] truncate",title:e.name,children:e.name}),(0,r.jsx)("button",{type:"button","aria-label":`Remove attachment ${e.name}`,onClick:()=>eK(t),className:"inline-flex h-[14px] w-[14px] items-center justify-center rounded-full text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]",children:(0,r.jsx)(b.A,{className:"h-3 w-3"})})]},`${e.name}-${e.size}-${e.lastModified}-${t}`))}):null,(0,r.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[(0,r.jsxs)("div",{className:"flex min-w-0 flex-1 flex-wrap items-center gap-x-1 gap-y-2",children:[(0,r.jsxs)(i.bL,{children:[(0,r.jsx)(i.l9,{asChild:!0,children:(0,r.jsx)("button",{type:"button",className:"inline-flex h-[29px] w-[29px] items-center justify-center rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)]","aria-label":"Select workspace or project",children:(0,r.jsx)(g.A,{className:"h-[15px] w-[15px]"})})}),(0,r.jsx)(i.ZL,{children:(0,r.jsxs)(i.UC,{align:"start",sideOffset:6,className:e_,children:[(0,r.jsx)("p",{className:"px-3 pb-1 text-[14px] font-semibold leading-[21px] text-[var(--vk-text-muted)]",children:"Projects"}),z.map(e=>{let t=ez(e),n=e.id!==t?e.id:e.path?.trim()||e.repo?.trim()||null;return(0,r.jsxs)(i.q7,{onSelect:()=>U(e.id),className:`${eT} min-w-[280px] items-start`,children:[(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("div",{className:"truncate",children:t}),n?(0,r.jsx)("div",{className:"truncate text-[12px] leading-[16px] text-[var(--text-faint)]",children:n}):null]}),(0,r.jsx)("span",{className:"ml-auto inline-flex h-4 w-4 items-center justify-center text-[var(--vk-text-strong)]",children:e.id===G?(0,r.jsx)(N.A,{className:"h-4 w-4"}):null})]},e.id)}),(0,r.jsx)(i.wv,{className:"my-1 h-px bg-[var(--vk-border)]"}),(0,r.jsxs)(i.q7,{onSelect:_,className:eT,children:[(0,r.jsx)(S.A,{className:"h-4 w-4"}),(0,r.jsx)("span",{children:"Add Workspace"})]})]})})]}),eO.length>0?(0,r.jsxs)(i.bL,{children:[(0,r.jsx)(i.l9,{asChild:!0,children:(0,r.jsxs)("button",{type:"button","aria-label":"Select reasoning effort",className:"inline-flex h-[29px] items-center gap-[4px] rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-[9px] py-[5px] text-[14px] leading-[21px] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)] disabled:cursor-not-allowed disabled:opacity-60",children:[(0,r.jsx)("span",{children:eq}),(0,r.jsx)(y.A,{className:"h-[10px] w-[10px] text-[var(--vk-text-muted)]"})]})}),(0,r.jsx)(i.ZL,{children:(0,r.jsxs)(i.UC,{align:"start",sideOffset:6,className:eF,children:[(0,r.jsx)("p",{className:"px-3 pb-1 text-[14px] font-semibold leading-[21px] text-[var(--vk-text-muted)]",children:"Reasoning"}),eO.map(e=>(0,r.jsxs)(i.q7,{onSelect:()=>d({...o,reasoningEffort:e.id}),className:eT,children:[(0,r.jsx)("span",{children:e.label}),(0,r.jsx)("span",{className:"ml-auto inline-flex h-4 w-4 items-center justify-center text-[var(--vk-text-strong)]",children:eB===e.id?(0,r.jsx)(N.A,{className:"h-4 w-4"}):null})]},e.id))]})})]}):null,(0,r.jsxs)(i.bL,{children:[(0,r.jsx)(i.l9,{asChild:!0,children:(0,r.jsxs)("button",{type:"button",className:"inline-flex h-[29px] items-center gap-[4px] rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-[9px] py-[5px] text-[14px] leading-[21px] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)] disabled:cursor-not-allowed disabled:opacity-60",children:[(0,r.jsx)("span",{children:eP}),(0,r.jsx)(y.A,{className:"h-[10px] w-[10px] text-[var(--vk-text-muted)]"})]})}),(0,r.jsx)(i.ZL,{children:(0,r.jsxs)(i.UC,{align:"start",sideOffset:6,className:eF,children:[(0,r.jsx)("p",{className:"px-3 pb-1 text-[14px] font-semibold leading-[21px] text-[var(--vk-text-muted)]",children:"Model"}),(0,r.jsxs)(i.q7,{onSelect:()=>d((0,ea.c0)(n,c,p,V?.agentModel,V?.agentReasoningEffort)),className:eT,children:[(0,r.jsx)("span",{children:"Default"}),(0,r.jsx)("span",{className:"ml-auto inline-flex h-4 w-4 items-center justify-center text-[var(--vk-text-strong)]",children:eL?null:(0,r.jsx)(N.A,{className:"h-4 w-4"})})]}),eU.map(e=>(0,r.jsxs)(i.q7,{onSelect:()=>{var t;let r;return t=e.id,r=(0,ea.iL)(n,c,p,t),void d({catalogModel:t,customModel:"",reasoningEffort:r.some(e=>e.id===o.reasoningEffort)?o.reasoningEffort:(0,ea.YS)(n,c,p,t)})},className:eT,children:[(0,r.jsx)("span",{children:e.label}),(0,r.jsx)("span",{className:"ml-auto inline-flex h-4 w-4 items-center justify-center text-[var(--vk-text-strong)]",children:eL===e.id?(0,r.jsx)(N.A,{className:"h-4 w-4"}):null})]},e.id)),0===eU.length?(0,r.jsx)("div",{className:"px-3 py-2 text-[12px] leading-[18px] text-[var(--vk-text-muted)]",children:"Models will appear here after the selected agent is installed and its runtime catalog is detected."}):null,H&&!H.ready?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.wv,{className:"my-1 h-px bg-[var(--vk-border)]"}),(0,r.jsx)("button",{type:"button",onClick:()=>T(n),className:"flex w-full items-center rounded-[3px] px-3 py-2 text-left text-[13px] text-[var(--vk-orange)] transition hover:bg-[var(--vk-bg-hover)]",children:H.installed?"Open setup":"Open install guide"})]}):null]})})]}),(0,r.jsxs)(i.bL,{children:[(0,r.jsx)(i.l9,{asChild:!0,children:(0,r.jsxs)("button",{type:"button",className:"inline-flex h-[29px] items-center gap-[4px] rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-[9px] py-[5px] text-[14px] leading-[21px] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)]",children:[(0,r.jsx)("span",{children:eR.label}),(0,r.jsx)(y.A,{className:"h-[10px] w-[10px] text-[var(--vk-text-muted)]"})]})}),(0,r.jsx)(i.ZL,{children:(0,r.jsxs)(i.UC,{align:"start",sideOffset:6,className:eF,children:[(0,r.jsx)("p",{className:"px-3 pb-1 text-[14px] font-semibold leading-[21px] text-[var(--vk-text-muted)]",children:"Permissions"}),eD.map(({id:e,label:t,icon:n})=>(0,r.jsxs)(i.q7,{onSelect:()=>ej(e),className:eT,children:[(0,r.jsx)(n,{className:"h-4 w-4"}),(0,r.jsx)("span",{children:t}),(0,r.jsx)("span",{className:"ml-auto inline-flex h-4 w-4 items-center justify-center text-[var(--vk-text-strong)]",children:ew===e?(0,r.jsx)(N.A,{className:"h-4 w-4"}):null})]},e))]})})]}),Z.length>0?(0,r.jsxs)("label",{className:"inline-flex h-[29px] max-w-[260px] items-center gap-[6px] rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-[9px] py-[5px] text-[14px] leading-[21px] text-[var(--vk-text-normal)]",children:[(0,r.jsx)(h.A,{className:"h-[14px] w-[14px] text-[var(--vk-text-muted)]"}),(0,r.jsxs)("select",{value:f,onChange:e=>M(e.target.value),className:"min-w-0 flex-1 bg-transparent text-[14px] text-[var(--vk-text-normal)] outline-none",children:[$?null:(0,r.jsx)("option",{value:"",children:"Local backend"}),Z.map(e=>(0,r.jsxs)("option",{value:e.bridgeId,children:[e.hostname," \xb7 ",e.os]},e.bridgeId))]})]}):(0,r.jsxs)("div",{className:"inline-flex h-[29px] items-center gap-[6px] rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-[9px] py-[5px] text-[14px] leading-[21px] text-[var(--vk-text-muted)]",children:[(0,r.jsx)(h.A,{className:"h-[14px] w-[14px]"}),(0,r.jsx)("span",{children:f&&!Q?"Waiting for selected device":$?"No device connected":"Local backend"})]}),(0,r.jsxs)(i.bL,{onOpenChange:em,children:[(0,r.jsx)(i.l9,{asChild:!0,children:(0,r.jsx)("button",{type:"button",disabled:!V,className:"inline-flex min-h-[29px] max-w-[320px] items-center justify-center truncate text-[14px] leading-[21px] text-[var(--vk-text-normal)] hover:text-[var(--vk-text-strong)] disabled:cursor-not-allowed disabled:opacity-50",children:eV})}),(0,r.jsx)(i.ZL,{children:(0,r.jsxs)(i.UC,{align:"start",side:"bottom",sideOffset:6,avoidCollisions:!1,className:e_,children:[(0,r.jsx)("p",{className:"px-3 pb-1 text-[14px] font-semibold leading-[21px] text-[var(--vk-text-muted)]",children:"Branch"}),eG?(0,r.jsx)("p",{className:"px-3 pb-2 text-[12px] leading-[16px] text-[var(--text-faint)]",children:eG}):null,ee?(0,r.jsx)("div",{className:"px-3 py-2 text-[14px] leading-[21px] text-[var(--vk-text-muted)]",children:"Loading branches..."}):K.map(e=>(0,r.jsxs)(i.q7,{onSelect:()=>er(e),className:eT,children:[(0,r.jsx)("span",{children:e}),(0,r.jsx)("span",{className:"ml-auto inline-flex h-4 w-4 items-center justify-center text-[var(--vk-text-strong)]",children:en===e?(0,r.jsx)(N.A,{className:"h-4 w-4"}):null})]},e))]})})]})]}),(0,r.jsx)("div",{className:"flex w-full justify-end sm:w-auto",children:(0,r.jsx)("button",{type:"button",onClick:eY,disabled:eH||!G,className:"inline-flex min-h-[29px] items-center justify-center rounded-[3px] bg-[var(--vk-bg-hover)] px-[8px] py-[6.5px] text-[16px] leading-[16px] text-[var(--vk-text-strong)] transition-colors hover:bg-[var(--vk-bg-active)] disabled:cursor-not-allowed disabled:opacity-50",children:eH?(0,r.jsx)(v.A,{className:"h-4 w-4 animate-spin"}):"Launch"})})]}),H&&!H.ready?(0,r.jsx)("div",{className:"rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-3 py-2 text-[13px] text-[var(--vk-text-normal)]",children:(0,r.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsxs)("p",{className:"text-[13px] text-[var(--vk-text-strong)]",children:[W," is not ready on this machine."]}),(0,r.jsx)("p",{className:"pt-0.5 text-[12px] text-[var(--vk-text-muted)]",children:H.installed?"Finish login or local setup to load models and start streaming sessions.":"Install the CLI first, then its models and authentication state will appear here."})]}),(0,r.jsx)("button",{type:"button",onClick:()=>T(n),className:"inline-flex h-[29px] items-center justify-center rounded-[3px] border border-[var(--vk-border)] px-3 text-[12px] text-[var(--vk-orange)] hover:bg-[var(--vk-bg-hover)]",children:H.installed?"Open setup":"Open install"})]})}):null,(0,r.jsxs)("label",{className:"flex items-start gap-2 rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-2 py-2 text-[13px] text-[var(--vk-text-normal)]",children:[(0,r.jsx)("input",{type:"checkbox",checked:eh,onChange:e=>eb(e.target.checked),className:"mt-0.5 h-4 w-4 rounded border border-[var(--vk-border)] bg-transparent accent-[var(--vk-orange)]"}),(0,r.jsxs)("span",{children:["Use worktree isolation",(0,r.jsx)("span",{className:"block text-[11px] text-[var(--vk-text-muted)]",children:"If unchecked, the session runs directly on the selected branch in the local repo."})]})]})]})})]}),F&&(0,r.jsx)("p",{className:"pt-2 text-[12px] text-[var(--status-error)]",children:F}),eA&&(0,r.jsx)("p",{className:"pt-2 text-[12px] text-[var(--status-error)]",children:eA})]})})})},85905:(e,t,n)=>{"use strict";n.d(t,{P:()=>l});var r=n(31404);function a(e){return e&&"object"==typeof e?e:null}async function l({files:e,projectId:t,taskRef:n,bridgeId:s,preferAbsolute:i=!0}){if(!e.length)return[];let o=t.trim();if(!o)throw Error("Project id is required to upload attachments");let d=new FormData;d.append("projectId",o);let c=n?.trim();for(let t of(c&&d.append("taskRef",c),e))d.append("files",t);let p=await fetch((0,r.S)("/api/attachments",s),{method:"POST",body:d}),u=await p.json().catch(()=>null);if(!p.ok){let t=1===e.length?e[0]?.name??"attachment":`${e.length} attachments`;throw Error(u?.error??`Failed to upload ${t}`)}let x=(Array.isArray(u?.files)?u.files:u?[u]:[]).map(e=>(function(e,t){let n=a(e);if(!n)return null;let r=a(n.attachment);for(let e of t?[n.absolutePath,n.path,n.filePath,r?.absolutePath,r?.path,r?.filePath]:[n.path,n.absolutePath,n.filePath,r?.path,r?.absolutePath,r?.filePath])if("string"==typeof e&&e.trim().length>0)return e.trim();return null})(e,i)).filter(e=>!!e);if(0===x.length)throw Error("Attachment upload succeeded but did not return a usable file path");return x}},88272:(e,t,n)=>{"use strict";n.d(t,{c0:()=>x,Z3:()=>s,Ik:()=>d,iL:()=>c,YS:()=>p,ZA:()=>u,xb:()=>m,aB:()=>h});var r=n(76196),a=n(5739);function l(e){return"openclaw"===(0,a.q)(e)}function s(){return{catalogModel:"",customModel:"",reasoningEffort:""}}function i(e,t){return t[(0,a.q)(e)]??null}function o(e){if(!e)return[];let t=[],n=new Set;for(let r of Object.values(e.modelsByAccess))if(Array.isArray(r))for(let e of r)!e?.id||n.has(e.id)||(n.add(e.id),t.push(e));return t}function d(e,t,n){if(l(e))return[];let a=i(e,n),s=(0,r.Tk)(e,t),d=a&&s?a.modelsByAccess[s]??[]:[],c=o(a);if(c.length>0){let e=[],t=new Set;for(let n of[...d,...c])!n?.id||t.has(n.id)||(t.add(n.id),e.push(n));return e}return(0,r.d8)(e,t)}function c(e,t,n,a){if(l(e))return[];let s=i(e,n),o=(0,r.Tk)(e,t);if(s){if(!s)return[];let e=a?.trim();return e&&s.reasoningOptionsByModel?.[e]?.length?s.reasoningOptionsByModel[e]??[]:o?s.reasoningOptionsByAccess?.[o]??[]:[]}return(0,r.u6)(e,t)}function p(e,t,n,a){if(l(e))return"";let s=i(e,n),o=(0,r.Tk)(e,t);return s?function(e,t,n){if(!e)return null;let r=t?.trim();return r&&e.defaultReasoningByModel?.[r]?e.defaultReasoningByModel[r]??null:n?e.defaultReasoningByAccess?.[n]??null:null}(s,a,o)??"":(0,r.DZ)(e,t)??""}function u(e,t){if(l(e))return"";let n=i(e,t),a=n?.customModelPlaceholder.trim();if(a)return a;let s=(0,r.yM)(e)?.label??"agent";return`Enter exact ${s} model id`}function x(e,t,n,a,u){if(l(e))return s();let x=a?.trim()??"",m=u?.trim().toLowerCase()??"",h=i(e,n),g=d(e,t,n),f=function(e,t,n){if(l(e))return"";let a=i(e,n),s=(0,r.Tk)(e,t);if(a)return(a&&s?a.defaultModelByAccess[s]??null:null)??o(a)[0]?.id??"";return(0,r.O$)(e,t)??""}(e,t,n),v=o(h).length>0,b=r=>{let a=c(e,t,n,r);return m.length>0&&a.some(e=>e.id===m)?m:p(e,t,n,r)};if(x.length>0){if(g.some(e=>e.id===x))return{catalogModel:x,customModel:"",reasoningEffort:b(x)};if(!v)return{catalogModel:f,customModel:x,reasoningEffort:b(x)}}return{catalogModel:f,customModel:"",reasoningEffort:b(f)}}function m(e){let t=e.customModel.trim();if(t.length>0)return t;let n=e.catalogModel.trim();return n.length>0?n:void 0}function h(e){let t=e.reasoningEffort.trim().toLowerCase();return t.length>0?t:void 0}}},e=>{e.O(0,[3036,691,3357,5587,3051,1257,9083,9703,1964,587,1968,7358],()=>e(e.s=12529)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2799],{22799:(e,t,r)=>{r.r(t),r.d(t,{SessionPreview:()=>W});var n=r(54568),a=r(7620),l=r(59706),s=r(22996),i=r(69863),o=r(75646),c=r(92007),d=r(97380),m=r(58299),x=r(82797),u=r(45601),v=r(89603),p=r(56050),h=r(30307),b=r(60527),f=r(20732),g=r(63264),w=r(90986),k=r(76081),j=r(11791),N=r(46916);let y=(0,a.forwardRef)(({className:e,children:t,viewportClassName:r,...a},l)=>(0,n.jsxs)(j.bL,{ref:l,className:(0,N.cn)("relative overflow-hidden",e),...a,children:[(0,n.jsx)(j.LM,{className:(0,N.cn)("h-full w-full rounded-[inherit]",r),children:t}),(0,n.jsx)(E,{}),(0,n.jsx)(j.OK,{})]}));y.displayName="ScrollArea";let E=(0,a.forwardRef)(({className:e,orientation:t="vertical",...r},a)=>(0,n.jsx)(j.Ze,{ref:a,orientation:t,className:(0,N.cn)("flex touch-none select-none","vertical"===t&&"h-full w-2.5 border-l border-l-transparent p-px","horizontal"===t&&"h-2.5 flex-col border-t border-t-transparent p-px",e),...r,children:(0,n.jsx)(j.zi,{className:"relative flex-1 rounded-full bg-[color:color-mix(in_srgb,var(--border-strong)_75%,transparent)] hover:bg-[var(--border-strong)]"})}));E.displayName="ScrollBar";var C=r(64357);let $=/(?:127\.0\.0\.1|0\.0\.0\.0|localhost|::1|\[::1\])/i;function U(e){return e.find(e=>(function(e){try{let t=new URL(e);return $.test(t.hostname)}catch{return!1}})(e))??null}var L=r(33507);let R=new Map([["Backspace","Backspace"],["Delete","Delete"],["Enter","Enter"],["Tab","Tab"],["Escape","Escape"],["ArrowUp","ArrowUp"],["ArrowDown","ArrowDown"],["ArrowLeft","ArrowLeft"],["ArrowRight","ArrowRight"],["Home","Home"],["End","End"],["PageUp","PageUp"],["PageDown","PageDown"],[" ","Space"]]);function M(e){let t=Date.parse(e);return Number.isNaN(t)?e:new Intl.DateTimeFormat("en-US",{hour:"numeric",minute:"2-digit",second:"2-digit",timeZone:"UTC"}).format(new Date(t))}function A(e,t=120){return e.length<=t?e:`${e.slice(0,t-1)}…`}function S(e,t=180){let r=A((e??"").replace(/\s+/g," ").trim(),t);return r?`"${r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:null}function F(e){return e.map(e=>e?.trim()).filter(e=>!!e).join("; ")}function _(e,t){return[`[${e}]`,...t.map(e=>e?.trim()).filter(e=>!!e)].join("\n")}function T(e,t){return{inlineText:F(["[Browser selection]",`selector=${S(e.selector,220)}`,`tag=${e.tag}`,e.role?`role=${e.role}`:null,e.name?`name=${S(e.name,140)}`:null,e.text?`text=${S(e.text,180)}`:null,e.frameName?`frame=${S(e.frameName,120)}`:null,t?`page=${S(t,220)}`:null]),draftText:_("Browser selection",[t?`Page: ${t}`:null,`Frame: ${e.frameName} (${e.frameUrl})`,`Selector: ${e.selector}`,`Tag: ${e.tag}`,e.role?`Role: ${e.role}`:null,e.name?`Name: ${e.name}`:null,e.text?`Text: ${e.text}`:null,e.htmlPreview?`HTML preview: ${e.htmlPreview}`:null]),successMessage:"Queued the selected element for terminal input."}}function D(e,t,r,n){let a=t.slice("console"===e?-8:-10),l=a.map(t=>{let r=[t.level,S(t.message,120)];return"network"===e&&(r.unshift(t.method??"GET"),r.push("number"==typeof t.status?String(t.status):null),r.push(t.url?S(t.url,120):null)),r.filter(Boolean).join(" ")});return{inlineText:F(["console"===e?"[Browser console]":"[Browser network]",r?`page=${S(r,220)}`:null,n?`selected=${S(n.selector,180)}`:null,`entries=${S(l.join(" | "),520)}`]),draftText:_("console"===e?"Browser console logs":"Browser network logs",[r?`Page: ${r}`:null,n?`Selected element: ${n.selector}`:null,...a.map(t=>"console"===e?`- ${M(t.timestamp)} ${t.level}: ${t.message}`:`- ${M(t.timestamp)} ${t.method??"GET"} ${t.status??"-"} ${t.url??t.message}`)]),successMessage:"console"===e?"Queued recent console logs for terminal input.":"Queued recent network logs for terminal input."}}let I=/(?:127\.0\.0\.1|0\.0\.0\.0|localhost|::1|\[::1\])/i;function P(e){let t=e?.trim();if(!t)return null;try{return new URL(t).origin}catch{return null}}function O(e){return e?"Yes":"No"}function H(e,t="None"){return e?.trim()||t}function z({label:e,value:t,hint:r,monospace:a=!1}){return(0,n.jsxs)("div",{className:"rounded-[8px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-3 py-3",children:[(0,n.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[var(--vk-text-muted)]",children:e}),(0,n.jsx)("div",{className:(0,N.cn)("mt-1 text-[13px] font-medium text-[var(--vk-text-normal)]",a?"break-all font-mono text-[11px] leading-5":null),children:t}),(0,n.jsx)("div",{className:"mt-1 text-[11px] leading-5 text-[var(--vk-text-muted)]",children:r})]})}function B({section:e,onCopy:t}){return(0,n.jsxs)("div",{className:"overflow-hidden rounded-[10px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)]",children:[(0,n.jsxs)("div",{className:"border-b border-[var(--vk-border)] px-3 py-3",children:[(0,n.jsx)("div",{className:"text-[11px] uppercase tracking-wide text-[var(--vk-text-muted)]",children:e.title}),(0,n.jsx)("div",{className:"mt-1 text-[11px] leading-5 text-[var(--vk-text-muted)]",children:e.description})]}),(0,n.jsx)("div",{className:"divide-y divide-[var(--vk-border)]",children:e.fields.map(r=>(0,n.jsxs)("div",{className:"flex items-start gap-3 px-3 py-2.5",children:[(0,n.jsx)("div",{className:"w-28 shrink-0 text-[10px] uppercase tracking-wide text-[var(--vk-text-muted)]",children:r.label}),(0,n.jsx)("div",{className:(0,N.cn)("min-w-0 flex-1 text-[12px] text-[var(--vk-text-normal)]",r.monospace?"break-all font-mono text-[11px] leading-5":"leading-5"),children:r.value}),r.copyValue?(0,n.jsx)(k.$,{type:"button",variant:"ghost",size:"sm",className:"h-7 shrink-0",onClick:()=>{t(r.copyValue,`${r.label} copied to clipboard.`)},children:(0,n.jsx)(l.A,{className:"h-3.5 w-3.5"})}):null]},`${e.id}-${r.label}`))})]})}function W({sessionId:e,active:t,onQueueTerminalInsert:r,onConnectionChange:j}){let[E,$]=(0,a.useState)(null),[S,F]=(0,a.useState)([]),[_,V]=(0,a.useState)(!1),[q,K]=(0,a.useState)(!1),[X,G]=(0,a.useState)(!0),[Q,Y]=(0,a.useState)(!0),[Z,J]=(0,a.useState)(null),[ee,et]=(0,a.useState)(null),[er,en]=(0,a.useState)(null),[ea,el]=(0,a.useState)(null),[es,ei]=(0,a.useState)("navigate"),[eo,ec]=(0,a.useState)("elements"),[ed,em]=(0,a.useState)(null),[ex,eu]=(0,a.useState)(""),[ev,ep]=(0,a.useState)(!1),[eh,eb]=(0,a.useState)(!1),[ef,eg]=(0,a.useState)({naturalWidth:0,naturalHeight:0,renderedWidth:0,renderedHeight:0}),ew=(0,a.useRef)(null),ek=(0,a.useRef)(Promise.resolve()),ej=(0,a.useRef)(null),eN=(0,a.useRef)(null),ey=(0,a.useRef)(Date.now()),eE=(0,a.useRef)(null),eC=(0,a.useRef)(null),e$=(0,a.useRef)(null),eU=(0,a.useRef)(0),eL=(0,a.useRef)(0),eR=(0,a.useRef)(0),eM=(0,a.useRef)(0),eA=(0,a.useRef)(0),eS=(0,a.useRef)(0),eF=(0,a.useRef)(0),e_=(0,a.useRef)(0),eT=(0,a.useRef)(0),[eD,eI]=(0,a.useState)(!0),eP=t&&eD,eO=U(E?.candidateUrls??[]),eH=ev&&eh,ez=!ev||eh;(0,a.useEffect)(()=>{let e=()=>{eI(!document.hidden)};return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e)}},[]),(0,a.useEffect)(()=>{if("function"!=typeof window.matchMedia)return;let e=window.matchMedia("(max-width: 1023px)"),t=()=>{ep(e.matches)};return(t(),"function"==typeof e.addEventListener)?(e.addEventListener("change",t),()=>{e.removeEventListener("change",t)}):(e.addListener(t),()=>{e.removeListener(t)})},[]),(0,a.useEffect)(()=>{ey.current=Date.now(),eE.current=null,eC.current=null,e$.current=null,eU.current=0,eL.current=0,eR.current=0,eM.current=0,eA.current=0,eS.current=0,eF.current=0,e_.current=0,eT.current=0,eb(!1)},[e]),(0,a.useEffect)(()=>{ev||eb(!1)},[ev]);let eB=(0,a.useCallback)(async(t="manual")=>{eU.current+=1,"poll"===t&&(eR.current+=1);try{let t=await fetch(`/api/sessions/${encodeURIComponent(e)}/preview`,{cache:"no-store"}),r=await t.json().catch(()=>null);if(!t.ok)throw Error(r&&"error"in r?r.error??"Failed to load preview state":`Failed to load preview state: ${t.status}`);let n=Date.now();null===eE.current&&(eE.current=n),$(r),J(null),eu(e=>e.trim().length>0&&e!==r.currentUrl?e:r.currentUrl??U(r.candidateUrls)??r.candidateUrls[0]??e)}catch(e){throw eL.current+=1,e}},[e]),eW=(0,a.useCallback)(async t=>{eM.current+=1,K(!0),J(null);try{let r=await fetch(`/api/sessions/${encodeURIComponent(e)}/preview`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await r.json().catch(()=>null);if(!r.ok)throw n&&"object"==typeof n&&"status"in n&&n.status&&$(n.status),Error(n&&"error"in n?n.error??"Preview command failed":`Preview command failed: ${r.status}`);return $(n),n}catch(e){throw eA.current+=1,e}finally{K(!1)}},[e]),eV=(0,a.useCallback)((e,t)=>{ek.current=ek.current.catch(()=>void 0).then(async()=>{try{await eW(e)}catch(e){J(e instanceof Error?e.message:t)}})},[eW]),eq=(0,a.useCallback)(async t=>{if(!E?.connected)return void F([]);eS.current+=1,V(!0);try{let r=new URLSearchParams;t&&r.set("frameId",t),Q&&r.set("interactiveOnly","1");let n=await fetch(`/api/sessions/${encodeURIComponent(e)}/preview/dom?${r.toString()}`,{cache:"no-store"}),a=await n.json().catch(()=>null);if(!n.ok)throw Error(a&&"error"in a?a.error??"Failed to inspect DOM":`Failed to inspect DOM: ${n.status}`);F(a.nodes)}catch(e){eF.current+=1,J(e instanceof Error?e.message:"Failed to inspect DOM"),F([])}finally{V(!1)}},[Q,e,E?.connected]);(0,a.useEffect)(()=>{if(!eP)return;let e=!0;(async()=>{try{await eB("initial")}catch(t){e&&J(t instanceof Error?t.message:"Failed to load preview")}finally{e&&G(!1)}})();let t=window.innerWidth<768,r=window.setInterval(()=>{eB("poll").catch(t=>{e&&J(t instanceof Error?t.message:"Failed to refresh preview")})},t?8e3:4e3);return()=>{e=!1,window.clearInterval(r)}},[eB,eP]),(0,a.useEffect)(()=>{E?.connected?eP&&eq(E.activeFrameId):F([])},[Q,eq,eP,E?.activeFrameId,E?.connected,E?.screenshotKey]),(0,a.useEffect)(()=>{if(!eP)return;if(E?.connected){ew.current=null;return}if(em(null),!eO)return;let e=ew.current?.attemptedAt??NaN,t=ew.current?.candidate??null,r=Date.now();t===eO&&Number.isFinite(e)&&r-e<5e3||(ew.current={candidate:eO,attemptedAt:r},e_.current+=1,eW({command:"connect",url:eO}).catch(e=>{J(e instanceof Error?e.message:"Failed to connect preview")}))},[eO,eW,eP,E?.connected]),(0,a.useEffect)(()=>{if(E?.connected){let e=Date.now();e$.current=e,null===eC.current&&(eC.current=e)}j?.(!!(eP&&E?.connected&&E?.screenshotKey))},[j,eP,E?.connected,E?.screenshotKey]),(0,a.useEffect)(()=>{},[t,S.length,eD,eo,es,e,eP,E?.connected,E?.screenshotKey]);let eK=(0,a.useMemo)(()=>E?.connected?`/api/sessions/${encodeURIComponent(e)}/preview/screenshot?ts=${encodeURIComponent(E.screenshotKey)}`:null,[e,E?.connected,E?.screenshotKey]),eX=eO??E?.candidateUrls[0]??null,eG=(0,a.useMemo)(()=>E?.frames.find(e=>e.id===E.activeFrameId)??null,[E?.activeFrameId,E?.frames]),eQ=(0,a.useMemo)(()=>E?.frames.find(e=>e.isMain)??null,[E?.frames]),eY=(0,a.useMemo)(()=>P(E?.currentUrl),[E?.currentUrl]),eZ=(0,a.useMemo)(()=>{let e=E?.selectedElement;return[{id:"page",title:"Page",description:"Current page identity and live preview worker state.",fields:[{label:"Title",value:H(E?.title,"Untitled")},{label:"Current URL",value:H(E?.currentUrl),copyValue:E?.currentUrl??null,monospace:!0},{label:"Current origin",value:H(eY),copyValue:eY,monospace:!0},{label:"Connected",value:O(E?.connected)},{label:"Last error",value:H(E?.lastError,"None")}]},{id:"navigation",title:"Navigation",description:"History state and frame orientation for the current page.",fields:[{label:"Can go back",value:O(E?.canGoBack)},{label:"Can go forward",value:O(E?.canGoForward)},{label:"Active frame",value:H(eG?.name)},{label:"Main frame",value:H(eQ?.name)},{label:"Frame count",value:`${E?.frames.length??0}`}]},{id:"worker",title:"Worker",description:"Reported candidates, logs, and worker render metadata.",fields:[{label:"Candidate URLs",value:`${E?.candidateUrls.length??0}`},{label:"Auto-connect",value:H(eO??eX),copyValue:eO??eX??null,monospace:!0},{label:"Screenshot key",value:H(E?.screenshotKey,"Unavailable"),monospace:!0},{label:"Console rows",value:`${E?.consoleLogs.length??0}`},{label:"Network rows",value:`${E?.networkLogs.length??0}`}]},{id:"selection",title:"Selection",description:"Current element context captured from inspect mode.",fields:[{label:"Selector",value:H(e?.selector),copyValue:e?.selector??null,monospace:!0},{label:"Tag",value:H(e?.tag)},{label:"Role",value:H(e?.role)},{label:"Frame",value:H(e?.frameName)},{label:"Text",value:H(e?.text)}]}]},[eG?.name,eO,eY,eQ?.name,eX,E]),eJ=(0,a.useMemo)(()=>(E?.candidateUrls??[]).map(e=>{let t=P(e);return{url:e,origin:t,isLoopback:function(e){try{return I.test(new URL(e).hostname)}catch{return!1}}(e),isPreferred:e===eO,isConnected:!!(E?.currentUrl&&(E.currentUrl===e||t&&eY===t)),isTunnelOrigin:!!(E?.tunnelLocalOrigin&&t===E.tunnelLocalOrigin)}}),[eO,eY,E?.candidateUrls,E?.currentUrl,E?.tunnelLocalOrigin]),e0=(0,a.useMemo)(()=>eJ.filter(e=>e.isLoopback).length,[eJ]),e1=(0,a.useMemo)(()=>eJ.find(e=>e.isConnected)??null,[eJ]),e2=null!==ea,e3=!!eG?.isMain,e5=(0,a.useMemo)(()=>{let e=E?.selectedElement?.bounds;if(!E?.selectedElement||!e||!eQ||E.selectedElement.frameId!==eQ.id||!ef.naturalWidth||!ef.naturalHeight||!ef.renderedWidth||!ef.renderedHeight)return null;let t=ef.renderedWidth/ef.naturalWidth,r=ef.renderedHeight/ef.naturalHeight;return{left:`${e.x*t}px`,top:`${e.y*r}px`,width:`${Math.max(e.width*t,2)}px`,height:`${Math.max(e.height*r,2)}px`}},[ef,eQ,E?.selectedElement]),e8=(0,a.useCallback)(async(e,t)=>{let r=e?.trim();if(!r)return void et("Nothing to copy yet.");try{await navigator.clipboard.writeText(r),en(t),et(null)}catch{et("Clipboard access is unavailable.")}},[]),e4=(0,a.useCallback)(async e=>{eu(e),J(null);try{await eW({command:"connect",url:e})}catch(e){J(e instanceof Error?e.message:"Failed to connect preview")}},[eW]),e6=(0,a.useCallback)(async()=>{let e=ex.trim();e&&await e4(e)},[e4,ex]),e7=(0,a.useCallback)((e,t,r=!1)=>{em({anchorX:e,anchorY:t,pending:r}),et(null),en(null)},[]),e9=(0,a.useCallback)(e=>{ei(e),"inspect"===e&&ec("elements"),em(null),et(null),en(null)},[]),te=(0,a.useMemo)(()=>{if(!ed)return null;let e=ef.renderedWidth||340,t=ef.renderedHeight||280,r=Math.max(220,t-24);if(e<=520)return{left:"12px",top:`${Math.max(12,t-Math.min(280,r)-12)}px`,width:`${Math.max(e-24,220)}px`,maxHeight:`${r}px`};let n=Math.min(340,Math.max(e-24,240)),a=Math.max(12,e-n-12),l=Math.max(12,t-280-12),s=ed.anchorX+18,i=ed.anchorY+18,o=s>a?Math.max(12,ed.anchorX-n-18):s,c=i>l?Math.max(12,ed.anchorY-280-18):i;return{left:`${Math.min(Math.max(o,12),a)}px`,top:`${Math.min(Math.max(c,12),l)}px`,width:`${n}px`,maxHeight:`${r}px`}},[ef.renderedHeight,ef.renderedWidth,ed]);(0,a.useEffect)(()=>{if(!ed)return;let e=e=>{"Escape"===e.key&&em(null)};return window.addEventListener("keydown",e),()=>{window.removeEventListener("keydown",e)}},[ed]);let tt=(0,a.useCallback)(e=>{if(!ej.current)return null;let t=ej.current.getBoundingClientRect();if(!t.width||!t.height||!ej.current.naturalWidth||!ej.current.naturalHeight)return null;let r=e.clientX-t.left,n=e.clientY-t.top;return{anchorX:r,anchorY:n,x:r/t.width*ej.current.naturalWidth,y:n/t.height*ej.current.naturalHeight}},[]),tr=(0,a.useCallback)(e=>{r(e),et(null),en(e.successMessage)},[r]),tn=(0,a.useCallback)(async(e,t,r,n)=>{e7(r,n,!0);try{let a=await eW({command:"selectAtPoint",x:e,y:t});return e7(r,n,!1),a}catch(e){throw em(null),e}},[e7,eW]),ta=(0,a.useCallback)(async(e,t)=>{let r=Math.max(ef.renderedWidth-44,12);e7(r,12,!0);try{let n=await eW({command:"selectBySelector",selector:e,frameId:t});return e7(r,12,!1),n}catch(e){throw em(null),e}},[ef.renderedWidth,e7,eW]),tl=(0,a.useCallback)(async e=>{if(q)return;let t=tt(e);if(t){if(em(null),et(null),en(null),"navigate"===es){eN.current?.focus({preventScroll:!0});try{await eW({command:"clickAtPoint",x:t.x,y:t.y})}catch(e){J(e instanceof Error?e.message:"Failed to interact with preview")}return}if(e3)try{await tn(t.x,t.y,t.anchorX,t.anchorY)}catch(e){J(e instanceof Error?e.message:"Failed to select element")}}},[q,e3,es,tt,eW,tn]),ts=(0,a.useCallback)(async e=>{if(q||"inspect"!==es||!e3)return;let t=tt(e);if(t){et(null),en(null);try{let e=await tn(t.x,t.y,t.anchorX,t.anchorY);if(!e.selectedElement)throw Error("No element found at the selected point");tr(T(e.selectedElement,e.currentUrl))}catch(e){J(e instanceof Error?e.message:"Failed to queue selected element")}}},[q,e3,es,tr,tt,tn]),ti=(0,a.useCallback)(e=>{if("navigate"!==es||!E?.connected||e.metaKey||e.ctrlKey||e.altKey)return;let t=R.get(e.key);if(t){e.preventDefault(),eV({command:"pressKey",key:t},"Failed to send key to preview");return}1===e.key.length&&(e.preventDefault(),eV({command:"typeText",text:e.key},"Failed to type into preview"))},[es,eV,E?.connected]),to=(0,a.useCallback)(e=>{if("navigate"!==es||!E?.connected)return;let t=e.clipboardData.getData("text");t&&(e.preventDefault(),eV({command:"typeText",text:t},"Failed to paste into preview"))},[es,eV,E?.connected]),tc=(0,a.useCallback)(e=>{if(!E)return void et("Preview state is not loaded yet.");let t=E.consoleLogs.slice(-80),r=E.networkLogs.slice(-80);if("selection"===e&&!E.selectedElement)return void et("Select an element before queueing preview context for terminal input.");if("console"===e&&!t.length)return void et("There are no console logs to send yet.");if("network"===e&&!r.length)return void et("There are no network logs to send yet.");el(e),et(null),en(null);try{let n="selection"===e&&E.selectedElement?T(E.selectedElement,E.currentUrl):"console"===e?D("console",t,E.currentUrl,E.selectedElement):D("network",r,E.currentUrl,E.selectedElement);tr(n),"selection"===e&&em(null)}catch(e){et(e instanceof Error?e.message:"Failed to queue preview context")}finally{el(null)}},[tr,E]),td=(0,a.useCallback)(async()=>{let e=E?.selectedElement?.selector;if(e)try{await navigator.clipboard.writeText(e),en("Selector copied to clipboard."),et(null)}catch{et("Clipboard access is unavailable.")}},[E?.selectedElement?.selector]),tm=(0,n.jsxs)(C.tU,{value:eo,onValueChange:e=>ec(e),className:"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden lg:min-h-0",children:[(0,n.jsx)("div",{className:"border-b border-[var(--vk-border)] px-2 py-2",children:(0,n.jsxs)(C.j7,{className:"w-full justify-start border-0 bg-transparent p-0",children:[(0,n.jsxs)(C.Xi,{value:"elements",children:[(0,n.jsx)(s.A,{className:"h-3.5 w-3.5"}),"Elements"]}),(0,n.jsxs)(C.Xi,{value:"console",children:[(0,n.jsx)(i.A,{className:"h-3.5 w-3.5"}),"Console",(0,n.jsx)(w.E,{variant:"outline",children:E?.consoleLogs.length??0})]}),(0,n.jsxs)(C.Xi,{value:"network",children:[(0,n.jsx)(o.A,{className:"h-3.5 w-3.5"}),"Network",(0,n.jsx)(w.E,{variant:"outline",children:E?.networkLogs.length??0})]}),(0,n.jsxs)(C.Xi,{value:"info",children:[(0,n.jsx)(c.A,{className:"h-3.5 w-3.5"}),"Info"]}),(0,n.jsxs)(C.Xi,{value:"proxies",children:[(0,n.jsx)(d.A,{className:"h-3.5 w-3.5"}),"Proxies"]})]})}),(0,n.jsxs)(C.av,{value:"elements",className:"mt-0 flex min-h-0 flex-1 flex-col overflow-hidden",children:[(0,n.jsxs)("div",{className:"border-b border-[var(--vk-border)] px-3 py-3",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"text-[12px] font-medium text-[var(--vk-text-normal)]",children:"Selected element"}),(0,n.jsx)("div",{className:"text-[11px] text-[var(--vk-text-muted)]",children:"inspect"===es?"Single-click to inspect. Double-click to queue the element for terminal input.":"Switch to Inspect mode to capture element context from the preview."})]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsx)(k.$,{type:"button",variant:Q?"primary":"outline",size:"sm",onClick:()=>Y(e=>!e),children:Q?"Interactive only":"All nodes"}),(0,n.jsxs)(k.$,{type:"button",variant:"ghost",size:"sm",onClick:()=>void td(),disabled:!E?.selectedElement,children:[(0,n.jsx)(l.A,{className:"h-3.5 w-3.5"}),"Copy selector"]}),(0,n.jsxs)(k.$,{type:"button",variant:"primary",size:"sm",onClick:()=>void tc("selection"),disabled:e2||!E?.selectedElement,children:["selection"===ea?(0,n.jsx)(m.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,n.jsx)(x.A,{className:"h-3.5 w-3.5"}),"Queue for terminal"]})]})]}),E?.selectedElement?(0,n.jsxs)("div",{className:"mt-3 rounded-[8px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-3 py-3",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsx)("span",{className:"font-mono text-[12px] text-[var(--vk-text-normal)]",children:E.selectedElement.tag}),E.selectedElement.role?(0,n.jsx)(w.E,{variant:"outline",children:E.selectedElement.role}):null,E.selectedElement.frameName?(0,n.jsx)(w.E,{variant:"outline",children:E.selectedElement.frameName}):null]}),(0,n.jsx)("div",{className:"mt-2 text-[12px] text-[var(--vk-text-normal)]",children:A(E.selectedElement.name||E.selectedElement.text||"Selected element",180)}),(0,n.jsx)("div",{className:"mt-2 break-all font-mono text-[11px] text-[var(--vk-text-muted)]",children:E.selectedElement.selector}),E.selectedElement.htmlPreview?(0,n.jsx)("div",{className:"mt-2 rounded-[6px] border border-dashed border-[var(--vk-border)] px-2.5 py-2 text-[11px] text-[var(--vk-text-muted)]",children:A(E.selectedElement.htmlPreview,260)}):null]}):(0,n.jsx)("div",{className:"mt-3 rounded-[8px] border border-dashed border-[var(--vk-border)] px-3 py-3 text-[12px] text-[var(--vk-text-muted)]",children:"No element selected yet."}),E?.frames.length?(0,n.jsx)("div",{className:"mt-3 flex flex-wrap items-center gap-2",children:E.frames.map(e=>(0,n.jsxs)("button",{type:"button",onClick:()=>{eW({command:"selectFrame",frameId:e.id}).catch(e=>{J(e instanceof Error?e.message:"Failed to select frame")})},className:(0,N.cn)("inline-flex max-w-full items-center gap-2 rounded-[5px] border px-2.5 py-1.5 text-[11px]",E.activeFrameId===e.id?"border-[var(--vk-orange)] bg-[color:color-mix(in_srgb,var(--vk-orange)_10%,transparent)] text-[var(--vk-text-normal)]":"border-[var(--vk-border)] bg-[var(--vk-bg-main)] text-[var(--vk-text-muted)] hover:text-[var(--vk-text-normal)]"),children:[(0,n.jsx)(w.E,{variant:"outline",children:e.isMain?"main":"frame"}),(0,n.jsx)("span",{className:"truncate",children:e.name})]},e.id))}):null]}),(0,n.jsx)(y,{className:"min-h-0 flex-1",viewportClassName:L.VM,children:(0,n.jsx)("div",{className:"space-y-1 p-3",children:_?(0,n.jsxs)("div",{className:"flex items-center gap-2 rounded-[6px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-3 py-3 text-[12px] text-[var(--vk-text-muted)]",children:[(0,n.jsx)(m.A,{className:"h-4 w-4 animate-spin"}),"Inspecting frame DOM…"]}):S.length?S.map((e,t)=>(0,n.jsxs)("button",{type:"button",className:(0,N.cn)("w-full rounded-[6px] border px-3 py-2.5 text-left transition-colors","inspect"===es?"border-[var(--vk-border)] bg-[var(--vk-bg-main)] hover:bg-[var(--vk-bg-hover)]":"cursor-not-allowed border-[var(--vk-border)] bg-[var(--vk-bg-main)] opacity-60"),disabled:"inspect"!==es,onClick:()=>{em(null),et(null),en(null),ta(e.selector,E?.activeFrameId).catch(e=>{J(e instanceof Error?e.message:"Failed to select DOM node")})},onDoubleClick:()=>{et(null),en(null),ta(e.selector,E?.activeFrameId).then(e=>{if(!e.selectedElement)throw Error("Failed to resolve the selected DOM node");tr(T(e.selectedElement,e.currentUrl))}).catch(e=>{J(e instanceof Error?e.message:"Failed to queue DOM node")})},children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsx)("span",{className:"font-mono text-[12px] text-[var(--vk-text-normal)]",children:e.tag}),e.interactive?(0,n.jsx)(w.E,{variant:"warning",children:"interactive"}):null,e.role?(0,n.jsx)(w.E,{variant:"outline",children:e.role}):null]}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-[11px] text-[var(--vk-text-muted)]",children:e.selector}),e.text?(0,n.jsx)("div",{className:"mt-1 text-[12px] text-[var(--vk-text-normal)]",children:A(e.text,180)}):null]},`${e.id??"node"}-${t}-${e.selector}-${e.tag}-${e.text}`)):(0,n.jsx)("div",{className:"rounded-[8px] border border-dashed border-[var(--vk-border)] px-3 py-3 text-[12px] text-[var(--vk-text-muted)]",children:"inspect"===es?"No DOM nodes to show for the current frame yet.":"Switch to Inspect mode to browse the current frame DOM."})})})]}),(0,n.jsxs)(C.av,{value:"console",className:"mt-0 flex min-h-0 flex-1 flex-col overflow-hidden",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-[var(--vk-border)] px-3 py-3",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"text-[12px] font-medium text-[var(--vk-text-normal)]",children:"Console output"}),(0,n.jsx)("div",{className:"text-[11px] text-[var(--vk-text-muted)]",children:"Live browser console events from the preview worker."})]}),(0,n.jsxs)(k.$,{type:"button",variant:"primary",size:"sm",onClick:()=>void tc("console"),disabled:e2||!E?.consoleLogs.length,children:["console"===ea?(0,n.jsx)(m.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,n.jsx)(x.A,{className:"h-3.5 w-3.5"}),"Queue for terminal"]})]}),(0,n.jsx)(y,{className:"min-h-0 flex-1",viewportClassName:L.VM,children:(0,n.jsx)("div",{className:"space-y-1 p-3",children:E?.consoleLogs.length?E.consoleLogs.map(e=>(0,n.jsxs)("div",{className:"rounded-[6px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-3 py-2.5 text-[11px] text-[var(--vk-text-normal)]",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-[10px] uppercase tracking-wide text-[var(--vk-text-muted)]",children:[(0,n.jsx)("span",{children:e.level}),(0,n.jsx)("span",{children:M(e.timestamp)})]}),(0,n.jsx)("div",{className:"mt-1 whitespace-pre-wrap break-all font-mono",children:e.message})]},e.id)):(0,n.jsx)("div",{className:"rounded-[8px] border border-dashed border-[var(--vk-border)] px-3 py-3 text-[12px] text-[var(--vk-text-muted)]",children:"Console output appears here once the page loads."})})})]}),(0,n.jsxs)(C.av,{value:"network",className:"mt-0 flex min-h-0 flex-1 flex-col overflow-hidden",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-[var(--vk-border)] px-3 py-3",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"text-[12px] font-medium text-[var(--vk-text-normal)]",children:"Network requests"}),(0,n.jsx)("div",{className:"text-[11px] text-[var(--vk-text-muted)]",children:"Recent requests captured by the preview worker."})]}),(0,n.jsxs)(k.$,{type:"button",variant:"primary",size:"sm",onClick:()=>void tc("network"),disabled:e2||!E?.networkLogs.length,children:["network"===ea?(0,n.jsx)(m.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,n.jsx)(x.A,{className:"h-3.5 w-3.5"}),"Queue for terminal"]})]}),(0,n.jsx)(y,{className:"min-h-0 flex-1",viewportClassName:L.VM,children:(0,n.jsx)("div",{className:"space-y-1 p-3",children:E?.networkLogs.length?E.networkLogs.map(e=>(0,n.jsxs)("div",{className:"rounded-[6px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-3 py-2.5 text-[11px] text-[var(--vk-text-normal)]",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-[10px] uppercase tracking-wide text-[var(--vk-text-muted)]",children:[(0,n.jsx)("span",{children:e.method??"GET"}),"number"==typeof e.status?(0,n.jsx)("span",{children:e.status}):null,e.resourceType?(0,n.jsx)("span",{children:e.resourceType}):null,(0,n.jsx)("span",{children:M(e.timestamp)})]}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono",children:e.url??e.message})]},e.id)):(0,n.jsx)("div",{className:"rounded-[8px] border border-dashed border-[var(--vk-border)] px-3 py-3 text-[12px] text-[var(--vk-text-muted)]",children:"Network requests appear here after the preview loads."})})})]}),(0,n.jsxs)(C.av,{value:"info",className:"mt-0 flex min-h-0 flex-1 flex-col overflow-hidden",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-[var(--vk-border)] px-3 py-3",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"text-[12px] font-medium text-[var(--vk-text-normal)]",children:"Preview info"}),(0,n.jsx)("div",{className:"text-[11px] text-[var(--vk-text-muted)]",children:"A cleaner snapshot of page, worker, navigation, and element state."})]}),(0,n.jsxs)(k.$,{type:"button",variant:"ghost",size:"sm",onClick:()=>{e8(E?.currentUrl,"Current URL copied to clipboard.")},disabled:!E?.currentUrl,children:[(0,n.jsx)(l.A,{className:"h-3.5 w-3.5"}),"Copy URL"]})]}),(0,n.jsx)(y,{className:"min-h-0 flex-1",viewportClassName:L.VM,children:(0,n.jsxs)("div",{className:"space-y-3 p-3 text-[12px] text-[var(--vk-text-normal)]",children:[(0,n.jsxs)("div",{className:"grid gap-2 sm:grid-cols-2",children:[(0,n.jsx)(z,{label:"Connected",value:E?.connected?"Live":"Idle",hint:E?.currentUrl?A(E.currentUrl,60):"No active page yet"}),(0,n.jsx)(z,{label:"Frames",value:`${E?.frames.length??0}`,hint:eG?.name??"No active frame"}),(0,n.jsx)(z,{label:"Console",value:`${E?.consoleLogs.length??0}`,hint:"Captured browser console rows"}),(0,n.jsx)(z,{label:"Network",value:`${E?.networkLogs.length??0}`,hint:"Recent preview worker requests"})]}),eZ.map(e=>(0,n.jsx)(B,{section:e,onCopy:e8},e.id))]})})]}),(0,n.jsxs)(C.av,{value:"proxies",className:"mt-0 flex min-h-0 flex-1 flex-col overflow-hidden",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-[var(--vk-border)] px-3 py-3",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"text-[12px] font-medium text-[var(--vk-text-normal)]",children:"Proxy and tunnel routing"}),(0,n.jsx)("div",{className:"text-[11px] text-[var(--vk-text-muted)]",children:"Candidate URLs come from the session. Tunnel metadata shows how bridge-backed previews map remote loopback into the local display origin."})]}),(0,n.jsxs)(k.$,{type:"button",variant:"ghost",size:"sm",onClick:()=>{e8(E?.tunnelLocalOrigin??E?.tunnelUrl,"Tunnel mapping copied to clipboard.")},disabled:!E?.tunnelLocalOrigin&&!E?.tunnelUrl,children:[(0,n.jsx)(l.A,{className:"h-3.5 w-3.5"}),"Copy route"]})]}),(0,n.jsx)(y,{className:"min-h-0 flex-1",viewportClassName:L.VM,children:(0,n.jsxs)("div",{className:"space-y-3 p-3 text-[12px] text-[var(--vk-text-normal)]",children:[(0,n.jsxs)("div",{className:"grid gap-2 sm:grid-cols-2",children:[(0,n.jsx)(z,{label:"Candidates",value:`${eJ.length}`,hint:eJ.length?"Reported by the current session":"No targets reported yet"}),(0,n.jsx)(z,{label:"Loopback",value:`${e0}`,hint:e0?"Local dev URLs available":"No local loopback URLs"}),(0,n.jsx)(z,{label:"Tunnel",value:E?.tunnelUrl?"Ready":"None",hint:E?.tunnelLocalOrigin??"No bridge tunnel mapping",monospace:!!E?.tunnelLocalOrigin}),(0,n.jsx)(z,{label:"Current origin",value:eY??"Idle",hint:e1?"Matches the active preview page":"Not connected to a candidate yet",monospace:!!eY})]}),(0,n.jsx)(B,{section:{id:"tunnel-mapping",title:"Tunnel mapping",description:"Bridge previews can expose a remote tunnel while still rendering the equivalent local origin in the browser workspace.",fields:[{label:"Local origin",value:H(E?.tunnelLocalOrigin,"Not set"),copyValue:E?.tunnelLocalOrigin??null,monospace:!0},{label:"Tunnel URL",value:H(E?.tunnelUrl,"Not set"),copyValue:E?.tunnelUrl??null,monospace:!0},{label:"Current origin",value:H(eY),copyValue:eY,monospace:!0}]},onCopy:e8}),(0,n.jsxs)("div",{className:"overflow-hidden rounded-[10px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)]",children:[(0,n.jsxs)("div",{className:"border-b border-[var(--vk-border)] px-3 py-3",children:[(0,n.jsx)("div",{className:"text-[11px] uppercase tracking-wide text-[var(--vk-text-muted)]",children:"Candidate URLs"}),(0,n.jsx)("div",{className:"mt-1 text-[11px] leading-5 text-[var(--vk-text-muted)]",children:"Use connect to load a reported target into the preview browser, or copy the URL or origin for terminal context."})]}),(0,n.jsx)("div",{className:"space-y-2 p-3",children:eJ.length?eJ.map(e=>(0,n.jsxs)("div",{className:"rounded-[8px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-3 py-3",children:[(0,n.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsx)("div",{className:(0,N.cn)("text-[12px] font-medium text-[var(--vk-text-normal)]",e.origin?"truncate":"break-all"),children:e.origin??e.url}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-[11px] text-[var(--vk-text-muted)]",children:e.url})]}),e.isConnected?(0,n.jsx)(w.E,{variant:"success",children:"current"}):null,e.isPreferred?(0,n.jsx)(w.E,{variant:"warning",children:"auto"}):null,e.isTunnelOrigin?(0,n.jsx)(w.E,{variant:"outline",children:"tunnel origin"}):null,(0,n.jsx)(w.E,{variant:"outline",children:e.isLoopback?"loopback":"remote"})]}),(0,n.jsxs)("div",{className:"mt-3 flex flex-wrap items-center gap-2",children:[(0,n.jsxs)(k.$,{type:"button",variant:"primary",size:"sm",onClick:()=>{e4(e.url)},children:[(0,n.jsx)(d.A,{className:"h-3.5 w-3.5"}),"Connect"]}),(0,n.jsxs)(k.$,{type:"button",variant:"outline",size:"sm",onClick:()=>{e8(e.url,"Candidate URL copied to clipboard.")},children:[(0,n.jsx)(l.A,{className:"h-3.5 w-3.5"}),"Copy URL"]}),e.origin?(0,n.jsxs)(k.$,{type:"button",variant:"ghost",size:"sm",onClick:()=>{e8(e.origin,"Candidate origin copied to clipboard.")},children:[(0,n.jsx)(u.A,{className:"h-3.5 w-3.5"}),"Copy origin"]}):null]})]},e.url)):(0,n.jsx)("div",{className:"rounded-[8px] border border-dashed border-[var(--vk-border)] px-3 py-3 text-[12px] text-[var(--vk-text-muted)]",children:"No candidate URLs detected yet."})})]})]})})]})]});return(0,n.jsxs)("div",{className:"flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden rounded-[8px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)]",children:[(0,n.jsx)("div",{className:"shrink-0 border-b border-[var(--vk-border)] px-3 py-3",children:(0,n.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(d.A,{className:"h-4 w-4 text-[var(--vk-text-muted)]"}),(0,n.jsx)("span",{className:"text-[13px] font-medium text-[var(--vk-text-normal)]",children:"Preview browser"})]}),E?.connected?(0,n.jsx)(w.E,{variant:"success",children:"connected"}):(0,n.jsx)(w.E,{variant:"outline",children:"idle"}),eG?(0,n.jsx)(w.E,{variant:"outline",children:eG.isMain?"main frame":"nested frame"}):null,E?.title?(0,n.jsx)(w.E,{variant:"outline",children:A(E.title,40)}):null,ed?.pending?(0,n.jsx)(w.E,{variant:"warning",children:"selecting element…"}):null]}),(0,n.jsxs)("div",{className:"flex flex-col gap-2 lg:flex-row lg:items-center",children:[(0,n.jsxs)("div",{className:"flex min-w-0 flex-1 items-center gap-2 rounded-[6px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-3",children:[(0,n.jsx)(d.A,{className:"h-3.5 w-3.5 shrink-0 text-[var(--vk-text-muted)]"}),(0,n.jsx)("input",{value:ex,onChange:e=>eu(e.target.value),placeholder:eX??"http://127.0.0.1:3000",className:"h-10 min-w-0 flex-1 bg-transparent text-[13px] text-[var(--vk-text-normal)] outline-none placeholder:text-[var(--vk-text-muted)]"})]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsxs)(k.$,{type:"button",variant:"primary",onClick:()=>void e6(),disabled:q||!ex.trim(),children:[q?(0,n.jsx)(m.A,{className:"h-4 w-4 animate-spin"}):(0,n.jsx)(v.A,{className:"h-4 w-4"}),"Connect"]}),(0,n.jsxs)(k.$,{type:"button","aria-label":"Go back",variant:"outline",onClick:()=>void eW({command:"goBack"}).then(e=>{eu(e.currentUrl??"")}).catch(e=>{J(e instanceof Error?e.message:"Failed to go back")}),disabled:!E?.connected||!E?.canGoBack||q,children:[(0,n.jsx)(p.A,{className:"h-3.5 w-3.5"}),(0,n.jsx)("span",{className:"hidden sm:inline",children:"Back"})]}),(0,n.jsxs)(k.$,{type:"button","aria-label":"Go forward",variant:"outline",onClick:()=>void eW({command:"goForward"}).then(e=>{eu(e.currentUrl??"")}).catch(e=>{J(e instanceof Error?e.message:"Failed to go forward")}),disabled:!E?.connected||!E?.canGoForward||q,children:[(0,n.jsx)(h.A,{className:"h-3.5 w-3.5"}),(0,n.jsx)("span",{className:"hidden sm:inline",children:"Forward"})]}),(0,n.jsxs)(k.$,{type:"button","aria-label":"Refresh preview status",variant:"outline",onClick:()=>void eB("manual").catch(e=>{J(e instanceof Error?e.message:"Failed to refresh preview")}),disabled:X||q,children:[(0,n.jsx)(b.A,{className:(0,N.cn)("h-3.5 w-3.5",q&&"animate-spin")}),(0,n.jsx)("span",{className:"hidden sm:inline",children:"Refresh"})]}),(0,n.jsxs)(k.$,{type:"button","aria-label":"Reload preview page",variant:"outline",onClick:()=>void eW({command:"reload"}).catch(e=>{J(e instanceof Error?e.message:"Failed to reload preview")}),disabled:!E?.connected||q,children:[(0,n.jsx)(u.A,{className:"h-3.5 w-3.5"}),(0,n.jsx)("span",{className:"hidden sm:inline",children:"Reload"})]})]})]}),(0,n.jsxs)("div",{className:"flex flex-col gap-2 lg:flex-row lg:items-center lg:justify-between",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1 rounded-[6px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] p-1",children:[(0,n.jsxs)(k.$,{type:"button",size:"sm",variant:"navigate"===es?"primary":"ghost",onClick:()=>e9("navigate"),children:[(0,n.jsx)(v.A,{className:"h-3.5 w-3.5"}),"Navigate"]}),(0,n.jsxs)(k.$,{type:"button",size:"sm",variant:"inspect"===es?"primary":"ghost",onClick:()=>e9("inspect"),children:[(0,n.jsx)(f.A,{className:"h-3.5 w-3.5"}),"Inspect"]})]}),(0,n.jsxs)(k.$,{type:"button",size:"sm",variant:eH?"primary":"outline",className:"lg:hidden",onClick:()=>eb(e=>!e),children:[(0,n.jsx)(s.A,{className:"h-3.5 w-3.5"}),eH?"Hide tools":"Browser tools"]})]}),ev?null:(0,n.jsx)("div",{className:"text-[11px] text-[var(--vk-text-muted)]",children:"navigate"===es?"Navigate mode sends clicks and typing into the running app.":e3?"Inspect mode lets you click once to inspect, double-click to queue for terminal input.":"Inspect mode is limited to the frame DOM list for nested frames."})]}),!E?.connected&&E?.candidateUrls.length&&ez?(0,n.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:E.candidateUrls.map(e=>(0,n.jsxs)("button",{type:"button",className:"inline-flex max-w-full items-center gap-1 rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-2.5 py-1.5 text-left text-[11px] text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)] hover:text-[var(--vk-text-normal)]",onClick:()=>{e4(e)},children:[(0,n.jsx)(d.A,{className:"h-3 w-3 shrink-0"}),(0,n.jsx)("span",{className:"truncate",children:e})]},e))}):null,Z||E?.lastError?(0,n.jsxs)("div",{className:"flex items-start gap-2 rounded-[6px] border border-[color:color-mix(in_srgb,var(--vk-red)_45%,transparent)] bg-[color:color-mix(in_srgb,var(--vk-red)_12%,transparent)] px-3 py-2 text-[12px] text-[var(--vk-red)]",children:[(0,n.jsx)(g.A,{className:"mt-0.5 h-4 w-4 shrink-0"}),(0,n.jsx)("span",{children:Z??E?.lastError})]}):null,er?(0,n.jsx)("div",{className:"rounded-[6px] border border-[color:color-mix(in_srgb,var(--vk-green)_35%,transparent)] bg-[color:color-mix(in_srgb,var(--vk-green)_10%,transparent)] px-3 py-2 text-[12px] text-[var(--vk-green)]",children:er}):null,ee?(0,n.jsx)("div",{className:"rounded-[6px] border border-[color:color-mix(in_srgb,var(--vk-red)_35%,transparent)] bg-[color:color-mix(in_srgb,var(--vk-red)_10%,transparent)] px-3 py-2 text-[12px] text-[var(--vk-red)]",children:ee}):null]})}),(0,n.jsxs)("div",{className:`relative flex min-h-0 min-w-0 flex-1 flex-col lg:grid lg:min-h-0 lg:grid-cols-[minmax(0,1.55fr)_minmax(320px,0.95fr)] ${L.DK}`,children:[(0,n.jsxs)("div",{className:"flex min-h-0 min-w-0 flex-[1.25] flex-col overflow-hidden border-b border-[var(--vk-border)] lg:flex-1 lg:border-b-0 lg:border-r",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-[var(--vk-border)] px-3 py-2 text-[11px] text-[var(--vk-text-muted)]",children:[(0,n.jsx)("div",{className:"min-w-0",children:(0,n.jsx)("div",{className:"truncate text-[var(--vk-text-normal)]",children:E?.currentUrl??eX??"No active preview URL yet"})}),E?.connected?(0,n.jsxs)(w.E,{variant:"outline",children:[E?.frames.length??0," frame",(E?.frames.length??0)===1?"":"s"]}):null]}),(0,n.jsx)("div",{className:L.qg,children:(0,n.jsx)("div",{className:"flex h-full min-h-[min(200px,45vh)] w-full items-center justify-center lg:min-h-[260px]",children:X?(0,n.jsxs)("div",{className:"flex items-center gap-2 text-[13px] text-[var(--vk-text-muted)]",children:[(0,n.jsx)(m.A,{className:"h-4 w-4 animate-spin"}),"Loading preview…"]}):eK?(0,n.jsxs)("div",{ref:eN,tabIndex:E?.connected?0:-1,onKeyDown:ti,onPaste:to,className:`relative flex max-h-full max-w-full items-start justify-center overflow-auto rounded-[10px] outline-none focus-visible:ring-2 focus-visible:ring-[var(--vk-orange)] focus-visible:ring-offset-2 focus-visible:ring-offset-[#0f1012] ${L.hq}`,children:[(0,n.jsx)("img",{ref:ej,src:eK,alt:"Session preview",className:(0,N.cn)("max-h-full max-w-full rounded-[8px] object-contain shadow-[0_18px_36px_rgba(0,0,0,0.28)]","navigate"===es?"cursor-pointer":e3?"cursor-crosshair":"cursor-default"),onClick:e=>void tl(e),onDoubleClick:e=>void ts(e),onLoad:e=>{eT.current+=1;let t=e.currentTarget;eg({naturalWidth:t.naturalWidth,naturalHeight:t.naturalHeight,renderedWidth:t.clientWidth,renderedHeight:t.clientHeight})}}),"inspect"===es&&e5?(0,n.jsx)("div",{className:"pointer-events-none absolute border-2 border-[var(--vk-orange)] bg-[color:color-mix(in_srgb,var(--vk-orange)_18%,transparent)] shadow-[0_0_0_1px_rgba(0,0,0,0.5)]",style:e5}):null,"inspect"===es&&ed&&te?(0,n.jsx)("div",{className:"pointer-events-none absolute z-20 rounded-[10px] border border-[var(--vk-border)] bg-[color:color-mix(in_srgb,var(--vk-bg-panel)_94%,black_6%)] px-3 py-2 text-[11px] text-[var(--vk-text-normal)] shadow-[0_16px_40px_rgba(0,0,0,0.35)] backdrop-blur",style:te,children:ed.pending?"Selecting element…":E?.selectedElement?`${E.selectedElement.tag} \xb7 ${A(E.selectedElement.selector,120)}`:"Selection ready"}):null]}):(0,n.jsx)("div",{className:"max-w-md text-center text-[13px] text-[var(--vk-text-muted)]",children:"Connect a local dev URL or explicit preview URL to start the preview browser. Navigate mode lets you interact with the running app. Inspect mode lets you capture UI context and queue it into terminal input."})})})]}),ev?null:tm]}),ev&&eH?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"absolute inset-0 z-10 bg-black/35 lg:hidden",onClick:()=>eb(!1),"aria-hidden":"true"}),(0,n.jsxs)("div",{className:"absolute inset-x-0 bottom-0 z-20 flex max-h-[min(72vh,36rem)] min-h-[18rem] flex-col overflow-hidden rounded-t-[14px] border border-b-0 border-[var(--vk-border)] bg-[color:color-mix(in_srgb,var(--vk-bg-panel)_96%,black_4%)] shadow-[0_-24px_48px_rgba(0,0,0,0.42)] lg:hidden",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-3 border-b border-[var(--vk-border)] px-3 py-2.5",children:[(0,n.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,n.jsx)(s.A,{className:"h-4 w-4 shrink-0 text-[var(--vk-text-muted)]"}),(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("div",{className:"text-[12px] font-medium text-[var(--vk-text-normal)]",children:"Browser tools"}),(0,n.jsx)("div",{className:"truncate text-[11px] text-[var(--vk-text-muted)]",children:"Hidden by default on mobile so the browser stays front and center."})]})]}),(0,n.jsx)(k.$,{type:"button",variant:"ghost",size:"sm",onClick:()=>eb(!1),children:"Hide"})]}),(0,n.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:tm})]})]}):null]})}},90986:(e,t,r)=>{r.d(t,{E:()=>s});var n=r(54568),a=r(46916);let l={default:"border-[var(--vk-border)] bg-[var(--vk-bg-panel)] text-[var(--vk-text-muted)]",success:"border-transparent bg-transparent text-[var(--vk-green)]",warning:"border-transparent bg-transparent text-[var(--vk-orange)]",error:"border-transparent bg-transparent text-[var(--vk-red)]",info:"border-transparent bg-transparent text-[var(--vk-text-muted)]",outline:"border-[var(--vk-border)] bg-transparent text-[var(--vk-text-muted)]"};function s({variant:e="default",className:t,children:r}){return(0,n.jsx)("span",{className:(0,a.cn)("inline-flex items-center gap-1 rounded-[3px] border px-1.5 py-0.5 text-[11px] leading-none",l[e],t),children:r})}}}]);