@runfusion/fusion 0.52.0 → 0.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +2918 -2185
- package/dist/client/.vite/manifest.json +248 -248
- package/dist/client/assets/AgentDetailView-CHSaiBNh.js +18 -0
- package/dist/client/assets/AgentPermissionPolicyEditor-Bfy55DIO.js +6 -0
- package/dist/client/assets/AgentPermissionPolicyEditor-TpdlOWZW.css +1 -0
- package/dist/client/assets/{AgentsView-DJJO0laF.js → AgentsView-CMB_7xly.js} +3 -3
- package/dist/client/assets/ChatView-IwWaNSeS.js +6 -0
- package/dist/client/assets/{CommandCenter-CKvo0MuO.js → CommandCenter-B84TXfg6.js} +2 -2
- package/dist/client/assets/{DevServerView-BHLG4Mxg.js → DevServerView-B9QEJETp.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-CRY-rpnj.js → DirectoryPicker-BnaH1pb_.js} +1 -1
- package/dist/client/assets/{DocumentsView-DhC4dnXD.js → DocumentsView-Cvm4OBRl.js} +1 -1
- package/dist/client/assets/{EvalsView-DsnLOVZB.js → EvalsView-BpgA1nvW.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-B4iFX60E.js → ExperimentalAgentOnboardingModal-D4Z1IAW2.js} +1 -1
- package/dist/client/assets/{GoalsView-D5bzq6W9.js → GoalsView-ui2CM549.js} +1 -1
- package/dist/client/assets/{InsightsView-Drpu72M4.js → InsightsView-qdJ5GhE_.js} +1 -1
- package/dist/client/assets/{MemoryView-auLBP3UW.js → MemoryView-Csc-90G0.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-RlbkXf_t.js → PiExtensionsManager-Dbm3IpQW.js} +1 -1
- package/dist/client/assets/{PluginManager-BJMUacpG.js → PluginManager-B_zgRoI8.js} +1 -1
- package/dist/client/assets/{PullRequestView-344B9WF-.js → PullRequestView-CB6L4vJw.js} +1 -1
- package/dist/client/assets/{ResearchView-BNqt-f53.js → ResearchView-CRtoNtCn.js} +1 -1
- package/dist/client/assets/{SecretsView-Be8Tm8It.js → SecretsView-JB0lfuzZ.js} +1 -1
- package/dist/client/assets/SessionTerminal-CnxWsHxS.js +2 -0
- package/dist/client/assets/{SettingsModal-B28DuhaN.js → SettingsModal-CS1-kUSO.js} +1 -1
- package/dist/client/assets/SettingsModal-D7ArHi7z.js +21 -0
- package/dist/client/assets/{SetupWizardModal-y2j9aZoi.js → SetupWizardModal-PYaS5VB9.js} +2 -2
- package/dist/client/assets/ShadcnColorPicker-3OgfenMo.css +1 -0
- package/dist/client/assets/ShadcnColorPicker-Tl1Xu-G4.js +11 -0
- package/dist/client/assets/{SkillsView-HQp7UTdA.js → SkillsView-CWVVQ3y_.js} +1 -1
- package/dist/client/assets/{TodoView-DF7_qWGH.js → TodoView-CCloQhKG.js} +1 -1
- package/dist/client/assets/WorkflowNodeEditor-Dz8TU3is.js +8 -0
- package/dist/client/assets/{agentSkills-Cy_HrYHd.js → agentSkills-CFiw3LtX.js} +1 -1
- package/dist/client/assets/app-5S4z84u5.js +13 -0
- package/dist/client/assets/app-B1VYocx2.js +13 -0
- package/dist/client/assets/app-BhtYYxin.js +13 -0
- package/dist/client/assets/app-Cts0__Vx.js +13 -0
- package/dist/client/assets/app-DczBmsP4.js +13 -0
- package/dist/client/assets/app-_GFUqcMK.js +13 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-4ur4sxlr.js → architectureDiagram-3BPJPVTR-DGp4hfr1.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-BgZeqq_q.js → blockDiagram-GPEHLZMM-CRyxRdCJ.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-BQtdOIrm.js → c4Diagram-AAUBKEIU-CFjMzS7o.js} +1 -1
- package/dist/client/assets/channel-C9LQN4ee.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-C1k1PBy1.js → chunk-2J33WTMH-BMvR_yYt.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-hNujwvSn.js → chunk-4BX2VUAB-BUPHOpQy.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-CnXV9LyI.js → chunk-55IACEB6-C1paNu5q.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-B-ocMdYN.js → chunk-727SXJPM-CG4hnjZD.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-CWNRUL6C.js → chunk-AQP2D5EJ-Dm2nZ5Sz.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-DerrCiYe.js → chunk-FMBD7UC4-CY6d36wo.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-BfcSPlX-.js → chunk-ND2GUHAM-cbKdnrGz.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BaWScAds.js → chunk-QZHKN3VN-BPenWytO.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-C5TeEr7c.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C5TeEr7c.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-n0Oeinz2.js → cose-bilkent-S5V4N54A-BCFGTolm.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-CUtehSt2.js → dagre-BM42HDAG-yVhB-t2h.js} +1 -1
- package/dist/client/assets/{dashboard-view-DWKCxtr5.js → dashboard-view-C9dPtr0u.js} +1 -1
- package/dist/client/assets/{dashboard-view-BW3GHqgb.js → dashboard-view-DHb5D1Hc.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-Bz4aOzhR.js → diagram-2AECGRRQ-DtV2x39G.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-UoxIMwPf.js → diagram-5GNKFQAL-DwwRRghJ.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-BYR7hloS.js → diagram-KO2AKTUF-JLrDx8k8.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-BR9MaP8U.js → diagram-LMA3HP47-C_AszN6R.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-BOfldYHv.js → diagram-OG6HWLK6-C-n05SOC.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-B8x9mfOs.js → erDiagram-TEJ5UH35-B-9edACX.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-DBnTroCV.js → flowDiagram-I6XJVG4X-D5ThlzTR.js} +1 -1
- package/dist/client/assets/{folder-open-CFze34Eq.js → folder-open-DLACu19m.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-BfzFy7iz.js → ganttDiagram-6RSMTGT7-DaqvxM8Q.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CNTFu6IY.js → gitGraphDiagram-PVQCEYII-CfWhxq7Y.js} +1 -1
- package/dist/client/assets/index-D1IHwGhg.css +1 -0
- package/dist/client/assets/index-JlBzf2ck.js +1336 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-DJiBRaAl.js → infoDiagram-5YYISTIA-BjDZFy9D.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-CIY9t4cc.js → ishikawaDiagram-YF4QCWOH-BoMTizU1.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-HLMZmcjY.js → journeyDiagram-JHISSGLW-BozwtvCa.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-x9nKoxCI.js → kanban-definition-UN3LZRKU-CvrpmIXn.js} +1 -1
- package/dist/client/assets/{mermaid.core-pHkdB6fb.js → mermaid.core-KeGuTimD.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-Bs_4Tofu.js → mindmap-definition-RKZ34NQL-DMjY04EF.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-BGHz9JGZ.js → pieDiagram-4H26LBE5-r_9L-pQr.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-xHSR7cAR.js → quadrantDiagram-W4KKPZXB-CcZKANsw.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-D7YMNM44.js → requirementDiagram-4Y6WPE33-kqu_zuS5.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-OAXuab3Y.js → sankeyDiagram-5OEKKPKP-BLbamdKk.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-BZCjKFVL.js → sequenceDiagram-3UESZ5HK-DAKxqBlR.js} +1 -1
- package/dist/client/assets/{shield-alert-BBK8Risa.js → shield-alert-BdoEg9Yo.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-COnJQqA4.js → stateDiagram-AJRCARHV-RJ2xY2-p.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-Diml4Nhm.js → stateDiagram-v2-BHNVJYJU-BzhgwjfG.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-DHIKvV9L.js → timeline-definition-PNZ67QCA-CT9ZQc6n.js} +1 -1
- package/dist/client/assets/{upload-CqUJUdZW.js → upload-B4v89B2G.js} +1 -1
- package/dist/client/assets/{users-CAE-FEzI.js → users-vuVXnTg0.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-o9AxLDoL.js → vennDiagram-CIIHVFJN-DCcEEtaE.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-B7MIazje.js → wardley-L42UT6IY-_KOTjC_D.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-B6qUJx0N.js → wardleyDiagram-YWT4CUSO-D16g9VQZ.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-13mSXuCA.js → xychartDiagram-2RQKCTM6-CMIdike8.js} +1 -1
- package/dist/client/index.html +3 -3
- package/dist/client/theme-data.css +156 -0
- package/dist/client/version.json +1 -1
- package/dist/desktop/client/.vite/manifest.json +1650 -0
- package/dist/{client/assets/AgentDetailView-C-PM8cwG.js → desktop/client/assets/AgentDetailView-CVv4BoTE.js} +5 -5
- package/dist/desktop/client/assets/AgentDetailView-CgbB51Iw.css +1 -0
- package/dist/{client/assets/AgentPermissionPolicyEditor-DrVW4VPc.js → desktop/client/assets/AgentPermissionPolicyEditor-CQLNC_-O.js} +1 -1
- package/dist/desktop/client/assets/AgentsView-CzMa5Olf.css +1 -0
- package/dist/desktop/client/assets/AgentsView-DybRxzuI.js +29 -0
- package/dist/desktop/client/assets/ChatView-BtjkE0V7.css +1 -0
- package/dist/desktop/client/assets/ChatView-D_byETJX.js +19 -0
- package/dist/desktop/client/assets/CommandCenter-DDjpYkPe.css +1 -0
- package/dist/desktop/client/assets/CommandCenter-DEXoC2F7.js +71 -0
- package/dist/desktop/client/assets/DevServerView-CnEZI8Ax.js +1 -0
- package/dist/desktop/client/assets/DevServerView-iBondC7z.css +1 -0
- package/dist/desktop/client/assets/DirectoryPicker-0rspvcMz.css +1 -0
- package/dist/desktop/client/assets/DirectoryPicker-BUIZKLgl.js +1 -0
- package/dist/desktop/client/assets/DocumentsView-BFq47DE7.js +1 -0
- package/dist/desktop/client/assets/EvalsView-BEiGrFFa.js +1 -0
- package/dist/desktop/client/assets/EvalsView-CTbgPUne.css +1 -0
- package/dist/desktop/client/assets/ExperimentalAgentOnboardingModal-3ZEFv8sr.css +1 -0
- package/dist/desktop/client/assets/ExperimentalAgentOnboardingModal-WzGxsxku.js +1 -0
- package/dist/desktop/client/assets/GoalsView-C6Qsc-VS.js +2 -0
- package/dist/desktop/client/assets/GoalsView-CUh8JBnJ.css +1 -0
- package/dist/desktop/client/assets/InsightsView-C14VGuty.js +11 -0
- package/dist/desktop/client/assets/InsightsView-C7yRTMPn.css +1 -0
- package/dist/desktop/client/assets/MemoryView--XlaBNzQ.js +2 -0
- package/dist/desktop/client/assets/MemoryView-CBDUr2Jy.css +1 -0
- package/dist/desktop/client/assets/PiExtensionsManager-BaQnu6IY.js +11 -0
- package/dist/desktop/client/assets/PiExtensionsManager-kgTOHPE9.css +1 -0
- package/dist/desktop/client/assets/PluginManager-DSiHizRD.css +1 -0
- package/dist/desktop/client/assets/PluginManager-DqnMI_Zm.js +1 -0
- package/dist/desktop/client/assets/PullRequestView-C8kBQljB.js +6 -0
- package/dist/desktop/client/assets/PullRequestView-CpdE3Yo_.css +1 -0
- package/dist/desktop/client/assets/ResearchView-DIVNQF4_.css +1 -0
- package/dist/desktop/client/assets/ResearchView-OlGNDmqI.js +1 -0
- package/dist/desktop/client/assets/SecretsView-CvFioX7R.css +1 -0
- package/dist/desktop/client/assets/SecretsView-vHezddkt.js +1 -0
- package/dist/desktop/client/assets/SessionTerminal-CPbzm5Oi.css +1 -0
- package/dist/desktop/client/assets/SessionTerminal-ClbvT_Fb.js +2 -0
- package/dist/desktop/client/assets/SettingsModal-CL4GS1q-.js +21 -0
- package/dist/desktop/client/assets/SettingsModal-CvbiSIHS.css +1 -0
- package/dist/desktop/client/assets/SettingsModal-EWTm15Fk.js +1 -0
- package/dist/desktop/client/assets/SettingsModal-ino68pI2.css +1 -0
- package/dist/desktop/client/assets/SetupWizardModal-DsBTXY7k.js +2 -0
- package/dist/desktop/client/assets/ShadcnColorPicker-BciIe8Ls.js +11 -0
- package/dist/desktop/client/assets/ShadcnColorPicker-pqVWCC5-.css +1 -0
- package/dist/desktop/client/assets/SkillsView-CJ8snrma.css +1 -0
- package/dist/desktop/client/assets/SkillsView-UyhBA4_r.js +1 -0
- package/dist/desktop/client/assets/TodoView-CIsL_uvQ.css +1 -0
- package/dist/desktop/client/assets/TodoView-CV7ma8AL.js +6 -0
- package/dist/desktop/client/assets/WorkflowNodeEditor-BOouksjw.css +1 -0
- package/dist/desktop/client/assets/WorkflowNodeEditor-ThUL4msx.js +8 -0
- package/dist/desktop/client/assets/addon-fit-C1WQXRvu.js +1 -0
- package/dist/desktop/client/assets/addon-unicode11-BVmNDUBM.js +1 -0
- package/dist/desktop/client/assets/addon-web-links-CkVew5xs.js +1 -0
- package/dist/desktop/client/assets/addon-webgl-uLc0RKcC.js +58 -0
- package/dist/desktop/client/assets/agentSkills-BQzMaofj.js +1 -0
- package/dist/desktop/client/assets/agentSkills-bQJ4X1gH.css +1 -0
- package/dist/desktop/client/assets/agentsOrgChartLayout-BMvyuaLA.js +1 -0
- package/dist/desktop/client/assets/app-BJGkp7Tt.js +13 -0
- package/dist/desktop/client/assets/app-BKLUvvm8.js +13 -0
- package/dist/desktop/client/assets/app-BaoNC9zg.js +13 -0
- package/dist/desktop/client/assets/app-CZQ_fFNf.js +13 -0
- package/dist/{client/assets/app-nvVayIeU.js → desktop/client/assets/app-DAu3AzsS.js} +3 -3
- package/dist/desktop/client/assets/app-DgezOJub.js +13 -0
- package/dist/desktop/client/assets/arc-cxkkNsnK.js +1 -0
- package/dist/desktop/client/assets/architectureDiagram-3BPJPVTR-MtAzQYUn.js +36 -0
- package/dist/desktop/client/assets/band-CquvqAHh.js +1 -0
- package/dist/desktop/client/assets/blockDiagram-GPEHLZMM-zelYfqn3.js +132 -0
- package/dist/desktop/client/assets/c4Diagram-AAUBKEIU-D3hNx0Hv.js +10 -0
- package/dist/desktop/client/assets/channel-Dj1-27Yg.js +1 -0
- package/dist/desktop/client/assets/chunk-2J33WTMH-B9IKEZ0p.js +1 -0
- package/dist/desktop/client/assets/chunk-4BX2VUAB-Dd7FeAwm.js +1 -0
- package/dist/desktop/client/assets/chunk-55IACEB6-DbzB46sJ.js +1 -0
- package/dist/desktop/client/assets/chunk-727SXJPM-CDmlBZKV.js +206 -0
- package/dist/desktop/client/assets/chunk-AQP2D5EJ-whMl1uk-.js +231 -0
- package/dist/desktop/client/assets/chunk-FMBD7UC4-E1WzORFR.js +15 -0
- package/dist/desktop/client/assets/chunk-ND2GUHAM-e0FuVXk6.js +1 -0
- package/dist/desktop/client/assets/chunk-QZHKN3VN-B6q2GrbB.js +1 -0
- package/dist/desktop/client/assets/classDiagram-4FO5ZUOK-36LCOV5F.js +1 -0
- package/dist/desktop/client/assets/classDiagram-v2-Q7XG4LA2-36LCOV5F.js +1 -0
- package/dist/desktop/client/assets/common-BDp2y6CF.js +1 -0
- package/dist/desktop/client/assets/common-BnEo5fLN.js +1 -0
- package/dist/desktop/client/assets/common-Bzr_Y8h4.js +1 -0
- package/dist/desktop/client/assets/common-CvwyFzfv.js +1 -0
- package/dist/desktop/client/assets/common-CztCXRkz.js +1 -0
- package/dist/desktop/client/assets/common-DPe2mbb7.js +1 -0
- package/dist/desktop/client/assets/cose-bilkent-S5V4N54A-BjSZ5UKD.js +1 -0
- package/dist/desktop/client/assets/cytoscape.esm-OyMbaexL.js +331 -0
- package/dist/desktop/client/assets/dagre-BM42HDAG-DxMH6moD.js +4 -0
- package/dist/desktop/client/assets/dashboard-view-BW8tRppT.js +1 -0
- package/dist/desktop/client/assets/dashboard-view-CuUPQZzi.css +1 -0
- package/dist/desktop/client/assets/dashboard-view-D_zsA-kz.css +1 -0
- package/dist/desktop/client/assets/dashboard-view-L_H47lEp.js +8161 -0
- package/dist/desktop/client/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/desktop/client/assets/diagram-2AECGRRQ-DDUjym9F.js +43 -0
- package/dist/desktop/client/assets/diagram-5GNKFQAL-nEqF7CSb.js +10 -0
- package/dist/desktop/client/assets/diagram-KO2AKTUF-CFABtl0k.js +3 -0
- package/dist/desktop/client/assets/diagram-LMA3HP47-ButXw1gy.js +24 -0
- package/dist/desktop/client/assets/diagram-OG6HWLK6-CA17ZRZI.js +24 -0
- package/dist/desktop/client/assets/erDiagram-TEJ5UH35-DmROZaa0.js +85 -0
- package/dist/desktop/client/assets/errors-07IrmOYM.js +1 -0
- package/dist/desktop/client/assets/errors-BPsCufin.js +1 -0
- package/dist/desktop/client/assets/errors-CcVDgqlA.js +1 -0
- package/dist/desktop/client/assets/errors-D-i_Bxc6.js +1 -0
- package/dist/desktop/client/assets/errors-DDdWAK-U.js +1 -0
- package/dist/desktop/client/assets/errors-DOF5Td3F.js +1 -0
- package/dist/desktop/client/assets/flowDiagram-I6XJVG4X-BCa7HuJ3.js +162 -0
- package/dist/desktop/client/assets/folder-open-G_6UGFyI.js +6 -0
- package/dist/desktop/client/assets/ganttDiagram-6RSMTGT7-BeAYpPxh.js +292 -0
- package/dist/desktop/client/assets/gitGraphDiagram-PVQCEYII-BLwp2lCj.js +106 -0
- package/dist/desktop/client/assets/graph--OzhPTMs.js +1 -0
- package/dist/desktop/client/assets/index-CSVe-MIA.css +1 -0
- package/dist/desktop/client/assets/index-DIURDjTF.js +1301 -0
- package/dist/desktop/client/assets/infoDiagram-5YYISTIA-DF-q3NMx.js +2 -0
- package/dist/desktop/client/assets/init-Dmth1JHB.js +1 -0
- package/dist/desktop/client/assets/ishikawaDiagram-YF4QCWOH-CKYDbUiH.js +70 -0
- package/dist/desktop/client/assets/journeyDiagram-JHISSGLW-BgkdCr6Q.js +139 -0
- package/dist/desktop/client/assets/kanban-definition-UN3LZRKU-B9V97j0D.js +89 -0
- package/dist/desktop/client/assets/katex-HP8lGamR.js +257 -0
- package/dist/desktop/client/assets/layout-SsrduOYp.js +1 -0
- package/dist/desktop/client/assets/linear-dXivciGL.js +1 -0
- package/dist/desktop/client/assets/mermaid.core-BBN7poU5.js +309 -0
- package/dist/desktop/client/assets/mindmap-definition-RKZ34NQL-C2_Jhjnr.js +96 -0
- package/dist/desktop/client/assets/ordinal-DILIJJjt.js +1 -0
- package/dist/desktop/client/assets/pieDiagram-4H26LBE5-DOrO8u2b.js +30 -0
- package/dist/desktop/client/assets/projectDetection-G3XuxD2X.js +1 -0
- package/dist/desktop/client/assets/quadrantDiagram-W4KKPZXB-D4xxkMPR.js +7 -0
- package/dist/desktop/client/assets/requirementDiagram-4Y6WPE33-BuyUaAlW.js +84 -0
- package/dist/desktop/client/assets/sankeyDiagram-5OEKKPKP-DLGaZ5Gy.js +40 -0
- package/dist/desktop/client/assets/sequenceDiagram-3UESZ5HK-B3xhIZnf.js +162 -0
- package/dist/desktop/client/assets/shield-alert-D-Fxd0Va.js +6 -0
- package/dist/desktop/client/assets/stateDiagram-AJRCARHV-3C2cVTwx.js +1 -0
- package/dist/desktop/client/assets/stateDiagram-v2-BHNVJYJU-uyCHbCJn.js +1 -0
- package/dist/desktop/client/assets/step-yuy0qJer.js +1 -0
- package/dist/desktop/client/assets/time-DoDTxsna.js +1 -0
- package/dist/desktop/client/assets/timeline-definition-PNZ67QCA-DHzoutyf.js +120 -0
- package/dist/desktop/client/assets/upload-Cv9kGgTr.js +6 -0
- package/dist/desktop/client/assets/users-DuxdQK9U.js +6 -0
- package/dist/desktop/client/assets/vendor-codemirror-jBKmHyH0.js +27 -0
- package/dist/desktop/client/assets/vendor-i18n-GF3RlKbq.js +9 -0
- package/dist/desktop/client/assets/vendor-react-SZ_qB27O.js +49 -0
- package/dist/desktop/client/assets/vendor-reactflow-Bg-Qjzh8.js +15 -0
- package/dist/desktop/client/assets/vendor-reactflow-C5ap-Sga.css +1 -0
- package/dist/desktop/client/assets/vendor-xterm-BNq00GSj.js +9 -0
- package/dist/desktop/client/assets/vendor-xterm-LZoznX6r.css +32 -0
- package/dist/desktop/client/assets/vennDiagram-CIIHVFJN-CKB5IBNU.js +34 -0
- package/dist/desktop/client/assets/wardley-L42UT6IY-DUw_nnW7.js +173 -0
- package/dist/desktop/client/assets/wardleyDiagram-YWT4CUSO-CgWLugtp.js +78 -0
- package/dist/desktop/client/assets/xychartDiagram-2RQKCTM6-BWpeCtlX.js +7 -0
- package/dist/desktop/client/assets/zoom-out-NWbVkreR.js +41 -0
- package/dist/desktop/client/brands/hermes-logo.svg +1 -0
- package/dist/desktop/client/fonts/SymbolsNerdFontMono-Regular.ttf +0 -0
- package/dist/desktop/client/icons/icon-192.png +0 -0
- package/dist/desktop/client/icons/icon-512.png +0 -0
- package/dist/desktop/client/index.html +244 -0
- package/dist/desktop/client/logo.svg +6 -0
- package/dist/desktop/client/manifest.json +23 -0
- package/dist/desktop/client/sw.js +175 -0
- package/dist/desktop/client/theme-data.css +6858 -0
- package/dist/desktop/client/version.json +1 -0
- package/dist/desktop/main.js +17159 -0
- package/dist/desktop/main.js.map +7 -0
- package/dist/desktop/preload.js +110 -0
- package/dist/desktop/preload.js.map +7 -0
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +1569 -1295
- package/dist/pi-claude-cli/index.ts +40 -8
- package/dist/pi-claude-cli/package.json +5 -3
- package/dist/pi-claude-cli/src/__tests__/process-manager.test.ts +2 -2
- package/dist/pi-claude-cli/src/__tests__/provider.test.ts +39 -23
- package/dist/plugin-sdk/index.d.ts +9 -2
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +15 -3
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +4 -3
- package/dist/client/assets/ChatView-C7uTm5hO.js +0 -16
- package/dist/client/assets/SessionTerminal-CumHUelZ.js +0 -2
- package/dist/client/assets/SettingsModal-AJfer-ve.js +0 -21
- package/dist/client/assets/ShadcnColorPicker-Cc72uPKJ.js +0 -11
- package/dist/client/assets/ShadcnColorPicker-CyeAnJUU.css +0 -1
- package/dist/client/assets/WorkflowNodeEditor-BjpqTIYE.js +0 -8
- package/dist/client/assets/app-CGubyqAW.js +0 -13
- package/dist/client/assets/app-CrQpHbIs.js +0 -13
- package/dist/client/assets/app-DboK-0Ty.js +0 -13
- package/dist/client/assets/app-DjnYET2y.js +0 -13
- package/dist/client/assets/app-MacS555z.js +0 -13
- package/dist/client/assets/channel-Dn5XowfJ.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-zSOW-KNk.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-zSOW-KNk.js +0 -1
- package/dist/client/assets/index-QnHUwSjw.css +0 -1
- package/dist/client/assets/index-Y-vyXPPN.js +0 -1331
- /package/dist/{client → desktop/client}/assets/AgentPermissionPolicyEditor-CGxjOr6G.css +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-
|
|
2
|
-
import{c as Ut,bN as at,dm as Za,h as jt,Z as qa,ai as Ja,cA as It,cs as Ca,aJ as Ft,aG as Qa,o as es,C as wa,bu as zt,b$ as Sa,dn as St,dp as ts,dq as as,cM as ss,bL as ns,bo as Dt,dr as ls,m as is,a as rs,A as os,f as Nt,ds as ia,cy as cs,al as ra,bP as ds,b as us,e as gs,dt as oa,du as ms,aK as hs,L as At,b8 as rt,R as tt,X as ca,dv as ps,dw as xs,dx as ct,ae as bs,dy as Rt,aR as vs,aV as fs,bp as me,ck as ot,dz as js,dh as Ns,dA as ys,dB as da,V as ks,dC as Cs,P as ua,dD as ws,cm as Tt,cl as bt,J as ga,dE as Ss,cU as As,dF as Rs,dG as Ts,cu as ma,_ as Es,ct as Ps,cw as _s,cO as vt,dH as Ms,cB as ha,cv as Ls}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-CHSaiBNh.js","assets/vendor-react-SZ_qB27O.js","assets/index-JlBzf2ck.js","assets/vendor-i18n-GF3RlKbq.js","assets/vendor-reactflow-CnI7NMXG.js","assets/vendor-reactflow-C5ap-Sga.css","assets/vendor-xterm-BNq00GSj.js","assets/vendor-xterm-LZoznX6r.css","assets/vendor-codemirror-jBKmHyH0.js","assets/index-D1IHwGhg.css","assets/agentSkills-CFiw3LtX.js","assets/agentSkills-bQJ4X1gH.css","assets/ExperimentalAgentOnboardingModal-D4Z1IAW2.js","assets/ExperimentalAgentOnboardingModal-3ZEFv8sr.css","assets/AgentPermissionPolicyEditor-Bfy55DIO.js","assets/AgentPermissionPolicyEditor-TpdlOWZW.css","assets/AgentDetailView-BzSyldiW.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{c as Ut,bN as at,dm as Za,h as jt,Z as qa,ai as Ja,cA as It,cs as Ca,aJ as Ft,aG as Qa,o as es,C as wa,bu as zt,b$ as Sa,dn as St,dp as ts,dq as as,cM as ss,bL as ns,bo as Dt,dr as ls,m as is,a as rs,A as os,f as Nt,ds as ia,cy as cs,al as ra,bP as ds,b as us,e as gs,dt as oa,du as ms,aK as hs,L as At,b8 as rt,R as tt,X as ca,dv as ps,dw as xs,dx as ct,ae as bs,dy as Rt,aR as vs,aV as fs,bp as me,ck as ot,dz as js,dh as Ns,dA as ys,dB as da,V as ks,dC as Cs,P as ua,dD as ws,cm as Tt,cl as bt,J as ga,dE as Ss,cU as As,dF as Rs,dG as Ts,cu as ma,_ as Es,ct as Ps,cw as _s,cO as vt,dH as Ms,cB as ha,cv as Ls}from"./index-JlBzf2ck.js";import{r as s,j as e,b as Is}from"./vendor-react-SZ_qB27O.js";import{u as Ee}from"./vendor-i18n-GF3RlKbq.js";import{S as Fs,f as zs}from"./agentSkills-CFiw3LtX.js";import{ExperimentalAgentOnboardingModal as Ds}from"./ExperimentalAgentOnboardingModal-D4Z1IAW2.js";import{U as Ht}from"./upload-B4v89B2G.js";import{F as Hs}from"./folder-open-DLACu19m.js";import{i as pa,O as Et,r as $s}from"./agentsOrgChartLayout-BMvyuaLA.js";import"./vendor-reactflow-CnI7NMXG.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";/**
|
|
3
3
|
* @license lucide-react v1.7.0 - ISC
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under the ISC license.
|
|
@@ -21,4 +21,4 @@ reportsTo: null
|
|
|
21
21
|
skills:
|
|
22
22
|
- review
|
|
23
23
|
---
|
|
24
|
-
Agent instructions go here...`),value:b,onChange:o=>{h("paste"),w([]),S(o.target.value),$(null)},rows:8,"aria-label":r("agents.manifestContent","Manifest content")})]}),e.jsx("p",{className:"agent-import-file-hint",children:r("agents.currentInput","Current input: {{method}}",{method:n})}),pe&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(rt,{size:14}),pe]})]}),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:r("agents.company","Company")}),e.jsx("span",{className:"agent-import-company-name",children:I})]}),y.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:y.map((o,j)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(rt,{size:12}),e.jsx("span",{children:o})]},j))}),e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Ft,{size:14}),e.jsx("span",{children:r("agents.agentsFound","{{count}} agent{{plural}} found",{count:H.length,plural:H.length!==1?"s":""})})]}),H.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>ie(H.map(o=>o.name)),children:r("agents.selectAllAgents","Select all agents")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>ie([]),children:r("agents.clearAgents","Clear agents")})]}),H.length>0?e.jsx("div",{className:"agent-import-agent-list",children:H.map((o,j)=>e.jsxs("div",{className:"agent-import-agent-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":r("agents.selectAgent","Select agent {{name}}",{name:o.name}),checked:q.includes(o.name),onChange:()=>ve(o.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:o.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:o.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[o.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[o.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:o.role}),o.reportsTo&&e.jsx("span",{className:"agent-import-agent-reports",children:r("agents.importReportsTo"," · reports to {{agent}}",{agent:o.reportsTo})}),o.skills&&o.skills.length>0&&e.jsx("span",{className:"agent-import-agent-model",children:r("agents.importSkills"," · skills: {{skills}}",{skills:o.skills.join(", ")})})]}),o.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[o.instructionsText.slice(0,100),o.instructionsText.length>100?"...":""]})]})]},j))}):e.jsx("p",{className:"agent-import-empty",children:r("agents.noAgentsFound","No agents found in the manifest.")}),E.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Ft,{size:14}),e.jsx("span",{children:r("agents.skillsFound","{{count}} skill{{plural}} found",{count:E.length,plural:E.length!==1?"s":""})})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L(E.map(o=>o.name)),children:r("agents.selectAllSkills","Select all skills")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L([]),children:r("agents.clearSkills","Clear skills")})]}),e.jsx("div",{className:"agent-import-skill-list",children:E.map((o,j)=>e.jsxs("div",{className:"agent-import-skill-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":r("agents.selectSkill","Select skill {{name}}",{name:o.name}),checked:J.includes(o.name),onChange:()=>Re(o.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:o.name}),o.description&&e.jsx("span",{className:"agent-import-skill-description",children:o.description})]})]},`${o.name}-${j}`))})]}),se&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(rt,{size:14}),se]})]}),v==="result"&&C&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(jt,{size:32})}),e.jsx("h3",{className:"agent-import-result-title",children:r("agents.importComplete","Import Complete")}),e.jsxs("p",{className:"agent-import-result-company",children:[r("agents.from","From")," ",e.jsx("strong",{children:C.companyName??"Unknown"})]}),e.jsxs("div",{className:"agent-import-result-stats",children:[C.created.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:r("agents.resultCreated","{{count}} created",{count:C.created.length})})}),C.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:r("agents.resultSkipped","{{count}} skipped (already exist)",{count:C.skipped.length})})}),C.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:r("agents.resultErrors","{{count}} error{{plural}}",{count:C.errors.length,plural:C.errors.length!==1?"s":""})})})]}),C.created.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:C.created.map((o,j)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(jt,{size:12}),e.jsx("span",{children:o.name})]},j))}),C.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:C.errors.map((o,j)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(ca,{size:12}),e.jsxs("span",{children:[o.name,": ",o.error]})]},j))}),C.warnings&&C.warnings.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:C.warnings.map((o,j)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(rt,{size:12}),e.jsx("span",{children:o})]},j))}),C.skills&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-result-divider"}),e.jsx("h4",{className:"agent-import-result-section-title",children:r("agents.skills","Skills")}),e.jsxs("div",{className:"agent-import-result-stats",children:[C.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:r("agents.skillsImported","{{count}} skill{{plural}} imported",{count:C.skills.imported.length,plural:C.skills.imported.length!==1?"s":""})})}),C.skills.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:r("agents.skillsSkipped","{{count}} skill{{plural}} skipped (already exist)",{count:C.skills.skipped.length,plural:C.skills.skipped.length!==1?"s":""})})}),C.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:r("agents.skillsErrors","{{count}} skill{{plural}} error{{pluralError}}",{count:C.skills.errors.length,plural:C.skills.errors.length!==1?"s":"",pluralError:C.skills.errors.length!==1?"s":""})})}),C.skills.imported.length===0&&C.skills.skipped.length===0&&C.skills.errors.length===0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:r("agents.noSkillsInPackage","No skills in package")})})]}),C.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:C.skills.imported.map((o,j)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(jt,{size:12}),e.jsx("span",{children:o.name})]},j))}),C.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:C.skills.errors.map((o,j)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(ca,{size:12}),e.jsxs("span",{children:[o.name,": ",o.error]})]},j))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[v==="preview"&&e.jsx("button",{className:"btn",onClick:()=>g("input"),disabled:ce,children:r("agents.back","Back")}),e.jsx("button",{className:"btn",onClick:Le,disabled:ce,children:v==="result"?r("agents.close","Close"):r("agents.cancel","Cancel")}),v==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void $e(),disabled:he||(n==="directory"?A.length===0:n==="browse"?!K:!b.trim()),children:he?e.jsxs(e.Fragment,{children:[e.jsx(At,{size:14,className:"spin"}),r("agents.parsing","Parsing...")]}):r("agents.preview","Preview")}),v==="preview"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void ne(),disabled:ce||ee===0&&M===0,children:ce?e.jsxs(e.Fragment,{children:[e.jsx(At,{size:14,className:"spin"}),Xe]}):r("agents.importButton","Import {{label}}",{label:Ae})})]})]})}):null}const Na=s.lazy(()=>Es(()=>import("./AgentDetailView-C-PM8cwG.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])).then(l=>({default:l.AgentDetailView})));function nn(l){return[{value:"triage",label:l("agents.roleTriage","Triage"),icon:"⊕"},{value:"executor",label:l("agents.roleExecutor","Executor"),icon:"▶"},{value:"reviewer",label:l("agents.roleReviewer","Reviewer"),icon:"⊙"},{value:"merger",label:l("agents.roleMerger","Merger"),icon:"⊞"},{value:"scheduler",label:l("agents.roleScheduler","Scheduler"),icon:"◷"},{value:"engineer",label:l("agents.roleEngineer","Engineer"),icon:"⎔"},{value:"custom",label:l("agents.roleCustom","Custom"),icon:"✦"}]}const Lt=[.1,.25,.5,1,2,3,5,10],ln=.25,rn=3,ft=16,et=32,ya=320,Aa=260,Ra=520,Ta="kb-dashboard-agents-sidebar-width";function $t(l){return Math.max(Aa,Math.min(Ra,l))}function ka(l){if(typeof window>"u")return ya;const d=ct(Ta,l),N=d?Number(d):NaN;return Number.isFinite(N)?$t(N):ya}function Ot(l){switch(l){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 Vt(l,d){switch(d){case"running":return`${l}--running`;case"active":return`${l}--active`;case"paused":return`${l}--paused`;case"error":return`${l}--error`;case"idle":default:return`${l}--idle`}}function on(l){const d=l.runtimeConfig??{},N=typeof d.runtimeHint=="string"?d.runtimeHint:"";if(N)return{label:N,isRuntime:!0};const p=typeof d.modelProvider=="string"?d.modelProvider:"",a=typeof d.modelId=="string"?d.modelId:"";if(p&&a)return{label:`${p}/${a}`,isRuntime:!1};const r=typeof d.model=="string"?d.model:"";if(r.includes("/")){const v=r.indexOf("/");return{label:r.slice(v+1),isRuntime:!1}}return{label:null,isRuntime:!1}}function Ea(l){return l.children.length===0?1:l.children.reduce((d,N)=>d+Ea(N),0)}function Bt(l,d,N){return l.state==="error"?{title:void 0,label:N("agents.healthError","Error")}:{title:d.reason??d.label,label:d.stateDerived?null:d.label}}function Pa({node:l,onSelect:d,getHealthStatus:N,selectedAgentId:p,registerNodeElement:a,linksRef:r}){const{t:v}=Ee("app"),{agent:g,children:n}=l,h=N(g),b=Bt(g,h,v),S=Ot(g.state),A=Vt("org-chart-node-card",g.state),w=Ea(l),I={"--org-chart-subtree-leaves":String(w)};return e.jsxs("div",{className:`org-chart-node${n.length>0?" org-chart-node--has-children":""}`,style:I,children:[e.jsxs("div",{ref:R=>a(g.id,R),"data-agent-id":g.id,className:`org-chart-node-card ${A}${p===g.id?" agent-card--selected":""}`,onClick:()=>d(g.id),role:"button",tabIndex:0,onKeyDown:R=>{(R.key==="Enter"||R.key===" ")&&(R.key===" "&&R.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(Nt,{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 ${S}`,children:g.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:h.color},title:b.title,children:[h.icon,b.label&&e.jsx("span",{className:"text-secondary",children:b.label})]})]})]}),n.length>0&&e.jsx("div",{className:"org-chart-children",role:"group","aria-label":v("agents.orgChartEmployees","{{name}} employees",{name:g.name}),children:n.map(R=>(r.current.push({parentId:g.id,childId:R.agent.id}),e.jsx(Pa,{node:R,onSelect:d,getHealthStatus:N,selectedAgentId:p,registerNodeElement:a,linksRef:r},R.agent.id)))})]})}function cn({links:l,nodeElements:d,canvasRef:N,viewportRef:p,layoutMode:a,transform:r}){const[v,g]=s.useState([]);return s.useLayoutEffect(()=>{const n=N.current,h=p.current;if(!n||!h||l.length===0){g([]);return}const b=()=>{const A=n.getBoundingClientRect(),w=l.flatMap(({parentId:I,childId:R})=>{const H=d.get(I),_=d.get(R);if(!H||!_)return[];const E=H.getBoundingClientRect(),D=_.getBoundingClientRect(),y=(E.left-A.left)/r.scale,U=(E.top-A.top)/r.scale,q=(D.left-A.left)/r.scale,ie=(D.top-A.top)/r.scale;if(a==="vertical"){const re=y,pe=U+E.height/r.scale/2,$=q,C=ie+D.height/r.scale/2,xe=re-(re-$)/2;return[`M ${re} ${pe} L ${xe} ${pe} L ${xe} ${C} L ${$} ${C}`]}const J=y+E.width/r.scale/2,L=U+E.height/r.scale,he=q+D.width/r.scale/2,ae=ie,ce=L+(ae-L)/2;return[`M ${J} ${L} L ${J} ${ce} L ${he} ${ce} L ${he} ${ae}`]});g(w)};b();const S=new ResizeObserver(b);return S.observe(n),S.observe(h),d.forEach(A=>S.observe(A)),()=>S.disconnect()},[N,a,l,d,r.scale,p]),e.jsx("svg",{className:"agent-org-chart-connectors","aria-hidden":"true",children:v.map((n,h)=>e.jsx("path",{d:n},`${h}-${n}`))})}function Nn({addToast:l,projectId:d,onOpenTaskLogs:N,agentOnboardingEnabled:p=!1}){const{t:a}=Ee("app"),r=nn(a),[v,g]=s.useState(!1),h=ps()==="mobile",[b,S]=s.useState(()=>ka(d)),[A,w]=s.useState("all"),{agents:I,stats:R,isLoading:H,loadAgents:_,refreshAgents:E}=xs(d,{filterState:A,showSystemAgents:v}),[D,y]=s.useState(!1),[U,q]=s.useState(null),[ie,J]=s.useState(!1),[L,he]=s.useState(null),[ae,ce]=s.useState(null),re=h&&!!L,[pe,$]=s.useState("dashboard"),[C,xe]=s.useState(null),[se,de]=s.useState(!1),[W,ke]=s.useState(()=>{if(typeof window>"u")return"list";const t=ct("fn-agent-view",d);return t==="list"||t==="board"||t==="org"?t:"list"}),[oe,fe]=s.useState(()=>{if(typeof window>"u")return"auto";const t=ct(Et,d);return pa(t)?t:"auto"}),[Q,Pe]=s.useState([]),[K,ue]=s.useState(!1),[Ce,be]=s.useState(0),[je,V]=s.useState(!1),[_e,Ge]=s.useState(!1),[Me,Le]=s.useState(!1),[we,Ke]=s.useState(!1),[Ie,$e]=s.useState(0),[ne,ee]=s.useState(0),[M,O]=s.useState({scale:1,x:0,y:0}),[Se,Ae]=s.useState(!1),Xe=s.useRef(null),ve=s.useRef(null),Re=s.useRef(null),o=s.useRef(new Map),j=s.useRef([]),P=s.useRef(new Map),F=s.useRef(null),X=s.useRef(null),Y=s.useRef(!1),{confirm:Ye}=bs(),Fe=s.useRef(null),dt=s.useId();s.useEffect(()=>{S(ka(d))},[d]),s.useEffect(()=>{const t=ct("fn-agent-view",d);if(t==="list"||t==="board"||t==="org"){ke(t);return}ke("list")},[d]),s.useEffect(()=>{Rt("fn-agent-view",W,d)},[W,d]),s.useEffect(()=>{const t=ct(Et,d);fe(pa(t)?t:"auto")},[d]),s.useEffect(()=>{Rt(Et,oe,d)},[oe,d]);const ze=s.useCallback(t=>{try{Rt(Ta,String(t),d)}catch{}},[d]),Ze=s.useCallback(t=>{if(h)return;t.preventDefault(),t.stopPropagation();const i=t.currentTarget;typeof i.setPointerCapture=="function"&&i.setPointerCapture(t.pointerId);const u=t.clientX,m=b;let k=m;document.body.style.userSelect="none";const T=G=>{const le=G.clientX-u,x=$t(m+le);k=x,S(x)},Z=G=>{typeof i.releasePointerCapture=="function"&&i.releasePointerCapture(G.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",T),document.removeEventListener("pointerup",Z),ze(k)};document.addEventListener("pointermove",T),document.addEventListener("pointerup",Z)},[h,ze,b]),yt=s.useCallback(t=>{if(h||t.key!=="ArrowLeft"&&t.key!=="ArrowRight")return;t.preventDefault();const i=t.shiftKey?50:10,u=t.key==="ArrowLeft"?-i:i,m=$t(b+u);S(m),ze(m)},[h,ze,b]),[ut,Ne]=s.useState(null),st=s.useRef(null),[gt,Te]=s.useState(null),[c,f]=s.useState(null),[ye,De]=s.useState({}),[Oe,Wt]=s.useState(1),[Gt,Kt]=s.useState(!1),[Ve,Xt]=s.useState(new Set),[kt,qe]=s.useState(new Map),mt=s.useRef(!0);s.useEffect(()=>(mt.current=!0,()=>{mt.current=!1}),[]),s.useEffect(()=>{vs(d).then(t=>{mt.current&&Wt(t.heartbeatMultiplier??1)}).catch(()=>{})},[d]);const Yt=s.useCallback(async t=>{const i=Number.isFinite(t)&&t>0?t:1;Wt(i),Kt(!0);try{await fs({heartbeatMultiplier:i},d),l(a("agents.heartbeatSpeedSet","Heartbeat speed set to ×{{value}}",{value:i.toFixed(1)}),"success")}catch(u){l(a("agents.heartbeatSpeedSaveFailed","Failed to save heartbeat multiplier: {{error}}",{error:me(u)}),"error")}finally{mt.current&&Kt(!1)}},[d,l]),ht=s.useMemo(()=>kt.size===0?I:I.map(t=>{const i=kt.get(t.id);return i?{...t,state:i}:t}),[I,kt]),nt=s.useMemo(()=>ht.filter(t=>v||!ot(t)),[ht,v]),_a=s.useMemo(()=>ht.filter(t=>t.state!=="active"&&t.state!=="running"?!1:v||!ot(t)),[ht,v]),Be=s.useMemo(()=>{if(v)return Q;const t=i=>ot(i.agent)?null:{...i,children:i.children.map(t).filter(u=>u!==null)};return Q.map(t).filter(i=>i!==null)},[Q,v]);s.useEffect(()=>{if(W!=="org")return;const t=ve.current;if(!t)return;const i=()=>{be(t.clientWidth)};i();const u=typeof ResizeObserver<"u"?new ResizeObserver(i):null;return u?.observe(t),window.addEventListener("resize",i),()=>{u?.disconnect(),window.removeEventListener("resize",i)}},[W,Be.length]),s.useEffect(()=>{if(W!=="org")return;let t=!1;return ue(!0),js(d,{includeEphemeral:v}).then(i=>{t||Pe(i)}).catch(i=>{t||(l(a("agents.orgChartLoadFailed","Failed to load org chart: {{error}}",{error:me(i)}),"error"),Pe([]))}).finally(()=>{t||ue(!1)}),()=>{t=!0}},[W,d,v,l]),s.useEffect(()=>{const t=setInterval(()=>{_()},3e4);return()=>{clearInterval(t)}},[_]),s.useEffect(()=>{if(!je)return;let t=!1;Ke(!0),Dt(void 0,d).then(m=>{if(t)return;const k=m.filter(T=>!ot(T));$e(k.filter(T=>T.state==="active"||T.state==="running").length),ee(k.filter(T=>T.state==="paused").length)}).catch(m=>{t||($e(0),ee(0),l(a("agents.bulkActionsLoadFailed","Failed to load bulk agent actions: {{error}}",{error:me(m)}),"error"))}).finally(()=>{t||Ke(!1)});const i=m=>{const k=m.target;k&&(Xe.current?.contains(k)||Fe.current?.contains(k)||V(!1))},u=m=>{m.key==="Escape"&&(V(!1),Fe.current?.focus())};return document.addEventListener("mousedown",i),document.addEventListener("touchstart",i),document.addEventListener("keydown",u),()=>{t=!0,document.removeEventListener("mousedown",i),document.removeEventListener("touchstart",i),document.removeEventListener("keydown",u)}},[l,je,d]);const Zt=async t=>{if(!Me){Le(!0);try{const u=(await Dt(void 0,d)).filter(z=>!ot(z)),m=u.filter(z=>t==="paused"?z.state==="active"||z.state==="running":z.state==="paused"),k=u.length-m.length;if(m.length===0){l(t==="paused"?a("agents.noAgentsToPause","No agents eligible to pause"):a("agents.noAgentsToResume","No agents eligible to resume"),"error");return}if(!await Ye({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 Z=await Promise.allSettled(m.map(z=>ma(z.id,t,d))),G=Z.map((z,He)=>({result:z,agent:m[He]})).filter(z=>z.result.status==="rejected"),le=Z.length-G.length,x=G.length,B=t==="paused"?a("agents.pausedSummary",{count:le,skipped:k,defaultValue_one:"Paused {{count}} agent; skipped {{skipped}}",defaultValue_other:"Paused {{count}} agents; skipped {{skipped}}"}):a("agents.resumedSummary",{count:le,skipped:k,defaultValue_one:"Resumed {{count}} agent; skipped {{skipped}}",defaultValue_other:"Resumed {{count}} agents; skipped {{skipped}}"});if(x>0){const z=G.slice(0,3).map(({agent:He,result:Ya})=>`${He.name||He.id}: ${me(Ya.reason)}`).join("; ");l(`${B}; failed ${x}${z?` (${z})`:""}`,"error")}else l(B,"success");await _()}catch(i){l(t==="paused"?a("agents.pauseAgentsFailed","Failed to pause agents: {{error}}",{error:me(i)}):a("agents.resumeAgentsFailed","Failed to resume agents: {{error}}",{error:me(i)}),"error")}finally{Le(!1)}}},lt=async(t,i)=>{if(!Ve.has(t)){Xt(u=>new Set(u).add(t)),qe(u=>{const m=new Map(u);return m.set(t,i),m});try{await ma(t,i,d),l(a("agents.stateUpdated","Agent state updated to {{state}}",{state:i}),"success"),await _(),qe(u=>{const m=new Map(u);return m.delete(t),m})}catch(u){qe(m=>{const k=new Map(m);return k.delete(t),k}),l(a("agents.stateUpdateFailed","Failed to update state: {{error}}",{error:me(u)}),"error")}finally{Xt(u=>{const m=new Set(u);return m.delete(t),m})}}},qt=async(t,i)=>{if(await Ye({title:a("agents.deleteTitle","Delete Agent"),message:a("agents.deleteConfirm",'Delete agent "{{name}}"? This cannot be undone.',{name:i}),danger:!0}))try{await _s(t,d),l(a("agents.deleted",'Agent "{{name}}" deleted',{name:i}),"success"),await _()}catch(m){l(a("agents.deleteFailed","Failed to delete agent: {{error}}",{error:me(m)}),"error")}},Ma=async(t,i)=>{const u=I.find(m=>m.id===t);if(u){if(u.role===i){Ne(null);return}try{await vt(t,{role:i},d),l(a("agents.roleUpdated","Agent role updated to {{role}}",{role:r.find(m=>m.value===i)?.label??i}),"success"),Ne(null),_()}catch(m){l(a("agents.roleUpdateFailed","Failed to update role: {{error}}",{error:me(m)}),"error")}}},La=(t,i)=>{t.key==="Escape"&&Ne(null)},Ia=async(t,i)=>{c===t.id&&(f(null),De(u=>{const m={...u};return delete m[t.id],m})),Te(t.id);try{await vt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:i}},d),l(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:ha(i),name:t.name}),"success"),_()}catch(u){l(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(u)}),"error")}finally{Te(null)}},Jt=async t=>{const i=ye[t.id]??"";if(i.trim()===""){l(a("agents.heartbeatEnterMinutes","Please enter a heartbeat interval in minutes"),"error");return}const u=Number(i);if(isNaN(u)){l(a("agents.heartbeatMustBeNumber","Heartbeat interval must be a valid number"),"error");return}if(u<=0){l(a("agents.heartbeatMustBePositive","Heartbeat interval must be greater than 0"),"error");return}if(u>=1&&u<5){Te(t.id);try{await vt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:Ms}},d),l(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"),f(null),De(k=>{const T={...k};return delete T[t.id],T}),_()}catch(k){l(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(k)}),"error")}finally{Te(null)}return}const m=Math.round(u*6e4);Te(t.id);try{await vt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:m}},d),l(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:ha(m),name:t.name}),"success"),f(null),De(k=>{const T={...k};return delete T[t.id],T}),_()}catch(k){l(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(k)}),"error")}finally{Te(null)}},Fa=t=>{const i=It(t.runtimeConfig?.heartbeatIntervalMs),u=Math.round(i/6e4);f(t.id),De(m=>({...m,[t.id]:String(u)}))},ge=s.useCallback((t,i)=>{he(t),$(i?.initialTab??"dashboard"),xe(i?.initialRunId??null),de(i?.preferActiveRun??!1)},[]),Ue=s.useCallback(()=>{he(null),$("dashboard"),xe(null),de(!1)},[]),Qt=s.useCallback(t=>{ge(t)},[ge]),za=s.useCallback(t=>{ce(t),ge(t)},[ge]),Da=s.useCallback(async({agentId:t,deleted:i})=>{await E(),i&&L===t&&Ue()},[E,L,Ue]),Ha=s.useCallback(t=>{ge(t),h&&Ge(!1)},[h,ge]),$a=async(t,i)=>{qe(u=>{const m=new Map(u);return m.set(t,"running"),m});try{await Ls(t,d,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),l(a("agents.heartbeatRunStarted","Heartbeat run started for {{name}}",{name:i}),"success"),await _(),qe(u=>{const m=new Map(u);return m.delete(t),m})}catch(u){qe(m=>{const k=new Map(m);return k.delete(t),k}),l(a("agents.heartbeatRunFailed","Failed to start heartbeat run: {{error}}",{error:me(u)}),"error")}},We=s.useCallback(t=>Math.min(rn,Math.max(ln,t)),[]),te=s.useCallback(t=>{const i=ve.current,u=Re.current?.querySelector(".agent-org-chart");if(!i||!u)return{...t,scale:We(t.scale)};const m=We(t.scale),k=u.scrollWidth*m,T=u.scrollHeight*m,Z=i.clientWidth,G=i.clientHeight,le=Math.min(et,Z-k-et),x=et,B=Math.min(et,G-T-et),z=et;return{scale:m,x:Math.max(le,Math.min(x,t.x)),y:Math.max(B,Math.min(z,t.y))}},[We]),pt=s.useCallback((t,i,u)=>{const m=ve.current;m&&O(k=>{const T=We(t),Z=m.getBoundingClientRect(),G=i-Z.left,le=u-Z.top,x=(G-k.x)/k.scale,B=(le-k.y)/k.scale;return te({scale:T,x:G-x*T,y:le-B*T})})},[We,te]),Je=s.useCallback(()=>{const t=ve.current,i=Re.current?.querySelector(".agent-org-chart");if(!t||!i)return;const u=t.clientWidth,m=t.clientHeight,k=i.scrollWidth,T=i.scrollHeight;if(k<=0||T<=0)return;const Z=We(Math.min(u/k,m/T,1)),G=(u-k*Z)/2,le=(m-T*Z)/2;O(te({scale:Z,x:G,y:le}))},[We,te]),Ct=s.useCallback(t=>{ke(t),t!=="org"&&O({scale:1,x:0,y:0}),h&&L&&Ue()},[Ue,h,L]),ea=t=>r.find(i=>i.value===t)?.label??t,xt=s.useMemo(()=>$s({tree:Be,availableWidth:Ce,preference:oe}),[Be,oe,Ce]),ta=s.useCallback(t=>{fe(t),O({scale:1,x:0,y:0})},[]);s.useEffect(()=>{O({scale:1,x:0,y:0}),Y.current=!1},[d,xt]),s.useLayoutEffect(()=>{W!=="org"||K||Be.length===0||Y.current||(Je(),Y.current=!0)},[W,Be.length,Je,K]);const Oa=s.useCallback((t,i)=>{i?o.current.set(t,i):o.current.delete(t)},[]),aa=s.useCallback(()=>e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>O(t=>te({...t,scale:t.scale*.9})),"aria-label":a("agents.orgChartZoomOut","Zoom out org chart"),title:a("agents.zoomOut","Zoom out"),children:e.jsx(Ws,{size:16})}),e.jsxs("span",{className:"agent-org-chart-controls__zoom-label","aria-live":"polite",children:[Math.round(M.scale*100),"%"]}),e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>O(t=>te({...t,scale:t.scale*1.1})),"aria-label":a("agents.orgChartZoomIn","Zoom in org chart"),title:a("agents.zoomIn","Zoom in"),children:e.jsx(Bs,{size:16})}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm agent-org-chart-controls__fit-btn",onClick:Je,"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:()=>O(t=>te({...t,x:0,y:0})),"aria-label":a("agents.orgChartCenter","Center org chart"),title:a("agents.orgChartCenter","Center org chart"),children:[e.jsx(ys,{size:16}),a("agents.center","Center")]})]}),[te,Je,M.scale]),Va=s.useCallback(t=>{if(!(t.ctrlKey||t.metaKey))return;t.preventDefault();const i=t.deltaY>0?.9:1.1;pt(M.scale*i,t.clientX,t.clientY)},[M.scale,pt]),Ba=s.useCallback(t=>{if(t.target.closest(".org-chart-node-card"))return;if(t.currentTarget.setPointerCapture?.(t.pointerId),P.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),P.current.size===1){F.current={x:t.clientX-M.x,y:t.clientY-M.y,pointerId:t.pointerId},Ae(!0);return}if(P.current.size===2){const u=Array.from(P.current.values()),m=u[0].x-u[1].x,k=u[0].y-u[1].y;X.current={distance:Math.hypot(m,k),scale:M.scale,centerX:(u[0].x+u[1].x)/2,centerY:(u[0].y+u[1].y)/2},F.current=null}},[M.scale,M.x,M.y]),Ua=s.useCallback(t=>{if(P.current.has(t.pointerId)){if(P.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),P.current.size>=2){const i=Array.from(P.current.values()),u=X.current;if(!u)return;const m=i[0].x-i[1].x,k=i[0].y-i[1].y,T=Math.hypot(m,k),Z=u.scale*(T/u.distance);pt(Z,u.centerX,u.centerY);return}!F.current||F.current.pointerId!==t.pointerId||O(i=>te({...i,x:t.clientX-F.current.x,y:t.clientY-F.current.y}))}},[te,pt]),sa=s.useCallback(t=>{P.current.delete(t.pointerId),P.current.size<2&&(X.current=null),P.current.size===0&&(F.current=null,Ae(!1))},[]),Wa=s.useCallback(t=>{if(t.key==="ArrowLeft")O(i=>te({...i,x:i.x+ft}));else if(t.key==="ArrowRight")O(i=>te({...i,x:i.x-ft}));else if(t.key==="ArrowUp")O(i=>te({...i,y:i.y+ft}));else if(t.key==="ArrowDown")O(i=>te({...i,y:i.y-ft}));else if(t.key==="+"||t.key==="=")O(i=>te({...i,scale:i.scale*1.1}));else if(t.key==="-")O(i=>te({...i,scale:i.scale*.9}));else if(t.key==="0")Je();else if(t.key==="Home")O({scale:1,x:0,y:0});else return;t.preventDefault()},[te,Je]),na=s.useCallback(()=>{const t=[{value:"horizontal",label:a("agents.layoutHorizontal","Horizontal"),icon:e.jsx(xa,{size:16}),ariaLabel:a("agents.layoutHorizontalAria","Horizontal layout")},{value:"vertical",label:a("agents.layoutVertical","Vertical"),icon:e.jsx(da,{size:16}),ariaLabel:a("agents.layoutVerticalAria","Vertical layout")},{value:"auto",label:a("agents.layoutAuto","Auto"),icon:e.jsx(tt,{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(i=>{const u=oe===i.value;return e.jsxs("button",{type:"button",className:`btn-icon touch-target agent-org-chart-layout-toggle__button${u?" btn-icon--active":""}`,onClick:()=>ta(i.value),"aria-pressed":u,"aria-label":i.ariaLabel,title:i.ariaLabel,"data-layout-value":i.value,children:[i.icon,e.jsx("span",{className:"agent-org-chart-layout-toggle__text",children:i.label})]},i.value)})})},[ta,oe]),Ga=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],wt=t=>Ps(t),Ka=we||Me||Ie===0,Xa=we||Me||ne===0,la=H&&I.length===0,it=s.useCallback(()=>{y(!0)},[]);return e.jsxs("div",{className:"agents-view",children:[e.jsx(ks,{icon:zt,title:a("agents.title","Agents"),actions:e.jsxs("div",{className:"agents-view-controls",children:[e.jsxs("div",{className:"view-toggle",children:[e.jsx("button",{className:`view-toggle-btn${W==="list"?" active":""}`,onClick:()=>Ct("list"),title:a("agents.listView","List view"),"aria-label":a("agents.listView","List view"),"aria-pressed":W==="list",children:e.jsx(da,{size:16})}),e.jsx("button",{className:`view-toggle-btn${W==="board"?" active":""}`,onClick:()=>Ct("board"),title:a("agents.boardView","Board view"),"aria-label":a("agents.boardView","Board view"),"aria-pressed":W==="board",children:e.jsx(at,{size:16})}),e.jsx("button",{className:`view-toggle-btn${W==="org"?" active":""}`,onClick:()=>Ct("org"),title:a("agents.orgChartView","Org Chart view"),"aria-label":a("agents.orgChartView","Org Chart view"),"aria-pressed":W==="org",children:e.jsx(xa,{size:16})})]}),e.jsxs("div",{className:"agents-view-primary-actions",children:[e.jsx("button",{ref:Fe,className:`btn-icon agent-controls-trigger${je?" agent-controls-trigger--active":""}`,onClick:()=>V(t=>!t),title:a("agents.controls","Controls"),"aria-label":a("agents.controls","Controls"),"aria-haspopup":"dialog","aria-expanded":je,"aria-controls":dt,children:e.jsx(Cs,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void _(),title:a("agents.refresh","Refresh"),"aria-label":a("agents.refresh","Refresh"),children:e.jsx(tt,{size:16,className:H?"spin":void 0})}),!h&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{J(!0),V(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(Ht,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{it(),V(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(ua,{size:16}),a("agents.newAgent","New Agent")]})]}),je&&e.jsxs("div",{ref:Xe,id:dt,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(ws,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:A,onChange:t=>w(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")]})]})}),h&&e.jsxs("div",{className:"agent-controls-mobile-actions",children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{J(!0),V(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(Ht,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{it(),V(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(ua,{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:Ka,onClick:()=>{V(!1),Zt("paused")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(Tt,{}),e.jsx("span",{children:a("agents.pauseAllAgents","Pause All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:we?a("agents.loadingEligibility","Loading eligibility…"):Ie===0?a("agents.noAgentsToPauseHint","No active or running project agents to pause"):a("agents.pauseCountHint",{count:Ie,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:Xa,onClick:()=>{V(!1),Zt("active")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(bt,{}),e.jsx("span",{children:a("agents.resumeAllAgents","Resume All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:we?a("agents.loadingEligibility","Loading eligibility…"):ne===0?a("agents.noAgentsToResumeHint","No paused project agents to resume"):a("agents.resumeCountHint",{count:ne,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:Oe,onChange:t=>{const i=Number(t.target.value);Yt(Number.isFinite(i)&&i>0?i:1)},disabled:Gt}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",Oe.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(Lt.reduce((t,i)=>Math.abs(i-Oe)<Math.abs(t-Oe)?i:t,Lt[0])),onChange:t=>{const i=Number(t.target.value);Yt(Number.isFinite(i)&&i>0?i:1)},disabled:Gt,"aria-label":a("agents.heartbeatSpeedPreset","Heartbeat speed preset"),children:Lt.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(Gs,{agents:nt})]})]})]})}),e.jsx(tn,{isOpen:D,onClose:()=>{y(!1),q(null)},onCreated:()=>{y(!1),q(null),_()},projectId:d,prefillDraft:U,agentOnboardingEnabled:p,existingAgents:I,onPrefillDraft:q}),e.jsx(sn,{isOpen:ie,onClose:()=>J(!1),onImported:()=>void _(),projectId:d}),e.jsx(Qs,{stats:R,activeAgents:_a,projectId:d,isOpen:_e,onToggle:()=>Ge(t=>!t),onSelectAgent:Ha,onOpenTaskLogs:N}),W==="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(Na,{inline:!0,showInlineBackButton:!1,agentId:L,projectId:d,onClose:Ue,addToast:l,onChildClick:Qt,initialTab:pe,initialRunId:C,preferActiveRun:se},L)})]}):la?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(tt,{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:[h?e.jsxs("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:[na(),aa()]}):e.jsxs("div",{className:"agent-org-chart-toolbar",children:[na(),e.jsx("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:aa()})]}),e.jsx("div",{ref:ve,className:"agent-org-chart-viewport","data-testid":"agent-org-chart-viewport",tabIndex:0,role:"region","aria-label":a("agents.orgChartCanvas","Org chart canvas"),onWheel:Va,onPointerDown:Ba,onPointerMove:Ua,onPointerUp:sa,onPointerCancel:sa,onKeyDown:Wa,"data-panning":Se?"true":"false",children:e.jsxs("div",{ref:Re,className:`agent-org-chart-canvas agent-org-chart-canvas--zoom-${Math.round((M.scale??1)*100)}`,"data-panning":Se?"true":"false",style:{transform:`translate(${M.x}px, ${M.y}px) scale(${M.scale})`},children:[e.jsx("div",{className:`agent-org-chart${xt==="vertical"?" agent-org-chart--vertical":""}`,"data-testid":"agent-org-chart","data-layout-mode":xt,children:K?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx(tt,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingOrgChart","Loading org chart...")})]}):Be.length===0?e.jsx(_t,{onCtaClick:it}):(j.current=[],Be.map(t=>e.jsx(Pa,{node:t,onSelect:za,getHealthStatus:wt,selectedAgentId:ae,registerNodeElement:Oa,linksRef:j},t.agent.id)))}),e.jsx(cn,{links:j.current,nodeElements:o.current,canvasRef:Re,viewportRef:ve,layoutMode:xt,transform:M})]})})]})})}):e.jsxs("div",{className:"agents-split-layout",style:h?void 0:{gridTemplateColumns:`${b}px var(--space-sm) minmax(0, 1fr)`},children:[e.jsx("div",{className:`agents-split-sidebar${re?" agents-split-sidebar--hidden-mobile":""}`,children:e.jsx("div",{className:"agents-view-content",children:la?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(tt,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingAgents","Loading agents...")})]}):W==="board"?e.jsx("div",{className:"agent-board",children:nt.length===0?e.jsx(_t,{onCtaClick:it}):nt.map(t=>{const i=wt(t),u=Bt(t,i,a),m=Ot(t.state),k=Vt("agent-board-card",t.state);return e.jsxs("div",{className:`agent-board-card ${k}${L===t.id?" agent-card--selected":""}`,children:[e.jsxs("div",{className:"agent-board-clickable",onClick:()=>ge(t.id),role:"button",tabIndex:0,onKeyDown:T=>{(T.key==="Enter"||T.key===" ")&&(T.key===" "&&T.preventDefault(),ge(t.id))},children:[e.jsxs("div",{className:"agent-board-header",children:[e.jsx("span",{className:"agent-board-icon",children:e.jsx(Nt,{agent:t,size:20})}),e.jsx("span",{className:"agent-board-badge badge text-secondary",children:ea(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:i.color},title:u.title,children:[i.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 qt(t.id,t.name),title:a("agents.delete","Delete"),children:e.jsx(ga,{size:14})})})]},t.id)})}):e.jsx("div",{className:"agent-list",children:nt.length===0?e.jsx(_t,{onCtaClick:it}):nt.map(t=>{const i=wt(t),u=Bt(t,i,a),m=Ot(t.state),k=Vt("agent-card",t.state),T=It(t.runtimeConfig?.heartbeatIntervalMs),Z=Ss(T),G=gt===t.id,le=on(t);return e.jsxs("div",{className:`agent-card agent-card--clickable ${k}${L===t.id?" agent-card--selected":""}`,onClick:x=>{const B=x.target;if(B===x.currentTarget){ge(t.id);return}const z=B.closest('button, select, input, [role="button"]');z&&z!==x.currentTarget||ge(t.id)},role:"button",tabIndex:0,onKeyDown:x=>{x.target===x.currentTarget&&(x.key==="Enter"||x.key===" ")&&(x.key===" "&&x.preventDefault(),ge(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:[ut===t.id?e.jsx("select",{ref:st,className:"select agent-role-select",value:t.role,onChange:x=>void Ma(t.id,x.target.value),onKeyDown:x=>La(x,t.id),onBlur:()=>Ne(null),autoFocus:!0,children:r.map(x=>e.jsxs("option",{value:x.value,children:[x.icon," ",x.label]},x.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:x=>{x.stopPropagation(),Ne(t.id)},title:a("agents.clickToChangeRole","Click to change role"),role:"button",tabIndex:0,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.stopPropagation(),Ne(t.id))},children:e.jsx(Nt,{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(wa,{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:i.color},title:u.title,children:[i.icon,u.label?` ${u.label}`:""]}),e.jsx("span",{className:"badge text-secondary",children:ea(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 x=Ga(t);if(x.length===0)return null;const B=x.slice(0,2),z=x.length-2;return e.jsxs(e.Fragment,{children:[B.map(He=>e.jsx("span",{className:"badge badge-skill",title:He,children:zs(He)},He)),z>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",z]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[e.jsxs("div",{className:"agent-model-runtime",children:[e.jsxs("span",{className:"text-secondary",children:[le.isRuntime?a("agents.runtime","Runtime"):a("agents.model","Model"),":"]}),e.jsx("span",{className:"badge agent-model-runtime__value",title:le.label??a("agents.auto","Auto"),children:le.label??a("agents.auto","Auto")})]}),t.state==="error"&&t.lastError?e.jsx(As,{errorText:t.lastError,issueContext:{surface:"AgentsView list",agentId:t.id,agentName:t.name,agentState:t.state,taskId:t.taskId}}):null,t.taskId&&e.jsxs("div",{className:"agent-task",children:[e.jsx("span",{className:"text-secondary",children:a("agents.workingOn","Working on:")}),e.jsx("span",{className:"badge",children:e.jsx(Ca,{taskId:t.taskId,taskColumn:t.taskColumn})})]}),e.jsxs("div",{className:"agent-heartbeat-control",children:[e.jsx("span",{className:"text-secondary",children:a("agents.heartbeat","Heartbeat:")}),c===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:ye[t.id]??"",onChange:x=>De(B=>({...B,[t.id]:x.target.value})),onKeyDown:x=>{x.key==="Enter"?Jt(t):x.key==="Escape"&&(f(null),De(B=>{const z={...B};return delete z[t.id],z}))},disabled:G,"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 Jt(t),disabled:G,title:a("agents.saveCustomInterval","Save custom interval"),children:a("agents.save","Save")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>{f(null),De(x=>{const B={...x};return delete B[t.id],B})},disabled:G,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:x=>{const B=x.target.value;B==="__custom__"?Fa(t):Ia(t,Number(B))},disabled:G,"aria-label":a("agents.setHeartbeatAria","Set heartbeat interval for {{name}}",{name:t.name}),children:[Z.map(x=>e.jsx("option",{value:x.value,children:x.label},x.value)),Rs.some(x=>x.value===T)&&e.jsx("option",{value:"__custom__",children:a("agents.customHeartbeatOption","Custom...")})]})}),G&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:a("agents.saving","Saving…")}),t.lastHeartbeatAt&&(()=>{const x=new Date(t.lastHeartbeatAt),B=new Date(x.getTime()+T),z=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"agent-heartbeat-last text-secondary",title:x.toLocaleString(),children:a("agents.lastHeartbeatAt","Last: {{time}}",{time:x.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})}),z&&e.jsx("span",{className:"agent-heartbeat-next text-secondary",title:B.toLocaleString(),children:a("agents.nextHeartbeatAt","Next: {{time}}",{time:B.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:Ve.has(t.id),title:a("agents.activate","Activate"),children:[e.jsx(bt,{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 $a(t.id,t.name),disabled:Ve.has(t.id),title:a("agents.runNow","Run Now"),"aria-label":a("agents.runNowAria","Run now for {{name}}",{name:t.name}),children:[e.jsx(at,{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:Ve.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(Tt,{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:Ve.has(t.id),title:a("agents.resume","Resume"),children:[e.jsx(bt,{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:()=>ge(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(at,{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:Ve.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(Tt,{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:Ve.has(t.id),title:a("agents.retry","Retry"),children:[e.jsx(bt,{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:()=>ge(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(Ts,{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 qt(t.id,t.name),title:a("agents.delete","Delete"),children:[e.jsx(ga,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.delete","Delete")})]})]})]})]},t.id)})})})}),!h&&e.jsx("div",{className:"agents-split-resize-handle","data-testid":"agents-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":Aa,"aria-valuemax":Ra,"aria-valuenow":b,"aria-label":a("agents.resizeSidebar","Resize agents sidebar"),tabIndex:0,onPointerDown:Ze,onKeyDown:yt}),e.jsx("div",{className:`agents-split-detail${h&&!L?" agents-split-detail--hidden-mobile":""}`,children:L?e.jsx(s.Suspense,{fallback:null,children:e.jsx(Na,{inline:!0,showInlineBackButton:h,agentId:L,projectId:d,onClose:Ue,addToast:l,onChildClick:Qt,initialTab:pe,initialRunId:C,preferActiveRun:se,onMutationSuccess:Da},L)}):e.jsxs("div",{className:"agents-detail-empty-state",children:[e.jsx(zt,{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{Nn as AgentsView};
|
|
24
|
+
Agent instructions go here...`),value:b,onChange:o=>{h("paste"),w([]),S(o.target.value),$(null)},rows:8,"aria-label":r("agents.manifestContent","Manifest content")})]}),e.jsx("p",{className:"agent-import-file-hint",children:r("agents.currentInput","Current input: {{method}}",{method:n})}),pe&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(rt,{size:14}),pe]})]}),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:r("agents.company","Company")}),e.jsx("span",{className:"agent-import-company-name",children:I})]}),y.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:y.map((o,j)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(rt,{size:12}),e.jsx("span",{children:o})]},j))}),e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Ft,{size:14}),e.jsx("span",{children:r("agents.agentsFound","{{count}} agent{{plural}} found",{count:H.length,plural:H.length!==1?"s":""})})]}),H.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>ie(H.map(o=>o.name)),children:r("agents.selectAllAgents","Select all agents")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>ie([]),children:r("agents.clearAgents","Clear agents")})]}),H.length>0?e.jsx("div",{className:"agent-import-agent-list",children:H.map((o,j)=>e.jsxs("div",{className:"agent-import-agent-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":r("agents.selectAgent","Select agent {{name}}",{name:o.name}),checked:q.includes(o.name),onChange:()=>ve(o.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:o.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:o.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[o.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[o.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:o.role}),o.reportsTo&&e.jsx("span",{className:"agent-import-agent-reports",children:r("agents.importReportsTo"," · reports to {{agent}}",{agent:o.reportsTo})}),o.skills&&o.skills.length>0&&e.jsx("span",{className:"agent-import-agent-model",children:r("agents.importSkills"," · skills: {{skills}}",{skills:o.skills.join(", ")})})]}),o.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[o.instructionsText.slice(0,100),o.instructionsText.length>100?"...":""]})]})]},j))}):e.jsx("p",{className:"agent-import-empty",children:r("agents.noAgentsFound","No agents found in the manifest.")}),E.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(Ft,{size:14}),e.jsx("span",{children:r("agents.skillsFound","{{count}} skill{{plural}} found",{count:E.length,plural:E.length!==1?"s":""})})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L(E.map(o=>o.name)),children:r("agents.selectAllSkills","Select all skills")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>L([]),children:r("agents.clearSkills","Clear skills")})]}),e.jsx("div",{className:"agent-import-skill-list",children:E.map((o,j)=>e.jsxs("div",{className:"agent-import-skill-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":r("agents.selectSkill","Select skill {{name}}",{name:o.name}),checked:J.includes(o.name),onChange:()=>Re(o.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:o.name}),o.description&&e.jsx("span",{className:"agent-import-skill-description",children:o.description})]})]},`${o.name}-${j}`))})]}),se&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(rt,{size:14}),se]})]}),v==="result"&&C&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(jt,{size:32})}),e.jsx("h3",{className:"agent-import-result-title",children:r("agents.importComplete","Import Complete")}),e.jsxs("p",{className:"agent-import-result-company",children:[r("agents.from","From")," ",e.jsx("strong",{children:C.companyName??"Unknown"})]}),e.jsxs("div",{className:"agent-import-result-stats",children:[C.created.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:r("agents.resultCreated","{{count}} created",{count:C.created.length})})}),C.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:r("agents.resultSkipped","{{count}} skipped (already exist)",{count:C.skipped.length})})}),C.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:r("agents.resultErrors","{{count}} error{{plural}}",{count:C.errors.length,plural:C.errors.length!==1?"s":""})})})]}),C.created.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:C.created.map((o,j)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(jt,{size:12}),e.jsx("span",{children:o.name})]},j))}),C.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:C.errors.map((o,j)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(ca,{size:12}),e.jsxs("span",{children:[o.name,": ",o.error]})]},j))}),C.warnings&&C.warnings.length>0&&e.jsx("div",{className:"agent-import-result-warnings",children:C.warnings.map((o,j)=>e.jsxs("div",{className:"agent-import-result-warning",children:[e.jsx(rt,{size:12}),e.jsx("span",{children:o})]},j))}),C.skills&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-result-divider"}),e.jsx("h4",{className:"agent-import-result-section-title",children:r("agents.skills","Skills")}),e.jsxs("div",{className:"agent-import-result-stats",children:[C.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsx("span",{children:r("agents.skillsImported","{{count}} skill{{plural}} imported",{count:C.skills.imported.length,plural:C.skills.imported.length!==1?"s":""})})}),C.skills.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:r("agents.skillsSkipped","{{count}} skill{{plural}} skipped (already exist)",{count:C.skills.skipped.length,plural:C.skills.skipped.length!==1?"s":""})})}),C.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsx("span",{children:r("agents.skillsErrors","{{count}} skill{{plural}} error{{pluralError}}",{count:C.skills.errors.length,plural:C.skills.errors.length!==1?"s":"",pluralError:C.skills.errors.length!==1?"s":""})})}),C.skills.imported.length===0&&C.skills.skipped.length===0&&C.skills.errors.length===0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:r("agents.noSkillsInPackage","No skills in package")})})]}),C.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:C.skills.imported.map((o,j)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(jt,{size:12}),e.jsx("span",{children:o.name})]},j))}),C.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:C.skills.errors.map((o,j)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(ca,{size:12}),e.jsxs("span",{children:[o.name,": ",o.error]})]},j))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[v==="preview"&&e.jsx("button",{className:"btn",onClick:()=>g("input"),disabled:ce,children:r("agents.back","Back")}),e.jsx("button",{className:"btn",onClick:Le,disabled:ce,children:v==="result"?r("agents.close","Close"):r("agents.cancel","Cancel")}),v==="input"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void $e(),disabled:he||(n==="directory"?A.length===0:n==="browse"?!K:!b.trim()),children:he?e.jsxs(e.Fragment,{children:[e.jsx(At,{size:14,className:"spin"}),r("agents.parsing","Parsing...")]}):r("agents.preview","Preview")}),v==="preview"&&e.jsx("button",{className:"btn btn-task-create",onClick:()=>void ne(),disabled:ce||ee===0&&M===0,children:ce?e.jsxs(e.Fragment,{children:[e.jsx(At,{size:14,className:"spin"}),Xe]}):r("agents.importButton","Import {{label}}",{label:Ae})})]})]})}):null}const Na=s.lazy(()=>Es(()=>import("./AgentDetailView-CHSaiBNh.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])).then(l=>({default:l.AgentDetailView})));function nn(l){return[{value:"triage",label:l("agents.roleTriage","Triage"),icon:"⊕"},{value:"executor",label:l("agents.roleExecutor","Executor"),icon:"▶"},{value:"reviewer",label:l("agents.roleReviewer","Reviewer"),icon:"⊙"},{value:"merger",label:l("agents.roleMerger","Merger"),icon:"⊞"},{value:"scheduler",label:l("agents.roleScheduler","Scheduler"),icon:"◷"},{value:"engineer",label:l("agents.roleEngineer","Engineer"),icon:"⎔"},{value:"custom",label:l("agents.roleCustom","Custom"),icon:"✦"}]}const Lt=[.1,.25,.5,1,2,3,5,10],ln=.25,rn=3,ft=16,et=32,ya=320,Aa=260,Ra=520,Ta="kb-dashboard-agents-sidebar-width";function $t(l){return Math.max(Aa,Math.min(Ra,l))}function ka(l){if(typeof window>"u")return ya;const d=ct(Ta,l),N=d?Number(d):NaN;return Number.isFinite(N)?$t(N):ya}function Ot(l){switch(l){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 Vt(l,d){switch(d){case"running":return`${l}--running`;case"active":return`${l}--active`;case"paused":return`${l}--paused`;case"error":return`${l}--error`;case"idle":default:return`${l}--idle`}}function on(l){const d=l.runtimeConfig??{},N=typeof d.runtimeHint=="string"?d.runtimeHint:"";if(N)return{label:N,isRuntime:!0};const p=typeof d.modelProvider=="string"?d.modelProvider:"",a=typeof d.modelId=="string"?d.modelId:"";if(p&&a)return{label:`${p}/${a}`,isRuntime:!1};const r=typeof d.model=="string"?d.model:"";if(r.includes("/")){const v=r.indexOf("/");return{label:r.slice(v+1),isRuntime:!1}}return{label:null,isRuntime:!1}}function Ea(l){return l.children.length===0?1:l.children.reduce((d,N)=>d+Ea(N),0)}function Bt(l,d,N){return l.state==="error"?{title:void 0,label:N("agents.healthError","Error")}:{title:d.reason??d.label,label:d.stateDerived?null:d.label}}function Pa({node:l,onSelect:d,getHealthStatus:N,selectedAgentId:p,registerNodeElement:a,linksRef:r}){const{t:v}=Ee("app"),{agent:g,children:n}=l,h=N(g),b=Bt(g,h,v),S=Ot(g.state),A=Vt("org-chart-node-card",g.state),w=Ea(l),I={"--org-chart-subtree-leaves":String(w)};return e.jsxs("div",{className:`org-chart-node${n.length>0?" org-chart-node--has-children":""}`,style:I,children:[e.jsxs("div",{ref:R=>a(g.id,R),"data-agent-id":g.id,className:`org-chart-node-card ${A}${p===g.id?" agent-card--selected":""}`,onClick:()=>d(g.id),role:"button",tabIndex:0,onKeyDown:R=>{(R.key==="Enter"||R.key===" ")&&(R.key===" "&&R.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(Nt,{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 ${S}`,children:g.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:h.color},title:b.title,children:[h.icon,b.label&&e.jsx("span",{className:"text-secondary",children:b.label})]})]})]}),n.length>0&&e.jsx("div",{className:"org-chart-children",role:"group","aria-label":v("agents.orgChartEmployees","{{name}} employees",{name:g.name}),children:n.map(R=>(r.current.push({parentId:g.id,childId:R.agent.id}),e.jsx(Pa,{node:R,onSelect:d,getHealthStatus:N,selectedAgentId:p,registerNodeElement:a,linksRef:r},R.agent.id)))})]})}function cn({links:l,nodeElements:d,canvasRef:N,viewportRef:p,layoutMode:a,transform:r}){const[v,g]=s.useState([]);return s.useLayoutEffect(()=>{const n=N.current,h=p.current;if(!n||!h||l.length===0){g([]);return}const b=()=>{const A=n.getBoundingClientRect(),w=l.flatMap(({parentId:I,childId:R})=>{const H=d.get(I),_=d.get(R);if(!H||!_)return[];const E=H.getBoundingClientRect(),D=_.getBoundingClientRect(),y=(E.left-A.left)/r.scale,U=(E.top-A.top)/r.scale,q=(D.left-A.left)/r.scale,ie=(D.top-A.top)/r.scale;if(a==="vertical"){const re=y,pe=U+E.height/r.scale/2,$=q,C=ie+D.height/r.scale/2,xe=re-(re-$)/2;return[`M ${re} ${pe} L ${xe} ${pe} L ${xe} ${C} L ${$} ${C}`]}const J=y+E.width/r.scale/2,L=U+E.height/r.scale,he=q+D.width/r.scale/2,ae=ie,ce=L+(ae-L)/2;return[`M ${J} ${L} L ${J} ${ce} L ${he} ${ce} L ${he} ${ae}`]});g(w)};b();const S=new ResizeObserver(b);return S.observe(n),S.observe(h),d.forEach(A=>S.observe(A)),()=>S.disconnect()},[N,a,l,d,r.scale,p]),e.jsx("svg",{className:"agent-org-chart-connectors","aria-hidden":"true",children:v.map((n,h)=>e.jsx("path",{d:n},`${h}-${n}`))})}function Nn({addToast:l,projectId:d,onOpenTaskLogs:N,agentOnboardingEnabled:p=!1}){const{t:a}=Ee("app"),r=nn(a),[v,g]=s.useState(!1),h=ps()==="mobile",[b,S]=s.useState(()=>ka(d)),[A,w]=s.useState("all"),{agents:I,stats:R,isLoading:H,loadAgents:_,refreshAgents:E}=xs(d,{filterState:A,showSystemAgents:v}),[D,y]=s.useState(!1),[U,q]=s.useState(null),[ie,J]=s.useState(!1),[L,he]=s.useState(null),[ae,ce]=s.useState(null),re=h&&!!L,[pe,$]=s.useState("dashboard"),[C,xe]=s.useState(null),[se,de]=s.useState(!1),[W,ke]=s.useState(()=>{if(typeof window>"u")return"list";const t=ct("fn-agent-view",d);return t==="list"||t==="board"||t==="org"?t:"list"}),[oe,fe]=s.useState(()=>{if(typeof window>"u")return"auto";const t=ct(Et,d);return pa(t)?t:"auto"}),[Q,Pe]=s.useState([]),[K,ue]=s.useState(!1),[Ce,be]=s.useState(0),[je,V]=s.useState(!1),[_e,Ge]=s.useState(!1),[Me,Le]=s.useState(!1),[we,Ke]=s.useState(!1),[Ie,$e]=s.useState(0),[ne,ee]=s.useState(0),[M,O]=s.useState({scale:1,x:0,y:0}),[Se,Ae]=s.useState(!1),Xe=s.useRef(null),ve=s.useRef(null),Re=s.useRef(null),o=s.useRef(new Map),j=s.useRef([]),P=s.useRef(new Map),F=s.useRef(null),X=s.useRef(null),Y=s.useRef(!1),{confirm:Ye}=bs(),Fe=s.useRef(null),dt=s.useId();s.useEffect(()=>{S(ka(d))},[d]),s.useEffect(()=>{const t=ct("fn-agent-view",d);if(t==="list"||t==="board"||t==="org"){ke(t);return}ke("list")},[d]),s.useEffect(()=>{Rt("fn-agent-view",W,d)},[W,d]),s.useEffect(()=>{const t=ct(Et,d);fe(pa(t)?t:"auto")},[d]),s.useEffect(()=>{Rt(Et,oe,d)},[oe,d]);const ze=s.useCallback(t=>{try{Rt(Ta,String(t),d)}catch{}},[d]),Ze=s.useCallback(t=>{if(h)return;t.preventDefault(),t.stopPropagation();const i=t.currentTarget;typeof i.setPointerCapture=="function"&&i.setPointerCapture(t.pointerId);const u=t.clientX,m=b;let k=m;document.body.style.userSelect="none";const T=G=>{const le=G.clientX-u,x=$t(m+le);k=x,S(x)},Z=G=>{typeof i.releasePointerCapture=="function"&&i.releasePointerCapture(G.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",T),document.removeEventListener("pointerup",Z),ze(k)};document.addEventListener("pointermove",T),document.addEventListener("pointerup",Z)},[h,ze,b]),yt=s.useCallback(t=>{if(h||t.key!=="ArrowLeft"&&t.key!=="ArrowRight")return;t.preventDefault();const i=t.shiftKey?50:10,u=t.key==="ArrowLeft"?-i:i,m=$t(b+u);S(m),ze(m)},[h,ze,b]),[ut,Ne]=s.useState(null),st=s.useRef(null),[gt,Te]=s.useState(null),[c,f]=s.useState(null),[ye,De]=s.useState({}),[Oe,Wt]=s.useState(1),[Gt,Kt]=s.useState(!1),[Ve,Xt]=s.useState(new Set),[kt,qe]=s.useState(new Map),mt=s.useRef(!0);s.useEffect(()=>(mt.current=!0,()=>{mt.current=!1}),[]),s.useEffect(()=>{vs(d).then(t=>{mt.current&&Wt(t.heartbeatMultiplier??1)}).catch(()=>{})},[d]);const Yt=s.useCallback(async t=>{const i=Number.isFinite(t)&&t>0?t:1;Wt(i),Kt(!0);try{await fs({heartbeatMultiplier:i},d),l(a("agents.heartbeatSpeedSet","Heartbeat speed set to ×{{value}}",{value:i.toFixed(1)}),"success")}catch(u){l(a("agents.heartbeatSpeedSaveFailed","Failed to save heartbeat multiplier: {{error}}",{error:me(u)}),"error")}finally{mt.current&&Kt(!1)}},[d,l]),ht=s.useMemo(()=>kt.size===0?I:I.map(t=>{const i=kt.get(t.id);return i?{...t,state:i}:t}),[I,kt]),nt=s.useMemo(()=>ht.filter(t=>v||!ot(t)),[ht,v]),_a=s.useMemo(()=>ht.filter(t=>t.state!=="active"&&t.state!=="running"?!1:v||!ot(t)),[ht,v]),Be=s.useMemo(()=>{if(v)return Q;const t=i=>ot(i.agent)?null:{...i,children:i.children.map(t).filter(u=>u!==null)};return Q.map(t).filter(i=>i!==null)},[Q,v]);s.useEffect(()=>{if(W!=="org")return;const t=ve.current;if(!t)return;const i=()=>{be(t.clientWidth)};i();const u=typeof ResizeObserver<"u"?new ResizeObserver(i):null;return u?.observe(t),window.addEventListener("resize",i),()=>{u?.disconnect(),window.removeEventListener("resize",i)}},[W,Be.length]),s.useEffect(()=>{if(W!=="org")return;let t=!1;return ue(!0),js(d,{includeEphemeral:v}).then(i=>{t||Pe(i)}).catch(i=>{t||(l(a("agents.orgChartLoadFailed","Failed to load org chart: {{error}}",{error:me(i)}),"error"),Pe([]))}).finally(()=>{t||ue(!1)}),()=>{t=!0}},[W,d,v,l]),s.useEffect(()=>{const t=setInterval(()=>{_()},3e4);return()=>{clearInterval(t)}},[_]),s.useEffect(()=>{if(!je)return;let t=!1;Ke(!0),Dt(void 0,d).then(m=>{if(t)return;const k=m.filter(T=>!ot(T));$e(k.filter(T=>T.state==="active"||T.state==="running").length),ee(k.filter(T=>T.state==="paused").length)}).catch(m=>{t||($e(0),ee(0),l(a("agents.bulkActionsLoadFailed","Failed to load bulk agent actions: {{error}}",{error:me(m)}),"error"))}).finally(()=>{t||Ke(!1)});const i=m=>{const k=m.target;k&&(Xe.current?.contains(k)||Fe.current?.contains(k)||V(!1))},u=m=>{m.key==="Escape"&&(V(!1),Fe.current?.focus())};return document.addEventListener("mousedown",i),document.addEventListener("touchstart",i),document.addEventListener("keydown",u),()=>{t=!0,document.removeEventListener("mousedown",i),document.removeEventListener("touchstart",i),document.removeEventListener("keydown",u)}},[l,je,d]);const Zt=async t=>{if(!Me){Le(!0);try{const u=(await Dt(void 0,d)).filter(z=>!ot(z)),m=u.filter(z=>t==="paused"?z.state==="active"||z.state==="running":z.state==="paused"),k=u.length-m.length;if(m.length===0){l(t==="paused"?a("agents.noAgentsToPause","No agents eligible to pause"):a("agents.noAgentsToResume","No agents eligible to resume"),"error");return}if(!await Ye({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 Z=await Promise.allSettled(m.map(z=>ma(z.id,t,d))),G=Z.map((z,He)=>({result:z,agent:m[He]})).filter(z=>z.result.status==="rejected"),le=Z.length-G.length,x=G.length,B=t==="paused"?a("agents.pausedSummary",{count:le,skipped:k,defaultValue_one:"Paused {{count}} agent; skipped {{skipped}}",defaultValue_other:"Paused {{count}} agents; skipped {{skipped}}"}):a("agents.resumedSummary",{count:le,skipped:k,defaultValue_one:"Resumed {{count}} agent; skipped {{skipped}}",defaultValue_other:"Resumed {{count}} agents; skipped {{skipped}}"});if(x>0){const z=G.slice(0,3).map(({agent:He,result:Ya})=>`${He.name||He.id}: ${me(Ya.reason)}`).join("; ");l(`${B}; failed ${x}${z?` (${z})`:""}`,"error")}else l(B,"success");await _()}catch(i){l(t==="paused"?a("agents.pauseAgentsFailed","Failed to pause agents: {{error}}",{error:me(i)}):a("agents.resumeAgentsFailed","Failed to resume agents: {{error}}",{error:me(i)}),"error")}finally{Le(!1)}}},lt=async(t,i)=>{if(!Ve.has(t)){Xt(u=>new Set(u).add(t)),qe(u=>{const m=new Map(u);return m.set(t,i),m});try{await ma(t,i,d),l(a("agents.stateUpdated","Agent state updated to {{state}}",{state:i}),"success"),await _(),qe(u=>{const m=new Map(u);return m.delete(t),m})}catch(u){qe(m=>{const k=new Map(m);return k.delete(t),k}),l(a("agents.stateUpdateFailed","Failed to update state: {{error}}",{error:me(u)}),"error")}finally{Xt(u=>{const m=new Set(u);return m.delete(t),m})}}},qt=async(t,i)=>{if(await Ye({title:a("agents.deleteTitle","Delete Agent"),message:a("agents.deleteConfirm",'Delete agent "{{name}}"? This cannot be undone.',{name:i}),danger:!0}))try{await _s(t,d),l(a("agents.deleted",'Agent "{{name}}" deleted',{name:i}),"success"),await _()}catch(m){l(a("agents.deleteFailed","Failed to delete agent: {{error}}",{error:me(m)}),"error")}},Ma=async(t,i)=>{const u=I.find(m=>m.id===t);if(u){if(u.role===i){Ne(null);return}try{await vt(t,{role:i},d),l(a("agents.roleUpdated","Agent role updated to {{role}}",{role:r.find(m=>m.value===i)?.label??i}),"success"),Ne(null),_()}catch(m){l(a("agents.roleUpdateFailed","Failed to update role: {{error}}",{error:me(m)}),"error")}}},La=(t,i)=>{t.key==="Escape"&&Ne(null)},Ia=async(t,i)=>{c===t.id&&(f(null),De(u=>{const m={...u};return delete m[t.id],m})),Te(t.id);try{await vt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:i}},d),l(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:ha(i),name:t.name}),"success"),_()}catch(u){l(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(u)}),"error")}finally{Te(null)}},Jt=async t=>{const i=ye[t.id]??"";if(i.trim()===""){l(a("agents.heartbeatEnterMinutes","Please enter a heartbeat interval in minutes"),"error");return}const u=Number(i);if(isNaN(u)){l(a("agents.heartbeatMustBeNumber","Heartbeat interval must be a valid number"),"error");return}if(u<=0){l(a("agents.heartbeatMustBePositive","Heartbeat interval must be greater than 0"),"error");return}if(u>=1&&u<5){Te(t.id);try{await vt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:Ms}},d),l(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"),f(null),De(k=>{const T={...k};return delete T[t.id],T}),_()}catch(k){l(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(k)}),"error")}finally{Te(null)}return}const m=Math.round(u*6e4);Te(t.id);try{await vt(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:m}},d),l(a("agents.heartbeatIntervalUpdated","Heartbeat interval updated to {{interval}} for {{name}}",{interval:ha(m),name:t.name}),"success"),f(null),De(k=>{const T={...k};return delete T[t.id],T}),_()}catch(k){l(a("agents.heartbeatIntervalUpdateFailed","Failed to update heartbeat interval: {{error}}",{error:me(k)}),"error")}finally{Te(null)}},Fa=t=>{const i=It(t.runtimeConfig?.heartbeatIntervalMs),u=Math.round(i/6e4);f(t.id),De(m=>({...m,[t.id]:String(u)}))},ge=s.useCallback((t,i)=>{he(t),$(i?.initialTab??"dashboard"),xe(i?.initialRunId??null),de(i?.preferActiveRun??!1)},[]),Ue=s.useCallback(()=>{he(null),$("dashboard"),xe(null),de(!1)},[]),Qt=s.useCallback(t=>{ge(t)},[ge]),za=s.useCallback(t=>{ce(t),ge(t)},[ge]),Da=s.useCallback(async({agentId:t,deleted:i})=>{await E(),i&&L===t&&Ue()},[E,L,Ue]),Ha=s.useCallback(t=>{ge(t),h&&Ge(!1)},[h,ge]),$a=async(t,i)=>{qe(u=>{const m=new Map(u);return m.set(t,"running"),m});try{await Ls(t,d,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),l(a("agents.heartbeatRunStarted","Heartbeat run started for {{name}}",{name:i}),"success"),await _(),qe(u=>{const m=new Map(u);return m.delete(t),m})}catch(u){qe(m=>{const k=new Map(m);return k.delete(t),k}),l(a("agents.heartbeatRunFailed","Failed to start heartbeat run: {{error}}",{error:me(u)}),"error")}},We=s.useCallback(t=>Math.min(rn,Math.max(ln,t)),[]),te=s.useCallback(t=>{const i=ve.current,u=Re.current?.querySelector(".agent-org-chart");if(!i||!u)return{...t,scale:We(t.scale)};const m=We(t.scale),k=u.scrollWidth*m,T=u.scrollHeight*m,Z=i.clientWidth,G=i.clientHeight,le=Math.min(et,Z-k-et),x=et,B=Math.min(et,G-T-et),z=et;return{scale:m,x:Math.max(le,Math.min(x,t.x)),y:Math.max(B,Math.min(z,t.y))}},[We]),pt=s.useCallback((t,i,u)=>{const m=ve.current;m&&O(k=>{const T=We(t),Z=m.getBoundingClientRect(),G=i-Z.left,le=u-Z.top,x=(G-k.x)/k.scale,B=(le-k.y)/k.scale;return te({scale:T,x:G-x*T,y:le-B*T})})},[We,te]),Je=s.useCallback(()=>{const t=ve.current,i=Re.current?.querySelector(".agent-org-chart");if(!t||!i)return;const u=t.clientWidth,m=t.clientHeight,k=i.scrollWidth,T=i.scrollHeight;if(k<=0||T<=0)return;const Z=We(Math.min(u/k,m/T,1)),G=(u-k*Z)/2,le=(m-T*Z)/2;O(te({scale:Z,x:G,y:le}))},[We,te]),Ct=s.useCallback(t=>{ke(t),t!=="org"&&O({scale:1,x:0,y:0}),h&&L&&Ue()},[Ue,h,L]),ea=t=>r.find(i=>i.value===t)?.label??t,xt=s.useMemo(()=>$s({tree:Be,availableWidth:Ce,preference:oe}),[Be,oe,Ce]),ta=s.useCallback(t=>{fe(t),O({scale:1,x:0,y:0})},[]);s.useEffect(()=>{O({scale:1,x:0,y:0}),Y.current=!1},[d,xt]),s.useLayoutEffect(()=>{W!=="org"||K||Be.length===0||Y.current||(Je(),Y.current=!0)},[W,Be.length,Je,K]);const Oa=s.useCallback((t,i)=>{i?o.current.set(t,i):o.current.delete(t)},[]),aa=s.useCallback(()=>e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>O(t=>te({...t,scale:t.scale*.9})),"aria-label":a("agents.orgChartZoomOut","Zoom out org chart"),title:a("agents.zoomOut","Zoom out"),children:e.jsx(Ws,{size:16})}),e.jsxs("span",{className:"agent-org-chart-controls__zoom-label","aria-live":"polite",children:[Math.round(M.scale*100),"%"]}),e.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>O(t=>te({...t,scale:t.scale*1.1})),"aria-label":a("agents.orgChartZoomIn","Zoom in org chart"),title:a("agents.zoomIn","Zoom in"),children:e.jsx(Bs,{size:16})}),e.jsxs("button",{type:"button",className:"btn touch-target btn-sm agent-org-chart-controls__fit-btn",onClick:Je,"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:()=>O(t=>te({...t,x:0,y:0})),"aria-label":a("agents.orgChartCenter","Center org chart"),title:a("agents.orgChartCenter","Center org chart"),children:[e.jsx(ys,{size:16}),a("agents.center","Center")]})]}),[te,Je,M.scale]),Va=s.useCallback(t=>{if(!(t.ctrlKey||t.metaKey))return;t.preventDefault();const i=t.deltaY>0?.9:1.1;pt(M.scale*i,t.clientX,t.clientY)},[M.scale,pt]),Ba=s.useCallback(t=>{if(t.target.closest(".org-chart-node-card"))return;if(t.currentTarget.setPointerCapture?.(t.pointerId),P.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),P.current.size===1){F.current={x:t.clientX-M.x,y:t.clientY-M.y,pointerId:t.pointerId},Ae(!0);return}if(P.current.size===2){const u=Array.from(P.current.values()),m=u[0].x-u[1].x,k=u[0].y-u[1].y;X.current={distance:Math.hypot(m,k),scale:M.scale,centerX:(u[0].x+u[1].x)/2,centerY:(u[0].y+u[1].y)/2},F.current=null}},[M.scale,M.x,M.y]),Ua=s.useCallback(t=>{if(P.current.has(t.pointerId)){if(P.current.set(t.pointerId,{x:t.clientX,y:t.clientY}),P.current.size>=2){const i=Array.from(P.current.values()),u=X.current;if(!u)return;const m=i[0].x-i[1].x,k=i[0].y-i[1].y,T=Math.hypot(m,k),Z=u.scale*(T/u.distance);pt(Z,u.centerX,u.centerY);return}!F.current||F.current.pointerId!==t.pointerId||O(i=>te({...i,x:t.clientX-F.current.x,y:t.clientY-F.current.y}))}},[te,pt]),sa=s.useCallback(t=>{P.current.delete(t.pointerId),P.current.size<2&&(X.current=null),P.current.size===0&&(F.current=null,Ae(!1))},[]),Wa=s.useCallback(t=>{if(t.key==="ArrowLeft")O(i=>te({...i,x:i.x+ft}));else if(t.key==="ArrowRight")O(i=>te({...i,x:i.x-ft}));else if(t.key==="ArrowUp")O(i=>te({...i,y:i.y+ft}));else if(t.key==="ArrowDown")O(i=>te({...i,y:i.y-ft}));else if(t.key==="+"||t.key==="=")O(i=>te({...i,scale:i.scale*1.1}));else if(t.key==="-")O(i=>te({...i,scale:i.scale*.9}));else if(t.key==="0")Je();else if(t.key==="Home")O({scale:1,x:0,y:0});else return;t.preventDefault()},[te,Je]),na=s.useCallback(()=>{const t=[{value:"horizontal",label:a("agents.layoutHorizontal","Horizontal"),icon:e.jsx(xa,{size:16}),ariaLabel:a("agents.layoutHorizontalAria","Horizontal layout")},{value:"vertical",label:a("agents.layoutVertical","Vertical"),icon:e.jsx(da,{size:16}),ariaLabel:a("agents.layoutVerticalAria","Vertical layout")},{value:"auto",label:a("agents.layoutAuto","Auto"),icon:e.jsx(tt,{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(i=>{const u=oe===i.value;return e.jsxs("button",{type:"button",className:`btn-icon touch-target agent-org-chart-layout-toggle__button${u?" btn-icon--active":""}`,onClick:()=>ta(i.value),"aria-pressed":u,"aria-label":i.ariaLabel,title:i.ariaLabel,"data-layout-value":i.value,children:[i.icon,e.jsx("span",{className:"agent-org-chart-layout-toggle__text",children:i.label})]},i.value)})})},[ta,oe]),Ga=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],wt=t=>Ps(t),Ka=we||Me||Ie===0,Xa=we||Me||ne===0,la=H&&I.length===0,it=s.useCallback(()=>{y(!0)},[]);return e.jsxs("div",{className:"agents-view",children:[e.jsx(ks,{icon:zt,title:a("agents.title","Agents"),actions:e.jsxs("div",{className:"agents-view-controls",children:[e.jsxs("div",{className:"view-toggle",children:[e.jsx("button",{className:`view-toggle-btn${W==="list"?" active":""}`,onClick:()=>Ct("list"),title:a("agents.listView","List view"),"aria-label":a("agents.listView","List view"),"aria-pressed":W==="list",children:e.jsx(da,{size:16})}),e.jsx("button",{className:`view-toggle-btn${W==="board"?" active":""}`,onClick:()=>Ct("board"),title:a("agents.boardView","Board view"),"aria-label":a("agents.boardView","Board view"),"aria-pressed":W==="board",children:e.jsx(at,{size:16})}),e.jsx("button",{className:`view-toggle-btn${W==="org"?" active":""}`,onClick:()=>Ct("org"),title:a("agents.orgChartView","Org Chart view"),"aria-label":a("agents.orgChartView","Org Chart view"),"aria-pressed":W==="org",children:e.jsx(xa,{size:16})})]}),e.jsxs("div",{className:"agents-view-primary-actions",children:[e.jsx("button",{ref:Fe,className:`btn-icon agent-controls-trigger${je?" agent-controls-trigger--active":""}`,onClick:()=>V(t=>!t),title:a("agents.controls","Controls"),"aria-label":a("agents.controls","Controls"),"aria-haspopup":"dialog","aria-expanded":je,"aria-controls":dt,children:e.jsx(Cs,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void _(),title:a("agents.refresh","Refresh"),"aria-label":a("agents.refresh","Refresh"),children:e.jsx(tt,{size:16,className:H?"spin":void 0})}),!h&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{J(!0),V(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(Ht,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{it(),V(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(ua,{size:16}),a("agents.newAgent","New Agent")]})]}),je&&e.jsxs("div",{ref:Xe,id:dt,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(ws,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:A,onChange:t=>w(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")]})]})}),h&&e.jsxs("div",{className:"agent-controls-mobile-actions",children:[e.jsxs("button",{className:"btn btn-sm agent-import-trigger",onClick:()=>{J(!0),V(!1)},"aria-label":a("agents.import","Import"),title:a("agents.import","Import"),children:[e.jsx(Ht,{size:16}),a("agents.import","Import")]}),e.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>{it(),V(!1)},"aria-label":a("agents.newAgent","New Agent"),title:a("agents.newAgent","New Agent"),children:[e.jsx(ua,{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:Ka,onClick:()=>{V(!1),Zt("paused")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(Tt,{}),e.jsx("span",{children:a("agents.pauseAllAgents","Pause All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:we?a("agents.loadingEligibility","Loading eligibility…"):Ie===0?a("agents.noAgentsToPauseHint","No active or running project agents to pause"):a("agents.pauseCountHint",{count:Ie,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:Xa,onClick:()=>{V(!1),Zt("active")},children:[e.jsxs("span",{className:"agent-controls-bulk-actions__label",children:[e.jsx(bt,{}),e.jsx("span",{children:a("agents.resumeAllAgents","Resume All Agents")})]}),e.jsx("span",{className:"agent-detail-bulk-menu-item-hint",children:we?a("agents.loadingEligibility","Loading eligibility…"):ne===0?a("agents.noAgentsToResumeHint","No paused project agents to resume"):a("agents.resumeCountHint",{count:ne,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:Oe,onChange:t=>{const i=Number(t.target.value);Yt(Number.isFinite(i)&&i>0?i:1)},disabled:Gt}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",Oe.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(Lt.reduce((t,i)=>Math.abs(i-Oe)<Math.abs(t-Oe)?i:t,Lt[0])),onChange:t=>{const i=Number(t.target.value);Yt(Number.isFinite(i)&&i>0?i:1)},disabled:Gt,"aria-label":a("agents.heartbeatSpeedPreset","Heartbeat speed preset"),children:Lt.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(Gs,{agents:nt})]})]})]})}),e.jsx(tn,{isOpen:D,onClose:()=>{y(!1),q(null)},onCreated:()=>{y(!1),q(null),_()},projectId:d,prefillDraft:U,agentOnboardingEnabled:p,existingAgents:I,onPrefillDraft:q}),e.jsx(sn,{isOpen:ie,onClose:()=>J(!1),onImported:()=>void _(),projectId:d}),e.jsx(Qs,{stats:R,activeAgents:_a,projectId:d,isOpen:_e,onToggle:()=>Ge(t=>!t),onSelectAgent:Ha,onOpenTaskLogs:N}),W==="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(Na,{inline:!0,showInlineBackButton:!1,agentId:L,projectId:d,onClose:Ue,addToast:l,onChildClick:Qt,initialTab:pe,initialRunId:C,preferActiveRun:se},L)})]}):la?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(tt,{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:[h?e.jsxs("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:[na(),aa()]}):e.jsxs("div",{className:"agent-org-chart-toolbar",children:[na(),e.jsx("div",{className:"agent-org-chart-controls","data-testid":"agent-org-chart-controls",children:aa()})]}),e.jsx("div",{ref:ve,className:"agent-org-chart-viewport","data-testid":"agent-org-chart-viewport",tabIndex:0,role:"region","aria-label":a("agents.orgChartCanvas","Org chart canvas"),onWheel:Va,onPointerDown:Ba,onPointerMove:Ua,onPointerUp:sa,onPointerCancel:sa,onKeyDown:Wa,"data-panning":Se?"true":"false",children:e.jsxs("div",{ref:Re,className:`agent-org-chart-canvas agent-org-chart-canvas--zoom-${Math.round((M.scale??1)*100)}`,"data-panning":Se?"true":"false",style:{transform:`translate(${M.x}px, ${M.y}px) scale(${M.scale})`},children:[e.jsx("div",{className:`agent-org-chart${xt==="vertical"?" agent-org-chart--vertical":""}`,"data-testid":"agent-org-chart","data-layout-mode":xt,children:K?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx(tt,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingOrgChart","Loading org chart...")})]}):Be.length===0?e.jsx(_t,{onCtaClick:it}):(j.current=[],Be.map(t=>e.jsx(Pa,{node:t,onSelect:za,getHealthStatus:wt,selectedAgentId:ae,registerNodeElement:Oa,linksRef:j},t.agent.id)))}),e.jsx(cn,{links:j.current,nodeElements:o.current,canvasRef:Re,viewportRef:ve,layoutMode:xt,transform:M})]})})]})})}):e.jsxs("div",{className:"agents-split-layout",style:h?void 0:{gridTemplateColumns:`${b}px var(--space-sm) minmax(0, 1fr)`},children:[e.jsx("div",{className:`agents-split-sidebar${re?" agents-split-sidebar--hidden-mobile":""}`,children:e.jsx("div",{className:"agents-view-content",children:la?e.jsxs("div",{className:"agents-view-loading",role:"status","aria-live":"polite",children:[e.jsx(tt,{size:18,className:"spin"}),e.jsx("span",{children:a("agents.loadingAgents","Loading agents...")})]}):W==="board"?e.jsx("div",{className:"agent-board",children:nt.length===0?e.jsx(_t,{onCtaClick:it}):nt.map(t=>{const i=wt(t),u=Bt(t,i,a),m=Ot(t.state),k=Vt("agent-board-card",t.state);return e.jsxs("div",{className:`agent-board-card ${k}${L===t.id?" agent-card--selected":""}`,children:[e.jsxs("div",{className:"agent-board-clickable",onClick:()=>ge(t.id),role:"button",tabIndex:0,onKeyDown:T=>{(T.key==="Enter"||T.key===" ")&&(T.key===" "&&T.preventDefault(),ge(t.id))},children:[e.jsxs("div",{className:"agent-board-header",children:[e.jsx("span",{className:"agent-board-icon",children:e.jsx(Nt,{agent:t,size:20})}),e.jsx("span",{className:"agent-board-badge badge text-secondary",children:ea(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:i.color},title:u.title,children:[i.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 qt(t.id,t.name),title:a("agents.delete","Delete"),children:e.jsx(ga,{size:14})})})]},t.id)})}):e.jsx("div",{className:"agent-list",children:nt.length===0?e.jsx(_t,{onCtaClick:it}):nt.map(t=>{const i=wt(t),u=Bt(t,i,a),m=Ot(t.state),k=Vt("agent-card",t.state),T=It(t.runtimeConfig?.heartbeatIntervalMs),Z=Ss(T),G=gt===t.id,le=on(t);return e.jsxs("div",{className:`agent-card agent-card--clickable ${k}${L===t.id?" agent-card--selected":""}`,onClick:x=>{const B=x.target;if(B===x.currentTarget){ge(t.id);return}const z=B.closest('button, select, input, [role="button"]');z&&z!==x.currentTarget||ge(t.id)},role:"button",tabIndex:0,onKeyDown:x=>{x.target===x.currentTarget&&(x.key==="Enter"||x.key===" ")&&(x.key===" "&&x.preventDefault(),ge(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:[ut===t.id?e.jsx("select",{ref:st,className:"select agent-role-select",value:t.role,onChange:x=>void Ma(t.id,x.target.value),onKeyDown:x=>La(x,t.id),onBlur:()=>Ne(null),autoFocus:!0,children:r.map(x=>e.jsxs("option",{value:x.value,children:[x.icon," ",x.label]},x.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:x=>{x.stopPropagation(),Ne(t.id)},title:a("agents.clickToChangeRole","Click to change role"),role:"button",tabIndex:0,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.stopPropagation(),Ne(t.id))},children:e.jsx(Nt,{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(wa,{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:i.color},title:u.title,children:[i.icon,u.label?` ${u.label}`:""]}),e.jsx("span",{className:"badge text-secondary",children:ea(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 x=Ga(t);if(x.length===0)return null;const B=x.slice(0,2),z=x.length-2;return e.jsxs(e.Fragment,{children:[B.map(He=>e.jsx("span",{className:"badge badge-skill",title:He,children:zs(He)},He)),z>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",z]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[e.jsxs("div",{className:"agent-model-runtime",children:[e.jsxs("span",{className:"text-secondary",children:[le.isRuntime?a("agents.runtime","Runtime"):a("agents.model","Model"),":"]}),e.jsx("span",{className:"badge agent-model-runtime__value",title:le.label??a("agents.auto","Auto"),children:le.label??a("agents.auto","Auto")})]}),t.state==="error"&&t.lastError?e.jsx(As,{errorText:t.lastError,issueContext:{surface:"AgentsView list",agentId:t.id,agentName:t.name,agentState:t.state,taskId:t.taskId}}):null,t.taskId&&e.jsxs("div",{className:"agent-task",children:[e.jsx("span",{className:"text-secondary",children:a("agents.workingOn","Working on:")}),e.jsx("span",{className:"badge",children:e.jsx(Ca,{taskId:t.taskId,taskColumn:t.taskColumn})})]}),e.jsxs("div",{className:"agent-heartbeat-control",children:[e.jsx("span",{className:"text-secondary",children:a("agents.heartbeat","Heartbeat:")}),c===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:ye[t.id]??"",onChange:x=>De(B=>({...B,[t.id]:x.target.value})),onKeyDown:x=>{x.key==="Enter"?Jt(t):x.key==="Escape"&&(f(null),De(B=>{const z={...B};return delete z[t.id],z}))},disabled:G,"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 Jt(t),disabled:G,title:a("agents.saveCustomInterval","Save custom interval"),children:a("agents.save","Save")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>{f(null),De(x=>{const B={...x};return delete B[t.id],B})},disabled:G,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:x=>{const B=x.target.value;B==="__custom__"?Fa(t):Ia(t,Number(B))},disabled:G,"aria-label":a("agents.setHeartbeatAria","Set heartbeat interval for {{name}}",{name:t.name}),children:[Z.map(x=>e.jsx("option",{value:x.value,children:x.label},x.value)),Rs.some(x=>x.value===T)&&e.jsx("option",{value:"__custom__",children:a("agents.customHeartbeatOption","Custom...")})]})}),G&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:a("agents.saving","Saving…")}),t.lastHeartbeatAt&&(()=>{const x=new Date(t.lastHeartbeatAt),B=new Date(x.getTime()+T),z=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"agent-heartbeat-last text-secondary",title:x.toLocaleString(),children:a("agents.lastHeartbeatAt","Last: {{time}}",{time:x.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})}),z&&e.jsx("span",{className:"agent-heartbeat-next text-secondary",title:B.toLocaleString(),children:a("agents.nextHeartbeatAt","Next: {{time}}",{time:B.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:Ve.has(t.id),title:a("agents.activate","Activate"),children:[e.jsx(bt,{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 $a(t.id,t.name),disabled:Ve.has(t.id),title:a("agents.runNow","Run Now"),"aria-label":a("agents.runNowAria","Run now for {{name}}",{name:t.name}),children:[e.jsx(at,{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:Ve.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(Tt,{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:Ve.has(t.id),title:a("agents.resume","Resume"),children:[e.jsx(bt,{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:()=>ge(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(at,{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:Ve.has(t.id),title:a("agents.pause","Pause"),children:[e.jsx(Tt,{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:Ve.has(t.id),title:a("agents.retry","Retry"),children:[e.jsx(bt,{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:()=>ge(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(Ts,{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 qt(t.id,t.name),title:a("agents.delete","Delete"),children:[e.jsx(ga,{size:14})," ",e.jsx("span",{className:"agent-card-action-label",children:a("agents.delete","Delete")})]})]})]})]},t.id)})})})}),!h&&e.jsx("div",{className:"agents-split-resize-handle","data-testid":"agents-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":Aa,"aria-valuemax":Ra,"aria-valuenow":b,"aria-label":a("agents.resizeSidebar","Resize agents sidebar"),tabIndex:0,onPointerDown:Ze,onKeyDown:yt}),e.jsx("div",{className:`agents-split-detail${h&&!L?" agents-split-detail--hidden-mobile":""}`,children:L?e.jsx(s.Suspense,{fallback:null,children:e.jsx(Na,{inline:!0,showInlineBackButton:h,agentId:L,projectId:d,onClose:Ue,addToast:l,onChildClick:Qt,initialTab:pe,initialRunId:C,preferActiveRun:se,onMutationSuccess:Da},L)}):e.jsxs("div",{className:"agents-detail-empty-state",children:[e.jsx(zt,{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{Nn as AgentsView};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{r as s,j as t,b as Ua}from"./vendor-react-SZ_qB27O.js";import{c as Ka,aA as et,ay as qe,dL as _s,dM as es,bU as jt,dN as $s,aD as ie,dO as on,dx as vt,dP as Os,dQ as Et,dR as Ga,dy as dn,dK as pt,dS as Va,dT as Bs,dU as Wa,dV as Xa,dW as qa,dX as Qa,ai as pa,dY as Ya,az as Xn,bB as zs,dZ as Ja,d_ as Za,d$ as $n,e0 as er,e1 as tr,e2 as nr,e3 as sr,e4 as ar,e5 as rr,f as un,e6 as or,e7 as ir,bo as cr,al as lr,bb as cn,a2 as dr,c0 as ur,e8 as mr,i as hr,e9 as ba,ea as fr,dv as gr,W as pr,eb as br,ec as Hs,G as vr,H as yr,V as wr,P as ht,di as Us,dh as xr,X as Cr,aK as Sr,J as On,ds as Bn,I as Ks,bO as Mr,bs as Gs,o as Zt,ed as zn,ee as Vs,ef as Ws,eg as Xs,bu as qn,D as kr,F as Rr,eh as Ar,bM as qs,bP as Nr}from"./index-JlBzf2ck.js";import{u as tt}from"./vendor-i18n-GF3RlKbq.js";import{SessionTerminal as Qs}from"./SessionTerminal-CnxWsHxS.js";import"./vendor-reactflow-CnI7NMXG.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";import"./shield-alert-BdoEg9Yo.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 Er=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],va=Ka("hash",Er);function Ys(n){const{sessionId:r,tempUserMessageId:i,initialText:g,initialThinking:c,initialToolCalls:d,setStreamingText:b,setStreamingThinking:p,setStreamingToolCalls:o,cancelStreamingFlushesRef:f,addToast:B,onDone:C,onError:M,onFallbackSession:N}=n;let F=g??"",E=c??"",A=d?[...d]:[],W,k=null,ae=null;const G=()=>{k=null,b(F)},ue=()=>{ae=null,p(E)},R=()=>{k!==null&&(cancelAnimationFrame(k),k=null),ae!==null&&(cancelAnimationFrame(ae),ae=null)};return f.current=R,{handlers:{onThinking:U=>{E+=U,ae===null&&(ae=requestAnimationFrame(ue))},onText:U=>{F+=U,k===null&&(k=requestAnimationFrame(G))},onToolStart:U=>{A=[...A,{toolName:U.toolName,args:U.args,isError:!1,status:"running"}],o(A)},onToolEnd:U=>{const X=[...A];for(let _=X.length-1;_>=0;_--){const V=X[_];if(V?.toolName===U.toolName&&V.status==="running"){X[_]={...V,status:"completed",isError:U.isError,result:U.result},A=X,o(X);return}}A=[...X,{toolName:U.toolName,isError:U.isError,result:U.result,status:"completed"}],o(A)},onFallback:U=>{W=U,N?.(U,r),B?.(`Primary model unavailable. Switched to fallback ${U.fallbackModel}.`,"warning")},onDone:U=>{R(),C({messageId:U.messageId,message:U.message,accumulated:{text:F,thinking:E,toolCalls:A,fallbackInfo:W}})},onError:(U,X)=>{R(),M(U,i,X)}},cancelFlushes:R}}const Tr="fusion:chat-pending:";function ts(n){return n?`${Tr}${n}`:null}function jr(n){const r=ts(n);if(!r||typeof window>"u")return[];try{const i=localStorage.getItem(r);if(!i)return[];try{const c=JSON.parse(i);if(Array.isArray(c))return c.filter(d=>typeof d=="string"&&d.trim().length>0)}catch{}const g=i.trim();return g?[g]:[]}catch{return[]}}function Hn(n,r){const i=ts(n);if(!(!i||typeof window>"u"))try{const g=r.filter(c=>c.trim().length>0);if(g.length===0){localStorage.removeItem(i);return}localStorage.setItem(i,JSON.stringify(g))}catch{}}function en(n){const r=ts(n);if(!(!r||typeof window>"u"))try{localStorage.removeItem(r)}catch{}}const Un="kb-chat-active-session",Dr="task-planner:";function Qn(n){return n.agentId.startsWith(Dr)}function Fr(n){return Qn(n)&&!n.lastMessageAt&&!n.lastMessagePreview}function Js(n){const r=typeof n=="string"?n.trim():"",i=r.indexOf("/");return!r||i<=0||i>=r.length-1?{}:{modelProvider:r.slice(0,i),modelId:r.slice(i+1)}}function Ir(n){const r=n?.toolCalls;if(!Array.isArray(r))return;const i=r.map(g=>{if(!g||typeof g!="object")return null;const c=g,d=typeof c.toolName=="string"?c.toolName:"";if(!d)return null;const b=c.args;return{toolName:d,...b&&typeof b=="object"?{args:b}:{},isError:!!c.isError,result:c.result,status:"completed"}}).filter(g=>g!==null);return i.length>0?i:void 0}function Pr(n){const r=n?.fallback;if(!r||typeof r!="object")return;const i=r,g=typeof i.primaryModel=="string"?i.primaryModel:"",c=typeof i.fallbackModel=="string"?i.fallbackModel:"",d=i.triggerPoint;if(!(!g||!c||d!=="session-creation"&&d!=="prompt-time"))return{primaryModel:g,fallbackModel:c,triggerPoint:d}}function Lr(n){const r=n?.failureInfo;if(!r||typeof r!="object")return;const i=r,g=typeof i.summary=="string"?i.summary.trim():"";if(!g)return;const c=(()=>{const d=i.reference;if(!d||typeof d!="object")return;const b=d,p=typeof b.kind=="string"?b.kind.trim():"",o=typeof b.id=="string"?b.id.trim():"";if(!(!p||!o))return{kind:p,id:o,...typeof b.label=="string"&&b.label.trim()?{label:b.label.trim()}:{}}})();return{summary:g,...typeof i.errorClass=="string"&&i.errorClass.trim()?{errorClass:i.errorClass.trim()}:{},...typeof i.code=="string"&&i.code.trim()?{code:i.code.trim()}:{},...typeof i.detail=="string"&&i.detail.trim()?{detail:i.detail.trim()}:{},...c?{reference:c}:{}}}function Zs(n,r){const i="Failed to get response";return typeof n=="string"?{summary:n.trim()||i}:{summary:typeof n.summary=="string"&&n.summary.trim()?n.summary.trim():i,...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 tn(n){return{id:n.id,sessionId:n.sessionId,role:n.role,content:n.content,thinkingOutput:n.thinkingOutput,toolCalls:Ir(n.metadata),fallbackInfo:Pr(n.metadata),failureInfo:Lr(n.metadata),attachments:n.attachments,createdAt:n.createdAt}}function ea(n,r){if(n.some(c=>c.id===r.id))return n;const i=n.findIndex(c=>c.role==="user"&&c.id.startsWith("temp-")&&c.sessionId===r.sessionId&&c.content.trim()===r.content.trim());if(i<0)return[...n,r];const g=[...n];return g[i]=r,g}function _r(n,r){const i=s.useCallback(h=>h?`${et.CHAT_SESSIONS_PREFIX}${h}`:null,[]),g=s.useCallback((h,v)=>h&&v?`${et.CHAT_MESSAGES_PREFIX}${h}:${v}`:null,[]),c=s.useCallback(h=>{const v=i(h);return v?(qe(v,{maxAgeMs:_s})??[]).filter($=>!Qn($)):[]},[i]),[d,b]=s.useState(()=>c(n)),[p,o]=s.useState(null),[f,B]=s.useState(()=>c(n).length===0),[C,M]=s.useState([]),[N,F]=s.useState(!1),[E,A]=s.useState(!1),[W,k]=s.useState(""),[ae,G]=s.useState(""),[ue,R]=s.useState([]),[le,U]=s.useState([]),[X,_]=s.useState(""),[V,y]=s.useState(!1),{agentsMap:P}=es(n),j=s.useRef(null),q=s.useRef(null),S=s.useRef(!1),T=s.useRef([]),D=s.useRef(()=>!1),m=s.useRef(null),I=s.useRef(d),l=s.useRef(p),re=s.useRef(C),O=s.useRef(E);I.current=d,l.current=p,re.current=C,O.current=E,s.useEffect(()=>{T.current=le},[le]);const z=s.useRef(new Set),he=s.useRef(0),pe=s.useRef(n);pe.current!==n&&(jt({view:"useChat",trigger:"project-context-change",projectId:n,replayAttempted:!1,detail:{previousProjectId:pe.current??null}}),pe.current=n,he.current++);const te=s.useCallback(async()=>{I.current.length===0&&B(!0);try{const v=[...(await $s(n)).sessions].sort(($,se)=>new Date(se.updatedAt).getTime()-new Date($.updatedAt).getTime());b(v);const x=i(n);x&&ie(x,v,{maxBytes:5e5})}catch{const h=c(n);if(I.current.length===0&&h.length===0){const v=i(n);v&&on(v)}}finally{B(!1)}},[i,n]);s.useEffect(()=>{const h=c(n);b(h),B(h.length===0)},[n,c]),s.useEffect(()=>{te()},[te,n]);const ve=s.useRef(()=>{}),ye=s.useRef(!1);s.useEffect(()=>{ye.current=!1,q.current=null},[n]),s.useEffect(()=>{if(f||ye.current||l.current)return;const h=vt(Un,n);if(!h){ye.current=!0;return}const v=d.find(x=>x.id===h);if(v){ye.current=!0,ve.current(h,v);return}ye.current=!0},[f,d,n]);const Ke=s.useCallback((h,v)=>{const x=g(h,v);return x?qe(x,{maxAgeMs:_s})??[]:[]},[g]),Ge=s.useCallback((h,v)=>{const x=Ke(n,h);return x.length>0?(M(x),F(!1),!0):(v?.clearOnMiss!==!1&&M([]),!1)},[n,Ke]),we=s.useCallback(async(h,v)=>{const x=typeof v?.offset=="number"&&v.offset>0||typeof v?.before=="string",$=g(n,h),se=x?[]:Ke(n,h),H=se.length>0;!x&&H?(M(se),F(!1)):F(!0);try{const Q=await Os(h,{limit:50,order:"desc",...v},n),Y=Q.messages.slice().reverse().map(tn),K=l.current?.id===h||v?.commitForStreamingAttach===!0&&q.current?.sessionId===h;x?K&&(M(oe=>[...Y,...oe]),y(Q.messages.length>=50)):K&&(M(Y),y(Q.messages.length>=50),$&&ie($,Y,{maxBytes:5e5}))}catch{!x&&re.current.length===0&&H&&(M(se),F(!1))}finally{F(!1)}},[g,n,Ke]),Fe=s.useCallback(()=>{m.current?.(),m.current=null,T.current=[],U([]),k(""),G(""),R([]),A(!1)},[]),Dt=s.useCallback(h=>{const v=l.current?.id;if(typeof h=="number"){const x=T.current.filter(($,se)=>se!==h);T.current=x,U(x),Hn(v,x);return}en(v),T.current=[],U([])},[]),fe=s.useCallback(()=>{const[h,...v]=T.current,x=h?.trim();if(!x)return;const $=l.current?.id;T.current=v,U(v),Hn($,v),wt.current(x)},[]),Qe=s.useCallback(async(h,v)=>{try{const{session:x}=await Et(h,n);if(l.current?.id!==h||T.current.length===0)return;if(x.isGenerating||x.inFlightGeneration){D.current(h,x.inFlightGeneration,{silent:v?.silent,priorThreadLoadAlreadyStarted:!0});return}fe()}catch{}},[fe,n]),me=s.useCallback((h,v,x)=>{if(j.current||!h)return!0;S.current=!1;const $=re.current,se=$.length===0||$[0]?.sessionId!==h;q.current={sessionId:h,replayFromEventId:typeof v?.replayFromEventId=="number"?v.replayFromEventId:null},se&&!x?.priorThreadLoadAlreadyStarted&&(Ge(h,{clearOnMiss:!1}),we(h,{commitForStreamingAttach:!0})),v&&(k(v.streamingText),G(v.streamingThinking),R(v.toolCalls)),A(!0);const{handlers:H}=Ys({sessionId:h,tempUserMessageId:"",initialText:v?.streamingText,initialThinking:v?.streamingThinking,initialToolCalls:v?.toolCalls,setStreamingText:k,setStreamingThinking:G,setStreamingToolCalls:R,cancelStreamingFlushesRef:m,addToast:x?.silent?void 0:r,onFallbackSession:(Y,K)=>{const oe=Js(Y.fallbackModel);b(J=>J.map(ee=>ee.id===K?{...ee,...oe}:ee)),o(J=>J&&J.id===K?{...J,...oe}:J)},onDone:()=>{k(""),G(""),R([]),A(!1),O.current=!1,j.current=null,q.current=null,we(h),fe()},onError:Y=>{k(""),G(""),R([]),A(!1),O.current=!1,j.current=null,q.current=null;const K=Zs(Y);x?.silent||r?.(K.summary,"error"),we(h),Qe(h,{silent:x?.silent})}});jt({view:"useChat",trigger:"sse-open",projectId:n,replayAttempted:typeof v?.replayFromEventId=="number",replayFromEventId:v?.replayFromEventId??null,lastEventId:v?.replayFromEventId??null});const Q=Ga(h,H,n,{...typeof v?.replayFromEventId=="number"?{lastEventId:v.replayFromEventId}:{}});return j.current=Q,!0},[r,fe,Qe,Ge,we,n]);D.current=me;const Te=s.useCallback((h,v)=>{const x=l.current?.id??null;if(h&&x===h&&!v)return;j.current&&(j.current.close(),j.current=null),q.current=null;const $=v??d.find(se=>se.id===h);o($||null),l.current=$||null,h&&Et(h,n).then(({session:se})=>{!se.isGenerating||!se.inFlightGeneration||o(H=>!H||H.id!==h?H:{...H,...se})}).catch(()=>{}),Fe(),y(!1),h?(Ge(h),we(h)):M([]),$?.isGenerating&&me($.id,$.inFlightGeneration,{priorThreadLoadAlreadyStarted:!0}),h?dn(Un,h,n):pt(Un,n)},[me,Ge,d,we,n,Fe]);ve.current=Te,s.useEffect(()=>{const h=p?.id;if(!h)return;const v=jr(h);if(v.length===0)return;T.current=v,U(v);let x=!1;return Et(h,n).then(({session:$})=>{if(!(x||l.current?.id!==h||T.current.length===0)){if($.isGenerating){j.current||me(h,$.inFlightGeneration);return}!O.current&&!j.current&&fe()}}).catch(()=>{}),()=>{x=!0}},[p?.id,me,fe,n]);const yt=s.useCallback(async h=>{const v=l.current?.id,x=await Va(h,n);j.current&&(j.current.close(),j.current=null),q.current=null;const $={id:x.session.id,title:x.session.title,agentId:x.session.agentId,status:x.session.status,modelProvider:x.session.modelProvider,modelId:x.session.modelId,createdAt:x.session.createdAt,updatedAt:x.session.updatedAt};return b(se=>se.some(H=>H.id===$.id)?se:[$,...se]),en(v),Fe(),Te($.id,$),$},[n,Fe,Te]),mn=s.useCallback(async h=>{en(h),await Bs(h,{status:"archived"},n),b(v=>v.filter(x=>x.id!==h)),p?.id===h&&(q.current=null,o(null),M([]))},[p,n]),nt=s.useCallback(async(h,v)=>{const x=v.trim()||null,$=d,se=p;b(H=>H.map(Q=>Q.id===h?{...Q,title:x}:Q)),o(H=>H?.id===h?{...H,title:x}:H);try{const Q=(await Bs(h,{title:x},n)).session;b(Y=>Y.map(K=>K.id===h?{...K,title:Q.title,updatedAt:Q.updatedAt}:K)),o(Y=>Y?.id===h?{...Y,title:Q.title,updatedAt:Q.updatedAt}:Y)}catch(H){throw b($),o(se),r?.("Failed to rename conversation","error"),H}},[p,r,n,d]),Ft=s.useCallback(async h=>{en(h),p?.id===h&&j.current&&(j.current.close(),j.current=null),p?.id===h&&(q.current=null),await Wa(h,n);const v=g(n,h);v&&on(v),b(x=>x.filter($=>$.id!==h)),p?.id===h&&(o(null),M([]))},[p,g,n]),je=s.useCallback(async()=>{if(!p||!V)return;const h=re.current[0]?.createdAt;h&&await we(p.id,{before:h})},[p,V,we]),It=s.useCallback(()=>{p&&(S.current=!0,m.current?.(),m.current=null,j.current?.close(),j.current=null,q.current=null,Xa(p.id,n).catch(()=>{}),A(!1),O.current=!1,k(""),G(""),R([]),fe())},[p,n,fe]),wt=s.useRef(()=>{}),xt=qa(),st=s.useCallback(async h=>{try{await te();const v=await Et(h,n);l.current?.id===h&&o(x=>!x||x.id!==h?x:{...x,...v.session}),v.session.isGenerating?(k(""),G(""),R([]),A(!0),O.current=!0,me(h,v.session.inFlightGeneration,{silent:!0})):(k(""),G(""),R([]),A(!1),O.current=!1,await we(h))}catch{}},[me,we,n,te]),at=s.useCallback((h,v)=>{if(!p)return;if(O.current){const H=h.trim();if(!H)return;const Q=[...T.current,H];T.current=Q,U(Q),Hn(p.id,Q);return}S.current=!1,j.current&&(j.current.close(),j.current=null),q.current=null;const x=`temp-${Date.now()}`,$={id:x,sessionId:p.id,role:"user",content:h,createdAt:new Date().toISOString()};M(H=>[...H,$]),k(""),G(""),R([]),A(!0),O.current=!0;const{handlers:se}=Ys({sessionId:p.id,tempUserMessageId:x,setStreamingText:k,setStreamingThinking:G,setStreamingToolCalls:R,cancelStreamingFlushesRef:m,addToast:r,onFallbackSession:(H,Q)=>{const Y=Js(H.fallbackModel);b(K=>K.map(oe=>oe.id===Q?{...oe,...Y}:oe)),o(K=>K&&K.id===Q?{...K,...Y}:K)},onDone:({messageId:H,message:Q,accumulated:Y})=>{const K=Q?{...tn(Q),...Y.text.length>0?{content:Y.text}:{}}:{id:H||`msg-${Date.now()}`,sessionId:p.id,role:"assistant",content:Y.text,thinkingOutput:Y.thinking,toolCalls:Y.toolCalls.length>0?Y.toolCalls:void 0,fallbackInfo:Y.fallbackInfo,createdAt:new Date().toISOString()};z.current.add(K.id),M(oe=>[...oe,K]),k(""),G(""),R([]),A(!1),O.current=!1,j.current=null,q.current=null,setTimeout(()=>{z.current.delete(K.id)},1e3),te(),fe()},onError:(H,Q,Y)=>{const K=Zs(H),oe=typeof H=="string"?H:K.summary,J=Ya(oe),ee=Y?.requestAccepted===!0;M(de=>{const ge=ee?de:de.filter(De=>De.id!==Q);return J?ge:[...ge,{id:`error-${Date.now()}`,sessionId:p.id,role:"assistant",content:K.summary,failureInfo:K,createdAt:new Date().toISOString()}]}),k(""),G(""),R([]),A(!1),O.current=!1,j.current=null,q.current=null,console.error("[useChat] Stream error:",H),J?(console.info("[useChat] Suppressed tab-suspension stream error:",H),p?.id&&(k(""),G(""),R([]),A(!0),O.current=!0,st(p.id))):(r?.(K.summary,"error"),ee&&Os(p.id,{limit:50,order:"desc"},n).then(de=>{if(l.current?.id!==p.id)return;const ge=de.messages.slice().reverse().map(tn);M(De=>ge.reduce(ea,De))}).catch(()=>{}),te()),S.current||fe()}});j.current=Qa(p.id,h,se,v,n)},[p,n,te,r,me,st,fe]);wt.current=at;const hn=X?d.filter(h=>h.title?.toLowerCase().includes(X.toLowerCase())||h.agentId.toLowerCase().includes(X.toLowerCase())):d;return s.useEffect(()=>{if(!p?.id||p.isGenerating!==!0||j.current)return;const h=typeof p.inFlightGeneration?.replayFromEventId=="number"?p.inFlightGeneration.replayFromEventId:null,v=q.current;v?.sessionId===p.id&&v.replayFromEventId===h||me(p.id,p.inFlightGeneration,{silent:!0})},[p?.id,p?.isGenerating,p?.inFlightGeneration,me]),s.useEffect(()=>{if(!l.current?.isGenerating||(j.current||me(l.current.id,l.current.inFlightGeneration),!O.current||j.current||!l.current))return;const h=setInterval(async()=>{if(!O.current||j.current||!l.current){clearInterval(h);return}try{(await $s(n)).sessions.find($=>$.id===l.current?.id)?.isGenerating||(clearInterval(h),await we(l.current.id),k(""),G(""),R([]),A(!1),O.current=!1,fe())}catch{}},3e3);return()=>clearInterval(h)},[me,we,n,p,fe]),s.useEffect(()=>xt.onBecameVisible(()=>{const v=l.current;if(!v||j.current)return;const x=he.current;Et(v.id,n).then($=>{if(!(he.current!==x||j.current)){if($.session.isGenerating){k(""),G(""),R([]),A(!0),O.current=!0,me(v.id,$.session.inFlightGeneration,{silent:!0});return}O.current&&(k(""),G(""),R([]),A(!1),O.current=!1,fe(),we(v.id))}}).catch(()=>{})}),[me,we,n,xt,fe]),s.useEffect(()=>{const h=he.current,v=n?`?projectId=${encodeURIComponent(n)}`:"",x=()=>he.current!==h,$=oe=>{if(x())return;const J=JSON.parse(oe.data);if(Qn(J)){Fr(J)||te();return}b(ee=>ee.some(de=>de.id===J.id)?ee:[J,...ee])},se=oe=>{if(x())return;const J=JSON.parse(oe.data);b(ee=>[...ee.map(ge=>ge.id===J.id?J:ge)]),l.current?.id===J.id&&(o(J),J.isGenerating&&!j.current&&me(J.id,J.inFlightGeneration))},H=oe=>{if(x())return;const{id:J}=JSON.parse(oe.data);b(de=>de.filter(ge=>ge.id!==J));const ee=g(n,J);ee&&on(ee),l.current?.id===J&&(o(null),M([]))},Q=oe=>{if(x())return;const J=JSON.parse(oe.data),ee=tn(J);if(I.current.some(de=>de.id===ee.sessionId)||te(),!z.current.has(ee.id)){if(l.current?.id===ee.sessionId&&O.current&&!j.current&&ee.role==="assistant"){M(de=>de.some(ge=>ge.id===ee.id)?de:[...de,ee]),k(""),G(""),R([]),A(!1),O.current=!1,fe();return}l.current?.id===ee.sessionId&&!O.current&&M(de=>de.some(ge=>ge.id===ee.id)?de:ee.role==="user"?ea(de,ee):[...de,ee])}},Y=oe=>{if(x())return;const{id:J}=JSON.parse(oe.data);M(ee=>ee.filter(de=>de.id!==J))};return pa(`/api/events${v}`,{events:{"chat:session:created":$,"chat:session:updated":se,"chat:session:deleted":H,"chat:message:added":Q,"chat:message:deleted":Y}})},[me,g,n,fe,te]),s.useEffect(()=>()=>{j.current&&(j.current.close(),j.current=null),q.current=null},[]),{sessions:d,activeSession:p,sessionsLoading:f,messages:C,messagesLoading:N,isStreaming:E,streamingText:W,streamingThinking:ae,streamingToolCalls:ue,pendingMessages:le,selectSession:Te,createSession:yt,archiveSession:mn,renameSession:nt,deleteSession:Ft,sendMessage:at,stopStreaming:It,clearPendingMessage:Dt,loadMoreMessages:je,hasMoreMessages:V,searchQuery:X,setSearchQuery:_,filteredSessions:hn,refreshSessions:te,agentsMap:P}}function nn(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}function $r(){try{typeof import.meta<"u"}catch{}try{if(typeof localStorage<"u")return localStorage.getItem("kb-debug-room-open")==="1"}catch{}return!1}function Kn(n,r){const i=$r(),g=r?.warm===!0,c=nn(),d=new Map;let b=!1,p=!1;return{mark(f){b||p||!i||d.has(f)||d.set(f,nn())},complete:f=>{if(!i||b||p){b=!0;return}b=!0,d.set("complete",nn());const B=Array.from(d.entries()).sort((F,E)=>F[1]-E[1]);let C=c;const M={};for(const[F,E]of B)M[F]=Math.max(0,E-C),C=E;const N=Math.max(0,nn()-c);try{console.debug("[room-open]",{roomId:n,warm:g,totalMs:N,phases:M,...f??{}})}catch{}},cancel(){p=!0,b=!0}}}const Xe="fusion:chat-active-room";class ya extends Error{roomId;constructor(r,i){super(r),this.name="RoomMessageDeliveredButReplyFailedError",this.roomId=i}}function Yn(n){return[...n].sort((r,i)=>new Date(i.updatedAt).getTime()-new Date(r.updatedAt).getTime())}function ft(n,r){const i=n.findIndex(c=>c.id===r.id);if(i===-1)return Yn([r,...n]);const g=[...n];return g[i]=r,Yn(g)}function Ue(n){try{return JSON.parse(n.data)}catch{return null}}function Or(n,r,i){return{id:`temp-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,roomId:n,role:"user",content:r,thinkingOutput:null,metadata:null,senderAgentId:null,mentions:[],...i?.length?{attachments:i}:{},createdAt:new Date().toISOString()}}function ta(n,r,i){if(n.some(c=>c.id===r.id))return n;const g=i?n.findIndex(c=>c.id===i):-1;if(g>=0){const c=[...n];return c[g]=r,c}if(r.role==="user"){const c=n.findIndex(d=>d.role==="user"&&d.id.startsWith("temp-")&&d.content.trim()===r.content.trim());if(c>=0){const d=[...n];return d[c]=r,d}}return[...n,r]}function Br(n,r){const{t:i}=tt("app"),g=`${et.CHAT_ROOMS}:${n??"global"}`,c=`${et.ACTIVE_CHAT_ROOM_ID}:${n??"global"}`,d=s.useCallback(S=>`${et.CHAT_ROOM_MESSAGES_PREFIX}${n??"global"}:${S}`,[n]),b=s.useCallback(S=>`${et.CHAT_ROOM_MEMBERS_PREFIX}${n??"global"}:${S}`,[n]),[p,o]=s.useState(()=>{const S=qe(g,{maxAgeMs:Xn});return Array.isArray(S)?S:[]}),[f,B]=s.useState(()=>p.length===0),[C,M]=s.useState(null),[N,F]=s.useState(()=>{const S=qe(c,{maxAgeMs:zs});return S?p.find(T=>T.id===S)??null:null}),[E,A]=s.useState([]),[W,k]=s.useState([]),[ae,G]=s.useState(!1),ue=s.useRef(p),R=s.useRef(N),le=s.useRef(0),U=s.useRef(n);ue.current=p,R.current=N,U.current!==n&&(U.current=n,le.current+=1);const X=s.useCallback(async S=>{if(!S){A([]),k([]),G(!1);return}const T=Kn(S.id,{warm:!1});T.mark("select");const D=qe(d(S.id),{maxAgeMs:Ja}),m=qe(b(S.id),{maxAgeMs:Xn}),I=Array.isArray(D)&&D.length>0,l=Array.isArray(m)&&m.length>0;I||l?(T.mark("cache-hit"),I&&(k(D),T.mark("hydrate")),l&&A(m),G(!1)):(k([]),G(!0));try{const[re,O]=await Promise.all([Za(S.id,n),$n(S.id,{limit:100,order:"desc"},n)]);T.mark("members-fetch"),T.mark("messages-fetch"),ie(b(S.id),re.members,{maxBytes:5e5}),ie(d(S.id),O.messages,{maxBytes:5e5}),R.current?.id===S.id&&(A(re.members),k(O.messages),T.mark("hydrate"))}catch{!I&&!l&&(A([]),k([]))}finally{G(!1),T.complete({warm:I,membersCached:l})}},[b,d,n]),_=s.useCallback(async()=>{ue.current.length===0&&B(!0);try{const S=await er({},n),T=Yn(S.rooms);o(T),ie(g,T,{maxBytes:5e5}),M(null);const D=qe(c,{maxAgeMs:zs})??vt(Xe,n);if(D){const m=T.find(I=>I.id===D)??null;m?(F(m),X(m)):(pt(Xe,n),ie(c,"",{maxBytes:5e5}))}}catch(S){const T=S instanceof Error?S.message:i("chatRooms.error.failedToLoad","Failed to load chat rooms");M(T),r?.(T,"error")}finally{B(!1)}},[c,r,X,n,g]),V=s.useCallback(S=>{if(!S){R.current=null,F(null),pt(Xe,n),ie(c,"",{maxBytes:5e5}),X(null);return}const T=ue.current.find(D=>D.id===S)??null;R.current=T,F(T),T&&(dn(Xe,T.id,n),ie(c,T.id,{maxBytes:5e5}),X(T))},[c,X,n]),y=s.useCallback(async S=>{const D=(await tr({name:S.name,memberAgentIds:S.memberAgentIds},n)).room;return o(m=>ft(m,D)),R.current=D,F(D),dn(Xe,D.id,n),ie(c,D.id,{maxBytes:5e5}),await X(D),D},[c,X,n]),P=s.useCallback(async S=>{await nr(S,n),o(T=>T.filter(D=>D.id!==S)),ie(d(S),[],{maxBytes:5e5}),ie(b(S),[],{maxBytes:5e5}),R.current?.id===S&&(R.current=null,F(null),A([]),k([]),pt(Xe,n),ie(c,"",{maxBytes:5e5}))},[c,b,d,n]),j=s.useCallback(async(S,T)=>{const D=R.current,m=D?.id;if(!m)throw new Error(i("chatRooms.error.selectRoomFirst","Select a room before sending a message"));const I=Kn(m,{warm:!1}),l=T?.files?.map(z=>({id:`upload-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,filename:z.name,originalName:z.name,mimeType:z.type||"application/octet-stream",size:z.size,createdAt:new Date().toISOString()})),re=Or(m,S,l?.length?l:T?.attachments);R.current?.id===m&&k(z=>{const he=[...z,re];return ie(d(m),he,{maxBytes:5e5}),he});let O=!1;try{const z=[];if(T?.files?.length)for(const ve of T.files)try{const ye=await sr(m,ve,n);z.push(ye.attachment)}catch{throw new Error(i("chatRooms.error.failedToUpload","Failed to upload attachment: {{filename}}",{filename:ve.name}))}const he=[...T?.attachments??[],...z],pe=await ar(m,{content:S,...he.length?{attachments:he}:{}},n);O=!0,pe.message?.createdAt&&D&&o(ve=>ft(ve,{...D,updatedAt:pe.message.createdAt})),R.current?.id===m&&k(ve=>{const ye=ta(ve,pe.message,re.id);return ie(d(m),ye,{maxBytes:5e5}),ye});const te=await $n(m,{limit:100,order:"desc"},n);if(ie(d(m),te.messages,{maxBytes:5e5}),R.current?.id!==m)return;k(te.messages),I.mark("hydrate")}catch(z){let he=null;try{const te=await $n(m,{limit:100,order:"desc"},n);he=te.messages,ie(d(m),te.messages,{maxBytes:5e5}),R.current?.id===m&&(k(te.messages),I.mark("hydrate"))}catch{!O&&R.current?.id===m&&k(te=>{const ve=te.filter(ye=>ye.id!==re.id);return ie(d(m),ve,{maxBytes:5e5}),ve})}const pe=he?.some(te=>te.role==="user"&&te.content.trim()===re.content.trim());if(O||pe){const te=z instanceof Error&&z.message.trim()?z.message:i("chatRooms.error.deliveredButRefreshFailed","Message delivered, but failed to refresh room replies");throw new ya(te,m)}throw z}finally{I.complete({source:"send-room-message"})}},[d,n]),q=s.useCallback(async S=>{!S||!ue.current.some(T=>T.id===S)||(await rr(S,n),ie(d(S),[],{maxBytes:5e5}),R.current?.id===S&&k([]))},[d,n]);return s.useEffect(()=>{_()},[_]),s.useEffect(()=>{const S=le.current,T=n?`/api/events?projectId=${encodeURIComponent(n)}`:"/api/events";return pa(T,{onReconnect:()=>{jt({view:"useChatRooms",trigger:"sse-reconnect",projectId:n,replayAttempted:!1});const D=R.current?.id;if(D){const m=Kn(D,{warm:!0});m.mark("sse-reconnect-refresh"),_().finally(()=>m.complete({source:"sse-reconnect"}));return}_()},events:{"chat:room:created":D=>{if(le.current!==S)return;const m=Ue(D);m&&o(I=>ft(I,m))},"chat:room:updated":D=>{if(le.current!==S)return;const m=Ue(D);m&&(o(I=>ft(I,m)),R.current?.id===m.id&&F(m))},"chat:room:deleted":D=>{if(le.current!==S)return;const m=Ue(D);m?.id&&(o(I=>I.filter(l=>l.id!==m.id)),ie(d(m.id),[],{maxBytes:5e5}),ie(b(m.id),[],{maxBytes:5e5}),R.current?.id===m.id&&(R.current=null,F(null),A([]),k([]),pt(Xe,n),ie(c,"",{maxBytes:5e5})))},"chat:room:member:added":D=>{if(le.current!==S)return;const m=Ue(D);!m||R.current?.id!==m.roomId||A(I=>{if(I.some(re=>re.agentId===m.agentId))return I;const l=[...I,m];return ie(b(m.roomId),l,{maxBytes:5e5}),l})},"chat:room:member:removed":D=>{if(le.current!==S)return;const m=Ue(D);!m||R.current?.id!==m.roomId||A(I=>{const l=I.filter(re=>re.agentId!==m.agentId);return ie(b(m.roomId),l,{maxBytes:5e5}),l})},"chat:room:message:added":D=>{if(le.current!==S)return;const m=Ue(D);m&&(o(I=>{const l=I.find(re=>re.id===m.roomId);return l?ft(I,{...l,updatedAt:m.createdAt}):I}),R.current?.id===m.roomId&&k(I=>{const l=ta(I,m);return l===I?I:(ie(d(m.roomId),l,{maxBytes:5e5}),l)}))},"chat:room:message:updated":D=>{if(le.current!==S)return;const m=Ue(D);!m||R.current?.id!==m.roomId||k(I=>{const l=I.map(re=>re.id===m.id?m:re);return ie(d(m.roomId),l,{maxBytes:5e5}),l})},"chat:room:message:deleted":D=>{if(le.current!==S)return;const m=Ue(D);m?.id&&k(I=>{const l=I.filter(O=>O.id!==m.id),re=R.current?.id;return re&&ie(d(re),l,{maxBytes:5e5}),l})},"chat:room:messages:cleared":D=>{if(le.current!==S)return;const m=Ue(D);m?.roomId&&(ie(d(m.roomId),[],{maxBytes:5e5}),R.current?.id===m.roomId&&k([]),o(I=>{const l=I.find(re=>re.id===m.roomId);return l?ft(I,{...l,updatedAt:new Date().toISOString()}):I}))}}})},[c,b,d,n,_]),s.useEffect(()=>{N&&(p.some(S=>S.id===N.id)||(R.current=null,F(null),A([]),k([]),pt(Xe,n),ie(c,"",{maxBytes:5e5})))},[N,c,n,p]),{rooms:p,roomsLoading:f,roomsError:C,activeRoom:N,activeRoomMembers:E,messages:W,messagesLoading:ae,selectRoom:V,createRoom:y,deleteRoom:P,sendRoomMessage:j,clearRoom:q,refreshRooms:_}}const Tt={direct:"fusion:chat-unread:direct",room:"fusion:chat-unread:rooms"},na=200;function Jn(n){if(!n)return null;const r=new Date(n).getTime();return Number.isFinite(r)?r:null}function wa(n){const r=Object.entries(n);if(r.length<=na)return n;const i=r.map(([g,c])=>({id:g,timestamp:c,value:Jn(c)??0})).sort((g,c)=>c.value-g.value).slice(0,na);return Object.fromEntries(i.map(({id:g,timestamp:c})=>[g,c]))}function sn(n){if(!n)return{};try{const r=JSON.parse(n);if(!r||typeof r!="object")return{};const i={};for(const[g,c]of Object.entries(r))typeof g=="string"&&typeof c=="string"&&(i[g]=c);return wa(i)}catch{return{}}}function zr(n){const[r,i]=s.useState(()=>{try{return sn(vt(Tt.direct,n))}catch{return{}}}),[g,c]=s.useState(()=>{try{return sn(vt(Tt.room,n))}catch{return{}}});s.useEffect(()=>{try{i(sn(vt(Tt.direct,n)))}catch{i({})}try{c(sn(vt(Tt.room,n)))}catch{c({})}},[n]);const d=s.useMemo(()=>({direct:r,room:g}),[r,g]),b=s.useCallback((C,M)=>{const N=wa(M);try{dn(Tt[C],JSON.stringify(N),n)}catch{}return N},[n]),p=s.useCallback((C,M)=>{if(C==="direct"){i(N=>b(C,M(N)));return}c(N=>b(C,M(N)))},[b]),o=s.useCallback((C,M,N)=>{const F=Jn(N);if(F===null)return!1;const E=d[C][M],A=Jn(E);return A===null?!0:F>A},[d]),f=s.useCallback((C,M,N)=>{if(!M)return;const F=N??new Date().toISOString();p(C,E=>({...E,[M]:F}))},[p]),B=s.useCallback((C,M)=>{M.length!==0&&p(C,N=>{const F={...N};for(const E of M)E.id&&(F[E.id]=E.lastActivityAt??new Date().toISOString());return F})},[p]);return{isUnread:o,markRead:f,markAllRead:B}}function sa(n){return n.trim().toLowerCase().replace(/[\s-]+/g,"_").replace(/_+/g,"_")}function xa(n,r){const i=r.trim();if(!i)return!0;const g=sa(i);return sa(n).includes(g)||n.toLowerCase().includes(i.toLowerCase())}function aa({agents:n,filter:r,highlightedIndex:i,visible:g,onSelect:c,position:d="below",roomMemberIds:b,roomName:p}){const{t:o}=tt("app"),f=s.useMemo(()=>n.filter(E=>xa(E.name,r)),[n,r]),B=!!b,C=B&&r.trim().length>0,M=s.useMemo(()=>B?f.filter(E=>b?.has(E.id)):f,[f,b,B]),N=s.useMemo(()=>B?f.filter(E=>!b?.has(E.id)):[],[f,b,B]),F=C?[...M,...N]:M;return g?t.jsx("div",{className:`agent-mention-popup agent-mention-popup--${d}`,"data-testid":"agent-mention-popup",role:"listbox","aria-label":o("agentMention.suggestionsLabel","Agent mention suggestions"),children:F.length===0?t.jsx("div",{className:"agent-mention-empty",children:o("agentMention.noAgentsFound","No agents found")}):t.jsxs(t.Fragment,{children:[B&&t.jsx("div",{className:"agent-mention-section-header","data-testid":"agent-mention-members-header",children:p?o("agentMention.membersOf","Members of #{{roomName}}",{roomName:p}):o("agentMention.roomMembers","Room members")}),M.map((E,A)=>t.jsxs("button",{type:"button",className:`agent-mention-item${A===i?" agent-mention-item--highlighted":""}`,"data-testid":`agent-mention-item-${E.id}`,onMouseDown:W=>W.preventDefault(),onClick:()=>c(E),role:"option","aria-selected":A===i,children:[t.jsx(un,{agent:E,size:20}),B&&t.jsx("span",{className:"status-dot agent-mention-member-dot","aria-label":o("agentMention.roomMemberBadge","Room member")}),t.jsx("span",{className:"agent-mention-name",children:E.name}),t.jsx("span",{className:"agent-mention-role",children:E.role})]},E.id)),B&&!C&&N.length>0&&t.jsx("div",{className:"agent-mention-hint","data-testid":"agent-mention-other-hint",children:o("agentMention.typeToSearch","Type to search other agents")}),B&&C&&N.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"agent-mention-section-header","data-testid":"agent-mention-others-header",children:o("agentMention.otherAgents","Other agents")}),N.map((E,A)=>{const W=M.length+A;return t.jsxs("button",{type:"button",className:`agent-mention-item${W===i?" agent-mention-item--highlighted":""}`,"data-testid":`agent-mention-item-${E.id}`,onMouseDown:k=>k.preventDefault(),onClick:()=>c(E),role:"option","aria-selected":W===i,children:[t.jsx(un,{agent:E,size:20}),t.jsx("span",{className:"agent-mention-name",children:E.name}),t.jsx("span",{className:"agent-mention-role",children:E.role})]},E.id)})]})]})}):null}function Hr(n,r){return n+r}function Ur({visible:n,position:r,tasks:i,files:g,selectedIndex:c,onSelectTask:d,onSelectFile:b,loading:p}){const{t:o}=tt("app");if(!n)return null;const f=i.length>0,B=g.length>0;return t.jsxs("div",{className:"file-mention-popup",style:{top:r.top,left:r.left},"data-testid":"file-mention-popup",onMouseDown:C=>{C.preventDefault()},children:[p&&t.jsx("div",{className:"file-mention-popup-loading","data-testid":"file-mention-loading",children:t.jsx("span",{className:"spinner"})}),!p&&!f&&!B&&t.jsx("div",{className:"file-mention-popup-empty","data-testid":"file-mention-empty",children:o("fileMention.empty","No tasks or files found")}),!p&&(f||B)&&t.jsxs("div",{className:"file-mention-popup-groups",children:[f&&t.jsxs("div",{className:"file-mention-popup-group",children:[t.jsx("div",{className:"file-mention-popup-group-header",children:o("fileMention.taskHeader","Tasks")}),t.jsx("ul",{className:"file-mention-popup-list",role:"listbox","aria-label":o("fileMention.taskMatches","Task matches"),children:i.map((C,M)=>{const N=M;return t.jsxs("li",{className:`file-mention-popup-item${N===c?" file-mention-popup-item--selected":""}`,onClick:()=>d(C),role:"option","aria-selected":N===c,"data-testid":`task-mention-item-${N}`,children:[t.jsx("span",{className:"file-mention-popup-icon",children:t.jsx(va,{})}),t.jsxs("div",{className:"file-mention-popup-info",children:[t.jsxs("div",{className:"file-mention-popup-task-row",children:[t.jsx("span",{className:"file-mention-popup-task-id",children:C.id}),t.jsx("span",{className:`file-mention-popup-column-badge file-mention-popup-column-badge--${C.column}`,children:C.column})]}),t.jsx("span",{className:"file-mention-popup-item-path",children:C.title})]})]},C.id)})})]}),B&&t.jsxs("div",{className:"file-mention-popup-group",children:[t.jsx("div",{className:"file-mention-popup-group-header",children:o("fileMention.fileHeader","Files")}),t.jsx("ul",{className:"file-mention-popup-list",role:"listbox","aria-label":o("fileMention.fileMatches","File matches"),children:g.map((C,M)=>{const N=Hr(i.length,M),F=or(C.path);return t.jsxs("li",{className:`file-mention-popup-item${N===c?" file-mention-popup-item--selected":""}`,onClick:()=>b(C),role:"option","aria-selected":N===c,"data-testid":`file-mention-item-${N}`,children:[t.jsx("span",{className:"file-mention-popup-icon",children:t.jsx(ir,{})}),t.jsxs("div",{className:"file-mention-popup-info",children:[t.jsx("span",{className:"file-mention-popup-item-name",children:C.name}),F&&t.jsx("span",{className:"file-mention-popup-item-path",children:F})]})]},C.path)})})]})]})]})}function Kr(n,r=[],i){const g=n.trim().replace(/^#/,""),c=(b,p)=>i?i(b,p):p;if(!g)return{ok:!1,error:c("createRoom.nameRequired","Room name is required.")};if(/[A-Z]/.test(g))return{ok:!1,error:c("createRoom.lowercase","Use lowercase letters only.")};const d=g.toLowerCase();return d.length>80?{ok:!1,error:c("createRoom.maxLength","Room names can be at most 80 characters.")}:/^[a-z0-9_-]+$/.test(d)?/^[-_]|[-_]$/.test(d)?{ok:!1,error:c("createRoom.noEdgeChars","Room names cannot start or end with a hyphen or underscore.")}:r.some(b=>b.toLowerCase()===d)?{ok:!1,error:c("createRoom.duplicate","A room with this name already exists.")}:{ok:!0,name:d}:{ok:!1,error:c("createRoom.validChars","Use lowercase letters, numbers, hyphens, or underscores only.")}}function Gr({isOpen:n,onClose:r,onCreate:i,projectId:g,existingRoomNames:c=[]}){const{t:d}=tt("app"),[b,p]=s.useState(""),[o,f]=s.useState([]),[B,C]=s.useState(""),[M,N]=s.useState([]),[F,E]=s.useState(!1),[A,W]=s.useState(null),[k,ae]=s.useState(!1),G=s.useRef(null),ue=s.useRef(null);s.useEffect(()=>{n&&(ue.current=document.activeElement instanceof HTMLElement?document.activeElement:null,E(!0),W(null),cr(void 0,g).then(y=>f(y)).catch(()=>{f([]),W(d("createRoom.failedLoadAgents","Failed to load agents."))}).finally(()=>E(!1)))},[n,g]),s.useEffect(()=>{if(!n){p(""),C(""),N([]),W(null),ae(!1);return}const y=window.requestAnimationFrame(()=>G.current?.focus());return()=>window.cancelAnimationFrame(y)},[n]),s.useEffect(()=>{if(!n)return;const y=P=>{P.key==="Escape"&&r()};return document.addEventListener("keydown",y),()=>document.removeEventListener("keydown",y)},[n,r]),s.useEffect(()=>{n||ue.current?.focus()},[n]);const R=s.useMemo(()=>Kr(b,c,d),[b,c,d]),le=s.useMemo(()=>{const y=B.trim().toLowerCase();return y?o.filter(P=>P.name.toLowerCase().includes(y)):o},[o,B]),U=s.useMemo(()=>o.filter(y=>M.includes(y.id)),[o,M]),X=R.ok&&M.length>0&&!k&&!F;if(!n)return null;const _=y=>{k||N(P=>P.includes(y)?P.filter(j=>j!==y):[...P,y])},V=async()=>{if(!R.ok){W(R.error);return}if(M.length===0){W(d("createRoom.selectMember","Select at least one member."));return}W(null),ae(!0);try{await i({name:R.name,displayName:`#${R.name}`,memberAgentIds:M}),r()}catch(y){W(y instanceof Error?y.message:d("createRoom.failedCreate","Failed to create room."))}finally{ae(!1)}};return Ua.createPortal(t.jsx("div",{className:"modal-overlay open",onClick:y=>y.target===y.currentTarget&&r(),children:t.jsxs("div",{className:"modal modal-lg create-room-modal",role:"dialog","aria-modal":"true","aria-label":d("createRoom.title","Create room"),onClick:y=>y.stopPropagation(),children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:d("createRoom.title","Create room")}),t.jsx("button",{type:"button",className:"modal-close","aria-label":d("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:d("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:G,id:"create-room-name",className:"input",value:b,disabled:k,onChange:y=>{const P=y.target.value.replace(/^#/,"").replace(/\s+/g,"-").toLowerCase();p(P)}})]}),!R.ok&&t.jsx("div",{className:"form-error",children:R.error})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"create-room-member-search",children:d("createRoom.members","Members")}),t.jsx("input",{id:"create-room-member-search",className:"input",placeholder:d("createRoom.searchAgents","Search agents"),value:B,disabled:k,onChange:y=>C(y.target.value)})]}),U.length>0&&t.jsx("div",{className:"create-room-modal-selected","data-testid":"create-room-selected-chips",children:U.map(y=>t.jsxs("button",{type:"button",className:"btn btn-sm create-room-modal-chip",onClick:()=>_(y.id),disabled:k,children:[y.name," ×"]},y.id))}),t.jsx("div",{className:"create-room-modal-member-list","data-testid":"create-room-member-list",children:F?t.jsx("div",{className:"create-room-modal-empty",children:t.jsx(lr,{label:d("createRoom.loadingAgents","Loading agents...")})}):le.length===0?t.jsx("div",{className:"create-room-modal-empty",children:o.length===0?d("createRoom.noAgents","No agents in this project yet."):d("createRoom.noMatch","No agents match your search.")}):le.map(y=>{const P=M.includes(y.id);return t.jsxs("button",{type:"button",className:`create-room-modal-member-row${P?" create-room-modal-member-row--selected":""}`,onClick:()=>_(y.id),disabled:k,children:[t.jsx(un,{agent:y,size:20}),t.jsx("span",{children:y.name}),t.jsx("span",{className:"create-room-modal-member-role",children:y.role})]},y.id)})}),A&&t.jsx("div",{className:"form-group",children:t.jsx("div",{className:"form-error",children:A})}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:r,disabled:k,children:d("actions.cancel","Cancel")}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void V(),disabled:!X,children:k?d("createRoom.creating","Creating..."):d("createRoom.create","Create room")})]})]})}),document.body)}function Vr({cliSessionId:n,tier:r,projectId:i,renderTranscript:g,renderComposer:c,queuedCount:d=0,terminalProps:b}){const{t:p}=tt("app"),o=r==="generic",[f,B]=s.useState(o?"terminal":"transcript");if(o)return t.jsx("div",{className:"cli-chat-surface cli-chat-surface--generic","data-tier":"generic",children:t.jsx(Qs,{sessionId:n,projectId:i,...b})});const C=f==="terminal";return t.jsxs("div",{className:"cli-chat-surface","data-tier":r,"data-view":f,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":!C,className:`cli-chat-surface__tab${C?"":" is-active"}`,onClick:()=>B("transcript"),children:[t.jsx(cn,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:p("cliChat.transcriptTab","Transcript")})]}),t.jsxs("button",{type:"button",role:"tab","aria-selected":C,className:`cli-chat-surface__tab${C?" is-active":""}`,onClick:()=>B("terminal"),children:[t.jsx(dr,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:p("cliChat.terminalTab","Terminal")})]})]}),t.jsx("div",{className:"cli-chat-surface__body",children:C?t.jsx(Qs,{sessionId:n,projectId:i,...b}):g()}),!C&&t.jsxs("div",{className:"cli-chat-surface__composer",children:[d>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:d})}),c()]})]})}const Wr=200,Xr=8,qr=8;function ra(){return new DOMException("The operation was aborted.","AbortError")}function oa(n,r){return r.aborted?Promise.reject(ra()):new Promise((i,g)=>{const c=()=>g(ra());r.addEventListener("abort",c,{once:!0}),n.then(d=>{r.removeEventListener("abort",c),i(d)},d=>{r.removeEventListener("abort",c),g(d)})})}function ia(n,r,i){const g=n.slice(0,r),c=n.slice(r+1),d=c.match(/[\s]|$/),b=d?d.index??c.length:c.length,p=c.slice(b);return`${g}${i}${p}`}function Qr(n={}){const{projectId:r,workspace:i="project"}=n,[g,c]=s.useState(!1),[d,b]=s.useState(""),[p,o]=s.useState(-1),[f,B]=s.useState([]),[C,M]=s.useState([]),[N,F]=s.useState(!1),[E,A]=s.useState(0),W=s.useRef(null),k=s.useRef(null),ae=[...f.map(_=>({kind:"task",task:_})),...C.map(_=>({kind:"file",file:_}))];s.useEffect(()=>()=>{W.current&&clearTimeout(W.current),k.current?.abort()},[]);const G=s.useCallback((_,V)=>{if(V<0||V>_.length){c(!1);return}const y=P=>/[a-zA-Z0-9/_.-]/.test(P);for(let P=V-1;P>=0;P--){if(_[P]==="#"){if(P===0){const q=_.slice(P+1,V);o(P),b(q),A(0),c(!0);return}const j=_[P-1];if(/[\s,.;:!?'"()[\]{}]/.test(j)){const q=_.slice(P+1,V);o(P),b(q),A(0),c(!0);return}c(!1);return}if(!y(_[P])){c(!1);return}}c(!1)},[]),ue=s.useCallback(()=>{k.current?.abort(),c(!1),b(""),o(-1),B([]),M([]),A(0),F(!1)},[]),R=s.useCallback(async _=>{if(!_.trim()){B([]),M([]),F(!1);return}k.current?.abort();const V=new AbortController;k.current=V;try{F(!0);const[y,P]=await Promise.allSettled([oa(ur(20,0,r,_),V.signal),oa(mr(_,i,r),V.signal)]);if(V.signal.aborted)return;const j=y.status==="fulfilled"?y.value.slice(0,Xr).map(S=>({id:S.id,title:S.title??"",column:S.column})):[],q=P.status==="fulfilled"?P.value.files.slice(0,qr):[];B(j),M(q),A(0)}catch(y){y.name!=="AbortError"&&(B([]),M([]))}finally{V.signal.aborted||F(!1)}},[i,r]);s.useEffect(()=>{if(g)return W.current&&clearTimeout(W.current),W.current=setTimeout(()=>{R(d)},Wr),()=>{W.current&&clearTimeout(W.current)}},[d,g,R]);const le=s.useCallback((_,V)=>!g||p<0?V:ia(V,p,`#${_.id}`),[g,p]),U=s.useCallback((_,V)=>!g||p<0?V:ia(V,p,`#${_.path}`),[g,p]),X=s.useCallback((_,V)=>{if(!g||ae.length===0)return!1;switch(_.key){case"ArrowDown":return _.preventDefault(),A(y=>Math.min(y+1,ae.length-1)),!0;case"ArrowUp":return _.preventDefault(),A(y=>Math.max(y-1,0)),!0;case"Enter":case"Tab":return ae[E]?(_.preventDefault(),!0):!1;case"Escape":return _.preventDefault(),ue(),!0;default:return!1}},[g,ae,E,ue]);return{mentionActive:g,tasks:f,files:C,combinedItems:ae,loading:N,mentionQuery:d,selectedIndex:E,setSelectedIndex:A,detectMention:G,selectTask:le,selectFile:U,dismissMention:ue,handleKeyDown:X}}const Gn=new Map,ln=new Map;function ns(n){return n??"global"}function Zn(n){return`${et.DISCOVERED_SKILLS_PREFIX}${ns(n)}`}function gt(n){return qe(Zn(n),{maxAgeMs:Xn})}function Yr(n,r){for(const i of ln.get(n)??[])i(r)}async function Jr(n){const r=ns(n),i=Gn.get(r);if(i)return i;const g=hr(n).finally(()=>{Gn.delete(r)});return Gn.set(r,g),g}function Zr(n){const[r,i]=s.useState(()=>gt(n)??[]),[g,c]=s.useState(()=>gt(n)===null),d=s.useRef(gt(n)!==null),b=ns(n);s.useEffect(()=>{const f=gt(n)??[];i(f),c(gt(n)===null),d.current=gt(n)!==null},[n]),s.useEffect(()=>{const f=ln.get(b)??new Set;return f.add(i),ln.set(b,f),()=>{f.delete(i),f.size===0&&ln.delete(b)}},[b]);const p=s.useCallback(async()=>{try{const f=await Jr(n);d.current=!0,ie(Zn(n),f,{maxBytes:5e5}),Yr(b,f)}catch{d.current||on(Zn(n))}finally{c(!1)}},[n,b]);s.useEffect(()=>{p()},[p]);const o=s.useCallback(async()=>{c(!0),await p()},[p]);return{skills:r,loading:g,refresh:o}}function eo(n,r){const i=n.reduce((g,c)=>g+(c.content?.length??0),0)+(r?.length??0);return Math.ceil(i/4)}function ca(n){if(!Number.isFinite(n)||n<=0)return"0";if(n<1e3)return String(Math.round(n));const r=n/1e3;return r<10?`~${Number(r.toFixed(1))}k`:`${Math.round(r)}k`}const ss=640,to=200,la="__SKIP__";let Vn=!1;function no(n,r=ss){return n>r?"auto":"hidden"}function so(n,r=ss){return Math.max(40,Math.min(n,r))}function ao(n,r){const i=new Date(n),c=new Date().getTime()-i.getTime(),d=Math.floor(c/1e3),b=Math.floor(d/60),p=Math.floor(b/60),o=Math.floor(p/24);return d<60?r("chat.relativeTimeJustNow","just now"):b<60?r("chat.relativeTimeMinutes","{{count}}m ago",{count:b}):p<24?r("chat.relativeTimeHours","{{count}}h ago",{count:p}):o<7?r("chat.relativeTimeDays","{{count}}d ago",{count:o}):i.toLocaleDateString()}const bt="__fn_agent__",ro=280,an=180,rn=500,da="fusion:chat-sidebar-width",Wn="fusion:chat-scope",oo="fusion:chat-draft:";function ua(n,r){return n.slice(r+1).find(i=>i.role==="user")?.content}function ma(n,r){return r?`${oo}${n}:${r}`:null}function ha(n){if(!n)return"";try{return localStorage.getItem(n)??""}catch{return""}}const io=["image/png","image/jpeg","image/gif","image/webp","text/plain","application/json","text/yaml","text/markdown","text/csv","application/xml","text/x-log"];function fa(n){const r=/(^|[\s])\/([^\s]*)$/.exec(n);if(!r)return null;const i=r[1]??"",g=r[2]??"",c=r.index+i.length;return{filter:g,start:c,end:n.length}}function co(n,r){const i=n.slice(0,r),g=/(^|[\s\n])@([\w-]*)$/.exec(i);if(!g)return null;const c=g[2]??"",d=i.length-c.length-1;return{filter:c,start:d,end:r}}function lo(n){const r=n?.runtimeConfig;if(!r||typeof r!="object")return null;const i=Reflect.get(r,"modelProvider"),g=Reflect.get(r,"modelId");return typeof i!="string"||i.trim().length===0||typeof g!="string"||g.trim().length===0?null:{provider:i,modelId:g}}function ga(n,r,i){if(n?.modelProvider&&n?.modelId)return{provider:n.modelProvider,modelId:n.modelId};const g=lo(r??void 0);return g||(i.provider&&i.modelId?{provider:i.provider,modelId:i.modelId}:null)}function uo({projectId:n,defaultModel:r,onClose:i,onCreate:g}){const{t:c}=tt("app"),[d,b]=s.useState("agent"),{agents:p,loading:o}=es(n),[f,B]=s.useState(""),{models:C,favoriteProviders:M,favoriteModels:N,loading:F,refresh:E}=ba(),A=r.provider&&r.modelId?`${r.provider}/${r.modelId}`:"",[W,k]=s.useState(A),[ae,G]=s.useState(M),[ue,R]=s.useState(N);s.useEffect(()=>{G(M)},[M]),s.useEffect(()=>{R(N)},[N]),s.useEffect(()=>{A&&k(y=>y||A)},[A]);const le=s.useCallback(async y=>{const P=ae,q=P.includes(y)?P.filter(S=>S!==y):[y,...P];G(q);try{await qs({favoriteProviders:q,favoriteModels:ue}),await E()}catch{G(P)}},[ae,ue,E]),U=s.useCallback(async y=>{const P=ue,q=P.includes(y)?P.filter(S=>S!==y):[y,...P];R(q);try{await qs({favoriteProviders:ae,favoriteModels:q}),await E()}catch{R(P)}},[ue,ae,E]),X=W||A,_=y=>{if(y.preventDefault(),d==="agent"){if(!f)return;g({agentId:f});return}if(!X)return;const P=X.indexOf("/");if(P<=0)return;const j=X.slice(0,P),q=X.slice(P+1);g({agentId:bt,modelProvider:j,modelId:q})},V=d==="agent"?!f:!X;return t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:i,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:y=>y.stopPropagation(),children:[t.jsx("h3",{children:c("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${d==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{b("agent")},children:c("chat.newChatModeAgent","Agent")}),t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${d==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{b("model"),B(""),k(y=>y||A)},children:c("chat.newChatModeModel","Model")})]}),t.jsxs("form",{onSubmit:_,children:[d==="agent"&&t.jsxs("label",{className:"chat-new-dialog-model-label",children:[c("chat.newChatModeAgent","Agent"),o?t.jsx("div",{className:"chat-new-dialog-loading",children:c("chat.loadingAgents","Loading agents...")}):p.length===0?t.jsx("div",{className:"chat-new-dialog-empty",children:c("chat.noAgentsAvailable","No agents available")}):t.jsx("div",{className:"chat-new-dialog-agent-list",children:p.map(y=>t.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${f===y.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>B(y.id),"data-testid":`agent-option-${y.id}`,children:[t.jsx(qn,{size:16}),t.jsx("span",{className:"chat-new-dialog-agent-name",children:y.name}),t.jsx("span",{className:"chat-new-dialog-agent-role",children:y.role})]},y.id))})]}),d==="model"&&t.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:F?t.jsx("div",{className:"chat-new-dialog-loading",children:c("chat.loadingModels","Loading models...")}):t.jsx(Nr,{models:C,value:W,onChange:k,label:c("chat.newChatModeModel","Model"),placeholder:c("chat.selectModel","Select a model"),favoriteProviders:ae,onToggleFavorite:le,favoriteModels:ue,onToggleModelFavorite:U})}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:i,children:c("chat.cancel","Cancel")}),t.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:V,children:c("chat.create","Create")})]})]})]})})}function wo({projectId:n,addToast:r,floating:i=!1,compactLayout:g=!1,onPopOut:c,onMaximize:d,onMinimize:b,onClose:p}){const{t:o}=tt("app");s.useEffect(()=>(jt({view:"ChatView",trigger:Vn?"route-active":"remount",projectId:n,replayAttempted:!1}),Vn=!1,()=>{Vn=!0,jt({view:"ChatView",trigger:"route-inactive",projectId:n,replayAttempted:!1})}),[n]);const{activeSession:f,sessionsLoading:B,messages:C,messagesLoading:M,isStreaming:N,streamingText:F,streamingThinking:E,streamingToolCalls:A,selectSession:W,createSession:k,archiveSession:ae,renameSession:G,deleteSession:ue,sendMessage:R,stopStreaming:le,pendingMessages:U,clearPendingMessage:X,loadMoreMessages:_,hasMoreMessages:V,searchQuery:y,setSearchQuery:P,filteredSessions:j,agentsMap:q}=_r(n,r),[S,T]=s.useState(!1),D=!0,[m,I]=s.useState(()=>{try{if(localStorage.getItem(Wn)==="rooms"&&D)return"rooms"}catch{}return"direct"}),l=Br(n,r),{isUnread:re,markRead:O}=zr(n),[z,he]=s.useState(()=>{const e=ma(m,m==="rooms"?l.activeRoom?.id:f?.id);return ha(e)}),[pe,te]=s.useState(null),[ve,ye]=s.useState(null),[Ke,Ge]=s.useState(""),[we,Fe]=s.useState(null),[Dt,fe]=s.useState(null),[Qe,me]=s.useState(!0),[Te,yt]=s.useState(ro),[mn,nt]=s.useState(!1),{agentsMap:Ft}=es(n),je=s.useMemo(()=>q.size>0?q:Ft,[Ft,q]),{models:It,defaultProvider:wt,defaultModelId:xt}=ba(),st=s.useMemo(()=>({provider:wt,modelId:xt}),[xt,wt]),{skills:at,loading:hn}=Zr(n),[h,v]=s.useState(!1),[x,$]=s.useState(""),[se,H]=s.useState(0),[Q,Y]=s.useState(""),[K,oe]=s.useState(!1),[J,ee]=s.useState(0),[de,ge]=s.useState(-1),[De,Ca]=s.useState(!1),[Ae,fn]=s.useState([]),[as,rt]=s.useState(!1),[rs,Pt]=s.useState(!1),[ot,os]=s.useState({}),[Lt,Ve]=s.useState(!1),[_t,Ct]=s.useState(!1),{pushNav:is}=fr(),[,$t]=s.useState(!1),[Sa,Ma]=s.useState({top:0,left:0}),ce=Qr({projectId:n}),gn=s.useCallback(e=>{if(!e||!ce.mentionActive)return;const a=e.getBoundingClientRect();Ma({top:a.top-260,left:a.left+8})},[ce.mentionActive]),cs=s.useRef(null),ls=s.useRef(null),ds=s.useRef(null),us=s.useRef(null),Me=s.useRef(!1),Ot=s.useRef(null),ms=s.useRef(null),We=s.useRef(null),Bt=s.useRef(0),pn=s.useRef(null),St=s.useRef(null),Pe=s.useRef(null),ke=s.useRef(null),bn=s.useRef(null),zt=s.useRef(!1),Le=s.useRef(null),_e=s.useRef(null),Se=s.useRef(null),Ht=s.useRef(null),hs=s.useRef([]),it=s.useRef(0),Mt=s.useRef(new Map),vn=s.useRef(!1),Ut=gr(),Ye=Ut==="mobile",yn=Ut==="tablet",fs=s.useRef(null),[ka,gs]=s.useState(!1);s.useLayoutEffect(()=>{if(!i){gs(!1);return}const e=fs.current;if(!e||typeof ResizeObserver>"u")return;const a=()=>{gs(e.getBoundingClientRect().width<=768)};a();const u=new ResizeObserver(a);return u.observe(e),()=>u.disconnect()},[i]);const ne=Ye||ka||g;s.useEffect(()=>{f?.id&&O("direct",f.id,f.lastMessageAt??f.updatedAt)},[f?.id,f?.lastMessageAt,f?.updatedAt,O]),s.useEffect(()=>{l.activeRoom?.id&&O("room",l.activeRoom.id,l.activeRoom.updatedAt)},[l.activeRoom?.id,l.activeRoom?.updatedAt,O]),s.useEffect(()=>{if(!f?.id||C.length===0)return;const e=C[C.length-1];O("direct",f.id,e?.createdAt??f.lastMessageAt??f.updatedAt)},[f?.id,f?.lastMessageAt,f?.updatedAt,O,C]),s.useEffect(()=>{if(!l.activeRoom?.id||l.messages.length===0)return;const e=l.messages[l.messages.length-1];O("room",l.activeRoom.id,e?.createdAt??l.activeRoom.updatedAt)},[O,l.activeRoom?.id,l.activeRoom?.updatedAt,l.messages]),s.useEffect(()=>{try{const e=localStorage.getItem(da);if(!e)return;const a=Number.parseInt(e,10);if(Number.isNaN(a))return;const u=Math.max(an,Math.min(rn,a));yt(u)}catch{}},[]),s.useEffect(()=>{try{const e=localStorage.getItem(Wn);if(e==="direct"){I("direct");return}e==="rooms"&&D&&I("rooms")}catch{}},[D]),s.useEffect(()=>{try{localStorage.setItem(Wn,m)}catch{}},[D,m]);const Re=ma(m,m==="rooms"?l.activeRoom?.id:f?.id),wn=s.useRef(Re);s.useEffect(()=>{Re!==wn.current&&(wn.current=Re,he(ha(Re)))},[Re]),s.useEffect(()=>{if(!(!Re||wn.current!==Re))try{if(z){localStorage.setItem(Re,z);return}localStorage.removeItem(Re)}catch{}},[Re,z]);const be=m==="rooms"&&!!l.activeRoom,{keyboardOverlap:ps,keyboardOpen:Kt}=pr({enabled:(ne||yn)&&(!!f||be),allowNonMobileViewport:yn}),kt=yn&&Kt,Ne=s.useMemo(()=>{const e=x.trim().toLowerCase();return(e?at.filter(u=>u.name.toLowerCase().includes(e)):at).slice(0,10)},[at,x]),ct=s.useMemo(()=>Array.from(je.values()),[je]),$e=s.useMemo(()=>m!=="rooms"||!l.activeRoom?null:{roomId:l.activeRoom.id,roomName:l.activeRoom.name,memberIds:new Set(l.activeRoomMembers.map(e=>e.agentId))},[D,m,l.activeRoom,l.activeRoomMembers]),Je=s.useMemo(()=>{const e=ct.filter(w=>xa(w.name,Q));if(!$e)return e;const a=e.filter(w=>$e.memberIds.has(w.id));if(Q.trim().length===0)return a;const u=e.filter(w=>!$e.memberIds.has(w.id));return[...a,...u]},[ct,Q,$e]),xn=s.useMemo(()=>{const e=new Map;for(const a of ct)e.set(a.name.toLowerCase(),a);return e},[ct]),Ra=s.useMemo(()=>Ne.map(e=>e.id).join("\0"),[Ne]);s.useEffect(()=>{H(0)},[Ra]),s.useEffect(()=>{ee(0)},[Q,K]),s.useEffect(()=>()=>{Pe.current!==null&&window.clearTimeout(Pe.current)},[]),s.useEffect(()=>{const e=ls.current;if(!e||!V||M)return;const a=new IntersectionObserver(u=>{u[0].isIntersecting&&_()},{threshold:.1});return a.observe(e),()=>a.disconnect()},[V,M,_]);const lt=s.useCallback(()=>be?l.activeRoom?.id??null:f?.id??null,[be,l.activeRoom?.id,f?.id]),bs=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,'\\"')}"]`),[]),Gt=s.useCallback(()=>{const e=ke.current,a=lt();if(!e||!a)return;const u=e.scrollTop,w=e.querySelectorAll(".chat-message[data-message-id]"),L=Array.from(w).find(xe=>xe.offsetTop+xe.offsetHeight>=u)??w[0]??null,Z=L?.getAttribute("data-message-id")??null,Ce=L?L.offsetTop-u:0;St.current={threadId:a,scrollTop:u,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight,anchorMessageId:Z,anchorOffset:Ce,wasPinnedBefore:!Me.current,capturedAtMs:typeof performance<"u"?performance.now():Date.now()}},[lt]),vs=s.useCallback(()=>{const e=ke.current;if(!e)return;const u=e.scrollTop+e.clientHeight>=e.scrollHeight-50;Pt(!u),Me.current=!u,Gt()},[Gt]),Oe=s.useCallback((e,a)=>{if(!e.isConnected||!a?.force&&Me.current)return;let u=0,w=0,L=-1;const Z=6,Ce=()=>{if(e.isConnected&&!(!a?.force&&Me.current)){if(e.scrollTop=e.scrollHeight,e.scrollHeight===L?w+=1:(w=0,L=e.scrollHeight),u+=1,u>=Z||w>=2){Pt(!1),Me.current=!1;return}window.requestAnimationFrame(Ce)}};Ce()},[]),Rt=be?l.messages:C;s.useLayoutEffect(()=>{const e=ke.current,a=lt(),u=St.current;if(!e||!a||!u||u.threadId!==a||u.wasPinnedBefore)return;const w=(typeof performance<"u"?performance.now():Date.now())-u.capturedAtMs,L=e.scrollHeight>e.clientHeight,Z=w>3e3,Ce=u.scrollTop<=0&&u.anchorOffset<=0&&L;if(!Me.current||Z||Ce){St.current=null;return}let xe=u.scrollTop;if(u.anchorMessageId){const He=bs(e,u.anchorMessageId);He?xe=He.offsetTop-u.anchorOffset:xe=u.scrollTop+(e.scrollHeight-u.scrollHeight)}else xe=u.scrollTop+(e.scrollHeight-u.scrollHeight);e.scrollTop=Math.max(0,xe),Me.current=!0,Pt(!0),St.current=null},[Rt,lt,bs]);const Cn=s.useCallback(e=>{},[Rt.length,be]),Ie=s.useCallback(e=>{Cn(e);const a=ke.current;a&&(St.current=null,Me.current=!1,Oe(a))},[Oe,Cn]);s.useLayoutEffect(()=>{We.current!==null&&(window.clearTimeout(We.current),We.current=null);const e=be?l.activeRoom?.id??null:f?.id??null;if(!e){Ot.current=null;return}const a={threadId:e,loaded:be?!l.messagesLoading:!M,hasMessages:be?l.messages.length>0:C.length>0},u=Ot.current,w=u?.threadId!==e,L=u?.threadId===e&&!u.loaded&&a.loaded,Z=u?.threadId===e&&!u.hasMessages&&a.hasMessages;if(!(u===null||w||L||Z))return;const xe=ke.current;if(xe)return Cn(w?"thread-change":L?"finished-loading":Z?"first-messages":"mount"),Oe(xe,{force:!0}),be||(We.current=window.setTimeout(()=>{if(We.current=null,Me.current)return;const He=ke.current;He&&Oe(He)},250)),Ot.current=a,()=>{We.current!==null&&(window.clearTimeout(We.current),We.current=null)}},[be,l.activeRoom?.id,l.messages.length,l.messagesLoading,f?.id,C.length,M,Oe]),s.useEffect(()=>{!N||Me.current||Ie("streaming")},[N,F,E,Ie]),s.useEffect(()=>{const e=lt();if(!e){Bt.current=0,pn.current=null;return}if(pn.current!==e){pn.current=e,Bt.current=Rt.length;return}const a=Bt.current,u=Rt.length,w=u>a,L=!Me.current;Bt.current=u,w&&L&&Ie("new-message")},[Rt,lt,Ie]),s.useEffect(()=>{ps<=0||!ke.current||Ie("keyboard")},[ps,Ie]),br(Ye&&Kt),s.useLayoutEffect(()=>{if(!Ye||!f&&!be||typeof window>"u")return;const e=bn.current,a=window.visualViewport;if(!e||!a)return;const u=L=>{if(!(L instanceof HTMLElement))return!1;if(L.tagName==="TEXTAREA")return!0;if(L.tagName!=="INPUT")return!1;const Z=L.type.toLowerCase();return["","text","search","email","url","tel","password","number"].includes(Z)},w=()=>{if(zt.current){e.classList.remove("chat-thread--keyboard-active"),e.style.transform="",e.style.willChange="";return}const L=Math.max(0,window.innerHeight-a.offsetTop-a.height),Z=a.offsetTop||0;e.style.setProperty("--vv-height",`${a.height}px`),e.style.setProperty("--vv-offset-top",`${Z}px`),e.style.setProperty("--keyboard-overlap",`${L}px`);const Ce=(L>0||Z>0)&&u(document.activeElement);e.classList.toggle("chat-thread--keyboard-active",Ce),Ce&&Z>0?(e.style.transform=`translateY(${Z}px)`,e.style.willChange="transform"):(e.style.transform="",e.style.willChange="")};return w(),a.addEventListener("resize",w),a.addEventListener("scroll",w),document.addEventListener("focusin",w),document.addEventListener("focusout",w),window.addEventListener("pageshow",w),document.addEventListener("visibilitychange",w),()=>{a.removeEventListener("resize",w),a.removeEventListener("scroll",w),document.removeEventListener("focusin",w),document.removeEventListener("focusout",w),window.removeEventListener("pageshow",w),document.removeEventListener("visibilitychange",w),e.classList.remove("chat-thread--keyboard-active"),e.style.transform="",e.style.willChange=""}},[f,Ye,be]),s.useEffect(()=>{const e=()=>te(null);if(pe)return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[pe]),s.useEffect(()=>{if(!Ye||!Kt)return;const e=a=>{a.target?.closest(".chat-messages")||a.preventDefault()};return document.addEventListener("touchmove",e,{passive:!1}),()=>{document.removeEventListener("touchmove",e)}},[Ye,Kt]),s.useEffect(()=>{const e=ms.current;if(ms.current=m,m==="rooms"&&!l.activeRoom){Ot.current=null;return}if(!(m==="direct"&&(e===null||e==="rooms"))&&!(m==="rooms"&&(e===null||e==="direct")))return;const w=ke.current;w&&(Oe(w,{force:!0}),Me.current=!1,Pt(!1))},[m,l.activeRoom,Oe]),s.useEffect(()=>{if(!f&&!be||be&&!ne)return;const e=()=>{const u=!Me.current;Gt(),u&&ne&&ke.current&&Ie("visibility-restore")},a=()=>{document.visibilityState==="visible"&&e()};return document.addEventListener("visibilitychange",a),window.addEventListener("pageshow",e),()=>{document.removeEventListener("visibilitychange",a),window.removeEventListener("pageshow",e)}},[ne,Ye,f,be,Gt,Ie]),s.useEffect(()=>{if(be||typeof ResizeObserver>"u")return;const e=ke.current;if(!e)return;const a=new ResizeObserver(()=>{Me.current||Oe(e)});return a.observe(e),()=>{a.disconnect()}},[be,Oe,f?.id,m]),s.useEffect(()=>{hs.current=Ae},[Ae]),s.useEffect(()=>()=>{for(const e of hs.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl);for(const e of Mt.current.values())window.clearTimeout(e);Mt.current.clear()},[]);const dt=s.useCallback(e=>{if(!e||e.length===0)return;const a=[];for(const u of Array.from(e)){if(!io.includes(u.type))continue;const w=u.type.startsWith("image/");a.push({file:u,previewUrl:w?URL.createObjectURL(u):""})}a.length>0&&fn(u=>[...u,...a])},[]),ys=s.useCallback(e=>{fn(a=>{const u=a[e];return u?.previewUrl&&URL.revokeObjectURL(u.previewUrl),a.filter((w,L)=>L!==e)})},[]),ws=s.useCallback(e=>{const a=e.clipboardData?.files;if(!a||a.length===0)return;const u=Array.from(a).filter(w=>w.type.startsWith("image/"));u.length!==0&&dt(u)},[dt]),Aa=s.useCallback(async e=>{try{await k(e),T(!1),ne&&me(!1)}catch{r(o("chat.failedToCreateSession","Failed to create chat session"),"error")}},[k,r,ne]),Ee=s.useCallback(e=>{const a=e??Se.current;if(!a)return;const u=Ut==="tablet"?to:ss;a.style.height="auto",a.style.height=`${so(a.scrollHeight,u)}px`,a.style.overflowY=no(a.scrollHeight,u)},[Ut]),xs=s.useCallback(e=>{Se.current=e,e&&Ee(e)},[Ee]);s.useLayoutEffect(()=>{Ee()},[m,z,f?.id,l.activeRoom?.id,Ee]);const ut=s.useCallback(()=>{if(he(""),Re)try{localStorage.removeItem(Re)}catch{}v(!1),$(""),oe(!1),Y(""),ge(-1),fn(e=>{for(const a of e)a.previewUrl&&URL.revokeObjectURL(a.previewUrl);return[]})},[Re]),Sn=s.useCallback(()=>{const e=z.trim(),a=Ae.map(u=>u.file);if(!(!e&&a.length===0||!f)){if(e==="/clear"||e==="/new"){ut(),X(),le(),k({agentId:f.agentId,modelProvider:f.modelProvider??void 0,modelId:f.modelId??void 0}).catch(()=>{r(o("chat.failedToClearConversation","Failed to clear conversation"),"error")});return}ut(),R(e,a)}},[z,Ae,f,ut,le,X,k,r,R]),Mn=s.useCallback(async()=>{const e=z.trim(),a=Ae.map(u=>u.file);if(!(!e&&a.length===0)){if(m==="rooms"){if(!l.activeRoom)return;if(e==="/clear"||e==="/new"){ut();try{await l.clearRoom(l.activeRoom.id)}catch{r(o("chat.failedToClearRoomConversation","Failed to clear room conversation"),"error")}return}if(vn.current)return;vn.current=!0;const u=z;ut();try{await l.sendRoomMessage(e,{files:a})}catch(w){if(w instanceof ya){const Z=w.message.trim()?w.message:o("chat.messageSentButReplyFailed","Message sent, but assistant reply failed");r(o("chat.messageSentButReplyFailedDetail","Message sent, but assistant reply failed: {{detail}}",{detail:Z}),"error");return}he(u);const L=w instanceof Error&&w.message.trim()?w.message:o("chat.failedToSendRoomMessage","Failed to send room message");r(L,"error")}finally{vn.current=!1}return}Sn()}},[z,Ae,D,m,l,l.clearRoom,ut,r,Sn]),Vt=s.useCallback(async e=>{if(m==="rooms"){if(!l.activeRoom)return;try{await l.sendRoomMessage(e)}catch(a){const u=a instanceof Error&&a.message.trim()?a.message:o("chat.failedToSendRoomMessage","Failed to send room message");r(u,"error")}return}f&&R(e)},[f,r,D,m,l,R,o]),kn=s.useCallback(e=>{he(a=>{const u=fa(a);if(!u)return a;const w=`/skill:${e.name} `,L=a.slice(0,u.start)+w+a.slice(u.end);return window.requestAnimationFrame(()=>{Se.current&&(Ee(Se.current),Se.current.focus())}),L}),v(!1),$(""),H(0)},[Ee]),Wt=s.useCallback(e=>{const a=Se.current;if(!a||de<0)return;const u=a.selectionStart??it.current,w=a.selectionEnd??u,L=Math.max(u,w),Z=Math.min(de,L),xe=`${`@${e.name.replace(/\s+/g,"_")}`} `,He=z.slice(0,Z)+xe+z.slice(L),mt=Z+xe.length;he(He),oe(!1),Y(""),ee(0),ge(-1),window.requestAnimationFrame(()=>{Se.current&&(Ee(Se.current),Se.current.focus(),Se.current.setSelectionRange(mt,mt))})},[de,z,Ee]),At=s.useCallback((e,a)=>{const w=Se.current?.selectionStart??it.current,L=z.lastIndexOf("#",w),Z=L>=0?L+a.length:e.length;he(e),ce.dismissMention(),$t(!1),window.requestAnimationFrame(()=>{Se.current&&(Ee(Se.current),Se.current.focus(),Se.current.setSelectionRange(Z,Z))})},[ce,z,Ee]),Cs=s.useCallback(e=>{if(it.current=e.currentTarget.selectionStart??it.current,ce.mentionActive&&ce.combinedItems.length>0){if(ce.handleKeyDown(e,z),e.key==="Enter"||e.key==="Tab"){const a=ce.combinedItems[ce.selectedIndex];a?.kind==="task"?At(ce.selectTask(a.task,z),`#${a.task.id}`):a?.kind==="file"&&At(ce.selectFile(a.file,z),`#${a.file.path}`)}return}if(K&&e.key==="ArrowDown"){e.preventDefault(),Je.length>0&&ee(a=>(a+1)%Je.length);return}if(K&&e.key==="ArrowUp"){e.preventDefault(),Je.length>0&&ee(a=>a===0?Je.length-1:a-1);return}if(K&&e.key==="Enter"){e.preventDefault();const a=Je[J]??Je[0];a&&Wt(a);return}if(K&&e.key==="Escape"){e.preventDefault(),oe(!1),Y(""),ge(-1);return}if(h&&e.key==="ArrowDown"){e.preventDefault(),Ne.length>0&&H(a=>(a+1)%Ne.length);return}if(h&&e.key==="ArrowUp"){e.preventDefault(),Ne.length>0&&H(a=>a===0?Ne.length-1:a-1);return}if(h&&(e.key==="Enter"||e.key==="Tab")&&Ne.length>0){e.preventDefault();const a=Ne[se]??Ne[0];a&&kn(a);return}if(h&&e.key==="Escape"){e.preventDefault(),v(!1);return}e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),Mn())},[K,Je,J,Wt,h,Ne,se,kn,Mn,ce,At,z]),Xt=s.useCallback((e,a)=>{const u=co(e,a);if(u){oe(!0),Y(u.filter),ge(u.start);return}oe(!1),Y(""),ge(-1)},[]),Ss=s.useCallback(e=>{const a=e.target,u=a.value,w=a.selectionStart??u.length;Ee(a),it.current=w,he(u);const L=fa(u);L?(v(!0),$(L.filter)):(v(!1),$("")),Xt(u,w),ce.detectMention(u,w),$t(ce.mentionActive),ce.mentionActive&&gn(a)},[Xt,Ee]),qt=s.useCallback(e=>{const a=e.currentTarget,u=a.selectionStart??a.value.length;it.current=u,Xt(a.value,u),ce.detectMention(a.value,u),$t(ce.mentionActive),ce.mentionActive&&gn(a)},[Xt,ce,gn]),Ms=s.useCallback(e=>{e.key!=="Escape"&&qt(e)},[qt]),ks=s.useCallback(()=>{typeof window<"u"&&window.innerWidth<=768&&(zt.current=!0,Le.current!==null&&window.clearTimeout(Le.current),Le.current=window.setTimeout(()=>{zt.current=!1,Le.current=null},450),(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0),_e.current!==null&&window.clearTimeout(_e.current),_e.current=window.setTimeout(()=>{_e.current=null,document.activeElement?.tagName!=="TEXTAREA"&&(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0)},350)),Pe.current!==null&&window.clearTimeout(Pe.current),Pe.current=window.setTimeout(()=>{v(!1),oe(!1),Y(""),ge(-1),$t(!1),ce.dismissMention(),Pe.current=null},120)},[ce]),Rs=s.useCallback(()=>{zt.current=!1,Le.current!==null&&(window.clearTimeout(Le.current),Le.current=null),Pe.current!==null&&(window.clearTimeout(Pe.current),Pe.current=null),_e.current!==null&&(window.clearTimeout(_e.current),_e.current=null)},[]);s.useEffect(()=>()=>{Le.current!==null&&window.clearTimeout(Le.current),_e.current!==null&&window.clearTimeout(_e.current)},[]);const Na=s.useCallback(async e=>{te(null);try{await ae(e),r(o("chat.conversationArchived","Conversation archived"),"success")}catch{r(o("chat.failedToArchiveConversation","Failed to archive conversation"),"error")}},[ae,r]),As=s.useCallback(e=>{const a=j.find(u=>u.id===e)??(f?.id===e?f:null);te(null),Ve(!1),Ge(a?.title??""),ye({sessionId:e,title:a?.title??""})},[f,j]),Ns=s.useCallback(async()=>{if(ve)try{await G(ve.sessionId,Ke),ye(null),Ge(""),r(o("chat.conversationRenamed","Conversation renamed"),"success")}catch{}},[r,ve,G,Ke,o]),Ea=s.useCallback(async e=>{Fe(null),te(null);try{await ue(e),r(o("chat.conversationDeleted","Conversation deleted"),"success")}catch{r(o("chat.failedToDeleteConversation","Failed to delete conversation"),"error")}},[ue,r]),Nt=s.useCallback(e=>{try{localStorage.setItem(da,String(e))}catch{}},[]),Ta=s.useCallback(e=>{if(ne||kt)return;e.preventDefault(),e.stopPropagation();const a=e.currentTarget;typeof a.setPointerCapture=="function"&&a.setPointerCapture(e.pointerId);const u=e.clientX,w=Te;let L=w;document.body.style.userSelect="none";const Z=xe=>{const He=xe.clientX-u,mt=Math.max(an,Math.min(rn,w+He));L=mt,yt(mt),Nt(mt)},Ce=xe=>{typeof a.releasePointerCapture=="function"&&a.releasePointerCapture(xe.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",Z),document.removeEventListener("pointerup",Ce),Nt(L)};document.addEventListener("pointermove",Z),document.addEventListener("pointerup",Ce)},[ne,Nt,Te,kt]),ja=s.useCallback(e=>{if(ne||kt||e.key!=="ArrowLeft"&&e.key!=="ArrowRight")return;e.preventDefault();const a=e.shiftKey?50:10,u=e.key==="ArrowLeft"?-a:a,w=Math.max(an,Math.min(rn,Te+u));yt(w),Nt(w)},[ne,Nt,Te,kt]),Es=s.useCallback(e=>{const a=j.find(u=>u.id===e);O("direct",e,a?.lastMessageAt??a?.updatedAt),W(e),Ve(!1),ne&&me(!1)},[j,ne,O,W]),Rn=s.useCallback(()=>{W(""),me(!0),Ve(!1)},[W]),An=s.useCallback(()=>{l.selectRoom(null),me(!0),Ve(!1)},[l]),Da=()=>t.jsxs("div",{className:"chat-empty-state",children:[t.jsx(cn,{size:48,strokeWidth:1.5}),t.jsx("h2",{children:o("chat.startNewConversation","Start a new conversation")}),t.jsxs("button",{className:"btn btn-primary",onClick:()=>T(!0),children:[t.jsx(ht,{size:16}),o("chat.newChat","New Chat")]})]}),Be=ga(f,f?.agentId?je.get(f.agentId)??null:null,st),Nn=s.useMemo(()=>{if(!Be?.provider||!Be.modelId)return null;const e=It.find(a=>a.provider===Be.provider&&a.id===Be.modelId);return e?.contextWindow?e.contextWindow:null},[Be?.modelId,Be?.provider,It]),Fa=s.useMemo(()=>eo(C,N?F:void 0),[N,C,F]),ze=Hs(Be?.provider,Be?.modelId),Ze=Be?.provider??null,Qt=!!(f||N||C.length>0),Yt=m==="rooms"?be:!!f,Ts=s.useRef(Yt);s.useEffect(()=>{const e=Ts.current;Ts.current=Yt,ne&&(e||!Yt||is({type:"view",revert:m==="rooms"?An:Rn}))},[m,Rn,An,Yt,ne,is]);const En=f?.agentId===bt?ze??"Fusion":f?.title||je.get(f?.agentId??"")?.name||f?.agentId||"Chat",js=!!(ze&&ze!==En),Ia=!ne&&Qt&&Nn!==null,Ds=ca(Fa),Jt=Nn!==null?ca(Nn):null,Tn=Jt?o("chat.contextWindowAria","Estimated {{used}} of {{total}} context tokens",{used:Ds,total:Jt}):null,Pa=ne&&m==="direct"&&!!f,jn=je.get(f?.agentId??"")?.name||(f?.agentId===bt?ze??"Fusion":f?.agentId?.slice(0,30)??"Fusion"),Dn=!1,Fn=f?.agentId===bt,La=e=>e.length>50?`${e.slice(0,50)}…`:e,_a=s.useCallback(()=>{Ca(e=>!e)},[]);s.useEffect(()=>{if(!Lt)return;const e=a=>{ds.current?.contains(a.target)||Ve(!1)};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[Lt]),s.useEffect(()=>{if(!_t)return;const e=u=>{us.current?.contains(u.target)||Ct(!1)},a=u=>{u.key==="Escape"&&Ct(!1)};return document.addEventListener("mousedown",e),document.addEventListener("keydown",a),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",a)}},[_t]),s.useEffect(()=>{(!ne||m!=="direct"||Qe)&&Ve(!1)},[ne,m,Qe]),s.useEffect(()=>{Ct(!1)},[l.activeRoom?.id]);const In=s.useCallback((e,a)=>{const u=Mt.current.get(e);u&&window.clearTimeout(u),os(L=>({...L,[e]:a}));const w=window.setTimeout(()=>{os(L=>{const{[e]:Z,...Ce}=L;return Ce}),Mt.current.delete(e)},2e3);Mt.current.set(e,w)},[]),Fs=s.useCallback(async(e,a)=>{try{if(!navigator.clipboard?.writeText)throw new Error("Clipboard API unavailable");await navigator.clipboard.writeText(a),In(e,"success")}catch{In(e,"error")}},[In]),Pn=f?.agentId===bt,Ln=s.useCallback((e,a,u)=>t.jsx("button",{type:"button",className:`btn-icon chat-message-copy-action${ot[e]==="success"?" chat-message-copy-action--success":""}${ot[e]==="error"?" chat-message-copy-action--error":""}`,"data-testid":u??`chat-copy-response-${e}`,"aria-label":ot[e]==="success"?o("chat.responseCopied","Response copied"):ot[e]==="error"?o("chat.copyFailed","Copy failed"):o("chat.copyResponse","Copy response"),onClick:()=>{Fs(e,a)},children:ot[e]==="success"?t.jsx(vr,{size:14}):t.jsx(yr,{size:14})}),[ot,Fs]),_n=s.useCallback(e=>{const a=ke.current;if(!a)return;const u=`[data-testid="chat-message-${e}"]`,w=a.querySelector(u);if(!w)return;const L=w.getBoundingClientRect().top-a.getBoundingClientRect().top+a.scrollTop,Z=typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;a.scrollTo({top:L,behavior:Z?"auto":"smooth"})},[]),Is=f?.cliExecutorAdapterId??null,$a=!!Is,Oa=Is==="generic"?"generic":"hybrid",Ba=f?.cliSessionFile||f?.id||"",Ps=()=>t.jsxs("div",{className:"chat-messages",ref:ke,onScroll:vs,children:[t.jsx("div",{ref:ls,className:"chat-load-more-sentinel",children:V&&M&&t.jsx("div",{className:"chat-loading-older",children:o("chat.loadingOlderMessages","Loading older messages…")})}),N?t.jsxs(t.Fragment,{children:[C.map((e,a)=>t.jsx(zn,{message:e,forcePlain:De,agentName:jn,hideAssistantIdentity:Fn,showAssistantModelTag:Dn,activeModelTag:ze,activeModelProvider:Ze,activeSessionId:f?.id??null,mentionAgentsByName:xn,roomContext:null,copyAction:Pn&&e.role==="assistant"?Ln(e.id,e.content):void 0,onScrollToTop:_n,isAwaitingQuestionAnswer:e.role==="assistant"&&a===C.length-1&&!N,submittedQuestionAnswer:ua(C,a),onQuestionSubmit:Vt},e.id)),t.jsx(Ar,{streamingText:F,streamingThinking:E,streamingToolCalls:A,forcePlain:De,agentName:jn,hideAssistantIdentity:Fn,showAssistantModelTag:Dn,activeModelTag:ze,activeModelProvider:Ze,copyAction:Pn&&F?Ln("__streaming__",F,"chat-copy-response-streaming"):void 0,onQuestionSubmit:Vt})]}):M?t.jsx("div",{className:"chat-empty-state",children:o("chat.loadingMessages","Loading messages...")}):C.length===0&&!f?Da():C.length===0&&f?t.jsx("div",{className:"chat-empty-state",children:o("chat.noMessagesYet","No messages yet. Start the conversation!")}):t.jsx(t.Fragment,{children:C.map((e,a)=>t.jsx(zn,{message:e,forcePlain:De,agentName:jn,hideAssistantIdentity:Fn,showAssistantModelTag:Dn,activeModelTag:ze,activeModelProvider:Ze,activeSessionId:f?.id??null,mentionAgentsByName:xn,roomContext:null,copyAction:Pn&&e.role==="assistant"?Ln(e.id,e.content):void 0,onScrollToTop:_n,isAwaitingQuestionAnswer:e.role==="assistant"&&a===C.length-1&&!N,submittedQuestionAnswer:ua(C,a),onQuestionSubmit:Vt},e.id))}),t.jsx("div",{ref:cs})]}),Ls=()=>t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:Ht,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:e=>{dt(e.target.files),e.target.value=""}}),h&&t.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":o("chat.skillSuggestions","Skill suggestions"),children:hn?t.jsx("div",{className:"chat-skill-menu-empty",children:o("chat.loadingSkills","Loading skills…")}):Ne.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:x?o("chat.noSkillsFound","No skills found"):o("chat.noSkillsAvailable","No skills available")}):Ne.map((e,a)=>t.jsxs("button",{type:"button",role:"option","aria-selected":a===se,className:`chat-skill-menu-item${a===se?" chat-skill-menu-item--highlighted":""}`,onMouseDown:u=>u.preventDefault(),onMouseEnter:()=>H(a),onClick:()=>kn(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))}),Ae.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:Ae.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:()=>ys(a),"data-testid":`chat-attachment-remove-${a}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${a}`))}),U.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"chat-pending-stack","data-testid":"chat-pending-stack",children:U.map((e,a)=>t.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[t.jsx("span",{children:o("chat.queuedMessage","Queued: {{preview}}",{preview:La(e)})}),t.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":o("chat.dismissQueuedMessage","Dismiss queued message"),"data-testid":`chat-pending-dismiss-${a}`,onClick:()=>X(a),children:"×"})]},`${a}-${e}`))}),t.jsx("div",{className:"chat-pending-divider","aria-hidden":"true"})]}),t.jsxs("div",{className:"chat-input-row",children:[t.jsx("button",{type:"button",className:"btn-icon chat-attach-btn","data-testid":"chat-attach-btn","aria-label":o("chat.attachFiles","Attach files"),onClick:()=>Ht.current?.click(),children:t.jsx(Vs,{size:16})}),t.jsxs("div",{className:`chat-input-wrapper${as?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),rt(!0)},onDragLeave:()=>rt(!1),onDrop:e=>{e.preventDefault(),rt(!1),dt(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:xs,className:"chat-input-textarea",placeholder:o("chat.typeMessage","Type a message..."),value:z,onChange:Ss,onKeyDown:Cs,onKeyUp:Ms,onClick:qt,onBlur:ks,onFocus:Rs,onPaste:ws,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||Ws()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(aa,{agents:ct,filter:Q,highlightedIndex:J,visible:K,onSelect:Wt,position:"below",roomMemberIds:$e?.memberIds,roomName:$e?.roomName}),t.jsx(Ur,{visible:ce.mentionActive&&!K,position:Sa,tasks:ce.tasks,files:ce.files,selectedIndex:ce.selectedIndex,onSelectTask:e=>{At(ce.selectTask(e,z),`#${e.id}`)},onSelectFile:e=>{At(ce.selectFile(e,z),`#${e.path}`)},loading:ce.loading})]}),t.jsx(Xs,{isStreaming:N,canSend:!!(z.trim()||Ae.length>0),onSend:Sn,onStop:le})]})]}),za=ne?void 0:{width:`${Te}px`},Ha=t.jsxs("div",{className:"chat-sidebar-scope-toggle chat-view-header-scope-toggle",role:"tablist","data-testid":"chat-sidebar-scope-toggle",children:[t.jsxs("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:()=>I("direct"),children:[t.jsx(cn,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:o("chat.scopeDirect","Direct")})]}),t.jsxs("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:()=>I("rooms"),children:[t.jsx(va,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:o("chat.scopeRooms","Rooms")})]})]});return t.jsxs("div",{ref:fs,className:`chat-view${i?" chat-view--floating":""}${ne?" chat-view--narrow":""}`,children:[t.jsx(wr,{icon:cn,title:o("chat.title","Chat"),actions:t.jsxs(t.Fragment,{children:[Ha,ne?null:t.jsxs("button",{className:"btn btn-sm btn-primary chat-view-header-new-chat",onClick:()=>T(!0),"data-testid":"chat-new-btn",children:[t.jsx(ht,{size:14}),o("chat.newChat","New Chat")]}),!i&&c?t.jsx("button",{type:"button",className:"btn-icon chat-view-header-icon",onClick:c,"aria-label":o("chat.popOut","Pop out chat"),title:o("chat.popOut","Pop out chat"),"data-testid":"chat-pop-out",children:t.jsx(Us,{size:16})}):null,i&&d?t.jsx("button",{type:"button",className:"btn-icon chat-view-header-icon",onClick:d,"aria-label":o("chat.maximizeToChatView","Open in Chat view"),title:o("chat.maximizeToChatView","Open in Chat view"),"data-testid":"chat-modal-maximize",children:t.jsx(Us,{size:16})}):null,i&&b?t.jsx("button",{type:"button",className:"btn-icon chat-view-header-icon",onClick:b,"aria-label":o("chat.minimizeToQuickChat","Minimize to quick chat"),title:o("chat.minimizeToQuickChat","Minimize to quick chat"),"data-testid":"chat-modal-minimize",children:t.jsx(xr,{size:16})}):null,i&&p?t.jsx("button",{type:"button",className:"btn-icon chat-view-header-icon",onClick:p,"aria-label":o("chat.closeChat","Close chat"),title:o("chat.closeChat","Close chat"),"data-testid":"chat-modal-close",children:t.jsx(Cr,{size:16})}):null]})}),t.jsxs("div",{className:"chat-view__body",children:[t.jsxs("div",{className:`chat-sidebar${Qe?"":" chat-sidebar--hidden"}`,style:za,children:[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(Sr,{size:14,className:"chat-sidebar-search-icon"}),t.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:o("chat.searchConversations","Search conversations..."),value:y,onChange:e=>P(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:o("chat.loadingConversations","Loading...")}):j.length===0?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:o("chat.noConversationsYet","No conversations yet")}):j.map(e=>{const a=f?.id===e.id,u=!a&&re("direct",e.id,e.lastMessageAt??e.updatedAt),w=ga(e,je.get(e.agentId)??null,st),L=Hs(w?.provider,w?.modelId)??"Fusion";return t.jsxs("div",{className:`chat-session-item${a?" chat-session-item--active":""}`,onClick:()=>Es(e.id),onContextMenu:Z=>{Z.preventDefault(),te({sessionId:e.id,x:Z.clientX,y:Z.clientY})},"data-testid":`chat-session-${e.id}`,children:[t.jsx("button",{className:"chat-session-delete-btn",onClick:Z=>{Z.stopPropagation(),Fe(e.id)},"data-testid":"chat-session-delete-btn","aria-label":o("chat.deleteConversation","Delete conversation"),children:t.jsx(On,{size:14})}),t.jsxs("div",{className:"chat-session-title",children:[e.title||o("chat.untitledSession","Untitled"),u?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${e.id}`,"aria-label":o("chat.unreadMessages","Unread messages")}):null]}),t.jsx("div",{className:"chat-session-preview",children:e.lastMessagePreview||o("chat.noMessages","No messages")}),t.jsxs("div",{className:"chat-session-meta",children:[t.jsxs("span",{className:"chat-session-meta-model",children:[w?.provider?t.jsx(Bn,{provider:w.provider,size:"sm"}):null,t.jsx("span",{children:je.get(e.agentId)?.name||(e.agentId===bt?L:e.agentId.slice(0,30))})]}),t.jsx("span",{children:e.updatedAt?ao(e.updatedAt,o):""})]})]},e.id)})})]}):t.jsxs("div",{className:"chat-sidebar-rooms","data-testid":"chat-sidebar-rooms",children:[!ne&&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:()=>nt(!0),children:[t.jsx(ht,{size:14}),o("chat.createRoom","Create room")]})}),l.rooms.length===0?t.jsx("div",{className:"chat-sidebar-rooms-empty","data-testid":"chat-sidebar-rooms-empty",children:o("chat.noRoomsYet","No rooms yet.")}):t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:l.rooms.map(e=>{const a=l.activeRoom?.id===e.id,u=!a&&re("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:()=>{O("room",e.id,e.updatedAt),l.selectRoom(e.id),ne&&me(!1)},onKeyDown:w=>{(w.key==="Enter"||w.key===" ")&&(w.preventDefault(),O("room",e.id,e.updatedAt),l.selectRoom(e.id),ne&&me(!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]}),u?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${e.id}`,"aria-label":o("chat.unreadMessages","Unread messages")}):null]}),a?t.jsx("span",{className:"chat-room-item-meta",children:o("chat.roomMemberCount","{{count}} member",{count:l.activeRoomMembers.length,defaultValue_one:"{{count}} member",defaultValue_other:"{{count}} members"})}):null]}),t.jsx("button",{type:"button",className:"btn-icon chat-room-item-delete","data-testid":`chat-room-delete-${e.slug}`,"aria-label":o("chat.deleteRoom","Delete room {{name}}",{name:e.name}),onClick:w=>{w.stopPropagation(),fe(e.id)},children:t.jsx(On,{size:14})})]},e.id)})})]}),m==="rooms"?ne?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:()=>nt(!0),children:[t.jsx(ht,{size:14}),o("chat.createRoom","Create room")]})}):null:ne?t.jsx("div",{className:"chat-sidebar-footer",children:t.jsxs("button",{className:"btn btn-sm btn-primary chat-sidebar-footer-btn",onClick:()=>T(!0),"data-testid":"chat-new-btn",children:[t.jsx(ht,{size:14}),o("chat.newChat","New Chat")]})}):null]}),!ne&&Qe&&!kt&&t.jsx("div",{className:"chat-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":an,"aria-valuemax":rn,"aria-valuenow":Te,"aria-label":o("chat.resizeSidebar","Resize chat sidebar"),tabIndex:0,onPointerDown:Ta,onKeyDown:ja}),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:()=>As(pe.sessionId),"data-testid":"chat-context-rename",children:[t.jsx(Ks,{size:14}),o("chat.rename","Rename")]}),t.jsxs("button",{onClick:()=>Na(pe.sessionId),"data-testid":"chat-context-archive",children:[t.jsx(Mr,{size:14}),o("chat.archive","Archive")]}),t.jsxs("button",{onClick:()=>{te(null),Fe(pe.sessionId)},"data-testid":"chat-context-delete",children:[t.jsx(On,{size:14}),o("chat.delete","Delete")]})]}),ve&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>ye(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:o("chat.renameConversationTitle","Rename Conversation")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:o("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:o("chat.conversationName","Conversation name")}),t.jsx("input",{id:"chat-rename-input",className:"input chat-rename-input",type:"text",value:Ke,placeholder:o("chat.renamePlaceholder","Untitled"),"data-testid":"chat-rename-input",onChange:e=>Ge(e.target.value),onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),Ns())},autoFocus:!0}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>ye(null),children:o("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void Ns(),"data-testid":"chat-rename-save",children:o("chat.save","Save")})]})]})}),we&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Fe(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:o("chat.deleteConversationTitle","Delete Conversation?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:o("chat.deleteConversationBody","This action cannot be undone. All messages in this conversation will be permanently deleted.")}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>Fe(null),children:o("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void Ea(we),children:o("chat.delete","Delete")})]})]})}),Dt&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>fe(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:o("chat.deleteRoomTitle","Delete Room?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:o("chat.deleteRoomBody","This action cannot be undone. This room and all its messages will be permanently deleted.")}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>fe(null),children:o("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>{(async()=>{try{await l.deleteRoom(Dt),fe(null)}catch{r(o("chat.failedToDeleteRoom","Failed to delete room"),"error")}})()},children:o("chat.delete","Delete")})]})]})}),m==="rooms"?t.jsxs("div",{ref:bn,className:"chat-thread",children:[l.activeRoom?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"chat-room-thread-header",children:[ne&&t.jsx("button",{className:"btn-icon",onClick:An,"data-testid":"chat-back-btn",children:t.jsx(Gs,{size:16})}),t.jsxs("div",{className:"chat-room-switcher-menu",ref:us,children:[t.jsxs("button",{type:"button",className:"chat-room-switcher-trigger","data-testid":"chat-room-switcher-trigger","aria-haspopup":"menu","aria-expanded":_t,onClick:()=>Ct(e=>!e),children:[t.jsxs("span",{className:"chat-thread-header-title",children:["#",l.activeRoom.name]}),t.jsx(Zt,{size:16,"aria-hidden":"true"})]}),_t&&t.jsx("div",{role:"menu",className:"chat-room-switcher-dropdown","data-testid":"chat-room-switcher-dropdown",children:l.rooms.map(e=>t.jsxs("button",{type:"button",role:"menuitem",className:`chat-room-switcher-option${e.id===l.activeRoom?.id?" chat-room-switcher-option--active":""}`,"data-testid":`chat-room-switcher-option-${e.id}`,onClick:()=>{O("room",e.id,e.updatedAt),l.selectRoom(e.id),Ct(!1)},children:["#",e.name]},e.id))})]}),t.jsx("div",{className:"chat-room-thread-members",children:l.activeRoomMembers.map(e=>t.jsx(un,{agent:je.get(e.agentId)??{id:e.agentId,name:e.agentId.slice(0,30)}},e.agentId))})]}),t.jsxs("div",{className:"chat-messages",ref:ke,onScroll:vs,children:[l.messagesLoading?t.jsx("div",{className:"chat-empty-state",children:o("chat.loadingMessages","Loading messages...")}):l.messages.filter(e=>e.content.trim()!==la).length===0?t.jsx("div",{className:"chat-empty-state",children:o("chat.noMessagesYet","No messages yet. Start the conversation!")}):l.messages.filter(e=>e.content.trim()!==la).map(e=>{const a=e.senderAgentId?je.get(e.senderAgentId)?.name??e.senderAgentId.slice(0,30):o("chat.you","You"),u={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(zn,{message:u,forcePlain:De,agentName:a,hideAssistantIdentity:!1,showAssistantModelTag:!1,activeModelTag:null,activeModelProvider:null,activeSessionId:l.activeRoom?.id??null,mentionAgentsByName:xn,roomContext:$e,onScrollToTop:_n,isAwaitingQuestionAnswer:!1,onQuestionSubmit:Vt},e.id)}),t.jsx("div",{ref:cs})]}),l.activeRoom&&rs&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:()=>Ie("fab-click"),children:[t.jsx(Zt,{size:14}),o("chat.latest","Latest")]})]}):t.jsx("div",{className:"chat-room-empty-pane","data-testid":"chat-rooms-empty-pane",children:o("chat.selectRoomOrCreate","Select a room or create one")}),l.activeRoom&&t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:Ht,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:e=>{dt(e.target.files),e.target.value=""}}),Ae.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:Ae.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:()=>ys(a),"data-testid":`chat-attachment-remove-${a}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${a}`))}),t.jsxs("div",{className:"chat-input-row",children:[t.jsx("button",{type:"button",className:"btn-icon chat-attach-btn","data-testid":"chat-attach-btn","aria-label":o("chat.attachFiles","Attach files"),onClick:()=>Ht.current?.click(),children:t.jsx(Vs,{size:16})}),t.jsxs("div",{className:`chat-input-wrapper${as?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),rt(!0)},onDragLeave:()=>rt(!1),onDrop:e=>{e.preventDefault(),rt(!1),dt(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:xs,className:"chat-input-textarea",placeholder:o("chat.typeMessage","Type a message..."),value:z,onChange:Ss,onKeyDown:Cs,onKeyUp:Ms,onClick:qt,onBlur:ks,onFocus:Rs,onPaste:ws,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||Ws()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(aa,{agents:ct,filter:Q,highlightedIndex:J,visible:K,onSelect:Wt,position:"below",roomMemberIds:$e?.memberIds,roomName:$e?.roomName})]}),t.jsx(Xs,{isStreaming:!1,canSend:!!(z.trim()||Ae.length>0),onSend:Mn})]})]})]}):t.jsxs("div",{ref:bn,className:"chat-thread",children:[(Qt||!ne)&&t.jsxs("div",{className:"chat-thread-header",children:[ne&&Qt&&t.jsx("button",{className:"btn-icon",onClick:Rn,"data-testid":"chat-back-btn",children:t.jsx(Gs,{size:16})}),t.jsx("div",{className:"chat-thread-header-identity","data-testid":"chat-thread-header-identity",children:Pa?t.jsxs("div",{className:"chat-mobile-session-menu",ref:ds,children:[t.jsxs("button",{type:"button",className:"btn chat-mobile-session-trigger","data-testid":"chat-mobile-session-trigger","aria-haspopup":"menu","aria-expanded":Lt,onClick:()=>Ve(e=>!e),children:[Ze?t.jsx(Bn,{provider:Ze,size:"md"}):t.jsx(qn,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:En}),js&&t.jsx("span",{className:"chat-model-tag",children:ze}),t.jsx(Zt,{size:16,"aria-hidden":"true"})]}),Lt&&t.jsxs("div",{className:"chat-mobile-session-dropdown",role:"menu","data-testid":"chat-mobile-session-dropdown",children:[j.map(e=>t.jsxs("div",{className:`chat-mobile-session-option-row${f?.id===e.id?" chat-mobile-session-option-row--active":""}`,role:"none",children:[t.jsx("button",{type:"button",role:"menuitem",className:`chat-mobile-session-option${f?.id===e.id?" chat-mobile-session-option--active":""}`,"data-testid":`chat-mobile-session-option-${e.id}`,onClick:()=>Es(e.id),children:t.jsx("span",{className:"chat-mobile-session-option-title",children:e.title||o("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":o("chat.renameConversationAria","Rename conversation {{title}}",{title:e.title||o("chat.untitledSession","Untitled")}),onClick:()=>As(e.id),children:t.jsx(Ks,{size:14})})]},e.id)),t.jsxs("button",{type:"button",role:"menuitem",className:"chat-mobile-session-new","data-testid":"chat-mobile-session-new",onClick:()=>{Ve(!1),T(!0)},children:[t.jsx(ht,{size:16,"aria-hidden":"true"}),t.jsx("span",{children:o("chat.newChat","New Chat")})]})]})]}):t.jsxs(t.Fragment,{children:[Ze?t.jsx(Bn,{provider:Ze,size:"md"}):t.jsx(qn,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:En}),js&&t.jsx("span",{className:"chat-model-tag",children:ze}),Ia&&Jt&&Tn?t.jsxs("span",{className:"chat-thread-header-context","data-testid":"chat-thread-context-window",title:Tn,"aria-label":Tn,children:[Ds," / ",Jt]}):null]})}),Qt&&t.jsx("button",{type:"button",className:`chat-thread-header-render-toggle${De?" chat-thread-header-render-toggle--plain":""}`,"data-testid":"chat-thread-render-toggle","aria-label":De?o("chat.showRenderedMarkdown","Show all messages as rendered Markdown"):o("chat.showPlainText","Show all messages as plain text"),onClick:_a,children:De?t.jsx(kr,{size:14}):t.jsx(Rr,{size:14})})]}),$a?t.jsx(Vr,{cliSessionId:Ba,tier:Oa,projectId:n,renderTranscript:Ps,renderComposer:()=>f?Ls():null}):t.jsxs(t.Fragment,{children:[Ps(),rs&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:()=>Ie("fab-click"),children:[t.jsx(Zt,{size:14}),o("chat.latest","Latest")]}),f&&Ls()]})]}),t.jsx(Gr,{isOpen:mn,onClose:()=>nt(!1),projectId:n,existingRoomNames:l.rooms.map(e=>e.name),onCreate:async e=>{await l.createRoom({name:e.name,memberAgentIds:e.memberAgentIds}),m!=="rooms"&&I("rooms"),nt(!1),ne&&me(!1)}})]}),S&&t.jsx(uo,{projectId:n,defaultModel:st,onClose:()=>T(!1),onCreate:Aa})]})}export{wo as ChatView,so as clampChatInputHeight,no as resolveChatInputOverflowY,ga as resolveSessionProvider};
|