@runfusion/fusion 0.44.0 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/README.md +2 -1
  2. package/dist/bin.js +6902 -2143
  3. package/dist/client/.vite/manifest.json +1115 -328
  4. package/dist/client/assets/AgentDetailView-CgbB51Iw.css +1 -0
  5. package/dist/client/assets/AgentDetailView-DJTi6hKC.js +18 -0
  6. package/dist/client/assets/{AgentPermissionPolicyEditor--YS4iMUY.js → AgentPermissionPolicyEditor-C5DR9dUS.js} +2 -2
  7. package/dist/client/assets/AgentsView-BNd90PSx.js +29 -0
  8. package/dist/client/assets/AgentsView-CzMa5Olf.css +1 -0
  9. package/dist/client/assets/ChatView-B7JaZCL_.js +19 -0
  10. package/dist/client/assets/ChatView-BtjkE0V7.css +1 -0
  11. package/dist/client/assets/CommandCenter-CHO21xEW.js +74 -0
  12. package/dist/client/assets/CommandCenter-Xs5Ftv8s.css +1 -0
  13. package/dist/client/assets/DevServerView-B_p91Mj_.css +1 -0
  14. package/dist/client/assets/DevServerView-H9OkT1ld.js +1 -0
  15. package/dist/client/assets/DirectoryPicker-DegxT8ia.js +1 -0
  16. package/dist/client/assets/DocumentsView-kVVQYISc.js +1 -0
  17. package/dist/client/assets/EvalsView-C9-iTSat.js +1 -0
  18. package/dist/client/assets/EvalsView-CTbgPUne.css +1 -0
  19. package/dist/client/assets/ExperimentalAgentOnboardingModal-3ZEFv8sr.css +1 -0
  20. package/dist/client/assets/ExperimentalAgentOnboardingModal-DjP_xNkc.js +1 -0
  21. package/dist/client/assets/GoalsView-CUh8JBnJ.css +1 -0
  22. package/dist/client/assets/GoalsView-VoIHJJ5l.js +2 -0
  23. package/dist/client/assets/InsightsView-BIZaUcpd.js +11 -0
  24. package/dist/client/assets/InsightsView-C7yRTMPn.css +1 -0
  25. package/dist/client/assets/MemoryView-7v7rv6ns.js +2 -0
  26. package/dist/client/assets/MemoryView-CBDUr2Jy.css +1 -0
  27. package/dist/client/assets/PiExtensionsManager-CB89rV4U.js +11 -0
  28. package/dist/client/assets/PluginManager-BNSuW_R4.js +1 -0
  29. package/dist/client/assets/PullRequestView-CI5jdKBL.js +6 -0
  30. package/dist/client/assets/PullRequestView-CpdE3Yo_.css +1 -0
  31. package/dist/client/assets/ResearchView-BT5dR_m8.js +1 -0
  32. package/dist/client/assets/ResearchView-DIVNQF4_.css +1 -0
  33. package/dist/client/assets/SecretsView-CvFioX7R.css +1 -0
  34. package/dist/client/assets/SecretsView-WPYI58Uo.js +1 -0
  35. package/dist/client/assets/SessionTerminal-C6gyOWLt.js +2 -0
  36. package/dist/client/assets/SessionTerminal-D4R3ScvQ.css +1 -0
  37. package/dist/client/assets/SettingsModal-BESN59Ao.css +1 -0
  38. package/dist/client/assets/SettingsModal-BZokaNyx.css +1 -0
  39. package/dist/client/assets/SettingsModal-Bq_3AbaB.js +1 -0
  40. package/dist/client/assets/SettingsModal-JHACoQJe.js +21 -0
  41. package/dist/client/assets/SetupWizardModal-CrgbnR_d.js +2 -0
  42. package/dist/client/assets/ShadcnColorPicker-1icHuwhC.js +11 -0
  43. package/dist/client/assets/ShadcnColorPicker-pqVWCC5-.css +1 -0
  44. package/dist/client/assets/SkillsView-CJ8snrma.css +1 -0
  45. package/dist/client/assets/SkillsView-byuSe3e0.js +1 -0
  46. package/dist/client/assets/TodoView-CIsL_uvQ.css +1 -0
  47. package/dist/client/assets/TodoView-CQ9GjYBg.js +6 -0
  48. package/dist/client/assets/WorkflowNodeEditor-DW7sJZUX.js +8 -0
  49. package/dist/client/assets/WorkflowNodeEditor-f_XPV5Jd.css +1 -0
  50. package/dist/client/assets/{addon-fit-SnYDEvGm.js → addon-fit-C1WQXRvu.js} +1 -1
  51. package/dist/client/assets/{addon-unicode11-s5GoZCpi.js → addon-unicode11-BVmNDUBM.js} +1 -1
  52. package/dist/client/assets/{addon-web-links-jjt2f_oV.js → addon-web-links-CkVew5xs.js} +1 -1
  53. package/dist/client/assets/{addon-webgl-Icn-RnEx.js → addon-webgl-uLc0RKcC.js} +1 -1
  54. package/dist/client/assets/agentSkills-CeytXLHF.js +1 -0
  55. package/dist/client/assets/{ExperimentalAgentOnboardingModal-CZ_jbgep.css → agentSkills-bQJ4X1gH.css} +1 -1
  56. package/dist/client/assets/agentsOrgChartLayout-BMvyuaLA.js +1 -0
  57. package/dist/client/assets/app-3wbZ08YC.js +13 -0
  58. package/dist/client/assets/app-7-5DWLtg.js +13 -0
  59. package/dist/client/assets/app-CSvE5Noc.js +13 -0
  60. package/dist/client/assets/app-CZ2LTFce.js +13 -0
  61. package/dist/client/assets/app-Cv9xEnll.js +13 -0
  62. package/dist/client/assets/app-x_yPcO5Y.js +13 -0
  63. package/dist/client/assets/arc-cxkkNsnK.js +1 -0
  64. package/dist/client/assets/architectureDiagram-3BPJPVTR-BRI0QwDf.js +36 -0
  65. package/dist/client/assets/band-CquvqAHh.js +1 -0
  66. package/dist/client/assets/blockDiagram-GPEHLZMM-BXkN8Hv_.js +132 -0
  67. package/dist/client/assets/c4Diagram-AAUBKEIU-C_Kcokep.js +10 -0
  68. package/dist/client/assets/channel-Clzpzu32.js +1 -0
  69. package/dist/client/assets/chunk-2J33WTMH-BGeuCz9C.js +1 -0
  70. package/dist/client/assets/chunk-4BX2VUAB-DcVdctr0.js +1 -0
  71. package/dist/client/assets/chunk-55IACEB6-Dg6gDigQ.js +1 -0
  72. package/dist/client/assets/chunk-727SXJPM-B9B-vlEb.js +206 -0
  73. package/dist/client/assets/chunk-AQP2D5EJ-LrWQ-2yi.js +231 -0
  74. package/dist/client/assets/chunk-FMBD7UC4-Bnd6hAED.js +15 -0
  75. package/dist/client/assets/chunk-ND2GUHAM-nAw93UB5.js +1 -0
  76. package/dist/client/assets/chunk-QZHKN3VN-CgprKcZo.js +1 -0
  77. package/dist/client/assets/classDiagram-4FO5ZUOK-CzYHP-af.js +1 -0
  78. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CzYHP-af.js +1 -0
  79. package/dist/client/assets/common-BDp2y6CF.js +1 -0
  80. package/dist/client/assets/common-BnEo5fLN.js +1 -0
  81. package/dist/client/assets/common-Bzr_Y8h4.js +1 -0
  82. package/dist/client/assets/common-CvwyFzfv.js +1 -0
  83. package/dist/client/assets/common-CztCXRkz.js +1 -0
  84. package/dist/client/assets/common-DPe2mbb7.js +1 -0
  85. package/dist/client/assets/cose-bilkent-S5V4N54A-Bhn0g_iK.js +1 -0
  86. package/dist/client/assets/cytoscape.esm-OyMbaexL.js +331 -0
  87. package/dist/client/assets/dagre-BM42HDAG-CP4kfwqd.js +4 -0
  88. package/dist/client/assets/{dashboard-view-B4LXCv5H.js → dashboard-view-CM6Xin_H.js} +1680 -1620
  89. package/dist/client/assets/dashboard-view-DV1nEhh9.js +1 -0
  90. package/dist/client/assets/dashboard-view-D_zsA-kz.css +1 -0
  91. package/dist/client/assets/defaultLocale-DX6XiGOO.js +1 -0
  92. package/dist/client/assets/diagram-2AECGRRQ-DPhzVEUf.js +43 -0
  93. package/dist/client/assets/diagram-5GNKFQAL-8QOC3K_L.js +10 -0
  94. package/dist/client/assets/diagram-KO2AKTUF-C1twgEch.js +3 -0
  95. package/dist/client/assets/diagram-LMA3HP47-3bEegSuf.js +24 -0
  96. package/dist/client/assets/diagram-OG6HWLK6-BJ_x0rm6.js +24 -0
  97. package/dist/client/assets/erDiagram-TEJ5UH35-DNiiS5q6.js +85 -0
  98. package/dist/client/assets/flowDiagram-I6XJVG4X-DoouPklt.js +162 -0
  99. package/dist/client/assets/{folder-open-33WGVnbp.js → folder-open-CuUs2W7f.js} +1 -1
  100. package/dist/client/assets/ganttDiagram-6RSMTGT7-BrR6VnP5.js +292 -0
  101. package/dist/client/assets/gitGraphDiagram-PVQCEYII-BV8_J6Ee.js +106 -0
  102. package/dist/client/assets/graph--OzhPTMs.js +1 -0
  103. package/dist/client/assets/index-BZBQ_KsL.css +1 -0
  104. package/dist/client/assets/index-CZcWjLAb.js +1459 -0
  105. package/dist/client/assets/infoDiagram-5YYISTIA-DGwIIFkR.js +2 -0
  106. package/dist/client/assets/init-Dmth1JHB.js +1 -0
  107. package/dist/client/assets/ishikawaDiagram-YF4QCWOH-D5dEH4RE.js +70 -0
  108. package/dist/client/assets/journeyDiagram-JHISSGLW-BuuSWPw5.js +139 -0
  109. package/dist/client/assets/kanban-definition-UN3LZRKU-DA34uUla.js +89 -0
  110. package/dist/client/assets/katex-HP8lGamR.js +257 -0
  111. package/dist/client/assets/layout-SsrduOYp.js +1 -0
  112. package/dist/client/assets/linear-dXivciGL.js +1 -0
  113. package/dist/client/assets/mermaid.core-Ch4HatqA.js +309 -0
  114. package/dist/client/assets/mindmap-definition-RKZ34NQL-DUCG-qD3.js +96 -0
  115. package/dist/client/assets/ordinal-DILIJJjt.js +1 -0
  116. package/dist/client/assets/pieDiagram-4H26LBE5-DWvFGiLa.js +30 -0
  117. package/dist/client/assets/quadrantDiagram-W4KKPZXB-OPTVW3WT.js +7 -0
  118. package/dist/client/assets/requirementDiagram-4Y6WPE33-D7feZvlU.js +84 -0
  119. package/dist/client/assets/sankeyDiagram-5OEKKPKP-AtnSsEX1.js +40 -0
  120. package/dist/client/assets/sequenceDiagram-3UESZ5HK-BZjHUeI5.js +162 -0
  121. package/dist/client/assets/{shield-alert-CqeGWBUK.js → shield-alert-CzaF9ROV.js} +1 -1
  122. package/dist/client/assets/stateDiagram-AJRCARHV-C8j23Pvn.js +1 -0
  123. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CiZR_S5-.js +1 -0
  124. package/dist/client/assets/step-yuy0qJer.js +1 -0
  125. package/dist/client/assets/time-DoDTxsna.js +1 -0
  126. package/dist/client/assets/timeline-definition-PNZ67QCA-DvfNz25n.js +120 -0
  127. package/dist/client/assets/{upload-C11J2diI.js → upload-DTsYywhN.js} +1 -1
  128. package/dist/client/assets/{users-a-ELbyyZ.js → users-yAd09tKP.js} +1 -1
  129. package/dist/client/assets/{vendor-i18n-DYlSUfot.js → vendor-i18n-GF3RlKbq.js} +2 -2
  130. package/dist/client/assets/{vendor-react-BTgM5bbZ.js → vendor-react-SZ_qB27O.js} +1 -1
  131. package/dist/client/assets/vendor-reactflow-Bg-Qjzh8.js +15 -0
  132. package/dist/client/assets/{vendor-xterm-ea7-K05z.js → vendor-xterm-BNq00GSj.js} +1 -1
  133. package/dist/client/assets/vennDiagram-CIIHVFJN-CG2aMt3v.js +34 -0
  134. package/dist/client/assets/wardley-L42UT6IY-BnhBteen.js +173 -0
  135. package/dist/client/assets/wardleyDiagram-YWT4CUSO-DwqTzM3T.js +78 -0
  136. package/dist/client/assets/xychartDiagram-2RQKCTM6-5Cv2ZKMV.js +7 -0
  137. package/dist/client/assets/zoom-out-NWbVkreR.js +41 -0
  138. package/dist/client/index.html +30 -10
  139. package/dist/client/sw.js +1 -1
  140. package/dist/client/theme-data.css +3082 -206
  141. package/dist/client/version.json +1 -1
  142. package/dist/droid-cli/index.ts +56 -40
  143. package/dist/droid-cli/package.json +1 -1
  144. package/dist/droid-cli/src/__tests__/index.test.ts +47 -21
  145. package/dist/droid-cli/src/__tests__/process-manager.test.ts +50 -33
  146. package/dist/extension.js +4935 -827
  147. package/dist/pi-claude-cli/package.json +1 -1
  148. package/dist/pi-claude-cli/src/__tests__/process-manager.test.ts +25 -0
  149. package/dist/pi-claude-cli/src/process-manager.ts +11 -1
  150. package/dist/plugin-sdk/index.d.ts +126 -4
  151. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  152. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  153. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  154. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  155. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  156. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +68 -44
  157. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  158. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  159. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  160. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  161. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  162. package/dist/plugins/fusion-plugin-roadmap/bundled.js +5 -11
  163. package/dist/plugins/fusion-plugin-roadmap/manifest.json +1 -11
  164. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  165. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  166. package/package.json +3 -3
  167. package/skill/fusion/SKILL.md +1 -1
  168. package/skill/fusion/references/cli-commands.md +2 -1
  169. package/skill/fusion/references/extension-tools.md +10 -0
  170. package/skill/fusion/references/fusion-capabilities.md +3 -1
  171. package/dist/client/assets/AgentDetailView-CanIeYHg.css +0 -1
  172. package/dist/client/assets/AgentDetailView-DxV8pFHX.js +0 -18
  173. package/dist/client/assets/AgentsView-BVILQjdS.css +0 -1
  174. package/dist/client/assets/AgentsView-CTzbcvhK.js +0 -29
  175. package/dist/client/assets/ChatView-COygcnyk.js +0 -6
  176. package/dist/client/assets/ChatView-DwJAd5G1.css +0 -1
  177. package/dist/client/assets/CommandCenter-CTaopaC0.css +0 -1
  178. package/dist/client/assets/CommandCenter-DoKX2HWm.js +0 -56
  179. package/dist/client/assets/DevServerView-Cyevyvqx.js +0 -1
  180. package/dist/client/assets/DevServerView-VTQY28P7.css +0 -1
  181. package/dist/client/assets/DirectoryPicker-DBdyXEhR.js +0 -1
  182. package/dist/client/assets/DocumentsView-BzSMyrns.js +0 -1
  183. package/dist/client/assets/DocumentsView-WfVoTZt8.css +0 -1
  184. package/dist/client/assets/EvalsView-CUNJ1TLc.css +0 -1
  185. package/dist/client/assets/EvalsView-ikz00o9g.js +0 -1
  186. package/dist/client/assets/ExperimentalAgentOnboardingModal-D-rzCCET.js +0 -499
  187. package/dist/client/assets/GoalsView-Bfu1Oy2-.js +0 -2
  188. package/dist/client/assets/GoalsView-rg9VSIza.css +0 -1
  189. package/dist/client/assets/InsightsView-Cgmf5nES.js +0 -11
  190. package/dist/client/assets/InsightsView-LMv1M1dU.css +0 -1
  191. package/dist/client/assets/MemoryView-DkEuDKQs.js +0 -2
  192. package/dist/client/assets/MemoryView-zaXewZzi.css +0 -1
  193. package/dist/client/assets/NodesView-7VInxyf_.css +0 -1
  194. package/dist/client/assets/NodesView-B_KYfS4o.js +0 -14
  195. package/dist/client/assets/PiExtensionsManager-Dz69kkKs.js +0 -11
  196. package/dist/client/assets/PluginManager-LHCVcduP.js +0 -1
  197. package/dist/client/assets/PullRequestView-3AdbS2a1.css +0 -1
  198. package/dist/client/assets/PullRequestView-DBJutLLl.js +0 -6
  199. package/dist/client/assets/ResearchView-DTh8FLUm.css +0 -1
  200. package/dist/client/assets/ResearchView-gpn1XcVy.js +0 -1
  201. package/dist/client/assets/SecretsView-B7YqIowt.js +0 -1
  202. package/dist/client/assets/SecretsView-Djo1rahi.css +0 -1
  203. package/dist/client/assets/SessionTerminal-9l4bdKcn.js +0 -2
  204. package/dist/client/assets/SessionTerminal-BNgtmXb3.css +0 -1
  205. package/dist/client/assets/SettingsModal-BGEK9_9A.js +0 -31
  206. package/dist/client/assets/SettingsModal-CKv0TJfM.css +0 -1
  207. package/dist/client/assets/SettingsModal-CXogw-Er.css +0 -1
  208. package/dist/client/assets/SettingsModal-DIIoHGUH.js +0 -1
  209. package/dist/client/assets/SetupWizardModal-BcVeMxeX.js +0 -1
  210. package/dist/client/assets/SetupWizardModal-CIqFbkrD.css +0 -1
  211. package/dist/client/assets/SkillsView-3bhGyWs1.css +0 -1
  212. package/dist/client/assets/SkillsView-BxSJ4PHL.js +0 -1
  213. package/dist/client/assets/StashRecoveryView-B_8WIQEo.css +0 -1
  214. package/dist/client/assets/StashRecoveryView-BhFQ2FsP.js +0 -1
  215. package/dist/client/assets/TodoView-7xIh-Fmi.css +0 -1
  216. package/dist/client/assets/TodoView-BZpewjy0.js +0 -6
  217. package/dist/client/assets/WorkflowNodeEditor-Yn1FRF2v.css +0 -1
  218. package/dist/client/assets/WorkflowNodeEditor-tWsgCdVt.js +0 -8
  219. package/dist/client/assets/app-BmGA0Hiz.js +0 -13
  220. package/dist/client/assets/app-CEVYlVuJ.js +0 -13
  221. package/dist/client/assets/app-CbBFax2C.js +0 -13
  222. package/dist/client/assets/app-DORKrGAz.js +0 -13
  223. package/dist/client/assets/app-DQibuQ9z.js +0 -13
  224. package/dist/client/assets/app-k76GrQP0.js +0 -13
  225. package/dist/client/assets/common-BRyX4VxB.js +0 -1
  226. package/dist/client/assets/common-CN9QPI2d.js +0 -1
  227. package/dist/client/assets/common-CNbjPELi.js +0 -1
  228. package/dist/client/assets/common-DFDqu_n0.js +0 -1
  229. package/dist/client/assets/common-DgWWKG8Z.js +0 -1
  230. package/dist/client/assets/common-X6PzBnVA.js +0 -1
  231. package/dist/client/assets/createLucideIcon-DmVITl5d.js +0 -21
  232. package/dist/client/assets/dashboard-view-BFoyhTYF.js +0 -3
  233. package/dist/client/assets/dashboard-view-Cxzm_eqc.js +0 -1
  234. package/dist/client/assets/dashboard-view-DdGlfuu-.css +0 -1
  235. package/dist/client/assets/dashboard-view-_8yfNwju.css +0 -1
  236. package/dist/client/assets/index-Bglw05rM.js +0 -791
  237. package/dist/client/assets/index-FYgnflWD.css +0 -1
  238. package/dist/client/assets/vendor-reactflow-ZasuEfF9.js +0 -15
  239. package/dist/client/assets/x-PItWc-wQ.js +0 -61
  240. package/dist/client/assets/zoom-out-CzlHv0Kj.js +0 -21
@@ -1,29 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-DxV8pFHX.js","assets/vendor-react-BTgM5bbZ.js","assets/index-Bglw05rM.js","assets/vendor-i18n-DYlSUfot.js","assets/vendor-reactflow-ZasuEfF9.js","assets/vendor-reactflow-C5ap-Sga.css","assets/vendor-xterm-ea7-K05z.js","assets/vendor-xterm-LZoznX6r.css","assets/vendor-codemirror-jBKmHyH0.js","assets/index-FYgnflWD.css","assets/ExperimentalAgentOnboardingModal-D-rzCCET.js","assets/ExperimentalAgentOnboardingModal-CZ_jbgep.css","assets/AgentPermissionPolicyEditor--YS4iMUY.js","assets/AgentPermissionPolicyEditor-CGxjOr6G.css","assets/AgentDetailView-CanIeYHg.css"])))=>i.map(i=>d[i]);
2
- import{c as jt,A as tt,C as vt,Z as Ha,s as Oa,r as _t,F as Lt,f as $a,a as Da,b as pa,B as It,u as xa,d as wt,e as Va,g as Ba,h as Wa,i as Ua,j as Ft,k as ft,P as Ga,l as Ka,m as Ya,n as Xa,o as Qt,G as qa,S as Za,L as St,T as rt,R as et,X as ea,p as Ja,q as Qa,t as ht,v as es,w as ta,x as ts,y as as,z as me,D as ot,E as ss,M as ns,H as ls,N as aa,I as sa,J as na,K as is,O as At,Q as pt,U as la,V as rs,W as os,Y as cs,_ as ds,$ as ia,a0 as gs,a1 as us,a2 as ms,a3 as xt,a4 as hs,a5 as ra,a6 as ps}from"./index-Bglw05rM.js";import{r as s,j as e,b as xs}from"./vendor-react-BTgM5bbZ.js";import{u as Me}from"./vendor-i18n-DYlSUfot.js";import{A as bs,S as vs,E as fs,f as js}from"./ExperimentalAgentOnboardingModal-D-rzCCET.js";import{U as zt}from"./upload-C11J2diI.js";import{F as Ns}from"./folder-open-33WGVnbp.js";import"./vendor-reactflow-ZasuEfF9.js";import"./vendor-xterm-ea7-K05z.js";import"./vendor-codemirror-jBKmHyH0.js";/**
3
- * @license lucide-react v1.7.0 - ISC
4
- *
5
- * This source code is licensed under the ISC license.
6
- * See the LICENSE file in the root directory of this source tree.
7
- */const ys=[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["rect",{x:"3",y:"4",width:"6",height:"6",rx:"1",key:"cif1o7"}]],ks=jt("list-todo",ys);/**
8
- * @license lucide-react v1.7.0 - ISC
9
- *
10
- * This source code is licensed under the ISC license.
11
- * See the LICENSE file in the root directory of this source tree.
12
- */const Cs=[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]],ws=jt("sliders-horizontal",Cs);/**
13
- * @license lucide-react v1.7.0 - ISC
14
- *
15
- * This source code is licensed under the ISC license.
16
- * See the LICENSE file in the root directory of this source tree.
17
- */const Ss=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],As=jt("zoom-in",Ss);/**
18
- * @license lucide-react v1.7.0 - ISC
19
- *
20
- * This source code is licensed under the ISC license.
21
- * See the LICENSE file in the root directory of this source tree.
22
- */const Rs=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],Ts=jt("zoom-out",Rs);function oa(n){return typeof n=="number"&&Number.isFinite(n)?n:0}function Je(n){return n.toLocaleString()}function Ms({agents:n}){const{t:d}=Me("app"),{rows:b,totalInputTokens:p,totalOutputTokens:a,totalTokens:c}=s.useMemo(()=>{const g=n.map(l=>{const x=oa(l.totalInputTokens),j=oa(l.totalOutputTokens);return{id:l.id,name:l.name,inputTokens:x,outputTokens:j,totalTokens:x+j}}).sort((l,x)=>x.totalTokens-l.totalTokens||l.name.localeCompare(x.name)||l.id.localeCompare(x.id));return{rows:g,totalInputTokens:g.reduce((l,x)=>l+x.inputTokens,0),totalOutputTokens:g.reduce((l,x)=>l+x.outputTokens,0),totalTokens:g.reduce((l,x)=>l+x.totalTokens,0)}},[n]),v=c>0;return e.jsxs("section",{className:"agent-token-stats-panel","aria-label":d("agents.tokenStatistics","Agent token usage statistics"),children:[e.jsx("header",{className:"agent-token-stats-panel__header",children:e.jsx("h3",{className:"agent-token-stats-panel__title",children:d("agents.tokenUsageByAgent","Token Usage by Agent")})}),e.jsxs("div",{className:"agent-token-stats-panel__totals",role:"list","aria-label":d("agents.tokenUsageTotals","Token usage totals"),children:[e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:d("agents.inputTokens","Input Tokens")}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:Je(p)})]}),e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:d("agents.outputTokens","Output Tokens")}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:Je(a)})]}),e.jsxs("div",{className:"agent-token-stats-panel__total-card",role:"listitem",children:[e.jsx("span",{className:"agent-token-stats-panel__total-label",children:d("agents.combinedTokens","Combined Tokens")}),e.jsx("span",{className:"agent-token-stats-panel__total-value",children:Je(c)})]})]}),v?e.jsx("div",{className:"agent-token-stats-panel__table-wrapper",children:e.jsxs("table",{className:"agent-token-stats-panel__table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{scope:"col",children:d("agents.agent","Agent")}),e.jsx("th",{scope:"col",children:d("agents.input","Input")}),e.jsx("th",{scope:"col",children:d("agents.output","Output")}),e.jsx("th",{scope:"col",children:d("agents.total","Total")})]})}),e.jsx("tbody",{children:b.map(g=>e.jsxs("tr",{children:[e.jsxs("th",{scope:"row",className:"agent-token-stats-panel__agent-cell",children:[e.jsx("span",{className:"agent-token-stats-panel__agent-name",children:g.name}),e.jsx("span",{className:"agent-token-stats-panel__agent-id",children:g.id})]}),e.jsx("td",{children:Je(g.inputTokens)}),e.jsx("td",{children:Je(g.outputTokens)}),e.jsx("td",{className:"agent-token-stats-panel__total-cell",children:Je(g.totalTokens)})]},g.id))})]})}):e.jsx("div",{className:"agent-token-stats-panel__empty",role:"status",children:d("agents.noTokenUsageYet","No token usage recorded yet. Token totals appear here once agents run.")})]})}const Es=[{icon:tt,label:"Active Agents",valueKey:"activeCount",className:"agent-metric-card--active"},{icon:ks,label:"Assigned Tasks",valueKey:"assignedTaskCount",className:"agent-metric-card--tasks"},{icon:vt,label:"Success Rate",valueKey:"successRate",className:"agent-metric-card--success"},{icon:Ha,label:"Total Runs",valueKey:"completedRuns",className:"agent-metric-card--runs"}];function Ps({stats:n,className:d=""}){return n?e.jsx("div",{className:`agent-metrics-bar ${d}`.trim(),children:Es.map(b=>{const p=b.valueKey==="successRate"?`${Math.round(n.successRate*100)}%`:n[b.valueKey];return e.jsxs("div",{className:`agent-metric-card ${b.className}`,children:[e.jsx(b.icon,{size:18}),e.jsxs("div",{className:"agent-metric-info",children:[e.jsx("span",{className:"agent-metric-value",children:p}),e.jsx("span",{className:"agent-metric-label",children:b.label})]})]},b.label)})}):null}const ca=200;function _s(n,d){const[b,p]=s.useState([]),[a,c]=s.useState(!1),v=s.useRef(null),g=s.useRef(0),l=s.useRef(n),x=s.useRef(d);return(l.current!==n||x.current!==d)&&(l.current=n,x.current=d,g.current++,v.current&&(v.current(),v.current=null),p([]),c(!1)),s.useEffect(()=>{if(!n){p([]),c(!1);return}const R=g.current;let C=`/api/tasks/${encodeURIComponent(n)}/logs/stream`;d&&(C+=`?projectId=${encodeURIComponent(d)}`);const S=Oa(C,{events:{"agent:log":$=>{if(g.current===R)try{const N=JSON.parse($.data),I={type:N.type??"text",text:N.text??N.content??"",timestamp:N.timestamp,content:N.content};p(B=>{const A=[I,...B];return A.length>ca?A.slice(0,ca):A})}catch{}}},onOpen:()=>{g.current===R&&c(!0)},onError:()=>{g.current===R&&c(!1)}});return v.current=S,()=>{S(),v.current=null,g.current===R&&c(!1)}},[n,d]),{entries:b,isConnected:a}}const Ls=5e3;function Is({agent:n,projectId:d,onSelect:b,onOpenTaskLogs:p}){const{t:a}=Me("app"),{entries:c,isConnected:v}=_s(n.taskId,d),[g,l]=s.useState(null);s.useEffect(()=>{if(!n.taskId){l(null);return}let A=!1,F;const y=async()=>{try{const D=await $a(n.taskId,d);A||l(D)}catch{}finally{A||(F=setTimeout(y,Ls))}};return y(),()=>{A=!0,F&&clearTimeout(F)}},[n.taskId,d]);const x=n.lastHeartbeatAt?Math.floor((Date.now()-new Date(n.lastHeartbeatAt).getTime())/1e3):0,j=(()=>{if(!n.lastHeartbeatAt)return null;const A=_t(n.runtimeConfig?.heartbeatIntervalMs),F=new Date(n.lastHeartbeatAt).getTime()+A,y=Math.round((F-Date.now())/1e3);return Number.isFinite(y)?y<=0?a("agents.heartbeatOverdue","Heartbeat overdue {{elapsed}}",{elapsed:Rt(-y)}):a("agents.nextHeartbeat","Next heartbeat in {{elapsed}}",{elapsed:Rt(y)}):null})(),R=g?.steps?.[g.currentStep??0],C=g?.steps?.length??0,S=(g?.currentStep??0)+1,$=g?.modelId,N=()=>{b&&b(n.id)},I=A=>{A.stopPropagation(),n.taskId&&p&&p(n.taskId)},B=A=>{(A.key==="Enter"||A.key===" ")&&(A.preventDefault(),N())};return e.jsxs("div",{className:"live-agent-card",onClick:N,onKeyDown:B,role:"button",tabIndex:0,"aria-label":a("agents.selectAgent","Select agent {{name}}",{name:n.name}),children:[e.jsxs("div",{className:"live-agent-card-header",children:[e.jsxs("div",{className:"live-agent-card-name",children:[e.jsx("span",{className:`status-dot ${n.state==="running"?"status-dot--pending":"status-dot--online"}`,"aria-hidden":"true"}),e.jsx("span",{children:n.name})]}),n.taskId&&e.jsx("span",{className:"live-agent-task badge",children:n.taskId})]}),e.jsx("div",{className:"live-agent-card-transcript",children:c.length===0?e.jsx("div",{className:"live-agent-card-empty",children:n.taskId?R?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"live-agent-card-status",children:a("agents.step","Step {{number}}{{total}}: {{name}}",{number:S,total:C?`/${C}`:"",name:R.name})}),$&&e.jsx("div",{className:"live-agent-card-status-sub",children:$}),e.jsx("div",{className:"live-agent-card-status-sub",children:v?a("agents.waitingOutput","Waiting for output..."):a("agents.connectingStream","Connecting to log stream...")})]}):e.jsx("span",{children:v?a("agents.waitingOutput","Waiting for output..."):a("agents.connecting","Connecting...")}):e.jsx("span",{children:n.state==="running"?a("agents.starting","Starting..."):a("agents.idleNoTask","Idle — no task assigned")})}):c.slice(0,20).map((A,F)=>e.jsx("div",{className:"live-agent-card-line",children:A.text},F))}),e.jsxs("div",{className:"live-agent-card-footer",children:[e.jsxs("div",{className:"live-agent-card-footer-meta",children:[e.jsx("span",{className:"text-secondary",title:"Time since last heartbeat",children:Rt(x)}),j&&e.jsx("span",{className:"live-agent-card-next-heartbeat",title:j,children:j})]}),e.jsxs("div",{className:"live-agent-card-footer-actions",children:[n.taskId&&p&&e.jsxs("button",{type:"button",className:"live-agent-card-logs-btn",onClick:I,title:a("agents.viewLiveLogs","View live run logs"),"aria-label":a("agents.viewLogsFor","View live logs for {{taskId}}",{taskId:n.taskId}),children:[e.jsx(Lt,{size:12}),e.jsx("span",{children:a("agents.liveLogs","Live logs")})]}),v&&e.jsx(tt,{size:12,className:"live-agent-streaming-dot"})]})]})]})}function Rt(n){return n<60?`${n}s`:n<3600?`${Math.floor(n/60)}m ${n%60}s`:`${Math.floor(n/3600)}h ${Math.floor(n%3600/60)}m`}function Fs({agents:n,projectId:d,onAgentSelect:b,onOpenTaskLogs:p,className:a=""}){const{t:c}=Me("app"),v=Array.from(new Map(n.map(g=>[g.id,g])).values());return v.length===0?null:e.jsxs("div",{className:`active-agents-panel ${a}`.trim(),children:[e.jsxs("div",{className:"active-agents-panel-header",children:[e.jsx(tt,{size:16}),e.jsx("span",{children:c("agents.activeAgents","Active Agents ({{count}})",{count:v.length})})]}),e.jsx("div",{className:"active-agents-grid",children:v.map(g=>e.jsx(Is,{agent:g,projectId:d,onSelect:b,onOpenTaskLogs:p},g.id))})]})}function zs({stats:n,activeAgents:d,projectId:b,isOpen:p,onToggle:a,onSelectAgent:c,onOpenTaskLogs:v}){const{t:g}=Me("app"),l=d.filter(j=>j.state==="active").length,x=d.filter(j=>j.state==="running").length;return e.jsxs("section",{className:"agents-overview-bar","aria-label":"Agents overview",children:[e.jsxs("button",{type:"button",className:"agents-overview-bar__toggle","aria-expanded":p,onClick:a,children:[e.jsxs("span",{className:"agents-overview-bar__title-wrap",children:[p?e.jsx(Da,{size:16,"aria-hidden":"true"}):e.jsx(pa,{size:16,"aria-hidden":"true"}),e.jsx("span",{className:"agents-overview-bar__title",children:g("agents.overview","Overview")})]}),e.jsx("span",{className:"agents-overview-bar__meta text-secondary",children:g("agents.statusCount","{{activeCount}} active · {{runningCount}} running",{activeCount:l,runningCount:x})})]}),p?e.jsxs("div",{className:"agents-overview-bar__content",children:[e.jsx(Ps,{stats:n,className:"agents-overview-bar__metrics"}),e.jsx(Fs,{agents:d,projectId:b,onAgentSelect:c,onOpenTaskLogs:v,className:"agents-overview-bar__active-panel"})]}):null]})}function Tt({title:n="No agents found",description:d="Create an agent to get started",ctaLabel:b="Create Agent",onCtaClick:p}){return e.jsxs("div",{className:"agent-empty",children:[e.jsx(It,{size:48,opacity:.3,className:"agent-empty-state__icon"}),e.jsx("p",{className:"agent-empty-state__title",children:n}),e.jsx("p",{className:"agent-empty-state__description text-secondary",children:d}),p?e.jsx("button",{type:"button",className:"btn btn-task-create btn-sm",onClick:p,children:b}):null]})}const da=3,Mt=1e3;function Hs({isOpen:n,onClose:d,onGenerated:b,projectId:p}){const{t:a}=Me("app");xa(n);const[c,v]=s.useState(""),[g,l]=s.useState({type:"input"}),[x,j]=s.useState(null),[R,C]=s.useState(!1),S=s.useRef(null),$=s.useRef(null);s.useEffect(()=>{n&&g.type==="input"&&$.current?.focus()},[n,g.type]),s.useEffect(()=>{if(!n&&S.current){const y=S.current;S.current=null,wt(y,p).catch(()=>{})}},[n,p]),s.useEffect(()=>{if(!n)return;const y=D=>{D.key==="Escape"&&N()};return document.addEventListener("keydown",y),()=>document.removeEventListener("keydown",y)},[n]);const N=s.useCallback(()=>{if(S.current){const y=S.current;S.current=null,wt(y,p).catch(()=>{})}v(""),l({type:"input"}),j(null),C(!1),d()},[d,p]),I=s.useCallback(async()=>{if(!(!c.trim()||c.trim().length<da)){j(null),l({type:"loading"});try{const{sessionId:y}=await Va(c.trim(),p);S.current=y;const{spec:D}=await Ba(y,p);l({type:"preview",spec:D,sessionId:y})}catch(y){const D=y instanceof Error?y.message:"Failed to generate agent specification";D.includes("429")||D.toLowerCase().includes("rate limit")?j(a("agents.generation.rateLimited","Too many requests. Please wait a moment and try again.")):j(D),l({type:"input"}),S.current=null}}},[c,p]),B=s.useCallback(async()=>{if(S.current){const y=S.current;S.current=null;try{await wt(y,p)}catch{}}await I()},[I,p]),A=s.useCallback(()=>{g.type==="preview"&&(S.current=null,b(g.spec),v(""),l({type:"input"}),j(null),C(!1),d())},[g,b,d]);if(!n)return null;const F=c.trim().length>=da&&c.trim().length<=Mt;return e.jsx("div",{className:"agent-dialog-overlay",onClick:y=>{y.target===y.currentTarget&&N()},children:e.jsxs("div",{className:"agent-dialog",role:"dialog","aria-modal":"true","aria-label":"Generate agent with AI",children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsxs("span",{className:"agent-dialog-header-title",children:[e.jsx("span",{className:"agent-dialog-header-sparkle",children:"✨"}),a("agents.generation.title","Generate Agent")]}),e.jsx("button",{className:"modal-close",onClick:N,"aria-label":a("actions.close","Close"),children:"×"})]}),e.jsxs("div",{className:"agent-dialog-body",children:[x&&e.jsx("div",{className:"agent-dialog-error-banner",children:x}),g.type==="input"&&e.jsxs("div",{children:[e.jsx("p",{className:"agent-dialog-info",children:a("agents.generation.info","Describe your agent's role and the AI will generate a complete specification including system prompt, suggested configuration, and more.")}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-role-description",children:a("agents.generation.roleLabel","Role Description")}),e.jsx("textarea",{ref:$,id:"agent-role-description",className:"input agent-dialog-textarea",rows:4,placeholder:a("agents.generation.rolePlaceholder",'e.g. "Senior frontend code reviewer who specializes in React accessibility"'),value:c,onChange:y=>v(y.target.value),onKeyDown:y=>{y.key==="Enter"&&!y.shiftKey&&F&&(y.preventDefault(),I())},maxLength:Mt,"aria-describedby":"role-description-hint"}),e.jsxs("div",{id:"role-description-hint",className:"agent-dialog-hint",children:[e.jsx("span",{children:a("agents.generation.roleHint","Describe what your agent should do")}),e.jsxs("span",{children:[c.length,"/",Mt]})]})]})]}),g.type==="loading"&&e.jsxs("div",{className:"agent-dialog-loading-center",children:[e.jsx("div",{className:"agent-dialog-spinner spin"}),e.jsx("p",{className:"agent-dialog-loading-text",children:a("agents.generation.loading","Generating agent specification...")})]}),g.type==="preview"&&e.jsxs("div",{children:[e.jsxs("div",{className:"agent-dialog-summary agent-dialog-summary--spaced",children:[e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:a("agents.generation.previewTitle","Title")}),e.jsxs("span",{className:"agent-dialog-summary-row-value",children:[g.spec.icon," ",g.spec.title]})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:a("agents.generation.previewRole","Role")}),e.jsx("span",{children:g.spec.role})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:a("agents.generation.previewDescription","Description")}),e.jsx("span",{className:"agent-dialog-summary-row-value agent-dialog-summary-row-value--body",children:g.spec.description})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:a("agents.generation.previewThinking","Thinking")}),e.jsx("span",{className:"agent-dialog-summary-row-value agent-dialog-summary-row-value--capitalize",children:g.spec.thinkingLevel})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label agent-dialog-summary-row-label--fixed",children:a("agents.generation.previewMaxTurns","Max Turns")}),e.jsx("span",{children:g.spec.maxTurns})]})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{children:[a("agents.generation.systemPrompt","System Prompt"),e.jsx("button",{type:"button",className:"agent-dialog-expand-btn",onClick:()=>C(!R),children:R?a("agents.generation.collapse","Collapse"):a("agents.generation.expand","Expand")})]}),e.jsxs("div",{className:`agent-generation-prompt-box${R?"":" agent-generation-prompt-box--collapsed"}`,children:[g.spec.systemPrompt,!R&&g.spec.systemPrompt.length>500&&e.jsx("div",{className:"agent-generation-prompt-fade"})]})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[e.jsx("button",{className:"btn",onClick:N,children:a("actions.cancel","Cancel")}),g.type==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void I(),disabled:!F,children:a("agents.generation.generate","Generate")}),g.type==="preview"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn",onClick:()=>void B(),children:a("agents.generation.regenerate","Regenerate")}),e.jsx("button",{className:"btn btn-task-create",onClick:A,children:a("agents.generation.useThis","Use This")})]})]})]})})}const ga=[{value:"triage",icon:"⊕"},{value:"executor",icon:"▶"},{value:"reviewer",icon:"⊙"},{value:"merger",icon:"⊞"},{value:"scheduler",icon:"◷"},{value:"engineer",icon:"⎔"},{value:"custom",icon:"✦"}],ua=new Set(["triage","executor","reviewer","merger","scheduler","engineer","custom"]);function Os({isOpen:n,onClose:d,onCreated:b,projectId:p,prefillDraft:a=null,agentOnboardingEnabled:c=!1,existingAgents:v=[],onPrefillDraft:g}){const{t:l}=Me("app"),x=i=>({triage:l("agents.roleTriage","Triage"),executor:l("agents.roleExecutor","Executor"),reviewer:l("agents.roleReviewer","Reviewer"),merger:l("agents.roleMerger","Merger"),scheduler:l("agents.roleScheduler","Scheduler"),engineer:l("agents.roleEngineer","Engineer"),custom:l("agents.roleCustom","Custom")})[i]??i,[j,R]=s.useState(0),[C,S]=s.useState("presets"),[$,N]=s.useState(""),[I,B]=s.useState(""),[A,F]=s.useState(""),[y,D]=s.useState("custom"),[K,L]=s.useState(""),[X,se]=s.useState(""),[he,ne]=s.useState(""),[le,ie]=s.useState(""),[ce,H]=s.useState(""),[k,pe]=s.useState(""),[M,oe]=s.useState({model:"",thinkingLevel:"off",maxTurns:1e3}),[de,Ee]=s.useState(null),[xe,fe]=s.useState([]),[q,Pe]=s.useState(!1),[Z,be]=s.useState(null),[ve,W]=s.useState(!1),[Oe,J]=s.useState(!1),{favoriteProviders:Ne,favoriteModels:Ke,toggleFavoriteProvider:Ae,toggleFavoriteModel:_e}=Wa(),[Le,Ye]=s.useState([]),[Ie,$e]=s.useState(!1),[z,E]=s.useState("model"),[U,je]=s.useState(""),[Re,ge]=s.useState([]),[Fe,Te]=s.useState(!1),[ze,r]=s.useState([]),[f,P]=s.useState(!1);s.useEffect(()=>{n&&($e(!0),Ua().then(i=>{Ye(i.models)}).catch(()=>{}).finally(()=>$e(!1)))},[n]),s.useEffect(()=>{n&&(P(!0),r([]),Ft(void 0,p).then(i=>{r(i)}).catch(()=>{r([])}).finally(()=>P(!1)))},[n,p]),s.useEffect(()=>{if(!n)return;const i=Ka;if(typeof i!="function"){ge([]),Te(!1);return}Te(!0),ge([]),i(p).then(_=>{ge(_)}).catch(()=>{ge([])}).finally(()=>Te(!1))},[n,p]);const V=M.model.includes("/")?M.model:"",Q=s.useCallback(i=>{const _=ua.has(i.role)?i.role:"custom";N(i.title),B(i.description),F(i.icon),D(_),ne(i.systemPrompt),oe(He=>({...He,thinkingLevel:i.thinkingLevel,maxTurns:i.maxTurns})),W(!1),R(1)},[]),Y=s.useCallback(i=>{oe(_=>({..._,model:i}))},[]),De=s.useCallback(i=>{E(i),i==="model"&&je("")},[]),at=s.useCallback(i=>{Ee(i.id),N(i.name),F(i.icon),B(i.description??i.title),D(i.role),H(i.soul??""),ne(i.instructionsText??""),R(1)},[]),ye=s.useCallback(i=>{const _=i.runtimeHint?.trim()??"",He=i.model?.trim()||i.modelHint?.trim()||"";R(1),S("custom"),N(i.name??""),B(i.title??""),F(i.icon??""),D(ua.has(i.role)?i.role:"custom"),L(i.reportsTo??""),ne(i.instructionsText??""),ie(i.heartbeatProcedurePath??""),H(i.soul??""),pe(i.memory??""),fe(Array.isArray(i.skills)?i.skills:[]),oe(Be=>({...Be,model:_?"":He,thinkingLevel:i.thinkingLevel??Be.thinkingLevel,maxTurns:i.maxTurns??Be.maxTurns})),_?(E("runtime"),je(_)):(E("model"),je(""))},[]);if(s.useEffect(()=>{!n||!a||ye(a)},[n,a,ye]),!n)return null;const Xe=()=>{R(0),S("presets"),N(""),B(""),F(""),D("custom"),L(""),se(""),ne(""),ie(""),H(""),pe(""),oe({model:"",thinkingLevel:"off",maxTurns:1e3}),E("model"),je(""),Ee(null),fe([]),be(null),W(!1),J(!1),d()},Nt=async()=>{if($.trim()){Pe(!0),be(null);try{const i={};z==="runtime"?U.trim()&&(i.runtimeHint=U.trim()):M.model.trim()&&(i.model=M.model.trim()),M.thinkingLevel!=="off"&&(i.thinkingLevel=M.thinkingLevel),M.maxTurns!==1e3&&(i.maxTurns=M.maxTurns),await Xa({name:$.trim(),role:y,...I.trim()?{title:I.trim()}:{},...A.trim()?{icon:A.trim()}:{},...K.trim()?{reportsTo:K.trim()}:{},...X.trim()?{instructionsPath:X.trim()}:{},...he.trim()?{instructionsText:he.trim()}:{},...le.trim()?{heartbeatProcedurePath:le.trim()}:{},...ce.trim()?{soul:ce.trim()}:{},...k.trim()?{memory:k.trim()}:{},...Object.keys(i).length>0?{runtimeConfig:i}:{},...xe.length>0?{metadata:{skills:xe}}:{}},p),Xe(),b()}catch(i){be(i instanceof Error?i.message:l("agents.createError","Failed to create agent"))}finally{Pe(!1)}}},ke=ga.find(i=>i.value===y),Ve=K.trim(),Ce=Ve?ze.find(i=>i.id===Ve):void 0,st=U?Re.find(i=>i.runtimeId===U):void 0,we=i=>e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{id:i,children:l("agents.runtimeSource","Runtime Source")}),e.jsxs("div",{className:"agent-runtime-mode-toggle",role:"radiogroup","aria-labelledby":i,children:[e.jsxs("label",{className:`agent-runtime-mode-option${z==="model"?" agent-runtime-mode-option--active":""}`,children:[e.jsx("input",{type:"radio",name:i,value:"model",checked:z==="model",onChange:()=>De("model")}),e.jsx("span",{children:l("agents.runtimeSourceBuiltIn","Built-in Model")})]}),e.jsxs("label",{className:`agent-runtime-mode-option${z==="runtime"?" agent-runtime-mode-option--active":""}`,children:[e.jsx("input",{type:"radio",name:i,value:"runtime",checked:z==="runtime",onChange:()=>De("runtime")}),e.jsx("span",{children:l("agents.runtimeSourcePlugin","Plugin Runtime")})]})]})]}),z==="model"?e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{children:l("agents.model","Model")}),Ie?e.jsx("div",{className:"agent-dialog-loading",children:l("agents.loadingModels","Loading models…")}):e.jsx(Ya,{id:"agent-model",label:l("agents.model","Model"),value:V,onChange:Y,models:Le,placeholder:l("agents.modelPlaceholder","Select a model…"),favoriteProviders:Ne,onToggleFavorite:Ae,favoriteModels:Ke,onToggleModelFavorite:_e})]}):e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-runtime-hint",children:l("agents.runtime","Runtime")}),Fe?e.jsx("div",{className:"agent-dialog-loading",children:l("agents.loadingRuntimes","Loading runtimes…")}):e.jsxs("select",{id:"agent-runtime-hint",className:"select",value:U,onChange:_=>je(_.target.value),children:[e.jsx("option",{value:"",children:Re.length>0?l("agents.runtimePlaceholder","Select a plugin runtime…"):l("agents.runtimeEmpty","No plugin runtimes available")}),Re.map(_=>e.jsx("option",{value:_.runtimeId,children:_.description?`${_.name} — ${_.description}`:_.name},`${_.pluginId}:${_.runtimeId}`))]})]})]});return xs.createPortal(e.jsxs("div",{className:"agent-dialog-overlay",onClick:i=>{i.target===i.currentTarget&&Xe()},children:[e.jsxs("div",{className:"agent-dialog",role:"dialog","aria-modal":"true","aria-label":l("agents.dialogAriaLabel","Create new agent"),children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsx("span",{className:"agent-dialog-header-title",children:l("agents.dialogTitle","New Agent")}),e.jsx("button",{className:"btn-icon",onClick:Xe,"aria-label":l("agents.closeAriaLabel","Close"),children:"×"})]}),e.jsx("div",{className:"agent-dialog-steps",children:[0,1,2].map(i=>e.jsx("div",{className:`agent-dialog-step${i===j?" active":i<j?" completed":""}`,"aria-label":l("agents.stepAriaLabel","Step {{step}}",{step:i+1})},i))}),e.jsxs("div",{className:"agent-dialog-body",children:[j===0&&e.jsxs("div",{children:[c&&e.jsx("div",{className:"agent-dialog-step-zero-actions",children:e.jsx("button",{type:"button",className:"btn agent-dialog-interview-btn",onClick:()=>J(!0),children:l("agents.aiInterview","AI Interview")})}),e.jsxs("div",{className:"agent-dialog-tabs",role:"tablist","aria-label":l("agents.setupModeAriaLabel","Agent setup mode"),children:[e.jsx("button",{id:"agent-dialog-tab-presets",type:"button",role:"tab","aria-controls":"agent-dialog-panel-presets","aria-selected":C==="presets",tabIndex:C==="presets"?0:-1,className:`agent-dialog-tab${C==="presets"?" active":""}`,onClick:()=>S("presets"),"data-testid":"agent-dialog-tab-presets",children:l("agents.tabPresets","Preset personas")}),e.jsx("button",{id:"agent-dialog-tab-custom",type:"button",role:"tab","aria-controls":"agent-dialog-panel-custom","aria-selected":C==="custom",tabIndex:C==="custom"?0:-1,className:`agent-dialog-tab${C==="custom"?" active":""}`,onClick:()=>S("custom"),"data-testid":"agent-dialog-tab-custom",children:l("agents.tabCustom","Custom agent")})]}),C==="presets"&&e.jsx("div",{id:"agent-dialog-panel-presets",className:"agent-dialog-tab-panel",role:"tabpanel","aria-labelledby":"agent-dialog-tab-presets",children:e.jsxs("div",{className:"agent-presets",children:[e.jsx("div",{className:"agent-presets-header",children:l("agents.presetsHeader","Choose a preset persona to prefill role, identity, soul, and instructions")}),e.jsx("div",{className:"agent-presets-grid",children:bs.map(i=>e.jsxs("button",{type:"button",className:`agent-preset-card${de===i.id?" selected":""}`,"data-testid":`preset-${i.id}`,onClick:()=>at(i),title:i.title,children:[e.jsx("span",{className:"agent-preset-icon",children:e.jsx(ft,{agent:{id:i.id,icon:i.icon,name:i.name},size:28})}),e.jsx("span",{className:"agent-preset-name",children:i.name}),e.jsx("span",{className:"agent-preset-role",children:i.role}),i.description&&e.jsx("span",{className:"agent-preset-description",children:i.description})]},i.id))})]})}),C==="custom"&&e.jsxs("div",{id:"agent-dialog-panel-custom",className:"agent-dialog-tab-panel",role:"tabpanel","aria-labelledby":"agent-dialog-tab-custom",children:[e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:l("agents.sectionIdentity","Identity")}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-name",children:[l("agents.fieldName","Name")," ",!de&&e.jsx("span",{className:"agent-dialog-required",children:"*"})]}),e.jsx("input",{id:"agent-name",type:"text",className:"input",placeholder:l("agents.namePlaceholder","e.g. Frontend Reviewer"),value:$,onChange:i=>N(i.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field agent-dialog-field--title",children:[e.jsxs("label",{htmlFor:"agent-title",children:[l("agents.fieldTitle","Title")," ",e.jsx("span",{className:"agent-dialog-optional",children:l("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-title",type:"text",className:"input",placeholder:l("agents.titlePlaceholder","e.g. Senior Code Reviewer"),value:I,onChange:i=>B(i.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-icon",children:[l("agents.fieldIcon","Icon")," ",e.jsx("span",{className:"agent-dialog-optional",children:l("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-icon",type:"text",className:"input",placeholder:l("agents.iconPlaceholder","e.g. 🤖"),value:A,onChange:i=>F(i.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{children:l("agents.fieldRole","Role")}),e.jsx("div",{className:"agent-role-grid",children:ga.map(i=>e.jsxs("button",{type:"button",className:`agent-role-option${y===i.value?" selected":""}`,onClick:()=>D(i.value),children:[e.jsx("span",{className:"agent-role-option-icon",children:i.icon}),e.jsx("span",{className:"agent-role-option-label",children:x(i.value)})]},i.value))})]})]}),e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:l("agents.sectionConfiguration","Configuration")}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-reports-to",children:[l("agents.fieldReportsTo","Reports To")," ",e.jsx("span",{className:"agent-dialog-optional",children:l("agents.optional","(optional)")})]}),e.jsxs("select",{id:"agent-reports-to",className:"select",value:K,onChange:i=>L(i.target.value),disabled:f,children:[e.jsx("option",{value:"",children:l("agents.noManager","No manager")}),ze.map(i=>e.jsxs("option",{value:i.id,children:[i.name," (",i.id,")"]},i.id))]})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-soul",children:[l("agents.fieldSoul","Soul")," ",e.jsx("span",{className:"agent-dialog-optional",children:l("agents.optional","(optional)")})]}),e.jsx("textarea",{id:"agent-soul",className:"input",rows:2,placeholder:l("agents.soulPlaceholder","Describe the agent's personality and communication style..."),value:ce,onChange:i=>H(i.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-memory",children:[l("agents.fieldMemory","Agent Memory")," ",e.jsx("span",{className:"agent-dialog-optional",children:l("agents.optional","(optional)")})]}),e.jsx("textarea",{id:"agent-memory",className:"input",rows:2,placeholder:l("agents.memoryPlaceholder","Private to this agent — durable preferences, operating habits, and context it should carry across tasks..."),value:k,onChange:i=>pe(i.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-instructions-path",children:[l("agents.fieldInstructionsPath","Instructions Path")," ",e.jsx("span",{className:"agent-dialog-optional",children:l("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-instructions-path",type:"text",className:"input",placeholder:l("agents.instructionsPathPlaceholder","e.g. .fusion/agents/reviewer.md"),value:X,onChange:i=>se(i.target.value)})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-heartbeat-procedure-path",children:[l("agents.fieldHeartbeatPath","Heartbeat Procedure Path")," ",e.jsx("span",{className:"agent-dialog-optional",children:l("agents.optional","(optional)")})]}),e.jsx("input",{id:"agent-heartbeat-procedure-path",type:"text",className:"input",placeholder:l("agents.heartbeatPathPlaceholder","e.g. .fusion/agents/ceo-agent2736/HEARTBEAT.md"),value:le,onChange:i=>ie(i.target.value)}),e.jsx("p",{className:"agent-dialog-optional agent-dialog-field-hint",children:l("agents.heartbeatPathHint","Path to the agent's heartbeat procedure path, typically .fusion/agents/ceo-agent2736/HEARTBEAT.md. Legacy id-only default paths still work.")})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsxs("label",{htmlFor:"agent-instructions-text",children:[l("agents.fieldInstructionsText","Inline Instructions")," ",e.jsx("span",{className:"agent-dialog-optional",children:l("agents.optional","(optional)")})]}),e.jsx("textarea",{id:"agent-instructions-text",className:"input",rows:4,placeholder:l("agents.instructionsTextPlaceholder","Add custom behavior instructions..."),value:he,onChange:i=>ne(i.target.value)})]})]}),e.jsxs("div",{className:"agent-dialog-section",children:[e.jsx("div",{className:"agent-dialog-section-header",children:l("agents.sectionRuntime","Runtime")}),we("agent-runtime-source-step-0")]}),e.jsxs("div",{className:"agent-dialog-ai-generate",children:[e.jsxs("button",{type:"button",className:"btn btn--ai-generate",onClick:()=>W(!0),children:[e.jsx("span",{children:"✨"}),l("agents.generateWithAI","Generate with AI")]}),e.jsx("p",{className:"agent-dialog-ai-hint",children:l("agents.generateHint","Describe your agent's role and let AI generate a specification")})]})]})]}),j===1&&e.jsxs("div",{children:[we("agent-runtime-source-step-1"),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-thinking",children:l("agents.fieldThinkingLevel","Thinking Level")}),e.jsxs("select",{id:"agent-thinking",className:"select",value:M.thinkingLevel,onChange:i=>oe(_=>({..._,thinkingLevel:i.target.value})),children:[e.jsx("option",{value:"off",children:l("agents.thinkingOff","Off")}),e.jsx("option",{value:"minimal",children:l("agents.thinkingMinimal","Minimal")}),e.jsx("option",{value:"low",children:l("agents.thinkingLow","Low")}),e.jsx("option",{value:"medium",children:l("agents.thinkingMedium","Medium")}),e.jsx("option",{value:"high",children:l("agents.thinkingHigh","High")})]})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx("label",{htmlFor:"agent-max-turns",children:l("agents.fieldMaxTurns","Max Turns")}),e.jsx("input",{id:"agent-max-turns",type:"number",className:"input",min:1,max:2e3,value:M.maxTurns,onChange:i=>oe(_=>({..._,maxTurns:Math.max(1,parseInt(i.target.value,10)||1)}))})]}),e.jsxs("div",{className:"agent-dialog-field",children:[e.jsx(vs,{id:"agent-skills",label:l("agents.fieldSkills","Skills"),value:xe,onChange:fe,projectId:p}),e.jsx("p",{className:"agent-dialog-optional agent-dialog-skills-hint",children:l("agents.skillsHint","Optional skills to assign to this agent")})]})]}),j===2&&e.jsxs("div",{children:[e.jsx("p",{className:"agent-dialog-info",children:l("agents.reviewHint","Review your agent configuration before creating.")}),e.jsxs("div",{className:"agent-dialog-summary",children:[e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-name",children:l("agents.fieldName","Name")}),e.jsx("input",{id:"agent-review-name",type:"text",className:"input",placeholder:l("agents.namePlaceholder","e.g. Frontend Reviewer"),value:$,onChange:i=>N(i.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable agent-dialog-summary-row--title",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-title",children:l("agents.fieldTitle","Title")}),e.jsx("input",{id:"agent-review-title",type:"text",className:"input",placeholder:l("agents.titlePlaceholder","e.g. Senior Code Reviewer"),value:I,onChange:i=>B(i.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:l("agents.fieldRole","Role")}),e.jsxs("span",{children:[ke?.icon," ",ke?x(ke.value):""]})]}),Ve&&e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:l("agents.fieldReportsTo","Reports To")}),e.jsx("span",{children:Ce?`${Ce.name} (${Ce.id})`:Ve})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-soul",children:l("agents.fieldSoul","Soul")}),e.jsx("textarea",{id:"agent-review-soul",className:"input",rows:2,placeholder:l("agents.soulPlaceholder","Describe the agent's personality and communication style..."),value:ce,onChange:i=>H(i.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-heartbeat-procedure-path",children:l("agents.fieldHeartbeatPath","Heartbeat Procedure Path")}),e.jsx("input",{id:"agent-review-heartbeat-procedure-path",type:"text",className:"input",placeholder:l("agents.heartbeatPathPlaceholder","e.g. .fusion/agents/ceo-agent2736/HEARTBEAT.md"),value:le,onChange:i=>ie(i.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-instructions-path",children:l("agents.fieldInstructionsPath","Instructions Path")}),e.jsx("input",{id:"agent-review-instructions-path",type:"text",className:"input",placeholder:l("agents.instructionsPathPlaceholder","e.g. .fusion/agents/reviewer.md"),value:X,onChange:i=>se(i.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row agent-dialog-summary-row--editable",children:[e.jsx("label",{className:"agent-dialog-summary-row-label",htmlFor:"agent-review-instructions-text",children:l("agents.fieldInstructionsText","Inline Instructions")}),e.jsx("textarea",{id:"agent-review-instructions-text",className:"input",rows:4,placeholder:l("agents.instructionsTextPlaceholder","Add custom behavior instructions..."),value:he,onChange:i=>ne(i.target.value)})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:z==="runtime"?l("agents.runtime","Runtime"):l("agents.model","Model")}),e.jsx("span",{children:z==="runtime"?st?st.name:e.jsx("em",{className:"agent-dialog-summary-row-value--muted",children:l("agents.notSelected","Not selected")}):V?e.jsxs(e.Fragment,{children:[e.jsx(Ga,{provider:V.split("/")[0],size:"sm"})," ",(()=>{const i=V.indexOf("/"),_=V.slice(0,i),He=V.slice(i+1);return Le.find(Se=>Se.provider===_&&Se.id===He)?.name||V})()]}):e.jsx("em",{className:"agent-dialog-summary-row-value--muted",children:l("agents.modelDefault","default")})})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:l("agents.fieldThinking","Thinking")}),e.jsx("span",{className:"agent-dialog-summary-row-value--capitalize",children:M.thinkingLevel})]}),e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:l("agents.fieldMaxTurns","Max Turns")}),e.jsx("span",{children:M.maxTurns})]}),xe.length>0&&e.jsxs("div",{className:"agent-dialog-summary-row",children:[e.jsx("span",{className:"agent-dialog-summary-row-label",children:l("agents.fieldSkills","Skills")}),e.jsx("span",{children:l("agents.skillsSelected","{{count}} skill selected",{count:xe.length,defaultValue_one:"{{count}} skill selected",defaultValue_other:"{{count}} skills selected"})})]})]}),Z&&e.jsx("p",{className:"agent-dialog-error",children:Z})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[j>0&&e.jsx("button",{className:"btn",onClick:()=>R(i=>i-1),disabled:q,children:l("agents.back","Back")}),e.jsx("button",{className:"btn",onClick:Xe,disabled:q,children:l("agents.cancel","Cancel")}),j<2?e.jsx("button",{className:"btn btn--primary",onClick:()=>R(i=>i+1),disabled:j===0&&!$.trim()&&!de,children:l("agents.next","Next")}):e.jsx("button",{className:"btn btn--primary",onClick:()=>void Nt(),disabled:q||!$.trim(),children:q?l("agents.creating","Creating..."):l("agents.create","Create")})]})]}),e.jsx(Hs,{isOpen:ve,onClose:()=>W(!1),onGenerated:Q,projectId:p}),e.jsx(fs,{isOpen:Oe,onClose:()=>J(!1),onUseDraft:i=>{g?.(i),g||ye(i),J(!1)},projectId:p,existingAgents:v,mode:"create"})]}),document.body)}function $s(n){const d=n.match(/^---\s*\r?\n([\s\S]*?)\r?\n---(?:\r?\n([\s\S]*))?$/);if(!d)throw new Error("Missing YAML frontmatter delimiters (---)");const b=d[1].split(/\r?\n/),p=d[2]??"",a={name:""},c=[];let v=!1;for(const g of b){const x=g.trimEnd().trim();if(!x)continue;if(x.startsWith("skills:")){v=!0;continue}if(v&&x.startsWith("- ")){c.push(x.slice(2).trim());continue}v=!1;const[j,...R]=x.split(":"),S=R.join(":").trim().replace(/^['"]|['"]$/g,"");j==="name"&&(a.name=S),j==="title"&&(a.title=S),j==="icon"&&(a.icon=S),j==="role"&&(a.role=S),j==="reportsTo"&&(a.reportsTo=S)}if(!a.name)throw new Error("Missing required field: name");return c.length>0&&(a.skills=c),p.trim().length>0&&(a.instructionBody=p),a}function Ds({isOpen:n,onClose:d,onImported:b,projectId:p,initialInputMethod:a="paste"}){const{t:c}=Me("app");xa(n);const[v,g]=s.useState("input"),[l,x]=s.useState(a),[j,R]=s.useState(""),[C,S]=s.useState([]),[$,N]=s.useState("Unknown"),[I,B]=s.useState([]),[A,F]=s.useState([]),[y,D]=s.useState([]),[K,L]=s.useState([]),[X,se]=s.useState([]),[he,ne]=s.useState(!1),[le,ie]=s.useState(!1),[ce,H]=s.useState(null),[k,pe]=s.useState(null),[M,oe]=s.useState(null),de=s.useRef(null),Ee=s.useRef(null),[xe,fe]=s.useState([]),[q,Pe]=s.useState(""),[Z,be]=s.useState(null),[ve,W]=s.useState(!1),[Oe,J]=s.useState(null),Ne=s.useRef(!1);s.useEffect(()=>{l==="browse"&&!Ne.current&&!ve&&(Ne.current=!0,W(!0),J(null),Qt().then(r=>{r.error?J(r.error):r.companies.length>0?fe(r.companies):J(c("agents.noCompaniesAvailable","No companies available"))}).catch(r=>{J(r instanceof Error?r.message:c("agents.failedToLoadCompanies","Failed to load companies"))}).finally(()=>{W(!1)}))},[l,ve,c]);const Ke=s.useCallback(()=>{Ne.current=!0,J(null),fe([]),be(null),W(!0),Qt().then(r=>{r.error?J(r.error):r.companies.length>0?fe(r.companies):J(c("agents.noCompaniesAvailable","No companies available"))}).catch(r=>{J(r instanceof Error?r.message:c("agents.failedToLoadCompanies","Failed to load companies"))}).finally(()=>{W(!1)})},[c]),Ae=s.useCallback(()=>{g("input"),x(a),R(""),S([]),N("Unknown"),B([]),F([]),D([]),L([]),se([]),ne(!1),ie(!1),H(null),pe(null),oe(null),fe([]),Pe(""),be(null),W(!1),J(null),Ne.current=!1},[a]),_e=s.useCallback(()=>{Ae(),d()},[Ae,d]),Le=s.useCallback(r=>{const f=r.target.files?.[0];if(!f)return;const P=new FileReader;P.onload=V=>{const Q=V.target?.result;x("file"),S([]),R(Q),H(null)},P.onerror=()=>{H(c("agents.failedToReadFile","Failed to read file"))},P.readAsText(f),r.target.value=""},[c]),Ye=s.useCallback(async r=>{const f=Array.from(r.target.files??[]);if(f.length!==0)try{const P=f.filter(Q=>(Q.webkitRelativePath||Q.name).toLowerCase().endsWith("agents.md")).sort((Q,Y)=>{const De=Q.webkitRelativePath||Q.name,at=Y.webkitRelativePath||Y.name;return De.localeCompare(at)});if(P.length===0){H(c("agents.noAgentsMdFiles","Selected directory has no AGENTS.md files"));return}const V=[];for(const Q of P){const Y=await Q.text();V.push($s(Y))}x("directory"),S(V),R(""),H(null)}catch{H(c("agents.failedToParseDirectory","Failed to parse AGENTS.md files from selected directory"))}finally{r.target.value=""}},[c]);function Ie(r){if(!p)return`/api${r}`;const f=r.includes("?")?"&":"?";return`/api${r}${f}projectId=${encodeURIComponent(p)}`}const $e=s.useCallback(async()=>{if(l==="directory"&&C.length===0){H(c("agents.selectDirectory","Please select a directory containing AGENTS.md files"));return}if(l==="browse"&&!Z){H(c("agents.selectCompany","Please select a company from the catalog"));return}if(l!=="directory"&&l!=="browse"&&!j.trim()){H(c("agents.provideManifest","Please provide manifest content"));return}ne(!0),H(null);try{let r;l==="directory"?r={agents:C,dryRun:!0}:l==="browse"&&Z?r={importSource:"companies.sh",companySlug:Z.slug,dryRun:!0}:r={manifest:j,dryRun:!0};const f=await fetch(Ie("/agents/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!f.ok){const Y=await f.json();throw new Error(Y.error??`Parse failed (${f.status})`)}const P=await f.json(),V=P.agents&&P.agents.length>0?P.agents:P.created.map(Y=>({name:Y,role:"custom"})),Q=Array.isArray(P.skills)?P.skills:[];N(P.companyName??"Unknown"),B(V),F(Q),D(Array.isArray(P.warnings)?P.warnings:[]),L(V.map(Y=>Y.name)),se(Q.map(Y=>Y.name)),g("preview")}catch(r){H(r instanceof Error?r.message:c("agents.failedToParseManifest","Failed to parse manifest"))}finally{ne(!1)}},[l,C,j,Z,p,c]),z=s.useCallback(async()=>{ie(!0),oe(null);try{let r;l==="directory"?r={agents:C,skipExisting:!0,selectedAgents:K,selectedSkills:X}:l==="browse"&&Z?r={importSource:"companies.sh",companySlug:Z.slug,skipExisting:!0,selectedAgents:K,selectedSkills:X}:r={manifest:j,skipExisting:!0,selectedAgents:K,selectedSkills:X};const f=await fetch(Ie("/agents/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!f.ok){const V=await f.json();throw new Error(V.error??`Import failed (${f.status})`)}const P=await f.json();pe(P),g("result"),b()}catch(r){oe(r instanceof Error?r.message:c("agents.failedToImport","Failed to import agents"))}finally{ie(!1)}},[l,C,j,Z,K,X,p,b,c]),E=K.length,U=X.length,je=c("agents.selectedAgentLabel","{{count}} Agent{{plural}}",{count:E,plural:E!==1?"s":""}),Re=c("agents.selectedSkillLabel","{{count}} Skill{{plural}}",{count:U,plural:U!==1?"s":""}),ge=E>0&&U>0?`${je} + ${Re}`:U>0?Re:je,Fe=E>0&&U>0?c("agents.importingAgentsAndSkills","Importing {{agentCount}} agent{{agentPlural}} and {{skillCount}} skill{{skillPlural}}...",{agentCount:E,agentPlural:E!==1?"s":"",skillCount:U,skillPlural:U!==1?"s":""}):U>0?c("agents.importingSkills","Importing {{count}} skill{{plural}}...",{count:U,plural:U!==1?"s":""}):c("agents.importingAgents","Importing {{count}} agent{{plural}}...",{count:E,plural:E!==1?"s":""}),Te=r=>{L(f=>f.includes(r)?f.filter(P=>P!==r):[...f,r])},ze=r=>{se(f=>f.includes(r)?f.filter(P=>P!==r):[...f,r])};return n?e.jsx("div",{className:"agent-dialog-overlay",onClick:r=>{r.target===r.currentTarget&&_e()},children:e.jsxs("div",{className:"agent-dialog agent-import-dialog",role:"dialog","aria-modal":"true","aria-label":c("agents.importAgents","Import agents"),children:[e.jsxs("div",{className:"agent-dialog-header",children:[e.jsx("span",{className:"agent-dialog-header-title",children:c("agents.importAgents","Import Agents")}),e.jsx("button",{className:"modal-close",onClick:_e,"aria-label":c("agents.close","Close"),children:"×"})]}),e.jsxs("div",{className:"agent-dialog-body",children:[v==="input"&&e.jsxs("div",{className:"agent-import-input",children:[e.jsx("p",{className:"agent-import-description",children:c("agents.importDescription","Import agents from an Agent Companies package. Browse the companies.sh catalog to discover published agents, upload an AGENTS.md file, select a directory, or paste manifest content.")}),e.jsxs("div",{className:"agent-import-file-upload",children:[e.jsx("input",{ref:de,type:"file",accept:".md,.txt",onChange:Le,className:"agent-import-file-input","aria-label":"Upload agent manifest file"}),e.jsx("input",{ref:Ee,type:"file",webkitdirectory:"",multiple:!0,onChange:Ye,className:"agent-import-file-input","aria-label":"Select directory"}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>de.current?.click(),children:[e.jsx(zt,{size:16}),c("agents.chooseFile","Choose File")]}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>Ee.current?.click(),children:[e.jsx(Ns,{size:16}),c("agents.selectDirectory","Select Directory")]}),e.jsxs("button",{type:"button",className:"btn agent-import-upload-btn",onClick:()=>{x("browse"),S([]),R(""),be(null),H(null)},children:[e.jsx(qa,{size:16}),c("agents.browseCatalog","Browse Catalog")]}),e.jsx("span",{className:"agent-import-file-hint",children:c("agents.fileHint",".md and .txt files supported")})]}),l==="browse"&&e.jsxs("div",{className:"agent-import-browse",children:[e.jsxs("div",{className:"agent-import-browse-header",children:[e.jsxs("div",{className:"agent-import-browse-search",children:[e.jsx(Za,{size:16,className:"agent-import-browse-search-icon"}),e.jsx("input",{type:"text",className:"agent-import-browse-search-input",placeholder:c("agents.searchCompanies","Search companies..."),value:q,onChange:r=>Pe(r.target.value),"aria-label":c("agents.searchCompanies","Search companies")})]}),Z&&e.jsxs("div",{className:"agent-import-browse-selected",children:[e.jsxs("span",{className:"agent-import-browse-selected-label",children:[c("agents.selected","Selected:")," "]}),e.jsx("span",{className:"agent-import-browse-selected-name",children:Z.name}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>be(null),children:c("agents.change","Change")})]})]}),ve&&e.jsxs("div",{className:"agent-import-browse-loading",children:[e.jsx(St,{size:20,className:"spin"}),e.jsx("span",{children:c("agents.loadingCompanies","Loading companies...")})]}),Oe&&e.jsxs("div",{className:"agent-import-browse-error",children:[e.jsx(rt,{size:16}),e.jsx("span",{children:Oe}),e.jsxs("button",{type:"button",className:"btn btn-sm",onClick:Ke,children:[e.jsx(et,{size:14}),c("agents.retry","Retry")]})]}),!ve&&!Oe&&e.jsxs("div",{className:"agent-import-browse-list",children:[xe.filter(r=>q===""||r.name.toLowerCase().includes(q.toLowerCase())||(r.tagline?.toLowerCase().includes(q.toLowerCase())??!1)).map(r=>e.jsxs("div",{className:`agent-import-browse-item ${Z?.slug===r.slug?"agent-import-browse-item--selected":""}`,onClick:()=>be(r),role:"button",tabIndex:0,onKeyDown:f=>{(f.key==="Enter"||f.key===" ")&&be(r)},children:[e.jsxs("div",{className:"agent-import-browse-item-header",children:[e.jsx("span",{className:"agent-import-browse-item-name",children:r.name}),r.installs!==void 0&&e.jsxs("span",{className:"agent-import-browse-item-installs",children:[r.installs.toLocaleString()," ",c("agents.installs","installs")]})]}),r.tagline&&e.jsx("span",{className:"agent-import-browse-item-tagline",children:r.tagline}),r.repo&&e.jsx("span",{className:"agent-import-browse-item-repo",children:r.repo})]},r.slug)),xe.filter(r=>q===""||r.name.toLowerCase().includes(q.toLowerCase())||(r.tagline?.toLowerCase().includes(q.toLowerCase())??!1)).length===0&&e.jsx("p",{className:"agent-import-browse-empty",children:q?c("agents.noCompaniesMatch","No companies match your search"):c("agents.noCompaniesAvailable","No companies available")})]})]}),l!=="browse"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-divider",children:e.jsx("span",{children:c("agents.orPasteManifest","or paste manifest content")})}),e.jsx("textarea",{className:"agent-import-textarea",placeholder:c("agents.manifestPlaceholder",`---
23
- name: CEO
24
- title: Chief Executive Officer
25
- reportsTo: null
26
- skills:
27
- - review
28
- ---
29
- Agent instructions go here...`),value:j,onChange:r=>{x("paste"),S([]),R(r.target.value),H(null)},rows:8,"aria-label":c("agents.manifestContent","Manifest content")})]}),e.jsx("p",{className:"agent-import-file-hint",children:c("agents.currentInput","Current input: {{method}}",{method:l})}),ce&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(rt,{size:14}),ce]})]}),v==="preview"&&e.jsxs("div",{className:"agent-import-preview",children:[e.jsxs("div",{className:"agent-import-company",children:[e.jsx("span",{className:"agent-import-company-label",children:c("agents.company","Company")}),e.jsx("span",{className:"agent-import-company-name",children:$})]}),y.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:y.map((r,f)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(rt,{size:12}),e.jsx("span",{children:r})]},f))}),e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Lt,{size:14}),e.jsx("span",{children:c("agents.agentsFound","{{count}} agent{{plural}} found",{count:I.length,plural:I.length!==1?"s":""})})]}),I.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L(I.map(r=>r.name)),children:c("agents.selectAllAgents","Select all agents")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L([]),children:c("agents.clearAgents","Clear agents")})]}),I.length>0?e.jsx("div",{className:"agent-import-agent-list",children:I.map((r,f)=>e.jsxs("div",{className:"agent-import-agent-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":c("agents.selectAgent","Select agent {{name}}",{name:r.name}),checked:K.includes(r.name),onChange:()=>Te(r.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:r.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:r.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[r.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[r.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:r.role}),r.reportsTo&&e.jsxs("span",{className:"agent-import-agent-reports",children:[" · reports to ",r.reportsTo]}),r.skills&&r.skills.length>0&&e.jsxs("span",{className:"agent-import-agent-model",children:[" · skills: ",r.skills.join(", ")]})]}),r.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[r.instructionsText.slice(0,100),r.instructionsText.length>100?"...":""]})]})]},f))}):e.jsx("p",{className:"agent-import-empty",children:c("agents.noAgentsFound","No agents found in the manifest.")}),A.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Lt,{size:14}),e.jsx("span",{children:c("agents.skillsFound","{{count}} skill{{plural}} found",{count:A.length,plural:A.length!==1?"s":""})})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>se(A.map(r=>r.name)),children:c("agents.selectAllSkills","Select all skills")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>se([]),children:c("agents.clearSkills","Clear skills")})]}),e.jsx("div",{className:"agent-import-skill-list",children:A.map((r,f)=>e.jsxs("div",{className:"agent-import-skill-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":c("agents.selectSkill","Select skill {{name}}",{name:r.name}),checked:X.includes(r.name),onChange:()=>ze(r.name)})}),e.jsx("span",{className:"agent-import-skill-icon",children:"⚡"}),e.jsxs("div",{className:"agent-import-skill-details",children:[e.jsx("span",{className:"agent-import-skill-name",children:r.name}),r.description&&e.jsx("span",{className:"agent-import-skill-description",children:r.description})]})]},`${r.name}-${f}`))})]}),M&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(rt,{size:14}),M]})]}),v==="result"&&k&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(vt,{size:32})}),e.jsx("h3",{className:"agent-import-result-title",children:c("agents.importComplete","Import Complete")}),e.jsxs("p",{className:"agent-import-result-company",children:[c("agents.from","From")," ",e.jsx("strong",{children:k.companyName??"Unknown"})]}),e.jsxs("div",{className:"agent-import-result-stats",children:[k.created.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:c("agents.resultCreated","{{count}} created",{count:k.created.length})})}),k.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:c("agents.resultSkipped","{{count}} skipped (already exist)",{count:k.skipped.length})})}),k.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:c("agents.resultErrors","{{count}} error{{plural}}",{count:k.errors.length,plural:k.errors.length!==1?"s":""})})})]}),k.created.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:k.created.map((r,f)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(vt,{size:12}),e.jsx("span",{children:r.name})]},f))}),k.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:k.errors.map((r,f)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(ea,{size:12}),e.jsxs("span",{children:[r.name,": ",r.error]})]},f))}),k.warnings&&k.warnings.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:k.warnings.map((r,f)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(rt,{size:12}),e.jsx("span",{children:r})]},f))}),k.skills&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-result-divider"}),e.jsx("h4",{className:"agent-import-result-section-title",children:c("agents.skills","Skills")}),e.jsxs("div",{className:"agent-import-result-stats",children:[k.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:c("agents.skillsImported","{{count}} skill{{plural}} imported",{count:k.skills.imported.length,plural:k.skills.imported.length!==1?"s":""})})}),k.skills.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:c("agents.skillsSkipped","{{count}} skill{{plural}} skipped (already exist)",{count:k.skills.skipped.length,plural:k.skills.skipped.length!==1?"s":""})})}),k.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:c("agents.skillsErrors","{{count}} skill{{plural}} error{{pluralError}}",{count:k.skills.errors.length,plural:k.skills.errors.length!==1?"s":"",pluralError:k.skills.errors.length!==1?"s":""})})}),k.skills.imported.length===0&&k.skills.skipped.length===0&&k.skills.errors.length===0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:c("agents.noSkillsInPackage","No skills in package")})})]}),k.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:k.skills.imported.map((r,f)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(vt,{size:12}),e.jsx("span",{children:r.name})]},f))}),k.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:k.skills.errors.map((r,f)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(ea,{size:12}),e.jsxs("span",{children:[r.name,": ",r.error]})]},f))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[v==="preview"&&e.jsx("button",{className:"btn",onClick:()=>g("input"),disabled:le,children:c("agents.back","Back")}),e.jsx("button",{className:"btn",onClick:_e,disabled:le,children:v==="result"?c("agents.close","Close"):c("agents.cancel","Cancel")}),v==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void $e(),disabled:he||(l==="directory"?C.length===0:l==="browse"?!Z:!j.trim()),children:he?e.jsxs(e.Fragment,{children:[e.jsx(St,{size:14,className:"spin"}),c("agents.parsing","Parsing...")]}):c("agents.preview","Preview")}),v==="preview"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void z(),disabled:le||E===0&&U===0,children:le?e.jsxs(e.Fragment,{children:[e.jsx(St,{size:14,className:"spin"}),Fe]}):c("agents.importButton","Import {{label}}",{label:ge})})]})]})}):null}const Et="fn-agent-org-chart-layout";function ma(n){return n==="auto"||n==="horizontal"||n==="vertical"}const Vs=768,Bs={nodeWidth:220,siblingGap:24,rootGap:24,chartPadding:24},Ws={nodeWidth:160,siblingGap:8,rootGap:8,chartPadding:8};function ba(n){return n.children.length===0?1:n.children.reduce((d,b)=>d+ba(b),0)}function Us(n){return n<=Vs?Ws:Bs}function Gs(n,d){const b=ba(n);return b*d.nodeWidth+Math.max(0,b-1)*d.siblingGap}function Ks(n,d=Number.POSITIVE_INFINITY){const b=Us(d);if(n.length===0)return b.nodeWidth;const a=n.map(v=>Gs(v,b)).reduce((v,g)=>v+g,0),c=Math.max(0,n.length-1)*b.rootGap;return a+c+b.chartPadding*2}function Ys(n){const d=n.preference??"auto";if(d!=="auto")return d;const b=Number.isFinite(n.availableWidth)&&n.availableWidth>0?n.availableWidth:0;return b===0||n.tree.length<=1?"horizontal":Ks(n.tree,b)>b?"vertical":"horizontal"}const ha=s.lazy(()=>gs(()=>import("./AgentDetailView-DxV8pFHX.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])).then(n=>({default:n.AgentDetailView})));function Xs(n){return[{value:"triage",label:n("agents.roleTriage","Triage"),icon:"⊕"},{value:"executor",label:n("agents.roleExecutor","Executor"),icon:"▶"},{value:"reviewer",label:n("agents.roleReviewer","Reviewer"),icon:"⊙"},{value:"merger",label:n("agents.roleMerger","Merger"),icon:"⊞"},{value:"scheduler",label:n("agents.roleScheduler","Scheduler"),icon:"◷"},{value:"engineer",label:n("agents.roleEngineer","Engineer"),icon:"⎔"},{value:"custom",label:n("agents.roleCustom","Custom"),icon:"✦"}]}const Pt=[.1,.25,.5,1,2,3,5,10],qs=.25,Zs=3,bt=16,Qe=32;function Ht(n){switch(n){case"running":return"agent-badge--running";case"active":return"agent-badge--active";case"paused":return"agent-badge--paused";case"error":return"agent-badge--error";case"idle":default:return"agent-badge--idle"}}function Ot(n,d){switch(d){case"running":return`${n}--running`;case"active":return`${n}--active`;case"paused":return`${n}--paused`;case"error":return`${n}--error`;case"idle":default:return`${n}--idle`}}function va(n){return n.children.length===0?1:n.children.reduce((d,b)=>d+va(b),0)}function $t(n,d,b){return n.state==="error"?{title:void 0,label:b("agents.healthError","Error")}:{title:d.reason??d.label,label:d.stateDerived?null:d.label}}function fa({node:n,onSelect:d,getHealthStatus:b,selectedAgentId:p,registerNodeElement:a,linksRef:c}){const{t:v}=Me("app"),{agent:g,children:l}=n,x=b(g),j=$t(g,x,v),R=Ht(g.state),C=Ot("org-chart-node-card",g.state),S=va(n),$={"--org-chart-subtree-leaves":String(S)};return e.jsxs("div",{className:`org-chart-node${l.length>0?" org-chart-node--has-children":""}`,style:$,children:[e.jsxs("div",{ref:N=>a(g.id,N),"data-agent-id":g.id,className:`org-chart-node-card ${C}${p===g.id?" agent-card--selected":""}`,onClick:()=>d(g.id),role:"button",tabIndex:0,onKeyDown:N=>{(N.key==="Enter"||N.key===" ")&&(N.key===" "&&N.preventDefault(),d(g.id))},children:[e.jsxs("div",{className:"org-chart-node__header",children:[e.jsx("span",{className:"org-chart-node__icon",children:e.jsx(ft,{agent:g,size:20})}),e.jsx("span",{className:"org-chart-node__name",children:g.name})]}),e.jsxs("div",{className:"org-chart-node__meta",children:[e.jsx("span",{className:`org-chart-node__badge ${R}`,children:g.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:x.color},title:j.title,children:[x.icon,j.label&&e.jsx("span",{className:"text-secondary",children:j.label})]})]})]}),l.length>0&&e.jsx("div",{className:"org-chart-children",role:"group","aria-label":v("agents.orgChartEmployees","{{name}} employees",{name:g.name}),children:l.map(N=>(c.current.push({parentId:g.id,childId:N.agent.id}),e.jsx(fa,{node:N,onSelect:d,getHealthStatus:b,selectedAgentId:p,registerNodeElement:a,linksRef:c},N.agent.id)))})]})}function Js({links:n,nodeElements:d,canvasRef:b,viewportRef:p,layoutMode:a,transform:c}){const[v,g]=s.useState([]);return s.useLayoutEffect(()=>{const l=b.current,x=p.current;if(!l||!x||n.length===0){g([]);return}const j=()=>{const C=l.getBoundingClientRect(),S=n.flatMap(({parentId:$,childId:N})=>{const I=d.get($),B=d.get(N);if(!I||!B)return[];const A=I.getBoundingClientRect(),F=B.getBoundingClientRect(),y=(A.left-C.left)/c.scale,D=(A.top-C.top)/c.scale,K=(F.left-C.left)/c.scale,L=(F.top-C.top)/c.scale;if(a==="vertical"){const ie=y,ce=D+A.height/c.scale/2,H=K,k=L+F.height/c.scale/2,pe=ie-(ie-H)/2;return[`M ${ie} ${ce} L ${pe} ${ce} L ${pe} ${k} L ${H} ${k}`]}const X=y+A.width/c.scale/2,se=D+A.height/c.scale,he=K+F.width/c.scale/2,ne=L,le=se+(ne-se)/2;return[`M ${X} ${se} L ${X} ${le} L ${he} ${le} L ${he} ${ne}`]});g(S)};j();const R=new ResizeObserver(j);return R.observe(l),R.observe(x),d.forEach(C=>R.observe(C)),()=>R.disconnect()},[b,a,n,d,c.scale,p]),e.jsx("svg",{className:"agent-org-chart-connectors","aria-hidden":"true",children:v.map((l,x)=>e.jsx("path",{d:l},`${x}-${l}`))})}function cn({addToast:n,projectId:d,onOpenTaskLogs:b,agentOnboardingEnabled:p=!1}){const{t:a}=Me("app"),c=Xs(a),[v,g]=s.useState(!1),x=Ja()==="mobile",[j,R]=s.useState("all"),{agents:C,stats:S,isLoading:$,loadAgents:N,refreshAgents:I}=Qa(d,{filterState:j,showSystemAgents:v}),[B,A]=s.useState(!1),[F,y]=s.useState(null),[D,K]=s.useState(!1),[L,X]=s.useState(null),[se,he]=s.useState(null),ne=x&&!!L,[le,ie]=s.useState("dashboard"),[ce,H]=s.useState(null),[k,pe]=s.useState(!1),[M,oe]=s.useState(()=>{if(typeof window>"u")return"list";const t=ht("fn-agent-view",d);return t==="list"||t==="board"||t==="org"?t:"list"}),[de,Ee]=s.useState(()=>{if(typeof window>"u")return"auto";const t=ht(Et,d);return ma(t)?t:"auto"}),[xe,fe]=s.useState([]),[q,Pe]=s.useState(!1),[Z,be]=s.useState(0),[ve,W]=s.useState(!1),[Oe,J]=s.useState(!1),[Ne,Ke]=s.useState(!1),[Ae,_e]=s.useState(!1),[Le,Ye]=s.useState(0),[Ie,$e]=s.useState(0),[z,E]=s.useState({scale:1,x:0,y:0}),[U,je]=s.useState(!1),Re=s.useRef(null),ge=s.useRef(null),Fe=s.useRef(null),Te=s.useRef(new Map),ze=s.useRef([]),r=s.useRef(new Map),f=s.useRef(null),P=s.useRef(null),V=s.useRef(!1),{confirm:Q}=es(),Y=s.useRef(null),De=s.useId();s.useEffect(()=>{const t=ht("fn-agent-view",d);if(t==="list"||t==="board"||t==="org"){oe(t);return}oe("list")},[d]),s.useEffect(()=>{ta("fn-agent-view",M,d)},[M,d]),s.useEffect(()=>{const t=ht(Et,d);Ee(ma(t)?t:"auto")},[d]),s.useEffect(()=>{ta(Et,de,d)},[de,d]);const[at,ye]=s.useState(null),Xe=s.useRef(null),[Nt,ke]=s.useState(null),[Ve,Ce]=s.useState(null),[st,we]=s.useState({}),[i,_]=s.useState(1),[He,Be]=s.useState(!1),[Se,Dt]=s.useState(new Set),[yt,qe]=s.useState(new Map),ct=s.useRef(!0);s.useEffect(()=>(ct.current=!0,()=>{ct.current=!1}),[]),s.useEffect(()=>{ts(d).then(t=>{ct.current&&_(t.heartbeatMultiplier??1)}).catch(()=>{})},[d]);const Vt=s.useCallback(async t=>{const o=Number.isFinite(t)&&t>0?t:1;_(o),Be(!0);try{await as({heartbeatMultiplier:o},d),n(a("agents.heartbeatSpeedSet","Heartbeat speed set to ×{{value}}",{value:o.toFixed(1)}),"success")}catch(u){n(a("agents.heartbeatSpeedSaveFailed","Failed to save heartbeat multiplier: {{error}}",{error:me(u)}),"error")}finally{ct.current&&Be(!1)}},[d,n]),dt=s.useMemo(()=>yt.size===0?C:C.map(t=>{const o=yt.get(t.id);return o?{...t,state:o}:t}),[C,yt]),nt=s.useMemo(()=>dt.filter(t=>v||!ot(t)),[dt,v]),ja=s.useMemo(()=>dt.filter(t=>t.state!=="active"&&t.state!=="running"?!1:v||!ot(t)),[dt,v]),We=s.useMemo(()=>{if(v)return xe;const t=o=>ot(o.agent)?null:{...o,children:o.children.map(t).filter(u=>u!==null)};return xe.map(t).filter(o=>o!==null)},[xe,v]);s.useEffect(()=>{if(M!=="org")return;const t=ge.current;if(!t)return;const o=()=>{be(t.clientWidth)};o();const u=typeof ResizeObserver<"u"?new ResizeObserver(o):null;return u?.observe(t),window.addEventListener("resize",o),()=>{u?.disconnect(),window.removeEventListener("resize",o)}},[M,We.length]),s.useEffect(()=>{if(M!=="org")return;let t=!1;return Pe(!0),ss(d,{includeEphemeral:v}).then(o=>{t||fe(o)}).catch(o=>{t||(n(a("agents.orgChartLoadFailed","Failed to load org chart: {{error}}",{error:me(o)}),"error"),fe([]))}).finally(()=>{t||Pe(!1)}),()=>{t=!0}},[M,d,v,n]),s.useEffect(()=>{const t=setInterval(()=>{N()},3e4);return()=>{clearInterval(t)}},[N]),s.useEffect(()=>{if(!ve)return;let t=!1;_e(!0),Ft(void 0,d).then(m=>{if(t)return;const w=m.filter(T=>!ot(T));Ye(w.filter(T=>T.state==="active"||T.state==="running").length),$e(w.filter(T=>T.state==="paused").length)}).catch(m=>{t||(Ye(0),$e(0),n(a("agents.bulkActionsLoadFailed","Failed to load bulk agent actions: {{error}}",{error:me(m)}),"error"))}).finally(()=>{t||_e(!1)});const o=m=>{const w=m.target;w&&(Re.current?.contains(w)||Y.current?.contains(w)||W(!1))},u=m=>{m.key==="Escape"&&(W(!1),Y.current?.focus())};return document.addEventListener("mousedown",o),document.addEventListener("touchstart",o),document.addEventListener("keydown",u),()=>{t=!0,document.removeEventListener("mousedown",o),document.removeEventListener("touchstart",o),document.removeEventListener("keydown",u)}},[n,ve,d]);const Bt=async t=>{if(!Ne){Ke(!0);try{const u=(await Ft(void 0,d)).filter(G=>!ot(G)),m=u.filter(G=>t==="paused"?G.state==="active"||G.state==="running":G.state==="paused"),w=u.length-m.length;if(m.length===0){n(t==="paused"?a("agents.noAgentsToPause","No agents eligible to pause"):a("agents.noAgentsToResume","No agents eligible to resume"),"error");return}if(!await Q({title:t==="paused"?a("agents.pauseAllTitle","Pause All Agents"):a("agents.resumeAllTitle","Resume All Agents"),message:t==="paused"?a("agents.pauseAllConfirm",{count:m.length,defaultValue_one:"Pause {{count}} agent in this project?",defaultValue_other:"Pause {{count}} agents in this project?"}):a("agents.resumeAllConfirm",{count:m.length,defaultValue_one:"Resume {{count}} agent in this project?",defaultValue_other:"Resume {{count}} agents in this project?"}),danger:t==="paused"}))return;const re=await Promise.allSettled(m.map(G=>ia(G.id,t,d))),ae=re.map((G,mt)=>({result:G,agent:m[mt]})).filter(G=>G.result.status==="rejected"),h=re.length-ae.length,O=ae.length,te=t==="paused"?a("agents.pausedSummary",{count:h,skipped:w,defaultValue_one:"Paused {{count}} agent; skipped {{skipped}}",defaultValue_other:"Paused {{count}} agents; skipped {{skipped}}"}):a("agents.resumedSummary",{count:h,skipped:w,defaultValue_one:"Resumed {{count}} agent; skipped {{skipped}}",defaultValue_other:"Resumed {{count}} agents; skipped {{skipped}}"});if(O>0){const G=ae.slice(0,3).map(({agent:mt,result:za})=>`${mt.name||mt.id}: ${me(za.reason)}`).join("; ");n(`${te}; failed ${O}${G?` (${G})`:""}`,"error")}else n(te,"success");await N()}catch(o){n(t==="paused"?a("agents.pauseAgentsFailed","Failed to pause agents: {{error}}",{error:me(o)}):a("agents.resumeAgentsFailed","Failed to resume agents: {{error}}",{error:me(o)}),"error")}finally{Ke(!1)}}},lt=async(t,o)=>{if(!Se.has(t)){Dt(u=>new Set(u).add(t)),qe(u=>{const m=new Map(u);return m.set(t,o),m});try{await ia(t,o,d),n(a("agents.stateUpdated","Agent state updated to {{state}}",{state:o}),"success"),await N(),qe(u=>{const m=new Map(u);return m.delete(t),m})}catch(u){qe(m=>{const w=new Map(m);return w.delete(t),w}),n(a("agents.stateUpdateFailed","Failed to update state: {{error}}",{error:me(u)}),"error")}finally{Dt(u=>{const m=new Set(u);return m.delete(t),m})}}},Wt=async(t,o)=>{if(await Q({title:a("agents.deleteTitle","Delete Agent"),message:a("agents.deleteConfirm",'Delete agent "{{name}}"? This cannot be undone.',{name:o}),danger:!0}))try{await ms(t,d),n(a("agents.deleted",'Agent "{{name}}" deleted',{name:o}),"success"),await N()}catch(m){n(a("agents.deleteFailed","Failed to delete agent: {{error}}",{error:me(m)}),"error")}},Na=async(t,o)=>{const u=C.find(m=>m.id===t);if(u){if(u.role===o){ye(null);return}try{await xt(t,{role:o},d),n(a("agents.roleUpdated","Agent role updated to {{role}}",{role:c.find(m=>m.value===o)?.label??o}),"success"),ye(null),N()}catch(m){n(a("agents.roleUpdateFailed","Failed to update role: {{error}}",{error:me(m)}),"error")}}},ya=(t,o)=>{t.key==="Escape"&&ye(null)},ka=async(t,o)=>{Ve===t.id&&(Ce(null),we(u=>{const m={...u};return delete m[t.id],m})),ke(t.id);try{await xt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:o}},d),n(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:ra(o),name:t.name}),"success"),N()}catch(u){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(u)}),"error")}finally{ke(null)}},Ut=async t=>{const o=st[t.id]??"";if(o.trim()===""){n(a("agents.heartbeatEnterMinutes","Please enter a heartbeat interval in minutes"),"error");return}const u=Number(o);if(isNaN(u)){n(a("agents.heartbeatMustBeNumber","Heartbeat interval must be a valid number"),"error");return}if(u<=0){n(a("agents.heartbeatMustBePositive","Heartbeat interval must be greater than 0"),"error");return}if(u>=1&&u<5){ke(t.id);try{await xt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:hs}},d),n(a("agents.heartbeatClampedToMin",{count:u,defaultValue_one:"Heartbeat interval set to 5 minutes (minimum). {{count}} minute was below the 5-minute minimum.",defaultValue_other:"Heartbeat interval set to 5 minutes (minimum). {{count}} minutes was below the 5-minute minimum."}),"success"),Ce(null),we(w=>{const T={...w};return delete T[t.id],T}),N()}catch(w){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(w)}),"error")}finally{ke(null)}return}const m=Math.round(u*6e4);ke(t.id);try{await xt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:m}},d),n(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:ra(m),name:t.name}),"success"),Ce(null),we(w=>{const T={...w};return delete T[t.id],T}),N()}catch(w){n(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(w)}),"error")}finally{ke(null)}},Ca=t=>{const o=_t(t.runtimeConfig?.heartbeatIntervalMs),u=Math.round(o/6e4);Ce(t.id),we(m=>({...m,[t.id]:String(u)}))},ue=s.useCallback((t,o)=>{X(t),ie(o?.initialTab??"dashboard"),H(o?.initialRunId??null),pe(o?.preferActiveRun??!1)},[]),Ue=s.useCallback(()=>{X(null),ie("dashboard"),H(null),pe(!1)},[]),Gt=s.useCallback(t=>{ue(t)},[ue]),wa=s.useCallback(t=>{he(t),ue(t)},[ue]),Sa=s.useCallback(async({agentId:t,deleted:o})=>{await I(),o&&L===t&&Ue()},[I,L,Ue]),Aa=s.useCallback(t=>{ue(t),x&&J(!1)},[x,ue]),Ra=async(t,o)=>{qe(u=>{const m=new Map(u);return m.set(t,"running"),m});try{await ps(t,d,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),n(a("agents.heartbeatRunStarted","Heartbeat run started for {{name}}",{name:o}),"success"),await N(),qe(u=>{const m=new Map(u);return m.delete(t),m})}catch(u){qe(m=>{const w=new Map(m);return w.delete(t),w}),n(a("agents.heartbeatRunFailed","Failed to start heartbeat run: {{error}}",{error:me(u)}),"error")}},Ge=s.useCallback(t=>Math.min(Zs,Math.max(qs,t)),[]),ee=s.useCallback(t=>{const o=ge.current,u=Fe.current?.querySelector(".agent-org-chart");if(!o||!u)return{...t,scale:Ge(t.scale)};const m=Ge(t.scale),w=u.scrollWidth*m,T=u.scrollHeight*m,re=o.clientWidth,ae=o.clientHeight,h=Math.min(Qe,re-w-Qe),O=Qe,te=Math.min(Qe,ae-T-Qe),G=Qe;return{scale:m,x:Math.max(h,Math.min(O,t.x)),y:Math.max(te,Math.min(G,t.y))}},[Ge]),gt=s.useCallback((t,o,u)=>{const m=ge.current;m&&E(w=>{const T=Ge(t),re=m.getBoundingClientRect(),ae=o-re.left,h=u-re.top,O=(ae-w.x)/w.scale,te=(h-w.y)/w.scale;return ee({scale:T,x:ae-O*T,y:h-te*T})})},[Ge,ee]),Ze=s.useCallback(()=>{const t=ge.current,o=Fe.current?.querySelector(".agent-org-chart");if(!t||!o)return;const u=t.clientWidth,m=t.clientHeight,w=o.scrollWidth,T=o.scrollHeight;if(w<=0||T<=0)return;const re=Ge(Math.min(u/w,m/T,1)),ae=(u-w*re)/2,h=(m-T*re)/2;E(ee({scale:re,x:ae,y:h}))},[Ge,ee]),kt=s.useCallback(t=>{oe(t),t!=="org"&&E({scale:1,x:0,y:0}),x&&L&&Ue()},[Ue,x,L]),Kt=t=>c.find(o=>o.value===t)?.label??t,ut=s.useMemo(()=>Ys({tree:We,availableWidth:Z,preference:de}),[We,de,Z]),Yt=s.useCallback(t=>{Ee(t),E({scale:1,x:0,y:0})},[]);s.useEffect(()=>{E({scale:1,x:0,y:0}),V.current=!1},[d,ut]),s.useLayoutEffect(()=>{M!=="org"||q||We.length===0||V.current||(Ze(),V.current=!0)},[M,We.length,Ze,q]);const Ta=s.useCallback((t,o)=>{o?Te.current.set(t,o):Te.current.delete(t)},[]),Xt=s.useCallback(()=>e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>E(t=>ee({...t,scale:t.scale*.9})),"aria-label":a("agents.orgChartZoomOut","Zoom out org chart"),title:a("agents.zoomOut","Zoom out"),children:e.jsx(Ts,{size:16})}),e.jsxs("span",{className:"agent-org-chart-controls__zoom-label","aria-live":"polite",children:[Math.round(z.scale*100),"%"]}),e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>E(t=>ee({...t,scale:t.scale*1.1})),"aria-label":a("agents.orgChartZoomIn","Zoom in org chart"),title:a("agents.zoomIn","Zoom in"),children:e.jsx(As,{size:16})}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm agent-org-chart-controls__fit-btn",onClick:Ze,"aria-label":a("agents.orgChartFit","Fit org chart"),title:a("agents.orgChartFit","Fit org chart"),children:[e.jsx(ns,{size:16}),a("agents.fit","Fit")]}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm",onClick:()=>E(t=>ee({...t,x:0,y:0})),"aria-label":a("agents.orgChartCenter","Center org chart"),title:a("agents.orgChartCenter","Center org chart"),children:[e.jsx(ls,{size:16}),a("agents.center","Center")]})]}),[ee,Ze,z.scale]),Ma=s.useCallback(t=>{if(!(t.ctrlKey||t.metaKey))return;t.preventDefault();const o=t.deltaY>0?.9:1.1;gt(z.scale*o,t.clientX,t.clientY)},[z.scale,gt]),Ea=s.useCallback(t=>{if(t.target.closest(".org-chart-node-card"))return;if(t.currentTarget.setPointerCapture?.(t.pointerId),r.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),r.current.size===1){f.current={x:t.clientX-z.x,y:t.clientY-z.y,pointerId:t.pointerId},je(!0);return}if(r.current.size===2){const u=Array.from(r.current.values()),m=u[0].x-u[1].x,w=u[0].y-u[1].y;P.current={distance:Math.hypot(m,w),scale:z.scale,centerX:(u[0].x+u[1].x)/2,centerY:(u[0].y+u[1].y)/2},f.current=null}},[z.scale,z.x,z.y]),Pa=s.useCallback(t=>{if(r.current.has(t.pointerId)){if(r.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),r.current.size>=2){const o=Array.from(r.current.values()),u=P.current;if(!u)return;const m=o[0].x-o[1].x,w=o[0].y-o[1].y,T=Math.hypot(m,w),re=u.scale*(T/u.distance);gt(re,u.centerX,u.centerY);return}!f.current||f.current.pointerId!==t.pointerId||E(o=>ee({...o,x:t.clientX-f.current.x,y:t.clientY-f.current.y}))}},[ee,gt]),qt=s.useCallback(t=>{r.current.delete(t.pointerId),r.current.size<2&&(P.current=null),r.current.size===0&&(f.current=null,je(!1))},[]),_a=s.useCallback(t=>{if(t.key==="ArrowLeft")E(o=>ee({...o,x:o.x+bt}));else if(t.key==="ArrowRight")E(o=>ee({...o,x:o.x-bt}));else if(t.key==="ArrowUp")E(o=>ee({...o,y:o.y+bt}));else if(t.key==="ArrowDown")E(o=>ee({...o,y:o.y-bt}));else if(t.key==="+"||t.key==="=")E(o=>ee({...o,scale:o.scale*1.1}));else if(t.key==="-")E(o=>ee({...o,scale:o.scale*.9}));else if(t.key==="0")Ze();else if(t.key==="Home")E({scale:1,x:0,y:0});else return;t.preventDefault()},[ee,Ze]),Zt=s.useCallback(()=>{const t=[{value:"horizontal",label:a("agents.layoutHorizontal","Horizontal"),icon:e.jsx(aa,{size:16}),ariaLabel:a("agents.layoutHorizontalAria","Horizontal layout")},{value:"vertical",label:a("agents.layoutVertical","Vertical"),icon:e.jsx(sa,{size:16}),ariaLabel:a("agents.layoutVerticalAria","Vertical layout")},{value:"auto",label:a("agents.layoutAuto","Auto"),icon:e.jsx(et,{size:16}),ariaLabel:a("agents.layoutAutoAria","Automatic layout")}];return e.jsx("div",{className:"agent-org-chart-layout-toggle","data-testid":"agent-org-chart-layout-toggle",children:t.map(o=>{const u=de===o.value;return e.jsxs("button",{type:"button",className:`btn-icon touch-target agent-org-chart-layout-toggle__button${u?" btn-icon--active":""}`,onClick:()=>Yt(o.value),"aria-pressed":u,"aria-label":o.ariaLabel,title:o.ariaLabel,"data-layout-value":o.value,children:[o.icon,e.jsx("span",{className:"agent-org-chart-layout-toggle__text",children:o.label})]},o.value)})})},[Yt,de]),La=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],Ct=t=>us(t),Ia=Ae||Ne||Le===0,Fa=Ae||Ne||Ie===0,Jt=$&&C.length===0,it=s.useCallback(()=>{A(!0)},[]);return e.jsxs("div",{className:"agents-view",children:[e.jsxs("div",{className:"agents-view-header",children:[e.jsxs("div",{className:"agents-view-title",children:[e.jsx(It,{size:24}),e.jsx("h2",{children:a("agents.title","Agents")})]}),e.jsxs("div",{className:"agents-view-controls",children:[e.jsxs("div",{className:"view-toggle",children:[e.jsx("button",{className:`view-toggle-btn${M==="list"?" active":""}`,onClick:()=>kt("list"),title:a("agents.listView","List view"),"aria-label":a("agents.listView","List view"),"aria-pressed":M==="list",children:e.jsx(sa,{size:16})}),e.jsx("button",{className:`view-toggle-btn${M==="board"?" active":""}`,onClick:()=>kt("board"),title:a("agents.boardView","Board view"),"aria-label":a("agents.boardView","Board view"),"aria-pressed":M==="board",children:e.jsx(tt,{size:16})}),e.jsx("button",{className:`view-toggle-btn${M==="org"?" active":""}`,onClick:()=>kt("org"),title:a("agents.orgChartView","Org Chart view"),"aria-label":a("agents.orgChartView","Org Chart view"),"aria-pressed":M==="org",children:e.jsx(aa,{size:16})})]}),e.jsxs("div",{className:"agents-view-primary-actions",children:[e.jsx("button",{ref:Y,className:`btn-icon agent-controls-trigger${ve?" agent-controls-trigger--active":""}`,onClick:()=>W(t=>!t),title:a("agents.controls","Controls"),"aria-label":a("agents.controls","Controls"),"aria-haspopup":"dialog","aria-expanded":ve,"aria-controls":De,children:e.jsx(ws,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void N(),title:a("agents.refresh","Refresh"),"aria-label":a("agents.refresh","Refresh"),children:e.jsx(et,{size:16,className:$?"spin":void 0})}),!x&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{K(!0),W(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(zt,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{it(),W(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(na,{size:16}),a("agents.newAgent","New Agent")]})]}),ve&&e.jsxs("div",{ref:Re,id:De,className:"agent-controls-panel agent-controls-panel--scrollable",role:"dialog","aria-label":a("agents.agentControls","Agent controls"),"aria-modal":"false",children:[e.jsx("div",{className:"agent-controls",children:e.jsxs("div",{className:"agent-controls-filters",children:[e.jsxs("div",{className:"agent-state-filter",children:[e.jsx(is,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:j,onChange:t=>R(t.target.value),"aria-label":a("agents.filterByState","Filter agents by state"),children:[e.jsx("option",{value:"all",children:a("agents.stateAll","All States")}),e.jsx("option",{value:"idle",children:a("agents.stateIdle","Idle")}),e.jsx("option",{value:"active",children:a("agents.stateActive","Active")}),e.jsx("option",{value:"running",children:a("agents.stateRunning","Running")}),e.jsx("option",{value:"paused",children:a("agents.statePaused","Paused")}),e.jsx("option",{value:"error",children:a("agents.stateError","Error")})]})]}),e.jsxs("label",{className:"checkbox-label agent-system-filter",children:[e.jsx("input",{type:"checkbox",checked:v,onChange:t=>g(t.target.checked),"aria-label":a("agents.showSystemAgents","Show system agents")}),a("agents.showSystemAgents","Show system agents")]})]})}),x&&e.jsxs("div",{className:"agent-controls-mobile-actions",children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{K(!0),W(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(zt,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{it(),W(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(na,{size:16}),a("agents.newAgent","New Agent")]})]}),e.jsxs("div",{className:"agent-controls-bulk-actions",role:"menu","aria-label":a("agents.bulkAgentActions","Bulk agent actions"),children:[e.jsxs("button",{type:"button",className:"agent-detail-bulk-menu-item",role:"menuitem",disabled:Ia,onClick:()=>{W(!1),Bt("paused")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(At,{}),e.jsx("span",{children:a("agents.pauseAllAgents","Pause All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:Ae?a("agents.loadingEligibility","Loading eligibility…"):Le===0?a("agents.noAgentsToPauseHint","No active or running project agents to pause"):a("agents.pauseCountHint",{count:Le,defaultValue_one:"Pause {{count}} active/running agent",defaultValue_other:"Pause {{count}} active/running agents"})})]}),e.jsxs("button",{type:"button",className:"agent-detail-bulk-menu-item",role:"menuitem",disabled:Fa,onClick:()=>{W(!1),Bt("active")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(pt,{}),e.jsx("span",{children:a("agents.resumeAllAgents","Resume All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:Ae?a("agents.loadingEligibility","Loading eligibility…"):Ie===0?a("agents.noAgentsToResumeHint","No paused project agents to resume"):a("agents.resumeCountHint",{count:Ie,defaultValue_one:"Resume {{count}} paused agent",defaultValue_other:"Resume {{count}} paused agents"})})]})]}),e.jsx("div",{className:"agent-global-controls agent-controls-actions",children:e.jsxs("div",{className:"heartbeat-multiplier-group",children:[e.jsxs("div",{className:"heartbeat-multiplier-controls",children:[e.jsx("label",{htmlFor:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-label",children:a("agents.heartbeatSpeed","Heartbeat Speed")}),e.jsx("input",{id:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-slider touch-target",type:"range",min:.1,max:10,step:.1,value:i,onChange:t=>{const o=Number(t.target.value);Vt(Number.isFinite(o)&&o>0?o:1)},disabled:He}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",i.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(Pt.reduce((t,o)=>Math.abs(o-i)<Math.abs(t-i)?o:t,Pt[0])),onChange:t=>{const o=Number(t.target.value);Vt(Number.isFinite(o)&&o>0?o:1)},disabled:He,"aria-label":a("agents.heartbeatSpeedPreset","Heartbeat speed preset"),children:Pt.map(t=>e.jsxs("option",{value:String(t),children:["×",t]},t))})]}),e.jsx("small",{className:"text-secondary",children:a("agents.heartbeatSpeedHint","Scales all agent heartbeat intervals. ×0.5 = twice as fast, ×2.0 = twice as slow. Default: ×1.0")})]})}),e.jsx(Ms,{agents:nt})]})]})]})]}),e.jsx(Os,{isOpen:B,onClose:()=>{A(!1),y(null)},onCreated:()=>{A(!1),y(null),N()},projectId:d,prefillDraft:F,agentOnboardingEnabled:p,existingAgents:C,onPrefillDraft:y}),e.jsx(Ds,{isOpen:D,onClose:()=>K(!1),onImported:()=>void N(),projectId:d}),e.jsx(zs,{stats:S,activeAgents:ja,projectId:d,isOpen:Oe,onToggle:()=>J(t=>!t),onSelectAgent:Aa,onOpenTaskLogs:b}),M==="org"?e.jsx("div",{className:"agents-org-full-view",children:e.jsx("div",{className:"agents-view-content agents-view-content--org-full",children:L?e.jsxs("div",{className:"agents-org-detail-view","data-testid":"agents-org-detail-view",children:[e.jsx("button",{type:"button",className:"btn btn-sm agents-org-detail-back",onClick:Ue,"aria-label":a("agents.backToOrgChart","Back to org chart"),children:a("agents.backToOrgChart","Back to org chart")}),e.jsx(s.Suspense,{fallback:null,children:e.jsx(ha,{inline:!0,showInlineBackButton:!1,agentId:L,projectId:d,onClose:Ue,addToast:n,onChildClick:Gt,initialTab:le,initialRunId:ce,preferActiveRun:k},L)})]}):Jt?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(et,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingAgents","Loading agents...")})]}):e.jsxs("div",{className:"agent-org-chart-shell","data-testid":"agent-org-chart-shell",children:[x?e.jsxs("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:[Zt(),Xt()]}):e.jsxs("div",{className:"agent-org-chart-toolbar",children:[Zt(),e.jsx("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:Xt()})]}),e.jsx("div",{ref:ge,className:"agent-org-chart-viewport","data-testid":"agent-org-chart-viewport",tabIndex:0,role:"region","aria-label":a("agents.orgChartCanvas","Org chart canvas"),onWheel:Ma,onPointerDown:Ea,onPointerMove:Pa,onPointerUp:qt,onPointerCancel:qt,onKeyDown:_a,"data-panning":U?"true":"false",children:e.jsxs("div",{ref:Fe,className:`agent-org-chart-canvas agent-org-chart-canvas--zoom-${Math.round((z.scale??1)*100)}`,"data-panning":U?"true":"false",style:{transform:`translate(${z.x}px, ${z.y}px) scale(${z.scale})`},children:[e.jsx("div",{className:`agent-org-chart${ut==="vertical"?" agent-org-chart--vertical":""}`,"data-testid":"agent-org-chart","data-layout-mode":ut,children:q?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx(et,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingOrgChart","Loading org chart...")})]}):We.length===0?e.jsx(Tt,{onCtaClick:it}):(ze.current=[],We.map(t=>e.jsx(fa,{node:t,onSelect:wa,getHealthStatus:Ct,selectedAgentId:se,registerNodeElement:Ta,linksRef:ze},t.agent.id)))}),e.jsx(Js,{links:ze.current,nodeElements:Te.current,canvasRef:Fe,viewportRef:ge,layoutMode:ut,transform:z})]})})]})})}):e.jsxs("div",{className:"agents-split-layout",children:[e.jsx("div",{className:`agents-split-sidebar${ne?" agents-split-sidebar--hidden-mobile":""}`,children:e.jsx("div",{className:"agents-view-content",children:Jt?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(et,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingAgents","Loading agents...")})]}):M==="board"?e.jsx("div",{className:"agent-board",children:nt.length===0?e.jsx(Tt,{onCtaClick:it}):nt.map(t=>{const o=Ct(t),u=$t(t,o,a),m=Ht(t.state),w=Ot("agent-board-card",t.state);return e.jsxs("div",{className:`agent-board-card ${w}${L===t.id?" agent-card--selected":""}`,children:[e.jsxs("div",{className:"agent-board-clickable",onClick:()=>ue(t.id),role:"button",tabIndex:0,onKeyDown:T=>{(T.key==="Enter"||T.key===" ")&&(T.key===" "&&T.preventDefault(),ue(t.id))},children:[e.jsxs("div",{className:"agent-board-header",children:[e.jsx("span",{className:"agent-board-icon",children:e.jsx(ft,{agent:t,size:20})}),e.jsx("span",{className:"agent-board-badge badge text-secondary",children:Kt(t.role)}),e.jsx("span",{className:`agent-board-badge badge ${m}`,children:t.state}),(t.pendingApprovalCount??0)>0?e.jsxs("span",{className:"agent-board-badge badge agent-approval-badge",title:a("agents.pendingApprovals","Pending approvals"),children:[e.jsx("span",{className:"status-dot status-dot--pending"}),t.pendingApprovalCount]}):null]}),e.jsx("div",{className:"agent-board-name",children:t.name}),e.jsx("div",{className:"agent-board-id",children:t.id}),e.jsxs("div",{className:"agent-board-health",style:{color:o.color},title:u.title,children:[o.icon,u.label?` ${u.label}`:""]})]}),(t.state==="idle"||t.state==="paused"||t.state==="error")&&e.jsx("div",{className:"agent-board-actions",children:e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void Wt(t.id,t.name),title:a("agents.delete","Delete"),children:e.jsx(la,{size:14})})})]},t.id)})}):e.jsx("div",{className:"agent-list",children:nt.length===0?e.jsx(Tt,{onCtaClick:it}):nt.map(t=>{const o=Ct(t),u=$t(t,o,a),m=Ht(t.state),w=Ot("agent-card",t.state),T=_t(t.runtimeConfig?.heartbeatIntervalMs),re=rs(T),ae=Nt===t.id;return e.jsxs("div",{className:`agent-card agent-card--clickable ${w}${L===t.id?" agent-card--selected":""}`,onClick:h=>{const O=h.target;if(O===h.currentTarget){ue(t.id);return}const te=O.closest('button, select, input, [role="button"]');te&&te!==h.currentTarget||ue(t.id)},role:"button",tabIndex:0,onKeyDown:h=>{h.target===h.currentTarget&&(h.key==="Enter"||h.key===" ")&&(h.key===" "&&h.preventDefault(),ue(t.id))},"aria-label":a("agents.openDetails","Open details for {{name}}",{name:t.name}),children:[e.jsxs("div",{className:"agent-card-header",children:[e.jsxs("div",{className:"agent-info",children:[at===t.id?e.jsx("select",{ref:Xe,className:"select agent-role-select",value:t.role,onChange:h=>void Na(t.id,h.target.value),onKeyDown:h=>ya(h,t.id),onBlur:()=>ye(null),autoFocus:!0,children:c.map(h=>e.jsxs("option",{value:h.value,children:[h.icon," ",h.label]},h.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:h=>{h.stopPropagation(),ye(t.id)},title:a("agents.clickToChangeRole","Click to change role"),role:"button",tabIndex:0,onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.stopPropagation(),ye(t.id))},children:e.jsx(ft,{agent:t,size:20})}),e.jsxs("div",{className:"agent-meta",children:[e.jsx("span",{className:"agent-name",children:t.name}),e.jsx("span",{className:"agent-id text-secondary",children:t.id})]}),e.jsx(pa,{size:20,className:"agent-card-chevron"})]}),e.jsxs("div",{className:"agent-badges",children:[e.jsx("span",{className:`badge ${m}`,children:t.state}),e.jsxs("span",{className:"badge",style:{color:o.color},title:u.title,children:[o.icon,u.label?` ${u.label}`:""]}),e.jsx("span",{className:"badge text-secondary",children:Kt(t.role)}),(t.pendingApprovalCount??0)>0?e.jsxs("span",{className:"badge agent-approval-badge",title:a("agents.pendingApprovals","Pending approvals"),children:[e.jsx("span",{className:"status-dot status-dot--pending"}),t.pendingApprovalCount]}):null,(()=>{const h=La(t);if(h.length===0)return null;const O=h.slice(0,2),te=h.length-2;return e.jsxs(e.Fragment,{children:[O.map(G=>e.jsx("span",{className:"badge badge-skill",title:G,children:js(G)},G)),te>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",te]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[t.state==="error"&&t.lastError?e.jsx(os,{errorText:t.lastError,issueContext:{surface:"AgentsView list",agentId:t.id,agentName:t.name,agentState:t.state,taskId:t.taskId}}):null,t.taskId&&e.jsxs("div",{className:"agent-task",children:[e.jsx("span",{className:"text-secondary",children:a("agents.workingOn","Working on:")}),e.jsx("span",{className:"badge",children:t.taskId})]}),e.jsxs("div",{className:"agent-heartbeat-control",children:[e.jsx("span",{className:"text-secondary",children:a("agents.heartbeat","Heartbeat:")}),Ve===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:st[t.id]??"",onChange:h=>we(O=>({...O,[t.id]:h.target.value})),onKeyDown:h=>{h.key==="Enter"?Ut(t):h.key==="Escape"&&(Ce(null),we(O=>{const te={...O};return delete te[t.id],te}))},disabled:ae,"aria-label":a("agents.customHeartbeatAria","Custom heartbeat interval in minutes for {{name}}",{name:t.name})}),e.jsx("span",{className:"text-secondary",children:a("agents.minutesUnit","min")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>void Ut(t),disabled:ae,title:a("agents.saveCustomInterval","Save custom interval"),children:a("agents.save","Save")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>{Ce(null),we(h=>{const O={...h};return delete O[t.id],O})},disabled:ae,title:a("agents.cancelCustomInterval","Cancel custom interval"),children:a("agents.cancel","Cancel")})]}):e.jsx(e.Fragment,{children:e.jsxs("select",{className:"select agent-heartbeat-select",value:T,onChange:h=>{const O=h.target.value;O==="__custom__"?Ca(t):ka(t,Number(O))},disabled:ae,"aria-label":a("agents.setHeartbeatAria","Set heartbeat interval for {{name}}",{name:t.name}),children:[re.map(h=>e.jsx("option",{value:h.value,children:h.label},h.value)),cs.some(h=>h.value===T)&&e.jsx("option",{value:"__custom__",children:a("agents.customHeartbeatOption","Custom...")})]})}),ae&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:a("agents.saving","Saving…")}),t.lastHeartbeatAt&&(()=>{const h=new Date(t.lastHeartbeatAt),O=new Date(h.getTime()+T),te=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"agent-heartbeat-last text-secondary",title:h.toLocaleString(),children:a("agents.lastHeartbeatAt","Last: {{time}}",{time:h.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})}),te&&e.jsx("span",{className:"agent-heartbeat-next text-secondary",title:O.toLocaleString(),children:a("agents.nextHeartbeatAt","Next: {{time}}",{time:O.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})})]})})()]})]}),e.jsxs("div",{className:"agent-card-actions",children:[e.jsxs("div",{className:"agent-card-actions-group agent-card-actions-group--primary",children:[t.state==="idle"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"active"),disabled:Se.has(t.id),title:a("agents.activate","Activate"),children:[e.jsx(pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.start","Start")})]}),t.state==="active"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>void Ra(t.id,t.name),disabled:Se.has(t.id),title:a("agents.runNow","Run Now"),"aria-label":a("agents.runNowAria","Run now for {{name}}",{name:t.name}),children:[e.jsx(tt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.runNow","Run Now")})]}),e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"paused"),disabled:Se.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(At,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.pause","Pause")})]})]}),t.state==="paused"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"active"),disabled:Se.has(t.id),title:a("agents.resume","Resume"),children:[e.jsx(pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.resume","Resume")})]}),t.state==="running"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>ue(t.id,{initialTab:"runs",initialRunId:null,preferActiveRun:!0}),title:a("agents.viewLiveRun","View live run details"),"aria-label":a("agents.viewLiveRunAria","View live run details for {{name}}",{name:t.name}),children:[e.jsx(tt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.running","Running")})]}),e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"paused"),disabled:Se.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(At,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.pause","Pause")})]})]}),t.state==="error"&&e.jsxs("button",{className:"btn btn-sm",onClick:()=>void lt(t.id,"active"),disabled:Se.has(t.id),title:a("agents.retry","Retry"),children:[e.jsx(pt,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.retry","Retry")})]})]}),e.jsxs("div",{className:"agent-card-actions-group agent-card-actions-group--secondary",children:[e.jsxs("button",{className:"btn btn-sm agent-card-details-btn",onClick:()=>ue(t.id),title:a("agents.viewDetailsFor","View details for {{name}}",{name:t.name}),"aria-label":a("agents.viewDetailsFor","View details for {{name}}",{name:t.name}),children:[e.jsx(ds,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.details","Details")})]}),(t.state==="idle"||t.state==="paused"||t.state==="error")&&e.jsxs("button",{className:"btn btn-sm btn-danger",onClick:()=>void Wt(t.id,t.name),title:a("agents.delete","Delete"),children:[e.jsx(la,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.delete","Delete")})]})]})]})]},t.id)})})})}),e.jsx("div",{className:`agents-split-detail${x&&!L?" agents-split-detail--hidden-mobile":""}`,children:L?e.jsx(s.Suspense,{fallback:null,children:e.jsx(ha,{inline:!0,showInlineBackButton:x,agentId:L,projectId:d,onClose:Ue,addToast:n,onChildClick:Gt,initialTab:le,initialRunId:ce,preferActiveRun:k,onMutationSuccess:Sa},L)}):e.jsxs("div",{className:"agents-detail-empty-state",children:[e.jsx(It,{size:48}),e.jsx("h3",{children:a("agents.selectAnAgent","Select an agent")}),e.jsx("p",{children:a("agents.selectAgentHint","Choose an agent from the sidebar to view details")})]})})]})]})}export{cn as AgentsView};
@@ -1,6 +0,0 @@
1
- import{r as s,b as aa,j as t,R as ra}from"./vendor-react-BTgM5bbZ.js";import{c as ia,a9 as rn,a7 as on,bh as cn,bi as Ms,aI as Xt,bj as ln,ac as dn,bk as ys,t as oa,bl as ca,bm as wt,bn as un,bo as la,bp as Gt,w as da,bq as ua,br as ma,bs as ha,bt as mn,bu as fa,bv as ga,aY as pa,bw as ba,bx as va,s as wa,by as xa,j as ya,k as Dn,bz as Pn,bA as Ca,bB as Sa,bC as ka,bD as $n,bE as ja,bF as Na,bG as Ra,p as Ma,bH as Aa,bI as Ta,bJ as Ea,bK as Ia,aj as Fn,ak as Ln,bL as Da,bM as Pa,S as $a,U as Cs,P as yt,J as xt,b8 as hn,ay as Fa,bN as fn,a as Vt,bO as gn,bP as pn,bQ as bn,bR as vn,B as Ct,ag as La,ah as _a,b6 as Yt,bS as wn,bT as za,T as Ha,bU as Ua,b3 as Oa,aw as xn,m as Ba,bV as yn,bW as Ka,bX as Ga}from"./index-Bglw05rM.js";import{u as St}from"./vendor-i18n-DYlSUfot.js";import{SessionTerminal as Cn}from"./SessionTerminal-9l4bdKcn.js";import"./vendor-reactflow-ZasuEfF9.js";import"./vendor-xterm-ea7-K05z.js";import"./vendor-codemirror-jBKmHyH0.js";import"./shield-alert-CqeGWBUK.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 Va=[["path",{d:"M5 3h14",key:"7usisc"}],["path",{d:"m18 13-6-6-6 6",key:"1kf1n9"}],["path",{d:"M12 7v14",key:"1akyts"}]],Wa=ia("arrow-up-to-line",Va),Ss="kb-chat-active-session";function Sn(n){const r=typeof n=="string"?n.trim():"",d=r.indexOf("/");return!r||d<=0||d>=r.length-1?{}:{modelProvider:r.slice(0,d),modelId:r.slice(d+1)}}function qa(n){const r=n?.toolCalls;if(!Array.isArray(r))return;const d=r.map(i=>{if(!i||typeof i!="object")return null;const o=i,b=typeof o.toolName=="string"?o.toolName:"";if(!b)return null;const v=o.args;return{toolName:b,...v&&typeof v=="object"?{args:v}:{},isError:!!o.isError,result:o.result,status:"completed"}}).filter(i=>i!==null);return d.length>0?d:void 0}function Qa(n){const r=n?.fallback;if(!r||typeof r!="object")return;const d=r,i=typeof d.primaryModel=="string"?d.primaryModel:"",o=typeof d.fallbackModel=="string"?d.fallbackModel:"",b=d.triggerPoint;if(!(!i||!o||b!=="session-creation"&&b!=="prompt-time"))return{primaryModel:i,fallbackModel:o,triggerPoint:b}}function Xa(n){const r=n?.failureInfo;if(!r||typeof r!="object")return;const d=r,i=typeof d.summary=="string"?d.summary.trim():"";if(!i)return;const o=(()=>{const b=d.reference;if(!b||typeof b!="object")return;const v=b,p=typeof v.kind=="string"?v.kind.trim():"",S=typeof v.id=="string"?v.id.trim():"";if(!(!p||!S))return{kind:p,id:S,...typeof v.label=="string"&&v.label.trim()?{label:v.label.trim()}:{}}})();return{summary:i,...typeof d.errorClass=="string"&&d.errorClass.trim()?{errorClass:d.errorClass.trim()}:{},...typeof d.code=="string"&&d.code.trim()?{code:d.code.trim()}:{},...typeof d.detail=="string"&&d.detail.trim()?{detail:d.detail.trim()}:{},...o?{reference:o}:{}}}function kn(n,r){const d="Failed to get response";return typeof n=="string"?{summary:n.trim()||d}:{summary:typeof n.summary=="string"&&n.summary.trim()?n.summary.trim():d,...typeof n.errorClass=="string"&&n.errorClass.trim()?{errorClass:n.errorClass.trim()}:{},...typeof n.code=="string"&&n.code.trim()?{code:n.code.trim()}:{},...typeof n.detail=="string"&&n.detail.trim()?{detail:n.detail.trim()}:{},...n.reference?{reference:n.reference}:{}}}function ks(n){return{id:n.id,sessionId:n.sessionId,role:n.role,content:n.content,thinkingOutput:n.thinkingOutput,toolCalls:qa(n.metadata),fallbackInfo:Qa(n.metadata),failureInfo:Xa(n.metadata),attachments:n.attachments,createdAt:n.createdAt}}function Ya(n,r){const d=s.useCallback(l=>l?`${rn.CHAT_SESSIONS_PREFIX}${l}`:null,[]),i=s.useCallback((l,g)=>l&&g?`${rn.CHAT_MESSAGES_PREFIX}${l}:${g}`:null,[]),o=s.useCallback(l=>{const g=d(l);return g?on(g,{maxAgeMs:cn})??[]:[]},[d]),[b,v]=s.useState(()=>o(n)),[p,S]=s.useState(null),[W,Q]=s.useState(()=>o(n).length===0),[X,R]=s.useState([]),[T,ee]=s.useState(!1),[ne,k]=s.useState(!1),[H,x]=s.useState(""),[Y,D]=s.useState(""),[oe,M]=s.useState([]),[J,te]=s.useState(""),[P,re]=s.useState(""),[ce,f]=s.useState(!1),{agentsMap:y}=Ms(n),m=s.useRef(null),L=s.useRef(null),u=s.useRef(!1),fe=s.useRef(""),Z=s.useRef(null),G=s.useRef(b),U=s.useRef(p),pe=s.useRef(X),q=s.useRef(ne);G.current=b,U.current=p,pe.current=X,q.current=ne,s.useEffect(()=>{fe.current=J},[J]);const ze=s.useRef(new Set),je=s.useRef(0),Ke=s.useRef(n);Ke.current!==n&&(Xt({view:"useChat",trigger:"project-context-change",projectId:n,replayAttempted:!1,detail:{previousProjectId:Ke.current??null}}),Ke.current=n,je.current++);const we=s.useCallback(async()=>{G.current.length===0&&Q(!0);try{const g=[...(await ln(n)).sessions].sort((j,$)=>new Date($.updatedAt).getTime()-new Date(j.updatedAt).getTime());v(g);const w=d(n);w&&dn(w,g,{maxBytes:5e5})}catch{const l=o(n);if(G.current.length===0&&l.length===0){const g=d(n);g&&ys(g)}}finally{Q(!1)}},[d,n]);s.useEffect(()=>{const l=o(n);v(l),Q(l.length===0)},[n,o]),s.useEffect(()=>{we()},[we,n]);const ot=s.useRef(()=>{}),Se=s.useRef(!1);s.useEffect(()=>{Se.current=!1,L.current=null},[n]),s.useEffect(()=>{if(W||Se.current||U.current)return;const l=oa(Ss,n);if(!l){Se.current=!0;return}const g=b.find(w=>w.id===l);if(g){Se.current=!0,ot.current(l,g);return}Se.current=!0},[W,b,n]);const Ge=s.useCallback((l,g)=>{const w=i(l,g);return w?on(w,{maxAgeMs:cn})??[]:[]},[i]),Re=s.useCallback((l,g)=>{const w=Ge(n,l);return w.length>0?(R(w),ee(!1),!0):(g?.clearOnMiss!==!1&&R([]),!1)},[n,Ge]),ae=s.useCallback(async(l,g)=>{const w=typeof g?.offset=="number"&&g.offset>0||typeof g?.before=="string",j=i(n,l),$=w?[]:Ge(n,l),N=$.length>0;!w&&N?(R($),ee(!1)):ee(!0);try{const B=await ca(l,{limit:50,order:"desc",...g},n),A=B.messages.slice().reverse().map(ks),K=U.current?.id===l||g?.commitForStreamingAttach===!0&&L.current?.sessionId===l;w?K&&(R(O=>[...A,...O]),f(B.messages.length>=50)):K&&(R(A),f(B.messages.length>=50),j&&dn(j,A,{maxBytes:5e5}))}catch{!w&&pe.current.length===0&&N&&(R($),ee(!1))}finally{ee(!1)}},[i,n,Ge]),xe=s.useCallback(()=>{Z.current?.(),Z.current=null,fe.current="",te(""),x(""),D(""),M([]),k(!1)},[]),He=s.useCallback(()=>{wt(U.current?.id),fe.current="",te("")},[]),se=s.useCallback(()=>{const l=fe.current.trim();l&&(wt(U.current?.id),fe.current="",te(""),Rt.current(l))},[]),le=s.useCallback((l,g,w)=>{if(m.current||!l)return!0;u.current=!1;const j=pe.current,$=j.length===0||j[0]?.sessionId!==l;L.current={sessionId:l,replayFromEventId:typeof g?.replayFromEventId=="number"?g.replayFromEventId:null},$&&!w?.priorThreadLoadAlreadyStarted&&(Re(l,{clearOnMiss:!1}),ae(l,{commitForStreamingAttach:!0})),g&&(x(g.streamingText),D(g.streamingThinking),M(g.toolCalls)),k(!0);const{handlers:N}=un({sessionId:l,tempUserMessageId:"",initialText:g?.streamingText,initialThinking:g?.streamingThinking,initialToolCalls:g?.toolCalls,setStreamingText:x,setStreamingThinking:D,setStreamingToolCalls:M,cancelStreamingFlushesRef:Z,addToast:w?.silent?void 0:r,onFallbackSession:(A,K)=>{const O=Sn(A.fallbackModel);v(E=>E.map(_=>_.id===K?{..._,...O}:_)),S(E=>E&&E.id===K?{...E,...O}:E)},onDone:()=>{x(""),D(""),M([]),k(!1),q.current=!1,m.current=null,L.current=null,ae(l),se()},onError:A=>{x(""),D(""),M([]),k(!1),q.current=!1,m.current=null,L.current=null;const K=kn(A);w?.silent||r?.(K.summary,"error"),ae(l),se()}});Xt({view:"useChat",trigger:"sse-open",projectId:n,replayAttempted:typeof g?.replayFromEventId=="number",replayFromEventId:g?.replayFromEventId??null,lastEventId:g?.replayFromEventId??null});const B=la(l,N,n,{...typeof g?.replayFromEventId=="number"?{lastEventId:g.replayFromEventId}:{}});return m.current=B,!0},[r,Re,ae,n,se]),Me=s.useCallback((l,g)=>{const w=U.current?.id??null;if(l&&w===l&&!g)return;m.current&&(m.current.close(),m.current=null),L.current=null;const j=g??b.find($=>$.id===l);S(j||null),U.current=j||null,l&&Gt(l,n).then(({session:$})=>{!$.isGenerating||!$.inFlightGeneration||S(N=>!N||N.id!==l?N:{...N,...$})}).catch(()=>{}),xe(),f(!1),l?(Re(l),ae(l)):R([]),j?.isGenerating&&le(j.id,j.inFlightGeneration,{priorThreadLoadAlreadyStarted:!0}),l?da(Ss,l,n):ua(Ss,n)},[le,Re,b,ae,n,xe]);ot.current=Me,s.useEffect(()=>{const l=p?.id;if(!l)return;const g=ma(l);if(!g)return;fe.current=g,te(g);let w=!1;return Gt(l,n).then(({session:j})=>{if(!(w||U.current?.id!==l||fe.current.trim().length===0)){if(j.isGenerating){m.current||le(l,j.inFlightGeneration);return}!q.current&&!m.current&&se()}}).catch(()=>{}),()=>{w=!0}},[p?.id,le,se,n]);const kt=s.useCallback(async l=>{const g=U.current?.id,w=await ha(l,n);m.current&&(m.current.close(),m.current=null),L.current=null;const j={id:w.session.id,title:w.session.title,agentId:w.session.agentId,status:w.session.status,modelProvider:w.session.modelProvider,modelId:w.session.modelId,createdAt:w.session.createdAt,updatedAt:w.session.updatedAt};return v($=>$.some(N=>N.id===j.id)?$:[j,...$]),wt(g),xe(),Me(j.id,j),j},[n,xe,Me]),ke=s.useCallback(async l=>{wt(l),await mn(l,{status:"archived"},n),v(g=>g.filter(w=>w.id!==l)),p?.id===l&&(L.current=null,S(null),R([]))},[p,n]),jt=s.useCallback(async(l,g)=>{const w=g.trim()||null,j=b,$=p;v(N=>N.map(B=>B.id===l?{...B,title:w}:B)),S(N=>N?.id===l?{...N,title:w}:N);try{const B=(await mn(l,{title:w},n)).session;v(A=>A.map(K=>K.id===l?{...K,title:B.title,updatedAt:B.updatedAt}:K)),S(A=>A?.id===l?{...A,title:B.title,updatedAt:B.updatedAt}:A)}catch(N){throw v(j),S($),r?.("Failed to rename conversation","error"),N}},[p,r,n,b]),Nt=s.useCallback(async l=>{wt(l),p?.id===l&&m.current&&(m.current.close(),m.current=null),p?.id===l&&(L.current=null),await fa(l,n);const g=i(n,l);g&&ys(g),v(w=>w.filter(j=>j.id!==l)),p?.id===l&&(S(null),R([]))},[p,i,n]),ct=s.useCallback(async()=>{if(!p||!ce)return;const l=pe.current[0]?.createdAt;l&&await ae(p.id,{before:l})},[p,ce,ae]),lt=s.useCallback(()=>{p&&(u.current=!0,Z.current?.(),Z.current=null,m.current?.close(),m.current=null,L.current=null,ga(p.id,n).catch(()=>{}),k(!1),q.current=!1,x(""),D(""),M([]),se())},[p,n,se]),Rt=s.useRef(()=>{}),Ae=pa(),Te=s.useCallback(async l=>{try{await we();const g=await Gt(l,n);U.current?.id===l&&S(w=>!w||w.id!==l?w:{...w,...g.session}),g.session.isGenerating?(x(""),D(""),M([]),k(!0),q.current=!0,le(l,g.session.inFlightGeneration,{silent:!0})):(x(""),D(""),M([]),k(!1),q.current=!1,await ae(l))}catch{}},[le,ae,n,we]),qe=s.useCallback((l,g)=>{if(!p)return;if(q.current){fe.current=l,te(l),ba(p.id,l);return}u.current=!1,m.current&&(m.current.close(),m.current=null),L.current=null;const w=`temp-${Date.now()}`,j={id:w,sessionId:p.id,role:"user",content:l,createdAt:new Date().toISOString()};R(N=>[...N,j]),x(""),D(""),M([]),k(!0);const{handlers:$}=un({sessionId:p.id,tempUserMessageId:w,setStreamingText:x,setStreamingThinking:D,setStreamingToolCalls:M,cancelStreamingFlushesRef:Z,addToast:r,onFallbackSession:(N,B)=>{const A=Sn(N.fallbackModel);v(K=>K.map(O=>O.id===B?{...O,...A}:O)),S(K=>K&&K.id===B?{...K,...A}:K)},onDone:({messageId:N,message:B,accumulated:A})=>{const K=B?{...ks(B),...A.text.length>0?{content:A.text}:{}}:{id:N||`msg-${Date.now()}`,sessionId:p.id,role:"assistant",content:A.text,thinkingOutput:A.thinking,toolCalls:A.toolCalls.length>0?A.toolCalls:void 0,fallbackInfo:A.fallbackInfo,createdAt:new Date().toISOString()};ze.current.add(K.id),R(O=>[...O,K]),x(""),D(""),M([]),k(!1),q.current=!1,m.current=null,L.current=null,setTimeout(()=>{ze.current.delete(K.id)},1e3),we(),se()},onError:(N,B)=>{const A=kn(N),K=typeof N=="string"?N:A.summary,O=xa(K);R(E=>{const _=E.filter(z=>z.id!==B);return O?_:[..._,{id:`error-${Date.now()}`,sessionId:p.id,role:"assistant",content:A.summary,failureInfo:A,createdAt:new Date().toISOString()}]}),x(""),D(""),M([]),k(!1),q.current=!1,m.current=null,L.current=null,console.error("[useChat] Stream error:",N),O?(console.info("[useChat] Suppressed tab-suspension stream error:",N),p?.id&&(x(""),D(""),M([]),k(!0),q.current=!0,Te(p.id))):(r?.(A.summary,"error"),we()),u.current||se()}});m.current=va(p.id,l,$,g,n)},[p,n,we,r,le,Te,se]);Rt.current=qe;const Qe=P?b.filter(l=>l.title?.toLowerCase().includes(P.toLowerCase())||l.agentId.toLowerCase().includes(P.toLowerCase())):b;return s.useEffect(()=>{if(!p?.id||p.isGenerating!==!0||m.current)return;const l=typeof p.inFlightGeneration?.replayFromEventId=="number"?p.inFlightGeneration.replayFromEventId:null,g=L.current;g?.sessionId===p.id&&g.replayFromEventId===l||le(p.id,p.inFlightGeneration,{silent:!0})},[p?.id,p?.isGenerating,p?.inFlightGeneration,le]),s.useEffect(()=>{if(!U.current?.isGenerating||(m.current||le(U.current.id,U.current.inFlightGeneration),!q.current||m.current||!U.current))return;const l=setInterval(async()=>{if(!q.current||m.current||!U.current){clearInterval(l);return}try{(await ln(n)).sessions.find(j=>j.id===U.current?.id)?.isGenerating||(clearInterval(l),await ae(U.current.id),x(""),D(""),M([]),k(!1),q.current=!1,se())}catch{}},3e3);return()=>clearInterval(l)},[le,ae,n,p,se]),s.useEffect(()=>Ae.onBecameVisible(()=>{const g=U.current;if(!g||m.current)return;const w=je.current;Gt(g.id,n).then(j=>{if(!(je.current!==w||m.current)){if(j.session.isGenerating){x(""),D(""),M([]),k(!0),q.current=!0,le(g.id,j.session.inFlightGeneration,{silent:!0});return}q.current&&(x(""),D(""),M([]),k(!1),q.current=!1,se(),ae(g.id))}}).catch(()=>{})}),[le,ae,n,Ae,se]),s.useEffect(()=>{const l=je.current,g=n?`?projectId=${encodeURIComponent(n)}`:"",w=()=>je.current!==l,j=O=>{if(w())return;const E=JSON.parse(O.data);v(_=>_.some(z=>z.id===E.id)?_:[E,..._])},$=O=>{if(w())return;const E=JSON.parse(O.data);v(_=>[..._.map(me=>me.id===E.id?E:me)]),U.current?.id===E.id&&(S(E),E.isGenerating&&!m.current&&le(E.id,E.inFlightGeneration))},N=O=>{if(w())return;const{id:E}=JSON.parse(O.data);v(z=>z.filter(me=>me.id!==E));const _=i(n,E);_&&ys(_),U.current?.id===E&&(S(null),R([]))},B=O=>{if(w())return;const E=JSON.parse(O.data),_=ks(E);if(!ze.current.has(_.id)){if(U.current?.id===_.sessionId&&q.current&&!m.current&&_.role==="assistant"){R(z=>z.some(me=>me.id===_.id)?z:[...z,_]),x(""),D(""),M([]),k(!1),q.current=!1,se();return}U.current?.id===_.sessionId&&!q.current&&R(z=>{if(z.some(me=>me.id===_.id))return z;if(_.role==="user"){const me=z.findIndex(Ee=>Ee.role==="user"&&Ee.id.startsWith("temp-")&&Ee.content.trim()===_.content.trim());if(me>=0){const Ee=[...z];return Ee[me]=_,Ee}}return[...z,_]})}},A=O=>{if(w())return;const{id:E}=JSON.parse(O.data);R(_=>_.filter(z=>z.id!==E))};return wa(`/api/events${g}`,{events:{"chat:session:created":j,"chat:session:updated":$,"chat:session:deleted":N,"chat:message:added":B,"chat:message:deleted":A}})},[le,i,n,se]),s.useEffect(()=>()=>{m.current&&(m.current.close(),m.current=null),L.current=null},[]),{sessions:b,activeSession:p,sessionsLoading:W,messages:X,messagesLoading:T,isStreaming:ne,streamingText:H,streamingThinking:Y,streamingToolCalls:oe,pendingMessage:J,selectSession:Me,createSession:kt,archiveSession:ke,renameSession:jt,deleteSession:Nt,sendMessage:qe,stopStreaming:lt,clearPendingMessage:He,loadMoreMessages:ct,hasMoreMessages:ce,searchQuery:P,setSearchQuery:re,filteredSessions:Qe,refreshSessions:we,agentsMap:y}}function Ja(n,r=[],d){const i=n.trim().replace(/^#/,""),o=(v,p)=>d?d(v,p):p;if(!i)return{ok:!1,error:o("createRoom.nameRequired","Room name is required.")};if(/[A-Z]/.test(i))return{ok:!1,error:o("createRoom.lowercase","Use lowercase letters only.")};const b=i.toLowerCase();return b.length>80?{ok:!1,error:o("createRoom.maxLength","Room names can be at most 80 characters.")}:/^[a-z0-9_-]+$/.test(b)?/^[-_]|[-_]$/.test(b)?{ok:!1,error:o("createRoom.noEdgeChars","Room names cannot start or end with a hyphen or underscore.")}:r.some(v=>v.toLowerCase()===b)?{ok:!1,error:o("createRoom.duplicate","A room with this name already exists.")}:{ok:!0,name:b}:{ok:!1,error:o("createRoom.validChars","Use lowercase letters, numbers, hyphens, or underscores only.")}}function Za({isOpen:n,onClose:r,onCreate:d,projectId:i,existingRoomNames:o=[]}){const{t:b}=St("app"),[v,p]=s.useState(""),[S,W]=s.useState([]),[Q,X]=s.useState(""),[R,T]=s.useState([]),[ee,ne]=s.useState(!1),[k,H]=s.useState(null),[x,Y]=s.useState(!1),D=s.useRef(null),oe=s.useRef(null);s.useEffect(()=>{n&&(oe.current=document.activeElement instanceof HTMLElement?document.activeElement:null,ne(!0),H(null),ya(void 0,i).then(f=>W(f)).catch(()=>{W([]),H(b("createRoom.failedLoadAgents","Failed to load agents."))}).finally(()=>ne(!1)))},[n,i]),s.useEffect(()=>{if(!n){p(""),X(""),T([]),H(null),Y(!1);return}const f=window.requestAnimationFrame(()=>D.current?.focus());return()=>window.cancelAnimationFrame(f)},[n]),s.useEffect(()=>{if(!n)return;const f=y=>{y.key==="Escape"&&r()};return document.addEventListener("keydown",f),()=>document.removeEventListener("keydown",f)},[n,r]),s.useEffect(()=>{n||oe.current?.focus()},[n]);const M=s.useMemo(()=>Ja(v,o,b),[v,o,b]),J=s.useMemo(()=>{const f=Q.trim().toLowerCase();return f?S.filter(y=>y.name.toLowerCase().includes(f)):S},[S,Q]),te=s.useMemo(()=>S.filter(f=>R.includes(f.id)),[S,R]),P=M.ok&&R.length>0&&!x&&!ee;if(!n)return null;const re=f=>{x||T(y=>y.includes(f)?y.filter(m=>m!==f):[...y,f])},ce=async()=>{if(!M.ok){H(M.error);return}if(R.length===0){H(b("createRoom.selectMember","Select at least one member."));return}H(null),Y(!0);try{await d({name:M.name,displayName:`#${M.name}`,memberAgentIds:R}),r()}catch(f){H(f instanceof Error?f.message:b("createRoom.failedCreate","Failed to create room."))}finally{Y(!1)}};return aa.createPortal(t.jsx("div",{className:"modal-overlay open",onClick:f=>f.target===f.currentTarget&&r(),children:t.jsxs("div",{className:"modal modal-lg create-room-modal",role:"dialog","aria-modal":"true","aria-label":b("createRoom.title","Create room"),onClick:f=>f.stopPropagation(),children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:b("createRoom.title","Create room")}),t.jsx("button",{type:"button",className:"modal-close","aria-label":b("actions.close","Close"),onClick:r,children:"×"})]}),t.jsxs("div",{className:"form-group create-room-modal-name-group",children:[t.jsx("label",{htmlFor:"create-room-name",children:b("createRoom.nameLabel","Room name")}),t.jsxs("div",{className:"create-room-modal-name-field",children:[t.jsx("span",{"aria-hidden":"true",className:"create-room-modal-name-hash",children:"#"}),t.jsx("input",{ref:D,id:"create-room-name",className:"input",value:v,disabled:x,onChange:f=>{const y=f.target.value.replace(/^#/,"").replace(/\s+/g,"-").toLowerCase();p(y)}})]}),!M.ok&&t.jsx("div",{className:"form-error",children:M.error})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"create-room-member-search",children:b("createRoom.members","Members")}),t.jsx("input",{id:"create-room-member-search",className:"input",placeholder:b("createRoom.searchAgents","Search agents"),value:Q,disabled:x,onChange:f=>X(f.target.value)})]}),te.length>0&&t.jsx("div",{className:"create-room-modal-selected","data-testid":"create-room-selected-chips",children:te.map(f=>t.jsxs("button",{type:"button",className:"btn btn-sm create-room-modal-chip",onClick:()=>re(f.id),disabled:x,children:[f.name," ×"]},f.id))}),t.jsx("div",{className:"create-room-modal-member-list","data-testid":"create-room-member-list",children:ee?t.jsx("div",{className:"create-room-modal-empty",children:b("createRoom.loadingAgents","Loading agents...")}):J.length===0?t.jsx("div",{className:"create-room-modal-empty",children:S.length===0?b("createRoom.noAgents","No agents in this project yet."):b("createRoom.noMatch","No agents match your search.")}):J.map(f=>{const y=R.includes(f.id);return t.jsxs("button",{type:"button",className:`create-room-modal-member-row${y?" create-room-modal-member-row--selected":""}`,onClick:()=>re(f.id),disabled:x,children:[t.jsx(Dn,{agent:f,size:20}),t.jsx("span",{children:f.name}),t.jsx("span",{className:"create-room-modal-member-role",children:f.role})]},f.id)})}),k&&t.jsx("div",{className:"form-group",children:t.jsx("div",{className:"form-error",children:k})}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:r,disabled:x,children:b("actions.cancel","Cancel")}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void ce(),disabled:!P,children:x?b("createRoom.creating","Creating..."):b("createRoom.create","Create room")})]})]})}),document.body)}function er({cliSessionId:n,tier:r,projectId:d,renderTranscript:i,renderComposer:o,queuedCount:b=0,terminalProps:v}){const{t:p}=St("app"),S=r==="generic",[W,Q]=s.useState(S?"terminal":"transcript");if(S)return t.jsx("div",{className:"cli-chat-surface cli-chat-surface--generic","data-tier":"generic",children:t.jsx(Cn,{sessionId:n,projectId:d,...v})});const X=W==="terminal";return t.jsxs("div",{className:"cli-chat-surface","data-tier":r,"data-view":W,children:[t.jsxs("div",{className:"cli-chat-surface__toolbar",role:"tablist","aria-label":p("cliChat.viewToggleLabel","Chat view"),children:[t.jsxs("button",{type:"button",role:"tab","aria-selected":!X,className:`cli-chat-surface__tab${X?"":" is-active"}`,onClick:()=>Q("transcript"),children:[t.jsx(Pn,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:p("cliChat.transcriptTab","Transcript")})]}),t.jsxs("button",{type:"button",role:"tab","aria-selected":X,className:`cli-chat-surface__tab${X?" is-active":""}`,onClick:()=>Q("terminal"),children:[t.jsx(Ca,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:p("cliChat.terminalTab","Terminal")})]})]}),t.jsx("div",{className:"cli-chat-surface__body",children:X?t.jsx(Cn,{sessionId:n,projectId:d,...v}):i()}),!X&&t.jsxs("div",{className:"cli-chat-surface__composer",children:[b>0&&t.jsx("div",{className:"cli-chat-surface__queued",role:"status","aria-live":"polite",children:p("cliChat.queued","{{count}} message queued — will send when the agent is ready",{count:b})}),o()]})]})}const As=640,tr=200,jn="__SKIP__";let js=!1;function sr(n,r=As){return n>r?"auto":"hidden"}function nr(n,r=As){return Math.max(40,Math.min(n,r))}function _n(n,r){const d=new Date(n),o=new Date().getTime()-d.getTime(),b=Math.floor(o/1e3),v=Math.floor(b/60),p=Math.floor(v/60),S=Math.floor(p/24);return b<60?r("chat.relativeTimeJustNow","just now"):v<60?r("chat.relativeTimeMinutes","{{count}}m ago",{count:v}):p<24?r("chat.relativeTimeHours","{{count}}h ago",{count:p}):S<7?r("chat.relativeTimeDays","{{count}}d ago",{count:S}):d.toLocaleDateString()}function Nn(n,r){if(!n||!r)return null;const d=r.toLowerCase();if(d.includes("claude")){let o=r.replace(/^claude[- ]/i,"Claude ").replace(/sonnet[- ](\d+)[- ](\d+)/i,"Sonnet $1.$2").replace(/sonnet[- ](\d+)/i,"Sonnet $1").replace(/haiku[- ](\d+)/i,"Haiku $1").replace(/opus[- ](\d+)/i,"Opus $1").replace(/sonnet/i,"Sonnet").replace(/haiku/i,"Haiku").replace(/opus/i,"Opus").replace(/-/g," ").trim();return o=o.replace(/\s+/g," "),o.length>30?o.slice(0,30)+"…":o}if(d.includes("gpt")||d.includes("openai")){const o=r.replace(/^gpt-4-turbo$/i,"GPT-4 Turbo").replace(/^gpt-4o-mini$/i,"GPT-4o Mini").replace(/^gpt-4o$/i,"GPT-4o").replace(/^gpt-4$/i,"GPT-4").replace(/^gpt-o1-preview$/i,"GPT-o1 Preview").replace(/^gpt-o1-mini$/i,"GPT-o1 Mini").replace(/^gpt-o1$/i,"GPT-o1").replace(/^gpt/i,"GPT").trim();return o.length>30?o.slice(0,30)+"…":o}if(d.includes("gemini")){const o=r.replace(/^gemini[- ]/i,"Gemini ").replace(/pro[- ](\d+)[- ](\d+)/i,"Pro $1.$2").replace(/pro[- ](\d+)/i,"Pro $1").replace(/-/g," ").replace(/\s+/g," ").trim();return o.length>30?o.slice(0,30)+"…":o}const i=r.replace(/-/g," ").replace(/^\w/,o=>o.toUpperCase()).replace(/\s+/g," ").trim();return i.length>30?i.slice(0,30)+"…":i}function Qt(n,r){return n.length<=r?n:`${n.slice(0,r)}…`}function ar(n){if(!n)return null;const r=Object.entries(n);return r.length===0?null:r.map(([d,i])=>{const o=typeof i=="string"?i:(()=>{try{return JSON.stringify(i)}catch{return String(i)}})();return`${d}=${Qt(o,50)}`}).join(", ")}function rr(n){if(n===void 0)return null;if(typeof n=="string")return Qt(n,200);try{return Qt(JSON.stringify(n),200)}catch{return Qt(String(n),200)}}function ir(n){if(!n)return null;if(n.kind==="mailbox"||n.kind==="mailbox-message"){const r=typeof window>"u"?"/":window.location.pathname||"/",d=new URLSearchParams(typeof window>"u"?"":window.location.search);return d.set("view","mailbox"),d.set("mailbox-message",n.id),`${r}?${d.toString()}#message-${encodeURIComponent(n.id)}`}return null}function or(n,r){if(!n)return null;const d=n.label??`${n.kind} ${n.id}`,i=ir(n),o=`chat-failure-reference-${n.kind}-${n.id}`.replace(/[^a-zA-Z0-9_-]+/g,"-").toLowerCase();return t.jsxs("div",{className:"chat-message-failure-reference",children:[t.jsx("span",{className:"chat-message-failure-reference-label",children:r("chat.failureReferenceLabel","Reference")}),t.jsx("span",{className:"chat-message-failure-reference-value",children:d}),i?t.jsx("a",{className:"btn btn-sm chat-message-failure-reference-link",href:i,children:r("chat.openMailboxMessage","Open mailbox message")}):t.jsxs("details",{className:"chat-message-failure-reference-details",children:[t.jsx("summary",{className:"btn btn-sm chat-message-failure-reference-link",children:r("chat.viewFailureDetails","View failure details")}),t.jsxs("dl",{className:"chat-message-failure-reference-meta",id:o,children:[t.jsxs("div",{children:[t.jsx("dt",{children:r("chat.failureReferenceKind","Kind")}),t.jsx("dd",{children:n.kind})]}),t.jsxs("div",{children:[t.jsx("dt",{children:r("chat.failureReferenceId","ID")}),t.jsx("dd",{children:n.id})]}),n.label&&t.jsxs("div",{children:[t.jsx("dt",{children:r("chat.failureReferenceMetaLabel","Label")}),t.jsx("dd",{children:n.label})]})]})]})]})}function zn(n,r,d){if(!n||n.length===0)return null;const i=(T,ee)=>{const ne=Ka(T);if(ne){const M=d?.isAwaitingAnswer===!0;return t.jsx(Ga,{parsed:ne,answered:!M,submittedAnswer:d?.submittedAnswer,disabled:!M,onSubmit:(J,te)=>d?.onQuestionSubmit?.(J,te)},`${T.toolName}-${ee}`)}const k=T.status==="running",H=T.status==="completed"&&T.isError,x=ar(T.args),Y=rr(T.result),D=k?x:Y?`${r("chat.toolCallResultPrefix","result")}: ${Y}`:x?`${r("chat.toolCallArgsPrefix","args")}: ${x}`:null,oe=k?r("chat.toolCallStatusRunning","running"):H?r("chat.toolCallStatusError","error"):r("chat.toolCallStatusCompleted","completed");return t.jsxs("details",{className:`chat-tool-call${k?" chat-tool-call--running":""}${H?" chat-tool-call--error":""}`,open:k,children:[t.jsxs("summary",{children:[t.jsx("span",{className:"chat-tool-call-status-dot","aria-hidden":"true"}),t.jsx("span",{className:"chat-tool-call-name",title:T.toolName,children:T.toolName}),D&&t.jsx("span",{className:"chat-tool-call-preview",title:D,children:D}),t.jsx("span",{className:"chat-tool-call-status-text",children:oe})]}),t.jsxs("div",{className:"chat-tool-call-content",children:[x&&t.jsxs("div",{className:"chat-tool-call-row",children:[t.jsx("span",{className:"chat-tool-call-label",children:r("chat.toolCallArgsPrefix","args")}),t.jsx("span",{className:"chat-tool-call-value",children:x})]}),Y&&t.jsxs("div",{className:`chat-tool-call-row${H?" chat-tool-call-row--error":""}`,children:[t.jsx("span",{className:"chat-tool-call-label",children:r("chat.toolCallResultPrefix","result")}),t.jsx("span",{className:"chat-tool-call-value",children:Y})]})]})]},`${T.toolName}-${ee}`)},o="chat-tool-calls";if(n.length===1)return t.jsxs("div",{className:o,"data-testid":"chat-tool-calls",children:[t.jsxs("div",{className:"chat-tool-calls-header",children:[t.jsx(yn,{size:12,"aria-hidden":"true"}),t.jsx("span",{children:r("chat.toolCallsHeader","Tool calls")})]}),i(n[0],0)]});const b=n.filter(T=>T.status==="running").length,v=n.filter(T=>T.status==="completed"&&T.isError).length,p=b>0,S=Array.from(new Set(n.map(T=>T.toolName))),W=S.slice(0,5),Q=Math.max(0,S.length-W.length),X=Q>0?`${W.join(", ")}, +${Q} more`:W.join(", "),R=p?`(${b} ${r("chat.toolCallStatusRunning","running")})`:v>0?`(${v} ${v===1?r("chat.toolCallStatusError","error"):r("chat.toolCallStatusErrors","errors")})`:null;return t.jsx("div",{className:o,"data-testid":"chat-tool-calls",children:t.jsxs("details",{className:"chat-tool-calls-group","data-testid":"chat-tool-calls-group",open:p,children:[t.jsxs("summary",{className:"chat-tool-calls-group-summary",children:[t.jsx(yn,{size:12,"aria-hidden":"true"}),t.jsx("span",{className:"chat-tool-calls-count",children:r("chat.toolCallsCount","{{count}} tool calls",{count:n.length})}),t.jsx("span",{className:"chat-tool-calls-names",title:X,children:X}),R&&t.jsx("span",{className:"chat-tool-calls-group-status",children:R})]}),n.map((T,ee)=>i(T,ee))]})})}const Hn={p:({children:n,...r})=>t.jsx("p",{...r,children:wn(n)}),li:({children:n,...r})=>t.jsx("li",{...r,children:wn(n)}),pre:({children:n,...r})=>t.jsx("pre",{...r,className:"chat-markdown-pre",children:n}),code:({children:n,...r})=>{const d=typeof n=="string"?n:ra.Children.toArray(n).join(""),i=Yt(d);return i.length===1&&typeof i[0]=="string"?t.jsx("code",{...r,children:n}):t.jsx("code",{...r,children:i})},table:({children:n,...r})=>t.jsx("table",{...r,className:"chat-markdown-table",children:n})},it="__fn_agent__",cr=280,Wt=180,qt=500,Rn="fusion:chat-sidebar-width",Ns="fusion:chat-scope",lr="fusion:chat-draft:";function Mn(n,r){return r?`${lr}${n}:${r}`:null}function An(n){if(!n)return"";try{return localStorage.getItem(n)??""}catch{return""}}const dr=["image/png","image/jpeg","image/gif","image/webp","text/plain","application/json","text/yaml","text/markdown","text/csv","application/xml","text/x-log"];function Tn(n){const r=/(^|[\s])\/([^\s]*)$/.exec(n);if(!r)return null;const d=r[1]??"",i=r[2]??"",o=r.index+d.length;return{filter:i,start:o,end:n.length}}function ur(n,r){const d=n.slice(0,r),i=/(^|[\s\n])@([\w-]*)$/.exec(d);if(!i)return null;const o=i[2]??"",b=d.length-o.length-1;return{filter:o,start:b,end:r}}function mr(n){const r=n?.runtimeConfig;if(!r||typeof r!="object")return null;const d=Reflect.get(r,"modelProvider"),i=Reflect.get(r,"modelId");return typeof d!="string"||d.trim().length===0||typeof i!="string"||i.trim().length===0?null:{provider:d,modelId:i}}function En(n,r,d){if(n?.modelProvider&&n?.modelId)return{provider:n.modelProvider,modelId:n.modelId};const i=mr(r??void 0);return i||(d.provider&&d.modelId?{provider:d.provider,modelId:d.modelId}:null)}function hr({projectId:n,defaultModel:r,onClose:d,onCreate:i}){const{t:o}=St("app"),[b,v]=s.useState("agent"),{agents:p,loading:S}=Ms(n),[W,Q]=s.useState(""),{models:X,favoriteProviders:R,favoriteModels:T,loading:ee,refresh:ne}=$n(),k=r.provider&&r.modelId?`${r.provider}/${r.modelId}`:"",[H,x]=s.useState(k),[Y,D]=s.useState(R),[oe,M]=s.useState(T);s.useEffect(()=>{D(R)},[R]),s.useEffect(()=>{M(T)},[T]),s.useEffect(()=>{k&&x(f=>f||k)},[k]);const J=s.useCallback(async f=>{const y=Y,L=y.includes(f)?y.filter(u=>u!==f):[f,...y];D(L);try{await xn({favoriteProviders:L,favoriteModels:oe}),await ne()}catch{D(y)}},[Y,oe,ne]),te=s.useCallback(async f=>{const y=oe,L=y.includes(f)?y.filter(u=>u!==f):[f,...y];M(L);try{await xn({favoriteProviders:Y,favoriteModels:L}),await ne()}catch{M(y)}},[oe,Y,ne]),P=H||k,re=f=>{if(f.preventDefault(),b==="agent"){if(!W)return;i({agentId:W});return}if(!P)return;const y=P.indexOf("/");if(y<=0)return;const m=P.slice(0,y),L=P.slice(y+1);i({agentId:it,modelProvider:m,modelId:L})},ce=b==="agent"?!W:!P;return t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:d,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:f=>f.stopPropagation(),children:[t.jsx("h3",{children:o("chat.newChatTitle","New Chat")}),t.jsxs("div",{className:"chat-new-dialog-mode-toggle","data-testid":"chat-new-dialog-mode-toggle",children:[t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${b==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{v("agent")},children:o("chat.newChatModeAgent","Agent")}),t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${b==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{v("model"),Q(""),x(f=>f||k)},children:o("chat.newChatModeModel","Model")})]}),t.jsxs("form",{onSubmit:re,children:[b==="agent"&&t.jsxs("label",{className:"chat-new-dialog-model-label",children:[o("chat.newChatModeAgent","Agent"),S?t.jsx("div",{className:"chat-new-dialog-loading",children:o("chat.loadingAgents","Loading agents...")}):p.length===0?t.jsx("div",{className:"chat-new-dialog-empty",children:o("chat.noAgentsAvailable","No agents available")}):t.jsx("div",{className:"chat-new-dialog-agent-list",children:p.map(f=>t.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${W===f.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>Q(f.id),"data-testid":`agent-option-${f.id}`,children:[t.jsx(Ct,{size:16}),t.jsx("span",{className:"chat-new-dialog-agent-name",children:f.name}),t.jsx("span",{className:"chat-new-dialog-agent-role",children:f.role})]},f.id))})]}),b==="model"&&t.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:ee?t.jsx("div",{className:"chat-new-dialog-loading",children:o("chat.loadingModels","Loading models...")}):t.jsx(Ba,{models:X,value:H,onChange:x,label:o("chat.newChatModeModel","Model"),placeholder:o("chat.selectModel","Select a model"),favoriteProviders:Y,onToggleFavorite:J,favoriteModels:oe,onToggleModelFavorite:te})}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:d,children:o("chat.cancel","Cancel")}),t.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:ce,children:o("chat.create","Create")})]})]})]})})}function In(n,r){return n.slice(r+1).find(d=>d.role==="user")?.content}const Rs=s.memo(function({message:r,forcePlain:d,agentName:i,hideAssistantIdentity:o,showAssistantModelTag:b,activeModelTag:v,activeModelProvider:p,activeSessionId:S,mentionAgentsByName:W,roomContext:Q,copyAction:X,onScrollToTop:R,isAwaitingQuestionAnswer:T,submittedQuestionAnswer:ee,onQuestionSubmit:ne}){const{t:k}=St("app"),H=r.role==="assistant",x=H?r.failureInfo:void 0,Y=H&&(!o||!!x),D=s.useMemo(()=>{if(H)return null;const J=r.content,te=/@([\w-]+)/g,P=[];let re=0,ce=te.exec(J);for(;ce;){const[f,y=""]=ce,m=ce.index;m>re&&P.push(J.slice(re,m));const L=y.replace(/_/g," ").toLowerCase(),u=W.get(L);if(u){const fe=!!(Q&&!Q.memberIds.has(u.id)),Z=fe?k("chat.mentionNonMember","Not a member of {{roomName}}",{roomName:Q?.roomName}):void 0;P.push(t.jsxs("span",{className:`chat-mention-chip${fe?" chat-mention-chip--non-member":""}`,title:Z,"aria-label":Z,children:["@",u.name.replace(/\s+/g,"_")]},`${u.id}-${m}`))}else P.push(f);re=m+f.length,ce=te.exec(J)}return re<J.length&&P.push(J.slice(re)),P.length===0?J:P},[H,r.content,W,Q]),oe=s.useMemo(()=>{const J=r.attachments;if(!J||J.length===0)return null;const te=r.roomId?`/api/chat/rooms/${encodeURIComponent(r.roomId)}/attachments/`:S?`/api/chat/sessions/${encodeURIComponent(S)}/attachments/`:null;return te?t.jsx("div",{className:"chat-message-attachments",children:J.map(P=>{const re=P.mimeType.startsWith("image/"),ce=P.id||P.filename,f=`${te}${encodeURIComponent(P.filename)}`;return re?t.jsx("a",{className:"chat-message-attachment-link","data-testid":"chat-message-attachment",href:f,target:"_blank",rel:"noopener noreferrer",children:t.jsx("img",{className:"chat-message-attachment",src:f,alt:P.originalName})},ce):t.jsxs("a",{className:"chat-message-attachment-file","data-testid":"chat-message-attachment",href:f,target:"_blank",rel:"noopener noreferrer",children:[t.jsx(za,{size:14}),t.jsx("span",{children:P.originalName})]},ce)})}):null},[r.attachments,r.roomId,S]),M=s.useMemo(()=>H?x?t.jsxs("div",{className:"chat-message-content chat-message-content--failure",children:[t.jsxs("div",{className:"chat-message-failure-summary-row",children:[t.jsx("span",{className:"status-dot status-dot--error","aria-hidden":"true"}),t.jsx("span",{className:"chat-message-failure-label",children:k("chat.responseFailed","Response failed")})]}),t.jsx("div",{className:"chat-message-failure-summary",children:x.summary}),(x.errorClass||x.code)&&t.jsxs("div",{className:"chat-message-failure-badges",children:[x.errorClass&&t.jsx("span",{className:"chat-message-failure-badge",children:x.errorClass}),x.code&&t.jsx("span",{className:"chat-message-failure-badge",children:x.code})]}),(x.detail||x.reference)&&t.jsxs("details",{className:"chat-message-failure-details",children:[t.jsxs("summary",{children:[t.jsx(Ha,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:k("chat.failureDetails","Failure details")})]}),x.detail&&t.jsx("pre",{className:"chat-message-failure-detail",children:Yt(x.detail)}),or(x.reference,k)]})]}):d?t.jsx("div",{className:"chat-message-content chat-message-content--plain",children:r.content}):t.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:t.jsx(Fn,{remarkPlugins:[Ln],components:Hn,children:r.content})}):null,[x,d,H,r.content]);return t.jsxs("div",{className:`chat-message chat-message--${r.role}${x?" chat-message--failure":""}`,"data-testid":`chat-message-${r.id}`,"data-message-id":r.id,children:[Y&&t.jsxs("div",{className:"chat-message-avatar",children:[p?t.jsx(yt,{provider:p,size:"sm"}):t.jsx(Ct,{size:14}),t.jsx("span",{children:i}),b&&v&&t.jsx("span",{className:"chat-model-tag",children:v})]}),H?M:t.jsx("div",{className:"chat-message-content",children:D}),H&&!x&&(X||R)&&t.jsxs("div",{className:"chat-message-actions",children:[X,R&&t.jsx("button",{type:"button",className:"btn-icon chat-message-scroll-to-top-action","aria-label":k("chat.scrollMessageToTop","Scroll message to top"),"data-testid":`chat-message-scroll-to-top-${r.id}`,onClick:()=>R(r.id),children:t.jsx(Wa,{size:14})})]}),zn(r.toolCalls,k,{isAwaitingAnswer:T,submittedAnswer:ee,onQuestionSubmit:ne}),r.thinkingOutput&&t.jsxs("details",{className:"chat-message-thinking",children:[t.jsx("summary",{children:k("chat.thinking","Thinking")}),t.jsx("pre",{className:"chat-message-thinking-content",children:Yt(r.thinkingOutput)})]}),oe,t.jsx("div",{className:"chat-message-time",children:_n(r.createdAt,k)})]})});function Cr({projectId:n,addToast:r,experimentalFeatures:d}){const{t:i}=St("app");s.useEffect(()=>(Xt({view:"ChatView",trigger:js?"route-active":"remount",projectId:n,replayAttempted:!1}),js=!1,()=>{js=!0,Xt({view:"ChatView",trigger:"route-inactive",projectId:n,replayAttempted:!1})}),[n]);const{activeSession:o,sessionsLoading:b,messages:v,messagesLoading:p,isStreaming:S,streamingText:W,streamingThinking:Q,streamingToolCalls:X,selectSession:R,createSession:T,archiveSession:ee,renameSession:ne,deleteSession:k,sendMessage:H,stopStreaming:x,pendingMessage:Y,clearPendingMessage:D,loadMoreMessages:oe,hasMoreMessages:M,searchQuery:J,setSearchQuery:te,filteredSessions:P,agentsMap:re}=Ya(n,r),[ce,f]=s.useState(!1),y=d?.chatRooms===!0,[m,L]=s.useState(()=>{try{if(localStorage.getItem(Ns)==="rooms"&&y)return"rooms"}catch{}return"direct"}),u=Sa(n,r),{isUnread:fe,markRead:Z}=ka(n),[G,U]=s.useState(()=>{const e=Mn(m,m==="rooms"?u.activeRoom?.id:o?.id);return An(e)}),[pe,q]=s.useState(null),[ze,je]=s.useState(null),[Ke,we]=s.useState(""),[ot,Se]=s.useState(null),[Ge,Re]=s.useState(null),[ae,xe]=s.useState(!0),[He,se]=s.useState(cr),[le,Me]=s.useState(!1),{agentsMap:kt}=Ms(n),ke=s.useMemo(()=>re.size>0?re:kt,[kt,re]),{defaultProvider:jt,defaultModelId:Nt}=$n(),ct=s.useMemo(()=>({provider:jt,modelId:Nt}),[Nt,jt]),{skills:lt,loading:Rt}=ja(n),[Ae,Te]=s.useState(!1),[qe,Qe]=s.useState(""),[l,g]=s.useState(0),[w,j]=s.useState(""),[$,N]=s.useState(!1),[B,A]=s.useState(0),[K,O]=s.useState(-1),[E,_]=s.useState(!1),[z,me]=s.useState([]),[Ee,Xe]=s.useState(!1),[Ts,Mt]=s.useState(!1),[Ye,Es]=s.useState({}),[At,Ve]=s.useState(!1),[Tt,dt]=s.useState(!1),{pushNav:Is}=Na(),[,Et]=s.useState(!1),[Un,On]=s.useState({top:0,left:0}),V=Ra({projectId:n}),Jt=s.useCallback(e=>{if(!e||!V.mentionActive)return;const a=e.getBoundingClientRect();On({top:a.top-260,left:a.left+8})},[V.mentionActive]),Ds=s.useRef(null),Ps=s.useRef(null),$s=s.useRef(null),Fs=s.useRef(null),ge=s.useRef(!1),It=s.useRef(null),Ls=s.useRef(null),Ue=s.useRef(null),Dt=s.useRef(0),Zt=s.useRef(null),ut=s.useRef(null),Ie=s.useRef(null),be=s.useRef(null),es=s.useRef(null),Pt=s.useRef(!1),De=s.useRef(null),Pe=s.useRef(null),he=s.useRef(null),$t=s.useRef(null),_s=s.useRef([]),Je=s.useRef(0),mt=s.useRef(new Map),ts=s.useRef(!1),Ft=s.useRef(!1),$e=s.useRef(null),ss=s.useRef(!1),Lt=Ma(),F=Lt==="mobile",ns=Lt==="tablet";s.useEffect(()=>{o?.id&&Z("direct",o.id,o.lastMessageAt??o.updatedAt)},[o?.id,o?.lastMessageAt,o?.updatedAt,Z]),s.useEffect(()=>{u.activeRoom?.id&&Z("room",u.activeRoom.id,u.activeRoom.updatedAt)},[u.activeRoom?.id,u.activeRoom?.updatedAt,Z]),s.useEffect(()=>{if(!o?.id||v.length===0)return;const e=v[v.length-1];Z("direct",o.id,e?.createdAt??o.lastMessageAt??o.updatedAt)},[o?.id,o?.lastMessageAt,o?.updatedAt,Z,v]),s.useEffect(()=>{if(!u.activeRoom?.id||u.messages.length===0)return;const e=u.messages[u.messages.length-1];Z("room",u.activeRoom.id,e?.createdAt??u.activeRoom.updatedAt)},[Z,u.activeRoom?.id,u.activeRoom?.updatedAt,u.messages]),s.useEffect(()=>{try{const e=localStorage.getItem(Rn);if(!e)return;const a=Number.parseInt(e,10);if(Number.isNaN(a))return;const c=Math.max(Wt,Math.min(qt,a));se(c)}catch{}},[]),s.useEffect(()=>{try{const e=localStorage.getItem(Ns);if(e==="direct"){L("direct");return}e==="rooms"&&y&&L("rooms")}catch{}},[y]),s.useEffect(()=>{if(!y&&m==="rooms"){L("direct");return}try{localStorage.setItem(Ns,m)}catch{}},[y,m]);const ve=Mn(m,m==="rooms"?u.activeRoom?.id:o?.id),as=s.useRef(ve);s.useEffect(()=>{ve!==as.current&&(as.current=ve,U(An(ve)))},[ve]),s.useEffect(()=>{if(!(!ve||as.current!==ve))try{if(G){localStorage.setItem(ve,G);return}localStorage.removeItem(ve)}catch{}},[ve,G]);const ie=y&&m==="rooms"&&!!u.activeRoom,{keyboardOverlap:zs,keyboardOpen:_t}=Aa({enabled:(F||ns)&&(!!o||ie),allowNonMobileViewport:ns}),ht=ns&&_t,ye=s.useMemo(()=>{const e=qe.trim().toLowerCase();return(e?lt.filter(c=>c.name.toLowerCase().includes(e)):lt).slice(0,10)},[lt,qe]),Ze=s.useMemo(()=>Array.from(ke.values()),[ke]),Fe=s.useMemo(()=>!y||m!=="rooms"||!u.activeRoom?null:{roomId:u.activeRoom.id,roomName:u.activeRoom.name,memberIds:new Set(u.activeRoomMembers.map(e=>e.agentId))},[y,m,u.activeRoom,u.activeRoomMembers]),We=s.useMemo(()=>{const e=Ze.filter(h=>Ta(h.name,w));if(!Fe)return e;const a=e.filter(h=>Fe.memberIds.has(h.id));if(w.trim().length===0)return a;const c=e.filter(h=>!Fe.memberIds.has(h.id));return[...a,...c]},[Ze,w,Fe]),rs=s.useMemo(()=>{const e=new Map;for(const a of Ze)e.set(a.name.toLowerCase(),a);return e},[Ze]),Bn=s.useMemo(()=>ye.map(e=>e.id).join("\0"),[ye]);s.useEffect(()=>{g(0)},[Bn]),s.useEffect(()=>{A(0)},[w,$]),s.useEffect(()=>()=>{Ie.current!==null&&window.clearTimeout(Ie.current)},[]),s.useEffect(()=>{const e=Ps.current;if(!e||!M||p)return;const a=new IntersectionObserver(c=>{c[0].isIntersecting&&oe()},{threshold:.1});return a.observe(e),()=>a.disconnect()},[M,p,oe]);const et=s.useCallback(()=>ie?u.activeRoom?.id??null:o?.id??null,[ie,u.activeRoom?.id,o?.id]),Hs=s.useCallback((e,a)=>typeof CSS<"u"&&typeof CSS.escape=="function"?e.querySelector(`.chat-message[data-message-id="${CSS.escape(a)}"]`):e.querySelector(`.chat-message[data-message-id="${a.replace(/"/g,'\\"')}"]`),[]),zt=s.useCallback(()=>{const e=be.current,a=et();if(!e||!a)return;const c=e.scrollTop,h=e.querySelectorAll(".chat-message[data-message-id]"),C=Array.from(h).find(de=>de.offsetTop+de.offsetHeight>=c)??h[0]??null,I=C?.getAttribute("data-message-id")??null,ue=C?C.offsetTop-c:0;ut.current={threadId:a,scrollTop:c,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight,anchorMessageId:I,anchorOffset:ue,wasPinnedBefore:!ge.current,capturedAtMs:typeof performance<"u"?performance.now():Date.now()}},[et]),Us=s.useCallback(()=>{const e=be.current;if(!e)return;const c=e.scrollTop+e.clientHeight>=e.scrollHeight-50;Mt(!c),ge.current=!c,zt()},[zt]),Le=s.useCallback((e,a)=>{if(!e.isConnected||!a?.force&&ge.current)return;let c=0,h=0,C=-1;const I=6,ue=()=>{if(e.isConnected&&!(!a?.force&&ge.current)){if(e.scrollTop=e.scrollHeight,e.scrollHeight===C?h+=1:(h=0,C=e.scrollHeight),c+=1,c>=I||h>=2){Mt(!1),ge.current=!1;return}window.requestAnimationFrame(ue)}};ue()},[]),ft=ie?u.messages:v;s.useLayoutEffect(()=>{const e=be.current,a=et(),c=ut.current;if(!e||!a||!c||c.threadId!==a||c.wasPinnedBefore)return;const h=(typeof performance<"u"?performance.now():Date.now())-c.capturedAtMs,C=e.scrollHeight>e.clientHeight,I=h>3e3,ue=c.scrollTop<=0&&c.anchorOffset<=0&&C;if(!ge.current||I||ue){ut.current=null;return}let de=c.scrollTop;if(c.anchorMessageId){const _e=Hs(e,c.anchorMessageId);_e?de=_e.offsetTop-c.anchorOffset:de=c.scrollTop+(e.scrollHeight-c.scrollHeight)}else de=c.scrollTop+(e.scrollHeight-c.scrollHeight);e.scrollTop=Math.max(0,de),ge.current=!0,Mt(!0),ut.current=null},[ft,et,Hs]);const is=s.useCallback(e=>{},[ft.length,ie]),Ne=s.useCallback(e=>{is(e);const a=be.current;a&&(ut.current=null,ge.current=!1,Le(a))},[Le,is]);s.useLayoutEffect(()=>{Ue.current!==null&&(window.clearTimeout(Ue.current),Ue.current=null);const e=ie?u.activeRoom?.id??null:o?.id??null;if(!e){It.current=null;return}const a={threadId:e,loaded:ie?!u.messagesLoading:!p,hasMessages:ie?u.messages.length>0:v.length>0},c=It.current,h=c?.threadId!==e,C=c?.threadId===e&&!c.loaded&&a.loaded,I=c?.threadId===e&&!c.hasMessages&&a.hasMessages;if(!(c===null||h||C||I))return;const de=be.current;if(de)return is(h?"thread-change":C?"finished-loading":I?"first-messages":"mount"),Le(de,{force:!0}),ie||(Ue.current=window.setTimeout(()=>{if(Ue.current=null,ge.current)return;const _e=be.current;_e&&Le(_e)},250)),It.current=a,()=>{Ue.current!==null&&(window.clearTimeout(Ue.current),Ue.current=null)}},[ie,u.activeRoom?.id,u.messages.length,u.messagesLoading,o?.id,v.length,p,Le]),s.useEffect(()=>{!S||ge.current||Ne("streaming")},[S,W,Q,Ne]),s.useEffect(()=>{const e=et();if(!e){Dt.current=0,Zt.current=null;return}if(Zt.current!==e){Zt.current=e,Dt.current=ft.length;return}const a=Dt.current,c=ft.length,h=c>a,C=!ge.current;Dt.current=c,h&&C&&Ne("new-message")},[ft,et,Ne]),s.useEffect(()=>{zs<=0||!be.current||Ne("keyboard")},[zs,Ne]),Ea(F&&_t),s.useLayoutEffect(()=>{if(!F||!o&&!ie||typeof window>"u")return;const e=es.current,a=window.visualViewport;if(!e||!a)return;const c=C=>{if(!(C instanceof HTMLElement))return!1;if(C.tagName==="TEXTAREA")return!0;if(C.tagName!=="INPUT")return!1;const I=C.type.toLowerCase();return["","text","search","email","url","tel","password","number"].includes(I)},h=()=>{if(Pt.current){e.classList.remove("chat-thread--keyboard-active"),e.style.transform="",e.style.willChange="";return}const C=Math.max(0,window.innerHeight-a.offsetTop-a.height),I=a.offsetTop||0;e.style.setProperty("--vv-height",`${a.height}px`),e.style.setProperty("--vv-offset-top",`${I}px`),e.style.setProperty("--keyboard-overlap",`${C}px`);const ue=(C>0||I>0)&&c(document.activeElement);e.classList.toggle("chat-thread--keyboard-active",ue),ue&&I>0?(e.style.transform=`translateY(${I}px)`,e.style.willChange="transform"):(e.style.transform="",e.style.willChange="")};return h(),a.addEventListener("resize",h),a.addEventListener("scroll",h),document.addEventListener("focusin",h),document.addEventListener("focusout",h),window.addEventListener("pageshow",h),document.addEventListener("visibilitychange",h),()=>{a.removeEventListener("resize",h),a.removeEventListener("scroll",h),document.removeEventListener("focusin",h),document.removeEventListener("focusout",h),window.removeEventListener("pageshow",h),document.removeEventListener("visibilitychange",h),e.classList.remove("chat-thread--keyboard-active"),e.style.transform="",e.style.willChange=""}},[o,F,ie]),s.useEffect(()=>{const e=()=>q(null);if(pe)return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[pe]),s.useEffect(()=>{if(!F||!_t)return;const e=a=>{a.target?.closest(".chat-messages")||a.preventDefault()};return document.addEventListener("touchmove",e,{passive:!1}),()=>{document.removeEventListener("touchmove",e)}},[F,_t]),s.useEffect(()=>{const e=Ls.current;if(Ls.current=m,m==="rooms"&&!u.activeRoom){It.current=null;return}if(!(m==="direct"&&(e===null||e==="rooms"))&&!(m==="rooms"&&(e===null||e==="direct")))return;const h=be.current;h&&(Le(h,{force:!0}),ge.current=!1,Mt(!1))},[m,u.activeRoom,Le]),s.useEffect(()=>{if(!o&&!ie||ie&&!F)return;const e=()=>{const c=!ge.current;zt(),c&&F&&be.current&&Ne("visibility-restore")},a=()=>{document.visibilityState==="visible"&&e()};return document.addEventListener("visibilitychange",a),window.addEventListener("pageshow",e),()=>{document.removeEventListener("visibilitychange",a),window.removeEventListener("pageshow",e)}},[F,o,ie,zt,Ne]),s.useEffect(()=>{if(ie||typeof ResizeObserver>"u")return;const e=be.current;if(!e)return;const a=new ResizeObserver(()=>{ge.current||Le(e)});return a.observe(e),()=>{a.disconnect()}},[ie,Le,o?.id,m]),s.useEffect(()=>{_s.current=z},[z]),s.useEffect(()=>()=>{for(const e of _s.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl);for(const e of mt.current.values())window.clearTimeout(e);mt.current.clear()},[]);const tt=s.useCallback(e=>{if(!e||e.length===0)return;const a=[];for(const c of Array.from(e)){if(!dr.includes(c.type))continue;const h=c.type.startsWith("image/");a.push({file:c,previewUrl:h?URL.createObjectURL(c):""})}a.length>0&&me(c=>[...c,...a])},[]),Os=s.useCallback(e=>{me(a=>{const c=a[e];return c?.previewUrl&&URL.revokeObjectURL(c.previewUrl),a.filter((h,C)=>C!==e)})},[]),Bs=s.useCallback(e=>{const a=e.clipboardData?.files;if(!a||a.length===0)return;const c=Array.from(a).filter(h=>h.type.startsWith("image/"));c.length!==0&&tt(c)},[tt]),Kn=s.useCallback(async e=>{try{await T(e),f(!1),F&&xe(!1)}catch{r(i("chat.failedToCreateSession","Failed to create chat session"),"error")}},[T,r,F]),Ce=s.useCallback(e=>{const a=e??he.current;if(!a)return;const c=Lt==="tablet"?tr:As;a.style.height="auto",a.style.height=`${nr(a.scrollHeight,c)}px`,a.style.overflowY=sr(a.scrollHeight,c)},[Lt]),Ks=s.useCallback(e=>{he.current=e,e&&Ce(e)},[Ce]);s.useLayoutEffect(()=>{Ce()},[m,G,o?.id,u.activeRoom?.id,Ce]);const st=s.useCallback(()=>{if(U(""),ve)try{localStorage.removeItem(ve)}catch{}Te(!1),Qe(""),N(!1),j(""),O(-1),me(e=>{for(const a of e)a.previewUrl&&URL.revokeObjectURL(a.previewUrl);return[]})},[ve]),nt=s.useCallback(()=>{Ft.current=!0,$e.current!=null&&clearTimeout($e.current),$e.current=window.setTimeout(()=>{Ft.current=!1,$e.current=null},700)},[]),at=s.useCallback(()=>ss.current?!1:(ss.current=!0,window.setTimeout(()=>{ss.current=!1},0),!0),[]),os=s.useCallback(()=>Ft.current?(Ft.current=!1,$e.current!=null&&(clearTimeout($e.current),$e.current=null),!0):!1,[]);s.useEffect(()=>()=>{$e.current!=null&&clearTimeout($e.current)},[]);const gt=s.useCallback(()=>{const e=G.trim(),a=z.map(c=>c.file);if(!(!e&&a.length===0||!o)){if(e==="/clear"||e==="/new"){st(),D(),x(),T({agentId:o.agentId,modelProvider:o.modelProvider??void 0,modelId:o.modelId??void 0}).catch(()=>{r(i("chat.failedToClearConversation","Failed to clear conversation"),"error")});return}st(),H(e,a)}},[G,z,o,st,x,D,T,r,H]),pt=s.useCallback(async()=>{const e=G.trim(),a=z.map(c=>c.file);if(!(!e&&a.length===0)){if(y&&m==="rooms"){if(!u.activeRoom)return;if(e==="/clear"||e==="/new"){st();try{await u.clearRoom(u.activeRoom.id)}catch{r(i("chat.failedToClearRoomConversation","Failed to clear room conversation"),"error")}return}if(ts.current)return;ts.current=!0;const c=G;st();try{await u.sendRoomMessage(e,{files:a})}catch(h){if(h instanceof Ia){const I=h.message.trim()?h.message:i("chat.messageSentButReplyFailed","Message sent, but assistant reply failed");r(i("chat.messageSentButReplyFailedDetail","Message sent, but assistant reply failed: {{detail}}",{detail:I}),"error");return}U(c);const C=h instanceof Error&&h.message.trim()?h.message:i("chat.failedToSendRoomMessage","Failed to send room message");r(C,"error")}finally{ts.current=!1}return}gt()}},[G,z,y,m,u,u.clearRoom,st,r,gt]),Ht=s.useCallback(async e=>{if(y&&m==="rooms"){if(!u.activeRoom)return;try{await u.sendRoomMessage(e)}catch(a){const c=a instanceof Error&&a.message.trim()?a.message:i("chat.failedToSendRoomMessage","Failed to send room message");r(c,"error")}return}o&&H(e)},[o,r,y,m,u,H,i]),cs=s.useCallback(e=>{U(a=>{const c=Tn(a);if(!c)return a;const h=`/skill:${e.name} `,C=a.slice(0,c.start)+h+a.slice(c.end);return window.requestAnimationFrame(()=>{he.current&&(Ce(he.current),he.current.focus())}),C}),Te(!1),Qe(""),g(0)},[Ce]),Ut=s.useCallback(e=>{const a=he.current;if(!a||K<0)return;const c=a.selectionStart??Je.current,h=a.selectionEnd??c,C=Math.max(c,h),I=Math.min(K,C),de=`${`@${e.name.replace(/\s+/g,"_")}`} `,_e=G.slice(0,I)+de+G.slice(C),rt=I+de.length;U(_e),N(!1),j(""),A(0),O(-1),window.requestAnimationFrame(()=>{he.current&&(Ce(he.current),he.current.focus(),he.current.setSelectionRange(rt,rt))})},[K,G,Ce]),bt=s.useCallback((e,a)=>{const h=he.current?.selectionStart??Je.current,C=G.lastIndexOf("#",h),I=C>=0?C+a.length:e.length;U(e),V.dismissMention(),Et(!1),window.requestAnimationFrame(()=>{he.current&&(Ce(he.current),he.current.focus(),he.current.setSelectionRange(I,I))})},[V,G,Ce]),Gs=s.useCallback(e=>{if(Je.current=e.currentTarget.selectionStart??Je.current,V.mentionActive&&V.combinedItems.length>0){if(V.handleKeyDown(e,G),e.key==="Enter"||e.key==="Tab"){const a=V.combinedItems[V.selectedIndex];a?.kind==="task"?bt(V.selectTask(a.task,G),`#${a.task.id}`):a?.kind==="file"&&bt(V.selectFile(a.file,G),`#${a.file.path}`)}return}if($&&e.key==="ArrowDown"){e.preventDefault(),We.length>0&&A(a=>(a+1)%We.length);return}if($&&e.key==="ArrowUp"){e.preventDefault(),We.length>0&&A(a=>a===0?We.length-1:a-1);return}if($&&e.key==="Enter"){e.preventDefault();const a=We[B]??We[0];a&&Ut(a);return}if($&&e.key==="Escape"){e.preventDefault(),N(!1),j(""),O(-1);return}if(Ae&&e.key==="ArrowDown"){e.preventDefault(),ye.length>0&&g(a=>(a+1)%ye.length);return}if(Ae&&e.key==="ArrowUp"){e.preventDefault(),ye.length>0&&g(a=>a===0?ye.length-1:a-1);return}if(Ae&&(e.key==="Enter"||e.key==="Tab")&&ye.length>0){e.preventDefault();const a=ye[l]??ye[0];a&&cs(a);return}if(Ae&&e.key==="Escape"){e.preventDefault(),Te(!1);return}e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),pt())},[$,We,B,Ut,Ae,ye,l,cs,pt,V,bt,G]),Ot=s.useCallback((e,a)=>{const c=ur(e,a);if(c){N(!0),j(c.filter),O(c.start);return}N(!1),j(""),O(-1)},[]),Vs=s.useCallback(e=>{const a=e.target,c=a.value,h=a.selectionStart??c.length;Ce(a),Je.current=h,U(c);const C=Tn(c);C?(Te(!0),Qe(C.filter)):(Te(!1),Qe("")),Ot(c,h),V.detectMention(c,h),Et(V.mentionActive),V.mentionActive&&Jt(a)},[Ot,Ce]),Bt=s.useCallback(e=>{const a=e.currentTarget,c=a.selectionStart??a.value.length;Je.current=c,Ot(a.value,c),V.detectMention(a.value,c),Et(V.mentionActive),V.mentionActive&&Jt(a)},[Ot,V,Jt]),Ws=s.useCallback(e=>{e.key!=="Escape"&&Bt(e)},[Bt]),qs=s.useCallback(()=>{typeof window<"u"&&window.innerWidth<=768&&(Pt.current=!0,De.current!==null&&window.clearTimeout(De.current),De.current=window.setTimeout(()=>{Pt.current=!1,De.current=null},450),(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0),Pe.current!==null&&window.clearTimeout(Pe.current),Pe.current=window.setTimeout(()=>{Pe.current=null,document.activeElement?.tagName!=="TEXTAREA"&&(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0)},350)),Ie.current!==null&&window.clearTimeout(Ie.current),Ie.current=window.setTimeout(()=>{Te(!1),N(!1),j(""),O(-1),Et(!1),V.dismissMention(),Ie.current=null},120)},[V]),Qs=s.useCallback(()=>{Pt.current=!1,De.current!==null&&(window.clearTimeout(De.current),De.current=null),Ie.current!==null&&(window.clearTimeout(Ie.current),Ie.current=null),Pe.current!==null&&(window.clearTimeout(Pe.current),Pe.current=null)},[]);s.useEffect(()=>()=>{De.current!==null&&window.clearTimeout(De.current),Pe.current!==null&&window.clearTimeout(Pe.current)},[]);const Gn=s.useCallback(async e=>{q(null);try{await ee(e),r(i("chat.conversationArchived","Conversation archived"),"success")}catch{r(i("chat.failedToArchiveConversation","Failed to archive conversation"),"error")}},[ee,r]),Xs=s.useCallback(e=>{const a=P.find(c=>c.id===e)??(o?.id===e?o:null);q(null),Ve(!1),we(a?.title??""),je({sessionId:e,title:a?.title??""})},[o,P]),Ys=s.useCallback(async()=>{if(ze)try{await ne(ze.sessionId,Ke),je(null),we(""),r(i("chat.conversationRenamed","Conversation renamed"),"success")}catch{}},[r,ze,ne,Ke,i]),Vn=s.useCallback(async e=>{Se(null),q(null);try{await k(e),r(i("chat.conversationDeleted","Conversation deleted"),"success")}catch{r(i("chat.failedToDeleteConversation","Failed to delete conversation"),"error")}},[k,r]),vt=s.useCallback(e=>{try{localStorage.setItem(Rn,String(e))}catch{}},[]),Wn=s.useCallback(e=>{if(F||ht)return;e.preventDefault(),e.stopPropagation();const a=e.currentTarget;typeof a.setPointerCapture=="function"&&a.setPointerCapture(e.pointerId);const c=e.clientX,h=He;let C=h;document.body.style.userSelect="none";const I=de=>{const _e=de.clientX-c,rt=Math.max(Wt,Math.min(qt,h+_e));C=rt,se(rt),vt(rt)},ue=de=>{typeof a.releasePointerCapture=="function"&&a.releasePointerCapture(de.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",I),document.removeEventListener("pointerup",ue),vt(C)};document.addEventListener("pointermove",I),document.addEventListener("pointerup",ue)},[F,vt,He,ht]),qn=s.useCallback(e=>{if(F||ht||e.key!=="ArrowLeft"&&e.key!=="ArrowRight")return;e.preventDefault();const a=e.shiftKey?50:10,c=e.key==="ArrowLeft"?-a:a,h=Math.max(Wt,Math.min(qt,He+c));se(h),vt(h)},[F,vt,He,ht]),Js=s.useCallback(e=>{const a=P.find(c=>c.id===e);Z("direct",e,a?.lastMessageAt??a?.updatedAt),R(e),Ve(!1),F&&xe(!1)},[P,F,Z,R]),ls=s.useCallback(()=>{R(""),xe(!0),Ve(!1)},[R]),ds=s.useCallback(()=>{u.selectRoom(null),xe(!0),Ve(!1)},[u]),Qn=()=>t.jsxs("div",{className:"chat-empty-state",children:[t.jsx(Pn,{size:48,strokeWidth:1.5}),t.jsx("h2",{children:i("chat.startNewConversation","Start a new conversation")}),t.jsxs("button",{className:"btn btn-primary",onClick:()=>f(!0),children:[t.jsx(xt,{size:16}),i("chat.newChat","New Chat")]})]}),us=En(o,o?.agentId?ke.get(o.agentId)??null:null,ct),Oe=Nn(us?.provider,us?.modelId),Be=us?.provider??null,ms=!!(o||S||v.length>0),Kt=m==="rooms"?ie:!!o,Zs=s.useRef(Kt);s.useEffect(()=>{const e=Zs.current;Zs.current=Kt,F&&(e||!Kt||Is({type:"view",revert:m==="rooms"?ds:ls}))},[m,ls,ds,Kt,F,Is]);const hs=o?.agentId===it?Oe??"Fusion":o?.title||ke.get(o?.agentId??"")?.name||o?.agentId||"Chat",en=!!(Oe&&Oe!==hs),Xn=F&&m==="direct"&&!!o,fs=ke.get(o?.agentId??"")?.name||(o?.agentId===it?Oe??"Fusion":o?.agentId?.slice(0,30)??"Fusion"),gs=!1,ps=o?.agentId===it,Yn=Y.length>50?`${Y.slice(0,50)}…`:Y,Jn=s.useCallback(()=>{_(e=>!e)},[]);s.useEffect(()=>{if(!At)return;const e=a=>{$s.current?.contains(a.target)||Ve(!1)};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[At]),s.useEffect(()=>{if(!Tt)return;const e=c=>{Fs.current?.contains(c.target)||dt(!1)},a=c=>{c.key==="Escape"&&dt(!1)};return document.addEventListener("mousedown",e),document.addEventListener("keydown",a),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",a)}},[Tt]),s.useEffect(()=>{(!F||m!=="direct"||ae)&&Ve(!1)},[F,m,ae]),s.useEffect(()=>{dt(!1)},[u.activeRoom?.id]);const bs=s.useCallback((e,a)=>{const c=mt.current.get(e);c&&window.clearTimeout(c),Es(C=>({...C,[e]:a}));const h=window.setTimeout(()=>{Es(C=>{const{[e]:I,...ue}=C;return ue}),mt.current.delete(e)},2e3);mt.current.set(e,h)},[]),tn=s.useCallback(async(e,a)=>{try{if(!navigator.clipboard?.writeText)throw new Error("Clipboard API unavailable");await navigator.clipboard.writeText(a),bs(e,"success")}catch{bs(e,"error")}},[bs]),Zn=s.useCallback((e,a=!1)=>a?t.jsx("div",{className:"chat-message-content chat-message-content--plain",children:e}):t.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:t.jsx(Fn,{remarkPlugins:[Ln],components:Hn,children:e})}),[]),vs=o?.agentId===it,ws=s.useCallback((e,a,c)=>t.jsx("button",{type:"button",className:`btn-icon chat-message-copy-action${Ye[e]==="success"?" chat-message-copy-action--success":""}${Ye[e]==="error"?" chat-message-copy-action--error":""}`,"data-testid":c??`chat-copy-response-${e}`,"aria-label":Ye[e]==="success"?i("chat.responseCopied","Response copied"):Ye[e]==="error"?i("chat.copyFailed","Copy failed"):i("chat.copyResponse","Copy response"),onClick:()=>{tn(e,a)},children:Ye[e]==="success"?t.jsx(Da,{size:14}):t.jsx(Pa,{size:14})}),[Ye,tn]),xs=s.useCallback(e=>{const a=be.current;if(!a)return;const c=`[data-testid="chat-message-${e}"]`,h=a.querySelector(c);if(!h)return;const C=h.getBoundingClientRect().top-a.getBoundingClientRect().top+a.scrollTop,I=typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;a.scrollTo({top:C,behavior:I?"auto":"smooth"})},[]),sn=o?.cliExecutorAdapterId??null,ea=!!sn,ta=sn==="generic"?"generic":"hybrid",sa=o?.cliSessionFile||o?.id||"",nn=()=>t.jsxs("div",{className:"chat-messages",ref:be,onScroll:Us,children:[t.jsx("div",{ref:Ps,className:"chat-load-more-sentinel",children:M&&p&&t.jsx("div",{className:"chat-loading-older",children:i("chat.loadingOlderMessages","Loading older messages…")})}),S?t.jsxs(t.Fragment,{children:[v.map((e,a)=>t.jsx(Rs,{message:e,forcePlain:E,agentName:fs,hideAssistantIdentity:ps,showAssistantModelTag:gs,activeModelTag:Oe,activeModelProvider:Be,activeSessionId:o?.id??null,mentionAgentsByName:rs,roomContext:null,copyAction:vs&&e.role==="assistant"?ws(e.id,e.content):void 0,onScrollToTop:xs,isAwaitingQuestionAnswer:e.role==="assistant"&&a===v.length-1&&!S,submittedQuestionAnswer:In(v,a),onQuestionSubmit:Ht},e.id)),t.jsxs("div",{className:"chat-message chat-message--assistant chat-message--streaming",children:[!ps&&t.jsxs("div",{className:"chat-message-avatar",children:[Be?t.jsx(yt,{provider:Be,size:"sm"}):t.jsx(Ct,{size:14}),t.jsx("span",{children:fs}),gs]}),W?Zn(W,E):t.jsx("div",{className:"chat-message-content chat-message-content--waiting",children:Q?i("chat.thinkingStatus","Thinking…"):i("chat.workingStatus","Working…")}),vs&&W&&ws("__streaming__",W,"chat-copy-response-streaming"),zn(X,i,{isAwaitingAnswer:!0,onQuestionSubmit:Ht}),Q&&t.jsxs("details",{className:"chat-message-thinking",children:[t.jsx("summary",{children:i("chat.thinking","Thinking")}),t.jsx("pre",{className:"chat-message-thinking-content",children:Yt(Q)})]}),t.jsxs("div",{className:"chat-typing-indicator",children:[t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{})]})]})]}):p?t.jsx("div",{className:"chat-empty-state",children:i("chat.loadingMessages","Loading messages...")}):v.length===0&&!o?Qn():v.length===0&&o?t.jsx("div",{className:"chat-empty-state",children:i("chat.noMessagesYet","No messages yet. Start the conversation!")}):t.jsx(t.Fragment,{children:v.map((e,a)=>t.jsx(Rs,{message:e,forcePlain:E,agentName:fs,hideAssistantIdentity:ps,showAssistantModelTag:gs,activeModelTag:Oe,activeModelProvider:Be,activeSessionId:o?.id??null,mentionAgentsByName:rs,roomContext:null,copyAction:vs&&e.role==="assistant"?ws(e.id,e.content):void 0,onScrollToTop:xs,isAwaitingQuestionAnswer:e.role==="assistant"&&a===v.length-1&&!S,submittedQuestionAnswer:In(v,a),onQuestionSubmit:Ht},e.id))}),t.jsx("div",{ref:Ds})]}),an=()=>t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:$t,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:e=>{tt(e.target.files),e.target.value=""}}),Ae&&t.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":i("chat.skillSuggestions","Skill suggestions"),children:Rt?t.jsx("div",{className:"chat-skill-menu-empty",children:i("chat.loadingSkills","Loading skills…")}):ye.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:qe?i("chat.noSkillsFound","No skills found"):i("chat.noSkillsAvailable","No skills available")}):ye.map((e,a)=>t.jsxs("button",{type:"button",role:"option","aria-selected":a===l,className:`chat-skill-menu-item${a===l?" chat-skill-menu-item--highlighted":""}`,onMouseDown:c=>c.preventDefault(),onMouseEnter:()=>g(a),onClick:()=>cs(e),children:[t.jsx("span",{className:"chat-skill-menu-item-name",children:e.name}),t.jsx("span",{className:"chat-skill-menu-item-description",title:e.relativePath,children:e.relativePath})]},e.id))}),z.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:z.map((e,a)=>t.jsxs("div",{className:"chat-attachment-preview","data-testid":`chat-attachment-preview-${a}`,children:[e.previewUrl?t.jsx("img",{src:e.previewUrl,alt:e.file.name}):t.jsx("span",{className:"chat-attachment-preview-name",children:e.file.name}),t.jsx("button",{type:"button",className:"chat-attachment-remove",onClick:()=>Os(a),"data-testid":`chat-attachment-remove-${a}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${a}`))}),t.jsxs("div",{className:"chat-input-row",children:[t.jsx("button",{type:"button",className:"btn-icon chat-attach-btn","data-testid":"chat-attach-btn","aria-label":i("chat.attachFiles","Attach files"),onClick:()=>$t.current?.click(),children:t.jsx(gn,{size:16})}),t.jsxs("div",{className:`chat-input-wrapper${Ee?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),Xe(!0)},onDragLeave:()=>Xe(!1),onDrop:e=>{e.preventDefault(),Xe(!1),tt(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:Ks,className:"chat-input-textarea",placeholder:i("chat.typeMessage","Type a message..."),value:G,onChange:Vs,onKeyDown:Gs,onKeyUp:Ws,onClick:Bt,onBlur:qs,onFocus:Qs,onPaste:Bs,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||pn()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(bn,{agents:Ze,filter:w,highlightedIndex:B,visible:$,onSelect:Ut,position:"below",roomMemberIds:Fe?.memberIds,roomName:Fe?.roomName}),t.jsx(Ua,{visible:V.mentionActive&&!$,position:Un,tasks:V.tasks,files:V.files,selectedIndex:V.selectedIndex,onSelectTask:e=>{bt(V.selectTask(e,G),`#${e.id}`)},onSelectFile:e=>{bt(V.selectFile(e,G),`#${e.path}`)},loading:V.loading}),Y&&t.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[t.jsx("span",{children:i("chat.queuedMessage","Queued: {{preview}}",{preview:Yn})}),t.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":i("chat.dismissQueuedMessage","Dismiss queued message"),"data-testid":"chat-pending-dismiss",onClick:D,children:"×"})]})]}),S?t.jsx("button",{className:"chat-input-stop",onPointerDown:e=>{if(e.pointerType&&e.pointerType!=="mouse"){if(e.preventDefault(),!at())return;nt(),x()}},onTouchStart:e=>{e.preventDefault(),at()&&(nt(),x())},onMouseDown:e=>{e.preventDefault()},onClick:()=>{os()||x()},"aria-label":i("chat.stopGeneration","Stop generation"),"data-testid":"chat-stop-btn",children:t.jsx(Oa,{size:14})}):t.jsx("button",{type:"button",className:"chat-input-send",onPointerDown:e=>{if(e.pointerType&&e.pointerType!=="mouse"){if(e.preventDefault(),!at())return;nt(),gt()}},onTouchStart:e=>{e.preventDefault(),at()&&(nt(),gt())},onMouseDown:e=>{e.preventDefault()},onClick:()=>{os()||gt()},disabled:!G.trim()&&z.length===0,"data-testid":"chat-send-btn",style:{touchAction:"manipulation"},children:t.jsx(vn,{size:16})})]})]}),na=F?void 0:{width:`${He}px`};return t.jsxs("div",{className:"chat-view",children:[t.jsxs("div",{className:`chat-sidebar${ae?"":" chat-sidebar--hidden"}`,style:na,children:[y&&t.jsxs("div",{className:"chat-sidebar-scope-toggle",role:"tablist","data-testid":"chat-sidebar-scope-toggle",children:[t.jsx("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${m==="direct"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":m==="direct","data-testid":"chat-sidebar-scope-direct",onClick:()=>L("direct"),children:i("chat.scopeDirect","Direct")}),t.jsx("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${m==="rooms"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":m==="rooms","data-testid":"chat-sidebar-scope-rooms",onClick:()=>L("rooms"),children:i("chat.scopeRooms","Rooms")})]}),!y||m==="direct"?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"chat-sidebar-search-container",children:t.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[t.jsx($a,{size:14,className:"chat-sidebar-search-icon"}),t.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:i("chat.searchConversations","Search conversations..."),value:J,onChange:e=>te(e.target.value),"data-testid":"chat-search-input"})]})}),t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:b?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:i("chat.loadingConversations","Loading...")}):P.length===0?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:i("chat.noConversationsYet","No conversations yet")}):P.map(e=>{const a=o?.id===e.id,c=!a&&fe("direct",e.id,e.lastMessageAt??e.updatedAt),h=En(e,ke.get(e.agentId)??null,ct),C=Nn(h?.provider,h?.modelId)??"Fusion";return t.jsxs("div",{className:`chat-session-item${a?" chat-session-item--active":""}`,onClick:()=>Js(e.id),onContextMenu:I=>{I.preventDefault(),q({sessionId:e.id,x:I.clientX,y:I.clientY})},"data-testid":`chat-session-${e.id}`,children:[t.jsx("button",{className:"chat-session-delete-btn",onClick:I=>{I.stopPropagation(),Se(e.id)},"data-testid":"chat-session-delete-btn","aria-label":i("chat.deleteConversation","Delete conversation"),children:t.jsx(Cs,{size:14})}),t.jsxs("div",{className:"chat-session-title",children:[e.title||i("chat.untitledSession","Untitled"),c?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${e.id}`,"aria-label":i("chat.unreadMessages","Unread messages")}):null]}),t.jsx("div",{className:"chat-session-preview",children:e.lastMessagePreview||i("chat.noMessages","No messages")}),t.jsxs("div",{className:"chat-session-meta",children:[t.jsxs("span",{className:"chat-session-meta-model",children:[h?.provider?t.jsx(yt,{provider:h.provider,size:"sm"}):null,t.jsx("span",{children:ke.get(e.agentId)?.name||(e.agentId===it?C:e.agentId.slice(0,30))})]}),t.jsx("span",{children:e.updatedAt?_n(e.updatedAt,i):""})]})]},e.id)})})]}):t.jsxs("div",{className:"chat-sidebar-rooms","data-testid":"chat-sidebar-rooms",children:[!F&&t.jsx("div",{className:"chat-sidebar-rooms-header","data-testid":"chat-sidebar-rooms-header",children:t.jsxs("button",{type:"button",className:"btn btn-sm btn-primary","data-testid":"chat-create-room-btn",onClick:()=>Me(!0),children:[t.jsx(xt,{size:14}),i("chat.createRoom","Create room")]})}),u.rooms.length===0?t.jsx("div",{className:"chat-sidebar-rooms-empty","data-testid":"chat-sidebar-rooms-empty",children:i("chat.noRoomsYet","No rooms yet.")}):t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:u.rooms.map(e=>{const a=u.activeRoom?.id===e.id,c=!a&&fe("room",e.id,e.updatedAt);return t.jsxs("div",{role:"button",tabIndex:0,className:`chat-room-item${a?" chat-room-item--active":""}`,"data-testid":`chat-room-item-${e.slug}`,onClick:()=>{Z("room",e.id,e.updatedAt),u.selectRoom(e.id),F&&xe(!1)},onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),Z("room",e.id,e.updatedAt),u.selectRoom(e.id),F&&xe(!1))},children:[t.jsxs("span",{className:"chat-room-item-details",children:[t.jsxs("span",{className:"chat-room-item-name-row",children:[t.jsxs("span",{className:"chat-room-item-name",children:["#",e.name]}),c?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${e.id}`,"aria-label":i("chat.unreadMessages","Unread messages")}):null]}),a?t.jsx("span",{className:"chat-room-item-meta",children:i("chat.roomMemberCount","{{count}} member",{count:u.activeRoomMembers.length,defaultValue_one:"{{count}} member",defaultValue_other:"{{count}} members"})}):null]}),t.jsx("button",{type:"button",className:"btn-icon chat-room-item-delete","data-testid":`chat-room-delete-${e.slug}`,"aria-label":i("chat.deleteRoom","Delete room {{name}}",{name:e.name}),onClick:h=>{h.stopPropagation(),Re(e.id)},children:t.jsx(Cs,{size:14})})]},e.id)})})]}),m==="rooms"?F?t.jsx("div",{className:"chat-sidebar-footer",children:t.jsxs("button",{type:"button",className:"btn btn-sm btn-primary chat-sidebar-footer-btn","data-testid":"chat-create-room-btn",onClick:()=>Me(!0),children:[t.jsx(xt,{size:14}),i("chat.createRoom","Create room")]})}):null:t.jsx("div",{className:"chat-sidebar-footer",children:t.jsxs("button",{className:"btn btn-sm btn-primary chat-sidebar-footer-btn",onClick:()=>f(!0),"data-testid":"chat-new-btn",children:[t.jsx(xt,{size:14}),i("chat.newChat","New Chat")]})})]}),!F&&ae&&!ht&&t.jsx("div",{className:"chat-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":Wt,"aria-valuemax":qt,"aria-valuenow":He,"aria-label":i("chat.resizeSidebar","Resize chat sidebar"),tabIndex:0,onPointerDown:Wn,onKeyDown:qn}),pe&&t.jsxs("div",{className:"chat-session-context-menu",style:{top:pe.y,left:pe.x},onClick:e=>e.stopPropagation(),children:[t.jsxs("button",{onClick:()=>Xs(pe.sessionId),"data-testid":"chat-context-rename",children:[t.jsx(hn,{size:14}),i("chat.rename","Rename")]}),t.jsxs("button",{onClick:()=>Gn(pe.sessionId),"data-testid":"chat-context-archive",children:[t.jsx(Fa,{size:14}),i("chat.archive","Archive")]}),t.jsxs("button",{onClick:()=>{q(null),Se(pe.sessionId)},"data-testid":"chat-context-delete",children:[t.jsx(Cs,{size:14}),i("chat.delete","Delete")]})]}),ze&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>je(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:i("chat.renameConversationTitle","Rename Conversation")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:i("chat.renameConversationBody","Choose a new name for this conversation. Leave it blank to show Untitled.")}),t.jsx("label",{className:"chat-rename-label",htmlFor:"chat-rename-input",children:i("chat.conversationName","Conversation name")}),t.jsx("input",{id:"chat-rename-input",className:"input chat-rename-input",type:"text",value:Ke,placeholder:i("chat.renamePlaceholder","Untitled"),"data-testid":"chat-rename-input",onChange:e=>we(e.target.value),onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),Ys())},autoFocus:!0}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>je(null),children:i("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void Ys(),"data-testid":"chat-rename-save",children:i("chat.save","Save")})]})]})}),ot&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Se(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:i("chat.deleteConversationTitle","Delete Conversation?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:i("chat.deleteConversationBody","This action cannot be undone. All messages in this conversation will be permanently deleted.")}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>Se(null),children:i("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void Vn(ot),children:i("chat.delete","Delete")})]})]})}),y&&Ge&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Re(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:i("chat.deleteRoomTitle","Delete Room?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:i("chat.deleteRoomBody","This action cannot be undone. This room and all its messages will be permanently deleted.")}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>Re(null),children:i("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>{(async()=>{try{await u.deleteRoom(Ge),Re(null)}catch{r(i("chat.failedToDeleteRoom","Failed to delete room"),"error")}})()},children:i("chat.delete","Delete")})]})]})}),y&&m==="rooms"?t.jsxs("div",{ref:es,className:"chat-thread",children:[u.activeRoom?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"chat-room-thread-header",children:[F&&t.jsx("button",{className:"btn-icon",onClick:ds,"data-testid":"chat-back-btn",children:t.jsx(fn,{size:16})}),t.jsxs("div",{className:"chat-room-switcher-menu",ref:Fs,children:[t.jsxs("button",{type:"button",className:"chat-room-switcher-trigger","data-testid":"chat-room-switcher-trigger","aria-haspopup":"menu","aria-expanded":Tt,onClick:()=>dt(e=>!e),children:[t.jsxs("span",{className:"chat-thread-header-title",children:["#",u.activeRoom.name]}),t.jsx(Vt,{size:16,"aria-hidden":"true"})]}),Tt&&t.jsx("div",{role:"menu",className:"chat-room-switcher-dropdown","data-testid":"chat-room-switcher-dropdown",children:u.rooms.map(e=>t.jsxs("button",{type:"button",role:"menuitem",className:`chat-room-switcher-option${e.id===u.activeRoom?.id?" chat-room-switcher-option--active":""}`,"data-testid":`chat-room-switcher-option-${e.id}`,onClick:()=>{Z("room",e.id,e.updatedAt),u.selectRoom(e.id),dt(!1)},children:["#",e.name]},e.id))})]}),t.jsx("div",{className:"chat-room-thread-members",children:u.activeRoomMembers.map(e=>t.jsx(Dn,{agent:ke.get(e.agentId)??{id:e.agentId,name:e.agentId.slice(0,30)}},e.agentId))})]}),t.jsxs("div",{className:"chat-messages",ref:be,onScroll:Us,children:[u.messagesLoading?t.jsx("div",{className:"chat-empty-state",children:i("chat.loadingMessages","Loading messages...")}):u.messages.filter(e=>e.content.trim()!==jn).length===0?t.jsx("div",{className:"chat-empty-state",children:i("chat.noMessagesYet","No messages yet. Start the conversation!")}):u.messages.filter(e=>e.content.trim()!==jn).map(e=>{const a=e.senderAgentId?ke.get(e.senderAgentId)?.name??e.senderAgentId.slice(0,30):i("chat.you","You"),c={id:e.id,sessionId:e.roomId,role:e.role,content:e.content,thinkingOutput:e.thinkingOutput??void 0,toolCalls:void 0,fallbackInfo:void 0,attachments:e.attachments,createdAt:e.createdAt};return t.jsx(Rs,{message:c,forcePlain:E,agentName:a,hideAssistantIdentity:!1,showAssistantModelTag:!1,activeModelTag:null,activeModelProvider:null,activeSessionId:u.activeRoom?.id??null,mentionAgentsByName:rs,roomContext:Fe,onScrollToTop:xs,isAwaitingQuestionAnswer:!1,onQuestionSubmit:Ht},e.id)}),t.jsx("div",{ref:Ds})]}),u.activeRoom&&Ts&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:()=>Ne("fab-click"),children:[t.jsx(Vt,{size:14}),i("chat.latest","Latest")]})]}):t.jsx("div",{className:"chat-room-empty-pane","data-testid":"chat-rooms-empty-pane",children:i("chat.selectRoomOrCreate","Select a room or create one")}),u.activeRoom&&t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:$t,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:e=>{tt(e.target.files),e.target.value=""}}),z.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:z.map((e,a)=>t.jsxs("div",{className:"chat-attachment-preview","data-testid":`chat-attachment-preview-${a}`,children:[e.previewUrl?t.jsx("img",{src:e.previewUrl,alt:e.file.name}):t.jsx("span",{className:"chat-attachment-preview-name",children:e.file.name}),t.jsx("button",{type:"button",className:"chat-attachment-remove",onClick:()=>Os(a),"data-testid":`chat-attachment-remove-${a}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${a}`))}),t.jsxs("div",{className:"chat-input-row",children:[t.jsx("button",{type:"button",className:"btn-icon chat-attach-btn","data-testid":"chat-attach-btn","aria-label":i("chat.attachFiles","Attach files"),onClick:()=>$t.current?.click(),children:t.jsx(gn,{size:16})}),t.jsxs("div",{className:`chat-input-wrapper${Ee?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),Xe(!0)},onDragLeave:()=>Xe(!1),onDrop:e=>{e.preventDefault(),Xe(!1),tt(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:Ks,className:"chat-input-textarea",placeholder:i("chat.typeMessage","Type a message..."),value:G,onChange:Vs,onKeyDown:Gs,onKeyUp:Ws,onClick:Bt,onBlur:qs,onFocus:Qs,onPaste:Bs,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||pn()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(bn,{agents:Ze,filter:w,highlightedIndex:B,visible:$,onSelect:Ut,position:"below",roomMemberIds:Fe?.memberIds,roomName:Fe?.roomName})]}),t.jsx("button",{type:"button",className:"chat-input-send",onPointerDown:e=>{if(e.pointerType&&e.pointerType!=="mouse"){if(e.preventDefault(),!at())return;nt(),pt()}},onTouchStart:e=>{e.preventDefault(),at()&&(nt(),pt())},onMouseDown:e=>{e.preventDefault()},onClick:()=>{os()||pt()},disabled:!G.trim()&&z.length===0,"data-testid":"chat-send-btn",style:{touchAction:"manipulation"},children:t.jsx(vn,{size:16})})]})]})]}):t.jsxs("div",{ref:es,className:"chat-thread",children:[(ms||!F)&&t.jsxs("div",{className:"chat-thread-header",children:[F&&ms&&t.jsx("button",{className:"btn-icon",onClick:ls,"data-testid":"chat-back-btn",children:t.jsx(fn,{size:16})}),t.jsx("div",{className:"chat-thread-header-identity","data-testid":"chat-thread-header-identity",children:Xn?t.jsxs("div",{className:"chat-mobile-session-menu",ref:$s,children:[t.jsxs("button",{type:"button",className:"btn chat-mobile-session-trigger","data-testid":"chat-mobile-session-trigger","aria-haspopup":"menu","aria-expanded":At,onClick:()=>Ve(e=>!e),children:[Be?t.jsx(yt,{provider:Be,size:"md"}):t.jsx(Ct,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:hs}),en&&t.jsx("span",{className:"chat-model-tag",children:Oe}),t.jsx(Vt,{size:16,"aria-hidden":"true"})]}),At&&t.jsx("div",{className:"chat-mobile-session-dropdown",role:"menu","data-testid":"chat-mobile-session-dropdown",children:P.map(e=>t.jsxs("div",{className:`chat-mobile-session-option-row${o?.id===e.id?" chat-mobile-session-option-row--active":""}`,role:"none",children:[t.jsx("button",{type:"button",role:"menuitem",className:`chat-mobile-session-option${o?.id===e.id?" chat-mobile-session-option--active":""}`,"data-testid":`chat-mobile-session-option-${e.id}`,onClick:()=>Js(e.id),children:t.jsx("span",{className:"chat-mobile-session-option-title",children:e.title||i("chat.untitledSession","Untitled")})}),t.jsx("button",{type:"button",className:"btn-icon chat-mobile-session-rename","data-testid":`chat-mobile-session-rename-${e.id}`,"aria-label":i("chat.renameConversationAria","Rename conversation {{title}}",{title:e.title||i("chat.untitledSession","Untitled")}),onClick:()=>Xs(e.id),children:t.jsx(hn,{size:14})})]},e.id))})]}):t.jsxs(t.Fragment,{children:[Be?t.jsx(yt,{provider:Be,size:"md"}):t.jsx(Ct,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:hs}),en&&t.jsx("span",{className:"chat-model-tag",children:Oe})]})}),ms&&t.jsx("button",{type:"button",className:`chat-thread-header-render-toggle${E?" chat-thread-header-render-toggle--plain":""}`,"data-testid":"chat-thread-render-toggle","aria-label":E?i("chat.showRenderedMarkdown","Show all messages as rendered Markdown"):i("chat.showPlainText","Show all messages as plain text"),onClick:Jn,children:E?t.jsx(La,{size:14}):t.jsx(_a,{size:14})}),!F&&t.jsxs("button",{className:"btn btn-sm btn-primary chat-thread-header-new-chat",onClick:()=>f(!0),"data-testid":"chat-thread-new-chat-btn",children:[t.jsx(xt,{size:14}),i("chat.newChat","New Chat")]})]}),ea?t.jsx(er,{cliSessionId:sa,tier:ta,projectId:n,renderTranscript:nn,renderComposer:()=>o?an():null}):t.jsxs(t.Fragment,{children:[nn(),Ts&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:()=>Ne("fab-click"),children:[t.jsx(Vt,{size:14}),i("chat.latest","Latest")]}),o&&an()]})]}),y&&t.jsx(Za,{isOpen:le,onClose:()=>Me(!1),projectId:n,existingRoomNames:u.rooms.map(e=>e.name),onCreate:async e=>{await u.createRoom({name:e.name,memberAgentIds:e.memberAgentIds}),m!=="rooms"&&L("rooms"),Me(!1),F&&xe(!1)}}),ce&&t.jsx(hr,{projectId:n,defaultModel:ct,onClose:()=>f(!1),onCreate:Kn})]})}export{Cr as ChatView,nr as clampChatInputHeight,sr as resolveChatInputOverflowY,En as resolveSessionProvider};
@@ -1 +0,0 @@
1
- .create-room-modal{display:flex;flex-direction:column;gap:var(--space-md)}.create-room-modal-name-group{margin-bottom:0}.create-room-modal-name-field{display:flex;align-items:center;gap:var(--space-sm)}.create-room-modal-name-hash{color:var(--text-muted);font-family:var(--font-mono)}.create-room-modal-name-field .input{flex:1}.create-room-modal-selected{display:flex;flex-wrap:wrap;gap:var(--space-sm);padding:0 var(--space-xl)}.create-room-modal-chip{border-color:var(--border)}.create-room-modal-member-list{display:flex;flex-direction:column;gap:var(--space-xs);max-height:calc(var(--space-2xl) * 8);overflow-y:auto;padding:0 var(--space-xl)}.create-room-modal-member-row{display:flex;width:100%;align-items:center;gap:var(--space-sm);text-align:left;border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-sm);background:var(--surface);color:var(--text);transition:background var(--transition-fast),border-color var(--transition-fast)}.create-room-modal-member-row:hover{background:var(--card-hover)}.create-room-modal-member-row:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.create-room-modal-member-row--selected{border-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.create-room-modal-member-role{margin-left:auto;color:var(--text-muted);font-size:var(--space-md)}.create-room-modal-empty{color:var(--text-muted);padding:var(--space-md);text-align:center}@media(max-width:768px){.create-room-modal{width:100%}.create-room-modal-selected,.create-room-modal-member-list{padding:0 var(--space-md)}.create-room-modal .modal-actions{display:flex;flex-direction:column;gap:var(--space-sm)}.create-room-modal .modal-actions .btn{width:100%}}