@runfusion/fusion 0.76.0-beta.2 → 0.76.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +323 -59
- package/dist/child-process-worker.js +274 -42
- package/dist/client/.vite/manifest.json +273 -273
- package/dist/client/assets/{AgentDetailView-gak4EWTI.js → AgentDetailView-T767kKTg.js} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor-DP1QbZL-.js → AgentPermissionPolicyEditor--u9jyUf2.js} +1 -1
- package/dist/client/assets/{AgentsView-DAMRTKzI.js → AgentsView-6Ifu7qDr.js} +5 -5
- package/dist/client/assets/{ChatView-iE-2gf5P.js → ChatView-BV3lixQi.js} +1 -1
- package/dist/client/assets/{CommandCenter-B6RnkLYm.js → CommandCenter-CSRYoveB.js} +1 -1
- package/dist/client/assets/{DevServerView-DcFL_LzK.js → DevServerView-B9So_oYx.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-CtjqrYoO.js → DirectoryPicker-BhyDL_2m.js} +1 -1
- package/dist/client/assets/{DocumentsView-BkAe2S4H.js → DocumentsView-pbERA7O-.js} +1 -1
- package/dist/client/assets/{EvalsView-CbGA9dMn.js → EvalsView-DJQ4ltCg.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-CMgO_S8T.js → ExperimentalAgentOnboardingModal-BwJuzkzB.js} +1 -1
- package/dist/client/assets/{GoalsView-_3P9J5sf.js → GoalsView-B6X5_0Ve.js} +1 -1
- package/dist/client/assets/InsightsView-CJgI0J7S.js +11 -0
- package/dist/client/assets/{InsightsView-Gn5lOBA0.css → InsightsView-DAAXuX4v.css} +1 -1
- package/dist/client/assets/{MemoryView-DwJas8vi.js → MemoryView-BHq1AHPu.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-B_LiW_e9.js → PiExtensionsManager-B8At6fO8.js} +1 -1
- package/dist/client/assets/{PluginManager-BkB6WLQc.js → PluginManager-k7hV7_9e.js} +1 -1
- package/dist/client/assets/{PullRequestView-DcH5tmYc.js → PullRequestView-B1hZFrWo.js} +1 -1
- package/dist/client/assets/{ReportModal-BOEbqtqG.js → ReportModal-C46V_zEa.js} +1 -1
- package/dist/client/assets/{ResearchView-Dp6V42pI.js → ResearchView-D8G85BYN.js} +2 -2
- package/dist/client/assets/{SecretsView-BCqXHB2L.js → SecretsView-CTri9LRK.js} +1 -1
- package/dist/client/assets/{SessionTerminal-CkdoQv4y.js → SessionTerminal-BRf6r4Vp.js} +1 -1
- package/dist/client/assets/SettingsModal-D0RBeZik.js +21 -0
- package/dist/client/assets/{SettingsModal-Dc7YG6KB.js → SettingsModal-rUQcSTJp.js} +1 -1
- package/dist/client/assets/{SettingsTextareaRow-WSkBoAOO.js → SettingsTextareaRow-BirlBcem.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-VTrJAsKd.js → SetupWizardModal-xnCBM9EL.js} +2 -2
- package/dist/client/assets/{SkillsView-CXeXOxfF.js → SkillsView-O5U0ep50.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-DoxLGPRF.js → WorkflowNodeEditor-BX4d2qqF.js} +3 -3
- package/dist/client/assets/{agent-import-generation-upc0yw-M.js → agent-import-generation-DnqVkPkz.js} +1 -1
- package/dist/client/assets/{agentsOrgChartLayout-C3iumMrW.js → agentsOrgChartLayout-CKuzbhFf.js} +1 -1
- package/dist/client/assets/app-B2FwULu2.js +5 -0
- package/dist/client/assets/{app-BA9gw9hx.js → app-B6nJaqAl.js} +2 -2
- package/dist/client/assets/{app-B_lScKc1.js → app-CGXZeIRc.js} +2 -2
- package/dist/client/assets/{app-DG_vjDw5.js → app-CGtkeBF5.js} +3 -3
- package/dist/client/assets/{app-GBgoY-oh.js → app-CNzN1Plu.js} +2 -2
- package/dist/client/assets/{app-B0KFGP8D.js → app-DLs-f5yM.js} +3 -3
- package/dist/client/assets/{app-DeHIOCEP.js → app-DsvtcRUG.js} +2 -2
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-D6jqc3fJ.js → architectureDiagram-3BPJPVTR-gi467xY0.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-DY3AKuPD.js → blockDiagram-GPEHLZMM-B_gpcYiR.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CpD52V4g.js → c4Diagram-AAUBKEIU-DeylEYsQ.js} +1 -1
- package/dist/client/assets/channel-BoE8DeM4.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-CPeIHyAX.js → chunk-2J33WTMH-BL2WY0HN.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-ivAwI4xM.js → chunk-4BX2VUAB-BkLExGMe.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-BtVQ5XaZ.js → chunk-55IACEB6-CSTvCF5T.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-1eap1vDU.js → chunk-727SXJPM-9J8pKk4x.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-B2NB3BW9.js → chunk-AQP2D5EJ-DXC1vPWr.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-Hk_smNYv.js → chunk-FMBD7UC4-CFRUb-zD.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-BmGCAojk.js → chunk-ND2GUHAM-B87HFYS8.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-D0aXZ8CV.js → chunk-QZHKN3VN-CTjHiGbd.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-qnbLX_9_.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-qnbLX_9_.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-DAbu_gnF.js → cose-bilkent-S5V4N54A-D3Edq3L9.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-BdmLlrDJ.js → dagre-BM42HDAG-CwwbeQfN.js} +1 -1
- package/dist/client/assets/{dashboard-view-CULL1yhL.js → dashboard-view-BLAoW3D4.js} +1 -1
- package/dist/client/assets/{dashboard-view-PRCWCSLm.js → dashboard-view-DAlJxqiJ.js} +1 -1
- package/dist/client/assets/{dashboard-view-BoFBSXUn.js → dashboard-view-QxQwJFLz.js} +1 -1
- package/dist/client/assets/{dashboard-view-CxXMDfNY.js → dashboard-view-aPzfv99T.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-PpqLbVUA.js → diagram-2AECGRRQ-koJWWXE4.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-9rkGmTwh.js → diagram-5GNKFQAL-Yob5cOKT.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-BT-efOMo.js → diagram-KO2AKTUF-DelvFSkK.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-w79OWFxg.js → diagram-LMA3HP47-CMput2h2.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-Bye9I5IO.js → diagram-OG6HWLK6-04VXDl79.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-aodREgDf.js → erDiagram-TEJ5UH35-C9iP8Uyp.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-D0DKItY3.js → flowDiagram-I6XJVG4X-DENQvu_t.js} +1 -1
- package/dist/client/assets/{folder-open-CqvaMJvx.js → folder-open-D-554oji.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-CZVApkvw.js → ganttDiagram-6RSMTGT7-BqOttZAT.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-D_ynwJ4p.js → gitGraphDiagram-PVQCEYII-CDcydi-5.js} +1 -1
- package/dist/client/assets/{index-BzAldNrK.css → index-CXTd3LAB.css} +1 -1
- package/dist/client/assets/{index-DWRJyaa3.js → index-CtYRoouR.js} +264 -264
- package/dist/client/assets/{infoDiagram-5YYISTIA-pJG6zxjk.js → infoDiagram-5YYISTIA-B5LQQnxt.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-nFZ5laUo.js → ishikawaDiagram-YF4QCWOH-DpFEt7D2.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-CWpCaAIe.js → journeyDiagram-JHISSGLW-MELtgu22.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-ATkPspKa.js → kanban-definition-UN3LZRKU-h33PLATd.js} +1 -1
- package/dist/client/assets/{mermaid.core-CDXPNs7a.js → mermaid.core-Dk2mUPOq.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-BkqS9tpe.js → mindmap-definition-RKZ34NQL-B_T4O2-B.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-DEUyVLs-.js → pieDiagram-4H26LBE5-B1YIFkRl.js} +1 -1
- package/dist/client/assets/{puzzle-DQ0y1-XK.js → puzzle-hvecxlpJ.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-ESBJNK5c.js → quadrantDiagram-W4KKPZXB-BoGQR_hO.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-CqPs7zcv.js → requirementDiagram-4Y6WPE33-BSDmUBIx.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-CkFN0m14.js → sankeyDiagram-5OEKKPKP-Dz_GqOa5.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-Dx2nDuMO.js → sequenceDiagram-3UESZ5HK-B6twjYUH.js} +1 -1
- package/dist/client/assets/{shield-alert-BS05s4RM.js → shield-alert-BX4WRJOv.js} +1 -1
- package/dist/client/assets/{standing-instructions-template-xprxYNHm.js → standing-instructions-template-BJY317CC.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-EUPmRFGd.js → stateDiagram-AJRCARHV-DuwqWLx-.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-DcQ2mhi5.js → stateDiagram-v2-BHNVJYJU-Bu8Sk187.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-D4YO_3V-.js → timeline-definition-PNZ67QCA-BS6VnqSI.js} +1 -1
- package/dist/client/assets/{upload-BjyBtxo7.js → upload-CaDoyaMW.js} +1 -1
- package/dist/client/assets/{users-D5ogZ7WQ.js → users-C5uCLwVM.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-BT5_XuQL.js → vennDiagram-CIIHVFJN-CUbzqT5Y.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-X_ZMW457.js → wardley-L42UT6IY-Mv-NotFS.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-GK9nONHU.js → wardleyDiagram-YWT4CUSO-DuYpvLZX.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-Dw3zXHAq.js → xychartDiagram-2RQKCTM6-24_7QXdw.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +285 -47
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugin-sdk/index.d.ts +23 -0
- package/dist/plugin-sdk/index.js +2 -0
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-linear-import/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
- package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-quality/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-quality/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-todos/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-todos/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +2 -0
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/dist/client/assets/InsightsView-DOhO7xH5.js +0 -11
- package/dist/client/assets/SettingsModal-D4Fn4GlS.js +0 -21
- package/dist/client/assets/app-DBCGrz-f.js +0 -5
- package/dist/client/assets/channel-CaxOu15c.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-DXIkGbsl.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DXIkGbsl.js +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-
|
|
2
|
-
import{c as ha,
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-T767kKTg.js","assets/vendor-react-SZ_qB27O.js","assets/index-CtYRoouR.js","assets/vendor-i18n-Duky4gdQ.js","assets/vendor-codemirror-CcrtqoCy.js","assets/vendor-reactflow-BlIeoTu4.js","assets/vendor-reactflow-BnuhLJ6X.css","assets/vendor-xterm-BNq00GSj.js","assets/vendor-xterm-LZoznX6r.css","assets/index-CXTd3LAB.css","assets/standing-instructions-template-BJY317CC.js","assets/standing-instructions-template-Ddi_4TIk.css","assets/ExperimentalAgentOnboardingModal-BwJuzkzB.js","assets/ExperimentalAgentOnboardingModal-3ZEFv8sr.css","assets/AgentPermissionPolicyEditor--u9jyUf2.js","assets/AgentPermissionPolicyEditor-CXib-igK.css","assets/AgentDetailView-Cc3ATg8a.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{c as ha,bW as pt,ea as Us,an as Ht,Z as Gs,eb as Ks,bh as ns,bN as Ys,ec as Xs,c4 as ls,cb as aa,ed as qs,c2 as is,ee as sa,aH as na,az as Zs,C as Js,g as rs,c3 as la,d7 as os,F as cs,co as Qs,cr as en,bS as Dt,ef as tn,ad as an,aj as sn,B as nn,am as Ft,dY as Fa,c9 as ln,aJ as $a,cw as rn,ak as on,al as cn,eg as dn,aI as un,L as Ut,a$ as Nt,R as mt,X as za,dQ as gn,eh as mn,dx as At,ab as hn,dz as Gt,aX as pn,aY as bn,bL as de,bT as $e,ei as fn,cn as ht,dc as xn,ej as vn,ek as Oa,V as jn,el as yn,P as Va,em as Nn,bX as Pt,bV as wt,x as Ba,en as wn,cC as kn,eo as Cn,ep as An,c5 as Wa,ct as dt,cs as kt,a3 as Sn,c7 as Rn,eq as Tn,cc as Ua,c6 as En}from"./index-CtYRoouR.js";import{r as s,j as e,b as In}from"./vendor-react-SZ_qB27O.js";import{w as Ga,a as Mn,f as _n,r as Pn}from"./standing-instructions-template-BJY317CC.js";import{u as _e}from"./vendor-i18n-Duky4gdQ.js";import{g as Ln,O as Kt,i as Ka,r as Hn}from"./agentsOrgChartLayout-CKuzbhFf.js";import{c as Yt,s as Dn,g as Fn,f as Ya}from"./agent-import-generation-DnqVkPkz.js";import{ExperimentalAgentOnboardingModal as $n}from"./ExperimentalAgentOnboardingModal-BwJuzkzB.js";import{U as ia}from"./upload-CaDoyaMW.js";import{F as zn}from"./folder-open-D-554oji.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-reactflow-BlIeoTu4.js";import"./vendor-xterm-BNq00GSj.js";/**
|
|
3
3
|
* @license lucide-react v1.7.0 - ISC
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under the ISC license.
|
|
6
6
|
* See the LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/const
|
|
7
|
+
*/const On=[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]],Xa=ha("network",On);/**
|
|
8
8
|
* @license lucide-react v1.7.0 - ISC
|
|
9
9
|
*
|
|
10
10
|
* This source code is licensed under the ISC license.
|
|
@@ -14,11 +14,11 @@ import{c as ha,bL as pt,e8 as Us,an as Ht,Z as Gs,e9 as Ks,bh as ns,c1 as Ys,ea
|
|
|
14
14
|
*
|
|
15
15
|
* This source code is licensed under the ISC license.
|
|
16
16
|
* See the LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/const Wn=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],Un=ha("zoom-out",Wn);function qa(n){return typeof n=="number"&&Number.isFinite(n)?n:0}function ut(n){return n.toLocaleString()}function Gn({agents:n}){const{t:l}=_e("app"),{rows:d,totalInputTokens:u,totalOutputTokens:h,totalTokens:a}=s.useMemo(()=>{const p=n.map(i=>{const f=qa(i.totalInputTokens),k=qa(i.totalOutputTokens);return{id:i.id,name:i.name,inputTokens:f,outputTokens:k,totalTokens:f+k}}).sort((i,f)=>f.totalTokens-i.totalTokens||i.name.localeCompare(f.name)||i.id.localeCompare(f.id));return{rows:p,totalInputTokens:p.reduce((i,f)=>i+f.inputTokens,0),totalOutputTokens:p.reduce((i,f)=>i+f.outputTokens,0),totalTokens:p.reduce((i,f)=>i+f.totalTokens,0)}},[n]),v=a>0;return e.jsxs("section",{className:"agent-token-stats-panel","aria-label":l("agents.tokenStatistics","Agent token usage statistics"),children:[e.jsx("header",{className:"agent-token-stats-panel__header",children:e.jsx("h3",{className:"agent-token-stats-panel__title",children:l("agents.tokenUsageByAgent","Token Usage by Agent")})}),e.jsxs("div",{className:"agent-token-stats-panel__totals",role:"list","aria-label":l("agents.tokenUsageTotals","Token usage totals"),children:[e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:l("agents.inputTokens","Input Tokens")}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:ut(u)})]}),e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:l("agents.outputTokens","Output Tokens")}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:ut(h)})]}),e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:l("agents.combinedTokens","Combined Tokens")}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:ut(a)})]})]}),v?e.jsx("div",{className:"agent-token-stats-panel__table-wrapper",children:e.jsxs("table",{className:"agent-token-stats-panel__table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{scope:"col",children:l("agents.agent","Agent")}),e.jsx("th",{scope:"col",children:l("agents.input","Input")}),e.jsx("th",{scope:"col",children:l("agents.output","Output")}),e.jsx("th",{scope:"col",children:l("agents.total","Total")})]})}),e.jsx("tbody",{children:d.map(p=>e.jsxs("tr",{children:[e.jsxs("th",{scope:"row",className:"agent-token-stats-panel__agent-cell",children:[e.jsx("span",{className:"agent-token-stats-panel__agent-name",children:p.name}),e.jsx("span",{className:"agent-token-stats-panel__agent-id",children:p.id})]}),e.jsx("td",{children:ut(p.inputTokens)}),e.jsx("td",{children:ut(p.outputTokens)}),e.jsx("td",{className:"agent-token-stats-panel__total-cell",children:ut(p.totalTokens)})]},p.id))})]})}):e.jsx("div",{className:"agent-token-stats-panel__empty",role:"status",children:l("agents.noTokenUsageYet","No token usage recorded yet. Token totals appear here once agents run.")})]})}const Kn=[{icon:pt,label:"Active Agents",valueKey:"activeCount",className:"agent-metric-card--active"},{icon:Us,label:"Assigned Tasks",valueKey:"assignedTaskCount",className:"agent-metric-card--tasks"},{icon:Ht,label:"Success Rate",valueKey:"successRate",className:"agent-metric-card--success"},{icon:Gs,label:"Total Runs",valueKey:"completedRuns",className:"agent-metric-card--runs"}];function Yn({stats:n,className:l=""}){return n?e.jsx("div",{className:`agent-metrics-bar ${l}`.trim(),children:Kn.map(d=>{const u=d.valueKey==="successRate"?`${Math.round(n.successRate*100)}%`:n[d.valueKey];return e.jsxs("div",{className:`agent-metric-card ${d.className}`,children:[e.jsx(d.icon,{size:18}),e.jsxs("div",{className:"agent-metric-info",children:[e.jsx("span",{className:"agent-metric-value",children:u}),e.jsx("span",{className:"agent-metric-label",children:d.label})]})]},d.label)})}):null}const St=200;function Xt(n){return n.slice(-St).reverse().map(l=>({type:l.type??"text",text:l.text??"",timestamp:l.timestamp||void 0,...l.content!==void 0?{content:l.content}:{}}))}function Xn(n,l){const[d,u]=s.useState([]),[h,a]=s.useState(!1),v=s.useRef(null),p=s.useRef(!1),i=s.useRef([]),f=s.useRef(0),k=s.useRef(n),I=s.useRef(l);return(k.current!==n||I.current!==l)&&(k.current=n,I.current=l,f.current++,v.current&&(v.current(),v.current=null),p.current=!1,i.current=[],u([]),a(!1)),s.useEffect(()=>{if(!n){u([]),a(!1);return}const A=f.current;let P=`/api/tasks/${encodeURIComponent(n)}/logs/stream`;l&&(P+=`?projectId=${encodeURIComponent(l)}`);const T=()=>f.current!==A,W=Ks({run:async()=>{if(p.current||T())return;p.current=!0,i.current=[];let w=!1;try{const y=await Ys(n,l,{limit:St});if(T())return;const _=i.current;i.current=[],w=!0,u(Xt(Xs(y.entries,_)))}finally{if(p.current=!1,!w&&!T()){const y=i.current;i.current=[],y.length>0&&u(_=>[...Xt(y),..._].slice(0,St))}}}}),U=ns(P,{onReconnect:()=>W.trigger(),events:{"agent:log":w=>{if(!T())try{const y=JSON.parse(w.data),_={type:y.type??"text",text:y.text??y.content??"",timestamp:y.timestamp??"",taskId:n,...y.content!==void 0?{content:y.content}:{}};if(p.current){i.current.push(_);return}u(Y=>{const O=[...Xt([_]),...Y];return O.length>St?O.slice(0,St):O})}catch{}}},onOpen:()=>{f.current===A&&a(!0)},onError:()=>{f.current===A&&a(!1)}});return v.current=U,()=>{W.dispose(),U(),v.current=null,f.current===A&&a(!1)}},[n,l]),{entries:d,isConnected:h}}const ra=3e4,ds=1e4,us={"task:started":"in-flight","task:handed-off":"delegation","task:completed":"terminal","agent:state-changed":"ignored","workflow:gate-passed":"terminal","workflow:gate-failed":"terminal","approval:requested":"in-flight"};function Rt(n){if(typeof n!="string")return null;const l=Date.parse(n);return Number.isFinite(l)?l:null}function oa(n,l){const d=Rt(n.occurredAt),u=Rt(l.occurredAt);return d!==null&&u!==null&&d!==u?u-d:d===null&&u!==null?1:d!==null&&u===null?-1:n.eventId<l.eventId?1:n.eventId>l.eventId?-1:0}function ca(n,l){return`${n}\0${l}`}function qn(n,l){const d=Rt(n.occurredAt);return{...n,activityWindowOccurredAt:d===null?void 0:Math.min(d,l)}}function pa(n,l){const d=Rt(n.occurredAt);if(d===null)return null;const u=typeof n.activityWindowOccurredAt=="number"?n.activityWindowOccurredAt:Math.min(d,l);return Math.max(0,l-u)}function Zn(n,l){return ls(n,1,l).label==="Unresponsive"}function Jn(n,l,d,u){if(n.state==="error"||(u?.label??(Zn(n,d)?"Unresponsive":""))==="Unresponsive")return"error";if(n.state==="running")return"active";if(!l)return"unknown";const h=us[l.type],a=pa(l,d);return a===null?"unknown":h==="terminal"?"idle":h==="in-flight"?a<ra?"active":"idle":a>=ra?"idle":"unknown"}function Za(n,l){return l.fromAgentId===n.parentId&&l.toAgentId===n.childId?"down":l.fromAgentId===n.childId&&l.toAgentId===n.parentId?"up":null}function Qn(n,l,d){const u=new Map,h=new Map;for(const a of l){if(us[a.type]!=="delegation")continue;const v=pa(a,d);if(!(v===null||v>=ds))for(const p of n){if(!Za(p,a))continue;const i=ca(p.parentId,p.childId),f=h.get(i);(!f||oa(a,f)<0)&&h.set(i,a)}}for(const a of n){const v=ca(a.parentId,a.childId),p=h.get(v);u.set(v,p?Za(a,p):null)}return u}const Ja=200,el=1e3;class tl{listeners=new Set;retainers=new Map;events=[];activityByAgentId=new Map;seenIds=new Set;unsubscribe=null;abortController=null;expiryTimer=null;projectId;contextVersion=0;closeVersion=0;snapshot={events:[],activityByAgentId:new Map,nowTick:Date.now()};subscribe=l=>(this.listeners.add(l),()=>this.listeners.delete(l));getSnapshot=()=>this.snapshot;retain(l,d){const u=this.projectId;if(this.retainers.set(l,d),this.closeVersion++,u!==d){this.switchProject(d);return}if(this.retainers.size===1){if(this.unsubscribe)return;this.open(d)}}release(l){if(this.retainers.delete(l),this.retainers.size!==0)return;const d=++this.closeVersion;queueMicrotask(()=>{this.retainers.size===0&&this.closeVersion===d&&this.close()})}switchProject(l){this.closeTransport(),this.projectId=l,this.contextVersion++,this.events=[],this.activityByAgentId.clear(),this.seenIds.clear(),this.publish(),this.openTransport()}open(l){this.projectId=l,this.contextVersion++,this.openTransport()}openTransport(){const l=this.contextVersion,d=this.projectId?`?projectId=${encodeURIComponent(this.projectId)}`:"",u=this.projectId;this.unsubscribe=ns(`/api/events${d}`,{events:{"agent:activity":h=>this.handleFrame(h,l,u)},onReconnect:()=>this.seed(l,u)}),this.seed(l,u)}closeTransport(){this.unsubscribe?.(),this.unsubscribe=null,this.abortController?.abort(),this.abortController=null,this.stopExpiryClock()}close(){this.closeTransport()}async seed(l,d){this.abortController?.abort();const u=new AbortController;this.abortController=u;try{const h=await Ln({limit:Ja,projectId:d},{signal:u.signal});if(u.signal.aborted||l!==this.contextVersion||d!==this.projectId)return;let a=!1;for(const v of h.events)a=this.mergeEvent(v,d)||a;a&&this.publish(),this.updateExpiryClock()}catch{}finally{this.abortController===u&&(this.abortController=null)}}handleFrame(l,d,u){if(!(d!==this.contextVersion||u!==this.projectId))try{const h=JSON.parse(String(l.data));if("truncated"in h){this.seed(d,u);return}this.mergeEvent(h,u)&&this.publish(),this.updateExpiryClock()}catch{}}mergeEvent(l,d){if(d!==void 0&&l?.projectId!==d||!l||typeof l.eventId!="string"||this.seenIds.has(l.eventId)||Rt(l.occurredAt)===null)return!1;this.seenIds.add(l.eventId),this.events.push(qn(l,Date.now())),this.events.sort(oa),this.events.length>Ja&&this.events.pop(),this.activityByAgentId.clear();for(const u of this.events){const h=this.activityByAgentId.get(u.agentId);(!h||oa(u,h)<0)&&this.activityByAgentId.set(u.agentId,u)}return!0}canExpire(l){return this.events.some(d=>{const u=pa(d,l);return u!==null&&(u<ra||u<ds)})}updateExpiryClock(){this.retainers.size===0||!this.canExpire(Date.now())||this.expiryTimer||(this.expiryTimer=setInterval(()=>{const l=Date.now();this.publish(l),this.canExpire(l)||this.stopExpiryClock()},el))}stopExpiryClock(){this.expiryTimer&&(clearInterval(this.expiryTimer),this.expiryTimer=null)}publish(l=Date.now()){this.snapshot={events:[...this.events],activityByAgentId:new Map(this.activityByAgentId),nowTick:l};for(const d of this.listeners)d()}resetForTests(){this.closeTransport(),this.listeners.clear(),this.retainers.clear(),this.events=[],this.activityByAgentId.clear(),this.seenIds.clear(),this.projectId=void 0,this.contextVersion=0,this.closeVersion++,this.snapshot={events:[],activityByAgentId:new Map,nowTick:Date.now()}}}const Ct=new tl;let al=0;function gs(n){const l=s.useRef(null);return l.current||(l.current=`agent-activity-${++al}`),s.useEffect(()=>{const d=l.current;return Ct.retain(d,n),()=>Ct.release(d)},[n]),s.useSyncExternalStore(Ct.subscribe,Ct.getSnapshot,Ct.getSnapshot)}const sl=5e3;function nl({agent:n,projectId:l,onSelect:d,onOpenTaskLogs:u,activity:h}){const{t:a}=_e("app"),{entries:v,isConnected:p}=Xn(n.taskId,l),[i,f]=s.useState(null),k=s.useRef(null),[I,E]=s.useState(!1);s.useEffect(()=>{if(typeof IntersectionObserver>"u"){E(!0);return}const R=k.current;if(!R)return;const F=new IntersectionObserver(([X])=>{E(X?.isIntersecting??!0)},{rootMargin:"200px"});return F.observe(R),()=>F.disconnect()},[n.id]),s.useEffect(()=>{if(!n.taskId){f(null);return}if(!I)return;let R=!1,F;const X=async()=>{try{const D=await Zs(n.taskId,l);R||f(D)}catch{}finally{R||(F=setTimeout(X,sl))}};return X(),()=>{R=!0,F&&clearTimeout(F)}},[n.taskId,I,l]);const A=n.lastHeartbeatAt?Math.floor((Date.now()-new Date(n.lastHeartbeatAt).getTime())/1e3):0,P=(()=>{if(!n.lastHeartbeatAt)return null;const R=aa(n.runtimeConfig?.heartbeatIntervalMs),F=new Date(n.lastHeartbeatAt).getTime()+R,X=Math.round((F-Date.now())/1e3);return Number.isFinite(X)?X<=0?a("agents.heartbeatOverdue","Heartbeat overdue {{elapsed}}",{elapsed:qt(-X)}):a("agents.nextHeartbeat","Next heartbeat in {{elapsed}}",{elapsed:qt(X)}):null})(),{stepNumber:T,totalSteps:M,hasSteps:W}=qs(i),U=i?.steps?.[T],w=W?i?.steps?.slice(0,T).map((R,F)=>({step:R,index:F})).filter(({step:R})=>R.status==="done"||R.status==="skipped").at(-1):void 0,y=i?.modelId,_=()=>{d&&d(n.id)},Y=R=>{R.stopPropagation(),n.taskId&&u&&u(n.taskId)},O=R=>{(R.key==="Enter"||R.key===" ")&&(R.preventDefault(),_())};return e.jsxs("div",{ref:k,className:"live-agent-card",onClick:_,onKeyDown:O,role:"button",tabIndex:0,"aria-label":a("agents.selectAgent","Select agent {{name}}",{name:n.name}),children:[e.jsxs("div",{className:"live-agent-card-header",children:[e.jsxs("div",{className:"live-agent-card-name",children:[e.jsx("span",{className:`status-dot ${n.state==="running"?"status-dot--pending":"status-dot--online"}`,"aria-hidden":"true"}),e.jsx("span",{children:n.name})]}),n.taskId&&e.jsx("span",{className:"live-agent-task badge",children:e.jsx(is,{taskId:n.taskId,taskColumn:n.taskColumn})}),n.taskId&&e.jsx(sa,{taskId:n.taskId,isInViewport:I,projectId:l})]}),(h?.summary||w)&&e.jsxs("div",{className:"live-agent-card-activity",children:[h?.summary&&e.jsx("div",{className:"live-agent-card-now-doing",children:h.summary}),w&&e.jsxs("div",{className:"live-agent-card-last-step",children:["Last completed Step ",w.index,": ",w.step.name]})]}),e.jsx("div",{className:"live-agent-card-transcript",children:v.length===0?e.jsx("div",{className:"live-agent-card-empty",children:n.taskId?U?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"live-agent-card-status",children:a("agents.step","Step {{number}}{{total}}: {{name}}",{number:T,total:M?`/${M}`:"",name:U.name})}),y&&e.jsx("div",{className:"live-agent-card-status-sub",children:y}),e.jsx("div",{className:"live-agent-card-status-sub",children:p?a("agents.waitingOutput","Waiting for output..."):a("agents.connectingStream","Connecting to log stream...")})]}):e.jsx("span",{children:p?a("agents.waitingOutput","Waiting for output..."):a("agents.connecting","Connecting...")}):e.jsx("span",{children:n.state==="running"?a("agents.starting","Starting..."):a("agents.idleNoTask","Idle — no task assigned")})}):v.slice(0,20).map((R,F)=>e.jsx("div",{className:"live-agent-card-line",children:R.text},F))}),e.jsxs("div",{className:"live-agent-card-footer",children:[e.jsxs("div",{className:"live-agent-card-footer-meta",children:[e.jsx("span",{className:"text-secondary",title:a("agents.timeSinceLastHeartbeat","Time since last heartbeat"),children:qt(A)}),P&&e.jsx("span",{className:"live-agent-card-next-heartbeat",title:P,children:P})]}),e.jsxs("div",{className:"live-agent-card-footer-actions",children:[n.taskId&&u&&e.jsxs("button",{type:"button",className:"live-agent-card-logs-btn",onClick:Y,title:a("agents.viewLiveLogs","View live run logs"),"aria-label":a("agents.viewLogsFor","View live logs for {{taskId}}",{taskId:n.taskId}),children:[e.jsx(na,{size:12}),e.jsx("span",{children:a("agents.liveLogs","Live logs")})]}),p&&e.jsx(pt,{size:12,className:"live-agent-streaming-dot"})]})]})]})}function qt(n){return n<60?`${n}s`:n<3600?`${Math.floor(n/60)}m ${n%60}s`:`${Math.floor(n/3600)}h ${Math.floor(n%3600/60)}m`}function ll({agents:n,projectId:l,onAgentSelect:d,onOpenTaskLogs:u,className:h=""}){const{t:a}=_e("app"),v=gs(l),p=Array.from(new Map(n.map(i=>[i.id,i])).values());return p.length===0?null:e.jsxs("div",{className:`active-agents-panel ${h}`.trim(),children:[e.jsxs("div",{className:"active-agents-panel-header",children:[e.jsx(pt,{size:16}),e.jsx("span",{children:a("agents.activeAgents","Active Agents ({{count}})",{count:p.length})})]}),e.jsx("div",{className:"active-agents-grid",children:p.map(i=>e.jsx(nl,{agent:i,projectId:l,onSelect:d,onOpenTaskLogs:u,activity:v.activityByAgentId.get(i.id)},i.id))})]})}function il({stats:n,activeAgents:l,projectId:d,isOpen:u,onToggle:h,onSelectAgent:a,onOpenTaskLogs:v}){const{t:p}=_e("app"),i=l.filter(k=>k.state==="active").length,f=l.filter(k=>k.state==="running").length;return e.jsxs("section",{className:"agents-overview-bar","aria-label":p("agents.overviewLabel","Agents overview"),children:[e.jsxs("button",{type:"button",className:"agents-overview-bar__toggle","aria-expanded":u,onClick:h,children:[e.jsxs("span",{className:"agents-overview-bar__title-wrap",children:[u?e.jsx(Js,{size:16,"aria-hidden":"true"}):e.jsx(rs,{size:16,"aria-hidden":"true"}),e.jsx("span",{className:"agents-overview-bar__title",children:p("agents.overview","Overview")})]}),e.jsx("span",{className:"agents-overview-bar__meta text-secondary",children:p("agents.statusCount","{{activeCount}} active · {{runningCount}} running",{activeCount:i,runningCount:f})})]}),u?e.jsxs("div",{className:"agents-overview-bar__content",children:[e.jsx(Yn,{stats:n,className:"agents-overview-bar__metrics"}),e.jsx(ll,{agents:l,projectId:d,onAgentSelect:a,onOpenTaskLogs:v,className:"agents-overview-bar__active-panel"})]}):null]})}function Zt({title:n="No agents found",description:l="Create an agent to get started",ctaLabel:d="Create Agent",onCtaClick:u}){return e.jsxs("div",{className:"agent-empty",children:[e.jsx(la,{size:48,opacity:.3,className:"agent-empty-state__icon"}),e.jsx("p",{className:"agent-empty-state__title",children:n}),e.jsx("p",{className:"agent-empty-state__description text-secondary",children:l}),u?e.jsx("button",{type:"button",className:"btn btn-task-create btn-sm",onClick:u,children:d}):null]})}const Qa=3,Jt=1e3;function rl({isOpen:n,onClose:l,onGenerated:d,projectId:u}){const{t:h}=_e("app");os(n);const[a,v]=s.useState(""),[p,i]=s.useState({type:"input"}),[f,k]=s.useState(null),[I,E]=s.useState(!1),A=s.useRef(null),P=s.useRef(null);s.useEffect(()=>{n&&p.type==="input"&&P.current?.focus()},[n,p.type]),s.useEffect(()=>{if(!n&&A.current){const y=A.current;A.current=null,Yt(y,u).catch(()=>{})}},[n,u]),s.useEffect(()=>{if(!n)return;const y=_=>{_.key==="Escape"&&T()};return document.addEventListener("keydown",y),()=>document.removeEventListener("keydown",y)},[n]);const T=s.useCallback(()=>{if(A.current){const y=A.current;A.current=null,Yt(y,u).catch(()=>{})}v(""),i({type:"input"}),k(null),E(!1),l()},[l,u]),M=s.useCallback(async()=>{if(!(!a.trim()||a.trim().length<Qa)){k(null),i({type:"loading"});try{const{sessionId:y}=await Dn(a.trim(),u);A.current=y;const{spec:_}=await Fn(y,u);i({type:"preview",spec:_,sessionId:y})}catch(y){const _=y instanceof Error?y.message:"Failed to generate agent specification";_.includes("429")||_.toLowerCase().includes("rate limit")?k(h("agents.generation.rateLimited","Too many requests. Please wait a moment and try again.")):k(_),i({type:"input"}),A.current=null}}},[a,u]),W=s.useCallback(async()=>{if(A.current){const y=A.current;A.current=null;try{await Yt(y,u)}catch{}}await M()},[M,u]),U=s.useCallback(()=>{p.type==="preview"&&(A.current=null,d(p.spec),v(""),i({type:"input"}),k(null),E(!1),l())},[p,d,l]);if(!n)return null;const w=a.trim().length>=Qa&&a.trim().length<=Jt;return e.jsx(cs,{windowKey:"agent-generation",modal:!0,title:h("agents.generation.title","Generate Agent"),ariaLabel:h("agents.generateWithAiLabel","Generate agent with AI"),onClose:T,hideHeader:!0,dragHandleSelector:".agent-generation-modal .agent-dialog-header",className:"floating-window--agent-generation",defaultSize:{width:640,height:560},minSize:{width:400,height:300},persistGeometryKey:"floating-window:agent-generation",suspendGeometryPersistenceOnMobile:!0,suspendGeometryPersistenceOnShortViewport:!0,closeOnOutsidePointerDown:!0,children:e.jsxs("div",{className:"agent-dialog agent-generation-modal",children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsxs("span",{className:"agent-dialog-header-title",children:[e.jsx("span",{className:"agent-dialog-header-sparkle",children:"✨"}),h("agents.generation.title","Generate Agent")]}),e.jsx("button",{className:"modal-close",onClick:T,"aria-label":h("actions.close","Close"),children:"×"})]}),e.jsxs("div",{className:"agent-dialog-body",children:[f&&e.jsx("div",{className:"agent-dialog-error-banner",children:f}),p.type==="input"&&e.jsxs("div",{children:[e.jsx("p",{className:"agent-dialog-info",children:h("agents.generation.info","Describe your agent's role and the AI will generate a complete specification including system prompt, suggested configuration, and more.")}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-role-description",children:h("agents.generation.roleLabel","Role Description")}),e.jsx("textarea",{ref:P,id:"agent-role-description",className:"input agent-dialog-textarea",rows:4,placeholder:h("agents.generation.rolePlaceholder",'e.g. "Senior frontend code reviewer who specializes in React accessibility"'),value:a,onChange:y=>v(y.target.value),onKeyDown:y=>{y.key==="Enter"&&!y.shiftKey&&w&&(y.preventDefault(),M())},maxLength:Jt,"aria-describedby":"role-description-hint"}),e.jsxs("div",{id:"role-description-hint",className:"agent-dialog-hint",children:[e.jsx("span",{children:h("agents.generation.roleHint","Describe what your agent should do")}),e.jsxs("span",{children:[a.length,"/",Jt]})]})]})]}),p.type==="loading"&&e.jsxs("div",{className:"agent-dialog-loading-center",children:[e.jsx("div",{className:"agent-dialog-spinner spin"}),e.jsx("p",{className:"agent-dialog-loading-text",children:h("agents.generation.loading","Generating agent specification...")})]}),p.type==="preview"&&e.jsxs("div",{children:[e.jsxs("div",{className:"agent-dialog-summary agent-dialog-summary--spaced",children:[e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:h("agents.generation.previewTitle","Title")}),e.jsxs("span",{className:"agent-dialog-summary-row-value",children:[p.spec.icon," ",p.spec.title]})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:h("agents.generation.previewRole","Role")}),e.jsx("span",{children:p.spec.role})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:h("agents.generation.previewDescription","Description")}),e.jsx("span",{className:"agent-dialog-summary-row-value agent-dialog-summary-row-value--body",children:p.spec.description})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:h("agents.generation.previewThinking","Thinking")}),e.jsx("span",{className:"agent-dialog-summary-row-value agent-dialog-summary-row-value--capitalize",children:p.spec.thinkingLevel})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:h("agents.generation.previewMaxTurns","Max Turns")}),e.jsx("span",{children:p.spec.maxTurns})]})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{children:[h("agents.generation.systemPrompt","System Prompt"),e.jsx("button",{type:"button",className:"agent-dialog-expand-btn",onClick:()=>E(!I),children:I?h("agents.generation.collapse","Collapse"):h("agents.generation.expand","Expand")})]}),e.jsxs("div",{className:`agent-generation-prompt-box${I?"":" agent-generation-prompt-box--collapsed"}`,children:[p.spec.systemPrompt,!I&&p.spec.systemPrompt.length>500&&e.jsx("div",{className:"agent-generation-prompt-fade"})]})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[e.jsx("button",{className:"btn",onClick:T,children:h("actions.cancel","Cancel")}),p.type==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void M(),disabled:!w,children:h("agents.generation.generate","Generate")}),p.type==="preview"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn",onClick:()=>void W(),children:h("agents.generation.regenerate","Regenerate")}),e.jsx("button",{className:"btn btn-task-create",onClick:U,children:h("agents.generation.useThis","Use This")})]})]})]})})}const Qt=[{value:"triage"},{value:"executor"},{value:"reviewer"},{value:"merger"},{value:"scheduler"},{value:"engineer"},{value:"custom"}];function ol({isOpen:n,onClose:l,onCreated:d,projectId:u,prefillDraft:h=null,agentOnboardingEnabled:a=!1,existingAgents:v=[],onPrefillDraft:p}){const{t:i}=_e("app"),f=o=>({triage:i("agents.roleTriage","Triage"),executor:i("agents.roleExecutor","Executor"),reviewer:i("agents.roleReviewer","Reviewer"),merger:i("agents.roleMerger","Merger"),scheduler:i("agents.roleScheduler","Scheduler"),engineer:i("agents.roleEngineer","Engineer"),custom:i("agents.roleCustom","Custom")})[o]??o,[k,I]=s.useState(0),[E,A]=s.useState("presets"),[P,T]=s.useState(""),[M,W]=s.useState(""),[U,w]=s.useState(""),[y,_]=s.useState("custom"),[Y,O]=s.useState([]),[R,F]=s.useState(""),[X,D]=s.useState(""),[ge,le]=s.useState(""),[fe,G]=s.useState(""),[S,me]=s.useState(""),[ye,z]=s.useState(""),[ee,he]=s.useState({model:"",thinkingLevel:"off",maxTurns:1e3}),[Oe,Pe]=s.useState(null),[oe,Le]=s.useState([]),[J,Ne]=s.useState(!1),[Se,we]=s.useState(null),[q,te]=s.useState(!1),[xe,He]=s.useState(!1),{favoriteProviders:Re,favoriteModels:ze,toggleFavoriteProvider:We,toggleFavoriteModel:Qe}=Qs(),[Ve,bt]=s.useState([]),[Ee,B]=s.useState(!1),[K,Te]=s.useState("model"),[pe,Ie]=s.useState(""),[ke,De]=s.useState([]),[Ue,c]=s.useState(!1),[C,H]=s.useState([]),[be,ae]=s.useState(!1);s.useEffect(()=>{n&&(B(!0),en().then(o=>{bt(o.models)}).catch(()=>{}).finally(()=>B(!1)))},[n]),s.useEffect(()=>{n&&(ae(!0),H([]),Dt(void 0,u).then(o=>{H(o)}).catch(()=>{H([])}).finally(()=>ae(!1)))},[n,u]),s.useEffect(()=>{if(!n)return;const o=ln;if(typeof o!="function"){De([]),c(!1);return}c(!0),De([]),o(u).then(N=>{De(N)}).catch(()=>{De([])}).finally(()=>c(!1))},[n,u]);const V=ee.model.includes("/")?ee.model:"",et=V?V.split("/")[0]:"default",Q=s.useCallback(o=>{const N=tn.has(o.role)?o.role:"custom";T(o.title),W(o.description),w(o.icon),_(N),O([]),le(o.systemPrompt),he(ie=>({...ie,thinkingLevel:o.thinkingLevel,maxTurns:o.maxTurns})),te(!1),I(1)},[]),se=s.useCallback(o=>{he(N=>({...N,model:o}))},[]),ft=s.useCallback(o=>{Te(o),o==="model"&&Ie("")},[]),Et=s.useCallback(o=>{const N=an(o);Pe(o.id),T(N.name),w(N.icon??""),W(N.title??""),_(N.role),O([]),me(N.soul??""),le(N.instructionsText??""),I(1)},[]),tt=s.useCallback(o=>{const N=sn(o);I(1),A("custom"),T(N.name),W(N.title??""),w(N.icon??""),_(N.role),O([]),F(N.reportsTo??""),le(Ga(N.instructionsText??"")),G(N.heartbeatProcedurePath??""),me(N.soul??""),z(N.memory??""),Le(N.skills??[]),he(ie=>({...ie,model:N.model??"",thinkingLevel:N.thinkingLevel??ie.thinkingLevel,maxTurns:N.maxTurns??ie.maxTurns})),N.runtimeHint?(Te("runtime"),Ie(N.runtimeHint)):(Te("model"),Ie(""))},[]);if(s.useEffect(()=>{!n||!h||tt(h)},[n,h,tt]),!n)return null;const Ae=()=>{I(0),A("presets"),T(""),W(""),w(""),_("custom"),F(""),D(""),le(""),G(""),me(""),z(""),he({model:"",thinkingLevel:"off",maxTurns:1e3}),Te("model"),Ie(""),Pe(null),Le([]),O([]),we(null),te(!1),He(!1),l()},at=async()=>{if(P.trim()){Ne(!0),we(null);try{await on(cn({name:P,role:y,roles:[y,...Y],title:M,icon:U,reportsTo:R,instructionsPath:X,instructionsText:ge,heartbeatProcedurePath:fe,soul:S,memory:ye,model:K==="model"?ee.model:"",runtimeHint:K==="runtime"?pe:"",thinkingLevel:ee.thinkingLevel,maxTurns:ee.maxTurns,skills:oe}),u),Ae(),d()}catch(o){we(o instanceof Error?o.message:i("agents.createError","Failed to create agent"))}finally{Ne(!1)}}},st=Qt.find(o=>o.value===y),Be=R.trim(),ue=Be?C.find(o=>o.id===Be):void 0,Me=pe?ke.find(o=>o.runtimeId===pe):void 0,nt=o=>e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{id:o,children:i("agents.runtimeSource","Runtime Source")}),e.jsxs("div",{className:"agent-runtime-mode-toggle",role:"radiogroup","aria-labelledby":o,children:[e.jsxs("label",{className:`agent-runtime-mode-option${K==="model"?" agent-runtime-mode-option--active":""}`,children:[e.jsx("input",{type:"radio",name:o,value:"model",checked:K==="model",onChange:()=>ft("model")}),e.jsx("span",{children:i("agents.runtimeSourceBuiltIn","Built-in Model")})]}),e.jsxs("label",{className:`agent-runtime-mode-option${K==="runtime"?" agent-runtime-mode-option--active":""}`,children:[e.jsx("input",{type:"radio",name:o,value:"runtime",checked:K==="runtime",onChange:()=>ft("runtime")}),e.jsx("span",{children:i("agents.runtimeSourcePlugin","Plugin Runtime")})]})]})]}),K==="model"?e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{children:i("agents.model","Model")}),Ee?e.jsx("div",{className:"agent-dialog-loading",children:e.jsx($a,{label:i("agents.loadingModels","Loading models…")})}):e.jsx(rn,{id:"agent-model",label:i("agents.model","Model"),value:V,onChange:se,models:Ve,placeholder:i("agents.modelPlaceholder","Select a model…"),favoriteProviders:Re,onToggleFavorite:We,favoriteModels:ze,onToggleModelFavorite:Qe,thinkingLevel:ee.thinkingLevel,onThinkingLevelChange:N=>he(ie=>({...ie,thinkingLevel:N}))})]}):e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-runtime-hint",children:i("agents.runtime","Runtime")}),Ue?e.jsx("div",{className:"agent-dialog-loading",children:e.jsx($a,{label:i("agents.loadingRuntimes","Loading runtimes…")})}):e.jsxs("select",{id:"agent-runtime-hint",className:"select",value:pe,onChange:N=>Ie(N.target.value),children:[e.jsx("option",{value:"",children:ke.length>0?i("agents.runtimePlaceholder","Select a plugin runtime…"):i("agents.runtimeEmpty","No plugin runtimes available")}),ke.map(N=>e.jsx("option",{value:N.runtimeId,children:N.description?`${N.name} — ${N.description}`:N.name},`${N.pluginId}:${N.runtimeId}`))]})]})]});return In.createPortal(e.jsxs("div",{className:"agent-dialog-overlay",onClick:o=>{o.target===o.currentTarget&&Ae()},children:[e.jsxs("div",{className:"agent-dialog",role:"dialog","aria-modal":"true","aria-label":i("agents.dialogAriaLabel","Create new agent"),children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsx("span",{className:"agent-dialog-header-title",children:i("agents.dialogTitle","New Agent")}),e.jsx("button",{className:"btn-icon",onClick:Ae,"aria-label":i("agents.closeAriaLabel","Close"),children:"×"})]}),e.jsx("div",{className:"agent-dialog-steps",children:[0,1,2].map(o=>e.jsx("div",{className:`agent-dialog-step${o===k?" active":o<k?" completed":""}`,"aria-label":i("agents.stepAriaLabel","Step {{step}}",{step:o+1})},o))}),e.jsxs("div",{className:"agent-dialog-body",children:[k===0&&e.jsxs("div",{children:[a&&e.jsx("div",{className:"agent-dialog-step-zero-actions",children:e.jsx("button",{type:"button",className:"btn agent-dialog-interview-btn",onClick:()=>He(!0),children:i("agents.aiInterview","AI Interview")})}),e.jsxs("div",{className:"agent-dialog-tabs",role:"tablist","aria-label":i("agents.setupModeAriaLabel","Agent setup mode"),children:[e.jsx("button",{id:"agent-dialog-tab-presets",type:"button",role:"tab","aria-controls":"agent-dialog-panel-presets","aria-selected":E==="presets",tabIndex:E==="presets"?0:-1,className:`agent-dialog-tab${E==="presets"?" active":""}`,onClick:()=>A("presets"),"data-testid":"agent-dialog-tab-presets",children:i("agents.tabPresets","Preset personas")}),e.jsx("button",{id:"agent-dialog-tab-custom",type:"button",role:"tab","aria-controls":"agent-dialog-panel-custom","aria-selected":E==="custom",tabIndex:E==="custom"?0:-1,className:`agent-dialog-tab${E==="custom"?" active":""}`,onClick:()=>{A("custom"),le(o=>Ga(o))},"data-testid":"agent-dialog-tab-custom",children:i("agents.tabCustom","Custom agent")})]}),E==="presets"&&e.jsx("div",{id:"agent-dialog-panel-presets",className:"agent-dialog-tab-panel",role:"tabpanel","aria-labelledby":"agent-dialog-tab-presets",children:e.jsxs("div",{className:"agent-presets",children:[e.jsx("div",{className:"agent-presets-header",children:i("agents.presetsHeader","Choose a preset persona to prefill role, identity, soul, and instructions")}),e.jsx("div",{className:"agent-presets-grid",children:nn.map(o=>e.jsxs("button",{type:"button",className:`agent-preset-card${Oe===o.id?" selected":""}`,"data-testid":`preset-${o.id}`,onClick:()=>Et(o),title:o.title,children:[e.jsx("span",{className:"agent-preset-icon",children:e.jsx(Ft,{agent:{id:o.id,icon:o.icon,name:o.name},size:28})}),e.jsx("span",{className:"agent-preset-name",children:o.name}),e.jsx("span",{className:"agent-preset-role",children:o.role}),o.description&&e.jsx("span",{className:"agent-preset-description",children:o.description})]},o.id))})]})}),E==="custom"&&e.jsxs("div",{id:"agent-dialog-panel-custom",className:"agent-dialog-tab-panel",role:"tabpanel","aria-labelledby":"agent-dialog-tab-custom",children:[e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:i("agents.sectionIdentity","Identity")}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-name",children:[i("agents.fieldName","Name")," ",!Oe&&e.jsx("span",{className:"agent-dialog-required",children:"*"})]}),e.jsx("input",{id:"agent-name",type:"text",className:"input",placeholder:i("agents.namePlaceholder","e.g. Frontend Reviewer"),value:P,onChange:o=>T(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field agent-dialog-field--title",children:[e.jsxs("label",{htmlFor:"agent-title",children:[i("agents.fieldTitle","Title")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-title",type:"text",className:"input",placeholder:i("agents.titlePlaceholder","e.g. Senior Code Reviewer"),value:M,onChange:o=>W(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-icon",children:[i("agents.fieldIcon","Icon")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-icon",type:"text",className:"input",placeholder:i("agents.iconPlaceholder","e.g. 🤖"),value:U,onChange:o=>w(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{children:i("agents.fieldRole","Primary role")}),e.jsx("div",{className:"agent-role-grid",children:Qt.map(o=>e.jsxs("button",{type:"button",className:`agent-role-option${y===o.value?" selected":""}`,onClick:()=>{_(o.value),O(N=>N.filter(ie=>ie!==o.value))},children:[e.jsx("span",{className:"agent-role-option-icon","aria-hidden":"true",children:e.jsx(Fa,{provider:et,size:"sm"})}),e.jsx("span",{className:"agent-role-option-label",children:f(o.value)})]},o.value))}),e.jsxs("fieldset",{className:"agent-dialog-field","aria-label":i("agents.additionalRoles","Additional workflow roles"),children:[e.jsx("legend",{children:i("agents.additionalRoles","Additional workflow roles")}),Qt.filter(o=>o.value!==y).map(o=>e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:Y.includes(o.value),onChange:()=>O(N=>N.includes(o.value)?N.filter(ie=>ie!==o.value):[...N,o.value])}),f(o.value)]},o.value))]})]})]}),e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:i("agents.sectionConfiguration","Configuration")}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-reports-to",children:[i("agents.fieldReportsTo","Reports To")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsxs("select",{id:"agent-reports-to",className:"select",value:R,onChange:o=>F(o.target.value),disabled:be,children:[e.jsx("option",{value:"",children:i("agents.noManager","No manager")}),C.map(o=>e.jsxs("option",{value:o.id,children:[o.name," (",o.id,")"]},o.id))]})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-soul",children:[i("agents.fieldSoul","Soul")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("textarea",{id:"agent-soul",className:"input",rows:2,placeholder:i("agents.soulPlaceholder","Describe the agent's personality and communication style..."),value:S,onChange:o=>me(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-memory",children:[i("agents.fieldMemory","Agent Memory")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("textarea",{id:"agent-memory",className:"input",rows:2,placeholder:i("agents.memoryPlaceholder","Private to this agent — durable preferences, operating habits, and context it should carry across tasks..."),value:ye,onChange:o=>z(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-instructions-path",children:[i("agents.fieldInstructionsPath","Instructions Path")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-instructions-path",type:"text",className:"input",placeholder:i("agents.instructionsPathPlaceholder","e.g. .fusion/agents/reviewer.md"),value:X,onChange:o=>D(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-heartbeat-procedure-path",children:[i("agents.fieldHeartbeatPath","Heartbeat Procedure Path")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-heartbeat-procedure-path",type:"text",className:"input",placeholder:i("agents.heartbeatPathPlaceholder","e.g. .fusion/agents/ceo-agent2736/HEARTBEAT.md"),value:fe,onChange:o=>G(o.target.value)}),e.jsx("p",{className:"agent-dialog-optional agent-dialog-field-hint",children:i("agents.heartbeatPathHint","Path to the agent's heartbeat procedure path, typically .fusion/agents/ceo-agent2736/HEARTBEAT.md. Legacy id-only default paths still work.")})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-instructions-text",children:[i("agents.fieldInstructionsText","Inline Instructions")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("textarea",{id:"agent-instructions-text",className:"input",rows:4,placeholder:i("agents.instructionsTextPlaceholder","Add custom behavior instructions..."),value:ge,onChange:o=>le(o.target.value)})]})]}),e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:i("agents.sectionRuntime","Runtime")}),nt("agent-runtime-source-step-0")]}),e.jsxs("div",{className:"agent-dialog-ai-generate",children:[e.jsxs("button",{type:"button",className:"btn btn--ai-generate",onClick:()=>te(!0),children:[e.jsx("span",{children:"✨"}),i("agents.generateWithAI","Generate with AI")]}),e.jsx("p",{className:"agent-dialog-ai-hint",children:i("agents.generateHint","Describe your agent's role and let AI generate a specification")})]})]})]}),k===1&&e.jsxs("div",{children:[nt("agent-runtime-source-step-1"),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-max-turns",children:i("agents.fieldMaxTurns","Max Turns")}),e.jsx("input",{id:"agent-max-turns",type:"number",className:"input",min:1,max:2e3,value:ee.maxTurns,onChange:o=>he(N=>({...N,maxTurns:Math.max(1,parseInt(o.target.value,10)||1)}))})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx(Mn,{id:"agent-skills",label:i("agents.fieldSkills","Skills"),value:oe,onChange:Le,projectId:u}),e.jsx("p",{className:"agent-dialog-optional agent-dialog-skills-hint",children:i("agents.skillsHint","Optional skills to assign to this agent")})]})]}),k===2&&e.jsxs("div",{children:[e.jsx("p",{className:"agent-dialog-info",children:i("agents.reviewHint","Review your agent configuration before creating.")}),e.jsxs("div",{className:"agent-dialog-summary",children:[e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-name",children:i("agents.fieldName","Name")}),e.jsx("input",{id:"agent-review-name",type:"text",className:"input",placeholder:i("agents.namePlaceholder","e.g. Frontend Reviewer"),value:P,onChange:o=>T(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable agent-dialog-summary-row--title",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-title",children:i("agents.fieldTitle","Title")}),e.jsx("input",{id:"agent-review-title",type:"text",className:"input",placeholder:i("agents.titlePlaceholder","e.g. Senior Code Reviewer"),value:M,onChange:o=>W(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:i("agents.fieldRole","Role")}),e.jsx("span",{children:st?f(st.value):""})]}),Be&&e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:i("agents.fieldReportsTo","Reports To")}),e.jsx("span",{children:ue?`${ue.name} (${ue.id})`:Be})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-soul",children:i("agents.fieldSoul","Soul")}),e.jsx("textarea",{id:"agent-review-soul",className:"input",rows:2,placeholder:i("agents.soulPlaceholder","Describe the agent's personality and communication style..."),value:S,onChange:o=>me(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-heartbeat-procedure-path",children:i("agents.fieldHeartbeatPath","Heartbeat Procedure Path")}),e.jsx("input",{id:"agent-review-heartbeat-procedure-path",type:"text",className:"input",placeholder:i("agents.heartbeatPathPlaceholder","e.g. .fusion/agents/ceo-agent2736/HEARTBEAT.md"),value:fe,onChange:o=>G(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-instructions-path",children:i("agents.fieldInstructionsPath","Instructions Path")}),e.jsx("input",{id:"agent-review-instructions-path",type:"text",className:"input",placeholder:i("agents.instructionsPathPlaceholder","e.g. .fusion/agents/reviewer.md"),value:X,onChange:o=>D(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-instructions-text",children:i("agents.fieldInstructionsText","Inline Instructions")}),e.jsx("textarea",{id:"agent-review-instructions-text",className:"input",rows:4,placeholder:i("agents.instructionsTextPlaceholder","Add custom behavior instructions..."),value:ge,onChange:o=>le(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:K==="runtime"?i("agents.runtime","Runtime"):i("agents.model","Model")}),e.jsx("span",{children:K==="runtime"?Me?Me.name:e.jsx("em",{className:"agent-dialog-summary-row-value--muted",children:i("agents.notSelected","Not selected")}):V?e.jsxs(e.Fragment,{children:[e.jsx(Fa,{provider:V.split("/")[0],size:"sm"})," ",(()=>{const o=V.indexOf("/"),N=V.slice(0,o),ie=V.slice(o+1);return Ve.find(Ge=>Ge.provider===N&&Ge.id===ie)?.name||V})()]}):e.jsx("em",{className:"agent-dialog-summary-row-value--muted",children:i("agents.modelDefault","default")})})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:i("agents.fieldThinking","Thinking")}),e.jsx("span",{className:"agent-dialog-summary-row-value--capitalize",children:ee.thinkingLevel})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:i("agents.fieldMaxTurns","Max Turns")}),e.jsx("span",{children:ee.maxTurns})]}),oe.length>0&&e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:i("agents.fieldSkills","Skills")}),e.jsx("span",{children:i("agents.skillsSelected","{{count}} skill selected",{count:oe.length,defaultValue_one:"{{count}} skill selected",defaultValue_other:"{{count}} skills selected"})})]})]}),Se&&e.jsx("p",{className:"agent-dialog-error",children:Se})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[k>0&&e.jsx("button",{className:"btn",onClick:()=>I(o=>o-1),disabled:J,children:i("agents.back","Back")}),e.jsx("button",{className:"btn",onClick:Ae,disabled:J,children:i("agents.cancel","Cancel")}),k<2?e.jsx("button",{className:"btn btn--primary",onClick:()=>I(o=>o+1),disabled:k===0&&!P.trim()&&!Oe,children:i("agents.next","Next")}):e.jsx("button",{className:"btn btn--primary",onClick:()=>void at(),disabled:J||!P.trim(),children:J?i("agents.creating","Creating..."):i("agents.create","Create")})]})]}),e.jsx(rl,{isOpen:q,onClose:()=>te(!1),onGenerated:Q,projectId:u}),e.jsx($n,{isOpen:xe,onClose:()=>He(!1),onUseDraft:o=>{p?.(o),p||tt(o),He(!1)},projectId:u,existingAgents:v,mode:"create"})]}),document.body)}function cl(n){const l=n.match(/^---\s*\r?\n([\s\S]*?)\r?\n---(?:\r?\n([\s\S]*))?$/);if(!l)throw new Error("Missing YAML frontmatter delimiters (---)");const d=l[1].split(/\r?\n/),u=l[2]??"",h={name:""},a=[];let v=!1;for(const p of d){const f=p.trimEnd().trim();if(!f)continue;if(f.startsWith("skills:")){v=!0;continue}if(v&&f.startsWith("- ")){a.push(f.slice(2).trim());continue}v=!1;const[k,...I]=f.split(":"),A=I.join(":").trim().replace(/^['"]|['"]$/g,"");k==="name"&&(h.name=A),k==="title"&&(h.title=A),k==="icon"&&(h.icon=A),k==="role"&&(h.role=A),k==="reportsTo"&&(h.reportsTo=A)}if(!h.name)throw new Error("Missing required field: name");return a.length>0&&(h.skills=a),u.trim().length>0&&(h.instructionBody=u),h}function dl({isOpen:n,onClose:l,onImported:d,projectId:u,initialInputMethod:h="paste"}){const{t:a}=_e("app");os(n);const[v,p]=s.useState("input"),[i,f]=s.useState(h),[k,I]=s.useState(""),[E,A]=s.useState([]),[P,T]=s.useState("Unknown"),[M,W]=s.useState([]),[U,w]=s.useState([]),[y,_]=s.useState([]),[Y,O]=s.useState([]),[R,F]=s.useState([]),[X,D]=s.useState(!1),[ge,le]=s.useState(!1),[fe,G]=s.useState(null),[S,me]=s.useState(null),[ye,z]=s.useState(null),ee=s.useRef(null),he=s.useRef(null),[Oe,Pe]=s.useState([]),[oe,Le]=s.useState(""),[J,Ne]=s.useState(null),[Se,we]=s.useState(!1),[q,te]=s.useState(null),xe=s.useRef(!1);s.useEffect(()=>{i==="browse"&&!xe.current&&!Se&&(xe.current=!0,we(!0),te(null),Ya().then(c=>{c.error?te(c.error):c.companies.length>0?Pe(c.companies):te(a("agents.noCompaniesAvailable","No companies available"))}).catch(c=>{te(c instanceof Error?c.message:a("agents.failedToLoadCompanies","Failed to load companies"))}).finally(()=>{we(!1)}))},[i,Se,a]);const He=s.useCallback(()=>{xe.current=!0,te(null),Pe([]),Ne(null),we(!0),Ya().then(c=>{c.error?te(c.error):c.companies.length>0?Pe(c.companies):te(a("agents.noCompaniesAvailable","No companies available"))}).catch(c=>{te(c instanceof Error?c.message:a("agents.failedToLoadCompanies","Failed to load companies"))}).finally(()=>{we(!1)})},[a]),Re=s.useCallback(()=>{p("input"),f(h),I(""),A([]),T("Unknown"),W([]),w([]),_([]),O([]),F([]),D(!1),le(!1),G(null),me(null),z(null),Pe([]),Le(""),Ne(null),we(!1),te(null),xe.current=!1},[h]),ze=s.useCallback(()=>{Re(),l()},[Re,l]),We=s.useCallback(c=>{const C=c.target.files?.[0];if(!C)return;const H=new FileReader;H.onload=be=>{const ae=be.target?.result;f("file"),A([]),I(ae),G(null)},H.onerror=()=>{G(a("agents.failedToReadFile","Failed to read file"))},H.readAsText(C),c.target.value=""},[a]),Qe=s.useCallback(async c=>{const C=Array.from(c.target.files??[]);if(C.length!==0)try{const H=C.filter(ae=>(ae.webkitRelativePath||ae.name).toLowerCase().endsWith("agents.md")).sort((ae,V)=>{const et=ae.webkitRelativePath||ae.name,Q=V.webkitRelativePath||V.name;return et.localeCompare(Q)});if(H.length===0){G(a("agents.noAgentsMdFiles","Selected directory has no AGENTS.md files"));return}const be=[];for(const ae of H){const V=await ae.text();be.push(cl(V))}f("directory"),A(be),I(""),G(null)}catch{G(a("agents.failedToParseDirectory","Failed to parse AGENTS.md files from selected directory"))}finally{c.target.value=""}},[a]);function Ve(c){if(!u)return`/api${c}`;const C=c.includes("?")?"&":"?";return`/api${c}${C}projectId=${encodeURIComponent(u)}`}const bt=s.useCallback(async()=>{if(i==="directory"&&E.length===0){G(a("agents.selectDirectory","Please select a directory containing AGENTS.md files"));return}if(i==="browse"&&!J){G(a("agents.selectCompany","Please select a company from the catalog"));return}if(i!=="directory"&&i!=="browse"&&!k.trim()){G(a("agents.provideManifest","Please provide manifest content"));return}D(!0),G(null);try{let c;i==="directory"?c={agents:E,dryRun:!0}:i==="browse"&&J?c={importSource:"companies.sh",companySlug:J.slug,dryRun:!0}:c={manifest:k,dryRun:!0};const C=await fetch(Ve("/agents/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!C.ok){const V=await C.json();throw new Error(V.error??`Parse failed (${C.status})`)}const H=await C.json(),be=H.agents&&H.agents.length>0?H.agents:H.created.map(V=>({name:V,role:"custom"})),ae=Array.isArray(H.skills)?H.skills:[];T(H.companyName??"Unknown"),W(be),w(ae),_(Array.isArray(H.warnings)?H.warnings:[]),O(be.map(V=>V.name)),F(ae.map(V=>V.name)),p("preview")}catch(c){G(c instanceof Error?c.message:a("agents.failedToParseManifest","Failed to parse manifest"))}finally{D(!1)}},[i,E,k,J,u,a]),Ee=s.useCallback(async()=>{le(!0),z(null);try{let c;i==="directory"?c={agents:E,skipExisting:!0,selectedAgents:Y,selectedSkills:R}:i==="browse"&&J?c={importSource:"companies.sh",companySlug:J.slug,skipExisting:!0,selectedAgents:Y,selectedSkills:R}:c={manifest:k,skipExisting:!0,selectedAgents:Y,selectedSkills:R};const C=await fetch(Ve("/agents/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!C.ok){const be=await C.json();throw new Error(be.error??`Import failed (${C.status})`)}const H=await C.json();me(H),p("result"),d()}catch(c){z(c instanceof Error?c.message:a("agents.failedToImport","Failed to import agents"))}finally{le(!1)}},[i,E,k,J,Y,R,u,d,a]),B=Y.length,K=R.length,Te=a("agents.selectedAgentLabel","{{count}} Agent{{plural}}",{count:B,plural:B!==1?"s":""}),pe=a("agents.selectedSkillLabel","{{count}} Skill{{plural}}",{count:K,plural:K!==1?"s":""}),Ie=B>0&&K>0?`${Te} + ${pe}`:K>0?pe:Te,ke=B>0&&K>0?a("agents.importingAgentsAndSkills","Importing {{agentCount}} agent{{agentPlural}} and {{skillCount}} skill{{skillPlural}}...",{agentCount:B,agentPlural:B!==1?"s":"",skillCount:K,skillPlural:K!==1?"s":""}):K>0?a("agents.importingSkills","Importing {{count}} skill{{plural}}...",{count:K,plural:K!==1?"s":""}):a("agents.importingAgents","Importing {{count}} agent{{plural}}...",{count:B,plural:B!==1?"s":""}),De=c=>{O(C=>C.includes(c)?C.filter(H=>H!==c):[...C,c])},Ue=c=>{F(C=>C.includes(c)?C.filter(H=>H!==c):[...C,c])};return n?e.jsx(cs,{windowKey:"agent-import",modal:!0,title:a("agents.importAgents","Import Agents"),ariaLabel:a("agents.importAgents","Import agents"),onClose:ze,hideHeader:!0,dragHandleSelector:".agent-import-dialog .agent-dialog-header",className:"floating-window--agent-import",defaultSize:{width:720,height:640},minSize:{width:420,height:320},persistGeometryKey:"floating-window:agent-import",suspendGeometryPersistenceOnMobile:!0,suspendGeometryPersistenceOnShortViewport:!0,closeOnOutsidePointerDown:!0,children:e.jsxs("div",{className:"agent-dialog agent-import-dialog",children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsx("span",{className:"agent-dialog-header-title",children:a("agents.importAgents","Import Agents")}),e.jsx("button",{className:"modal-close",onClick:ze,"aria-label":a("agents.close","Close"),children:"×"})]}),e.jsxs("div",{className:"agent-dialog-body",children:[v==="input"&&e.jsxs("div",{className:"agent-import-input",children:[e.jsx("p",{className:"agent-import-description",children:a("agents.importDescription","Import agents from an Agent Companies package. Browse the companies.sh catalog to discover published agents, upload an AGENTS.md file, select a directory, or paste manifest content.")}),e.jsxs("div",{className:"agent-import-file-upload",children:[e.jsx("input",{ref:ee,type:"file",accept:".md,.txt",onChange:We,className:"agent-import-file-input","aria-label":"Upload agent manifest file"}),e.jsx("input",{ref:he,type:"file",webkitdirectory:"",multiple:!0,onChange:Qe,className:"agent-import-file-input","aria-label":"Select directory"}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>ee.current?.click(),children:[e.jsx(ia,{size:16}),a("agents.chooseFile","Choose File")]}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>he.current?.click(),children:[e.jsx(On,{size:16}),a("agents.selectDirectory","Select Directory")]}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>{f("browse"),A([]),I(""),Ne(null),G(null)},children:[e.jsx(dn,{size:16}),a("agents.browseCatalog","Browse Catalog")]}),e.jsx("span",{className:"agent-import-file-hint",children:a("agents.fileHint",".md and .txt files supported")})]}),i==="browse"&&e.jsxs("div",{className:"agent-import-browse",children:[e.jsxs("div",{className:"agent-import-browse-header",children:[e.jsxs("div",{className:"agent-import-browse-search",children:[e.jsx(un,{size:16,className:"agent-import-browse-search-icon"}),e.jsx("input",{type:"text",className:"agent-import-browse-search-input",placeholder:a("agents.searchCompanies","Search companies..."),value:oe,onChange:c=>Le(c.target.value),"aria-label":a("agents.searchCompanies","Search companies")})]}),J&&e.jsxs("div",{className:"agent-import-browse-selected",children:[e.jsxs("span",{className:"agent-import-browse-selected-label",children:[a("agents.selected","Selected:")," "]}),e.jsx("span",{className:"agent-import-browse-selected-name",children:J.name}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>Ne(null),children:a("agents.change","Change")})]})]}),Se&&e.jsxs("div",{className:"agent-import-browse-loading",children:[e.jsx(Ut,{size:20,className:"spin"}),e.jsx("span",{children:a("agents.loadingCompanies","Loading companies...")})]}),q&&e.jsxs("div",{className:"agent-import-browse-error",children:[e.jsx(Nt,{size:16}),e.jsx("span",{children:q}),e.jsxs("button",{type:"button",className:"btn btn-sm",onClick:He,children:[e.jsx(mt,{size:14}),a("agents.retry","Retry")]})]}),!Se&&!q&&e.jsxs("div",{className:"agent-import-browse-list",children:[Oe.filter(c=>oe===""||c.name.toLowerCase().includes(oe.toLowerCase())||(c.tagline?.toLowerCase().includes(oe.toLowerCase())??!1)).map(c=>e.jsxs("div",{className:`agent-import-browse-item ${J?.slug===c.slug?"agent-import-browse-item--selected":""}`,onClick:()=>Ne(c),role:"button",tabIndex:0,onKeyDown:C=>{(C.key==="Enter"||C.key===" ")&&Ne(c)},children:[e.jsxs("div",{className:"agent-import-browse-item-header",children:[e.jsx("span",{className:"agent-import-browse-item-name",children:c.name}),c.installs!==void 0&&e.jsxs("span",{className:"agent-import-browse-item-installs",children:[c.installs.toLocaleString()," ",a("agents.installs","installs")]})]}),c.tagline&&e.jsx("span",{className:"agent-import-browse-item-tagline",children:c.tagline}),c.repo&&e.jsx("span",{className:"agent-import-browse-item-repo",children:c.repo})]},c.slug)),Oe.filter(c=>oe===""||c.name.toLowerCase().includes(oe.toLowerCase())||(c.tagline?.toLowerCase().includes(oe.toLowerCase())??!1)).length===0&&e.jsx("p",{className:"agent-import-browse-empty",children:oe?a("agents.noCompaniesMatch","No companies match your search"):a("agents.noCompaniesAvailable","No companies available")})]})]}),i!=="browse"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-divider",children:e.jsx("span",{children:a("agents.orPasteManifest","or paste manifest content")})}),e.jsx("textarea",{className:"agent-import-textarea",placeholder:a("agents.manifestPlaceholder",`---
|
|
17
|
+
*/const Wn=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],Un=ha("zoom-out",Wn);function qa(n){return typeof n=="number"&&Number.isFinite(n)?n:0}function ut(n){return n.toLocaleString()}function Gn({agents:n}){const{t:l}=_e("app"),{rows:d,totalInputTokens:u,totalOutputTokens:h,totalTokens:a}=s.useMemo(()=>{const p=n.map(i=>{const f=qa(i.totalInputTokens),k=qa(i.totalOutputTokens);return{id:i.id,name:i.name,inputTokens:f,outputTokens:k,totalTokens:f+k}}).sort((i,f)=>f.totalTokens-i.totalTokens||i.name.localeCompare(f.name)||i.id.localeCompare(f.id));return{rows:p,totalInputTokens:p.reduce((i,f)=>i+f.inputTokens,0),totalOutputTokens:p.reduce((i,f)=>i+f.outputTokens,0),totalTokens:p.reduce((i,f)=>i+f.totalTokens,0)}},[n]),v=a>0;return e.jsxs("section",{className:"agent-token-stats-panel","aria-label":l("agents.tokenStatistics","Agent token usage statistics"),children:[e.jsx("header",{className:"agent-token-stats-panel__header",children:e.jsx("h3",{className:"agent-token-stats-panel__title",children:l("agents.tokenUsageByAgent","Token Usage by Agent")})}),e.jsxs("div",{className:"agent-token-stats-panel__totals",role:"list","aria-label":l("agents.tokenUsageTotals","Token usage totals"),children:[e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:l("agents.inputTokens","Input Tokens")}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:ut(u)})]}),e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:l("agents.outputTokens","Output Tokens")}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:ut(h)})]}),e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:l("agents.combinedTokens","Combined Tokens")}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:ut(a)})]})]}),v?e.jsx("div",{className:"agent-token-stats-panel__table-wrapper",children:e.jsxs("table",{className:"agent-token-stats-panel__table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{scope:"col",children:l("agents.agent","Agent")}),e.jsx("th",{scope:"col",children:l("agents.input","Input")}),e.jsx("th",{scope:"col",children:l("agents.output","Output")}),e.jsx("th",{scope:"col",children:l("agents.total","Total")})]})}),e.jsx("tbody",{children:d.map(p=>e.jsxs("tr",{children:[e.jsxs("th",{scope:"row",className:"agent-token-stats-panel__agent-cell",children:[e.jsx("span",{className:"agent-token-stats-panel__agent-name",children:p.name}),e.jsx("span",{className:"agent-token-stats-panel__agent-id",children:p.id})]}),e.jsx("td",{children:ut(p.inputTokens)}),e.jsx("td",{children:ut(p.outputTokens)}),e.jsx("td",{className:"agent-token-stats-panel__total-cell",children:ut(p.totalTokens)})]},p.id))})]})}):e.jsx("div",{className:"agent-token-stats-panel__empty",role:"status",children:l("agents.noTokenUsageYet","No token usage recorded yet. Token totals appear here once agents run.")})]})}const Kn=[{icon:pt,label:"Active Agents",valueKey:"activeCount",className:"agent-metric-card--active"},{icon:Us,label:"Assigned Tasks",valueKey:"assignedTaskCount",className:"agent-metric-card--tasks"},{icon:Ht,label:"Success Rate",valueKey:"successRate",className:"agent-metric-card--success"},{icon:Gs,label:"Total Runs",valueKey:"completedRuns",className:"agent-metric-card--runs"}];function Yn({stats:n,className:l=""}){return n?e.jsx("div",{className:`agent-metrics-bar ${l}`.trim(),children:Kn.map(d=>{const u=d.valueKey==="successRate"?`${Math.round(n.successRate*100)}%`:n[d.valueKey];return e.jsxs("div",{className:`agent-metric-card ${d.className}`,children:[e.jsx(d.icon,{size:18}),e.jsxs("div",{className:"agent-metric-info",children:[e.jsx("span",{className:"agent-metric-value",children:u}),e.jsx("span",{className:"agent-metric-label",children:d.label})]})]},d.label)})}):null}const St=200;function Xt(n){return n.slice(-St).reverse().map(l=>({type:l.type??"text",text:l.text??"",timestamp:l.timestamp||void 0,...l.content!==void 0?{content:l.content}:{}}))}function Xn(n,l){const[d,u]=s.useState([]),[h,a]=s.useState(!1),v=s.useRef(null),p=s.useRef(!1),i=s.useRef([]),f=s.useRef(0),k=s.useRef(n),I=s.useRef(l);return(k.current!==n||I.current!==l)&&(k.current=n,I.current=l,f.current++,v.current&&(v.current(),v.current=null),p.current=!1,i.current=[],u([]),a(!1)),s.useEffect(()=>{if(!n){u([]),a(!1);return}const A=f.current;let P=`/api/tasks/${encodeURIComponent(n)}/logs/stream`;l&&(P+=`?projectId=${encodeURIComponent(l)}`);const E=()=>f.current!==A,W=Ks({run:async()=>{if(p.current||E())return;p.current=!0,i.current=[];let w=!1;try{const y=await Ys(n,l,{limit:St});if(E())return;const _=i.current;i.current=[],w=!0,u(Xt(Xs(y.entries,_)))}finally{if(p.current=!1,!w&&!E()){const y=i.current;i.current=[],y.length>0&&u(_=>[...Xt(y),..._].slice(0,St))}}}}),U=ns(P,{onReconnect:()=>W.trigger(),events:{"agent:log":w=>{if(!E())try{const y=JSON.parse(w.data),_={type:y.type??"text",text:y.text??y.content??"",timestamp:y.timestamp??"",taskId:n,...y.content!==void 0?{content:y.content}:{}};if(p.current){i.current.push(_);return}u(Y=>{const z=[...Xt([_]),...Y];return z.length>St?z.slice(0,St):z})}catch{}}},onOpen:()=>{f.current===A&&a(!0)},onError:()=>{f.current===A&&a(!1)}});return v.current=U,()=>{W.dispose(),U(),v.current=null,f.current===A&&a(!1)}},[n,l]),{entries:d,isConnected:h}}const ra=3e4,ds=1e4,us={"task:started":"in-flight","task:handed-off":"delegation","task:completed":"terminal","agent:state-changed":"ignored","workflow:gate-passed":"terminal","workflow:gate-failed":"terminal","approval:requested":"in-flight"};function Rt(n){if(typeof n!="string")return null;const l=Date.parse(n);return Number.isFinite(l)?l:null}function oa(n,l){const d=Rt(n.occurredAt),u=Rt(l.occurredAt);return d!==null&&u!==null&&d!==u?u-d:d===null&&u!==null?1:d!==null&&u===null?-1:n.eventId<l.eventId?1:n.eventId>l.eventId?-1:0}function ca(n,l){return`${n}\0${l}`}function qn(n,l){const d=Rt(n.occurredAt);return{...n,activityWindowOccurredAt:d===null?void 0:Math.min(d,l)}}function pa(n,l){const d=Rt(n.occurredAt);if(d===null)return null;const u=typeof n.activityWindowOccurredAt=="number"?n.activityWindowOccurredAt:Math.min(d,l);return Math.max(0,l-u)}function Zn(n,l){return ls(n,1,l).label==="Unresponsive"}function Jn(n,l,d,u){if(n.state==="error"||(u?.label??(Zn(n,d)?"Unresponsive":""))==="Unresponsive")return"error";if(n.state==="running")return"active";if(!l)return"unknown";const h=us[l.type],a=pa(l,d);return a===null?"unknown":h==="terminal"?"idle":h==="in-flight"?a<ra?"active":"idle":a>=ra?"idle":"unknown"}function Za(n,l){return l.fromAgentId===n.parentId&&l.toAgentId===n.childId?"down":l.fromAgentId===n.childId&&l.toAgentId===n.parentId?"up":null}function Qn(n,l,d){const u=new Map,h=new Map;for(const a of l){if(us[a.type]!=="delegation")continue;const v=pa(a,d);if(!(v===null||v>=ds))for(const p of n){if(!Za(p,a))continue;const i=ca(p.parentId,p.childId),f=h.get(i);(!f||oa(a,f)<0)&&h.set(i,a)}}for(const a of n){const v=ca(a.parentId,a.childId),p=h.get(v);u.set(v,p?Za(a,p):null)}return u}const Ja=200,el=1e3;class tl{listeners=new Set;retainers=new Map;events=[];activityByAgentId=new Map;seenIds=new Set;unsubscribe=null;abortController=null;expiryTimer=null;projectId;contextVersion=0;closeVersion=0;snapshot={events:[],activityByAgentId:new Map,nowTick:Date.now()};subscribe=l=>(this.listeners.add(l),()=>this.listeners.delete(l));getSnapshot=()=>this.snapshot;retain(l,d){const u=this.projectId;if(this.retainers.set(l,d),this.closeVersion++,u!==d){this.switchProject(d);return}if(this.retainers.size===1){if(this.unsubscribe)return;this.open(d)}}release(l){if(this.retainers.delete(l),this.retainers.size!==0)return;const d=++this.closeVersion;queueMicrotask(()=>{this.retainers.size===0&&this.closeVersion===d&&this.close()})}switchProject(l){this.closeTransport(),this.projectId=l,this.contextVersion++,this.events=[],this.activityByAgentId.clear(),this.seenIds.clear(),this.publish(),this.openTransport()}open(l){this.projectId=l,this.contextVersion++,this.openTransport()}openTransport(){const l=this.contextVersion,d=this.projectId?`?projectId=${encodeURIComponent(this.projectId)}`:"",u=this.projectId;this.unsubscribe=ns(`/api/events${d}`,{events:{"agent:activity":h=>this.handleFrame(h,l,u)},onReconnect:()=>this.seed(l,u)}),this.seed(l,u)}closeTransport(){this.unsubscribe?.(),this.unsubscribe=null,this.abortController?.abort(),this.abortController=null,this.stopExpiryClock()}close(){this.closeTransport()}async seed(l,d){this.abortController?.abort();const u=new AbortController;this.abortController=u;try{const h=await Ln({limit:Ja,projectId:d},{signal:u.signal});if(u.signal.aborted||l!==this.contextVersion||d!==this.projectId)return;let a=!1;for(const v of h.events)a=this.mergeEvent(v,d)||a;a&&this.publish(),this.updateExpiryClock()}catch{}finally{this.abortController===u&&(this.abortController=null)}}handleFrame(l,d,u){if(!(d!==this.contextVersion||u!==this.projectId))try{const h=JSON.parse(String(l.data));if("truncated"in h){this.seed(d,u);return}this.mergeEvent(h,u)&&this.publish(),this.updateExpiryClock()}catch{}}mergeEvent(l,d){if(d!==void 0&&l?.projectId!==d||!l||typeof l.eventId!="string"||this.seenIds.has(l.eventId)||Rt(l.occurredAt)===null)return!1;this.seenIds.add(l.eventId),this.events.push(qn(l,Date.now())),this.events.sort(oa),this.events.length>Ja&&this.events.pop(),this.activityByAgentId.clear();for(const u of this.events){const h=this.activityByAgentId.get(u.agentId);(!h||oa(u,h)<0)&&this.activityByAgentId.set(u.agentId,u)}return!0}canExpire(l){return this.events.some(d=>{const u=pa(d,l);return u!==null&&(u<ra||u<ds)})}updateExpiryClock(){this.retainers.size===0||!this.canExpire(Date.now())||this.expiryTimer||(this.expiryTimer=setInterval(()=>{const l=Date.now();this.publish(l),this.canExpire(l)||this.stopExpiryClock()},el))}stopExpiryClock(){this.expiryTimer&&(clearInterval(this.expiryTimer),this.expiryTimer=null)}publish(l=Date.now()){this.snapshot={events:[...this.events],activityByAgentId:new Map(this.activityByAgentId),nowTick:l};for(const d of this.listeners)d()}resetForTests(){this.closeTransport(),this.listeners.clear(),this.retainers.clear(),this.events=[],this.activityByAgentId.clear(),this.seenIds.clear(),this.projectId=void 0,this.contextVersion=0,this.closeVersion++,this.snapshot={events:[],activityByAgentId:new Map,nowTick:Date.now()}}}const Ct=new tl;let al=0;function gs(n){const l=s.useRef(null);return l.current||(l.current=`agent-activity-${++al}`),s.useEffect(()=>{const d=l.current;return Ct.retain(d,n),()=>Ct.release(d)},[n]),s.useSyncExternalStore(Ct.subscribe,Ct.getSnapshot,Ct.getSnapshot)}const sl=5e3;function nl({agent:n,projectId:l,onSelect:d,onOpenTaskLogs:u,activity:h}){const{t:a}=_e("app"),{entries:v,isConnected:p}=Xn(n.taskId,l),[i,f]=s.useState(null),k=s.useRef(null),[I,T]=s.useState(!1);s.useEffect(()=>{if(typeof IntersectionObserver>"u"){T(!0);return}const R=k.current;if(!R)return;const F=new IntersectionObserver(([X])=>{T(X?.isIntersecting??!0)},{rootMargin:"200px"});return F.observe(R),()=>F.disconnect()},[n.id]),s.useEffect(()=>{if(!n.taskId){f(null);return}if(!I)return;let R=!1,F;const X=async()=>{try{const D=await Zs(n.taskId,l);R||f(D)}catch{}finally{R||(F=setTimeout(X,sl))}};return X(),()=>{R=!0,F&&clearTimeout(F)}},[n.taskId,I,l]);const A=n.lastHeartbeatAt?Math.floor((Date.now()-new Date(n.lastHeartbeatAt).getTime())/1e3):0,P=(()=>{if(!n.lastHeartbeatAt)return null;const R=aa(n.runtimeConfig?.heartbeatIntervalMs),F=new Date(n.lastHeartbeatAt).getTime()+R,X=Math.round((F-Date.now())/1e3);return Number.isFinite(X)?X<=0?a("agents.heartbeatOverdue","Heartbeat overdue {{elapsed}}",{elapsed:qt(-X)}):a("agents.nextHeartbeat","Next heartbeat in {{elapsed}}",{elapsed:qt(X)}):null})(),{stepNumber:E,totalSteps:M,hasSteps:W}=qs(i),U=i?.steps?.[E],w=W?i?.steps?.slice(0,E).map((R,F)=>({step:R,index:F})).filter(({step:R})=>R.status==="done"||R.status==="skipped").at(-1):void 0,y=i?.modelId,_=()=>{d&&d(n.id)},Y=R=>{R.stopPropagation(),n.taskId&&u&&u(n.taskId)},z=R=>{(R.key==="Enter"||R.key===" ")&&(R.preventDefault(),_())};return e.jsxs("div",{ref:k,className:"live-agent-card",onClick:_,onKeyDown:z,role:"button",tabIndex:0,"aria-label":a("agents.selectAgent","Select agent {{name}}",{name:n.name}),children:[e.jsxs("div",{className:"live-agent-card-header",children:[e.jsxs("div",{className:"live-agent-card-name",children:[e.jsx("span",{className:`status-dot ${n.state==="running"?"status-dot--pending":"status-dot--online"}`,"aria-hidden":"true"}),e.jsx("span",{children:n.name})]}),n.taskId&&e.jsx("span",{className:"live-agent-task badge",children:e.jsx(is,{taskId:n.taskId,taskColumn:n.taskColumn})}),n.taskId&&e.jsx(sa,{taskId:n.taskId,isInViewport:I,projectId:l})]}),(h?.summary||w)&&e.jsxs("div",{className:"live-agent-card-activity",children:[h?.summary&&e.jsx("div",{className:"live-agent-card-now-doing",children:h.summary}),w&&e.jsxs("div",{className:"live-agent-card-last-step",children:["Last completed Step ",w.index,": ",w.step.name]})]}),e.jsx("div",{className:"live-agent-card-transcript",children:v.length===0?e.jsx("div",{className:"live-agent-card-empty",children:n.taskId?U?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"live-agent-card-status",children:a("agents.step","Step {{number}}{{total}}: {{name}}",{number:E,total:M?`/${M}`:"",name:U.name})}),y&&e.jsx("div",{className:"live-agent-card-status-sub",children:y}),e.jsx("div",{className:"live-agent-card-status-sub",children:p?a("agents.waitingOutput","Waiting for output..."):a("agents.connectingStream","Connecting to log stream...")})]}):e.jsx("span",{children:p?a("agents.waitingOutput","Waiting for output..."):a("agents.connecting","Connecting...")}):e.jsx("span",{children:n.state==="running"?a("agents.starting","Starting..."):a("agents.idleNoTask","Idle — no task assigned")})}):v.slice(0,20).map((R,F)=>e.jsx("div",{className:"live-agent-card-line",children:R.text},F))}),e.jsxs("div",{className:"live-agent-card-footer",children:[e.jsxs("div",{className:"live-agent-card-footer-meta",children:[e.jsx("span",{className:"text-secondary",title:a("agents.timeSinceLastHeartbeat","Time since last heartbeat"),children:qt(A)}),P&&e.jsx("span",{className:"live-agent-card-next-heartbeat",title:P,children:P})]}),e.jsxs("div",{className:"live-agent-card-footer-actions",children:[n.taskId&&u&&e.jsxs("button",{type:"button",className:"live-agent-card-logs-btn",onClick:Y,title:a("agents.viewLiveLogs","View live run logs"),"aria-label":a("agents.viewLogsFor","View live logs for {{taskId}}",{taskId:n.taskId}),children:[e.jsx(na,{size:12}),e.jsx("span",{children:a("agents.liveLogs","Live logs")})]}),p&&e.jsx(pt,{size:12,className:"live-agent-streaming-dot"})]})]})]})}function qt(n){return n<60?`${n}s`:n<3600?`${Math.floor(n/60)}m ${n%60}s`:`${Math.floor(n/3600)}h ${Math.floor(n%3600/60)}m`}function ll({agents:n,projectId:l,onAgentSelect:d,onOpenTaskLogs:u,className:h=""}){const{t:a}=_e("app"),v=gs(l),p=Array.from(new Map(n.map(i=>[i.id,i])).values());return p.length===0?null:e.jsxs("div",{className:`active-agents-panel ${h}`.trim(),children:[e.jsxs("div",{className:"active-agents-panel-header",children:[e.jsx(pt,{size:16}),e.jsx("span",{children:a("agents.activeAgents","Active Agents ({{count}})",{count:p.length})})]}),e.jsx("div",{className:"active-agents-grid",children:p.map(i=>e.jsx(nl,{agent:i,projectId:l,onSelect:d,onOpenTaskLogs:u,activity:v.activityByAgentId.get(i.id)},i.id))})]})}function il({stats:n,activeAgents:l,projectId:d,isOpen:u,onToggle:h,onSelectAgent:a,onOpenTaskLogs:v}){const{t:p}=_e("app"),i=l.filter(k=>k.state==="active").length,f=l.filter(k=>k.state==="running").length;return e.jsxs("section",{className:"agents-overview-bar","aria-label":p("agents.overviewLabel","Agents overview"),children:[e.jsxs("button",{type:"button",className:"agents-overview-bar__toggle","aria-expanded":u,onClick:h,children:[e.jsxs("span",{className:"agents-overview-bar__title-wrap",children:[u?e.jsx(Js,{size:16,"aria-hidden":"true"}):e.jsx(rs,{size:16,"aria-hidden":"true"}),e.jsx("span",{className:"agents-overview-bar__title",children:p("agents.overview","Overview")})]}),e.jsx("span",{className:"agents-overview-bar__meta text-secondary",children:p("agents.statusCount","{{activeCount}} active · {{runningCount}} running",{activeCount:i,runningCount:f})})]}),u?e.jsxs("div",{className:"agents-overview-bar__content",children:[e.jsx(Yn,{stats:n,className:"agents-overview-bar__metrics"}),e.jsx(ll,{agents:l,projectId:d,onAgentSelect:a,onOpenTaskLogs:v,className:"agents-overview-bar__active-panel"})]}):null]})}function Zt({title:n="No agents found",description:l="Create an agent to get started",ctaLabel:d="Create Agent",onCtaClick:u}){return e.jsxs("div",{className:"agent-empty",children:[e.jsx(la,{size:48,opacity:.3,className:"agent-empty-state__icon"}),e.jsx("p",{className:"agent-empty-state__title",children:n}),e.jsx("p",{className:"agent-empty-state__description text-secondary",children:l}),u?e.jsx("button",{type:"button",className:"btn btn-task-create btn-sm",onClick:u,children:d}):null]})}const Qa=3,Jt=1e3;function rl({isOpen:n,onClose:l,onGenerated:d,projectId:u}){const{t:h}=_e("app");os(n);const[a,v]=s.useState(""),[p,i]=s.useState({type:"input"}),[f,k]=s.useState(null),[I,T]=s.useState(!1),A=s.useRef(null),P=s.useRef(null);s.useEffect(()=>{n&&p.type==="input"&&P.current?.focus()},[n,p.type]),s.useEffect(()=>{if(!n&&A.current){const y=A.current;A.current=null,Yt(y,u).catch(()=>{})}},[n,u]),s.useEffect(()=>{if(!n)return;const y=_=>{_.key==="Escape"&&E()};return document.addEventListener("keydown",y),()=>document.removeEventListener("keydown",y)},[n]);const E=s.useCallback(()=>{if(A.current){const y=A.current;A.current=null,Yt(y,u).catch(()=>{})}v(""),i({type:"input"}),k(null),T(!1),l()},[l,u]),M=s.useCallback(async()=>{if(!(!a.trim()||a.trim().length<Qa)){k(null),i({type:"loading"});try{const{sessionId:y}=await Dn(a.trim(),u);A.current=y;const{spec:_}=await Fn(y,u);i({type:"preview",spec:_,sessionId:y})}catch(y){const _=y instanceof Error?y.message:"Failed to generate agent specification";_.includes("429")||_.toLowerCase().includes("rate limit")?k(h("agents.generation.rateLimited","Too many requests. Please wait a moment and try again.")):k(_),i({type:"input"}),A.current=null}}},[a,u]),W=s.useCallback(async()=>{if(A.current){const y=A.current;A.current=null;try{await Yt(y,u)}catch{}}await M()},[M,u]),U=s.useCallback(()=>{p.type==="preview"&&(A.current=null,d(p.spec),v(""),i({type:"input"}),k(null),T(!1),l())},[p,d,l]);if(!n)return null;const w=a.trim().length>=Qa&&a.trim().length<=Jt;return e.jsx(cs,{windowKey:"agent-generation",modal:!0,title:h("agents.generation.title","Generate Agent"),ariaLabel:h("agents.generateWithAiLabel","Generate agent with AI"),onClose:E,hideHeader:!0,dragHandleSelector:".agent-generation-modal .agent-dialog-header",className:"floating-window--agent-generation",defaultSize:{width:640,height:560},minSize:{width:400,height:300},persistGeometryKey:"floating-window:agent-generation",suspendGeometryPersistenceOnMobile:!0,suspendGeometryPersistenceOnShortViewport:!0,closeOnOutsidePointerDown:!0,children:e.jsxs("div",{className:"agent-dialog agent-generation-modal",children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsxs("span",{className:"agent-dialog-header-title",children:[e.jsx("span",{className:"agent-dialog-header-sparkle",children:"✨"}),h("agents.generation.title","Generate Agent")]}),e.jsx("button",{className:"modal-close",onClick:E,"aria-label":h("actions.close","Close"),children:"×"})]}),e.jsxs("div",{className:"agent-dialog-body",children:[f&&e.jsx("div",{className:"agent-dialog-error-banner",children:f}),p.type==="input"&&e.jsxs("div",{children:[e.jsx("p",{className:"agent-dialog-info",children:h("agents.generation.info","Describe your agent's role and the AI will generate a complete specification including system prompt, suggested configuration, and more.")}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-role-description",children:h("agents.generation.roleLabel","Role Description")}),e.jsx("textarea",{ref:P,id:"agent-role-description",className:"input agent-dialog-textarea",rows:4,placeholder:h("agents.generation.rolePlaceholder",'e.g. "Senior frontend code reviewer who specializes in React accessibility"'),value:a,onChange:y=>v(y.target.value),onKeyDown:y=>{y.key==="Enter"&&!y.shiftKey&&w&&(y.preventDefault(),M())},maxLength:Jt,"aria-describedby":"role-description-hint"}),e.jsxs("div",{id:"role-description-hint",className:"agent-dialog-hint",children:[e.jsx("span",{children:h("agents.generation.roleHint","Describe what your agent should do")}),e.jsxs("span",{children:[a.length,"/",Jt]})]})]})]}),p.type==="loading"&&e.jsxs("div",{className:"agent-dialog-loading-center",children:[e.jsx("div",{className:"agent-dialog-spinner spin"}),e.jsx("p",{className:"agent-dialog-loading-text",children:h("agents.generation.loading","Generating agent specification...")})]}),p.type==="preview"&&e.jsxs("div",{children:[e.jsxs("div",{className:"agent-dialog-summary agent-dialog-summary--spaced",children:[e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:h("agents.generation.previewTitle","Title")}),e.jsxs("span",{className:"agent-dialog-summary-row-value",children:[p.spec.icon," ",p.spec.title]})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:h("agents.generation.previewRole","Role")}),e.jsx("span",{children:p.spec.role})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:h("agents.generation.previewDescription","Description")}),e.jsx("span",{className:"agent-dialog-summary-row-value agent-dialog-summary-row-value--body",children:p.spec.description})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:h("agents.generation.previewThinking","Thinking")}),e.jsx("span",{className:"agent-dialog-summary-row-value agent-dialog-summary-row-value--capitalize",children:p.spec.thinkingLevel})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:h("agents.generation.previewMaxTurns","Max Turns")}),e.jsx("span",{children:p.spec.maxTurns})]})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{children:[h("agents.generation.systemPrompt","System Prompt"),e.jsx("button",{type:"button",className:"agent-dialog-expand-btn",onClick:()=>T(!I),children:I?h("agents.generation.collapse","Collapse"):h("agents.generation.expand","Expand")})]}),e.jsxs("div",{className:`agent-generation-prompt-box${I?"":" agent-generation-prompt-box--collapsed"}`,children:[p.spec.systemPrompt,!I&&p.spec.systemPrompt.length>500&&e.jsx("div",{className:"agent-generation-prompt-fade"})]})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[e.jsx("button",{className:"btn",onClick:E,children:h("actions.cancel","Cancel")}),p.type==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void M(),disabled:!w,children:h("agents.generation.generate","Generate")}),p.type==="preview"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn",onClick:()=>void W(),children:h("agents.generation.regenerate","Regenerate")}),e.jsx("button",{className:"btn btn-task-create",onClick:U,children:h("agents.generation.useThis","Use This")})]})]})]})})}const Qt=[{value:"triage"},{value:"executor"},{value:"reviewer"},{value:"merger"},{value:"scheduler"},{value:"engineer"},{value:"custom"}];function ol({isOpen:n,onClose:l,onCreated:d,projectId:u,prefillDraft:h=null,agentOnboardingEnabled:a=!1,existingAgents:v=[],onPrefillDraft:p}){const{t:i}=_e("app"),f=o=>({triage:i("agents.roleTriage","Triage"),executor:i("agents.roleExecutor","Executor"),reviewer:i("agents.roleReviewer","Reviewer"),merger:i("agents.roleMerger","Merger"),scheduler:i("agents.roleScheduler","Scheduler"),engineer:i("agents.roleEngineer","Engineer"),custom:i("agents.roleCustom","Custom")})[o]??o,[k,I]=s.useState(0),[T,A]=s.useState("presets"),[P,E]=s.useState(""),[M,W]=s.useState(""),[U,w]=s.useState(""),[y,_]=s.useState("custom"),[Y,z]=s.useState([]),[R,F]=s.useState(""),[X,D]=s.useState(""),[ge,le]=s.useState(""),[fe,G]=s.useState(""),[S,me]=s.useState(""),[ye,O]=s.useState(""),[ee,he]=s.useState({model:"",thinkingLevel:"off",maxTurns:1e3}),[ze,Pe]=s.useState(null),[oe,Le]=s.useState([]),[J,Ne]=s.useState(!1),[Se,we]=s.useState(null),[q,te]=s.useState(!1),[xe,He]=s.useState(!1),{favoriteProviders:Re,favoriteModels:Oe,toggleFavoriteProvider:We,toggleFavoriteModel:Qe}=Qs(),[Ve,bt]=s.useState([]),[Te,B]=s.useState(!1),[K,Ee]=s.useState("model"),[pe,Ie]=s.useState(""),[ke,De]=s.useState([]),[Ue,c]=s.useState(!1),[C,H]=s.useState([]),[be,ae]=s.useState(!1);s.useEffect(()=>{n&&(B(!0),en().then(o=>{bt(o.models)}).catch(()=>{}).finally(()=>B(!1)))},[n]),s.useEffect(()=>{n&&(ae(!0),H([]),Dt(void 0,u).then(o=>{H(o)}).catch(()=>{H([])}).finally(()=>ae(!1)))},[n,u]),s.useEffect(()=>{if(!n)return;const o=ln;if(typeof o!="function"){De([]),c(!1);return}c(!0),De([]),o(u).then(N=>{De(N)}).catch(()=>{De([])}).finally(()=>c(!1))},[n,u]);const V=ee.model.includes("/")?ee.model:"",et=V?V.split("/")[0]:"default",Q=s.useCallback(o=>{const N=tn.has(o.role)?o.role:"custom";E(o.title),W(o.description),w(o.icon),_(N),z([]),le(o.systemPrompt),he(ie=>({...ie,thinkingLevel:o.thinkingLevel,maxTurns:o.maxTurns})),te(!1),I(1)},[]),se=s.useCallback(o=>{he(N=>({...N,model:o}))},[]),ft=s.useCallback(o=>{Ee(o),o==="model"&&Ie("")},[]),Tt=s.useCallback(o=>{const N=an(o);Pe(o.id),E(N.name),w(N.icon??""),W(N.title??""),_(N.role),z([]),me(N.soul??""),le(N.instructionsText??""),I(1)},[]),tt=s.useCallback(o=>{const N=sn(o);I(1),A("custom"),E(N.name),W(N.title??""),w(N.icon??""),_(N.role),z([]),F(N.reportsTo??""),le(Ga(N.instructionsText??"")),G(N.heartbeatProcedurePath??""),me(N.soul??""),O(N.memory??""),Le(N.skills??[]),he(ie=>({...ie,model:N.model??"",thinkingLevel:N.thinkingLevel??ie.thinkingLevel,maxTurns:N.maxTurns??ie.maxTurns})),N.runtimeHint?(Ee("runtime"),Ie(N.runtimeHint)):(Ee("model"),Ie(""))},[]);if(s.useEffect(()=>{!n||!h||tt(h)},[n,h,tt]),!n)return null;const Ae=()=>{I(0),A("presets"),E(""),W(""),w(""),_("custom"),F(""),D(""),le(""),G(""),me(""),O(""),he({model:"",thinkingLevel:"off",maxTurns:1e3}),Ee("model"),Ie(""),Pe(null),Le([]),z([]),we(null),te(!1),He(!1),l()},at=async()=>{if(P.trim()){Ne(!0),we(null);try{await on(cn({name:P,role:y,roles:[y,...Y],title:M,icon:U,reportsTo:R,instructionsPath:X,instructionsText:ge,heartbeatProcedurePath:fe,soul:S,memory:ye,model:K==="model"?ee.model:"",runtimeHint:K==="runtime"?pe:"",thinkingLevel:ee.thinkingLevel,maxTurns:ee.maxTurns,skills:oe}),u),Ae(),d()}catch(o){we(o instanceof Error?o.message:i("agents.createError","Failed to create agent"))}finally{Ne(!1)}}},st=Qt.find(o=>o.value===y),Be=R.trim(),ue=Be?C.find(o=>o.id===Be):void 0,Me=pe?ke.find(o=>o.runtimeId===pe):void 0,nt=o=>e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{id:o,children:i("agents.runtimeSource","Runtime Source")}),e.jsxs("div",{className:"agent-runtime-mode-toggle",role:"radiogroup","aria-labelledby":o,children:[e.jsxs("label",{className:`agent-runtime-mode-option${K==="model"?" agent-runtime-mode-option--active":""}`,children:[e.jsx("input",{type:"radio",name:o,value:"model",checked:K==="model",onChange:()=>ft("model")}),e.jsx("span",{children:i("agents.runtimeSourceBuiltIn","Built-in Model")})]}),e.jsxs("label",{className:`agent-runtime-mode-option${K==="runtime"?" agent-runtime-mode-option--active":""}`,children:[e.jsx("input",{type:"radio",name:o,value:"runtime",checked:K==="runtime",onChange:()=>ft("runtime")}),e.jsx("span",{children:i("agents.runtimeSourcePlugin","Plugin Runtime")})]})]})]}),K==="model"?e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{children:i("agents.model","Model")}),Te?e.jsx("div",{className:"agent-dialog-loading",children:e.jsx($a,{label:i("agents.loadingModels","Loading models…")})}):e.jsx(rn,{id:"agent-model",label:i("agents.model","Model"),value:V,onChange:se,models:Ve,placeholder:i("agents.modelPlaceholder","Select a model…"),favoriteProviders:Re,onToggleFavorite:We,favoriteModels:Oe,onToggleModelFavorite:Qe,thinkingLevel:ee.thinkingLevel,onThinkingLevelChange:N=>he(ie=>({...ie,thinkingLevel:N}))})]}):e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-runtime-hint",children:i("agents.runtime","Runtime")}),Ue?e.jsx("div",{className:"agent-dialog-loading",children:e.jsx($a,{label:i("agents.loadingRuntimes","Loading runtimes…")})}):e.jsxs("select",{id:"agent-runtime-hint",className:"select",value:pe,onChange:N=>Ie(N.target.value),children:[e.jsx("option",{value:"",children:ke.length>0?i("agents.runtimePlaceholder","Select a plugin runtime…"):i("agents.runtimeEmpty","No plugin runtimes available")}),ke.map(N=>e.jsx("option",{value:N.runtimeId,children:N.description?`${N.name} — ${N.description}`:N.name},`${N.pluginId}:${N.runtimeId}`))]})]})]});return In.createPortal(e.jsxs("div",{className:"agent-dialog-overlay",onClick:o=>{o.target===o.currentTarget&&Ae()},children:[e.jsxs("div",{className:"agent-dialog",role:"dialog","aria-modal":"true","aria-label":i("agents.dialogAriaLabel","Create new agent"),children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsx("span",{className:"agent-dialog-header-title",children:i("agents.dialogTitle","New Agent")}),e.jsx("button",{className:"btn-icon",onClick:Ae,"aria-label":i("agents.closeAriaLabel","Close"),children:"×"})]}),e.jsx("div",{className:"agent-dialog-steps",children:[0,1,2].map(o=>e.jsx("div",{className:`agent-dialog-step${o===k?" active":o<k?" completed":""}`,"aria-label":i("agents.stepAriaLabel","Step {{step}}",{step:o+1})},o))}),e.jsxs("div",{className:"agent-dialog-body",children:[k===0&&e.jsxs("div",{children:[a&&e.jsx("div",{className:"agent-dialog-step-zero-actions",children:e.jsx("button",{type:"button",className:"btn agent-dialog-interview-btn",onClick:()=>He(!0),children:i("agents.aiInterview","AI Interview")})}),e.jsxs("div",{className:"agent-dialog-tabs",role:"tablist","aria-label":i("agents.setupModeAriaLabel","Agent setup mode"),children:[e.jsx("button",{id:"agent-dialog-tab-presets",type:"button",role:"tab","aria-controls":"agent-dialog-panel-presets","aria-selected":T==="presets",tabIndex:T==="presets"?0:-1,className:`agent-dialog-tab${T==="presets"?" active":""}`,onClick:()=>A("presets"),"data-testid":"agent-dialog-tab-presets",children:i("agents.tabPresets","Preset personas")}),e.jsx("button",{id:"agent-dialog-tab-custom",type:"button",role:"tab","aria-controls":"agent-dialog-panel-custom","aria-selected":T==="custom",tabIndex:T==="custom"?0:-1,className:`agent-dialog-tab${T==="custom"?" active":""}`,onClick:()=>{A("custom"),le(o=>Ga(o))},"data-testid":"agent-dialog-tab-custom",children:i("agents.tabCustom","Custom agent")})]}),T==="presets"&&e.jsx("div",{id:"agent-dialog-panel-presets",className:"agent-dialog-tab-panel",role:"tabpanel","aria-labelledby":"agent-dialog-tab-presets",children:e.jsxs("div",{className:"agent-presets",children:[e.jsx("div",{className:"agent-presets-header",children:i("agents.presetsHeader","Choose a preset persona to prefill role, identity, soul, and instructions")}),e.jsx("div",{className:"agent-presets-grid",children:nn.map(o=>e.jsxs("button",{type:"button",className:`agent-preset-card${ze===o.id?" selected":""}`,"data-testid":`preset-${o.id}`,onClick:()=>Tt(o),title:o.title,children:[e.jsx("span",{className:"agent-preset-icon",children:e.jsx(Ft,{agent:{id:o.id,icon:o.icon,name:o.name},size:28})}),e.jsx("span",{className:"agent-preset-name",children:o.name}),e.jsx("span",{className:"agent-preset-role",children:o.role}),o.description&&e.jsx("span",{className:"agent-preset-description",children:o.description})]},o.id))})]})}),T==="custom"&&e.jsxs("div",{id:"agent-dialog-panel-custom",className:"agent-dialog-tab-panel",role:"tabpanel","aria-labelledby":"agent-dialog-tab-custom",children:[e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:i("agents.sectionIdentity","Identity")}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-name",children:[i("agents.fieldName","Name")," ",!ze&&e.jsx("span",{className:"agent-dialog-required",children:"*"})]}),e.jsx("input",{id:"agent-name",type:"text",className:"input",placeholder:i("agents.namePlaceholder","e.g. Frontend Reviewer"),value:P,onChange:o=>E(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field agent-dialog-field--title",children:[e.jsxs("label",{htmlFor:"agent-title",children:[i("agents.fieldTitle","Title")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-title",type:"text",className:"input",placeholder:i("agents.titlePlaceholder","e.g. Senior Code Reviewer"),value:M,onChange:o=>W(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-icon",children:[i("agents.fieldIcon","Icon")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-icon",type:"text",className:"input",placeholder:i("agents.iconPlaceholder","e.g. 🤖"),value:U,onChange:o=>w(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{children:i("agents.fieldRole","Primary role")}),e.jsx("div",{className:"agent-role-grid",children:Qt.map(o=>e.jsxs("button",{type:"button",className:`agent-role-option${y===o.value?" selected":""}`,onClick:()=>{_(o.value),z(N=>N.filter(ie=>ie!==o.value))},children:[e.jsx("span",{className:"agent-role-option-icon","aria-hidden":"true",children:e.jsx(Fa,{provider:et,size:"sm"})}),e.jsx("span",{className:"agent-role-option-label",children:f(o.value)})]},o.value))}),e.jsxs("fieldset",{className:"agent-dialog-field","aria-label":i("agents.additionalRoles","Additional workflow roles"),children:[e.jsx("legend",{children:i("agents.additionalRoles","Additional workflow roles")}),Qt.filter(o=>o.value!==y).map(o=>e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:Y.includes(o.value),onChange:()=>z(N=>N.includes(o.value)?N.filter(ie=>ie!==o.value):[...N,o.value])}),f(o.value)]},o.value))]})]})]}),e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:i("agents.sectionConfiguration","Configuration")}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-reports-to",children:[i("agents.fieldReportsTo","Reports To")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsxs("select",{id:"agent-reports-to",className:"select",value:R,onChange:o=>F(o.target.value),disabled:be,children:[e.jsx("option",{value:"",children:i("agents.noManager","No manager")}),C.map(o=>e.jsxs("option",{value:o.id,children:[o.name," (",o.id,")"]},o.id))]})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-soul",children:[i("agents.fieldSoul","Soul")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("textarea",{id:"agent-soul",className:"input",rows:2,placeholder:i("agents.soulPlaceholder","Describe the agent's personality and communication style..."),value:S,onChange:o=>me(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-memory",children:[i("agents.fieldMemory","Agent Memory")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("textarea",{id:"agent-memory",className:"input",rows:2,placeholder:i("agents.memoryPlaceholder","Private to this agent — durable preferences, operating habits, and context it should carry across tasks..."),value:ye,onChange:o=>O(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-instructions-path",children:[i("agents.fieldInstructionsPath","Instructions Path")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-instructions-path",type:"text",className:"input",placeholder:i("agents.instructionsPathPlaceholder","e.g. .fusion/agents/reviewer.md"),value:X,onChange:o=>D(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-heartbeat-procedure-path",children:[i("agents.fieldHeartbeatPath","Heartbeat Procedure Path")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-heartbeat-procedure-path",type:"text",className:"input",placeholder:i("agents.heartbeatPathPlaceholder","e.g. .fusion/agents/ceo-agent2736/HEARTBEAT.md"),value:fe,onChange:o=>G(o.target.value)}),e.jsx("p",{className:"agent-dialog-optional agent-dialog-field-hint",children:i("agents.heartbeatPathHint","Path to the agent's heartbeat procedure path, typically .fusion/agents/ceo-agent2736/HEARTBEAT.md. Legacy id-only default paths still work.")})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-instructions-text",children:[i("agents.fieldInstructionsText","Inline Instructions")," ",e.jsx("span",{className:"agent-dialog-optional",children:i("agents.optional","(optional)")})]}),e.jsx("textarea",{id:"agent-instructions-text",className:"input",rows:4,placeholder:i("agents.instructionsTextPlaceholder","Add custom behavior instructions..."),value:ge,onChange:o=>le(o.target.value)})]})]}),e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:i("agents.sectionRuntime","Runtime")}),nt("agent-runtime-source-step-0")]}),e.jsxs("div",{className:"agent-dialog-ai-generate",children:[e.jsxs("button",{type:"button",className:"btn btn--ai-generate",onClick:()=>te(!0),children:[e.jsx("span",{children:"✨"}),i("agents.generateWithAI","Generate with AI")]}),e.jsx("p",{className:"agent-dialog-ai-hint",children:i("agents.generateHint","Describe your agent's role and let AI generate a specification")})]})]})]}),k===1&&e.jsxs("div",{children:[nt("agent-runtime-source-step-1"),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-max-turns",children:i("agents.fieldMaxTurns","Max Turns")}),e.jsx("input",{id:"agent-max-turns",type:"number",className:"input",min:1,max:2e3,value:ee.maxTurns,onChange:o=>he(N=>({...N,maxTurns:Math.max(1,parseInt(o.target.value,10)||1)}))})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx(Mn,{id:"agent-skills",label:i("agents.fieldSkills","Skills"),value:oe,onChange:Le,projectId:u}),e.jsx("p",{className:"agent-dialog-optional agent-dialog-skills-hint",children:i("agents.skillsHint","Optional skills to assign to this agent")})]})]}),k===2&&e.jsxs("div",{children:[e.jsx("p",{className:"agent-dialog-info",children:i("agents.reviewHint","Review your agent configuration before creating.")}),e.jsxs("div",{className:"agent-dialog-summary",children:[e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-name",children:i("agents.fieldName","Name")}),e.jsx("input",{id:"agent-review-name",type:"text",className:"input",placeholder:i("agents.namePlaceholder","e.g. Frontend Reviewer"),value:P,onChange:o=>E(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable agent-dialog-summary-row--title",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-title",children:i("agents.fieldTitle","Title")}),e.jsx("input",{id:"agent-review-title",type:"text",className:"input",placeholder:i("agents.titlePlaceholder","e.g. Senior Code Reviewer"),value:M,onChange:o=>W(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:i("agents.fieldRole","Role")}),e.jsx("span",{children:st?f(st.value):""})]}),Be&&e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:i("agents.fieldReportsTo","Reports To")}),e.jsx("span",{children:ue?`${ue.name} (${ue.id})`:Be})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-soul",children:i("agents.fieldSoul","Soul")}),e.jsx("textarea",{id:"agent-review-soul",className:"input",rows:2,placeholder:i("agents.soulPlaceholder","Describe the agent's personality and communication style..."),value:S,onChange:o=>me(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-heartbeat-procedure-path",children:i("agents.fieldHeartbeatPath","Heartbeat Procedure Path")}),e.jsx("input",{id:"agent-review-heartbeat-procedure-path",type:"text",className:"input",placeholder:i("agents.heartbeatPathPlaceholder","e.g. .fusion/agents/ceo-agent2736/HEARTBEAT.md"),value:fe,onChange:o=>G(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-instructions-path",children:i("agents.fieldInstructionsPath","Instructions Path")}),e.jsx("input",{id:"agent-review-instructions-path",type:"text",className:"input",placeholder:i("agents.instructionsPathPlaceholder","e.g. .fusion/agents/reviewer.md"),value:X,onChange:o=>D(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-instructions-text",children:i("agents.fieldInstructionsText","Inline Instructions")}),e.jsx("textarea",{id:"agent-review-instructions-text",className:"input",rows:4,placeholder:i("agents.instructionsTextPlaceholder","Add custom behavior instructions..."),value:ge,onChange:o=>le(o.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:K==="runtime"?i("agents.runtime","Runtime"):i("agents.model","Model")}),e.jsx("span",{children:K==="runtime"?Me?Me.name:e.jsx("em",{className:"agent-dialog-summary-row-value--muted",children:i("agents.notSelected","Not selected")}):V?e.jsxs(e.Fragment,{children:[e.jsx(Fa,{provider:V.split("/")[0],size:"sm"})," ",(()=>{const o=V.indexOf("/"),N=V.slice(0,o),ie=V.slice(o+1);return Ve.find(Ge=>Ge.provider===N&&Ge.id===ie)?.name||V})()]}):e.jsx("em",{className:"agent-dialog-summary-row-value--muted",children:i("agents.modelDefault","default")})})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:i("agents.fieldThinking","Thinking")}),e.jsx("span",{className:"agent-dialog-summary-row-value--capitalize",children:ee.thinkingLevel})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:i("agents.fieldMaxTurns","Max Turns")}),e.jsx("span",{children:ee.maxTurns})]}),oe.length>0&&e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:i("agents.fieldSkills","Skills")}),e.jsx("span",{children:i("agents.skillsSelected","{{count}} skill selected",{count:oe.length,defaultValue_one:"{{count}} skill selected",defaultValue_other:"{{count}} skills selected"})})]})]}),Se&&e.jsx("p",{className:"agent-dialog-error",children:Se})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[k>0&&e.jsx("button",{className:"btn",onClick:()=>I(o=>o-1),disabled:J,children:i("agents.back","Back")}),e.jsx("button",{className:"btn",onClick:Ae,disabled:J,children:i("agents.cancel","Cancel")}),k<2?e.jsx("button",{className:"btn btn--primary",onClick:()=>I(o=>o+1),disabled:k===0&&!P.trim()&&!ze,children:i("agents.next","Next")}):e.jsx("button",{className:"btn btn--primary",onClick:()=>void at(),disabled:J||!P.trim(),children:J?i("agents.creating","Creating..."):i("agents.create","Create")})]})]}),e.jsx(rl,{isOpen:q,onClose:()=>te(!1),onGenerated:Q,projectId:u}),e.jsx($n,{isOpen:xe,onClose:()=>He(!1),onUseDraft:o=>{p?.(o),p||tt(o),He(!1)},projectId:u,existingAgents:v,mode:"create"})]}),document.body)}function cl(n){const l=n.match(/^---\s*\r?\n([\s\S]*?)\r?\n---(?:\r?\n([\s\S]*))?$/);if(!l)throw new Error("Missing YAML frontmatter delimiters (---)");const d=l[1].split(/\r?\n/),u=l[2]??"",h={name:""},a=[];let v=!1;for(const p of d){const f=p.trimEnd().trim();if(!f)continue;if(f.startsWith("skills:")){v=!0;continue}if(v&&f.startsWith("- ")){a.push(f.slice(2).trim());continue}v=!1;const[k,...I]=f.split(":"),A=I.join(":").trim().replace(/^['"]|['"]$/g,"");k==="name"&&(h.name=A),k==="title"&&(h.title=A),k==="icon"&&(h.icon=A),k==="role"&&(h.role=A),k==="reportsTo"&&(h.reportsTo=A)}if(!h.name)throw new Error("Missing required field: name");return a.length>0&&(h.skills=a),u.trim().length>0&&(h.instructionBody=u),h}function dl({isOpen:n,onClose:l,onImported:d,projectId:u,initialInputMethod:h="paste"}){const{t:a}=_e("app");os(n);const[v,p]=s.useState("input"),[i,f]=s.useState(h),[k,I]=s.useState(""),[T,A]=s.useState([]),[P,E]=s.useState("Unknown"),[M,W]=s.useState([]),[U,w]=s.useState([]),[y,_]=s.useState([]),[Y,z]=s.useState([]),[R,F]=s.useState([]),[X,D]=s.useState(!1),[ge,le]=s.useState(!1),[fe,G]=s.useState(null),[S,me]=s.useState(null),[ye,O]=s.useState(null),ee=s.useRef(null),he=s.useRef(null),[ze,Pe]=s.useState([]),[oe,Le]=s.useState(""),[J,Ne]=s.useState(null),[Se,we]=s.useState(!1),[q,te]=s.useState(null),xe=s.useRef(!1);s.useEffect(()=>{i==="browse"&&!xe.current&&!Se&&(xe.current=!0,we(!0),te(null),Ya().then(c=>{c.error?te(c.error):c.companies.length>0?Pe(c.companies):te(a("agents.noCompaniesAvailable","No companies available"))}).catch(c=>{te(c instanceof Error?c.message:a("agents.failedToLoadCompanies","Failed to load companies"))}).finally(()=>{we(!1)}))},[i,Se,a]);const He=s.useCallback(()=>{xe.current=!0,te(null),Pe([]),Ne(null),we(!0),Ya().then(c=>{c.error?te(c.error):c.companies.length>0?Pe(c.companies):te(a("agents.noCompaniesAvailable","No companies available"))}).catch(c=>{te(c instanceof Error?c.message:a("agents.failedToLoadCompanies","Failed to load companies"))}).finally(()=>{we(!1)})},[a]),Re=s.useCallback(()=>{p("input"),f(h),I(""),A([]),E("Unknown"),W([]),w([]),_([]),z([]),F([]),D(!1),le(!1),G(null),me(null),O(null),Pe([]),Le(""),Ne(null),we(!1),te(null),xe.current=!1},[h]),Oe=s.useCallback(()=>{Re(),l()},[Re,l]),We=s.useCallback(c=>{const C=c.target.files?.[0];if(!C)return;const H=new FileReader;H.onload=be=>{const ae=be.target?.result;f("file"),A([]),I(ae),G(null)},H.onerror=()=>{G(a("agents.failedToReadFile","Failed to read file"))},H.readAsText(C),c.target.value=""},[a]),Qe=s.useCallback(async c=>{const C=Array.from(c.target.files??[]);if(C.length!==0)try{const H=C.filter(ae=>(ae.webkitRelativePath||ae.name).toLowerCase().endsWith("agents.md")).sort((ae,V)=>{const et=ae.webkitRelativePath||ae.name,Q=V.webkitRelativePath||V.name;return et.localeCompare(Q)});if(H.length===0){G(a("agents.noAgentsMdFiles","Selected directory has no AGENTS.md files"));return}const be=[];for(const ae of H){const V=await ae.text();be.push(cl(V))}f("directory"),A(be),I(""),G(null)}catch{G(a("agents.failedToParseDirectory","Failed to parse AGENTS.md files from selected directory"))}finally{c.target.value=""}},[a]);function Ve(c){if(!u)return`/api${c}`;const C=c.includes("?")?"&":"?";return`/api${c}${C}projectId=${encodeURIComponent(u)}`}const bt=s.useCallback(async()=>{if(i==="directory"&&T.length===0){G(a("agents.selectDirectory","Please select a directory containing AGENTS.md files"));return}if(i==="browse"&&!J){G(a("agents.selectCompany","Please select a company from the catalog"));return}if(i!=="directory"&&i!=="browse"&&!k.trim()){G(a("agents.provideManifest","Please provide manifest content"));return}D(!0),G(null);try{let c;i==="directory"?c={agents:T,dryRun:!0}:i==="browse"&&J?c={importSource:"companies.sh",companySlug:J.slug,dryRun:!0}:c={manifest:k,dryRun:!0};const C=await fetch(Ve("/agents/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!C.ok){const V=await C.json();throw new Error(V.error??`Parse failed (${C.status})`)}const H=await C.json(),be=H.agents&&H.agents.length>0?H.agents:H.created.map(V=>({name:V,role:"custom"})),ae=Array.isArray(H.skills)?H.skills:[];E(H.companyName??"Unknown"),W(be),w(ae),_(Array.isArray(H.warnings)?H.warnings:[]),z(be.map(V=>V.name)),F(ae.map(V=>V.name)),p("preview")}catch(c){G(c instanceof Error?c.message:a("agents.failedToParseManifest","Failed to parse manifest"))}finally{D(!1)}},[i,T,k,J,u,a]),Te=s.useCallback(async()=>{le(!0),O(null);try{let c;i==="directory"?c={agents:T,skipExisting:!0,selectedAgents:Y,selectedSkills:R}:i==="browse"&&J?c={importSource:"companies.sh",companySlug:J.slug,skipExisting:!0,selectedAgents:Y,selectedSkills:R}:c={manifest:k,skipExisting:!0,selectedAgents:Y,selectedSkills:R};const C=await fetch(Ve("/agents/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!C.ok){const be=await C.json();throw new Error(be.error??`Import failed (${C.status})`)}const H=await C.json();me(H),p("result"),d()}catch(c){O(c instanceof Error?c.message:a("agents.failedToImport","Failed to import agents"))}finally{le(!1)}},[i,T,k,J,Y,R,u,d,a]),B=Y.length,K=R.length,Ee=a("agents.selectedAgentLabel","{{count}} Agent{{plural}}",{count:B,plural:B!==1?"s":""}),pe=a("agents.selectedSkillLabel","{{count}} Skill{{plural}}",{count:K,plural:K!==1?"s":""}),Ie=B>0&&K>0?`${Ee} + ${pe}`:K>0?pe:Ee,ke=B>0&&K>0?a("agents.importingAgentsAndSkills","Importing {{agentCount}} agent{{agentPlural}} and {{skillCount}} skill{{skillPlural}}...",{agentCount:B,agentPlural:B!==1?"s":"",skillCount:K,skillPlural:K!==1?"s":""}):K>0?a("agents.importingSkills","Importing {{count}} skill{{plural}}...",{count:K,plural:K!==1?"s":""}):a("agents.importingAgents","Importing {{count}} agent{{plural}}...",{count:B,plural:B!==1?"s":""}),De=c=>{z(C=>C.includes(c)?C.filter(H=>H!==c):[...C,c])},Ue=c=>{F(C=>C.includes(c)?C.filter(H=>H!==c):[...C,c])};return n?e.jsx(cs,{windowKey:"agent-import",modal:!0,title:a("agents.importAgents","Import Agents"),ariaLabel:a("agents.importAgents","Import agents"),onClose:Oe,hideHeader:!0,dragHandleSelector:".agent-import-dialog .agent-dialog-header",className:"floating-window--agent-import",defaultSize:{width:720,height:640},minSize:{width:420,height:320},persistGeometryKey:"floating-window:agent-import",suspendGeometryPersistenceOnMobile:!0,suspendGeometryPersistenceOnShortViewport:!0,closeOnOutsidePointerDown:!0,children:e.jsxs("div",{className:"agent-dialog agent-import-dialog",children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsx("span",{className:"agent-dialog-header-title",children:a("agents.importAgents","Import Agents")}),e.jsx("button",{className:"modal-close",onClick:Oe,"aria-label":a("agents.close","Close"),children:"×"})]}),e.jsxs("div",{className:"agent-dialog-body",children:[v==="input"&&e.jsxs("div",{className:"agent-import-input",children:[e.jsx("p",{className:"agent-import-description",children:a("agents.importDescription","Import agents from an Agent Companies package. Browse the companies.sh catalog to discover published agents, upload an AGENTS.md file, select a directory, or paste manifest content.")}),e.jsxs("div",{className:"agent-import-file-upload",children:[e.jsx("input",{ref:ee,type:"file",accept:".md,.txt",onChange:We,className:"agent-import-file-input","aria-label":"Upload agent manifest file"}),e.jsx("input",{ref:he,type:"file",webkitdirectory:"",multiple:!0,onChange:Qe,className:"agent-import-file-input","aria-label":"Select directory"}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>ee.current?.click(),children:[e.jsx(ia,{size:16}),a("agents.chooseFile","Choose File")]}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>he.current?.click(),children:[e.jsx(zn,{size:16}),a("agents.selectDirectory","Select Directory")]}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>{f("browse"),A([]),I(""),Ne(null),G(null)},children:[e.jsx(dn,{size:16}),a("agents.browseCatalog","Browse Catalog")]}),e.jsx("span",{className:"agent-import-file-hint",children:a("agents.fileHint",".md and .txt files supported")})]}),i==="browse"&&e.jsxs("div",{className:"agent-import-browse",children:[e.jsxs("div",{className:"agent-import-browse-header",children:[e.jsxs("div",{className:"agent-import-browse-search",children:[e.jsx(un,{size:16,className:"agent-import-browse-search-icon"}),e.jsx("input",{type:"text",className:"agent-import-browse-search-input",placeholder:a("agents.searchCompanies","Search companies..."),value:oe,onChange:c=>Le(c.target.value),"aria-label":a("agents.searchCompanies","Search companies")})]}),J&&e.jsxs("div",{className:"agent-import-browse-selected",children:[e.jsxs("span",{className:"agent-import-browse-selected-label",children:[a("agents.selected","Selected:")," "]}),e.jsx("span",{className:"agent-import-browse-selected-name",children:J.name}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>Ne(null),children:a("agents.change","Change")})]})]}),Se&&e.jsxs("div",{className:"agent-import-browse-loading",children:[e.jsx(Ut,{size:20,className:"spin"}),e.jsx("span",{children:a("agents.loadingCompanies","Loading companies...")})]}),q&&e.jsxs("div",{className:"agent-import-browse-error",children:[e.jsx(Nt,{size:16}),e.jsx("span",{children:q}),e.jsxs("button",{type:"button",className:"btn btn-sm",onClick:He,children:[e.jsx(mt,{size:14}),a("agents.retry","Retry")]})]}),!Se&&!q&&e.jsxs("div",{className:"agent-import-browse-list",children:[ze.filter(c=>oe===""||c.name.toLowerCase().includes(oe.toLowerCase())||(c.tagline?.toLowerCase().includes(oe.toLowerCase())??!1)).map(c=>e.jsxs("div",{className:`agent-import-browse-item ${J?.slug===c.slug?"agent-import-browse-item--selected":""}`,onClick:()=>Ne(c),role:"button",tabIndex:0,onKeyDown:C=>{(C.key==="Enter"||C.key===" ")&&Ne(c)},children:[e.jsxs("div",{className:"agent-import-browse-item-header",children:[e.jsx("span",{className:"agent-import-browse-item-name",children:c.name}),c.installs!==void 0&&e.jsxs("span",{className:"agent-import-browse-item-installs",children:[c.installs.toLocaleString()," ",a("agents.installs","installs")]})]}),c.tagline&&e.jsx("span",{className:"agent-import-browse-item-tagline",children:c.tagline}),c.repo&&e.jsx("span",{className:"agent-import-browse-item-repo",children:c.repo})]},c.slug)),ze.filter(c=>oe===""||c.name.toLowerCase().includes(oe.toLowerCase())||(c.tagline?.toLowerCase().includes(oe.toLowerCase())??!1)).length===0&&e.jsx("p",{className:"agent-import-browse-empty",children:oe?a("agents.noCompaniesMatch","No companies match your search"):a("agents.noCompaniesAvailable","No companies available")})]})]}),i!=="browse"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-divider",children:e.jsx("span",{children:a("agents.orPasteManifest","or paste manifest content")})}),e.jsx("textarea",{className:"agent-import-textarea",placeholder:a("agents.manifestPlaceholder",`---
|
|
18
18
|
name: CEO
|
|
19
19
|
title: Chief Executive Officer
|
|
20
20
|
reportsTo: null
|
|
21
21
|
skills:
|
|
22
22
|
- review
|
|
23
23
|
---
|
|
24
|
-
Agent instructions go here...`),value:k,onChange:c=>{f("paste"),A([]),I(c.target.value),G(null)},rows:8,"aria-label":a("agents.manifestContent","Manifest content")})]}),e.jsx("p",{className:"agent-import-file-hint",children:a("agents.currentInput","Current input: {{method}}",{method:i})}),fe&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(Nt,{size:14}),fe]})]}),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:a("agents.company","Company")}),e.jsx("span",{className:"agent-import-company-name",children:P})]}),y.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:y.map((c,C)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(Nt,{size:12}),e.jsx("span",{children:c})]},C))}),e.jsxs("div",{className:"agent-import-count",children:[e.jsx(na,{size:14}),e.jsx("span",{children:a("agents.agentsFound","{{count}} agent{{plural}} found",{count:M.length,plural:M.length!==1?"s":""})})]}),M.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>O(M.map(c=>c.name)),children:a("agents.selectAllAgents","Select all agents")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>O([]),children:a("agents.clearAgents","Clear agents")})]}),M.length>0?e.jsx("div",{className:"agent-import-agent-list",children:M.map((c,C)=>e.jsxs("div",{className:"agent-import-agent-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":a("agents.selectAgent","Select agent {{name}}",{name:c.name}),checked:Y.includes(c.name),onChange:()=>De(c.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:c.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:c.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[c.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[c.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:c.role}),c.reportsTo&&e.jsx("span",{className:"agent-import-agent-reports",children:a("agents.importReportsTo"," · reports to {{agent}}",{agent:c.reportsTo})}),c.skills&&c.skills.length>0&&e.jsx("span",{className:"agent-import-agent-model",children:a("agents.importSkills"," · skills: {{skills}}",{skills:c.skills.join(", ")})})]}),c.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[c.instructionsText.slice(0,100),c.instructionsText.length>100?"...":""]})]})]},C))}):e.jsx("p",{className:"agent-import-empty",children:a("agents.noAgentsFound","No agents found in the manifest.")}),U.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(na,{size:14}),e.jsx("span",{children:a("agents.skillsFound","{{count}} skill{{plural}} found",{count:U.length,plural:U.length!==1?"s":""})})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>F(U.map(c=>c.name)),children:a("agents.selectAllSkills","Select all skills")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>F([]),children:a("agents.clearSkills","Clear skills")})]}),e.jsx("div",{className:"agent-import-skill-list",children:U.map((c,C)=>e.jsxs("div",{className:"agent-import-skill-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":a("agents.selectSkill","Select skill {{name}}",{name:c.name}),checked:R.includes(c.name),onChange:()=>Ue(c.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:c.name}),c.description&&e.jsx("span",{className:"agent-import-skill-description",children:c.description})]})]},`${c.name}-${C}`))})]}),ye&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(Nt,{size:14}),ye]})]}),v==="result"&&S&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(Ht,{size:32})}),e.jsx("h3",{className:"agent-import-result-title",children:a("agents.importComplete","Import Complete")}),e.jsxs("p",{className:"agent-import-result-company",children:[a("agents.from","From")," ",e.jsx("strong",{children:S.companyName??"Unknown"})]}),e.jsxs("div",{className:"agent-import-result-stats",children:[S.created.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:a("agents.resultCreated","{{count}} created",{count:S.created.length})})}),S.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:a("agents.resultSkipped","{{count}} skipped (already exist)",{count:S.skipped.length})})}),S.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:a("agents.resultErrors","{{count}} error{{plural}}",{count:S.errors.length,plural:S.errors.length!==1?"s":""})})})]}),S.created.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:S.created.map((c,C)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Ht,{size:12}),e.jsx("span",{children:c.name})]},C))}),S.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:S.errors.map((c,C)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(Oa,{size:12}),e.jsxs("span",{children:[c.name,": ",c.error]})]},C))}),S.warnings&&S.warnings.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:S.warnings.map((c,C)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(Nt,{size:12}),e.jsx("span",{children:c})]},C))}),S.skills&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-result-divider"}),e.jsx("h4",{className:"agent-import-result-section-title",children:a("agents.skills","Skills")}),e.jsxs("div",{className:"agent-import-result-stats",children:[S.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:a("agents.skillsImported","{{count}} skill{{plural}} imported",{count:S.skills.imported.length,plural:S.skills.imported.length!==1?"s":""})})}),S.skills.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:a("agents.skillsSkipped","{{count}} skill{{plural}} skipped (already exist)",{count:S.skills.skipped.length,plural:S.skills.skipped.length!==1?"s":""})})}),S.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:a("agents.skillsErrors","{{count}} skill{{plural}} error{{pluralError}}",{count:S.skills.errors.length,plural:S.skills.errors.length!==1?"s":"",pluralError:S.skills.errors.length!==1?"s":""})})}),S.skills.imported.length===0&&S.skills.skipped.length===0&&S.skills.errors.length===0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:a("agents.noSkillsInPackage","No skills in package")})})]}),S.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:S.skills.imported.map((c,C)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Ht,{size:12}),e.jsx("span",{children:c.name})]},C))}),S.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:S.skills.errors.map((c,C)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(Oa,{size:12}),e.jsxs("span",{children:[c.name,": ",c.error]})]},C))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[v==="preview"&&e.jsx("button",{className:"btn",onClick:()=>p("input"),disabled:ge,children:a("agents.back","Back")}),e.jsx("button",{className:"btn",onClick:ze,disabled:ge,children:v==="result"?a("agents.close","Close"):a("agents.cancel","Cancel")}),v==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void bt(),disabled:X||(i==="directory"?E.length===0:i==="browse"?!J:!k.trim()),children:X?e.jsxs(e.Fragment,{children:[e.jsx(Ut,{size:14,className:"spin"}),a("agents.parsing","Parsing...")]}):a("agents.preview","Preview")}),v==="preview"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void Ee(),disabled:ge||B===0&&K===0,children:ge?e.jsxs(e.Fragment,{children:[e.jsx(Ut,{size:14,className:"spin"}),ke]}):a("agents.importButton","Import {{label}}",{label:Ie})})]})]})}):null}const es="(prefers-reduced-motion: reduce)";function ul(){const[n,l]=s.useState(()=>typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia(es).matches);return s.useEffect(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return;const d=window.matchMedia(es),u=()=>l(d.matches);return u(),d.addEventListener("change",u),()=>d.removeEventListener("change",u)},[]),n}const ts=s.lazy(()=>Sn(()=>import("./AgentDetailView-gak4EWTI.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])).then(n=>({default:n.AgentDetailView})));function gl(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 ea=[.1,.25,.5,1,2,3,5,10],ta="__disabled__",ml=.25,hl=3,Lt=16,gt=32,as=320,ms=260,hs=520,ps="kb-dashboard-agents-sidebar-width";function da(n){return Math.max(ms,Math.min(hs,n))}function ss(n){if(typeof window>"u")return as;const l=At(ps,n),d=l?Number(l):NaN;return Number.isFinite(d)?da(d):as}function ua(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 ga(n,l){switch(l){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 pl(n,l){const d=n.runtimeConfig??{},u=typeof d.runtimeHint=="string"?d.runtimeHint:"";if(u)return{label:u,isRuntime:!0};const h=typeof d.modelProvider=="string"?d.modelProvider:"",a=typeof d.modelId=="string"?d.modelId:"";if(h&&a)return{label:`${h}/${a}`,isRuntime:!1};const v=typeof d.model=="string"?d.model:"";if(v.includes("/")){const i=v.indexOf("/");return{label:v.slice(i+1),isRuntime:!1}}const p=Pn(n,l);return{label:p.provider&&p.modelId?`${p.provider}/${p.modelId}`:null,isRuntime:!1}}function bs(n){return n.children.length===0?1:n.children.reduce((l,d)=>l+bs(d),0)}function fs(n,l){for(const d of n){if(d.agent.id===l)return d.agent;const u=fs(d.children,l);if(u)return u}}function ma(n,l,d){return n.state==="error"?{title:void 0,label:d("agents.healthError","Error")}:{title:l.reason??l.label,label:l.stateDerived?null:l.label}}function bl({agent:n,pending:l,onToggle:d}){const{t:u}=_e("app");if($e(n))return null;const h=ht(n),a=h?u("agents.disableHeartbeat","Disable heartbeat"):u("agents.enableHeartbeat","Enable heartbeat");return e.jsx("button",{type:"button",className:"btn btn-sm agent-heartbeat-toggle",disabled:l,"aria-pressed":h,"aria-label":u("agents.heartbeatActionForAgent","{{action}} for {{name}}",{action:a,name:n.name}),onClick:v=>{v.stopPropagation(),d(n)},children:l?u("agents.heartbeatUpdating","Updating heartbeat…"):a})}function xs({node:n,onSelect:l,getHealthStatus:d,selectedAgentId:u,registerNodeElement:h,linksRef:a,activityByAgentId:v,nowTick:p}){const{t:i}=_e("app"),{agent:f,children:k}=n,I=d(f),E=ma(f,I,i),A=ua(f.state),P=ga("org-chart-node-card",f.state),T=bs(n),M=Jn(f,v.get(f.id),p,I),W=M==="unknown"?"":` org-chart-node-card--activity-${M}`,U={"--org-chart-subtree-leaves":String(T)};return e.jsxs("div",{className:`org-chart-node${k.length>0?" org-chart-node--has-children":""}`,style:U,children:[e.jsxs("div",{ref:w=>h(f.id,w),"data-agent-id":f.id,className:`org-chart-node-card ${P}${W}${u===f.id?" agent-card--selected":""}`,...M==="unknown"?{}:{"data-activity-state":M,"aria-label":`${f.name}: ${M}`},onClick:()=>l(f.id),role:"button",tabIndex:0,onKeyDown:w=>{(w.key==="Enter"||w.key===" ")&&(w.key===" "&&w.preventDefault(),l(f.id))},children:[e.jsxs("div",{className:"org-chart-node__header",children:[e.jsx("span",{className:"org-chart-node__icon",children:e.jsx(Ft,{agent:f,size:20})}),e.jsx("span",{className:"org-chart-node__name",children:f.name})]}),e.jsxs("div",{className:"org-chart-node__meta",children:[e.jsx("span",{className:`org-chart-node__badge ${A}`,children:f.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:I.color},title:E.title,children:[I.icon,E.label&&e.jsx("span",{className:"text-secondary",children:E.label})]})]})]}),k.length>0&&e.jsx("div",{className:"org-chart-children",role:"group","aria-label":i("agents.orgChartEmployees","{{name}} employees",{name:f.name}),children:k.map(w=>(a.current.push({parentId:f.id,childId:w.agent.id}),e.jsx(xs,{node:w,onSelect:l,getHealthStatus:d,selectedAgentId:u,registerNodeElement:h,linksRef:a,activityByAgentId:v,nowTick:p},w.agent.id)))})]})}function fl({links:n,nodeElements:l,canvasRef:d,viewportRef:u,layoutMode:h,transform:a,activityEvents:v,nowTick:p}){const[i,f]=s.useState([]),k=ul(),I=s.useMemo(()=>Qn(n,v,p),[v,n,p]);return s.useLayoutEffect(()=>{const E=d.current,A=u.current;if(!E||!A||n.length===0){f([]);return}const P=()=>{const M=E.getBoundingClientRect(),W=n.flatMap(({parentId:U,childId:w})=>{const y=l.get(U),_=l.get(w);if(!y||!_)return[];const Y=y.getBoundingClientRect(),O=_.getBoundingClientRect(),R=(Y.left-M.left)/a.scale,F=(Y.top-M.top)/a.scale,X=(O.left-M.left)/a.scale,D=(O.top-M.top)/a.scale;if(h==="vertical"){const me=R,ye=F+Y.height/a.scale/2,z=X,ee=D+O.height/a.scale/2,he=me-(me-z)/2;return[{d:`M ${me} ${ye} L ${he} ${ye} L ${he} ${ee} L ${z} ${ee}`,link:{parentId:U,childId:w}}]}const ge=R+Y.width/a.scale/2,le=F+Y.height/a.scale,fe=X+O.width/a.scale/2,G=D,S=le+(G-le)/2;return[{d:`M ${ge} ${le} L ${ge} ${S} L ${fe} ${S} L ${fe} ${G}`,link:{parentId:U,childId:w}}]});f(W)};P();const T=new ResizeObserver(P);return T.observe(E),T.observe(A),l.forEach(M=>T.observe(M)),()=>T.disconnect()},[d,h,n,l,a.scale,u]),e.jsx("svg",{className:"agent-org-chart-connectors","aria-hidden":"true",children:i.map(({d:E,link:A})=>{const P=I.get(ca(A.parentId,A.childId)),T=P?` agent-org-chart-connectors__flow--${k?"static ":""}${P}`:"";return e.jsx("path",{d:E,className:T||void 0,...P?{"data-flow-direction":P}:{}},`${A.parentId}-${A.childId}-${E}`)})})}function Tl({addToast:n,projectId:l,onOpenTaskLogs:d,agentOnboardingEnabled:u=!1,focusAgent:h}){const{t:a}=_e("app"),v=gs(l),p=gl(a),[i,f]=s.useState(!1),k=s.useRef(new Map),I=s.useRef(new Map),E=s.useRef(new Map),[A,P]=s.useState(new Set),T=s.useRef(null);s.useEffect(()=>{if(typeof IntersectionObserver>"u")return;const t=new IntersectionObserver(r=>{P(g=>{let m=!1;const x=new Set(g);for(const j of r){const L=I.current.get(j.target);L&&(j.isIntersecting?x.has(L)||(x.add(L),m=!0):x.has(L)&&(x.delete(L),m=!0))}return m?x:g})},{rootMargin:"200px"});return T.current=t,k.current.forEach(r=>t.observe(r)),()=>{t.disconnect(),T.current=null}},[]);const M=s.useCallback(t=>{const r=E.current.get(t);if(r)return r;const g=m=>{const x=k.current.get(t);x&&(T.current?.unobserve(x),I.current.delete(x)),m?(k.current.set(t,m),I.current.set(m,t),T.current?T.current.observe(m):P(j=>j.has(t)?j:new Set(j).add(t))):(k.current.delete(t),E.current.delete(t),P(j=>{if(!j.has(t))return j;const L=new Set(j);return L.delete(t),L}))};return E.current.set(t,g),g},[]),W=s.useCallback(t=>typeof IntersectionObserver>"u"?!0:A.has(t),[A]),w=gn()==="mobile",[y,_]=s.useState(()=>ss(l)),[Y,O]=s.useState("all"),{agents:R,stats:F,isLoading:X,loadAgents:D,refreshAgents:ge}=mn(l,{filterState:Y,showSystemAgents:i}),[le,fe]=s.useState(!1),[G,S]=s.useState(null),[me,ye]=s.useState(!1),[z,ee]=s.useState(null),[he,Oe]=s.useState(null),Pe=w&&!!z,[oe,Le]=s.useState("dashboard"),[J,Ne]=s.useState(null),[Se,we]=s.useState(!1),[q,te]=s.useState(()=>{if(typeof window>"u")return"list";const t=At("fn-agent-view",l);return t==="list"||t==="board"||t==="org"?t:"list"}),[xe,He]=s.useState(()=>{if(typeof window>"u")return"auto";const t=At(Kt,l);return Ka(t)?t:"auto"}),[Re,ze]=s.useState([]),[We,Qe]=s.useState(!1),[Ve,bt]=s.useState(0),[Ee,B]=s.useState(!1),[K,Te]=s.useState(!1),[pe,Ie]=s.useState(!1),[ke,De]=s.useState(!1),[Ue,c]=s.useState(0),[C,H]=s.useState(0),[be,ae]=s.useState(0),[V,et]=s.useState(0),[Q,se]=s.useState({scale:1,x:0,y:0}),[ft,Et]=s.useState(!1),tt=s.useRef(null),Ae=s.useRef(null),at=s.useRef(null),st=s.useRef(new Map),Be=s.useRef([]),ue=s.useRef(new Map),Me=s.useRef(null),nt=s.useRef(null),o=s.useRef(!1),{confirm:N}=hn(),ie=s.useRef(null),$t=s.useId();s.useEffect(()=>{_(ss(l))},[l]),s.useEffect(()=>{const t=At("fn-agent-view",l);if(t==="list"||t==="board"||t==="org"){te(t);return}te("list")},[l]),s.useEffect(()=>{Gt("fn-agent-view",q,l)},[q,l]),s.useEffect(()=>{const t=At(Kt,l);He(Ka(t)?t:"auto")},[l]),s.useEffect(()=>{Gt(Kt,xe,l)},[xe,l]);const Ge=s.useCallback(t=>{try{Gt(ps,String(t),l)}catch{}},[l]),vs=s.useCallback(t=>{if(w)return;t.preventDefault(),t.stopPropagation();const r=t.currentTarget;typeof r.setPointerCapture=="function"&&r.setPointerCapture(t.pointerId);const g=t.clientX,m=y;let x=m;document.body.style.userSelect="none";const j=Z=>{const ce=Z.clientX-g,ne=da(m+ce);x=ne,_(ne)},L=Z=>{typeof r.releasePointerCapture=="function"&&r.releasePointerCapture(Z.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",j),document.removeEventListener("pointerup",L),Ge(x)};document.addEventListener("pointermove",j),document.addEventListener("pointerup",L)},[w,Ge,y]),js=s.useCallback(t=>{if(w||t.key!=="ArrowLeft"&&t.key!=="ArrowRight")return;t.preventDefault();const r=t.shiftKey?50:10,g=t.key==="ArrowLeft"?-r:r,m=da(y+g);_(m),Ge(m)},[w,Ge,y]),[ys,lt]=s.useState(null),Ns=s.useRef(null),[ws,it]=s.useState(null),[Ke,ba]=s.useState(new Set),[Fe,fa]=s.useState(!1),[xa,rt]=s.useState(null),[va,Ye]=s.useState({}),[xt,ja]=s.useState(1),[ks,Cs]=s.useState({}),[ya,Na]=s.useState(!1),[Xe,wa]=s.useState(new Set),[Ot,ot]=s.useState(new Map),Tt=s.useRef(!0);s.useEffect(()=>(Tt.current=!0,()=>{Tt.current=!1}),[]),s.useEffect(()=>{pn(l).then(t=>{Tt.current&&(ja(t.heartbeatMultiplier??1),Cs(t))}).catch(()=>{})},[l]);const ka=s.useCallback(async t=>{const r=Number.isFinite(t)&&t>0?t:1;ja(r),Na(!0);try{await bn({heartbeatMultiplier:r},l),n(a("agents.heartbeatSpeedSet","Heartbeat speed set to ×{{value}}",{value:r.toFixed(1)}),"success")}catch(g){n(a("agents.heartbeatSpeedSaveFailed","Failed to save heartbeat multiplier: {{error}}",{error:de(g)}),"error")}finally{Tt.current&&Na(!1)}},[l,n]),It=s.useMemo(()=>Ot.size===0?R:R.map(t=>{const r=Ot.get(t.id);return r?{...t,state:r}:t}),[R,Ot]),vt=s.useMemo(()=>It.filter(t=>i||!$e(t)),[It,i]),As=s.useMemo(()=>It.filter(t=>t.state!=="active"&&t.state!=="running"?!1:i||!$e(t)),[It,i]),qe=s.useMemo(()=>{if(i)return Re;const t=r=>$e(r.agent)?null:{...r,children:r.children.map(t).filter(g=>g!==null)};return Re.map(t).filter(r=>r!==null)},[Re,i]);s.useEffect(()=>{if(q!=="org")return;const t=Ae.current;if(!t)return;const r=()=>{bt(t.clientWidth)};r();const g=typeof ResizeObserver<"u"?new ResizeObserver(r):null;return g?.observe(t),window.addEventListener("resize",r),()=>{g?.disconnect(),window.removeEventListener("resize",r)}},[q,qe.length]),s.useEffect(()=>{if(q!=="org")return;let t=!1;return Qe(!0),fn(l,{includeEphemeral:i}).then(r=>{t||ze(r)}).catch(r=>{t||(n(a("agents.orgChartLoadFailed","Failed to load org chart: {{error}}",{error:de(r)}),"error"),ze([]))}).finally(()=>{t||Qe(!1)}),()=>{t=!0}},[q,l,i,n]),s.useEffect(()=>{const t=setInterval(()=>{D()},3e4);return()=>{clearInterval(t)}},[D]),s.useEffect(()=>{if(!Ee)return;let t=!1;De(!0),Dt(void 0,l).then(m=>{if(t)return;const x=m.filter(j=>!$e(j));c(x.filter(j=>j.state==="active"||j.state==="running").length),H(x.filter(j=>j.state==="paused").length),ae(x.filter(j=>!ht(j)).length),et(x.filter(j=>ht(j)).length)}).catch(m=>{t||(c(0),H(0),ae(0),et(0),n(a("agents.bulkActionsLoadFailed","Failed to load bulk agent actions: {{error}}",{error:de(m)}),"error"))}).finally(()=>{t||De(!1)});const r=m=>{const x=m.target;x&&(tt.current?.contains(x)||ie.current?.contains(x)||B(!1))},g=m=>{m.key==="Escape"&&(B(!1),ie.current?.focus())};return document.addEventListener("mousedown",r),document.addEventListener("touchstart",r),document.addEventListener("keydown",g),()=>{t=!0,document.removeEventListener("mousedown",r),document.removeEventListener("touchstart",r),document.removeEventListener("keydown",g)}},[n,Ee,l]);const Ca=async t=>{if(!pe){Ie(!0);try{const g=(await Dt(void 0,l)).filter(b=>!$e(b)),m=g.filter(b=>t==="paused"?b.state==="active"||b.state==="running":b.state==="paused"),x=g.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 N({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 L=await Promise.allSettled(m.map(b=>Wa(b.id,t,l))),Z=L.map((b,$)=>({result:b,agent:m[$]})).filter(b=>b.result.status==="rejected"),ce=L.length-Z.length,ne=Z.length,je=t==="paused"?a("agents.pausedSummary",{count:ce,skipped:x,defaultValue_one:"Paused {{count}} agent; skipped {{skipped}}",defaultValue_other:"Paused {{count}} agents; skipped {{skipped}}"}):a("agents.resumedSummary",{count:ce,skipped:x,defaultValue_one:"Resumed {{count}} agent; skipped {{skipped}}",defaultValue_other:"Resumed {{count}} agents; skipped {{skipped}}"});if(ne>0){const b=Z.slice(0,3).map(({agent:$,result:Ce})=>`${$.name||$.id}: ${de(Ce.reason)}`).join("; ");n(`${je}; failed ${ne}${b?` (${b})`:""}`,"error")}else n(je,"success");await D()}catch(r){n(t==="paused"?a("agents.pauseAgentsFailed","Failed to pause agents: {{error}}",{error:de(r)}):a("agents.resumeAgentsFailed","Failed to resume agents: {{error}}",{error:de(r)}),"error")}finally{Ie(!1)}}},Aa=async t=>{if(!(Fe||pe||Ke.size>0)){fa(!0);try{const r=await Dt(void 0,l),m=r.filter(b=>!$e(b)).filter(b=>ht(b)!==t),x=r.length-m.length;if(m.length===0){n(t?a("agents.noHeartbeatsToEnable","No agent heartbeats need enabling"):a("agents.noHeartbeatsToDisable","No agent heartbeats need disabling"),"error");return}if(!await N({title:t?a("agents.enableAllHeartbeats","Enable all heartbeats"):a("agents.disableAllHeartbeats","Disable all heartbeats"),message:t?a("agents.enableAllHeartbeatsConfirm","Enable heartbeats for {{count}} project agents?",{count:m.length}):a("agents.disableAllHeartbeatsConfirm","Disable heartbeats for {{count}} project agents?",{count:m.length}),danger:!t}))return;const L=await Promise.allSettled(m.map(b=>dt(b.id,{runtimeConfig:kt(b,t)},l))),Z=L.map((b,$)=>({result:b,agent:m[$]})).filter(b=>b.result.status==="rejected"),ce=L.length-Z.length,ne=t?a("agents.enableHeartbeatsSummary","Enabled {{count}} heartbeats; skipped {{skipped}}",{count:ce,skipped:x}):a("agents.disableHeartbeatsSummary","Disabled {{count}} heartbeats; skipped {{skipped}}",{count:ce,skipped:x}),je=Z.slice(0,3).map(({agent:b,result:$})=>`${b.name||b.id}: ${de($.reason)}`).join("; ");n(Z.length?`${ne}; ${a("agents.bulkFailures","failed {{count}}",{count:Z.length})}${je?` (${je})`:""}`:ne,Z.length?"error":"success"),await D()}catch(r){n(a("agents.heartbeatUpdateFailed","Failed to update heartbeat: {{error}}",{error:de(r)}),"error")}finally{fa(!1)}}},jt=async(t,r)=>{if(!Xe.has(t)){wa(g=>new Set(g).add(t)),ot(g=>{const m=new Map(g);return m.set(t,r),m});try{await Wa(t,r,l),n(a("agents.stateUpdated","Agent state updated to {{state}}",{state:r}),"success"),await D(),ot(g=>{const m=new Map(g);return m.delete(t),m})}catch(g){ot(m=>{const x=new Map(m);return x.delete(t),x}),n(a("agents.stateUpdateFailed","Failed to update state: {{error}}",{error:de(g)}),"error")}finally{wa(g=>{const m=new Set(g);return m.delete(t),m})}}},Sa=async(t,r)=>{if(await N({title:a("agents.deleteTitle","Delete Agent"),message:a("agents.deleteConfirm",'Delete agent "{{name}}"? This cannot be undone.',{name:r}),danger:!0}))try{await Rn(t,l),n(a("agents.deleted",'Agent "{{name}}" deleted',{name:r}),"success"),await D()}catch(m){n(a("agents.deleteFailed","Failed to delete agent: {{error}}",{error:de(m)}),"error")}},Ss=async(t,r)=>{const g=R.find(m=>m.id===t);if(g){if(g.role===r){lt(null);return}try{await dt(t,{role:r},l),n(a("agents.roleUpdated","Agent role updated to {{role}}",{role:p.find(m=>m.value===r)?.label??r}),"success"),lt(null),D()}catch(m){n(a("agents.roleUpdateFailed","Failed to update role: {{error}}",{error:de(m)}),"error")}}},Rs=(t,r)=>{t.key==="Escape"&<(null)},Es=async(t,r)=>{if(!(Fe||Ke.has(t.id))){xa===t.id&&(rt(null),Ye(g=>{const m={...g};return delete m[t.id],m})),it(t.id);try{await dt(t.id,{runtimeConfig:{...kt(t,!0),heartbeatIntervalMs:r}},l),n(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:Ua(r),name:t.name}),"success"),D()}catch(g){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:de(g)}),"error")}finally{it(null)}}},Ra=async(t,r)=>{if(!($e(t)||Fe||Ke.has(t.id))){ba(g=>new Set(g).add(t.id));try{await dt(t.id,{runtimeConfig:kt(t,r)},l),n(r?a("agents.heartbeatEnabledForAgent","Heartbeat enabled for {{name}}",{name:t.name}):a("agents.heartbeatDisabled","Heartbeat disabled for {{name}}",{name:t.name}),"success"),await D()}catch(g){n(a("agents.heartbeatUpdateFailed","Failed to update heartbeat: {{error}}",{error:de(g)}),"error")}finally{ba(g=>{const m=new Set(g);return m.delete(t.id),m})}}},Ts=t=>Ra(t,!1),Ea=async t=>{if(Fe||Ke.has(t.id))return;const r=va[t.id]??"";if(r.trim()===""){n(a("agents.heartbeatEnterMinutes","Please enter a heartbeat interval in minutes"),"error");return}const g=Number(r);if(isNaN(g)){n(a("agents.heartbeatMustBeNumber","Heartbeat interval must be a valid number"),"error");return}if(g<=0){n(a("agents.heartbeatMustBePositive","Heartbeat interval must be greater than 0"),"error");return}if(g>=1&&g<5){it(t.id);try{await dt(t.id,{runtimeConfig:{...kt(t,!0),heartbeatIntervalMs:En}},l),n(a("agents.heartbeatClampedToMin",{count:g,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"),rt(null),Ye(x=>{const j={...x};return delete j[t.id],j}),D()}catch(x){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:de(x)}),"error")}finally{it(null)}return}const m=Math.round(g*6e4);it(t.id);try{await dt(t.id,{runtimeConfig:{...kt(t,!0),heartbeatIntervalMs:m}},l),n(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:Ua(m),name:t.name}),"success"),rt(null),Ye(x=>{const j={...x};return delete j[t.id],j}),D()}catch(x){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:de(x)}),"error")}finally{it(null)}},Is=t=>{if(Fe||Ke.has(t.id))return;const r=aa(t.runtimeConfig?.heartbeatIntervalMs),g=Math.round(r/6e4);rt(t.id),Ye(m=>({...m,[t.id]:String(g)}))},ve=s.useCallback((t,r)=>{ee(t),Le(r?.initialTab??"dashboard"),Ne(r?.initialRunId??null),we(r?.preferActiveRun??!1)},[]),Ze=s.useCallback(()=>{ee(null),Le("dashboard"),Ne(null),we(!1)},[]),Ta=s.useCallback(t=>{ve(t)},[ve]),Ms=s.useCallback(t=>{Oe(t),ve(t);const r=R.find(g=>g.id===t)?.taskId??fs(Re,t)?.taskId;r&&d&&d(r)},[R,d,ve,Re]),_s=s.useCallback(async({agentId:t,deleted:r})=>{await ge(),r&&z===t&&Ze()},[ge,z,Ze]),zt=s.useCallback(t=>{ve(t),w&&Te(!1)},[w,ve]),Ia=s.useRef(void 0);s.useEffect(()=>{!h||Ia.current===h.requestId||(Ia.current=h.requestId,zt(h.agentId))},[h,zt]);const Ps=async(t,r)=>{ot(g=>{const m=new Map(g);return m.set(t,"running"),m});try{await Tn(t,l,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),n(a("agents.heartbeatRunStarted","Heartbeat run started for {{name}}",{name:r}),"success"),await D(),ot(g=>{const m=new Map(g);return m.delete(t),m})}catch(g){ot(m=>{const x=new Map(m);return x.delete(t),x}),n(a("agents.heartbeatRunFailed","Failed to start heartbeat run: {{error}}",{error:de(g)}),"error")}},Je=s.useCallback(t=>Math.min(hl,Math.max(ml,t)),[]),re=s.useCallback(t=>{const r=Ae.current,g=at.current?.querySelector(".agent-org-chart");if(!r||!g)return{...t,scale:Je(t.scale)};const m=Je(t.scale),x=g.scrollWidth*m,j=g.scrollHeight*m,L=r.clientWidth,Z=r.clientHeight,ce=Math.min(gt,L-x-gt),ne=gt,je=Math.min(gt,Z-j-gt),b=gt;return{scale:m,x:Math.max(ce,Math.min(ne,t.x)),y:Math.max(je,Math.min(b,t.y))}},[Je]),Mt=s.useCallback((t,r,g)=>{const m=Ae.current;m&&se(x=>{const j=Je(t),L=m.getBoundingClientRect(),Z=r-L.left,ce=g-L.top,ne=(Z-x.x)/x.scale,je=(ce-x.y)/x.scale;return re({scale:j,x:Z-ne*j,y:ce-je*j})})},[Je,re]),ct=s.useCallback(()=>{const t=Ae.current,r=at.current?.querySelector(".agent-org-chart");if(!t||!r)return;const g=t.clientWidth,m=t.clientHeight,x=r.scrollWidth,j=r.scrollHeight;if(x<=0||j<=0)return;const L=Je(Math.min(g/x,m/j,1)),Z=(g-x*L)/2,ce=(m-j*L)/2;se(re({scale:L,x:Z,y:ce}))},[Je,re]),Vt=s.useCallback(t=>{te(t),t!=="org"&&se({scale:1,x:0,y:0}),w&&z&&Ze()},[Ze,w,z]),Ma=t=>p.find(r=>r.value===t)?.label??t,_t=s.useMemo(()=>Hn({tree:qe,availableWidth:Ve,preference:xe}),[qe,xe,Ve]),_a=s.useCallback(t=>{He(t),se({scale:1,x:0,y:0})},[]);s.useEffect(()=>{se({scale:1,x:0,y:0}),o.current=!1},[l,_t]),s.useLayoutEffect(()=>{q!=="org"||We||qe.length===0||o.current||(ct(),o.current=!0)},[q,qe.length,ct,We]);const Ls=s.useCallback((t,r)=>{r?st.current.set(t,r):st.current.delete(t)},[]),Pa=s.useCallback(()=>e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>se(t=>re({...t,scale:t.scale*.9})),"aria-label":a("agents.orgChartZoomOut","Zoom out org chart"),title:a("agents.zoomOut","Zoom out"),children:e.jsx(Un,{size:16})}),e.jsxs("span",{className:"agent-org-chart-controls__zoom-label","aria-live":"polite",children:[Math.round(Q.scale*100),"%"]}),e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>se(t=>re({...t,scale:t.scale*1.1})),"aria-label":a("agents.orgChartZoomIn","Zoom in org chart"),title:a("agents.zoomIn","Zoom in"),children:e.jsx(Bn,{size:16})}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm agent-org-chart-controls__fit-btn",onClick:ct,"aria-label":a("agents.orgChartFit","Fit org chart"),title:a("agents.orgChartFit","Fit org chart"),children:[e.jsx(xn,{size:16}),a("agents.fit","Fit")]}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm",onClick:()=>se(t=>re({...t,x:0,y:0})),"aria-label":a("agents.orgChartCenter","Center org chart"),title:a("agents.orgChartCenter","Center org chart"),children:[e.jsx(vn,{size:16}),a("agents.center","Center")]})]}),[re,ct,Q.scale]),Hs=s.useCallback(t=>{if(!(t.ctrlKey||t.metaKey))return;t.preventDefault();const r=t.deltaY>0?.9:1.1;Mt(Q.scale*r,t.clientX,t.clientY)},[Q.scale,Mt]),Ds=s.useCallback(t=>{if(t.target.closest(".org-chart-node-card"))return;if(t.currentTarget.setPointerCapture?.(t.pointerId),ue.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),ue.current.size===1){Me.current={x:t.clientX-Q.x,y:t.clientY-Q.y,pointerId:t.pointerId},Et(!0);return}if(ue.current.size===2){const g=Array.from(ue.current.values()),m=g[0].x-g[1].x,x=g[0].y-g[1].y;nt.current={distance:Math.hypot(m,x),scale:Q.scale,centerX:(g[0].x+g[1].x)/2,centerY:(g[0].y+g[1].y)/2},Me.current=null}},[Q.scale,Q.x,Q.y]),Fs=s.useCallback(t=>{if(ue.current.has(t.pointerId)){if(ue.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),ue.current.size>=2){const r=Array.from(ue.current.values()),g=nt.current;if(!g)return;const m=r[0].x-r[1].x,x=r[0].y-r[1].y,j=Math.hypot(m,x),L=g.scale*(j/g.distance);Mt(L,g.centerX,g.centerY);return}!Me.current||Me.current.pointerId!==t.pointerId||se(r=>re({...r,x:t.clientX-Me.current.x,y:t.clientY-Me.current.y}))}},[re,Mt]),La=s.useCallback(t=>{ue.current.delete(t.pointerId),ue.current.size<2&&(nt.current=null),ue.current.size===0&&(Me.current=null,Et(!1))},[]),$s=s.useCallback(t=>{if(t.key==="ArrowLeft")se(r=>re({...r,x:r.x+Lt}));else if(t.key==="ArrowRight")se(r=>re({...r,x:r.x-Lt}));else if(t.key==="ArrowUp")se(r=>re({...r,y:r.y+Lt}));else if(t.key==="ArrowDown")se(r=>re({...r,y:r.y-Lt}));else if(t.key==="+"||t.key==="=")se(r=>re({...r,scale:r.scale*1.1}));else if(t.key==="-")se(r=>re({...r,scale:r.scale*.9}));else if(t.key==="0")ct();else if(t.key==="Home")se({scale:1,x:0,y:0});else return;t.preventDefault()},[re,ct]),Ha=s.useCallback(()=>{const t=[{value:"horizontal",label:a("agents.layoutHorizontal","Horizontal"),icon:e.jsx(Xa,{size:16}),ariaLabel:a("agents.layoutHorizontalAria","Horizontal layout")},{value:"vertical",label:a("agents.layoutVertical","Vertical"),icon:e.jsx(za,{size:16}),ariaLabel:a("agents.layoutVerticalAria","Vertical layout")},{value:"auto",label:a("agents.layoutAuto","Auto"),icon:e.jsx(mt,{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(r=>{const g=xe===r.value;return e.jsxs("button",{type:"button",className:`btn-icon touch-target agent-org-chart-layout-toggle__button${g?" btn-icon--active":""}`,onClick:()=>_a(r.value),"aria-pressed":g,"aria-label":r.ariaLabel,title:r.ariaLabel,"data-layout-value":r.value,children:[r.icon,e.jsx("span",{className:"agent-org-chart-layout-toggle__text",children:r.label})]},r.value)})})},[_a,xe]),Os=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],Bt=t=>ls(t,xt),zs=ke||pe||Ue===0,Vs=ke||pe||C===0,Bs=ke||pe||Fe||be===0,Ws=ke||pe||Fe||V===0,Da=X&&R.length===0,yt=s.useCallback(()=>{fe(!0)},[]);return e.jsxs("div",{className:"agents-view",children:[e.jsx(jn,{icon:la,title:a("agents.title","Agents"),actions:e.jsxs("div",{className:"agents-view-controls",children:[e.jsxs("div",{className:"view-toggle",children:[e.jsx("button",{className:`view-toggle-btn${q==="list"?" active":""}`,onClick:()=>Vt("list"),title:a("agents.listView","List view"),"aria-label":a("agents.listView","List view"),"aria-pressed":q==="list",children:e.jsx(za,{size:16})}),e.jsx("button",{className:`view-toggle-btn${q==="board"?" active":""}`,onClick:()=>Vt("board"),title:a("agents.boardView","Board view"),"aria-label":a("agents.boardView","Board view"),"aria-pressed":q==="board",children:e.jsx(pt,{size:16})}),e.jsx("button",{className:`view-toggle-btn${q==="org"?" active":""}`,onClick:()=>Vt("org"),title:a("agents.orgChartView","Org Chart view"),"aria-label":a("agents.orgChartView","Org Chart view"),"aria-pressed":q==="org",children:e.jsx(Xa,{size:16})})]}),e.jsxs("div",{className:`agents-view-primary-actions${Ee?" agents-view-primary-actions--controls-open":""}`,children:[e.jsx("button",{ref:ie,className:`btn-icon agent-controls-trigger${Ee?" agent-controls-trigger--active":""}`,onClick:()=>B(t=>!t),title:a("agents.controls","Controls"),"aria-label":a("agents.controls","Controls"),"aria-haspopup":"dialog","aria-expanded":Ee,"aria-controls":$t,children:e.jsx(yn,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void D(),title:a("agents.refresh","Refresh"),"aria-label":a("agents.refresh","Refresh"),children:e.jsx(mt,{size:16,className:X?"spin":void 0})}),!w&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{ye(!0),B(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(ia,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{yt(),B(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(Va,{size:16}),a("agents.newAgent","New Agent")]})]}),Ee&&e.jsxs("div",{ref:tt,id:$t,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(Nn,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:Y,onChange:t=>O(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:i,onChange:t=>f(t.target.checked),"aria-label":a("agents.showSystemAgents","Show system agents")}),a("agents.showSystemAgents","Show system agents")]})]})}),w&&e.jsxs("div",{className:"agent-controls-mobile-actions",children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{ye(!0),B(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(ia,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{yt(),B(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(Va,{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:zs,onClick:()=>{B(!1),Ca("paused")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(Pt,{}),e.jsx("span",{children:a("agents.pauseAllAgents","Pause All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:ke?a("agents.loadingEligibility","Loading eligibility…"):Ue===0?a("agents.noAgentsToPauseHint","No active or running project agents to pause"):a("agents.pauseCountHint",{count:Ue,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:Bs,onClick:()=>{B(!1),Aa(!0)},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(wt,{}),e.jsx("span",{children:a("agents.enableAllHeartbeats","Enable all heartbeats")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:a("agents.enableHeartbeatsCountHint","Enable {{count}} disabled project heartbeats",{count:be})})]}),e.jsxs("button",{type:"button",className:"agent-detail-bulk-menu-item",role:"menuitem",disabled:Ws,onClick:()=>{B(!1),Aa(!1)},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(Pt,{}),e.jsx("span",{children:a("agents.disableAllHeartbeats","Disable all heartbeats")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:a("agents.disableHeartbeatsCountHint","Disable {{count}} enabled project heartbeats",{count:V})})]}),e.jsxs("button",{type:"button",className:"agent-detail-bulk-menu-item",role:"menuitem",disabled:Vs,onClick:()=>{B(!1),Ca("active")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(wt,{}),e.jsx("span",{children:a("agents.resumeAllAgents","Resume All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:ke?a("agents.loadingEligibility","Loading eligibility…"):C===0?a("agents.noAgentsToResumeHint","No paused project agents to resume"):a("agents.resumeCountHint",{count:C,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:xt,onChange:t=>{const r=Number(t.target.value);ka(Number.isFinite(r)&&r>0?r:1)},disabled:ya}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",xt.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(ea.reduce((t,r)=>Math.abs(r-xt)<Math.abs(t-xt)?r:t,ea[0])),onChange:t=>{const r=Number(t.target.value);ka(Number.isFinite(r)&&r>0?r:1)},disabled:ya,"aria-label":a("agents.heartbeatSpeedPreset","Heartbeat speed preset"),children:ea.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(Gn,{agents:vt})]})]})]})}),e.jsx(ol,{isOpen:le,onClose:()=>{fe(!1),S(null)},onCreated:()=>{fe(!1),S(null),D()},projectId:l,prefillDraft:G,agentOnboardingEnabled:u,existingAgents:R,onPrefillDraft:S}),e.jsx(dl,{isOpen:me,onClose:()=>ye(!1),onImported:()=>void D(),projectId:l}),e.jsx(il,{stats:F,activeAgents:As,projectId:l,isOpen:K,onToggle:()=>Te(t=>!t),onSelectAgent:zt,onOpenTaskLogs:d}),q==="org"?e.jsx("div",{className:"agents-org-full-view",children:e.jsx("div",{className:"agents-view-content agents-view-content--org-full",children:z?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:Ze,"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(ts,{inline:!0,showInlineBackButton:!1,agentId:z,projectId:l,onClose:Ze,addToast:n,onChildClick:Ta,initialTab:oe,initialRunId:J,preferActiveRun:Se},z)})]}):Da?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(mt,{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:[w?e.jsxs("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:[Ha(),Pa()]}):e.jsxs("div",{className:"agent-org-chart-toolbar",children:[Ha(),e.jsx("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:Pa()})]}),e.jsx("div",{ref:Ae,className:"agent-org-chart-viewport","data-testid":"agent-org-chart-viewport",tabIndex:0,role:"region","aria-label":a("agents.orgChartCanvas","Org chart canvas"),onWheel:Hs,onPointerDown:Ds,onPointerMove:Fs,onPointerUp:La,onPointerCancel:La,onKeyDown:$s,"data-panning":ft?"true":"false",children:e.jsxs("div",{ref:at,className:`agent-org-chart-canvas agent-org-chart-canvas--zoom-${Math.round((Q.scale??1)*100)}`,"data-panning":ft?"true":"false",style:{transform:`translate(${Q.x}px, ${Q.y}px) scale(${Q.scale})`},children:[e.jsx("div",{className:`agent-org-chart${_t==="vertical"?" agent-org-chart--vertical":""}`,"data-testid":"agent-org-chart","data-layout-mode":_t,children:We?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx(mt,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingOrgChart","Loading org chart...")})]}):qe.length===0?e.jsx(Zt,{onCtaClick:yt}):(Be.current=[],qe.map(t=>e.jsx(xs,{node:t,onSelect:Ms,getHealthStatus:Bt,selectedAgentId:he,registerNodeElement:Ls,linksRef:Be,activityByAgentId:v.activityByAgentId,nowTick:v.nowTick},t.agent.id)))}),e.jsx(fl,{links:Be.current,nodeElements:st.current,canvasRef:at,viewportRef:Ae,layoutMode:_t,transform:Q,activityEvents:v.events,nowTick:v.nowTick})]})})]})})}):e.jsxs("div",{className:"agents-split-layout",style:w?void 0:{gridTemplateColumns:`${y}px var(--space-sm) minmax(0, 1fr)`},children:[e.jsx("div",{className:`agents-split-sidebar${Pe?" agents-split-sidebar--hidden-mobile":""}`,children:e.jsx("div",{className:"agents-view-content",children:Da?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(mt,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingAgents","Loading agents...")})]}):q==="board"?e.jsx("div",{className:"agent-board",children:vt.length===0?e.jsx(Zt,{onCtaClick:yt}):vt.map(t=>{const r=Bt(t),g=ma(t,r,a),m=ua(t.state),x=ga("agent-board-card",t.state);return e.jsxs("div",{className:`agent-board-card ${x}${z===t.id?" agent-card--selected":""}`,children:[e.jsxs("div",{ref:M(`board:${t.id}`),className:"agent-board-clickable",onClick:()=>ve(t.id),role:"button",tabIndex:0,onKeyDown:j=>{(j.key==="Enter"||j.key===" ")&&(j.key===" "&&j.preventDefault(),ve(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:Ma(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}),t.taskId&&e.jsx(sa,{taskId:t.taskId,isInViewport:W(`board:${t.id}`),projectId:l}),e.jsxs("div",{className:"agent-board-health",style:{color:r.color},title:g.title,children:[r.icon,g.label?` ${g.label}`:""]})]}),e.jsxs("div",{className:"agent-board-actions",children:[e.jsx(bl,{agent:t,pending:Fe||Ke.has(t.id),onToggle:j=>void Ra(j,!ht(j))}),(t.state==="idle"||t.state==="paused"||t.state==="error")&&e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void Sa(t.id,t.name),title:a("agents.delete","Delete"),children:e.jsx(Ba,{size:14})})]})]},t.id)})}):e.jsx("div",{className:"agent-list",children:vt.length===0?e.jsx(Zt,{onCtaClick:yt}):vt.map(t=>{const r=Bt(t),g=ma(t,r,a),m=ua(t.state),x=ga("agent-card",t.state),j=aa(t.runtimeConfig?.heartbeatIntervalMs),L=wn(j),ce=!ht(t)?ta:String(j),ne=Fe||ws===t.id||Ke.has(t.id),je=pl(t,ks);return e.jsxs("div",{ref:M(`list:${t.id}`),className:`agent-card agent-card--clickable ${x}${z===t.id?" agent-card--selected":""}`,onClick:b=>{const $=b.target;if($===b.currentTarget){ve(t.id);return}const Ce=$.closest('button, select, input, [role="button"]');Ce&&Ce!==b.currentTarget||ve(t.id)},role:"button",tabIndex:0,onKeyDown:b=>{b.target===b.currentTarget&&(b.key==="Enter"||b.key===" ")&&(b.key===" "&&b.preventDefault(),ve(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:[ys===t.id?e.jsx("select",{ref:Ns,className:"select agent-role-select",value:t.role,onChange:b=>void Ss(t.id,b.target.value),onKeyDown:b=>Rs(b,t.id),onBlur:()=>lt(null),autoFocus:!0,children:p.map(b=>e.jsxs("option",{value:b.value,children:[b.icon," ",b.label]},b.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:b=>{b.stopPropagation(),lt(t.id)},title:a("agents.clickToChangeRole","Click to change role"),role:"button",tabIndex:0,onKeyDown:b=>{(b.key==="Enter"||b.key===" ")&&(b.stopPropagation(),lt(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(rs,{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:r.color},title:g.title,children:[r.icon,g.label?` ${g.label}`:""]}),e.jsx("span",{className:"badge text-secondary",children:Ma(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 b=Os(t);if(b.length===0)return null;const $=b.slice(0,2),Ce=b.length-2;return e.jsxs(e.Fragment,{children:[$.map(Wt=>e.jsx("span",{className:"badge badge-skill",title:Wt,children:_n(Wt)},Wt)),Ce>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",Ce]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[e.jsxs("div",{className:"agent-model-runtime",children:[e.jsxs("span",{className:"text-secondary",children:[je.isRuntime?a("agents.runtime","Runtime"):a("agents.model","Model"),":"]}),e.jsx("span",{className:"badge agent-model-runtime__value",title:je.label??a("agents.auto","Auto"),children:je.label??a("agents.auto","Auto")})]}),t.state==="error"&&t.lastError?e.jsx(kn,{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:e.jsx(is,{taskId:t.taskId,taskColumn:t.taskColumn})}),e.jsx(sa,{taskId:t.taskId,isInViewport:W(`list:${t.id}`),projectId:l})]}),!$e(t)&&e.jsxs("div",{className:"agent-heartbeat-control",children:[e.jsx("span",{className:"text-secondary",children:a("agents.heartbeat","Heartbeat:")}),xa===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:va[t.id]??"",onChange:b=>Ye($=>({...$,[t.id]:b.target.value})),onKeyDown:b=>{b.key==="Enter"?Ea(t):b.key==="Escape"&&(rt(null),Ye($=>{const Ce={...$};return delete Ce[t.id],Ce}))},disabled:ne,"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 Ea(t),disabled:ne,title:a("agents.saveCustomInterval","Save custom interval"),children:a("agents.save","Save")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>{rt(null),Ye(b=>{const $={...b};return delete $[t.id],$})},disabled:ne,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:ce,onChange:b=>{const $=b.target.value;$===ta?Ts(t):$==="__custom__"?Is(t):Es(t,Number($))},disabled:ne,"aria-label":a("agents.setHeartbeatAria","Set heartbeat interval for {{name}}",{name:t.name}),children:[e.jsx("option",{value:ta,children:a("agents.heartbeatDisabledOption","Disabled")}),L.map(b=>e.jsx("option",{value:b.value,children:b.label},b.value)),Cn.some(b=>b.value===j)&&e.jsx("option",{value:"__custom__",children:a("agents.customHeartbeatOption","Custom...")})]})}),ne&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:a("agents.saving","Saving…")}),t.lastHeartbeatAt&&(()=>{const b=new Date(t.lastHeartbeatAt),$=new Date(b.getTime()+j),Ce=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"agent-heartbeat-last text-secondary",title:b.toLocaleString(),children:a("agents.lastHeartbeatAt","Last: {{time}}",{time:b.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})}),Ce&&e.jsx("span",{className:"agent-heartbeat-next text-secondary",title:$.toLocaleString(),children:a("agents.nextHeartbeatAt","Next: {{time}}",{time:$.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 jt(t.id,"active"),disabled:Xe.has(t.id),title:a("agents.activate","Activate"),children:[e.jsx(wt,{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 Ps(t.id,t.name),disabled:Xe.has(t.id),title:a("agents.runNow","Run Now"),"aria-label":a("agents.runNowAria","Run now for {{name}}",{name:t.name}),children:[e.jsx(pt,{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 jt(t.id,"paused"),disabled:Xe.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(Pt,{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 jt(t.id,"active"),disabled:Xe.has(t.id),title:a("agents.resume","Resume"),children:[e.jsx(wt,{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:()=>ve(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(pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.running","Running")})]}),e.jsxs("button",{className:"btn btn-sm",onClick:()=>void jt(t.id,"paused"),disabled:Xe.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(Pt,{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 jt(t.id,"active"),disabled:Xe.has(t.id),title:a("agents.retry","Retry"),children:[e.jsx(wt,{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:()=>ve(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(An,{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 Sa(t.id,t.name),title:a("agents.delete","Delete"),children:[e.jsx(Ba,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.delete","Delete")})]})]})]})]},t.id)})})})}),!w&&e.jsx("div",{className:"agents-split-resize-handle","data-testid":"agents-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":ms,"aria-valuemax":hs,"aria-valuenow":y,"aria-label":a("agents.resizeSidebar","Resize agents sidebar"),tabIndex:0,onPointerDown:vs,onKeyDown:js}),e.jsx("div",{className:`agents-split-detail${w&&!z?" agents-split-detail--hidden-mobile":""}`,children:z?e.jsx(s.Suspense,{fallback:null,children:e.jsx(ts,{inline:!0,showInlineBackButton:w,agentId:z,projectId:l,onClose:Ze,addToast:n,onChildClick:Ta,initialTab:oe,initialRunId:J,preferActiveRun:Se,onMutationSuccess:_s},z)}):e.jsxs("div",{className:"agents-detail-empty-state",children:[e.jsx(la,{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{Tl as AgentsView};
|
|
24
|
+
Agent instructions go here...`),value:k,onChange:c=>{f("paste"),A([]),I(c.target.value),G(null)},rows:8,"aria-label":a("agents.manifestContent","Manifest content")})]}),e.jsx("p",{className:"agent-import-file-hint",children:a("agents.currentInput","Current input: {{method}}",{method:i})}),fe&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(Nt,{size:14}),fe]})]}),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:a("agents.company","Company")}),e.jsx("span",{className:"agent-import-company-name",children:P})]}),y.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:y.map((c,C)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(Nt,{size:12}),e.jsx("span",{children:c})]},C))}),e.jsxs("div",{className:"agent-import-count",children:[e.jsx(na,{size:14}),e.jsx("span",{children:a("agents.agentsFound","{{count}} agent{{plural}} found",{count:M.length,plural:M.length!==1?"s":""})})]}),M.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>z(M.map(c=>c.name)),children:a("agents.selectAllAgents","Select all agents")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>z([]),children:a("agents.clearAgents","Clear agents")})]}),M.length>0?e.jsx("div",{className:"agent-import-agent-list",children:M.map((c,C)=>e.jsxs("div",{className:"agent-import-agent-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":a("agents.selectAgent","Select agent {{name}}",{name:c.name}),checked:Y.includes(c.name),onChange:()=>De(c.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:c.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:c.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[c.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[c.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:c.role}),c.reportsTo&&e.jsx("span",{className:"agent-import-agent-reports",children:a("agents.importReportsTo"," · reports to {{agent}}",{agent:c.reportsTo})}),c.skills&&c.skills.length>0&&e.jsx("span",{className:"agent-import-agent-model",children:a("agents.importSkills"," · skills: {{skills}}",{skills:c.skills.join(", ")})})]}),c.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[c.instructionsText.slice(0,100),c.instructionsText.length>100?"...":""]})]})]},C))}):e.jsx("p",{className:"agent-import-empty",children:a("agents.noAgentsFound","No agents found in the manifest.")}),U.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(na,{size:14}),e.jsx("span",{children:a("agents.skillsFound","{{count}} skill{{plural}} found",{count:U.length,plural:U.length!==1?"s":""})})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>F(U.map(c=>c.name)),children:a("agents.selectAllSkills","Select all skills")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>F([]),children:a("agents.clearSkills","Clear skills")})]}),e.jsx("div",{className:"agent-import-skill-list",children:U.map((c,C)=>e.jsxs("div",{className:"agent-import-skill-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":a("agents.selectSkill","Select skill {{name}}",{name:c.name}),checked:R.includes(c.name),onChange:()=>Ue(c.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:c.name}),c.description&&e.jsx("span",{className:"agent-import-skill-description",children:c.description})]})]},`${c.name}-${C}`))})]}),ye&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(Nt,{size:14}),ye]})]}),v==="result"&&S&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(Ht,{size:32})}),e.jsx("h3",{className:"agent-import-result-title",children:a("agents.importComplete","Import Complete")}),e.jsxs("p",{className:"agent-import-result-company",children:[a("agents.from","From")," ",e.jsx("strong",{children:S.companyName??"Unknown"})]}),e.jsxs("div",{className:"agent-import-result-stats",children:[S.created.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:a("agents.resultCreated","{{count}} created",{count:S.created.length})})}),S.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:a("agents.resultSkipped","{{count}} skipped (already exist)",{count:S.skipped.length})})}),S.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:a("agents.resultErrors","{{count}} error{{plural}}",{count:S.errors.length,plural:S.errors.length!==1?"s":""})})})]}),S.created.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:S.created.map((c,C)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Ht,{size:12}),e.jsx("span",{children:c.name})]},C))}),S.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:S.errors.map((c,C)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(za,{size:12}),e.jsxs("span",{children:[c.name,": ",c.error]})]},C))}),S.warnings&&S.warnings.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:S.warnings.map((c,C)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(Nt,{size:12}),e.jsx("span",{children:c})]},C))}),S.skills&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-result-divider"}),e.jsx("h4",{className:"agent-import-result-section-title",children:a("agents.skills","Skills")}),e.jsxs("div",{className:"agent-import-result-stats",children:[S.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:a("agents.skillsImported","{{count}} skill{{plural}} imported",{count:S.skills.imported.length,plural:S.skills.imported.length!==1?"s":""})})}),S.skills.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:a("agents.skillsSkipped","{{count}} skill{{plural}} skipped (already exist)",{count:S.skills.skipped.length,plural:S.skills.skipped.length!==1?"s":""})})}),S.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:a("agents.skillsErrors","{{count}} skill{{plural}} error{{pluralError}}",{count:S.skills.errors.length,plural:S.skills.errors.length!==1?"s":"",pluralError:S.skills.errors.length!==1?"s":""})})}),S.skills.imported.length===0&&S.skills.skipped.length===0&&S.skills.errors.length===0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:a("agents.noSkillsInPackage","No skills in package")})})]}),S.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:S.skills.imported.map((c,C)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Ht,{size:12}),e.jsx("span",{children:c.name})]},C))}),S.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:S.skills.errors.map((c,C)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(za,{size:12}),e.jsxs("span",{children:[c.name,": ",c.error]})]},C))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[v==="preview"&&e.jsx("button",{className:"btn",onClick:()=>p("input"),disabled:ge,children:a("agents.back","Back")}),e.jsx("button",{className:"btn",onClick:Oe,disabled:ge,children:v==="result"?a("agents.close","Close"):a("agents.cancel","Cancel")}),v==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void bt(),disabled:X||(i==="directory"?T.length===0:i==="browse"?!J:!k.trim()),children:X?e.jsxs(e.Fragment,{children:[e.jsx(Ut,{size:14,className:"spin"}),a("agents.parsing","Parsing...")]}):a("agents.preview","Preview")}),v==="preview"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void Te(),disabled:ge||B===0&&K===0,children:ge?e.jsxs(e.Fragment,{children:[e.jsx(Ut,{size:14,className:"spin"}),ke]}):a("agents.importButton","Import {{label}}",{label:Ie})})]})]})}):null}const es="(prefers-reduced-motion: reduce)";function ul(){const[n,l]=s.useState(()=>typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia(es).matches);return s.useEffect(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return;const d=window.matchMedia(es),u=()=>l(d.matches);return u(),d.addEventListener("change",u),()=>d.removeEventListener("change",u)},[]),n}const ts=s.lazy(()=>Sn(()=>import("./AgentDetailView-T767kKTg.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])).then(n=>({default:n.AgentDetailView})));function gl(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 ea=[.1,.25,.5,1,2,3,5,10],ta="__disabled__",ml=.25,hl=3,Lt=16,gt=32,as=320,ms=260,hs=520,ps="kb-dashboard-agents-sidebar-width";function da(n){return Math.max(ms,Math.min(hs,n))}function ss(n){if(typeof window>"u")return as;const l=At(ps,n),d=l?Number(l):NaN;return Number.isFinite(d)?da(d):as}function ua(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 ga(n,l){switch(l){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 pl(n,l){const d=n.runtimeConfig??{},u=typeof d.runtimeHint=="string"?d.runtimeHint:"";if(u)return{label:u,isRuntime:!0};const h=typeof d.modelProvider=="string"?d.modelProvider:"",a=typeof d.modelId=="string"?d.modelId:"";if(h&&a)return{label:`${h}/${a}`,isRuntime:!1};const v=typeof d.model=="string"?d.model:"";if(v.includes("/")){const i=v.indexOf("/");return{label:v.slice(i+1),isRuntime:!1}}const p=Pn(n,l);return{label:p.provider&&p.modelId?`${p.provider}/${p.modelId}`:null,isRuntime:!1}}function bs(n){return n.children.length===0?1:n.children.reduce((l,d)=>l+bs(d),0)}function fs(n,l){for(const d of n){if(d.agent.id===l)return d.agent;const u=fs(d.children,l);if(u)return u}}function ma(n,l,d){return n.state==="error"?{title:void 0,label:d("agents.healthError","Error")}:{title:l.reason??l.label,label:l.stateDerived?null:l.label}}function bl({agent:n,pending:l,onToggle:d}){const{t:u}=_e("app");if($e(n))return null;const h=ht(n),a=h?u("agents.disableHeartbeat","Disable heartbeat"):u("agents.enableHeartbeat","Enable heartbeat");return e.jsx("button",{type:"button",className:"btn btn-sm agent-heartbeat-toggle",disabled:l,"aria-pressed":h,"aria-label":u("agents.heartbeatActionForAgent","{{action}} for {{name}}",{action:a,name:n.name}),onClick:v=>{v.stopPropagation(),d(n)},children:l?u("agents.heartbeatUpdating","Updating heartbeat…"):a})}function xs({node:n,onSelect:l,getHealthStatus:d,selectedAgentId:u,registerNodeElement:h,linksRef:a,activityByAgentId:v,nowTick:p}){const{t:i}=_e("app"),{agent:f,children:k}=n,I=d(f),T=ma(f,I,i),A=ua(f.state),P=ga("org-chart-node-card",f.state),E=bs(n),M=Jn(f,v.get(f.id),p,I),W=M==="unknown"?"":` org-chart-node-card--activity-${M}`,U={"--org-chart-subtree-leaves":String(E)};return e.jsxs("div",{className:`org-chart-node${k.length>0?" org-chart-node--has-children":""}`,style:U,children:[e.jsxs("div",{ref:w=>h(f.id,w),"data-agent-id":f.id,className:`org-chart-node-card ${P}${W}${u===f.id?" agent-card--selected":""}`,...M==="unknown"?{}:{"data-activity-state":M,"aria-label":`${f.name}: ${M}`},onClick:()=>l(f.id),role:"button",tabIndex:0,onKeyDown:w=>{(w.key==="Enter"||w.key===" ")&&(w.key===" "&&w.preventDefault(),l(f.id))},children:[e.jsxs("div",{className:"org-chart-node__header",children:[e.jsx("span",{className:"org-chart-node__icon",children:e.jsx(Ft,{agent:f,size:20})}),e.jsx("span",{className:"org-chart-node__name",children:f.name})]}),e.jsxs("div",{className:"org-chart-node__meta",children:[e.jsx("span",{className:`org-chart-node__badge ${A}`,children:f.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:I.color},title:T.title,children:[I.icon,T.label&&e.jsx("span",{className:"text-secondary",children:T.label})]})]})]}),k.length>0&&e.jsx("div",{className:"org-chart-children",role:"group","aria-label":i("agents.orgChartEmployees","{{name}} employees",{name:f.name}),children:k.map(w=>(a.current.push({parentId:f.id,childId:w.agent.id}),e.jsx(xs,{node:w,onSelect:l,getHealthStatus:d,selectedAgentId:u,registerNodeElement:h,linksRef:a,activityByAgentId:v,nowTick:p},w.agent.id)))})]})}function fl({links:n,nodeElements:l,canvasRef:d,viewportRef:u,layoutMode:h,transform:a,activityEvents:v,nowTick:p}){const[i,f]=s.useState([]),k=ul(),I=s.useMemo(()=>Qn(n,v,p),[v,n,p]);return s.useLayoutEffect(()=>{const T=d.current,A=u.current;if(!T||!A||n.length===0){f([]);return}const P=()=>{const M=T.getBoundingClientRect(),W=n.flatMap(({parentId:U,childId:w})=>{const y=l.get(U),_=l.get(w);if(!y||!_)return[];const Y=y.getBoundingClientRect(),z=_.getBoundingClientRect(),R=(Y.left-M.left)/a.scale,F=(Y.top-M.top)/a.scale,X=(z.left-M.left)/a.scale,D=(z.top-M.top)/a.scale;if(h==="vertical"){const me=R,ye=F+Y.height/a.scale/2,O=X,ee=D+z.height/a.scale/2,he=me-(me-O)/2;return[{d:`M ${me} ${ye} L ${he} ${ye} L ${he} ${ee} L ${O} ${ee}`,link:{parentId:U,childId:w}}]}const ge=R+Y.width/a.scale/2,le=F+Y.height/a.scale,fe=X+z.width/a.scale/2,G=D,S=le+(G-le)/2;return[{d:`M ${ge} ${le} L ${ge} ${S} L ${fe} ${S} L ${fe} ${G}`,link:{parentId:U,childId:w}}]});f(W)};P();const E=new ResizeObserver(P);return E.observe(T),E.observe(A),l.forEach(M=>E.observe(M)),()=>E.disconnect()},[d,h,n,l,a.scale,u]),e.jsx("svg",{className:"agent-org-chart-connectors","aria-hidden":"true",children:i.map(({d:T,link:A})=>{const P=I.get(ca(A.parentId,A.childId)),E=P?` agent-org-chart-connectors__flow--${k?"static ":""}${P}`:"";return e.jsx("path",{d:T,className:E||void 0,...P?{"data-flow-direction":P}:{}},`${A.parentId}-${A.childId}-${T}`)})})}function El({addToast:n,projectId:l,onOpenTaskLogs:d,agentOnboardingEnabled:u=!1,focusAgent:h}){const{t:a}=_e("app"),v=gs(l),p=gl(a),[i,f]=s.useState(!1),k=s.useRef(new Map),I=s.useRef(new Map),T=s.useRef(new Map),[A,P]=s.useState(new Set),E=s.useRef(null);s.useEffect(()=>{if(typeof IntersectionObserver>"u")return;const t=new IntersectionObserver(r=>{P(g=>{let m=!1;const x=new Set(g);for(const j of r){const L=I.current.get(j.target);L&&(j.isIntersecting?x.has(L)||(x.add(L),m=!0):x.has(L)&&(x.delete(L),m=!0))}return m?x:g})},{rootMargin:"200px"});return E.current=t,k.current.forEach(r=>t.observe(r)),()=>{t.disconnect(),E.current=null}},[]);const M=s.useCallback(t=>{const r=T.current.get(t);if(r)return r;const g=m=>{const x=k.current.get(t);x&&(E.current?.unobserve(x),I.current.delete(x)),m?(k.current.set(t,m),I.current.set(m,t),E.current?E.current.observe(m):P(j=>j.has(t)?j:new Set(j).add(t))):(k.current.delete(t),T.current.delete(t),P(j=>{if(!j.has(t))return j;const L=new Set(j);return L.delete(t),L}))};return T.current.set(t,g),g},[]),W=s.useCallback(t=>typeof IntersectionObserver>"u"?!0:A.has(t),[A]),w=gn()==="mobile",[y,_]=s.useState(()=>ss(l)),[Y,z]=s.useState("all"),{agents:R,stats:F,isLoading:X,loadAgents:D,refreshAgents:ge}=mn(l,{filterState:Y,showSystemAgents:i}),[le,fe]=s.useState(!1),[G,S]=s.useState(null),[me,ye]=s.useState(!1),[O,ee]=s.useState(null),[he,ze]=s.useState(null),Pe=w&&!!O,[oe,Le]=s.useState("dashboard"),[J,Ne]=s.useState(null),[Se,we]=s.useState(!1),[q,te]=s.useState(()=>{if(typeof window>"u")return"list";const t=At("fn-agent-view",l);return t==="list"||t==="board"||t==="org"?t:"list"}),[xe,He]=s.useState(()=>{if(typeof window>"u")return"auto";const t=At(Kt,l);return Ka(t)?t:"auto"}),[Re,Oe]=s.useState([]),[We,Qe]=s.useState(!1),[Ve,bt]=s.useState(0),[Te,B]=s.useState(!1),[K,Ee]=s.useState(!1),[pe,Ie]=s.useState(!1),[ke,De]=s.useState(!1),[Ue,c]=s.useState(0),[C,H]=s.useState(0),[be,ae]=s.useState(0),[V,et]=s.useState(0),[Q,se]=s.useState({scale:1,x:0,y:0}),[ft,Tt]=s.useState(!1),tt=s.useRef(null),Ae=s.useRef(null),at=s.useRef(null),st=s.useRef(new Map),Be=s.useRef([]),ue=s.useRef(new Map),Me=s.useRef(null),nt=s.useRef(null),o=s.useRef(!1),{confirm:N}=hn(),ie=s.useRef(null),$t=s.useId();s.useEffect(()=>{_(ss(l))},[l]),s.useEffect(()=>{const t=At("fn-agent-view",l);if(t==="list"||t==="board"||t==="org"){te(t);return}te("list")},[l]),s.useEffect(()=>{Gt("fn-agent-view",q,l)},[q,l]),s.useEffect(()=>{const t=At(Kt,l);He(Ka(t)?t:"auto")},[l]),s.useEffect(()=>{Gt(Kt,xe,l)},[xe,l]);const Ge=s.useCallback(t=>{try{Gt(ps,String(t),l)}catch{}},[l]),vs=s.useCallback(t=>{if(w)return;t.preventDefault(),t.stopPropagation();const r=t.currentTarget;typeof r.setPointerCapture=="function"&&r.setPointerCapture(t.pointerId);const g=t.clientX,m=y;let x=m;document.body.style.userSelect="none";const j=Z=>{const ce=Z.clientX-g,ne=da(m+ce);x=ne,_(ne)},L=Z=>{typeof r.releasePointerCapture=="function"&&r.releasePointerCapture(Z.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",j),document.removeEventListener("pointerup",L),Ge(x)};document.addEventListener("pointermove",j),document.addEventListener("pointerup",L)},[w,Ge,y]),js=s.useCallback(t=>{if(w||t.key!=="ArrowLeft"&&t.key!=="ArrowRight")return;t.preventDefault();const r=t.shiftKey?50:10,g=t.key==="ArrowLeft"?-r:r,m=da(y+g);_(m),Ge(m)},[w,Ge,y]),[ys,lt]=s.useState(null),Ns=s.useRef(null),[ws,it]=s.useState(null),[Ke,ba]=s.useState(new Set),[Fe,fa]=s.useState(!1),[xa,rt]=s.useState(null),[va,Ye]=s.useState({}),[xt,ja]=s.useState(1),[ks,Cs]=s.useState({}),[ya,Na]=s.useState(!1),[Xe,wa]=s.useState(new Set),[zt,ot]=s.useState(new Map),Et=s.useRef(!0);s.useEffect(()=>(Et.current=!0,()=>{Et.current=!1}),[]),s.useEffect(()=>{pn(l).then(t=>{Et.current&&(ja(t.heartbeatMultiplier??1),Cs(t))}).catch(()=>{})},[l]);const ka=s.useCallback(async t=>{const r=Number.isFinite(t)&&t>0?t:1;ja(r),Na(!0);try{await bn({heartbeatMultiplier:r},l),n(a("agents.heartbeatSpeedSet","Heartbeat speed set to ×{{value}}",{value:r.toFixed(1)}),"success")}catch(g){n(a("agents.heartbeatSpeedSaveFailed","Failed to save heartbeat multiplier: {{error}}",{error:de(g)}),"error")}finally{Et.current&&Na(!1)}},[l,n]),It=s.useMemo(()=>zt.size===0?R:R.map(t=>{const r=zt.get(t.id);return r?{...t,state:r}:t}),[R,zt]),vt=s.useMemo(()=>It.filter(t=>i||!$e(t)),[It,i]),As=s.useMemo(()=>It.filter(t=>t.state!=="active"&&t.state!=="running"?!1:i||!$e(t)),[It,i]),qe=s.useMemo(()=>{if(i)return Re;const t=r=>$e(r.agent)?null:{...r,children:r.children.map(t).filter(g=>g!==null)};return Re.map(t).filter(r=>r!==null)},[Re,i]);s.useEffect(()=>{if(q!=="org")return;const t=Ae.current;if(!t)return;const r=()=>{bt(t.clientWidth)};r();const g=typeof ResizeObserver<"u"?new ResizeObserver(r):null;return g?.observe(t),window.addEventListener("resize",r),()=>{g?.disconnect(),window.removeEventListener("resize",r)}},[q,qe.length]),s.useEffect(()=>{if(q!=="org")return;let t=!1;return Qe(!0),fn(l,{includeEphemeral:i}).then(r=>{t||Oe(r)}).catch(r=>{t||(n(a("agents.orgChartLoadFailed","Failed to load org chart: {{error}}",{error:de(r)}),"error"),Oe([]))}).finally(()=>{t||Qe(!1)}),()=>{t=!0}},[q,l,i,n]),s.useEffect(()=>{const t=setInterval(()=>{D()},3e4);return()=>{clearInterval(t)}},[D]),s.useEffect(()=>{if(!Te)return;let t=!1;De(!0),Dt(void 0,l).then(m=>{if(t)return;const x=m.filter(j=>!$e(j));c(x.filter(j=>j.state==="active"||j.state==="running").length),H(x.filter(j=>j.state==="paused").length),ae(x.filter(j=>!ht(j)).length),et(x.filter(j=>ht(j)).length)}).catch(m=>{t||(c(0),H(0),ae(0),et(0),n(a("agents.bulkActionsLoadFailed","Failed to load bulk agent actions: {{error}}",{error:de(m)}),"error"))}).finally(()=>{t||De(!1)});const r=m=>{const x=m.target;x&&(tt.current?.contains(x)||ie.current?.contains(x)||B(!1))},g=m=>{m.key==="Escape"&&(B(!1),ie.current?.focus())};return document.addEventListener("mousedown",r),document.addEventListener("touchstart",r),document.addEventListener("keydown",g),()=>{t=!0,document.removeEventListener("mousedown",r),document.removeEventListener("touchstart",r),document.removeEventListener("keydown",g)}},[n,Te,l]);const Ca=async t=>{if(!pe){Ie(!0);try{const g=(await Dt(void 0,l)).filter(b=>!$e(b)),m=g.filter(b=>t==="paused"?b.state==="active"||b.state==="running":b.state==="paused"),x=g.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 N({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 L=await Promise.allSettled(m.map(b=>Wa(b.id,t,l))),Z=L.map((b,$)=>({result:b,agent:m[$]})).filter(b=>b.result.status==="rejected"),ce=L.length-Z.length,ne=Z.length,je=t==="paused"?a("agents.pausedSummary",{count:ce,skipped:x,defaultValue_one:"Paused {{count}} agent; skipped {{skipped}}",defaultValue_other:"Paused {{count}} agents; skipped {{skipped}}"}):a("agents.resumedSummary",{count:ce,skipped:x,defaultValue_one:"Resumed {{count}} agent; skipped {{skipped}}",defaultValue_other:"Resumed {{count}} agents; skipped {{skipped}}"});if(ne>0){const b=Z.slice(0,3).map(({agent:$,result:Ce})=>`${$.name||$.id}: ${de(Ce.reason)}`).join("; ");n(`${je}; failed ${ne}${b?` (${b})`:""}`,"error")}else n(je,"success");await D()}catch(r){n(t==="paused"?a("agents.pauseAgentsFailed","Failed to pause agents: {{error}}",{error:de(r)}):a("agents.resumeAgentsFailed","Failed to resume agents: {{error}}",{error:de(r)}),"error")}finally{Ie(!1)}}},Aa=async t=>{if(!(Fe||pe||Ke.size>0)){fa(!0);try{const r=await Dt(void 0,l),m=r.filter(b=>!$e(b)).filter(b=>ht(b)!==t),x=r.length-m.length;if(m.length===0){n(t?a("agents.noHeartbeatsToEnable","No agent heartbeats need enabling"):a("agents.noHeartbeatsToDisable","No agent heartbeats need disabling"),"error");return}if(!await N({title:t?a("agents.enableAllHeartbeats","Enable all heartbeats"):a("agents.disableAllHeartbeats","Disable all heartbeats"),message:t?a("agents.enableAllHeartbeatsConfirm","Enable heartbeats for {{count}} project agents?",{count:m.length}):a("agents.disableAllHeartbeatsConfirm","Disable heartbeats for {{count}} project agents?",{count:m.length}),danger:!t}))return;const L=await Promise.allSettled(m.map(b=>dt(b.id,{runtimeConfig:kt(b,t)},l))),Z=L.map((b,$)=>({result:b,agent:m[$]})).filter(b=>b.result.status==="rejected"),ce=L.length-Z.length,ne=t?a("agents.enableHeartbeatsSummary","Enabled {{count}} heartbeats; skipped {{skipped}}",{count:ce,skipped:x}):a("agents.disableHeartbeatsSummary","Disabled {{count}} heartbeats; skipped {{skipped}}",{count:ce,skipped:x}),je=Z.slice(0,3).map(({agent:b,result:$})=>`${b.name||b.id}: ${de($.reason)}`).join("; ");n(Z.length?`${ne}; ${a("agents.bulkFailures","failed {{count}}",{count:Z.length})}${je?` (${je})`:""}`:ne,Z.length?"error":"success"),await D()}catch(r){n(a("agents.heartbeatUpdateFailed","Failed to update heartbeat: {{error}}",{error:de(r)}),"error")}finally{fa(!1)}}},jt=async(t,r)=>{if(!Xe.has(t)){wa(g=>new Set(g).add(t)),ot(g=>{const m=new Map(g);return m.set(t,r),m});try{await Wa(t,r,l),n(a("agents.stateUpdated","Agent state updated to {{state}}",{state:r}),"success"),await D(),ot(g=>{const m=new Map(g);return m.delete(t),m})}catch(g){ot(m=>{const x=new Map(m);return x.delete(t),x}),n(a("agents.stateUpdateFailed","Failed to update state: {{error}}",{error:de(g)}),"error")}finally{wa(g=>{const m=new Set(g);return m.delete(t),m})}}},Sa=async(t,r)=>{if(await N({title:a("agents.deleteTitle","Delete Agent"),message:a("agents.deleteConfirm",'Delete agent "{{name}}"? This cannot be undone.',{name:r}),danger:!0}))try{await Rn(t,l),n(a("agents.deleted",'Agent "{{name}}" deleted',{name:r}),"success"),await D()}catch(m){n(a("agents.deleteFailed","Failed to delete agent: {{error}}",{error:de(m)}),"error")}},Ss=async(t,r)=>{const g=R.find(m=>m.id===t);if(g){if(g.role===r){lt(null);return}try{await dt(t,{role:r},l),n(a("agents.roleUpdated","Agent role updated to {{role}}",{role:p.find(m=>m.value===r)?.label??r}),"success"),lt(null),D()}catch(m){n(a("agents.roleUpdateFailed","Failed to update role: {{error}}",{error:de(m)}),"error")}}},Rs=(t,r)=>{t.key==="Escape"&<(null)},Ts=async(t,r)=>{if(!(Fe||Ke.has(t.id))){xa===t.id&&(rt(null),Ye(g=>{const m={...g};return delete m[t.id],m})),it(t.id);try{await dt(t.id,{runtimeConfig:{...kt(t,!0),heartbeatIntervalMs:r}},l),n(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:Ua(r),name:t.name}),"success"),D()}catch(g){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:de(g)}),"error")}finally{it(null)}}},Ra=async(t,r)=>{if(!($e(t)||Fe||Ke.has(t.id))){ba(g=>new Set(g).add(t.id));try{await dt(t.id,{runtimeConfig:kt(t,r)},l),n(r?a("agents.heartbeatEnabledForAgent","Heartbeat enabled for {{name}}",{name:t.name}):a("agents.heartbeatDisabled","Heartbeat disabled for {{name}}",{name:t.name}),"success"),await D()}catch(g){n(a("agents.heartbeatUpdateFailed","Failed to update heartbeat: {{error}}",{error:de(g)}),"error")}finally{ba(g=>{const m=new Set(g);return m.delete(t.id),m})}}},Es=t=>Ra(t,!1),Ta=async t=>{if(Fe||Ke.has(t.id))return;const r=va[t.id]??"";if(r.trim()===""){n(a("agents.heartbeatEnterMinutes","Please enter a heartbeat interval in minutes"),"error");return}const g=Number(r);if(isNaN(g)){n(a("agents.heartbeatMustBeNumber","Heartbeat interval must be a valid number"),"error");return}if(g<=0){n(a("agents.heartbeatMustBePositive","Heartbeat interval must be greater than 0"),"error");return}if(g>=1&&g<5){it(t.id);try{await dt(t.id,{runtimeConfig:{...kt(t,!0),heartbeatIntervalMs:Tn}},l),n(a("agents.heartbeatClampedToMin",{count:g,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"),rt(null),Ye(x=>{const j={...x};return delete j[t.id],j}),D()}catch(x){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:de(x)}),"error")}finally{it(null)}return}const m=Math.round(g*6e4);it(t.id);try{await dt(t.id,{runtimeConfig:{...kt(t,!0),heartbeatIntervalMs:m}},l),n(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:Ua(m),name:t.name}),"success"),rt(null),Ye(x=>{const j={...x};return delete j[t.id],j}),D()}catch(x){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:de(x)}),"error")}finally{it(null)}},Is=t=>{if(Fe||Ke.has(t.id))return;const r=aa(t.runtimeConfig?.heartbeatIntervalMs),g=Math.round(r/6e4);rt(t.id),Ye(m=>({...m,[t.id]:String(g)}))},ve=s.useCallback((t,r)=>{ee(t),Le(r?.initialTab??"dashboard"),Ne(r?.initialRunId??null),we(r?.preferActiveRun??!1)},[]),Ze=s.useCallback(()=>{ee(null),Le("dashboard"),Ne(null),we(!1)},[]),Ea=s.useCallback(t=>{ve(t)},[ve]),Ms=s.useCallback(t=>{ze(t),ve(t);const r=R.find(g=>g.id===t)?.taskId??fs(Re,t)?.taskId;r&&d&&d(r)},[R,d,ve,Re]),_s=s.useCallback(async({agentId:t,deleted:r})=>{await ge(),r&&O===t&&Ze()},[ge,O,Ze]),Ot=s.useCallback(t=>{ve(t),w&&Ee(!1)},[w,ve]),Ia=s.useRef(void 0);s.useEffect(()=>{!h||Ia.current===h.requestId||(Ia.current=h.requestId,Ot(h.agentId))},[h,Ot]);const Ps=async(t,r)=>{ot(g=>{const m=new Map(g);return m.set(t,"running"),m});try{await En(t,l,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),n(a("agents.heartbeatRunStarted","Heartbeat run started for {{name}}",{name:r}),"success"),await D(),ot(g=>{const m=new Map(g);return m.delete(t),m})}catch(g){ot(m=>{const x=new Map(m);return x.delete(t),x}),n(a("agents.heartbeatRunFailed","Failed to start heartbeat run: {{error}}",{error:de(g)}),"error")}},Je=s.useCallback(t=>Math.min(hl,Math.max(ml,t)),[]),re=s.useCallback(t=>{const r=Ae.current,g=at.current?.querySelector(".agent-org-chart");if(!r||!g)return{...t,scale:Je(t.scale)};const m=Je(t.scale),x=g.scrollWidth*m,j=g.scrollHeight*m,L=r.clientWidth,Z=r.clientHeight,ce=Math.min(gt,L-x-gt),ne=gt,je=Math.min(gt,Z-j-gt),b=gt;return{scale:m,x:Math.max(ce,Math.min(ne,t.x)),y:Math.max(je,Math.min(b,t.y))}},[Je]),Mt=s.useCallback((t,r,g)=>{const m=Ae.current;m&&se(x=>{const j=Je(t),L=m.getBoundingClientRect(),Z=r-L.left,ce=g-L.top,ne=(Z-x.x)/x.scale,je=(ce-x.y)/x.scale;return re({scale:j,x:Z-ne*j,y:ce-je*j})})},[Je,re]),ct=s.useCallback(()=>{const t=Ae.current,r=at.current?.querySelector(".agent-org-chart");if(!t||!r)return;const g=t.clientWidth,m=t.clientHeight,x=r.scrollWidth,j=r.scrollHeight;if(x<=0||j<=0)return;const L=Je(Math.min(g/x,m/j,1)),Z=(g-x*L)/2,ce=(m-j*L)/2;se(re({scale:L,x:Z,y:ce}))},[Je,re]),Vt=s.useCallback(t=>{te(t),t!=="org"&&se({scale:1,x:0,y:0}),w&&O&&Ze()},[Ze,w,O]),Ma=t=>p.find(r=>r.value===t)?.label??t,_t=s.useMemo(()=>Hn({tree:qe,availableWidth:Ve,preference:xe}),[qe,xe,Ve]),_a=s.useCallback(t=>{He(t),se({scale:1,x:0,y:0})},[]);s.useEffect(()=>{se({scale:1,x:0,y:0}),o.current=!1},[l,_t]),s.useLayoutEffect(()=>{q!=="org"||We||qe.length===0||o.current||(ct(),o.current=!0)},[q,qe.length,ct,We]);const Ls=s.useCallback((t,r)=>{r?st.current.set(t,r):st.current.delete(t)},[]),Pa=s.useCallback(()=>e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>se(t=>re({...t,scale:t.scale*.9})),"aria-label":a("agents.orgChartZoomOut","Zoom out org chart"),title:a("agents.zoomOut","Zoom out"),children:e.jsx(Un,{size:16})}),e.jsxs("span",{className:"agent-org-chart-controls__zoom-label","aria-live":"polite",children:[Math.round(Q.scale*100),"%"]}),e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>se(t=>re({...t,scale:t.scale*1.1})),"aria-label":a("agents.orgChartZoomIn","Zoom in org chart"),title:a("agents.zoomIn","Zoom in"),children:e.jsx(Bn,{size:16})}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm agent-org-chart-controls__fit-btn",onClick:ct,"aria-label":a("agents.orgChartFit","Fit org chart"),title:a("agents.orgChartFit","Fit org chart"),children:[e.jsx(xn,{size:16}),a("agents.fit","Fit")]}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm",onClick:()=>se(t=>re({...t,x:0,y:0})),"aria-label":a("agents.orgChartCenter","Center org chart"),title:a("agents.orgChartCenter","Center org chart"),children:[e.jsx(vn,{size:16}),a("agents.center","Center")]})]}),[re,ct,Q.scale]),Hs=s.useCallback(t=>{if(!(t.ctrlKey||t.metaKey))return;t.preventDefault();const r=t.deltaY>0?.9:1.1;Mt(Q.scale*r,t.clientX,t.clientY)},[Q.scale,Mt]),Ds=s.useCallback(t=>{if(t.target.closest(".org-chart-node-card"))return;if(t.currentTarget.setPointerCapture?.(t.pointerId),ue.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),ue.current.size===1){Me.current={x:t.clientX-Q.x,y:t.clientY-Q.y,pointerId:t.pointerId},Tt(!0);return}if(ue.current.size===2){const g=Array.from(ue.current.values()),m=g[0].x-g[1].x,x=g[0].y-g[1].y;nt.current={distance:Math.hypot(m,x),scale:Q.scale,centerX:(g[0].x+g[1].x)/2,centerY:(g[0].y+g[1].y)/2},Me.current=null}},[Q.scale,Q.x,Q.y]),Fs=s.useCallback(t=>{if(ue.current.has(t.pointerId)){if(ue.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),ue.current.size>=2){const r=Array.from(ue.current.values()),g=nt.current;if(!g)return;const m=r[0].x-r[1].x,x=r[0].y-r[1].y,j=Math.hypot(m,x),L=g.scale*(j/g.distance);Mt(L,g.centerX,g.centerY);return}!Me.current||Me.current.pointerId!==t.pointerId||se(r=>re({...r,x:t.clientX-Me.current.x,y:t.clientY-Me.current.y}))}},[re,Mt]),La=s.useCallback(t=>{ue.current.delete(t.pointerId),ue.current.size<2&&(nt.current=null),ue.current.size===0&&(Me.current=null,Tt(!1))},[]),$s=s.useCallback(t=>{if(t.key==="ArrowLeft")se(r=>re({...r,x:r.x+Lt}));else if(t.key==="ArrowRight")se(r=>re({...r,x:r.x-Lt}));else if(t.key==="ArrowUp")se(r=>re({...r,y:r.y+Lt}));else if(t.key==="ArrowDown")se(r=>re({...r,y:r.y-Lt}));else if(t.key==="+"||t.key==="=")se(r=>re({...r,scale:r.scale*1.1}));else if(t.key==="-")se(r=>re({...r,scale:r.scale*.9}));else if(t.key==="0")ct();else if(t.key==="Home")se({scale:1,x:0,y:0});else return;t.preventDefault()},[re,ct]),Ha=s.useCallback(()=>{const t=[{value:"horizontal",label:a("agents.layoutHorizontal","Horizontal"),icon:e.jsx(Xa,{size:16}),ariaLabel:a("agents.layoutHorizontalAria","Horizontal layout")},{value:"vertical",label:a("agents.layoutVertical","Vertical"),icon:e.jsx(Oa,{size:16}),ariaLabel:a("agents.layoutVerticalAria","Vertical layout")},{value:"auto",label:a("agents.layoutAuto","Auto"),icon:e.jsx(mt,{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(r=>{const g=xe===r.value;return e.jsxs("button",{type:"button",className:`btn-icon touch-target agent-org-chart-layout-toggle__button${g?" btn-icon--active":""}`,onClick:()=>_a(r.value),"aria-pressed":g,"aria-label":r.ariaLabel,title:r.ariaLabel,"data-layout-value":r.value,children:[r.icon,e.jsx("span",{className:"agent-org-chart-layout-toggle__text",children:r.label})]},r.value)})})},[_a,xe]),zs=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],Bt=t=>ls(t,xt),Os=ke||pe||Ue===0,Vs=ke||pe||C===0,Bs=ke||pe||Fe||be===0,Ws=ke||pe||Fe||V===0,Da=X&&R.length===0,yt=s.useCallback(()=>{fe(!0)},[]);return e.jsxs("div",{className:"agents-view",children:[e.jsx(jn,{icon:la,title:a("agents.title","Agents"),actions:e.jsxs("div",{className:"agents-view-controls",children:[e.jsxs("div",{className:"view-toggle",children:[e.jsx("button",{className:`view-toggle-btn${q==="list"?" active":""}`,onClick:()=>Vt("list"),title:a("agents.listView","List view"),"aria-label":a("agents.listView","List view"),"aria-pressed":q==="list",children:e.jsx(Oa,{size:16})}),e.jsx("button",{className:`view-toggle-btn${q==="board"?" active":""}`,onClick:()=>Vt("board"),title:a("agents.boardView","Board view"),"aria-label":a("agents.boardView","Board view"),"aria-pressed":q==="board",children:e.jsx(pt,{size:16})}),e.jsx("button",{className:`view-toggle-btn${q==="org"?" active":""}`,onClick:()=>Vt("org"),title:a("agents.orgChartView","Org Chart view"),"aria-label":a("agents.orgChartView","Org Chart view"),"aria-pressed":q==="org",children:e.jsx(Xa,{size:16})})]}),e.jsxs("div",{className:`agents-view-primary-actions${Te?" agents-view-primary-actions--controls-open":""}`,children:[e.jsx("button",{ref:ie,className:`btn-icon agent-controls-trigger${Te?" agent-controls-trigger--active":""}`,onClick:()=>B(t=>!t),title:a("agents.controls","Controls"),"aria-label":a("agents.controls","Controls"),"aria-haspopup":"dialog","aria-expanded":Te,"aria-controls":$t,children:e.jsx(yn,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void D(),title:a("agents.refresh","Refresh"),"aria-label":a("agents.refresh","Refresh"),children:e.jsx(mt,{size:16,className:X?"spin":void 0})}),!w&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{ye(!0),B(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(ia,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{yt(),B(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(Va,{size:16}),a("agents.newAgent","New Agent")]})]}),Te&&e.jsxs("div",{ref:tt,id:$t,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(Nn,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:Y,onChange:t=>z(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:i,onChange:t=>f(t.target.checked),"aria-label":a("agents.showSystemAgents","Show system agents")}),a("agents.showSystemAgents","Show system agents")]})]})}),w&&e.jsxs("div",{className:"agent-controls-mobile-actions",children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{ye(!0),B(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(ia,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{yt(),B(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(Va,{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:Os,onClick:()=>{B(!1),Ca("paused")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(Pt,{}),e.jsx("span",{children:a("agents.pauseAllAgents","Pause All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:ke?a("agents.loadingEligibility","Loading eligibility…"):Ue===0?a("agents.noAgentsToPauseHint","No active or running project agents to pause"):a("agents.pauseCountHint",{count:Ue,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:Bs,onClick:()=>{B(!1),Aa(!0)},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(wt,{}),e.jsx("span",{children:a("agents.enableAllHeartbeats","Enable all heartbeats")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:a("agents.enableHeartbeatsCountHint","Enable {{count}} disabled project heartbeats",{count:be})})]}),e.jsxs("button",{type:"button",className:"agent-detail-bulk-menu-item",role:"menuitem",disabled:Ws,onClick:()=>{B(!1),Aa(!1)},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(Pt,{}),e.jsx("span",{children:a("agents.disableAllHeartbeats","Disable all heartbeats")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:a("agents.disableHeartbeatsCountHint","Disable {{count}} enabled project heartbeats",{count:V})})]}),e.jsxs("button",{type:"button",className:"agent-detail-bulk-menu-item",role:"menuitem",disabled:Vs,onClick:()=>{B(!1),Ca("active")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(wt,{}),e.jsx("span",{children:a("agents.resumeAllAgents","Resume All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:ke?a("agents.loadingEligibility","Loading eligibility…"):C===0?a("agents.noAgentsToResumeHint","No paused project agents to resume"):a("agents.resumeCountHint",{count:C,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:xt,onChange:t=>{const r=Number(t.target.value);ka(Number.isFinite(r)&&r>0?r:1)},disabled:ya}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",xt.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(ea.reduce((t,r)=>Math.abs(r-xt)<Math.abs(t-xt)?r:t,ea[0])),onChange:t=>{const r=Number(t.target.value);ka(Number.isFinite(r)&&r>0?r:1)},disabled:ya,"aria-label":a("agents.heartbeatSpeedPreset","Heartbeat speed preset"),children:ea.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(Gn,{agents:vt})]})]})]})}),e.jsx(ol,{isOpen:le,onClose:()=>{fe(!1),S(null)},onCreated:()=>{fe(!1),S(null),D()},projectId:l,prefillDraft:G,agentOnboardingEnabled:u,existingAgents:R,onPrefillDraft:S}),e.jsx(dl,{isOpen:me,onClose:()=>ye(!1),onImported:()=>void D(),projectId:l}),e.jsx(il,{stats:F,activeAgents:As,projectId:l,isOpen:K,onToggle:()=>Ee(t=>!t),onSelectAgent:Ot,onOpenTaskLogs:d}),q==="org"?e.jsx("div",{className:"agents-org-full-view",children:e.jsx("div",{className:"agents-view-content agents-view-content--org-full",children:O?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:Ze,"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(ts,{inline:!0,showInlineBackButton:!1,agentId:O,projectId:l,onClose:Ze,addToast:n,onChildClick:Ea,initialTab:oe,initialRunId:J,preferActiveRun:Se},O)})]}):Da?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(mt,{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:[w?e.jsxs("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:[Ha(),Pa()]}):e.jsxs("div",{className:"agent-org-chart-toolbar",children:[Ha(),e.jsx("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:Pa()})]}),e.jsx("div",{ref:Ae,className:"agent-org-chart-viewport","data-testid":"agent-org-chart-viewport",tabIndex:0,role:"region","aria-label":a("agents.orgChartCanvas","Org chart canvas"),onWheel:Hs,onPointerDown:Ds,onPointerMove:Fs,onPointerUp:La,onPointerCancel:La,onKeyDown:$s,"data-panning":ft?"true":"false",children:e.jsxs("div",{ref:at,className:`agent-org-chart-canvas agent-org-chart-canvas--zoom-${Math.round((Q.scale??1)*100)}`,"data-panning":ft?"true":"false",style:{transform:`translate(${Q.x}px, ${Q.y}px) scale(${Q.scale})`},children:[e.jsx("div",{className:`agent-org-chart${_t==="vertical"?" agent-org-chart--vertical":""}`,"data-testid":"agent-org-chart","data-layout-mode":_t,children:We?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx(mt,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingOrgChart","Loading org chart...")})]}):qe.length===0?e.jsx(Zt,{onCtaClick:yt}):(Be.current=[],qe.map(t=>e.jsx(xs,{node:t,onSelect:Ms,getHealthStatus:Bt,selectedAgentId:he,registerNodeElement:Ls,linksRef:Be,activityByAgentId:v.activityByAgentId,nowTick:v.nowTick},t.agent.id)))}),e.jsx(fl,{links:Be.current,nodeElements:st.current,canvasRef:at,viewportRef:Ae,layoutMode:_t,transform:Q,activityEvents:v.events,nowTick:v.nowTick})]})})]})})}):e.jsxs("div",{className:"agents-split-layout",style:w?void 0:{gridTemplateColumns:`${y}px var(--space-sm) minmax(0, 1fr)`},children:[e.jsx("div",{className:`agents-split-sidebar${Pe?" agents-split-sidebar--hidden-mobile":""}`,children:e.jsx("div",{className:"agents-view-content",children:Da?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(mt,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingAgents","Loading agents...")})]}):q==="board"?e.jsx("div",{className:"agent-board",children:vt.length===0?e.jsx(Zt,{onCtaClick:yt}):vt.map(t=>{const r=Bt(t),g=ma(t,r,a),m=ua(t.state),x=ga("agent-board-card",t.state);return e.jsxs("div",{className:`agent-board-card ${x}${O===t.id?" agent-card--selected":""}`,children:[e.jsxs("div",{ref:M(`board:${t.id}`),className:"agent-board-clickable",onClick:()=>ve(t.id),role:"button",tabIndex:0,onKeyDown:j=>{(j.key==="Enter"||j.key===" ")&&(j.key===" "&&j.preventDefault(),ve(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:Ma(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}),t.taskId&&e.jsx(sa,{taskId:t.taskId,isInViewport:W(`board:${t.id}`),projectId:l}),e.jsxs("div",{className:"agent-board-health",style:{color:r.color},title:g.title,children:[r.icon,g.label?` ${g.label}`:""]})]}),e.jsxs("div",{className:"agent-board-actions",children:[e.jsx(bl,{agent:t,pending:Fe||Ke.has(t.id),onToggle:j=>void Ra(j,!ht(j))}),(t.state==="idle"||t.state==="paused"||t.state==="error")&&e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void Sa(t.id,t.name),title:a("agents.delete","Delete"),children:e.jsx(Ba,{size:14})})]})]},t.id)})}):e.jsx("div",{className:"agent-list",children:vt.length===0?e.jsx(Zt,{onCtaClick:yt}):vt.map(t=>{const r=Bt(t),g=ma(t,r,a),m=ua(t.state),x=ga("agent-card",t.state),j=aa(t.runtimeConfig?.heartbeatIntervalMs),L=wn(j),ce=!ht(t)?ta:String(j),ne=Fe||ws===t.id||Ke.has(t.id),je=pl(t,ks);return e.jsxs("div",{ref:M(`list:${t.id}`),className:`agent-card agent-card--clickable ${x}${O===t.id?" agent-card--selected":""}`,onClick:b=>{const $=b.target;if($===b.currentTarget){ve(t.id);return}const Ce=$.closest('button, select, input, [role="button"]');Ce&&Ce!==b.currentTarget||ve(t.id)},role:"button",tabIndex:0,onKeyDown:b=>{b.target===b.currentTarget&&(b.key==="Enter"||b.key===" ")&&(b.key===" "&&b.preventDefault(),ve(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:[ys===t.id?e.jsx("select",{ref:Ns,className:"select agent-role-select",value:t.role,onChange:b=>void Ss(t.id,b.target.value),onKeyDown:b=>Rs(b,t.id),onBlur:()=>lt(null),autoFocus:!0,children:p.map(b=>e.jsxs("option",{value:b.value,children:[b.icon," ",b.label]},b.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:b=>{b.stopPropagation(),lt(t.id)},title:a("agents.clickToChangeRole","Click to change role"),role:"button",tabIndex:0,onKeyDown:b=>{(b.key==="Enter"||b.key===" ")&&(b.stopPropagation(),lt(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(rs,{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:r.color},title:g.title,children:[r.icon,g.label?` ${g.label}`:""]}),e.jsx("span",{className:"badge text-secondary",children:Ma(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 b=zs(t);if(b.length===0)return null;const $=b.slice(0,2),Ce=b.length-2;return e.jsxs(e.Fragment,{children:[$.map(Wt=>e.jsx("span",{className:"badge badge-skill",title:Wt,children:_n(Wt)},Wt)),Ce>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",Ce]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[e.jsxs("div",{className:"agent-model-runtime",children:[e.jsxs("span",{className:"text-secondary",children:[je.isRuntime?a("agents.runtime","Runtime"):a("agents.model","Model"),":"]}),e.jsx("span",{className:"badge agent-model-runtime__value",title:je.label??a("agents.auto","Auto"),children:je.label??a("agents.auto","Auto")})]}),t.state==="error"&&t.lastError?e.jsx(kn,{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:e.jsx(is,{taskId:t.taskId,taskColumn:t.taskColumn})}),e.jsx(sa,{taskId:t.taskId,isInViewport:W(`list:${t.id}`),projectId:l})]}),!$e(t)&&e.jsxs("div",{className:"agent-heartbeat-control",children:[e.jsx("span",{className:"text-secondary",children:a("agents.heartbeat","Heartbeat:")}),xa===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:va[t.id]??"",onChange:b=>Ye($=>({...$,[t.id]:b.target.value})),onKeyDown:b=>{b.key==="Enter"?Ta(t):b.key==="Escape"&&(rt(null),Ye($=>{const Ce={...$};return delete Ce[t.id],Ce}))},disabled:ne,"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 Ta(t),disabled:ne,title:a("agents.saveCustomInterval","Save custom interval"),children:a("agents.save","Save")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>{rt(null),Ye(b=>{const $={...b};return delete $[t.id],$})},disabled:ne,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:ce,onChange:b=>{const $=b.target.value;$===ta?Es(t):$==="__custom__"?Is(t):Ts(t,Number($))},disabled:ne,"aria-label":a("agents.setHeartbeatAria","Set heartbeat interval for {{name}}",{name:t.name}),children:[e.jsx("option",{value:ta,children:a("agents.heartbeatDisabledOption","Disabled")}),L.map(b=>e.jsx("option",{value:b.value,children:b.label},b.value)),Cn.some(b=>b.value===j)&&e.jsx("option",{value:"__custom__",children:a("agents.customHeartbeatOption","Custom...")})]})}),ne&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:a("agents.saving","Saving…")}),t.lastHeartbeatAt&&(()=>{const b=new Date(t.lastHeartbeatAt),$=new Date(b.getTime()+j),Ce=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"agent-heartbeat-last text-secondary",title:b.toLocaleString(),children:a("agents.lastHeartbeatAt","Last: {{time}}",{time:b.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})}),Ce&&e.jsx("span",{className:"agent-heartbeat-next text-secondary",title:$.toLocaleString(),children:a("agents.nextHeartbeatAt","Next: {{time}}",{time:$.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 jt(t.id,"active"),disabled:Xe.has(t.id),title:a("agents.activate","Activate"),children:[e.jsx(wt,{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 Ps(t.id,t.name),disabled:Xe.has(t.id),title:a("agents.runNow","Run Now"),"aria-label":a("agents.runNowAria","Run now for {{name}}",{name:t.name}),children:[e.jsx(pt,{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 jt(t.id,"paused"),disabled:Xe.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(Pt,{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 jt(t.id,"active"),disabled:Xe.has(t.id),title:a("agents.resume","Resume"),children:[e.jsx(wt,{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:()=>ve(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(pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.running","Running")})]}),e.jsxs("button",{className:"btn btn-sm",onClick:()=>void jt(t.id,"paused"),disabled:Xe.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(Pt,{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 jt(t.id,"active"),disabled:Xe.has(t.id),title:a("agents.retry","Retry"),children:[e.jsx(wt,{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:()=>ve(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(An,{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 Sa(t.id,t.name),title:a("agents.delete","Delete"),children:[e.jsx(Ba,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.delete","Delete")})]})]})]})]},t.id)})})})}),!w&&e.jsx("div",{className:"agents-split-resize-handle","data-testid":"agents-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":ms,"aria-valuemax":hs,"aria-valuenow":y,"aria-label":a("agents.resizeSidebar","Resize agents sidebar"),tabIndex:0,onPointerDown:vs,onKeyDown:js}),e.jsx("div",{className:`agents-split-detail${w&&!O?" agents-split-detail--hidden-mobile":""}`,children:O?e.jsx(s.Suspense,{fallback:null,children:e.jsx(ts,{inline:!0,showInlineBackButton:w,agentId:O,projectId:l,onClose:Ze,addToast:n,onChildClick:Ea,initialTab:oe,initialRunId:J,preferActiveRun:Se,onMutationSuccess:_s},O)}):e.jsxs("div",{className:"agents-detail-empty-state",children:[e.jsx(la,{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{El as AgentsView};
|