@runfusion/fusion 0.40.1 → 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/.vite/manifest.json +68 -68
- package/dist/client/assets/{AgentDetailView-BrETpTDj.js → AgentDetailView-krC0B2O0.js} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor-BP6d1LFG.js → AgentPermissionPolicyEditor-VDXL4XQc.js} +1 -1
- package/dist/client/assets/{AgentsView-COx3draV.js → AgentsView-ChXccELt.js} +3 -3
- package/dist/client/assets/{ChatView-CrVSqQK_.js → ChatView-Dz_xBKit.js} +1 -1
- package/dist/client/assets/{DevServerView-DXQ1LX4H.js → DevServerView-DGOahw1o.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-B_8ICSPl.js → DirectoryPicker-DgqHlxyh.js} +1 -1
- package/dist/client/assets/{DocumentsView-DmNB9rJZ.js → DocumentsView-CbbZwzbH.js} +1 -1
- package/dist/client/assets/{EvalsView-72w3_AO6.js → EvalsView-BL_ue7fJ.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-Be4oaohM.js → ExperimentalAgentOnboardingModal-8H4XAu4O.js} +1 -1
- package/dist/client/assets/{GoalsView-DkEXO_mx.js → GoalsView-CO4FVL3E.js} +1 -1
- package/dist/client/assets/{InsightsView-_-wd4BOJ.js → InsightsView-C5vLvWVE.js} +1 -1
- package/dist/client/assets/{MemoryView-BOCIc8HT.js → MemoryView-BL3W3yOv.js} +1 -1
- package/dist/client/assets/{NodesView-DTQP1j4H.js → NodesView-DfBNNm9c.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-BqaI9GKX.js → PiExtensionsManager-HvSiVeDN.js} +1 -1
- package/dist/client/assets/{PluginManager-DYaVwsXd.js → PluginManager-DIjrlhnU.js} +1 -1
- package/dist/client/assets/{PullRequestView-Dk9a7jRZ.js → PullRequestView-C2jQX8xZ.js} +1 -1
- package/dist/client/assets/{ReliabilityView-B-i5SOoD.js → ReliabilityView-DbqEwoRs.js} +1 -1
- package/dist/client/assets/{ResearchView-C2Gx8jC9.js → ResearchView-C1QghmLI.js} +1 -1
- package/dist/client/assets/{SecretsView-Db2HAGi2.js → SecretsView-Y2MQ-9n5.js} +1 -1
- package/dist/client/assets/{SessionTerminal-DwlNZLlr.js → SessionTerminal-DaTXNT3A.js} +1 -1
- package/dist/client/assets/{SettingsModal-Dje7N0hv.js → SettingsModal-BAzm2kYd.js} +3 -3
- package/dist/client/assets/{SettingsModal-B-d30TVy.js → SettingsModal-DabcZZ6S.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-Cw3RdN83.js → SetupWizardModal-Db-Rxinm.js} +1 -1
- package/dist/client/assets/{SkillsView-BGyynaI4.js → SkillsView-CIEY1-DE.js} +1 -1
- package/dist/client/assets/{StashRecoveryView-CFaU-hym.js → StashRecoveryView-B6iDu5tI.js} +1 -1
- package/dist/client/assets/{TodoView-Djjwcb49.js → TodoView-B8IK_BPM.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-vnXnKvAr.js → WorkflowNodeEditor-DaPyvD_R.js} +1 -1
- package/dist/client/assets/{dashboard-view-DOEa6gWS.js → dashboard-view-Dn4CztR6.js} +1 -1
- package/dist/client/assets/{folder-open-BtEAEp7E.js → folder-open-C9XAaduE.js} +1 -1
- package/dist/client/assets/{index-CW4OzecJ.js → index-CgfrecpF.js} +5 -5
- package/dist/client/assets/{upload-Y9NiLQ9o.js → upload-BRAEugYV.js} +1 -1
- package/dist/client/assets/{users-B13HD4Tp.js → users-BlflbMZ3.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +3 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-
|
|
2
|
-
import{c as jt,A as tt,C as vt,Z as Ha,s as Oa,r as _t,F as Lt,f as $a,a as Da,b as pa,B as It,u as xa,d as wt,e as Va,g as Ba,h as Wa,i as Ua,j as Ft,k as ft,P as Ga,l as Ka,m as Ya,n as Xa,o as Qt,G as qa,S as Za,L as St,T as rt,R as et,X as ea,p as Ja,q as Qa,t as ht,v as es,w as ta,x as ts,y as as,z as me,D as ot,E as ss,M as ns,H as ls,N as aa,I as sa,J as na,K as is,O as At,Q as pt,U as la,V as rs,W as os,Y as cs,_ as ds,$ as ia,a0 as gs,a1 as us,a2 as ms,a3 as xt,a4 as hs,a5 as ra,a6 as ps}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-krC0B2O0.js","assets/vendor-react-D37HfzIf.js","assets/index-CgfrecpF.js","assets/vendor-i18n-CV0mwX_-.js","assets/vendor-reactflow-CRZcPCXF.js","assets/vendor-reactflow-C5ap-Sga.css","assets/vendor-xterm-tcedd2Jt.js","assets/vendor-xterm-LZoznX6r.css","assets/vendor-codemirror-jBKmHyH0.js","assets/index-BHGM5W8a.css","assets/ExperimentalAgentOnboardingModal-8H4XAu4O.js","assets/ExperimentalAgentOnboardingModal-BNpveCEk.css","assets/AgentPermissionPolicyEditor-VDXL4XQc.js","assets/AgentPermissionPolicyEditor-CGxjOr6G.css","assets/AgentDetailView-CY-O6VkV.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{c as jt,A as tt,C as vt,Z as Ha,s as Oa,r as _t,F as Lt,f as $a,a as Da,b as pa,B as It,u as xa,d as wt,e as Va,g as Ba,h as Wa,i as Ua,j as Ft,k as ft,P as Ga,l as Ka,m as Ya,n as Xa,o as Qt,G as qa,S as Za,L as St,T as rt,R as et,X as ea,p as Ja,q as Qa,t as ht,v as es,w as ta,x as ts,y as as,z as me,D as ot,E as ss,M as ns,H as ls,N as aa,I as sa,J as na,K as is,O as At,Q as pt,U as la,V as rs,W as os,Y as cs,_ as ds,$ as ia,a0 as gs,a1 as us,a2 as ms,a3 as xt,a4 as hs,a5 as ra,a6 as ps}from"./index-CgfrecpF.js";import{r as s,j as e,b as xs}from"./vendor-react-D37HfzIf.js";import{u as Me}from"./vendor-i18n-CV0mwX_-.js";import{A as bs,S as vs,E as fs,f as js}from"./ExperimentalAgentOnboardingModal-8H4XAu4O.js";import{U as zt}from"./upload-BRAEugYV.js";import{F as Ns}from"./folder-open-C9XAaduE.js";import"./vendor-reactflow-CRZcPCXF.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.js";/**
|
|
3
3
|
* @license lucide-react v1.7.0 - ISC
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under the ISC license.
|
|
@@ -26,4 +26,4 @@ reportsTo: null
|
|
|
26
26
|
skills:
|
|
27
27
|
- review
|
|
28
28
|
---
|
|
29
|
-
Agent instructions go here...`),value:j,onChange:r=>{x("paste"),S([]),R(r.target.value),H(null)},rows:8,"aria-label":c("agents.manifestContent","Manifest content")})]}),e.jsx("p",{className:"agent-import-file-hint",children:c("agents.currentInput","Current input: {{method}}",{method:l})}),ce&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(rt,{size:14}),ce]})]}),v==="preview"&&e.jsxs("div",{className:"agent-import-preview",children:[e.jsxs("div",{className:"agent-import-company",children:[e.jsx("span",{className:"agent-import-company-label",children:c("agents.company","Company")}),e.jsx("span",{className:"agent-import-company-name",children:$})]}),y.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:y.map((r,f)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(rt,{size:12}),e.jsx("span",{children:r})]},f))}),e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Lt,{size:14}),e.jsx("span",{children:c("agents.agentsFound","{{count}} agent{{plural}} found",{count:I.length,plural:I.length!==1?"s":""})})]}),I.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L(I.map(r=>r.name)),children:c("agents.selectAllAgents","Select all agents")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L([]),children:c("agents.clearAgents","Clear agents")})]}),I.length>0?e.jsx("div",{className:"agent-import-agent-list",children:I.map((r,f)=>e.jsxs("div",{className:"agent-import-agent-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":c("agents.selectAgent","Select agent {{name}}",{name:r.name}),checked:K.includes(r.name),onChange:()=>Te(r.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:r.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:r.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[r.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[r.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:r.role}),r.reportsTo&&e.jsxs("span",{className:"agent-import-agent-reports",children:[" · reports to ",r.reportsTo]}),r.skills&&r.skills.length>0&&e.jsxs("span",{className:"agent-import-agent-model",children:[" · skills: ",r.skills.join(", ")]})]}),r.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[r.instructionsText.slice(0,100),r.instructionsText.length>100?"...":""]})]})]},f))}):e.jsx("p",{className:"agent-import-empty",children:c("agents.noAgentsFound","No agents found in the manifest.")}),A.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Lt,{size:14}),e.jsx("span",{children:c("agents.skillsFound","{{count}} skill{{plural}} found",{count:A.length,plural:A.length!==1?"s":""})})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>se(A.map(r=>r.name)),children:c("agents.selectAllSkills","Select all skills")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>se([]),children:c("agents.clearSkills","Clear skills")})]}),e.jsx("div",{className:"agent-import-skill-list",children:A.map((r,f)=>e.jsxs("div",{className:"agent-import-skill-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":c("agents.selectSkill","Select skill {{name}}",{name:r.name}),checked:X.includes(r.name),onChange:()=>ze(r.name)})}),e.jsx("span",{className:"agent-import-skill-icon",children:"⚡"}),e.jsxs("div",{className:"agent-import-skill-details",children:[e.jsx("span",{className:"agent-import-skill-name",children:r.name}),r.description&&e.jsx("span",{className:"agent-import-skill-description",children:r.description})]})]},`${r.name}-${f}`))})]}),M&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(rt,{size:14}),M]})]}),v==="result"&&k&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(vt,{size:32})}),e.jsx("h3",{className:"agent-import-result-title",children:c("agents.importComplete","Import Complete")}),e.jsxs("p",{className:"agent-import-result-company",children:[c("agents.from","From")," ",e.jsx("strong",{children:k.companyName??"Unknown"})]}),e.jsxs("div",{className:"agent-import-result-stats",children:[k.created.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:c("agents.resultCreated","{{count}} created",{count:k.created.length})})}),k.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:c("agents.resultSkipped","{{count}} skipped (already exist)",{count:k.skipped.length})})}),k.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:c("agents.resultErrors","{{count}} error{{plural}}",{count:k.errors.length,plural:k.errors.length!==1?"s":""})})})]}),k.created.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:k.created.map((r,f)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(vt,{size:12}),e.jsx("span",{children:r.name})]},f))}),k.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:k.errors.map((r,f)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(ea,{size:12}),e.jsxs("span",{children:[r.name,": ",r.error]})]},f))}),k.warnings&&k.warnings.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:k.warnings.map((r,f)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(rt,{size:12}),e.jsx("span",{children:r})]},f))}),k.skills&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-result-divider"}),e.jsx("h4",{className:"agent-import-result-section-title",children:c("agents.skills","Skills")}),e.jsxs("div",{className:"agent-import-result-stats",children:[k.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:c("agents.skillsImported","{{count}} skill{{plural}} imported",{count:k.skills.imported.length,plural:k.skills.imported.length!==1?"s":""})})}),k.skills.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:c("agents.skillsSkipped","{{count}} skill{{plural}} skipped (already exist)",{count:k.skills.skipped.length,plural:k.skills.skipped.length!==1?"s":""})})}),k.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:c("agents.skillsErrors","{{count}} skill{{plural}} error{{pluralError}}",{count:k.skills.errors.length,plural:k.skills.errors.length!==1?"s":"",pluralError:k.skills.errors.length!==1?"s":""})})}),k.skills.imported.length===0&&k.skills.skipped.length===0&&k.skills.errors.length===0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:c("agents.noSkillsInPackage","No skills in package")})})]}),k.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:k.skills.imported.map((r,f)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(vt,{size:12}),e.jsx("span",{children:r.name})]},f))}),k.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:k.skills.errors.map((r,f)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(ea,{size:12}),e.jsxs("span",{children:[r.name,": ",r.error]})]},f))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[v==="preview"&&e.jsx("button",{className:"btn",onClick:()=>g("input"),disabled:le,children:c("agents.back","Back")}),e.jsx("button",{className:"btn",onClick:_e,disabled:le,children:v==="result"?c("agents.close","Close"):c("agents.cancel","Cancel")}),v==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void $e(),disabled:he||(l==="directory"?C.length===0:l==="browse"?!Z:!j.trim()),children:he?e.jsxs(e.Fragment,{children:[e.jsx(St,{size:14,className:"spin"}),c("agents.parsing","Parsing...")]}):c("agents.preview","Preview")}),v==="preview"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void z(),disabled:le||E===0&&U===0,children:le?e.jsxs(e.Fragment,{children:[e.jsx(St,{size:14,className:"spin"}),Fe]}):c("agents.importButton","Import {{label}}",{label:ge})})]})]})}):null}const Et="fn-agent-org-chart-layout";function ma(n){return n==="auto"||n==="horizontal"||n==="vertical"}const Vs=768,Bs={nodeWidth:220,siblingGap:24,rootGap:24,chartPadding:24},Ws={nodeWidth:160,siblingGap:8,rootGap:8,chartPadding:8};function ba(n){return n.children.length===0?1:n.children.reduce((d,b)=>d+ba(b),0)}function Us(n){return n<=Vs?Ws:Bs}function Gs(n,d){const b=ba(n);return b*d.nodeWidth+Math.max(0,b-1)*d.siblingGap}function Ks(n,d=Number.POSITIVE_INFINITY){const b=Us(d);if(n.length===0)return b.nodeWidth;const a=n.map(v=>Gs(v,b)).reduce((v,g)=>v+g,0),c=Math.max(0,n.length-1)*b.rootGap;return a+c+b.chartPadding*2}function Ys(n){const d=n.preference??"auto";if(d!=="auto")return d;const b=Number.isFinite(n.availableWidth)&&n.availableWidth>0?n.availableWidth:0;return b===0||n.tree.length<=1?"horizontal":Ks(n.tree,b)>b?"vertical":"horizontal"}const ha=s.lazy(()=>gs(()=>import("./AgentDetailView-BrETpTDj.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])).then(n=>({default:n.AgentDetailView})));function Xs(n){return[{value:"triage",label:n("agents.roleTriage","Triage"),icon:"⊕"},{value:"executor",label:n("agents.roleExecutor","Executor"),icon:"▶"},{value:"reviewer",label:n("agents.roleReviewer","Reviewer"),icon:"⊙"},{value:"merger",label:n("agents.roleMerger","Merger"),icon:"⊞"},{value:"scheduler",label:n("agents.roleScheduler","Scheduler"),icon:"◷"},{value:"engineer",label:n("agents.roleEngineer","Engineer"),icon:"⎔"},{value:"custom",label:n("agents.roleCustom","Custom"),icon:"✦"}]}const Pt=[.1,.25,.5,1,2,3,5,10],qs=.25,Zs=3,bt=16,Qe=32;function Ht(n){switch(n){case"running":return"agent-badge--running";case"active":return"agent-badge--active";case"paused":return"agent-badge--paused";case"error":return"agent-badge--error";case"idle":default:return"agent-badge--idle"}}function Ot(n,d){switch(d){case"running":return`${n}--running`;case"active":return`${n}--active`;case"paused":return`${n}--paused`;case"error":return`${n}--error`;case"idle":default:return`${n}--idle`}}function va(n){return n.children.length===0?1:n.children.reduce((d,b)=>d+va(b),0)}function $t(n,d,b){return n.state==="error"?{title:void 0,label:b("agents.healthError","Error")}:{title:d.reason??d.label,label:d.stateDerived?null:d.label}}function fa({node:n,onSelect:d,getHealthStatus:b,selectedAgentId:p,registerNodeElement:a,linksRef:c}){const{t:v}=Me("app"),{agent:g,children:l}=n,x=b(g),j=$t(g,x,v),R=Ht(g.state),C=Ot("org-chart-node-card",g.state),S=va(n),$={"--org-chart-subtree-leaves":String(S)};return e.jsxs("div",{className:`org-chart-node${l.length>0?" org-chart-node--has-children":""}`,style:$,children:[e.jsxs("div",{ref:N=>a(g.id,N),"data-agent-id":g.id,className:`org-chart-node-card ${C}${p===g.id?" agent-card--selected":""}`,onClick:()=>d(g.id),role:"button",tabIndex:0,onKeyDown:N=>{(N.key==="Enter"||N.key===" ")&&(N.key===" "&&N.preventDefault(),d(g.id))},children:[e.jsxs("div",{className:"org-chart-node__header",children:[e.jsx("span",{className:"org-chart-node__icon",children:e.jsx(ft,{agent:g,size:20})}),e.jsx("span",{className:"org-chart-node__name",children:g.name})]}),e.jsxs("div",{className:"org-chart-node__meta",children:[e.jsx("span",{className:`org-chart-node__badge ${R}`,children:g.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:x.color},title:j.title,children:[x.icon,j.label&&e.jsx("span",{className:"text-secondary",children:j.label})]})]})]}),l.length>0&&e.jsx("div",{className:"org-chart-children",role:"group","aria-label":v("agents.orgChartEmployees","{{name}} employees",{name:g.name}),children:l.map(N=>(c.current.push({parentId:g.id,childId:N.agent.id}),e.jsx(fa,{node:N,onSelect:d,getHealthStatus:b,selectedAgentId:p,registerNodeElement:a,linksRef:c},N.agent.id)))})]})}function Js({links:n,nodeElements:d,canvasRef:b,viewportRef:p,layoutMode:a,transform:c}){const[v,g]=s.useState([]);return s.useLayoutEffect(()=>{const l=b.current,x=p.current;if(!l||!x||n.length===0){g([]);return}const j=()=>{const C=l.getBoundingClientRect(),S=n.flatMap(({parentId:$,childId:N})=>{const I=d.get($),B=d.get(N);if(!I||!B)return[];const A=I.getBoundingClientRect(),F=B.getBoundingClientRect(),y=(A.left-C.left)/c.scale,D=(A.top-C.top)/c.scale,K=(F.left-C.left)/c.scale,L=(F.top-C.top)/c.scale;if(a==="vertical"){const ie=y,ce=D+A.height/c.scale/2,H=K,k=L+F.height/c.scale/2,pe=ie-(ie-H)/2;return[`M ${ie} ${ce} L ${pe} ${ce} L ${pe} ${k} L ${H} ${k}`]}const X=y+A.width/c.scale/2,se=D+A.height/c.scale,he=K+F.width/c.scale/2,ne=L,le=se+(ne-se)/2;return[`M ${X} ${se} L ${X} ${le} L ${he} ${le} L ${he} ${ne}`]});g(S)};j();const R=new ResizeObserver(j);return R.observe(l),R.observe(x),d.forEach(C=>R.observe(C)),()=>R.disconnect()},[b,a,n,d,c.scale,p]),e.jsx("svg",{className:"agent-org-chart-connectors","aria-hidden":"true",children:v.map((l,x)=>e.jsx("path",{d:l},`${x}-${l}`))})}function cn({addToast:n,projectId:d,onOpenTaskLogs:b,agentOnboardingEnabled:p=!1}){const{t:a}=Me("app"),c=Xs(a),[v,g]=s.useState(!1),x=Ja()==="mobile",[j,R]=s.useState("all"),{agents:C,stats:S,isLoading:$,loadAgents:N,refreshAgents:I}=Qa(d,{filterState:j,showSystemAgents:v}),[B,A]=s.useState(!1),[F,y]=s.useState(null),[D,K]=s.useState(!1),[L,X]=s.useState(null),[se,he]=s.useState(null),ne=x&&!!L,[le,ie]=s.useState("dashboard"),[ce,H]=s.useState(null),[k,pe]=s.useState(!1),[M,oe]=s.useState(()=>{if(typeof window>"u")return"list";const t=ht("fn-agent-view",d);return t==="list"||t==="board"||t==="org"?t:"list"}),[de,Ee]=s.useState(()=>{if(typeof window>"u")return"auto";const t=ht(Et,d);return ma(t)?t:"auto"}),[xe,fe]=s.useState([]),[q,Pe]=s.useState(!1),[Z,be]=s.useState(0),[ve,W]=s.useState(!1),[Oe,J]=s.useState(!1),[Ne,Ke]=s.useState(!1),[Ae,_e]=s.useState(!1),[Le,Ye]=s.useState(0),[Ie,$e]=s.useState(0),[z,E]=s.useState({scale:1,x:0,y:0}),[U,je]=s.useState(!1),Re=s.useRef(null),ge=s.useRef(null),Fe=s.useRef(null),Te=s.useRef(new Map),ze=s.useRef([]),r=s.useRef(new Map),f=s.useRef(null),P=s.useRef(null),V=s.useRef(!1),{confirm:Q}=es(),Y=s.useRef(null),De=s.useId();s.useEffect(()=>{const t=ht("fn-agent-view",d);if(t==="list"||t==="board"||t==="org"){oe(t);return}oe("list")},[d]),s.useEffect(()=>{ta("fn-agent-view",M,d)},[M,d]),s.useEffect(()=>{const t=ht(Et,d);Ee(ma(t)?t:"auto")},[d]),s.useEffect(()=>{ta(Et,de,d)},[de,d]);const[at,ye]=s.useState(null),Xe=s.useRef(null),[Nt,ke]=s.useState(null),[Ve,Ce]=s.useState(null),[st,we]=s.useState({}),[i,_]=s.useState(1),[He,Be]=s.useState(!1),[Se,Dt]=s.useState(new Set),[yt,qe]=s.useState(new Map),ct=s.useRef(!0);s.useEffect(()=>(ct.current=!0,()=>{ct.current=!1}),[]),s.useEffect(()=>{ts(d).then(t=>{ct.current&&_(t.heartbeatMultiplier??1)}).catch(()=>{})},[d]);const Vt=s.useCallback(async t=>{const o=Number.isFinite(t)&&t>0?t:1;_(o),Be(!0);try{await as({heartbeatMultiplier:o},d),n(a("agents.heartbeatSpeedSet","Heartbeat speed set to ×{{value}}",{value:o.toFixed(1)}),"success")}catch(u){n(a("agents.heartbeatSpeedSaveFailed","Failed to save heartbeat multiplier: {{error}}",{error:me(u)}),"error")}finally{ct.current&&Be(!1)}},[d,n]),dt=s.useMemo(()=>yt.size===0?C:C.map(t=>{const o=yt.get(t.id);return o?{...t,state:o}:t}),[C,yt]),nt=s.useMemo(()=>dt.filter(t=>v||!ot(t)),[dt,v]),ja=s.useMemo(()=>dt.filter(t=>t.state!=="active"&&t.state!=="running"?!1:v||!ot(t)),[dt,v]),We=s.useMemo(()=>{if(v)return xe;const t=o=>ot(o.agent)?null:{...o,children:o.children.map(t).filter(u=>u!==null)};return xe.map(t).filter(o=>o!==null)},[xe,v]);s.useEffect(()=>{if(M!=="org")return;const t=ge.current;if(!t)return;const o=()=>{be(t.clientWidth)};o();const u=typeof ResizeObserver<"u"?new ResizeObserver(o):null;return u?.observe(t),window.addEventListener("resize",o),()=>{u?.disconnect(),window.removeEventListener("resize",o)}},[M,We.length]),s.useEffect(()=>{if(M!=="org")return;let t=!1;return Pe(!0),ss(d,{includeEphemeral:v}).then(o=>{t||fe(o)}).catch(o=>{t||(n(a("agents.orgChartLoadFailed","Failed to load org chart: {{error}}",{error:me(o)}),"error"),fe([]))}).finally(()=>{t||Pe(!1)}),()=>{t=!0}},[M,d,v,n]),s.useEffect(()=>{const t=setInterval(()=>{N()},3e4);return()=>{clearInterval(t)}},[N]),s.useEffect(()=>{if(!ve)return;let t=!1;_e(!0),Ft(void 0,d).then(m=>{if(t)return;const w=m.filter(T=>!ot(T));Ye(w.filter(T=>T.state==="active"||T.state==="running").length),$e(w.filter(T=>T.state==="paused").length)}).catch(m=>{t||(Ye(0),$e(0),n(a("agents.bulkActionsLoadFailed","Failed to load bulk agent actions: {{error}}",{error:me(m)}),"error"))}).finally(()=>{t||_e(!1)});const o=m=>{const w=m.target;w&&(Re.current?.contains(w)||Y.current?.contains(w)||W(!1))},u=m=>{m.key==="Escape"&&(W(!1),Y.current?.focus())};return document.addEventListener("mousedown",o),document.addEventListener("touchstart",o),document.addEventListener("keydown",u),()=>{t=!0,document.removeEventListener("mousedown",o),document.removeEventListener("touchstart",o),document.removeEventListener("keydown",u)}},[n,ve,d]);const Bt=async t=>{if(!Ne){Ke(!0);try{const u=(await Ft(void 0,d)).filter(G=>!ot(G)),m=u.filter(G=>t==="paused"?G.state==="active"||G.state==="running":G.state==="paused"),w=u.length-m.length;if(m.length===0){n(t==="paused"?a("agents.noAgentsToPause","No agents eligible to pause"):a("agents.noAgentsToResume","No agents eligible to resume"),"error");return}if(!await Q({title:t==="paused"?a("agents.pauseAllTitle","Pause All Agents"):a("agents.resumeAllTitle","Resume All Agents"),message:t==="paused"?a("agents.pauseAllConfirm",{count:m.length,defaultValue_one:"Pause {{count}} agent in this project?",defaultValue_other:"Pause {{count}} agents in this project?"}):a("agents.resumeAllConfirm",{count:m.length,defaultValue_one:"Resume {{count}} agent in this project?",defaultValue_other:"Resume {{count}} agents in this project?"}),danger:t==="paused"}))return;const re=await Promise.allSettled(m.map(G=>ia(G.id,t,d))),ae=re.map((G,mt)=>({result:G,agent:m[mt]})).filter(G=>G.result.status==="rejected"),h=re.length-ae.length,O=ae.length,te=t==="paused"?a("agents.pausedSummary",{count:h,skipped:w,defaultValue_one:"Paused {{count}} agent; skipped {{skipped}}",defaultValue_other:"Paused {{count}} agents; skipped {{skipped}}"}):a("agents.resumedSummary",{count:h,skipped:w,defaultValue_one:"Resumed {{count}} agent; skipped {{skipped}}",defaultValue_other:"Resumed {{count}} agents; skipped {{skipped}}"});if(O>0){const G=ae.slice(0,3).map(({agent:mt,result:za})=>`${mt.name||mt.id}: ${me(za.reason)}`).join("; ");n(`${te}; failed ${O}${G?` (${G})`:""}`,"error")}else n(te,"success");await N()}catch(o){n(t==="paused"?a("agents.pauseAgentsFailed","Failed to pause agents: {{error}}",{error:me(o)}):a("agents.resumeAgentsFailed","Failed to resume agents: {{error}}",{error:me(o)}),"error")}finally{Ke(!1)}}},lt=async(t,o)=>{if(!Se.has(t)){Dt(u=>new Set(u).add(t)),qe(u=>{const m=new Map(u);return m.set(t,o),m});try{await ia(t,o,d),n(a("agents.stateUpdated","Agent state updated to {{state}}",{state:o}),"success"),await N(),qe(u=>{const m=new Map(u);return m.delete(t),m})}catch(u){qe(m=>{const w=new Map(m);return w.delete(t),w}),n(a("agents.stateUpdateFailed","Failed to update state: {{error}}",{error:me(u)}),"error")}finally{Dt(u=>{const m=new Set(u);return m.delete(t),m})}}},Wt=async(t,o)=>{if(await Q({title:a("agents.deleteTitle","Delete Agent"),message:a("agents.deleteConfirm",'Delete agent "{{name}}"? This cannot be undone.',{name:o}),danger:!0}))try{await ms(t,d),n(a("agents.deleted",'Agent "{{name}}" deleted',{name:o}),"success"),await N()}catch(m){n(a("agents.deleteFailed","Failed to delete agent: {{error}}",{error:me(m)}),"error")}},Na=async(t,o)=>{const u=C.find(m=>m.id===t);if(u){if(u.role===o){ye(null);return}try{await xt(t,{role:o},d),n(a("agents.roleUpdated","Agent role updated to {{role}}",{role:c.find(m=>m.value===o)?.label??o}),"success"),ye(null),N()}catch(m){n(a("agents.roleUpdateFailed","Failed to update role: {{error}}",{error:me(m)}),"error")}}},ya=(t,o)=>{t.key==="Escape"&&ye(null)},ka=async(t,o)=>{Ve===t.id&&(Ce(null),we(u=>{const m={...u};return delete m[t.id],m})),ke(t.id);try{await xt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:o}},d),n(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:ra(o),name:t.name}),"success"),N()}catch(u){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(u)}),"error")}finally{ke(null)}},Ut=async t=>{const o=st[t.id]??"";if(o.trim()===""){n(a("agents.heartbeatEnterMinutes","Please enter a heartbeat interval in minutes"),"error");return}const u=Number(o);if(isNaN(u)){n(a("agents.heartbeatMustBeNumber","Heartbeat interval must be a valid number"),"error");return}if(u<=0){n(a("agents.heartbeatMustBePositive","Heartbeat interval must be greater than 0"),"error");return}if(u>=1&&u<5){ke(t.id);try{await xt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:hs}},d),n(a("agents.heartbeatClampedToMin",{count:u,defaultValue_one:"Heartbeat interval set to 5 minutes (minimum). {{count}} minute was below the 5-minute minimum.",defaultValue_other:"Heartbeat interval set to 5 minutes (minimum). {{count}} minutes was below the 5-minute minimum."}),"success"),Ce(null),we(w=>{const T={...w};return delete T[t.id],T}),N()}catch(w){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(w)}),"error")}finally{ke(null)}return}const m=Math.round(u*6e4);ke(t.id);try{await xt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:m}},d),n(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:ra(m),name:t.name}),"success"),Ce(null),we(w=>{const T={...w};return delete T[t.id],T}),N()}catch(w){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(w)}),"error")}finally{ke(null)}},Ca=t=>{const o=_t(t.runtimeConfig?.heartbeatIntervalMs),u=Math.round(o/6e4);Ce(t.id),we(m=>({...m,[t.id]:String(u)}))},ue=s.useCallback((t,o)=>{X(t),ie(o?.initialTab??"dashboard"),H(o?.initialRunId??null),pe(o?.preferActiveRun??!1)},[]),Ue=s.useCallback(()=>{X(null),ie("dashboard"),H(null),pe(!1)},[]),Gt=s.useCallback(t=>{ue(t)},[ue]),wa=s.useCallback(t=>{he(t),ue(t)},[ue]),Sa=s.useCallback(async({agentId:t,deleted:o})=>{await I(),o&&L===t&&Ue()},[I,L,Ue]),Aa=s.useCallback(t=>{ue(t),x&&J(!1)},[x,ue]),Ra=async(t,o)=>{qe(u=>{const m=new Map(u);return m.set(t,"running"),m});try{await ps(t,d,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),n(a("agents.heartbeatRunStarted","Heartbeat run started for {{name}}",{name:o}),"success"),await N(),qe(u=>{const m=new Map(u);return m.delete(t),m})}catch(u){qe(m=>{const w=new Map(m);return w.delete(t),w}),n(a("agents.heartbeatRunFailed","Failed to start heartbeat run: {{error}}",{error:me(u)}),"error")}},Ge=s.useCallback(t=>Math.min(Zs,Math.max(qs,t)),[]),ee=s.useCallback(t=>{const o=ge.current,u=Fe.current?.querySelector(".agent-org-chart");if(!o||!u)return{...t,scale:Ge(t.scale)};const m=Ge(t.scale),w=u.scrollWidth*m,T=u.scrollHeight*m,re=o.clientWidth,ae=o.clientHeight,h=Math.min(Qe,re-w-Qe),O=Qe,te=Math.min(Qe,ae-T-Qe),G=Qe;return{scale:m,x:Math.max(h,Math.min(O,t.x)),y:Math.max(te,Math.min(G,t.y))}},[Ge]),gt=s.useCallback((t,o,u)=>{const m=ge.current;m&&E(w=>{const T=Ge(t),re=m.getBoundingClientRect(),ae=o-re.left,h=u-re.top,O=(ae-w.x)/w.scale,te=(h-w.y)/w.scale;return ee({scale:T,x:ae-O*T,y:h-te*T})})},[Ge,ee]),Ze=s.useCallback(()=>{const t=ge.current,o=Fe.current?.querySelector(".agent-org-chart");if(!t||!o)return;const u=t.clientWidth,m=t.clientHeight,w=o.scrollWidth,T=o.scrollHeight;if(w<=0||T<=0)return;const re=Ge(Math.min(u/w,m/T,1)),ae=(u-w*re)/2,h=(m-T*re)/2;E(ee({scale:re,x:ae,y:h}))},[Ge,ee]),kt=s.useCallback(t=>{oe(t),t!=="org"&&E({scale:1,x:0,y:0}),x&&L&&Ue()},[Ue,x,L]),Kt=t=>c.find(o=>o.value===t)?.label??t,ut=s.useMemo(()=>Ys({tree:We,availableWidth:Z,preference:de}),[We,de,Z]),Yt=s.useCallback(t=>{Ee(t),E({scale:1,x:0,y:0})},[]);s.useEffect(()=>{E({scale:1,x:0,y:0}),V.current=!1},[d,ut]),s.useLayoutEffect(()=>{M!=="org"||q||We.length===0||V.current||(Ze(),V.current=!0)},[M,We.length,Ze,q]);const Ta=s.useCallback((t,o)=>{o?Te.current.set(t,o):Te.current.delete(t)},[]),Xt=s.useCallback(()=>e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>E(t=>ee({...t,scale:t.scale*.9})),"aria-label":a("agents.orgChartZoomOut","Zoom out org chart"),title:a("agents.zoomOut","Zoom out"),children:e.jsx(Ts,{size:16})}),e.jsxs("span",{className:"agent-org-chart-controls__zoom-label","aria-live":"polite",children:[Math.round(z.scale*100),"%"]}),e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>E(t=>ee({...t,scale:t.scale*1.1})),"aria-label":a("agents.orgChartZoomIn","Zoom in org chart"),title:a("agents.zoomIn","Zoom in"),children:e.jsx(As,{size:16})}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm agent-org-chart-controls__fit-btn",onClick:Ze,"aria-label":a("agents.orgChartFit","Fit org chart"),title:a("agents.orgChartFit","Fit org chart"),children:[e.jsx(ns,{size:16}),a("agents.fit","Fit")]}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm",onClick:()=>E(t=>ee({...t,x:0,y:0})),"aria-label":a("agents.orgChartCenter","Center org chart"),title:a("agents.orgChartCenter","Center org chart"),children:[e.jsx(ls,{size:16}),a("agents.center","Center")]})]}),[ee,Ze,z.scale]),Ma=s.useCallback(t=>{if(!(t.ctrlKey||t.metaKey))return;t.preventDefault();const o=t.deltaY>0?.9:1.1;gt(z.scale*o,t.clientX,t.clientY)},[z.scale,gt]),Ea=s.useCallback(t=>{if(t.target.closest(".org-chart-node-card"))return;if(t.currentTarget.setPointerCapture?.(t.pointerId),r.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),r.current.size===1){f.current={x:t.clientX-z.x,y:t.clientY-z.y,pointerId:t.pointerId},je(!0);return}if(r.current.size===2){const u=Array.from(r.current.values()),m=u[0].x-u[1].x,w=u[0].y-u[1].y;P.current={distance:Math.hypot(m,w),scale:z.scale,centerX:(u[0].x+u[1].x)/2,centerY:(u[0].y+u[1].y)/2},f.current=null}},[z.scale,z.x,z.y]),Pa=s.useCallback(t=>{if(r.current.has(t.pointerId)){if(r.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),r.current.size>=2){const o=Array.from(r.current.values()),u=P.current;if(!u)return;const m=o[0].x-o[1].x,w=o[0].y-o[1].y,T=Math.hypot(m,w),re=u.scale*(T/u.distance);gt(re,u.centerX,u.centerY);return}!f.current||f.current.pointerId!==t.pointerId||E(o=>ee({...o,x:t.clientX-f.current.x,y:t.clientY-f.current.y}))}},[ee,gt]),qt=s.useCallback(t=>{r.current.delete(t.pointerId),r.current.size<2&&(P.current=null),r.current.size===0&&(f.current=null,je(!1))},[]),_a=s.useCallback(t=>{if(t.key==="ArrowLeft")E(o=>ee({...o,x:o.x+bt}));else if(t.key==="ArrowRight")E(o=>ee({...o,x:o.x-bt}));else if(t.key==="ArrowUp")E(o=>ee({...o,y:o.y+bt}));else if(t.key==="ArrowDown")E(o=>ee({...o,y:o.y-bt}));else if(t.key==="+"||t.key==="=")E(o=>ee({...o,scale:o.scale*1.1}));else if(t.key==="-")E(o=>ee({...o,scale:o.scale*.9}));else if(t.key==="0")Ze();else if(t.key==="Home")E({scale:1,x:0,y:0});else return;t.preventDefault()},[ee,Ze]),Zt=s.useCallback(()=>{const t=[{value:"horizontal",label:a("agents.layoutHorizontal","Horizontal"),icon:e.jsx(aa,{size:16}),ariaLabel:a("agents.layoutHorizontalAria","Horizontal layout")},{value:"vertical",label:a("agents.layoutVertical","Vertical"),icon:e.jsx(sa,{size:16}),ariaLabel:a("agents.layoutVerticalAria","Vertical layout")},{value:"auto",label:a("agents.layoutAuto","Auto"),icon:e.jsx(et,{size:16}),ariaLabel:a("agents.layoutAutoAria","Automatic layout")}];return e.jsx("div",{className:"agent-org-chart-layout-toggle","data-testid":"agent-org-chart-layout-toggle",children:t.map(o=>{const u=de===o.value;return e.jsxs("button",{type:"button",className:`btn-icon touch-target agent-org-chart-layout-toggle__button${u?" btn-icon--active":""}`,onClick:()=>Yt(o.value),"aria-pressed":u,"aria-label":o.ariaLabel,title:o.ariaLabel,"data-layout-value":o.value,children:[o.icon,e.jsx("span",{className:"agent-org-chart-layout-toggle__text",children:o.label})]},o.value)})})},[Yt,de]),La=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],Ct=t=>us(t),Ia=Ae||Ne||Le===0,Fa=Ae||Ne||Ie===0,Jt=$&&C.length===0,it=s.useCallback(()=>{A(!0)},[]);return e.jsxs("div",{className:"agents-view",children:[e.jsxs("div",{className:"agents-view-header",children:[e.jsxs("div",{className:"agents-view-title",children:[e.jsx(It,{size:24}),e.jsx("h2",{children:a("agents.title","Agents")})]}),e.jsxs("div",{className:"agents-view-controls",children:[e.jsxs("div",{className:"view-toggle",children:[e.jsx("button",{className:`view-toggle-btn${M==="list"?" active":""}`,onClick:()=>kt("list"),title:a("agents.listView","List view"),"aria-label":a("agents.listView","List view"),"aria-pressed":M==="list",children:e.jsx(sa,{size:16})}),e.jsx("button",{className:`view-toggle-btn${M==="board"?" active":""}`,onClick:()=>kt("board"),title:a("agents.boardView","Board view"),"aria-label":a("agents.boardView","Board view"),"aria-pressed":M==="board",children:e.jsx(tt,{size:16})}),e.jsx("button",{className:`view-toggle-btn${M==="org"?" active":""}`,onClick:()=>kt("org"),title:a("agents.orgChartView","Org Chart view"),"aria-label":a("agents.orgChartView","Org Chart view"),"aria-pressed":M==="org",children:e.jsx(aa,{size:16})})]}),e.jsxs("div",{className:"agents-view-primary-actions",children:[e.jsx("button",{ref:Y,className:`btn-icon agent-controls-trigger${ve?" agent-controls-trigger--active":""}`,onClick:()=>W(t=>!t),title:a("agents.controls","Controls"),"aria-label":a("agents.controls","Controls"),"aria-haspopup":"dialog","aria-expanded":ve,"aria-controls":De,children:e.jsx(ws,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void N(),title:a("agents.refresh","Refresh"),"aria-label":a("agents.refresh","Refresh"),children:e.jsx(et,{size:16,className:$?"spin":void 0})}),!x&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{K(!0),W(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(zt,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{it(),W(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(na,{size:16}),a("agents.newAgent","New Agent")]})]}),ve&&e.jsxs("div",{ref:Re,id:De,className:"agent-controls-panel agent-controls-panel--scrollable",role:"dialog","aria-label":a("agents.agentControls","Agent controls"),"aria-modal":"false",children:[e.jsx("div",{className:"agent-controls",children:e.jsxs("div",{className:"agent-controls-filters",children:[e.jsxs("div",{className:"agent-state-filter",children:[e.jsx(is,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:j,onChange:t=>R(t.target.value),"aria-label":a("agents.filterByState","Filter agents by state"),children:[e.jsx("option",{value:"all",children:a("agents.stateAll","All States")}),e.jsx("option",{value:"idle",children:a("agents.stateIdle","Idle")}),e.jsx("option",{value:"active",children:a("agents.stateActive","Active")}),e.jsx("option",{value:"running",children:a("agents.stateRunning","Running")}),e.jsx("option",{value:"paused",children:a("agents.statePaused","Paused")}),e.jsx("option",{value:"error",children:a("agents.stateError","Error")})]})]}),e.jsxs("label",{className:"checkbox-label agent-system-filter",children:[e.jsx("input",{type:"checkbox",checked:v,onChange:t=>g(t.target.checked),"aria-label":a("agents.showSystemAgents","Show system agents")}),a("agents.showSystemAgents","Show system agents")]})]})}),x&&e.jsxs("div",{className:"agent-controls-mobile-actions",children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{K(!0),W(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(zt,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{it(),W(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(na,{size:16}),a("agents.newAgent","New Agent")]})]}),e.jsxs("div",{className:"agent-controls-bulk-actions",role:"menu","aria-label":a("agents.bulkAgentActions","Bulk agent actions"),children:[e.jsxs("button",{type:"button",className:"agent-detail-bulk-menu-item",role:"menuitem",disabled:Ia,onClick:()=>{W(!1),Bt("paused")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(At,{}),e.jsx("span",{children:a("agents.pauseAllAgents","Pause All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:Ae?a("agents.loadingEligibility","Loading eligibility…"):Le===0?a("agents.noAgentsToPauseHint","No active or running project agents to pause"):a("agents.pauseCountHint",{count:Le,defaultValue_one:"Pause {{count}} active/running agent",defaultValue_other:"Pause {{count}} active/running agents"})})]}),e.jsxs("button",{type:"button",className:"agent-detail-bulk-menu-item",role:"menuitem",disabled:Fa,onClick:()=>{W(!1),Bt("active")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(pt,{}),e.jsx("span",{children:a("agents.resumeAllAgents","Resume All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:Ae?a("agents.loadingEligibility","Loading eligibility…"):Ie===0?a("agents.noAgentsToResumeHint","No paused project agents to resume"):a("agents.resumeCountHint",{count:Ie,defaultValue_one:"Resume {{count}} paused agent",defaultValue_other:"Resume {{count}} paused agents"})})]})]}),e.jsx("div",{className:"agent-global-controls agent-controls-actions",children:e.jsxs("div",{className:"heartbeat-multiplier-group",children:[e.jsxs("div",{className:"heartbeat-multiplier-controls",children:[e.jsx("label",{htmlFor:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-label",children:a("agents.heartbeatSpeed","Heartbeat Speed")}),e.jsx("input",{id:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-slider touch-target",type:"range",min:.1,max:10,step:.1,value:i,onChange:t=>{const o=Number(t.target.value);Vt(Number.isFinite(o)&&o>0?o:1)},disabled:He}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",i.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(Pt.reduce((t,o)=>Math.abs(o-i)<Math.abs(t-i)?o:t,Pt[0])),onChange:t=>{const o=Number(t.target.value);Vt(Number.isFinite(o)&&o>0?o:1)},disabled:He,"aria-label":a("agents.heartbeatSpeedPreset","Heartbeat speed preset"),children:Pt.map(t=>e.jsxs("option",{value:String(t),children:["×",t]},t))})]}),e.jsx("small",{className:"text-secondary",children:a("agents.heartbeatSpeedHint","Scales all agent heartbeat intervals. ×0.5 = twice as fast, ×2.0 = twice as slow. Default: ×1.0")})]})}),e.jsx(Ms,{agents:nt})]})]})]})]}),e.jsx(Os,{isOpen:B,onClose:()=>{A(!1),y(null)},onCreated:()=>{A(!1),y(null),N()},projectId:d,prefillDraft:F,agentOnboardingEnabled:p,existingAgents:C,onPrefillDraft:y}),e.jsx(Ds,{isOpen:D,onClose:()=>K(!1),onImported:()=>void N(),projectId:d}),e.jsx(zs,{stats:S,activeAgents:ja,projectId:d,isOpen:Oe,onToggle:()=>J(t=>!t),onSelectAgent:Aa,onOpenTaskLogs:b}),M==="org"?e.jsx("div",{className:"agents-org-full-view",children:e.jsx("div",{className:"agents-view-content agents-view-content--org-full",children:L?e.jsxs("div",{className:"agents-org-detail-view","data-testid":"agents-org-detail-view",children:[e.jsx("button",{type:"button",className:"btn btn-sm agents-org-detail-back",onClick:Ue,"aria-label":a("agents.backToOrgChart","Back to org chart"),children:a("agents.backToOrgChart","Back to org chart")}),e.jsx(s.Suspense,{fallback:null,children:e.jsx(ha,{inline:!0,showInlineBackButton:!1,agentId:L,projectId:d,onClose:Ue,addToast:n,onChildClick:Gt,initialTab:le,initialRunId:ce,preferActiveRun:k},L)})]}):Jt?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(et,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingAgents","Loading agents...")})]}):e.jsxs("div",{className:"agent-org-chart-shell","data-testid":"agent-org-chart-shell",children:[x?e.jsxs("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:[Zt(),Xt()]}):e.jsxs("div",{className:"agent-org-chart-toolbar",children:[Zt(),e.jsx("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:Xt()})]}),e.jsx("div",{ref:ge,className:"agent-org-chart-viewport","data-testid":"agent-org-chart-viewport",tabIndex:0,role:"region","aria-label":a("agents.orgChartCanvas","Org chart canvas"),onWheel:Ma,onPointerDown:Ea,onPointerMove:Pa,onPointerUp:qt,onPointerCancel:qt,onKeyDown:_a,"data-panning":U?"true":"false",children:e.jsxs("div",{ref:Fe,className:`agent-org-chart-canvas agent-org-chart-canvas--zoom-${Math.round((z.scale??1)*100)}`,"data-panning":U?"true":"false",style:{transform:`translate(${z.x}px, ${z.y}px) scale(${z.scale})`},children:[e.jsx("div",{className:`agent-org-chart${ut==="vertical"?" agent-org-chart--vertical":""}`,"data-testid":"agent-org-chart","data-layout-mode":ut,children:q?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx(et,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingOrgChart","Loading org chart...")})]}):We.length===0?e.jsx(Tt,{onCtaClick:it}):(ze.current=[],We.map(t=>e.jsx(fa,{node:t,onSelect:wa,getHealthStatus:Ct,selectedAgentId:se,registerNodeElement:Ta,linksRef:ze},t.agent.id)))}),e.jsx(Js,{links:ze.current,nodeElements:Te.current,canvasRef:Fe,viewportRef:ge,layoutMode:ut,transform:z})]})})]})})}):e.jsxs("div",{className:"agents-split-layout",children:[e.jsx("div",{className:`agents-split-sidebar${ne?" agents-split-sidebar--hidden-mobile":""}`,children:e.jsx("div",{className:"agents-view-content",children:Jt?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(et,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingAgents","Loading agents...")})]}):M==="board"?e.jsx("div",{className:"agent-board",children:nt.length===0?e.jsx(Tt,{onCtaClick:it}):nt.map(t=>{const o=Ct(t),u=$t(t,o,a),m=Ht(t.state),w=Ot("agent-board-card",t.state);return e.jsxs("div",{className:`agent-board-card ${w}${L===t.id?" agent-card--selected":""}`,children:[e.jsxs("div",{className:"agent-board-clickable",onClick:()=>ue(t.id),role:"button",tabIndex:0,onKeyDown:T=>{(T.key==="Enter"||T.key===" ")&&(T.key===" "&&T.preventDefault(),ue(t.id))},children:[e.jsxs("div",{className:"agent-board-header",children:[e.jsx("span",{className:"agent-board-icon",children:e.jsx(ft,{agent:t,size:20})}),e.jsx("span",{className:"agent-board-badge badge text-secondary",children:Kt(t.role)}),e.jsx("span",{className:`agent-board-badge badge ${m}`,children:t.state}),(t.pendingApprovalCount??0)>0?e.jsxs("span",{className:"agent-board-badge badge agent-approval-badge",title:a("agents.pendingApprovals","Pending approvals"),children:[e.jsx("span",{className:"status-dot status-dot--pending"}),t.pendingApprovalCount]}):null]}),e.jsx("div",{className:"agent-board-name",children:t.name}),e.jsx("div",{className:"agent-board-id",children:t.id}),e.jsxs("div",{className:"agent-board-health",style:{color:o.color},title:u.title,children:[o.icon,u.label?` ${u.label}`:""]})]}),(t.state==="idle"||t.state==="paused"||t.state==="error")&&e.jsx("div",{className:"agent-board-actions",children:e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void Wt(t.id,t.name),title:a("agents.delete","Delete"),children:e.jsx(la,{size:14})})})]},t.id)})}):e.jsx("div",{className:"agent-list",children:nt.length===0?e.jsx(Tt,{onCtaClick:it}):nt.map(t=>{const o=Ct(t),u=$t(t,o,a),m=Ht(t.state),w=Ot("agent-card",t.state),T=_t(t.runtimeConfig?.heartbeatIntervalMs),re=rs(T),ae=Nt===t.id;return e.jsxs("div",{className:`agent-card agent-card--clickable ${w}${L===t.id?" agent-card--selected":""}`,onClick:h=>{const O=h.target;if(O===h.currentTarget){ue(t.id);return}const te=O.closest('button, select, input, [role="button"]');te&&te!==h.currentTarget||ue(t.id)},role:"button",tabIndex:0,onKeyDown:h=>{h.target===h.currentTarget&&(h.key==="Enter"||h.key===" ")&&(h.key===" "&&h.preventDefault(),ue(t.id))},"aria-label":a("agents.openDetails","Open details for {{name}}",{name:t.name}),children:[e.jsxs("div",{className:"agent-card-header",children:[e.jsxs("div",{className:"agent-info",children:[at===t.id?e.jsx("select",{ref:Xe,className:"select agent-role-select",value:t.role,onChange:h=>void Na(t.id,h.target.value),onKeyDown:h=>ya(h,t.id),onBlur:()=>ye(null),autoFocus:!0,children:c.map(h=>e.jsxs("option",{value:h.value,children:[h.icon," ",h.label]},h.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:h=>{h.stopPropagation(),ye(t.id)},title:a("agents.clickToChangeRole","Click to change role"),role:"button",tabIndex:0,onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.stopPropagation(),ye(t.id))},children:e.jsx(ft,{agent:t,size:20})}),e.jsxs("div",{className:"agent-meta",children:[e.jsx("span",{className:"agent-name",children:t.name}),e.jsx("span",{className:"agent-id text-secondary",children:t.id})]}),e.jsx(pa,{size:20,className:"agent-card-chevron"})]}),e.jsxs("div",{className:"agent-badges",children:[e.jsx("span",{className:`badge ${m}`,children:t.state}),e.jsxs("span",{className:"badge",style:{color:o.color},title:u.title,children:[o.icon,u.label?` ${u.label}`:""]}),e.jsx("span",{className:"badge text-secondary",children:Kt(t.role)}),(t.pendingApprovalCount??0)>0?e.jsxs("span",{className:"badge agent-approval-badge",title:a("agents.pendingApprovals","Pending approvals"),children:[e.jsx("span",{className:"status-dot status-dot--pending"}),t.pendingApprovalCount]}):null,(()=>{const h=La(t);if(h.length===0)return null;const O=h.slice(0,2),te=h.length-2;return e.jsxs(e.Fragment,{children:[O.map(G=>e.jsx("span",{className:"badge badge-skill",title:G,children:js(G)},G)),te>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",te]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[t.state==="error"&&t.lastError?e.jsx(os,{errorText:t.lastError,issueContext:{surface:"AgentsView list",agentId:t.id,agentName:t.name,agentState:t.state,taskId:t.taskId}}):null,t.taskId&&e.jsxs("div",{className:"agent-task",children:[e.jsx("span",{className:"text-secondary",children:a("agents.workingOn","Working on:")}),e.jsx("span",{className:"badge",children:t.taskId})]}),e.jsxs("div",{className:"agent-heartbeat-control",children:[e.jsx("span",{className:"text-secondary",children:a("agents.heartbeat","Heartbeat:")}),Ve===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:st[t.id]??"",onChange:h=>we(O=>({...O,[t.id]:h.target.value})),onKeyDown:h=>{h.key==="Enter"?Ut(t):h.key==="Escape"&&(Ce(null),we(O=>{const te={...O};return delete te[t.id],te}))},disabled:ae,"aria-label":a("agents.customHeartbeatAria","Custom heartbeat interval in minutes for {{name}}",{name:t.name})}),e.jsx("span",{className:"text-secondary",children:a("agents.minutesUnit","min")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>void Ut(t),disabled:ae,title:a("agents.saveCustomInterval","Save custom interval"),children:a("agents.save","Save")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>{Ce(null),we(h=>{const O={...h};return delete O[t.id],O})},disabled:ae,title:a("agents.cancelCustomInterval","Cancel custom interval"),children:a("agents.cancel","Cancel")})]}):e.jsx(e.Fragment,{children:e.jsxs("select",{className:"select agent-heartbeat-select",value:T,onChange:h=>{const O=h.target.value;O==="__custom__"?Ca(t):ka(t,Number(O))},disabled:ae,"aria-label":a("agents.setHeartbeatAria","Set heartbeat interval for {{name}}",{name:t.name}),children:[re.map(h=>e.jsx("option",{value:h.value,children:h.label},h.value)),cs.some(h=>h.value===T)&&e.jsx("option",{value:"__custom__",children:a("agents.customHeartbeatOption","Custom...")})]})}),ae&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:a("agents.saving","Saving…")}),t.lastHeartbeatAt&&(()=>{const h=new Date(t.lastHeartbeatAt),O=new Date(h.getTime()+T),te=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"agent-heartbeat-last text-secondary",title:h.toLocaleString(),children:a("agents.lastHeartbeat","Last: {{time}}",{time:h.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})}),te&&e.jsx("span",{className:"agent-heartbeat-next text-secondary",title:O.toLocaleString(),children:a("agents.nextHeartbeat","Next: {{time}}",{time:O.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})})]})})()]})]}),e.jsxs("div",{className:"agent-card-actions",children:[e.jsxs("div",{className:"agent-card-actions-group agent-card-actions-group--primary",children:[t.state==="idle"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"active"),disabled:Se.has(t.id),title:a("agents.activate","Activate"),children:[e.jsx(pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.start","Start")})]}),t.state==="active"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>void Ra(t.id,t.name),disabled:Se.has(t.id),title:a("agents.runNow","Run Now"),"aria-label":a("agents.runNowAria","Run now for {{name}}",{name:t.name}),children:[e.jsx(tt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.runNow","Run Now")})]}),e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"paused"),disabled:Se.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(At,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.pause","Pause")})]})]}),t.state==="paused"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"active"),disabled:Se.has(t.id),title:a("agents.resume","Resume"),children:[e.jsx(pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.resume","Resume")})]}),t.state==="running"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>ue(t.id,{initialTab:"runs",initialRunId:null,preferActiveRun:!0}),title:a("agents.viewLiveRun","View live run details"),"aria-label":a("agents.viewLiveRunAria","View live run details for {{name}}",{name:t.name}),children:[e.jsx(tt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.running","Running")})]}),e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"paused"),disabled:Se.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(At,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.pause","Pause")})]})]}),t.state==="error"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"active"),disabled:Se.has(t.id),title:a("agents.retry","Retry"),children:[e.jsx(pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.retry","Retry")})]})]}),e.jsxs("div",{className:"agent-card-actions-group agent-card-actions-group--secondary",children:[e.jsxs("button",{className:"btn btn-sm agent-card-details-btn",onClick:()=>ue(t.id),title:a("agents.viewDetailsFor","View details for {{name}}",{name:t.name}),"aria-label":a("agents.viewDetailsFor","View details for {{name}}",{name:t.name}),children:[e.jsx(ds,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.details","Details")})]}),(t.state==="idle"||t.state==="paused"||t.state==="error")&&e.jsxs("button",{className:"btn btn-sm btn-danger",onClick:()=>void Wt(t.id,t.name),title:a("agents.delete","Delete"),children:[e.jsx(la,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.delete","Delete")})]})]})]})]},t.id)})})})}),e.jsx("div",{className:`agents-split-detail${x&&!L?" agents-split-detail--hidden-mobile":""}`,children:L?e.jsx(s.Suspense,{fallback:null,children:e.jsx(ha,{inline:!0,showInlineBackButton:x,agentId:L,projectId:d,onClose:Ue,addToast:n,onChildClick:Gt,initialTab:le,initialRunId:ce,preferActiveRun:k,onMutationSuccess:Sa},L)}):e.jsxs("div",{className:"agents-detail-empty-state",children:[e.jsx(It,{size:48}),e.jsx("h3",{children:a("agents.selectAnAgent","Select an agent")}),e.jsx("p",{children:a("agents.selectAgentHint","Choose an agent from the sidebar to view details")})]})})]})]})}export{cn as AgentsView};
|
|
29
|
+
Agent instructions go here...`),value:j,onChange:r=>{x("paste"),S([]),R(r.target.value),H(null)},rows:8,"aria-label":c("agents.manifestContent","Manifest content")})]}),e.jsx("p",{className:"agent-import-file-hint",children:c("agents.currentInput","Current input: {{method}}",{method:l})}),ce&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(rt,{size:14}),ce]})]}),v==="preview"&&e.jsxs("div",{className:"agent-import-preview",children:[e.jsxs("div",{className:"agent-import-company",children:[e.jsx("span",{className:"agent-import-company-label",children:c("agents.company","Company")}),e.jsx("span",{className:"agent-import-company-name",children:$})]}),y.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:y.map((r,f)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(rt,{size:12}),e.jsx("span",{children:r})]},f))}),e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Lt,{size:14}),e.jsx("span",{children:c("agents.agentsFound","{{count}} agent{{plural}} found",{count:I.length,plural:I.length!==1?"s":""})})]}),I.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L(I.map(r=>r.name)),children:c("agents.selectAllAgents","Select all agents")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L([]),children:c("agents.clearAgents","Clear agents")})]}),I.length>0?e.jsx("div",{className:"agent-import-agent-list",children:I.map((r,f)=>e.jsxs("div",{className:"agent-import-agent-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":c("agents.selectAgent","Select agent {{name}}",{name:r.name}),checked:K.includes(r.name),onChange:()=>Te(r.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:r.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:r.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[r.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[r.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:r.role}),r.reportsTo&&e.jsxs("span",{className:"agent-import-agent-reports",children:[" · reports to ",r.reportsTo]}),r.skills&&r.skills.length>0&&e.jsxs("span",{className:"agent-import-agent-model",children:[" · skills: ",r.skills.join(", ")]})]}),r.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[r.instructionsText.slice(0,100),r.instructionsText.length>100?"...":""]})]})]},f))}):e.jsx("p",{className:"agent-import-empty",children:c("agents.noAgentsFound","No agents found in the manifest.")}),A.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Lt,{size:14}),e.jsx("span",{children:c("agents.skillsFound","{{count}} skill{{plural}} found",{count:A.length,plural:A.length!==1?"s":""})})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>se(A.map(r=>r.name)),children:c("agents.selectAllSkills","Select all skills")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>se([]),children:c("agents.clearSkills","Clear skills")})]}),e.jsx("div",{className:"agent-import-skill-list",children:A.map((r,f)=>e.jsxs("div",{className:"agent-import-skill-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":c("agents.selectSkill","Select skill {{name}}",{name:r.name}),checked:X.includes(r.name),onChange:()=>ze(r.name)})}),e.jsx("span",{className:"agent-import-skill-icon",children:"⚡"}),e.jsxs("div",{className:"agent-import-skill-details",children:[e.jsx("span",{className:"agent-import-skill-name",children:r.name}),r.description&&e.jsx("span",{className:"agent-import-skill-description",children:r.description})]})]},`${r.name}-${f}`))})]}),M&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(rt,{size:14}),M]})]}),v==="result"&&k&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(vt,{size:32})}),e.jsx("h3",{className:"agent-import-result-title",children:c("agents.importComplete","Import Complete")}),e.jsxs("p",{className:"agent-import-result-company",children:[c("agents.from","From")," ",e.jsx("strong",{children:k.companyName??"Unknown"})]}),e.jsxs("div",{className:"agent-import-result-stats",children:[k.created.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:c("agents.resultCreated","{{count}} created",{count:k.created.length})})}),k.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:c("agents.resultSkipped","{{count}} skipped (already exist)",{count:k.skipped.length})})}),k.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:c("agents.resultErrors","{{count}} error{{plural}}",{count:k.errors.length,plural:k.errors.length!==1?"s":""})})})]}),k.created.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:k.created.map((r,f)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(vt,{size:12}),e.jsx("span",{children:r.name})]},f))}),k.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:k.errors.map((r,f)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(ea,{size:12}),e.jsxs("span",{children:[r.name,": ",r.error]})]},f))}),k.warnings&&k.warnings.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:k.warnings.map((r,f)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(rt,{size:12}),e.jsx("span",{children:r})]},f))}),k.skills&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-result-divider"}),e.jsx("h4",{className:"agent-import-result-section-title",children:c("agents.skills","Skills")}),e.jsxs("div",{className:"agent-import-result-stats",children:[k.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:c("agents.skillsImported","{{count}} skill{{plural}} imported",{count:k.skills.imported.length,plural:k.skills.imported.length!==1?"s":""})})}),k.skills.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:c("agents.skillsSkipped","{{count}} skill{{plural}} skipped (already exist)",{count:k.skills.skipped.length,plural:k.skills.skipped.length!==1?"s":""})})}),k.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:c("agents.skillsErrors","{{count}} skill{{plural}} error{{pluralError}}",{count:k.skills.errors.length,plural:k.skills.errors.length!==1?"s":"",pluralError:k.skills.errors.length!==1?"s":""})})}),k.skills.imported.length===0&&k.skills.skipped.length===0&&k.skills.errors.length===0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:c("agents.noSkillsInPackage","No skills in package")})})]}),k.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:k.skills.imported.map((r,f)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(vt,{size:12}),e.jsx("span",{children:r.name})]},f))}),k.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:k.skills.errors.map((r,f)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(ea,{size:12}),e.jsxs("span",{children:[r.name,": ",r.error]})]},f))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[v==="preview"&&e.jsx("button",{className:"btn",onClick:()=>g("input"),disabled:le,children:c("agents.back","Back")}),e.jsx("button",{className:"btn",onClick:_e,disabled:le,children:v==="result"?c("agents.close","Close"):c("agents.cancel","Cancel")}),v==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void $e(),disabled:he||(l==="directory"?C.length===0:l==="browse"?!Z:!j.trim()),children:he?e.jsxs(e.Fragment,{children:[e.jsx(St,{size:14,className:"spin"}),c("agents.parsing","Parsing...")]}):c("agents.preview","Preview")}),v==="preview"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void z(),disabled:le||E===0&&U===0,children:le?e.jsxs(e.Fragment,{children:[e.jsx(St,{size:14,className:"spin"}),Fe]}):c("agents.importButton","Import {{label}}",{label:ge})})]})]})}):null}const Et="fn-agent-org-chart-layout";function ma(n){return n==="auto"||n==="horizontal"||n==="vertical"}const Vs=768,Bs={nodeWidth:220,siblingGap:24,rootGap:24,chartPadding:24},Ws={nodeWidth:160,siblingGap:8,rootGap:8,chartPadding:8};function ba(n){return n.children.length===0?1:n.children.reduce((d,b)=>d+ba(b),0)}function Us(n){return n<=Vs?Ws:Bs}function Gs(n,d){const b=ba(n);return b*d.nodeWidth+Math.max(0,b-1)*d.siblingGap}function Ks(n,d=Number.POSITIVE_INFINITY){const b=Us(d);if(n.length===0)return b.nodeWidth;const a=n.map(v=>Gs(v,b)).reduce((v,g)=>v+g,0),c=Math.max(0,n.length-1)*b.rootGap;return a+c+b.chartPadding*2}function Ys(n){const d=n.preference??"auto";if(d!=="auto")return d;const b=Number.isFinite(n.availableWidth)&&n.availableWidth>0?n.availableWidth:0;return b===0||n.tree.length<=1?"horizontal":Ks(n.tree,b)>b?"vertical":"horizontal"}const ha=s.lazy(()=>gs(()=>import("./AgentDetailView-krC0B2O0.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])).then(n=>({default:n.AgentDetailView})));function Xs(n){return[{value:"triage",label:n("agents.roleTriage","Triage"),icon:"⊕"},{value:"executor",label:n("agents.roleExecutor","Executor"),icon:"▶"},{value:"reviewer",label:n("agents.roleReviewer","Reviewer"),icon:"⊙"},{value:"merger",label:n("agents.roleMerger","Merger"),icon:"⊞"},{value:"scheduler",label:n("agents.roleScheduler","Scheduler"),icon:"◷"},{value:"engineer",label:n("agents.roleEngineer","Engineer"),icon:"⎔"},{value:"custom",label:n("agents.roleCustom","Custom"),icon:"✦"}]}const Pt=[.1,.25,.5,1,2,3,5,10],qs=.25,Zs=3,bt=16,Qe=32;function Ht(n){switch(n){case"running":return"agent-badge--running";case"active":return"agent-badge--active";case"paused":return"agent-badge--paused";case"error":return"agent-badge--error";case"idle":default:return"agent-badge--idle"}}function Ot(n,d){switch(d){case"running":return`${n}--running`;case"active":return`${n}--active`;case"paused":return`${n}--paused`;case"error":return`${n}--error`;case"idle":default:return`${n}--idle`}}function va(n){return n.children.length===0?1:n.children.reduce((d,b)=>d+va(b),0)}function $t(n,d,b){return n.state==="error"?{title:void 0,label:b("agents.healthError","Error")}:{title:d.reason??d.label,label:d.stateDerived?null:d.label}}function fa({node:n,onSelect:d,getHealthStatus:b,selectedAgentId:p,registerNodeElement:a,linksRef:c}){const{t:v}=Me("app"),{agent:g,children:l}=n,x=b(g),j=$t(g,x,v),R=Ht(g.state),C=Ot("org-chart-node-card",g.state),S=va(n),$={"--org-chart-subtree-leaves":String(S)};return e.jsxs("div",{className:`org-chart-node${l.length>0?" org-chart-node--has-children":""}`,style:$,children:[e.jsxs("div",{ref:N=>a(g.id,N),"data-agent-id":g.id,className:`org-chart-node-card ${C}${p===g.id?" agent-card--selected":""}`,onClick:()=>d(g.id),role:"button",tabIndex:0,onKeyDown:N=>{(N.key==="Enter"||N.key===" ")&&(N.key===" "&&N.preventDefault(),d(g.id))},children:[e.jsxs("div",{className:"org-chart-node__header",children:[e.jsx("span",{className:"org-chart-node__icon",children:e.jsx(ft,{agent:g,size:20})}),e.jsx("span",{className:"org-chart-node__name",children:g.name})]}),e.jsxs("div",{className:"org-chart-node__meta",children:[e.jsx("span",{className:`org-chart-node__badge ${R}`,children:g.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:x.color},title:j.title,children:[x.icon,j.label&&e.jsx("span",{className:"text-secondary",children:j.label})]})]})]}),l.length>0&&e.jsx("div",{className:"org-chart-children",role:"group","aria-label":v("agents.orgChartEmployees","{{name}} employees",{name:g.name}),children:l.map(N=>(c.current.push({parentId:g.id,childId:N.agent.id}),e.jsx(fa,{node:N,onSelect:d,getHealthStatus:b,selectedAgentId:p,registerNodeElement:a,linksRef:c},N.agent.id)))})]})}function Js({links:n,nodeElements:d,canvasRef:b,viewportRef:p,layoutMode:a,transform:c}){const[v,g]=s.useState([]);return s.useLayoutEffect(()=>{const l=b.current,x=p.current;if(!l||!x||n.length===0){g([]);return}const j=()=>{const C=l.getBoundingClientRect(),S=n.flatMap(({parentId:$,childId:N})=>{const I=d.get($),B=d.get(N);if(!I||!B)return[];const A=I.getBoundingClientRect(),F=B.getBoundingClientRect(),y=(A.left-C.left)/c.scale,D=(A.top-C.top)/c.scale,K=(F.left-C.left)/c.scale,L=(F.top-C.top)/c.scale;if(a==="vertical"){const ie=y,ce=D+A.height/c.scale/2,H=K,k=L+F.height/c.scale/2,pe=ie-(ie-H)/2;return[`M ${ie} ${ce} L ${pe} ${ce} L ${pe} ${k} L ${H} ${k}`]}const X=y+A.width/c.scale/2,se=D+A.height/c.scale,he=K+F.width/c.scale/2,ne=L,le=se+(ne-se)/2;return[`M ${X} ${se} L ${X} ${le} L ${he} ${le} L ${he} ${ne}`]});g(S)};j();const R=new ResizeObserver(j);return R.observe(l),R.observe(x),d.forEach(C=>R.observe(C)),()=>R.disconnect()},[b,a,n,d,c.scale,p]),e.jsx("svg",{className:"agent-org-chart-connectors","aria-hidden":"true",children:v.map((l,x)=>e.jsx("path",{d:l},`${x}-${l}`))})}function cn({addToast:n,projectId:d,onOpenTaskLogs:b,agentOnboardingEnabled:p=!1}){const{t:a}=Me("app"),c=Xs(a),[v,g]=s.useState(!1),x=Ja()==="mobile",[j,R]=s.useState("all"),{agents:C,stats:S,isLoading:$,loadAgents:N,refreshAgents:I}=Qa(d,{filterState:j,showSystemAgents:v}),[B,A]=s.useState(!1),[F,y]=s.useState(null),[D,K]=s.useState(!1),[L,X]=s.useState(null),[se,he]=s.useState(null),ne=x&&!!L,[le,ie]=s.useState("dashboard"),[ce,H]=s.useState(null),[k,pe]=s.useState(!1),[M,oe]=s.useState(()=>{if(typeof window>"u")return"list";const t=ht("fn-agent-view",d);return t==="list"||t==="board"||t==="org"?t:"list"}),[de,Ee]=s.useState(()=>{if(typeof window>"u")return"auto";const t=ht(Et,d);return ma(t)?t:"auto"}),[xe,fe]=s.useState([]),[q,Pe]=s.useState(!1),[Z,be]=s.useState(0),[ve,W]=s.useState(!1),[Oe,J]=s.useState(!1),[Ne,Ke]=s.useState(!1),[Ae,_e]=s.useState(!1),[Le,Ye]=s.useState(0),[Ie,$e]=s.useState(0),[z,E]=s.useState({scale:1,x:0,y:0}),[U,je]=s.useState(!1),Re=s.useRef(null),ge=s.useRef(null),Fe=s.useRef(null),Te=s.useRef(new Map),ze=s.useRef([]),r=s.useRef(new Map),f=s.useRef(null),P=s.useRef(null),V=s.useRef(!1),{confirm:Q}=es(),Y=s.useRef(null),De=s.useId();s.useEffect(()=>{const t=ht("fn-agent-view",d);if(t==="list"||t==="board"||t==="org"){oe(t);return}oe("list")},[d]),s.useEffect(()=>{ta("fn-agent-view",M,d)},[M,d]),s.useEffect(()=>{const t=ht(Et,d);Ee(ma(t)?t:"auto")},[d]),s.useEffect(()=>{ta(Et,de,d)},[de,d]);const[at,ye]=s.useState(null),Xe=s.useRef(null),[Nt,ke]=s.useState(null),[Ve,Ce]=s.useState(null),[st,we]=s.useState({}),[i,_]=s.useState(1),[He,Be]=s.useState(!1),[Se,Dt]=s.useState(new Set),[yt,qe]=s.useState(new Map),ct=s.useRef(!0);s.useEffect(()=>(ct.current=!0,()=>{ct.current=!1}),[]),s.useEffect(()=>{ts(d).then(t=>{ct.current&&_(t.heartbeatMultiplier??1)}).catch(()=>{})},[d]);const Vt=s.useCallback(async t=>{const o=Number.isFinite(t)&&t>0?t:1;_(o),Be(!0);try{await as({heartbeatMultiplier:o},d),n(a("agents.heartbeatSpeedSet","Heartbeat speed set to ×{{value}}",{value:o.toFixed(1)}),"success")}catch(u){n(a("agents.heartbeatSpeedSaveFailed","Failed to save heartbeat multiplier: {{error}}",{error:me(u)}),"error")}finally{ct.current&&Be(!1)}},[d,n]),dt=s.useMemo(()=>yt.size===0?C:C.map(t=>{const o=yt.get(t.id);return o?{...t,state:o}:t}),[C,yt]),nt=s.useMemo(()=>dt.filter(t=>v||!ot(t)),[dt,v]),ja=s.useMemo(()=>dt.filter(t=>t.state!=="active"&&t.state!=="running"?!1:v||!ot(t)),[dt,v]),We=s.useMemo(()=>{if(v)return xe;const t=o=>ot(o.agent)?null:{...o,children:o.children.map(t).filter(u=>u!==null)};return xe.map(t).filter(o=>o!==null)},[xe,v]);s.useEffect(()=>{if(M!=="org")return;const t=ge.current;if(!t)return;const o=()=>{be(t.clientWidth)};o();const u=typeof ResizeObserver<"u"?new ResizeObserver(o):null;return u?.observe(t),window.addEventListener("resize",o),()=>{u?.disconnect(),window.removeEventListener("resize",o)}},[M,We.length]),s.useEffect(()=>{if(M!=="org")return;let t=!1;return Pe(!0),ss(d,{includeEphemeral:v}).then(o=>{t||fe(o)}).catch(o=>{t||(n(a("agents.orgChartLoadFailed","Failed to load org chart: {{error}}",{error:me(o)}),"error"),fe([]))}).finally(()=>{t||Pe(!1)}),()=>{t=!0}},[M,d,v,n]),s.useEffect(()=>{const t=setInterval(()=>{N()},3e4);return()=>{clearInterval(t)}},[N]),s.useEffect(()=>{if(!ve)return;let t=!1;_e(!0),Ft(void 0,d).then(m=>{if(t)return;const w=m.filter(T=>!ot(T));Ye(w.filter(T=>T.state==="active"||T.state==="running").length),$e(w.filter(T=>T.state==="paused").length)}).catch(m=>{t||(Ye(0),$e(0),n(a("agents.bulkActionsLoadFailed","Failed to load bulk agent actions: {{error}}",{error:me(m)}),"error"))}).finally(()=>{t||_e(!1)});const o=m=>{const w=m.target;w&&(Re.current?.contains(w)||Y.current?.contains(w)||W(!1))},u=m=>{m.key==="Escape"&&(W(!1),Y.current?.focus())};return document.addEventListener("mousedown",o),document.addEventListener("touchstart",o),document.addEventListener("keydown",u),()=>{t=!0,document.removeEventListener("mousedown",o),document.removeEventListener("touchstart",o),document.removeEventListener("keydown",u)}},[n,ve,d]);const Bt=async t=>{if(!Ne){Ke(!0);try{const u=(await Ft(void 0,d)).filter(G=>!ot(G)),m=u.filter(G=>t==="paused"?G.state==="active"||G.state==="running":G.state==="paused"),w=u.length-m.length;if(m.length===0){n(t==="paused"?a("agents.noAgentsToPause","No agents eligible to pause"):a("agents.noAgentsToResume","No agents eligible to resume"),"error");return}if(!await Q({title:t==="paused"?a("agents.pauseAllTitle","Pause All Agents"):a("agents.resumeAllTitle","Resume All Agents"),message:t==="paused"?a("agents.pauseAllConfirm",{count:m.length,defaultValue_one:"Pause {{count}} agent in this project?",defaultValue_other:"Pause {{count}} agents in this project?"}):a("agents.resumeAllConfirm",{count:m.length,defaultValue_one:"Resume {{count}} agent in this project?",defaultValue_other:"Resume {{count}} agents in this project?"}),danger:t==="paused"}))return;const re=await Promise.allSettled(m.map(G=>ia(G.id,t,d))),ae=re.map((G,mt)=>({result:G,agent:m[mt]})).filter(G=>G.result.status==="rejected"),h=re.length-ae.length,O=ae.length,te=t==="paused"?a("agents.pausedSummary",{count:h,skipped:w,defaultValue_one:"Paused {{count}} agent; skipped {{skipped}}",defaultValue_other:"Paused {{count}} agents; skipped {{skipped}}"}):a("agents.resumedSummary",{count:h,skipped:w,defaultValue_one:"Resumed {{count}} agent; skipped {{skipped}}",defaultValue_other:"Resumed {{count}} agents; skipped {{skipped}}"});if(O>0){const G=ae.slice(0,3).map(({agent:mt,result:za})=>`${mt.name||mt.id}: ${me(za.reason)}`).join("; ");n(`${te}; failed ${O}${G?` (${G})`:""}`,"error")}else n(te,"success");await N()}catch(o){n(t==="paused"?a("agents.pauseAgentsFailed","Failed to pause agents: {{error}}",{error:me(o)}):a("agents.resumeAgentsFailed","Failed to resume agents: {{error}}",{error:me(o)}),"error")}finally{Ke(!1)}}},lt=async(t,o)=>{if(!Se.has(t)){Dt(u=>new Set(u).add(t)),qe(u=>{const m=new Map(u);return m.set(t,o),m});try{await ia(t,o,d),n(a("agents.stateUpdated","Agent state updated to {{state}}",{state:o}),"success"),await N(),qe(u=>{const m=new Map(u);return m.delete(t),m})}catch(u){qe(m=>{const w=new Map(m);return w.delete(t),w}),n(a("agents.stateUpdateFailed","Failed to update state: {{error}}",{error:me(u)}),"error")}finally{Dt(u=>{const m=new Set(u);return m.delete(t),m})}}},Wt=async(t,o)=>{if(await Q({title:a("agents.deleteTitle","Delete Agent"),message:a("agents.deleteConfirm",'Delete agent "{{name}}"? This cannot be undone.',{name:o}),danger:!0}))try{await ms(t,d),n(a("agents.deleted",'Agent "{{name}}" deleted',{name:o}),"success"),await N()}catch(m){n(a("agents.deleteFailed","Failed to delete agent: {{error}}",{error:me(m)}),"error")}},Na=async(t,o)=>{const u=C.find(m=>m.id===t);if(u){if(u.role===o){ye(null);return}try{await xt(t,{role:o},d),n(a("agents.roleUpdated","Agent role updated to {{role}}",{role:c.find(m=>m.value===o)?.label??o}),"success"),ye(null),N()}catch(m){n(a("agents.roleUpdateFailed","Failed to update role: {{error}}",{error:me(m)}),"error")}}},ya=(t,o)=>{t.key==="Escape"&&ye(null)},ka=async(t,o)=>{Ve===t.id&&(Ce(null),we(u=>{const m={...u};return delete m[t.id],m})),ke(t.id);try{await xt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:o}},d),n(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:ra(o),name:t.name}),"success"),N()}catch(u){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(u)}),"error")}finally{ke(null)}},Ut=async t=>{const o=st[t.id]??"";if(o.trim()===""){n(a("agents.heartbeatEnterMinutes","Please enter a heartbeat interval in minutes"),"error");return}const u=Number(o);if(isNaN(u)){n(a("agents.heartbeatMustBeNumber","Heartbeat interval must be a valid number"),"error");return}if(u<=0){n(a("agents.heartbeatMustBePositive","Heartbeat interval must be greater than 0"),"error");return}if(u>=1&&u<5){ke(t.id);try{await xt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:hs}},d),n(a("agents.heartbeatClampedToMin",{count:u,defaultValue_one:"Heartbeat interval set to 5 minutes (minimum). {{count}} minute was below the 5-minute minimum.",defaultValue_other:"Heartbeat interval set to 5 minutes (minimum). {{count}} minutes was below the 5-minute minimum."}),"success"),Ce(null),we(w=>{const T={...w};return delete T[t.id],T}),N()}catch(w){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(w)}),"error")}finally{ke(null)}return}const m=Math.round(u*6e4);ke(t.id);try{await xt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:m}},d),n(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:ra(m),name:t.name}),"success"),Ce(null),we(w=>{const T={...w};return delete T[t.id],T}),N()}catch(w){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(w)}),"error")}finally{ke(null)}},Ca=t=>{const o=_t(t.runtimeConfig?.heartbeatIntervalMs),u=Math.round(o/6e4);Ce(t.id),we(m=>({...m,[t.id]:String(u)}))},ue=s.useCallback((t,o)=>{X(t),ie(o?.initialTab??"dashboard"),H(o?.initialRunId??null),pe(o?.preferActiveRun??!1)},[]),Ue=s.useCallback(()=>{X(null),ie("dashboard"),H(null),pe(!1)},[]),Gt=s.useCallback(t=>{ue(t)},[ue]),wa=s.useCallback(t=>{he(t),ue(t)},[ue]),Sa=s.useCallback(async({agentId:t,deleted:o})=>{await I(),o&&L===t&&Ue()},[I,L,Ue]),Aa=s.useCallback(t=>{ue(t),x&&J(!1)},[x,ue]),Ra=async(t,o)=>{qe(u=>{const m=new Map(u);return m.set(t,"running"),m});try{await ps(t,d,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),n(a("agents.heartbeatRunStarted","Heartbeat run started for {{name}}",{name:o}),"success"),await N(),qe(u=>{const m=new Map(u);return m.delete(t),m})}catch(u){qe(m=>{const w=new Map(m);return w.delete(t),w}),n(a("agents.heartbeatRunFailed","Failed to start heartbeat run: {{error}}",{error:me(u)}),"error")}},Ge=s.useCallback(t=>Math.min(Zs,Math.max(qs,t)),[]),ee=s.useCallback(t=>{const o=ge.current,u=Fe.current?.querySelector(".agent-org-chart");if(!o||!u)return{...t,scale:Ge(t.scale)};const m=Ge(t.scale),w=u.scrollWidth*m,T=u.scrollHeight*m,re=o.clientWidth,ae=o.clientHeight,h=Math.min(Qe,re-w-Qe),O=Qe,te=Math.min(Qe,ae-T-Qe),G=Qe;return{scale:m,x:Math.max(h,Math.min(O,t.x)),y:Math.max(te,Math.min(G,t.y))}},[Ge]),gt=s.useCallback((t,o,u)=>{const m=ge.current;m&&E(w=>{const T=Ge(t),re=m.getBoundingClientRect(),ae=o-re.left,h=u-re.top,O=(ae-w.x)/w.scale,te=(h-w.y)/w.scale;return ee({scale:T,x:ae-O*T,y:h-te*T})})},[Ge,ee]),Ze=s.useCallback(()=>{const t=ge.current,o=Fe.current?.querySelector(".agent-org-chart");if(!t||!o)return;const u=t.clientWidth,m=t.clientHeight,w=o.scrollWidth,T=o.scrollHeight;if(w<=0||T<=0)return;const re=Ge(Math.min(u/w,m/T,1)),ae=(u-w*re)/2,h=(m-T*re)/2;E(ee({scale:re,x:ae,y:h}))},[Ge,ee]),kt=s.useCallback(t=>{oe(t),t!=="org"&&E({scale:1,x:0,y:0}),x&&L&&Ue()},[Ue,x,L]),Kt=t=>c.find(o=>o.value===t)?.label??t,ut=s.useMemo(()=>Ys({tree:We,availableWidth:Z,preference:de}),[We,de,Z]),Yt=s.useCallback(t=>{Ee(t),E({scale:1,x:0,y:0})},[]);s.useEffect(()=>{E({scale:1,x:0,y:0}),V.current=!1},[d,ut]),s.useLayoutEffect(()=>{M!=="org"||q||We.length===0||V.current||(Ze(),V.current=!0)},[M,We.length,Ze,q]);const Ta=s.useCallback((t,o)=>{o?Te.current.set(t,o):Te.current.delete(t)},[]),Xt=s.useCallback(()=>e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>E(t=>ee({...t,scale:t.scale*.9})),"aria-label":a("agents.orgChartZoomOut","Zoom out org chart"),title:a("agents.zoomOut","Zoom out"),children:e.jsx(Ts,{size:16})}),e.jsxs("span",{className:"agent-org-chart-controls__zoom-label","aria-live":"polite",children:[Math.round(z.scale*100),"%"]}),e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>E(t=>ee({...t,scale:t.scale*1.1})),"aria-label":a("agents.orgChartZoomIn","Zoom in org chart"),title:a("agents.zoomIn","Zoom in"),children:e.jsx(As,{size:16})}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm agent-org-chart-controls__fit-btn",onClick:Ze,"aria-label":a("agents.orgChartFit","Fit org chart"),title:a("agents.orgChartFit","Fit org chart"),children:[e.jsx(ns,{size:16}),a("agents.fit","Fit")]}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm",onClick:()=>E(t=>ee({...t,x:0,y:0})),"aria-label":a("agents.orgChartCenter","Center org chart"),title:a("agents.orgChartCenter","Center org chart"),children:[e.jsx(ls,{size:16}),a("agents.center","Center")]})]}),[ee,Ze,z.scale]),Ma=s.useCallback(t=>{if(!(t.ctrlKey||t.metaKey))return;t.preventDefault();const o=t.deltaY>0?.9:1.1;gt(z.scale*o,t.clientX,t.clientY)},[z.scale,gt]),Ea=s.useCallback(t=>{if(t.target.closest(".org-chart-node-card"))return;if(t.currentTarget.setPointerCapture?.(t.pointerId),r.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),r.current.size===1){f.current={x:t.clientX-z.x,y:t.clientY-z.y,pointerId:t.pointerId},je(!0);return}if(r.current.size===2){const u=Array.from(r.current.values()),m=u[0].x-u[1].x,w=u[0].y-u[1].y;P.current={distance:Math.hypot(m,w),scale:z.scale,centerX:(u[0].x+u[1].x)/2,centerY:(u[0].y+u[1].y)/2},f.current=null}},[z.scale,z.x,z.y]),Pa=s.useCallback(t=>{if(r.current.has(t.pointerId)){if(r.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),r.current.size>=2){const o=Array.from(r.current.values()),u=P.current;if(!u)return;const m=o[0].x-o[1].x,w=o[0].y-o[1].y,T=Math.hypot(m,w),re=u.scale*(T/u.distance);gt(re,u.centerX,u.centerY);return}!f.current||f.current.pointerId!==t.pointerId||E(o=>ee({...o,x:t.clientX-f.current.x,y:t.clientY-f.current.y}))}},[ee,gt]),qt=s.useCallback(t=>{r.current.delete(t.pointerId),r.current.size<2&&(P.current=null),r.current.size===0&&(f.current=null,je(!1))},[]),_a=s.useCallback(t=>{if(t.key==="ArrowLeft")E(o=>ee({...o,x:o.x+bt}));else if(t.key==="ArrowRight")E(o=>ee({...o,x:o.x-bt}));else if(t.key==="ArrowUp")E(o=>ee({...o,y:o.y+bt}));else if(t.key==="ArrowDown")E(o=>ee({...o,y:o.y-bt}));else if(t.key==="+"||t.key==="=")E(o=>ee({...o,scale:o.scale*1.1}));else if(t.key==="-")E(o=>ee({...o,scale:o.scale*.9}));else if(t.key==="0")Ze();else if(t.key==="Home")E({scale:1,x:0,y:0});else return;t.preventDefault()},[ee,Ze]),Zt=s.useCallback(()=>{const t=[{value:"horizontal",label:a("agents.layoutHorizontal","Horizontal"),icon:e.jsx(aa,{size:16}),ariaLabel:a("agents.layoutHorizontalAria","Horizontal layout")},{value:"vertical",label:a("agents.layoutVertical","Vertical"),icon:e.jsx(sa,{size:16}),ariaLabel:a("agents.layoutVerticalAria","Vertical layout")},{value:"auto",label:a("agents.layoutAuto","Auto"),icon:e.jsx(et,{size:16}),ariaLabel:a("agents.layoutAutoAria","Automatic layout")}];return e.jsx("div",{className:"agent-org-chart-layout-toggle","data-testid":"agent-org-chart-layout-toggle",children:t.map(o=>{const u=de===o.value;return e.jsxs("button",{type:"button",className:`btn-icon touch-target agent-org-chart-layout-toggle__button${u?" btn-icon--active":""}`,onClick:()=>Yt(o.value),"aria-pressed":u,"aria-label":o.ariaLabel,title:o.ariaLabel,"data-layout-value":o.value,children:[o.icon,e.jsx("span",{className:"agent-org-chart-layout-toggle__text",children:o.label})]},o.value)})})},[Yt,de]),La=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],Ct=t=>us(t),Ia=Ae||Ne||Le===0,Fa=Ae||Ne||Ie===0,Jt=$&&C.length===0,it=s.useCallback(()=>{A(!0)},[]);return e.jsxs("div",{className:"agents-view",children:[e.jsxs("div",{className:"agents-view-header",children:[e.jsxs("div",{className:"agents-view-title",children:[e.jsx(It,{size:24}),e.jsx("h2",{children:a("agents.title","Agents")})]}),e.jsxs("div",{className:"agents-view-controls",children:[e.jsxs("div",{className:"view-toggle",children:[e.jsx("button",{className:`view-toggle-btn${M==="list"?" active":""}`,onClick:()=>kt("list"),title:a("agents.listView","List view"),"aria-label":a("agents.listView","List view"),"aria-pressed":M==="list",children:e.jsx(sa,{size:16})}),e.jsx("button",{className:`view-toggle-btn${M==="board"?" active":""}`,onClick:()=>kt("board"),title:a("agents.boardView","Board view"),"aria-label":a("agents.boardView","Board view"),"aria-pressed":M==="board",children:e.jsx(tt,{size:16})}),e.jsx("button",{className:`view-toggle-btn${M==="org"?" active":""}`,onClick:()=>kt("org"),title:a("agents.orgChartView","Org Chart view"),"aria-label":a("agents.orgChartView","Org Chart view"),"aria-pressed":M==="org",children:e.jsx(aa,{size:16})})]}),e.jsxs("div",{className:"agents-view-primary-actions",children:[e.jsx("button",{ref:Y,className:`btn-icon agent-controls-trigger${ve?" agent-controls-trigger--active":""}`,onClick:()=>W(t=>!t),title:a("agents.controls","Controls"),"aria-label":a("agents.controls","Controls"),"aria-haspopup":"dialog","aria-expanded":ve,"aria-controls":De,children:e.jsx(ws,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void N(),title:a("agents.refresh","Refresh"),"aria-label":a("agents.refresh","Refresh"),children:e.jsx(et,{size:16,className:$?"spin":void 0})}),!x&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{K(!0),W(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(zt,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{it(),W(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(na,{size:16}),a("agents.newAgent","New Agent")]})]}),ve&&e.jsxs("div",{ref:Re,id:De,className:"agent-controls-panel agent-controls-panel--scrollable",role:"dialog","aria-label":a("agents.agentControls","Agent controls"),"aria-modal":"false",children:[e.jsx("div",{className:"agent-controls",children:e.jsxs("div",{className:"agent-controls-filters",children:[e.jsxs("div",{className:"agent-state-filter",children:[e.jsx(is,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:j,onChange:t=>R(t.target.value),"aria-label":a("agents.filterByState","Filter agents by state"),children:[e.jsx("option",{value:"all",children:a("agents.stateAll","All States")}),e.jsx("option",{value:"idle",children:a("agents.stateIdle","Idle")}),e.jsx("option",{value:"active",children:a("agents.stateActive","Active")}),e.jsx("option",{value:"running",children:a("agents.stateRunning","Running")}),e.jsx("option",{value:"paused",children:a("agents.statePaused","Paused")}),e.jsx("option",{value:"error",children:a("agents.stateError","Error")})]})]}),e.jsxs("label",{className:"checkbox-label agent-system-filter",children:[e.jsx("input",{type:"checkbox",checked:v,onChange:t=>g(t.target.checked),"aria-label":a("agents.showSystemAgents","Show system agents")}),a("agents.showSystemAgents","Show system agents")]})]})}),x&&e.jsxs("div",{className:"agent-controls-mobile-actions",children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{K(!0),W(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(zt,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{it(),W(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(na,{size:16}),a("agents.newAgent","New Agent")]})]}),e.jsxs("div",{className:"agent-controls-bulk-actions",role:"menu","aria-label":a("agents.bulkAgentActions","Bulk agent actions"),children:[e.jsxs("button",{type:"button",className:"agent-detail-bulk-menu-item",role:"menuitem",disabled:Ia,onClick:()=>{W(!1),Bt("paused")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(At,{}),e.jsx("span",{children:a("agents.pauseAllAgents","Pause All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:Ae?a("agents.loadingEligibility","Loading eligibility…"):Le===0?a("agents.noAgentsToPauseHint","No active or running project agents to pause"):a("agents.pauseCountHint",{count:Le,defaultValue_one:"Pause {{count}} active/running agent",defaultValue_other:"Pause {{count}} active/running agents"})})]}),e.jsxs("button",{type:"button",className:"agent-detail-bulk-menu-item",role:"menuitem",disabled:Fa,onClick:()=>{W(!1),Bt("active")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(pt,{}),e.jsx("span",{children:a("agents.resumeAllAgents","Resume All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:Ae?a("agents.loadingEligibility","Loading eligibility…"):Ie===0?a("agents.noAgentsToResumeHint","No paused project agents to resume"):a("agents.resumeCountHint",{count:Ie,defaultValue_one:"Resume {{count}} paused agent",defaultValue_other:"Resume {{count}} paused agents"})})]})]}),e.jsx("div",{className:"agent-global-controls agent-controls-actions",children:e.jsxs("div",{className:"heartbeat-multiplier-group",children:[e.jsxs("div",{className:"heartbeat-multiplier-controls",children:[e.jsx("label",{htmlFor:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-label",children:a("agents.heartbeatSpeed","Heartbeat Speed")}),e.jsx("input",{id:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-slider touch-target",type:"range",min:.1,max:10,step:.1,value:i,onChange:t=>{const o=Number(t.target.value);Vt(Number.isFinite(o)&&o>0?o:1)},disabled:He}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",i.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(Pt.reduce((t,o)=>Math.abs(o-i)<Math.abs(t-i)?o:t,Pt[0])),onChange:t=>{const o=Number(t.target.value);Vt(Number.isFinite(o)&&o>0?o:1)},disabled:He,"aria-label":a("agents.heartbeatSpeedPreset","Heartbeat speed preset"),children:Pt.map(t=>e.jsxs("option",{value:String(t),children:["×",t]},t))})]}),e.jsx("small",{className:"text-secondary",children:a("agents.heartbeatSpeedHint","Scales all agent heartbeat intervals. ×0.5 = twice as fast, ×2.0 = twice as slow. Default: ×1.0")})]})}),e.jsx(Ms,{agents:nt})]})]})]})]}),e.jsx(Os,{isOpen:B,onClose:()=>{A(!1),y(null)},onCreated:()=>{A(!1),y(null),N()},projectId:d,prefillDraft:F,agentOnboardingEnabled:p,existingAgents:C,onPrefillDraft:y}),e.jsx(Ds,{isOpen:D,onClose:()=>K(!1),onImported:()=>void N(),projectId:d}),e.jsx(zs,{stats:S,activeAgents:ja,projectId:d,isOpen:Oe,onToggle:()=>J(t=>!t),onSelectAgent:Aa,onOpenTaskLogs:b}),M==="org"?e.jsx("div",{className:"agents-org-full-view",children:e.jsx("div",{className:"agents-view-content agents-view-content--org-full",children:L?e.jsxs("div",{className:"agents-org-detail-view","data-testid":"agents-org-detail-view",children:[e.jsx("button",{type:"button",className:"btn btn-sm agents-org-detail-back",onClick:Ue,"aria-label":a("agents.backToOrgChart","Back to org chart"),children:a("agents.backToOrgChart","Back to org chart")}),e.jsx(s.Suspense,{fallback:null,children:e.jsx(ha,{inline:!0,showInlineBackButton:!1,agentId:L,projectId:d,onClose:Ue,addToast:n,onChildClick:Gt,initialTab:le,initialRunId:ce,preferActiveRun:k},L)})]}):Jt?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(et,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingAgents","Loading agents...")})]}):e.jsxs("div",{className:"agent-org-chart-shell","data-testid":"agent-org-chart-shell",children:[x?e.jsxs("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:[Zt(),Xt()]}):e.jsxs("div",{className:"agent-org-chart-toolbar",children:[Zt(),e.jsx("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:Xt()})]}),e.jsx("div",{ref:ge,className:"agent-org-chart-viewport","data-testid":"agent-org-chart-viewport",tabIndex:0,role:"region","aria-label":a("agents.orgChartCanvas","Org chart canvas"),onWheel:Ma,onPointerDown:Ea,onPointerMove:Pa,onPointerUp:qt,onPointerCancel:qt,onKeyDown:_a,"data-panning":U?"true":"false",children:e.jsxs("div",{ref:Fe,className:`agent-org-chart-canvas agent-org-chart-canvas--zoom-${Math.round((z.scale??1)*100)}`,"data-panning":U?"true":"false",style:{transform:`translate(${z.x}px, ${z.y}px) scale(${z.scale})`},children:[e.jsx("div",{className:`agent-org-chart${ut==="vertical"?" agent-org-chart--vertical":""}`,"data-testid":"agent-org-chart","data-layout-mode":ut,children:q?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx(et,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingOrgChart","Loading org chart...")})]}):We.length===0?e.jsx(Tt,{onCtaClick:it}):(ze.current=[],We.map(t=>e.jsx(fa,{node:t,onSelect:wa,getHealthStatus:Ct,selectedAgentId:se,registerNodeElement:Ta,linksRef:ze},t.agent.id)))}),e.jsx(Js,{links:ze.current,nodeElements:Te.current,canvasRef:Fe,viewportRef:ge,layoutMode:ut,transform:z})]})})]})})}):e.jsxs("div",{className:"agents-split-layout",children:[e.jsx("div",{className:`agents-split-sidebar${ne?" agents-split-sidebar--hidden-mobile":""}`,children:e.jsx("div",{className:"agents-view-content",children:Jt?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(et,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingAgents","Loading agents...")})]}):M==="board"?e.jsx("div",{className:"agent-board",children:nt.length===0?e.jsx(Tt,{onCtaClick:it}):nt.map(t=>{const o=Ct(t),u=$t(t,o,a),m=Ht(t.state),w=Ot("agent-board-card",t.state);return e.jsxs("div",{className:`agent-board-card ${w}${L===t.id?" agent-card--selected":""}`,children:[e.jsxs("div",{className:"agent-board-clickable",onClick:()=>ue(t.id),role:"button",tabIndex:0,onKeyDown:T=>{(T.key==="Enter"||T.key===" ")&&(T.key===" "&&T.preventDefault(),ue(t.id))},children:[e.jsxs("div",{className:"agent-board-header",children:[e.jsx("span",{className:"agent-board-icon",children:e.jsx(ft,{agent:t,size:20})}),e.jsx("span",{className:"agent-board-badge badge text-secondary",children:Kt(t.role)}),e.jsx("span",{className:`agent-board-badge badge ${m}`,children:t.state}),(t.pendingApprovalCount??0)>0?e.jsxs("span",{className:"agent-board-badge badge agent-approval-badge",title:a("agents.pendingApprovals","Pending approvals"),children:[e.jsx("span",{className:"status-dot status-dot--pending"}),t.pendingApprovalCount]}):null]}),e.jsx("div",{className:"agent-board-name",children:t.name}),e.jsx("div",{className:"agent-board-id",children:t.id}),e.jsxs("div",{className:"agent-board-health",style:{color:o.color},title:u.title,children:[o.icon,u.label?` ${u.label}`:""]})]}),(t.state==="idle"||t.state==="paused"||t.state==="error")&&e.jsx("div",{className:"agent-board-actions",children:e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void Wt(t.id,t.name),title:a("agents.delete","Delete"),children:e.jsx(la,{size:14})})})]},t.id)})}):e.jsx("div",{className:"agent-list",children:nt.length===0?e.jsx(Tt,{onCtaClick:it}):nt.map(t=>{const o=Ct(t),u=$t(t,o,a),m=Ht(t.state),w=Ot("agent-card",t.state),T=_t(t.runtimeConfig?.heartbeatIntervalMs),re=rs(T),ae=Nt===t.id;return e.jsxs("div",{className:`agent-card agent-card--clickable ${w}${L===t.id?" agent-card--selected":""}`,onClick:h=>{const O=h.target;if(O===h.currentTarget){ue(t.id);return}const te=O.closest('button, select, input, [role="button"]');te&&te!==h.currentTarget||ue(t.id)},role:"button",tabIndex:0,onKeyDown:h=>{h.target===h.currentTarget&&(h.key==="Enter"||h.key===" ")&&(h.key===" "&&h.preventDefault(),ue(t.id))},"aria-label":a("agents.openDetails","Open details for {{name}}",{name:t.name}),children:[e.jsxs("div",{className:"agent-card-header",children:[e.jsxs("div",{className:"agent-info",children:[at===t.id?e.jsx("select",{ref:Xe,className:"select agent-role-select",value:t.role,onChange:h=>void Na(t.id,h.target.value),onKeyDown:h=>ya(h,t.id),onBlur:()=>ye(null),autoFocus:!0,children:c.map(h=>e.jsxs("option",{value:h.value,children:[h.icon," ",h.label]},h.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:h=>{h.stopPropagation(),ye(t.id)},title:a("agents.clickToChangeRole","Click to change role"),role:"button",tabIndex:0,onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.stopPropagation(),ye(t.id))},children:e.jsx(ft,{agent:t,size:20})}),e.jsxs("div",{className:"agent-meta",children:[e.jsx("span",{className:"agent-name",children:t.name}),e.jsx("span",{className:"agent-id text-secondary",children:t.id})]}),e.jsx(pa,{size:20,className:"agent-card-chevron"})]}),e.jsxs("div",{className:"agent-badges",children:[e.jsx("span",{className:`badge ${m}`,children:t.state}),e.jsxs("span",{className:"badge",style:{color:o.color},title:u.title,children:[o.icon,u.label?` ${u.label}`:""]}),e.jsx("span",{className:"badge text-secondary",children:Kt(t.role)}),(t.pendingApprovalCount??0)>0?e.jsxs("span",{className:"badge agent-approval-badge",title:a("agents.pendingApprovals","Pending approvals"),children:[e.jsx("span",{className:"status-dot status-dot--pending"}),t.pendingApprovalCount]}):null,(()=>{const h=La(t);if(h.length===0)return null;const O=h.slice(0,2),te=h.length-2;return e.jsxs(e.Fragment,{children:[O.map(G=>e.jsx("span",{className:"badge badge-skill",title:G,children:js(G)},G)),te>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",te]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[t.state==="error"&&t.lastError?e.jsx(os,{errorText:t.lastError,issueContext:{surface:"AgentsView list",agentId:t.id,agentName:t.name,agentState:t.state,taskId:t.taskId}}):null,t.taskId&&e.jsxs("div",{className:"agent-task",children:[e.jsx("span",{className:"text-secondary",children:a("agents.workingOn","Working on:")}),e.jsx("span",{className:"badge",children:t.taskId})]}),e.jsxs("div",{className:"agent-heartbeat-control",children:[e.jsx("span",{className:"text-secondary",children:a("agents.heartbeat","Heartbeat:")}),Ve===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:st[t.id]??"",onChange:h=>we(O=>({...O,[t.id]:h.target.value})),onKeyDown:h=>{h.key==="Enter"?Ut(t):h.key==="Escape"&&(Ce(null),we(O=>{const te={...O};return delete te[t.id],te}))},disabled:ae,"aria-label":a("agents.customHeartbeatAria","Custom heartbeat interval in minutes for {{name}}",{name:t.name})}),e.jsx("span",{className:"text-secondary",children:a("agents.minutesUnit","min")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>void Ut(t),disabled:ae,title:a("agents.saveCustomInterval","Save custom interval"),children:a("agents.save","Save")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>{Ce(null),we(h=>{const O={...h};return delete O[t.id],O})},disabled:ae,title:a("agents.cancelCustomInterval","Cancel custom interval"),children:a("agents.cancel","Cancel")})]}):e.jsx(e.Fragment,{children:e.jsxs("select",{className:"select agent-heartbeat-select",value:T,onChange:h=>{const O=h.target.value;O==="__custom__"?Ca(t):ka(t,Number(O))},disabled:ae,"aria-label":a("agents.setHeartbeatAria","Set heartbeat interval for {{name}}",{name:t.name}),children:[re.map(h=>e.jsx("option",{value:h.value,children:h.label},h.value)),cs.some(h=>h.value===T)&&e.jsx("option",{value:"__custom__",children:a("agents.customHeartbeatOption","Custom...")})]})}),ae&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:a("agents.saving","Saving…")}),t.lastHeartbeatAt&&(()=>{const h=new Date(t.lastHeartbeatAt),O=new Date(h.getTime()+T),te=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"agent-heartbeat-last text-secondary",title:h.toLocaleString(),children:a("agents.lastHeartbeat","Last: {{time}}",{time:h.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})}),te&&e.jsx("span",{className:"agent-heartbeat-next text-secondary",title:O.toLocaleString(),children:a("agents.nextHeartbeat","Next: {{time}}",{time:O.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})})]})})()]})]}),e.jsxs("div",{className:"agent-card-actions",children:[e.jsxs("div",{className:"agent-card-actions-group agent-card-actions-group--primary",children:[t.state==="idle"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"active"),disabled:Se.has(t.id),title:a("agents.activate","Activate"),children:[e.jsx(pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.start","Start")})]}),t.state==="active"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>void Ra(t.id,t.name),disabled:Se.has(t.id),title:a("agents.runNow","Run Now"),"aria-label":a("agents.runNowAria","Run now for {{name}}",{name:t.name}),children:[e.jsx(tt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.runNow","Run Now")})]}),e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"paused"),disabled:Se.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(At,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.pause","Pause")})]})]}),t.state==="paused"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"active"),disabled:Se.has(t.id),title:a("agents.resume","Resume"),children:[e.jsx(pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.resume","Resume")})]}),t.state==="running"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>ue(t.id,{initialTab:"runs",initialRunId:null,preferActiveRun:!0}),title:a("agents.viewLiveRun","View live run details"),"aria-label":a("agents.viewLiveRunAria","View live run details for {{name}}",{name:t.name}),children:[e.jsx(tt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.running","Running")})]}),e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"paused"),disabled:Se.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(At,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.pause","Pause")})]})]}),t.state==="error"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"active"),disabled:Se.has(t.id),title:a("agents.retry","Retry"),children:[e.jsx(pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.retry","Retry")})]})]}),e.jsxs("div",{className:"agent-card-actions-group agent-card-actions-group--secondary",children:[e.jsxs("button",{className:"btn btn-sm agent-card-details-btn",onClick:()=>ue(t.id),title:a("agents.viewDetailsFor","View details for {{name}}",{name:t.name}),"aria-label":a("agents.viewDetailsFor","View details for {{name}}",{name:t.name}),children:[e.jsx(ds,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.details","Details")})]}),(t.state==="idle"||t.state==="paused"||t.state==="error")&&e.jsxs("button",{className:"btn btn-sm btn-danger",onClick:()=>void Wt(t.id,t.name),title:a("agents.delete","Delete"),children:[e.jsx(la,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.delete","Delete")})]})]})]})]},t.id)})})})}),e.jsx("div",{className:`agents-split-detail${x&&!L?" agents-split-detail--hidden-mobile":""}`,children:L?e.jsx(s.Suspense,{fallback:null,children:e.jsx(ha,{inline:!0,showInlineBackButton:x,agentId:L,projectId:d,onClose:Ue,addToast:n,onChildClick:Gt,initialTab:le,initialRunId:ce,preferActiveRun:k,onMutationSuccess:Sa},L)}):e.jsxs("div",{className:"agents-detail-empty-state",children:[e.jsx(It,{size:48}),e.jsx("h3",{children:a("agents.selectAnAgent","Select an agent")}),e.jsx("p",{children:a("agents.selectAgentHint","Choose an agent from the sidebar to view details")})]})})]})]})}export{cn as AgentsView};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as s,b as zn,j as t,R as Hn}from"./vendor-react-D37HfzIf.js";import{c as On,a9 as Us,a7 as Bs,bf as Ks,bg as gs,aG as Lt,bh as Gs,ac as Vs,bi as cs,t as Un,bj as Bn,bk as ft,bl as Ws,bm as Kn,bn as It,w as Gn,bo as Vn,bp as Wn,bq as qn,br as Xn,bs as Yn,bt as Jn,aW as Qn,bu as Zn,bv as ea,s as ta,bw as sa,j as na,k as mn,bx as hn,by as aa,bz as ra,bA as oa,bB as fn,bC as ia,bD as ca,bE as la,p as da,bF as ua,bG as ma,u as ha,bH as fa,ah as gn,ai as pn,bI as ga,bJ as pa,S as ba,U as ls,P as pt,J as gt,aw as va,bK as qs,a as Pt,bL as Xs,bM as Ys,bN as Js,B as bt,ae as xa,af as ya,b4 as _t,bO as Qs,bP as wa,T as Ca,bQ as Sa,bR as ka,b1 as Na,au as Zs,m as ja,bS as en}from"./index-
|
|
1
|
+
import{r as s,b as zn,j as t,R as Hn}from"./vendor-react-D37HfzIf.js";import{c as On,a9 as Us,a7 as Bs,bf as Ks,bg as gs,aG as Lt,bh as Gs,ac as Vs,bi as cs,t as Un,bj as Bn,bk as ft,bl as Ws,bm as Kn,bn as It,w as Gn,bo as Vn,bp as Wn,bq as qn,br as Xn,bs as Yn,bt as Jn,aW as Qn,bu as Zn,bv as ea,s as ta,bw as sa,j as na,k as mn,bx as hn,by as aa,bz as ra,bA as oa,bB as fn,bC as ia,bD as ca,bE as la,p as da,bF as ua,bG as ma,u as ha,bH as fa,ah as gn,ai as pn,bI as ga,bJ as pa,S as ba,U as ls,P as pt,J as gt,aw as va,bK as qs,a as Pt,bL as Xs,bM as Ys,bN as Js,B as bt,ae as xa,af as ya,b4 as _t,bO as Qs,bP as wa,T as Ca,bQ as Sa,bR as ka,b1 as Na,au as Zs,m as ja,bS as en}from"./index-CgfrecpF.js";import{u as vt}from"./vendor-i18n-CV0mwX_-.js";import{SessionTerminal as tn}from"./SessionTerminal-DaTXNT3A.js";import"./vendor-reactflow-CRZcPCXF.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.js";/**
|
|
2
2
|
* @license lucide-react v1.7.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as t,j as r}from"./vendor-react-D37HfzIf.js";import{cb as Pe,cc as pe,cd as sr,ce as he,s as Te,cf as Ne,cg as ke,ch as Ce,ci as je,cj as nr,ck as ce,cl as ar,cm as ir,cn as lr,co as or,cp as cr,aG as Q,cq as de,L as se,S as dr,M as vr,cr as ur,bO as mr,a as fr,cs as ze,T as Fe,ct as pr,Q as hr,b1 as gr,b2 as br,af as wr,aB as xr,R as yr}from"./index-CW4OzecJ.js";import{u as ne}from"./vendor-i18n-CV0mwX_-.js";import"./vendor-reactflow-CRZcPCXF.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.js";const ge=500,Sr=3e3;function W(e){return e instanceof Error?e.message:String(e)}function Oe(e){return e.length<=ge?e:e.slice(-ge)}function ve(e,o){return Oe([...e,o])}function J(e){try{return JSON.parse(e)}catch{return null}}function ee(e){const o=e.text??"";return e.stream==="stderr"?`[stderr] ${o}`:o}function Nr(e){return e?.previewUrl??null}async function Ee(e){return ar(e)}async function Le(e,o){return ir(e,o)}async function kr(e){return lr(e)}async function Cr(e){return or(e)}async function Re(e){return cr(e)}function q(e){try{return e()}catch{return null}}function ue(){return typeof q(()=>pe)=="function"&&typeof q(()=>Pe)=="function"}function I(e){return{config:{id:e.id??"default",name:e.name??"Dev Server",command:e.command??"",cwd:e.cwd??"."},status:e.status,runtime:e.pid?{pid:e.pid,startedAt:e.startedAt??new Date().toISOString(),exitCode:e.exitCode??void 0,previewUrl:e.previewUrl}:void 0,previewUrl:e.previewUrl??e.detectedUrl??e.manualUrl??void 0,logHistory:(e.logs??[]).map(o=>({timestamp:new Date().toISOString(),stream:o.startsWith("[stderr]")?"stderr":"stdout",text:o.replace(/^\[stderr\]\s*/,"")}))}}function jr(e){const{t:o}=ne("app"),[s,f]=t.useState(null),[b,g]=t.useState([]),[x,d]=t.useState([]),[E,S]=t.useState([]),[z,N]=t.useState(!0),[y,u]=t.useState(null),i=t.useRef(0),[m,A]=t.useState(null),M=t.useCallback(n=>{if(f(n),n?.logHistory){const a=n.logHistory.slice(-ge).map(ee);d(a)}},[]),L=t.useCallback(async()=>{const n=i.current;try{if(ue())if(m){const a=await Pe(m,e);if(i.current!==n)return;M(a)}else{const a=await pe(e);if(i.current!==n)return;g(a),a.length>0&&(A(a[0].config.id),M(a[0]))}else{const a=await Ee(e);if(i.current!==n)return;const v=I(a);g([v]),M(v)}u(null)}catch(a){if(i.current!==n)return;u(W(a))}},[M,e,m]);t.useEffect(()=>{i.current+=1;const n=i.current;f(null),g([]),d([]),S([]),N(!0),u(null),A(null),(async()=>{try{const[v,c]=await Promise.allSettled([ue()?pe(e):Ee(e).then(C=>[I(C)]),typeof q(()=>ce)=="function"?ce(e):Re(e).then(C=>C.map(R=>({name:R.name,command:R.command,cwd:R.cwd,scriptName:R.scriptName,packagePath:R.packagePath})))]);if(i.current!==n)return;let h=null;if(v.status==="fulfilled"){const C=v.value;if(g(C),C.length>0){const R=C[0];ue()&&A(R.config.id),M(R)}}else h=W(v.reason);c.status==="fulfilled"&&S(c.value),h&&u(h)}catch(v){if(i.current!==n)return;u(W(v))}finally{i.current===n&&N(!1)}})()},[M,e]),t.useEffect(()=>{const n=m?sr(m,e):typeof q(()=>he)=="function"?he(e):null;if(!n)return;const a=i.current,v=Te(n,{events:{history:c=>{if(i.current!==a)return;const h=J(c.data);if(h?.lines){const C=h.lines.map(ee);d(Oe(C))}},log:c=>{if(i.current!==a)return;const h=J(c.data);if(h){const C=typeof h.line=="string"?h.line:ee(h);d(R=>ve(R,C))}},"dev-server:log":c=>{if(i.current!==a)return;const h=J(c.data);if(h){const C=typeof h.line=="string"?h.line:ee(h);d(R=>ve(R,C))}},"dev-server:output":c=>{if(i.current!==a)return;const h=J(c.data);h?.line&&d(C=>ve(C,h.line))},status:c=>{if(i.current!==a)return;const h=J(c.data),C=h?.status;C&&f(R=>R&&{...R,status:C,runtime:h.pid?{...R.runtime??{startedAt:new Date().toISOString()},pid:h.pid}:R.runtime})},"dev-server:status":c=>{if(i.current!==a)return;const h=J(c.data);if(h?.status){const C=I(h);f(C),g([C])}},stopped:()=>{i.current},failed:()=>{i.current}},onReconnect:()=>{i.current===a&&L()},onError:()=>{i.current===a&&u(c=>c??o("devserver.lostConnection","Lost log stream connection."))}});return()=>{v()}},[e,L,m]),t.useEffect(()=>{if(s?.status!=="running"&&s?.status!=="starting")return;const n=setInterval(()=>{L()},Sr);return()=>{clearInterval(n)}},[L,s?.status]);const _=t.useCallback(async(n,a)=>{i.current+=1;const v=i.current;try{let c;if(m&&typeof q(()=>Ne)=="function")c=await Ne(m,e);else{const h=await Le({command:n,cwd:a},e);c=I(h)}if(i.current!==v)return;f(c),u(null)}catch(c){if(i.current!==v)return;throw u(W(c)),c}},[e,m]),j=t.useCallback(async()=>{i.current+=1;const n=i.current;try{let a;if(m&&typeof q(()=>ke)=="function")a=await ke(m,e);else{const v=await kr(e);a=I(v)}if(i.current!==n)return;f(a),u(null)}catch(a){if(i.current!==n)return;throw u(W(a)),a}},[e,m]),B=t.useCallback(async()=>{i.current+=1;const n=i.current;try{let a;if(m&&typeof q(()=>Ce)=="function")a=await Ce(m,e);else{const v=await Cr(e);a=I(v)}if(i.current!==n)return;f(a),u(null)}catch(a){if(i.current!==n)return;throw u(W(a)),a}},[e,m]),P=t.useCallback(async n=>{i.current+=1;const a=i.current;try{let v;if(m&&typeof q(()=>je)=="function")v=await je(m,n,e);else{const c=await nr({url:n},e);v={url:c.manualUrl??c.previewUrl??c.detectedUrl??null,source:c.manualUrl?"manual":"auto"}}if(i.current!==a)return;f(c=>c?{...c,previewUrl:v.url??void 0}:null),u(null)}catch(v){if(i.current!==a)return;throw u(W(v)),v}},[e,m]),V=t.useCallback(async()=>{i.current+=1;const n=i.current;try{let a;try{a=await ce(e)}catch{a=(await Re(e)).map(c=>({name:c.name,command:c.command,cwd:c.cwd,scriptName:c.scriptName,packagePath:c.packagePath}))}if(i.current!==n)return;S(a),u(null)}catch(a){if(i.current!==n)return;throw u(W(a)),a}},[e]),l=t.useCallback(async(n,a)=>{if(typeof n!="string"&&!m)try{const h=n,C=await Le({command:h.command,cwd:h.cwd,scriptName:h.scriptName,packagePath:h.packagePath??h.cwd},e),R=I(C);f(R),g([R]),u(null);return}catch(h){throw u(W(h)),h}const v=typeof n=="string"?n:n.command,c=typeof n=="string"?a:n.cwd;await _(v,c)},[e,_,m]),D=t.useCallback(async()=>{await j()},[j]),U=t.useCallback(async()=>{await B()},[B]),F=t.useCallback(async n=>{await P(n)},[P]),O=t.useCallback(async()=>{await V()},[V]),$=t.useCallback(async()=>{await L()},[L]),k=Nr(s),w=s?{...s,pid:s.runtime?.pid}:null;return{session:s,sessions:b,logs:x,detectedCommands:E,previewUrl:k,isLoading:z,error:y,startServer:_,stopServer:j,restartServer:B,setPreviewUrl:P,detectCommands:V,refresh:L,candidates:E,serverState:w,loading:z,start:l,stop:D,restart:U,setManualUrl:F,detect:O,refreshStatus:$}}const De=500,_e=100;function $e(e){return e.length>De?e.slice(-De):e}function Be(e){return e==="stderr"?"stderr":"stdout"}function re(e){try{return JSON.parse(e.data)}catch{return null}}function te(e,o){return{id:typeof e.id=="number"&&Number.isFinite(e.id)?e.id:o,text:typeof e.text=="string"?e.text:"",stream:Be(e.stream),timestamp:typeof e.timestamp=="string"?e.timestamp:""}}function Er(e,o){return{id:o,text:e,stream:"stdout",timestamp:""}}function me(e,o){if(o.length===0)return e;const s=[...e],f=new Set(e.map(b=>b.id));for(const b of o)f.has(b.id)||(f.add(b.id),s.push(b));return s.sort((b,g)=>b.id-g.id),$e(s)}function Lr(e,o){const[s,f]=t.useState([]),[b,g]=t.useState(!1),[x,d]=t.useState(!1),[E,S]=t.useState(!1),[z,N]=t.useState(null),y=t.useRef(null),u=t.useRef(!1),i=t.useRef(0),m=t.useRef(0),A=t.useRef(e),M=t.useRef(o),L=t.useRef(0),_=t.useRef(1);(A.current!==e||M.current!==o)&&(A.current=e,M.current=o,i.current++,Q({view:"useDevServerLogs",trigger:"project-context-change",projectId:e,replayAttempted:!1,reason:"context-version-bumped"}),u.current=!0,L.current=0,_.current=1,f([]),g(!1),d(!1),S(!1),N(null),y.current&&(y.current(),y.current=null)),t.useEffect(()=>{if(!o){y.current&&(y.current(),y.current=null);return}const l=i.current,D=++m.current;u.current=!1,g(!0);const U=(k,w)=>{const n=$e(k);f(n),N(w),S(w!==null?w>n.length:!1);const a=n.length>0?n[n.length-1].id:0;L.current=a,_.current=a+1},F=k=>{if(u.current||i.current!==l||!k||typeof k!="object")return;const w=k.lines;if(!Array.isArray(w))return;if(w.length>0&&typeof w[0]=="string"){const a=w.filter(v=>typeof v=="string").map((v,c)=>Er(v,c+1));U(a,a.length);return}const n=w.filter(a=>!!a&&typeof a=="object").map((a,v)=>te(a,v+1));U(n,n.length)},O=k=>{if(u.current||i.current!==l)return;const w=typeof k.text=="string"?k.text:typeof k.line=="string"?k.line:null;if(!w)return;const n=_.current,a=typeof k.id=="number"&&Number.isFinite(k.id)?k.id:n,v={id:a,text:w,stream:Be(k.stream),timestamp:typeof k.timestamp=="string"?k.timestamp:""};L.current=Math.max(L.current,a),_.current=Math.max(_.current,a+1),f(c=>me(c,[v])),N(c=>c===null?c:Math.max(c+1,v.id))};async function $(){try{const w=await de({maxLines:_e},e);if(u.current||i.current!==l||m.current!==D)return;const n=w.lines.map((a,v)=>te(a,v+1));U(n,w.totalLines)}catch{if(u.current||i.current!==l||m.current!==D)return;U([],null)}finally{!u.current&&i.current===l&&m.current===D&&g(!1)}const k=he(e);y.current=Te(k,{events:{"dev-server:log":w=>{const n=re(w);n&&O(n)},log:w=>{const n=re(w);n&&O(n)},history:w=>{const n=re(w);F(n)},"dev-server:history":w=>{const n=re(w);F(n)}},onReconnect:()=>{Q({view:"useDevServerLogs",trigger:"sse-reconnect",projectId:e,replayAttempted:!0,replayFromEventId:L.current??null,sseChannel:k,reason:"history-replay"}),!(u.current||i.current!==l)&&de({lastEventId:L.current,maxLines:50},e).then(w=>{if(u.current||i.current!==l)return;const n=w.lines.map((a,v)=>te(a,_.current+v));if(n.length>0){const a=n[n.length-1].id;L.current=Math.max(L.current,a),_.current=Math.max(_.current,a+1)}f(a=>me(a,n)),N(w.totalLines)}).catch(()=>{})}}),Q({view:"useDevServerLogs",trigger:"sse-open",projectId:e,replayAttempted:!1,sseChannel:k})}return $(),()=>{u.current=!0,y.current&&(y.current(),y.current=null)}},[o,e]);const B=t.useCallback(async()=>{if(!o||x)return;const l=i.current,D=s.length;d(!0);try{const U=await de({maxLines:_e,offset:D},e);if(u.current||i.current!==l)return;const F=U.lines.map((O,$)=>te(O,$+1));f(O=>me(F,O)),S(U.totalLines>D+F.length),N(U.totalLines)}catch{}finally{d(!1)}},[o,s.length,x,e]),P=t.useCallback(()=>{f([])},[]),V=y.current!==null&&!b&&!u.current;return{entries:s,loading:b,loadingMore:x,hasMore:E,total:z,loadMore:B,clear:P,logs:s,isStreaming:V,clearLogs:P}}const Rr="This preview appears to block iframe embedding. Open it in a new tab instead.",Dr="The preview URL could not be loaded. Verify the server is running and the URL is correct.",_r="Preview is taking longer than expected and may block iframe embedding.";function Ur(e){return e==="blocked"?Rr:e==="error"?Dr:null}function Mr(e,o={}){const{loadTimeoutMs:s=1e4,detectionMethod:f=null}=o,b=t.useRef(null),g=t.useRef(null),[x,d]=t.useState("unknown"),[E,S]=t.useState(null),[z]=t.useState(f),N=t.useCallback(()=>{g.current!==null&&(window.clearTimeout(g.current),g.current=null)},[]),y=t.useCallback(j=>{d(j),S(Ur(j))},[]),u=t.useCallback(()=>{d("blocked"),S(_r)},[]);t.useEffect(()=>{if(N(),!e){d("unknown"),S(null);return}d("unknown"),S(null);let j=!1;return queueMicrotask(()=>{j||(d("loading"),S(null))}),()=>{j=!0,N()}},[N,e]),t.useEffect(()=>{if(x!=="loading"){N();return}const j=setTimeout(()=>{g.current=null,u()},s);return g.current=j,()=>{clearTimeout(j),g.current===j&&(g.current=null)}},[N,x,s,u]);const i=t.useCallback(()=>{const j=b.current;if(!j){y("embedded");return}try{if(j.contentWindow?.location?.href==="about:blank"&&j.src!=="about:blank"){y("blocked");return}}catch{}y("embedded")},[y]),m=t.useCallback(()=>{y("error")},[y]);t.useEffect(()=>{if(N(),!e){d("unknown"),S(null);return}d("unknown"),S(null)},[N]);const A=t.useCallback(()=>{N(),d("unknown"),S(null)},[N]),M=A,L=t.useMemo(()=>x==="embedded",[x]),_=t.useMemo(()=>x==="blocked"||x==="error",[x]);return{embedStatus:x,isEmbedded:L,isBlocked:_,blockReason:E,detectionMethod:z,iframeRef:b,resetEmbedStatus:A,setEmbedStatus:y,retry:M,embedContext:E,handleIframeLoad:i,handleIframeError:m}}const Ar=/\x1b\[[0-9;]*m/g;function be(e){return e.replace(Ar,"")}function Pr(e){if(!e)return"";const o=new Date(e);return Number.isNaN(o.getTime())?"":o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}function Tr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function zr(e){if(e.stream==="stderr")return"error";const o=be(e.text).toLowerCase();return/\b(warn|warning)\b/.test(o)?"warn":/\b(error|fatal)\b/.test(o)?"error":"info"}function Fr(e,o){if(!o)return e;const s=new RegExp(`(${Tr(o)})`,"ig"),f=e.split(s),b=o.toLowerCase();return r.jsx(r.Fragment,{children:f.map((g,x)=>g.toLowerCase()===b?r.jsx("mark",{children:g},`${g}-${x}`):r.jsx("span",{children:g},`${g}-${x}`))})}function Or({entries:e,loading:o,loadingMore:s,hasMore:f,total:b,onLoadMore:g,isRunning:x}){const{t:d}=ne("app"),E=t.useRef(null),S=t.useRef(e.length),z=t.useRef(x),[N,y]=t.useState(!1),[u,i]=t.useState(!1),[m,A]=t.useState(""),[M,L]=t.useState("all"),_=t.useMemo(()=>M==="all"?e:e.filter(l=>zr(l)===M),[e,M]),j=t.useMemo(()=>{const l=m.trim().toLowerCase();return l?_.filter(D=>be(D.text).toLowerCase().includes(l)):_},[_,m]),B=j.length,P=t.useCallback(()=>{const l=E.current;l&&(l.scrollTop=l.scrollHeight,i(!1))},[]);t.useEffect(()=>{const l=z.current,D=S.current,U=e.length>D;x&&(!l||!u&&U)&&P(),z.current=x,S.current=e.length},[e.length,x,u,P]);const V=t.useCallback(()=>{const l=E.current;if(!l)return;const U=l.scrollTop+l.clientHeight>=l.scrollHeight-50;i(!U)},[]);return t.useEffect(()=>{o||e.length===0||!u&&x&&P()},[e,x,u,o,P]),o&&e.length===0?r.jsx("section",{className:"devserver-log-viewer","data-testid":"devserver-log-viewer",children:r.jsxs("div",{className:"devserver-log-viewer__loading","data-testid":"devserver-log-loading",children:[r.jsx(se,{size:16,className:"devserver-log-viewer__spinner"}),r.jsx("span",{children:d("devserver.loadingLogs","Loading logs…")})]})}):r.jsxs("section",{className:`devserver-log-viewer${N?" devserver-log-viewer--fullscreen":""}`,"data-testid":"devserver-log-viewer",children:[r.jsxs("header",{className:"devserver-log-viewer__toolbar",children:[r.jsxs("div",{className:"devserver-log-viewer__toolbar-meta",children:[r.jsx("span",{className:"devserver-log-viewer__title",children:d("devserver.logs","Logs")}),r.jsxs("span",{className:"devserver-log-viewer__count","data-testid":"devserver-log-count",children:[b!==null?`${e.length}/${b}`:`${e.length}`," ",d("devserver.lines","lines")]})]}),r.jsxs("div",{className:"devserver-log-viewer__toolbar-actions",children:[r.jsxs("label",{className:"devserver-log-viewer__severity",htmlFor:"devserver-log-severity-filter",children:[r.jsx("span",{className:"visually-hidden",children:d("devserver.filterBySeverity","Filter logs by severity")}),r.jsxs("select",{id:"devserver-log-severity-filter",className:"select devserver-log-viewer__severity-select",value:M,onChange:l=>L(l.target.value),"data-testid":"devserver-log-severity-filter","aria-label":d("devserver.filterBySeverity","Filter logs by severity"),children:[r.jsx("option",{value:"all",children:d("devserver.allSeverities","All severities")}),r.jsx("option",{value:"info",children:d("devserver.info","Info")}),r.jsx("option",{value:"warn",children:d("devserver.warn","Warn")}),r.jsx("option",{value:"error",children:d("devserver.error","Error")})]})]}),r.jsxs("label",{className:"devserver-log-viewer__search",htmlFor:"devserver-log-search",children:[r.jsx("span",{className:"visually-hidden",children:d("devserver.searchLogs","Search logs")}),r.jsx(dr,{size:14}),r.jsx("input",{id:"devserver-log-search",className:"input devserver-log-viewer__search-input",type:"text",value:m,onChange:l=>A(l.target.value),placeholder:d("devserver.searchLogs","Search logs"),"data-testid":"devserver-log-search-input","aria-label":d("devserver.searchLogs","Search logs")})]}),m.trim().length>0&&r.jsx("span",{className:"devserver-log-viewer__matches","data-testid":"devserver-log-match-count",children:d("devserver.matchCount",{count:B,defaultValue_one:"{{count}} match",defaultValue_other:"{{count}} matches"})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:()=>y(l=>!l),"data-testid":"devserver-log-fullscreen-toggle","aria-label":N?d("devserver.exitFullscreen","Exit fullscreen logs"):d("devserver.enterFullscreen","Enter fullscreen logs"),children:N?r.jsx(vr,{size:14}):r.jsx(ur,{size:14})})]})]}),r.jsxs("div",{className:"devserver-log-viewer__body",children:[f&&r.jsx("div",{className:"devserver-log-viewer__load-more","data-testid":"devserver-log-load-more",children:r.jsx("button",{type:"button",className:"btn btn-sm touch-target",onClick:g,disabled:s,"data-testid":"devserver-log-load-more-button",children:s?r.jsxs(r.Fragment,{children:[r.jsx(se,{size:14,className:"devserver-log-viewer__spinner"}),d("devserver.loadingOlderLogs","Loading older logs…")]}):d("devserver.loadOlderLogs","Load older logs")})}),r.jsxs("div",{ref:E,className:"devserver-log-viewer__content",onScroll:V,"data-testid":"devserver-log-content",children:[!o&&j.length===0&&r.jsx("p",{className:"devserver-log-viewer__empty","data-testid":"devserver-log-empty",children:e.length===0?d("devserver.noLogsYet","No logs yet. Start the dev server to see output."):_.length===0?d("devserver.noMatchesSeverity","No log lines match the selected severity."):d("devserver.noMatchesSearch","No log lines match your search.")}),j.map(l=>{const D=be(l.text),U=Pr(l.timestamp);return r.jsxs("div",{className:"devserver-log-line",children:[U&&r.jsx("span",{className:"devserver-log-timestamp","data-testid":"devserver-log-timestamp",children:U}),l.stream==="stderr"&&r.jsx("span",{className:"devserver-log-stream-badge","data-testid":"devserver-log-stderr-badge",children:d("devserver.errBadge","ERR")}),r.jsx("span",{className:"devserver-log-text",children:mr(Fr(D,m.trim()))})]},l.id)})]}),u&&x&&r.jsxs("button",{type:"button",className:"btn btn-sm devserver-log-viewer__new-logs-button",onClick:P,"data-testid":"devserver-log-jump-button",children:[r.jsx(fr,{size:14}),d("devserver.newLogs","New logs")]})]})]})}const $r="devserver-preview-iframe";function Br({url:e,embedStatus:o,onEmbedStatusChange:s,iframeRef:f,blockReason:b,onRetry:g,className:x=$r,embedContext:d}){const{t:E}=ne("app"),S=b??d??null,[z,N]=t.useState(0);t.useEffect(()=>{!e||o!=="unknown"||(N(m=>m+1),s("loading"))},[o,s,e]);const y=t.useCallback(()=>{const m=f.current;if(!m){s("embedded");return}try{if(m.contentWindow?.location?.href==="about:blank"&&m.src!=="about:blank"){s("blocked");return}}catch{}s("embedded")},[f,s]),u=t.useCallback(m=>{m.stopPropagation(),s("error")},[s]),i=t.useCallback(()=>{e&&window.open(e,"_blank","noopener,noreferrer")},[e]);return e?r.jsxs("div",{className:"devserver-preview-iframe-shell",children:[r.jsx("iframe",{src:e,ref:f,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox",className:x,title:"Dev server preview",onLoad:y,onError:u,onErrorCapture:u,"data-testid":"devserver-preview-iframe"},`${e}-${z}`),o==="loading"&&r.jsxs("div",{className:"devserver-preview-overlay","data-testid":"devserver-preview-loading",children:[r.jsx(se,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:E("preview.loading","Loading preview...")})]}),o==="blocked"&&r.jsxs("div",{className:"devserver-preview-blocked-panel",role:"alert","data-testid":"devserver-preview-blocked-panel",children:[r.jsx(ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:E("preview.blockedTitle","Preview cannot be embedded")}),S&&r.jsx("p",{className:"devserver-preview-blocked-context",children:S})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:E("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:i,children:E("preview.openInNewTab","Open in new tab")}),g&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:g,children:E("actions.retry","Retry")})]})]}),o==="error"&&r.jsxs("div",{className:"devserver-preview-error-panel",role:"alert","data-testid":"devserver-preview-error-panel",children:[r.jsx(Fe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:E("preview.errorTitle","Unable to load preview")}),S&&r.jsx("p",{className:"devserver-preview-blocked-context",children:S})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:E("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:i,children:E("preview.openInNewTab","Open in new tab")}),g&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:g,children:E("actions.retry","Retry")})]})]})]}):null}function Hr(e){return{stopped:{className:"dev-server-status-badge--stopped",label:e("devserver.status.stopped","Stopped")},starting:{className:"dev-server-status-badge--starting",label:e("devserver.status.starting","Starting...")},running:{className:"dev-server-status-badge--running",label:e("devserver.status.running","Running")},stopping:{className:"dev-server-status-badge--starting",label:e("devserver.status.stopping","Stopping...")},failed:{className:"dev-server-status-badge--failed",label:e("devserver.status.failed","Failed")}}}let fe=!1;function Ue(e){return e instanceof Error?e.message:String(e)}function He(e){return e==="."?"root":e}function Me(e){return e?e==="root"?".":e:null}function Ae(e,o,s){return!o||e.scriptName!==o?!1:s?He(e.cwd)===s:!0}function Vr(e){return e.cwd==="."?"root":e.cwd}function Wr(e){return e.length<=60?e:`${e.slice(0,60)}…`}function Yr({addToast:e,projectId:o}){const{t:s}=ne("app");t.useEffect(()=>(Q({view:"DevServerView",trigger:fe?"route-active":"remount",projectId:o,replayAttempted:!1}),fe=!1,()=>{fe=!0,Q({view:"DevServerView",trigger:"route-inactive",projectId:o,replayAttempted:!1})}),[o]);const{session:f,detectedCommands:b,previewUrl:g,isLoading:x,error:d,startServer:E,stopServer:S,restartServer:z,setPreviewUrl:N,detectCommands:y,refresh:u}=jr(o),i=f?.status??"stopped",m=i==="running"||i==="starting",A=Hr(s),M=A[i]??A.stopped,{entries:L,loading:_,loadingMore:j,hasMore:B,total:P,loadMore:V}=Lr(o,!!o),l=g,D=f?.config?.cwd??null,[U,F]=t.useState(!0),[O,$]=t.useState(""),[k,w]=t.useState(""),[n,a]=t.useState(null),[v,c]=t.useState(null),[h,C]=t.useState("embedded"),R=h==="embedded"?l:null,{embedStatus:H,setEmbedStatus:Ve,resetEmbedStatus:Y,iframeRef:G,isEmbedded:We,isBlocked:ae,blockReason:ie,retry:we}=Mr(R),[xe,X]=t.useState(!1),ye=t.useRef(H);t.useEffect(()=>{const p=ye.current!==H;ae&&p&&X(!0),H==="embedded"&&X(!1),ye.current=H},[H,ae]),t.useEffect(()=>{X(!1)},[l]);const K=t.useMemo(()=>{if(!n)return null;const p=Me(D);return b.find(T=>!(T.scriptName!==n||p&&T.cwd!==p||f?.config?.command&&T.command!==f.config.command))??b.find(T=>Ae(T,n,D))??null},[b,f?.config?.command,n,D]);t.useEffect(()=>{typeof y=="function"&&y().catch(p=>{e(Ue(p),"error")})},[e,y]),t.useEffect(()=>{if(n){F(!1);return}F(!0)},[n]),t.useEffect(()=>{if(f?.status==="running"||f?.status==="starting"){f.config?.command?.trim().length>0&&$(f.config.command);return}if(K){$(K.command);return}b.length>0&&$(p=>p.trim().length>0?p:b[0]?.command??"")},[b,K,f?.config?.command,f?.status]),t.useEffect(()=>{w(l??"")},[l]);const le=t.useCallback(()=>{l&&window.open(l,"_blank","noopener,noreferrer")},[l]),Se=t.useCallback(()=>{X(!1),we()},[we]),qe=t.useCallback(()=>{try{const p=G.current;if(p?.contentWindow){p.contentWindow.location.reload(),X(!1),Y();return}}catch{}if(!(!l||!G.current))try{const p=new URL(l);p.searchParams.set("_t",Date.now().toString()),G.current.src=p.toString(),X(!1),Y()}catch{G.current.src=l,X(!1),Y()}},[l,G,Y]),Z=t.useCallback(async(p,T,oe)=>{c(p);try{await T(),e(oe,"success")}catch(tr){e(Ue(tr),"error")}finally{c(null)}},[e]),Xe=t.useCallback(p=>{a(p.scriptName),F(!1),$(p.command),e(s("devserver.toast.selectedScript","Selected {{name}} script.",{name:p.scriptName}),"success")},[e]),Ie=t.useCallback(()=>{a(null),F(!0),e(s("devserver.toast.clearedScript","Cleared selected dev server script."),"success")},[e]),Ge=()=>{const p=O.trim();if(p.length===0){e(s("devserver.toast.enterCommand","Enter a command before starting the dev server."),"warning");return}const T=Me(D)??".",oe=K?.cwd??T;Z("start",()=>E(p,oe),s("devserver.toast.started","Dev server started."))},Je=()=>{Z("stop",S,s("devserver.toast.stopped","Dev server stopped."))},Qe=()=>{Z("restart",z,s("devserver.toast.restarted","Dev server restarted."))},Ye=()=>{const p=k.trim(),T=p.length>0?p:null;Z("preview",()=>N(T),T?s("devserver.toast.previewUpdated","Preview URL updated."):s("devserver.toast.previewCleared","Preview URL override cleared."))},Ke=t.useCallback(()=>{d&&u()},[d,u]),Ze=i==="starting"||i==="running"||v!==null,er=i==="stopped"||v!==null,rr=i==="stopped"||i==="starting"||v!==null;return r.jsxs("div",{className:"dev-server-view","data-testid":"dev-server-view",children:[r.jsxs("section",{className:"dev-server-header","aria-label":"Dev server controls header",children:[r.jsxs("div",{className:"dev-server-header-title",children:[r.jsx(pr,{size:16}),r.jsx("h2",{children:s("devserver.title","Dev Server")}),r.jsx("span",{className:`dev-server-status-badge ${M.className}`,"data-testid":"dev-server-status-badge",children:M.label})]}),r.jsxs("div",{className:"dev-server-header-actions",children:[r.jsxs("button",{type:"button",className:"btn btn-primary btn-sm",onClick:Ge,disabled:Ze,"data-testid":"dev-server-start-button",children:[r.jsx(hr,{size:14}),r.jsx("span",{children:v==="start"?s("devserver.starting","Starting..."):s("devserver.start","Start")})]}),r.jsxs("button",{type:"button",className:"btn btn-danger btn-sm",onClick:Je,disabled:er,"data-testid":"dev-server-stop-button",children:[r.jsx(gr,{size:14}),r.jsx("span",{children:v==="stop"?s("devserver.stopping","Stopping..."):s("devserver.stop","Stop")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm",onClick:Qe,disabled:rr,"data-testid":"dev-server-restart-button",children:[r.jsx(br,{size:14}),r.jsx("span",{children:v==="restart"?s("devserver.restarting","Restarting..."):s("devserver.restart","Restart")})]})]})]}),r.jsxs("section",{className:"dev-server-panel dev-server-config","aria-label":"Dev server configuration",children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.configuration","Configuration")}),x&&r.jsx("span",{className:"dev-server-muted",children:s("devserver.loading","Loading...")})]}),x&&!f&&b.length===0&&r.jsxs("div",{className:"dev-server-loading-state","data-testid":"dev-server-loading-state",children:[r.jsx(se,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:s("devserver.loadingConfig","Loading dev server configuration...")})]}),d&&r.jsxs("div",{className:"dev-server-error-box",role:"alert","data-testid":"dev-server-error-box",children:[r.jsx("p",{children:d}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:Ke,children:s("devserver.retry","Retry")})]}),r.jsxs("div",{className:"dev-server-section",children:[r.jsx("h3",{children:s("devserver.scriptSelection","Script Selection")}),n&&r.jsxs("div",{className:"dev-server-selected","data-testid":"dev-server-selected-summary",children:[r.jsx("span",{className:"dev-server-candidate-name",children:n}),r.jsx("span",{className:"dev-server-candidate-source",children:D??"root"}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>F(!0),"data-testid":"dev-server-change-selection",children:s("devserver.change","Change")}),r.jsx("button",{type:"button",className:"btn btn-danger btn-sm",onClick:Ie,"data-testid":"dev-server-clear-selection",children:s("devserver.clear","Clear")})]}),U&&b.length===0&&r.jsx("p",{className:"dev-server-empty-state","data-testid":"dev-server-empty-candidates",children:s("devserver.noScriptsDetected","No dev server scripts detected. Check that your project has a package.json with a dev, start, or similar script.")}),U&&b.length>0&&r.jsx("div",{className:"dev-server-candidates","data-testid":"dev-server-candidates",children:b.map(p=>{const T=Ae(p,n,D);return r.jsxs("button",{type:"button",className:`dev-server-candidate ${T?"dev-server-candidate--selected":""}`,onClick:()=>Xe(p),"data-testid":`dev-server-candidate-${p.scriptName}-${He(p.cwd)}`,children:[r.jsx("span",{className:"dev-server-candidate-name",children:p.scriptName}),r.jsx("span",{className:"dev-server-candidate-command",children:Wr(p.command)}),r.jsx("span",{className:"dev-server-candidate-source",children:Vr(p)})]},`${p.cwd}::${p.scriptName}::${p.command}`)})})]}),r.jsxs("div",{className:"dev-server-field-group",children:[r.jsx("label",{htmlFor:"dev-server-command",className:"dev-server-label",children:s("devserver.command","Command")}),r.jsx("input",{id:"dev-server-command",className:"input",value:O,onChange:p=>$(p.target.value),placeholder:"pnpm dev","data-testid":"dev-server-command-input",readOnly:i==="running"||i==="starting"})]}),(i==="running"||i==="starting")&&f&&r.jsxs("div",{className:"dev-server-current-command","data-testid":"dev-server-current-command",children:[r.jsx("span",{className:"dev-server-label",children:s("devserver.runningCommand","Running command")}),r.jsx("code",{children:f.config?.command??O})]}),r.jsxs("div",{className:"dev-server-preview-override",children:[r.jsx("label",{htmlFor:"dev-server-preview-input",className:"dev-server-label",children:s("devserver.previewUrlOverride","Preview URL Override")}),r.jsx("input",{id:"dev-server-preview-input",className:"input",type:"url",value:k,onChange:p=>w(p.target.value),placeholder:"http://localhost:3000","data-testid":"dev-server-preview-input"}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:Ye,disabled:v==="preview","data-testid":"dev-server-set-preview",children:s("devserver.save","Save")})]}),l&&r.jsx("p",{className:"dev-server-preview-hint",children:s("devserver.autoDetected","Auto-detected: {{url}}",{url:l})})]}),r.jsx("div",{className:"dev-server-content",children:r.jsxs("section",{className:"dev-server-panel dev-server-logs-panel","data-testid":"dev-server-logs-panel","aria-label":"Dev server logs",children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.logs","Logs")}),r.jsx("span",{className:"dev-server-muted",children:s("devserver.lines","{{count}} lines",{count:P??L.length})})]}),r.jsx("div",{className:"dev-server-logs-viewer","data-testid":"dev-server-log-viewer",children:r.jsx(Or,{entries:L,loading:_,loadingMore:j,hasMore:B,total:P,onLoadMore:V,isRunning:m})})]})}),r.jsxs("section",{className:"dev-server-panel devserver-preview-panel","data-testid":"devserver-preview-panel","aria-label":"Dev server preview",children:[r.jsxs("div",{className:"devserver-preview-header",children:[r.jsxs("div",{className:"devserver-preview-title",children:[r.jsx(wr,{size:14}),r.jsx("span",{children:s("devserver.preview","Preview")})]}),r.jsxs("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:l??s("devserver.noPreviewUrl","No preview URL"),"data-testid":"devserver-preview-url-badge",children:[s("devserver.auto","Auto"),l?` · ${l}`:s("devserver.notAvailable"," · Not available")]}),r.jsxs("div",{className:"devserver-preview-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>C(p=>p==="embedded"?"external":"embedded"),"data-testid":"devserver-preview-mode-toggle",children:h==="embedded"?s("devserver.externalOnly","External only"):s("devserver.embedded","Embedded")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.openInNewTab","Open in new tab"),onClick:le,disabled:!l,"data-testid":"devserver-preview-open-tab",children:r.jsx(xr,{})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.refreshPreview","Refresh preview"),onClick:qe,disabled:!l,"data-testid":"devserver-preview-refresh",children:r.jsx(yr,{})})]})]}),r.jsxs("div",{className:"devserver-preview-container","data-embed-status":H,"data-embedded":We?"true":"false",children:[!l&&!m&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.startDevServer","Start a dev server to see a live preview here.")}),!l&&m&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.noPreviewDetected","No preview URL detected. Start the dev server or set a manual URL to preview your app.")}),l&&h==="external"&&r.jsxs("div",{className:"devserver-preview-external-only","data-testid":"devserver-preview-external-only",children:[r.jsx("p",{children:s("devserver.embeddedPreviewDisabled","Embedded preview is disabled. Open your app in a separate browser tab.")}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm touch-target",onClick:le,"data-testid":"devserver-preview-external-open-tab",children:s("devserver.openInNewTab","Open in new tab")})]}),l&&h==="embedded"&&xe&&ae&&r.jsxs("div",{className:H==="error"?"devserver-preview-error-panel":"devserver-preview-blocked-panel","data-testid":"devserver-preview-fallback",role:"alert",children:[H==="error"?r.jsx(Fe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}):r.jsx(ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:H==="error"?s("devserver.previewFailed","Preview failed"):s("devserver.previewBlocked","Preview blocked")}),ie&&r.jsx("p",{className:"devserver-preview-blocked-context",children:ie})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:s("devserver.openPreviewOrRetry","Open the preview in a new tab, or retry embedded mode after checking your server settings.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:le,"data-testid":"devserver-preview-fallback-open-tab",children:s("devserver.openPreviewInNewTab","Open preview in new tab")}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:Se,"data-testid":"devserver-preview-fallback-retry",children:s("devserver.retryEmbeddedPreview","Retry embedded preview")})]})]}),l&&h==="embedded"&&!xe&&r.jsx(Br,{url:l,embedStatus:H,onEmbedStatusChange:Ve,iframeRef:G,blockReason:ie,onRetry:Se})]})]})]})}export{Yr as DevServerView};
|
|
1
|
+
import{r as t,j as r}from"./vendor-react-D37HfzIf.js";import{cb as Pe,cc as pe,cd as sr,ce as he,s as Te,cf as Ne,cg as ke,ch as Ce,ci as je,cj as nr,ck as ce,cl as ar,cm as ir,cn as lr,co as or,cp as cr,aG as Q,cq as de,L as se,S as dr,M as vr,cr as ur,bO as mr,a as fr,cs as ze,T as Fe,ct as pr,Q as hr,b1 as gr,b2 as br,af as wr,aB as xr,R as yr}from"./index-CgfrecpF.js";import{u as ne}from"./vendor-i18n-CV0mwX_-.js";import"./vendor-reactflow-CRZcPCXF.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.js";const ge=500,Sr=3e3;function W(e){return e instanceof Error?e.message:String(e)}function Oe(e){return e.length<=ge?e:e.slice(-ge)}function ve(e,o){return Oe([...e,o])}function J(e){try{return JSON.parse(e)}catch{return null}}function ee(e){const o=e.text??"";return e.stream==="stderr"?`[stderr] ${o}`:o}function Nr(e){return e?.previewUrl??null}async function Ee(e){return ar(e)}async function Le(e,o){return ir(e,o)}async function kr(e){return lr(e)}async function Cr(e){return or(e)}async function Re(e){return cr(e)}function q(e){try{return e()}catch{return null}}function ue(){return typeof q(()=>pe)=="function"&&typeof q(()=>Pe)=="function"}function I(e){return{config:{id:e.id??"default",name:e.name??"Dev Server",command:e.command??"",cwd:e.cwd??"."},status:e.status,runtime:e.pid?{pid:e.pid,startedAt:e.startedAt??new Date().toISOString(),exitCode:e.exitCode??void 0,previewUrl:e.previewUrl}:void 0,previewUrl:e.previewUrl??e.detectedUrl??e.manualUrl??void 0,logHistory:(e.logs??[]).map(o=>({timestamp:new Date().toISOString(),stream:o.startsWith("[stderr]")?"stderr":"stdout",text:o.replace(/^\[stderr\]\s*/,"")}))}}function jr(e){const{t:o}=ne("app"),[s,f]=t.useState(null),[b,g]=t.useState([]),[x,d]=t.useState([]),[E,S]=t.useState([]),[z,N]=t.useState(!0),[y,u]=t.useState(null),i=t.useRef(0),[m,A]=t.useState(null),M=t.useCallback(n=>{if(f(n),n?.logHistory){const a=n.logHistory.slice(-ge).map(ee);d(a)}},[]),L=t.useCallback(async()=>{const n=i.current;try{if(ue())if(m){const a=await Pe(m,e);if(i.current!==n)return;M(a)}else{const a=await pe(e);if(i.current!==n)return;g(a),a.length>0&&(A(a[0].config.id),M(a[0]))}else{const a=await Ee(e);if(i.current!==n)return;const v=I(a);g([v]),M(v)}u(null)}catch(a){if(i.current!==n)return;u(W(a))}},[M,e,m]);t.useEffect(()=>{i.current+=1;const n=i.current;f(null),g([]),d([]),S([]),N(!0),u(null),A(null),(async()=>{try{const[v,c]=await Promise.allSettled([ue()?pe(e):Ee(e).then(C=>[I(C)]),typeof q(()=>ce)=="function"?ce(e):Re(e).then(C=>C.map(R=>({name:R.name,command:R.command,cwd:R.cwd,scriptName:R.scriptName,packagePath:R.packagePath})))]);if(i.current!==n)return;let h=null;if(v.status==="fulfilled"){const C=v.value;if(g(C),C.length>0){const R=C[0];ue()&&A(R.config.id),M(R)}}else h=W(v.reason);c.status==="fulfilled"&&S(c.value),h&&u(h)}catch(v){if(i.current!==n)return;u(W(v))}finally{i.current===n&&N(!1)}})()},[M,e]),t.useEffect(()=>{const n=m?sr(m,e):typeof q(()=>he)=="function"?he(e):null;if(!n)return;const a=i.current,v=Te(n,{events:{history:c=>{if(i.current!==a)return;const h=J(c.data);if(h?.lines){const C=h.lines.map(ee);d(Oe(C))}},log:c=>{if(i.current!==a)return;const h=J(c.data);if(h){const C=typeof h.line=="string"?h.line:ee(h);d(R=>ve(R,C))}},"dev-server:log":c=>{if(i.current!==a)return;const h=J(c.data);if(h){const C=typeof h.line=="string"?h.line:ee(h);d(R=>ve(R,C))}},"dev-server:output":c=>{if(i.current!==a)return;const h=J(c.data);h?.line&&d(C=>ve(C,h.line))},status:c=>{if(i.current!==a)return;const h=J(c.data),C=h?.status;C&&f(R=>R&&{...R,status:C,runtime:h.pid?{...R.runtime??{startedAt:new Date().toISOString()},pid:h.pid}:R.runtime})},"dev-server:status":c=>{if(i.current!==a)return;const h=J(c.data);if(h?.status){const C=I(h);f(C),g([C])}},stopped:()=>{i.current},failed:()=>{i.current}},onReconnect:()=>{i.current===a&&L()},onError:()=>{i.current===a&&u(c=>c??o("devserver.lostConnection","Lost log stream connection."))}});return()=>{v()}},[e,L,m]),t.useEffect(()=>{if(s?.status!=="running"&&s?.status!=="starting")return;const n=setInterval(()=>{L()},Sr);return()=>{clearInterval(n)}},[L,s?.status]);const _=t.useCallback(async(n,a)=>{i.current+=1;const v=i.current;try{let c;if(m&&typeof q(()=>Ne)=="function")c=await Ne(m,e);else{const h=await Le({command:n,cwd:a},e);c=I(h)}if(i.current!==v)return;f(c),u(null)}catch(c){if(i.current!==v)return;throw u(W(c)),c}},[e,m]),j=t.useCallback(async()=>{i.current+=1;const n=i.current;try{let a;if(m&&typeof q(()=>ke)=="function")a=await ke(m,e);else{const v=await kr(e);a=I(v)}if(i.current!==n)return;f(a),u(null)}catch(a){if(i.current!==n)return;throw u(W(a)),a}},[e,m]),B=t.useCallback(async()=>{i.current+=1;const n=i.current;try{let a;if(m&&typeof q(()=>Ce)=="function")a=await Ce(m,e);else{const v=await Cr(e);a=I(v)}if(i.current!==n)return;f(a),u(null)}catch(a){if(i.current!==n)return;throw u(W(a)),a}},[e,m]),P=t.useCallback(async n=>{i.current+=1;const a=i.current;try{let v;if(m&&typeof q(()=>je)=="function")v=await je(m,n,e);else{const c=await nr({url:n},e);v={url:c.manualUrl??c.previewUrl??c.detectedUrl??null,source:c.manualUrl?"manual":"auto"}}if(i.current!==a)return;f(c=>c?{...c,previewUrl:v.url??void 0}:null),u(null)}catch(v){if(i.current!==a)return;throw u(W(v)),v}},[e,m]),V=t.useCallback(async()=>{i.current+=1;const n=i.current;try{let a;try{a=await ce(e)}catch{a=(await Re(e)).map(c=>({name:c.name,command:c.command,cwd:c.cwd,scriptName:c.scriptName,packagePath:c.packagePath}))}if(i.current!==n)return;S(a),u(null)}catch(a){if(i.current!==n)return;throw u(W(a)),a}},[e]),l=t.useCallback(async(n,a)=>{if(typeof n!="string"&&!m)try{const h=n,C=await Le({command:h.command,cwd:h.cwd,scriptName:h.scriptName,packagePath:h.packagePath??h.cwd},e),R=I(C);f(R),g([R]),u(null);return}catch(h){throw u(W(h)),h}const v=typeof n=="string"?n:n.command,c=typeof n=="string"?a:n.cwd;await _(v,c)},[e,_,m]),D=t.useCallback(async()=>{await j()},[j]),U=t.useCallback(async()=>{await B()},[B]),F=t.useCallback(async n=>{await P(n)},[P]),O=t.useCallback(async()=>{await V()},[V]),$=t.useCallback(async()=>{await L()},[L]),k=Nr(s),w=s?{...s,pid:s.runtime?.pid}:null;return{session:s,sessions:b,logs:x,detectedCommands:E,previewUrl:k,isLoading:z,error:y,startServer:_,stopServer:j,restartServer:B,setPreviewUrl:P,detectCommands:V,refresh:L,candidates:E,serverState:w,loading:z,start:l,stop:D,restart:U,setManualUrl:F,detect:O,refreshStatus:$}}const De=500,_e=100;function $e(e){return e.length>De?e.slice(-De):e}function Be(e){return e==="stderr"?"stderr":"stdout"}function re(e){try{return JSON.parse(e.data)}catch{return null}}function te(e,o){return{id:typeof e.id=="number"&&Number.isFinite(e.id)?e.id:o,text:typeof e.text=="string"?e.text:"",stream:Be(e.stream),timestamp:typeof e.timestamp=="string"?e.timestamp:""}}function Er(e,o){return{id:o,text:e,stream:"stdout",timestamp:""}}function me(e,o){if(o.length===0)return e;const s=[...e],f=new Set(e.map(b=>b.id));for(const b of o)f.has(b.id)||(f.add(b.id),s.push(b));return s.sort((b,g)=>b.id-g.id),$e(s)}function Lr(e,o){const[s,f]=t.useState([]),[b,g]=t.useState(!1),[x,d]=t.useState(!1),[E,S]=t.useState(!1),[z,N]=t.useState(null),y=t.useRef(null),u=t.useRef(!1),i=t.useRef(0),m=t.useRef(0),A=t.useRef(e),M=t.useRef(o),L=t.useRef(0),_=t.useRef(1);(A.current!==e||M.current!==o)&&(A.current=e,M.current=o,i.current++,Q({view:"useDevServerLogs",trigger:"project-context-change",projectId:e,replayAttempted:!1,reason:"context-version-bumped"}),u.current=!0,L.current=0,_.current=1,f([]),g(!1),d(!1),S(!1),N(null),y.current&&(y.current(),y.current=null)),t.useEffect(()=>{if(!o){y.current&&(y.current(),y.current=null);return}const l=i.current,D=++m.current;u.current=!1,g(!0);const U=(k,w)=>{const n=$e(k);f(n),N(w),S(w!==null?w>n.length:!1);const a=n.length>0?n[n.length-1].id:0;L.current=a,_.current=a+1},F=k=>{if(u.current||i.current!==l||!k||typeof k!="object")return;const w=k.lines;if(!Array.isArray(w))return;if(w.length>0&&typeof w[0]=="string"){const a=w.filter(v=>typeof v=="string").map((v,c)=>Er(v,c+1));U(a,a.length);return}const n=w.filter(a=>!!a&&typeof a=="object").map((a,v)=>te(a,v+1));U(n,n.length)},O=k=>{if(u.current||i.current!==l)return;const w=typeof k.text=="string"?k.text:typeof k.line=="string"?k.line:null;if(!w)return;const n=_.current,a=typeof k.id=="number"&&Number.isFinite(k.id)?k.id:n,v={id:a,text:w,stream:Be(k.stream),timestamp:typeof k.timestamp=="string"?k.timestamp:""};L.current=Math.max(L.current,a),_.current=Math.max(_.current,a+1),f(c=>me(c,[v])),N(c=>c===null?c:Math.max(c+1,v.id))};async function $(){try{const w=await de({maxLines:_e},e);if(u.current||i.current!==l||m.current!==D)return;const n=w.lines.map((a,v)=>te(a,v+1));U(n,w.totalLines)}catch{if(u.current||i.current!==l||m.current!==D)return;U([],null)}finally{!u.current&&i.current===l&&m.current===D&&g(!1)}const k=he(e);y.current=Te(k,{events:{"dev-server:log":w=>{const n=re(w);n&&O(n)},log:w=>{const n=re(w);n&&O(n)},history:w=>{const n=re(w);F(n)},"dev-server:history":w=>{const n=re(w);F(n)}},onReconnect:()=>{Q({view:"useDevServerLogs",trigger:"sse-reconnect",projectId:e,replayAttempted:!0,replayFromEventId:L.current??null,sseChannel:k,reason:"history-replay"}),!(u.current||i.current!==l)&&de({lastEventId:L.current,maxLines:50},e).then(w=>{if(u.current||i.current!==l)return;const n=w.lines.map((a,v)=>te(a,_.current+v));if(n.length>0){const a=n[n.length-1].id;L.current=Math.max(L.current,a),_.current=Math.max(_.current,a+1)}f(a=>me(a,n)),N(w.totalLines)}).catch(()=>{})}}),Q({view:"useDevServerLogs",trigger:"sse-open",projectId:e,replayAttempted:!1,sseChannel:k})}return $(),()=>{u.current=!0,y.current&&(y.current(),y.current=null)}},[o,e]);const B=t.useCallback(async()=>{if(!o||x)return;const l=i.current,D=s.length;d(!0);try{const U=await de({maxLines:_e,offset:D},e);if(u.current||i.current!==l)return;const F=U.lines.map((O,$)=>te(O,$+1));f(O=>me(F,O)),S(U.totalLines>D+F.length),N(U.totalLines)}catch{}finally{d(!1)}},[o,s.length,x,e]),P=t.useCallback(()=>{f([])},[]),V=y.current!==null&&!b&&!u.current;return{entries:s,loading:b,loadingMore:x,hasMore:E,total:z,loadMore:B,clear:P,logs:s,isStreaming:V,clearLogs:P}}const Rr="This preview appears to block iframe embedding. Open it in a new tab instead.",Dr="The preview URL could not be loaded. Verify the server is running and the URL is correct.",_r="Preview is taking longer than expected and may block iframe embedding.";function Ur(e){return e==="blocked"?Rr:e==="error"?Dr:null}function Mr(e,o={}){const{loadTimeoutMs:s=1e4,detectionMethod:f=null}=o,b=t.useRef(null),g=t.useRef(null),[x,d]=t.useState("unknown"),[E,S]=t.useState(null),[z]=t.useState(f),N=t.useCallback(()=>{g.current!==null&&(window.clearTimeout(g.current),g.current=null)},[]),y=t.useCallback(j=>{d(j),S(Ur(j))},[]),u=t.useCallback(()=>{d("blocked"),S(_r)},[]);t.useEffect(()=>{if(N(),!e){d("unknown"),S(null);return}d("unknown"),S(null);let j=!1;return queueMicrotask(()=>{j||(d("loading"),S(null))}),()=>{j=!0,N()}},[N,e]),t.useEffect(()=>{if(x!=="loading"){N();return}const j=setTimeout(()=>{g.current=null,u()},s);return g.current=j,()=>{clearTimeout(j),g.current===j&&(g.current=null)}},[N,x,s,u]);const i=t.useCallback(()=>{const j=b.current;if(!j){y("embedded");return}try{if(j.contentWindow?.location?.href==="about:blank"&&j.src!=="about:blank"){y("blocked");return}}catch{}y("embedded")},[y]),m=t.useCallback(()=>{y("error")},[y]);t.useEffect(()=>{if(N(),!e){d("unknown"),S(null);return}d("unknown"),S(null)},[N]);const A=t.useCallback(()=>{N(),d("unknown"),S(null)},[N]),M=A,L=t.useMemo(()=>x==="embedded",[x]),_=t.useMemo(()=>x==="blocked"||x==="error",[x]);return{embedStatus:x,isEmbedded:L,isBlocked:_,blockReason:E,detectionMethod:z,iframeRef:b,resetEmbedStatus:A,setEmbedStatus:y,retry:M,embedContext:E,handleIframeLoad:i,handleIframeError:m}}const Ar=/\x1b\[[0-9;]*m/g;function be(e){return e.replace(Ar,"")}function Pr(e){if(!e)return"";const o=new Date(e);return Number.isNaN(o.getTime())?"":o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}function Tr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function zr(e){if(e.stream==="stderr")return"error";const o=be(e.text).toLowerCase();return/\b(warn|warning)\b/.test(o)?"warn":/\b(error|fatal)\b/.test(o)?"error":"info"}function Fr(e,o){if(!o)return e;const s=new RegExp(`(${Tr(o)})`,"ig"),f=e.split(s),b=o.toLowerCase();return r.jsx(r.Fragment,{children:f.map((g,x)=>g.toLowerCase()===b?r.jsx("mark",{children:g},`${g}-${x}`):r.jsx("span",{children:g},`${g}-${x}`))})}function Or({entries:e,loading:o,loadingMore:s,hasMore:f,total:b,onLoadMore:g,isRunning:x}){const{t:d}=ne("app"),E=t.useRef(null),S=t.useRef(e.length),z=t.useRef(x),[N,y]=t.useState(!1),[u,i]=t.useState(!1),[m,A]=t.useState(""),[M,L]=t.useState("all"),_=t.useMemo(()=>M==="all"?e:e.filter(l=>zr(l)===M),[e,M]),j=t.useMemo(()=>{const l=m.trim().toLowerCase();return l?_.filter(D=>be(D.text).toLowerCase().includes(l)):_},[_,m]),B=j.length,P=t.useCallback(()=>{const l=E.current;l&&(l.scrollTop=l.scrollHeight,i(!1))},[]);t.useEffect(()=>{const l=z.current,D=S.current,U=e.length>D;x&&(!l||!u&&U)&&P(),z.current=x,S.current=e.length},[e.length,x,u,P]);const V=t.useCallback(()=>{const l=E.current;if(!l)return;const U=l.scrollTop+l.clientHeight>=l.scrollHeight-50;i(!U)},[]);return t.useEffect(()=>{o||e.length===0||!u&&x&&P()},[e,x,u,o,P]),o&&e.length===0?r.jsx("section",{className:"devserver-log-viewer","data-testid":"devserver-log-viewer",children:r.jsxs("div",{className:"devserver-log-viewer__loading","data-testid":"devserver-log-loading",children:[r.jsx(se,{size:16,className:"devserver-log-viewer__spinner"}),r.jsx("span",{children:d("devserver.loadingLogs","Loading logs…")})]})}):r.jsxs("section",{className:`devserver-log-viewer${N?" devserver-log-viewer--fullscreen":""}`,"data-testid":"devserver-log-viewer",children:[r.jsxs("header",{className:"devserver-log-viewer__toolbar",children:[r.jsxs("div",{className:"devserver-log-viewer__toolbar-meta",children:[r.jsx("span",{className:"devserver-log-viewer__title",children:d("devserver.logs","Logs")}),r.jsxs("span",{className:"devserver-log-viewer__count","data-testid":"devserver-log-count",children:[b!==null?`${e.length}/${b}`:`${e.length}`," ",d("devserver.lines","lines")]})]}),r.jsxs("div",{className:"devserver-log-viewer__toolbar-actions",children:[r.jsxs("label",{className:"devserver-log-viewer__severity",htmlFor:"devserver-log-severity-filter",children:[r.jsx("span",{className:"visually-hidden",children:d("devserver.filterBySeverity","Filter logs by severity")}),r.jsxs("select",{id:"devserver-log-severity-filter",className:"select devserver-log-viewer__severity-select",value:M,onChange:l=>L(l.target.value),"data-testid":"devserver-log-severity-filter","aria-label":d("devserver.filterBySeverity","Filter logs by severity"),children:[r.jsx("option",{value:"all",children:d("devserver.allSeverities","All severities")}),r.jsx("option",{value:"info",children:d("devserver.info","Info")}),r.jsx("option",{value:"warn",children:d("devserver.warn","Warn")}),r.jsx("option",{value:"error",children:d("devserver.error","Error")})]})]}),r.jsxs("label",{className:"devserver-log-viewer__search",htmlFor:"devserver-log-search",children:[r.jsx("span",{className:"visually-hidden",children:d("devserver.searchLogs","Search logs")}),r.jsx(dr,{size:14}),r.jsx("input",{id:"devserver-log-search",className:"input devserver-log-viewer__search-input",type:"text",value:m,onChange:l=>A(l.target.value),placeholder:d("devserver.searchLogs","Search logs"),"data-testid":"devserver-log-search-input","aria-label":d("devserver.searchLogs","Search logs")})]}),m.trim().length>0&&r.jsx("span",{className:"devserver-log-viewer__matches","data-testid":"devserver-log-match-count",children:d("devserver.matchCount",{count:B,defaultValue_one:"{{count}} match",defaultValue_other:"{{count}} matches"})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:()=>y(l=>!l),"data-testid":"devserver-log-fullscreen-toggle","aria-label":N?d("devserver.exitFullscreen","Exit fullscreen logs"):d("devserver.enterFullscreen","Enter fullscreen logs"),children:N?r.jsx(vr,{size:14}):r.jsx(ur,{size:14})})]})]}),r.jsxs("div",{className:"devserver-log-viewer__body",children:[f&&r.jsx("div",{className:"devserver-log-viewer__load-more","data-testid":"devserver-log-load-more",children:r.jsx("button",{type:"button",className:"btn btn-sm touch-target",onClick:g,disabled:s,"data-testid":"devserver-log-load-more-button",children:s?r.jsxs(r.Fragment,{children:[r.jsx(se,{size:14,className:"devserver-log-viewer__spinner"}),d("devserver.loadingOlderLogs","Loading older logs…")]}):d("devserver.loadOlderLogs","Load older logs")})}),r.jsxs("div",{ref:E,className:"devserver-log-viewer__content",onScroll:V,"data-testid":"devserver-log-content",children:[!o&&j.length===0&&r.jsx("p",{className:"devserver-log-viewer__empty","data-testid":"devserver-log-empty",children:e.length===0?d("devserver.noLogsYet","No logs yet. Start the dev server to see output."):_.length===0?d("devserver.noMatchesSeverity","No log lines match the selected severity."):d("devserver.noMatchesSearch","No log lines match your search.")}),j.map(l=>{const D=be(l.text),U=Pr(l.timestamp);return r.jsxs("div",{className:"devserver-log-line",children:[U&&r.jsx("span",{className:"devserver-log-timestamp","data-testid":"devserver-log-timestamp",children:U}),l.stream==="stderr"&&r.jsx("span",{className:"devserver-log-stream-badge","data-testid":"devserver-log-stderr-badge",children:d("devserver.errBadge","ERR")}),r.jsx("span",{className:"devserver-log-text",children:mr(Fr(D,m.trim()))})]},l.id)})]}),u&&x&&r.jsxs("button",{type:"button",className:"btn btn-sm devserver-log-viewer__new-logs-button",onClick:P,"data-testid":"devserver-log-jump-button",children:[r.jsx(fr,{size:14}),d("devserver.newLogs","New logs")]})]})]})}const $r="devserver-preview-iframe";function Br({url:e,embedStatus:o,onEmbedStatusChange:s,iframeRef:f,blockReason:b,onRetry:g,className:x=$r,embedContext:d}){const{t:E}=ne("app"),S=b??d??null,[z,N]=t.useState(0);t.useEffect(()=>{!e||o!=="unknown"||(N(m=>m+1),s("loading"))},[o,s,e]);const y=t.useCallback(()=>{const m=f.current;if(!m){s("embedded");return}try{if(m.contentWindow?.location?.href==="about:blank"&&m.src!=="about:blank"){s("blocked");return}}catch{}s("embedded")},[f,s]),u=t.useCallback(m=>{m.stopPropagation(),s("error")},[s]),i=t.useCallback(()=>{e&&window.open(e,"_blank","noopener,noreferrer")},[e]);return e?r.jsxs("div",{className:"devserver-preview-iframe-shell",children:[r.jsx("iframe",{src:e,ref:f,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox",className:x,title:"Dev server preview",onLoad:y,onError:u,onErrorCapture:u,"data-testid":"devserver-preview-iframe"},`${e}-${z}`),o==="loading"&&r.jsxs("div",{className:"devserver-preview-overlay","data-testid":"devserver-preview-loading",children:[r.jsx(se,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:E("preview.loading","Loading preview...")})]}),o==="blocked"&&r.jsxs("div",{className:"devserver-preview-blocked-panel",role:"alert","data-testid":"devserver-preview-blocked-panel",children:[r.jsx(ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:E("preview.blockedTitle","Preview cannot be embedded")}),S&&r.jsx("p",{className:"devserver-preview-blocked-context",children:S})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:E("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:i,children:E("preview.openInNewTab","Open in new tab")}),g&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:g,children:E("actions.retry","Retry")})]})]}),o==="error"&&r.jsxs("div",{className:"devserver-preview-error-panel",role:"alert","data-testid":"devserver-preview-error-panel",children:[r.jsx(Fe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:E("preview.errorTitle","Unable to load preview")}),S&&r.jsx("p",{className:"devserver-preview-blocked-context",children:S})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:E("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:i,children:E("preview.openInNewTab","Open in new tab")}),g&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:g,children:E("actions.retry","Retry")})]})]})]}):null}function Hr(e){return{stopped:{className:"dev-server-status-badge--stopped",label:e("devserver.status.stopped","Stopped")},starting:{className:"dev-server-status-badge--starting",label:e("devserver.status.starting","Starting...")},running:{className:"dev-server-status-badge--running",label:e("devserver.status.running","Running")},stopping:{className:"dev-server-status-badge--starting",label:e("devserver.status.stopping","Stopping...")},failed:{className:"dev-server-status-badge--failed",label:e("devserver.status.failed","Failed")}}}let fe=!1;function Ue(e){return e instanceof Error?e.message:String(e)}function He(e){return e==="."?"root":e}function Me(e){return e?e==="root"?".":e:null}function Ae(e,o,s){return!o||e.scriptName!==o?!1:s?He(e.cwd)===s:!0}function Vr(e){return e.cwd==="."?"root":e.cwd}function Wr(e){return e.length<=60?e:`${e.slice(0,60)}…`}function Yr({addToast:e,projectId:o}){const{t:s}=ne("app");t.useEffect(()=>(Q({view:"DevServerView",trigger:fe?"route-active":"remount",projectId:o,replayAttempted:!1}),fe=!1,()=>{fe=!0,Q({view:"DevServerView",trigger:"route-inactive",projectId:o,replayAttempted:!1})}),[o]);const{session:f,detectedCommands:b,previewUrl:g,isLoading:x,error:d,startServer:E,stopServer:S,restartServer:z,setPreviewUrl:N,detectCommands:y,refresh:u}=jr(o),i=f?.status??"stopped",m=i==="running"||i==="starting",A=Hr(s),M=A[i]??A.stopped,{entries:L,loading:_,loadingMore:j,hasMore:B,total:P,loadMore:V}=Lr(o,!!o),l=g,D=f?.config?.cwd??null,[U,F]=t.useState(!0),[O,$]=t.useState(""),[k,w]=t.useState(""),[n,a]=t.useState(null),[v,c]=t.useState(null),[h,C]=t.useState("embedded"),R=h==="embedded"?l:null,{embedStatus:H,setEmbedStatus:Ve,resetEmbedStatus:Y,iframeRef:G,isEmbedded:We,isBlocked:ae,blockReason:ie,retry:we}=Mr(R),[xe,X]=t.useState(!1),ye=t.useRef(H);t.useEffect(()=>{const p=ye.current!==H;ae&&p&&X(!0),H==="embedded"&&X(!1),ye.current=H},[H,ae]),t.useEffect(()=>{X(!1)},[l]);const K=t.useMemo(()=>{if(!n)return null;const p=Me(D);return b.find(T=>!(T.scriptName!==n||p&&T.cwd!==p||f?.config?.command&&T.command!==f.config.command))??b.find(T=>Ae(T,n,D))??null},[b,f?.config?.command,n,D]);t.useEffect(()=>{typeof y=="function"&&y().catch(p=>{e(Ue(p),"error")})},[e,y]),t.useEffect(()=>{if(n){F(!1);return}F(!0)},[n]),t.useEffect(()=>{if(f?.status==="running"||f?.status==="starting"){f.config?.command?.trim().length>0&&$(f.config.command);return}if(K){$(K.command);return}b.length>0&&$(p=>p.trim().length>0?p:b[0]?.command??"")},[b,K,f?.config?.command,f?.status]),t.useEffect(()=>{w(l??"")},[l]);const le=t.useCallback(()=>{l&&window.open(l,"_blank","noopener,noreferrer")},[l]),Se=t.useCallback(()=>{X(!1),we()},[we]),qe=t.useCallback(()=>{try{const p=G.current;if(p?.contentWindow){p.contentWindow.location.reload(),X(!1),Y();return}}catch{}if(!(!l||!G.current))try{const p=new URL(l);p.searchParams.set("_t",Date.now().toString()),G.current.src=p.toString(),X(!1),Y()}catch{G.current.src=l,X(!1),Y()}},[l,G,Y]),Z=t.useCallback(async(p,T,oe)=>{c(p);try{await T(),e(oe,"success")}catch(tr){e(Ue(tr),"error")}finally{c(null)}},[e]),Xe=t.useCallback(p=>{a(p.scriptName),F(!1),$(p.command),e(s("devserver.toast.selectedScript","Selected {{name}} script.",{name:p.scriptName}),"success")},[e]),Ie=t.useCallback(()=>{a(null),F(!0),e(s("devserver.toast.clearedScript","Cleared selected dev server script."),"success")},[e]),Ge=()=>{const p=O.trim();if(p.length===0){e(s("devserver.toast.enterCommand","Enter a command before starting the dev server."),"warning");return}const T=Me(D)??".",oe=K?.cwd??T;Z("start",()=>E(p,oe),s("devserver.toast.started","Dev server started."))},Je=()=>{Z("stop",S,s("devserver.toast.stopped","Dev server stopped."))},Qe=()=>{Z("restart",z,s("devserver.toast.restarted","Dev server restarted."))},Ye=()=>{const p=k.trim(),T=p.length>0?p:null;Z("preview",()=>N(T),T?s("devserver.toast.previewUpdated","Preview URL updated."):s("devserver.toast.previewCleared","Preview URL override cleared."))},Ke=t.useCallback(()=>{d&&u()},[d,u]),Ze=i==="starting"||i==="running"||v!==null,er=i==="stopped"||v!==null,rr=i==="stopped"||i==="starting"||v!==null;return r.jsxs("div",{className:"dev-server-view","data-testid":"dev-server-view",children:[r.jsxs("section",{className:"dev-server-header","aria-label":"Dev server controls header",children:[r.jsxs("div",{className:"dev-server-header-title",children:[r.jsx(pr,{size:16}),r.jsx("h2",{children:s("devserver.title","Dev Server")}),r.jsx("span",{className:`dev-server-status-badge ${M.className}`,"data-testid":"dev-server-status-badge",children:M.label})]}),r.jsxs("div",{className:"dev-server-header-actions",children:[r.jsxs("button",{type:"button",className:"btn btn-primary btn-sm",onClick:Ge,disabled:Ze,"data-testid":"dev-server-start-button",children:[r.jsx(hr,{size:14}),r.jsx("span",{children:v==="start"?s("devserver.starting","Starting..."):s("devserver.start","Start")})]}),r.jsxs("button",{type:"button",className:"btn btn-danger btn-sm",onClick:Je,disabled:er,"data-testid":"dev-server-stop-button",children:[r.jsx(gr,{size:14}),r.jsx("span",{children:v==="stop"?s("devserver.stopping","Stopping..."):s("devserver.stop","Stop")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm",onClick:Qe,disabled:rr,"data-testid":"dev-server-restart-button",children:[r.jsx(br,{size:14}),r.jsx("span",{children:v==="restart"?s("devserver.restarting","Restarting..."):s("devserver.restart","Restart")})]})]})]}),r.jsxs("section",{className:"dev-server-panel dev-server-config","aria-label":"Dev server configuration",children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.configuration","Configuration")}),x&&r.jsx("span",{className:"dev-server-muted",children:s("devserver.loading","Loading...")})]}),x&&!f&&b.length===0&&r.jsxs("div",{className:"dev-server-loading-state","data-testid":"dev-server-loading-state",children:[r.jsx(se,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:s("devserver.loadingConfig","Loading dev server configuration...")})]}),d&&r.jsxs("div",{className:"dev-server-error-box",role:"alert","data-testid":"dev-server-error-box",children:[r.jsx("p",{children:d}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:Ke,children:s("devserver.retry","Retry")})]}),r.jsxs("div",{className:"dev-server-section",children:[r.jsx("h3",{children:s("devserver.scriptSelection","Script Selection")}),n&&r.jsxs("div",{className:"dev-server-selected","data-testid":"dev-server-selected-summary",children:[r.jsx("span",{className:"dev-server-candidate-name",children:n}),r.jsx("span",{className:"dev-server-candidate-source",children:D??"root"}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>F(!0),"data-testid":"dev-server-change-selection",children:s("devserver.change","Change")}),r.jsx("button",{type:"button",className:"btn btn-danger btn-sm",onClick:Ie,"data-testid":"dev-server-clear-selection",children:s("devserver.clear","Clear")})]}),U&&b.length===0&&r.jsx("p",{className:"dev-server-empty-state","data-testid":"dev-server-empty-candidates",children:s("devserver.noScriptsDetected","No dev server scripts detected. Check that your project has a package.json with a dev, start, or similar script.")}),U&&b.length>0&&r.jsx("div",{className:"dev-server-candidates","data-testid":"dev-server-candidates",children:b.map(p=>{const T=Ae(p,n,D);return r.jsxs("button",{type:"button",className:`dev-server-candidate ${T?"dev-server-candidate--selected":""}`,onClick:()=>Xe(p),"data-testid":`dev-server-candidate-${p.scriptName}-${He(p.cwd)}`,children:[r.jsx("span",{className:"dev-server-candidate-name",children:p.scriptName}),r.jsx("span",{className:"dev-server-candidate-command",children:Wr(p.command)}),r.jsx("span",{className:"dev-server-candidate-source",children:Vr(p)})]},`${p.cwd}::${p.scriptName}::${p.command}`)})})]}),r.jsxs("div",{className:"dev-server-field-group",children:[r.jsx("label",{htmlFor:"dev-server-command",className:"dev-server-label",children:s("devserver.command","Command")}),r.jsx("input",{id:"dev-server-command",className:"input",value:O,onChange:p=>$(p.target.value),placeholder:"pnpm dev","data-testid":"dev-server-command-input",readOnly:i==="running"||i==="starting"})]}),(i==="running"||i==="starting")&&f&&r.jsxs("div",{className:"dev-server-current-command","data-testid":"dev-server-current-command",children:[r.jsx("span",{className:"dev-server-label",children:s("devserver.runningCommand","Running command")}),r.jsx("code",{children:f.config?.command??O})]}),r.jsxs("div",{className:"dev-server-preview-override",children:[r.jsx("label",{htmlFor:"dev-server-preview-input",className:"dev-server-label",children:s("devserver.previewUrlOverride","Preview URL Override")}),r.jsx("input",{id:"dev-server-preview-input",className:"input",type:"url",value:k,onChange:p=>w(p.target.value),placeholder:"http://localhost:3000","data-testid":"dev-server-preview-input"}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:Ye,disabled:v==="preview","data-testid":"dev-server-set-preview",children:s("devserver.save","Save")})]}),l&&r.jsx("p",{className:"dev-server-preview-hint",children:s("devserver.autoDetected","Auto-detected: {{url}}",{url:l})})]}),r.jsx("div",{className:"dev-server-content",children:r.jsxs("section",{className:"dev-server-panel dev-server-logs-panel","data-testid":"dev-server-logs-panel","aria-label":"Dev server logs",children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.logs","Logs")}),r.jsx("span",{className:"dev-server-muted",children:s("devserver.lines","{{count}} lines",{count:P??L.length})})]}),r.jsx("div",{className:"dev-server-logs-viewer","data-testid":"dev-server-log-viewer",children:r.jsx(Or,{entries:L,loading:_,loadingMore:j,hasMore:B,total:P,onLoadMore:V,isRunning:m})})]})}),r.jsxs("section",{className:"dev-server-panel devserver-preview-panel","data-testid":"devserver-preview-panel","aria-label":"Dev server preview",children:[r.jsxs("div",{className:"devserver-preview-header",children:[r.jsxs("div",{className:"devserver-preview-title",children:[r.jsx(wr,{size:14}),r.jsx("span",{children:s("devserver.preview","Preview")})]}),r.jsxs("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:l??s("devserver.noPreviewUrl","No preview URL"),"data-testid":"devserver-preview-url-badge",children:[s("devserver.auto","Auto"),l?` · ${l}`:s("devserver.notAvailable"," · Not available")]}),r.jsxs("div",{className:"devserver-preview-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>C(p=>p==="embedded"?"external":"embedded"),"data-testid":"devserver-preview-mode-toggle",children:h==="embedded"?s("devserver.externalOnly","External only"):s("devserver.embedded","Embedded")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.openInNewTab","Open in new tab"),onClick:le,disabled:!l,"data-testid":"devserver-preview-open-tab",children:r.jsx(xr,{})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.refreshPreview","Refresh preview"),onClick:qe,disabled:!l,"data-testid":"devserver-preview-refresh",children:r.jsx(yr,{})})]})]}),r.jsxs("div",{className:"devserver-preview-container","data-embed-status":H,"data-embedded":We?"true":"false",children:[!l&&!m&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.startDevServer","Start a dev server to see a live preview here.")}),!l&&m&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.noPreviewDetected","No preview URL detected. Start the dev server or set a manual URL to preview your app.")}),l&&h==="external"&&r.jsxs("div",{className:"devserver-preview-external-only","data-testid":"devserver-preview-external-only",children:[r.jsx("p",{children:s("devserver.embeddedPreviewDisabled","Embedded preview is disabled. Open your app in a separate browser tab.")}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm touch-target",onClick:le,"data-testid":"devserver-preview-external-open-tab",children:s("devserver.openInNewTab","Open in new tab")})]}),l&&h==="embedded"&&xe&&ae&&r.jsxs("div",{className:H==="error"?"devserver-preview-error-panel":"devserver-preview-blocked-panel","data-testid":"devserver-preview-fallback",role:"alert",children:[H==="error"?r.jsx(Fe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}):r.jsx(ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:H==="error"?s("devserver.previewFailed","Preview failed"):s("devserver.previewBlocked","Preview blocked")}),ie&&r.jsx("p",{className:"devserver-preview-blocked-context",children:ie})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:s("devserver.openPreviewOrRetry","Open the preview in a new tab, or retry embedded mode after checking your server settings.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:le,"data-testid":"devserver-preview-fallback-open-tab",children:s("devserver.openPreviewInNewTab","Open preview in new tab")}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:Se,"data-testid":"devserver-preview-fallback-retry",children:s("devserver.retryEmbeddedPreview","Retry embedded preview")})]})]}),l&&h==="embedded"&&!xe&&r.jsx(Br,{url:l,embedStatus:H,onEmbedStatusChange:Ve,iframeRef:G,blockReason:ie,onRetry:Se})]})]})]})}export{Yr as DevServerView};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as c,j as r}from"./vendor-react-D37HfzIf.js";import{cX as v,cY as z,cZ as D,c_ as x,b as j,aj as S,ae as T,af as B,J as A,L,ay as w}from"./index-
|
|
1
|
+
import{r as c,j as r}from"./vendor-react-D37HfzIf.js";import{cX as v,cY as z,cZ as D,c_ as x,b as j,aj as S,ae as T,af as B,J as A,L,ay as w}from"./index-CgfrecpF.js";import{u as K}from"./vendor-i18n-CV0mwX_-.js";import{F as R}from"./folder-open-C9XAaduE.js";function X({value:p,onChange:u,placeholder:f,onInputKeyDown:N,nodeId:b,localNodeId:k}){const{t:i}=K("app"),[e,s]=c.useState({isOpen:!1,loading:!1,error:null,currentPath:"",parentPath:null,entries:[],showHidden:!1,createFolderOpen:!1,createFolderError:null}),[l,h]=c.useState(""),d=c.useCallback(async(t,n=!1)=>{s(o=>({...o,loading:!0,error:null}));try{const o=await v(t,n,b,k);s(a=>({...a,loading:!1,currentPath:o.currentPath,parentPath:o.parentPath,entries:o.entries}))}catch(o){s(a=>({...a,loading:!1,error:o instanceof Error?o.message:"Failed to browse directory"}))}},[b,k]),F=c.useCallback(()=>{s(t=>t.isOpen?{...t,isOpen:!1}:{...t,isOpen:!0})},[]);c.useEffect(()=>{e.isOpen&&!e.loading&&!e.currentPath&&!e.error&&d(p||void 0,e.showHidden)},[e.isOpen,e.loading,e.currentPath,e.error,p,e.showHidden,d,b,k]);const m=c.useCallback(t=>{d(t,e.showHidden)},[d,e.showHidden]),g=c.useCallback(()=>{u(e.currentPath),s(t=>({...t,isOpen:!1}))},[e.currentPath,u]),C=c.useCallback(()=>{s(t=>{const n=!t.showHidden;return{...t,showHidden:n}})},[]);c.useEffect(()=>{e.isOpen&&e.currentPath&&d(e.currentPath,e.showHidden)},[e.showHidden,d]);const P=c.useCallback(()=>{s(t=>({...t,createFolderOpen:!t.createFolderOpen,createFolderError:null})),h("")},[]),y=c.useCallback(async()=>{if(!l.trim()||!e.currentPath)return;const t=l.trim();if(t.includes("/")||t.includes("\\")||t.includes("..")){s(a=>({...a,createFolderError:i("dirPicker.createFolderError","Folder name cannot contain path separators or '..'")}));return}const n=e.currentPath.includes("\\")?"\\":"/",o=e.currentPath.endsWith(n)?e.currentPath+t:e.currentPath+n+t;s(a=>({...a,loading:!0,createFolderError:null}));try{await z(o),h(""),s(a=>({...a,createFolderOpen:!1})),await d(e.currentPath,e.showHidden)}catch(a){s(O=>({...O,loading:!1,createFolderError:a instanceof Error?a.message:"Failed to create folder"}))}},[l,e.currentPath,e.showHidden,d]),H=c.useCallback(t=>{t.key==="Enter"?(t.preventDefault(),y()):t.key==="Escape"&&(s(n=>({...n,createFolderOpen:!1,createFolderError:null})),h(""))},[y]),E=e.currentPath?D(e.currentPath):[];return r.jsxs("div",{className:"directory-picker",children:[r.jsxs("div",{className:"directory-picker-input-row",children:[r.jsx("input",{type:"text",className:"input directory-picker-input",value:p,onChange:t=>u(t.target.value),onKeyDown:N,placeholder:f||i("dirPicker.defaultPlaceholder","/path/to/your/project")}),r.jsxs("button",{type:"button",className:"btn btn-secondary btn-sm directory-picker-browse-btn",onClick:F,"aria-label":e.isOpen?i("dirPicker.closeBrowser","Close directory browser"):i("dirPicker.openBrowser","Browse directories"),children:[e.isOpen?r.jsx(R,{size:16}):r.jsx(x,{size:16}),r.jsx("span",{children:i("dirPicker.browse","Browse")})]})]}),e.isOpen&&r.jsxs("div",{className:"directory-picker-browser",role:"tree","aria-label":i("dirPicker.ariaLabel","Directory browser"),children:[r.jsx("div",{className:"directory-picker-breadcrumbs",children:E.map((t,n)=>r.jsxs("span",{className:"directory-picker-breadcrumb-item",children:[n>0&&r.jsx(j,{size:12,className:"directory-picker-breadcrumb-sep"}),r.jsx("button",{type:"button",className:"directory-picker-breadcrumb",onClick:()=>m(t.path),title:t.path,children:t.label})]},t.path))}),r.jsxs("div",{className:"directory-picker-toolbar",children:[e.parentPath&&r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-up-btn",onClick:()=>m(e.parentPath),"aria-label":i("dirPicker.parentDir","Go to parent directory"),title:i("dirPicker.parentDirTitle","Parent directory"),children:[r.jsx(S,{size:14}),r.jsx("span",{children:i("dirPicker.up","Up")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-hidden-toggle",onClick:C,"aria-label":e.showHidden?i("dirPicker.hideHiddenAria","Hide hidden directories"):i("dirPicker.showHiddenAria","Show hidden directories"),title:e.showHidden?i("dirPicker.hideHiddenTitle","Hide hidden"):i("dirPicker.showHiddenTitle","Show hidden"),children:[e.showHidden?r.jsx(T,{size:14}):r.jsx(B,{size:14}),r.jsx("span",{children:e.showHidden?i("dirPicker.hideHidden","Hide hidden"):i("dirPicker.showHidden","Show hidden")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-create-folder-toggle",onClick:P,"aria-label":i("dirPicker.createFolderAria","Create new folder"),title:i("dirPicker.createFolderTitle","Create folder"),children:[r.jsx(A,{size:14}),r.jsx("span",{children:i("dirPicker.createFolder","New folder")})]})]}),e.loading?r.jsxs("div",{className:"directory-picker-loading",children:[r.jsx(L,{size:20,className:"animate-spin"}),r.jsx("span",{children:i("dirPicker.loading","Loading…")})]}):e.error?r.jsxs("div",{className:"directory-picker-error",children:[r.jsx(w,{size:16}),r.jsx("span",{children:e.error})]}):r.jsx("div",{className:"directory-picker-entries",children:e.entries.length===0?r.jsx("div",{className:"directory-picker-empty",children:i("dirPicker.noSubdirs","No subdirectories")}):e.entries.map(t=>r.jsxs("button",{type:"button",className:"directory-picker-entry",onClick:()=>m(t.path),role:"treeitem",title:t.path,children:[r.jsx(x,{size:16,className:"directory-picker-entry-icon"}),r.jsx("span",{className:"directory-picker-entry-name",children:t.name}),t.hasChildren&&r.jsx(j,{size:14,className:"directory-picker-entry-arrow"})]},t.path))}),e.createFolderOpen&&r.jsxs("div",{className:"directory-picker-create-folder",children:[r.jsx("input",{type:"text",className:"input directory-picker-create-folder-input",value:l,onChange:t=>h(t.target.value),onKeyDown:H,placeholder:i("dirPicker.newFolderPlaceholder","Folder name"),autoFocus:!0}),r.jsxs("div",{className:"directory-picker-create-folder-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm btn-primary",onClick:y,disabled:!l.trim()||e.loading||!e.currentPath,children:i("dirPicker.createFolderConfirm","Create")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-secondary",onClick:P,children:i("dirPicker.cancel","Cancel")})]}),e.createFolderError&&r.jsxs("div",{className:"directory-picker-create-folder-error",children:[r.jsx(w,{size:14}),r.jsx("span",{children:e.createFolderError})]})]}),r.jsxs("div",{className:"directory-picker-actions",children:[r.jsx("span",{className:"directory-picker-selected-path",title:e.currentPath,children:e.currentPath}),r.jsx("button",{type:"button",className:"btn btn-primary directory-picker-select-btn",onClick:g,children:i("dirPicker.select","Select")})]})]})]})}export{X as D};
|