@nextclaw/ui 0.26.0 → 0.26.2
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/CHANGELOG.md +40 -0
- package/dist/.vite/manifest.json +1143 -1133
- package/dist/assets/{abnfDiagram-VRR7QNED-Bjrmb5-o.js → abnfDiagram-VRR7QNED-Dcw10Yt1.js} +1 -1
- package/dist/assets/{account-panel-C1S3xtUB.js → account-panel-ZM2qzKF4.js} +1 -1
- package/dist/assets/{aiden0z-pptx-renderer.es-DO4DCX3e.js → aiden0z-pptx-renderer.es--oNqetPA.js} +1 -1
- package/dist/assets/api-Cjq-o1VN.js +20 -0
- package/dist/assets/app-presenter-provider-C02YPoMr.js +124 -0
- package/dist/assets/{appearance-settings-page-BljTr6nB.js → appearance-settings-page-B4zouKzg.js} +1 -1
- package/dist/assets/{arc-g4XaP3S4.js → arc-DBRedCax.js} +1 -1
- package/dist/assets/architecture-TIHT7OUA-CvnC-LeA.js +1 -0
- package/dist/assets/{architectureDiagram-ZJ3FMSHR-CAP7YDux.js → architectureDiagram-ZJ3FMSHR-Dufhtuv-.js} +1 -1
- package/dist/assets/{blockDiagram-677ZJIJ3-DhaP0zUG.js → blockDiagram-677ZJIJ3-BUk0vtJ7.js} +1 -1
- package/dist/assets/{book-open-vxpV2eSM.js → book-open-AteA89HX.js} +1 -1
- package/dist/assets/{c4Diagram-LMCZKHZV-DHCQJJkD.js → c4Diagram-LMCZKHZV-CxDcVE9p.js} +1 -1
- package/dist/assets/{card-D9NYhSdf.js → card-BLXvBstA.js} +1 -1
- package/dist/assets/channel-CpMstUPF.js +1 -0
- package/dist/assets/{channels-list-page-BiHA1zZd.js → channels-list-page-fj8kMo-T.js} +1 -1
- package/dist/assets/chunk-2Q5K7J3B-Djp3VF0s.js +1 -0
- package/dist/assets/{chunk-32BRIVSS-BcQlxl4v.js → chunk-32BRIVSS-DSF3KElA.js} +1 -1
- package/dist/assets/{chunk-52WLFC77-ClPpG-2S.js → chunk-52WLFC77-Costxzr3.js} +1 -1
- package/dist/assets/{chunk-5FCAYU7R-B_qmYOdX.js → chunk-5FCAYU7R-rhqzGGZo.js} +1 -1
- package/dist/assets/{chunk-5HE753X5-DTO-V56q.js → chunk-5HE753X5-BsEsmIao.js} +1 -1
- package/dist/assets/{chunk-5JV3BV7I-CU1SOaaG.js → chunk-5JV3BV7I-Dqw_DCoN.js} +1 -1
- package/dist/assets/{chunk-5TONJI2A-CzSDkWNa.js → chunk-5TONJI2A-Cft82fp8.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-ChkfqIRE.js → chunk-5VM5RSS4-DqNHn9Dl.js} +1 -1
- package/dist/assets/{chunk-7BUUIJ7U-Du3Ozi62.js → chunk-7BUUIJ7U-A5SBEMYY.js} +1 -1
- package/dist/assets/{chunk-BIQX33UG-C-HVafHB.js → chunk-BIQX33UG-1Ng3mTrH.js} +1 -1
- package/dist/assets/{chunk-C7G6YPKG-BSjZ86D0.js → chunk-C7G6YPKG-DRJEy8ZI.js} +1 -1
- package/dist/assets/{chunk-CQNSW5MT-1D1W2lF6.js → chunk-CQNSW5MT-Bydv_J3J.js} +1 -1
- package/dist/assets/{chunk-CYSBUYHQ-ISpyj_lK.js → chunk-CYSBUYHQ-HkMIg12u.js} +1 -1
- package/dist/assets/{chunk-EMLP6XTP-Cp8iUBt2.js → chunk-EMLP6XTP-C5ndDvm3.js} +1 -1
- package/dist/assets/{chunk-EX3LRPZG-BN5RzF5j.js → chunk-EX3LRPZG-DzeloZRo.js} +1 -1
- package/dist/assets/{chunk-FWX5IMBZ-DecJDW4r.js → chunk-FWX5IMBZ-n_2_CLTQ.js} +2 -2
- package/dist/assets/{chunk-HOUHSVGY-BE_XNgGk.js → chunk-HOUHSVGY-kx_slvu3.js} +1 -1
- package/dist/assets/{chunk-ICXQ74PX-BFOKMkWV.js → chunk-ICXQ74PX-sQLMURqL.js} +1 -1
- package/dist/assets/{chunk-JG7HCLWE-DL-pl8VB.js → chunk-JG7HCLWE-CMUn5Elc.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-B-bcwfmh.js → chunk-JWPE2WC7-Cra3s-Uk.js} +1 -1
- package/dist/assets/{chunk-MOJQB5TN-BC0taFro.js → chunk-MOJQB5TN-umcrg5Bi.js} +1 -1
- package/dist/assets/{chunk-MOZMSUNE-RrhfU6MO.js → chunk-MOZMSUNE-BnljD1ig.js} +1 -1
- package/dist/assets/{chunk-OGEWGWER-TuI7SR7i.js → chunk-OGEWGWER-BXx5pQjU.js} +1 -1
- package/dist/assets/{chunk-OSBZ3O6U-C5jMBKlU.js → chunk-OSBZ3O6U-D-1qfdWu.js} +1 -1
- package/dist/assets/{chunk-PUDLZKDR-C5lMBn0K.js → chunk-PUDLZKDR-DLzX78LC.js} +1 -1
- package/dist/assets/{chunk-Q4XR5HBZ-B-kzUbwT.js → chunk-Q4XR5HBZ-DTK-rtW6.js} +1 -1
- package/dist/assets/{chunk-QBLGF6JB-CRb_WAEj.js → chunk-QBLGF6JB-CsFeIGfr.js} +1 -1
- package/dist/assets/{chunk-R7FJI6CG-De6Y7ozO.js → chunk-R7FJI6CG-4xNYUeng.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-Igv92q8k.js → chunk-RYQCIY6F-DJiHiTE5.js} +1 -1
- package/dist/assets/{chunk-U6XO7XAA-bCjRshkT.js → chunk-U6XO7XAA-BVYkauHz.js} +1 -1
- package/dist/assets/{chunk-V7JOEXUC-0J1s_Kgq.js → chunk-V7JOEXUC-BsazE8cS.js} +1 -1
- package/dist/assets/chunk-VAUOI2AC-BrbiIC1Q.js +1 -0
- package/dist/assets/{chunk-VR4S4FIN-DX6lXnNx.js → chunk-VR4S4FIN-7RoZQffO.js} +1 -1
- package/dist/assets/{chunk-WYO6CB5R-DLqMXfFC.js → chunk-WYO6CB5R-DEuS6N1R.js} +1 -1
- package/dist/assets/chunk-XXDRQBXY-Cx9N40wF.js +1 -0
- package/dist/assets/{chunk-YOTPTUD7-CY4obsV0.js → chunk-YOTPTUD7-9KBrosZL.js} +1 -1
- package/dist/assets/{chunk-ZGVPDNZ5-BleImZKe.js → chunk-ZGVPDNZ5-IYgN9f5A.js} +1 -1
- package/dist/assets/{chunk-ZIRB5QZD-C1TfdjpX.js → chunk-ZIRB5QZD-BUo0-zcp.js} +1 -1
- package/dist/assets/{circle-dashed-CEEssYIw.js → circle-dashed-LSYZTzM7.js} +1 -1
- package/dist/assets/classDiagram-OUVF2IWQ-DFN1v3PQ.js +1 -0
- package/dist/assets/classDiagram-v2-EOCWNBFH-DRvglADa.js +1 -0
- package/dist/assets/{client-C6YQx7A-.js → client-DudCRJw4.js} +1 -1
- package/dist/assets/{config-split-page-DKPelvjR.js → config-split-page-G7Kt2BnV.js} +1 -1
- package/dist/assets/confirm-dialog-DShT64F6.js +1 -0
- package/dist/assets/context-menu-rd7b_kVD.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-CVgUHXkj.js → cose-bilkent-JH36ORCC-DhqbC1fR.js} +1 -1
- package/dist/assets/{createLucideIcon-CF8U9dh7.js → createLucideIcon-D7hvIHV-.js} +1 -1
- package/dist/assets/cynefin-VYW2F7L2-DXUGnpJH.js +1 -0
- package/dist/assets/{cynefinDiagram-TSTJHNR4-cdfImbfI.js → cynefinDiagram-TSTJHNR4-C-TBRi5V.js} +1 -1
- package/dist/assets/{dagre-CHNN9L9I.js → dagre-CrgsRasE.js} +1 -1
- package/dist/assets/{dagre-VKFMJZFB-PscaENwr.js → dagre-VKFMJZFB-BmafJymp.js} +1 -1
- package/dist/assets/{desktop-capabilities-page-BENHdKfk.js → desktop-capabilities-page-CzqzFZUY.js} +1 -1
- package/dist/assets/desktop-update-config-CgeQ0Ffo.js +1 -0
- package/dist/assets/{diagram-FQU43EPY-CH_wye41.js → diagram-FQU43EPY-BoOMwa6D.js} +1 -1
- package/dist/assets/{diagram-G47NLZAW-Dtjpmi6D.js → diagram-G47NLZAW-Le7N6Uym.js} +1 -1
- package/dist/assets/{diagram-NH7WQ7WH-UdjLHyaz.js → diagram-NH7WQ7WH-Fbpj3-MO.js} +1 -1
- package/dist/assets/{diagram-OA4YK3LP-DYsToEaL.js → diagram-OA4YK3LP-D3QuGGuu.js} +1 -1
- package/dist/assets/{diagram-WEI45ONY-CA7kuIer.js → diagram-WEI45ONY-Cxu1uiN6.js} +1 -1
- package/dist/assets/dialog-C7glmAQJ.js +5 -0
- package/dist/assets/{doc-browser-context-CPLWVFLd.js → doc-browser-context-BlhBAOLH.js} +1 -1
- package/dist/assets/doc-browser-dBiR9Qi0.js +1 -0
- package/dist/assets/{docx-preview-D--EsUWi.js → docx-preview-CkU2psnd.js} +1 -1
- package/dist/assets/download-BYgECE0n.js +1 -0
- package/dist/assets/{ebnfDiagram-CCIWWBDH-BrjaoOuq.js → ebnfDiagram-CCIWWBDH-CCAjuQM6.js} +1 -1
- package/dist/assets/{erDiagram-Q63AITRT-nZQa2kCM.js → erDiagram-Q63AITRT-BuzUAq-d.js} +1 -1
- package/dist/assets/es2015-CsjAAQ6X.js +41 -0
- package/dist/assets/eventmodeling-45OFAUF4-ZBfVS3ZC.js +1 -0
- package/dist/assets/{extensions-CsWT7x3v.js → extensions-qYL-NpL3.js} +1 -1
- package/dist/assets/{eye-DJtw5KJ5.js → eye-BBuTzJ53.js} +1 -1
- package/dist/assets/flowDiagram-23GEKE2U-CqdsKk6x.js +1 -0
- package/dist/assets/{form-actions-DDQk0END.js → form-actions-CLGWO52v.js} +1 -1
- package/dist/assets/{ganttDiagram-NO4QXBWP-CyFZHIHN.js → ganttDiagram-NO4QXBWP-cJmWVY8F.js} +1 -1
- package/dist/assets/gitGraph-TEB2WS4Q-fHYFd9Es.js +1 -0
- package/dist/assets/{gitGraphDiagram-IHSO6WYX-Dfpq3z2M.js → gitGraphDiagram-IHSO6WYX-F58o-vtP.js} +1 -1
- package/dist/assets/{i18n-BjPkAKMQ.js → i18n-qBGEbcW6.js} +2 -2
- package/dist/assets/info-DKCQHKI2-CSaOL_bb.js +1 -0
- package/dist/assets/{infoDiagram-FWYZ7A6U-Diiz0k1E.js → infoDiagram-FWYZ7A6U-Gt59b83C.js} +1 -1
- package/dist/assets/{ishikawaDiagram-FXEZZL3T-B3R3SN4M.js → ishikawaDiagram-FXEZZL3T-1u4IAj1I.js} +1 -1
- package/dist/assets/{journeyDiagram-5HDEW3XC-DFOLKiNv.js → journeyDiagram-5HDEW3XC-CCQsfV-5.js} +1 -1
- package/dist/assets/{kanban-definition-HUTT4EX6-BMXpDp3g.js → kanban-definition-HUTT4EX6-vlB6O_Zn.js} +1 -1
- package/dist/assets/{keyboard-shortcuts-settings-page-hqTP7akj.js → keyboard-shortcuts-settings-page-B-wK_6zG.js} +1 -1
- package/dist/assets/{line-64_FhCoJ.js → line-D_bHubTL.js} +1 -1
- package/dist/assets/{linear-aF1fg7bK.js → linear-ChlwuS5y.js} +1 -1
- package/dist/assets/loader-circle-BA7EMkih.js +1 -0
- package/dist/assets/{login-page-BUwshAq4.js → login-page-Cd84lpVV.js} +1 -1
- package/dist/assets/login-page-VdMyNkFf.js +1 -0
- package/dist/assets/main-CR0SrTBf.js +2 -0
- package/dist/assets/main-DXH6EdXI.css +1 -0
- package/dist/assets/main-i18n-catalog.config-Btp_OowF.js +1 -0
- package/dist/assets/{map-BC3Amra3.js → map-oGHTsIu8.js} +1 -1
- package/dist/assets/mcp-marketplace-page-jacRwiI-.js +1 -0
- package/dist/assets/{mermaid-parser.core-DdMcZwnE.js → mermaid-parser.core-CuRe1ZG4.js} +2 -2
- package/dist/assets/{mermaid.core-BHdiEBbI.js → mermaid.core-u4YCFKRf.js} +3 -3
- package/dist/assets/{mindmap-definition-LN4V7U3C-CtHVaZyV.js → mindmap-definition-LN4V7U3C-DeJAQYTu.js} +1 -1
- package/dist/assets/{model-config-page-BSsHOhV7.js → model-config-page-D0DQlSDa.js} +1 -1
- package/dist/assets/{navigation-link-D-fxdv0i.js → navigation-link-32iM1-e6.js} +1 -1
- package/dist/assets/{ordinal-6b3jw4cz.js → ordinal-C6JFfkKN.js} +1 -1
- package/dist/assets/packet-7NZHBO7P-D-YFTczs.js +1 -0
- package/dist/assets/panel-app-CC0bVSu4.js +1 -0
- package/dist/assets/panel-app-i18n-catalog.config-LUSBp5Ce.js +1 -0
- package/dist/assets/{panelStandalone-BeI0Ndsx.js → panelStandalone-C9EKaApN.js} +2 -2
- package/dist/assets/{pegDiagram-2B236MQR-BtbG3Bgu.js → pegDiagram-2B236MQR-nVMkxShH.js} +1 -1
- package/dist/assets/pie-RZYD4A2V-VEnYu9s5.js +1 -0
- package/dist/assets/{pieDiagram-ENE6RG2P-FmLl2hzN.js → pieDiagram-ENE6RG2P-8aUH44QZ.js} +1 -1
- package/dist/assets/{privacy-settings-page-pW_1naDz.js → privacy-settings-page-Bxxx12OO.js} +1 -1
- package/dist/assets/projects-D56yAPNT.js +1 -0
- package/dist/assets/provider-models-C3frdXeW.js +1 -0
- package/dist/assets/{provider-scoped-model-input-CVbtT8L9.js → provider-scoped-model-input-CYetrPYZ.js} +1 -1
- package/dist/assets/providers-config-page-DESB1h8g.js +1 -0
- package/dist/assets/{puzzle-kKiVft9-.js → puzzle-CWHfFyYN.js} +1 -1
- package/dist/assets/pwa-CiGUjpcd.js +1 -0
- package/dist/assets/{quadrantDiagram-ABIIQ3AL-7-OzMNpF.js → quadrantDiagram-ABIIQ3AL-EY8hpFv8.js} +1 -1
- package/dist/assets/radar-I7S5WNFK-BFNIekC1.js +1 -0
- package/dist/assets/railroad-3IZDKUUU-lVqJ3Hak.js +1 -0
- package/dist/assets/railroad-abnf-AHOZXSZD-DYaefdFC.js +1 -0
- package/dist/assets/railroad-ebnf-EBAXGLYW-CTAk6lVq.js +1 -0
- package/dist/assets/railroad-peg-LSFZ7HO6-Cob294tg.js +1 -0
- package/dist/assets/{railroadDiagram-RFXS5EU6-B_UVtLJO.js → railroadDiagram-RFXS5EU6-CNhcIeji.js} +1 -1
- package/dist/assets/{refresh-cw-BeG0y6yZ.js → refresh-cw-y3L6PyLt.js} +1 -1
- package/dist/assets/remote-DiGFV8nP.js +1 -0
- package/dist/assets/{requirementDiagram-TGXJPOKE-D8TO2YeZ.js → requirementDiagram-TGXJPOKE-D8Dcs-Rt.js} +1 -1
- package/dist/assets/{rotate-cw-Ci2dcTO5.js → rotate-cw-CNE9qSHi.js} +1 -1
- package/dist/assets/{runtime-config-page-DCXN0nkS.js → runtime-config-page-5o98T-TD.js} +1 -1
- package/dist/assets/{sankeyDiagram-HTMAVEWB-CUzIcq0B.js → sankeyDiagram-HTMAVEWB-HTrb6aa-.js} +1 -1
- package/dist/assets/{save-Cr895abt.js → save-B0p5a0ET.js} +1 -1
- package/dist/assets/{search-config-page-CNQd481d.js → search-config-page-CpGcnIzi.js} +1 -1
- package/dist/assets/{secrets-config-page--q7M58L8.js → secrets-config-page-C4VTiW3r.js} +1 -1
- package/dist/assets/security-config-C5-RQVpS.js +1 -0
- package/dist/assets/select-CctTN205.js +1 -0
- package/dist/assets/{sequenceDiagram-DBY2YBRQ-kqJzXbwu.js → sequenceDiagram-DBY2YBRQ-6f_4X16Y.js} +1 -1
- package/dist/assets/service-apps-panel-CKE5HKNY.js +1 -0
- package/dist/assets/{settings-2-IodCcaXd.js → settings-2-EPflrNk6.js} +1 -1
- package/dist/assets/{sizeCapture-X5ZJPWSS-D9ISogq1.js → sizeCapture-X5ZJPWSS-Ck9rsuwL.js} +1 -1
- package/dist/assets/{src-Bc0PoUJ1.js → src-C8AUg09O.js} +1 -1
- package/dist/assets/{stateDiagram-2N3HPSRC-CqH5xc9W.js → stateDiagram-2N3HPSRC-Cm33MLHu.js} +1 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-BrNv-raG.js +1 -0
- package/dist/assets/{status-dot-DUYSKRCU.js → status-dot-CensgJZC.js} +1 -1
- package/dist/assets/{swimlanes-5IMT3BWC-mwejV-rW.js → swimlanes-5IMT3BWC-B107vmvM.js} +2 -2
- package/dist/assets/swimlanesDiagram-G3AALYLV-ntcxaPXp.js +8 -0
- package/dist/assets/{tag-chip-CQU51ST3.js → tag-chip-Bjzb4-qW.js} +1 -1
- package/dist/assets/{theme-provider-D-zZkXxS.js → theme-provider-hlle7Skk.js} +1 -1
- package/dist/assets/{timeline-definition-FHXFAJF6-CuikIDlX.js → timeline-definition-FHXFAJF6-CJEoAj33.js} +1 -1
- package/dist/assets/{trash-2-BDdqDh6E.js → trash-2-C5KH5Rw9.js} +1 -1
- package/dist/assets/treeView-QDETBFTQ-DbFmr-gw.js +1 -0
- package/dist/assets/treemap-6X3UGDF4-C8aY96pi.js +1 -0
- package/dist/assets/{use-config-Bxx7DdaL.js → use-config-CPl_F79t.js} +1 -1
- package/dist/assets/use-desktop-capabilities-CEg9-DrQ.js +1 -0
- package/dist/assets/{use-viewport-layout-CDcca0YL.js → use-viewport-layout-CPZUmTPi.js} +1 -1
- package/dist/assets/{vennDiagram-L72KCM5P-BD0P0qHh.js → vennDiagram-L72KCM5P-DzsUHk5I.js} +1 -1
- package/dist/assets/wardley-OPB4EBWU-D8d6DbbJ.js +1 -0
- package/dist/assets/{wardleyDiagram-EHGQE667-C6ma3t5D.js → wardleyDiagram-EHGQE667-1NfFs5ua.js} +1 -1
- package/dist/assets/x--xxUvHKW.js +1 -0
- package/dist/assets/{xychartDiagram-FW5EYKEG-D7E40NBk.js → xychartDiagram-FW5EYKEG-Ci8AI3Qo.js} +1 -1
- package/dist/index.html +37 -36
- package/dist/panel-standalone.html +11 -11
- package/package.json +8 -8
- package/src/app/components/layout/__tests__/app-layout.test.tsx +0 -1
- package/src/app/components/layout/__tests__/sidebar.layout.test.tsx +36 -16
- package/src/app/components/layout/sidebar-items.tsx +27 -18
- package/src/app/components/layout/sidebar-rail.styles.ts +11 -2
- package/src/app/components/layout/sidebar.tsx +3 -2
- package/src/app/configs/app-navigation.config.ts +39 -86
- package/src/features/agents/components/agent-details-dialog.tsx +3 -3
- package/src/features/agents/components/agents-page.tsx +5 -4
- package/src/features/chat/components/layout/__tests__/chat-page-shell.test.tsx +0 -2
- package/src/features/chat/components/layout/chat-page-shell.tsx +0 -2
- package/src/features/chat/components/layout/chat-sidebar-desktop-layout.tsx +0 -1
- package/src/features/chat/features/conversation/components/chat-voice-input-panel.tsx +3 -2
- package/src/features/chat/features/conversation/hooks/__tests__/use-chat-voice-input.test.tsx +4 -0
- package/src/features/chat/features/message/components/__tests__/chat-message-list.container.test.tsx +32 -47
- package/src/features/chat/features/message/components/chat-message-list.container.tsx +6 -10
- package/src/features/chat/features/message/utils/__tests__/chat-message-process-summary.utils.test.ts +52 -6
- package/src/features/chat/features/message/utils/chat-message-process-summary.utils.ts +22 -37
- package/src/features/chat/features/session/components/__tests__/chat-sidebar-project-groups.test.tsx +1 -1
- package/src/features/chat/features/session/components/__tests__/chat-sidebar-session-item.test.tsx +2 -1
- package/src/features/chat/features/session/components/chat-sidebar-project-groups.tsx +4 -2
- package/src/features/chat/features/session/components/chat-sidebar-session-item.tsx +9 -6
- package/src/features/chat/features/session/components/session-header/__tests__/chat-session-header-actions.test.tsx +2 -2
- package/src/features/chat/features/session/components/session-header/chat-session-header-actions.tsx +17 -17
- package/src/features/chat/features/session/components/session-header/chat-session-header-menu-item.tsx +4 -4
- package/src/features/chat/features/session/components/session-header/chat-session-more-actions-menu.tsx +13 -6
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel.tsx +1 -1
- package/src/features/chat/managers/chat-voice-input.manager.ts +5 -3
- package/src/features/chat/utils/chat-voice-permissions.utils.test.ts +12 -1
- package/src/features/chat/utils/chat-voice-permissions.utils.ts +6 -1
- package/src/features/cron/components/cron-job-row.tsx +11 -9
- package/src/features/inbox/components/inbox-reader-dialog.tsx +4 -2
- package/src/features/inbox/pages/inbox-page.tsx +10 -5
- package/src/features/marketplace/components/mcp/mcp-marketplace-card.tsx +1 -1
- package/src/features/panel-apps/components/__tests__/panel-app-list-item.test.tsx +6 -4
- package/src/features/panel-apps/components/__tests__/panel-app-toolbar.test.tsx +6 -4
- package/src/features/panel-apps/components/panel-app-list-item.tsx +1 -1
- package/src/features/panel-apps/components/panel-app-toolbar.tsx +7 -7
- package/src/features/projects/components/project-skills.tsx +2 -2
- package/src/features/right-panel-resources/components/__tests__/page-resource-sidebar-nav.test.tsx +27 -2
- package/src/features/right-panel-resources/components/page-resource-actions-menu.tsx +4 -22
- package/src/features/right-panel-resources/components/page-resource-sidebar-nav.tsx +10 -13
- package/src/features/right-panel-resources/hooks/use-page-resource-actions.ts +56 -3
- package/src/features/right-panel-resources/index.ts +0 -1
- package/src/features/service-apps/components/service-app-list-item.tsx +3 -2
- package/src/features/system-status/components/__tests__/desktop-update-config.test.tsx +40 -0
- package/src/features/system-status/components/desktop-update-config.tsx +19 -1
- package/src/platforms/desktop/components/__tests__/desktop-app-shell.test.tsx +0 -1
- package/src/platforms/desktop/components/desktop-app-shell.tsx +0 -2
- package/src/platforms/mobile/components/mobile-app-shell.tsx +0 -2
- package/src/platforms/mobile/components/mobile-settings-shell.tsx +8 -3
- package/src/shared/components/ui/context-menu/__tests__/context-menu.test.tsx +83 -1
- package/src/shared/components/ui/context-menu/context-menu-items.tsx +173 -0
- package/src/shared/components/ui/context-menu/context-menu.tsx +93 -114
- package/src/shared/components/ui/dialog.tsx +4 -0
- package/src/shared/components/ui/overlays/sheet.tsx +4 -0
- package/src/shared/components/ui/popover.tsx +10 -4
- package/src/shared/lib/i18n/locales/en-US/chat.json +8 -1
- package/src/shared/lib/i18n/locales/en-US/core.json +3 -1
- package/src/shared/lib/i18n/locales/en-US/desktop-update.json +1 -0
- package/src/shared/lib/i18n/locales/zh-CN/chat.json +8 -1
- package/src/shared/lib/i18n/locales/zh-CN/core.json +11 -9
- package/src/shared/lib/i18n/locales/zh-CN/desktop-update.json +1 -0
- package/src/shared/lib/transport/__tests__/browser-realtime-recovery.service.test.ts +27 -2
- package/src/shared/lib/transport/__tests__/local-transport.service.test.ts +20 -0
- package/src/shared/lib/transport/__tests__/remote.transport.test.ts +26 -0
- package/src/shared/lib/transport/browser-realtime-recovery.service.ts +32 -5
- package/src/shared/lib/transport/local-transport.service.ts +1 -6
- package/src/shared/lib/transport/remote-transport.service.ts +22 -1
- package/dist/assets/api-D9e9cHtW.js +0 -20
- package/dist/assets/app-presenter-provider-J9IgTbc9.js +0 -124
- package/dist/assets/architecture-TIHT7OUA-BWywYH_m.js +0 -1
- package/dist/assets/channel-1nKIAEXr.js +0 -1
- package/dist/assets/chunk-2Q5K7J3B-CAwv72v4.js +0 -1
- package/dist/assets/chunk-VAUOI2AC-DnaryNw2.js +0 -1
- package/dist/assets/chunk-XXDRQBXY-BToo1uqb.js +0 -1
- package/dist/assets/classDiagram-OUVF2IWQ-D_TusZGx.js +0 -1
- package/dist/assets/classDiagram-v2-EOCWNBFH-B1NFZTmS.js +0 -1
- package/dist/assets/confirm-dialog-BCGeh61X.js +0 -1
- package/dist/assets/cynefin-VYW2F7L2-CJZSs5s_.js +0 -1
- package/dist/assets/desktop-update-config-BJMTQMRS.js +0 -1
- package/dist/assets/dialog-DQXou6pg.js +0 -5
- package/dist/assets/dist-CiC9Fd9J.js +0 -1
- package/dist/assets/doc-browser-CCYS_csH.js +0 -1
- package/dist/assets/es2015-DHRpDU-q.js +0 -41
- package/dist/assets/eventmodeling-45OFAUF4-rc7kUq4V.js +0 -1
- package/dist/assets/flowDiagram-23GEKE2U-DAjaeGO8.js +0 -1
- package/dist/assets/gitGraph-TEB2WS4Q-Ce0gf6ps.js +0 -1
- package/dist/assets/info-DKCQHKI2-Cp-Tr78m.js +0 -1
- package/dist/assets/loader-circle-B-4WwzBj.js +0 -1
- package/dist/assets/login-page-CdlI6B8e.js +0 -1
- package/dist/assets/main-BVYdyT60.css +0 -1
- package/dist/assets/main-DYEALeoQ.js +0 -2
- package/dist/assets/main-i18n-catalog.config-1o2hjZ0m.js +0 -1
- package/dist/assets/mcp-marketplace-page-CRRQT6SP.js +0 -1
- package/dist/assets/packet-7NZHBO7P-BOJuCraS.js +0 -1
- package/dist/assets/panel-app-2EACRB8p.js +0 -1
- package/dist/assets/panel-app-i18n-catalog.config-kQO7QAwH.js +0 -1
- package/dist/assets/pie-RZYD4A2V-D-FEO81x.js +0 -1
- package/dist/assets/projects-k6SLda_A.js +0 -1
- package/dist/assets/provider-models-mVzuEQBS.js +0 -1
- package/dist/assets/providers-config-page-rBlVrHkb.js +0 -1
- package/dist/assets/pwa-BgGM4kkY.js +0 -1
- package/dist/assets/radar-I7S5WNFK-Bq3eK1vK.js +0 -1
- package/dist/assets/railroad-3IZDKUUU-C3uZ1esg.js +0 -1
- package/dist/assets/railroad-abnf-AHOZXSZD-D3iZd1KT.js +0 -1
- package/dist/assets/railroad-ebnf-EBAXGLYW-Dl0FWqZu.js +0 -1
- package/dist/assets/railroad-peg-LSFZ7HO6-B51SbzGp.js +0 -1
- package/dist/assets/remote-wYWqir2w.js +0 -1
- package/dist/assets/security-config-CJb2pK2O.js +0 -1
- package/dist/assets/select-Bq-UmfCK.js +0 -1
- package/dist/assets/service-apps-panel-iLLEByRF.js +0 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-CcOGfDdx.js +0 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-BMI2k8RZ.js +0 -8
- package/dist/assets/treeView-QDETBFTQ-C0_07QI1.js +0 -1
- package/dist/assets/treemap-6X3UGDF4-Djpx6ccG.js +0 -1
- package/dist/assets/use-desktop-capabilities-BTgdFgJy.js +0 -1
- package/dist/assets/wardley-OPB4EBWU-DZVFxu81.js +0 -1
- package/dist/assets/x-LUUwl8rK.js +0 -1
- package/src/features/right-panel-resources/components/current-page-actions.tsx +0 -36
- /package/dist/assets/{array-B0sEvCP9.js → array-BV9OtnO8.js} +0 -0
- /package/dist/assets/{chunk-KEIR6QF5-BeO7fxDQ.js → chunk-KEIR6QF5-Cx-8EJ4_.js} +0 -0
- /package/dist/assets/{chunk-Y2CYZVJY-JQfgEV36.js → chunk-Y2CYZVJY-Dy1ufvjf.js} +0 -0
- /package/dist/assets/{config-hints-D3OuwoEY.js → config-hints-DbmiyTKg.js} +0 -0
- /package/dist/assets/{cytoscape.esm-CzJ9uXgi.js → cytoscape.esm-CSCjuT4Z.js} +0 -0
- /package/dist/assets/{defaultLocale-USmzX3VG.js → defaultLocale-DWTiNsbT.js} +0 -0
- /package/dist/assets/{dist-BYF6XVna.js → dist-BVCSkfWY.js} +0 -0
- /package/dist/assets/{graphlib-DEFMkHdW.js → graphlib-B1yb1Wl8.js} +0 -0
- /package/dist/assets/{host-capabilities-C0MmWd3M.js → host-capabilities-DuIFVsvM.js} +0 -0
- /package/dist/assets/{init-04ErALoz.js → init-BF6GH5oe.js} +0 -0
- /package/dist/assets/{jszip.min-BnQ5NRy2.js → jszip.min-D12teKzP.js} +0 -0
- /package/dist/assets/{middleware-CAXxl-af.js → middleware-B--6mAUM.js} +0 -0
- /package/dist/assets/{navigation-history-CyawyVz0.js → navigation-history-CzErJuPG.js} +0 -0
- /package/dist/assets/{path-CzxQ9n2G.js → path-C56XkznJ.js} +0 -0
- /package/dist/assets/{rough.esm-pT9fdsW3.js → rough.esm-CGfeEbtE.js} +0 -0
- /package/dist/assets/{xlsx-BRpCSiE4.js → xlsx-sds5nUpL.js} +0 -0
|
@@ -185,6 +185,7 @@ describe('RemoteSessionMultiplexTransport request path', () => {
|
|
|
185
185
|
await pendingFailure;
|
|
186
186
|
await Promise.resolve();
|
|
187
187
|
expect(replacementSocket?.sent).toHaveLength(0);
|
|
188
|
+
vi.advanceTimersByTime(250);
|
|
188
189
|
window.dispatchEvent(new Event('online'));
|
|
189
190
|
const secondReplacement = MockWebSocket.instances[2];
|
|
190
191
|
secondReplacement?.open();
|
|
@@ -197,4 +198,29 @@ describe('RemoteSessionMultiplexTransport request path', () => {
|
|
|
197
198
|
expect(MockWebSocket.instances).toHaveLength(3);
|
|
198
199
|
unsubscribe();
|
|
199
200
|
});
|
|
201
|
+
|
|
202
|
+
it('abandons a frozen connecting socket immediately when the page is shown again', async () => {
|
|
203
|
+
vi.spyOn(document, 'visibilityState', 'get').mockReturnValue('visible');
|
|
204
|
+
const transport = new RemoteSessionMultiplexTransport({
|
|
205
|
+
mode: 'remote',
|
|
206
|
+
protocolVersion: 1,
|
|
207
|
+
wsPath: '/_remote/ws'
|
|
208
|
+
}, 'https://remote.claw.cool');
|
|
209
|
+
|
|
210
|
+
const handler = vi.fn();
|
|
211
|
+
const unsubscribe = transport.subscribe(handler);
|
|
212
|
+
const frozenSocket = MockWebSocket.instances[0];
|
|
213
|
+
|
|
214
|
+
window.dispatchEvent(new PageTransitionEvent('pageshow', { persisted: true }));
|
|
215
|
+
await Promise.resolve();
|
|
216
|
+
|
|
217
|
+
expect(frozenSocket?.readyState).toBe(MockWebSocket.CLOSED);
|
|
218
|
+
expect(MockWebSocket.instances).toHaveLength(2);
|
|
219
|
+
expect(handler).toHaveBeenCalledWith({ type: 'connection.close', payload: {} });
|
|
220
|
+
|
|
221
|
+
MockWebSocket.instances[1]?.open();
|
|
222
|
+
await Promise.resolve();
|
|
223
|
+
expect(handler).toHaveBeenLastCalledWith({ type: 'connection.open', payload: {} });
|
|
224
|
+
unsubscribe();
|
|
225
|
+
});
|
|
200
226
|
});
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
const RECOVERY_SIGNAL_COOLDOWN_MS = 250;
|
|
2
|
+
|
|
1
3
|
export class BrowserRealtimeRecoveryService {
|
|
2
4
|
private started = false;
|
|
5
|
+
private recoveryCooldownId: number | null = null;
|
|
3
6
|
|
|
4
7
|
constructor(private readonly requestRecovery: () => void) {}
|
|
5
8
|
|
|
@@ -10,6 +13,8 @@ export class BrowserRealtimeRecoveryService {
|
|
|
10
13
|
this.started = true;
|
|
11
14
|
document.addEventListener('visibilitychange', this.handleVisibilityChange);
|
|
12
15
|
window.addEventListener('online', this.handleOnline);
|
|
16
|
+
window.addEventListener('pageshow', this.handlePageShow);
|
|
17
|
+
window.addEventListener('focus', this.handleForegroundSignal);
|
|
13
18
|
};
|
|
14
19
|
|
|
15
20
|
stop = (): void => {
|
|
@@ -19,17 +24,39 @@ export class BrowserRealtimeRecoveryService {
|
|
|
19
24
|
this.started = false;
|
|
20
25
|
document.removeEventListener('visibilitychange', this.handleVisibilityChange);
|
|
21
26
|
window.removeEventListener('online', this.handleOnline);
|
|
27
|
+
window.removeEventListener('pageshow', this.handlePageShow);
|
|
28
|
+
window.removeEventListener('focus', this.handleForegroundSignal);
|
|
29
|
+
if (this.recoveryCooldownId !== null) {
|
|
30
|
+
window.clearTimeout(this.recoveryCooldownId);
|
|
31
|
+
this.recoveryCooldownId = null;
|
|
32
|
+
}
|
|
22
33
|
};
|
|
23
34
|
|
|
24
35
|
private readonly handleVisibilityChange = (): void => {
|
|
25
|
-
|
|
26
|
-
this.requestRecovery();
|
|
27
|
-
}
|
|
36
|
+
this.requestRecoveryIfVisible();
|
|
28
37
|
};
|
|
29
38
|
|
|
30
39
|
private readonly handleOnline = (): void => {
|
|
31
|
-
|
|
32
|
-
|
|
40
|
+
this.requestRecoveryIfVisible();
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
private readonly handleForegroundSignal = (): void => {
|
|
44
|
+
this.requestRecoveryIfVisible();
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
private readonly handlePageShow = (event: PageTransitionEvent): void => {
|
|
48
|
+
if (event.persisted) {
|
|
49
|
+
this.requestRecoveryIfVisible();
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
private readonly requestRecoveryIfVisible = (): void => {
|
|
54
|
+
if (document.visibilityState !== 'visible' || this.recoveryCooldownId !== null) {
|
|
55
|
+
return;
|
|
33
56
|
}
|
|
57
|
+
this.requestRecovery();
|
|
58
|
+
this.recoveryCooldownId = window.setTimeout(() => {
|
|
59
|
+
this.recoveryCooldownId = null;
|
|
60
|
+
}, RECOVERY_SIGNAL_COOLDOWN_MS);
|
|
34
61
|
};
|
|
35
62
|
}
|
|
@@ -54,7 +54,6 @@ class LocalRealtimeGateway {
|
|
|
54
54
|
private socket: WebSocket | null = null;
|
|
55
55
|
private reconnectTimer: number | null = null;
|
|
56
56
|
private manualClose = false;
|
|
57
|
-
private replacingAfterBrowserRecovery = false;
|
|
58
57
|
private subscribers = new Set<EventHandler>();
|
|
59
58
|
private readonly browserRecovery = new BrowserRealtimeRecoveryService(() => {
|
|
60
59
|
this.replaceSocket();
|
|
@@ -95,7 +94,6 @@ class LocalRealtimeGateway {
|
|
|
95
94
|
this.socket = socket;
|
|
96
95
|
|
|
97
96
|
socket.onopen = () => {
|
|
98
|
-
this.replacingAfterBrowserRecovery = false;
|
|
99
97
|
this.emit({ type: 'connection.open', payload: {} });
|
|
100
98
|
};
|
|
101
99
|
|
|
@@ -113,7 +111,6 @@ class LocalRealtimeGateway {
|
|
|
113
111
|
};
|
|
114
112
|
|
|
115
113
|
socket.onclose = () => {
|
|
116
|
-
this.replacingAfterBrowserRecovery = false;
|
|
117
114
|
this.emit({ type: 'connection.close', payload: {} });
|
|
118
115
|
this.socket = null;
|
|
119
116
|
if (!this.manualClose && this.subscribers.size > 0) {
|
|
@@ -133,10 +130,9 @@ class LocalRealtimeGateway {
|
|
|
133
130
|
};
|
|
134
131
|
|
|
135
132
|
private replaceSocket = (): void => {
|
|
136
|
-
if (this.subscribers.size === 0
|
|
133
|
+
if (this.subscribers.size === 0) {
|
|
137
134
|
return;
|
|
138
135
|
}
|
|
139
|
-
this.replacingAfterBrowserRecovery = true;
|
|
140
136
|
if (this.reconnectTimer !== null) {
|
|
141
137
|
window.clearTimeout(this.reconnectTimer);
|
|
142
138
|
this.reconnectTimer = null;
|
|
@@ -156,7 +152,6 @@ class LocalRealtimeGateway {
|
|
|
156
152
|
|
|
157
153
|
private disconnect = (): void => {
|
|
158
154
|
this.manualClose = true;
|
|
159
|
-
this.replacingAfterBrowserRecovery = false;
|
|
160
155
|
if (this.reconnectTimer !== null) {
|
|
161
156
|
window.clearTimeout(this.reconnectTimer);
|
|
162
157
|
this.reconnectTimer = null;
|
|
@@ -87,9 +87,16 @@ function createId(prefix: string): string {
|
|
|
87
87
|
|
|
88
88
|
const REMOTE_REQUEST_TIMEOUT_MS = 15_000;
|
|
89
89
|
|
|
90
|
+
class RemoteBrowserRecoveryReplacementError extends Error {
|
|
91
|
+
constructor() {
|
|
92
|
+
super('Remote transport connection replaced after browser recovery.');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
90
96
|
export class RemoteSessionMultiplexTransport implements AppTransport {
|
|
91
97
|
private socket: WebSocket | null = null;
|
|
92
98
|
private connectPromise: Promise<void> | null = null;
|
|
99
|
+
private rejectConnect: ((error: Error) => void) | null = null;
|
|
93
100
|
private connectTimeoutId: number | null = null;
|
|
94
101
|
private reconnectTimer: number | null = null;
|
|
95
102
|
private manualClose = false;
|
|
@@ -221,6 +228,9 @@ export class RemoteSessionMultiplexTransport implements AppTransport {
|
|
|
221
228
|
this.subscribers.add(handler);
|
|
222
229
|
this.browserRecovery.start();
|
|
223
230
|
void this.ensureSocket().catch((error) => {
|
|
231
|
+
if (error instanceof RemoteBrowserRecoveryReplacementError) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
224
234
|
handler({
|
|
225
235
|
type: 'connection.error',
|
|
226
236
|
payload: { message: error instanceof Error ? error.message : String(error) }
|
|
@@ -258,6 +268,7 @@ export class RemoteSessionMultiplexTransport implements AppTransport {
|
|
|
258
268
|
const wsUrl = resolveTransportWebSocketUrl(this.apiBase, this.runtime.wsPath);
|
|
259
269
|
this.manualClose = false;
|
|
260
270
|
this.connectPromise = new Promise<void>((innerResolve, innerReject) => {
|
|
271
|
+
this.rejectConnect = innerReject;
|
|
261
272
|
const socket = new WebSocket(wsUrl);
|
|
262
273
|
this.socket = socket;
|
|
263
274
|
let connectionOpened = false;
|
|
@@ -279,6 +290,7 @@ export class RemoteSessionMultiplexTransport implements AppTransport {
|
|
|
279
290
|
connectionOpened = true;
|
|
280
291
|
clearConnectTimeout();
|
|
281
292
|
this.connectPromise = null;
|
|
293
|
+
this.rejectConnect = null;
|
|
282
294
|
innerResolve();
|
|
283
295
|
this.emit({ type: 'connection.open', payload: {} });
|
|
284
296
|
};
|
|
@@ -304,6 +316,7 @@ export class RemoteSessionMultiplexTransport implements AppTransport {
|
|
|
304
316
|
const wasConnecting = this.connectPromise !== null;
|
|
305
317
|
this.socket = null;
|
|
306
318
|
this.connectPromise = null;
|
|
319
|
+
this.rejectConnect = null;
|
|
307
320
|
this.failPendingWork(new Error('Remote transport connection closed.'));
|
|
308
321
|
this.emit({ type: 'connection.close', payload: {} });
|
|
309
322
|
if (wasConnecting && !connectionOpened) {
|
|
@@ -330,21 +343,29 @@ export class RemoteSessionMultiplexTransport implements AppTransport {
|
|
|
330
343
|
}
|
|
331
344
|
|
|
332
345
|
private replaceSocket = (): void => {
|
|
333
|
-
if (this.subscribers.size === 0
|
|
346
|
+
if (this.subscribers.size === 0) {
|
|
334
347
|
return;
|
|
335
348
|
}
|
|
336
349
|
if (this.reconnectTimer !== null) {
|
|
337
350
|
window.clearTimeout(this.reconnectTimer);
|
|
338
351
|
this.reconnectTimer = null;
|
|
339
352
|
}
|
|
353
|
+
if (this.connectTimeoutId !== null) {
|
|
354
|
+
window.clearTimeout(this.connectTimeoutId);
|
|
355
|
+
this.connectTimeoutId = null;
|
|
356
|
+
}
|
|
340
357
|
const staleSocket = this.socket;
|
|
358
|
+
const rejectStaleConnect = this.rejectConnect;
|
|
341
359
|
this.socket = null;
|
|
360
|
+
this.connectPromise = null;
|
|
361
|
+
this.rejectConnect = null;
|
|
342
362
|
if (staleSocket) {
|
|
343
363
|
staleSocket.onopen = null;
|
|
344
364
|
staleSocket.onmessage = null;
|
|
345
365
|
staleSocket.onerror = null;
|
|
346
366
|
staleSocket.onclose = null;
|
|
347
367
|
staleSocket.close();
|
|
368
|
+
rejectStaleConnect?.(new RemoteBrowserRecoveryReplacementError());
|
|
348
369
|
this.failPendingWork(new Error('Remote transport connection replaced after browser recovery.'));
|
|
349
370
|
this.emit({ type: 'connection.close', payload: {} });
|
|
350
371
|
}
|