@runfusion/fusion 0.40.1 → 0.42.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.
Files changed (83) hide show
  1. package/dist/bin.js +44240 -41922
  2. package/dist/client/.vite/manifest.json +75 -75
  3. package/dist/client/assets/AgentDetailView-C5Lb3fd3.js +18 -0
  4. package/dist/client/assets/AgentDetailView-DiWELtb1.css +1 -0
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-BP6d1LFG.js → AgentPermissionPolicyEditor-DtRcvE6M.js} +2 -2
  6. package/dist/client/assets/{AgentsView-COx3draV.js → AgentsView-BVW-NOYD.js} +3 -3
  7. package/dist/client/assets/ChatView-Dy-oIkrK.js +6 -0
  8. package/dist/client/assets/{DevServerView-DXQ1LX4H.js → DevServerView-DLsFSP4s.js} +1 -1
  9. package/dist/client/assets/{DirectoryPicker-B_8ICSPl.js → DirectoryPicker-_QawX-uL.js} +1 -1
  10. package/dist/client/assets/{DocumentsView-DmNB9rJZ.js → DocumentsView-DierUJsj.js} +1 -1
  11. package/dist/client/assets/{EvalsView-72w3_AO6.js → EvalsView-B83lYKQl.js} +1 -1
  12. package/dist/client/assets/{ExperimentalAgentOnboardingModal-Be4oaohM.js → ExperimentalAgentOnboardingModal-CTctYTPU.js} +1 -1
  13. package/dist/client/assets/{GoalsView-DkEXO_mx.js → GoalsView-CKn8i0i0.js} +1 -1
  14. package/dist/client/assets/{InsightsView-_-wd4BOJ.js → InsightsView-EpRHCD8G.js} +1 -1
  15. package/dist/client/assets/{MemoryView-BOCIc8HT.js → MemoryView-Df_ocTc5.js} +2 -2
  16. package/dist/client/assets/NodesView-DF7xJ_3z.js +14 -0
  17. package/dist/client/assets/{PiExtensionsManager-BqaI9GKX.js → PiExtensionsManager-BOooOEDx.js} +2 -2
  18. package/dist/client/assets/{PluginManager-DYaVwsXd.js → PluginManager-CHrDAzK6.js} +1 -1
  19. package/dist/client/assets/{PullRequestView-Dk9a7jRZ.js → PullRequestView-CJU21OZ6.js} +2 -2
  20. package/dist/client/assets/{ReliabilityView-B-i5SOoD.js → ReliabilityView-uHkW1Qeu.js} +1 -1
  21. package/dist/client/assets/{ResearchView-C2Gx8jC9.js → ResearchView-oZ2-vbjL.js} +1 -1
  22. package/dist/client/assets/{SecretsView-Db2HAGi2.js → SecretsView-BpkqSV_E.js} +1 -1
  23. package/dist/client/assets/SessionTerminal-D9IW4cDj.js +2 -0
  24. package/dist/client/assets/{SettingsModal-B-d30TVy.js → SettingsModal-BmB5l2bA.js} +1 -1
  25. package/dist/client/assets/SettingsModal-C8gsAazm.js +31 -0
  26. package/dist/client/assets/{SetupWizardModal-Cw3RdN83.js → SetupWizardModal-BYLEU_7o.js} +1 -1
  27. package/dist/client/assets/{SkillsView-BGyynaI4.js → SkillsView-8GgQ8Z_Z.js} +1 -1
  28. package/dist/client/assets/{StashRecoveryView-CFaU-hym.js → StashRecoveryView-CT1t1Uf2.js} +1 -1
  29. package/dist/client/assets/{TodoView-Djjwcb49.js → TodoView-BUj6ITAb.js} +2 -2
  30. package/dist/client/assets/WorkflowNodeEditor-CN7GPmvV.js +8 -0
  31. package/dist/client/assets/WorkflowNodeEditor-aPj8cv81.css +1 -0
  32. package/dist/client/assets/app-B2ZxMfJT.js +13 -0
  33. package/dist/client/assets/app-BffGU_HQ.js +13 -0
  34. package/dist/client/assets/app-C8AHhs5N.js +13 -0
  35. package/dist/client/assets/app-DCot4oXA.js +13 -0
  36. package/dist/client/assets/app-Ri9Te2Dv.js +13 -0
  37. package/dist/client/assets/app-sEkTyT-w.js +13 -0
  38. package/dist/client/assets/{dashboard-view-O5j3PSGY.js → dashboard-view-C3SsjXo1.js} +1621 -1621
  39. package/dist/client/assets/{dashboard-view-DOEa6gWS.js → dashboard-view-CrYwb0oQ.js} +1 -1
  40. package/dist/client/assets/dashboard-view-Du53JbmQ.css +1 -0
  41. package/dist/client/assets/{folder-open-BtEAEp7E.js → folder-open-CREXTATY.js} +1 -1
  42. package/dist/client/assets/index-2kYpdJrx.js +793 -0
  43. package/dist/client/assets/index-CJUfvGdC.css +1 -0
  44. package/dist/client/assets/{upload-Y9NiLQ9o.js → upload-BvLUlwaH.js} +1 -1
  45. package/dist/client/assets/{users-B13HD4Tp.js → users-CjhbU-sF.js} +1 -1
  46. package/dist/client/index.html +2 -2
  47. package/dist/client/version.json +1 -1
  48. package/dist/droid-cli/package.json +1 -1
  49. package/dist/extension.js +43622 -41519
  50. package/dist/pi-claude-cli/package.json +1 -1
  51. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  52. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  53. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +59 -8
  54. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  55. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  56. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  57. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  58. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  59. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  60. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  61. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  62. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  63. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  64. package/package.json +4 -3
  65. package/skill/fusion/references/extension-tools.md +3 -3
  66. package/skill/fusion/references/fusion-capabilities.md +2 -2
  67. package/dist/client/assets/AgentDetailView-BrETpTDj.js +0 -18
  68. package/dist/client/assets/AgentDetailView-CY-O6VkV.css +0 -1
  69. package/dist/client/assets/ChatView-CrVSqQK_.js +0 -6
  70. package/dist/client/assets/NodesView-DTQP1j4H.js +0 -14
  71. package/dist/client/assets/SessionTerminal-DwlNZLlr.js +0 -2
  72. package/dist/client/assets/SettingsModal-Dje7N0hv.js +0 -31
  73. package/dist/client/assets/WorkflowNodeEditor-Po5uv_dN.css +0 -1
  74. package/dist/client/assets/WorkflowNodeEditor-vnXnKvAr.js +0 -8
  75. package/dist/client/assets/app-CTRT_hQh.js +0 -13
  76. package/dist/client/assets/app-CVg6W-HU.js +0 -13
  77. package/dist/client/assets/app-CY3pQXOr.js +0 -13
  78. package/dist/client/assets/app-DNh04p5I.js +0 -13
  79. package/dist/client/assets/app-DhHgtB9j.js +0 -13
  80. package/dist/client/assets/app-NL_hPGDS.js +0 -13
  81. package/dist/client/assets/dashboard-view-BgiLoG1G.css +0 -1
  82. package/dist/client/assets/index-BHGM5W8a.css +0 -1
  83. package/dist/client/assets/index-CW4OzecJ.js +0 -793
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-BrETpTDj.js","assets/vendor-react-D37HfzIf.js","assets/index-CW4OzecJ.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-Be4oaohM.js","assets/ExperimentalAgentOnboardingModal-BNpveCEk.css","assets/AgentPermissionPolicyEditor-BP6d1LFG.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-CW4OzecJ.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-Be4oaohM.js";import{U as zt}from"./upload-Y9NiLQ9o.js";import{F as Ns}from"./folder-open-BtEAEp7E.js";import"./vendor-reactflow-CRZcPCXF.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.js";/**
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-C5Lb3fd3.js","assets/vendor-react-D37HfzIf.js","assets/index-2kYpdJrx.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-CJUfvGdC.css","assets/ExperimentalAgentOnboardingModal-CTctYTPU.js","assets/ExperimentalAgentOnboardingModal-BNpveCEk.css","assets/AgentPermissionPolicyEditor-DtRcvE6M.js","assets/AgentPermissionPolicyEditor-CGxjOr6G.css","assets/AgentDetailView-DiWELtb1.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-2kYpdJrx.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-CTctYTPU.js";import{U as zt}from"./upload-BvLUlwaH.js";import{F as Ns}from"./folder-open-CREXTATY.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-C5Lb3fd3.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.lastHeartbeatAt","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.nextHeartbeatAt","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};
@@ -0,0 +1,6 @@
1
+ import{r as s,b as Hn,j as t,R as Un}from"./vendor-react-D37HfzIf.js";import{c as On,a9 as Ks,a7 as Gs,bf as Vs,bg as bs,aG as zt,bh as Ws,ac as qs,bi as ds,t as Bn,bj as Kn,bk as gt,bl as Xs,bm as Gn,bn as Dt,w as Vn,bo as Wn,bp as qn,bq as Xn,br as Yn,bs as Jn,bt as Qn,aW as Zn,bu as ea,bv as ta,s as sa,bw as na,j as aa,k as fn,bx as gn,by as ra,bz as oa,bA as ia,bB as pn,bC as ca,bD as la,bE as da,p as ua,bF as ma,bG as ha,bH as fa,bI as ga,ah as bn,ai as vn,bJ as pa,bK as ba,S as va,U as us,P as bt,J as pt,aw as xa,bL as Ys,a as $t,bM as Js,bN as Qs,bO as Zs,B as vt,ae as wa,af as ya,b4 as Ht,bP as en,bQ as Ca,T as Sa,bR as ka,bS as Na,b1 as ja,au as tn,m as Ma,bT as sn}from"./index-2kYpdJrx.js";import{u as xt}from"./vendor-i18n-CV0mwX_-.js";import{SessionTerminal as nn}from"./SessionTerminal-D9IW4cDj.js";import"./vendor-reactflow-CRZcPCXF.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.js";/**
2
+ * @license lucide-react v1.7.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const Ra=[["path",{d:"M5 3h14",key:"7usisc"}],["path",{d:"m18 13-6-6-6 6",key:"1kf1n9"}],["path",{d:"M12 7v14",key:"1akyts"}]],Aa=On("arrow-up-to-line",Ra),ms="kb-chat-active-session";function an(n){const r=typeof n=="string"?n.trim():"",u=r.indexOf("/");return!r||u<=0||u>=r.length-1?{}:{modelProvider:r.slice(0,u),modelId:r.slice(u+1)}}function Ta(n){const r=n?.toolCalls;if(!Array.isArray(r))return;const u=r.map(o=>{if(!o||typeof o!="object")return null;const i=o,p=typeof i.toolName=="string"?i.toolName:"";if(!p)return null;const v=i.args;return{toolName:p,...v&&typeof v=="object"?{args:v}:{},isError:!!i.isError,result:i.result,status:"completed"}}).filter(o=>o!==null);return u.length>0?u:void 0}function Ea(n){const r=n?.fallback;if(!r||typeof r!="object")return;const u=r,o=typeof u.primaryModel=="string"?u.primaryModel:"",i=typeof u.fallbackModel=="string"?u.fallbackModel:"",p=u.triggerPoint;if(!(!o||!i||p!=="session-creation"&&p!=="prompt-time"))return{primaryModel:o,fallbackModel:i,triggerPoint:p}}function Ia(n){const r=n?.failureInfo;if(!r||typeof r!="object")return;const u=r,o=typeof u.summary=="string"?u.summary.trim():"";if(!o)return;const i=(()=>{const p=u.reference;if(!p||typeof p!="object")return;const v=p,g=typeof v.kind=="string"?v.kind.trim():"",k=typeof v.id=="string"?v.id.trim():"";if(!(!g||!k))return{kind:g,id:k,...typeof v.label=="string"&&v.label.trim()?{label:v.label.trim()}:{}}})();return{summary:o,...typeof u.errorClass=="string"&&u.errorClass.trim()?{errorClass:u.errorClass.trim()}:{},...typeof u.code=="string"&&u.code.trim()?{code:u.code.trim()}:{},...typeof u.detail=="string"&&u.detail.trim()?{detail:u.detail.trim()}:{},...i?{reference:i}:{}}}function rn(n,r){const u="Failed to get response";return typeof n=="string"?{summary:n.trim()||u}:{summary:typeof n.summary=="string"&&n.summary.trim()?n.summary.trim():u,...typeof n.errorClass=="string"&&n.errorClass.trim()?{errorClass:n.errorClass.trim()}:{},...typeof n.code=="string"&&n.code.trim()?{code:n.code.trim()}:{},...typeof n.detail=="string"&&n.detail.trim()?{detail:n.detail.trim()}:{},...n.reference?{reference:n.reference}:{}}}function hs(n){return{id:n.id,sessionId:n.sessionId,role:n.role,content:n.content,thinkingOutput:n.thinkingOutput,toolCalls:Ta(n.metadata),fallbackInfo:Ea(n.metadata),failureInfo:Ia(n.metadata),attachments:n.attachments,createdAt:n.createdAt}}function Pa(n,r){const u=s.useCallback(l=>l?`${Ks.CHAT_SESSIONS_PREFIX}${l}`:null,[]),o=s.useCallback((l,f)=>l&&f?`${Ks.CHAT_MESSAGES_PREFIX}${l}:${f}`:null,[]),i=s.useCallback(l=>{const f=u(l);return f?Gs(f,{maxAgeMs:Vs})??[]:[]},[u]),[p,v]=s.useState(()=>i(n)),[g,k]=s.useState(null),[z,H]=s.useState(()=>i(n).length===0),[W,w]=s.useState([]),[U,_]=s.useState(!1),[M,R]=s.useState(!1),[q,N]=s.useState(""),[te,j]=s.useState(""),[ee,S]=s.useState([]),[ne,V]=s.useState(""),[X,ke]=s.useState(""),[ae,m]=s.useState(!1),{agentsMap:b}=bs(n),y=s.useRef(null),d=s.useRef(null),ye=s.useRef(!1),J=s.useRef(""),D=s.useRef(null),Ce=s.useRef(p),$=s.useRef(g),je=s.useRef(W),Y=s.useRef(M);Ce.current=p,$.current=g,je.current=W,Y.current=M,s.useEffect(()=>{J.current=ne},[ne]);const Me=s.useRef(new Set),$e=s.useRef(0),Fe=s.useRef(n);Fe.current!==n&&(zt({view:"useChat",trigger:"project-context-change",projectId:n,replayAttempted:!1,detail:{previousProjectId:Fe.current??null}}),Fe.current=n,$e.current++);const he=s.useCallback(async()=>{Ce.current.length===0&&H(!0);try{const f=[...(await Ws(n)).sessions].sort((A,G)=>new Date(G.updatedAt).getTime()-new Date(A.updatedAt).getTime());v(f);const x=u(n);x&&qs(x,f,{maxBytes:5e5})}catch{const l=i(n);if(Ce.current.length===0&&l.length===0){const f=u(n);f&&ds(f)}}finally{H(!1)}},[u,n]);s.useEffect(()=>{const l=i(n);v(l),H(l.length===0)},[n,i]),s.useEffect(()=>{he()},[he,n]);const be=s.useRef(()=>{}),ve=s.useRef(!1);s.useEffect(()=>{ve.current=!1,d.current=null},[n]),s.useEffect(()=>{if(z||ve.current||$.current)return;const l=Bn(ms,n);if(!l){ve.current=!0;return}const f=p.find(x=>x.id===l);if(f){ve.current=!0,be.current(l,f);return}ve.current=!0},[z,p,n]);const Le=s.useCallback((l,f)=>{const x=o(l,f);return x?Gs(x,{maxAgeMs:Vs})??[]:[]},[o]),wt=s.useCallback(l=>{const f=Le(n,l);return f.length>0?(w(f),_(!1),!0):(w([]),!1)},[n,Le]),re=s.useCallback(async(l,f)=>{const x=typeof f?.offset=="number"&&f.offset>0||typeof f?.before=="string",A=o(n,l),G=x?[]:Le(n,l),T=G.length>0;!x&&T?(w(G),_(!1)):_(!0);try{const O=await Kn(l,{limit:50,order:"desc",...f},n),B=O.messages.slice().reverse().map(hs);x?$.current?.id===l&&(w(P=>[...B,...P]),m(O.messages.length>=50)):$.current?.id===l&&(w(B),m(O.messages.length>=50),A&&qs(A,B,{maxBytes:5e5}))}catch{!x&&je.current.length===0&&T&&(w(G),_(!1))}finally{_(!1)}},[o,n,Le]),Ve=s.useCallback(()=>{D.current?.(),D.current=null,J.current="",V(""),N(""),j(""),S([]),R(!1)},[]),Se=s.useCallback(()=>{gt($.current?.id),J.current="",V("")},[]),se=s.useCallback(()=>{const l=J.current.trim();l&&(gt($.current?.id),J.current="",V(""),We.current(l))},[]),oe=s.useCallback((l,f,x)=>{if(y.current||!l)return!0;ye.current=!1,f&&(N(f.streamingText),j(f.streamingThinking),S(f.toolCalls)),R(!0);const{handlers:A}=Xs({sessionId:l,tempUserMessageId:"",setStreamingText:N,setStreamingThinking:j,setStreamingToolCalls:S,cancelStreamingFlushesRef:D,addToast:x?.silent?void 0:r,onFallbackSession:(T,O)=>{const B=an(T.fallbackModel);v(P=>P.map(K=>K.id===O?{...K,...B}:K)),k(P=>P&&P.id===O?{...P,...B}:P)},onDone:()=>{N(""),j(""),S([]),R(!1),Y.current=!1,y.current=null,d.current=null,re(l),se()},onError:T=>{N(""),j(""),S([]),R(!1),Y.current=!1,y.current=null,d.current=null;const O=rn(T);x?.silent||r?.(O.summary,"error"),re(l),se()}});zt({view:"useChat",trigger:"sse-open",projectId:n,replayAttempted:typeof f?.replayFromEventId=="number",replayFromEventId:f?.replayFromEventId??null,lastEventId:f?.replayFromEventId??null});const G=Gn(l,A,n,{...typeof f?.replayFromEventId=="number"?{lastEventId:f.replayFromEventId}:{}});return y.current=G,d.current={sessionId:l,replayFromEventId:typeof f?.replayFromEventId=="number"?f.replayFromEventId:null},!0},[r,re,n,se]),_e=s.useCallback((l,f)=>{const x=$.current?.id??null;if(l&&x===l&&!f)return;y.current&&(y.current.close(),y.current=null),d.current=null;const A=f??p.find(G=>G.id===l);k(A||null),l&&Dt(l,n).then(({session:G})=>{!G.isGenerating||!G.inFlightGeneration||k(T=>!T||T.id!==l?T:{...T,...G})}).catch(()=>{}),Ve(),m(!1),l?(wt(l),re(l)):w([]),A?.isGenerating&&oe(A.id,A.inFlightGeneration),l?Vn(ms,l,n):Wn(ms,n)},[oe,wt,p,re,n,Ve]);be.current=_e,s.useEffect(()=>{const l=g?.id;if(!l)return;const f=qn(l);if(!f)return;J.current=f,V(f);let x=!1;return Dt(l,n).then(({session:A})=>{if(!(x||$.current?.id!==l||J.current.trim().length===0)){if(A.isGenerating){y.current||oe(l,A.inFlightGeneration);return}!Y.current&&!y.current&&se()}}).catch(()=>{}),()=>{x=!0}},[g?.id,oe,se,n]);const rt=s.useCallback(async l=>{const f=$.current?.id,x=await Xn(l,n);y.current&&(y.current.close(),y.current=null),d.current=null;const A={id:x.session.id,title:x.session.title,agentId:x.session.agentId,status:x.session.status,modelProvider:x.session.modelProvider,modelId:x.session.modelId,createdAt:x.session.createdAt,updatedAt:x.session.updatedAt};return v(G=>G.some(T=>T.id===A.id)?G:[A,...G]),gt(f),Ve(),_e(A.id,A),A},[n,Ve,_e]),Ut=s.useCallback(async l=>{gt(l),await Yn(l,{status:"archived"},n),v(f=>f.filter(x=>x.id!==l)),g?.id===l&&(d.current=null,k(null),w([]))},[g,n]),ze=s.useCallback(async l=>{gt(l),g?.id===l&&y.current&&(y.current.close(),y.current=null),g?.id===l&&(d.current=null),await Jn(l,n);const f=o(n,l);f&&ds(f),v(x=>x.filter(A=>A.id!==l)),g?.id===l&&(k(null),w([]))},[g,o,n]),He=s.useCallback(async()=>{if(!g||!ae)return;const l=je.current[0]?.createdAt;l&&await re(g.id,{before:l})},[g,ae,re]),ot=s.useCallback(()=>{g&&(ye.current=!0,D.current?.(),D.current=null,y.current?.close(),y.current=null,d.current=null,Qn(g.id,n).catch(()=>{}),R(!1),Y.current=!1,N(""),j(""),S([]),se())},[g,n,se]),We=s.useRef(()=>{}),qe=Zn(),Ue=s.useCallback(async l=>{try{await he();const f=await Dt(l,n);$.current?.id===l&&k(x=>!x||x.id!==l?x:{...x,...f.session}),f.session.isGenerating?(N(""),j(""),S([]),R(!0),Y.current=!0,oe(l,f.session.inFlightGeneration,{silent:!0})):(N(""),j(""),S([]),R(!1),Y.current=!1,await re(l))}catch{}},[oe,re,n,he]),Re=s.useCallback((l,f)=>{if(!g)return;if(Y.current){J.current=l,V(l),ea(g.id,l);return}ye.current=!1,y.current&&(y.current.close(),y.current=null),d.current=null;const x=`temp-${Date.now()}`,A={id:x,sessionId:g.id,role:"user",content:l,createdAt:new Date().toISOString()};w(T=>[...T,A]),N(""),j(""),S([]),R(!0);const{handlers:G}=Xs({sessionId:g.id,tempUserMessageId:x,setStreamingText:N,setStreamingThinking:j,setStreamingToolCalls:S,cancelStreamingFlushesRef:D,addToast:r,onFallbackSession:(T,O)=>{const B=an(T.fallbackModel);v(P=>P.map(K=>K.id===O?{...K,...B}:K)),k(P=>P&&P.id===O?{...P,...B}:P)},onDone:({messageId:T,message:O,accumulated:B})=>{const P=O?{...hs(O),...B.text.length>0?{content:B.text}:{}}:{id:T||`msg-${Date.now()}`,sessionId:g.id,role:"assistant",content:B.text,thinkingOutput:B.thinking,toolCalls:B.toolCalls.length>0?B.toolCalls:void 0,fallbackInfo:B.fallbackInfo,createdAt:new Date().toISOString()};Me.current.add(P.id),w(K=>[...K,P]),N(""),j(""),S([]),R(!1),Y.current=!1,y.current=null,d.current=null,setTimeout(()=>{Me.current.delete(P.id)},1e3),he(),se()},onError:(T,O)=>{const B=rn(T),P=typeof T=="string"?T:B.summary,K=na(P);w(Q=>{const F=Q.filter(Z=>Z.id!==O);return K?F:[...F,{id:`error-${Date.now()}`,sessionId:g.id,role:"assistant",content:B.summary,failureInfo:B,createdAt:new Date().toISOString()}]}),N(""),j(""),S([]),R(!1),Y.current=!1,y.current=null,d.current=null,console.error("[useChat] Stream error:",T),K?(console.info("[useChat] Suppressed tab-suspension stream error:",T),g?.id&&(N(""),j(""),S([]),R(!0),Y.current=!0,Ue(g.id))):(r?.(B.summary,"error"),he()),ye.current||se()}});y.current=ta(g.id,l,G,f,n)},[g,n,he,r,oe,Ue,se]);We.current=Re;const Oe=X?p.filter(l=>l.title?.toLowerCase().includes(X.toLowerCase())||l.agentId.toLowerCase().includes(X.toLowerCase())):p;return s.useEffect(()=>{if(!g?.id||g.isGenerating!==!0||y.current)return;const l=typeof g.inFlightGeneration?.replayFromEventId=="number"?g.inFlightGeneration.replayFromEventId:null,f=d.current;f?.sessionId===g.id&&f.replayFromEventId===l||oe(g.id,g.inFlightGeneration,{silent:!0})},[g?.id,g?.isGenerating,g?.inFlightGeneration,oe]),s.useEffect(()=>{if(!$.current?.isGenerating||(y.current||oe($.current.id,$.current.inFlightGeneration),!Y.current||y.current||!$.current))return;const l=setInterval(async()=>{if(!Y.current||y.current||!$.current){clearInterval(l);return}try{(await Ws(n)).sessions.find(A=>A.id===$.current?.id)?.isGenerating||(clearInterval(l),await re($.current.id),N(""),j(""),S([]),R(!1),Y.current=!1,se())}catch{}},3e3);return()=>clearInterval(l)},[oe,re,n,g,se]),s.useEffect(()=>qe.onBecameVisible(()=>{const f=$.current;if(!f||y.current)return;const x=$e.current;Dt(f.id,n).then(A=>{if(!($e.current!==x||y.current)){if(A.session.isGenerating){N(""),j(""),S([]),R(!0),Y.current=!0,oe(f.id,A.session.inFlightGeneration,{silent:!0});return}Y.current&&(N(""),j(""),S([]),R(!1),Y.current=!1,se(),re(f.id))}}).catch(()=>{})}),[oe,re,n,qe,se]),s.useEffect(()=>{const l=$e.current,f=n?`?projectId=${encodeURIComponent(n)}`:"",x=()=>$e.current!==l,A=K=>{if(x())return;const Q=JSON.parse(K.data);v(F=>F.some(Z=>Z.id===Q.id)?F:[Q,...F])},G=K=>{if(x())return;const Q=JSON.parse(K.data);v(F=>[...F.map(le=>le.id===Q.id?Q:le)]),$.current?.id===Q.id&&(k(Q),Q.isGenerating&&!y.current&&oe(Q.id,Q.inFlightGeneration))},T=K=>{if(x())return;const{id:Q}=JSON.parse(K.data);v(Z=>Z.filter(le=>le.id!==Q));const F=o(n,Q);F&&ds(F),$.current?.id===Q&&(k(null),w([]))},O=K=>{if(x())return;const Q=JSON.parse(K.data),F=hs(Q);if(!Me.current.has(F.id)){if($.current?.id===F.sessionId&&Y.current&&!y.current&&F.role==="assistant"){w(Z=>Z.some(le=>le.id===F.id)?Z:[...Z,F]),N(""),j(""),S([]),R(!1),Y.current=!1,se();return}$.current?.id===F.sessionId&&!Y.current&&w(Z=>{if(Z.some(le=>le.id===F.id))return Z;if(F.role==="user"){const le=Z.findIndex(fe=>fe.role==="user"&&fe.id.startsWith("temp-")&&fe.content.trim()===F.content.trim());if(le>=0){const fe=[...Z];return fe[le]=F,fe}}return[...Z,F]})}},B=K=>{if(x())return;const{id:Q}=JSON.parse(K.data);w(F=>F.filter(Z=>Z.id!==Q))};return sa(`/api/events${f}`,{events:{"chat:session:created":A,"chat:session:updated":G,"chat:session:deleted":T,"chat:message:added":O,"chat:message:deleted":B}})},[oe,o,n,se]),s.useEffect(()=>()=>{y.current&&(y.current.close(),y.current=null),d.current=null},[]),{sessions:p,activeSession:g,sessionsLoading:z,messages:W,messagesLoading:U,isStreaming:M,streamingText:q,streamingThinking:te,streamingToolCalls:ee,pendingMessage:ne,selectSession:_e,createSession:rt,archiveSession:Ut,deleteSession:ze,sendMessage:Re,stopStreaming:ot,clearPendingMessage:Se,loadMoreMessages:He,hasMoreMessages:ae,searchQuery:X,setSearchQuery:ke,filteredSessions:Oe,refreshSessions:he,agentsMap:b}}function Da(n,r=[],u){const o=n.trim().replace(/^#/,""),i=(v,g)=>u?u(v,g):g;if(!o)return{ok:!1,error:i("createRoom.nameRequired","Room name is required.")};if(/[A-Z]/.test(o))return{ok:!1,error:i("createRoom.lowercase","Use lowercase letters only.")};const p=o.toLowerCase();return p.length>80?{ok:!1,error:i("createRoom.maxLength","Room names can be at most 80 characters.")}:/^[a-z0-9_-]+$/.test(p)?/^[-_]|[-_]$/.test(p)?{ok:!1,error:i("createRoom.noEdgeChars","Room names cannot start or end with a hyphen or underscore.")}:r.some(v=>v.toLowerCase()===p)?{ok:!1,error:i("createRoom.duplicate","A room with this name already exists.")}:{ok:!0,name:p}:{ok:!1,error:i("createRoom.validChars","Use lowercase letters, numbers, hyphens, or underscores only.")}}function $a({isOpen:n,onClose:r,onCreate:u,projectId:o,existingRoomNames:i=[]}){const{t:p}=xt("app"),[v,g]=s.useState(""),[k,z]=s.useState([]),[H,W]=s.useState(""),[w,U]=s.useState([]),[_,M]=s.useState(!1),[R,q]=s.useState(null),[N,te]=s.useState(!1),j=s.useRef(null),ee=s.useRef(null);s.useEffect(()=>{n&&(ee.current=document.activeElement instanceof HTMLElement?document.activeElement:null,M(!0),q(null),aa(void 0,o).then(m=>z(m)).catch(()=>{z([]),q(p("createRoom.failedLoadAgents","Failed to load agents."))}).finally(()=>M(!1)))},[n,o]),s.useEffect(()=>{if(!n){g(""),W(""),U([]),q(null),te(!1);return}const m=window.requestAnimationFrame(()=>j.current?.focus());return()=>window.cancelAnimationFrame(m)},[n]),s.useEffect(()=>{if(!n)return;const m=b=>{b.key==="Escape"&&r()};return document.addEventListener("keydown",m),()=>document.removeEventListener("keydown",m)},[n,r]),s.useEffect(()=>{n||ee.current?.focus()},[n]);const S=s.useMemo(()=>Da(v,i,p),[v,i,p]),ne=s.useMemo(()=>{const m=H.trim().toLowerCase();return m?k.filter(b=>b.name.toLowerCase().includes(m)):k},[k,H]),V=s.useMemo(()=>k.filter(m=>w.includes(m.id)),[k,w]),X=S.ok&&w.length>0&&!N&&!_;if(!n)return null;const ke=m=>{N||U(b=>b.includes(m)?b.filter(y=>y!==m):[...b,m])},ae=async()=>{if(!S.ok){q(S.error);return}if(w.length===0){q(p("createRoom.selectMember","Select at least one member."));return}q(null),te(!0);try{await u({name:S.name,displayName:`#${S.name}`,memberAgentIds:w}),r()}catch(m){q(m instanceof Error?m.message:p("createRoom.failedCreate","Failed to create room."))}finally{te(!1)}};return Hn.createPortal(t.jsx("div",{className:"modal-overlay open",onClick:m=>m.target===m.currentTarget&&r(),children:t.jsxs("div",{className:"modal modal-lg create-room-modal",role:"dialog","aria-modal":"true","aria-label":p("createRoom.title","Create room"),onClick:m=>m.stopPropagation(),children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:p("createRoom.title","Create room")}),t.jsx("button",{type:"button",className:"modal-close","aria-label":p("actions.close","Close"),onClick:r,children:"×"})]}),t.jsxs("div",{className:"form-group create-room-modal-name-group",children:[t.jsx("label",{htmlFor:"create-room-name",children:p("createRoom.nameLabel","Room name")}),t.jsxs("div",{className:"create-room-modal-name-field",children:[t.jsx("span",{"aria-hidden":"true",className:"create-room-modal-name-hash",children:"#"}),t.jsx("input",{ref:j,id:"create-room-name",className:"input",value:v,disabled:N,onChange:m=>{const b=m.target.value.replace(/^#/,"").replace(/\s+/g,"-").toLowerCase();g(b)}})]}),!S.ok&&t.jsx("div",{className:"form-error",children:S.error})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"create-room-member-search",children:p("createRoom.members","Members")}),t.jsx("input",{id:"create-room-member-search",className:"input",placeholder:p("createRoom.searchAgents","Search agents"),value:H,disabled:N,onChange:m=>W(m.target.value)})]}),V.length>0&&t.jsx("div",{className:"create-room-modal-selected","data-testid":"create-room-selected-chips",children:V.map(m=>t.jsxs("button",{type:"button",className:"btn btn-sm create-room-modal-chip",onClick:()=>ke(m.id),disabled:N,children:[m.name," ×"]},m.id))}),t.jsx("div",{className:"create-room-modal-member-list","data-testid":"create-room-member-list",children:_?t.jsx("div",{className:"create-room-modal-empty",children:p("createRoom.loadingAgents","Loading agents...")}):ne.length===0?t.jsx("div",{className:"create-room-modal-empty",children:k.length===0?p("createRoom.noAgents","No agents in this project yet."):p("createRoom.noMatch","No agents match your search.")}):ne.map(m=>{const b=w.includes(m.id);return t.jsxs("button",{type:"button",className:`create-room-modal-member-row${b?" create-room-modal-member-row--selected":""}`,onClick:()=>ke(m.id),disabled:N,children:[t.jsx(fn,{agent:m,size:20}),t.jsx("span",{children:m.name}),t.jsx("span",{className:"create-room-modal-member-role",children:m.role})]},m.id)})}),R&&t.jsx("div",{className:"form-group",children:t.jsx("div",{className:"form-error",children:R})}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:r,disabled:N,children:p("actions.cancel","Cancel")}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void ae(),disabled:!X,children:N?p("createRoom.creating","Creating..."):p("createRoom.create","Create room")})]})]})}),document.body)}function Fa({cliSessionId:n,tier:r,projectId:u,renderTranscript:o,renderComposer:i,queuedCount:p=0,terminalProps:v}){const{t:g}=xt("app"),k=r==="generic",[z,H]=s.useState(k?"terminal":"transcript");if(k)return t.jsx("div",{className:"cli-chat-surface cli-chat-surface--generic","data-tier":"generic",children:t.jsx(nn,{sessionId:n,projectId:u,...v})});const W=z==="terminal";return t.jsxs("div",{className:"cli-chat-surface","data-tier":r,"data-view":z,children:[t.jsxs("div",{className:"cli-chat-surface__toolbar",role:"tablist","aria-label":g("cliChat.viewToggleLabel","Chat view"),children:[t.jsxs("button",{type:"button",role:"tab","aria-selected":!W,className:`cli-chat-surface__tab${W?"":" is-active"}`,onClick:()=>H("transcript"),children:[t.jsx(gn,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:g("cliChat.transcriptTab","Transcript")})]}),t.jsxs("button",{type:"button",role:"tab","aria-selected":W,className:`cli-chat-surface__tab${W?" is-active":""}`,onClick:()=>H("terminal"),children:[t.jsx(ra,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:g("cliChat.terminalTab","Terminal")})]})]}),t.jsx("div",{className:"cli-chat-surface__body",children:W?t.jsx(nn,{sessionId:n,projectId:u,...v}):o()}),!W&&t.jsxs("div",{className:"cli-chat-surface__composer",children:[p>0&&t.jsx("div",{className:"cli-chat-surface__queued",role:"status","aria-live":"polite",children:g("cliChat.queued","{{count}} message queued — will send when the agent is ready",{count:p})}),i()]})]})}const vs=640,La=200,on="__SKIP__";let fs=!1;function _a(n,r=vs){return n>r?"auto":"hidden"}function za(n,r=vs){return Math.max(40,Math.min(n,r))}function xn(n,r){const u=new Date(n),i=new Date().getTime()-u.getTime(),p=Math.floor(i/1e3),v=Math.floor(p/60),g=Math.floor(v/60),k=Math.floor(g/24);return p<60?r("chat.relativeTimeJustNow","just now"):v<60?r("chat.relativeTimeMinutes","{{count}}m ago",{count:v}):g<24?r("chat.relativeTimeHours","{{count}}h ago",{count:g}):k<7?r("chat.relativeTimeDays","{{count}}d ago",{count:k}):u.toLocaleDateString()}function cn(n,r){if(!n||!r)return null;const u=r.toLowerCase();if(u.includes("claude")){let i=r.replace(/^claude[- ]/i,"Claude ").replace(/sonnet[- ](\d+)[- ](\d+)/i,"Sonnet $1.$2").replace(/sonnet[- ](\d+)/i,"Sonnet $1").replace(/haiku[- ](\d+)/i,"Haiku $1").replace(/opus[- ](\d+)/i,"Opus $1").replace(/sonnet/i,"Sonnet").replace(/haiku/i,"Haiku").replace(/opus/i,"Opus").replace(/-/g," ").trim();return i=i.replace(/\s+/g," "),i.length>30?i.slice(0,30)+"…":i}if(u.includes("gpt")||u.includes("openai")){const i=r.replace(/^gpt-4-turbo$/i,"GPT-4 Turbo").replace(/^gpt-4o-mini$/i,"GPT-4o Mini").replace(/^gpt-4o$/i,"GPT-4o").replace(/^gpt-4$/i,"GPT-4").replace(/^gpt-o1-preview$/i,"GPT-o1 Preview").replace(/^gpt-o1-mini$/i,"GPT-o1 Mini").replace(/^gpt-o1$/i,"GPT-o1").replace(/^gpt/i,"GPT").trim();return i.length>30?i.slice(0,30)+"…":i}if(u.includes("gemini")){const i=r.replace(/^gemini[- ]/i,"Gemini ").replace(/pro[- ](\d+)[- ](\d+)/i,"Pro $1.$2").replace(/pro[- ](\d+)/i,"Pro $1").replace(/-/g," ").replace(/\s+/g," ").trim();return i.length>30?i.slice(0,30)+"…":i}const o=r.replace(/-/g," ").replace(/^\w/,i=>i.toUpperCase()).replace(/\s+/g," ").trim();return o.length>30?o.slice(0,30)+"…":o}function _t(n,r){return n.length<=r?n:`${n.slice(0,r)}…`}function Ha(n){if(!n)return null;const r=Object.entries(n);return r.length===0?null:r.map(([u,o])=>{const i=typeof o=="string"?o:(()=>{try{return JSON.stringify(o)}catch{return String(o)}})();return`${u}=${_t(i,50)}`}).join(", ")}function Ua(n){if(n===void 0)return null;if(typeof n=="string")return _t(n,200);try{return _t(JSON.stringify(n),200)}catch{return _t(String(n),200)}}function Oa(n){if(!n)return null;if(n.kind==="mailbox"||n.kind==="mailbox-message"){const r=typeof window>"u"?"/":window.location.pathname||"/",u=new URLSearchParams(typeof window>"u"?"":window.location.search);return u.set("view","mailbox"),u.set("mailbox-message",n.id),`${r}?${u.toString()}#message-${encodeURIComponent(n.id)}`}return null}function Ba(n,r){if(!n)return null;const u=n.label??`${n.kind} ${n.id}`,o=Oa(n),i=`chat-failure-reference-${n.kind}-${n.id}`.replace(/[^a-zA-Z0-9_-]+/g,"-").toLowerCase();return t.jsxs("div",{className:"chat-message-failure-reference",children:[t.jsx("span",{className:"chat-message-failure-reference-label",children:r("chat.failureReferenceLabel","Reference")}),t.jsx("span",{className:"chat-message-failure-reference-value",children:u}),o?t.jsx("a",{className:"btn btn-sm chat-message-failure-reference-link",href:o,children:r("chat.openMailboxMessage","Open mailbox message")}):t.jsxs("details",{className:"chat-message-failure-reference-details",children:[t.jsx("summary",{className:"btn btn-sm chat-message-failure-reference-link",children:r("chat.viewFailureDetails","View failure details")}),t.jsxs("dl",{className:"chat-message-failure-reference-meta",id:i,children:[t.jsxs("div",{children:[t.jsx("dt",{children:r("chat.failureReferenceKind","Kind")}),t.jsx("dd",{children:n.kind})]}),t.jsxs("div",{children:[t.jsx("dt",{children:r("chat.failureReferenceId","ID")}),t.jsx("dd",{children:n.id})]}),n.label&&t.jsxs("div",{children:[t.jsx("dt",{children:r("chat.failureReferenceMetaLabel","Label")}),t.jsx("dd",{children:n.label})]})]})]})]})}function wn(n,r){if(!n||n.length===0)return null;const u=(w,U)=>{const _=w.status==="running",M=w.status==="completed"&&w.isError,R=Ha(w.args),q=Ua(w.result),N=_?R:q?`${r("chat.toolCallResultPrefix","result")}: ${q}`:R?`${r("chat.toolCallArgsPrefix","args")}: ${R}`:null,te=_?r("chat.toolCallStatusRunning","running"):M?r("chat.toolCallStatusError","error"):r("chat.toolCallStatusCompleted","completed");return t.jsxs("details",{className:`chat-tool-call${_?" chat-tool-call--running":""}${M?" chat-tool-call--error":""}`,open:_,children:[t.jsxs("summary",{children:[t.jsx("span",{className:"chat-tool-call-status-dot","aria-hidden":"true"}),t.jsx("span",{className:"chat-tool-call-name",title:w.toolName,children:w.toolName}),N&&t.jsx("span",{className:"chat-tool-call-preview",title:N,children:N}),t.jsx("span",{className:"chat-tool-call-status-text",children:te})]}),t.jsxs("div",{className:"chat-tool-call-content",children:[R&&t.jsxs("div",{className:"chat-tool-call-row",children:[t.jsx("span",{className:"chat-tool-call-label",children:r("chat.toolCallArgsPrefix","args")}),t.jsx("span",{className:"chat-tool-call-value",children:R})]}),q&&t.jsxs("div",{className:`chat-tool-call-row${M?" chat-tool-call-row--error":""}`,children:[t.jsx("span",{className:"chat-tool-call-label",children:r("chat.toolCallResultPrefix","result")}),t.jsx("span",{className:"chat-tool-call-value",children:q})]})]})]},`${w.toolName}-${U}`)},o="chat-tool-calls";if(n.length===1)return t.jsxs("div",{className:o,"data-testid":"chat-tool-calls",children:[t.jsxs("div",{className:"chat-tool-calls-header",children:[t.jsx(sn,{size:12,"aria-hidden":"true"}),t.jsx("span",{children:r("chat.toolCallsHeader","Tool calls")})]}),u(n[0],0)]});const i=n.filter(w=>w.status==="running").length,p=n.filter(w=>w.status==="completed"&&w.isError).length,v=i>0,g=Array.from(new Set(n.map(w=>w.toolName))),k=g.slice(0,5),z=Math.max(0,g.length-k.length),H=z>0?`${k.join(", ")}, +${z} more`:k.join(", "),W=v?`(${i} ${r("chat.toolCallStatusRunning","running")})`:p>0?`(${p} ${p===1?r("chat.toolCallStatusError","error"):r("chat.toolCallStatusErrors","errors")})`:null;return t.jsx("div",{className:o,"data-testid":"chat-tool-calls",children:t.jsxs("details",{className:"chat-tool-calls-group","data-testid":"chat-tool-calls-group",open:v,children:[t.jsxs("summary",{className:"chat-tool-calls-group-summary",children:[t.jsx(sn,{size:12,"aria-hidden":"true"}),t.jsx("span",{className:"chat-tool-calls-count",children:r("chat.toolCallsCount","{{count}} tool calls",{count:n.length})}),t.jsx("span",{className:"chat-tool-calls-names",title:H,children:H}),W&&t.jsx("span",{className:"chat-tool-calls-group-status",children:W})]}),n.map((w,U)=>u(w,U))]})})}const yn={p:({children:n,...r})=>t.jsx("p",{...r,children:en(n)}),li:({children:n,...r})=>t.jsx("li",{...r,children:en(n)}),pre:({children:n,...r})=>t.jsx("pre",{...r,className:"chat-markdown-pre",children:n}),code:({children:n,...r})=>{const u=typeof n=="string"?n:Un.Children.toArray(n).join(""),o=Ht(u);return o.length===1&&typeof o[0]=="string"?t.jsx("code",{...r,children:n}):t.jsx("code",{...r,children:o})},table:({children:n,...r})=>t.jsx("table",{...r,className:"chat-markdown-table",children:n})},at="__fn_agent__",Ka=280,Ft=180,Lt=500,ln="fusion:chat-sidebar-width",gs="fusion:chat-scope",Ga="fusion:chat-draft:";function dn(n,r){return r?`${Ga}${n}:${r}`:null}function un(n){if(!n)return"";try{return localStorage.getItem(n)??""}catch{return""}}const Va=["image/png","image/jpeg","image/gif","image/webp","text/plain","application/json","text/yaml","text/markdown","text/csv","application/xml","text/x-log"];function mn(n){const r=/(^|[\s])\/([^\s]*)$/.exec(n);if(!r)return null;const u=r[1]??"",o=r[2]??"",i=r.index+u.length;return{filter:o,start:i,end:n.length}}function Wa(n,r){const u=n.slice(0,r),o=/(^|[\s\n])@([\w-]*)$/.exec(u);if(!o)return null;const i=o[2]??"",p=u.length-i.length-1;return{filter:i,start:p,end:r}}function qa(n){const r=n?.runtimeConfig;if(!r||typeof r!="object")return null;const u=Reflect.get(r,"modelProvider"),o=Reflect.get(r,"modelId");return typeof u!="string"||u.trim().length===0||typeof o!="string"||o.trim().length===0?null:{provider:u,modelId:o}}function hn(n,r,u){if(n?.modelProvider&&n?.modelId)return{provider:n.modelProvider,modelId:n.modelId};const o=qa(r??void 0);return o||(u.provider&&u.modelId?{provider:u.provider,modelId:u.modelId}:null)}function Xa({projectId:n,defaultModel:r,onClose:u,onCreate:o}){const{t:i}=xt("app"),[p,v]=s.useState("agent"),{agents:g,loading:k}=bs(n),[z,H]=s.useState(""),{models:W,favoriteProviders:w,favoriteModels:U,loading:_,refresh:M}=pn(),R=r.provider&&r.modelId?`${r.provider}/${r.modelId}`:"",[q,N]=s.useState(R),[te,j]=s.useState(w),[ee,S]=s.useState(U);s.useEffect(()=>{j(w)},[w]),s.useEffect(()=>{S(U)},[U]),s.useEffect(()=>{R&&N(m=>m||R)},[R]);const ne=s.useCallback(async m=>{const b=te,d=b.includes(m)?b.filter(ye=>ye!==m):[m,...b];j(d);try{await tn({favoriteProviders:d,favoriteModels:ee}),await M()}catch{j(b)}},[te,ee,M]),V=s.useCallback(async m=>{const b=ee,d=b.includes(m)?b.filter(ye=>ye!==m):[m,...b];S(d);try{await tn({favoriteProviders:te,favoriteModels:d}),await M()}catch{S(b)}},[ee,te,M]),X=q||R,ke=m=>{if(m.preventDefault(),p==="agent"){if(!z)return;o({agentId:z});return}if(!X)return;const b=X.indexOf("/");if(b<=0)return;const y=X.slice(0,b),d=X.slice(b+1);o({agentId:at,modelProvider:y,modelId:d})},ae=p==="agent"?!z:!X;return t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:u,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:m=>m.stopPropagation(),children:[t.jsx("h3",{children:i("chat.newChatTitle","New Chat")}),t.jsxs("div",{className:"chat-new-dialog-mode-toggle","data-testid":"chat-new-dialog-mode-toggle",children:[t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${p==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{v("agent")},children:i("chat.newChatModeAgent","Agent")}),t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${p==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{v("model"),H(""),N(m=>m||R)},children:i("chat.newChatModeModel","Model")})]}),t.jsxs("form",{onSubmit:ke,children:[p==="agent"&&t.jsxs("label",{className:"chat-new-dialog-model-label",children:[i("chat.newChatModeAgent","Agent"),k?t.jsx("div",{className:"chat-new-dialog-loading",children:i("chat.loadingAgents","Loading agents...")}):g.length===0?t.jsx("div",{className:"chat-new-dialog-empty",children:i("chat.noAgentsAvailable","No agents available")}):t.jsx("div",{className:"chat-new-dialog-agent-list",children:g.map(m=>t.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${z===m.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>H(m.id),"data-testid":`agent-option-${m.id}`,children:[t.jsx(vt,{size:16}),t.jsx("span",{className:"chat-new-dialog-agent-name",children:m.name}),t.jsx("span",{className:"chat-new-dialog-agent-role",children:m.role})]},m.id))})]}),p==="model"&&t.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:_?t.jsx("div",{className:"chat-new-dialog-loading",children:i("chat.loadingModels","Loading models...")}):t.jsx(Ma,{models:W,value:q,onChange:N,label:i("chat.newChatModeModel","Model"),placeholder:i("chat.selectModel","Select a model"),favoriteProviders:te,onToggleFavorite:ne,favoriteModels:ee,onToggleModelFavorite:V})}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:u,children:i("chat.cancel","Cancel")}),t.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:ae,children:i("chat.create","Create")})]})]})]})})}const ps=s.memo(function({message:r,forcePlain:u,agentName:o,hideAssistantIdentity:i,showAssistantModelTag:p,activeModelTag:v,activeModelProvider:g,activeSessionId:k,mentionAgentsByName:z,roomContext:H,copyAction:W,onScrollToTop:w}){const{t:U}=xt("app"),_=r.role==="assistant",M=_?r.failureInfo:void 0,R=_&&(!i||!!M),q=s.useMemo(()=>{if(_)return null;const j=r.content,ee=/@([\w-]+)/g,S=[];let ne=0,V=ee.exec(j);for(;V;){const[X,ke=""]=V,ae=V.index;ae>ne&&S.push(j.slice(ne,ae));const m=ke.replace(/_/g," ").toLowerCase(),b=z.get(m);if(b){const y=!!(H&&!H.memberIds.has(b.id)),d=y?U("chat.mentionNonMember","Not a member of {{roomName}}",{roomName:H?.roomName}):void 0;S.push(t.jsxs("span",{className:`chat-mention-chip${y?" chat-mention-chip--non-member":""}`,title:d,"aria-label":d,children:["@",b.name.replace(/\s+/g,"_")]},`${b.id}-${ae}`))}else S.push(X);ne=ae+X.length,V=ee.exec(j)}return ne<j.length&&S.push(j.slice(ne)),S.length===0?j:S},[_,r.content,z,H]),N=s.useMemo(()=>{const j=r.attachments;if(!j||j.length===0)return null;const ee=r.roomId?`/api/chat/rooms/${encodeURIComponent(r.roomId)}/attachments/`:k?`/api/chat/sessions/${encodeURIComponent(k)}/attachments/`:null;return ee?t.jsx("div",{className:"chat-message-attachments",children:j.map(S=>{const ne=S.mimeType.startsWith("image/"),V=S.id||S.filename,X=`${ee}${encodeURIComponent(S.filename)}`;return ne?t.jsx("a",{className:"chat-message-attachment-link","data-testid":"chat-message-attachment",href:X,target:"_blank",rel:"noopener noreferrer",children:t.jsx("img",{className:"chat-message-attachment",src:X,alt:S.originalName})},V):t.jsxs("a",{className:"chat-message-attachment-file","data-testid":"chat-message-attachment",href:X,target:"_blank",rel:"noopener noreferrer",children:[t.jsx(Ca,{size:14}),t.jsx("span",{children:S.originalName})]},V)})}):null},[r.attachments,r.roomId,k]),te=s.useMemo(()=>_?M?t.jsxs("div",{className:"chat-message-content chat-message-content--failure",children:[t.jsxs("div",{className:"chat-message-failure-summary-row",children:[t.jsx("span",{className:"status-dot status-dot--error","aria-hidden":"true"}),t.jsx("span",{className:"chat-message-failure-label",children:U("chat.responseFailed","Response failed")})]}),t.jsx("div",{className:"chat-message-failure-summary",children:M.summary}),(M.errorClass||M.code)&&t.jsxs("div",{className:"chat-message-failure-badges",children:[M.errorClass&&t.jsx("span",{className:"chat-message-failure-badge",children:M.errorClass}),M.code&&t.jsx("span",{className:"chat-message-failure-badge",children:M.code})]}),(M.detail||M.reference)&&t.jsxs("details",{className:"chat-message-failure-details",children:[t.jsxs("summary",{children:[t.jsx(Sa,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:U("chat.failureDetails","Failure details")})]}),M.detail&&t.jsx("pre",{className:"chat-message-failure-detail",children:Ht(M.detail)}),Ba(M.reference,U)]})]}):u?t.jsx("div",{className:"chat-message-content chat-message-content--plain",children:r.content}):t.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:t.jsx(bn,{remarkPlugins:[vn],components:yn,children:r.content})}):null,[M,u,_,r.content]);return t.jsxs("div",{className:`chat-message chat-message--${r.role}${M?" chat-message--failure":""}`,"data-testid":`chat-message-${r.id}`,"data-message-id":r.id,children:[R&&t.jsxs("div",{className:"chat-message-avatar",children:[g?t.jsx(bt,{provider:g,size:"sm"}):t.jsx(vt,{size:14}),t.jsx("span",{children:o}),p&&v&&t.jsx("span",{className:"chat-model-tag",children:v})]}),_?te:t.jsx("div",{className:"chat-message-content",children:q}),_&&!M&&(W||w)&&t.jsxs("div",{className:"chat-message-actions",children:[W,w&&t.jsx("button",{type:"button",className:"btn-icon chat-message-scroll-to-top-action","aria-label":U("chat.scrollMessageToTop","Scroll message to top"),"data-testid":`chat-message-scroll-to-top-${r.id}`,onClick:()=>w(r.id),children:t.jsx(Aa,{size:14})})]}),wn(r.toolCalls,U),r.thinkingOutput&&t.jsxs("details",{className:"chat-message-thinking",children:[t.jsx("summary",{children:U("chat.thinking","Thinking")}),t.jsx("pre",{className:"chat-message-thinking-content",children:Ht(r.thinkingOutput)})]}),N,t.jsx("div",{className:"chat-message-time",children:xn(r.createdAt,U)})]})});function nr({projectId:n,addToast:r,experimentalFeatures:u}){const{t:o}=xt("app");s.useEffect(()=>(zt({view:"ChatView",trigger:fs?"route-active":"remount",projectId:n,replayAttempted:!1}),fs=!1,()=>{fs=!0,zt({view:"ChatView",trigger:"route-inactive",projectId:n,replayAttempted:!1})}),[n]);const{activeSession:i,sessionsLoading:p,messages:v,messagesLoading:g,isStreaming:k,streamingText:z,streamingThinking:H,streamingToolCalls:W,selectSession:w,createSession:U,archiveSession:_,deleteSession:M,sendMessage:R,stopStreaming:q,pendingMessage:N,clearPendingMessage:te,loadMoreMessages:j,hasMoreMessages:ee,searchQuery:S,setSearchQuery:ne,filteredSessions:V,agentsMap:X}=Pa(n,r),[ke,ae]=s.useState(!1),m=u?.chatRooms===!0,[b,y]=s.useState(()=>{try{if(localStorage.getItem(gs)==="rooms"&&m)return"rooms"}catch{}return"direct"}),d=oa(n,r),{isUnread:ye,markRead:J}=ia(n),[D,Ce]=s.useState(()=>{const e=dn(b,b==="rooms"?d.activeRoom?.id:i?.id);return un(e)}),[$,je]=s.useState(null),[Y,Me]=s.useState(null),[$e,Fe]=s.useState(null),[he,be]=s.useState(!0),[ve,Le]=s.useState(Ka),[wt,re]=s.useState(!1),{agentsMap:Ve}=bs(n),Se=s.useMemo(()=>X.size>0?X:Ve,[Ve,X]),{defaultProvider:se,defaultModelId:oe}=pn(),_e=s.useMemo(()=>({provider:se,modelId:oe}),[oe,se]),{skills:rt,loading:Ut}=ca(n),[ze,He]=s.useState(!1),[ot,We]=s.useState(""),[qe,Ue]=s.useState(0),[Re,Oe]=s.useState(""),[l,f]=s.useState(!1),[x,A]=s.useState(0),[G,T]=s.useState(-1),[O,B]=s.useState(!1),[P,K]=s.useState([]),[Q,F]=s.useState(!1),[Z,le]=s.useState(!1),[fe,xs]=s.useState({}),[yt,Ye]=s.useState(!1),[Ct,it]=s.useState(!1),{pushNav:ws}=la(),[,St]=s.useState(!1),[Cn,Sn]=s.useState({top:0,left:0}),L=da({projectId:n}),Ot=s.useCallback(e=>{if(!e||!L.mentionActive)return;const a=e.getBoundingClientRect();Sn({top:a.top-260,left:a.left+8})},[L.mentionActive]),ys=s.useRef(null),Cs=s.useRef(null),Ss=s.useRef(null),ks=s.useRef(null),me=s.useRef(!1),kt=s.useRef(null),Ns=s.useRef(null),Be=s.useRef(null),Nt=s.useRef(0),Bt=s.useRef(null),ct=s.useRef(null),Ae=s.useRef(null),ge=s.useRef(null),Kt=s.useRef(null),jt=s.useRef(!1),Te=s.useRef(null),Ee=s.useRef(null),ue=s.useRef(null),js=s.useRef(null),Ms=s.useRef([]),Je=s.useRef(0),lt=s.useRef(new Map),Gt=s.useRef(!1),Qe=s.useRef(null),Mt=ua(),E=Mt==="mobile",dt=Mt==="tablet";s.useEffect(()=>{i?.id&&J("direct",i.id,i.lastMessageAt??i.updatedAt)},[i?.id,i?.lastMessageAt,i?.updatedAt,J]),s.useEffect(()=>{d.activeRoom?.id&&J("room",d.activeRoom.id,d.activeRoom.updatedAt)},[d.activeRoom?.id,d.activeRoom?.updatedAt,J]),s.useEffect(()=>{if(!i?.id||v.length===0)return;const e=v[v.length-1];J("direct",i.id,e?.createdAt??i.lastMessageAt??i.updatedAt)},[i?.id,i?.lastMessageAt,i?.updatedAt,J,v]),s.useEffect(()=>{if(!d.activeRoom?.id||d.messages.length===0)return;const e=d.messages[d.messages.length-1];J("room",d.activeRoom.id,e?.createdAt??d.activeRoom.updatedAt)},[J,d.activeRoom?.id,d.activeRoom?.updatedAt,d.messages]),s.useEffect(()=>{try{const e=localStorage.getItem(ln);if(!e)return;const a=Number.parseInt(e,10);if(Number.isNaN(a))return;const c=Math.max(Ft,Math.min(Lt,a));Le(c)}catch{}},[]),s.useEffect(()=>{try{const e=localStorage.getItem(gs);if(e==="direct"){y("direct");return}e==="rooms"&&m&&y("rooms")}catch{}},[m]),s.useEffect(()=>{if(!m&&b==="rooms"){y("direct");return}try{localStorage.setItem(gs,b)}catch{}},[m,b]);const pe=dn(b,b==="rooms"?d.activeRoom?.id:i?.id),Vt=s.useRef(pe);s.useEffect(()=>{pe!==Vt.current&&(Vt.current=pe,Ce(un(pe)))},[pe]),s.useEffect(()=>{if(!(!pe||Vt.current!==pe))try{if(D){localStorage.setItem(pe,D);return}localStorage.removeItem(pe)}catch{}},[pe,D]);const ie=m&&b==="rooms"&&!!d.activeRoom,{keyboardOverlap:Rs,keyboardOpen:Ze}=ma({enabled:(E||dt)&&(!!i||ie),allowNonMobileViewport:dt}),ut=dt&&Ze;s.useEffect(()=>{if(!dt){Qe.current=null;return}if(Ze){be(e=>(Qe.current===null&&(Qe.current=e),e&&!1));return}if(Qe.current!==null){const e=Qe.current;Qe.current=null,be(e)}},[dt,Ze]);const xe=s.useMemo(()=>{const e=ot.trim().toLowerCase();return(e?rt.filter(c=>c.name.toLowerCase().includes(e)):rt).slice(0,10)},[rt,ot]),et=s.useMemo(()=>Array.from(Se.values()),[Se]),Ie=s.useMemo(()=>!m||b!=="rooms"||!d.activeRoom?null:{roomId:d.activeRoom.id,roomName:d.activeRoom.name,memberIds:new Set(d.activeRoomMembers.map(e=>e.agentId))},[m,b,d.activeRoom,d.activeRoomMembers]),Xe=s.useMemo(()=>{const e=et.filter(h=>ha(h.name,Re));if(!Ie)return e;const a=e.filter(h=>Ie.memberIds.has(h.id));if(Re.trim().length===0)return a;const c=e.filter(h=>!Ie.memberIds.has(h.id));return[...a,...c]},[et,Re,Ie]),Wt=s.useMemo(()=>{const e=new Map;for(const a of et)e.set(a.name.toLowerCase(),a);return e},[et]),kn=s.useMemo(()=>xe.map(e=>e.id).join("\0"),[xe]);s.useEffect(()=>{Ue(0)},[kn]),s.useEffect(()=>{A(0)},[Re,l]),s.useEffect(()=>()=>{Ae.current!==null&&window.clearTimeout(Ae.current)},[]),s.useEffect(()=>{const e=Cs.current;if(!e||!ee||g)return;const a=new IntersectionObserver(c=>{c[0].isIntersecting&&j()},{threshold:.1});return a.observe(e),()=>a.disconnect()},[ee,g,j]);const tt=s.useCallback(()=>ie?d.activeRoom?.id??null:i?.id??null,[ie,d.activeRoom?.id,i?.id]),As=s.useCallback((e,a)=>typeof CSS<"u"&&typeof CSS.escape=="function"?e.querySelector(`.chat-message[data-message-id="${CSS.escape(a)}"]`):e.querySelector(`.chat-message[data-message-id="${a.replace(/"/g,'\\"')}"]`),[]),Rt=s.useCallback(()=>{const e=ge.current,a=tt();if(!e||!a)return;const c=e.scrollTop,h=e.querySelectorAll(".chat-message[data-message-id]"),C=Array.from(h).find(ce=>ce.offsetTop+ce.offsetHeight>=c)??h[0]??null,I=C?.getAttribute("data-message-id")??null,de=C?C.offsetTop-c:0;ct.current={threadId:a,scrollTop:c,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight,anchorMessageId:I,anchorOffset:de,wasPinnedBefore:!me.current,capturedAtMs:typeof performance<"u"?performance.now():Date.now()}},[tt]),Ts=s.useCallback(()=>{const e=ge.current;if(!e)return;const c=e.scrollTop+e.clientHeight>=e.scrollHeight-50;le(!c),me.current=!c,Rt()},[Rt]),Pe=s.useCallback((e,a)=>{if(!e.isConnected||!a?.force&&me.current)return;let c=0,h=0,C=-1;const I=6,de=()=>{if(e.isConnected&&!(!a?.force&&me.current)){if(e.scrollTop=e.scrollHeight,e.scrollHeight===C?h+=1:(h=0,C=e.scrollHeight),c+=1,c>=I||h>=2){le(!1),me.current=!1;return}window.requestAnimationFrame(de)}};de()},[]),mt=ie?d.messages:v;s.useLayoutEffect(()=>{const e=ge.current,a=tt(),c=ct.current;if(!e||!a||!c||c.threadId!==a||c.wasPinnedBefore)return;const h=(typeof performance<"u"?performance.now():Date.now())-c.capturedAtMs,C=e.scrollHeight>e.clientHeight,I=h>3e3,de=c.scrollTop<=0&&c.anchorOffset<=0&&C;if(!me.current||I||de){ct.current=null;return}let ce=c.scrollTop;if(c.anchorMessageId){const De=As(e,c.anchorMessageId);De?ce=De.offsetTop-c.anchorOffset:ce=c.scrollTop+(e.scrollHeight-c.scrollHeight)}else ce=c.scrollTop+(e.scrollHeight-c.scrollHeight);e.scrollTop=Math.max(0,ce),me.current=!0,le(!0),ct.current=null},[mt,tt,As]);const qt=s.useCallback(e=>{},[mt.length,ie]),Ne=s.useCallback(e=>{qt(e);const a=ge.current;a&&(ct.current=null,me.current=!1,Pe(a))},[Pe,qt]);s.useLayoutEffect(()=>{Be.current!==null&&(window.clearTimeout(Be.current),Be.current=null);const e=ie?d.activeRoom?.id??null:i?.id??null;if(!e){kt.current=null;return}const a={threadId:e,loaded:ie?!d.messagesLoading:!g,hasMessages:ie?d.messages.length>0:v.length>0},c=kt.current,h=c?.threadId!==e,C=c?.threadId===e&&!c.loaded&&a.loaded,I=c?.threadId===e&&!c.hasMessages&&a.hasMessages;if(!(c===null||h||C||I))return;const ce=ge.current;if(ce)return qt(h?"thread-change":C?"finished-loading":I?"first-messages":"mount"),Pe(ce,{force:!0}),ie||(Be.current=window.setTimeout(()=>{if(Be.current=null,me.current)return;const De=ge.current;De&&Pe(De)},250)),kt.current=a,()=>{Be.current!==null&&(window.clearTimeout(Be.current),Be.current=null)}},[ie,d.activeRoom?.id,d.messages.length,d.messagesLoading,i?.id,v.length,g,Pe]),s.useEffect(()=>{!k||me.current||Ne("streaming")},[k,z,H,Ne]),s.useEffect(()=>{const e=tt();if(!e){Nt.current=0,Bt.current=null;return}if(Bt.current!==e){Bt.current=e,Nt.current=mt.length;return}const a=Nt.current,c=mt.length,h=c>a,C=!me.current;Nt.current=c,h&&C&&Ne("new-message")},[mt,tt,Ne]),s.useEffect(()=>{Rs<=0||!ge.current||Ne("keyboard")},[Rs,Ne]),fa(E&&Ze),s.useLayoutEffect(()=>{if(!E||!i&&!ie||typeof window>"u")return;const e=Kt.current,a=window.visualViewport;if(!e||!a)return;const c=C=>{if(!(C instanceof HTMLElement))return!1;if(C.tagName==="TEXTAREA")return!0;if(C.tagName!=="INPUT")return!1;const I=C.type.toLowerCase();return["","text","search","email","url","tel","password","number"].includes(I)},h=()=>{if(jt.current){e.classList.remove("chat-thread--keyboard-active"),e.style.transform="",e.style.willChange="";return}const C=Math.max(0,window.innerHeight-a.offsetTop-a.height),I=a.offsetTop||0;e.style.setProperty("--vv-height",`${a.height}px`),e.style.setProperty("--vv-offset-top",`${I}px`),e.style.setProperty("--keyboard-overlap",`${C}px`);const de=(C>0||I>0)&&c(document.activeElement);e.classList.toggle("chat-thread--keyboard-active",de),de&&I>0?(e.style.transform=`translateY(${I}px)`,e.style.willChange="transform"):(e.style.transform="",e.style.willChange="")};return h(),a.addEventListener("resize",h),a.addEventListener("scroll",h),document.addEventListener("focusin",h),document.addEventListener("focusout",h),window.addEventListener("pageshow",h),document.addEventListener("visibilitychange",h),()=>{a.removeEventListener("resize",h),a.removeEventListener("scroll",h),document.removeEventListener("focusin",h),document.removeEventListener("focusout",h),window.removeEventListener("pageshow",h),document.removeEventListener("visibilitychange",h),e.classList.remove("chat-thread--keyboard-active"),e.style.transform="",e.style.willChange=""}},[i,E,ie]),s.useEffect(()=>{const e=()=>je(null);if($)return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[$]),s.useEffect(()=>{if(!E||!Ze)return;const e=a=>{a.target?.closest(".chat-messages")||a.preventDefault()};return document.addEventListener("touchmove",e,{passive:!1}),()=>{document.removeEventListener("touchmove",e)}},[E,Ze]),s.useEffect(()=>{const e=Ns.current;if(Ns.current=b,b==="rooms"&&!d.activeRoom){kt.current=null;return}if(!(b==="direct"&&(e===null||e==="rooms"))&&!(b==="rooms"&&(e===null||e==="direct")))return;const h=ge.current;h&&(Pe(h,{force:!0}),me.current=!1,le(!1))},[b,d.activeRoom,Pe]),s.useEffect(()=>{if(!i&&!ie||ie&&!E)return;const e=()=>{const c=!me.current;Rt(),c&&E&&ge.current&&Ne("visibility-restore")},a=()=>{document.visibilityState==="visible"&&e()};return document.addEventListener("visibilitychange",a),window.addEventListener("pageshow",e),()=>{document.removeEventListener("visibilitychange",a),window.removeEventListener("pageshow",e)}},[E,i,ie,Rt,Ne]),s.useEffect(()=>{if(ie||typeof ResizeObserver>"u")return;const e=ge.current;if(!e)return;const a=new ResizeObserver(()=>{me.current||Pe(e)});return a.observe(e),()=>{a.disconnect()}},[ie,Pe,i?.id,b]),s.useEffect(()=>{Ms.current=P},[P]),s.useEffect(()=>()=>{for(const e of Ms.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl);for(const e of lt.current.values())window.clearTimeout(e);lt.current.clear()},[]);const At=s.useCallback(e=>{if(!e||e.length===0)return;const a=[];for(const c of Array.from(e)){if(!Va.includes(c.type))continue;const h=c.type.startsWith("image/");a.push({file:c,previewUrl:h?URL.createObjectURL(c):""})}a.length>0&&K(c=>[...c,...a])},[]),Nn=s.useCallback(e=>{K(a=>{const c=a[e];return c?.previewUrl&&URL.revokeObjectURL(c.previewUrl),a.filter((h,C)=>C!==e)})},[]),jn=s.useCallback(e=>{const a=e.clipboardData?.files;if(!a||a.length===0)return;const c=Array.from(a).filter(h=>h.type.startsWith("image/"));c.length!==0&&At(c)},[At]),Mn=s.useCallback(async e=>{try{await U(e),ae(!1),E&&be(!1)}catch{r(o("chat.failedToCreateSession","Failed to create chat session"),"error")}},[U,r,E]),we=s.useCallback(e=>{const a=e??ue.current;if(!a)return;const c=Mt==="tablet"?La:vs;a.style.height="auto",a.style.height=`${za(a.scrollHeight,c)}px`,a.style.overflowY=_a(a.scrollHeight,c)},[Mt]),Es=s.useCallback(e=>{ue.current=e,e&&we(e)},[we]);s.useLayoutEffect(()=>{we()},[b,D,i?.id,d.activeRoom?.id,we]);const st=s.useCallback(()=>{if(Ce(""),pe)try{localStorage.removeItem(pe)}catch{}He(!1),We(""),f(!1),Oe(""),T(-1),K(e=>{for(const a of e)a.previewUrl&&URL.revokeObjectURL(a.previewUrl);return[]})},[pe]),Xt=s.useCallback(()=>{const e=D.trim(),a=P.map(c=>c.file);if(!(!e&&a.length===0||!i)){if(e==="/clear"||e==="/new"){st(),te(),q(),U({agentId:i.agentId,modelProvider:i.modelProvider??void 0,modelId:i.modelId??void 0}).catch(()=>{r(o("chat.failedToClearConversation","Failed to clear conversation"),"error")});return}st(),R(e,a)}},[D,P,i,st,q,te,U,r,R]),Yt=s.useCallback(async()=>{const e=D.trim();if(e){if(m&&b==="rooms"){if(!d.activeRoom)return;if(e==="/clear"||e==="/new"){st();try{await d.clearRoom(d.activeRoom.id)}catch{r(o("chat.failedToClearRoomConversation","Failed to clear room conversation"),"error")}return}if(Gt.current)return;Gt.current=!0;const a=D;st();try{await d.sendRoomMessage(e,{files:P.map(c=>c.file)})}catch(c){if(c instanceof ga){const C=c.message.trim()?c.message:o("chat.messageSentButReplyFailed","Message sent, but assistant reply failed");r(o("chat.messageSentButReplyFailedDetail","Message sent, but assistant reply failed: {{detail}}",{detail:C}),"error");return}Ce(a);const h=c instanceof Error&&c.message.trim()?c.message:o("chat.failedToSendRoomMessage","Failed to send room message");r(h,"error")}finally{Gt.current=!1}return}Xt()}},[D,P,m,b,d,d.clearRoom,st,r,Xt]),Jt=s.useCallback(e=>{Ce(a=>{const c=mn(a);if(!c)return a;const h=`/skill:${e.name} `,C=a.slice(0,c.start)+h+a.slice(c.end);return window.requestAnimationFrame(()=>{ue.current&&(we(ue.current),ue.current.focus())}),C}),He(!1),We(""),Ue(0)},[we]),Tt=s.useCallback(e=>{const a=ue.current;if(!a||G<0)return;const c=a.selectionStart??Je.current,h=a.selectionEnd??c,C=Math.max(c,h),I=Math.min(G,C),ce=`${`@${e.name.replace(/\s+/g,"_")}`} `,De=D.slice(0,I)+ce+D.slice(C),nt=I+ce.length;Ce(De),f(!1),Oe(""),A(0),T(-1),window.requestAnimationFrame(()=>{ue.current&&(we(ue.current),ue.current.focus(),ue.current.setSelectionRange(nt,nt))})},[G,D,we]),ht=s.useCallback((e,a)=>{const h=ue.current?.selectionStart??Je.current,C=D.lastIndexOf("#",h),I=C>=0?C+a.length:e.length;Ce(e),L.dismissMention(),St(!1),window.requestAnimationFrame(()=>{ue.current&&(we(ue.current),ue.current.focus(),ue.current.setSelectionRange(I,I))})},[L,D,we]),Is=s.useCallback(e=>{if(Je.current=e.currentTarget.selectionStart??Je.current,L.mentionActive&&L.combinedItems.length>0){if(L.handleKeyDown(e,D),e.key==="Enter"||e.key==="Tab"){const a=L.combinedItems[L.selectedIndex];a?.kind==="task"?ht(L.selectTask(a.task,D),`#${a.task.id}`):a?.kind==="file"&&ht(L.selectFile(a.file,D),`#${a.file.path}`)}return}if(l&&e.key==="ArrowDown"){e.preventDefault(),Xe.length>0&&A(a=>(a+1)%Xe.length);return}if(l&&e.key==="ArrowUp"){e.preventDefault(),Xe.length>0&&A(a=>a===0?Xe.length-1:a-1);return}if(l&&e.key==="Enter"){e.preventDefault();const a=Xe[x]??Xe[0];a&&Tt(a);return}if(l&&e.key==="Escape"){e.preventDefault(),f(!1),Oe(""),T(-1);return}if(ze&&e.key==="ArrowDown"){e.preventDefault(),xe.length>0&&Ue(a=>(a+1)%xe.length);return}if(ze&&e.key==="ArrowUp"){e.preventDefault(),xe.length>0&&Ue(a=>a===0?xe.length-1:a-1);return}if(ze&&(e.key==="Enter"||e.key==="Tab")&&xe.length>0){e.preventDefault();const a=xe[qe]??xe[0];a&&Jt(a);return}if(ze&&e.key==="Escape"){e.preventDefault(),He(!1);return}e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),Yt())},[l,Xe,x,Tt,ze,xe,qe,Jt,Yt,L,ht,D]),Et=s.useCallback((e,a)=>{const c=Wa(e,a);if(c){f(!0),Oe(c.filter),T(c.start);return}f(!1),Oe(""),T(-1)},[]),Ps=s.useCallback(e=>{const a=e.target,c=a.value,h=a.selectionStart??c.length;we(a),Je.current=h,Ce(c);const C=mn(c);C?(He(!0),We(C.filter)):(He(!1),We("")),Et(c,h),L.detectMention(c,h),St(L.mentionActive),L.mentionActive&&Ot(a)},[Et,we]),It=s.useCallback(e=>{const a=e.currentTarget,c=a.selectionStart??a.value.length;Je.current=c,Et(a.value,c),L.detectMention(a.value,c),St(L.mentionActive),L.mentionActive&&Ot(a)},[Et,L,Ot]),Ds=s.useCallback(e=>{e.key!=="Escape"&&It(e)},[It]),$s=s.useCallback(()=>{typeof window<"u"&&window.innerWidth<=768&&(jt.current=!0,Te.current!==null&&window.clearTimeout(Te.current),Te.current=window.setTimeout(()=>{jt.current=!1,Te.current=null},450),(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0),Ee.current!==null&&window.clearTimeout(Ee.current),Ee.current=window.setTimeout(()=>{Ee.current=null,document.activeElement?.tagName!=="TEXTAREA"&&(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0)},350)),Ae.current!==null&&window.clearTimeout(Ae.current),Ae.current=window.setTimeout(()=>{He(!1),f(!1),Oe(""),T(-1),St(!1),L.dismissMention(),Ae.current=null},120)},[L]),Fs=s.useCallback(()=>{jt.current=!1,Te.current!==null&&(window.clearTimeout(Te.current),Te.current=null),Ae.current!==null&&(window.clearTimeout(Ae.current),Ae.current=null),Ee.current!==null&&(window.clearTimeout(Ee.current),Ee.current=null)},[]);s.useEffect(()=>()=>{Te.current!==null&&window.clearTimeout(Te.current),Ee.current!==null&&window.clearTimeout(Ee.current)},[]);const Rn=s.useCallback(async e=>{je(null);try{await _(e),r(o("chat.conversationArchived","Conversation archived"),"success")}catch{r(o("chat.failedToArchiveConversation","Failed to archive conversation"),"error")}},[_,r]),An=s.useCallback(async e=>{Me(null),je(null);try{await M(e),r(o("chat.conversationDeleted","Conversation deleted"),"success")}catch{r(o("chat.failedToDeleteConversation","Failed to delete conversation"),"error")}},[M,r]),ft=s.useCallback(e=>{try{localStorage.setItem(ln,String(e))}catch{}},[]),Tn=s.useCallback(e=>{if(E||ut)return;e.preventDefault(),e.stopPropagation();const a=e.currentTarget;typeof a.setPointerCapture=="function"&&a.setPointerCapture(e.pointerId);const c=e.clientX,h=ve;let C=h;document.body.style.userSelect="none";const I=ce=>{const De=ce.clientX-c,nt=Math.max(Ft,Math.min(Lt,h+De));C=nt,Le(nt),ft(nt)},de=ce=>{typeof a.releasePointerCapture=="function"&&a.releasePointerCapture(ce.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",I),document.removeEventListener("pointerup",de),ft(C)};document.addEventListener("pointermove",I),document.addEventListener("pointerup",de)},[E,ft,ve,ut]),En=s.useCallback(e=>{if(E||ut||e.key!=="ArrowLeft"&&e.key!=="ArrowRight")return;e.preventDefault();const a=e.shiftKey?50:10,c=e.key==="ArrowLeft"?-a:a,h=Math.max(Ft,Math.min(Lt,ve+c));Le(h),ft(h)},[E,ft,ve,ut]),Ls=s.useCallback(e=>{const a=V.find(c=>c.id===e);J("direct",e,a?.lastMessageAt??a?.updatedAt),w(e),Ye(!1),E&&be(!1)},[V,E,J,w]),Qt=s.useCallback(()=>{w(""),be(!0),Ye(!1)},[w]),Zt=s.useCallback(()=>{d.selectRoom(null),be(!0),Ye(!1)},[d]),In=()=>t.jsxs("div",{className:"chat-empty-state",children:[t.jsx(gn,{size:48,strokeWidth:1.5}),t.jsx("h2",{children:o("chat.startNewConversation","Start a new conversation")}),t.jsxs("button",{className:"btn btn-primary",onClick:()=>ae(!0),children:[t.jsx(pt,{size:16}),o("chat.newChat","New Chat")]})]}),es=hn(i,i?.agentId?Se.get(i.agentId)??null:null,_e),Ke=cn(es?.provider,es?.modelId),Ge=es?.provider??null,ts=!!(i||k||v.length>0),Pt=b==="rooms"?ie:!!i,_s=s.useRef(Pt);s.useEffect(()=>{const e=_s.current;_s.current=Pt,E&&(e||!Pt||ws({type:"view",revert:b==="rooms"?Zt:Qt}))},[b,Qt,Zt,Pt,E,ws]);const ss=i?.agentId===at?Ke??"Fusion":i?.title||Se.get(i?.agentId??"")?.name||i?.agentId||"Chat",zs=!!(Ke&&Ke!==ss),Pn=E&&b==="direct"&&!!i,ns=Se.get(i?.agentId??"")?.name||(i?.agentId===at?Ke??"Fusion":i?.agentId?.slice(0,30)??"Fusion"),as=!1,rs=i?.agentId===at,Dn=N.length>50?`${N.slice(0,50)}…`:N,$n=s.useCallback(()=>{B(e=>!e)},[]);s.useEffect(()=>{if(!yt)return;const e=a=>{Ss.current?.contains(a.target)||Ye(!1)};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[yt]),s.useEffect(()=>{if(!Ct)return;const e=c=>{ks.current?.contains(c.target)||it(!1)},a=c=>{c.key==="Escape"&&it(!1)};return document.addEventListener("mousedown",e),document.addEventListener("keydown",a),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",a)}},[Ct]),s.useEffect(()=>{(!E||b!=="direct"||he)&&Ye(!1)},[E,b,he]),s.useEffect(()=>{it(!1)},[d.activeRoom?.id]);const os=s.useCallback((e,a)=>{const c=lt.current.get(e);c&&window.clearTimeout(c),xs(C=>({...C,[e]:a}));const h=window.setTimeout(()=>{xs(C=>{const{[e]:I,...de}=C;return de}),lt.current.delete(e)},2e3);lt.current.set(e,h)},[]),Hs=s.useCallback(async(e,a)=>{try{if(!navigator.clipboard?.writeText)throw new Error("Clipboard API unavailable");await navigator.clipboard.writeText(a),os(e,"success")}catch{os(e,"error")}},[os]),Fn=s.useCallback((e,a=!1)=>a?t.jsx("div",{className:"chat-message-content chat-message-content--plain",children:e}):t.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:t.jsx(bn,{remarkPlugins:[vn],components:yn,children:e})}),[]),is=i?.agentId===at,cs=s.useCallback((e,a,c)=>t.jsx("button",{type:"button",className:`btn-icon chat-message-copy-action${fe[e]==="success"?" chat-message-copy-action--success":""}${fe[e]==="error"?" chat-message-copy-action--error":""}`,"data-testid":c??`chat-copy-response-${e}`,"aria-label":fe[e]==="success"?o("chat.responseCopied","Response copied"):fe[e]==="error"?o("chat.copyFailed","Copy failed"):o("chat.copyResponse","Copy response"),onClick:()=>{Hs(e,a)},children:fe[e]==="success"?t.jsx(pa,{size:14}):t.jsx(ba,{size:14})}),[fe,Hs]),ls=s.useCallback(e=>{const a=ge.current;if(!a)return;const c=`[data-testid="chat-message-${e}"]`,h=a.querySelector(c);if(!h)return;const C=h.getBoundingClientRect().top-a.getBoundingClientRect().top+a.scrollTop,I=typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;a.scrollTo({top:C,behavior:I?"auto":"smooth"})},[]),Us=i?.cliExecutorAdapterId??null,Ln=!!Us,_n=Us==="generic"?"generic":"hybrid",zn=i?.cliSessionFile||i?.id||"",Os=()=>t.jsxs("div",{className:"chat-messages",ref:ge,onScroll:Ts,children:[t.jsx("div",{ref:Cs,className:"chat-load-more-sentinel",children:ee&&g&&t.jsx("div",{className:"chat-loading-older",children:o("chat.loadingOlderMessages","Loading older messages…")})}),k?t.jsxs(t.Fragment,{children:[v.map(e=>t.jsx(ps,{message:e,forcePlain:O,agentName:ns,hideAssistantIdentity:rs,showAssistantModelTag:as,activeModelTag:Ke,activeModelProvider:Ge,activeSessionId:i?.id??null,mentionAgentsByName:Wt,roomContext:null,copyAction:is&&e.role==="assistant"?cs(e.id,e.content):void 0,onScrollToTop:ls},e.id)),t.jsxs("div",{className:"chat-message chat-message--assistant chat-message--streaming",children:[!rs&&t.jsxs("div",{className:"chat-message-avatar",children:[Ge?t.jsx(bt,{provider:Ge,size:"sm"}):t.jsx(vt,{size:14}),t.jsx("span",{children:ns}),as]}),z?Fn(z,O):t.jsx("div",{className:"chat-message-content chat-message-content--waiting",children:H?o("chat.thinkingStatus","Thinking…"):o("chat.connectingStatus","Connecting…")}),is&&z&&cs("__streaming__",z,"chat-copy-response-streaming"),wn(W,o),H&&t.jsxs("details",{className:"chat-message-thinking",children:[t.jsx("summary",{children:o("chat.thinking","Thinking")}),t.jsx("pre",{className:"chat-message-thinking-content",children:Ht(H)})]}),t.jsxs("div",{className:"chat-typing-indicator",children:[t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{})]})]})]}):g?t.jsx("div",{className:"chat-empty-state",children:o("chat.loadingMessages","Loading messages...")}):v.length===0&&!i?In():v.length===0&&i?t.jsx("div",{className:"chat-empty-state",children:o("chat.noMessagesYet","No messages yet. Start the conversation!")}):t.jsx(t.Fragment,{children:v.map(e=>t.jsx(ps,{message:e,forcePlain:O,agentName:ns,hideAssistantIdentity:rs,showAssistantModelTag:as,activeModelTag:Ke,activeModelProvider:Ge,activeSessionId:i?.id??null,mentionAgentsByName:Wt,roomContext:null,copyAction:is&&e.role==="assistant"?cs(e.id,e.content):void 0,onScrollToTop:ls},e.id))}),t.jsx("div",{ref:ys})]}),Bs=()=>t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:js,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:e=>{At(e.target.files),e.target.value=""}}),ze&&t.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":o("chat.skillSuggestions","Skill suggestions"),children:Ut?t.jsx("div",{className:"chat-skill-menu-empty",children:o("chat.loadingSkills","Loading skills…")}):xe.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:ot?o("chat.noSkillsFound","No skills found"):o("chat.noSkillsAvailable","No skills available")}):xe.map((e,a)=>t.jsxs("button",{type:"button",role:"option","aria-selected":a===qe,className:`chat-skill-menu-item${a===qe?" chat-skill-menu-item--highlighted":""}`,onMouseDown:c=>c.preventDefault(),onMouseEnter:()=>Ue(a),onClick:()=>Jt(e),children:[t.jsx("span",{className:"chat-skill-menu-item-name",children:e.name}),t.jsx("span",{className:"chat-skill-menu-item-description",title:e.relativePath,children:e.relativePath})]},e.id))}),P.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:P.map((e,a)=>t.jsxs("div",{className:"chat-attachment-preview","data-testid":`chat-attachment-preview-${a}`,children:[e.previewUrl?t.jsx("img",{src:e.previewUrl,alt:e.file.name}):t.jsx("span",{className:"chat-attachment-preview-name",children:e.file.name}),t.jsx("button",{type:"button",className:"chat-attachment-remove",onClick:()=>Nn(a),"data-testid":`chat-attachment-remove-${a}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${a}`))}),t.jsxs("div",{className:"chat-input-row",children:[t.jsx("button",{type:"button",className:"btn-icon chat-attach-btn","data-testid":"chat-attach-btn","aria-label":o("chat.attachFiles","Attach files"),onClick:()=>js.current?.click(),children:t.jsx(ka,{size:16})}),t.jsxs("div",{className:`chat-input-wrapper${Q?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),F(!0)},onDragLeave:()=>F(!1),onDrop:e=>{e.preventDefault(),F(!1),At(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:Es,className:"chat-input-textarea",placeholder:o("chat.typeMessage","Type a message..."),value:D,onChange:Ps,onKeyDown:Is,onKeyUp:Ds,onClick:It,onBlur:$s,onFocus:Fs,onPaste:jn,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||Js()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(Qs,{agents:et,filter:Re,highlightedIndex:x,visible:l,onSelect:Tt,position:"below",roomMemberIds:Ie?.memberIds,roomName:Ie?.roomName}),t.jsx(Na,{visible:L.mentionActive&&!l,position:Cn,tasks:L.tasks,files:L.files,selectedIndex:L.selectedIndex,onSelectTask:e=>{ht(L.selectTask(e,D),`#${e.id}`)},onSelectFile:e=>{ht(L.selectFile(e,D),`#${e.path}`)},loading:L.loading}),N&&t.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[t.jsx("span",{children:o("chat.queuedMessage","Queued: {{preview}}",{preview:Dn})}),t.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":o("chat.dismissQueuedMessage","Dismiss queued message"),"data-testid":"chat-pending-dismiss",onClick:te,children:"×"})]})]}),k?t.jsx("button",{className:"chat-input-stop",onClick:q,"aria-label":o("chat.stopGeneration","Stop generation"),"data-testid":"chat-stop-btn",children:t.jsx(ja,{size:14})}):t.jsx("button",{type:"button",className:"chat-input-send",onPointerDown:e=>{e.pointerType&&e.pointerType!=="mouse"&&e.preventDefault()},onMouseDown:e=>{e.preventDefault()},onClick:()=>{Xt()},disabled:!D.trim()&&P.length===0,"data-testid":"chat-send-btn",style:{touchAction:"manipulation"},children:t.jsx(Zs,{size:16})})]})]});return t.jsxs("div",{className:"chat-view",children:[t.jsxs("div",{className:`chat-sidebar${he?"":" chat-sidebar--hidden"}`,style:E?void 0:{width:`${ve}px`},children:[m&&t.jsxs("div",{className:"chat-sidebar-scope-toggle",role:"tablist","data-testid":"chat-sidebar-scope-toggle",children:[t.jsx("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${b==="direct"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":b==="direct","data-testid":"chat-sidebar-scope-direct",onClick:()=>y("direct"),children:o("chat.scopeDirect","Direct")}),t.jsx("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${b==="rooms"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":b==="rooms","data-testid":"chat-sidebar-scope-rooms",onClick:()=>y("rooms"),children:o("chat.scopeRooms","Rooms")})]}),!m||b==="direct"?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"chat-sidebar-search-container",children:t.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[t.jsx(va,{size:14,className:"chat-sidebar-search-icon"}),t.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:o("chat.searchConversations","Search conversations..."),value:S,onChange:e=>ne(e.target.value),"data-testid":"chat-search-input"})]})}),t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:p?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:o("chat.loadingConversations","Loading...")}):V.length===0?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:o("chat.noConversationsYet","No conversations yet")}):V.map(e=>{const a=i?.id===e.id,c=!a&&ye("direct",e.id,e.lastMessageAt??e.updatedAt),h=hn(e,Se.get(e.agentId)??null,_e),C=cn(h?.provider,h?.modelId)??"Fusion";return t.jsxs("div",{className:`chat-session-item${a?" chat-session-item--active":""}`,onClick:()=>Ls(e.id),onContextMenu:I=>{I.preventDefault(),je({sessionId:e.id,x:I.clientX,y:I.clientY})},"data-testid":`chat-session-${e.id}`,children:[t.jsx("button",{className:"chat-session-delete-btn",onClick:I=>{I.stopPropagation(),Me(e.id)},"data-testid":"chat-session-delete-btn","aria-label":o("chat.deleteConversation","Delete conversation"),children:t.jsx(us,{size:14})}),t.jsxs("div",{className:"chat-session-title",children:[e.title||o("chat.untitledSession","Untitled"),c?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${e.id}`,"aria-label":o("chat.unreadMessages","Unread messages")}):null]}),t.jsx("div",{className:"chat-session-preview",children:e.lastMessagePreview||o("chat.noMessages","No messages")}),t.jsxs("div",{className:"chat-session-meta",children:[t.jsxs("span",{className:"chat-session-meta-model",children:[h?.provider?t.jsx(bt,{provider:h.provider,size:"sm"}):null,t.jsx("span",{children:Se.get(e.agentId)?.name||(e.agentId===at?C:e.agentId.slice(0,30))})]}),t.jsx("span",{children:e.updatedAt?xn(e.updatedAt,o):""})]})]},e.id)})})]}):t.jsxs("div",{className:"chat-sidebar-rooms","data-testid":"chat-sidebar-rooms",children:[!E&&t.jsx("div",{className:"chat-sidebar-rooms-header","data-testid":"chat-sidebar-rooms-header",children:t.jsxs("button",{type:"button",className:"btn btn-sm btn-primary","data-testid":"chat-create-room-btn",onClick:()=>re(!0),children:[t.jsx(pt,{size:14}),o("chat.createRoom","Create room")]})}),d.rooms.length===0?t.jsx("div",{className:"chat-sidebar-rooms-empty","data-testid":"chat-sidebar-rooms-empty",children:o("chat.noRoomsYet","No rooms yet.")}):t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:d.rooms.map(e=>{const a=d.activeRoom?.id===e.id,c=!a&&ye("room",e.id,e.updatedAt);return t.jsxs("div",{role:"button",tabIndex:0,className:`chat-room-item${a?" chat-room-item--active":""}`,"data-testid":`chat-room-item-${e.slug}`,onClick:()=>{J("room",e.id,e.updatedAt),d.selectRoom(e.id),E&&be(!1)},onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),J("room",e.id,e.updatedAt),d.selectRoom(e.id),E&&be(!1))},children:[t.jsxs("span",{className:"chat-room-item-details",children:[t.jsxs("span",{className:"chat-room-item-name-row",children:[t.jsxs("span",{className:"chat-room-item-name",children:["#",e.name]}),c?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${e.id}`,"aria-label":o("chat.unreadMessages","Unread messages")}):null]}),a?t.jsx("span",{className:"chat-room-item-meta",children:o("chat.roomMemberCount","{{count}} member",{count:d.activeRoomMembers.length,defaultValue_one:"{{count}} member",defaultValue_other:"{{count}} members"})}):null]}),t.jsx("button",{type:"button",className:"btn-icon chat-room-item-delete","data-testid":`chat-room-delete-${e.slug}`,"aria-label":o("chat.deleteRoom","Delete room {{name}}",{name:e.name}),onClick:h=>{h.stopPropagation(),Fe(e.id)},children:t.jsx(us,{size:14})})]},e.id)})})]}),b==="rooms"?E?t.jsx("div",{className:"chat-sidebar-footer",children:t.jsxs("button",{type:"button",className:"btn btn-sm btn-primary chat-sidebar-footer-btn","data-testid":"chat-create-room-btn",onClick:()=>re(!0),children:[t.jsx(pt,{size:14}),o("chat.createRoom","Create room")]})}):null:t.jsx("div",{className:"chat-sidebar-footer",children:t.jsxs("button",{className:"btn btn-sm btn-primary chat-sidebar-footer-btn",onClick:()=>ae(!0),"data-testid":"chat-new-btn",children:[t.jsx(pt,{size:14}),o("chat.newChat","New Chat")]})})]}),!E&&he&&!ut&&t.jsx("div",{className:"chat-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":Ft,"aria-valuemax":Lt,"aria-valuenow":ve,"aria-label":o("chat.resizeSidebar","Resize chat sidebar"),tabIndex:0,onPointerDown:Tn,onKeyDown:En}),$&&t.jsxs("div",{className:"chat-session-context-menu",style:{top:$.y,left:$.x},onClick:e=>e.stopPropagation(),children:[t.jsxs("button",{onClick:()=>Rn($.sessionId),"data-testid":"chat-context-archive",children:[t.jsx(xa,{size:14}),o("chat.archive","Archive")]}),t.jsxs("button",{onClick:()=>{je(null),Me($.sessionId)},"data-testid":"chat-context-delete",children:[t.jsx(us,{size:14}),o("chat.delete","Delete")]})]}),Y&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Me(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:o("chat.deleteConversationTitle","Delete Conversation?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:o("chat.deleteConversationBody","This action cannot be undone. All messages in this conversation will be permanently deleted.")}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>Me(null),children:o("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void An(Y),children:o("chat.delete","Delete")})]})]})}),m&&$e&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Fe(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:o("chat.deleteRoomTitle","Delete Room?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:o("chat.deleteRoomBody","This action cannot be undone. This room and all its messages will be permanently deleted.")}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>Fe(null),children:o("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>{(async()=>{try{await d.deleteRoom($e),Fe(null)}catch{r(o("chat.failedToDeleteRoom","Failed to delete room"),"error")}})()},children:o("chat.delete","Delete")})]})]})}),m&&b==="rooms"?t.jsxs("div",{ref:Kt,className:"chat-thread",children:[d.activeRoom?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"chat-room-thread-header",children:[E&&t.jsx("button",{className:"btn-icon",onClick:Zt,"data-testid":"chat-back-btn",children:t.jsx(Ys,{size:16})}),t.jsxs("div",{className:"chat-room-switcher-menu",ref:ks,children:[t.jsxs("button",{type:"button",className:"chat-room-switcher-trigger","data-testid":"chat-room-switcher-trigger","aria-haspopup":"menu","aria-expanded":Ct,onClick:()=>it(e=>!e),children:[t.jsxs("span",{className:"chat-thread-header-title",children:["#",d.activeRoom.name]}),t.jsx($t,{size:16,"aria-hidden":"true"})]}),Ct&&t.jsx("div",{role:"menu",className:"chat-room-switcher-dropdown","data-testid":"chat-room-switcher-dropdown",children:d.rooms.map(e=>t.jsxs("button",{type:"button",role:"menuitem",className:`chat-room-switcher-option${e.id===d.activeRoom?.id?" chat-room-switcher-option--active":""}`,"data-testid":`chat-room-switcher-option-${e.id}`,onClick:()=>{J("room",e.id,e.updatedAt),d.selectRoom(e.id),it(!1)},children:["#",e.name]},e.id))})]}),t.jsx("div",{className:"chat-room-thread-members",children:d.activeRoomMembers.map(e=>t.jsx(fn,{agent:Se.get(e.agentId)??{id:e.agentId,name:e.agentId.slice(0,30)}},e.agentId))})]}),t.jsxs("div",{className:"chat-messages",ref:ge,onScroll:Ts,children:[d.messagesLoading?t.jsx("div",{className:"chat-empty-state",children:o("chat.loadingMessages","Loading messages...")}):d.messages.filter(e=>e.content.trim()!==on).length===0?t.jsx("div",{className:"chat-empty-state",children:o("chat.noMessagesYet","No messages yet. Start the conversation!")}):d.messages.filter(e=>e.content.trim()!==on).map(e=>{const a=e.senderAgentId?Se.get(e.senderAgentId)?.name??e.senderAgentId.slice(0,30):o("chat.you","You"),c={id:e.id,sessionId:e.roomId,role:e.role,content:e.content,thinkingOutput:e.thinkingOutput??void 0,toolCalls:void 0,fallbackInfo:void 0,attachments:e.attachments,createdAt:e.createdAt};return t.jsx(ps,{message:c,forcePlain:O,agentName:a,hideAssistantIdentity:!1,showAssistantModelTag:!1,activeModelTag:null,activeModelProvider:null,activeSessionId:d.activeRoom?.id??null,mentionAgentsByName:Wt,roomContext:Ie,onScrollToTop:ls},e.id)}),t.jsx("div",{ref:ys})]}),d.activeRoom&&Z&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:()=>Ne("fab-click"),children:[t.jsx($t,{size:14}),o("chat.latest","Latest")]})]}):t.jsx("div",{className:"chat-room-empty-pane","data-testid":"chat-rooms-empty-pane",children:o("chat.selectRoomOrCreate","Select a room or create one")}),d.activeRoom&&t.jsx("div",{className:"chat-input-area",children:t.jsxs("div",{className:"chat-input-row",children:[t.jsxs("div",{className:"chat-input-wrapper",children:[t.jsx("textarea",{ref:Es,className:"chat-input-textarea",placeholder:o("chat.typeMessage","Type a message..."),value:D,onChange:Ps,onKeyDown:Is,onKeyUp:Ds,onClick:It,onBlur:$s,onFocus:Fs,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||Js()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(Qs,{agents:et,filter:Re,highlightedIndex:x,visible:l,onSelect:Tt,position:"below",roomMemberIds:Ie?.memberIds,roomName:Ie?.roomName})]}),t.jsx("button",{type:"button",className:"chat-input-send",onPointerDown:e=>{e.pointerType&&e.pointerType!=="mouse"&&e.preventDefault()},onMouseDown:e=>{e.preventDefault()},onClick:()=>{Yt()},disabled:!D.trim(),"data-testid":"chat-send-btn",style:{touchAction:"manipulation"},children:t.jsx(Zs,{size:16})})]})})]}):t.jsxs("div",{ref:Kt,className:"chat-thread",children:[(ts||!E)&&t.jsxs("div",{className:"chat-thread-header",children:[E&&ts&&t.jsx("button",{className:"btn-icon",onClick:Qt,"data-testid":"chat-back-btn",children:t.jsx(Ys,{size:16})}),t.jsx("div",{className:"chat-thread-header-identity","data-testid":"chat-thread-header-identity",children:Pn?t.jsxs("div",{className:"chat-mobile-session-menu",ref:Ss,children:[t.jsxs("button",{type:"button",className:"btn chat-mobile-session-trigger","data-testid":"chat-mobile-session-trigger","aria-haspopup":"menu","aria-expanded":yt,onClick:()=>Ye(e=>!e),children:[Ge?t.jsx(bt,{provider:Ge,size:"md"}):t.jsx(vt,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:ss}),zs&&t.jsx("span",{className:"chat-model-tag",children:Ke}),t.jsx($t,{size:16,"aria-hidden":"true"})]}),yt&&t.jsx("div",{className:"chat-mobile-session-dropdown",role:"menu","data-testid":"chat-mobile-session-dropdown",children:V.map(e=>t.jsx("button",{type:"button",role:"menuitem",className:`chat-mobile-session-option${i?.id===e.id?" chat-mobile-session-option--active":""}`,"data-testid":`chat-mobile-session-option-${e.id}`,onClick:()=>Ls(e.id),children:t.jsx("span",{className:"chat-mobile-session-option-title",children:e.title||o("chat.untitledSession","Untitled")})},e.id))})]}):t.jsxs(t.Fragment,{children:[Ge?t.jsx(bt,{provider:Ge,size:"md"}):t.jsx(vt,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:ss}),zs&&t.jsx("span",{className:"chat-model-tag",children:Ke})]})}),ts&&t.jsx("button",{type:"button",className:`chat-thread-header-render-toggle${O?" chat-thread-header-render-toggle--plain":""}`,"data-testid":"chat-thread-render-toggle","aria-label":O?o("chat.showRenderedMarkdown","Show all messages as rendered Markdown"):o("chat.showPlainText","Show all messages as plain text"),onClick:$n,children:O?t.jsx(wa,{size:14}):t.jsx(ya,{size:14})}),!E&&t.jsxs("button",{className:"btn btn-sm btn-primary chat-thread-header-new-chat",onClick:()=>ae(!0),"data-testid":"chat-thread-new-chat-btn",children:[t.jsx(pt,{size:14}),o("chat.newChat","New Chat")]})]}),Ln?t.jsx(Fa,{cliSessionId:zn,tier:_n,projectId:n,renderTranscript:Os,renderComposer:()=>i?Bs():null}):t.jsxs(t.Fragment,{children:[Os(),Z&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:()=>Ne("fab-click"),children:[t.jsx($t,{size:14}),o("chat.latest","Latest")]}),i&&Bs()]})]}),m&&t.jsx($a,{isOpen:wt,onClose:()=>re(!1),projectId:n,existingRoomNames:d.rooms.map(e=>e.name),onCreate:async e=>{await d.createRoom({name:e.name,memberAgentIds:e.memberAgentIds}),b!=="rooms"&&y("rooms"),re(!1),E&&be(!1)}}),ke&&t.jsx(Xa,{projectId:n,defaultModel:_e,onClose:()=>ae(!1),onCreate:Mn})]})}export{nr as ChatView,za as clampChatInputHeight,_a as resolveChatInputOverflowY,hn as resolveSessionProvider};