@runfusion/fusion 0.53.0 → 0.54.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 +587 -304
- package/dist/client/.vite/manifest.json +233 -233
- package/dist/client/assets/{AgentDetailView-CHSaiBNh.js → AgentDetailView-BJditQat.js} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor-Bfy55DIO.js → AgentPermissionPolicyEditor-D2AQ6swg.js} +1 -1
- package/dist/client/assets/{AgentsView-CMB_7xly.js → AgentsView-DwEFPKuN.js} +3 -3
- package/dist/client/assets/{ChatView-IwWaNSeS.js → ChatView-B4bjPXFN.js} +1 -1
- package/dist/client/assets/{CommandCenter-B84TXfg6.js → CommandCenter-BABqoSkg.js} +1 -1
- package/dist/client/assets/{DevServerView-B9QEJETp.js → DevServerView-DlgOzRdC.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-BnaH1pb_.js → DirectoryPicker-BwMSmxYS.js} +1 -1
- package/dist/client/assets/{DocumentsView-Cvm4OBRl.js → DocumentsView-BfaRXFg5.js} +1 -1
- package/dist/client/assets/{EvalsView-BpgA1nvW.js → EvalsView-CQBNrO5n.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-D4Z1IAW2.js → ExperimentalAgentOnboardingModal-2SDqP2lc.js} +1 -1
- package/dist/client/assets/{GoalsView-ui2CM549.js → GoalsView-BgkX-_SB.js} +1 -1
- package/dist/client/assets/{InsightsView-qdJ5GhE_.js → InsightsView-CJY4eZcO.js} +1 -1
- package/dist/client/assets/{MemoryView-Csc-90G0.js → MemoryView-5Crtfanz.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-Dbm3IpQW.js → PiExtensionsManager-COmzskVa.js} +1 -1
- package/dist/client/assets/{PluginManager-B_zgRoI8.js → PluginManager-CGWXqZMa.js} +1 -1
- package/dist/client/assets/{PullRequestView-CB6L4vJw.js → PullRequestView-DAHh0FVM.js} +1 -1
- package/dist/client/assets/{ResearchView-CRtoNtCn.js → ResearchView-cSUka3sd.js} +1 -1
- package/dist/client/assets/{SecretsView-JB0lfuzZ.js → SecretsView-ChFAfFRY.js} +1 -1
- package/dist/client/assets/{SessionTerminal-CnxWsHxS.js → SessionTerminal-CtQKDaqI.js} +1 -1
- package/dist/client/assets/SettingsModal-BYaotQ2o.js +21 -0
- package/dist/client/assets/{SettingsModal-CS1-kUSO.js → SettingsModal-pAz_hOoN.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-PYaS5VB9.js → SetupWizardModal-eHZHi8VP.js} +2 -2
- package/dist/client/assets/{ShadcnColorPicker-Tl1Xu-G4.js → ShadcnColorPicker-CsfgWpf6.js} +1 -1
- package/dist/client/assets/{SkillsView-CWVVQ3y_.js → SkillsView-BSUplEYb.js} +1 -1
- package/dist/client/assets/{TodoView-CCloQhKG.js → TodoView-DhBseLvM.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-Dz8TU3is.js → WorkflowNodeEditor-Bi12CNif.js} +1 -1
- package/dist/client/assets/{agentSkills-CFiw3LtX.js → agentSkills-qVb0x_G3.js} +1 -1
- package/dist/{desktop/client/assets/architectureDiagram-3BPJPVTR-MtAzQYUn.js → client/assets/architectureDiagram-3BPJPVTR-DEt4eIEQ.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-CRyxRdCJ.js → blockDiagram-GPEHLZMM-CJuX0UM_.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CFjMzS7o.js → c4Diagram-AAUBKEIU-a46Lm113.js} +1 -1
- package/dist/client/assets/channel-BGI9APMr.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-BMvR_yYt.js → chunk-2J33WTMH-iBhwyS0c.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-BUPHOpQy.js → chunk-4BX2VUAB-C7lS5wER.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-C1paNu5q.js → chunk-55IACEB6-CQ6YOncn.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-CG4hnjZD.js → chunk-727SXJPM-CveMaMKK.js} +1 -1
- package/dist/{desktop/client/assets/chunk-AQP2D5EJ-whMl1uk-.js → client/assets/chunk-AQP2D5EJ-DErjGUEk.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-CY6d36wo.js → chunk-FMBD7UC4-DXUvEFfJ.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-cbKdnrGz.js → chunk-ND2GUHAM-w5RqSj1J.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BPenWytO.js → chunk-QZHKN3VN-CAi0lJ7V.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-g6hCcufy.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-g6hCcufy.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-BCFGTolm.js → cose-bilkent-S5V4N54A-Ck2h4uV5.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-yVhB-t2h.js → dagre-BM42HDAG-BCRTXNj6.js} +1 -1
- package/dist/client/assets/{dashboard-view-C9dPtr0u.js → dashboard-view-BfLJ60Kd.js} +1 -1
- package/dist/client/assets/{dashboard-view-DHb5D1Hc.js → dashboard-view-D9rF_PCq.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-DtV2x39G.js → diagram-2AECGRRQ-DTTk-DYO.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-DwwRRghJ.js → diagram-5GNKFQAL-jDc9kMi2.js} +1 -1
- package/dist/{desktop/client/assets/diagram-KO2AKTUF-CFABtl0k.js → client/assets/diagram-KO2AKTUF-CcLmzlGr.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-C_AszN6R.js → diagram-LMA3HP47-DCW8XKQj.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-C-n05SOC.js → diagram-OG6HWLK6-wbbKquPs.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-B-9edACX.js → erDiagram-TEJ5UH35-Fo933Mo7.js} +1 -1
- package/dist/{desktop/client/assets/flowDiagram-I6XJVG4X-BCa7HuJ3.js → client/assets/flowDiagram-I6XJVG4X-Dfum7HZP.js} +1 -1
- package/dist/client/assets/{folder-open-DLACu19m.js → folder-open-B8vOwFeP.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-DaqvxM8Q.js → ganttDiagram-6RSMTGT7-BzEBCn01.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CfWhxq7Y.js → gitGraphDiagram-PVQCEYII-CgovghHs.js} +1 -1
- package/dist/client/assets/index-BjELA24x.js +1336 -0
- package/dist/client/assets/index-DwGW7OJh.css +1 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-BjDZFy9D.js → infoDiagram-5YYISTIA-BzpU4Wys.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-BoMTizU1.js → ishikawaDiagram-YF4QCWOH-cpp5pozu.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-BozwtvCa.js → journeyDiagram-JHISSGLW-BVjcw6oo.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-CvrpmIXn.js → kanban-definition-UN3LZRKU-4unAhBzo.js} +1 -1
- package/dist/client/assets/{mermaid.core-KeGuTimD.js → mermaid.core-DzIyUj9t.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-DMjY04EF.js → mindmap-definition-RKZ34NQL-Be_yfVir.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-r_9L-pQr.js → pieDiagram-4H26LBE5-Cfnw2aji.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CcZKANsw.js → quadrantDiagram-W4KKPZXB-BFlC-_Uo.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-kqu_zuS5.js → requirementDiagram-4Y6WPE33-DpVPzCOx.js} +1 -1
- package/dist/{desktop/client/assets/sankeyDiagram-5OEKKPKP-DLGaZ5Gy.js → client/assets/sankeyDiagram-5OEKKPKP-DM-gKKP0.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DAKxqBlR.js → sequenceDiagram-3UESZ5HK-DjhZCZhd.js} +1 -1
- package/dist/{desktop/client/assets/shield-alert-D-Fxd0Va.js → client/assets/shield-alert-DCfkjjYc.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-RJ2xY2-p.js → stateDiagram-AJRCARHV-BCA96rdI.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-BzhgwjfG.js → stateDiagram-v2-BHNVJYJU-DHds08RS.js} +1 -1
- package/dist/{desktop/client/assets/timeline-definition-PNZ67QCA-DHzoutyf.js → client/assets/timeline-definition-PNZ67QCA-CHW2OQRw.js} +1 -1
- package/dist/client/assets/{upload-B4v89B2G.js → upload-EJc5PJPz.js} +1 -1
- package/dist/{desktop/client/assets/users-DuxdQK9U.js → client/assets/users-C-e-99Vp.js} +1 -1
- package/dist/{desktop/client/assets/vennDiagram-CIIHVFJN-CKB5IBNU.js → client/assets/vennDiagram-CIIHVFJN-shGh4eBY.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-_KOTjC_D.js → wardley-L42UT6IY-l0RGrVhn.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-D16g9VQZ.js → wardleyDiagram-YWT4CUSO-C-USmO8A.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-CMIdike8.js → xychartDiagram-2RQKCTM6-CHX9Umta.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/version.json +1 -1
- package/dist/desktop/client/.vite/manifest.json +342 -340
- package/dist/desktop/client/assets/AgentDetailView-BzSyldiW.css +1 -0
- package/dist/desktop/client/assets/AgentDetailView-CmKvdHMb.js +18 -0
- package/dist/desktop/client/assets/AgentPermissionPolicyEditor-C-A5YsOB.js +6 -0
- package/dist/desktop/client/assets/AgentPermissionPolicyEditor-TpdlOWZW.css +1 -0
- package/dist/desktop/client/assets/AgentsView-Ci8aGe-d.js +24 -0
- package/dist/desktop/client/assets/ChatView-D_2wBIIx.css +1 -0
- package/dist/desktop/client/assets/ChatView-_ZTSW2bn.js +6 -0
- package/dist/desktop/client/assets/CommandCenter-B7_gwqKx.js +71 -0
- package/dist/desktop/client/assets/CommandCenter-B9q-zM9p.css +1 -0
- package/dist/desktop/client/assets/{DevServerView-CnEZI8Ax.js → DevServerView-BFF8C0F8.js} +1 -1
- package/dist/desktop/client/assets/{DirectoryPicker-BUIZKLgl.js → DirectoryPicker-CfhD5v7D.js} +1 -1
- package/dist/desktop/client/assets/{DocumentsView-BFq47DE7.js → DocumentsView-DpeUtihC.js} +1 -1
- package/dist/desktop/client/assets/{EvalsView-BEiGrFFa.js → EvalsView-BcBDpBZQ.js} +1 -1
- package/dist/desktop/client/assets/{ExperimentalAgentOnboardingModal-WzGxsxku.js → ExperimentalAgentOnboardingModal-CGeNiEm7.js} +1 -1
- package/dist/desktop/client/assets/{GoalsView-CUh8JBnJ.css → GoalsView-4-eEOeqw.css} +1 -1
- package/dist/desktop/client/assets/GoalsView-t-86-sWc.js +2 -0
- package/dist/desktop/client/assets/{InsightsView-C14VGuty.js → InsightsView-BKdG05Yh.js} +1 -1
- package/dist/desktop/client/assets/{MemoryView--XlaBNzQ.js → MemoryView-BhT-vG17.js} +1 -1
- package/dist/desktop/client/assets/{PiExtensionsManager-BaQnu6IY.js → PiExtensionsManager-C5kqG7zt.js} +1 -1
- package/dist/desktop/client/assets/{PluginManager-DqnMI_Zm.js → PluginManager-4nZ3Dccd.js} +1 -1
- package/dist/desktop/client/assets/PullRequestView-NkeImY1n.css +1 -0
- package/dist/desktop/client/assets/PullRequestView-m0-ygvgV.js +6 -0
- package/dist/desktop/client/assets/{ResearchView-OlGNDmqI.js → ResearchView-Be0JmVPT.js} +1 -1
- package/dist/desktop/client/assets/{SecretsView-vHezddkt.js → SecretsView-BpjSNOmd.js} +1 -1
- package/dist/desktop/client/assets/SessionTerminal-B2tZ8AY1.js +2 -0
- package/dist/desktop/client/assets/{SettingsModal-CvbiSIHS.css → SettingsModal-BzZNPNIh.css} +1 -1
- package/dist/{client/assets/SettingsModal-D7ArHi7z.js → desktop/client/assets/SettingsModal-COlmbl7p.js} +3 -3
- package/dist/desktop/client/assets/SettingsModal-CaE4JYxi.css +1 -0
- package/dist/desktop/client/assets/{SettingsModal-EWTm15Fk.js → SettingsModal-pY1WnN3a.js} +1 -1
- package/dist/desktop/client/assets/{SetupWizardModal-DsBTXY7k.js → SetupWizardModal-BFzU4EUM.js} +2 -2
- package/dist/desktop/client/assets/ShadcnColorPicker-3OgfenMo.css +1 -0
- package/dist/desktop/client/assets/ShadcnColorPicker-DnTw9J9K.js +11 -0
- package/dist/desktop/client/assets/SkillsView-BeOeeV_9.js +1 -0
- package/dist/desktop/client/assets/SkillsView-tAW7TTCz.css +1 -0
- package/dist/desktop/client/assets/{TodoView-CIsL_uvQ.css → TodoView--YoVYWvw.css} +1 -1
- package/dist/desktop/client/assets/{TodoView-CV7ma8AL.js → TodoView-Yb7RPsSG.js} +1 -1
- package/dist/desktop/client/assets/WorkflowNodeEditor-Df-_206_.css +1 -0
- package/dist/desktop/client/assets/WorkflowNodeEditor-ygM9IC7d.js +8 -0
- package/dist/desktop/client/assets/{agentSkills-BQzMaofj.js → agentSkills-hS-ir3dK.js} +1 -1
- package/dist/desktop/client/assets/app-5S4z84u5.js +13 -0
- package/dist/desktop/client/assets/app-B1VYocx2.js +13 -0
- package/dist/desktop/client/assets/app-BhtYYxin.js +13 -0
- package/dist/desktop/client/assets/app-Cts0__Vx.js +13 -0
- package/dist/desktop/client/assets/app-DczBmsP4.js +13 -0
- package/dist/desktop/client/assets/app-_GFUqcMK.js +13 -0
- package/dist/{client/assets/architectureDiagram-3BPJPVTR-DGp4hfr1.js → desktop/client/assets/architectureDiagram-3BPJPVTR-WcTzF6ME.js} +1 -1
- package/dist/desktop/client/assets/{blockDiagram-GPEHLZMM-zelYfqn3.js → blockDiagram-GPEHLZMM-BYmICOh-.js} +1 -1
- package/dist/desktop/client/assets/{c4Diagram-AAUBKEIU-D3hNx0Hv.js → c4Diagram-AAUBKEIU-3ags6jHx.js} +1 -1
- package/dist/desktop/client/assets/channel-CxoQ1L5k.js +1 -0
- package/dist/desktop/client/assets/{chunk-2J33WTMH-B9IKEZ0p.js → chunk-2J33WTMH-C2YTcAIE.js} +1 -1
- package/dist/desktop/client/assets/{chunk-4BX2VUAB-Dd7FeAwm.js → chunk-4BX2VUAB-CM-ULeCo.js} +1 -1
- package/dist/desktop/client/assets/{chunk-55IACEB6-DbzB46sJ.js → chunk-55IACEB6-puic6XS6.js} +1 -1
- package/dist/desktop/client/assets/{chunk-727SXJPM-CDmlBZKV.js → chunk-727SXJPM-D19Luj8o.js} +1 -1
- package/dist/{client/assets/chunk-AQP2D5EJ-Dm2nZ5Sz.js → desktop/client/assets/chunk-AQP2D5EJ-CMrfBV_j.js} +1 -1
- package/dist/desktop/client/assets/{chunk-FMBD7UC4-E1WzORFR.js → chunk-FMBD7UC4-C_7tmt8f.js} +1 -1
- package/dist/desktop/client/assets/{chunk-ND2GUHAM-e0FuVXk6.js → chunk-ND2GUHAM-CS1wETTI.js} +1 -1
- package/dist/desktop/client/assets/{chunk-QZHKN3VN-B6q2GrbB.js → chunk-QZHKN3VN-BUFmz9j9.js} +1 -1
- package/dist/desktop/client/assets/classDiagram-4FO5ZUOK-CkwAKz6i.js +1 -0
- package/dist/desktop/client/assets/classDiagram-v2-Q7XG4LA2-CkwAKz6i.js +1 -0
- package/dist/desktop/client/assets/{cose-bilkent-S5V4N54A-BjSZ5UKD.js → cose-bilkent-S5V4N54A-CKNwQVxq.js} +1 -1
- package/dist/desktop/client/assets/{dagre-BM42HDAG-DxMH6moD.js → dagre-BM42HDAG-CUUNF5LG.js} +1 -1
- package/dist/desktop/client/assets/{dashboard-view-BW8tRppT.js → dashboard-view-DTUxDN-H.js} +1 -1
- package/dist/desktop/client/assets/{dashboard-view-L_H47lEp.js → dashboard-view-DqJev4PV.js} +1633 -1633
- package/dist/desktop/client/assets/{diagram-2AECGRRQ-DDUjym9F.js → diagram-2AECGRRQ-D2jVjZrI.js} +1 -1
- package/dist/desktop/client/assets/{diagram-5GNKFQAL-nEqF7CSb.js → diagram-5GNKFQAL-DfwBCAme.js} +1 -1
- package/dist/{client/assets/diagram-KO2AKTUF-JLrDx8k8.js → desktop/client/assets/diagram-KO2AKTUF-CBWuxzRU.js} +1 -1
- package/dist/desktop/client/assets/{diagram-LMA3HP47-ButXw1gy.js → diagram-LMA3HP47-DIdjbaEx.js} +1 -1
- package/dist/desktop/client/assets/{diagram-OG6HWLK6-CA17ZRZI.js → diagram-OG6HWLK6-DU6aJ_ab.js} +1 -1
- package/dist/desktop/client/assets/{erDiagram-TEJ5UH35-DmROZaa0.js → erDiagram-TEJ5UH35-CB7jraE9.js} +1 -1
- package/dist/{client/assets/flowDiagram-I6XJVG4X-D5ThlzTR.js → desktop/client/assets/flowDiagram-I6XJVG4X-DAuaVo8C.js} +1 -1
- package/dist/desktop/client/assets/{folder-open-G_6UGFyI.js → folder-open-B3OWnACS.js} +1 -1
- package/dist/desktop/client/assets/{ganttDiagram-6RSMTGT7-BeAYpPxh.js → ganttDiagram-6RSMTGT7-BF3vyyoq.js} +1 -1
- package/dist/desktop/client/assets/{gitGraphDiagram-PVQCEYII-BLwp2lCj.js → gitGraphDiagram-PVQCEYII-kfNrpgK7.js} +1 -1
- package/dist/desktop/client/assets/index-BCe5TILt.css +1 -0
- package/dist/{client/assets/index-JlBzf2ck.js → desktop/client/assets/index-lGrAUOVY.js} +240 -240
- package/dist/desktop/client/assets/{infoDiagram-5YYISTIA-DF-q3NMx.js → infoDiagram-5YYISTIA-CuKJEoCg.js} +1 -1
- package/dist/desktop/client/assets/{ishikawaDiagram-YF4QCWOH-CKYDbUiH.js → ishikawaDiagram-YF4QCWOH-CE_2WBE3.js} +1 -1
- package/dist/desktop/client/assets/{journeyDiagram-JHISSGLW-BgkdCr6Q.js → journeyDiagram-JHISSGLW-BYQgXH_-.js} +1 -1
- package/dist/desktop/client/assets/{kanban-definition-UN3LZRKU-B9V97j0D.js → kanban-definition-UN3LZRKU-sr34WcdB.js} +1 -1
- package/dist/desktop/client/assets/{linear-dXivciGL.js → linear-CwI45w2t.js} +1 -1
- package/dist/desktop/client/assets/{mermaid.core-BBN7poU5.js → mermaid.core-CY1aILvw.js} +4 -4
- package/dist/desktop/client/assets/{mindmap-definition-RKZ34NQL-C2_Jhjnr.js → mindmap-definition-RKZ34NQL-BAxyJwWa.js} +1 -1
- package/dist/desktop/client/assets/{pieDiagram-4H26LBE5-DOrO8u2b.js → pieDiagram-4H26LBE5-DV4jRFhI.js} +1 -1
- package/dist/desktop/client/assets/{quadrantDiagram-W4KKPZXB-D4xxkMPR.js → quadrantDiagram-W4KKPZXB-CRtFlWS-.js} +1 -1
- package/dist/desktop/client/assets/{requirementDiagram-4Y6WPE33-BuyUaAlW.js → requirementDiagram-4Y6WPE33-C3kGj3sc.js} +1 -1
- package/dist/{client/assets/sankeyDiagram-5OEKKPKP-BLbamdKk.js → desktop/client/assets/sankeyDiagram-5OEKKPKP-rH_2R8B6.js} +1 -1
- package/dist/desktop/client/assets/{sequenceDiagram-3UESZ5HK-B3xhIZnf.js → sequenceDiagram-3UESZ5HK-BUlBU-AX.js} +1 -1
- package/dist/{client/assets/shield-alert-BdoEg9Yo.js → desktop/client/assets/shield-alert-CXSmWFIA.js} +1 -1
- package/dist/desktop/client/assets/{stateDiagram-AJRCARHV-3C2cVTwx.js → stateDiagram-AJRCARHV-CZloQCqS.js} +1 -1
- package/dist/desktop/client/assets/{stateDiagram-v2-BHNVJYJU-uyCHbCJn.js → stateDiagram-v2-BHNVJYJU-CMUjVDVd.js} +1 -1
- package/dist/desktop/client/assets/{time-DoDTxsna.js → time-Ckmi30gH.js} +1 -1
- package/dist/{client/assets/timeline-definition-PNZ67QCA-CT9ZQc6n.js → desktop/client/assets/timeline-definition-PNZ67QCA-ChiOOBC-.js} +1 -1
- package/dist/desktop/client/assets/{upload-Cv9kGgTr.js → upload-BHs6kHbo.js} +1 -1
- package/dist/{client/assets/users-vuVXnTg0.js → desktop/client/assets/users-PPo03TKl.js} +1 -1
- package/dist/desktop/client/assets/{vendor-reactflow-Bg-Qjzh8.js → vendor-reactflow-CnI7NMXG.js} +1 -1
- package/dist/{client/assets/vennDiagram-CIIHVFJN-DCcEEtaE.js → desktop/client/assets/vennDiagram-CIIHVFJN-Dq4yiSea.js} +1 -1
- package/dist/desktop/client/assets/{wardley-L42UT6IY-DUw_nnW7.js → wardley-L42UT6IY-Ctho3NZr.js} +1 -1
- package/dist/desktop/client/assets/{wardleyDiagram-YWT4CUSO-CgWLugtp.js → wardleyDiagram-YWT4CUSO-CXcLpQ87.js} +1 -1
- package/dist/desktop/client/assets/{xychartDiagram-2RQKCTM6-BWpeCtlX.js → xychartDiagram-2RQKCTM6-B4tWIB07.js} +1 -1
- package/dist/desktop/client/index.html +8 -8
- package/dist/desktop/client/theme-data.css +296 -0
- package/dist/desktop/client/version.json +1 -1
- package/dist/desktop/main.js +21 -15519
- package/dist/desktop/main.js.map +4 -4
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +486 -233
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugin-sdk/index.d.ts +2 -0
- 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/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 +2 -1
- package/package.json +1 -1
- package/dist/client/assets/channel-C9LQN4ee.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-C5TeEr7c.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C5TeEr7c.js +0 -1
- package/dist/client/assets/index-D1IHwGhg.css +0 -1
- package/dist/desktop/client/assets/AgentDetailView-CVv4BoTE.js +0 -18
- package/dist/desktop/client/assets/AgentDetailView-CgbB51Iw.css +0 -1
- package/dist/desktop/client/assets/AgentPermissionPolicyEditor-CGxjOr6G.css +0 -1
- package/dist/desktop/client/assets/AgentPermissionPolicyEditor-CQLNC_-O.js +0 -6
- package/dist/desktop/client/assets/AgentsView-DybRxzuI.js +0 -29
- package/dist/desktop/client/assets/ChatView-BtjkE0V7.css +0 -1
- package/dist/desktop/client/assets/ChatView-D_byETJX.js +0 -19
- package/dist/desktop/client/assets/CommandCenter-DDjpYkPe.css +0 -1
- package/dist/desktop/client/assets/CommandCenter-DEXoC2F7.js +0 -71
- package/dist/desktop/client/assets/GoalsView-C6Qsc-VS.js +0 -2
- package/dist/desktop/client/assets/PullRequestView-C8kBQljB.js +0 -6
- package/dist/desktop/client/assets/PullRequestView-CpdE3Yo_.css +0 -1
- package/dist/desktop/client/assets/SessionTerminal-ClbvT_Fb.js +0 -2
- package/dist/desktop/client/assets/SettingsModal-CL4GS1q-.js +0 -21
- package/dist/desktop/client/assets/SettingsModal-ino68pI2.css +0 -1
- package/dist/desktop/client/assets/ShadcnColorPicker-BciIe8Ls.js +0 -11
- package/dist/desktop/client/assets/ShadcnColorPicker-pqVWCC5-.css +0 -1
- package/dist/desktop/client/assets/SkillsView-CJ8snrma.css +0 -1
- package/dist/desktop/client/assets/SkillsView-UyhBA4_r.js +0 -1
- package/dist/desktop/client/assets/WorkflowNodeEditor-BOouksjw.css +0 -1
- package/dist/desktop/client/assets/WorkflowNodeEditor-ThUL4msx.js +0 -8
- package/dist/desktop/client/assets/app-BJGkp7Tt.js +0 -13
- package/dist/desktop/client/assets/app-BKLUvvm8.js +0 -13
- package/dist/desktop/client/assets/app-BaoNC9zg.js +0 -13
- package/dist/desktop/client/assets/app-CZQ_fFNf.js +0 -13
- package/dist/desktop/client/assets/app-DAu3AzsS.js +0 -13
- package/dist/desktop/client/assets/app-DgezOJub.js +0 -13
- package/dist/desktop/client/assets/channel-Dj1-27Yg.js +0 -1
- package/dist/desktop/client/assets/classDiagram-4FO5ZUOK-36LCOV5F.js +0 -1
- package/dist/desktop/client/assets/classDiagram-v2-Q7XG4LA2-36LCOV5F.js +0 -1
- package/dist/desktop/client/assets/index-CSVe-MIA.css +0 -1
- package/dist/desktop/client/assets/index-DIURDjTF.js +0 -1301
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as t,j as r}from"./vendor-react-SZ_qB27O.js";import{d1 as Je,d2 as je,d3 as Nr,d4 as Ce,ai as Ye,d5 as Oe,d6 as ze,d7 as Fe,d8 as $e,d9 as Sr,da as be,db as kr,dc as jr,dd as Cr,de as Er,df as Lr,bU as se,dg as xe,L as ve,aK as Rr,dh as Dr,di as _r,dj as Mr,o as Pr,b8 as Qe,dk as Tr,V as Ur,c2 as Ar,cl as Or,cn as zr,dl as Fr,F as Be,X as $r,aj as Br,R as Hr}from"./index-JlBzf2ck.js";import{u as ue}from"./vendor-i18n-GF3RlKbq.js";import{S as Ze}from"./shield-alert-BdoEg9Yo.js";import"./vendor-reactflow-CnI7NMXG.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";const Ee=500,Vr=3e3;function W(e){return e instanceof Error?e.message:String(e)}function er(e){return e.length<=Ee?e:e.slice(-Ee)}function ye(e,i){return er([...e,i])}function Z(e){try{return JSON.parse(e)}catch{return null}}function oe(e){const i=e.text??"";return e.stream==="stderr"?`[stderr] ${i}`:i}function Wr(e){return e?.previewUrl??null}async function He(e){return kr(e)}async function Ve(e,i){return jr(e,i)}async function Ir(e){return Cr(e)}async function qr(e){return Er(e)}async function We(e){return Lr(e)}function K(e){try{return e()}catch{return null}}function Ne(){return typeof K(()=>je)=="function"&&typeof K(()=>Je)=="function"}function Y(e){return{config:{id:e.id??"default",name:e.name??"Dev Server",command:e.command??"",cwd:e.cwd??"."},status:e.status,runtime:e.pid?{pid:e.pid,startedAt:e.startedAt??new Date().toISOString(),exitCode:e.exitCode??void 0,previewUrl:e.previewUrl}:void 0,previewUrl:e.previewUrl??e.detectedUrl??e.manualUrl??void 0,logHistory:(e.logs??[]).map(i=>({timestamp:new Date().toISOString(),stream:i.startsWith("[stderr]")?"stderr":"stdout",text:i.replace(/^\[stderr\]\s*/,"")}))}}function Kr(e){const{t:i}=ue("app"),[p,s]=t.useState(null),[g,v]=t.useState([]),[y,u]=t.useState([]),[j,C]=t.useState([]),[z,E]=t.useState(!0),[k,m]=t.useState(null),o=t.useRef(0),[d,U]=t.useState(null),T=t.useCallback(a=>{if(s(a),a?.logHistory){const n=a.logHistory.slice(-Ee).map(oe);u(n)}},[]),_=t.useCallback(async()=>{const a=o.current;try{if(Ne())if(d){const n=await Je(d,e);if(o.current!==a)return;T(n)}else{const n=await je(e);if(o.current!==a)return;v(n),n.length>0&&(U(n[0].config.id),T(n[0]))}else{const n=await He(e);if(o.current!==a)return;const h=Y(n);v([h]),T(h)}m(null)}catch(n){if(o.current!==a)return;m(W(n))}},[T,e,d]);t.useEffect(()=>{o.current+=1;const a=o.current;s(null),v([]),u([]),C([]),E(!0),m(null),U(null),(async()=>{try{const[h,c]=await Promise.allSettled([Ne()?je(e):He(e).then(x=>[Y(x)]),typeof K(()=>be)=="function"?be(e):We(e).then(x=>x.map(L=>({name:L.name,command:L.command,cwd:L.cwd,scriptName:L.scriptName,packagePath:L.packagePath})))]);if(o.current!==a)return;let b=null;if(h.status==="fulfilled"){const x=h.value;if(v(x),x.length>0){const L=x[0];Ne()&&U(L.config.id),T(L)}}else b=W(h.reason);c.status==="fulfilled"&&C(c.value),b&&m(b)}catch(h){if(o.current!==a)return;m(W(h))}finally{o.current===a&&E(!1)}})()},[T,e]),t.useEffect(()=>{const a=d?Nr(d,e):typeof K(()=>Ce)=="function"?Ce(e):null;if(!a)return;const n=o.current,h=Ye(a,{events:{history:c=>{if(o.current!==n)return;const b=Z(c.data);if(b?.lines){const x=b.lines.map(oe);u(er(x))}},log:c=>{if(o.current!==n)return;const b=Z(c.data);if(b){const x=typeof b.line=="string"?b.line:oe(b);u(L=>ye(L,x))}},"dev-server:log":c=>{if(o.current!==n)return;const b=Z(c.data);if(b){const x=typeof b.line=="string"?b.line:oe(b);u(L=>ye(L,x))}},"dev-server:output":c=>{if(o.current!==n)return;const b=Z(c.data);b?.line&&u(x=>ye(x,b.line))},status:c=>{if(o.current!==n)return;const b=Z(c.data),x=b?.status;x&&s(L=>L&&{...L,status:x,runtime:b.pid?{...L.runtime??{startedAt:new Date().toISOString()},pid:b.pid}:L.runtime})},"dev-server:status":c=>{if(o.current!==n)return;const b=Z(c.data);if(b?.status){const x=Y(b);s(x),v([x])}},stopped:()=>{o.current},failed:()=>{o.current}},onReconnect:()=>{o.current===n&&_()},onError:()=>{o.current===n&&m(c=>c??i("devserver.lostConnection","Lost log stream connection."))}});return()=>{h()}},[e,_,d]),t.useEffect(()=>{if(p?.status!=="running"&&p?.status!=="starting")return;const a=setInterval(()=>{_()},Vr);return()=>{clearInterval(a)}},[_,p?.status]);const M=t.useCallback(async(a,n)=>{o.current+=1;const h=o.current;try{let c;const b=typeof n=="string"&&n.length>0,x=p?.config?.cwd??".";if(!(b&&n!==x)&&d&&typeof K(()=>Oe)=="function")c=await Oe(d,e);else{const V=await Ve({command:a,cwd:n},e);c=Y(V)}if(o.current!==h)return;s(c),m(null)}catch(c){if(o.current!==h)return;throw m(W(c)),c}},[e,p?.config?.cwd,d]),R=t.useCallback(async()=>{o.current+=1;const a=o.current;try{let n;if(d&&typeof K(()=>ze)=="function")n=await ze(d,e);else{const h=await Ir(e);n=Y(h)}if(o.current!==a)return;s(n),m(null)}catch(n){if(o.current!==a)return;throw m(W(n)),n}},[e,d]),F=t.useCallback(async()=>{o.current+=1;const a=o.current;try{let n;if(d&&typeof K(()=>Fe)=="function")n=await Fe(d,e);else{const h=await qr(e);n=Y(h)}if(o.current!==a)return;s(n),m(null)}catch(n){if(o.current!==a)return;throw m(W(n)),n}},[e,d]),A=t.useCallback(async a=>{o.current+=1;const n=o.current;try{let h;if(d&&typeof K(()=>$e)=="function")h=await $e(d,a,e);else{const c=await Sr({url:a},e);h={url:c.manualUrl??c.previewUrl??c.detectedUrl??null,source:c.manualUrl?"manual":"auto"}}if(o.current!==n)return;s(c=>c?{...c,previewUrl:h.url??void 0}:null),m(null)}catch(h){if(o.current!==n)return;throw m(W(h)),h}},[e,d]),$=t.useCallback(async()=>{o.current+=1;const a=o.current;try{let n;try{n=await be(e)}catch{n=(await We(e)).map(c=>({name:c.name,command:c.command,cwd:c.cwd,scriptName:c.scriptName,packagePath:c.packagePath}))}if(o.current!==a)return;C(n),m(null)}catch(n){if(o.current!==a)return;throw m(W(n)),n}},[e]),w=t.useCallback(async(a,n)=>{if(typeof a!="string"&&!d)try{const b=a,x=await Ve({command:b.command,cwd:b.cwd,scriptName:b.scriptName,packagePath:b.packagePath??b.cwd},e),L=Y(x);s(L),v([L]),m(null);return}catch(b){throw m(W(b)),b}const h=typeof a=="string"?a:a.command,c=typeof a=="string"?n:a.cwd;await M(h,c)},[e,M,d]),f=t.useCallback(async()=>{await R()},[R]),D=t.useCallback(async()=>{await F()},[F]),B=t.useCallback(async a=>{await A(a)},[A]),O=t.useCallback(async()=>{await $()},[$]),I=t.useCallback(async()=>{await _()},[_]),S=Wr(p),N=p?{...p,pid:p.runtime?.pid}:null;return{session:p,sessions:g,logs:y,detectedCommands:j,previewUrl:S,isLoading:z,error:k,startServer:M,stopServer:R,restartServer:F,setPreviewUrl:A,detectCommands:$,refresh:_,candidates:j,serverState:N,loading:z,start:w,stop:f,restart:D,setManualUrl:B,detect:O,refreshStatus:I}}const Ie=500,qe=100;function rr(e){return e.length>Ie?e.slice(-Ie):e}function tr(e){return e==="stderr"?"stderr":"stdout"}function ce(e){try{return JSON.parse(e.data)}catch{return null}}function de(e,i){return{id:typeof e.id=="number"&&Number.isFinite(e.id)?e.id:i,text:typeof e.text=="string"?e.text:"",stream:tr(e.stream),timestamp:typeof e.timestamp=="string"?e.timestamp:""}}function Xr(e,i){return{id:i,text:e,stream:"stdout",timestamp:""}}function Se(e,i){if(i.length===0)return e;const p=[...e],s=new Set(e.map(g=>g.id));for(const g of i)s.has(g.id)||(s.add(g.id),p.push(g));return p.sort((g,v)=>g.id-v.id),rr(p)}function Gr(e,i){const[p,s]=t.useState([]),[g,v]=t.useState(!1),[y,u]=t.useState(!1),[j,C]=t.useState(!1),[z,E]=t.useState(null),k=t.useRef(null),m=t.useRef(!1),o=t.useRef(0),d=t.useRef(0),U=t.useRef(e),T=t.useRef(i),_=t.useRef(0),M=t.useRef(1);(U.current!==e||T.current!==i)&&(U.current=e,T.current=i,o.current++,se({view:"useDevServerLogs",trigger:"project-context-change",projectId:e,replayAttempted:!1,reason:"context-version-bumped"}),m.current=!0,_.current=0,M.current=1,s([]),v(!1),u(!1),C(!1),E(null),k.current&&(k.current(),k.current=null)),t.useEffect(()=>{if(!i){k.current&&(k.current(),k.current=null);return}const w=o.current,f=++d.current;m.current=!1,v(!0);const D=(S,N)=>{const a=rr(S);s(a),E(N),C(N!==null?N>a.length:!1);const n=a.length>0?a[a.length-1].id:0;_.current=n,M.current=n+1},B=S=>{if(m.current||o.current!==w||!S||typeof S!="object")return;const N=S.lines;if(!Array.isArray(N))return;if(N.length>0&&typeof N[0]=="string"){const n=N.filter(h=>typeof h=="string").map((h,c)=>Xr(h,c+1));D(n,n.length);return}const a=N.filter(n=>!!n&&typeof n=="object").map((n,h)=>de(n,h+1));D(a,a.length)},O=S=>{if(m.current||o.current!==w)return;const N=typeof S.text=="string"?S.text:typeof S.line=="string"?S.line:null;if(!N)return;const a=M.current,n=typeof S.id=="number"&&Number.isFinite(S.id)?S.id:a,h={id:n,text:N,stream:tr(S.stream),timestamp:typeof S.timestamp=="string"?S.timestamp:""};_.current=Math.max(_.current,n),M.current=Math.max(M.current,n+1),s(c=>Se(c,[h])),E(c=>c===null?c:Math.max(c+1,h.id))};async function I(){try{const N=await xe({maxLines:qe},e);if(m.current||o.current!==w||d.current!==f)return;const a=N.lines.map((n,h)=>de(n,h+1));D(a,N.totalLines)}catch{if(m.current||o.current!==w||d.current!==f)return;D([],null)}finally{!m.current&&o.current===w&&d.current===f&&v(!1)}const S=Ce(e);k.current=Ye(S,{events:{"dev-server:log":N=>{const a=ce(N);a&&O(a)},log:N=>{const a=ce(N);a&&O(a)},history:N=>{const a=ce(N);B(a)},"dev-server:history":N=>{const a=ce(N);B(a)}},onReconnect:()=>{se({view:"useDevServerLogs",trigger:"sse-reconnect",projectId:e,replayAttempted:!0,replayFromEventId:_.current??null,sseChannel:S,reason:"history-replay"}),!(m.current||o.current!==w)&&xe({lastEventId:_.current,maxLines:50},e).then(N=>{if(m.current||o.current!==w)return;const a=N.lines.map((n,h)=>de(n,M.current+h));if(a.length>0){const n=a[a.length-1].id;_.current=Math.max(_.current,n),M.current=Math.max(M.current,n+1)}s(n=>Se(n,a)),E(N.totalLines)}).catch(()=>{})}}),se({view:"useDevServerLogs",trigger:"sse-open",projectId:e,replayAttempted:!1,sseChannel:S})}return I(),()=>{m.current=!0,k.current&&(k.current(),k.current=null)}},[i,e]);const F=t.useCallback(async()=>{if(!i||y)return;const w=o.current,f=p.length;u(!0);try{const D=await xe({maxLines:qe,offset:f},e);if(m.current||o.current!==w)return;const B=D.lines.map((O,I)=>de(O,I+1));s(O=>Se(B,O)),C(D.totalLines>f+B.length),E(D.totalLines)}catch{}finally{u(!1)}},[i,p.length,y,e]),A=t.useCallback(()=>{s([])},[]),$=k.current!==null&&!g&&!m.current;return{entries:p,loading:g,loadingMore:y,hasMore:j,total:z,loadMore:F,clear:A,logs:p,isStreaming:$,clearLogs:A}}const Jr="This preview appears to block iframe embedding. Open it in a new tab instead.",Yr="The preview URL could not be loaded. Verify the server is running and the URL is correct.",Qr="Preview is taking longer than expected and may block iframe embedding.";function Zr(e){return e==="blocked"?Jr:e==="error"?Yr:null}function et(e,i={}){const{loadTimeoutMs:p=1e4,detectionMethod:s=null}=i,g=t.useRef(null),v=t.useRef(null),[y,u]=t.useState("unknown"),[j,C]=t.useState(null),[z]=t.useState(s),E=t.useCallback(()=>{v.current!==null&&(window.clearTimeout(v.current),v.current=null)},[]),k=t.useCallback(R=>{u(R),C(Zr(R))},[]),m=t.useCallback(()=>{u("blocked"),C(Qr)},[]);t.useEffect(()=>{if(E(),!e){u("unknown"),C(null);return}u("unknown"),C(null);let R=!1;return queueMicrotask(()=>{R||(u("loading"),C(null))}),()=>{R=!0,E()}},[E,e]),t.useEffect(()=>{if(y!=="loading"){E();return}const R=setTimeout(()=>{v.current=null,m()},p);return v.current=R,()=>{clearTimeout(R),v.current===R&&(v.current=null)}},[E,y,p,m]);const o=t.useCallback(()=>{const R=g.current;if(!R){k("embedded");return}try{if(R.contentWindow?.location?.href==="about:blank"&&R.src!=="about:blank"){k("blocked");return}}catch{}k("embedded")},[k]),d=t.useCallback(()=>{k("error")},[k]);t.useEffect(()=>{if(E(),!e){u("unknown"),C(null);return}u("unknown"),C(null)},[E]);const U=t.useCallback(()=>{E(),u("unknown"),C(null)},[E]),T=U,_=t.useMemo(()=>y==="embedded",[y]),M=t.useMemo(()=>y==="blocked"||y==="error",[y]);return{embedStatus:y,isEmbedded:_,isBlocked:M,blockReason:j,detectionMethod:z,iframeRef:g,resetEmbedStatus:U,setEmbedStatus:k,retry:T,embedContext:j,handleIframeLoad:o,handleIframeError:d}}const rt=/\x1b\[[0-9;]*m/g;function Le(e){return e.replace(rt,"")}function tt(e){if(!e)return"";const i=new Date(e);return Number.isNaN(i.getTime())?"":i.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}function st(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function nt(e){if(e.stream==="stderr")return"error";const i=Le(e.text).toLowerCase();return/\b(warn|warning)\b/.test(i)?"warn":/\b(error|fatal)\b/.test(i)?"error":"info"}function at(e,i){if(!i)return e;const p=new RegExp(`(${st(i)})`,"ig"),s=e.split(p),g=i.toLowerCase();return r.jsx(r.Fragment,{children:s.map((v,y)=>v.toLowerCase()===g?r.jsx("mark",{children:v},`${v}-${y}`):r.jsx("span",{children:v},`${v}-${y}`))})}function it({entries:e,loading:i,loadingMore:p,hasMore:s,total:g,onLoadMore:v,isRunning:y}){const{t:u}=ue("app"),j=t.useRef(null),C=t.useRef(e.length),z=t.useRef(y),[E,k]=t.useState(!1),[m,o]=t.useState(!1),[d,U]=t.useState(""),[T,_]=t.useState("all"),M=t.useMemo(()=>T==="all"?e:e.filter(w=>nt(w)===T),[e,T]),R=t.useMemo(()=>{const w=d.trim().toLowerCase();return w?M.filter(f=>Le(f.text).toLowerCase().includes(w)):M},[M,d]),F=R.length,A=t.useCallback(()=>{const w=j.current;w&&(w.scrollTop=w.scrollHeight,o(!1))},[]);t.useEffect(()=>{const w=z.current,f=C.current,D=e.length>f;y&&(!w||!m&&D)&&A(),z.current=y,C.current=e.length},[e.length,y,m,A]);const $=t.useCallback(()=>{const w=j.current;if(!w)return;const D=w.scrollTop+w.clientHeight>=w.scrollHeight-50;o(!D)},[]);return t.useEffect(()=>{i||e.length===0||!m&&y&&A()},[e,y,m,i,A]),i&&e.length===0?r.jsx("section",{className:"devserver-log-viewer","data-testid":"devserver-log-viewer",children:r.jsxs("div",{className:"devserver-log-viewer__loading","data-testid":"devserver-log-loading",children:[r.jsx(ve,{size:16,className:"devserver-log-viewer__spinner"}),r.jsx("span",{children:u("devserver.loadingLogs","Loading logs…")})]})}):r.jsxs("section",{className:`devserver-log-viewer${E?" devserver-log-viewer--fullscreen":""}`,"data-testid":"devserver-log-viewer",children:[r.jsxs("header",{className:"devserver-log-viewer__toolbar",children:[r.jsxs("div",{className:"devserver-log-viewer__toolbar-meta",children:[r.jsx("span",{className:"devserver-log-viewer__title",children:u("devserver.logs","Logs")}),r.jsxs("span",{className:"devserver-log-viewer__count","data-testid":"devserver-log-count",children:[g!==null?`${e.length}/${g}`:`${e.length}`," ",u("devserver.lines","lines")]})]}),r.jsxs("div",{className:"devserver-log-viewer__toolbar-actions",children:[r.jsxs("label",{className:"devserver-log-viewer__severity",htmlFor:"devserver-log-severity-filter",children:[r.jsx("span",{className:"visually-hidden",children:u("devserver.filterBySeverity","Filter logs by severity")}),r.jsxs("select",{id:"devserver-log-severity-filter",className:"select devserver-log-viewer__severity-select",value:T,onChange:w=>_(w.target.value),"data-testid":"devserver-log-severity-filter","aria-label":u("devserver.filterBySeverity","Filter logs by severity"),children:[r.jsx("option",{value:"all",children:u("devserver.allSeverities","All severities")}),r.jsx("option",{value:"info",children:u("devserver.info","Info")}),r.jsx("option",{value:"warn",children:u("devserver.warn","Warn")}),r.jsx("option",{value:"error",children:u("devserver.error","Error")})]})]}),r.jsxs("label",{className:"devserver-log-viewer__search",htmlFor:"devserver-log-search",children:[r.jsx("span",{className:"visually-hidden",children:u("devserver.searchLogs","Search logs")}),r.jsx(Rr,{size:14}),r.jsx("input",{id:"devserver-log-search",className:"input devserver-log-viewer__search-input",type:"text",value:d,onChange:w=>U(w.target.value),placeholder:u("devserver.searchLogs","Search logs"),"data-testid":"devserver-log-search-input","aria-label":u("devserver.searchLogs","Search logs")})]}),d.trim().length>0&&r.jsx("span",{className:"devserver-log-viewer__matches","data-testid":"devserver-log-match-count",children:u("devserver.matchCount",{count:F,defaultValue_one:"{{count}} match",defaultValue_other:"{{count}} matches"})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:()=>k(w=>!w),"data-testid":"devserver-log-fullscreen-toggle","aria-label":E?u("devserver.exitFullscreen","Exit fullscreen logs"):u("devserver.enterFullscreen","Enter fullscreen logs"),children:E?r.jsx(Dr,{size:14}):r.jsx(_r,{size:14})})]})]}),r.jsxs("div",{className:"devserver-log-viewer__body",children:[s&&r.jsx("div",{className:"devserver-log-viewer__load-more","data-testid":"devserver-log-load-more",children:r.jsx("button",{type:"button",className:"btn btn-sm touch-target",onClick:v,disabled:p,"data-testid":"devserver-log-load-more-button",children:p?r.jsxs(r.Fragment,{children:[r.jsx(ve,{size:14,className:"devserver-log-viewer__spinner"}),u("devserver.loadingOlderLogs","Loading older logs…")]}):u("devserver.loadOlderLogs","Load older logs")})}),r.jsxs("div",{ref:j,className:"devserver-log-viewer__content",onScroll:$,"data-testid":"devserver-log-content",children:[!i&&R.length===0&&r.jsx("p",{className:"devserver-log-viewer__empty","data-testid":"devserver-log-empty",children:e.length===0?u("devserver.noLogsYet","No logs yet. Start the dev server to see output."):M.length===0?u("devserver.noMatchesSeverity","No log lines match the selected severity."):u("devserver.noMatchesSearch","No log lines match your search.")}),R.map(w=>{const f=Le(w.text),D=tt(w.timestamp);return r.jsxs("div",{className:"devserver-log-line",children:[D&&r.jsx("span",{className:"devserver-log-timestamp","data-testid":"devserver-log-timestamp",children:D}),w.stream==="stderr"&&r.jsx("span",{className:"devserver-log-stream-badge","data-testid":"devserver-log-stderr-badge",children:u("devserver.errBadge","ERR")}),r.jsx("span",{className:"devserver-log-text",children:Mr(at(f,d.trim()))})]},w.id)})]}),m&&y&&r.jsxs("button",{type:"button",className:"btn btn-sm devserver-log-viewer__new-logs-button",onClick:A,"data-testid":"devserver-log-jump-button",children:[r.jsx(Pr,{size:14}),u("devserver.newLogs","New logs")]})]})]})}const lt="devserver-preview-iframe";function ot({url:e,embedStatus:i,onEmbedStatusChange:p,iframeRef:s,blockReason:g,onRetry:v,className:y=lt,embedContext:u}){const{t:j}=ue("app"),C=g??u??null,[z,E]=t.useState(0);t.useEffect(()=>{!e||i!=="unknown"||(E(d=>d+1),p("loading"))},[i,p,e]);const k=t.useCallback(()=>{const d=s.current;if(!d){p("embedded");return}try{if(d.contentWindow?.location?.href==="about:blank"&&d.src!=="about:blank"){p("blocked");return}}catch{}p("embedded")},[s,p]),m=t.useCallback(d=>{d.stopPropagation(),p("error")},[p]),o=t.useCallback(()=>{e&&window.open(e,"_blank","noopener,noreferrer")},[e]);return e?r.jsxs("div",{className:"devserver-preview-iframe-shell",children:[r.jsx("iframe",{src:e,ref:s,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox",className:y,title:"Dev server preview",onLoad:k,onError:m,onErrorCapture:m,"data-testid":"devserver-preview-iframe"},`${e}-${z}`),i==="loading"&&r.jsxs("div",{className:"devserver-preview-overlay","data-testid":"devserver-preview-loading",children:[r.jsx(ve,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:j("preview.loading","Loading preview...")})]}),i==="blocked"&&r.jsxs("div",{className:"devserver-preview-blocked-panel",role:"alert","data-testid":"devserver-preview-blocked-panel",children:[r.jsx(Ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:j("preview.blockedTitle","Preview cannot be embedded")}),C&&r.jsx("p",{className:"devserver-preview-blocked-context",children:C})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:j("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:o,children:j("preview.openInNewTab","Open in new tab")}),v&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:v,children:j("actions.retry","Retry")})]})]}),i==="error"&&r.jsxs("div",{className:"devserver-preview-error-panel",role:"alert","data-testid":"devserver-preview-error-panel",children:[r.jsx(Qe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:j("preview.errorTitle","Unable to load preview")}),C&&r.jsx("p",{className:"devserver-preview-blocked-context",children:C})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:j("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:o,children:j("preview.openInNewTab","Open in new tab")}),v&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:v,children:j("actions.retry","Retry")})]})]})]}):null}function ct(e){return{stopped:{className:"dev-server-status-badge--stopped",label:e("devserver.status.stopped","Stopped")},starting:{className:"dev-server-status-badge--starting",label:e("devserver.status.starting","Starting...")},running:{className:"dev-server-status-badge--running",label:e("devserver.status.running","Running")},stopping:{className:"dev-server-status-badge--starting",label:e("devserver.status.stopping","Stopping...")},failed:{className:"dev-server-status-badge--failed",label:e("devserver.status.failed","Failed")}}}const dt=480;function vt(){return typeof window>"u"||typeof window.matchMedia!="function"?!1:window.matchMedia("(max-width: 768px)").matches}function sr(e){if(e.closest(".right-dock-expand-modal__body"))return null;const i=e.parentElement;return i?.classList.contains("right-dock__body")?i:null}function ut(e){return e.clientWidth>0?e.clientWidth:e.getBoundingClientRect().width}function mt(e){if(!e||vt())return!1;const i=sr(e);return i?ut(i)<=dt:!1}function pt(e){const[i,p]=t.useState(!1);return t.useEffect(()=>{const s=e.current;if(!s){p(!1);return}const g=sr(s),v=()=>p(mt(s));if(v(),!g||typeof ResizeObserver>"u")return window.addEventListener("resize",v),()=>window.removeEventListener("resize",v);const y=new ResizeObserver(v);return y.observe(g),window.addEventListener("resize",v),()=>{y.disconnect(),window.removeEventListener("resize",v)}},[e]),i}let ke=!1;function Ke(e){return e instanceof Error?e.message:String(e)}function nr(e){return e==="."?"root":e}function Xe(e){return e?e==="root"?".":e:null}function Ge(e,i,p){return!i||e.scriptName!==i?!1:p?nr(e.cwd)===p:!0}function ft(e){return e.cwd==="."?"root":e.cwd}function ht(e){return e.length<=60?e:`${e.slice(0,60)}…`}function kt({addToast:e,projectId:i,tasks:p}){const{t:s}=ue("app");t.useEffect(()=>(se({view:"DevServerView",trigger:ke?"route-active":"remount",projectId:i,replayAttempted:!1}),ke=!1,()=>{ke=!0,se({view:"DevServerView",trigger:"route-inactive",projectId:i,replayAttempted:!1})}),[i]);const{session:g,detectedCommands:v,previewUrl:y,isLoading:u,error:j,startServer:C,stopServer:z,restartServer:E,setPreviewUrl:k,detectCommands:m,refresh:o}=Kr(i),d=g?.status??"stopped",U=d==="running"||d==="starting",T=ct(s),_=T[d]??T.stopped,{entries:M,loading:R,loadingMore:F,hasMore:A,total:$,loadMore:w}=Gr(i,!!i),f=y,D=g?.config?.cwd??null,B=t.useRef(null),O=pt(B),[I,S]=t.useState(!0),[N,a]=t.useState(""),[n,h]=t.useState(""),[c,b]=t.useState(null),[x,L]=t.useState(null),[V,Re]=t.useState(null),X=t.useMemo(()=>(p??[]).filter(l=>l.column==="in-progress"&&typeof l.worktree=="string"&&l.worktree.length>0),[p]),q=t.useMemo(()=>X.find(l=>l.id===x)??null,[X,x]);t.useEffect(()=>{x&&!X.some(l=>l.id===x)&&L(null)},[X,x]);const[ee,ar]=t.useState("embedded"),[re,me]=t.useState(!1),De=t.useRef(null),pe=t.useRef(null),ir=ee==="embedded"?f:null,{embedStatus:H,setEmbedStatus:lr,resetEmbedStatus:ne,iframeRef:Q,isEmbedded:or,isBlocked:fe,blockReason:he,retry:_e}=et(ir),[Me,G]=t.useState(!1),Pe=t.useRef(H);t.useEffect(()=>{const l=Pe.current!==H;fe&&l&&G(!0),H==="embedded"&&G(!1),Pe.current=H},[H,fe]),t.useEffect(()=>{G(!1)},[f]);const ae=t.useMemo(()=>{if(!c)return null;const l=Xe(D);return v.find(P=>!(P.scriptName!==c||l&&P.cwd!==l||g?.config?.command&&P.command!==g.config.command))??v.find(P=>Ge(P,c,D))??null},[v,g?.config?.command,c,D]);t.useEffect(()=>{typeof m=="function"&&m().catch(l=>{e(Ke(l),"error")})},[e,m]),t.useEffect(()=>{if(c){S(!1);return}S(!0)},[c]),t.useEffect(()=>{if(g?.status==="running"||g?.status==="starting"){g.config?.command?.trim().length>0&&a(g.config.command);return}if(ae){a(ae.command);return}v.length>0&&a(l=>l.trim().length>0?l:v[0]?.command??"")},[v,ae,g?.config?.command,g?.status]),t.useEffect(()=>{h(f??"")},[f]);const ie=t.useCallback(()=>{me(!1),window.requestAnimationFrame(()=>De.current?.focus())},[]),cr=Tr(ie);t.useEffect(()=>{if(!re)return;pe.current?.focus();const l=P=>{if(P.key==="Escape"){ie();return}if(P.key!=="Tab")return;const te=Array.from(pe.current?.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')??[]).filter(Ae=>!Ae.hasAttribute("disabled")&&Ae.getAttribute("aria-hidden")!=="true"),J=te[0],we=te.at(-1);!J||!we||(P.shiftKey&&document.activeElement===J?(P.preventDefault(),we.focus()):!P.shiftKey&&document.activeElement===we&&(P.preventDefault(),J.focus()))};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[ie,re]),t.useEffect(()=>{!O&&re&&me(!1)},[O,re]);const ge=t.useCallback(()=>{f&&window.open(f,"_blank","noopener,noreferrer")},[f]),Te=t.useCallback(()=>{G(!1),_e()},[_e]),dr=t.useCallback(()=>{try{const l=Q.current;if(l?.contentWindow){l.contentWindow.location.reload(),G(!1),ne();return}}catch{}if(!(!f||!Q.current))try{const l=new URL(f);l.searchParams.set("_t",Date.now().toString()),Q.current.src=l.toString(),G(!1),ne()}catch{Q.current.src=f,G(!1),ne()}},[f,Q,ne]),le=t.useCallback(async(l,P,te)=>{Re(l);try{await P(),e(te,"success")}catch(J){e(Ke(J),"error")}finally{Re(null)}},[e]),vr=t.useCallback(l=>{b(l.scriptName),S(!1),a(l.command),e(s("devserver.toast.selectedScript","Selected {{name}} script.",{name:l.scriptName}),"success")},[e]),ur=t.useCallback(()=>{b(null),S(!0),e(s("devserver.toast.clearedScript","Cleared selected dev server script."),"success")},[e]),mr=t.useCallback(l=>{U&&l&&l!==x&&e(s("devserver.restartToApplyTask","Restart the dev server to apply the selected task's worktree."),"info"),L(l)},[e,U,x,s]),pr=()=>{const l=N.trim();if(l.length===0){e(s("devserver.toast.enterCommand","Enter a command before starting the dev server."),"warning");return}const P=Xe(D)??".",J=q?.worktree??null??ae?.cwd??P;le("start",()=>C(l,J),s("devserver.toast.started","Dev server started."))},fr=()=>{le("stop",z,s("devserver.toast.stopped","Dev server stopped."))},hr=()=>{le("restart",E,s("devserver.toast.restarted","Dev server restarted."))},gr=()=>{const l=n.trim(),P=l.length>0?l:null;le("preview",()=>k(P),P?s("devserver.toast.previewUpdated","Preview URL updated."):s("devserver.toast.previewCleared","Preview URL override cleared."))},wr=t.useCallback(()=>{j&&o()},[j,o]),br=d==="starting"||d==="running"||V!==null,xr=d==="stopped"||V!==null,yr=d==="stopped"||d==="starting"||V!==null,Ue=()=>r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"devserver-preview-header",children:[r.jsxs("div",{className:"devserver-preview-title",children:[r.jsx(Be,{size:14}),r.jsx("span",{children:s("devserver.preview","Preview")})]}),r.jsxs("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:f??s("devserver.noPreviewUrl","No preview URL"),"data-testid":"devserver-preview-url-badge",children:[s("devserver.auto","Auto"),f?` · ${f}`:s("devserver.notAvailable"," · Not available")]}),r.jsxs("div",{className:"devserver-preview-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>ar(l=>l==="embedded"?"external":"embedded"),"data-testid":"devserver-preview-mode-toggle",children:ee==="embedded"?s("devserver.externalOnly","External only"):s("devserver.embedded","Embedded")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.openInNewTab","Open in new tab"),onClick:ge,disabled:!f,"data-testid":"devserver-preview-open-tab",children:r.jsx(Br,{})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.refreshPreview","Refresh preview"),onClick:dr,disabled:!f,"data-testid":"devserver-preview-refresh",children:r.jsx(Hr,{})})]})]}),r.jsxs("div",{className:"devserver-preview-container","data-embed-status":H,"data-embedded":or?"true":"false",children:[!f&&!U&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.startDevServer","Start a dev server to see a live preview here.")}),!f&&U&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.noPreviewDetected","No preview URL detected. Start the dev server or set a manual URL to preview your app.")}),f&&ee==="external"&&r.jsxs("div",{className:"devserver-preview-external-only","data-testid":"devserver-preview-external-only",children:[r.jsx("p",{children:s("devserver.embeddedPreviewDisabled","Embedded preview is disabled. Open your app in a separate browser tab.")}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm touch-target",onClick:ge,"data-testid":"devserver-preview-external-open-tab",children:s("devserver.openInNewTab","Open in new tab")})]}),f&&ee==="embedded"&&Me&&fe&&r.jsxs("div",{className:H==="error"?"devserver-preview-error-panel":"devserver-preview-blocked-panel","data-testid":"devserver-preview-fallback",role:"alert",children:[H==="error"?r.jsx(Qe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}):r.jsx(Ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:H==="error"?s("devserver.previewFailed","Preview failed"):s("devserver.previewBlocked","Preview blocked")}),he&&r.jsx("p",{className:"devserver-preview-blocked-context",children:he})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:s("devserver.openPreviewOrRetry","Open the preview in a new tab, or retry embedded mode after checking your server settings.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:ge,"data-testid":"devserver-preview-fallback-open-tab",children:s("devserver.openPreviewInNewTab","Open preview in new tab")}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:Te,"data-testid":"devserver-preview-fallback-retry",children:s("devserver.retryEmbeddedPreview","Retry embedded preview")})]})]}),f&&ee==="embedded"&&!Me&&r.jsx(ot,{url:f,embedStatus:H,onEmbedStatusChange:lr,iframeRef:Q,blockReason:he,onRetry:Te})]})]});return r.jsxs("div",{ref:B,className:"dev-server-view","data-testid":"dev-server-view","data-narrow-right-dock-preview":O?"true":"false",children:[r.jsx(Ur,{icon:Ar,title:s("devserver.title","Dev Server"),actions:r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"dev-server-header-title",children:r.jsx("span",{className:`dev-server-status-badge ${_.className}`,"data-testid":"dev-server-status-badge",children:_.label})}),r.jsxs("div",{className:"dev-server-header-actions",children:[r.jsxs("button",{type:"button",className:"btn btn-primary btn-sm",onClick:pr,disabled:br,"data-testid":"dev-server-start-button",children:[r.jsx(Or,{size:14}),r.jsx("span",{children:V==="start"?s("devserver.starting","Starting..."):s("devserver.start","Start")})]}),r.jsxs("button",{type:"button",className:"btn btn-danger btn-sm",onClick:fr,disabled:xr,"data-testid":"dev-server-stop-button",children:[r.jsx(zr,{size:14}),r.jsx("span",{children:V==="stop"?s("devserver.stopping","Stopping..."):s("devserver.stop","Stop")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm",onClick:hr,disabled:yr,"data-testid":"dev-server-restart-button",children:[r.jsx(Fr,{size:14}),r.jsx("span",{children:V==="restart"?s("devserver.restarting","Restarting..."):s("devserver.restart","Restart")})]})]})]})}),r.jsxs("section",{className:"dev-server-panel dev-server-config","aria-label":s("devserver.configurationLabel","Dev server configuration"),children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.configuration","Configuration")}),u&&r.jsx("span",{className:"dev-server-muted",children:s("devserver.loading","Loading...")})]}),u&&!g&&v.length===0&&r.jsxs("div",{className:"dev-server-loading-state","data-testid":"dev-server-loading-state",children:[r.jsx(ve,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:s("devserver.loadingConfig","Loading dev server configuration...")})]}),j&&r.jsxs("div",{className:"dev-server-error-box",role:"alert","data-testid":"dev-server-error-box",children:[r.jsx("p",{children:j}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:wr,children:s("devserver.retry","Retry")})]}),r.jsxs("div",{className:"dev-server-section",children:[r.jsx("h3",{children:s("devserver.scriptSelection","Script Selection")}),c&&r.jsxs("div",{className:"dev-server-selected","data-testid":"dev-server-selected-summary",children:[r.jsx("span",{className:"dev-server-candidate-name",children:c}),r.jsx("span",{className:"dev-server-candidate-source",children:D??"root"}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>S(!0),"data-testid":"dev-server-change-selection",children:s("devserver.change","Change")}),r.jsx("button",{type:"button",className:"btn btn-danger btn-sm",onClick:ur,"data-testid":"dev-server-clear-selection",children:s("devserver.clear","Clear")})]}),I&&v.length===0&&r.jsx("p",{className:"dev-server-empty-state","data-testid":"dev-server-empty-candidates",children:s("devserver.noScriptsDetected","No dev server scripts detected. Check that your project has a package.json with a dev, start, or similar script.")}),I&&v.length>0&&r.jsx("div",{className:"dev-server-candidates","data-testid":"dev-server-candidates",children:v.map(l=>{const P=Ge(l,c,D);return r.jsxs("button",{type:"button",className:`dev-server-candidate ${P?"dev-server-candidate--selected":""}`,onClick:()=>vr(l),"data-testid":`dev-server-candidate-${l.scriptName}-${nr(l.cwd)}`,children:[r.jsx("span",{className:"dev-server-candidate-name",children:l.scriptName}),r.jsx("span",{className:"dev-server-candidate-command",children:ht(l.command)}),r.jsx("span",{className:"dev-server-candidate-source",children:ft(l)})]},`${l.cwd}::${l.scriptName}::${l.command}`)})})]}),r.jsxs("div",{className:"dev-server-section dev-server-executing-task-section",children:[r.jsx("h3",{children:s("devserver.executingTask","Executing Task")}),r.jsxs("div",{className:"dev-server-field-group",children:[r.jsx("label",{htmlFor:"dev-server-task-picker",className:"dev-server-label",children:s("devserver.executingTask","Executing Task")}),r.jsxs("select",{id:"dev-server-task-picker",className:"input dev-server-task-picker",value:x??"",onChange:l=>mr(l.target.value.length>0?l.target.value:null),disabled:X.length===0,"aria-label":s("devserver.executingTask","Executing Task"),"data-testid":"dev-server-task-picker",children:[r.jsx("option",{value:"",children:s("devserver.projectRootNoTask","Project root (no task)")}),X.map(l=>r.jsx("option",{value:l.id,children:l.title?`${l.id} — ${l.title}`:l.id},l.id))]}),X.length===0&&r.jsx("p",{className:"dev-server-empty-state","data-testid":"dev-server-no-executing-tasks",children:s("devserver.noExecutingTasks","No executing tasks with a worktree available. Start a task to target its worktree.")}),q&&r.jsxs("div",{className:"dev-server-task-descriptor","data-testid":"dev-server-task-descriptor",children:[r.jsx("div",{className:"dev-server-task-descriptor-header",children:r.jsx("span",{className:"dev-server-candidate-name",children:q.title?`${q.id} — ${q.title}`:q.id})}),r.jsx("p",{className:"dev-server-task-description",children:q.description}),r.jsxs("div",{className:"dev-server-task-worktree",children:[r.jsx("span",{className:"dev-server-label",children:s("devserver.targetWorktree","Target worktree")}),r.jsx("code",{children:q.worktree})]})]})]})]}),r.jsxs("div",{className:"dev-server-field-group",children:[r.jsx("label",{htmlFor:"dev-server-command",className:"dev-server-label",children:s("devserver.command","Command")}),r.jsx("input",{id:"dev-server-command",className:"input",value:N,onChange:l=>a(l.target.value),placeholder:"pnpm dev","data-testid":"dev-server-command-input",readOnly:d==="running"||d==="starting"})]}),(d==="running"||d==="starting")&&g&&r.jsxs("div",{className:"dev-server-current-command","data-testid":"dev-server-current-command",children:[r.jsx("span",{className:"dev-server-label",children:s("devserver.runningCommand","Running command")}),r.jsx("code",{children:g.config?.command??N})]}),r.jsxs("div",{className:"dev-server-preview-override",children:[r.jsx("label",{htmlFor:"dev-server-preview-input",className:"dev-server-label",children:s("devserver.previewUrlOverride","Preview URL Override")}),r.jsx("input",{id:"dev-server-preview-input",className:"input",type:"url",value:n,onChange:l=>h(l.target.value),placeholder:"http://localhost:3000","data-testid":"dev-server-preview-input"}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:gr,disabled:V==="preview","data-testid":"dev-server-set-preview",children:s("devserver.save","Save")})]}),f&&r.jsx("p",{className:"dev-server-preview-hint",children:s("devserver.autoDetected","Auto-detected: {{url}}",{url:f})})]}),r.jsx("div",{className:"dev-server-content",children:r.jsxs("section",{className:"dev-server-panel dev-server-logs-panel","data-testid":"dev-server-logs-panel","aria-label":s("devserver.logsLabel","Dev server logs"),children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.logs","Logs")}),r.jsx("span",{className:"dev-server-muted",children:s("devserver.lines","{{count}} lines",{count:$??M.length})})]}),r.jsx("div",{className:"dev-server-logs-viewer","data-testid":"dev-server-log-viewer",children:r.jsx(it,{entries:M,loading:R,loadingMore:F,hasMore:A,total:$,onLoadMore:w,isRunning:U})})]})}),O?r.jsxs("section",{className:"dev-server-panel devserver-preview-modal-launcher","data-testid":"devserver-preview-modal-launcher","aria-label":s("devserver.previewLabel","Dev server preview"),children:[r.jsxs("div",{className:"devserver-preview-modal-launcher__copy",children:[r.jsxs("div",{className:"devserver-preview-title",children:[r.jsx(Be,{size:14}),r.jsx("span",{children:s("devserver.preview","Preview")})]}),r.jsx("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:f??s("devserver.noPreviewUrl","No preview URL"),"data-testid":"devserver-preview-url-badge",children:f||s("devserver.notAvailable","Not available")})]}),r.jsx("p",{className:"devserver-preview-modal-launcher__description",children:f?s("devserver.previewModalLauncherDescription","Open the live preview in a modal so logs and configuration stay usable in this narrow dock."):s("devserver.previewModalLauncherUnavailable","Start the dev server or set a preview URL to open the preview modal.")}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm",ref:De,onClick:()=>me(!0),"data-testid":"devserver-preview-modal-open",children:s("devserver.openPreview","Open preview")})]}):r.jsx("section",{className:"dev-server-panel devserver-preview-panel","data-testid":"devserver-preview-panel","aria-label":s("devserver.previewLabel","Dev server preview"),children:Ue()}),O&&re&&r.jsx("div",{className:"modal-overlay open devserver-preview-modal-overlay",...cr,children:r.jsxs("div",{className:"modal devserver-preview-modal",role:"dialog","aria-modal":"true","aria-labelledby":"devserver-preview-modal-title",tabIndex:-1,ref:pe,"data-testid":"devserver-preview-modal",children:[r.jsxs("div",{className:"devserver-preview-modal__titlebar",children:[r.jsx("h2",{id:"devserver-preview-modal-title",children:s("devserver.preview","Preview")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:ie,"aria-label":s("devserver.closePreviewModal","Close preview modal"),"data-testid":"devserver-preview-modal-close",children:r.jsx($r,{})})]}),r.jsx("div",{className:"devserver-preview-modal__body",children:Ue()})]})})]})}export{kt as DevServerView};
|
|
1
|
+
import{r as t,j as r}from"./vendor-react-SZ_qB27O.js";import{d1 as Je,d2 as je,d3 as Nr,d4 as Ce,ai as Ye,d5 as Oe,d6 as ze,d7 as Fe,d8 as $e,d9 as Sr,da as be,db as kr,dc as jr,dd as Cr,de as Er,df as Lr,bU as se,dg as xe,L as ve,aK as Rr,dh as Dr,di as _r,dj as Mr,o as Pr,b8 as Qe,dk as Tr,V as Ur,c2 as Ar,cl as Or,cn as zr,dl as Fr,F as Be,X as $r,aj as Br,R as Hr}from"./index-BjELA24x.js";import{u as ue}from"./vendor-i18n-GF3RlKbq.js";import{S as Ze}from"./shield-alert-DCfkjjYc.js";import"./vendor-reactflow-CnI7NMXG.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";const Ee=500,Vr=3e3;function W(e){return e instanceof Error?e.message:String(e)}function er(e){return e.length<=Ee?e:e.slice(-Ee)}function ye(e,i){return er([...e,i])}function Z(e){try{return JSON.parse(e)}catch{return null}}function oe(e){const i=e.text??"";return e.stream==="stderr"?`[stderr] ${i}`:i}function Wr(e){return e?.previewUrl??null}async function He(e){return kr(e)}async function Ve(e,i){return jr(e,i)}async function Ir(e){return Cr(e)}async function qr(e){return Er(e)}async function We(e){return Lr(e)}function K(e){try{return e()}catch{return null}}function Ne(){return typeof K(()=>je)=="function"&&typeof K(()=>Je)=="function"}function Y(e){return{config:{id:e.id??"default",name:e.name??"Dev Server",command:e.command??"",cwd:e.cwd??"."},status:e.status,runtime:e.pid?{pid:e.pid,startedAt:e.startedAt??new Date().toISOString(),exitCode:e.exitCode??void 0,previewUrl:e.previewUrl}:void 0,previewUrl:e.previewUrl??e.detectedUrl??e.manualUrl??void 0,logHistory:(e.logs??[]).map(i=>({timestamp:new Date().toISOString(),stream:i.startsWith("[stderr]")?"stderr":"stdout",text:i.replace(/^\[stderr\]\s*/,"")}))}}function Kr(e){const{t:i}=ue("app"),[p,s]=t.useState(null),[g,v]=t.useState([]),[y,u]=t.useState([]),[j,C]=t.useState([]),[z,E]=t.useState(!0),[k,m]=t.useState(null),o=t.useRef(0),[d,U]=t.useState(null),T=t.useCallback(a=>{if(s(a),a?.logHistory){const n=a.logHistory.slice(-Ee).map(oe);u(n)}},[]),_=t.useCallback(async()=>{const a=o.current;try{if(Ne())if(d){const n=await Je(d,e);if(o.current!==a)return;T(n)}else{const n=await je(e);if(o.current!==a)return;v(n),n.length>0&&(U(n[0].config.id),T(n[0]))}else{const n=await He(e);if(o.current!==a)return;const h=Y(n);v([h]),T(h)}m(null)}catch(n){if(o.current!==a)return;m(W(n))}},[T,e,d]);t.useEffect(()=>{o.current+=1;const a=o.current;s(null),v([]),u([]),C([]),E(!0),m(null),U(null),(async()=>{try{const[h,c]=await Promise.allSettled([Ne()?je(e):He(e).then(x=>[Y(x)]),typeof K(()=>be)=="function"?be(e):We(e).then(x=>x.map(L=>({name:L.name,command:L.command,cwd:L.cwd,scriptName:L.scriptName,packagePath:L.packagePath})))]);if(o.current!==a)return;let b=null;if(h.status==="fulfilled"){const x=h.value;if(v(x),x.length>0){const L=x[0];Ne()&&U(L.config.id),T(L)}}else b=W(h.reason);c.status==="fulfilled"&&C(c.value),b&&m(b)}catch(h){if(o.current!==a)return;m(W(h))}finally{o.current===a&&E(!1)}})()},[T,e]),t.useEffect(()=>{const a=d?Nr(d,e):typeof K(()=>Ce)=="function"?Ce(e):null;if(!a)return;const n=o.current,h=Ye(a,{events:{history:c=>{if(o.current!==n)return;const b=Z(c.data);if(b?.lines){const x=b.lines.map(oe);u(er(x))}},log:c=>{if(o.current!==n)return;const b=Z(c.data);if(b){const x=typeof b.line=="string"?b.line:oe(b);u(L=>ye(L,x))}},"dev-server:log":c=>{if(o.current!==n)return;const b=Z(c.data);if(b){const x=typeof b.line=="string"?b.line:oe(b);u(L=>ye(L,x))}},"dev-server:output":c=>{if(o.current!==n)return;const b=Z(c.data);b?.line&&u(x=>ye(x,b.line))},status:c=>{if(o.current!==n)return;const b=Z(c.data),x=b?.status;x&&s(L=>L&&{...L,status:x,runtime:b.pid?{...L.runtime??{startedAt:new Date().toISOString()},pid:b.pid}:L.runtime})},"dev-server:status":c=>{if(o.current!==n)return;const b=Z(c.data);if(b?.status){const x=Y(b);s(x),v([x])}},stopped:()=>{o.current},failed:()=>{o.current}},onReconnect:()=>{o.current===n&&_()},onError:()=>{o.current===n&&m(c=>c??i("devserver.lostConnection","Lost log stream connection."))}});return()=>{h()}},[e,_,d]),t.useEffect(()=>{if(p?.status!=="running"&&p?.status!=="starting")return;const a=setInterval(()=>{_()},Vr);return()=>{clearInterval(a)}},[_,p?.status]);const M=t.useCallback(async(a,n)=>{o.current+=1;const h=o.current;try{let c;const b=typeof n=="string"&&n.length>0,x=p?.config?.cwd??".";if(!(b&&n!==x)&&d&&typeof K(()=>Oe)=="function")c=await Oe(d,e);else{const V=await Ve({command:a,cwd:n},e);c=Y(V)}if(o.current!==h)return;s(c),m(null)}catch(c){if(o.current!==h)return;throw m(W(c)),c}},[e,p?.config?.cwd,d]),R=t.useCallback(async()=>{o.current+=1;const a=o.current;try{let n;if(d&&typeof K(()=>ze)=="function")n=await ze(d,e);else{const h=await Ir(e);n=Y(h)}if(o.current!==a)return;s(n),m(null)}catch(n){if(o.current!==a)return;throw m(W(n)),n}},[e,d]),F=t.useCallback(async()=>{o.current+=1;const a=o.current;try{let n;if(d&&typeof K(()=>Fe)=="function")n=await Fe(d,e);else{const h=await qr(e);n=Y(h)}if(o.current!==a)return;s(n),m(null)}catch(n){if(o.current!==a)return;throw m(W(n)),n}},[e,d]),A=t.useCallback(async a=>{o.current+=1;const n=o.current;try{let h;if(d&&typeof K(()=>$e)=="function")h=await $e(d,a,e);else{const c=await Sr({url:a},e);h={url:c.manualUrl??c.previewUrl??c.detectedUrl??null,source:c.manualUrl?"manual":"auto"}}if(o.current!==n)return;s(c=>c?{...c,previewUrl:h.url??void 0}:null),m(null)}catch(h){if(o.current!==n)return;throw m(W(h)),h}},[e,d]),$=t.useCallback(async()=>{o.current+=1;const a=o.current;try{let n;try{n=await be(e)}catch{n=(await We(e)).map(c=>({name:c.name,command:c.command,cwd:c.cwd,scriptName:c.scriptName,packagePath:c.packagePath}))}if(o.current!==a)return;C(n),m(null)}catch(n){if(o.current!==a)return;throw m(W(n)),n}},[e]),w=t.useCallback(async(a,n)=>{if(typeof a!="string"&&!d)try{const b=a,x=await Ve({command:b.command,cwd:b.cwd,scriptName:b.scriptName,packagePath:b.packagePath??b.cwd},e),L=Y(x);s(L),v([L]),m(null);return}catch(b){throw m(W(b)),b}const h=typeof a=="string"?a:a.command,c=typeof a=="string"?n:a.cwd;await M(h,c)},[e,M,d]),f=t.useCallback(async()=>{await R()},[R]),D=t.useCallback(async()=>{await F()},[F]),B=t.useCallback(async a=>{await A(a)},[A]),O=t.useCallback(async()=>{await $()},[$]),I=t.useCallback(async()=>{await _()},[_]),S=Wr(p),N=p?{...p,pid:p.runtime?.pid}:null;return{session:p,sessions:g,logs:y,detectedCommands:j,previewUrl:S,isLoading:z,error:k,startServer:M,stopServer:R,restartServer:F,setPreviewUrl:A,detectCommands:$,refresh:_,candidates:j,serverState:N,loading:z,start:w,stop:f,restart:D,setManualUrl:B,detect:O,refreshStatus:I}}const Ie=500,qe=100;function rr(e){return e.length>Ie?e.slice(-Ie):e}function tr(e){return e==="stderr"?"stderr":"stdout"}function ce(e){try{return JSON.parse(e.data)}catch{return null}}function de(e,i){return{id:typeof e.id=="number"&&Number.isFinite(e.id)?e.id:i,text:typeof e.text=="string"?e.text:"",stream:tr(e.stream),timestamp:typeof e.timestamp=="string"?e.timestamp:""}}function Xr(e,i){return{id:i,text:e,stream:"stdout",timestamp:""}}function Se(e,i){if(i.length===0)return e;const p=[...e],s=new Set(e.map(g=>g.id));for(const g of i)s.has(g.id)||(s.add(g.id),p.push(g));return p.sort((g,v)=>g.id-v.id),rr(p)}function Gr(e,i){const[p,s]=t.useState([]),[g,v]=t.useState(!1),[y,u]=t.useState(!1),[j,C]=t.useState(!1),[z,E]=t.useState(null),k=t.useRef(null),m=t.useRef(!1),o=t.useRef(0),d=t.useRef(0),U=t.useRef(e),T=t.useRef(i),_=t.useRef(0),M=t.useRef(1);(U.current!==e||T.current!==i)&&(U.current=e,T.current=i,o.current++,se({view:"useDevServerLogs",trigger:"project-context-change",projectId:e,replayAttempted:!1,reason:"context-version-bumped"}),m.current=!0,_.current=0,M.current=1,s([]),v(!1),u(!1),C(!1),E(null),k.current&&(k.current(),k.current=null)),t.useEffect(()=>{if(!i){k.current&&(k.current(),k.current=null);return}const w=o.current,f=++d.current;m.current=!1,v(!0);const D=(S,N)=>{const a=rr(S);s(a),E(N),C(N!==null?N>a.length:!1);const n=a.length>0?a[a.length-1].id:0;_.current=n,M.current=n+1},B=S=>{if(m.current||o.current!==w||!S||typeof S!="object")return;const N=S.lines;if(!Array.isArray(N))return;if(N.length>0&&typeof N[0]=="string"){const n=N.filter(h=>typeof h=="string").map((h,c)=>Xr(h,c+1));D(n,n.length);return}const a=N.filter(n=>!!n&&typeof n=="object").map((n,h)=>de(n,h+1));D(a,a.length)},O=S=>{if(m.current||o.current!==w)return;const N=typeof S.text=="string"?S.text:typeof S.line=="string"?S.line:null;if(!N)return;const a=M.current,n=typeof S.id=="number"&&Number.isFinite(S.id)?S.id:a,h={id:n,text:N,stream:tr(S.stream),timestamp:typeof S.timestamp=="string"?S.timestamp:""};_.current=Math.max(_.current,n),M.current=Math.max(M.current,n+1),s(c=>Se(c,[h])),E(c=>c===null?c:Math.max(c+1,h.id))};async function I(){try{const N=await xe({maxLines:qe},e);if(m.current||o.current!==w||d.current!==f)return;const a=N.lines.map((n,h)=>de(n,h+1));D(a,N.totalLines)}catch{if(m.current||o.current!==w||d.current!==f)return;D([],null)}finally{!m.current&&o.current===w&&d.current===f&&v(!1)}const S=Ce(e);k.current=Ye(S,{events:{"dev-server:log":N=>{const a=ce(N);a&&O(a)},log:N=>{const a=ce(N);a&&O(a)},history:N=>{const a=ce(N);B(a)},"dev-server:history":N=>{const a=ce(N);B(a)}},onReconnect:()=>{se({view:"useDevServerLogs",trigger:"sse-reconnect",projectId:e,replayAttempted:!0,replayFromEventId:_.current??null,sseChannel:S,reason:"history-replay"}),!(m.current||o.current!==w)&&xe({lastEventId:_.current,maxLines:50},e).then(N=>{if(m.current||o.current!==w)return;const a=N.lines.map((n,h)=>de(n,M.current+h));if(a.length>0){const n=a[a.length-1].id;_.current=Math.max(_.current,n),M.current=Math.max(M.current,n+1)}s(n=>Se(n,a)),E(N.totalLines)}).catch(()=>{})}}),se({view:"useDevServerLogs",trigger:"sse-open",projectId:e,replayAttempted:!1,sseChannel:S})}return I(),()=>{m.current=!0,k.current&&(k.current(),k.current=null)}},[i,e]);const F=t.useCallback(async()=>{if(!i||y)return;const w=o.current,f=p.length;u(!0);try{const D=await xe({maxLines:qe,offset:f},e);if(m.current||o.current!==w)return;const B=D.lines.map((O,I)=>de(O,I+1));s(O=>Se(B,O)),C(D.totalLines>f+B.length),E(D.totalLines)}catch{}finally{u(!1)}},[i,p.length,y,e]),A=t.useCallback(()=>{s([])},[]),$=k.current!==null&&!g&&!m.current;return{entries:p,loading:g,loadingMore:y,hasMore:j,total:z,loadMore:F,clear:A,logs:p,isStreaming:$,clearLogs:A}}const Jr="This preview appears to block iframe embedding. Open it in a new tab instead.",Yr="The preview URL could not be loaded. Verify the server is running and the URL is correct.",Qr="Preview is taking longer than expected and may block iframe embedding.";function Zr(e){return e==="blocked"?Jr:e==="error"?Yr:null}function et(e,i={}){const{loadTimeoutMs:p=1e4,detectionMethod:s=null}=i,g=t.useRef(null),v=t.useRef(null),[y,u]=t.useState("unknown"),[j,C]=t.useState(null),[z]=t.useState(s),E=t.useCallback(()=>{v.current!==null&&(window.clearTimeout(v.current),v.current=null)},[]),k=t.useCallback(R=>{u(R),C(Zr(R))},[]),m=t.useCallback(()=>{u("blocked"),C(Qr)},[]);t.useEffect(()=>{if(E(),!e){u("unknown"),C(null);return}u("unknown"),C(null);let R=!1;return queueMicrotask(()=>{R||(u("loading"),C(null))}),()=>{R=!0,E()}},[E,e]),t.useEffect(()=>{if(y!=="loading"){E();return}const R=setTimeout(()=>{v.current=null,m()},p);return v.current=R,()=>{clearTimeout(R),v.current===R&&(v.current=null)}},[E,y,p,m]);const o=t.useCallback(()=>{const R=g.current;if(!R){k("embedded");return}try{if(R.contentWindow?.location?.href==="about:blank"&&R.src!=="about:blank"){k("blocked");return}}catch{}k("embedded")},[k]),d=t.useCallback(()=>{k("error")},[k]);t.useEffect(()=>{if(E(),!e){u("unknown"),C(null);return}u("unknown"),C(null)},[E]);const U=t.useCallback(()=>{E(),u("unknown"),C(null)},[E]),T=U,_=t.useMemo(()=>y==="embedded",[y]),M=t.useMemo(()=>y==="blocked"||y==="error",[y]);return{embedStatus:y,isEmbedded:_,isBlocked:M,blockReason:j,detectionMethod:z,iframeRef:g,resetEmbedStatus:U,setEmbedStatus:k,retry:T,embedContext:j,handleIframeLoad:o,handleIframeError:d}}const rt=/\x1b\[[0-9;]*m/g;function Le(e){return e.replace(rt,"")}function tt(e){if(!e)return"";const i=new Date(e);return Number.isNaN(i.getTime())?"":i.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}function st(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function nt(e){if(e.stream==="stderr")return"error";const i=Le(e.text).toLowerCase();return/\b(warn|warning)\b/.test(i)?"warn":/\b(error|fatal)\b/.test(i)?"error":"info"}function at(e,i){if(!i)return e;const p=new RegExp(`(${st(i)})`,"ig"),s=e.split(p),g=i.toLowerCase();return r.jsx(r.Fragment,{children:s.map((v,y)=>v.toLowerCase()===g?r.jsx("mark",{children:v},`${v}-${y}`):r.jsx("span",{children:v},`${v}-${y}`))})}function it({entries:e,loading:i,loadingMore:p,hasMore:s,total:g,onLoadMore:v,isRunning:y}){const{t:u}=ue("app"),j=t.useRef(null),C=t.useRef(e.length),z=t.useRef(y),[E,k]=t.useState(!1),[m,o]=t.useState(!1),[d,U]=t.useState(""),[T,_]=t.useState("all"),M=t.useMemo(()=>T==="all"?e:e.filter(w=>nt(w)===T),[e,T]),R=t.useMemo(()=>{const w=d.trim().toLowerCase();return w?M.filter(f=>Le(f.text).toLowerCase().includes(w)):M},[M,d]),F=R.length,A=t.useCallback(()=>{const w=j.current;w&&(w.scrollTop=w.scrollHeight,o(!1))},[]);t.useEffect(()=>{const w=z.current,f=C.current,D=e.length>f;y&&(!w||!m&&D)&&A(),z.current=y,C.current=e.length},[e.length,y,m,A]);const $=t.useCallback(()=>{const w=j.current;if(!w)return;const D=w.scrollTop+w.clientHeight>=w.scrollHeight-50;o(!D)},[]);return t.useEffect(()=>{i||e.length===0||!m&&y&&A()},[e,y,m,i,A]),i&&e.length===0?r.jsx("section",{className:"devserver-log-viewer","data-testid":"devserver-log-viewer",children:r.jsxs("div",{className:"devserver-log-viewer__loading","data-testid":"devserver-log-loading",children:[r.jsx(ve,{size:16,className:"devserver-log-viewer__spinner"}),r.jsx("span",{children:u("devserver.loadingLogs","Loading logs…")})]})}):r.jsxs("section",{className:`devserver-log-viewer${E?" devserver-log-viewer--fullscreen":""}`,"data-testid":"devserver-log-viewer",children:[r.jsxs("header",{className:"devserver-log-viewer__toolbar",children:[r.jsxs("div",{className:"devserver-log-viewer__toolbar-meta",children:[r.jsx("span",{className:"devserver-log-viewer__title",children:u("devserver.logs","Logs")}),r.jsxs("span",{className:"devserver-log-viewer__count","data-testid":"devserver-log-count",children:[g!==null?`${e.length}/${g}`:`${e.length}`," ",u("devserver.lines","lines")]})]}),r.jsxs("div",{className:"devserver-log-viewer__toolbar-actions",children:[r.jsxs("label",{className:"devserver-log-viewer__severity",htmlFor:"devserver-log-severity-filter",children:[r.jsx("span",{className:"visually-hidden",children:u("devserver.filterBySeverity","Filter logs by severity")}),r.jsxs("select",{id:"devserver-log-severity-filter",className:"select devserver-log-viewer__severity-select",value:T,onChange:w=>_(w.target.value),"data-testid":"devserver-log-severity-filter","aria-label":u("devserver.filterBySeverity","Filter logs by severity"),children:[r.jsx("option",{value:"all",children:u("devserver.allSeverities","All severities")}),r.jsx("option",{value:"info",children:u("devserver.info","Info")}),r.jsx("option",{value:"warn",children:u("devserver.warn","Warn")}),r.jsx("option",{value:"error",children:u("devserver.error","Error")})]})]}),r.jsxs("label",{className:"devserver-log-viewer__search",htmlFor:"devserver-log-search",children:[r.jsx("span",{className:"visually-hidden",children:u("devserver.searchLogs","Search logs")}),r.jsx(Rr,{size:14}),r.jsx("input",{id:"devserver-log-search",className:"input devserver-log-viewer__search-input",type:"text",value:d,onChange:w=>U(w.target.value),placeholder:u("devserver.searchLogs","Search logs"),"data-testid":"devserver-log-search-input","aria-label":u("devserver.searchLogs","Search logs")})]}),d.trim().length>0&&r.jsx("span",{className:"devserver-log-viewer__matches","data-testid":"devserver-log-match-count",children:u("devserver.matchCount",{count:F,defaultValue_one:"{{count}} match",defaultValue_other:"{{count}} matches"})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:()=>k(w=>!w),"data-testid":"devserver-log-fullscreen-toggle","aria-label":E?u("devserver.exitFullscreen","Exit fullscreen logs"):u("devserver.enterFullscreen","Enter fullscreen logs"),children:E?r.jsx(Dr,{size:14}):r.jsx(_r,{size:14})})]})]}),r.jsxs("div",{className:"devserver-log-viewer__body",children:[s&&r.jsx("div",{className:"devserver-log-viewer__load-more","data-testid":"devserver-log-load-more",children:r.jsx("button",{type:"button",className:"btn btn-sm touch-target",onClick:v,disabled:p,"data-testid":"devserver-log-load-more-button",children:p?r.jsxs(r.Fragment,{children:[r.jsx(ve,{size:14,className:"devserver-log-viewer__spinner"}),u("devserver.loadingOlderLogs","Loading older logs…")]}):u("devserver.loadOlderLogs","Load older logs")})}),r.jsxs("div",{ref:j,className:"devserver-log-viewer__content",onScroll:$,"data-testid":"devserver-log-content",children:[!i&&R.length===0&&r.jsx("p",{className:"devserver-log-viewer__empty","data-testid":"devserver-log-empty",children:e.length===0?u("devserver.noLogsYet","No logs yet. Start the dev server to see output."):M.length===0?u("devserver.noMatchesSeverity","No log lines match the selected severity."):u("devserver.noMatchesSearch","No log lines match your search.")}),R.map(w=>{const f=Le(w.text),D=tt(w.timestamp);return r.jsxs("div",{className:"devserver-log-line",children:[D&&r.jsx("span",{className:"devserver-log-timestamp","data-testid":"devserver-log-timestamp",children:D}),w.stream==="stderr"&&r.jsx("span",{className:"devserver-log-stream-badge","data-testid":"devserver-log-stderr-badge",children:u("devserver.errBadge","ERR")}),r.jsx("span",{className:"devserver-log-text",children:Mr(at(f,d.trim()))})]},w.id)})]}),m&&y&&r.jsxs("button",{type:"button",className:"btn btn-sm devserver-log-viewer__new-logs-button",onClick:A,"data-testid":"devserver-log-jump-button",children:[r.jsx(Pr,{size:14}),u("devserver.newLogs","New logs")]})]})]})}const lt="devserver-preview-iframe";function ot({url:e,embedStatus:i,onEmbedStatusChange:p,iframeRef:s,blockReason:g,onRetry:v,className:y=lt,embedContext:u}){const{t:j}=ue("app"),C=g??u??null,[z,E]=t.useState(0);t.useEffect(()=>{!e||i!=="unknown"||(E(d=>d+1),p("loading"))},[i,p,e]);const k=t.useCallback(()=>{const d=s.current;if(!d){p("embedded");return}try{if(d.contentWindow?.location?.href==="about:blank"&&d.src!=="about:blank"){p("blocked");return}}catch{}p("embedded")},[s,p]),m=t.useCallback(d=>{d.stopPropagation(),p("error")},[p]),o=t.useCallback(()=>{e&&window.open(e,"_blank","noopener,noreferrer")},[e]);return e?r.jsxs("div",{className:"devserver-preview-iframe-shell",children:[r.jsx("iframe",{src:e,ref:s,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox",className:y,title:"Dev server preview",onLoad:k,onError:m,onErrorCapture:m,"data-testid":"devserver-preview-iframe"},`${e}-${z}`),i==="loading"&&r.jsxs("div",{className:"devserver-preview-overlay","data-testid":"devserver-preview-loading",children:[r.jsx(ve,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:j("preview.loading","Loading preview...")})]}),i==="blocked"&&r.jsxs("div",{className:"devserver-preview-blocked-panel",role:"alert","data-testid":"devserver-preview-blocked-panel",children:[r.jsx(Ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:j("preview.blockedTitle","Preview cannot be embedded")}),C&&r.jsx("p",{className:"devserver-preview-blocked-context",children:C})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:j("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:o,children:j("preview.openInNewTab","Open in new tab")}),v&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:v,children:j("actions.retry","Retry")})]})]}),i==="error"&&r.jsxs("div",{className:"devserver-preview-error-panel",role:"alert","data-testid":"devserver-preview-error-panel",children:[r.jsx(Qe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:j("preview.errorTitle","Unable to load preview")}),C&&r.jsx("p",{className:"devserver-preview-blocked-context",children:C})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:j("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:o,children:j("preview.openInNewTab","Open in new tab")}),v&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:v,children:j("actions.retry","Retry")})]})]})]}):null}function ct(e){return{stopped:{className:"dev-server-status-badge--stopped",label:e("devserver.status.stopped","Stopped")},starting:{className:"dev-server-status-badge--starting",label:e("devserver.status.starting","Starting...")},running:{className:"dev-server-status-badge--running",label:e("devserver.status.running","Running")},stopping:{className:"dev-server-status-badge--starting",label:e("devserver.status.stopping","Stopping...")},failed:{className:"dev-server-status-badge--failed",label:e("devserver.status.failed","Failed")}}}const dt=480;function vt(){return typeof window>"u"||typeof window.matchMedia!="function"?!1:window.matchMedia("(max-width: 768px)").matches}function sr(e){if(e.closest(".right-dock-expand-modal__body"))return null;const i=e.parentElement;return i?.classList.contains("right-dock__body")?i:null}function ut(e){return e.clientWidth>0?e.clientWidth:e.getBoundingClientRect().width}function mt(e){if(!e||vt())return!1;const i=sr(e);return i?ut(i)<=dt:!1}function pt(e){const[i,p]=t.useState(!1);return t.useEffect(()=>{const s=e.current;if(!s){p(!1);return}const g=sr(s),v=()=>p(mt(s));if(v(),!g||typeof ResizeObserver>"u")return window.addEventListener("resize",v),()=>window.removeEventListener("resize",v);const y=new ResizeObserver(v);return y.observe(g),window.addEventListener("resize",v),()=>{y.disconnect(),window.removeEventListener("resize",v)}},[e]),i}let ke=!1;function Ke(e){return e instanceof Error?e.message:String(e)}function nr(e){return e==="."?"root":e}function Xe(e){return e?e==="root"?".":e:null}function Ge(e,i,p){return!i||e.scriptName!==i?!1:p?nr(e.cwd)===p:!0}function ft(e){return e.cwd==="."?"root":e.cwd}function ht(e){return e.length<=60?e:`${e.slice(0,60)}…`}function kt({addToast:e,projectId:i,tasks:p}){const{t:s}=ue("app");t.useEffect(()=>(se({view:"DevServerView",trigger:ke?"route-active":"remount",projectId:i,replayAttempted:!1}),ke=!1,()=>{ke=!0,se({view:"DevServerView",trigger:"route-inactive",projectId:i,replayAttempted:!1})}),[i]);const{session:g,detectedCommands:v,previewUrl:y,isLoading:u,error:j,startServer:C,stopServer:z,restartServer:E,setPreviewUrl:k,detectCommands:m,refresh:o}=Kr(i),d=g?.status??"stopped",U=d==="running"||d==="starting",T=ct(s),_=T[d]??T.stopped,{entries:M,loading:R,loadingMore:F,hasMore:A,total:$,loadMore:w}=Gr(i,!!i),f=y,D=g?.config?.cwd??null,B=t.useRef(null),O=pt(B),[I,S]=t.useState(!0),[N,a]=t.useState(""),[n,h]=t.useState(""),[c,b]=t.useState(null),[x,L]=t.useState(null),[V,Re]=t.useState(null),X=t.useMemo(()=>(p??[]).filter(l=>l.column==="in-progress"&&typeof l.worktree=="string"&&l.worktree.length>0),[p]),q=t.useMemo(()=>X.find(l=>l.id===x)??null,[X,x]);t.useEffect(()=>{x&&!X.some(l=>l.id===x)&&L(null)},[X,x]);const[ee,ar]=t.useState("embedded"),[re,me]=t.useState(!1),De=t.useRef(null),pe=t.useRef(null),ir=ee==="embedded"?f:null,{embedStatus:H,setEmbedStatus:lr,resetEmbedStatus:ne,iframeRef:Q,isEmbedded:or,isBlocked:fe,blockReason:he,retry:_e}=et(ir),[Me,G]=t.useState(!1),Pe=t.useRef(H);t.useEffect(()=>{const l=Pe.current!==H;fe&&l&&G(!0),H==="embedded"&&G(!1),Pe.current=H},[H,fe]),t.useEffect(()=>{G(!1)},[f]);const ae=t.useMemo(()=>{if(!c)return null;const l=Xe(D);return v.find(P=>!(P.scriptName!==c||l&&P.cwd!==l||g?.config?.command&&P.command!==g.config.command))??v.find(P=>Ge(P,c,D))??null},[v,g?.config?.command,c,D]);t.useEffect(()=>{typeof m=="function"&&m().catch(l=>{e(Ke(l),"error")})},[e,m]),t.useEffect(()=>{if(c){S(!1);return}S(!0)},[c]),t.useEffect(()=>{if(g?.status==="running"||g?.status==="starting"){g.config?.command?.trim().length>0&&a(g.config.command);return}if(ae){a(ae.command);return}v.length>0&&a(l=>l.trim().length>0?l:v[0]?.command??"")},[v,ae,g?.config?.command,g?.status]),t.useEffect(()=>{h(f??"")},[f]);const ie=t.useCallback(()=>{me(!1),window.requestAnimationFrame(()=>De.current?.focus())},[]),cr=Tr(ie);t.useEffect(()=>{if(!re)return;pe.current?.focus();const l=P=>{if(P.key==="Escape"){ie();return}if(P.key!=="Tab")return;const te=Array.from(pe.current?.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')??[]).filter(Ae=>!Ae.hasAttribute("disabled")&&Ae.getAttribute("aria-hidden")!=="true"),J=te[0],we=te.at(-1);!J||!we||(P.shiftKey&&document.activeElement===J?(P.preventDefault(),we.focus()):!P.shiftKey&&document.activeElement===we&&(P.preventDefault(),J.focus()))};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[ie,re]),t.useEffect(()=>{!O&&re&&me(!1)},[O,re]);const ge=t.useCallback(()=>{f&&window.open(f,"_blank","noopener,noreferrer")},[f]),Te=t.useCallback(()=>{G(!1),_e()},[_e]),dr=t.useCallback(()=>{try{const l=Q.current;if(l?.contentWindow){l.contentWindow.location.reload(),G(!1),ne();return}}catch{}if(!(!f||!Q.current))try{const l=new URL(f);l.searchParams.set("_t",Date.now().toString()),Q.current.src=l.toString(),G(!1),ne()}catch{Q.current.src=f,G(!1),ne()}},[f,Q,ne]),le=t.useCallback(async(l,P,te)=>{Re(l);try{await P(),e(te,"success")}catch(J){e(Ke(J),"error")}finally{Re(null)}},[e]),vr=t.useCallback(l=>{b(l.scriptName),S(!1),a(l.command),e(s("devserver.toast.selectedScript","Selected {{name}} script.",{name:l.scriptName}),"success")},[e]),ur=t.useCallback(()=>{b(null),S(!0),e(s("devserver.toast.clearedScript","Cleared selected dev server script."),"success")},[e]),mr=t.useCallback(l=>{U&&l&&l!==x&&e(s("devserver.restartToApplyTask","Restart the dev server to apply the selected task's worktree."),"info"),L(l)},[e,U,x,s]),pr=()=>{const l=N.trim();if(l.length===0){e(s("devserver.toast.enterCommand","Enter a command before starting the dev server."),"warning");return}const P=Xe(D)??".",J=q?.worktree??null??ae?.cwd??P;le("start",()=>C(l,J),s("devserver.toast.started","Dev server started."))},fr=()=>{le("stop",z,s("devserver.toast.stopped","Dev server stopped."))},hr=()=>{le("restart",E,s("devserver.toast.restarted","Dev server restarted."))},gr=()=>{const l=n.trim(),P=l.length>0?l:null;le("preview",()=>k(P),P?s("devserver.toast.previewUpdated","Preview URL updated."):s("devserver.toast.previewCleared","Preview URL override cleared."))},wr=t.useCallback(()=>{j&&o()},[j,o]),br=d==="starting"||d==="running"||V!==null,xr=d==="stopped"||V!==null,yr=d==="stopped"||d==="starting"||V!==null,Ue=()=>r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"devserver-preview-header",children:[r.jsxs("div",{className:"devserver-preview-title",children:[r.jsx(Be,{size:14}),r.jsx("span",{children:s("devserver.preview","Preview")})]}),r.jsxs("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:f??s("devserver.noPreviewUrl","No preview URL"),"data-testid":"devserver-preview-url-badge",children:[s("devserver.auto","Auto"),f?` · ${f}`:s("devserver.notAvailable"," · Not available")]}),r.jsxs("div",{className:"devserver-preview-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>ar(l=>l==="embedded"?"external":"embedded"),"data-testid":"devserver-preview-mode-toggle",children:ee==="embedded"?s("devserver.externalOnly","External only"):s("devserver.embedded","Embedded")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.openInNewTab","Open in new tab"),onClick:ge,disabled:!f,"data-testid":"devserver-preview-open-tab",children:r.jsx(Br,{})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.refreshPreview","Refresh preview"),onClick:dr,disabled:!f,"data-testid":"devserver-preview-refresh",children:r.jsx(Hr,{})})]})]}),r.jsxs("div",{className:"devserver-preview-container","data-embed-status":H,"data-embedded":or?"true":"false",children:[!f&&!U&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.startDevServer","Start a dev server to see a live preview here.")}),!f&&U&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.noPreviewDetected","No preview URL detected. Start the dev server or set a manual URL to preview your app.")}),f&&ee==="external"&&r.jsxs("div",{className:"devserver-preview-external-only","data-testid":"devserver-preview-external-only",children:[r.jsx("p",{children:s("devserver.embeddedPreviewDisabled","Embedded preview is disabled. Open your app in a separate browser tab.")}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm touch-target",onClick:ge,"data-testid":"devserver-preview-external-open-tab",children:s("devserver.openInNewTab","Open in new tab")})]}),f&&ee==="embedded"&&Me&&fe&&r.jsxs("div",{className:H==="error"?"devserver-preview-error-panel":"devserver-preview-blocked-panel","data-testid":"devserver-preview-fallback",role:"alert",children:[H==="error"?r.jsx(Qe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}):r.jsx(Ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:H==="error"?s("devserver.previewFailed","Preview failed"):s("devserver.previewBlocked","Preview blocked")}),he&&r.jsx("p",{className:"devserver-preview-blocked-context",children:he})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:s("devserver.openPreviewOrRetry","Open the preview in a new tab, or retry embedded mode after checking your server settings.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:ge,"data-testid":"devserver-preview-fallback-open-tab",children:s("devserver.openPreviewInNewTab","Open preview in new tab")}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:Te,"data-testid":"devserver-preview-fallback-retry",children:s("devserver.retryEmbeddedPreview","Retry embedded preview")})]})]}),f&&ee==="embedded"&&!Me&&r.jsx(ot,{url:f,embedStatus:H,onEmbedStatusChange:lr,iframeRef:Q,blockReason:he,onRetry:Te})]})]});return r.jsxs("div",{ref:B,className:"dev-server-view","data-testid":"dev-server-view","data-narrow-right-dock-preview":O?"true":"false",children:[r.jsx(Ur,{icon:Ar,title:s("devserver.title","Dev Server"),actions:r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"dev-server-header-title",children:r.jsx("span",{className:`dev-server-status-badge ${_.className}`,"data-testid":"dev-server-status-badge",children:_.label})}),r.jsxs("div",{className:"dev-server-header-actions",children:[r.jsxs("button",{type:"button",className:"btn btn-primary btn-sm",onClick:pr,disabled:br,"data-testid":"dev-server-start-button",children:[r.jsx(Or,{size:14}),r.jsx("span",{children:V==="start"?s("devserver.starting","Starting..."):s("devserver.start","Start")})]}),r.jsxs("button",{type:"button",className:"btn btn-danger btn-sm",onClick:fr,disabled:xr,"data-testid":"dev-server-stop-button",children:[r.jsx(zr,{size:14}),r.jsx("span",{children:V==="stop"?s("devserver.stopping","Stopping..."):s("devserver.stop","Stop")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm",onClick:hr,disabled:yr,"data-testid":"dev-server-restart-button",children:[r.jsx(Fr,{size:14}),r.jsx("span",{children:V==="restart"?s("devserver.restarting","Restarting..."):s("devserver.restart","Restart")})]})]})]})}),r.jsxs("section",{className:"dev-server-panel dev-server-config","aria-label":s("devserver.configurationLabel","Dev server configuration"),children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.configuration","Configuration")}),u&&r.jsx("span",{className:"dev-server-muted",children:s("devserver.loading","Loading...")})]}),u&&!g&&v.length===0&&r.jsxs("div",{className:"dev-server-loading-state","data-testid":"dev-server-loading-state",children:[r.jsx(ve,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:s("devserver.loadingConfig","Loading dev server configuration...")})]}),j&&r.jsxs("div",{className:"dev-server-error-box",role:"alert","data-testid":"dev-server-error-box",children:[r.jsx("p",{children:j}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:wr,children:s("devserver.retry","Retry")})]}),r.jsxs("div",{className:"dev-server-section",children:[r.jsx("h3",{children:s("devserver.scriptSelection","Script Selection")}),c&&r.jsxs("div",{className:"dev-server-selected","data-testid":"dev-server-selected-summary",children:[r.jsx("span",{className:"dev-server-candidate-name",children:c}),r.jsx("span",{className:"dev-server-candidate-source",children:D??"root"}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>S(!0),"data-testid":"dev-server-change-selection",children:s("devserver.change","Change")}),r.jsx("button",{type:"button",className:"btn btn-danger btn-sm",onClick:ur,"data-testid":"dev-server-clear-selection",children:s("devserver.clear","Clear")})]}),I&&v.length===0&&r.jsx("p",{className:"dev-server-empty-state","data-testid":"dev-server-empty-candidates",children:s("devserver.noScriptsDetected","No dev server scripts detected. Check that your project has a package.json with a dev, start, or similar script.")}),I&&v.length>0&&r.jsx("div",{className:"dev-server-candidates","data-testid":"dev-server-candidates",children:v.map(l=>{const P=Ge(l,c,D);return r.jsxs("button",{type:"button",className:`dev-server-candidate ${P?"dev-server-candidate--selected":""}`,onClick:()=>vr(l),"data-testid":`dev-server-candidate-${l.scriptName}-${nr(l.cwd)}`,children:[r.jsx("span",{className:"dev-server-candidate-name",children:l.scriptName}),r.jsx("span",{className:"dev-server-candidate-command",children:ht(l.command)}),r.jsx("span",{className:"dev-server-candidate-source",children:ft(l)})]},`${l.cwd}::${l.scriptName}::${l.command}`)})})]}),r.jsxs("div",{className:"dev-server-section dev-server-executing-task-section",children:[r.jsx("h3",{children:s("devserver.executingTask","Executing Task")}),r.jsxs("div",{className:"dev-server-field-group",children:[r.jsx("label",{htmlFor:"dev-server-task-picker",className:"dev-server-label",children:s("devserver.executingTask","Executing Task")}),r.jsxs("select",{id:"dev-server-task-picker",className:"input dev-server-task-picker",value:x??"",onChange:l=>mr(l.target.value.length>0?l.target.value:null),disabled:X.length===0,"aria-label":s("devserver.executingTask","Executing Task"),"data-testid":"dev-server-task-picker",children:[r.jsx("option",{value:"",children:s("devserver.projectRootNoTask","Project root (no task)")}),X.map(l=>r.jsx("option",{value:l.id,children:l.title?`${l.id} — ${l.title}`:l.id},l.id))]}),X.length===0&&r.jsx("p",{className:"dev-server-empty-state","data-testid":"dev-server-no-executing-tasks",children:s("devserver.noExecutingTasks","No executing tasks with a worktree available. Start a task to target its worktree.")}),q&&r.jsxs("div",{className:"dev-server-task-descriptor","data-testid":"dev-server-task-descriptor",children:[r.jsx("div",{className:"dev-server-task-descriptor-header",children:r.jsx("span",{className:"dev-server-candidate-name",children:q.title?`${q.id} — ${q.title}`:q.id})}),r.jsx("p",{className:"dev-server-task-description",children:q.description}),r.jsxs("div",{className:"dev-server-task-worktree",children:[r.jsx("span",{className:"dev-server-label",children:s("devserver.targetWorktree","Target worktree")}),r.jsx("code",{children:q.worktree})]})]})]})]}),r.jsxs("div",{className:"dev-server-field-group",children:[r.jsx("label",{htmlFor:"dev-server-command",className:"dev-server-label",children:s("devserver.command","Command")}),r.jsx("input",{id:"dev-server-command",className:"input",value:N,onChange:l=>a(l.target.value),placeholder:"pnpm dev","data-testid":"dev-server-command-input",readOnly:d==="running"||d==="starting"})]}),(d==="running"||d==="starting")&&g&&r.jsxs("div",{className:"dev-server-current-command","data-testid":"dev-server-current-command",children:[r.jsx("span",{className:"dev-server-label",children:s("devserver.runningCommand","Running command")}),r.jsx("code",{children:g.config?.command??N})]}),r.jsxs("div",{className:"dev-server-preview-override",children:[r.jsx("label",{htmlFor:"dev-server-preview-input",className:"dev-server-label",children:s("devserver.previewUrlOverride","Preview URL Override")}),r.jsx("input",{id:"dev-server-preview-input",className:"input",type:"url",value:n,onChange:l=>h(l.target.value),placeholder:"http://localhost:3000","data-testid":"dev-server-preview-input"}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:gr,disabled:V==="preview","data-testid":"dev-server-set-preview",children:s("devserver.save","Save")})]}),f&&r.jsx("p",{className:"dev-server-preview-hint",children:s("devserver.autoDetected","Auto-detected: {{url}}",{url:f})})]}),r.jsx("div",{className:"dev-server-content",children:r.jsxs("section",{className:"dev-server-panel dev-server-logs-panel","data-testid":"dev-server-logs-panel","aria-label":s("devserver.logsLabel","Dev server logs"),children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.logs","Logs")}),r.jsx("span",{className:"dev-server-muted",children:s("devserver.lines","{{count}} lines",{count:$??M.length})})]}),r.jsx("div",{className:"dev-server-logs-viewer","data-testid":"dev-server-log-viewer",children:r.jsx(it,{entries:M,loading:R,loadingMore:F,hasMore:A,total:$,onLoadMore:w,isRunning:U})})]})}),O?r.jsxs("section",{className:"dev-server-panel devserver-preview-modal-launcher","data-testid":"devserver-preview-modal-launcher","aria-label":s("devserver.previewLabel","Dev server preview"),children:[r.jsxs("div",{className:"devserver-preview-modal-launcher__copy",children:[r.jsxs("div",{className:"devserver-preview-title",children:[r.jsx(Be,{size:14}),r.jsx("span",{children:s("devserver.preview","Preview")})]}),r.jsx("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:f??s("devserver.noPreviewUrl","No preview URL"),"data-testid":"devserver-preview-url-badge",children:f||s("devserver.notAvailable","Not available")})]}),r.jsx("p",{className:"devserver-preview-modal-launcher__description",children:f?s("devserver.previewModalLauncherDescription","Open the live preview in a modal so logs and configuration stay usable in this narrow dock."):s("devserver.previewModalLauncherUnavailable","Start the dev server or set a preview URL to open the preview modal.")}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm",ref:De,onClick:()=>me(!0),"data-testid":"devserver-preview-modal-open",children:s("devserver.openPreview","Open preview")})]}):r.jsx("section",{className:"dev-server-panel devserver-preview-panel","data-testid":"devserver-preview-panel","aria-label":s("devserver.previewLabel","Dev server preview"),children:Ue()}),O&&re&&r.jsx("div",{className:"modal-overlay open devserver-preview-modal-overlay",...cr,children:r.jsxs("div",{className:"modal devserver-preview-modal",role:"dialog","aria-modal":"true","aria-labelledby":"devserver-preview-modal-title",tabIndex:-1,ref:pe,"data-testid":"devserver-preview-modal",children:[r.jsxs("div",{className:"devserver-preview-modal__titlebar",children:[r.jsx("h2",{id:"devserver-preview-modal-title",children:s("devserver.preview","Preview")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:ie,"aria-label":s("devserver.closePreviewModal","Close preview modal"),"data-testid":"devserver-preview-modal-close",children:r.jsx($r,{})})]}),r.jsx("div",{className:"devserver-preview-modal__body",children:Ue()})]})})]})}export{kt as DevServerView};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as n,j as r}from"./vendor-react-SZ_qB27O.js";import{a9 as v,aa as z,ab as D,ac as x,C as j,ad as S,D as T,F as B,P as A,L,q as w}from"./index-
|
|
1
|
+
import{r as n,j as r}from"./vendor-react-SZ_qB27O.js";import{a9 as v,aa as z,ab as D,ac as x,C as j,ad as S,D as T,F as B,P as A,L,q as w}from"./index-BjELA24x.js";import{u as K}from"./vendor-i18n-GF3RlKbq.js";import{F as R}from"./folder-open-B8vOwFeP.js";function J({value:p,onChange:u,placeholder:f,onInputKeyDown:N,nodeId:b,localNodeId:k}){const{t:i}=K("app"),[e,s]=n.useState({isOpen:!1,loading:!1,error:null,currentPath:"",parentPath:null,entries:[],showHidden:!1,createFolderOpen:!1,createFolderError:null}),[l,h]=n.useState(""),d=n.useCallback(async(t,c=!1)=>{s(o=>({...o,loading:!0,error:null}));try{const o=await v(t,c,b,k);s(a=>({...a,loading:!1,currentPath:o.currentPath,parentPath:o.parentPath,entries:o.entries}))}catch(o){s(a=>({...a,loading:!1,error:o instanceof Error?o.message:"Failed to browse directory"}))}},[b,k]),F=n.useCallback(()=>{s(t=>t.isOpen?{...t,isOpen:!1}:{...t,isOpen:!0})},[]);n.useEffect(()=>{e.isOpen&&!e.loading&&!e.currentPath&&!e.error&&d(p||void 0,e.showHidden)},[e.isOpen,e.loading,e.currentPath,e.error,p,e.showHidden,d,b,k]);const m=n.useCallback(t=>{d(t,e.showHidden)},[d,e.showHidden]),C=n.useCallback(()=>{u(e.currentPath),s(t=>({...t,isOpen:!1}))},[e.currentPath,u]),g=n.useCallback(()=>{s(t=>{const c=!t.showHidden;return{...t,showHidden:c}})},[]);n.useEffect(()=>{e.isOpen&&e.currentPath&&d(e.currentPath,e.showHidden)},[e.showHidden,d]);const P=n.useCallback(()=>{s(t=>({...t,createFolderOpen:!t.createFolderOpen,createFolderError:null})),h("")},[]),y=n.useCallback(async()=>{if(!l.trim()||!e.currentPath)return;const t=l.trim();if(t.includes("/")||t.includes("\\")||t.includes("..")){s(a=>({...a,createFolderError:i("dirPicker.createFolderError","Folder name cannot contain path separators or '..'")}));return}const c=e.currentPath.includes("\\")?"\\":"/",o=e.currentPath.endsWith(c)?e.currentPath+t:e.currentPath+c+t;s(a=>({...a,loading:!0,createFolderError:null}));try{await z(o),h(""),s(a=>({...a,createFolderOpen:!1})),await d(e.currentPath,e.showHidden)}catch(a){s(O=>({...O,loading:!1,createFolderError:a instanceof Error?a.message:"Failed to create folder"}))}},[l,e.currentPath,e.showHidden,d]),H=n.useCallback(t=>{t.key==="Enter"?(t.preventDefault(),y()):t.key==="Escape"&&(s(c=>({...c,createFolderOpen:!1,createFolderError:null})),h(""))},[y]),E=e.currentPath?D(e.currentPath):[];return r.jsxs("div",{className:"directory-picker",children:[r.jsxs("div",{className:"directory-picker-input-row",children:[r.jsx("input",{type:"text",className:"input directory-picker-input",value:p,onChange:t=>u(t.target.value),onKeyDown:N,placeholder:f||i("dirPicker.defaultPlaceholder","/path/to/your/project")}),r.jsxs("button",{type:"button",className:"btn btn-secondary btn-sm directory-picker-browse-btn",onClick:F,"aria-label":e.isOpen?i("dirPicker.closeBrowser","Close directory browser"):i("dirPicker.openBrowser","Browse directories"),children:[e.isOpen?r.jsx(R,{size:16}):r.jsx(x,{size:16}),r.jsx("span",{children:i("dirPicker.browse","Browse")})]})]}),e.isOpen&&r.jsxs("div",{className:"directory-picker-browser",role:"tree","aria-label":i("dirPicker.ariaLabel","Directory browser"),children:[r.jsx("div",{className:"directory-picker-breadcrumbs",children:E.map((t,c)=>r.jsxs("span",{className:"directory-picker-breadcrumb-item",children:[c>0&&r.jsx(j,{size:12,className:"directory-picker-breadcrumb-sep"}),r.jsx("button",{type:"button",className:"directory-picker-breadcrumb",onClick:()=>m(t.path),title:t.path,children:t.label})]},t.path))}),r.jsxs("div",{className:"directory-picker-toolbar",children:[e.parentPath&&r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-up-btn",onClick:()=>m(e.parentPath),"aria-label":i("dirPicker.parentDir","Go to parent directory"),title:i("dirPicker.parentDirTitle","Parent directory"),children:[r.jsx(S,{size:14}),r.jsx("span",{children:i("dirPicker.up","Up")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-hidden-toggle",onClick:g,"aria-label":e.showHidden?i("dirPicker.hideHiddenAria","Hide hidden directories"):i("dirPicker.showHiddenAria","Show hidden directories"),title:e.showHidden?i("dirPicker.hideHiddenTitle","Hide hidden"):i("dirPicker.showHiddenTitle","Show hidden"),children:[e.showHidden?r.jsx(T,{size:14}):r.jsx(B,{size:14}),r.jsx("span",{children:e.showHidden?i("dirPicker.hideHidden","Hide hidden"):i("dirPicker.showHidden","Show hidden")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-create-folder-toggle",onClick:P,"aria-label":i("dirPicker.createFolderAria","Create new folder"),title:i("dirPicker.createFolderTitle","Create folder"),children:[r.jsx(A,{size:14}),r.jsx("span",{children:i("dirPicker.createFolder","New folder")})]})]}),e.loading?r.jsxs("div",{className:"directory-picker-loading",children:[r.jsx(L,{size:20,className:"animate-spin"}),r.jsx("span",{children:i("dirPicker.loading","Loading…")})]}):e.error?r.jsxs("div",{className:"directory-picker-error",children:[r.jsx(w,{size:16}),r.jsx("span",{children:e.error})]}):r.jsx("div",{className:"directory-picker-entries",children:e.entries.length===0?r.jsx("div",{className:"directory-picker-empty",children:i("dirPicker.noSubdirs","No subdirectories")}):e.entries.map(t=>r.jsxs("button",{type:"button",className:"directory-picker-entry",onClick:()=>m(t.path),role:"treeitem",title:t.path,children:[r.jsx(x,{size:16,className:"directory-picker-entry-icon"}),r.jsx("span",{className:"directory-picker-entry-name",children:t.name}),t.hasChildren&&r.jsx(j,{size:14,className:"directory-picker-entry-arrow"})]},t.path))}),e.createFolderOpen&&r.jsxs("div",{className:"directory-picker-create-folder",children:[r.jsx("input",{type:"text",className:"input directory-picker-create-folder-input",value:l,onChange:t=>h(t.target.value),onKeyDown:H,placeholder:i("dirPicker.newFolderPlaceholder","Folder name"),autoFocus:!0}),r.jsxs("div",{className:"directory-picker-create-folder-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm btn-primary",onClick:y,disabled:!l.trim()||e.loading||!e.currentPath,children:i("dirPicker.createFolderConfirm","Create")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-secondary",onClick:P,children:i("dirPicker.cancel","Cancel")})]}),e.createFolderError&&r.jsxs("div",{className:"directory-picker-create-folder-error",children:[r.jsx(w,{size:14}),r.jsx("span",{children:e.createFolderError})]})]}),r.jsxs("div",{className:"directory-picker-actions",children:[r.jsx("span",{className:"directory-picker-selected-path",title:e.currentPath,children:e.currentPath}),r.jsx("button",{type:"button",className:"btn btn-primary directory-picker-select-btn",onClick:C,children:i("dirPicker.select","Select")})]})]})]})}export{J as D};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as a,j as e}from"./vendor-react-SZ_qB27O.js";import{ay as le,az as ie,aA as Be,aB as qe,aC as he,aD as Ke,aE as de,aF as Qe,aG as ue,aH as _e,aI as Ve,V as Ge,aJ as U,D as We,F as Xe,aK as Ie,X as me,R as Je,al as I,p as Ye,s as fe,v as pe,aL as J,aM as Ze,aN as et,o as xe,C as tt,ad as st}from"./index-JlBzf2ck.js";import{u as O}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-reactflow-CnI7NMXG.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";function at(t){const{projectId:i,searchQuery:h,includeProjectFiles:d=!0}=t??{},o=i?`${Be.DOCUMENTS_PREFIX}${i}`:null,[s,c]=a.useState(()=>{if(!o)return[];const w=le(o,{maxAgeMs:ie});return Array.isArray(w)?w:[]}),[f,r]=a.useState([]),[p,u]=a.useState(()=>s.length===0),[j,b]=a.useState(null),k=a.useRef(null),g=a.useRef(s.length>0),x=a.useRef(null),P=a.useCallback(async()=>{k.current&&k.current.abort();const w=new AbortController;k.current=w;const z=!g.current;z&&u(!0),b(null);const E=qe(h?{q:h}:void 0,i),T=d?he(i):Promise.resolve({files:[]}),[v,S]=await Promise.allSettled([E,T]);if(w.signal.aborted)return;let M=null;if(v.status==="fulfilled"){if(c(v.value),o){const A=v.value.length>500?v.value.slice(0,500):v.value;Ke(o,A,{maxBytes:5e5})}g.current=!0}else M=v.reason instanceof Error?v.reason.message:String(v.reason);if(S.status==="fulfilled"){const A=S.value.files,R=h?.trim().toLowerCase(),F=R?A.filter(H=>H.name.toLowerCase().includes(R)||H.path.toLowerCase().includes(R)):A;r(F)}b(M),z&&u(!1)},[o,d,i,h]);return a.useEffect(()=>{if(!o){g.current=!1,c([]),u(!0);return}const w=le(o,{maxAgeMs:ie});Array.isArray(w)?(c(w),g.current=!0,u(!1)):(g.current=!1,c([]),u(!0))},[o]),a.useEffect(()=>(x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{P()},300),()=>{x.current&&clearTimeout(x.current)}),[P]),a.useEffect(()=>(P(),()=>{k.current&&k.current.abort()}),[]),{documents:s,projectFiles:f,loading:p,error:j,refresh:P}}function nt(t,i){const[h,d]=a.useState([]),[o,s]=a.useState(!0),[c,f]=a.useState(null),r=a.useRef(null),p=a.useRef(!1),u=i?.showHidden??!1,j=a.useCallback(async b=>{r.current&&r.current.abort();const k=new AbortController;r.current=k;const g=!p.current;g&&s(!0),f(null);try{const x=await he(t,{showHidden:b?.showHidden??u});if(k.signal.aborted)return;d(x.files),p.current=!0}catch(x){if(k.signal.aborted)return;f(x instanceof Error?x.message:String(x))}finally{!k.signal.aborted&&g&&s(!1)}},[t,u]);return a.useEffect(()=>(p.current=!1,j({showHidden:u}),()=>{r.current&&r.current.abort()}),[j,u]),{files:h,loading:o,error:c,refresh:j}}const ct=768;function Y(t){return t?new Date(t).toLocaleString():""}function je(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(t>=10*1024?0:1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function we(t,i=200){return t.length<=i?t:`${t.substring(0,i)}…`}function ot({document:t,renderMarkdown:i,onToggleMarkdown:h}){const{t:d}=O("app"),[o,s]=a.useState(!1),c=we(t.content),f=t.content.length>200;return e.jsxs("div",{className:"document-card",children:[e.jsxs("div",{className:"document-card-header",children:[e.jsxs("div",{className:"document-card-key",children:[e.jsx(U,{size:14}),e.jsx("span",{className:"document-card-key-text",children:t.key}),e.jsxs("span",{className:"document-card-revision-badge",children:["v",t.revision]})]}),e.jsx("div",{className:"document-card-actions",children:e.jsx("button",{className:"btn btn-sm document-card-expand-btn",onClick:()=>s(r=>!r),title:o?d("documents.collapse","Collapse"):d("documents.expand","Expand"),"aria-label":o?d("documents.collapseContent","Collapse content"):d("documents.expandContent","Expand content"),children:o?e.jsx(st,{size:14}):e.jsx(xe,{size:14})})})]}),e.jsxs("div",{className:"document-card-meta",children:[e.jsx("span",{className:"document-card-author",children:t.author}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{className:"document-card-date",children:Y(t.updatedAt)})]}),e.jsxs("div",{className:`document-card-content${o?" document-card-content--expanded":""}`,children:[o?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"document-card-content-header",children:e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:h,"aria-label":i?d("documents.switchToPlainText","Switch to plain text"):d("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":i,title:i?d("documents.switchToPlainText","Switch to plain text"):d("documents.switchToMarkdown","Switch to markdown"),children:i?d("documents.markdown","Markdown"):d("documents.plain","Plain")})}),i?e.jsx("div",{className:"document-card-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(fe,{remarkPlugins:[pe],children:t.content})})}):e.jsx("pre",{className:"document-card-content-text",children:t.content})]}):e.jsx("p",{className:"document-card-preview",children:c}),f&&!o&&e.jsx("p",{className:"document-card-preview-truncated",children:"…"})]})]})}function rt({taskId:t,taskTitle:i,documents:h,onOpenTask:d,renderMarkdownStates:o,onToggleMarkdown:s}){const{t:c}=O("app"),[f,r]=a.useState(!1);return e.jsxs("div",{className:"documents-group",children:[e.jsxs("div",{className:"documents-group-header",children:[e.jsxs("button",{className:"documents-group-toggle-btn",onClick:()=>r(p=>!p),"aria-expanded":f,"aria-label":`${f?c("documents.collapse","Collapse"):c("documents.expand","Expand")} documents for task ${t}`,children:[e.jsx("span",{className:"documents-group-toggle","aria-hidden":"true",children:f?e.jsx(xe,{size:16}):e.jsx(tt,{size:16})}),e.jsx("span",{className:"documents-group-task-id",children:t}),e.jsx("span",{className:"documents-group-task-title",children:i||c("documents.untitled","Untitled")})]}),e.jsx("span",{className:"documents-group-count",children:c("documents.docCount","{{count}} doc{{plural}}",{count:h.length,plural:h.length!==1?"s":""})}),e.jsx("button",{className:"documents-group-task-link",onClick:()=>d(t),"aria-label":c("documents.openTaskAria","Open task {{taskId}}: {{title}}",{taskId:t,title:i||c("documents.untitled","Untitled")}),children:c("documents.openTask","Open task")})]}),f&&e.jsx("div",{className:"documents-group-content",children:h.map(p=>e.jsx(ot,{document:p,renderMarkdown:o.get(p.id)??!1,onToggleMarkdown:()=>s(p.id)},p.id))})]})}function lt({artifact:t,projectId:i,onOpenTask:h,onExpandMedia:d}){const{t:o}=O("app"),s=J(t.id,i),c=Ze(o,t.type),f=t.content?we(t.content,320):t.description,r=t.title||o("documents.untitledArtifact","Untitled artifact"),p=t.type==="image"||t.type==="video",u=a.useCallback(j=>{(j.key==="Enter"||j.key===" ")&&(j.preventDefault(),d(t))},[t,d]);return e.jsxs("article",{className:"document-card documents-artifact-card","aria-label":o("documents.artifactCardLabel","Artifact {{title}}",{title:r}),children:[p?e.jsxs("div",{className:"documents-artifact-preview documents-artifact-preview--expandable",role:"button",tabIndex:0,"aria-label":o("documents.expandArtifact","Expand {{title}}",{title:r}),onClick:()=>d(t),onKeyDown:u,children:[t.type==="image"?e.jsx("img",{className:"documents-artifact-media",src:s,alt:r,loading:"lazy"}):e.jsx("video",{className:"documents-artifact-media",src:s,muted:!0,preload:"metadata","aria-label":o("documents.artifactVideoLabel","Video artifact: {{title}}",{title:r})}),e.jsx("span",{className:"documents-artifact-expand-hint",children:o("documents.expandArtifactHint","Click to expand")})]}):e.jsx("div",{className:"documents-artifact-preview",children:e.jsx(et,{artifact:t,mediaUrl:s,title:r,preview:f,t:o})}),e.jsxs("div",{className:"documents-artifact-body",children:[e.jsxs("div",{className:"documents-artifact-header",children:[e.jsx("span",{className:"documents-artifact-type-badge",children:c}),e.jsx("span",{className:"documents-artifact-author",children:t.authorId})]}),e.jsx("h3",{className:"documents-artifact-title",children:r}),t.description&&e.jsx("p",{className:"documents-artifact-description",children:t.description}),e.jsxs("div",{className:"documents-artifact-meta",children:[e.jsx("span",{children:Y(t.createdAt)}),t.sizeBytes!==void 0&&e.jsx("span",{children:je(t.sizeBytes)})]}),t.taskId&&e.jsx("button",{className:"documents-group-task-link documents-artifact-task-link",onClick:()=>h(t.taskId),"aria-label":o("documents.openTaskAria","Open task {{taskId}}: {{title}}",{taskId:t.taskId,title:t.taskTitle||o("documents.untitled","Untitled")}),children:o("documents.openTask","Open task")})]})]})}function pt({projectId:t,addToast:i,onOpenDetail:h,onOpenArtifactTaskDetail:d,onSendSelectionToTask:o}){const{t:s}=O("app"),[c,f]=a.useState("project"),[r,p]=a.useState(""),[u,j]=a.useState(null),[b,k]=a.useState(!1),[g,x]=a.useState(null),[P,w]=a.useState(!1),[z,E]=a.useState(null),[T,v]=a.useState(!1),S=a.useRef(0),M=a.useRef(!1),A=a.useRef(null),R=a.useRef(null),[F,H]=a.useState(!1),[ke,Z]=a.useState(new Map),[y,B]=a.useState(null),ee=a.useRef(null),q=a.useRef(null),[te,be]=a.useState(!1),ge=de(A,{locked:te}),ve=de(R,{locked:te}),K=F?ge:ve,Ne=c==="tasks"?r.trim():"",ye=c==="artifacts"?r.trim():"",{documents:D,loading:Q,error:Ce,refresh:se}=at({projectId:t,searchQuery:Ne||void 0,includeProjectFiles:!1}),{files:C,loading:_,error:Se,refresh:ae}=nt(t,{showHidden:b}),{artifacts:L,loading:V,error:Fe,refresh:ne}=Qe({projectId:t,searchQuery:ye||void 0});a.useEffect(()=>{const n=()=>{v(window.innerWidth<=ct)};return n(),window.addEventListener("resize",n),()=>{window.removeEventListener("resize",n)}},[]),a.useEffect(()=>{M.current=!1,f("project"),j(null),k(!1),x(null),E(null),w(!1),H(!1),Z(new Map),B(null)},[t]),a.useEffect(()=>{M.current||Q||_||V||(C.length>0?f("project"):D.length>0?f("tasks"):L.length>0&&f("artifacts"),M.current=!0)},[L.length,V,D.length,Q,C.length,_]);const G=a.useMemo(()=>{const n=new Map;for(const l of D){const m=n.get(l.taskId)||[];n.set(l.taskId,[...m,l])}return Array.from(n.entries()).map(([l,m])=>{const N=[...m].sort((Ue,Oe)=>Oe.updatedAt.localeCompare(Ue.updatedAt));return{taskId:l,taskTitle:N[0]?.taskTitle,documents:N,latestUpdated:N[0]?.updatedAt??""}}).sort((l,m)=>m.latestUpdated.localeCompare(l.latestUpdated))},[D]),W=a.useMemo(()=>{const n=r.trim().toLowerCase();return n?C.filter(l=>{const m=l.path.toLowerCase(),N=l.name.toLowerCase();return m.includes(n)||N.includes(n)}):C},[C,r]);a.useEffect(()=>{if(!u)return;C.some(l=>l.path===u.path)||(j(null),x(null),E(null),w(!1))},[C,u]);const Ee=a.useCallback(n=>{p(n.target.value)},[]),Te=a.useCallback(()=>{p("")},[]),X=a.useCallback(n=>{f(n)},[]),Ae=a.useCallback(async n=>{try{const l=await ue(n,t);h(l)}catch{i(`Failed to open task ${n}`,"error")}},[t,h,i]),Le=a.useCallback(async n=>{try{const l=await ue(n,t);(d??h)(l)}catch{i(`Failed to open task ${n}`,"error")}},[t,d,h,i]),Pe=a.useCallback(async n=>{j(n),w(!0),E(null),x(null);const l=S.current+1;S.current=l;try{const m=await _e("project",n.path,t);if(S.current!==l)return;x(m.content)}catch(m){if(S.current!==l)return;const N=m instanceof Error?m.message:`Failed to open ${n.path}`;E(N),i(N,"error")}finally{S.current===l&&w(!1)}},[t,i]),Me=a.useCallback(()=>{j(null),x(null),E(null),w(!1)},[]),Re=a.useCallback(n=>{Z(l=>{const m=new Map(l),N=m.get(n)??!1;return m.set(n,!N),m})},[]),De=a.useCallback(n=>{q.current=document.activeElement instanceof HTMLElement?document.activeElement:null,B(n)},[]),$=a.useCallback(()=>{B(null),q.current?.focus(),q.current=null},[]);a.useEffect(()=>{if(!y)return;const n=document.body.style.overflow;document.body.style.overflow="hidden",ee.current?.focus();const l=m=>{m.key==="Escape"&&(m.preventDefault(),$())};return document.addEventListener("keydown",l),()=>{document.body.style.overflow=n,document.removeEventListener("keydown",l)}},[$,y]);const ze=a.useCallback(n=>{n.target===n.currentTarget&&$()},[$]),ce=c==="project"?Se:c==="tasks"?Ce:Fe,He=a.useCallback(async()=>{if(c==="project"){await ae();return}if(c==="tasks"){await se();return}await ne()},[c,ne,ae,se]),oe=c==="project"?W.length:c==="tasks"?D.length:L.length,$e=u&&o&&K?e.jsx(Ve,{selectedText:K.selectedText,anchorRect:K.anchorRect,filePath:u.path,onSubmit:o,onOpenChange:be}):null,re=c==="project"?s("documents.searchProjectFiles","Search project markdown files…"):c==="tasks"?s("documents.searchTaskDocuments","Search task documents…"):s("documents.searchArtifacts","Search artifacts…");return e.jsxs("div",{className:"documents-view",children:[e.jsxs("div",{className:"documents-view-header",children:[e.jsx(Ge,{icon:U,title:s("documents.title","Artifacts"),actions:e.jsx("span",{className:"documents-view-count",children:s("documents.resultCount","{{count}} result{{plural}}",{count:oe,plural:oe!==1?"s":""})})}),e.jsxs("div",{className:"documents-controls-row",children:[e.jsxs("div",{className:"documents-tab-bar",role:"tablist","aria-label":s("documents.sectionsLabel","Documents sections"),children:[e.jsxs("button",{className:`btn documents-tab${c==="project"?" active":""}`,role:"tab","aria-selected":c==="project","aria-label":s("documents.showProjectFiles","Show project markdown files"),onClick:()=>X("project"),children:[s("documents.projectFilesTab","Project Files"),e.jsx("span",{className:"documents-tab-count",children:C.length})]}),e.jsxs("button",{className:`btn documents-tab${c==="tasks"?" active":""}`,role:"tab","aria-selected":c==="tasks","aria-label":s("documents.showTaskDocuments","Show task documents"),onClick:()=>X("tasks"),children:[s("documents.taskDocumentsTab","Task Documents"),e.jsx("span",{className:"documents-tab-count",children:G.length})]}),e.jsxs("button",{className:`btn documents-tab${c==="artifacts"?" active":""}`,role:"tab","aria-selected":c==="artifacts","aria-label":s("documents.showArtifacts","Show artifacts"),onClick:()=>X("artifacts"),children:[s("documents.artifactsTab","Artifacts"),e.jsx("span",{className:"documents-tab-count",children:L.length})]})]}),c==="project"&&e.jsxs("button",{className:"btn btn-sm documents-hidden-toggle",onClick:()=>k(n=>!n),"aria-pressed":b,"aria-label":b?s("documents.hideHidden","Hide hidden project files"):s("documents.showHidden","Show hidden project files"),title:b?s("documents.hideHiddenFiles","Hide hidden files"):s("documents.showHiddenFiles","Show hidden files"),children:[b?e.jsx(We,{size:14}):e.jsx(Xe,{size:14}),b?s("documents.hideHiddenLabel","Hide Hidden"):s("documents.showHiddenLabel","Show Hidden")]}),e.jsxs("div",{className:"documents-search",children:[e.jsx(Ie,{size:16,className:"documents-search-icon"}),e.jsx("input",{type:"text",className:"documents-search-input",placeholder:re,value:r,onChange:Ee,"aria-label":re}),r&&e.jsx("button",{className:"documents-search-clear",onClick:Te,"aria-label":s("documents.clearSearch","Clear search"),children:e.jsx(me,{size:16})})]})]})]}),e.jsx("div",{className:"documents-view-content",children:ce?e.jsxs("div",{className:"documents-view-error",children:[e.jsx("p",{children:s("documents.failedToLoad","Failed to load {{type}}: {{error}}",{type:c==="project"?s("documents.projectFiles","project files"):c==="tasks"?s("documents.taskDocuments","task documents"):s("documents.artifacts","artifacts"),error:ce})}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>void He(),"aria-label":s("documents.retryLoading","Retry loading documents"),children:[e.jsx(Je,{size:16}),s("documents.retry","Retry")]})]}):c==="project"?_&&C.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:e.jsx(I,{label:s("documents.loadingProjectFiles","Loading project markdown files…")})})}):W.length===0?e.jsx("div",{className:"documents-view-empty",children:r.trim()?e.jsx("p",{children:s("documents.noMatchProject",'No project markdown files match "{{query}}".',{query:r.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(U,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:s("documents.noMarkdownFiles","No Markdown files found in this project.")})]})}):e.jsxs("div",{className:`documents-project-layout${T?" documents-project-layout--mobile":""}`,children:[(!T||!u)&&e.jsx("aside",{className:"documents-view-sidebar","aria-label":s("documents.projectMarkdownFilesLabel","Project markdown files"),children:e.jsx("ul",{className:"markdown-file-list",children:W.map(n=>{const l=u?.path===n.path;return e.jsx("li",{className:"markdown-file-list-item",children:e.jsxs("button",{className:`markdown-file-item${l?" markdown-file-item--selected":""}`,onClick:()=>void Pe(n),"aria-label":`Open ${n.path}`,"aria-current":l?"true":void 0,children:[e.jsx("span",{className:"markdown-file-item-name",children:n.name}),e.jsx("span",{className:"markdown-file-item-path",children:n.path}),e.jsxs("span",{className:"markdown-file-item-meta",children:[je(n.size)," · ",Y(n.mtime)]})]})},n.path)})})}),(!T||u)&&e.jsxs("section",{className:"documents-view-main","aria-label":s("documents.projectFilePreviewLabel","Project file content preview"),children:[T&&u&&e.jsxs("button",{className:"btn btn-sm documents-mobile-back",onClick:Me,"aria-label":s("documents.backToFilesList","Back to project files list"),children:[e.jsx(Ye,{size:14}),s("documents.backToFiles","Back to files")]}),u?e.jsxs("div",{className:"documents-content-viewer",children:[e.jsxs("div",{className:"documents-content-header",children:[e.jsx("p",{className:"documents-file-path-header",children:u.path}),e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>H(n=>!n),"aria-label":F?s("documents.switchToPlainText","Switch to plain text"):s("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":F,title:F?s("documents.switchToPlainText","Switch to plain text"):s("documents.switchToMarkdown","Switch to markdown"),children:F?s("documents.markdown","Markdown"):s("documents.plain","Plain")})]}),P?e.jsx("p",{className:"documents-content-state",children:e.jsx(I,{label:s("documents.loadingFileContent","Loading file content…")})}):z?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:z}):F?e.jsx("div",{ref:A,className:"documents-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(fe,{remarkPlugins:[pe],children:g??""})})}):e.jsx("pre",{ref:R,className:"document-card-content-text documents-content-viewer-text",children:g??""}),$e]}):e.jsx("div",{className:"documents-view-empty",children:e.jsx("p",{children:s("documents.selectFile","Select a Markdown file to view its content.")})})]})]}):c==="artifacts"?V&&L.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:s("documents.loadingArtifacts","Loading artifacts…")})}):L.length===0?e.jsx("div",{className:"documents-view-empty",children:r.trim()?e.jsx("p",{children:s("documents.noMatchArtifacts",'No artifacts match "{{query}}".',{query:r.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(U,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:s("documents.noArtifacts","No artifacts yet.")}),e.jsx("p",{className:"documents-view-empty-hint",children:s("documents.artifactsCreatedBy","Artifacts are created by agents, users, and system tools.")})]})}):e.jsx("div",{className:`documents-artifact-gallery${T?" documents-artifact-gallery--mobile":""}`,children:L.map(n=>e.jsx(lt,{artifact:n,projectId:t,onOpenTask:Le,onExpandMedia:De},n.id))}):Q&&D.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:e.jsx(I,{label:s("documents.loadingTaskDocuments","Loading task documents…")})})}):G.length===0?e.jsx("div",{className:"documents-view-empty",children:r.trim()?e.jsx("p",{children:s("documents.noMatchTask",'No task documents match "{{query}}".',{query:r.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(U,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:s("documents.noTaskDocuments","No task documents yet.")}),e.jsx("p",{className:"documents-view-empty-hint",children:s("documents.documentsCreatedIn","Documents are created in task detail tabs.")})]})}):e.jsx("div",{className:"documents-task-list-wrap",children:e.jsx("div",{className:"documents-view-list",children:G.map(({taskId:n,taskTitle:l,documents:m})=>e.jsx(rt,{taskId:n,taskTitle:l,documents:m,onOpenTask:Ae,renderMarkdownStates:ke,onToggleMarkdown:Re},n))})})}),y&&e.jsx("div",{className:"modal-overlay open documents-artifact-lightbox-overlay",role:"dialog","aria-modal":"true","aria-label":s("documents.lightboxLabel","Artifact media preview"),onClick:ze,children:e.jsxs("div",{className:"documents-artifact-lightbox",onClick:n=>n.stopPropagation(),children:[e.jsxs("div",{className:"documents-artifact-lightbox-header",children:[e.jsx("h3",{className:"documents-artifact-lightbox-title",children:y.title||s("documents.untitledArtifact","Untitled artifact")}),e.jsx("button",{ref:ee,className:"modal-close",onClick:$,"aria-label":s("documents.closeLightbox","Close artifact preview"),children:e.jsx(me,{size:20})})]}),e.jsx("div",{className:"documents-artifact-lightbox-media-frame",children:y.type==="image"?e.jsx("img",{className:"documents-artifact-lightbox-media",src:J(y.id,t),alt:y.title||s("documents.untitledArtifact","Untitled artifact")}):e.jsx("video",{className:"documents-artifact-lightbox-media",src:J(y.id,t),controls:!0,autoPlay:!0,"aria-label":s("documents.artifactVideoLabel","Video artifact: {{title}}",{title:y.title||s("documents.untitledArtifact","Untitled artifact")})})})]})})]})}export{pt as DocumentsView};
|
|
1
|
+
import{r as a,j as e}from"./vendor-react-SZ_qB27O.js";import{ay as le,az as ie,aA as Be,aB as qe,aC as he,aD as Ke,aE as de,aF as Qe,aG as ue,aH as _e,aI as Ve,V as Ge,aJ as U,D as We,F as Xe,aK as Ie,X as me,R as Je,al as I,p as Ye,s as fe,v as pe,aL as J,aM as Ze,aN as et,o as xe,C as tt,ad as st}from"./index-BjELA24x.js";import{u as O}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-reactflow-CnI7NMXG.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";function at(t){const{projectId:i,searchQuery:h,includeProjectFiles:d=!0}=t??{},o=i?`${Be.DOCUMENTS_PREFIX}${i}`:null,[s,c]=a.useState(()=>{if(!o)return[];const w=le(o,{maxAgeMs:ie});return Array.isArray(w)?w:[]}),[f,r]=a.useState([]),[p,u]=a.useState(()=>s.length===0),[j,b]=a.useState(null),k=a.useRef(null),g=a.useRef(s.length>0),x=a.useRef(null),P=a.useCallback(async()=>{k.current&&k.current.abort();const w=new AbortController;k.current=w;const z=!g.current;z&&u(!0),b(null);const E=qe(h?{q:h}:void 0,i),T=d?he(i):Promise.resolve({files:[]}),[v,S]=await Promise.allSettled([E,T]);if(w.signal.aborted)return;let M=null;if(v.status==="fulfilled"){if(c(v.value),o){const A=v.value.length>500?v.value.slice(0,500):v.value;Ke(o,A,{maxBytes:5e5})}g.current=!0}else M=v.reason instanceof Error?v.reason.message:String(v.reason);if(S.status==="fulfilled"){const A=S.value.files,R=h?.trim().toLowerCase(),F=R?A.filter(H=>H.name.toLowerCase().includes(R)||H.path.toLowerCase().includes(R)):A;r(F)}b(M),z&&u(!1)},[o,d,i,h]);return a.useEffect(()=>{if(!o){g.current=!1,c([]),u(!0);return}const w=le(o,{maxAgeMs:ie});Array.isArray(w)?(c(w),g.current=!0,u(!1)):(g.current=!1,c([]),u(!0))},[o]),a.useEffect(()=>(x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{P()},300),()=>{x.current&&clearTimeout(x.current)}),[P]),a.useEffect(()=>(P(),()=>{k.current&&k.current.abort()}),[]),{documents:s,projectFiles:f,loading:p,error:j,refresh:P}}function nt(t,i){const[h,d]=a.useState([]),[o,s]=a.useState(!0),[c,f]=a.useState(null),r=a.useRef(null),p=a.useRef(!1),u=i?.showHidden??!1,j=a.useCallback(async b=>{r.current&&r.current.abort();const k=new AbortController;r.current=k;const g=!p.current;g&&s(!0),f(null);try{const x=await he(t,{showHidden:b?.showHidden??u});if(k.signal.aborted)return;d(x.files),p.current=!0}catch(x){if(k.signal.aborted)return;f(x instanceof Error?x.message:String(x))}finally{!k.signal.aborted&&g&&s(!1)}},[t,u]);return a.useEffect(()=>(p.current=!1,j({showHidden:u}),()=>{r.current&&r.current.abort()}),[j,u]),{files:h,loading:o,error:c,refresh:j}}const ct=768;function Y(t){return t?new Date(t).toLocaleString():""}function je(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(t>=10*1024?0:1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function we(t,i=200){return t.length<=i?t:`${t.substring(0,i)}…`}function ot({document:t,renderMarkdown:i,onToggleMarkdown:h}){const{t:d}=O("app"),[o,s]=a.useState(!1),c=we(t.content),f=t.content.length>200;return e.jsxs("div",{className:"document-card",children:[e.jsxs("div",{className:"document-card-header",children:[e.jsxs("div",{className:"document-card-key",children:[e.jsx(U,{size:14}),e.jsx("span",{className:"document-card-key-text",children:t.key}),e.jsxs("span",{className:"document-card-revision-badge",children:["v",t.revision]})]}),e.jsx("div",{className:"document-card-actions",children:e.jsx("button",{className:"btn btn-sm document-card-expand-btn",onClick:()=>s(r=>!r),title:o?d("documents.collapse","Collapse"):d("documents.expand","Expand"),"aria-label":o?d("documents.collapseContent","Collapse content"):d("documents.expandContent","Expand content"),children:o?e.jsx(st,{size:14}):e.jsx(xe,{size:14})})})]}),e.jsxs("div",{className:"document-card-meta",children:[e.jsx("span",{className:"document-card-author",children:t.author}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{className:"document-card-date",children:Y(t.updatedAt)})]}),e.jsxs("div",{className:`document-card-content${o?" document-card-content--expanded":""}`,children:[o?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"document-card-content-header",children:e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:h,"aria-label":i?d("documents.switchToPlainText","Switch to plain text"):d("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":i,title:i?d("documents.switchToPlainText","Switch to plain text"):d("documents.switchToMarkdown","Switch to markdown"),children:i?d("documents.markdown","Markdown"):d("documents.plain","Plain")})}),i?e.jsx("div",{className:"document-card-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(fe,{remarkPlugins:[pe],children:t.content})})}):e.jsx("pre",{className:"document-card-content-text",children:t.content})]}):e.jsx("p",{className:"document-card-preview",children:c}),f&&!o&&e.jsx("p",{className:"document-card-preview-truncated",children:"…"})]})]})}function rt({taskId:t,taskTitle:i,documents:h,onOpenTask:d,renderMarkdownStates:o,onToggleMarkdown:s}){const{t:c}=O("app"),[f,r]=a.useState(!1);return e.jsxs("div",{className:"documents-group",children:[e.jsxs("div",{className:"documents-group-header",children:[e.jsxs("button",{className:"documents-group-toggle-btn",onClick:()=>r(p=>!p),"aria-expanded":f,"aria-label":`${f?c("documents.collapse","Collapse"):c("documents.expand","Expand")} documents for task ${t}`,children:[e.jsx("span",{className:"documents-group-toggle","aria-hidden":"true",children:f?e.jsx(xe,{size:16}):e.jsx(tt,{size:16})}),e.jsx("span",{className:"documents-group-task-id",children:t}),e.jsx("span",{className:"documents-group-task-title",children:i||c("documents.untitled","Untitled")})]}),e.jsx("span",{className:"documents-group-count",children:c("documents.docCount","{{count}} doc{{plural}}",{count:h.length,plural:h.length!==1?"s":""})}),e.jsx("button",{className:"documents-group-task-link",onClick:()=>d(t),"aria-label":c("documents.openTaskAria","Open task {{taskId}}: {{title}}",{taskId:t,title:i||c("documents.untitled","Untitled")}),children:c("documents.openTask","Open task")})]}),f&&e.jsx("div",{className:"documents-group-content",children:h.map(p=>e.jsx(ot,{document:p,renderMarkdown:o.get(p.id)??!1,onToggleMarkdown:()=>s(p.id)},p.id))})]})}function lt({artifact:t,projectId:i,onOpenTask:h,onExpandMedia:d}){const{t:o}=O("app"),s=J(t.id,i),c=Ze(o,t.type),f=t.content?we(t.content,320):t.description,r=t.title||o("documents.untitledArtifact","Untitled artifact"),p=t.type==="image"||t.type==="video",u=a.useCallback(j=>{(j.key==="Enter"||j.key===" ")&&(j.preventDefault(),d(t))},[t,d]);return e.jsxs("article",{className:"document-card documents-artifact-card","aria-label":o("documents.artifactCardLabel","Artifact {{title}}",{title:r}),children:[p?e.jsxs("div",{className:"documents-artifact-preview documents-artifact-preview--expandable",role:"button",tabIndex:0,"aria-label":o("documents.expandArtifact","Expand {{title}}",{title:r}),onClick:()=>d(t),onKeyDown:u,children:[t.type==="image"?e.jsx("img",{className:"documents-artifact-media",src:s,alt:r,loading:"lazy"}):e.jsx("video",{className:"documents-artifact-media",src:s,muted:!0,preload:"metadata","aria-label":o("documents.artifactVideoLabel","Video artifact: {{title}}",{title:r})}),e.jsx("span",{className:"documents-artifact-expand-hint",children:o("documents.expandArtifactHint","Click to expand")})]}):e.jsx("div",{className:"documents-artifact-preview",children:e.jsx(et,{artifact:t,mediaUrl:s,title:r,preview:f,t:o})}),e.jsxs("div",{className:"documents-artifact-body",children:[e.jsxs("div",{className:"documents-artifact-header",children:[e.jsx("span",{className:"documents-artifact-type-badge",children:c}),e.jsx("span",{className:"documents-artifact-author",children:t.authorId})]}),e.jsx("h3",{className:"documents-artifact-title",children:r}),t.description&&e.jsx("p",{className:"documents-artifact-description",children:t.description}),e.jsxs("div",{className:"documents-artifact-meta",children:[e.jsx("span",{children:Y(t.createdAt)}),t.sizeBytes!==void 0&&e.jsx("span",{children:je(t.sizeBytes)})]}),t.taskId&&e.jsx("button",{className:"documents-group-task-link documents-artifact-task-link",onClick:()=>h(t.taskId),"aria-label":o("documents.openTaskAria","Open task {{taskId}}: {{title}}",{taskId:t.taskId,title:t.taskTitle||o("documents.untitled","Untitled")}),children:o("documents.openTask","Open task")})]})]})}function pt({projectId:t,addToast:i,onOpenDetail:h,onOpenArtifactTaskDetail:d,onSendSelectionToTask:o}){const{t:s}=O("app"),[c,f]=a.useState("project"),[r,p]=a.useState(""),[u,j]=a.useState(null),[b,k]=a.useState(!1),[g,x]=a.useState(null),[P,w]=a.useState(!1),[z,E]=a.useState(null),[T,v]=a.useState(!1),S=a.useRef(0),M=a.useRef(!1),A=a.useRef(null),R=a.useRef(null),[F,H]=a.useState(!1),[ke,Z]=a.useState(new Map),[y,B]=a.useState(null),ee=a.useRef(null),q=a.useRef(null),[te,be]=a.useState(!1),ge=de(A,{locked:te}),ve=de(R,{locked:te}),K=F?ge:ve,Ne=c==="tasks"?r.trim():"",ye=c==="artifacts"?r.trim():"",{documents:D,loading:Q,error:Ce,refresh:se}=at({projectId:t,searchQuery:Ne||void 0,includeProjectFiles:!1}),{files:C,loading:_,error:Se,refresh:ae}=nt(t,{showHidden:b}),{artifacts:L,loading:V,error:Fe,refresh:ne}=Qe({projectId:t,searchQuery:ye||void 0});a.useEffect(()=>{const n=()=>{v(window.innerWidth<=ct)};return n(),window.addEventListener("resize",n),()=>{window.removeEventListener("resize",n)}},[]),a.useEffect(()=>{M.current=!1,f("project"),j(null),k(!1),x(null),E(null),w(!1),H(!1),Z(new Map),B(null)},[t]),a.useEffect(()=>{M.current||Q||_||V||(C.length>0?f("project"):D.length>0?f("tasks"):L.length>0&&f("artifacts"),M.current=!0)},[L.length,V,D.length,Q,C.length,_]);const G=a.useMemo(()=>{const n=new Map;for(const l of D){const m=n.get(l.taskId)||[];n.set(l.taskId,[...m,l])}return Array.from(n.entries()).map(([l,m])=>{const N=[...m].sort((Ue,Oe)=>Oe.updatedAt.localeCompare(Ue.updatedAt));return{taskId:l,taskTitle:N[0]?.taskTitle,documents:N,latestUpdated:N[0]?.updatedAt??""}}).sort((l,m)=>m.latestUpdated.localeCompare(l.latestUpdated))},[D]),W=a.useMemo(()=>{const n=r.trim().toLowerCase();return n?C.filter(l=>{const m=l.path.toLowerCase(),N=l.name.toLowerCase();return m.includes(n)||N.includes(n)}):C},[C,r]);a.useEffect(()=>{if(!u)return;C.some(l=>l.path===u.path)||(j(null),x(null),E(null),w(!1))},[C,u]);const Ee=a.useCallback(n=>{p(n.target.value)},[]),Te=a.useCallback(()=>{p("")},[]),X=a.useCallback(n=>{f(n)},[]),Ae=a.useCallback(async n=>{try{const l=await ue(n,t);h(l)}catch{i(`Failed to open task ${n}`,"error")}},[t,h,i]),Le=a.useCallback(async n=>{try{const l=await ue(n,t);(d??h)(l)}catch{i(`Failed to open task ${n}`,"error")}},[t,d,h,i]),Pe=a.useCallback(async n=>{j(n),w(!0),E(null),x(null);const l=S.current+1;S.current=l;try{const m=await _e("project",n.path,t);if(S.current!==l)return;x(m.content)}catch(m){if(S.current!==l)return;const N=m instanceof Error?m.message:`Failed to open ${n.path}`;E(N),i(N,"error")}finally{S.current===l&&w(!1)}},[t,i]),Me=a.useCallback(()=>{j(null),x(null),E(null),w(!1)},[]),Re=a.useCallback(n=>{Z(l=>{const m=new Map(l),N=m.get(n)??!1;return m.set(n,!N),m})},[]),De=a.useCallback(n=>{q.current=document.activeElement instanceof HTMLElement?document.activeElement:null,B(n)},[]),$=a.useCallback(()=>{B(null),q.current?.focus(),q.current=null},[]);a.useEffect(()=>{if(!y)return;const n=document.body.style.overflow;document.body.style.overflow="hidden",ee.current?.focus();const l=m=>{m.key==="Escape"&&(m.preventDefault(),$())};return document.addEventListener("keydown",l),()=>{document.body.style.overflow=n,document.removeEventListener("keydown",l)}},[$,y]);const ze=a.useCallback(n=>{n.target===n.currentTarget&&$()},[$]),ce=c==="project"?Se:c==="tasks"?Ce:Fe,He=a.useCallback(async()=>{if(c==="project"){await ae();return}if(c==="tasks"){await se();return}await ne()},[c,ne,ae,se]),oe=c==="project"?W.length:c==="tasks"?D.length:L.length,$e=u&&o&&K?e.jsx(Ve,{selectedText:K.selectedText,anchorRect:K.anchorRect,filePath:u.path,onSubmit:o,onOpenChange:be}):null,re=c==="project"?s("documents.searchProjectFiles","Search project markdown files…"):c==="tasks"?s("documents.searchTaskDocuments","Search task documents…"):s("documents.searchArtifacts","Search artifacts…");return e.jsxs("div",{className:"documents-view",children:[e.jsxs("div",{className:"documents-view-header",children:[e.jsx(Ge,{icon:U,title:s("documents.title","Artifacts"),actions:e.jsx("span",{className:"documents-view-count",children:s("documents.resultCount","{{count}} result{{plural}}",{count:oe,plural:oe!==1?"s":""})})}),e.jsxs("div",{className:"documents-controls-row",children:[e.jsxs("div",{className:"documents-tab-bar",role:"tablist","aria-label":s("documents.sectionsLabel","Documents sections"),children:[e.jsxs("button",{className:`btn documents-tab${c==="project"?" active":""}`,role:"tab","aria-selected":c==="project","aria-label":s("documents.showProjectFiles","Show project markdown files"),onClick:()=>X("project"),children:[s("documents.projectFilesTab","Project Files"),e.jsx("span",{className:"documents-tab-count",children:C.length})]}),e.jsxs("button",{className:`btn documents-tab${c==="tasks"?" active":""}`,role:"tab","aria-selected":c==="tasks","aria-label":s("documents.showTaskDocuments","Show task documents"),onClick:()=>X("tasks"),children:[s("documents.taskDocumentsTab","Task Documents"),e.jsx("span",{className:"documents-tab-count",children:G.length})]}),e.jsxs("button",{className:`btn documents-tab${c==="artifacts"?" active":""}`,role:"tab","aria-selected":c==="artifacts","aria-label":s("documents.showArtifacts","Show artifacts"),onClick:()=>X("artifacts"),children:[s("documents.artifactsTab","Artifacts"),e.jsx("span",{className:"documents-tab-count",children:L.length})]})]}),c==="project"&&e.jsxs("button",{className:"btn btn-sm documents-hidden-toggle",onClick:()=>k(n=>!n),"aria-pressed":b,"aria-label":b?s("documents.hideHidden","Hide hidden project files"):s("documents.showHidden","Show hidden project files"),title:b?s("documents.hideHiddenFiles","Hide hidden files"):s("documents.showHiddenFiles","Show hidden files"),children:[b?e.jsx(We,{size:14}):e.jsx(Xe,{size:14}),b?s("documents.hideHiddenLabel","Hide Hidden"):s("documents.showHiddenLabel","Show Hidden")]}),e.jsxs("div",{className:"documents-search",children:[e.jsx(Ie,{size:16,className:"documents-search-icon"}),e.jsx("input",{type:"text",className:"documents-search-input",placeholder:re,value:r,onChange:Ee,"aria-label":re}),r&&e.jsx("button",{className:"documents-search-clear",onClick:Te,"aria-label":s("documents.clearSearch","Clear search"),children:e.jsx(me,{size:16})})]})]})]}),e.jsx("div",{className:"documents-view-content",children:ce?e.jsxs("div",{className:"documents-view-error",children:[e.jsx("p",{children:s("documents.failedToLoad","Failed to load {{type}}: {{error}}",{type:c==="project"?s("documents.projectFiles","project files"):c==="tasks"?s("documents.taskDocuments","task documents"):s("documents.artifacts","artifacts"),error:ce})}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>void He(),"aria-label":s("documents.retryLoading","Retry loading documents"),children:[e.jsx(Je,{size:16}),s("documents.retry","Retry")]})]}):c==="project"?_&&C.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:e.jsx(I,{label:s("documents.loadingProjectFiles","Loading project markdown files…")})})}):W.length===0?e.jsx("div",{className:"documents-view-empty",children:r.trim()?e.jsx("p",{children:s("documents.noMatchProject",'No project markdown files match "{{query}}".',{query:r.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(U,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:s("documents.noMarkdownFiles","No Markdown files found in this project.")})]})}):e.jsxs("div",{className:`documents-project-layout${T?" documents-project-layout--mobile":""}`,children:[(!T||!u)&&e.jsx("aside",{className:"documents-view-sidebar","aria-label":s("documents.projectMarkdownFilesLabel","Project markdown files"),children:e.jsx("ul",{className:"markdown-file-list",children:W.map(n=>{const l=u?.path===n.path;return e.jsx("li",{className:"markdown-file-list-item",children:e.jsxs("button",{className:`markdown-file-item${l?" markdown-file-item--selected":""}`,onClick:()=>void Pe(n),"aria-label":`Open ${n.path}`,"aria-current":l?"true":void 0,children:[e.jsx("span",{className:"markdown-file-item-name",children:n.name}),e.jsx("span",{className:"markdown-file-item-path",children:n.path}),e.jsxs("span",{className:"markdown-file-item-meta",children:[je(n.size)," · ",Y(n.mtime)]})]})},n.path)})})}),(!T||u)&&e.jsxs("section",{className:"documents-view-main","aria-label":s("documents.projectFilePreviewLabel","Project file content preview"),children:[T&&u&&e.jsxs("button",{className:"btn btn-sm documents-mobile-back",onClick:Me,"aria-label":s("documents.backToFilesList","Back to project files list"),children:[e.jsx(Ye,{size:14}),s("documents.backToFiles","Back to files")]}),u?e.jsxs("div",{className:"documents-content-viewer",children:[e.jsxs("div",{className:"documents-content-header",children:[e.jsx("p",{className:"documents-file-path-header",children:u.path}),e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>H(n=>!n),"aria-label":F?s("documents.switchToPlainText","Switch to plain text"):s("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":F,title:F?s("documents.switchToPlainText","Switch to plain text"):s("documents.switchToMarkdown","Switch to markdown"),children:F?s("documents.markdown","Markdown"):s("documents.plain","Plain")})]}),P?e.jsx("p",{className:"documents-content-state",children:e.jsx(I,{label:s("documents.loadingFileContent","Loading file content…")})}):z?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:z}):F?e.jsx("div",{ref:A,className:"documents-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(fe,{remarkPlugins:[pe],children:g??""})})}):e.jsx("pre",{ref:R,className:"document-card-content-text documents-content-viewer-text",children:g??""}),$e]}):e.jsx("div",{className:"documents-view-empty",children:e.jsx("p",{children:s("documents.selectFile","Select a Markdown file to view its content.")})})]})]}):c==="artifacts"?V&&L.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:s("documents.loadingArtifacts","Loading artifacts…")})}):L.length===0?e.jsx("div",{className:"documents-view-empty",children:r.trim()?e.jsx("p",{children:s("documents.noMatchArtifacts",'No artifacts match "{{query}}".',{query:r.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(U,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:s("documents.noArtifacts","No artifacts yet.")}),e.jsx("p",{className:"documents-view-empty-hint",children:s("documents.artifactsCreatedBy","Artifacts are created by agents, users, and system tools.")})]})}):e.jsx("div",{className:`documents-artifact-gallery${T?" documents-artifact-gallery--mobile":""}`,children:L.map(n=>e.jsx(lt,{artifact:n,projectId:t,onOpenTask:Le,onExpandMedia:De},n.id))}):Q&&D.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:e.jsx(I,{label:s("documents.loadingTaskDocuments","Loading task documents…")})})}):G.length===0?e.jsx("div",{className:"documents-view-empty",children:r.trim()?e.jsx("p",{children:s("documents.noMatchTask",'No task documents match "{{query}}".',{query:r.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(U,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:s("documents.noTaskDocuments","No task documents yet.")}),e.jsx("p",{className:"documents-view-empty-hint",children:s("documents.documentsCreatedIn","Documents are created in task detail tabs.")})]})}):e.jsx("div",{className:"documents-task-list-wrap",children:e.jsx("div",{className:"documents-view-list",children:G.map(({taskId:n,taskTitle:l,documents:m})=>e.jsx(rt,{taskId:n,taskTitle:l,documents:m,onOpenTask:Ae,renderMarkdownStates:ke,onToggleMarkdown:Re},n))})})}),y&&e.jsx("div",{className:"modal-overlay open documents-artifact-lightbox-overlay",role:"dialog","aria-modal":"true","aria-label":s("documents.lightboxLabel","Artifact media preview"),onClick:ze,children:e.jsxs("div",{className:"documents-artifact-lightbox",onClick:n=>n.stopPropagation(),children:[e.jsxs("div",{className:"documents-artifact-lightbox-header",children:[e.jsx("h3",{className:"documents-artifact-lightbox-title",children:y.title||s("documents.untitledArtifact","Untitled artifact")}),e.jsx("button",{ref:ee,className:"modal-close",onClick:$,"aria-label":s("documents.closeLightbox","Close artifact preview"),children:e.jsx(me,{size:20})})]}),e.jsx("div",{className:"documents-artifact-lightbox-media-frame",children:y.type==="image"?e.jsx("img",{className:"documents-artifact-lightbox-media",src:J(y.id,t),alt:y.title||s("documents.untitledArtifact","Untitled artifact")}):e.jsx("video",{className:"documents-artifact-lightbox-media",src:J(y.id,t),controls:!0,autoPlay:!0,"aria-label":s("documents.artifactVideoLabel","Video artifact: {{title}}",{title:y.title||s("documents.untitledArtifact","Untitled artifact")})})})]})})]})}export{pt as DocumentsView};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as l,j as e}from"./vendor-react-SZ_qB27O.js";import{ay as P,az as L,aA as $,aO as Q,aP as Y,aD as D,aQ as J,aR as Z,V as H,T as B,a3 as ee,R as se,al as ae,aj as te}from"./index-
|
|
1
|
+
import{r as l,j as e}from"./vendor-react-SZ_qB27O.js";import{ay as P,az as L,aA as $,aO as Q,aP as Y,aD as D,aQ as J,aR as Z,V as H,T as B,a3 as ee,R as se,al as ae,aj as te}from"./index-BjELA24x.js";import{u as le}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-reactflow-CnI7NMXG.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";const re=300,ne=15e3;function K(r){if(!r.trim())return;const s=Number(r);return Number.isFinite(s)?s:void 0}function w(...r){for(const s of r)if(Array.isArray(s))return s;return[]}function f(r){return typeof r=="object"&&r!==null?r:{}}function X(r){const s=f(r),m=f(s.taskSnapshot);return{id:String(s.id??s.evalId??""),runId:String(s.runId??s.batchId??""),taskId:String(s.taskId??m.taskId??""),taskTitle:String(m.title??s.taskTitle??s.title??"Untitled task"),createdAt:String(s.createdAt??s.timestamp??s.updatedAt??new Date(0).toISOString()),overallScore:typeof s.overallScore=="number"?s.overallScore:null,maxScore:typeof s.maxScore=="number"?s.maxScore:null,categoryScores:w(s.categoryScores,f(s.scores).categories)}}function ce(r){const s=f(r);return{...X(s),rationale:String(s.rationale??s.summary??""),evidence:w(s.evidence,f(s.details).evidence),followUps:w(s.followUps,f(s.recommendations).followUps)}}function ie(r){const s=r?.projectId,m=s??"",t=`${$.EVALS_RUNS_PREFIX}${m}`,h=`${$.EVALS_RESULTS_PREFIX}${m}`,p=P(t,{maxAgeMs:L}),v=P(h,{maxAgeMs:L}),S=l.useRef(Array.isArray(p)&&p.length>0||Array.isArray(v)&&v.length>0),[i,g]=l.useState({q:"",runId:"",scoreMin:"",scoreMax:""}),[N,k]=l.useState(()=>Array.isArray(p)?p:[]),[o,M]=l.useState(()=>Array.isArray(v)?v:[]),[u,R]=l.useState(null),[F,b]=l.useState(null),[a,d]=l.useState(0),[y,j]=l.useState(!S.current),[W,z]=l.useState(null),C=l.useRef(0),q=l.useRef(s),_=l.useRef(u);_.current=u;const I=l.useCallback(async()=>{const n=++C.current;S.current||j(!0),z(null);try{const[c,x]=await Promise.all([Q({q:i.q||void 0,runId:i.runId||void 0,scoreMin:K(i.scoreMin),scoreMax:K(i.scoreMax),limit:100,offset:0},s),Y(s)]);if(n!==C.current)return;const E=w(c.results,c.evals,c.items).map(X);M(E),D(h,E.length>500?E.slice(0,500):E,{maxBytes:5e5}),d(typeof c.count=="number"?c.count:E.length);const O=w(x.runs,x.items).map(U=>{const A=f(U),V=f(A.counts);return{id:String(A.id??""),createdAt:String(A.createdAt??""),completedAt:typeof A.completedAt=="string"?A.completedAt:void 0,status:String(A.status??"pending"),evaluatedTaskCount:typeof V.totalTasks=="number"?V.totalTasks:0}});k(O),D(t,O,{maxBytes:5e5}),S.current=!0,_.current&&!E.some(U=>U.id===_.current)&&(R(null),b(null))}catch(c){if(n!==C.current)return;z(c instanceof Error?c.message:"Failed to load evals")}finally{n===C.current&&j(!1)}},[i.q,i.runId,i.scoreMax,i.scoreMin,s,h,t]),T=l.useCallback(async n=>{const c=await J(n,s),x=c.result??c;b(ce(x))},[s]);l.useEffect(()=>{if(q.current===s)return;q.current=s;const n=P(t,{maxAgeMs:L}),c=P(h,{maxAgeMs:L}),x=Array.isArray(n)&&n.length>0||Array.isArray(c)&&c.length>0;k(Array.isArray(n)?n:[]),M(Array.isArray(c)?c:[]),j(!x),S.current=x},[s,h,t]),l.useEffect(()=>{const n=window.setTimeout(()=>{I()},re);return()=>window.clearTimeout(n)},[I]),l.useEffect(()=>{if(!u){b(null);return}T(u)},[T,u]),l.useEffect(()=>{const n=window.setInterval(()=>{I(),u&&T(u)},ne);return()=>window.clearInterval(n)},[T,I,u]);const G=l.useCallback(n=>{_.current=n,R(n)},[]);return{loading:y,error:W,results:o,count:a,runs:N,filters:i,setFilters:g,refresh:I,selectedEvalId:u,setSelectedEvalId:G,selectedEval:F}}function xe({projectId:r,onOpenSettings:s,onOpenTaskDetail:m}){const{t}=le("app"),{loading:h,error:p,results:v,runs:S,filters:i,setFilters:g,selectedEvalId:N,setSelectedEvalId:k,selectedEval:o,refresh:M}=ie({projectId:r}),[u,R]=l.useState(!0);l.useEffect(()=>{let a=!1;return Z(r).then(d=>{if(a)return;const y=d.evalSettings?.enabled;R(y??!1)}).catch(()=>{a||R(!1)}),()=>{a=!0}},[r]);const F=v.length>0,b=l.useMemo(()=>v.find(a=>a.id===N)??null,[v,N]);return u?e.jsxs("section",{className:"evals-view","data-testid":"evals-view",children:[e.jsx(H,{icon:B,title:t("evals.title","Evals")}),e.jsxs("div",{className:"evals-view__body",children:[e.jsxs("div",{className:"evals-list card",children:[e.jsxs("div",{className:"evals-toolbar",children:[e.jsx("input",{className:"input",placeholder:t("evals.searchPlaceholder","Search task or rationale"),value:i.q,onChange:a=>g(d=>({...d,q:a.target.value}))}),e.jsxs("select",{className:"select",value:i.runId,onChange:a=>g(d=>({...d,runId:a.target.value})),children:[e.jsx("option",{value:"",children:t("evals.allRuns","All runs")}),S.map(a=>e.jsx("option",{value:a.id,children:a.id},a.id))]}),e.jsx("input",{className:"input",placeholder:t("evals.minScorePlaceholder","Min score"),value:i.scoreMin,onChange:a=>g(d=>({...d,scoreMin:a.target.value}))}),e.jsx("input",{className:"input",placeholder:t("evals.maxScorePlaceholder","Max score"),value:i.scoreMax,onChange:a=>g(d=>({...d,scoreMax:a.target.value}))}),e.jsx("button",{className:"btn btn-icon",type:"button",onClick:()=>void M(),"aria-label":t("evals.refreshAria","Refresh evals"),children:e.jsx(se,{size:16})})]}),h&&e.jsx("p",{className:"evals-state","data-testid":"evals-loading",children:e.jsx(ae,{label:t("evals.loading","Loading evals…")})}),p&&e.jsx("p",{className:"evals-state evals-state--error",children:p}),!h&&!p&&!F&&e.jsx("p",{className:"evals-state",children:t("evals.empty","No evals yet. Scheduled evals review tasks completed since the last run.")}),e.jsx("ul",{className:"evals-results","data-testid":"evals-results",children:v.map(a=>e.jsx("li",{children:e.jsxs("button",{className:`evals-result ${a.id===N?"evals-result--active":""}`,type:"button",onClick:()=>k(a.id),children:[e.jsx("span",{className:"evals-result-title",children:a.taskTitle}),e.jsxs("span",{className:"evals-result-meta",children:[a.taskId," · ",a.runId," · ",a.overallScore??t("evals.naPlaceholder","n/a")]})]})},a.id))})]}),e.jsxs("div",{className:"evals-detail card","data-testid":"evals-detail",children:[!o&&e.jsx("p",{className:"evals-state",children:t("evals.selectPrompt","Select an evaluation to inspect scores, rationale, and evidence.")}),o&&e.jsxs(e.Fragment,{children:[e.jsx("h3",{className:"evals-detail-title",children:b?.taskTitle??o.taskTitle}),e.jsxs("p",{className:"evals-result-meta",children:[o.taskId," · ",o.runId]}),e.jsx("p",{className:"evals-score",children:t("evals.overallScore","Overall score: {{score}}",{score:o.overallScore??t("evals.naPlaceholder","n/a")})}),e.jsx("ul",{className:"evals-categories",children:o.categoryScores.map(a=>e.jsxs("li",{children:[a.category,": ",a.finalScore]},a.category))}),e.jsx("p",{className:"evals-rationale",children:o.rationale||t("evals.noRationale","No rationale recorded.")}),e.jsxs("div",{children:[e.jsx("h4",{children:t("evals.evidenceHeading","Evidence")}),e.jsx("ul",{className:"evals-links",children:o.evidence.map((a,d)=>{const y=typeof a.metadata?.taskId=="string"?a.metadata.taskId:void 0,j=typeof a.metadata?.url=="string"?a.metadata.url:void 0;return e.jsx("li",{children:y?e.jsx("button",{type:"button",className:"btn",onClick:()=>m?.(y),children:a.ref}):j?e.jsxs("a",{href:j,target:"_blank",rel:"noreferrer",className:"evals-external-link",children:[a.ref,e.jsx(te,{size:14})]}):e.jsx("span",{children:a.ref})},`${a.ref}-${d}`)})})]}),e.jsxs("div",{children:[e.jsx("h4",{children:t("evals.suggestedFollowupsHeading","Suggested follow-up tasks")}),e.jsxs("ul",{className:"evals-follow-ups",children:[o.followUps.length===0&&e.jsx("li",{children:t("evals.noFollowups","None")}),o.followUps.map(a=>e.jsxs("li",{children:[e.jsx("strong",{children:a.title}),e.jsx("p",{children:a.rationale})]},a.suggestionId))]})]})]})]})]})]}):e.jsxs("section",{className:"evals-view","data-testid":"evals-disabled",children:[e.jsx(H,{icon:B,title:t("evals.title","Evals")}),e.jsxs("div",{className:"evals-view__empty",children:[e.jsx("h2",{className:"evals-title",children:t("evals.disabledTitle","Scheduled evals are disabled")}),e.jsx("p",{className:"evals-empty-copy",children:t("evals.enablePrompt","Enable Scheduled Evals to review scored tasks, evidence, and follow-up recommendations.")}),e.jsxs("button",{className:"btn btn-primary",type:"button",onClick:()=>s?.("scheduled-evals"),children:[e.jsx(ee,{size:16}),t("evals.openSettings","Open Scheduled Evals Settings")]})]})]})}export{xe as EvalsView};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as s,j as n}from"./vendor-react-SZ_qB27O.js";import{A as F,K as U,N as V,O as W,Q as G,U as K}from"./index-
|
|
1
|
+
import{r as s,j as n}from"./vendor-react-SZ_qB27O.js";import{A as F,K as U,N as V,O as W,Q as G,U as K}from"./index-BjELA24x.js";import{u as z}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-reactflow-CnI7NMXG.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";function en({isOpen:l,onClose:R,onUseDraft:M,projectId:x,existingAgents:P,mode:_="create",existingAgentConfig:L}){const{t:e}=z("app"),[m,d]=s.useState("initial"),[f,S]=s.useState(""),[c,k]=s.useState(null),[C,I]=s.useState(""),[w,A]=s.useState("answer"),[v,p]=s.useState(""),[t,T]=s.useState(null),[H,g]=s.useState(null),[E,y]=s.useState([]),b=_==="edit",o=s.useRef(l),N=s.useCallback(()=>{d("initial"),S(""),k(null),I(""),A("answer"),p(""),T(null),g(null),y([])},[]),Q=s.useMemo(()=>F.map(a=>({id:a.id,label:a.name,description:a.description})),[]);s.useEffect(()=>{if(o.current=l,!c)return;const a=U(c,x,{onThinking:i=>{o.current&&y($=>{const h=[...$],j=h[h.length-1];return j&&!j.question?(h[h.length-1]={...j,thinkingOutput:`${j.thinkingOutput??""}${i}`},h):[...h,{response:{},thinkingOutput:i}]})},onQuestion:i=>{o.current&&(I(i.question),A(i.id),d("question"))},onSummary:i=>{o.current&&(T(i),d("summary"))},onError:i=>{o.current&&(g(i),d("error"))}});return()=>{o.current=!1,a.close()}},[l,c,x]);const u=async()=>{o.current=!1;try{c&&await W(c,x)}catch{}finally{N(),R()}};if(s.useEffect(()=>{o.current=l,l||N()},[l,N]),!l)return null;const r=a=>a==null||a===""?n.jsx("em",{className:"experimental-agent-onboarding-modal__summary-empty",children:e("agents.onboarding.notSet","Not set")}):n.jsx("span",{children:a}),q=async()=>{d("loading"),g(null);try{const a=await G(f,{mode:_,existingAgentConfig:L,existingAgents:P.map(i=>({id:i.id,name:i.name,role:i.role})),templates:Q},x);if(!o.current)return;k(a.sessionId)}catch(a){if(!o.current)return;g(a.message),d("error")}},D=async()=>{if(c){d("loading"),g(null);try{const a={[w]:v};if(y(i=>[...i,{question:{id:w,type:"text",question:C},response:a}]),await K(c,a,x),!o.current)return;p("")}catch(a){if(!o.current)return;g(a.message),d("error")}}},O=async()=>{t&&(M(t),await u())};return n.jsx("div",{className:"modal-overlay open",role:"presentation",children:n.jsxs("div",{className:"modal modal-lg experimental-agent-onboarding-modal",role:"dialog","aria-modal":"true","aria-label":e("agents.onboarding.dialogLabel","AI Interview"),children:[n.jsxs("div",{className:"modal-header",children:[n.jsx("h3",{children:e("agents.onboarding.title","AI Interview")}),n.jsx("button",{className:"modal-close",onClick:()=>void u(),"aria-label":e("common.closeAriaLabel","Close"),children:"×"})]}),E.length>0&&n.jsx(V,{entries:E}),m==="initial"&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{htmlFor:"agent-onboarding-intent",children:b?e("agents.onboarding.intentLabelEdit","What should this agent change or improve?"):e("agents.onboarding.intentLabelCreate","What should this new agent own?")}),n.jsx("textarea",{id:"agent-onboarding-intent",className:"input experimental-agent-onboarding-modal__textarea",value:f,onChange:a=>S(a.target.value)}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",disabled:!f.trim(),onClick:()=>void q(),children:b?e("agents.onboarding.startInterview","Start interview"):e("agents.onboarding.startOnboarding","Start onboarding")})]})]}),(m==="loading"||m==="question")&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{htmlFor:"agent-onboarding-answer",children:C||e("agents.onboarding.thinking","Thinking...")}),n.jsx("textarea",{id:"agent-onboarding-answer",className:"input experimental-agent-onboarding-modal__textarea",value:v,onChange:a=>p(a.target.value)}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",disabled:m==="loading"||!v.trim(),onClick:()=>void D(),children:e("agents.onboarding.continue","Continue")})]})]}),m==="summary"&&t&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{children:b?e("agents.onboarding.updatedDraftReady","Updated draft ready for review"):e("agents.onboarding.draftReady","Draft ready for review")}),n.jsx("p",{className:"experimental-agent-onboarding-modal__summary-intro",children:e("agents.onboarding.draftIntro","Review this generated draft. Nothing is applied until you confirm.")}),n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary card",children:[n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionIdentity","Identity")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldName","Name")}),n.jsx("dd",{children:r(t.name)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldRole","Role")}),n.jsx("dd",{children:r(t.role)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldTitle","Title")}),n.jsx("dd",{children:r(t.title)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldIcon","Icon")}),n.jsx("dd",{children:r(t.icon)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldReportsTo","Reports To")}),n.jsx("dd",{children:r(t.reportsTo)})]})]})]}),n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionConfiguration","Configuration")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldInlineInstructions","Inline Instructions")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.instructionsText)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldSoul","Soul")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.soul)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldAgentMemory","Agent Memory")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.memory)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldSkills","Skills")}),n.jsx("dd",{children:r(t.skills?.join(", "))})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldThinkingLevel","Thinking Level")}),n.jsx("dd",{children:r(t.thinkingLevel)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldMaxTurns","Max Turns")}),n.jsx("dd",{children:r(t.maxTurns)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldTemplate","Template")}),n.jsx("dd",{children:r(t.templateId)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldPatternAgent","Pattern Agent")}),n.jsx("dd",{children:r(t.patternAgentId)})]})]})]}),(t.heartbeatProcedurePath||t.heartbeatIntervalMs||t.heartbeatEnabled!==void 0||t.modelHint||t.runtimeHint)&&n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionRuntimeHints","Runtime Hints")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatPath","Heartbeat Procedure Path")}),n.jsx("dd",{children:r(t.heartbeatProcedurePath)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatInterval","Heartbeat Interval")}),n.jsx("dd",{children:r(t.heartbeatIntervalMs?`${t.heartbeatIntervalMs}ms`:void 0)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatEnabled","Heartbeat Enabled")}),n.jsx("dd",{children:r(t.heartbeatEnabled===void 0?void 0:t.heartbeatEnabled?e("agents.onboarding.yes","yes"):e("agents.onboarding.no","no"))})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldModelHint","Model Hint")}),n.jsx("dd",{children:r(t.modelHint)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldRuntimeHint","Runtime Hint")}),n.jsx("dd",{children:r(t.runtimeHint)})]})]})]}),t.rationale&&n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionRationale","Rationale")}),n.jsx("p",{className:"experimental-agent-onboarding-modal__summary-block",children:t.rationale})]})]}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",onClick:()=>void O(),children:b?e("agents.onboarding.applyDraftSettings","Apply draft to settings form"):e("agents.onboarding.applyDraftAgent","Apply draft to agent form")})]})]}),m==="error"&&H&&n.jsxs("div",{className:"form-group",children:[n.jsx("div",{className:"form-error",children:H}),n.jsx("div",{className:"modal-actions",children:n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.close","Close")})})]})]})})}export{en as ExperimentalAgentOnboardingModal};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as n,j as t}from"./vendor-react-SZ_qB27O.js";import{V as js,T as ws,P as Ns,S as Es,s as Ss,v as $s,w as Ms,X as Cs,x as Ts,y as As}from"./index-
|
|
1
|
+
import{r as n,j as t}from"./vendor-react-SZ_qB27O.js";import{V as js,T as ws,P as Ns,S as Es,s as Ss,v as $s,w as Ms,X as Cs,x as Ts,y as As}from"./index-BjELA24x.js";import{u as Gs}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-reactflow-CnI7NMXG.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";const Ls=5,Ds=3,Ps=280;function h(r,m){if(!m)return r;const d=r.includes("?")?"&":"?";return`${r}${d}projectId=${encodeURIComponent(m)}`}function is(r){return!!(r&&typeof r=="object"&&"code"in r&&r.code==="ACTIVE_GOAL_LIMIT_EXCEEDED")}function qs({initialGoals:r,anchorGoalId:m,projectId:d,onNavigateToMission:as}){const{t:a}=Gs("app"),[c,k]=n.useState(()=>r??[]),[ns,j]=n.useState(null),p=n.useRef(null),[w,L]=n.useState(r===void 0),[D,l]=n.useState(null),[os,P]=n.useState(!1),[y,F]=n.useState(""),[U,N]=n.useState(""),[R,u]=n.useState(null),[O,_]=n.useState(!1),[v,E]=n.useState(!1),[S,V]=n.useState(null),[q,$]=n.useState(""),[B,M]=n.useState(""),[H,f]=n.useState(null),[I,W]=n.useState(!1),[ls,rs]=n.useState(()=>new Set),[ds,cs]=n.useState([]),[x,C]=n.useState({}),[T,z]=n.useState({}),[A,K]=n.useState(null),[us,X]=n.useState(null);n.useEffect(()=>{if(r!==void 0)return;let s=!0;return(async()=>{try{L(!0),l(null);const i=await fetch(h("/api/goals",d));if(!i.ok)throw new Error(`Failed to load goals (${i.status})`);const o=await i.json();if(!s)return;k(Array.isArray(o.goals)?o.goals:[])}catch{if(!s)return;l(a("goals.loadError","Unable to load goals right now. Please try again."))}finally{s&&L(!1)}})(),()=>{s=!1}},[r,d]),n.useEffect(()=>{let s=!0;return(async()=>{try{const i=await fetch(h("/api/missions",d));if(!i.ok)throw new Error(`Failed to load missions (${i.status})`);const o=await i.json(),g=Array.isArray(o)?o:Array.isArray(o.missions)?o.missions:[];s&&cs(g.map(b=>({id:b.id,title:b.title,status:b.status})))}catch{s&&l(a("goals.missionsLoadError","Unable to load missions right now. Please try again."))}})(),()=>{s=!1}},[d,a]);const J=async s=>{const e=await fetch(h(`/api/goals/${encodeURIComponent(s)}/missions`,d));if(!e.ok)throw new Error(`Failed to load linked missions (${e.status})`);const i=await e.json();return Array.isArray(i.missions)?i.missions:[]};n.useEffect(()=>{let s=!0;return(async()=>{if(c.length===0){C({});return}try{const i=await Promise.all(c.map(async o=>[o.id,await J(o.id)]));s&&C(Object.fromEntries(i))}catch{s&&l(a("goals.linkedMissionsLoadError","Unable to load linked missions right now. Please try again."))}})(),()=>{s=!1}},[c,a]);const G=n.useMemo(()=>c.filter(s=>s.status==="active").length,[c]),gs=G>=Ds&&G<=Ls;n.useEffect(()=>{if(!m){j(null);return}const s=document.getElementById(`goal-card-${m}`);if(s)return j(m),typeof s.scrollIntoView=="function"&&s.scrollIntoView({behavior:"smooth",block:"center"}),p.current&&clearTimeout(p.current),p.current=setTimeout(()=>{j(e=>e===m?null:e),p.current=null},1600),()=>{p.current&&(clearTimeout(p.current),p.current=null)}},[m,c]);function ms(){l(null),u(null),P(!0)}function hs(s){V(s.id),$(s.title),M(s.description??""),f(null)}function Q(){V(null),$(""),M(""),f(null)}function Y(){P(!1),F(""),N(""),u(null),E(!1)}async function ps(){const s=y.trim();if(!s){u(a("goals.titleRequired","Title is required."));return}try{E(!0),u(null);const e=await Ts(s,d);N(e)}catch(e){u(As(e))}finally{E(!1)}}async function fs(){const s=y.trim();if(!s){u(a("goals.titleRequired","Title is required."));return}try{_(!0),u(null),l(null);const e=await fetch(h("/api/goals",d),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({title:s,description:U})});if(e.ok){const o=await e.json();k(g=>[...g,o]),Y();return}let i=null;try{i=await e.json()}catch{i=null}if(e.status===409&&is(i)){l(a("goals.capError","Cannot activate more than 5 goals. Resolve an active goal before activating another."));return}u(a("goals.createError","Unable to create goal right now. Please try again."))}catch{u(a("goals.createError","Unable to create goal right now. Please try again."))}finally{_(!1)}}async function bs(){if(!S)return;const s=q.trim();if(!s){f(a("goals.titleRequired","Title is required."));return}try{W(!0),f(null);const e=await fetch(h(`/api/goals/${S}`,d),{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({title:s,description:B})});if(!e.ok)throw new Error(`Failed to update goal (${e.status})`);const i=await e.json();k(o=>o.map(g=>g.id===i.id?i:g)),Q()}catch{f(a("goals.saveError","Unable to save goal right now. Please try again."))}finally{W(!1)}}function ks(s){return s.length>Ps||s.includes(`
|
|
2
2
|
`)}function ys(s){rs(e=>{const i=new Set(e);return i.has(s)?i.delete(s):i.add(s),i})}function Z(s){const e=new Set((x[s]??[]).map(i=>i.id));return ds.filter(i=>!e.has(i.id))}async function ss(s){const e=await J(s);C(i=>({...i,[s]:e})),z(i=>({...i,[s]:""}))}async function vs(s){const e=T[s];if(e)try{K(s),l(null);const i=await fetch(h(`/api/missions/${encodeURIComponent(e)}/goals/${encodeURIComponent(s)}`,d),{method:"POST"});if(!i.ok)throw new Error(`Failed to link mission (${i.status})`);await ss(s)}catch{l(a("goals.linkMissionError","Unable to link mission right now. Please try again."))}finally{K(null)}}async function xs(s,e){try{X(`${s}:${e}`),l(null);const i=await fetch(h(`/api/missions/${encodeURIComponent(e)}/goals/${encodeURIComponent(s)}`,d),{method:"DELETE"});if(!i.ok)throw new Error(`Failed to unlink mission (${i.status})`);await ss(s)}catch{l(a("goals.unlinkMissionError","Unable to unlink mission right now. Please try again."))}finally{X(null)}}async function ts(s){const e=s.status==="active"?`/api/goals/${s.id}/archive`:`/api/goals/${s.id}/unarchive`;try{l(null);const i=await fetch(h(e,d),{method:"POST"});if(i.ok){const g=await i.json();k(b=>b.map(es=>es.id===g.id?g:es));return}let o=null;try{o=await i.json()}catch{o=null}if(i.status===409&&is(o)){l(a("goals.capError","Cannot activate more than 5 goals. Resolve an active goal before activating another."));return}l(a("goals.updateError","Unable to update goal status right now. Please try again."))}catch{l(a("goals.updateError","Unable to update goal status right now. Please try again."))}}return t.jsxs("section",{className:"goals-view","data-testid":"goals-view",children:[t.jsx(js,{icon:ws,title:a("goals.title","Goals"),actions:t.jsxs(t.Fragment,{children:[t.jsx("p",{className:"goals-count","data-testid":"goals-active-count",children:a("goals.activeCount","{{count}} active goals",{count:G})}),t.jsxs("button",{type:"button",className:"btn btn-primary goals-add-button",onClick:ms,"data-testid":"goals-add-button",children:[t.jsx(Ns,{size:18,"aria-hidden":"true"}),a("goals.addGoal","Add Goal")]})]})}),t.jsxs("div",{className:"goals-view__content",children:[os?t.jsxs("div",{className:"card goals-form","data-testid":"goals-form",children:[t.jsx("label",{className:"goals-form-label",htmlFor:"goals-form-title",children:a("goals.labelTitle","Title")}),t.jsx("input",{id:"goals-form-title",className:"input",type:"text",value:y,maxLength:200,onChange:s=>F(s.target.value),"data-testid":"goals-form-title"}),t.jsxs("div",{className:"goals-form-label-row",children:[t.jsx("label",{className:"goals-form-label",htmlFor:"goals-form-description",children:a("goals.labelDescription","Description")}),t.jsxs("button",{type:"button",className:"btn goals-form-draft-button",onClick:()=>void ps(),disabled:!y.trim()||v,"data-testid":"goals-form-draft-ai",children:[t.jsx(Es,{"aria-hidden":"true"}),v?a("goals.drafting","Drafting…"):a("goals.draftWithAi","Draft with AI")]})]}),t.jsx("textarea",{id:"goals-form-description",className:"input",value:U,maxLength:5e3,onChange:s=>N(s.target.value),"data-testid":"goals-form-description"}),R?t.jsx("p",{className:"form-error goals-error",role:"alert",children:R}):null,t.jsxs("div",{className:"goals-form-actions",children:[t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void fs(),disabled:O||v,"data-testid":"goals-form-submit",children:a("actions.save","Save")}),t.jsx("button",{type:"button",className:"btn",onClick:Y,disabled:O||v,"data-testid":"goals-form-cancel",children:a("actions.cancel","Cancel")})]})]}):null,gs?t.jsx("p",{className:"goals-warning",role:"status",children:a("goals.capWarning","Approaching the 5-active goal cap. Keep active goals focused.")}):null,D?t.jsx("p",{className:"form-error goals-error",role:"alert","data-testid":"goals-error",children:D}):null,w?t.jsx("p",{className:"goals-loading",role:"status","data-testid":"goals-loading",children:a("goals.loading","Loading goals…")}):null,!w&&c.length===0?t.jsx("div",{className:"goals-empty card","data-testid":"goals-empty-state",children:a("goals.emptyState","No goals yet. Add one to begin tracking strategic outcomes.")}):null,!w&&c.length>0?t.jsx("div",{className:"goals-list","data-testid":"goals-list",children:c.map(s=>t.jsxs("article",{id:`goal-card-${s.id}`,className:`card goals-card ${s.status==="archived"?"goals-card-archived":""} ${ns===s.id?"goals-card--anchored":""}`.trim(),"data-testid":`goal-card-${s.id}`,children:[S===s.id?t.jsxs("div",{className:"goals-card-main goals-card-edit",children:[t.jsx("label",{className:"goals-form-label",htmlFor:`goal-edit-title-${s.id}`,children:a("goals.labelTitle","Title")}),t.jsx("input",{id:`goal-edit-title-${s.id}`,className:"input",type:"text",value:q,maxLength:200,onChange:e=>$(e.target.value),"data-testid":`goal-edit-title-${s.id}`}),t.jsx("label",{className:"goals-form-label",htmlFor:`goal-edit-description-${s.id}`,children:a("goals.labelDescription","Description")}),t.jsx("textarea",{id:`goal-edit-description-${s.id}`,className:"input",value:B,maxLength:5e3,onChange:e=>M(e.target.value),"data-testid":`goal-edit-description-${s.id}`}),H?t.jsx("p",{className:"form-error goals-error",role:"alert",children:H}):null,t.jsxs("div",{className:"goals-card-actions",children:[t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void bs(),disabled:I,"data-testid":`goal-edit-save-${s.id}`,children:a("actions.save","Save")}),t.jsx("button",{type:"button",className:"btn",onClick:Q,disabled:I,"data-testid":`goal-edit-cancel-${s.id}`,children:a("actions.cancel","Cancel")})]})]}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"goals-card-main",children:[t.jsx("h3",{className:"goals-card-title",children:s.title}),s.description?(()=>{const e=ks(s.description),i=ls.has(s.id);return t.jsxs(t.Fragment,{children:[t.jsx("div",{className:`markdown-body goals-card-description ${e&&!i?"goals-card-description-collapsed":""}`.trim(),children:t.jsx(Ss,{remarkPlugins:[$s],children:s.description})}),e?t.jsx("button",{type:"button",className:"btn goals-card-description-toggle","aria-expanded":i,"data-testid":`goal-description-toggle-${s.id}`,onClick:()=>ys(s.id),children:i?a("actions.showLess","Show less"):a("actions.showMore","Show more")}):null]})})():null,t.jsxs("p",{className:"goals-card-status",children:[a("goals.status","Status"),": ",s.status]})]}),t.jsxs("div",{className:"goals-card-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:()=>hs(s),"data-testid":`goal-edit-${s.id}`,children:a("actions.edit","Edit")}),s.status==="active"?t.jsx("button",{type:"button",className:"btn goals-activate-button",onClick:()=>void ts(s),"data-testid":`goal-archive-${s.id}`,children:a("goals.archive","Archive")}):t.jsx("button",{type:"button",className:"btn goals-activate-button",onClick:()=>void ts(s),"data-testid":`goal-unarchive-${s.id}`,children:a("goals.unarchive","Unarchive")})]})]}),t.jsxs("section",{className:"goals-linked-missions","aria-label":a("goals.linkedMissions","Linked missions"),children:[t.jsxs("div",{className:"goals-linked-missions-header",children:[t.jsx("h4",{className:"goals-linked-missions-title",children:a("goals.linkedMissionsTitle","Linked Missions")}),t.jsx("span",{className:"goals-linked-missions-count",children:a("goals.linkedMissionsCount",{count:x[s.id]?.length??0,defaultValue_one:"{{count}} linked",defaultValue_other:"{{count}} linked"})})]}),t.jsxs("div",{className:"goals-linked-missions-controls",children:[t.jsxs("select",{className:"input goals-linked-missions-picker","data-testid":`goal-mission-picker-${s.id}`,value:T[s.id]??"",onChange:e=>z(i=>({...i,[s.id]:e.target.value})),"aria-label":a("goals.missionPicker","Mission to link"),disabled:A===s.id||Z(s.id).length===0,children:[t.jsx("option",{value:"",children:a("goals.selectMission","Select a mission")}),Z(s.id).map(e=>t.jsx("option",{value:e.id,children:e.title},e.id))]}),t.jsxs("button",{type:"button",className:"btn btn-primary goals-linked-missions-link-button","data-testid":`goal-mission-link-button-${s.id}`,disabled:!T[s.id]||A===s.id,onClick:()=>void vs(s.id),children:[t.jsx(Ms,{size:16,"aria-hidden":"true"}),A===s.id?a("goals.linkingMission","Linking…"):a("goals.linkMission","Link mission")]})]}),(x[s.id]?.length??0)>0?t.jsx("div",{className:"goals-linked-missions-list",children:(x[s.id]??[]).map(e=>t.jsxs("div",{className:"goals-linked-mission-chip","data-testid":`goal-linked-mission-chip-${e.id}`,children:[t.jsx("button",{type:"button",className:"btn goals-linked-mission-link",onClick:()=>as?.(e.id),children:e.title}),t.jsx("span",{className:"goals-linked-mission-status",children:e.status}),t.jsx("button",{type:"button",className:"btn-icon goals-linked-mission-unlink","data-testid":`goal-linked-mission-unlink-${e.id}`,"aria-label":a("goals.unlinkMission","Unlink mission"),disabled:us===`${s.id}:${e.id}`,onClick:()=>void xs(s.id,e.id),children:t.jsx(Cs,{size:16,"aria-hidden":"true"})})]},e.id))}):t.jsx("p",{className:"goals-linked-missions-empty",children:a("goals.noLinkedMissions","No linked missions.")})]})]},s.id))}):null]})]})}export{qs as GoalsView};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as c,j as e}from"./vendor-react-SZ_qB27O.js";import{c as Le,ay as ce,az as Se,aA as ke,bB as Ce,bC as Ke,aD as je,bD as Ve,bE as We,bF as Ye,bG as Qe,bH as Je,bI as Ze,bJ as Me,bK as es,bL as ss,bM as Ie,V as ts,S as A,bN as is,X as Ae,bO as me,R as N,a3 as ns,bP as as,h as ze,q as le,bQ as Ne,bt as rs,P as _e,aj as cs,b9 as De,bR as ls}from"./index-
|
|
1
|
+
import{r as c,j as e}from"./vendor-react-SZ_qB27O.js";import{c as Le,ay as ce,az as Se,aA as ke,bB as Ce,bC as Ke,aD as je,bD as Ve,bE as We,bF as Ye,bG as Qe,bH as Je,bI as Ze,bJ as Me,bK as es,bL as ss,bM as Ie,V as ts,S as A,bN as is,X as Ae,bO as me,R as N,a3 as ns,bP as as,h as ze,q as le,bQ as Ne,bt as rs,P as _e,aj as cs,b9 as De,bR as ls}from"./index-BjELA24x.js";import{u as Pe}from"./vendor-i18n-GF3RlKbq.js";import{U as Ee}from"./users-C-e-99Vp.js";import"./vendor-reactflow-CnI7NMXG.js";import"./vendor-xterm-BNq00GSj.js";import"./vendor-codemirror-jBKmHyH0.js";/**
|
|
2
2
|
* @license lucide-react v1.7.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|