@runfusion/fusion 0.74.0-beta.2 → 0.74.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/bin.js +5416 -3166
  2. package/dist/child-process-worker.js +3540 -1656
  3. package/dist/client/.vite/manifest.json +272 -272
  4. package/dist/client/assets/AgentDetailView-BGXTnuBR.js +13 -0
  5. package/dist/client/assets/AgentDetailView-CH11Ydji.css +1 -0
  6. package/dist/client/assets/{AgentPermissionPolicyEditor-BycC7HhP.js → AgentPermissionPolicyEditor-DswM202p.js} +1 -1
  7. package/dist/client/assets/AgentsView-CEpZDrmC.js +24 -0
  8. package/dist/client/assets/{ChatView-DAsZY1We.js → ChatView-BXXX0q6G.js} +3 -3
  9. package/dist/client/assets/CommandCenter-CqjN1-9X.js +97 -0
  10. package/dist/client/assets/DevServerView-BUO7JRi6.js +1 -0
  11. package/dist/client/assets/{DirectoryPicker-DsCk3Nsw.js → DirectoryPicker-CiP4h5C7.js} +1 -1
  12. package/dist/client/assets/{DocumentsView-8EI6KNBY.js → DocumentsView-DwLD0h2S.js} +1 -1
  13. package/dist/client/assets/EvalsView-C9juKffD.js +1 -0
  14. package/dist/client/assets/{ExperimentalAgentOnboardingModal-ce6DROKD.js → ExperimentalAgentOnboardingModal-DYvw9TEh.js} +1 -1
  15. package/dist/client/assets/{GoalsView-BVlTtw-u.js → GoalsView-BD1AkfVN.js} +1 -1
  16. package/dist/client/assets/{InsightsView-BKQeROkb.js → InsightsView-Q0mu759R.js} +1 -1
  17. package/dist/client/assets/{MemoryView-DCzTnxsV.js → MemoryView-DCTqPpCG.js} +1 -1
  18. package/dist/client/assets/{PiExtensionsManager-C94HwDz5.js → PiExtensionsManager-CSe_uGfa.js} +1 -1
  19. package/dist/client/assets/{PluginManager-C3DegklW.js → PluginManager-DPm8YQC0.js} +1 -1
  20. package/dist/client/assets/{PullRequestView-CrE89UL7.js → PullRequestView-BpJgNDLH.js} +2 -2
  21. package/dist/client/assets/{ReportModal-BD1ZUDdV.js → ReportModal-iGmTZqiF.js} +1 -1
  22. package/dist/client/assets/ResearchView-BfgKB-6z.js +2 -0
  23. package/dist/client/assets/{SecretsView-6qK8Idb7.js → SecretsView-CqvQLK7z.js} +1 -1
  24. package/dist/client/assets/SessionTerminal-A9di8GAo.js +2 -0
  25. package/dist/client/assets/SettingsModal-BsCUsAXe.js +21 -0
  26. package/dist/client/assets/{SettingsModal-BkOSlfyr.js → SettingsModal-D-iyPGZE.js} +1 -1
  27. package/dist/client/assets/SettingsModal-DmfMotcd.css +1 -0
  28. package/dist/client/assets/{SettingsTextareaRow-Btyx5kaR.js → SettingsTextareaRow-DwgHxMMY.js} +1 -1
  29. package/dist/client/assets/{SetupWizardModal-Blhx-dRt.js → SetupWizardModal-CrSnLN44.js} +2 -2
  30. package/dist/client/assets/{SkillsView-DGE5kYc3.js → SkillsView-C_STy7KI.js} +1 -1
  31. package/dist/client/assets/{TodoView-YSGI7ATd.js → TodoView-BJJNGNLq.js} +1 -1
  32. package/dist/client/assets/{WorkflowNodeEditor-CZiEThu2.js → WorkflowNodeEditor-Jp5i_Vxu.js} +3 -3
  33. package/dist/client/assets/{WorkflowNodeEditor-nCx4nqoL.css → WorkflowNodeEditor-sZ96V3Kd.css} +1 -1
  34. package/dist/client/assets/{agent-import-generation-DQeNZMAm.js → agent-import-generation-DbVrl8ou.js} +1 -1
  35. package/dist/client/assets/{app-Dn1u7zJ9.js → app-BYs5Cx-j.js} +2 -2
  36. package/dist/client/assets/{app-DaikOPcV.js → app-CTV8PCYh.js} +3 -3
  37. package/dist/client/assets/{app-DJIiVHdA.js → app-CwdZxrJI.js} +2 -2
  38. package/dist/client/assets/{app-hQw_x2KJ.js → app-DE-MPJxA.js} +2 -2
  39. package/dist/client/assets/{app-DxTbBEMH.js → app-e8c4wb5t.js} +2 -2
  40. package/dist/client/assets/{app-DMZ_RusZ.js → app-yKugq_Ld.js} +2 -2
  41. package/dist/client/assets/{architectureDiagram-3BPJPVTR-DhaJNKa4.js → architectureDiagram-3BPJPVTR-Ctz8GX1N.js} +1 -1
  42. package/dist/client/assets/{blockDiagram-GPEHLZMM-pKpg7gJU.js → blockDiagram-GPEHLZMM-WI_YPphw.js} +1 -1
  43. package/dist/client/assets/{c4Diagram-AAUBKEIU-DVPXKJnr.js → c4Diagram-AAUBKEIU-BLwS5Zfh.js} +1 -1
  44. package/dist/client/assets/channel-CMMrQrQu.js +1 -0
  45. package/dist/client/assets/{chunk-2J33WTMH-CHt90T5z.js → chunk-2J33WTMH-DeXlX12-.js} +1 -1
  46. package/dist/client/assets/{chunk-4BX2VUAB-DsWFYy0a.js → chunk-4BX2VUAB-zvCEraJR.js} +1 -1
  47. package/dist/client/assets/{chunk-55IACEB6-D8XiXEo8.js → chunk-55IACEB6-BgZq96DR.js} +1 -1
  48. package/dist/client/assets/{chunk-727SXJPM-DlUYBn_Y.js → chunk-727SXJPM-CayoVGXL.js} +1 -1
  49. package/dist/client/assets/{chunk-AQP2D5EJ-BSdPOr9q.js → chunk-AQP2D5EJ-BmaktpVP.js} +1 -1
  50. package/dist/client/assets/{chunk-FMBD7UC4-B9IAeBld.js → chunk-FMBD7UC4-qYWgZPF8.js} +1 -1
  51. package/dist/client/assets/{chunk-ND2GUHAM-CmxnYQrR.js → chunk-ND2GUHAM-DIovauCc.js} +1 -1
  52. package/dist/client/assets/{chunk-QZHKN3VN-Dxp6Po_j.js → chunk-QZHKN3VN-DXWnr9LE.js} +1 -1
  53. package/dist/client/assets/classDiagram-4FO5ZUOK-CqxyehbN.js +1 -0
  54. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CqxyehbN.js +1 -0
  55. package/dist/client/assets/common-13IRj_PO.js +1 -0
  56. package/dist/client/assets/common-BBynATth.js +1 -0
  57. package/dist/client/assets/common-BG-vw0tL.js +1 -0
  58. package/dist/client/assets/common-DSo46rnH.js +1 -0
  59. package/dist/client/assets/common-DbOCE-0i.js +1 -0
  60. package/dist/client/assets/common-DnXF4Jmj.js +1 -0
  61. package/dist/client/assets/{cose-bilkent-S5V4N54A-BNl3bhpS.js → cose-bilkent-S5V4N54A-Dee9mTjK.js} +1 -1
  62. package/dist/client/assets/{dagre-BM42HDAG-DFs7WCcz.js → dagre-BM42HDAG-CU-v2zoi.js} +1 -1
  63. package/dist/client/assets/{dashboard-view-DnoTcnIo.js → dashboard-view-BM790i02.js} +1 -1
  64. package/dist/client/assets/{dashboard-view-ZGxLEL9r.js → dashboard-view-CG4rzThC.js} +1 -1
  65. package/dist/client/assets/{dashboard-view-vc8kgLMs.js → dashboard-view-COary9sK.js} +1 -1
  66. package/dist/client/assets/{diagram-2AECGRRQ-C2PVozvu.js → diagram-2AECGRRQ-DIqdnJ5B.js} +1 -1
  67. package/dist/client/assets/{diagram-5GNKFQAL-DFJ5b9H8.js → diagram-5GNKFQAL-ChpdUlpb.js} +1 -1
  68. package/dist/client/assets/{diagram-KO2AKTUF-D335CW-c.js → diagram-KO2AKTUF-BxmzOp-c.js} +1 -1
  69. package/dist/client/assets/{diagram-LMA3HP47-DSfhroAW.js → diagram-LMA3HP47-DLEx-0rl.js} +1 -1
  70. package/dist/client/assets/{diagram-OG6HWLK6-8iGveM-Z.js → diagram-OG6HWLK6-DEpkJ3cG.js} +1 -1
  71. package/dist/client/assets/{erDiagram-TEJ5UH35-Xc56MEEi.js → erDiagram-TEJ5UH35-C3Rjr78a.js} +1 -1
  72. package/dist/client/assets/{flowDiagram-I6XJVG4X-DjCU9WbD.js → flowDiagram-I6XJVG4X-aPbBbeiH.js} +1 -1
  73. package/dist/client/assets/{folder-open-BRrB44UX.js → folder-open-BnNbfyzc.js} +1 -1
  74. package/dist/client/assets/{ganttDiagram-6RSMTGT7-CXQE1bea.js → ganttDiagram-6RSMTGT7-BEzAwvJ4.js} +1 -1
  75. package/dist/client/assets/{gitGraphDiagram-PVQCEYII--mrSABLC.js → gitGraphDiagram-PVQCEYII-Y4hB2swQ.js} +1 -1
  76. package/dist/client/assets/index-8wtfjIkg.js +2675 -0
  77. package/dist/client/assets/index-Bp3UBLOz.css +1 -0
  78. package/dist/client/assets/{infoDiagram-5YYISTIA-CTS_nljP.js → infoDiagram-5YYISTIA-pd3J7fRT.js} +1 -1
  79. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-CpV5x3gk.js → ishikawaDiagram-YF4QCWOH-B968vfOH.js} +1 -1
  80. package/dist/client/assets/{journeyDiagram-JHISSGLW-BK2QCMnt.js → journeyDiagram-JHISSGLW-V4crhYKX.js} +1 -1
  81. package/dist/client/assets/{kanban-definition-UN3LZRKU-B4srpspY.js → kanban-definition-UN3LZRKU-Cl8LxR6k.js} +1 -1
  82. package/dist/client/assets/{mermaid.core-B8DVAt21.js → mermaid.core-rb_bKdHH.js} +4 -4
  83. package/dist/client/assets/{mindmap-definition-RKZ34NQL-CsmmiPpA.js → mindmap-definition-RKZ34NQL-Cnu-LPHz.js} +1 -1
  84. package/dist/client/assets/{pieDiagram-4H26LBE5-BahLDqf4.js → pieDiagram-4H26LBE5-C6hPYepr.js} +1 -1
  85. package/dist/client/assets/{puzzle-BFPQsuIa.js → puzzle-C8AvcmuM.js} +1 -1
  86. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Bo3u0wTU.js → quadrantDiagram-W4KKPZXB-CUImgAi-.js} +1 -1
  87. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DYkYsz7d.js → requirementDiagram-4Y6WPE33-DzDLxIYz.js} +1 -1
  88. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-BCbh0BSY.js → sankeyDiagram-5OEKKPKP-DSr_oIy8.js} +1 -1
  89. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-C2AP9GlE.js → sequenceDiagram-3UESZ5HK-DO2E98Hv.js} +1 -1
  90. package/dist/client/assets/{shield-alert-tlZOi02c.js → shield-alert-Byjz1VmT.js} +1 -1
  91. package/dist/client/assets/{standing-instructions-template-C0Rzv9Mr.js → standing-instructions-template-Cf9fZ8bv.js} +1 -1
  92. package/dist/client/assets/{stateDiagram-AJRCARHV-CARkH0ug.js → stateDiagram-AJRCARHV-BYPlDS4u.js} +1 -1
  93. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-C2He043y.js → stateDiagram-v2-BHNVJYJU-Ce_6vh1Q.js} +1 -1
  94. package/dist/client/assets/{timeline-definition-PNZ67QCA-MvbYneEM.js → timeline-definition-PNZ67QCA-CG1FeaKV.js} +1 -1
  95. package/dist/client/assets/{upload-DWK0F17Z.js → upload-yPsE_DRN.js} +1 -1
  96. package/dist/client/assets/{users-1AkDfM14.js → users-C_YmWx9d.js} +1 -1
  97. package/dist/client/assets/{vennDiagram-CIIHVFJN-DOjzzLqc.js → vennDiagram-CIIHVFJN-JLUXqFyb.js} +1 -1
  98. package/dist/client/assets/{wardley-L42UT6IY-Di70vhu2.js → wardley-L42UT6IY-D_UBzrZ2.js} +1 -1
  99. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-nK6ARhDv.js → wardleyDiagram-YWT4CUSO-BzwMrdpL.js} +1 -1
  100. package/dist/client/assets/{xychartDiagram-2RQKCTM6-C7_y76B7.js → xychartDiagram-2RQKCTM6-C5TjbAcZ.js} +1 -1
  101. package/dist/client/index.html +2 -2
  102. package/dist/client/sw.js +633 -13
  103. package/dist/client/version.json +1 -1
  104. package/dist/extension.js +3999 -2008
  105. package/package.json +1 -1
  106. package/skill/fusion/references/engine-tools.md +1 -1
  107. package/dist/client/assets/AgentDetailView-CoeSgMXS.css +0 -1
  108. package/dist/client/assets/AgentDetailView-DH4Cn5iG.js +0 -13
  109. package/dist/client/assets/AgentsView-Dkij8Sm8.js +0 -24
  110. package/dist/client/assets/CommandCenter-jTzBo-pg.js +0 -97
  111. package/dist/client/assets/DevServerView-CxlacYJp.js +0 -1
  112. package/dist/client/assets/EvalsView-kYnaIk11.js +0 -1
  113. package/dist/client/assets/ResearchView-eMiRw1EM.js +0 -2
  114. package/dist/client/assets/SessionTerminal-DtFLyUaK.js +0 -2
  115. package/dist/client/assets/SettingsModal-BTfZlghk.css +0 -1
  116. package/dist/client/assets/SettingsModal-DSq-_qwo.js +0 -21
  117. package/dist/client/assets/channel-xFBfK0sX.js +0 -1
  118. package/dist/client/assets/classDiagram-4FO5ZUOK-BFBVD968.js +0 -1
  119. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BFBVD968.js +0 -1
  120. package/dist/client/assets/common-BDp2y6CF.js +0 -1
  121. package/dist/client/assets/common-BnEo5fLN.js +0 -1
  122. package/dist/client/assets/common-Bzr_Y8h4.js +0 -1
  123. package/dist/client/assets/common-CvwyFzfv.js +0 -1
  124. package/dist/client/assets/common-CztCXRkz.js +0 -1
  125. package/dist/client/assets/common-DPe2mbb7.js +0 -1
  126. package/dist/client/assets/index-C2xsZoNG.js +0 -2671
  127. package/dist/client/assets/index-Dv-95s50.css +0 -1
@@ -0,0 +1,13 @@
1
+ import{r as a,j as e}from"./vendor-react-SZ_qB27O.js";import{c as Ps,bP as sa,bQ as aa,bR as na,bS as ia,L as G,bT as Rt,R as Pt,bN as ps,Z as ra,bv as Bt,bU as Ts,x as bt,C as Es,g as Ls,bV as la,bW as oa,bX as ca,aa as Ds,bY as da,aW as ua,bZ as ma,bq as _,b_ as ga,b$ as ha,c0 as fa,c1 as zs,c2 as Xt,c3 as pa,bp as Mt,c4 as $t,bd as wt,bu as Hs,al as Is,c5 as _t,bK as At,c6 as bs,c7 as it,c8 as ba,X as Os,aG as xt,c9 as xa,bt as Bs,ca as $s,cb as va,Y as ja,u as ya,cc as _s,aQ as Us,bw as ss,cd as Na,ce as xs,cf as Sa,cg as ka,ch as Qt,ci as Vs,cj as Ca,d as Ra,ck as wa,h as Ws,cl as Gs,b3 as Ma,am as be,cm as vs,cn as js,co as Aa,cp as Fa,cq as Pa,cr as Ta,cs as Tt,p as Et,j as Lt,r as Dt,az as Js,ct as Ea,cu as La,aJ as Da,cv as Ut,cw as za,cx as Ha,bI as Ia,cy as Oa,cz as Vt,cA as Ba,cB as $a,bM as _a,aI as Ua,cC as es,y as Va,cD as as,cE as Wa,cF as Ga,cG as Ja,cH as qa,cI as Ka,cJ as Ya,aA as qs,cK as Za,cL as Xa,cM as Qa,cN as en,cO as tn}from"./index-8wtfjIkg.js";import{B as sn,A as ys,a as an}from"./AgentPermissionPolicyEditor-DswM202p.js";import{u as ye}from"./vendor-i18n-GF3RlKbq.js";import{f as Wt,S as nn,a as rn}from"./standing-instructions-template-Cf9fZ8bv.js";import{ExperimentalAgentOnboardingModal as ln}from"./ExperimentalAgentOnboardingModal-DYvw9TEh.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-xterm-BNq00GSj.js";/**
2
+ * @license lucide-react v1.7.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const on=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M17 12h-2l-2 5-2-10-2 5H7",key:"15hlnc"}]],cn=Ps("square-activity",on);/**
7
+ * @license lucide-react v1.7.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const dn=[["path",{d:"M16 17h6v-6",key:"t6n2it"}],["path",{d:"m22 17-8.5-8.5-5 5L2 7",key:"x473p"}]],un=Ps("trending-down",dn);function Ns(t){return t<1e3?`${t}ms`:t<6e4?`${(t/1e3).toFixed(1)}s`:t<36e5?`${Math.floor(t/6e4)}m`:`${(t/36e5).toFixed(1)}h`}function mn(t){return`${Math.round(t*100)}%`}function Ss(t,r){const l=Date.now(),o=new Date(t).getTime(),s=l-o;if(s<0){const m=Math.abs(s);return m<6e4?r("agents.time.inAMoment","in a moment"):m<36e5?r("agents.time.inMinutes","in {{count}}m",{count:Math.floor(m/6e4)}):m<864e5?r("agents.time.inHours","in {{count}}h",{count:Math.floor(m/36e5)}):r("agents.time.inDays","in {{count}}d",{count:Math.floor(m/864e5)})}return s<6e4?r("agents.time.justNow","just now"):s<36e5?r("agents.time.minutesAgo","{{count}}m ago",{count:Math.floor(s/6e4)}):s<864e5?r("agents.time.hoursAgo","{{count}}h ago",{count:Math.floor(s/36e5)}):r("agents.time.daysAgo","{{count}}d ago",{count:Math.floor(s/864e5)})}function gn(t,r){switch(t){case"periodic":return r("agents.reflections.triggerPeriodic","Periodic");case"post-task":return r("agents.reflections.triggerPostTask","Post-Task");case"manual":return r("agents.reflections.triggerManual","Manual");case"user-requested":return r("agents.reflections.triggerUserRequested","User Requested");default:return t}}function ft(t){return t instanceof Error&&t.message?t.message:String(t)}function hn(t,r){switch(t){case"improving":return r("agents.ratings.trendImproving","↑ Improving");case"declining":return r("agents.ratings.trendDeclining","↓ Declining");case"stable":return r("agents.ratings.trendStable","→ Stable");default:return r("agents.ratings.trendInsufficient","Insufficient data")}}function fn(t){switch(t){case"improving":return"trend-improving";case"declining":return"trend-declining";case"stable":return"trend-stable";default:return"trend-insufficient"}}function ks(t,r=5){return e.jsx("span",{className:"rating-stars",children:Array.from({length:r},(l,o)=>e.jsx(Ts,{size:14,className:o<t?"star-filled":"star-empty",fill:o<t?"currentColor":"none"},o))})}function pn({agentId:t,projectId:r,addToast:l}){const{t:o}=ye("app"),[s,m]=a.useState([]),[y,n]=a.useState(null),[f,u]=a.useState(null),[N,c]=a.useState([]),[g,w]=a.useState(!0),[T,D]=a.useState(!0),[M,H]=a.useState(!1),[I,se]=a.useState(!1),[k,v]=a.useState(null),[A,K]=a.useState(0),[F,E]=a.useState(""),[Y,O]=a.useState(""),U=a.useCallback(async()=>{try{const[d,L]=await Promise.all([sa(t,20,r),aa(t,void 0,r)]);m(d),n(L)}catch(d){l(o("agents.reflections.loadError","Failed to load reflections: {{error}}",{error:ft(d)}),"error")}finally{w(!1)}},[t,r,l]),C=a.useCallback(async()=>{try{const[d,L]=await Promise.all([na(t,r),ia(t,{limit:50},r)]);u(d),c(L)}catch(d){l(o("agents.ratings.loadError","Failed to load ratings: {{error}}",{error:ft(d)}),"error")}finally{D(!1)}},[t,r,l]);a.useEffect(()=>{U(),C()},[U,C]);const Q=async()=>{H(!0);try{if(!await la(t,r)){l(o("agents.reflections.insufficientHistory","Not enough history to generate a reflection yet"),"error");return}l(o("agents.reflections.generateSuccess","Reflection generated successfully"),"success"),w(!0),await U()}catch(d){const L=ft(d),V=L.toLowerCase();V.includes("agent not found")||V.includes("not found")?l(o("agents.reflections.agentNotFound","This agent is no longer available. It may have been deleted."),"error"):V.includes("insufficient history")?l(o("agents.reflections.insufficientHistory","Not enough history to generate a reflection yet"),"error"):l(o("agents.reflections.generateError","Failed to generate reflection: {{error}}",{error:L}),"error")}finally{H(!1)}},P=async d=>{if(d.preventDefault(),A!==0){se(!0);try{await oa(t,{score:A,category:F||void 0,comment:Y||void 0,raterType:"user"},r),K(0),E(""),O(""),l(o("agents.ratings.addSuccess","Rating added"),"success"),await C()}catch(L){l(o("agents.ratings.addError","Failed to add rating: {{error}}",{error:ft(L)}),"error")}finally{se(!1)}}},J=async d=>{try{await ca(t,d,r),l(o("agents.ratings.deleteSuccess","Rating deleted"),"success"),await C()}catch(L){l(o("agents.ratings.deleteError","Failed to delete rating: {{error}}",{error:ft(L)}),"error")}},b=d=>{v(L=>L===d?null:d)};if(g&&T)return e.jsx("div",{className:"reflections-tab",children:e.jsxs("div",{className:"reflections-loading-indicator",children:[e.jsx(G,{size:16,className:"animate-spin"}),e.jsx("span",{className:"text-muted",children:o("agents.reflections.loadingEvaluation","Loading evaluation...")})]})});const S=y&&y.totalTasksCompleted===0&&y.totalTasksFailed===0&&y.recentReflectionCount===0;return e.jsxs("div",{className:"reflections-tab",children:[e.jsxs("div",{className:"reflections-header",children:[e.jsxs("h3",{children:[e.jsx(Rt,{size:16}),o("agents.reflections.sectionTitle","Performance, Reflections & Ratings")]}),e.jsx("button",{className:"btn btn-secondary",onClick:Q,disabled:M,title:o("agents.reflections.reflectNowTitle","Generate a manual reflection"),children:M?e.jsxs(e.Fragment,{children:[e.jsx(G,{size:14,className:"animate-spin"}),o("agents.reflections.reflecting","Reflecting...")]}):e.jsxs(e.Fragment,{children:[e.jsx(Pt,{size:14}),o("agents.reflections.reflectNow","Reflect Now")]})})]}),y&&!S&&e.jsxs("div",{className:"reflections-stats-grid",children:[e.jsxs("div",{className:"reflections-stat-card",children:[e.jsxs("div",{className:"stat-value",children:[e.jsx(ps,{size:16,style:{color:"var(--color-success)"}}),y.totalTasksCompleted]}),e.jsx("div",{className:"stat-label",children:o("agents.performance.tasksCompleted","Tasks Completed")})]}),e.jsxs("div",{className:"reflections-stat-card",children:[e.jsxs("div",{className:"stat-value",children:[e.jsx(un,{size:16,style:{color:"var(--color-error)"}}),y.totalTasksFailed]}),e.jsx("div",{className:"stat-label",children:o("agents.performance.tasksFailed","Tasks Failed")})]}),e.jsxs("div",{className:"reflections-stat-card",children:[e.jsxs("div",{className:"stat-value",children:[e.jsx(ra,{size:16,style:{color:"var(--in-progress)"}}),Ns(y.avgDurationMs)]}),e.jsx("div",{className:"stat-label",children:o("agents.performance.avgDuration","Avg Duration")})]}),e.jsxs("div",{className:"reflections-stat-card",children:[e.jsxs("div",{className:"stat-value",children:[e.jsx(Rt,{size:16,style:{color:y.successRate>=.8?"var(--color-success)":y.successRate>=.5?"var(--color-warning)":"var(--color-error)"}}),mn(y.successRate)]}),e.jsx("div",{className:"stat-label",children:o("agents.performance.successRate","Success Rate")})]}),e.jsxs("div",{className:"reflections-stat-card",children:[e.jsxs("div",{className:"stat-value",children:[e.jsx(Bt,{size:16,style:{color:"var(--color-info)"}}),y.recentReflectionCount]}),e.jsx("div",{className:"stat-label",children:o("agents.performance.reflections","Reflections")})]})]}),S&&e.jsxs("div",{className:"reflections-no-data",children:[e.jsx(Rt,{size:24,opacity:.3}),e.jsx("p",{children:o("agents.performance.noData","No performance data yet")})]}),e.jsxs("div",{className:"reflections-ratings-section",children:[e.jsx("h4",{children:o("agents.ratings.title","User Ratings")}),T?e.jsxs("div",{className:"reflections-loading-indicator",children:[e.jsx(G,{size:16,className:"animate-spin"}),e.jsx("span",{className:"text-muted",children:o("agents.ratings.loading","Loading ratings...")})]}):e.jsxs(e.Fragment,{children:[f&&e.jsxs("div",{className:"rating-summary-card",children:[e.jsxs("div",{className:"rating-score-display",children:[e.jsx("span",{className:"rating-average",children:f.averageScore.toFixed(1)}),ks(Math.round(f.averageScore))]}),e.jsxs("div",{className:"rating-stats",children:[e.jsx("span",{className:"rating-count",children:o("agents.ratings.count","{{count}} ratings",{count:f.totalRatings})}),e.jsx("span",{className:`rating-trend-badge ${fn(f.trend)}`,children:hn(f.trend,o)})]})]}),f&&Object.keys(f.categoryAverages).length>0&&e.jsxs("div",{className:"category-breakdown",children:[e.jsx("h4",{children:o("agents.ratings.categoryAverages","Category Averages")}),Object.entries(f.categoryAverages).map(([d,L])=>e.jsxs("div",{className:"category-item",children:[e.jsx("span",{className:"category-name",children:d}),e.jsx("span",{className:"category-score",children:L.toFixed(1)})]},d))]}),e.jsxs("form",{className:"add-rating-form",onSubmit:P,children:[e.jsx("h4",{children:o("agents.ratings.addRating","Add Rating")}),e.jsx("div",{className:"star-selector",children:[1,2,3,4,5].map(d=>e.jsx("button",{type:"button",className:"star-btn touch-target",onClick:()=>K(d),title:o("agents.ratings.starCount","{{count}} star",{count:d,defaultValue_one:"{{count}} star",defaultValue_other:"{{count}} stars"}),children:e.jsx(Ts,{size:24,fill:d<=A?"currentColor":"none",className:d<=A?"star-filled":"star-empty"})},d))}),e.jsxs("select",{value:F,onChange:d=>E(d.target.value),className:"select add-rating-category-select",children:[e.jsx("option",{value:"",children:o("agents.ratings.categorySelect","Select category...")}),e.jsx("option",{value:"quality",children:o("agents.ratings.categoryQuality","Quality")}),e.jsx("option",{value:"speed",children:o("agents.ratings.categorySpeed","Speed")}),e.jsx("option",{value:"communication",children:o("agents.ratings.categoryCommunication","Communication")}),e.jsx("option",{value:"reliability",children:o("agents.ratings.categoryReliability","Reliability")}),e.jsx("option",{value:"other",children:o("agents.ratings.categoryOther","Other")})]}),e.jsx("textarea",{value:Y,onChange:d=>O(d.target.value),placeholder:o("agents.ratings.commentPlaceholder","Optional comment..."),className:"input add-rating-comment-input",rows:3}),e.jsx("button",{type:"submit",className:"btn btn-task-create",disabled:A===0||I,children:I?o("agents.ratings.submitting","Submitting..."):o("agents.ratings.submitRating","Submit Rating")})]}),e.jsxs("div",{className:"rating-history",children:[e.jsx("h4",{children:o("agents.ratings.historyTitle","Rating History")}),N.length===0?e.jsx("p",{className:"no-ratings",children:o("agents.ratings.noRatings","No ratings yet")}):N.map(d=>e.jsxs("div",{className:"rating-history-item",children:[e.jsxs("div",{className:"rating-item-header",children:[ks(d.score),d.category&&e.jsx("span",{className:"rating-category-badge",children:d.category}),e.jsx("span",{className:"rating-time",children:Ss(d.createdAt,o)}),e.jsx("button",{type:"button",className:"rating-delete-btn touch-target",onClick:()=>void J(d.id),title:o("agents.ratings.deleteRating","Delete rating"),children:e.jsx(bt,{size:14})})]}),d.comment&&e.jsx("p",{className:"rating-comment",children:d.comment})]},d.id))]})]})]}),e.jsxs("div",{className:"reflections-list",children:[e.jsx("h4",{children:o("agents.reflections.historyTitle","Reflection History")}),g?e.jsxs("div",{className:"reflections-loading-indicator",children:[e.jsx(G,{size:16,className:"animate-spin"}),e.jsx("span",{className:"text-muted",children:o("agents.reflections.loading","Loading reflections...")})]}):s.length===0?e.jsxs("div",{className:"reflection-empty",children:[e.jsx(Bt,{size:32,opacity:.3}),e.jsx("p",{children:o("agents.reflections.noReflections","No reflections yet")}),e.jsx("p",{className:"text-secondary",children:o("agents.reflections.getStarted","Trigger a reflection to get started")})]}):e.jsx("div",{className:"reflection-cards",children:s.map(d=>{const L=k===d.id;return e.jsxs("div",{className:`reflection-card ${L?"reflection-card--expanded":""}`,onClick:()=>b(d.id),role:"button",tabIndex:0,onKeyDown:V=>V.key==="Enter"&&b(d.id),children:[e.jsxs("div",{className:"reflection-card-header",children:[e.jsx("span",{className:`reflection-trigger-badge reflection-trigger-${d.trigger}`,children:gn(d.trigger,o)}),e.jsx("span",{className:"reflection-timestamp",children:Ss(d.timestamp,o)}),e.jsx("span",{className:"reflection-chevron",children:L?e.jsx(Es,{size:16}):e.jsx(Ls,{size:16})})]}),e.jsx("div",{className:"reflection-summary",children:d.summary}),L&&e.jsxs("div",{className:"reflection-details",children:[d.insights.length>0&&e.jsxs("div",{className:"reflection-insights",children:[e.jsxs("h5",{children:[e.jsx(Bt,{size:14})," ",o("agents.reflections.insights","Insights")]}),e.jsx("ul",{children:d.insights.map((V,xe)=>e.jsx("li",{children:V},xe))})]}),d.suggestedImprovements.length>0&&e.jsxs("div",{className:"reflection-suggestions",children:[e.jsxs("h5",{children:[e.jsx(ps,{size:14})," ",o("agents.reflections.suggestedImprovements","Suggested Improvements")]}),e.jsx("ul",{children:d.suggestedImprovements.map((V,xe)=>e.jsx("li",{children:V},xe))})]}),d.metrics&&e.jsxs("div",{className:"reflection-metrics",children:[e.jsx("h5",{children:o("agents.reflections.metrics","Metrics")}),e.jsxs("div",{className:"metrics-grid",children:[d.metrics.tasksCompleted!==void 0&&e.jsxs("div",{className:"metric",children:[e.jsx("span",{className:"metric-label",children:o("agents.reflections.metricTasks","Tasks:")}),e.jsx("span",{className:"metric-value",children:d.metrics.tasksCompleted})]}),d.metrics.tasksFailed!==void 0&&e.jsxs("div",{className:"metric",children:[e.jsx("span",{className:"metric-label",children:o("agents.reflections.metricFailed","Failed:")}),e.jsx("span",{className:"metric-value",children:d.metrics.tasksFailed})]}),d.metrics.avgDurationMs!==void 0&&e.jsxs("div",{className:"metric",children:[e.jsx("span",{className:"metric-label",children:o("agents.reflections.metricAvgDuration","Avg Duration:")}),e.jsx("span",{className:"metric-value",children:Ns(d.metrics.avgDurationMs)})]}),d.metrics.errorCount!==void 0&&e.jsxs("div",{className:"metric",children:[e.jsx("span",{className:"metric-label",children:o("agents.reflections.metricErrors","Errors:")}),e.jsx("span",{className:"metric-value",children:d.metrics.errorCount})]})]})]})]})]},d.id)})})]})]})}function de(...t){return t.filter(Boolean).join(" ")}const bn={triage:["tasks:create","agents:view","messages:read"],executor:["tasks:execute","agents:view","messages:read","messages:send"],reviewer:["tasks:review","agents:view","messages:read","messages:send"],merger:["tasks:merge","agents:view","messages:read"],scheduler:["tasks:assign","tasks:create","tasks:archive","agents:view","automations:manage","missions:manage","messages:read"],engineer:["tasks:execute","tasks:review","agents:view","messages:read","messages:send"],custom:[]};function rt(t,r){const l=Date.now(),o=new Date(t).getTime(),s=l-o,m=r??((n,f,u)=>u?f.replace(/\{\{(\w+)\}\}/g,(N,c)=>String(u[c]??"")):f);if(s<0){const n=Math.abs(s);if(n<6e4)return m("time.inAMoment","in a moment");if(n<36e5){const u=Math.floor(n/6e4);return m("time.inMinutes","in {{n}}m",{n:u})}if(n<864e5){const u=Math.floor(n/36e5);return m("time.inHours","in {{n}}h",{n:u})}const f=Math.floor(n/864e5);return m("time.inDays","in {{n}}d",{n:f})}if(s<6e4)return m("time.justNow","just now");if(s<36e5){const n=Math.floor(s/6e4);return m("time.minutesAgo","{{n}}m ago",{n})}if(s<864e5){const n=Math.floor(s/36e5);return m("time.hoursAgo","{{n}}h ago",{n})}const y=Math.floor(s/864e5);return m("time.daysAgo","{{n}}d ago",{n:y})}const xn="⚠️",vn=[{id:"dashboard",label:"Dashboard",icon:cn},{id:"logs",label:"Logs",icon:xt},{id:"mail",label:"Mail",icon:xa},{id:"runs",label:"Runs",icon:At},{id:"tasks",label:"Tasks",icon:Bs},{id:"employees",label:"Employees",icon:$s},{id:"soul",label:"Soul",icon:va},{id:"instructions",label:"Instructions",icon:sn},{id:"memory",label:"Agent Memory",icon:xt},{id:"reflections",label:"Evaluation",icon:Rt},{id:"config",label:"Settings",icon:ja}],ns={idle:{bg:"var(--state-idle-bg)",text:"var(--state-idle-text)",border:"var(--state-idle-border)"},active:{bg:"var(--state-active-bg)",text:"var(--state-active-text)",border:"var(--state-active-border)"},running:{bg:"var(--state-active-bg)",text:"var(--state-active-text)",border:"var(--state-active-border)"},paused:{bg:"var(--state-paused-bg)",text:"var(--state-paused-text)",border:"var(--state-paused-border)"},error:{bg:"var(--state-error-bg)",text:"var(--state-error-text)",border:"var(--state-error-border)"}},Ft={completed:{icon:be,color:"var(--color-success)"},failed:{icon:Ma,color:"var(--color-error)"},active:{icon:G,color:"var(--in-progress)"},terminated:{icon:it,color:"var(--text-muted)"}},jn=Gs(es),yn=700,Cs=as,Rs=as,Nn=100,Sn=1e3;function ts(t,r){const l=Math.max(as,t.length);return t.length+1<=l?[...t,r]:[...t.slice(t.length+1-l),r]}function Ks({entries:t,resetKey:r,testId:l}){const{t:o}=ye("app"),[s,m]=a.useState(Cs);a.useEffect(()=>{m(Cs)},[r]);const y=Math.max(0,t.length-s),n=a.useMemo(()=>t.length>s?t.slice(t.length-s):t,[t,s]),f=a.useCallback(()=>{m(u=>u+Rs)},[]);return e.jsxs(e.Fragment,{children:[y>0&&e.jsx("div",{className:"log-window-loader",children:e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm","data-testid":`${l}-load-older`,onClick:f,children:o("agents.loadOlderLogs","Load {{count}} older ({{remaining}} remaining)",{count:Math.min(Rs,y),remaining:y})})}),e.jsx(Wa,{entries:n,loading:!1})]})}function kn(t,r){return t.some(l=>l.path===r)?r:t.find(l=>l.layer==="long-term")?.path??t[0]?.path??""}function Kn({agentId:t,projectId:r,onClose:l,addToast:o,onChildClick:s,inline:m=!1,showInlineBackButton:y=!1,initialTab:n,initialRunId:f,preferActiveRun:u=!1,onMutationSuccess:N}){const{t:c}=ye("app"),[g,w]=a.useState(null),[T,D]=a.useState(1),{confirm:M}=Ds(),[H,I]=a.useState([]),[se,k]=a.useState(!0),[v,A]=a.useState(n??"dashboard"),[K,F]=a.useState(!1),[E,Y]=a.useState(!1),[O,U]=a.useState(!1),[C,Q]=a.useState(!1),[P,J]=a.useState(!1),[b,S]=a.useState(!1),[d,L]=a.useState(0),[V,xe]=a.useState(0),[Ae,$e]=a.useState(0),[ge,B]=a.useState(null),[ae,Ne]=a.useState(null),[Ce,Je]=a.useState(!1),[Ie,x]=a.useState(null),j=a.useRef(null),re=a.useRef(null),ne=a.useRef(!1);da(j,!m,"fusion:agent-detail-modal-size");const et=a.useRef(l),Oe=a.useRef(o),Fe=a.useRef(null),oe=a.useRef(!1),Ee=a.useRef(null),_e=a.useRef([]);_e.current=H;const qe=a.useRef(null),X=a.useRef(0),lt=a.useRef(t),vt=a.useRef(r);et.current=l,Oe.current=o,Fe.current=g,a.useEffect(()=>{let p=!1;return ua(r).then(z=>{p||D(z.heartbeatMultiplier??1)}).catch(()=>{p||D(1)}),()=>{p=!0}},[r]);const Se=a.useCallback(async()=>{Fe.current===null&&k(!0);try{const z=await ma(t,r);w(z)}catch(z){Oe.current(`Failed to load agent: ${_(z)}`,"error"),et.current()}finally{k(!1)}},[t,r]),tt=a.useCallback(async p=>{const z=X.current,W=t,$=r,ie=()=>X.current!==z||t!==W||r!==$;try{if(g?.taskId){const Te=g.taskId;B(null),Ee.current=null;const Ze=qe.current===`task:${Te}`,at=Ze?_e.current:[],mt=at.length-ga(at),Xe=Math.min(Sn,Math.max(Nn,mt)),ue=await ha(Te,$,{limit:Xe});if(ie())return;I(Ue=>fa(Ze?Ue:[],ue.entries,[],Te).entries),qe.current=`task:${Te}`;return}const ce=await zs(W,1,$);if(ie())return;const pe=ce[0]??null;if(B(pe),!pe){Ee.current=null,qe.current=null,I([]);return}if(!p?.force&&Ee.current===pe.id)return;const we=await Xt(W,pe.id,$);if(ie())return;I(we),qe.current=`run:${pe.id}`,Ee.current=pe.id}catch(ce){if(ie())return;console.error("Failed to load agent logs:",ce)}},[g?.taskId,t,r]),ot=a.useRef(tt);ot.current=tt;const ct=a.useCallback(async()=>{Je(!0),x(null);try{const p=await pa(t,r);Ne(p)}catch(p){x(_(p)),Ne(null)}finally{Je(!1)}},[t,r]),zt=a.useCallback(p=>{oe.current=p},[]),dt=a.useCallback(async(p=!1)=>{await N?.({agentId:t,deleted:p})},[t,N]),Be=a.useCallback(async()=>{await Se(),await dt(!1)},[Se,dt]);a.useEffect(()=>{Se()},[Se]),a.useEffect(()=>{const p=setInterval(()=>{Se()},3e4);return()=>{clearInterval(p)}},[Se]),a.useEffect(()=>{g&&v==="logs"&&tt()},[g,v,tt]),a.useEffect(()=>{v!=="logs"&&(Ee.current=null)},[v]),a.useEffect(()=>{g&&v==="mail"&&ct()},[g,v,ct]),a.useEffect(()=>{if(!C)return;const p=W=>{re.current?.contains(W.target)||Q(!1)},z=W=>{W.key==="Escape"&&Q(!1)};return document.addEventListener("mousedown",p),document.addEventListener("keydown",z),()=>{document.removeEventListener("mousedown",p),document.removeEventListener("keydown",z)}},[C]),a.useEffect(()=>{if(!C)return;let p=!1;return S(!0),Mt(void 0,r).then(z=>{if(p)return;const W=z.filter($=>!$t($));L(W.filter($=>$.state==="active"||$.state==="running").length),xe(W.filter($=>$.state==="paused").length)}).catch(()=>{p||(L(0),xe(0))}).finally(()=>{p||S(!1)}),()=>{p=!0}},[C,r]),a.useEffect(()=>{if(v!=="logs"||g?.taskId||!ge||ge.status!=="active")return;const p=X.current,z=t,W=ge.id,$=r?`?projectId=${encodeURIComponent(r)}`:"",ie=wt(`/api/agents/${encodeURIComponent(z)}/runs/${encodeURIComponent(W)}/logs/stream${$}`,{events:{"agent:log":ce=>{if(X.current===p)try{const pe=JSON.parse(ce.data);I(we=>ts(we,pe))}catch{}}},onOpen:()=>{X.current===p&&F(!0)},onReconnect:()=>{X.current===p&&(F(!0),ot.current({force:!0}))},onError:()=>{X.current===p&&F(!1)}});return()=>{ie(),X.current===p&&F(!1)}},[v,g?.taskId,t,r,ge]),a.useEffect(()=>{(lt.current!==t||vt.current!==r)&&(lt.current=t,vt.current=r,X.current++,I([]),F(!1),B(null),Ne(null),x(null),Ee.current=null,qe.current=null,oe.current=!1)},[t,r]),a.useEffect(()=>{const p=r?`?projectId=${encodeURIComponent(r)}`:"",z=X.current,W=$=>{if(X.current===z)try{const ie=JSON.parse($.data);if(!ie||typeof ie!="object"||ie.agentId!==t)return;Se()}catch{}};return wt(`/api/events${p}`,{events:{"agent:updated":$=>{if(X.current===z)try{const ie=JSON.parse($.data);if(!ie||typeof ie!="object"||ie.id!==t||oe.current)return;Se()}catch{}},"approval:requested":W,"approval:updated":W,"approval:decided":W},onReconnect:()=>{X.current===z&&(oe.current||Se())}})},[t,r,Se]),a.useEffect(()=>{if(v!=="logs"||!g?.taskId){F(!1);return}const p=X.current,z=g.taskId,W=r?`?projectId=${encodeURIComponent(r)}`:"",$=wt(`/api/tasks/${encodeURIComponent(z)}/logs/stream${W}`,{events:{"agent:log":ie=>{if(X.current===p)try{const ce=JSON.parse(ie.data);I(pe=>ts(pe,ce))}catch{}}},onOpen:()=>{X.current===p&&F(!0)},onReconnect:()=>{X.current===p&&(F(!0),ot.current({force:!0}))},onError:()=>{X.current===p&&F(!1)}});return()=>{$(),X.current===p&&F(!1)}},[g?.taskId,v,r]);const Pe=async p=>{if(E||!Fe.current)return;const z=Fe.current.state;if(z!==p){Y(!0),w(W=>W&&{...W,state:p});try{await xs(t,p,r),o(c("agents.stateUpdated","Agent state updated to {{newState}}",{newState:p}),"success"),await Be()}catch(W){w($=>$&&{...$,state:z}),o(c("agents.stateUpdateFailed","Failed to update state: {{error}}",{error:_(W)}),"error")}finally{Y(!1)}}},ut=async p=>{if(!P){Q(!1),J(!0);try{const W=(await Mt(void 0,r)).filter(ue=>!$t(ue)),$=W.filter(ue=>p==="paused"?ue.state==="active"||ue.state==="running":ue.state==="paused"),ie=W.length-$.length;if($.length===0){o(c("agents.bulkNoEligible","No agents eligible to {{action}}",{action:p==="paused"?c("agents.pause","pause"):c("agents.resume","resume")}),"error");return}if(!await M({title:p==="paused"?c("agents.pauseAllTitle","Pause All Agents"):c("agents.resumeAllTitle","Resume All Agents"),message:c("agents.bulkConfirmMessage","{{action}} {{count}} agent(s) in this project?",{action:p==="paused"?c("agents.pauseAction","Pause"):c("agents.resumeAction","Resume"),count:$.length}),danger:p==="paused"}))return;const pe=await Promise.allSettled($.map(ue=>xs(ue.id,p,r))),we=pe.map((ue,Ue)=>({result:ue,agent:$[Ue]})).filter(ue=>ue.result.status==="rejected"),Te=pe.length-we.length,Ze=we.length,at=p==="paused"?c("agents.pausedPast","Paused"):c("agents.resumedPast","Resumed"),mt=Te===1?c("agents.agentSingular","agent"):c("agents.agentPlural","agents"),Xe=c(Te===1?"agents.bulkResult_one":"agents.bulkResult_other","{{action}} {{successCount}} {{agentWord}}; skipped {{skippedCount}}",{action:at,successCount:Te,agentWord:mt,skippedCount:ie});if(Ze>0){const ue=we.slice(0,3).map(({agent:Ue,result:Ht})=>`${Ue.name||Ue.id}: ${_(Ht.reason)}`).join("; ");o(c("agents.bulkResultWithFailures","{{summary}}; failed {{failureCount}}{{detail}}",{summary:Xe,failureCount:Ze,detail:ue?` (${ue})`:""}),"error")}else o(Xe,"success");await Be()}catch(z){o(c("agents.bulkActionFailed","Failed to {{action}} agents: {{error}}",{action:p==="paused"?c("agents.pause","pause"):c("agents.resume","resume"),error:_(z)}),"error")}finally{J(!1)}}},jt=async()=>{if(!O){U(!0);try{await Sa(t,r,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),o(c("agents.heartbeatStarted","Heartbeat run started for {{name}}",{name:g?.name??t}),"success"),$e(p=>p+1)}catch(p){o(c("agents.heartbeatStartFailed","Failed to start heartbeat run: {{error}}",{error:_(p)}),"error")}finally{U(!1)}}},Ke=async()=>{if(!(!g||!await M({title:c("agents.deleteTitle","Delete Agent"),message:c("agents.deleteConfirm",'Delete agent "{{name}}"? This cannot be undone.',{name:g.name}),danger:!0})))try{await ka(t,r),o(c("agents.deleted",'Agent "{{name}}" deleted',{name:g.name}),"success"),await dt(!0),l()}catch(z){o(c("agents.deleteFailed","Failed to delete agent: {{error}}",{error:_(z)}),"error")}},st=()=>g?Na(g,T):{label:"Unknown",icon:e.jsx(ss,{size:14}),color:"var(--text-muted)",stateDerived:!1},Le=async()=>{if(g){const p=await Va(g.id);o(p?c("agents.idCopied","Agent ID copied to clipboard"):c("agents.idCopyFailed","Failed to copy agent ID"),p?"success":"error")}};if(se)return m?e.jsx("div",{className:"agent-detail-inline-loading",role:"region","aria-label":c("agents.detailLoadingLabel","Agent detail loading"),children:e.jsxs("div",{className:"agent-detail-loading",children:[e.jsx(G,{className:"animate-spin",size:24}),e.jsx("span",{children:c("agents.loading","Loading agent...")})]})}):e.jsx("div",{className:"agent-detail-overlay",onMouseDown:p=>{p.target===p.currentTarget&&(ne.current=!0)},onMouseUp:p=>{ne.current&&p.target===p.currentTarget&&l(),ne.current=!1},role:"dialog","aria-modal":"true",children:e.jsx("div",{className:"agent-detail-modal",ref:j,children:e.jsxs("div",{className:"agent-detail-loading",children:[e.jsx(G,{className:"animate-spin",size:24}),e.jsx("span",{children:c("agents.loading","Loading agent...")})]})})});if(!g)return null;const fe=ns[g.state],ke=st(),Re=m?"agent-detail-inline":"agent-detail-modal",Ye=b||d===0,De=b||V===0;return e.jsx("div",{className:m?"agent-detail-inline-shell":"agent-detail-overlay",onClick:p=>!m&&p.target===p.currentTarget&&l(),role:m?"region":"dialog","aria-label":m?"Agent detail":void 0,"aria-modal":m?void 0:"true",children:e.jsxs("div",{className:Re,ref:j,children:[e.jsxs("div",{className:"agent-detail-header",children:[e.jsxs("div",{className:"agent-detail-identity",children:[m&&y?e.jsxs("button",{type:"button",className:"btn agent-detail-inline-back",onClick:l,"aria-label":c("agents.backToAgents","Back to agents"),children:[e.jsx(Hs,{size:16}),c("agents.agentsLabel","Agents")]}):null,e.jsx("div",{className:"agent-detail-icon",children:e.jsx(Is,{agent:g,size:36})}),e.jsxs("div",{className:"agent-detail-info",children:[e.jsx("h2",{children:g.name}),e.jsxs("div",{className:"agent-detail-badges",children:[e.jsx("span",{className:"badge",style:{background:fe.bg,color:fe.text,border:`1px solid ${fe.border}`},children:g.state}),e.jsxs("span",{className:"badge",style:{color:ke.color},title:ke.reason??ke.label,children:[ke.icon,!ke.stateDerived&&ke.label]})]})]})]}),e.jsxs("div",{className:"agent-detail-header-actions",children:[e.jsxs("div",{className:"agent-detail-controls",children:[g.state==="idle"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-task-create btn--compact",onClick:()=>void Pe("active"),disabled:E,children:[e.jsx(_t,{size:14}),c("agents.start","Start")]}),e.jsxs("button",{className:"btn btn-task-create btn--compact",onClick:()=>void jt(),"aria-label":c("agents.runNowFor","Run now for {{name}}",{name:g.name}),disabled:O||E,children:[e.jsx(At,{size:14}),c("agents.runNow","Run Now")]}),e.jsxs("button",{className:"btn btn--danger btn--compact",onClick:Ke,children:[e.jsx(bt,{size:14}),c("agents.delete","Delete")]})]}),g.state==="active"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--compact agent-detail-mobile-icon-control",onClick:()=>void Pe("paused"),disabled:E,"aria-label":c("agents.pause","Pause"),children:[e.jsx(bs,{size:14}),e.jsx("span",{className:"agent-detail-control-label",children:c("agents.pause","Pause")})]}),e.jsxs("button",{className:"btn btn--danger btn--compact agent-detail-mobile-icon-control",onClick:()=>void Pe("paused"),disabled:E,"aria-label":c("agents.stop","Stop"),children:[e.jsx(it,{size:14}),e.jsx("span",{className:"agent-detail-control-label",children:c("agents.stop","Stop")})]}),e.jsxs("button",{className:"btn btn-task-create btn--compact agent-detail-mobile-icon-control",onClick:()=>void jt(),"aria-label":c("agents.runNowFor","Run now for {{name}}",{name:g.name}),disabled:O||E,children:[e.jsx(At,{size:14}),e.jsx("span",{className:"agent-detail-control-label",children:c("agents.runNow","Run Now")})]})]}),g.state==="paused"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-task-create btn--compact agent-detail-mobile-icon-control",onClick:()=>void Pe("active"),disabled:E,"aria-label":c("agents.resume","Resume"),children:[e.jsx(_t,{size:14}),e.jsx("span",{className:"agent-detail-control-label",children:c("agents.resume","Resume")})]}),e.jsxs("button",{className:"btn btn--danger btn--compact",onClick:Ke,children:[e.jsx(bt,{size:14}),c("agents.delete","Delete")]})]}),g.state==="running"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--compact agent-detail-mobile-icon-control",onClick:()=>void Pe("paused"),disabled:E,"aria-label":c("agents.pause","Pause"),children:[e.jsx(bs,{size:14}),e.jsx("span",{className:"agent-detail-control-label",children:c("agents.pause","Pause")})]}),e.jsxs("button",{className:"btn btn--danger btn--compact agent-detail-mobile-icon-control",onClick:()=>void Pe("paused"),disabled:E,"aria-label":c("agents.stop","Stop"),children:[e.jsx(it,{size:14}),e.jsx("span",{className:"agent-detail-control-label",children:c("agents.stop","Stop")})]})]}),g.state==="error"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-task-create btn--compact",onClick:()=>void Pe("active"),disabled:E,children:[e.jsx(_t,{size:14}),c("agents.retry","Retry")]}),e.jsxs("button",{className:"btn btn--danger btn--compact agent-detail-mobile-icon-control",onClick:()=>void Pe("paused"),disabled:E,"aria-label":c("agents.stop","Stop"),children:[e.jsx(it,{size:14}),e.jsx("span",{className:"agent-detail-control-label",children:c("agents.stop","Stop")})]}),e.jsxs("button",{className:"btn btn--danger btn--compact agent-detail-mobile-icon-control",onClick:Ke,"aria-label":c("agents.delete","Delete"),children:[e.jsx(bt,{size:14}),e.jsx("span",{className:"agent-detail-control-label",children:c("agents.delete","Delete")})]})]})]}),e.jsxs("div",{className:"agent-detail-utility-actions",children:[e.jsxs("div",{className:"agent-detail-bulk-menu",ref:re,children:[e.jsx("button",{type:"button",className:"btn-icon",onClick:()=>Q(p=>!p),"aria-haspopup":"menu","aria-expanded":C,"aria-label":c("agents.bulkActions","Bulk agent actions"),title:c("agents.bulkActions","Bulk agent actions"),disabled:E||P,children:e.jsx(ba,{size:16})}),C&&e.jsxs("div",{className:"agent-detail-bulk-menu-popover",role:"menu",children:[e.jsxs("button",{type:"button",role:"menuitem",className:"agent-detail-bulk-menu-item",onClick:()=>void ut("paused"),disabled:Ye||P,children:[c("agents.pauseAll","Pause All Agents"),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:b?c("agents.loadingEligible","Loading eligible agents..."):Ye?c("agents.noActiveEligible","No active agents eligible"):c(d===1?"agents.pauseCountHint_one":"agents.pauseCountHint_other",d===1?"Pause {{count}} active/running agent":"Pause {{count}} active/running agents",{count:d})})]}),e.jsxs("button",{type:"button",role:"menuitem",className:"agent-detail-bulk-menu-item",onClick:()=>void ut("active"),disabled:De||P,children:[c("agents.resumeAll","Resume All Agents"),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:b?c("agents.loadingEligible","Loading eligible agents..."):De?c("agents.noPausedEligible","No paused agents eligible"):c(V===1?"agents.resumeCountHint_one":"agents.resumeCountHint_other",V===1?"Resume {{count}} paused agent":"Resume {{count}} paused agents",{count:V})})]})]})]}),e.jsx("button",{className:"btn-icon",onClick:()=>void Se(),title:c("common.refresh","Refresh"),"aria-label":c("common.refresh","Refresh"),children:e.jsx(Pt,{size:16})}),!m&&e.jsx("button",{className:"btn-icon",onClick:l,"aria-label":c("common.close","Close"),title:c("common.close","Close"),children:e.jsx(Os,{size:20})})]})]})]}),e.jsx("div",{className:"agent-detail-tabs",children:vn.map(p=>{const z={dashboard:c("agents.tabDashboard","Dashboard"),logs:c("agents.tabLogs","Logs"),mail:c("agents.tabMail","Mail"),runs:c("agents.tabRuns","Runs"),tasks:c("agents.tabTasks","Tasks"),employees:c("agents.tabEmployees","Employees"),soul:c("agents.tabSoul","Soul"),instructions:c("agents.tabInstructions","Instructions"),memory:c("agents.tabMemory","Agent Memory"),reflections:c("agents.tabReflections","Evaluation"),config:c("agents.tabConfig","Settings")};return e.jsxs("button",{className:de("agent-detail-tab",v===p.id&&"active"),onClick:()=>A(p.id),children:[e.jsx(p.icon,{size:16}),z[p.id]]},p.id)})}),e.jsxs("div",{className:"agent-detail-content",children:[v==="dashboard"&&e.jsx(Cn,{agent:g,health:ke,onChildClick:s,projectId:r}),v==="logs"&&e.jsx(Rn,{logs:H,isStreaming:K,hasTask:!!g.taskId||H.length>0||ge!==null,fallbackLabel:!g.taskId&&ge?c("agents.latestRunLabel","Latest run · {{id}}",{id:ge.id.slice(0,8)}):null,windowResetKey:g.taskId??ge?.id??"none"}),v==="mail"&&e.jsx(Mn,{agent:g,mailbox:ae,isLoading:Ce,error:Ie,projectId:r,addToast:o,onRefresh:()=>void ct()}),v==="runs"&&e.jsx(An,{addToast:o,agentId:g.id,projectId:r,agentState:g.state,agentName:g.name,initialRunId:f,preferActiveRun:u,runNowRefreshToken:Ae,isEphemeral:$t(g)}),v==="tasks"&&e.jsx(Tn,{agentId:g.id,projectId:r,addToast:o}),v==="employees"&&e.jsx(On,{agentId:g.id,projectId:r,onChildClick:s}),v==="soul"&&e.jsx(Ln,{agent:g,projectId:r,addToast:o,onSaved:Be}),v==="instructions"&&e.jsx(zn,{agent:g,projectId:r,addToast:o,onSaved:Be}),v==="memory"&&e.jsx(Dn,{agent:g,projectId:r,addToast:o,onSaved:Be}),v==="reflections"&&e.jsx(pn,{agentId:g.id,projectId:r,addToast:o}),v==="config"&&e.jsx(In,{agent:g,projectId:r,addToast:o,onSaved:Be,onHasChangesChange:zt,onDelete:Ke,onAgentDraftApplied:p=>{w(z=>z&&{...z,...p})}},g.id)]}),!m&&e.jsxs("div",{className:"agent-detail-footer",children:[e.jsx("button",{className:"btn-icon",onClick:Le,title:c("agents.copyId","Copy Agent ID"),children:e.jsx(ya,{})}),e.jsx("span",{className:"agent-detail-id",onClick:Le,children:g.id}),g.taskId&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"divider",children:"|"}),e.jsx("span",{className:"text-muted",children:c("agents.workingOn","Working on:")}),e.jsxs("a",{href:`/tasks/${g.taskId}`,className:"link",children:[e.jsx(_s,{taskId:g.taskId,taskColumn:g.taskColumn}),e.jsx(Us,{size:12})]})]})]})]})})}function Cn({agent:t,health:r,onChildClick:l,projectId:o}){const{t:s}=ye("app"),m=ns[t.state],[y,n]=a.useState([]),[f,u]=a.useState(!0),[N,c]=a.useState(null),[g,w]=a.useState([]),[T,D]=a.useState(null),[M,H]=a.useState(null),[I,se]=a.useState(!1),[k,v]=a.useState(null),A=typeof t.runtimeConfig?.runtimeHint=="string"?t.runtimeConfig.runtimeHint:"",K=(()=>{const b=t.runtimeConfig??{};if(A){const S=g.find(d=>d.runtimeId===A);return S?S.name:A}if(b.modelProvider&&b.modelId)return`${b.modelProvider}/${b.modelId}`;if(typeof b.model=="string"&&b.model.includes("/")){const S=b.model.indexOf("/");return b.model.slice(S+1)}return null})();a.useEffect(()=>{Qt(t.id,o).then(c).catch(()=>c(null))},[t.id,o]),a.useEffect(()=>{Vs(o).then(w).catch(()=>w([]))},[o]),a.useEffect(()=>{let b=!1;return u(!0),Ca(t.id,o).then(S=>{if(b)return;const d=S.length>0&&S[0]?.id===t.id?[...S].reverse():S;n(d)}).catch(()=>{b||n([])}).finally(()=>{b||u(!1)}),()=>{b=!0}},[t.id,o]);const F=a.useMemo(()=>{const b=t.completedRuns||[],S=new Date;S.setHours(0,0,0,0);const d=b.filter(V=>new Date(V.startedAt)>=S),L=b.filter(V=>V.status==="completed");return{totalRuns:b.length,todayRuns:d.length,successfulRuns:L.length,successRate:b.length>0?Math.round(L.length/b.length*100):0}},[t]),E=(t.completedRuns||[]).slice(0,5),Y=Array.isArray(t.metadata?.skills)?t.metadata.skills:[],O=T?Wt(T):null,U=a.useCallback(async b=>{se(!0),v(null),H(null);try{const S=await Ra(b,o);H(S)}catch(S){v(_(S))}finally{se(!1)}},[o]),C=a.useCallback(b=>{if(T===b){D(null),H(null),v(null),se(!1);return}D(b),U(b)},[U,T]),Q=t.state==="active"||t.state==="running",P=wa(t.runtimeConfig?.heartbeatIntervalMs),J=Q&&t.lastHeartbeatAt?new Date(new Date(t.lastHeartbeatAt).getTime()+P).toISOString():null;return e.jsxs("div",{className:"dashboard-tab dashboard-summary-layout",children:[N?.isOverBudget&&e.jsxs("div",{className:"budget-warning-banner",role:"alert",children:[e.jsx("span",{children:xn}),e.jsxs("span",{children:[e.jsx("strong",{children:s("agents.budgetExhaustedTitle","Budget Exhausted:")})," ",s("agents.budgetExhaustedBody","This agent has exceeded its token budget and may operate with limited functionality.")]})]}),e.jsxs("section",{className:"dashboard-summary-card dashboard-summary-hero",children:[e.jsxs("div",{className:"dashboard-summary-hero__heading",children:[e.jsx(ss,{}),e.jsx("h3",{children:s("agents.overview","Overview")}),e.jsx("strong",{children:t.name}),e.jsx("span",{className:"inline-badge",style:{background:m.bg,color:m.text},children:t.state})]}),e.jsxs("div",{className:"dashboard-summary-hero__meta",children:[e.jsxs("span",{className:"dashboard-summary-hero__health",title:r.reason??r.label,children:[r.icon," ",r.label]}),(t.pendingApprovalCount??0)>0?e.jsxs("span",{className:"badge agent-detail-approval-badge",title:s("agents.pendingApprovals","Pending approvals"),children:[e.jsx("span",{className:"status-dot status-dot--pending"}),s("agents.pendingApprovalsCount","{{count}} pending approvals",{count:t.pendingApprovalCount})]}):null,e.jsx("span",{children:s("agents.roleLabel","Role: {{role}}",{role:t.role})}),e.jsxs("span",{children:[e.jsx("span",{className:"dashboard-summary-label",children:A?s("agents.runtime","Runtime"):s("agents.model","Model")}),e.jsxs("span",{children:[" ",K??s("agents.auto","Auto")]})]}),Y.length>0?e.jsxs("span",{className:"dashboard-summary-skills",children:[e.jsx("span",{className:"dashboard-summary-label",children:s("agents.skills","Skills")}),e.jsx("span",{className:"dashboard-summary-skill-badges",role:"list","aria-label":s("agents.assignedSkills","Assigned skills"),children:Y.map(b=>{const S=T===b;return e.jsx("button",{type:"button",className:de("badge","badge-skill","dashboard-summary-skill-badge","dashboard-summary-skill-badge-btn",S&&"dashboard-summary-skill-badge--selected"),title:b,onClick:()=>C(b),"aria-expanded":S,"aria-label":s("agents.viewSkillDetails","View details for {{skill}}",{skill:Wt(b)}),children:Wt(b)},b)})})]}):e.jsx("span",{children:s("agents.skillsNone","Skills: —")})]}),T?e.jsxs("div",{className:"dashboard-summary-skill-detail","data-testid":"agent-skill-detail",children:[e.jsxs("div",{className:"dashboard-summary-skill-detail-header",children:[e.jsx("span",{className:"dashboard-summary-skill-detail-title",children:O}),e.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>C(T),children:[e.jsx(Os,{size:14}),s("common.close","Close")]})]}),I?e.jsxs("div",{className:"dashboard-summary-skill-detail-loading",role:"status","aria-live":"polite",children:[e.jsx(G,{size:14,className:"animate-spin"}),s("agents.loadingSkillContent","Loading skill content...")]}):k?e.jsxs("div",{className:"dashboard-summary-skill-detail-error",role:"alert",children:[e.jsx(Ws,{size:14}),e.jsx("span",{children:k}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void U(T),children:s("common.retry","Retry")})]}):M?e.jsx("pre",{className:"dashboard-summary-skill-detail-content",children:M.skillMd||s("agents.noSkillMd","(No SKILL.md found)")}):e.jsx("div",{className:"dashboard-summary-skill-detail-empty",children:s("agents.noSkillContent","No skill content available")})]}):null]}),e.jsxs("section",{className:"dashboard-summary-card",children:[e.jsx("h3",{children:s("agents.heartbeatAndHealth","Heartbeat & Health")}),e.jsxs("div",{className:"dashboard-summary-grid",children:[e.jsxs("div",{children:[e.jsx("p",{className:"dashboard-summary-label",children:s("agents.lastHeartbeat","Last heartbeat")}),e.jsx("p",{children:t.lastHeartbeatAt?rt(t.lastHeartbeatAt,s):s("agents.never","Never")})]}),e.jsxs("div",{children:[e.jsx("p",{className:"dashboard-summary-label",children:s("agents.nextExpected","Next expected")}),e.jsx("p",{children:J?rt(J,s):s("agents.notScheduled","Not scheduled")})]}),e.jsxs("div",{children:[e.jsx("p",{className:"dashboard-summary-label",children:s("agents.interval","Interval")}),e.jsx("p",{children:Gs(P)})]}),e.jsxs("div",{children:[e.jsx("p",{className:"dashboard-summary-label",children:s("agents.status","Status")}),e.jsxs("p",{className:"dashboard-summary-health-row",children:[e.jsx("span",{className:de("status-dot",t.state==="running"&&"status-dot--running")}),r.label,r.reason&&e.jsxs("span",{className:"text-secondary dashboard-summary-health-reason",title:r.reason,children:["(",r.reason,")"]})]})]})]})]}),e.jsxs("section",{className:"dashboard-summary-card",children:[e.jsx("h3",{children:s("agents.currentWork","Current Work")}),t.taskId?e.jsxs("div",{className:"current-task",children:[e.jsx("a",{href:`/tasks/${t.taskId}`,className:"task-badge",children:e.jsx(_s,{taskId:t.taskId,taskColumn:t.taskColumn})}),e.jsxs("a",{href:`/tasks/${t.taskId}`,className:"btn btn-sm",children:[s("agents.viewTask","View Task")," ",e.jsx(Us,{size:14})]})]}):e.jsx("p",{className:"text-muted",children:s("agents.noActiveAssignment","No active assignment")})]}),e.jsxs("section",{className:"dashboard-summary-card",children:[e.jsx("h3",{children:s("agents.recentRuns","Recent Runs")}),e.jsx("p",{className:"dashboard-summary-label",children:s("agents.runsSuccessRate","{{successful}}/{{total}} successful ({{rate}}%)",{successful:F.successfulRuns,total:F.totalRuns,rate:F.successRate})}),E.length===0?e.jsx("p",{className:"text-muted",children:s("agents.noRunsYet","No runs yet")}):e.jsx("div",{className:"runs-list",children:E.map(b=>{const S=Ft[b.status]||Ft.terminated,d=S.icon;return e.jsxs("div",{className:"run-item",children:[e.jsx(d,{size:14,style:{color:S.color}}),e.jsx("span",{children:rt(b.startedAt,s)}),e.jsxs("span",{className:"text-muted",children:[Math.max(0,Math.round((new Date(b.endedAt||b.startedAt).getTime()-new Date(b.startedAt).getTime())/1e3)),"s"]})]},b.id)})})]}),e.jsxs("section",{className:"dashboard-summary-card",children:[e.jsx("h3",{children:s("agents.throughput","Throughput")}),e.jsxs("div",{className:"stats-grid",children:[e.jsxs("div",{className:"stat-card",children:[e.jsx("div",{className:"stat-value",children:F.totalRuns}),e.jsx("div",{className:"stat-label",children:s("agents.totalRuns","Total Runs")})]}),e.jsxs("div",{className:"stat-card",children:[e.jsx("div",{className:"stat-value",children:F.todayRuns}),e.jsx("div",{className:"stat-label",children:s("agents.runsToday","Runs Today")})]}),e.jsxs("div",{className:"stat-card",children:[e.jsxs("div",{className:"stat-value",children:[F.successRate,"%"]}),e.jsx("div",{className:"stat-label",children:s("agents.successRate","Success Rate")})]})]})]}),e.jsxs("section",{className:"dashboard-summary-card",children:[e.jsx("h3",{children:s("agents.chainOfCommand","Chain of Command")}),f?e.jsxs("div",{className:"chain-of-command-loading",role:"status","aria-live":"polite",children:[e.jsx(G,{size:14,className:"animate-spin"}),e.jsx("span",{children:s("agents.loadingReportingChain","Loading reporting chain...")})]}):y.length<=1?e.jsx("p",{className:"text-muted",children:s("agents.noReportingChain","No reporting chain")}):e.jsx("div",{className:"chain-of-command-path","aria-label":s("agents.chainOfCommand","Chain of command"),children:y.map((b,S)=>{const d=S===y.length-1,L=!d;return e.jsxs("div",{className:"chain-of-command-item",children:[e.jsx("button",{type:"button",className:`chain-of-command-node${d?" chain-of-command-node--current":""}`,onClick:()=>L&&l?.(b.id),disabled:!L||!l,title:d?s("agents.currentAgent","Current agent"):s("agents.viewAgent","View {{name}}",{name:b.name}),children:b.name}),!d&&e.jsx("span",{className:"chain-of-command-separator","aria-hidden":"true",children:"→"})]},b.id)})})]})]})}function Rn({logs:t,isStreaming:r,hasTask:l,fallbackLabel:o,windowResetKey:s}){const{t:m}=ye("app");return l?e.jsxs("div",{className:"logs-tab",children:[e.jsxs("div",{className:"logs-header",children:[e.jsx("span",{className:"logs-count",children:m("agents.logEntries","{{count}} entries",{count:t.length})}),o&&e.jsx("span",{className:"text-muted logs-fallback-label",children:o}),r&&e.jsxs("span",{className:"streaming-indicator",children:[e.jsx("span",{className:"streaming-dot"}),m("agents.live","Live")]})]}),t.length===0?e.jsxs("div",{className:"logs-empty",children:[e.jsx(xt,{size:48,opacity:.3}),e.jsx("p",{children:m("agents.noLogEntriesYet","No log entries yet")}),e.jsx("p",{className:"text-muted",children:r?m("agents.waitingForActivity","Waiting for activity..."):m("agents.logsWillAppearActive","Logs will appear here when the agent is active")})]}):e.jsx(Ks,{entries:t,resetKey:s,testId:"agent-logs"})]}):e.jsx("div",{className:"logs-tab",children:e.jsxs("div",{className:"logs-empty",children:[e.jsx(xt,{size:48,opacity:.3}),e.jsx("p",{children:m("agents.noActivityYet","No activity yet")}),e.jsx("p",{className:"text-muted",children:m("agents.logsWillAppear","Agent logs will appear here from the current task or most recent run")})]})})}function wn(t,r){const l=new Date(t),s=new Date().getTime()-l.getTime(),m=Math.floor(s/6e4),y=Math.floor(s/36e5),n=Math.floor(s/864e5),f=r??((u,N,c)=>c?N.replace(/\{\{(\w+)\}\}/g,(g,w)=>String(c[w]??"")):N);return m<1?f("time.justNow","just now"):m<60?f("time.minutesAgo","{{n}}m ago",{n:m}):y<24?f("time.hoursAgo","{{n}}h ago",{n:y}):n<7?f("time.daysAgo","{{n}}d ago",{n}):l.toLocaleDateString(void 0,{month:"short",day:"numeric"})}function Ct(t,r,l,o){const s=o??((m,y,n)=>n?y.replace(/\{\{(\w+)\}\}/g,(f,u)=>String(n[u]??"")):y);if(r==="user")return t==="dashboard"?s("mailbox.you","You"):s("mailbox.userLabel","User: {{id}}",{id:t});if(r==="agent"){const m=l?.get(t)?.trim();return!m||m===t?s("mailbox.agentById","Agent: {{id}}",{id:t}):s("mailbox.agentByName","Agent: {{name}}",{name:m})}return s("mailbox.system","System")}function Mn({agent:t,mailbox:r,isLoading:l,error:o,projectId:s,addToast:m,onRefresh:y}){const{t:n}=ye("app"),[f,u]=a.useState("inbox"),[N,c]=a.useState([]);a.useEffect(()=>{let k=!1;return Mt(void 0,s).then(v=>{k||c(v)}).catch(()=>{k||c([])}),()=>{k=!0}},[s]);const g=a.useMemo(()=>{const k=new Map;for(const A of N){if(!A.id)continue;const K=typeof A.name=="string"?A.name.trim():"";K.length>0&&k.set(A.id,K)}const v=typeof t.name=="string"?t.name.trim():"";return v.length>0&&k.set(t.id,v),k},[N,t.id,t.name]),[w,T]=a.useState(null),D=f==="inbox"?r?.inbox??[]:r?.outbox??[],M=w?D.find(k=>k.id===w)??null:null;a.useEffect(()=>{T(null)},[f,t.id]);const H=async k=>{if(T(k.id),!(f!=="inbox"||k.read))try{await en(k.id,s),y()}catch(v){const A=`Failed to mark message as read: ${_(v)}`;m?m(A,"error"):console.warn(A)}},I=()=>{T(null),y()},se=k=>e.jsxs("button",{type:"button",className:de("mailbox-item","agent-mail-tab-message",f==="inbox"&&!k.read&&"unread",w===k.id&&"agent-mail-tab-message--selected"),onClick:()=>void H(k),"aria-pressed":w===k.id,children:[e.jsx("div",{className:"mailbox-item-avatar",children:(f==="inbox"?k.fromType:k.toType)==="agent"?e.jsx(ss,{size:16}):e.jsx(Ga,{size:16})}),e.jsxs("div",{className:"mailbox-item-content",children:[e.jsxs("div",{className:"mailbox-item-header",children:[f==="inbox"?e.jsx("span",{className:"mailbox-item-from",children:Ct(k.fromId,k.fromType,g,n)}):e.jsx("span",{className:"mailbox-item-to",children:n("agents.mailTo","To: {{recipient}}",{recipient:Ct(k.toId,k.toType,g,n)})}),e.jsx("span",{className:"mailbox-item-time",children:wn(k.createdAt,n)})]}),e.jsxs("div",{className:"mailbox-item-preview",children:[k.content.slice(0,80),k.content.length>80?"…":""]})]}),f==="inbox"&&!k.read?e.jsx("div",{className:"mailbox-item-unread-dot","aria-label":n("agents.unreadMessage","Unread message")}):null]},k.id);return e.jsxs("div",{className:"agent-mail-tab",children:[e.jsxs("div",{className:"agent-mail-tab-header",children:[e.jsx("h3",{children:n("agents.agentMail","{{name}} Mail",{name:t.name})}),e.jsxs("button",{className:"btn btn-sm",onClick:I,disabled:l,children:[e.jsx(Pt,{size:14}),n("common.refresh","Refresh")]})]}),e.jsxs("div",{className:"mailbox-agent-subtabs","data-testid":"agent-detail-mail-subtabs",children:[e.jsxs("button",{className:de("btn","btn-sm","btn-secondary","mailbox-agent-subtab",f==="inbox"&&"active"),onClick:()=>u("inbox"),children:[e.jsx(vs,{size:12}),e.jsx("span",{children:n("agents.inbox","Inbox")}),(r?.unreadCount??0)>0?e.jsx("span",{className:"mailbox-tab-badge",children:r?.unreadCount}):null]}),e.jsxs("button",{className:de("btn","btn-sm","btn-secondary","mailbox-agent-subtab",f==="outbox"&&"active"),onClick:()=>u("outbox"),children:[e.jsx(js,{size:12}),e.jsx("span",{children:n("agents.outbox","Outbox")})]})]}),l&&!r?e.jsxs("div",{className:"agent-detail-loading agent-detail-loading--inline",role:"status","aria-live":"polite",children:[e.jsx(G,{className:"animate-spin",size:16}),e.jsx("span",{children:n("agents.loadingMailbox","Loading mailbox...")})]}):null,!l&&o?e.jsxs("div",{className:"agent-mail-tab-error",role:"alert",children:[e.jsx(Ws,{size:16}),e.jsx("span",{children:n("agents.mailboxLoadFailed","Failed to load mailbox: {{error}}",{error:o})})]}):null,!l&&!o?M?e.jsxs("div",{className:"agent-mail-tab-detail","data-testid":"agent-detail-mail-message",children:[e.jsxs("button",{type:"button",className:"btn btn-sm agent-mail-tab-back","data-testid":"agent-detail-mail-back",onClick:()=>T(null),children:[e.jsx(Hs,{size:14}),f==="inbox"?n("agents.backToInbox","Back to Inbox"):n("agents.backToOutbox","Back to Outbox")]}),e.jsxs("div",{className:"agent-mail-tab-detail-meta",children:[e.jsxs("div",{className:"agent-mail-tab-detail-row",children:[e.jsx("span",{className:"agent-mail-tab-detail-label",children:n("agents.mailFrom","From")}),e.jsx("span",{children:Ct(M.fromId,M.fromType,g,n)})]}),e.jsxs("div",{className:"agent-mail-tab-detail-row",children:[e.jsx("span",{className:"agent-mail-tab-detail-label",children:n("agents.mailToLabel","To")}),e.jsx("span",{children:Ct(M.toId,M.toType,g,n)})]}),e.jsxs("div",{className:"agent-mail-tab-detail-row",children:[e.jsx("span",{className:"agent-mail-tab-detail-label",children:n("agents.mailType","Type")}),e.jsx("span",{children:M.type})]}),e.jsxs("div",{className:"agent-mail-tab-detail-row",children:[e.jsx("span",{className:"agent-mail-tab-detail-label",children:n("agents.mailSent","Sent")}),e.jsx("span",{children:new Date(M.createdAt).toLocaleString()})]}),M.metadata?.replyTo?.messageId?e.jsx("div",{className:"agent-mail-tab-reply-context",children:n("agents.replyingTo","↪ Replying to message {{id}}",{id:M.metadata.replyTo.messageId})}):null]}),e.jsx("div",{className:"agent-mail-tab-detail-body",children:M.content})]}):e.jsx("div",{className:"mailbox-list","data-testid":"agent-detail-mail-list",children:D.length===0?e.jsxs("div",{className:"mailbox-empty","data-testid":"agent-detail-mail-empty",children:[f==="inbox"?e.jsx(vs,{size:32}):e.jsx(js,{size:32}),e.jsx("p",{children:f==="inbox"?n("agents.noInboxMessages","No received messages for this agent"):n("agents.noOutboxMessages","No sent messages for this agent")})]}):D.map(se)}):null]})}function An({addToast:t,agentId:r,projectId:l,agentState:o,agentName:s,initialRunId:m,preferActiveRun:y,runNowRefreshToken:n,isEphemeral:f}){const{t:u}=ye("app"),[N,c]=a.useState([]),{confirm:g}=Ds(),[w,T]=a.useState(!0),[D,M]=a.useState(null),[H,I]=a.useState([]),[se,k]=a.useState(!1),[v,A]=a.useState(null),[K,F]=a.useState(!1),[E,Y]=a.useState(null),[O,U]=a.useState([]),C=a.useRef(!1),Q=a.useRef(!1),P=a.useRef(null);P.current=D;const J=a.useRef(async()=>{});J.current=async()=>{const x=P.current;if(x)try{const j=await Xt(r,x,l);if(P.current!==x)return;I(j)}catch{}};const b=a.useCallback(async()=>{try{const x=await zs(r,50,l);c(x)}catch(x){t(`Failed to load runs: ${_(x)}`,"error")}finally{T(!1)}},[r,l,t]);a.useEffect(()=>{b()},[b]),a.useEffect(()=>{if(f){Y(null),U([]);return}const x=l?`?projectId=${encodeURIComponent(l)}`:"";fetch(`/api/agents/${encodeURIComponent(r)}/token-usage${x}`).then(async j=>{if(!j.ok){if(j.status===400){Y(null);return}throw new Error(`Request failed: ${j.status}`)}const re=await j.json();Y(re)}).catch(j=>{t(`Failed to load cache hit ratio: ${_(j)}`,"error")}),Aa(r,7,l).then(j=>U(j)).catch(j=>{const re=_(j).toLowerCase();if(re.includes("ephemeral")||re.includes("400")){U([]);return}t(`Failed to load prompt sizes: ${_(j)}`,"error")})},[r,l,t,f]),a.useEffect(()=>{if(!Q.current){Q.current=!0;return}T(!0),b()},[b,n]);const S=N.some(x=>x.status==="active"),d=D?N.find(x=>x.id===D)?.status:void 0;a.useEffect(()=>{if(!S)return;const x=setInterval(()=>{b()},5e3);return()=>clearInterval(x)},[S,b]),a.useEffect(()=>{if(!D||d!=="active")return;const x=l?`?projectId=${encodeURIComponent(l)}`:"";return wt(`/api/agents/${encodeURIComponent(r)}/runs/${encodeURIComponent(D)}/logs/stream${x}`,{events:{"agent:log":j=>{try{const re=JSON.parse(j.data);I(ne=>ts(ne,re))}catch{}}},onReconnect:()=>{J.current()}})},[D,d,r,l]);const L=a.useCallback(async x=>{if(D===x){M(null),I([]),A(null);return}M(x),k(!0),F(!0),I([]),A(null);try{const[j,re]=await Promise.all([Xt(r,x,l),Fa(r,x,l)]);I(j),A(re)}catch(j){t(u("agents.runDetailsFailed","Failed to load run details: {{error}}",{error:_(j)}),"error"),I([]),A(null)}finally{k(!1),F(!1)}},[D,r,l,t]);a.useEffect(()=>{C.current=!1},[r,m,y]),a.useEffect(()=>{if(N.length===0||w||C.current)return;const x=m?N.find(j=>j.id===m):y?N.find(j=>j.status==="active"):null;C.current=!0,x&&L(x.id)},[m,y,N,w,L]);const V=async()=>{if(await g({title:u("agents.stopRunTitle","Stop Active Run"),message:u("agents.stopRunConfirm","Stop the active run? The agent's work will be interrupted."),danger:!0}))try{await Ja(r,l),t(u("agents.runStopped","Run stopped"),"success"),T(!0),b()}catch(j){t(u("agents.stopRunFailed","Failed to stop run: {{error}}",{error:_(j)}),"error")}};if(w&&N.length===0)return e.jsx("div",{className:"runs-tab",children:e.jsxs("div",{className:"runs-loading-row",children:[e.jsx(G,{size:16,className:"animate-spin"}),e.jsx("span",{className:"text-muted",children:u("agents.loadingRuns","Loading runs...")})]})});if(N.length===0)return e.jsx("div",{className:"runs-tab",children:e.jsxs("div",{className:"runs-empty",children:[e.jsx(At,{size:48,opacity:.3}),e.jsx("p",{children:u("agents.noRunsYet","No runs yet")}),e.jsx("p",{className:"text-muted",children:u("agents.heartbeatRunsWillAppear","Heartbeat runs will appear here")})]})});const xe=[...N].sort((x,j)=>new Date(j.startedAt).getTime()-new Date(x.startedAt).getTime()),Ae=xe.filter(x=>x.status==="active"),$e=xe.filter(x=>x.status!=="active"),ge=x=>x?e.jsxs("div",{className:"run-usage",children:[e.jsx("span",{children:u("agents.inputTokens","Input: {{value}}",{value:x.inputTokens.toLocaleString()})}),e.jsx("span",{children:u("agents.outputTokens","Output: {{value}}",{value:x.outputTokens.toLocaleString()})}),x.cachedTokens>0&&e.jsx("span",{children:u("agents.cacheReadTokens","Cache read: {{value}}",{value:x.cachedTokens.toLocaleString()})}),(x.cacheWriteTokens??0)>0&&e.jsx("span",{children:u("agents.cacheWriteTokens","Cache write: {{value}}",{value:(x.cacheWriteTokens??0).toLocaleString()})})]}):null,B=(x,j,re)=>{const ne=Ft[x.status]||Ft.completed,et=ne.icon,Oe=x.endedAt?Fn(new Date(x.startedAt),new Date(x.endedAt)):u("agents.inProgress","In progress"),Fe=D===x.id;return e.jsxs("div",{children:[e.jsxs("div",{className:de("run-card",re&&"run-card--active",Fe&&"run-card--selected","run-card--clickable"),onClick:()=>void L(x.id),role:"button",tabIndex:0,"aria-expanded":Fe,"aria-label":u("agents.runAriaLabel","{{active}}run {{id}}, {{status}}",{active:re?u("agents.activePrefix","Active "):"",id:x.id.slice(0,8),status:x.status}),onKeyDown:oe=>{(oe.key==="Enter"||oe.key===" ")&&(oe.preventDefault(),L(x.id))},children:[e.jsxs("div",{className:"run-header",children:[e.jsxs("div",{className:"run-header-group",children:[Fe?e.jsx(Es,{size:14}):e.jsx(Ls,{size:14}),re?e.jsxs("span",{className:"run-live-indicator",children:[e.jsx("span",{className:"live-dot"}),u("agents.liveRun","Live Run")]}):e.jsxs("span",{className:"run-id",children:["#",j+1," ",x.id.slice(0,8)]})]}),e.jsxs("div",{className:"run-header-group",children:[x.invocationSource&&e.jsx("span",{className:"badge run-badge--compact",children:x.invocationSource}),re&&e.jsxs("button",{className:"btn btn--sm btn--danger",onClick:oe=>{oe.preventDefault(),oe.stopPropagation(),V()},"aria-label":u("agents.stopActiveRun","Stop active run"),children:[e.jsx(it,{size:12})," ",u("agents.stop","Stop")]}),e.jsxs("span",{className:de("run-status",x.status),children:[e.jsx(et,{size:14,style:{color:ne.color}}),x.status]}),x.heartbeatProcedureSource==="custom"&&e.jsx("span",{className:"badge run-badge--compact",children:u("agents.heartbeatCustom","Heartbeat: custom")})]})]}),e.jsxs("div",{className:"run-details",children:[e.jsx("span",{children:u("agents.runStarted","Started {{time}}",{time:rt(x.startedAt,u)})}),e.jsx("span",{children:"•"}),e.jsx("span",{children:Oe}),x.triggerDetail&&e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"•"}),e.jsx("span",{className:"text-muted",children:x.triggerDetail})]})]})]}),Fe&&e.jsxs("div",{className:"run-logs-container",children:[K?e.jsxs("div",{className:"run-details-loading-state",children:[e.jsx(G,{size:14,className:"animate-spin"}),e.jsx("span",{className:"text-muted",children:u("agents.loadingDetails","Loading details...")})]}):v&&e.jsxs("div",{className:"run-output-sections",children:[e.jsx("div",{className:"run-output-section",children:e.jsxs("details",{children:[e.jsx("summary",{className:"run-output-label run-output-summary",children:u("agents.systemPrompt","System Prompt")}),v.systemPrompt?e.jsx("pre",{className:"run-output-panel",children:v.systemPrompt}):e.jsx("div",{className:"text-muted run-output-empty",children:u("agents.systemPromptNotCaptured","System prompt not captured for this run")})]})}),e.jsx("div",{className:"run-output-section",children:e.jsxs("details",{children:[e.jsx("summary",{className:"run-output-label run-output-summary",children:u("agents.executionPrompt","Execution Prompt")}),v.executionPrompt?e.jsx("pre",{className:"run-output-panel",children:v.executionPrompt}):e.jsx("div",{className:"text-muted run-output-empty",children:u("agents.executionPromptNotCaptured","Execution prompt not captured for this run")})]})}),v.usageJson&&e.jsxs("div",{className:"run-output-section",children:[e.jsx("div",{className:"run-output-label",children:u("agents.tokenUsage","Token Usage")}),ge(v.usageJson)]}),v.stdoutExcerpt&&e.jsxs("div",{className:"run-output-section",children:[e.jsx("div",{className:"run-output-label",children:u("agents.output","Output")}),e.jsx("pre",{className:"run-output-panel",children:v.stdoutExcerpt.length>2e3?`${v.stdoutExcerpt.slice(0,2e3)}
12
+
13
+ ... (truncated, ${v.stdoutExcerpt.length} chars total)`:v.stdoutExcerpt})]}),v.stderrExcerpt&&e.jsxs("div",{className:"run-output-section",children:[e.jsx("div",{className:"run-output-label run-output-label--error",children:u("agents.errors","Errors")}),e.jsx(qa,{errorText:v.stderrExcerpt,summaryPrefix:"Run error",issueContext:{surface:"AgentDetailView runs",agentId:r,agentName:s,agentState:o,runId:v.id,taskId:void 0,timestamp:v.startedAt}})]}),v.resultJson&&e.jsxs("div",{className:"run-output-section",children:[e.jsx("div",{className:"run-output-label",children:u("agents.result","Result")}),e.jsx("pre",{className:"run-output-panel",children:JSON.stringify(v.resultJson,null,2)})]}),v.contextSnapshot&&Object.keys(v.contextSnapshot).length>0&&e.jsxs("div",{className:"run-output-section",children:[e.jsx("div",{className:"run-output-label",children:u("agents.context","Context")}),e.jsx("div",{className:"run-context-grid",children:Object.entries(v.contextSnapshot).map(([oe,Ee])=>e.jsxs("span",{className:"run-context-item",children:[e.jsxs("span",{className:"text-muted",children:[oe,":"]})," ",e.jsx("span",{children:String(Ee)})]},oe))})]}),!v.stdoutExcerpt&&!v.stderrExcerpt&&!v.resultJson&&e.jsx("div",{className:"text-muted run-output-empty",children:u("agents.noOutputCaptured","No output captured")})]}),e.jsxs("div",{className:"run-agent-logs-section",children:[e.jsx("div",{className:"run-output-label",children:u("agents.agentLogs","Agent Logs")}),se?e.jsxs("div",{className:"run-details-loading-state",children:[e.jsx(G,{size:14,className:"animate-spin"}),e.jsx("span",{className:"text-muted",children:u("agents.loadingLogs","Loading logs...")})]}):H.length===0?e.jsx("div",{className:"text-muted run-output-empty",children:u("agents.noLogsForRun","No logs available for this run")}):e.jsx(Ks,{entries:H,resetKey:D??"none",testId:"agent-run-logs"})]})]})]},x.id)},ae=(x,j)=>e.jsxs("div",{className:"run-context-item",children:[e.jsxs("span",{className:"text-muted",children:[x,":"]})," ",e.jsx("span",{children:u("agents.cacheWindowSummary","{{percent}}% ({{cached}} / {{written}} / {{input}} / {{tasks}})",{percent:(j.hitRatio*100).toFixed(1),cached:j.totalCachedTokens.toLocaleString(),written:j.totalCacheWriteTokens.toLocaleString(),input:j.totalInputTokens.toLocaleString(),tasks:j.nTasks.toLocaleString()})})]},x),Ne=O[0],Ce=[...O].reverse(),Je=Math.max(1,...Ce.map(x=>x.execChars)),Ie=Ce.map((x,j)=>{const re=Ce.length<=1?0:j/(Ce.length-1)*100,ne=100-Math.round(x.execChars/Je*100);return`${re},${ne}`}).join(" ");return e.jsxs("div",{className:"runs-tab",children:[O.length>0&&Ne&&e.jsxs("div",{className:"run-output-section",children:[e.jsx("div",{className:"run-output-label",children:u("agents.promptSize","Prompt Size")}),e.jsxs("div",{className:"prompt-size-summary",children:[e.jsxs("svg",{className:"prompt-size-sparkline",viewBox:"0 0 100 100",role:"img","aria-label":u("agents.promptSizeChart","Execution prompt size over last 7 runs"),children:[e.jsx("polyline",{className:"prompt-size-sparkline-grid",points:"0,100 100,100"}),e.jsx("polyline",{className:"prompt-size-sparkline-line",points:Ie})]}),e.jsxs("span",{className:"prompt-size-values",children:[Ne.systemChars.toLocaleString()," / ",Ne.execChars.toLocaleString()," / ",Ne.totalChars.toLocaleString()]})]})]}),E&&e.jsxs("div",{className:"run-output-section",children:[e.jsx("div",{className:"run-output-label",children:u("agents.cacheHitRatio","Cache hit ratio")}),e.jsxs("div",{className:"run-context-grid",children:[ae(u("agents.last24h","Last 24h"),E.last24h),ae(u("agents.last7d","Last 7d"),E.last7d),ae(u("agents.allTime","All time"),E.allTime)]})]}),e.jsxs("div",{className:"runs-toolbar runs-toolbar--between",children:[e.jsxs("span",{className:"runs-toolbar-meta",children:[u("agents.runsCount",{count:N.length,defaultValue_one:"{{count}} run",defaultValue_other:"{{count}} runs"}),S&&e.jsxs("span",{className:"run-live-indicator run-live-indicator--with-margin",children:[e.jsx("span",{className:"live-dot"}),u("agents.live","Live")]})]}),e.jsx("div",{className:"run-header-group",children:S&&e.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void V(),"aria-label":u("agents.stopActiveRunFor","Stop active run for {{name}}",{name:s??r}),children:[e.jsx(it,{size:14})," ",u("agents.stopRun","Stop Run")]})})]}),Ae.map((x,j)=>B(x,j,!0)),$e.map((x,j)=>B(x,Ae.length+j,!1))]})}function Fn(t,r){const l=Math.floor((r.getTime()-t.getTime())/1e3);return l<60?`${l}s`:l<3600?`${Math.floor(l/60)}m ${l%60}s`:`${Math.floor(l/3600)}h ${Math.floor(l%3600/60)}m`}function Pn(t){const r=t.title?.trim()||t.description?.trim()||t.id;return r.length>80?`${r.slice(0,77)}...`:r}function Tn({agentId:t,projectId:r,addToast:l}){const{t:o}=ye("app"),[s,m]=a.useState([]),[y,n]=a.useState(!0);return a.useEffect(()=>{let f=!1;return n(!0),Pa(t,r).then(u=>{f||m(u)}).catch(u=>{f||(m([]),l(o("agents.loadTasksFailed","Failed to load assigned tasks: {{error}}",{error:_(u)}),"error"))}).finally(()=>{f||n(!1)}),()=>{f=!0}},[t,r,l]),y?e.jsxs("div",{className:"agent-tasks-empty",children:[e.jsx(G,{size:16,className:"animate-spin"}),e.jsx("p",{children:o("agents.loadingTasks","Loading assigned tasks...")})]}):s.length===0?e.jsxs("div",{className:"agent-tasks-empty",children:[e.jsx(Bs,{size:18}),e.jsx("p",{children:o("agents.noTasksAssigned","No tasks assigned to this agent")})]}):e.jsx("div",{className:"agent-tasks-list",children:s.map(f=>e.jsxs("a",{className:"agent-task-item",href:`/tasks/${f.id}`,children:[e.jsxs("div",{className:"agent-task-row",children:[e.jsx("span",{className:"agent-task-id",children:f.id}),e.jsx("span",{className:`agent-task-column column-${f.column}`,children:{triage:o("board.triage","Planning"),todo:o("board.todo","Todo"),"in-progress":o("board.inProgress","In Progress"),"in-review":o("board.inReview","In Review"),done:o("board.done","Done"),archived:o("board.archived","Archived")}[f.column]??f.column})]}),e.jsx("div",{className:"agent-task-title",title:f.title||f.description||f.id,children:Pn(f)}),e.jsxs("div",{className:"agent-task-status",children:[f.status??"idle"," · ",o("agents.taskUpdated","Updated {{time}}",{time:rt(f.updatedAt,o)})]})]},f.id))})}const pt=[{key:"maxRetries",label:"Max Retries",type:"number",placeholder:"3",hint:"Maximum number of automatic retries on task failure (0–10, default 3)",min:0,max:10},{key:"timeoutMs",label:"Task Timeout (ms)",type:"number",placeholder:"600000",hint:"Maximum time in ms before a task is considered timed out (minimum 60000ms, default 600000ms)",min:6e4,max:864e5},{key:"logLevel",label:"Log Level",type:"select",hint:"Verbosity of agent log output",options:[{value:"debug",label:"Debug"},{value:"info",label:"Info"},{value:"warn",label:"Warning"},{value:"error",label:"Error"}]}];function En(t){const r={};for(const l of pt){const o=t[l.key]?.trim();if(o){if(l.type==="number"){const s=Number(o);if(Number.isNaN(s)||!Number.isFinite(s)){r[l.key]=`"${l.label}" must be a valid number`;continue}l.min!==void 0&&s<l.min&&(r[l.key]=`"${l.label}" must be at least ${l.min.toLocaleString()}`),l.max!==void 0&&s>l.max&&(r[l.key]=`"${l.label}" must be at most ${l.max.toLocaleString()}`)}if(l.type==="select"){const s=l.options?.map(m=>m.value)??[];s.length>0&&!s.includes(o)&&(r[l.key]=`"${l.label}" must be one of: ${s.join(", ")}`)}}}return r}function Ln({agent:t,projectId:r,addToast:l,onSaved:o}){const{t:s}=ye("app"),[m,y]=a.useState(t.soul??""),[n,f]=a.useState(!1),[u,N]=a.useState(!1),[c,g]=a.useState(!1),w=a.useRef(null);a.useEffect(()=>{y(t.soul??""),N(!1),g(!1)},[t.id,t.soul]),a.useEffect(()=>()=>{w.current&&clearTimeout(w.current)},[]);const T=m!==(t.soul??""),D=async()=>{if(m.length>1e4){l(s("agents.soulTooLong","Soul must be at most 10,000 characters"),"error");return}f(!0);try{await Ka(t.id,m,r),l(s("agents.soulSaved","Soul saved"),"success"),N(!0),w.current&&clearTimeout(w.current),w.current=setTimeout(()=>N(!1),3e3),await o()}catch(M){l(s("agents.soulSaveFailed","Failed to save soul: {{error}}",{error:_(M)}),"error")}finally{f(!1)}};return e.jsx("div",{className:"config-tab",children:e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:s("agents.soulTitle","Soul")}),e.jsx("p",{className:"config-description",children:s("agents.soulDescription","Define this agent's personality and identity.")}),e.jsx("div",{className:"config-fields",children:e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-soul",children:s("agents.agentSoulLabel","Agent Soul")}),e.jsx("div",{className:"agent-content-toolbar",children:e.jsxs("div",{className:"agent-content-mode-toggle",children:[e.jsxs("button",{className:`btn btn-sm ${c?"":"btn-primary"}`,onClick:()=>g(!1),disabled:!c,"aria-label":s("common.editMode","Edit mode"),children:[e.jsx(Tt,{size:14}),s("common.edit","Edit")]}),e.jsxs("button",{className:`btn btn-sm ${c?"btn-primary":""}`,onClick:()=>g(!0),disabled:c,"aria-label":s("common.previewMode","Preview mode"),children:[e.jsx(Et,{size:14}),s("common.preview","Preview")]})]})}),c?m.trim()?e.jsx("div",{className:"agent-content-preview markdown-body",children:e.jsx(Lt,{remarkPlugins:[Dt],children:m})}):e.jsx("div",{className:"agent-content-preview agent-content-placeholder",children:s("agents.soulEmptyPreview","No soul defined yet. Switch to Edit mode to define the agent's personality.")}):e.jsx("textarea",{id:"agent-soul",className:"input config-textarea-mono",rows:12,placeholder:s("agents.soulPlaceholder","Describe this agent's personality, tone, and behavioral traits..."),value:m,onChange:M=>{y(M.target.value),N(!1)}}),!c&&e.jsx("span",{className:"config-hint",children:s("agents.soulHint","Defines the agent's character and identity. Max 10,000 characters.")})]})}),!c&&e.jsxs("div",{className:"config-actions",children:[e.jsx("button",{className:"btn btn-task-create",disabled:!T||n,onClick:()=>void D(),children:n?e.jsxs(e.Fragment,{children:[e.jsx(G,{size:16,className:"animate-spin"}),s("common.saving","Saving…")]}):e.jsxs(e.Fragment,{children:[e.jsx(be,{size:16}),s("agents.saveSoul","Save Soul")]})}),!T&&u&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(be,{size:14}),s("agents.soulSaved","Soul saved")]})]})]})})}function Dn({agent:t,projectId:r,addToast:l,onSaved:o}){const{t:s}=ye("app"),[m,y]=a.useState(t.memory??""),[n,f]=a.useState(!1),[u,N]=a.useState(!1),[c,g]=a.useState(!1),[w,T]=a.useState([]),[D,M]=a.useState(!1),[H,I]=a.useState(""),[se,k]=a.useState(""),[v,A]=a.useState(!1),[K,F]=a.useState(!1),[E,Y]=a.useState(!1),[O,U]=a.useState(!1),[C,Q]=a.useState(""),P=a.useRef(null),J=a.useRef(null),b=t.state==="running",S=m!==(t.memory??""),d=a.useMemo(()=>w.find(B=>B.path===H),[w,H]),L=d?{"long-term":s("agents.memoryLayerLongTermDesc","Curated durable decisions, conventions, constraints, and pitfalls for this specific agent."),daily:s("agents.memoryLayerDailyDesc","Raw daily observations and open loops recorded by this agent."),dreams:s("agents.memoryLayerDreamsDesc","Synthesized patterns and emerging themes distilled from this agent's daily memory.")}[d.layer]??d.layer:s("agents.selectMemoryFile","Select a memory file to view or edit."),V=a.useCallback(async B=>{F(!0);try{const ae=await Ea(t.id,B,r);I(ae.path),k(ae.content),A(!1),U(!1)}catch(ae){l(s("agents.memoryFileLoadFailed","Failed to load agent memory file: {{error}}",{error:_(ae)}),"error")}finally{F(!1)}},[t.id,r,l]),xe=a.useCallback(async(B="")=>{M(!0);try{const{files:ae}=await La(t.id,r);if(T(ae),ae.length===0){I(""),k(""),A(!1);return}const Ne=kn(ae,B);await V(Ne)}catch(ae){l(s("agents.memoryFilesLoadFailed","Failed to load memory files: {{error}}",{error:_(ae)}),"error"),T([]),I(""),k(""),A(!1)}finally{M(!1)}},[t.id,r,l,V]);a.useEffect(()=>{y(t.memory??""),N(!1),g(!1),Q(""),U(!1),xe()},[t.id,t.memory,xe]),a.useEffect(()=>()=>{P.current&&clearTimeout(P.current),J.current&&clearTimeout(J.current)},[]);const Ae=async()=>{if(m.length>5e4){l(s("agents.memoryTooLong","Memory must be at most 50,000 characters"),"error");return}f(!0);try{await Za(t.id,m,r),l(s("agents.memorySaved","Memory saved"),"success"),N(!0),P.current&&clearTimeout(P.current),P.current=setTimeout(()=>N(!1),3e3),await o()}catch(B){l(s("agents.memorySaveFailed","Failed to save memory: {{error}}",{error:_(B)}),"error")}finally{f(!1)}},$e=async B=>{if(!(!B||B===H)){if(v){Q(s("agents.saveBeforeSwitch","Save the current file before switching to another file."));return}Q(""),await V(B)}},ge=async()=>{if(H){Y(!0);try{await Xa(t.id,H,se,r),A(!1),U(!0),J.current&&clearTimeout(J.current),J.current=setTimeout(()=>U(!1),3e3),Q(""),await xe(H),l(s("agents.memoryFileSaved","Agent memory file saved"),"success"),await o()}catch(B){l(s("agents.memoryFileSaveFailed","Failed to save agent memory file: {{error}}",{error:_(B)}),"error")}finally{Y(!1)}}};return e.jsx("div",{className:"config-tab",children:e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:s("agents.memoryTitle","Agent Memory")}),e.jsx("p",{className:"config-description",children:s("agents.memoryDescription","Store context that belongs to this agent only. Workspace memory, daily notes, dreams, and qmd search live in project settings under Project Memory.")}),b&&e.jsx("p",{className:"config-hint config-hint--block-spacing",children:s("agents.memoryReadOnly","Read-only while this agent is running.")}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-memory",children:s("agents.inlineMemoryLabel","Inline Memory")}),e.jsx("span",{className:"config-hint config-hint--block",children:s("agents.inlineMemoryHint","Short-form memory stored directly on the agent record and injected into prompts.")}),e.jsx("div",{className:"agent-content-toolbar",children:e.jsxs("div",{className:"agent-content-mode-toggle",children:[!b&&e.jsxs("button",{className:`btn btn-sm ${c?"":"btn-primary"}`,onClick:()=>g(!1),disabled:!c,"aria-label":s("agents.inlineMemoryEditMode","Inline memory edit mode"),children:[e.jsx(Tt,{size:14}),s("common.edit","Edit")]}),e.jsxs("button",{className:`btn btn-sm ${c?"btn-primary":""}`,onClick:()=>g(!0),disabled:c,"aria-label":s("agents.inlineMemoryPreviewMode","Inline memory preview mode"),children:[e.jsx(Et,{size:14}),s("common.preview","Preview")]})]})}),c?m.trim()?e.jsx("div",{className:"agent-content-preview markdown-body",children:e.jsx(Lt,{remarkPlugins:[Dt],children:m})}):e.jsx("div",{className:"agent-content-preview agent-content-placeholder",children:s("agents.memoryEmptyPreview","No agent memory defined yet. Switch to Edit mode to add memory content.")}):e.jsx("textarea",{id:"agent-memory","aria-label":s("agents.memoryTitle","Agent Memory"),className:"input config-textarea-mono",rows:10,placeholder:s("agents.memoryPlaceholder","Durable preferences, operating habits, and context this agent should carry across tasks..."),value:m,readOnly:b,onChange:B=>{y(B.target.value),N(!1)}}),!c&&e.jsx("span",{className:"config-hint",children:s("agents.inlineMemoryFieldHint","This is the inline memory field on the agent JSON record. Max 50,000 characters.")}),!c&&e.jsxs("div",{className:"config-actions",children:[e.jsx("button",{className:"btn btn-task-create",disabled:!S||n||b,onClick:()=>void Ae(),children:n?e.jsxs(e.Fragment,{children:[e.jsx(G,{size:16,className:"animate-spin"}),s("common.saving","Saving…")]}):e.jsxs(e.Fragment,{children:[e.jsx(be,{size:16}),s("agents.saveMemory","Save Memory")]})}),!S&&u&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(be,{size:14}),s("agents.memorySaved","Memory saved")]})]})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-memory-file-select",children:s("agents.memoryFilesLabel","Memory Files")}),e.jsxs("span",{className:"config-hint config-hint--block",children:[s("agents.memoryFilesHint","Full OpenClaw memory files at")," ",e.jsxs("code",{children:["agent/",t.name||t.id,"/memory/"]})," ",s("agents.memoryFilesHintSuffix","(MEMORY.md, DREAMS.md, and daily notes).")]}),e.jsx("select",{id:"agent-memory-file-select",className:"select",value:H,disabled:D||K||E||w.length===0,onChange:B=>{$e(B.target.value)},children:w.length===0?e.jsx("option",{value:"",children:s("agents.noMemoryFiles","No memory files found")}):w.map(B=>{const ae={"long-term":s("agents.memoryLayerLongTerm","Long-term"),daily:s("agents.memoryLayerDaily","Daily"),dreams:s("agents.memoryLayerDreams","Dreams")}[B.layer]??B.layer;return e.jsxs("option",{value:B.path,children:[ae," • ",B.label]},B.path)})}),D&&e.jsxs("span",{className:"config-hint config-hint--inline-loader",children:[e.jsx(G,{size:14,className:"animate-spin"}),s("agents.loadingMemoryFiles","Loading memory files…")]}),d&&e.jsxs("div",{className:"config-hint config-hint--top-spacing",children:[e.jsx("strong",{children:{"long-term":s("agents.memoryLayerLongTerm","Long-term"),daily:s("agents.memoryLayerDaily","Daily"),dreams:s("agents.memoryLayerDreams","Dreams")}[d.layer]??d.layer})," · ",L,e.jsx("br",{}),s("agents.memoryFileMeta","{{size}} bytes · updated {{date}}",{size:d.size.toLocaleString(),date:rt(d.updatedAt,s)})]}),e.jsx("div",{className:"agent-memory-file-editor config-textarea-top-spacing",children:e.jsx(Da,{content:se,onChange:B=>{k(B),A(!0),U(!1),Q("")},readOnly:b||!H||K,filePath:H||"MEMORY.md",forceToolbarActionsVisible:!0})}),K&&e.jsxs("span",{className:"config-hint config-hint--inline-loader",children:[e.jsx(G,{size:14,className:"animate-spin"}),s("agents.loadingFileContent","Loading file content…")]}),C&&e.jsx("span",{className:"config-hint config-hint--top-spacing config-hint--block",children:C}),e.jsxs("div",{className:"config-actions",children:[e.jsx("button",{className:"btn btn-task-create",disabled:!v||E||!H||b,onClick:()=>void ge(),children:E?e.jsxs(e.Fragment,{children:[e.jsx(G,{size:16,className:"animate-spin"}),s("agents.savingFile","Saving file…")]}):e.jsxs(e.Fragment,{children:[e.jsx(be,{size:16}),s("agents.saveMemoryFile","Save Memory File")]})}),!v&&O&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(be,{size:14}),s("agents.memoryFileSaved","Memory file saved")]})]})]})]})]})})}function zn({agent:t,projectId:r,addToast:l,onSaved:o}){const{t:s}=ye("app"),[m,y]=a.useState(t.instructionsText??""),[n,f]=a.useState(t.instructionsPath??""),[u,N]=a.useState(!1),[c,g]=a.useState(""),[w,T]=a.useState(!1),[D,M]=a.useState(!1),[H,I]=a.useState(!1),[se,k]=a.useState(!1),[v,A]=a.useState(!1),[K,F]=a.useState(!1),E=a.useRef(null),Y=a.useRef(null);a.useEffect(()=>{const P=n.trim();if(!P){g(""),M(!1);return}T(!0),Js("project",P).then(J=>{g(J.content),M(!1)}).catch(J=>{const b=_(J);b.includes("ENOENT")||b.includes("Not found")||b.includes("not found")?(g(""),M(!1)):(l(`Failed to load instructions file: ${b}`,"error"),g(""))}).finally(()=>{T(!1)})},[n,l]),a.useEffect(()=>{y(t.instructionsText??""),f(t.instructionsPath??""),A(!1),F(!1),N(!1)},[t.id,t.instructionsText,t.instructionsPath]),a.useEffect(()=>()=>{E.current&&clearTimeout(E.current),Y.current&&clearTimeout(Y.current)},[]);const O=(()=>{const P=m??"",J=t.instructionsText??"",b=n?.trim()??"",S=t.instructionsPath?.trim()??"";return P!==J||b!==S})(),U=async()=>{I(!0);try{await Ya(t.id,{instructionsText:m||void 0,instructionsPath:n.trim()||void 0},r),l(s("agents.instructionsSaved","Instructions saved"),"success"),A(!0),E.current&&clearTimeout(E.current),E.current=setTimeout(()=>A(!1),3e3),await o()}catch(P){l(s("agents.instructionsSaveFailed","Failed to save instructions: {{error}}",{error:_(P)}),"error")}finally{I(!1)}},C=async()=>{const P=n.trim();if(!P){l(s("agents.noInstructionsPath","No instructions file path set"),"error");return}k(!0);try{await qs("project",P,c),l(s("agents.instructionsFileSaved","Instructions file saved"),"success"),M(!1),F(!0),Y.current&&clearTimeout(Y.current),Y.current=setTimeout(()=>F(!1),3e3),await o()}catch(J){l(s("agents.instructionsFileSaveFailed","Failed to save instructions file: {{error}}",{error:_(J)}),"error")}finally{k(!1)}},Q=!!n.trim();return e.jsxs("div",{className:"config-tab",children:[e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:s("agents.instructionsTitle","Custom Instructions")}),e.jsx("p",{className:"config-description",children:s("agents.instructionsDescription","Append custom instructions to this agent's system prompt at execution time. Use this to customize behavior, coding style, or project conventions without modifying built-in prompts.")}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"instructions-text",children:s("agents.inlineInstructions","Inline Instructions")}),e.jsx("div",{className:"agent-content-toolbar",children:e.jsxs("div",{className:"agent-content-mode-toggle",children:[!m.trim()&&!u&&e.jsx("button",{type:"button",className:"btn btn-sm","data-testid":"instructions-insert-template",onClick:()=>{y(nn),A(!1)},children:s("agents.insertInstructionsTemplate","Insert template")}),e.jsxs("button",{className:`btn btn-sm ${u?"":"btn-primary"}`,onClick:()=>N(!1),disabled:!u,"aria-label":s("common.editMode","Edit mode"),"data-testid":"instructions-edit-toggle",children:[e.jsx(Tt,{size:14}),s("common.edit","Edit")]}),e.jsxs("button",{className:`btn btn-sm ${u?"btn-primary":""}`,onClick:()=>N(!0),disabled:u,"aria-label":s("common.previewMode","Preview mode"),"data-testid":"instructions-preview-toggle",children:[e.jsx(Et,{size:14}),s("common.preview","Preview")]})]})}),u?m.trim()?e.jsx("div",{className:"agent-content-preview markdown-body",children:e.jsx(Lt,{remarkPlugins:[Dt],children:m})}):e.jsx("div",{className:"agent-content-preview agent-content-placeholder",children:s("agents.instructionsEmptyPreview","No inline instructions defined yet. Switch to Edit mode to add instructions.")}):e.jsx("textarea",{id:"instructions-text",className:"input",rows:10,placeholder:s("agents.instructionsPlaceholder","Enter custom instructions to append to this agent's system prompt..."),value:m,onChange:P=>{y(P.target.value),A(!1)}}),!u&&e.jsx("span",{className:"config-hint",children:s("agents.instructionsHint","Markdown formatting supported. Max 50,000 characters.")})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"instructions-path",children:s("agents.instructionsPathLabel","Instructions File Path")}),e.jsx("input",{id:"instructions-path",type:"text",className:"input",placeholder:s("agents.instructionsPathPlaceholder","e.g., .fusion/agents/my-agent-instructions.md"),value:n,onChange:P=>{f(P.target.value),A(!1)}}),e.jsx("span",{className:"config-hint",children:s("agents.instructionsPathHint","Path to a .md file (relative to project root). Contents are read and appended at execution time.")})]})]}),!u&&e.jsxs("div",{className:"config-actions",children:[e.jsx("button",{className:"btn btn-task-create",disabled:!O||H,onClick:()=>void U(),children:H?e.jsxs(e.Fragment,{children:[e.jsx(G,{size:16,className:"animate-spin"}),s("common.saving","Saving…")]}):e.jsxs(e.Fragment,{children:[e.jsx(be,{size:16}),s("agents.saveInstructions","Save Instructions")]})}),!O&&v&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(be,{size:14}),s("agents.instructionsSaved","Instructions saved")]})]})]}),Q&&e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:s("agents.instructionsFileEditorTitle","Instructions File Editor")}),e.jsx("p",{className:"config-description",children:s("agents.instructionsFileEditorDesc","Edit the instructions file directly. Changes are saved separately from the path configuration.")}),e.jsx("div",{className:"config-fields",children:e.jsxs("div",{className:"config-field",children:[e.jsxs("div",{className:"config-inline-header",children:[e.jsx("label",{htmlFor:"instructions-file-content",children:s("agents.fileContentLabel","File Content")}),w&&e.jsxs("span",{className:"config-hint config-hint--inline-tight",children:[e.jsx(G,{size:12,className:"animate-spin"}),s("common.loading","Loading...")]}),D&&!w&&e.jsx("span",{className:"config-hint config-hint--warning",children:s("common.unsavedChanges","Unsaved changes")})]}),e.jsx("textarea",{id:"instructions-file-content",className:"input config-textarea-mono",rows:20,placeholder:s("agents.fileContentPlaceholder","File content will appear here when loaded..."),value:c,readOnly:w,onChange:P=>{g(P.target.value),M(!0),F(!1)}}),e.jsx("span",{className:"config-hint",children:s("agents.fileContentHint","Edit the markdown file content directly. Save separately using the button below.")})]})}),e.jsxs("div",{className:"config-actions",children:[e.jsx("button",{className:"btn btn-task-create",disabled:!D||se,onClick:()=>void C(),children:se?e.jsxs(e.Fragment,{children:[e.jsx(G,{size:16,className:"animate-spin"}),s("common.saving","Saving…")]}):e.jsxs(e.Fragment,{children:[e.jsx(be,{size:16}),s("agents.saveFile","Save File")]})}),!D&&K&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(be,{size:14}),s("agents.fileSaved","File saved")]})]})]})]})}function ws(t){const r=t??{},l={};return r.heartbeatIntervalMs!==void 0&&r.heartbeatIntervalMs!==null&&(l.heartbeatIntervalMs=String(Number(r.heartbeatIntervalMs)/1e3)),r.heartbeatTimeoutMs!==void 0&&r.heartbeatTimeoutMs!==null&&(l.heartbeatTimeoutMs=String(Number(r.heartbeatTimeoutMs)/1e3)),r.maxConcurrentRuns!==void 0&&r.maxConcurrentRuns!==null&&(l.maxConcurrentRuns=String(r.maxConcurrentRuns)),(r.messageResponseMode==="immediate"||r.messageResponseMode==="on-heartbeat")&&(l.messageResponseMode=r.messageResponseMode),r.autoClaimCandidatesInPrompt!==void 0&&r.autoClaimCandidatesInPrompt!==null&&(l.autoClaimCandidatesInPrompt=String(r.autoClaimCandidatesInPrompt)),l}function Gt(t){return t?.autoClaimRelevantTasks!==!1}function Jt(t){return t?.engineerBacklogAutoClaim===!0}function Ms(t){const r=t?.assignmentPolicy;return r==="explicit-only"||r==="none"?r:"auto"}function qt(t){return t?.runMissedHeartbeatOnStartup===!0}function Kt(t){return t?.allowParallelExecution!==!1}function Yt(t){return t?.skipHeartbeatWhenIdle===!0}function Zt(t){const r=t?.heartbeatScopeDiscipline;return r==="strict"||r==="lite"||r==="off"?r:""}function As(t){const r=t?.heartbeatPromptTemplate;return r==="default"||r==="compact"?r:""}function Fs(t){const r=(t??{}).budgetConfig,l={};return r&&(r.tokenBudget!==void 0&&r.tokenBudget!==null&&(l.tokenBudget=String(r.tokenBudget)),r.usageThreshold!==void 0&&r.usageThreshold!==null&&(l.usageThreshold=String(Number(r.usageThreshold)*100)),r.budgetPeriod!==void 0&&r.budgetPeriod!==null&&(l.budgetPeriod=String(r.budgetPeriod)),r.resetDay!==void 0&&r.resetDay!==null&&(l.resetDay=String(r.resetDay))),l}function Hn({agent:t,projectId:r,addToast:l,onSaved:o}){const{t:s}=ye("app"),[m,y]=a.useState(!1),[n,f]=a.useState(!1),[u,N]=a.useState(!1),[c,g]=a.useState(!1),[w,T]=a.useState(!1),[D,M]=a.useState(""),[H,I]=a.useState(!1),[se,k]=a.useState(null),[v,A]=a.useState(!1),K=a.useRef(null),F=t.heartbeatProcedurePath?.trim(),E=`.fusion/agents/${t.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t.id.toLowerCase().replace(/[^a-z0-9]+/g,"-")||"agent"}-${t.id.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"agent"}/HEARTBEAT.md`,Y=`.fusion/agents/${t.id}/HEARTBEAT.md`,O=t.id.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"agent",U=!!(F&&(F===E||F===Y||new RegExp(`^\\.fusion/agents/[^/]+-${O}/HEARTBEAT\\.md$`).test(F))),C=!!F,Q=a.useCallback(async S=>{N(!0),k(null);try{const d=await Js("project",S,r);M(d.content),I(!1)}catch(d){const L=_(d);k(L),l(s("agents.heartbeatFileLoadFailed","Failed to load heartbeat procedure file: {{error}}",{error:L}),"error")}finally{N(!1)}},[l,r]);a.useEffect(()=>{f(!1),T(!1),M(""),I(!1),k(null),N(!1),g(!1),A(!1)},[t.id,F]),a.useEffect(()=>()=>{K.current&&clearTimeout(K.current)},[]);const P=async()=>{F&&(f(!0),await Q(F))},J=async()=>{if(F){g(!0);try{await qs("project",F,D,r),I(!1),A(!0),l(s("agents.heartbeatFileSaved","Heartbeat procedure file saved"),"success"),K.current&&clearTimeout(K.current),K.current=setTimeout(()=>A(!1),3e3),await o()}catch(S){l(s("agents.heartbeatFileSaveFailed","Failed to save heartbeat procedure file: {{error}}",{error:_(S)}),"error")}finally{g(!1)}}},b=async()=>{y(!0);try{const S=await tn(t.id,r);l(S.procedureFileSeeded?s("agents.heartbeatProcedureFileReady","Heartbeat procedure file ready at {{path}}",{path:S.heartbeatProcedurePath}):s("agents.heartbeatProcedurePathSet","Heartbeat procedure path set to {{path}}",{path:S.heartbeatProcedurePath}),"success"),await o()}catch(S){l(s("agents.heartbeatUpgradeFailed","Failed to upgrade heartbeat procedure: {{error}}",{error:_(S)}),"error")}finally{y(!1)}};return e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:s("agents.heartbeatProcedureTitle","Heartbeat Procedure")}),e.jsxs("p",{className:"config-description",children:[s("agents.heartbeatProcedureDesc","The per-tick procedure this agent runs every wake. Defaults to a per-agent markdown file (for example")," ",e.jsx("code",{children:".fusion/agents/ceo-agent2736/HEARTBEAT.md"}),s("agents.heartbeatProcedureDescSuffix",") that you can edit. Legacy id-only default paths remain valid. Resets on every tick — no need to restart the agent after editing.")]}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsxs("span",{className:"config-hint",children:[s("agents.currentPath","Current path:")," ",e.jsx("code",{children:F||s("agents.noneUsingBuiltIn","(none — using built-in default)")})]}),C&&e.jsx("div",{className:"heartbeat-procedure-actions",children:e.jsx("button",{className:"btn btn-sm",onClick:()=>void P(),disabled:u,children:u?e.jsxs(e.Fragment,{children:[e.jsx(G,{size:16,className:"animate-spin"}),s("agents.loadingFile","Loading file…")]}):e.jsxs(e.Fragment,{children:[e.jsx(xt,{size:16}),s("agents.viewHeartbeatMarkdown","View Heartbeat Markdown")]})})})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("button",{className:"btn",disabled:m||U,onClick:()=>void b(),"aria-label":s("agents.upgradeToDefaultAriaLabel","Upgrade agent to default heartbeat procedure file"),children:m?e.jsxs(e.Fragment,{children:[e.jsx(G,{size:16,className:"animate-spin"}),s("agents.upgrading","Upgrading…")]}):U?e.jsxs(e.Fragment,{children:[e.jsx(be,{size:16}),s("agents.alreadyOnDefault","Already on default")]}):s("agents.upgradeToDefault","Upgrade to Default Heartbeat Procedure")}),e.jsxs("span",{className:"config-hint",children:[s("agents.upgradeHint","Sets")," ",e.jsx("code",{children:"heartbeatProcedurePath"})," ",s("agents.upgradeHintTo","to")," ",e.jsx("code",{children:E})," ",s("agents.upgradeHintSuffix","and seeds the file from the built-in template if it doesn't exist. Each agent gets its own per-agent file, so edits stay scoped to this agent. Operator edits to the file are preserved.")]})]})]}),n&&C&&F&&e.jsxs("div",{className:"config-fields heartbeat-procedure-viewer",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"heartbeat-procedure-file-content",children:s("agents.heartbeatProcedureFileLabel","Heartbeat Procedure File")}),e.jsxs("div",{className:"agent-content-toolbar",children:[e.jsxs("div",{className:"agent-content-mode-toggle",children:[e.jsxs("button",{className:`btn btn-sm ${w?"":"btn-primary"}`,onClick:()=>T(!1),disabled:!w,"aria-label":s("agents.heartbeatFileEditMode","Heartbeat file edit mode"),children:[e.jsx(Tt,{size:14}),s("common.edit","Edit")]}),e.jsxs("button",{className:`btn btn-sm ${w?"btn-primary":""}`,onClick:()=>T(!0),disabled:w,"aria-label":s("agents.heartbeatFilePreviewMode","Heartbeat file preview mode"),children:[e.jsx(Et,{size:14}),s("common.preview","Preview")]})]}),u&&e.jsxs("span",{className:"config-hint heartbeat-procedure-status",children:[e.jsx(G,{size:12,className:"animate-spin"}),s("common.loading","Loading...")]}),H&&!u&&e.jsx("span",{className:"config-hint heartbeat-procedure-status heartbeat-procedure-status--warning",children:s("common.unsavedChanges","Unsaved changes")})]}),w?D.trim()?e.jsx("div",{className:"agent-content-preview markdown-body",children:e.jsx(Lt,{remarkPlugins:[Dt],children:D})}):e.jsx("div",{className:"agent-content-preview agent-content-placeholder",children:s("agents.heartbeatFileEmptyPreview","No heartbeat procedure markdown content yet.")}):e.jsx("textarea",{id:"heartbeat-procedure-file-content",className:"input",rows:16,value:D,readOnly:u,placeholder:s("agents.heartbeatFilePlaceholder","Heartbeat procedure markdown file content will appear here..."),onChange:S=>{M(S.target.value),I(!0),A(!1)}}),se&&e.jsx("span",{className:"config-error",children:s("agents.fileLoadError","Failed to load file: {{error}}",{error:se})}),e.jsxs("span",{className:"config-hint",children:[s("agents.heartbeatFileEditorHint","This editor writes directly to")," ",e.jsx("code",{children:F}),"."]})]}),!w&&e.jsxs("div",{className:"config-actions",children:[e.jsx("button",{className:"btn btn-task-create",disabled:!H||c||u,onClick:()=>void J(),children:c?e.jsxs(e.Fragment,{children:[e.jsx(G,{size:16,className:"animate-spin"}),s("common.saving","Saving…")]}):e.jsxs(e.Fragment,{children:[e.jsx(be,{size:16}),s("agents.saveHeartbeatFile","Save Heartbeat File")]})}),!H&&v&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(be,{size:14}),s("agents.fileSaved","File saved")]})]})]})]})}function In({agent:t,projectId:r,addToast:l,onSaved:o,onHasChangesChange:s,onDelete:m,onAgentDraftApplied:y}){const{t:n}=ye("app"),[f,u]=a.useState(t.name),[N,c]=a.useState(t.role),[g,w]=a.useState(t.title??""),[T,D]=a.useState(t.icon??""),[M,H]=a.useState(t.reportsTo??""),[I,se]=a.useState([]),[k,v]=a.useState(!1),[A,K]=a.useState(!1),[F,E]=a.useState(!1),Y=a.useRef(null),[O,U]=a.useState(()=>{const i={};for(const h of pt){const R=t.metadata[h.key];R!=null&&(i[h.key]=String(R))}return i.thinkingLevel=typeof t.runtimeConfig?.thinkingLevel=="string"?t.runtimeConfig.thinkingLevel:"off",i}),[C,Q]=a.useState(()=>ws(t.runtimeConfig)),[P,J]=a.useState(()=>Ut(t)),[b,S]=a.useState(()=>Gt(t.runtimeConfig)),[d,L]=a.useState(()=>Jt(t.runtimeConfig)),[V,xe]=a.useState(()=>Ms(t.runtimeConfig)),[Ae,$e]=a.useState(()=>qt(t.runtimeConfig)),[ge,B]=a.useState(()=>Kt(t.runtimeConfig)),[ae,Ne]=a.useState(()=>Yt(t.runtimeConfig)),[Ce,Je]=a.useState(()=>Zt(t.runtimeConfig)),[Ie,x]=a.useState(()=>As(t.runtimeConfig)),[j,re]=a.useState(()=>Fs(t.runtimeConfig)),[ne,et]=a.useState(t.bundleConfig?.mode??""),[Oe,Fe]=a.useState(t.bundleConfig?.entryFile??"AGENTS.md"),[oe,Ee]=a.useState(t.bundleConfig?.externalPath??""),[_e,qe]=a.useState(t.bundleConfig?.files??[]),[X,lt]=a.useState(Array.isArray(t.metadata?.skills)?t.metadata.skills:[]),{favoriteProviders:vt,favoriteModels:Se,toggleFavoriteProvider:tt,toggleFavoriteModel:ot}=za(),[ct,zt]=a.useState([]),[dt,Be]=a.useState(!1),[Pe,ut]=a.useState([]),[jt,Ke]=a.useState(!1),st=(()=>{const i=t.runtimeConfig??{};return i.modelProvider&&i.modelId?`${i.modelProvider}/${i.modelId}`:typeof i.model=="string"&&i.model.includes("/")?i.model:""})(),Le=typeof t.runtimeConfig?.runtimeHint=="string"?t.runtimeConfig.runtimeHint:"",[fe,ke]=a.useState(Le?"runtime":"model"),[Re,Ye]=a.useState(st),[De,p]=a.useState(Le),[z,W]=a.useState(t.permissionPolicy),[$,ie]=a.useState(t.permissions??{}),[ce,pe]=a.useState(void 0),we=M.trim(),Te=a.useMemo(()=>I.filter(i=>i.id!==t.id),[I,t.id]),Ze=!!we&&!Te.some(i=>i.id===we),at=a.useMemo(()=>({name:f,role:N,title:g||void 0,instructionsText:t.instructionsText,soul:t.soul,memory:t.memory,reportsTo:M||void 0,skills:X,model:Re||void 0,runtimeHint:fe==="runtime"&&De||void 0,thinkingLevel:O.thinkingLevel??void 0,maxTurns:O.maxTurns?Number(O.maxTurns):void 0,heartbeatIntervalMs:C.heartbeatIntervalMs?Number(C.heartbeatIntervalMs)*1e3:void 0,heartbeatTimeoutMs:C.heartbeatTimeoutMs?Number(C.heartbeatTimeoutMs)*1e3:void 0,maxConcurrentRuns:C.maxConcurrentRuns?Number(C.maxConcurrentRuns):void 0,messageResponseMode:C.messageResponseMode}),[t.instructionsText,t.memory,t.soul,O.maxTurns,O.thinkingLevel,C.heartbeatIntervalMs,C.heartbeatTimeoutMs,C.maxConcurrentRuns,C.messageResponseMode,Re,f,M,N,fe,De,X,g]),mt=a.useCallback(i=>{u(i.name),c(i.role),w(i.title??""),D(i.icon??""),H(i.reportsTo??""),i.skills&&lt(i.skills),i.thinkingLevel&&U(R=>({...R,thinkingLevel:i.thinkingLevel})),i.maxTurns!==void 0&&U(R=>({...R,maxTurns:String(i.maxTurns)})),i.runtimeHint!==void 0?(ke("runtime"),p(i.runtimeHint??""),i.runtimeHint&&Ye("")):i.model!==void 0&&(ke("model"),Ye(i.model??""),p(""));const h=Object.fromEntries(Object.entries({name:i.name,role:i.role,title:i.title,icon:i.icon,reportsTo:i.reportsTo,instructionsText:i.instructionsText,soul:i.soul,memory:i.memory}).filter(([,R])=>R!==void 0));y?.(h),E(!1),l(n("agents.interviewDraftApplied","Interview draft applied. Review and save when ready."),"success")},[l,y]);a.useEffect(()=>{W(t.permissionPolicy)},[t.permissionPolicy]),a.useEffect(()=>{ie(t.permissions??{})},[t.permissions]),a.useEffect(()=>{Ha(r).then(i=>pe(i.project?.defaultAgentPermissionPolicy)).catch(()=>pe(void 0))},[r]);const Xe=async i=>{W(i);try{await Vt(t.id,{permissionPolicy:i},r),await o(),l(n("agents.permissionPolicyUpdated","Permission policy updated"),"success")}catch(h){l(n("agents.permissionPolicyFailed","Failed to update permission policy: {{error}}",{error:_(h)}),"error")}},ue=a.useMemo(()=>new Set(bn[N]??[]),[N]),Ue=a.useMemo(()=>new Set(ys.filter(i=>$[i]===!0)),[$]),Ht=async(i,h)=>{const R={...$};h?R[i]=!0:delete R[i],ie(R);try{await Vt(t.id,{permissions:R},r),await o(),l(n("agents.capabilityPermissionsUpdated","Capability grants updated"),"success")}catch(ee){ie(t.permissions??{}),l(n("agents.capabilityPermissionsFailed","Failed to update capability grants: {{error}}",{error:_(ee)}),"error")}};a.useEffect(()=>{let i=!1;return v(!0),Mt(void 0,r).then(h=>{i||se(h)}).catch(()=>{i||se([])}).finally(()=>{i||v(!1)}),()=>{i=!0}},[r]),a.useEffect(()=>{Be(!0),Ia().then(i=>{zt(i.models)}).catch(()=>{}).finally(()=>Be(!1))},[]),a.useEffect(()=>{Ke(!0),Vs(r).then(ut).catch(()=>ut([])).finally(()=>Ke(!1))},[r]);const[Ve,It]=a.useState(null),[is,rs]=a.useState(!1);a.useEffect(()=>{Qt(t.id,r).then(It).catch(()=>It(null))},[t.id,r]);const Ys=async()=>{rs(!0);try{await Qa(t.id,r),l(n("agents.budgetResetSuccess","Budget usage reset successfully"),"success");const i=await Qt(t.id,r);It(i)}catch(i){l(n("agents.budgetResetFailed","Failed to reset budget: {{error}}",{error:_(i)}),"error")}finally{rs(!1)}},[We,ls]=a.useState(!1),[q,Qe]=a.useState({}),[Zs,nt]=a.useState(!1),[Ot,yt]=a.useState(null),os=t.state==="idle"||t.state==="paused",gt=a.useRef(null),cs=a.useRef(null),ds=a.useRef(null),Nt=a.useRef(0);a.useEffect(()=>()=>{gt.current&&clearTimeout(gt.current)},[]);const Me=(()=>{if(f!==t.name||N!==t.role||g!==(t.title??"")||T!==(t.icon??"")||M!==(t.reportsTo??"")||ne!==(t.bundleConfig?.mode??"")||Oe!==(t.bundleConfig?.entryFile??"AGENTS.md")||oe!==(t.bundleConfig?.externalPath??"")||JSON.stringify(_e)!==JSON.stringify(t.bundleConfig?.files??[]))return!0;for(const te of pt){const ve=O[te.key]?.trim()??"",je=t.metadata[te.key]!==void 0&&t.metadata[te.key]!==null?String(t.metadata[te.key]):"";if(ve!==je)return!0}const i=t.runtimeConfig??{};if(P!==Ut(t)||b!==Gt(t.runtimeConfig)||d!==Jt(t.runtimeConfig)||V!==Ms(t.runtimeConfig)||Ae!==qt(t.runtimeConfig)||ge!==Kt(t.runtimeConfig)||ae!==Yt(t.runtimeConfig)||Ce!==Zt(t.runtimeConfig)||Ie!==As(t.runtimeConfig))return!0;for(const te of["heartbeatIntervalMs","heartbeatTimeoutMs","maxConcurrentRuns","messageResponseMode","autoClaimCandidatesInPrompt"]){const ve=C[te]?.trim()??"";let je=i[te]!==void 0&&i[te]!==null?String(i[te]):"";if((te==="heartbeatIntervalMs"||te==="heartbeatTimeoutMs")&&je&&(je=String(Number(je)/1e3)),ve!==je)return!0}const h=i.budgetConfig;for(const te of["tokenBudget","budgetPeriod","resetDay"]){const ve=j[te]?.trim()??"",je=h?.[te]!==void 0&&h?.[te]!==null?String(h[te]):"";if(ve!==je)return!0}const R=j.usageThreshold?.trim()??"",ee=h?.usageThreshold!==void 0&&h?.usageThreshold!==null?String(Number(h.usageThreshold)*100):"";if(R!==ee)return!0;const he=Array.isArray(t.metadata?.skills)?t.metadata.skills:[];return JSON.stringify(X)!==JSON.stringify(he)||fe!==(Le?"runtime":"model")||Re!==st||De!==Le||(O.thinkingLevel||"off")!==(typeof i.thinkingLevel=="string"?i.thinkingLevel:"off")})(),us=a.useRef(null);a.useEffect(()=>{s&&us.current!==Me&&(us.current=Me,s(Me))},[Me,s]),a.useEffect(()=>()=>{s?.(!1)},[s]),a.useEffect(()=>{const i={id:t.id,updatedAt:t.updatedAt},h=cs.current;(!h||h.id!==i.id||h.updatedAt!==i.updatedAt)&&(Me||(cs.current=i,Q(ws(t.runtimeConfig)),J(Ut(t)),S(Gt(t.runtimeConfig)),L(Jt(t.runtimeConfig)),$e(qt(t.runtimeConfig)),B(Kt(t.runtimeConfig)),Ne(Yt(t.runtimeConfig)),Je(Zt(t.runtimeConfig)),re(Fs(t.runtimeConfig)),U(ee=>({...ee,thinkingLevel:typeof t.runtimeConfig?.thinkingLevel=="string"?t.runtimeConfig.thinkingLevel:"off"})),Ye(st),p(Le),ke(Le?"runtime":"model")))},[t,Me,st,Le]);const ms=(i,h)=>{U(R=>({...R,[i]:h})),nt(!1),q[i]&&Qe(R=>{const ee={...R};return delete ee[i],ee})},St=(i,h)=>{Q(R=>({...R,[i]:h})),nt(!1),q[i]&&Qe(R=>{const ee={...R};return delete ee[i],ee})},Xs=i=>{J(i),nt(!1)},kt=(i,h)=>{re(R=>({...R,[i]:h})),nt(!1),q[i]&&Qe(R=>{const ee={...R};return delete ee[i],ee})},ze=a.useMemo(()=>{const i=En(O);for(const[Z,Ge]of Object.entries({heartbeatIntervalMs:{label:"Heartbeat Interval",min:1},heartbeatTimeoutMs:{label:"Heartbeat Timeout",min:5},maxConcurrentRuns:{label:"Max Concurrent Runs",min:1}})){const me=C[Z]?.trim();if(!me)continue;const He=Number(me);Number.isNaN(He)||!Number.isFinite(He)?i[Z]=`"${Ge.label}" must be a valid number`:He<Ge.min&&(i[Z]=`"${Ge.label}" must be at least ${Ge.min.toLocaleString()}`)}const h=C.autoClaimCandidatesInPrompt?.trim();if(h){const Z=Number(h);(!Number.isInteger(Z)||Z<0||Z>10)&&(i.autoClaimCandidatesInPrompt='"Auto-claim candidates in prompt" must be an integer between 0 and 10')}const R=C.messageResponseMode?.trim();R&&!["immediate","on-heartbeat"].includes(R)&&(i.messageResponseMode='"Message Response Mode" must be either immediate or on-heartbeat');const ee=j.tokenBudget?.trim();if(ee){const Z=Number(ee);Number.isNaN(Z)||!Number.isFinite(Z)?i.tokenBudget='"Token Budget" must be a valid number':Z<=0&&(i.tokenBudget='"Token Budget" must be greater than 0')}const he=j.usageThreshold?.trim();if(he){const Z=Number(he);Number.isNaN(Z)||!Number.isFinite(Z)?i.usageThreshold='"Usage Threshold" must be a valid number':(Z<1||Z>100)&&(i.usageThreshold='"Usage Threshold" must be between 1 and 100')}const te=j.budgetPeriod?.trim();te&&!["daily","weekly","monthly","lifetime"].includes(te)&&(i.budgetPeriod='"Budget Period" must be one of: daily, weekly, monthly, lifetime');const ve=j.resetDay?.trim(),je=te||"lifetime";if(ve){const Z=Number(ve);Number.isNaN(Z)||!Number.isFinite(Z)?i.resetDay='"Reset Day" must be a valid number':je==="weekly"?(Z<0||Z>6||!Number.isInteger(Z))&&(i.resetDay='"Reset Day" must be between 0 (Sunday) and 6 (Saturday) for weekly period'):je==="monthly"&&(Z<1||Z>31||!Number.isInteger(Z))&&(i.resetDay='"Reset Day" must be between 1 and 31 for monthly period')}return i},[O,C,j]),gs=a.useCallback(()=>{if(Object.keys(ze).length>0)return null;const i={...t.metadata};for(const me of pt){const He=O[me.key]?.trim();He?me.type==="number"?i[me.key]=Number(He):i[me.key]=He:delete i[me.key]}X.length>0?i.skills=X:delete i.skills;const h={...t.runtimeConfig};Object.assign(h,Oa(t,P)),h.autoClaimRelevantTasks=b,h.engineerBacklogAutoClaim=d,V==="auto"?delete h.assignmentPolicy:h.assignmentPolicy=V,h.runMissedHeartbeatOnStartup=Ae,h.allowParallelExecution=ge,h.skipHeartbeatWhenIdle=ae;for(const me of["heartbeatIntervalMs","heartbeatTimeoutMs","maxConcurrentRuns","autoClaimCandidatesInPrompt"]){const He=C[me]?.trim();if(!He)delete h[me];else{const fs=Number(He);h[me]=me==="maxConcurrentRuns"||me==="autoClaimCandidatesInPrompt"?fs:fs*1e3}}const R=C.messageResponseMode?.trim();R?h.messageResponseMode=R:delete h.messageResponseMode,Ce?h.heartbeatScopeDiscipline=Ce:delete h.heartbeatScopeDiscipline,Ie?h.heartbeatPromptTemplate=Ie:delete h.heartbeatPromptTemplate;const ee=O.thinkingLevel||"off";if(h.thinkingLevel=ee,fe==="runtime")De.trim()?h.runtimeHint=De.trim():delete h.runtimeHint,delete h.modelProvider,delete h.modelId,delete h.model;else if(delete h.runtimeHint,Re.trim()){const me=Re.indexOf("/");me!==-1&&(h.modelProvider=Re.slice(0,me),h.modelId=Re.slice(me+1),h.model=Re.trim())}else delete h.modelProvider,delete h.modelId,delete h.model;const he={},te=j.tokenBudget?.trim(),ve=j.usageThreshold?.trim(),je=j.budgetPeriod?.trim(),Z=j.resetDay?.trim();te&&(he.tokenBudget=Number(te)),ve&&(he.usageThreshold=Number(ve)/100),je&&(he.budgetPeriod=je),Z&&(he.resetDay=Number(Z)),Object.keys(he).length>0?h.budgetConfig=he:delete h.budgetConfig;let Ge;return ne&&(Ge={mode:ne,entryFile:Oe||"AGENTS.md",files:_e.length>0?_e:["AGENTS.md"]},ne==="external"&&oe.trim()&&(Ge.externalPath=oe.trim())),{name:f.trim()||void 0,role:N,title:g.trim()||void 0,icon:T.trim()||void 0,reportsTo:M.trim()||void 0,metadata:i,runtimeConfig:h,bundleConfig:Ge}},[t.metadata,t.runtimeConfig,ge,V,b,j,Oe,oe,_e,ne,d,O,P,Ie,Ce,C,T,Re,f,M,N,Ae,fe,De,X,ae,g,ze]),ht=a.useCallback(async(i,h)=>{const R=gs();if(!R)return Qe(ze),i&&l(n("agents.fixValidationErrors","Please fix validation errors before saving"),"error"),h==="auto"&&yt(n("agents.fixValidationToSave","Fix validation errors to save changes")),!1;const ee=JSON.stringify(R);if(ee===ds.current)return!1;const he=++Nt.current;Qe({}),yt(null),ls(!0);try{return await Vt(t.id,R,r),he!==Nt.current?!1:(ds.current=ee,h==="manual"&&l(n("agents.settingsSaved","Settings saved"),"success"),yt(null),nt(!0),gt.current&&clearTimeout(gt.current),gt.current=setTimeout(()=>nt(!1),3e3),await o(),!0)}catch(te){if(he===Nt.current){const ve=_(te);yt(ve),l(n("agents.settingsSaveFailed","Failed to save settings: {{error}}",{error:ve}),"error")}return!1}finally{he===Nt.current&&ls(!1)}},[l,t.id,gs,o,r,ze]),Qs=async()=>{await ht(!0,"manual")},le=a.useCallback(()=>{if(!(!Me||We)){if(Object.keys(ze).length>0){Qe(ze);return}ht(!1,"auto")}},[Me,We,ht,ze]);a.useEffect(()=>{if(!Me||We)return;if(Object.keys(ze).length>0){Qe(ze);return}const i=setTimeout(()=>{ht(!1,"auto")},yn);return()=>clearTimeout(i)},[Me,We,ht,ze]);const ea=a.useCallback(async i=>{K(!0);try{await Ba(t.id,i,r),await o(),l(n("agents.avatarUploaded","Avatar uploaded"),"success")}catch(h){l(_(h),"error")}finally{K(!1),Y.current&&(Y.current.value="")}},[l,t.id,o,r]),ta=a.useCallback(async()=>{K(!0);try{await $a(t.id,r),await o(),l(n("agents.avatarRemoved","Avatar removed"),"success")}catch(i){l(_(i),"error")}finally{K(!1)}},[l,t.id,o,r]),hs=We?n("agents.savingChanges","Saving changes…"):Ot?n("agents.saveFailed","Save failed: {{error}}",{error:Ot}):!Me&&Zs?n("agents.allChangesSaved","All changes saved"):null;return e.jsxs("div",{className:"config-tab",children:[e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:n("agents.configTitle","Agent Configuration")}),e.jsx("p",{className:"config-description",children:n("agents.configDescription","Configure agent settings and behavior.")}),e.jsx("div",{className:"config-actions-row",children:e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>E(!0),children:n("agents.aiInterview","AI Interview")})}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-name",children:n("agents.nameLabel","Name")}),e.jsx("input",{id:"agent-name",type:"text",className:"input",value:f,onChange:i=>u(i.target.value),onBlur:()=>{le()}})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-role",children:n("agents.roleLabel2","Role")}),e.jsxs("select",{id:"agent-role",className:"select",value:N,onChange:i=>{c(i.target.value),le()},children:[e.jsx("option",{value:"triage",children:n("agents.roleTriage","Triage")}),e.jsx("option",{value:"executor",children:n("agents.roleExecutor","Executor")}),e.jsx("option",{value:"reviewer",children:n("agents.roleReviewer","Reviewer")}),e.jsx("option",{value:"merger",children:n("agents.roleMerger","Merger")}),e.jsx("option",{value:"scheduler",children:n("agents.roleScheduler","Scheduler")}),e.jsx("option",{value:"custom",children:n("agents.roleCustom","Custom")})]})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-title",children:n("agents.titleLabel","Title")}),e.jsx("input",{id:"agent-title",type:"text",className:"input",placeholder:n("agents.titlePlaceholder","e.g. Senior Code Reviewer"),value:g,onChange:i=>w(i.target.value),onBlur:()=>{le()}})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{children:n("agents.avatarLabel","Avatar")}),e.jsxs("div",{className:"agent-avatar-editor",children:[e.jsx(Is,{agent:t,size:64,className:"agent-avatar-editor-preview"}),e.jsxs("div",{className:"agent-avatar-editor-actions",children:[e.jsx("input",{ref:Y,id:"agent-avatar-upload",type:"file",accept:"image/png,image/jpeg,image/gif,image/webp",className:"visually-hidden",disabled:A,onChange:i=>{const h=i.target.files?.[0];h&&ea(h)}}),e.jsx("button",{type:"button",className:"btn btn-sm agent-avatar-editor-action",disabled:A,onClick:()=>Y.current?.click(),children:n("agents.uploadAvatar","Upload Avatar")}),t.imageUrl?e.jsx("button",{type:"button",className:"btn btn-sm agent-avatar-editor-action",onClick:()=>void ta(),disabled:A,children:n("agents.removeAvatar","Remove Avatar")}):null]})]})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-icon",children:n("agents.iconLabel","Icon")}),e.jsx("input",{id:"agent-icon",type:"text",className:"input",placeholder:n("agents.iconPlaceholder","e.g. 🤖"),value:T,onChange:i=>D(i.target.value),onBlur:()=>{le()}})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-reports-to",children:n("agents.reportsToLabel","Reports To")}),e.jsxs("select",{id:"agent-reports-to",className:"select",value:M,onChange:i=>{H(i.target.value),le()},disabled:k,children:[e.jsx("option",{value:"",children:n("agents.noManager","No manager")}),Ze&&e.jsx("option",{value:we,children:n("agents.unknownManager","Unknown manager ({{id}})",{id:we})}),Te.map(i=>e.jsxs("option",{value:i.id,children:[i.name," (",i.id,")"]},i.id))]})]})]})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:n("agents.skillsTitle","Skills")}),e.jsx("p",{className:"config-description",children:n("agents.skillsDescription","Assign skills to this agent for specialized behavior.")}),e.jsx("div",{className:"config-fields",children:e.jsx("div",{className:"config-field",children:e.jsx(rn,{id:"agent-skills",label:"Skills",value:X,onChange:i=>{lt(i),le()},projectId:r})})})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:n("agents.modelTitle","Model")}),e.jsx("p",{className:"config-description",children:n("agents.modelDescription","Choose either a built-in model or a plugin runtime for this agent. These options are mutually exclusive.")}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{children:n("agents.runtimeSource","Runtime Source")}),e.jsxs("div",{className:"config-runtime-tabs",role:"tablist","aria-label":n("agents.runtimeSource","Runtime source"),children:[e.jsx("button",{type:"button",className:`config-runtime-tab${fe==="model"?" active":""}`,role:"tab","aria-selected":fe==="model",tabIndex:fe==="model"?0:-1,onClick:()=>{ke("model"),p(""),le()},children:n("agents.builtInModel","Built-in Model")}),e.jsx("button",{type:"button",className:`config-runtime-tab${fe==="runtime"?" active":""}`,role:"tab","aria-selected":fe==="runtime",tabIndex:fe==="runtime"?0:-1,onClick:()=>{ke("runtime"),le()},children:n("agents.pluginRuntime","Plugin Runtime")})]})]}),fe==="model"?e.jsx("div",{className:"config-field",children:e.jsx(_a,{models:ct,value:Re,onChange:i=>{Ye(i),le()},placeholder:n("agents.useGlobalDefault","Use global default"),label:n("agents.agentModelLabel","Agent Model"),disabled:dt,favoriteProviders:vt,onToggleFavorite:tt,favoriteModels:Se,onToggleModelFavorite:ot,thinkingLevel:O.thinkingLevel??"",onThinkingLevelChange:i=>{U(h=>({...h,thinkingLevel:i})),le()}})}):e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-runtime-hint",children:n("agents.runtimeLabel","Runtime")}),jt?e.jsx("span",{className:"config-hint",children:e.jsx(Ua,{label:n("agents.loadingRuntimes","Loading runtimes…")})}):e.jsxs("select",{id:"agent-runtime-hint",className:"select",value:De,onChange:i=>{p(i.target.value),le()},children:[e.jsx("option",{value:"",children:Pe.length>0?n("agents.selectRuntime","Select a plugin runtime…"):n("agents.noRuntimes","No plugin runtimes available")}),Pe.map(i=>e.jsx("option",{value:i.runtimeId,children:i.description?`${i.name} — ${i.description}`:i.name},`${i.pluginId}:${i.runtimeId}`))]})]})]})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:n("agents.permissionsTitle","Permissions")}),e.jsx("p",{className:"config-description",children:n("agents.permissionsDescription","Per-agent settings override project defaults. Each category controls a separate approval gate.")}),e.jsxs("div",{className:"agent-capability-grants","data-testid":"agent-capability-grants",children:[e.jsx("h4",{children:n("agents.capabilityGrantsTitle","Capability grants")}),e.jsx("p",{className:"config-hint",children:n("agents.capabilityGrantsDescription","Explicit grants add to this agent's role defaults and apply to both permanent and ephemeral agents.")}),e.jsx("div",{className:"agent-capability-grants-grid",children:ys.map(i=>{const h=ue.has(i),R=Ue.has(i),ee=`agent-capability-${t.id}-${i.replace(/[^a-z0-9]+/gi,"-")}`;return e.jsxs("label",{className:"agent-capability-grant-row",htmlFor:ee,children:[e.jsxs("span",{children:[e.jsx("span",{className:"agent-capability-grant-name",children:i}),e.jsx("span",{className:"config-hint",children:h?n("agents.roleDefaultGrant","Role default grant"):R?n("agents.explicitGrant","Explicit grant"):n("agents.notGranted","Not granted")})]}),e.jsx("input",{id:ee,type:"checkbox",checked:R,"aria-label":n("agents.toggleCapabilityGrant","Toggle explicit grant for {{permission}}",{permission:i}),onChange:he=>{Ht(i,he.target.checked)}})]},i)})})]}),z===void 0?e.jsxs("div",{className:"agent-permission-inherit-banner",children:[e.jsx("span",{children:n("agents.inheritingProjectDefault","Inheriting project default — no per-agent override set")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void Xe({presetId:"custom",rules:{git_write:ce?.rules?.git_write??"allow",file_write_delete:ce?.rules?.file_write_delete??"allow",command_execution:ce?.rules?.command_execution??"allow",network_api:ce?.rules?.network_api??"allow",task_agent_mutation:ce?.rules?.task_agent_mutation??"allow",review_gate_bypass:ce?.rules?.review_gate_bypass??"require-approval",file_scope:ce?.rules?.file_scope??"allow"}}),children:n("agents.customizeForAgent","Customize for this agent")})]}):null,e.jsx(an,{mode:"agent-override",value:z,projectDefault:ce?.rules,projectDefaultToolRules:ce?.toolRules,onChange:i=>{Xe(i)}})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:n("agents.heartbeatSettingsTitle","Heartbeat Settings")}),e.jsx("p",{className:"config-description",children:n("agents.heartbeatSettingsDesc","Configure how this agent's heartbeat is monitored. Leave a field empty to use system defaults.")}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field agent-heartbeat-auto-claim-card",children:[e.jsxs("div",{className:"agent-heartbeat-preset-row",children:[e.jsxs("div",{children:[e.jsx("label",{className:"agent-heartbeat-preset-label",children:n("agents.coordinationOnlyAgent","Coordination-only agent")}),e.jsx("span",{className:"config-hint",children:n("agents.coordinationOnlyHint","Disables auto-claim and removes the candidate section from heartbeat prompts. Recommended for routing/CEO-style agents.")})]}),e.jsx("button",{type:"button",className:"btn btn-sm agent-heartbeat-preset-btn",onClick:()=>{S(!1),Q(i=>({...i,autoClaimCandidatesInPrompt:"0"})),le()},children:n("agents.applyPreset","Apply preset")})]}),e.jsxs("label",{className:"checkbox-label",htmlFor:"hb-autoClaimRelevantTasks",children:[e.jsx("input",{id:"hb-autoClaimRelevantTasks",type:"checkbox",checked:b,onChange:i=>{S(i.target.checked),le()}}),n("agents.autoClaimRelevantTasks","Auto-Claim Relevant Tasks")]}),e.jsx("span",{className:"config-hint",children:n("agents.autoClaimHint","When enabled (default), no-task heartbeats scan open unowned work and auto-claim tasks aligned with this agent's role and soul.")}),e.jsxs("label",{className:"checkbox-label",htmlFor:"hb-engineerBacklogAutoClaim",children:[e.jsx("input",{id:"hb-engineerBacklogAutoClaim",type:"checkbox",checked:d,onChange:i=>{L(i.target.checked),le()}}),n("agents.engineerBacklogAutoClaim","Engineer Backlog Auto-Claim")]}),e.jsx("span",{className:"config-hint",children:n("agents.engineerBacklogAutoClaimHint","Per-agent override of the project default. Allows this engineer-role agent to auto-claim unowned backlog tasks; explicit assignment and delegation are unchanged.")})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"hb-assignmentPolicy",children:n("agents.assignmentPolicy","Assignment Policy")}),e.jsxs("select",{id:"hb-assignmentPolicy",value:V,onChange:i=>{xe(i.target.value),le()},children:[e.jsx("option",{value:"auto",children:n("agents.assignmentPolicyAuto","Auto (default) — eligible for automatic assignment")}),e.jsx("option",{value:"explicit-only",children:n("agents.assignmentPolicyExplicitOnly","Explicit only — never auto-assigned; accepts direct assignment/delegation")}),e.jsx("option",{value:"none",children:n("agents.assignmentPolicyNone","None — can never receive implementation tasks")})]}),e.jsx("span",{className:"config-hint",children:n("agents.assignmentPolicyHint",'Controls whether task routing may bind work to this agent. Use "None" for liaison/observer agents that must never execute product tasks — no override can bypass it.')})]}),e.jsxs("div",{className:"config-field",children:[e.jsxs("label",{className:"checkbox-label",htmlFor:"hb-enabled",children:[e.jsx("input",{id:"hb-enabled",type:"checkbox",checked:P,onChange:i=>{Xs(i.target.checked),le()}}),n("agents.heartbeatEnabled","Heartbeat Enabled")]}),e.jsx("span",{className:"config-hint",children:n("agents.heartbeatEnabledHint","When enabled, this agent receives scheduled heartbeat runs based on its interval.")})]}),e.jsxs("div",{className:"config-field",children:[e.jsxs("label",{className:"checkbox-label",htmlFor:"hb-runMissedHeartbeatOnStartup",children:[e.jsx("input",{id:"hb-runMissedHeartbeatOnStartup",type:"checkbox",checked:Ae,onChange:i=>{$e(i.target.checked),le()}}),n("agents.runMissedHeartbeat","Run Missed Heartbeat On Startup")]}),e.jsx("span",{className:"config-hint",children:n("agents.runMissedHeartbeatHint","When enabled, if the server was down across this agent's scheduled heartbeat tick, fire a single catch-up heartbeat at startup. Default: off.")})]}),e.jsxs("div",{className:"config-field",children:[e.jsxs("label",{className:"checkbox-label",htmlFor:"hb-allowParallelExecution",children:[e.jsx("input",{id:"hb-allowParallelExecution",type:"checkbox",checked:ge,onChange:i=>{B(i.target.checked),le()}}),n("agents.allowParallelExecution","Allow Parallel Execution")]}),e.jsx("span",{className:"config-hint",children:n("agents.allowParallelExecutionHint","When disabled, the heartbeat and task execution paths serialize for this agent (heartbeat will not start while the agent's task is executing, and vice versa). Permanent agents only.")})]}),e.jsxs("div",{className:"config-field",children:[e.jsxs("label",{className:"checkbox-label",htmlFor:"hb-skipHeartbeatWhenIdle",children:[e.jsx("input",{id:"hb-skipHeartbeatWhenIdle",type:"checkbox",checked:ae,onChange:i=>{Ne(i.target.checked),le()}}),n("agents.skipHeartbeatWhenIdle","Skip heartbeat when idle")]}),e.jsx("span",{className:"config-hint",children:n("agents.skipHeartbeatWhenIdleHint","When enabled, scheduled (timer) heartbeats are skipped while this agent has no assigned task. The agent still wakes immediately when a task is assigned or you trigger a run manually. Default: off.")})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"hb-heartbeatScopeDiscipline",children:n("agents.heartbeatScopeDiscipline","Heartbeat Scope Discipline")}),e.jsxs("select",{id:"hb-heartbeatScopeDiscipline",className:"select",value:Ce,onChange:i=>{const h=i.target.value;Je(h==="strict"||h==="lite"||h==="off"?h:""),le()},children:[e.jsx("option",{value:"",children:n("agents.inheritProjectDefault","Inherit project default")}),e.jsx("option",{value:"strict",children:n("agents.strict","Strict")}),e.jsx("option",{value:"lite",children:n("agents.lite","Lite")}),e.jsx("option",{value:"off",children:n("agents.off","Off")})]}),e.jsx("span",{className:"config-hint",children:n("agents.scopeDisciplineHint","Strict — coordination-focused; higher per-tick tokens. Lite — pre-2026-05-11 behavior. Off — minimal procedure.")})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"hb-heartbeatPromptTemplate",children:n("agents.heartbeatPromptTemplate","Heartbeat Prompt Template")}),e.jsxs("select",{id:"hb-heartbeatPromptTemplate",className:"select",value:Ie,onChange:i=>{const h=i.target.value;x(h==="default"||h==="compact"?h:""),le()},children:[e.jsx("option",{value:"",children:n("agents.inheritProjectDefault","Inherit project default")}),e.jsx("option",{value:"default",children:n("agents.templateDefault","Default")}),e.jsx("option",{value:"compact",children:n("agents.templateCompact","Compact")})]})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"hb-heartbeatIntervalMs",children:n("agents.heartbeatIntervalLabel","Heartbeat Interval (s)")}),e.jsx("input",{id:"hb-heartbeatIntervalMs",type:"text",inputMode:"numeric",className:de("input",!!q.heartbeatIntervalMs&&"input--error"),placeholder:String(es/1e3),value:C.heartbeatIntervalMs??"",onChange:i=>St("heartbeatIntervalMs",i.target.value)}),q.heartbeatIntervalMs?e.jsx("span",{className:"config-error",children:q.heartbeatIntervalMs}):e.jsx("span",{className:"config-hint",children:n("agents.heartbeatIntervalHint","How often heartbeats are checked. Leave empty for system default ({{seconds}}s / {{label}}).",{seconds:es/1e3,label:jn})})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"hb-heartbeatTimeoutMs",children:n("agents.heartbeatTimeoutLabel","Heartbeat Timeout (s)")}),e.jsx("input",{id:"hb-heartbeatTimeoutMs",type:"text",inputMode:"numeric",className:de("input",!!q.heartbeatTimeoutMs&&"input--error"),placeholder:"60",value:C.heartbeatTimeoutMs??"",onChange:i=>St("heartbeatTimeoutMs",i.target.value)}),q.heartbeatTimeoutMs?e.jsx("span",{className:"config-error",children:q.heartbeatTimeoutMs}):e.jsx("span",{className:"config-hint",children:n("agents.heartbeatTimeoutHint","Time without heartbeat before agent is considered unresponsive. Leave empty for system default (60s)")})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"hb-maxConcurrentRuns",children:n("agents.maxConcurrentRunsLabel","Max Concurrent Runs")}),e.jsx("input",{id:"hb-maxConcurrentRuns",type:"text",inputMode:"numeric",className:de("input",!!q.maxConcurrentRuns&&"input--error"),placeholder:"1",value:C.maxConcurrentRuns??"",onChange:i=>St("maxConcurrentRuns",i.target.value)}),q.maxConcurrentRuns?e.jsx("span",{className:"config-error",children:q.maxConcurrentRuns}):e.jsx("span",{className:"config-hint",children:n("agents.maxConcurrentRunsHint","Maximum simultaneous heartbeat runs for this agent. Leave empty for system default (1).")})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"hb-messageResponseMode",children:n("agents.messageResponseModeLabel","Message Response Mode")}),e.jsxs("select",{id:"hb-messageResponseMode",className:de("select",!!q.messageResponseMode&&"input--error"),value:C.messageResponseMode??"",onChange:i=>St("messageResponseMode",i.target.value),children:[e.jsx("option",{value:"",children:n("agents.systemDefaultOnHeartbeat","System Default (On Heartbeat)")}),e.jsx("option",{value:"on-heartbeat",children:n("agents.onHeartbeat","On Heartbeat")}),e.jsx("option",{value:"immediate",children:n("agents.immediate","Immediate")})]}),q.messageResponseMode?e.jsx("span",{className:"config-error",children:q.messageResponseMode}):e.jsx("span",{className:"config-hint",children:n("agents.messageResponseModeHint","How this agent responds to incoming messages. 'Immediate' wakes the agent as soon as a message arrives. 'On Heartbeat' defers processing to the next scheduled heartbeat.")})]})]})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:n("agents.budgetSettingsTitle","Budget Settings")}),e.jsx("p",{className:"config-description",children:n("agents.budgetSettingsDesc","Configure token budget limits for this agent. Leave all fields empty to disable budget tracking.")}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"budget-tokenBudget",children:n("agents.tokenBudgetLabel","Token Budget")}),e.jsx("input",{id:"budget-tokenBudget",type:"text",inputMode:"numeric",className:de("input",!!q.tokenBudget&&"input--error"),placeholder:n("agents.noLimit","No limit"),value:j.tokenBudget??"",onChange:i=>kt("tokenBudget",i.target.value)}),q.tokenBudget?e.jsx("span",{className:"config-error",children:q.tokenBudget}):e.jsx("span",{className:"config-hint",children:n("agents.tokenBudgetHint","Total token cap (input + output) for this agent. Leave empty for no limit.")})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"budget-usageThreshold",children:n("agents.usageThresholdLabel","Usage Threshold (%)")}),e.jsx("input",{id:"budget-usageThreshold",type:"text",inputMode:"numeric",className:de("input",!!q.usageThreshold&&"input--error"),placeholder:"80",value:j.usageThreshold??"",onChange:i=>kt("usageThreshold",i.target.value)}),q.usageThreshold?e.jsx("span",{className:"config-error",children:q.usageThreshold}):e.jsx("span",{className:"config-hint",children:n("agents.usageThresholdHint","Warning threshold as a percentage. Agent warns when usage reaches this level. Default: 80%.")})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"budget-budgetPeriod",children:n("agents.budgetPeriodLabel","Budget Period")}),e.jsxs("select",{id:"budget-budgetPeriod",className:de("select",!!q.budgetPeriod&&"input--error"),value:j.budgetPeriod??"",onChange:i=>kt("budgetPeriod",i.target.value),children:[e.jsx("option",{value:"",children:n("agents.noReset","No reset (lifetime)")}),e.jsx("option",{value:"daily",children:n("agents.daily","Daily")}),e.jsx("option",{value:"weekly",children:n("agents.weekly","Weekly")}),e.jsx("option",{value:"monthly",children:n("agents.monthly","Monthly")})]}),q.budgetPeriod?e.jsx("span",{className:"config-error",children:q.budgetPeriod}):e.jsx("span",{className:"config-hint",children:n("agents.budgetPeriodHint","How often the budget counter resets. Leave empty for lifetime budget.")})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"budget-resetDay",children:n("agents.resetDayLabel","Reset Day")}),e.jsx("input",{id:"budget-resetDay",type:"text",inputMode:"numeric",className:de("input",!!q.resetDay&&"input--error"),placeholder:n("agents.auto","Auto"),value:j.resetDay??"",onChange:i=>kt("resetDay",i.target.value)}),q.resetDay?e.jsx("span",{className:"config-error",children:q.resetDay}):e.jsx("span",{className:"config-hint",children:j.budgetPeriod==="weekly"?n("agents.resetDayWeekly","Day of week (0=Sunday to 6=Saturday) for reset."):j.budgetPeriod==="monthly"?n("agents.resetDayMonthly","Day of month (1-31) for reset."):n("agents.resetDayHint","Day for reset (weekly: 0-6, monthly: 1-31). Leave empty for automatic.")})]}),Ve?.budgetLimit!=null&&e.jsxs("div",{className:"config-field",children:[e.jsx("label",{children:n("agents.currentUsage","Current Usage")}),e.jsxs("div",{className:"budget-progress-container",children:[e.jsx("div",{className:"budget-progress-bar",children:e.jsx("div",{className:de("budget-progress-bar__fill",(Ve.usagePercent??0)>=100?"budget-progress-bar__fill--red":(Ve.usagePercent??0)>=80?"budget-progress-bar__fill--amber":"budget-progress-bar__fill--green"),style:{width:`${Math.min(Ve.usagePercent??0,100)}%`}})}),e.jsx("span",{className:"budget-progress-label",children:n("agents.budgetUsageDisplay","{{used}} / {{limit}} tokens ({{percent}}% used)",{used:(Ve.currentUsage??0).toLocaleString(),limit:(Ve.budgetLimit??0).toLocaleString(),percent:Math.round(Ve.usagePercent??0)})})]})]}),Ve?.budgetLimit!=null&&e.jsx("div",{className:"config-field",children:e.jsx("button",{className:"btn btn-reset-budget",onClick:()=>void Ys(),disabled:is,children:is?e.jsxs(e.Fragment,{children:[e.jsx(G,{size:14,className:"animate-spin"}),n("agents.resetting","Resetting…")]}):e.jsxs(e.Fragment,{children:[e.jsx(Pt,{size:14}),n("agents.resetBudgetUsage","Reset Budget Usage")]})})})]})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:n("agents.bundleTitle","Instruction Bundle")}),e.jsx("p",{className:"config-description",children:n("agents.bundleDescription","Configure the agent's instruction bundle. Leave empty to use inline instructions only.")}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"bundle-mode",children:n("agents.bundleModeLabel","Bundle Mode")}),e.jsxs("select",{id:"bundle-mode",className:"select",value:ne,onChange:i=>et(i.target.value),children:[e.jsx("option",{value:"",children:n("agents.bundleNone","None (use inline instructions)")}),e.jsx("option",{value:"managed",children:n("agents.bundleManaged","Managed (system-managed directory)")}),e.jsx("option",{value:"external",children:n("agents.bundleExternal","External (user-specified path)")})]}),e.jsxs("span",{className:"config-hint",children:[ne==="managed"&&n("agents.bundleManagedHint","Files will be stored in a system-managed directory within .fusion/agents/"),ne==="external"&&n("agents.bundleExternalHint","Specify an external directory path for the instruction files"),!ne&&n("agents.bundleSelectMode","Select a mode to enable instruction bundling")]})]}),ne&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"bundle-entry-file",children:n("agents.bundleEntryFileLabel","Entry File")}),e.jsx("input",{id:"bundle-entry-file",type:"text",className:"input",placeholder:"AGENTS.md",value:Oe,onChange:i=>Fe(i.target.value)}),e.jsx("span",{className:"config-hint",children:n("agents.bundleEntryFileHint","Primary instructions file name (default: AGENTS.md)")})]}),ne==="external"&&e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"bundle-external-path",children:n("agents.bundleExternalPathLabel","External Path")}),e.jsx("input",{id:"bundle-external-path",type:"text",className:"input",placeholder:n("agents.bundleExternalPathPlaceholder","e.g. .fusion/agents/my-agent"),value:oe,onChange:i=>Ee(i.target.value)}),e.jsx("span",{className:"config-hint",children:n("agents.bundleExternalPathHint","Absolute or relative path to the external directory")})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"bundle-files",children:n("agents.bundleFilesLabel","Files (comma-separated)")}),e.jsx("input",{id:"bundle-files",type:"text",className:"input",placeholder:"AGENTS.md, PROMPTS.md",value:_e.join(", "),onChange:i=>qe(i.target.value.split(",").map(h=>h.trim()).filter(Boolean))}),e.jsx("span",{className:"config-hint",children:n("agents.bundleFilesHint","List of file names in the bundle directory")})]})]})]})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:n("agents.advancedSettingsTitle","Advanced Settings")}),e.jsx("p",{className:"config-description",children:n("agents.advancedSettingsDesc","Advanced configuration options for this agent. Leave a field empty to use system defaults.")}),e.jsx("div",{className:"config-fields",children:pt.map(i=>{const h=!!q[i.key];return e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:`adv-${i.key}`,children:i.label}),i.type==="select"?e.jsxs("select",{id:`adv-${i.key}`,className:de("select",h&&"input--error"),value:O[i.key]??"",onChange:R=>ms(i.key,R.target.value),children:[e.jsx("option",{value:"",children:n("agents.systemDefault","System Default")}),i.options?.map(R=>e.jsx("option",{value:R.value,children:R.label},R.value))]}):e.jsx("input",{id:`adv-${i.key}`,type:"text",inputMode:i.type==="number"?"numeric":void 0,className:de("input",h&&"input--error"),placeholder:i.placeholder,value:O[i.key]??"",onChange:R=>ms(i.key,R.target.value)}),h&&e.jsx("span",{className:"config-error",children:q[i.key]}),!h&&i.hint&&e.jsx("span",{className:"config-hint",children:i.hint})]},i.key)})}),e.jsxs("div",{className:"config-actions",children:[e.jsx("button",{className:"btn btn-task-create",disabled:!Me||We,onClick:()=>void Qs(),children:We?e.jsxs(e.Fragment,{children:[e.jsx(G,{size:16,className:"animate-spin"}),n("common.saving","Saving…")]}):e.jsxs(e.Fragment,{children:[e.jsx(be,{size:16}),n("agents.saveSettings","Save Settings")]})}),hs&&e.jsxs("span",{className:de("config-saved-indicator",Ot&&"config-saved-indicator--error"),children:[We?e.jsx(G,{size:14,className:"animate-spin"}):e.jsx(be,{size:14}),hs]})]})]}),e.jsx(Hn,{agent:t,projectId:r,addToast:l,onSaved:o}),e.jsxs("div",{className:"config-section config-section--danger",children:[e.jsx("h3",{children:n("agents.dangerZone","Danger Zone")}),e.jsx("p",{className:"config-description",children:n("agents.dangerZoneDesc","Permanently delete this agent from the project.")}),e.jsx("div",{className:"config-fields",children:e.jsxs("div",{className:"config-field",children:[e.jsxs("button",{className:"btn btn--danger",disabled:!os||!m,onClick:()=>void m?.(),children:[e.jsx(bt,{size:16}),n("agents.deleteAgent","Delete Agent")]}),e.jsx("span",{className:"config-danger-note",children:os?n("agents.deletionPermanent","Deletion is permanent and cannot be undone."):n("agents.deletionNotAvailable","Agent deletion is only available when state is idle or paused (current state: {{state}}).",{state:t.state})})]})})]}),e.jsx(ln,{isOpen:F,onClose:()=>E(!1),onUseDraft:mt,projectId:r,existingAgents:I,mode:"edit",existingAgentConfig:at})]})}function On({agentId:t,projectId:r,onChildClick:l}){const{t:o}=ye("app"),[s,m]=a.useState([]),[y,n]=a.useState(!0);return a.useEffect(()=>{n(!0),Ta(t,r).then(m).finally(()=>n(!1))},[t,r]),y?e.jsxs("div",{className:"detail-section",children:[e.jsx("div",{className:"detail-section-header",children:e.jsx("h3",{children:o("agents.employeesTitle","Employees")})}),e.jsxs("div",{className:"detail-section-body detail-section-body--loading",children:[e.jsx(G,{size:16,className:"spin"}),e.jsx("span",{className:"text-muted",children:o("agents.loadingEmployees","Loading employees...")})]})]}):e.jsxs("div",{className:"detail-section",children:[e.jsxs("div",{className:"detail-section-header",children:[e.jsx("h3",{children:o("agents.employeesTitle","Employees")}),e.jsxs("span",{className:"text-muted",children:["(",s.length,")"]})]}),e.jsx("div",{className:"detail-section-body",children:s.length===0?e.jsxs("div",{className:"agent-empty agent-empty--padded",children:[e.jsx($s,{size:32,opacity:.3}),e.jsx("p",{children:o("agents.noEmployees","No employees")}),e.jsx("p",{className:"text-muted",children:o("agents.noEmployeesDesc","This agent has no employees")})]}):e.jsx("div",{className:"agent-tree__children",children:s.map(f=>{const u=ns[f.state];return e.jsxs("div",{className:"agent-tree__node agent-is-child",onClick:()=>l?.(f.id),role:"button",tabIndex:0,onKeyDown:N=>{(N.key==="Enter"||N.key===" ")&&(N.key===" "&&N.preventDefault(),l?.(f.id))},style:{cursor:l?"pointer":"default"},children:[e.jsx("span",{className:"agent-tree__icon",children:f.icon??"🤖"}),e.jsx("span",{className:"agent-tree__name",children:f.name}),e.jsx("span",{className:"agent-tree__badge",style:{background:u?.bg??"var(--state-idle-bg)",color:u?.text??"var(--state-idle-text)",border:`1px solid ${u?.border??"var(--state-idle-border)"}`},children:f.state})]},f.id)})})})]})}export{Kn as AgentDetailView,rt as relativeTime};
@@ -0,0 +1 @@
1
+ .agent-detail-overlay{position:fixed;inset:0;background:color-mix(in srgb,var(--bg) 60%,transparent);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:100;padding:var(--space-lg)}.agent-detail-modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;min-width:calc(var(--space-xl) * 20);max-width:calc(100vw - var(--space-2xl) - var(--space-xs) * 2);min-height:calc(var(--space-xl) * 13 + var(--space-sm));max-height:calc(100dvh - var(--space-2xl) - var(--space-xs) * 2);display:flex;flex-direction:column;overflow:hidden;resize:both;box-shadow:var(--shadow-lg)}.agent-detail-modal:not([style*=width]){width:min(calc(var(--space-xl) * 37 + var(--space-md)),calc(100vw - var(--space-2xl) - var(--space-xs) * 2))}.agent-detail-modal:not([style*=height]){height:min(85vh,calc(100dvh - var(--space-2xl) - var(--space-xs) * 2))}.agent-detail-inline-shell{width:100%;height:100%;min-height:0;display:flex;flex-direction:column;overflow:hidden}.agent-detail-inline{width:100%;height:100%;min-height:0;display:flex;flex-direction:column;overflow:hidden;background:var(--surface);border:1px solid var(--border)}.agent-detail-inline-loading{width:100%;height:100%;min-height:0;display:flex;align-items:center;justify-content:center;overflow:hidden}.agent-detail-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);padding:calc(var(--space-xl) * 2 + var(--space-md));color:var(--text-muted)}.agent-detail-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--space-sm) var(--space-md);padding:var(--space-md) calc(var(--space-lg) + var(--space-xs));border-bottom:1px solid var(--border);background:var(--bg-secondary);flex-shrink:0}.agent-detail-identity{display:flex;align-items:center;gap:var(--space-md);flex:1 1 auto;min-width:0}.agent-detail-inline-back{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs));padding:calc(var(--space-sm) - var(--space-xs) * .5) calc(var(--space-sm) + var(--space-xs) * .5);flex-shrink:0}.agent-detail-icon{width:calc(var(--space-lg) * 2 + var(--space-xs));height:calc(var(--space-lg) * 2 + var(--space-xs));display:flex;align-items:center;justify-content:center;color:var(--text);flex-shrink:0}.agent-detail-info{min-width:0}.agent-detail-info h2{font-size:calc(var(--space-md) + var(--space-xs));font-weight:600;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agent-detail-badges{display:flex;gap:var(--space-xs);margin-top:calc(var(--space-xs) * .5)}.agent-detail-header-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:var(--space-sm);flex:0 1 auto;min-width:0}.agent-detail-controls{display:flex;align-items:center;flex-wrap:wrap;gap:calc(var(--space-xs) + var(--space-sm) * .25);flex-shrink:0}.btn--compact{padding:calc(var(--space-xs) + var(--space-xs) * .25) calc(var(--space-sm) + var(--space-xs) * .5);font-size:var(--space-md);gap:var(--space-xs)}.agent-detail-utility-actions{display:flex;align-items:center;gap:var(--space-xs);flex-shrink:0}.agent-detail-bulk-menu{position:relative}.agent-detail-bulk-menu-popover{position:absolute;right:0;top:calc(100% + var(--space-xs));min-width:calc(var(--space-xl) * 9);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);z-index:2;padding:var(--space-xs);display:flex;flex-direction:column;gap:var(--space-xs)}.agent-detail-bulk-menu-item{width:100%;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text);text-align:left;padding:var(--space-sm);display:flex;flex-direction:column;gap:calc(var(--space-xs) * .5);cursor:pointer}.agent-detail-bulk-menu-item:hover:not(:disabled),.agent-detail-bulk-menu-item:focus-visible{outline:none;background:var(--card-hover)}.agent-detail-bulk-menu-item:disabled{color:var(--text-muted);cursor:not-allowed}.agent-detail-bulk-menu-item-hint{font-size:calc(var(--space-sm) + var(--space-xs) * .5);color:var(--text-muted)}.agent-detail-import-btn{min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.agent-detail-title{display:flex;align-items:center;gap:var(--space-lg)}.agent-detail-actions{display:flex;align-items:center;gap:var(--space-sm)}.agent-detail-tabs{display:flex;gap:var(--space-xs);padding:0 calc(var(--space-lg) + var(--space-xs));border-bottom:1px solid var(--border);background:var(--bg-secondary);flex-shrink:0;overflow-x:auto;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;scrollbar-width:none}.agent-detail-tabs::-webkit-scrollbar{display:none}.agent-detail-tab{display:flex;flex:0 0 auto;touch-action:pan-x pan-y;align-items:center;gap:var(--space-xs);padding:calc(var(--space-sm) + var(--space-xs) * .5) var(--space-md);background:none;border:none;border-bottom:calc(var(--space-xs) * .5) solid transparent;color:var(--text-muted);font-size:.875rem;cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}.agent-detail-tab:hover{color:var(--text);background:var(--card-hover)}.agent-detail-tab.active{color:var(--todo);border-bottom-color:var(--todo)}.agent-detail-tab:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);background:color-mix(in srgb,var(--todo) 12%,transparent);color:var(--text);border-radius:var(--radius-sm)}.agent-detail-content{flex:1;min-height:0;overflow-y:auto;padding:var(--space-xl)}.agent-detail-footer{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md) var(--space-xl);border-top:1px solid var(--border);background:var(--bg-secondary);font-size:var(--space-md);color:var(--text-muted);flex-shrink:0}.agent-detail-id{font-family:var(--font-mono);cursor:pointer}.agent-detail-id:hover{color:var(--text)}.dashboard-tab{display:flex;flex-direction:column;gap:var(--space-xl)}.dashboard-summary-layout{padding-bottom:var(--space-md)}.dashboard-summary-health-reason{margin-left:var(--space-xs);font-size:calc(var(--space-sm) + var(--space-xs))}.dashboard-summary-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-md)}.budget-warning-banner{display:flex;gap:var(--space-sm);align-items:flex-start;border:1px solid var(--color-warning);background:color-mix(in srgb,var(--color-warning) 12%,transparent);border-radius:var(--radius-md);padding:var(--space-md)}.dashboard-summary-hero__heading{display:flex;align-items:center;gap:var(--space-sm)}.dashboard-summary-hero__heading h3{margin:0;font-size:calc(var(--space-lg) + var(--space-xs) * .5);font-weight:600}.dashboard-summary-hero__meta{display:flex;flex-wrap:wrap;gap:var(--space-md);color:var(--text-muted)}.agent-detail-approval-badge{display:inline-flex;align-items:center;gap:var(--space-xs);color:var(--color-warning)}.dashboard-summary-skills{display:inline-flex;align-items:center;gap:var(--space-sm)}.dashboard-summary-skill-badges{display:inline-flex;flex-wrap:wrap;gap:var(--space-xs)}.dashboard-summary-skill-badge{max-width:calc(var(--space-xl) * 8);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-summary-skill-badge-btn{cursor:pointer}.dashboard-summary-skill-badge-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.dashboard-summary-skill-badge--selected{border-color:var(--todo);background:color-mix(in srgb,var(--todo) 20%,transparent)}.dashboard-summary-skill-detail{margin-top:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.dashboard-summary-skill-detail-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.dashboard-summary-skill-detail-title{font-weight:600;color:var(--text)}.dashboard-summary-skill-detail-loading,.dashboard-summary-skill-detail-empty{display:inline-flex;align-items:center;gap:var(--space-xs);color:var(--text-muted)}.dashboard-summary-skill-detail-error{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-xs);color:var(--color-error)}.dashboard-summary-skill-detail-content{margin:0;padding:var(--space-sm);border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--card);color:var(--text);white-space:pre-wrap;word-break:break-word;max-height:calc(var(--space-2xl) * 6);overflow:auto}.dashboard-summary-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(calc(var(--space-xl) * 6 + var(--space-sm)),1fr));gap:var(--space-md)}.dashboard-summary-grid p{margin:0}.dashboard-summary-label{font-size:calc(var(--space-sm) + var(--space-xs) * .5);color:var(--text-muted)}.dashboard-summary-health-row{display:inline-flex;align-items:center;gap:var(--space-xs)}.dashboard-summary-health-reason{margin-left:var(--space-xs);font-size:var(--space-md)}.runs-list{display:flex;flex-direction:column;gap:var(--space-sm)}.run-item{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:var(--space-sm)}.dashboard-section{background:var(--bg-secondary);border-radius:var(--radius-md);padding:calc(var(--space-lg) + var(--space-xs))}.dashboard-section h3{font-size:calc(var(--space-md) + var(--space-xs) * .5);font-weight:600;margin:0 0 var(--space-lg) 0;color:var(--text-muted);text-transform:uppercase;letter-spacing:calc(var(--space-xs) * .125)}.info-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(var(--space-xl) * 7 + var(--space-sm)),1fr));gap:var(--space-lg)}.info-item{display:flex;flex-direction:column;gap:var(--space-xs)}.info-label{font-size:var(--space-md);color:var(--text-muted)}.info-value{font-size:calc(var(--space-md) + var(--space-xs) * .5);font-weight:500}.inline-badge{display:inline-block;padding:calc(var(--space-xs) * .5) var(--space-sm);border-radius:var(--radius-sm);font-size:var(--space-md);text-transform:capitalize}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-lg)}.stat-card{background:var(--surface);border-radius:var(--radius-md);padding:var(--space-lg);text-align:center}.stat-value{font-size:calc(var(--space-lg) + var(--space-xs) * .5);font-weight:700;color:var(--todo)}.stat-label{font-size:calc(var(--space-sm) + var(--space-xs) * .5);color:var(--text-muted);margin-top:var(--space-xs)}.current-task{display:flex;align-items:center;gap:var(--space-md)}.task-badge{font-family:var(--font-mono);background:var(--surface);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);font-size:calc(var(--space-md) + var(--space-xs) * .25)}.metadata-json{background:var(--surface);padding:var(--space-md);border-radius:var(--radius-sm);font-size:var(--space-md);overflow-x:auto;margin:0}.logs-tab{display:flex;flex-direction:column;height:100%}.logs-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:var(--space-md);margin-bottom:var(--space-md);border-bottom:1px solid var(--border)}.logs-count{font-size:var(--space-md);color:var(--text-muted)}.log-window-loader{display:flex;justify-content:center;padding-bottom:var(--space-sm)}.streaming-indicator{display:flex;align-items:center;gap:calc(var(--space-xs) + var(--space-sm) * .25);font-size:var(--space-md);color:var(--color-success)}.streaming-dot{width:var(--space-sm);height:var(--space-sm);background:var(--color-success);border-radius:50%;animation:pulse 1.5s infinite}.logs-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:calc(var(--space-2xl) + var(--space-lg));color:var(--text-muted);text-align:center}.logs-empty p{margin:var(--space-sm) 0 0 0}.agent-mail-tab{display:flex;flex-direction:column;gap:var(--space-md)}.agent-mail-tab-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.agent-mail-tab-header h3{margin:0;font-size:calc(var(--space-md) + var(--space-xs) * .5)}.agent-mail-tab-error{display:flex;align-items:center;gap:var(--space-xs);color:var(--color-error)}.agent-detail-loading--inline{flex-direction:row;justify-content:flex-start;padding:var(--space-md) 0}.agent-mail-tab .agent-mail-tab-message{width:100%;border:0;background:transparent;text-align:left;color:inherit;cursor:pointer}.agent-mail-tab .agent-mail-tab-message:hover{background:var(--card-hover)}.agent-mail-tab .agent-mail-tab-message:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.agent-mail-tab .agent-mail-tab-message--selected{background:color-mix(in srgb,var(--todo) 12%,transparent)}.agent-mail-tab .agent-mail-tab-detail{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.agent-mail-tab .agent-mail-tab-back{align-self:flex-start}.agent-mail-tab .agent-mail-tab-detail-meta{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-mail-tab .agent-mail-tab-detail-row{display:flex;flex-wrap:wrap;gap:var(--space-md)}.agent-mail-tab .agent-mail-tab-detail-label{color:var(--text-muted);min-width:calc(var(--space-2xl) * 2)}.agent-mail-tab .agent-mail-tab-reply-context{color:var(--text-muted)}.agent-mail-tab .agent-mail-tab-detail-body{white-space:pre-wrap;word-break:break-word}.runs-tab{display:flex;flex-direction:column;gap:var(--space-md)}.runs-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:calc(var(--space-2xl) + var(--space-lg));color:var(--text-muted);text-align:center}.runs-empty p{margin:var(--space-sm) 0 0 0}.run-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg)}.run-card--active{border-color:var(--in-progress);background:color-mix(in srgb,var(--in-progress) 5%,transparent)}.run-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-sm)}.run-live-indicator{display:flex;align-items:center;gap:calc(var(--space-xs) + var(--space-sm) * .25);font-weight:600;color:var(--in-progress)}.live-dot{width:var(--space-sm);height:var(--space-sm);background:var(--in-progress);border-radius:50%;animation:pulse 1.5s infinite}.run-id{font-family:var(--font-mono);font-size:calc(var(--space-md) + var(--space-xs) * .25);color:var(--text-muted)}.run-status{display:flex;align-items:center;gap:calc(var(--space-xs) + var(--space-sm) * .25);font-size:calc(var(--space-md) + var(--space-xs) * .25);text-transform:capitalize}.run-status.active{color:var(--in-progress)}.run-status.completed{color:var(--color-success)}.run-status.failed{color:var(--color-error)}.run-status.terminated{color:var(--text-muted)}.run-details{display:flex;gap:var(--space-sm);font-size:var(--space-md);color:var(--text-muted)}.run-logs-container{padding:var(--space-md);background:var(--bg-secondary);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.run-details-loading-state{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) 0}.run-output-sections{margin-bottom:var(--space-md)}.run-output-section{margin-bottom:var(--space-sm)}.run-output-label{margin-bottom:var(--space-xs);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;letter-spacing:calc(var(--space-xs) * .1);text-transform:uppercase}.run-output-label--error{color:var(--color-error)}.run-output-panel{margin:0;max-height:calc(var(--space-2xl) * 6.25);overflow:auto;border-radius:var(--radius-sm);padding:var(--space-sm) var(--space-md);background:var(--surface);border:1px solid var(--border);white-space:pre-wrap;word-break:break-word;font-size:calc(var(--space-sm) + var(--space-xs));line-height:1.5}.run-output-panel--error{color:var(--color-error);border-color:color-mix(in srgb,var(--color-error) 35%,var(--border));background:color-mix(in srgb,var(--color-error) 10%,transparent)}.run-context-grid{display:flex;flex-wrap:wrap;gap:var(--space-xs) var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs))}.run-context-item{line-height:1.5}.run-output-empty{padding:var(--space-sm) 0;font-style:italic;font-size:calc(var(--space-sm) + var(--space-xs))}.prompt-size-summary{display:flex;align-items:center;gap:var(--space-sm)}.prompt-size-sparkline{width:calc(var(--space-2xl) * 2);height:calc(var(--space-xl) + var(--space-md));border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface)}.prompt-size-sparkline-grid{fill:none;stroke:var(--text-muted);stroke-width:1}.prompt-size-sparkline-line{fill:none;stroke:var(--accent);stroke-width:2}.prompt-size-values{font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.run-agent-logs-section{margin-top:var(--space-xs);padding-top:var(--space-sm);border-top:1px solid var(--border)}.agent-tasks-list{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-task-item{display:flex;flex-direction:column;gap:calc(var(--space-xs) + var(--space-sm) * .25);padding:var(--space-md) calc(var(--space-md) + var(--space-xs) * .5);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-secondary);text-decoration:none;transition:background var(--transition-fast),border-color var(--transition-fast)}.agent-task-item:hover{background:var(--card-hover);border-color:var(--text-dim)}.agent-task-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.agent-task-id{font-family:var(--font-mono);font-size:var(--space-md);font-weight:600;color:var(--todo)}.agent-task-title{font-size:calc(var(--space-md) + var(--space-xs) * .5);font-weight:500;color:var(--text);line-height:1.4}.agent-task-status{font-size:var(--space-md);color:var(--text-muted)}.agent-task-column{display:inline-flex;align-items:center;padding:calc(var(--space-xs) * .5) var(--space-sm);border-radius:var(--radius-pill);font-size:calc(var(--space-sm) + var(--space-xs) * .5);font-weight:700;text-transform:uppercase;letter-spacing:calc(var(--space-xs) * .1)}.agent-task-column.column-triage{color:var(--triage);background:color-mix(in srgb,var(--triage) 18%,transparent)}.agent-task-column.column-todo{color:var(--todo);background:color-mix(in srgb,var(--todo) 18%,transparent)}.agent-task-column.column-in-progress{color:var(--in-progress);background:color-mix(in srgb,var(--in-progress) 18%,transparent)}.agent-task-column.column-in-review{color:var(--in-review);background:color-mix(in srgb,var(--in-review) 18%,transparent)}.agent-task-column.column-done{color:var(--done);background:color-mix(in srgb,var(--done) 18%,transparent)}.agent-task-column.column-archived{color:var(--text-muted);background:color-mix(in srgb,var(--text-muted) 18%,transparent)}.agent-tasks-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:calc(var(--space-2xl) + var(--space-lg));color:var(--text-muted);text-align:center}.agent-tasks-empty p{margin:0}.config-tab{display:flex;flex-direction:column;gap:var(--space-xl);color:var(--text)}.config-section{background:var(--bg-secondary);border:1px solid var(--border-subtle);border-radius:var(--radius-md);padding:calc(var(--space-md) + var(--space-sm));color:var(--text)}.config-section .input,.config-section .select,.config-section textarea{background:var(--surface);color:var(--text);border-color:var(--border)}.config-section .input::placeholder,.config-section textarea::placeholder{color:var(--text-dim)}.config-section .input:hover:not(:disabled):not([readonly]),.config-section .select:hover:not(:disabled),.config-section textarea:hover:not(:disabled):not([readonly]){border-color:var(--text-muted)}.config-section .input:focus-visible,.config-section .select:focus-visible,.config-section textarea:focus-visible,.config-section input[type=checkbox]:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.config-section .input:disabled,.config-section .select:disabled,.config-section textarea:disabled,.config-section .btn:disabled,.config-runtime-tab:disabled,.agent-avatar-editor-action:disabled{opacity:var(--opacity-disabled, .6);color:var(--text-muted);cursor:not-allowed}.config-section .input[readonly],.config-section textarea[readonly]{background:var(--surface-muted);color:var(--text-muted)}.config-section input[type=checkbox]{accent-color:var(--todo)}.agent-avatar-editor-actions .agent-avatar-editor-action{background:var(--card);color:var(--text);border-color:var(--border)}.agent-avatar-editor-actions .agent-avatar-editor-action:hover:not(:disabled){background:var(--card-hover);border-color:var(--text-muted)}.agent-avatar-editor-actions .agent-avatar-editor-action:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.config-section h3{font-size:calc(var(--space-md) + var(--space-xs));font-weight:600;margin:0 0 var(--space-sm) 0}.config-section--danger{border:1px solid color-mix(in srgb,var(--color-error) 40%,transparent)}.config-danger-note{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted)}.agent-content-toolbar{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-lg);border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}.agent-content-mode-toggle{display:flex;align-items:center;gap:var(--space-xs)}.agent-content-mode-toggle .btn{display:inline-flex;align-items:center;gap:calc(var(--space-xs) + var(--space-sm) * .25)}.agent-content-preview{overflow-y:auto;padding:var(--space-lg);min-height:150px}.agent-content-placeholder{color:var(--text-muted);text-align:center;padding:var(--space-xl);min-height:150px;display:flex;align-items:center;justify-content:center}.config-description{font-size:calc(var(--space-md) + var(--space-xs) * .5);color:var(--text-muted);margin:0 0 calc(var(--space-md) + var(--space-sm)) 0}.config-actions-row{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md)}.config-fields{display:flex;flex-direction:column;gap:var(--space-lg)}.config-field{display:flex;flex-direction:column;gap:calc(var(--space-xs) + var(--space-sm) * .25)}.config-field label{font-size:calc(var(--space-md) + var(--space-xs) * .25);font-weight:500}.agent-avatar-editor{display:flex;align-items:center;gap:var(--space-md)}.agent-avatar-editor-preview{background:var(--card)}.agent-avatar-editor-actions{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.config-runtime-tabs{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);margin-bottom:var(--space-md)}.config-runtime-tab{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);color:var(--text-muted);padding:var(--space-sm) var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast)}.config-runtime-tab:hover{border-color:var(--todo);color:var(--text);background:var(--card-hover)}.config-runtime-tab:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.config-runtime-tab.active{border-color:var(--todo);color:var(--text);background:color-mix(in srgb,var(--todo) 12%,transparent)}.config-hint{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);font-style:italic}.config-error{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--color-error)}.input--error{border-color:var(--color-error)!important}.config-actions{display:flex;align-items:center;gap:var(--space-md);margin-top:calc(var(--space-md) + var(--space-sm));padding-top:var(--space-lg);border-top:1px solid var(--border)}.config-saved-indicator{display:flex;align-items:center;gap:calc(var(--space-sm) - var(--space-xs) * .5);font-size:calc(var(--space-md) + var(--space-xs) * .25);color:var(--color-success)}.config-saved-indicator--error{color:var(--color-error)}.heartbeat-procedure-actions{margin-top:var(--space-sm)}.heartbeat-procedure-viewer{margin-top:var(--space-lg)}.heartbeat-procedure-status{display:inline-flex;align-items:center;gap:var(--space-xs);margin-left:auto}.heartbeat-procedure-status--warning{color:var(--color-warning)}.rating-summary-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);padding:calc(var(--space-md) + var(--space-sm));display:flex;flex-direction:column;gap:var(--space-md)}.rating-score-display{display:flex;align-items:center;gap:var(--space-md)}.rating-average{font-size:var(--space-2xl);font-weight:700;line-height:1}.rating-stats{display:flex;align-items:center;gap:var(--space-md)}.rating-count{font-size:calc(var(--space-md) + var(--space-xs) * .5);color:var(--text-muted)}.rating-trend-badge{font-size:var(--space-md);padding:var(--space-xs) calc(var(--space-md) - var(--space-xs) * .5);border-radius:var(--radius-lg);font-weight:500}.trend-improving{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.trend-declining{background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error)}.trend-stable{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.trend-insufficient{background:var(--bg-tertiary);color:var(--text-muted)}.category-breakdown{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg)}.category-breakdown h4{margin:0 0 var(--space-md) 0;font-size:calc(var(--space-md) + var(--space-xs) * .25);font-weight:600}.category-breakdown .category-item{display:flex;justify-content:space-between;align-items:center;padding:var(--space-sm) 0;border-bottom:1px solid var(--border)}.category-breakdown .category-item:last-child{border-bottom:none}.category-name{text-transform:capitalize;font-size:calc(var(--space-md) + var(--space-xs) * .25)}.category-score{font-weight:600;font-size:calc(var(--space-md) + var(--space-xs) * .25)}.add-rating-form{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-md)}.add-rating-form h4{margin:0;font-size:calc(var(--space-md) + var(--space-xs) * .25);font-weight:600}.star-selector{display:flex;gap:var(--space-xs)}.star-btn{background:none;border:none;padding:var(--space-xs);cursor:pointer;border-radius:var(--radius-sm);color:var(--text-muted);transition:background-color var(--transition-fast),color var(--transition-fast)}.star-btn:hover{background:var(--card-hover)}.star-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.rating-stars{display:inline-flex;gap:var(--space-xs)}.rating-stars .star-filled{color:var(--color-warning)}.rating-stars .star-empty{color:var(--text-muted)}.add-rating-form .add-rating-category-select,.add-rating-form .add-rating-comment-input{width:100%}.add-rating-form .add-rating-comment-input{resize:vertical;min-height:calc(var(--space-xl) + var(--space-2xl))}.rating-history{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg);max-height:calc(var(--space-xl) * 12 + var(--space-md));overflow-y:auto}.rating-history h4{margin:0 0 var(--space-md) 0;font-size:calc(var(--space-md) + var(--space-xs) * .25);font-weight:600}.rating-history .no-ratings{color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) * .25);text-align:center;padding:var(--space-lg)}.rating-history-item{padding:var(--space-md) 0;border-bottom:1px solid var(--border)}.rating-history-item:last-child{border-bottom:none}.rating-item-header{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.rating-category-badge{font-size:calc(var(--space-sm) + var(--space-xs) * .5);padding:calc(var(--space-xs) * .5) var(--space-sm);background:var(--card-hover);border-radius:var(--radius-pill);text-transform:capitalize}.rating-time{font-size:calc(var(--space-sm) + var(--space-xs) * .5);color:var(--text-muted);margin-left:auto}.rating-delete-btn{background:none;border:none;padding:var(--space-xs);cursor:pointer;color:var(--text-muted);border-radius:var(--radius-sm);transition:color var(--transition-fast),background-color var(--transition-fast)}.rating-delete-btn:hover{color:var(--color-error);background:color-mix(in srgb,var(--color-error) 10%,transparent)}.rating-comment{margin:var(--space-sm) 0 0 0;font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted);line-height:1.4}.runs-loading-row{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl)}.runs-toolbar{padding:var(--space-sm) var(--space-lg);border-bottom:1px solid var(--border)}.runs-toolbar--between{display:flex;justify-content:space-between;align-items:center}.runs-toolbar-meta{font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.run-card--clickable{cursor:pointer}.run-card--clickable:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.run-header-group{display:flex;align-items:center;gap:var(--space-sm)}.run-badge--compact{font-size:calc(var(--space-sm) + var(--space-xs) * .5);padding:calc(var(--space-xs) * .25) calc(var(--space-sm) * .75)}.run-output-summary{cursor:pointer;user-select:none}.run-live-indicator--with-margin{margin-left:var(--space-sm)}.detail-section-body--loading{display:flex;align-items:center;gap:var(--space-sm)}.agent-empty--padded{padding:var(--space-xl)}.logs-fallback-label{font-size:calc(var(--space-sm) + var(--space-xs))}.config-textarea-mono{font-family:var(--font-mono);font-size:calc(var(--space-md) + var(--space-xs) * .25);resize:vertical}.config-textarea-top-spacing{margin-top:var(--space-sm)}.config-hint--block-spacing{margin-bottom:var(--space-md)}.config-hint--block{display:block;margin-bottom:var(--space-sm)}.config-hint--top-spacing{margin-top:var(--space-sm)}.config-hint--inline-loader{display:inline-flex;gap:var(--space-xs);margin-top:var(--space-sm)}.config-inline-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-sm)}.config-hint--inline-tight{display:flex;align-items:center;gap:var(--space-xs)}.config-hint--warning{color:var(--color-warning)}.agent-heartbeat-auto-claim-card{background:color-mix(in srgb,var(--surface) 60%,transparent);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md)}.agent-heartbeat-preset-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-sm)}.agent-heartbeat-preset-label{display:block;color:var(--text);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;margin-bottom:calc(var(--space-xs) * .5)}.agent-heartbeat-preset-btn{min-height:calc(var(--space-xl) + var(--space-md));flex-shrink:0}@media(max-width:768px){.agent-heartbeat-preset-row{flex-direction:column;align-items:stretch}.agent-heartbeat-preset-btn{width:100%;min-height:calc(var(--space-xl) + var(--space-md))}.config-runtime-tabs{grid-template-columns:1fr}.config-runtime-tab{min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.agent-avatar-editor-actions{flex-direction:column;align-items:stretch}.agent-avatar-editor-actions .agent-avatar-editor-action{width:100%;justify-content:center}.skill-multiselect,.skill-multiselect-dropdown,.skill-multiselect-chips{width:100%}.skill-chip{max-width:100%}.agent-detail-overlay{padding:0;align-items:stretch}.agent-detail-modal{min-width:0!important;min-height:0!important;width:100vw!important;height:100dvh!important;max-width:100vw!important;max-height:100dvh;margin:0;border-radius:0;border:none;resize:none}.agent-detail-header{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:var(--space-sm);row-gap:var(--space-sm);padding:var(--space-md);padding-top:max(var(--space-md),env(safe-area-inset-top,0))}.agent-detail-identity{grid-column:1;grid-row:1;flex:1 1 auto;min-width:0;gap:var(--space-md)}.agent-detail-icon{width:calc(var(--space-lg) * 2);height:calc(var(--space-lg) * 2);flex-shrink:0}.agent-detail-icon svg{width:calc(var(--space-sm) + var(--space-xs) * 2);height:calc(var(--space-sm) + var(--space-xs) * 2)}.agent-detail-info h2{font-size:calc(var(--space-md) + var(--space-xs) * .75);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agent-detail-badges{flex-wrap:wrap;row-gap:var(--space-xs);column-gap:var(--space-sm);margin-top:var(--space-xs)}.agent-detail-header-actions{grid-column:2;grid-row:1;flex:0 0 auto;justify-content:flex-end;gap:calc(var(--space-xs) * .5)}.agent-detail-controls{flex:0 0 auto;gap:calc(var(--space-xs) * .5)}.agent-detail-controls .btn--compact{padding:calc(var(--space-sm) - var(--space-xs) * .5) calc(var(--space-md) - var(--space-xs) * .5);font-size:var(--space-md);min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.agent-detail-controls .agent-detail-mobile-icon-control{min-width:calc(var(--space-lg) + var(--space-md) + var(--space-xs));padding-left:calc(var(--space-sm) - var(--space-xs) * .5);padding-right:calc(var(--space-sm) - var(--space-xs) * .5)}.agent-detail-controls .agent-detail-mobile-icon-control .agent-detail-control-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.agent-detail-controls .btn--compact svg{width:calc(var(--space-md) + var(--space-xs) * .5);height:calc(var(--space-md) + var(--space-xs) * .5)}.agent-detail-utility-actions{flex-shrink:0;margin-left:0}.agent-detail-bulk-menu-popover{right:0}.agent-detail-utility-actions .btn-icon{min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs));min-width:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.agent-detail-import-btn{min-width:calc(var(--space-xl) * 3 + var(--space-xs))}.agent-detail-title{flex:1 1 auto;min-width:0;gap:var(--space-md)}.agent-detail-actions{flex:1 1 100%;flex-wrap:wrap;gap:calc(var(--space-xs) + var(--space-sm) * .25)}.agent-detail-actions .btn{padding:calc(var(--space-sm) - var(--space-xs) * .5) calc(var(--space-md) - var(--space-xs) * .5);font-size:calc(var(--space-md) + var(--space-xs) * .25);min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.agent-detail-actions .btn svg{width:calc(var(--space-sm) + var(--space-xs) * 1.5);height:calc(var(--space-sm) + var(--space-xs) * 1.5)}.agent-detail-actions .btn-icon{min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs));min-width:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.agent-detail-tabs{padding:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.agent-detail-tabs::-webkit-scrollbar{display:none}.agent-detail-tab{padding:var(--space-md) calc(var(--space-md) + var(--space-xs) * .5);font-size:.875rem;touch-action:pan-x pan-y;white-space:nowrap;min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.agent-detail-content{padding:var(--space-lg);-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.agent-detail-footer{flex-wrap:wrap;gap:var(--space-sm);padding:var(--space-sm) var(--space-lg);padding-bottom:max(var(--space-sm),env(safe-area-inset-bottom,0));font-size:calc(var(--space-sm) + var(--space-xs) * .75)}.agent-detail-id{max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-tab{gap:var(--space-lg)}.dashboard-summary-hero__heading{flex-wrap:wrap;row-gap:var(--space-sm);column-gap:var(--space-md)}.dashboard-summary-hero__meta{align-items:flex-start;row-gap:var(--space-lg);column-gap:var(--space-md)}.dashboard-summary-hero__health{overflow-wrap:anywhere}.dashboard-summary-skills{flex-direction:column;align-items:flex-start;row-gap:var(--space-sm)}.dashboard-summary-skill-detail-header{flex-direction:column;align-items:flex-start}.dashboard-section{padding:var(--space-lg)}.info-grid{grid-template-columns:repeat(2,1fr);gap:var(--space-md)}.stats-grid{grid-template-columns:repeat(3,1fr);gap:var(--space-md)}.stat-value{font-size:calc(var(--space-lg) + var(--space-xs) * .5)}.logs-empty{padding:var(--space-2xl) var(--space-lg)}.agent-mail-tab-header{flex-direction:column;align-items:flex-start}.agent-mail-tab .mailbox-agent-subtabs{width:100%}.agent-mail-tab .mailbox-agent-subtab{flex:1}.agent-mail-tab .agent-mail-tab-detail{width:100%;padding:var(--space-md)}.agent-mail-tab .agent-mail-tab-back{min-height:calc(var(--space-lg) * 2 + var(--space-xs))}.run-card{padding:var(--space-md)}.run-header{flex-wrap:wrap;gap:calc(var(--space-xs) + var(--space-sm) * .25)}.run-details{flex-wrap:wrap}.run-logs-container{padding:var(--space-sm)}.run-output-panel{max-height:calc(var(--space-2xl) * 5)}.run-context-grid{flex-direction:column;gap:var(--space-xs)}.run-details .text-muted{min-width:0;overflow-wrap:anywhere}.config-tab{gap:var(--space-lg)}.config-section{padding:var(--space-lg)}.config-section .input,.config-section .select,.config-section textarea{font-size:calc(var(--space-md) + var(--space-xs));min-height:calc(var(--space-lg) + var(--space-md) + var(--space-xs))}.config-actions{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.config-actions .btn{width:100%;justify-content:center}.heartbeat-procedure-status{margin-left:0}}@media(max-width:480px){.dashboard-summary-card{padding:var(--space-md)}.dashboard-summary-hero__heading{row-gap:var(--space-md)}.dashboard-summary-hero__meta{row-gap:var(--space-lg);column-gap:var(--space-sm)}.info-grid,.stats-grid{grid-template-columns:1fr}.agent-detail-actions{flex-direction:column;width:100%}.agent-detail-actions .btn{width:100%;justify-content:center}.agent-detail-actions .btn-icon{align-self:flex-end}.config-actions,.agent-avatar-editor-actions{width:100%}.config-runtime-tabs,.skill-multiselect{gap:var(--space-xs)}.agent-detail-footer .divider,.agent-detail-footer .text-muted,.agent-detail-footer .link{display:none}}@media(max-width:768px){.agent-avatar-editor{flex-direction:column;align-items:flex-start}.agent-avatar-editor-actions{width:100%}.agent-avatar-editor-actions .btn{min-height:calc(var(--space-lg) * 2 + var(--space-xs))}.agent-dialog-overlay{padding:0;align-items:stretch}.agent-dialog{width:100vw!important;height:100dvh;max-width:100%!important;max-height:100dvh;border-radius:0;border:none}.agent-dialog-header{padding:max(var(--space-md),env(safe-area-inset-top,0px)) var(--space-lg) var(--space-md) var(--space-lg);flex-shrink:0}.agent-dialog-body{padding:var(--space-lg);-webkit-overflow-scrolling:touch}.agent-dialog-footer{padding:var(--space-md) var(--space-lg);padding-bottom:max(var(--space-md),env(safe-area-inset-bottom,0px));flex-wrap:wrap;gap:var(--space-sm)}.agent-dialog-field .input,.agent-dialog-field .select,.agent-dialog-field textarea{font-size:calc(var(--space-md) + var(--space-xs));min-height:calc(var(--space-lg) * 2 + var(--space-xs))}.agent-dialog-summary-row{flex-direction:column;gap:calc(var(--space-xs) * .5)}.agent-dialog-summary-row>span:first-child,.agent-dialog-summary-row-label{width:auto}.agent-dialog-steps{padding:var(--space-sm) var(--space-lg)}.agent-dialog-step{flex:1;width:auto;height:calc(var(--space-xs) - var(--space-xs) * .25)}.agent-dialog-tabs{grid-template-columns:1fr;gap:calc(var(--space-sm) - var(--space-xs) * .5);margin-bottom:var(--space-md)}.agent-dialog-tab{min-height:calc(var(--space-lg) * 2 + var(--space-xs));text-align:left}.agent-import-file-upload{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.agent-import-textarea{font-size:calc(var(--space-md) + var(--space-xs));min-height:calc(var(--space-xl) * 4 + var(--space-xs))}.agent-import-agent-list{max-height:calc(100dvh - (var(--space-xl) * 10 + var(--space-lg)))}.agent-import-result-stats{flex-direction:column;gap:var(--space-sm);align-items:center}.agent-import-browse-list{max-height:calc(100dvh - (var(--space-xl) * 10 + var(--space-lg)))}.agent-import-skill-list{max-height:calc(100dvh - (var(--space-xl) * 15 + var(--space-md)))}}@media(max-width:480px){.agent-dialog-body{padding:var(--space-md)}.agent-dialog-footer{flex-direction:column}.agent-dialog-footer .btn{width:100%;justify-content:center}}.agent-permission-inherit-banner{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);margin-bottom:var(--space-sm)}.agent-capability-grants{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-md)}.agent-capability-grants h4{margin:0;color:var(--text-primary);font-size:var(--font-size-md)}.agent-capability-grants-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--size-card-min, 16rem)),1fr));gap:var(--space-sm)}.agent-capability-grant-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.agent-capability-grant-name{display:block;color:var(--text-primary);font-weight:600}@media(max-width:768px){.agent-capability-grants-grid{grid-template-columns:1fr}.agent-capability-grant-row,.agent-permission-inherit-banner{align-items:flex-start;flex-direction:column}}.agent-memory-file-editor{border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;display:flex;flex-direction:column;min-height:320px;max-height:55vh}.agent-memory-file-editor .cm-editor{height:100%;min-height:0}.agent-memory-file-editor .cm-scroller{overflow:auto}.reflections-tab{padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-lg)}.reflections-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}.reflections-header h3{display:flex;align-items:center;gap:var(--space-sm);font-size:1rem;font-weight:600;color:var(--text)}.reflections-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--space-md)}.reflections-stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);text-align:center}.reflections-stat-card .stat-value{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);font-size:1.5rem;font-weight:700;color:var(--text);margin-bottom:var(--space-xs)}.reflections-stat-card .stat-label{font-size:.75rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.reflections-no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl);color:var(--text-muted);text-align:center}.reflections-list{display:flex;flex-direction:column;gap:var(--space-md)}.reflections-loading-indicator{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-lg)}.reflections-ratings-section{display:flex;flex-direction:column;gap:var(--space-md)}.reflections-ratings-section>h4,.reflections-list h4{font-size:.875rem;font-weight:600;color:var(--text);margin-bottom:var(--space-xs)}.reflection-cards{display:flex;flex-direction:column;gap:var(--space-sm)}.reflection-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);cursor:pointer;transition:border-color .15s,background-color .15s}.reflection-card:hover{border-color:var(--border);background:var(--card-hover)}.reflection-card:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.reflection-card--expanded{border-color:var(--accent)}.reflection-card-header{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm)}.reflection-trigger-badge{font-size:.7rem;font-weight:600;padding:2px 6px;border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.05em}.reflection-trigger-periodic{background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.reflection-trigger-post-task{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.reflection-trigger-manual{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent)}.reflection-trigger-user-requested{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.reflection-timestamp{font-size:.75rem;color:var(--text-muted);flex:1}.reflection-chevron{color:var(--text-muted)}.reflection-summary{font-size:.875rem;color:var(--text);line-height:1.5}.reflection-details{margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--border);display:flex;flex-direction:column;gap:var(--space-md)}.reflection-insights h5,.reflection-suggestions h5{display:flex;align-items:center;gap:var(--space-xs);font-size:.8rem;font-weight:600;color:var(--text);margin-bottom:var(--space-xs)}.reflection-insights ul,.reflection-suggestions ul{list-style:none;display:flex;flex-direction:column;gap:var(--space-xs)}.reflection-insights li,.reflection-suggestions li{font-size:.8rem;color:var(--text-muted);padding-left:var(--space-md);position:relative}.reflection-insights li:before{content:"•";position:absolute;left:4px;color:var(--color-success)}.reflection-suggestions li:before{content:"→";position:absolute;left:0;color:var(--accent)}.reflection-metrics{background:var(--bg);border-radius:var(--radius-sm);padding:var(--space-sm)}.reflection-metrics h5{font-size:.75rem;font-weight:600;color:var(--text-muted);margin-bottom:var(--space-xs)}.metrics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:var(--space-sm)}.metric{display:flex;flex-direction:column;gap:2px}.metric-label{font-size:.7rem;color:var(--text-muted)}.metric-value{font-size:.875rem;font-weight:600;color:var(--text)}.reflection-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-2xl);color:var(--text-muted);text-align:center}.reflection-empty p{font-size:.875rem}@media(max-width:768px){.reflections-header{flex-wrap:wrap;align-items:flex-start}.reflections-header .btn{width:100%;justify-content:center}}.budget-progress-container{margin-top:var(--space-xs)}.budget-progress-bar{width:100%;height:var(--space-sm);background:var(--surface);border-radius:var(--radius-sm);overflow:hidden;margin-top:var(--space-xs)}.budget-progress-bar__fill{height:100%;border-radius:var(--radius-sm);transition:width var(--transition-slow),background-color var(--transition-slow)}.budget-progress-bar__fill--green{background:var(--color-success)}.budget-progress-bar__fill--amber{background:var(--color-warning)}.budget-progress-bar__fill--red{background:var(--color-error)}.budget-progress-label{font-size:.75rem;color:var(--text-muted);margin-top:var(--space-xs);display:block}.budget-badge{display:inline-flex;align-items:center;gap:var(--space-xs);padding:calc(var(--space-xs) / 2) var(--space-sm);border-radius:var(--radius-pill);font-size:.75rem;font-weight:500}.budget-warning-banner{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);background:var(--state-error-bg, color-mix(in srgb, var(--color-error) 15%, transparent));color:var(--state-error-text);border:1px solid var(--state-error-border);font-size:.875rem;margin-bottom:var(--space-md)}.btn-reset-budget{margin-top:var(--space-sm)}
@@ -1,4 +1,4 @@
1
- import{c as B}from"./index-C2xsZoNG.js";import{r as h,j as e}from"./vendor-react-SZ_qB27O.js";import{u as F}from"./vendor-i18n-GF3RlKbq.js";/**
1
+ import{c as B}from"./index-8wtfjIkg.js";import{r as h,j as e}from"./vendor-react-SZ_qB27O.js";import{u as F}from"./vendor-i18n-GF3RlKbq.js";/**
2
2
  * @license lucide-react v1.7.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.