@nextclaw/ui 0.15.25 → 0.15.26
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 +18 -0
- package/dist/assets/{abnfDiagram-VRR7QNED-DvTjgVMf.js → abnfDiagram-VRR7QNED-BcFJp_1X.js} +1 -1
- package/dist/assets/{aiden0z-pptx-renderer.es-C1nfBAXR.js → aiden0z-pptx-renderer.es-Dp2ezlQn.js} +1 -1
- package/dist/assets/{api-FK7tikI1.js → api-CK3Fro7z.js} +6 -6
- package/dist/assets/appearance-settings-page-zqwWO8Dy.js +1 -0
- package/dist/assets/{arc-BvhODBXv.js → arc-CkgyPMyW.js} +1 -1
- package/dist/assets/architecture-TIHT7OUA-DO2x53FK.js +1 -0
- package/dist/assets/{architectureDiagram-ZJ3FMSHR-BKO9RgNS.js → architectureDiagram-ZJ3FMSHR-CMd4cIjI.js} +1 -1
- package/dist/assets/{blockDiagram-677ZJIJ3-DHpDXy7D.js → blockDiagram-677ZJIJ3-Bz3tbhet.js} +1 -1
- package/dist/assets/{c4Diagram-LMCZKHZV-BG_iQnDr.js → c4Diagram-LMCZKHZV-D9hFNAGv.js} +1 -1
- package/dist/assets/channel-nBvMaVyP.js +1 -0
- package/dist/assets/{channels-list-page-CocdcIko.js → channels-list-page-CVCZBlCL.js} +2 -2
- package/dist/assets/chat-page-D4wehRTz.js +1 -0
- package/dist/assets/chunk-2Q5K7J3B-CJgqFDS4.js +1 -0
- package/dist/assets/{chunk-32BRIVSS-DR9M0LLx.js → chunk-32BRIVSS-7NrjEITq.js} +1 -1
- package/dist/assets/{chunk-52WLFC77-698iC3BB.js → chunk-52WLFC77-viIcqj9q.js} +1 -1
- package/dist/assets/{chunk-5FCAYU7R-DikTj9Ey.js → chunk-5FCAYU7R-Vsu4J-VM.js} +1 -1
- package/dist/assets/{chunk-5HE753X5-ko0o7_q0.js → chunk-5HE753X5-C-w6CQZK.js} +1 -1
- package/dist/assets/{chunk-5JV3BV7I-CEHufhgo.js → chunk-5JV3BV7I-CuKgJQ4W.js} +1 -1
- package/dist/assets/{chunk-5TONJI2A-CGgno1cu.js → chunk-5TONJI2A-CYeiWZKb.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-DkiB4cUQ.js → chunk-5VM5RSS4-DRCbfwIn.js} +1 -1
- package/dist/assets/{chunk-7BUUIJ7U-DzptcytQ.js → chunk-7BUUIJ7U-BvydOcm3.js} +1 -1
- package/dist/assets/{chunk-BIQX33UG-DMRSQJvT.js → chunk-BIQX33UG-RlppOXKo.js} +1 -1
- package/dist/assets/{chunk-C7G6YPKG-Bw1BwwuY.js → chunk-C7G6YPKG-DAizzYwr.js} +1 -1
- package/dist/assets/{chunk-CQNSW5MT-C0z6eHBk.js → chunk-CQNSW5MT-5eChJHca.js} +1 -1
- package/dist/assets/{chunk-CYSBUYHQ-ByPyAouO.js → chunk-CYSBUYHQ-YHPr53fv.js} +1 -1
- package/dist/assets/{chunk-EMLP6XTP-CJlAXWZg.js → chunk-EMLP6XTP-CK4D7Hz5.js} +1 -1
- package/dist/assets/{chunk-EX3LRPZG-Dqq4zKJu.js → chunk-EX3LRPZG-BmlDFIRW.js} +1 -1
- package/dist/assets/{chunk-FWX5IMBZ-B0SNoCmi.js → chunk-FWX5IMBZ-D0ksHZZ9.js} +2 -2
- package/dist/assets/{chunk-HOUHSVGY-DG_GJih_.js → chunk-HOUHSVGY-DPkq8FCm.js} +1 -1
- package/dist/assets/{chunk-ICXQ74PX-Drxk_6bE.js → chunk-ICXQ74PX-FAatv5fC.js} +1 -1
- package/dist/assets/{chunk-JG7HCLWE-DdLFPpnd.js → chunk-JG7HCLWE-DLkIi4F7.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-B8M4G76F.js → chunk-JWPE2WC7-DawOjNE3.js} +1 -1
- package/dist/assets/{chunk-MOJQB5TN-XP6FJHY_.js → chunk-MOJQB5TN-Di52TorW.js} +1 -1
- package/dist/assets/{chunk-MOZMSUNE-C_6x18Qw.js → chunk-MOZMSUNE-PfyK9w1-.js} +1 -1
- package/dist/assets/{chunk-OGEWGWER-N25BzCmG.js → chunk-OGEWGWER-C3jdH3Ty.js} +1 -1
- package/dist/assets/{chunk-OSBZ3O6U-ASDEm7y0.js → chunk-OSBZ3O6U-CecHo-f0.js} +1 -1
- package/dist/assets/{chunk-PUDLZKDR-CTlvAcn7.js → chunk-PUDLZKDR-f3IJh3sN.js} +1 -1
- package/dist/assets/{chunk-Q4XR5HBZ-Da9BWfB6.js → chunk-Q4XR5HBZ-DQFeUPxZ.js} +1 -1
- package/dist/assets/{chunk-QBLGF6JB-Bi6RpTJO.js → chunk-QBLGF6JB-BhUeG0y2.js} +1 -1
- package/dist/assets/{chunk-R7FJI6CG-DkMsSPvK.js → chunk-R7FJI6CG-C3XpZ-2u.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-DZp0eU-j.js → chunk-RYQCIY6F-CAqa5klQ.js} +1 -1
- package/dist/assets/{chunk-U6XO7XAA-vfinDSrj.js → chunk-U6XO7XAA-D_WXezeD.js} +1 -1
- package/dist/assets/{chunk-V7JOEXUC-C9Nksccs.js → chunk-V7JOEXUC-CZ70oOtp.js} +1 -1
- package/dist/assets/chunk-VAUOI2AC-BGvh3yIx.js +1 -0
- package/dist/assets/{chunk-VR4S4FIN-Xv6zfwXs.js → chunk-VR4S4FIN-B7AHEYYk.js} +1 -1
- package/dist/assets/{chunk-WYO6CB5R-mOJNzbWl.js → chunk-WYO6CB5R-Dn9To_OI.js} +2 -2
- package/dist/assets/chunk-XXDRQBXY-DaBxG5gs.js +1 -0
- package/dist/assets/{chunk-YOTPTUD7-1-aKSu4o.js → chunk-YOTPTUD7-BYEgRBk3.js} +1 -1
- package/dist/assets/{chunk-ZGVPDNZ5-OJ8veMpK.js → chunk-ZGVPDNZ5-C6YtZDU0.js} +1 -1
- package/dist/assets/{chunk-ZIRB5QZD-SR_Nq_PP.js → chunk-ZIRB5QZD-DMuYtnHF.js} +1 -1
- package/dist/assets/classDiagram-OUVF2IWQ-P6N03G2R.js +1 -0
- package/dist/assets/classDiagram-v2-EOCWNBFH-B1_uLvMv.js +1 -0
- package/dist/assets/config-split-page-CceNFvlY.js +1 -0
- package/dist/assets/confirm-dialog-CWeNYWZY.js +5 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-NjVgz2Bw.js → cose-bilkent-JH36ORCC-Bc2Ex5Y3.js} +1 -1
- package/dist/assets/cynefin-VYW2F7L2-B-H8Qp-n.js +1 -0
- package/dist/assets/{cynefinDiagram-TSTJHNR4-B_17LDqD.js → cynefinDiagram-TSTJHNR4-DVysQoGz.js} +1 -1
- package/dist/assets/{dagre-CMe101gk.js → dagre-CMhQ1cAG.js} +1 -1
- package/dist/assets/{dagre-VKFMJZFB-qo8nLb3B.js → dagre-VKFMJZFB-RYyWpPJZ.js} +1 -1
- package/dist/assets/desktop-update-config-Dirc3bpt.js +1 -0
- package/dist/assets/{diagram-FQU43EPY-Ba3XIklC.js → diagram-FQU43EPY-BD6KONdF.js} +1 -1
- package/dist/assets/{diagram-G47NLZAW-CG45TcUx.js → diagram-G47NLZAW-CGB2ptRR.js} +1 -1
- package/dist/assets/{diagram-NH7WQ7WH-2F2HrwV-.js → diagram-NH7WQ7WH-DnkOI6cU.js} +1 -1
- package/dist/assets/{diagram-OA4YK3LP-CXfWH9NZ.js → diagram-OA4YK3LP-DF82RZ7P.js} +1 -1
- package/dist/assets/{diagram-WEI45ONY-CH_4yepc.js → diagram-WEI45ONY-Be2v7Ck9.js} +1 -1
- package/dist/assets/{dist-BH7W5yCi.js → dist-AYxkFx2B.js} +1 -1
- package/dist/assets/{dist-CaYdVVeO.js → dist-D9xtGgdL.js} +1 -1
- package/dist/assets/doc-browser-4Sud6dWw.js +1 -0
- package/dist/assets/doc-browser-D4x_yH5F.js +1 -0
- package/dist/assets/doc-browser-context-Cb7Z0j90.js +1 -0
- package/dist/assets/{docx-preview-CoM4JK7_.js → docx-preview-BqwAjrj3.js} +1 -1
- package/dist/assets/{ebnfDiagram-CCIWWBDH-BwiG4Ea1.js → ebnfDiagram-CCIWWBDH-CP98OYk8.js} +1 -1
- package/dist/assets/{erDiagram-Q63AITRT-BML3hpnQ.js → erDiagram-Q63AITRT-ZLlx8xfs.js} +1 -1
- package/dist/assets/eventmodeling-45OFAUF4-YVtShyFA.js +1 -0
- package/dist/assets/flowDiagram-23GEKE2U-BeKXabVO.js +1 -0
- package/dist/assets/form-actions-B2q4jgjE.js +1 -0
- package/dist/assets/{ganttDiagram-NO4QXBWP-80enfWbD.js → ganttDiagram-NO4QXBWP-DXCDjHR2.js} +1 -1
- package/dist/assets/gitGraph-TEB2WS4Q-jTSiBj-p.js +1 -0
- package/dist/assets/{gitGraphDiagram-IHSO6WYX-CVLqXr-b.js → gitGraphDiagram-IHSO6WYX-l2HWrTJp.js} +1 -1
- package/dist/assets/index-CdyTsSBu.css +1 -0
- package/dist/assets/index-Das_bw2h.js +107 -0
- package/dist/assets/info-DKCQHKI2-BIporNWb.js +1 -0
- package/dist/assets/{infoDiagram-FWYZ7A6U-Dyvs2t0i.js → infoDiagram-FWYZ7A6U-D-DjX-bn.js} +1 -1
- package/dist/assets/{ishikawaDiagram-FXEZZL3T-sSnxDKfh.js → ishikawaDiagram-FXEZZL3T-y_Xy128F.js} +1 -1
- package/dist/assets/{journeyDiagram-5HDEW3XC-D22V71Mf.js → journeyDiagram-5HDEW3XC-DJn5xYcQ.js} +1 -1
- package/dist/assets/{kanban-definition-HUTT4EX6-D3ds0p-g.js → kanban-definition-HUTT4EX6-DJVIOR21.js} +1 -1
- package/dist/assets/{line-CbyFs065.js → line-Cos7PIOj.js} +1 -1
- package/dist/assets/{linear-4DKtnZBS.js → linear-BtDLqtzF.js} +1 -1
- package/dist/assets/loader-circle-CpmBdaon.js +1 -0
- package/dist/assets/{map-CcZzEoz6.js → map-BKnQyvd0.js} +1 -1
- package/dist/assets/mcp-marketplace-page-CdOY3Sop.js +1 -0
- package/dist/assets/mcp-marketplace-page-DvjrfqEt.js +9 -0
- package/dist/assets/{mermaid-parser.core-DPmMOjXD.js → mermaid-parser.core-XUNZhr2W.js} +2 -2
- package/dist/assets/{mermaid.core-BSf-ddRa.js → mermaid.core-ySrvolIe.js} +3 -3
- package/dist/assets/{mindmap-definition-LN4V7U3C-BUTwWPyx.js → mindmap-definition-LN4V7U3C-BypL9tei.js} +1 -1
- package/dist/assets/model-config-page-DfOLyQqR.js +1 -0
- package/dist/assets/{navigation-link-CVy0_kVl.js → navigation-link-MiiyoIjH.js} +2 -2
- package/dist/assets/{ordinal-BgLYtOZE.js → ordinal-CxxVWxYU.js} +1 -1
- package/dist/assets/packet-7NZHBO7P-CuFMADV0.js +1 -0
- package/dist/assets/{pegDiagram-2B236MQR-BEu_ZBjc.js → pegDiagram-2B236MQR-D-U2KBGv.js} +1 -1
- package/dist/assets/pie-RZYD4A2V-XUeIXhM9.js +1 -0
- package/dist/assets/{pieDiagram-ENE6RG2P-CAwAwuBd.js → pieDiagram-ENE6RG2P-CBi3GusJ.js} +1 -1
- package/dist/assets/plus-C8FkjpSZ.js +1 -0
- package/dist/assets/provider-scoped-model-input-DXzjr5l0.js +1 -0
- package/dist/assets/providers-config-page-CaO8WfZH.js +1 -0
- package/dist/assets/{quadrantDiagram-ABIIQ3AL-CwE6F-_2.js → quadrantDiagram-ABIIQ3AL-H0ZuvnZL.js} +1 -1
- package/dist/assets/radar-I7S5WNFK-D-NNGh1k.js +1 -0
- package/dist/assets/railroad-3IZDKUUU-C67_uDaM.js +1 -0
- package/dist/assets/railroad-abnf-AHOZXSZD-BZ8Yflnd.js +1 -0
- package/dist/assets/railroad-ebnf-EBAXGLYW-B7zO7RoK.js +1 -0
- package/dist/assets/railroad-peg-LSFZ7HO6-R63PTgLz.js +1 -0
- package/dist/assets/{railroadDiagram-RFXS5EU6-xgLekU3B.js → railroadDiagram-RFXS5EU6-D7Y2EqSd.js} +1 -1
- package/dist/assets/react-C8XFFvuz.js +8 -0
- package/dist/assets/{refresh-cw-j2bl79Ea.js → refresh-cw-a2VVeeAF.js} +1 -1
- package/dist/assets/remote-BJHXa4mB.js +1 -0
- package/dist/assets/{requirementDiagram-TGXJPOKE-CyVUzEX5.js → requirementDiagram-TGXJPOKE-BiXNX1NN.js} +1 -1
- package/dist/assets/rotate-cw-DJ7UF3F2.js +1 -0
- package/dist/assets/runtime-config-page-BuA4A02z.js +1 -0
- package/dist/assets/{sankeyDiagram-HTMAVEWB-JK6bFmYB.js → sankeyDiagram-HTMAVEWB-qzDeLztW.js} +1 -1
- package/dist/assets/{save-BKNrtK81.js → save-CGm23Yww.js} +1 -1
- package/dist/assets/{search-CkOm65W_.js → search-CH2t--sH.js} +1 -1
- package/dist/assets/search-config-page-BAmYqoAz.js +1 -0
- package/dist/assets/{secrets-config-page-CJjtdFAl.js → secrets-config-page-BlPOuql_.js} +2 -2
- package/dist/assets/security-config-CbDiY2xr.js +1 -0
- package/dist/assets/{select-Ea7ffKCE.js → select-DnxxDpcV.js} +2 -2
- package/dist/assets/{sequenceDiagram-DBY2YBRQ-BR5IokXV.js → sequenceDiagram-DBY2YBRQ-BtRbPQtL.js} +1 -1
- package/dist/assets/{settings-2-CtyN3m_V.js → settings-2-agnMYc8a.js} +1 -1
- package/dist/assets/{sizeCapture-X5ZJPWSS-SxG_YnMA.js → sizeCapture-X5ZJPWSS-CMYvM3SL.js} +1 -1
- package/dist/assets/skeleton-XpqeWL62.js +1 -0
- package/dist/assets/{src-vgz8E_-O.js → src-Bw-mzbQb.js} +1 -1
- package/dist/assets/{stateDiagram-2N3HPSRC-DD4OoYhn.js → stateDiagram-2N3HPSRC-BJ-mFeOz.js} +1 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-BE-HqxOK.js +1 -0
- package/dist/assets/{swimlanes-5IMT3BWC-BWkFeyCT.js → swimlanes-5IMT3BWC-BsucVOO2.js} +2 -2
- package/dist/assets/swimlanesDiagram-G3AALYLV-Dr1H9LJH.js +8 -0
- package/dist/assets/{tag-chip-C9l4xsKp.js → tag-chip-CPOc8b2N.js} +1 -1
- package/dist/assets/{timeline-definition-FHXFAJF6-VTRPy6KA.js → timeline-definition-FHXFAJF6-Bicewlzo.js} +1 -1
- package/dist/assets/treeView-QDETBFTQ-npJ5dbqS.js +1 -0
- package/dist/assets/treemap-6X3UGDF4-pYrBx6oa.js +1 -0
- package/dist/assets/{vennDiagram-L72KCM5P-Bvk42Pek.js → vennDiagram-L72KCM5P-BxOOnO9x.js} +1 -1
- package/dist/assets/wardley-OPB4EBWU-CmSRKLR8.js +1 -0
- package/dist/assets/{wardleyDiagram-EHGQE667-DOFjx2s3.js → wardleyDiagram-EHGQE667-Cl7NltMv.js} +1 -1
- package/dist/assets/x-odTHAtLZ.js +1 -0
- package/dist/assets/{xychartDiagram-FW5EYKEG-DY5yRTUc.js → xychartDiagram-FW5EYKEG-DiMIxQ7N.js} +1 -1
- package/dist/index.html +21 -22
- package/package.json +6 -6
- package/src/features/apps/components/__tests__/app-packages-panel.test.tsx +234 -0
- package/src/features/apps/components/app-marketplace-dialog.tsx +262 -0
- package/src/features/apps/components/app-package-card.tsx +268 -0
- package/src/features/apps/components/app-packages-panel.tsx +301 -0
- package/src/features/apps/components/apps-panel.tsx +11 -4
- package/src/features/apps/hooks/use-app-marketplace.ts +95 -0
- package/src/features/apps/hooks/use-app-packages.ts +59 -0
- package/src/features/chat/components/chat-sidebar-list-mode-switch.tsx +27 -4
- package/src/features/chat/components/layout/__tests__/chat-sidebar-session-area.test.tsx +36 -5
- package/src/features/chat/components/layout/chat-sidebar-desktop-layout.tsx +12 -13
- package/src/features/chat/features/conversation/components/__tests__/session-conversation-area.test.tsx +49 -1
- package/src/features/chat/features/conversation/components/__tests__/session-conversation-input.streaming.test.tsx +4 -4
- package/src/features/chat/features/conversation/components/session-conversation-area.tsx +25 -4
- package/src/features/chat/features/conversation/components/session-conversation-input.tsx +3 -0
- package/src/features/chat/features/conversation/hooks/use-system-object-reference-select.ts +27 -0
- package/src/features/chat/features/conversation/utils/session-message-composer.utils.ts +5 -0
- package/src/features/chat/features/input/hooks/__tests__/use-chat-input-surface-state.test.tsx +102 -0
- package/src/features/chat/features/input/hooks/use-chat-input-surface-state.ts +71 -120
- package/src/features/chat/features/input/input-surface-plugins/__tests__/context-reference-plugin.test.ts +265 -18
- package/src/features/chat/features/input/input-surface-plugins/chat-input-product-plugin-adapters.types.ts +7 -2
- package/src/features/chat/features/input/input-surface-plugins/chat-input-product-plugin-adapters.utils.ts +124 -0
- package/src/features/chat/features/input/input-surface-plugins/context-reference-items.utils.ts +99 -15
- package/src/features/chat/features/input/input-surface-plugins/context-reference-plugin.utils.ts +143 -139
- package/src/features/chat/features/input/input-surface-plugins/panel-app-input-surface-items.utils.ts +116 -0
- package/src/features/chat/features/input/input-surface-plugins/slash-command-plugin.utils.ts +1 -1
- package/src/features/chat/features/input/utils/__tests__/chat-inline-token.utils.test.ts +53 -1
- package/src/features/chat/features/input/utils/chat-composer-token-protocol.utils.ts +5 -0
- package/src/features/chat/features/input/utils/chat-inline-token-composer.utils.ts +134 -0
- package/src/features/chat/features/input/utils/chat-inline-token.utils.ts +30 -101
- package/src/features/chat/features/input/utils/chat-system-object-reference.utils.test.ts +44 -0
- package/src/features/chat/features/input/utils/chat-system-object-reference.utils.ts +46 -0
- package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-panel-content.test.tsx +82 -2
- package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-text-selection.test.tsx +12 -8
- package/src/features/chat/features/workspace/components/chat-session-workspace-directory-browser.tsx +24 -12
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-content.tsx +9 -2
- package/src/features/chat/features/workspace/components/project-files/workspace-directory-tree.tsx +52 -4
- package/src/features/chat/features/workspace/hooks/use-workspace-explorer-layout.ts +8 -11
- package/src/features/chat/features/workspace/hooks/use-workspace-file-actions.ts +68 -46
- package/src/features/chat/index.ts +1 -1
- package/src/features/chat/managers/chat-draft-intent.manager.ts +18 -2
- package/src/features/chat/stores/__tests__/chat-thread.store.test.ts +6 -0
- package/src/features/chat/stores/chat-thread.store.ts +6 -0
- package/src/features/inbox/components/inbox-reader-dialog.test.tsx +38 -5
- package/src/features/inbox/components/inbox-reader-dialog.tsx +5 -3
- package/src/features/inbox/managers/inbox.manager.test.ts +28 -3
- package/src/features/inbox/managers/inbox.manager.ts +14 -4
- package/src/features/inbox/pages/inbox-page.test.ts +121 -2
- package/src/features/inbox/pages/inbox-page.tsx +5 -3
- package/src/features/marketplace/components/__tests__/marketplace-page.test.tsx +85 -1
- package/src/features/marketplace/hooks/__tests__/use-marketplace.test.tsx +44 -1
- package/src/features/marketplace/hooks/use-marketplace-item-actions.ts +23 -2
- package/src/features/marketplace/hooks/use-marketplace.ts +10 -0
- package/src/features/marketplace/index.ts +4 -0
- package/src/features/panel-apps/index.ts +5 -1
- package/src/features/panel-apps/utils/__tests__/panel-app-doc-browser.utils.test.ts +13 -6
- package/src/features/panel-apps/utils/panel-app-doc-browser.utils.tsx +6 -3
- package/src/features/right-panel-resources/index.ts +1 -0
- package/src/features/right-panel-resources/utils/right-panel-resource-uri.utils.ts +7 -4
- package/src/features/system-status/components/__tests__/desktop-update-config.test.tsx +20 -1
- package/src/features/system-status/components/desktop-update-config.tsx +14 -13
- package/src/features/system-status/managers/__tests__/runtime-update.manager.test.ts +99 -0
- package/src/features/system-status/managers/runtime-update.manager.ts +22 -0
- package/src/features/system-status/stores/runtime-update.store.ts +1 -0
- package/src/shared/components/ui/actions/__tests__/icon-action-button.test.tsx +15 -0
- package/src/shared/components/ui/actions/icon-action-button.tsx +4 -2
- package/src/shared/hooks/use-system-object-references.ts +22 -0
- package/src/shared/lib/api/types.ts +10 -0
- package/src/shared/lib/i18n/locales/en-US/chat.json +16 -9
- package/src/shared/lib/i18n/locales/en-US/desktop-update.json +7 -4
- package/src/shared/lib/i18n/locales/en-US/doc-browser.json +40 -0
- package/src/shared/lib/i18n/locales/en-US/marketplace.json +3 -0
- package/src/shared/lib/i18n/locales/zh-CN/chat.json +18 -11
- package/src/shared/lib/i18n/locales/zh-CN/desktop-update.json +7 -4
- package/src/shared/lib/i18n/locales/zh-CN/doc-browser.json +40 -0
- package/src/shared/lib/i18n/locales/zh-CN/marketplace.json +3 -0
- package/dist/assets/appearance-settings-page-BYbvl2wj.js +0 -1
- package/dist/assets/architecture-TIHT7OUA-Bjp9jf0h.js +0 -1
- package/dist/assets/channel-5T3pdR-s.js +0 -1
- package/dist/assets/chat-page-C5E-LLVd.js +0 -1
- package/dist/assets/chunk-2Q5K7J3B-DTZ3tGfE.js +0 -1
- package/dist/assets/chunk-VAUOI2AC-HLGIHQ6k.js +0 -1
- package/dist/assets/chunk-XXDRQBXY-Dl0m6Ni-.js +0 -1
- package/dist/assets/classDiagram-OUVF2IWQ-DcDnzGNX.js +0 -1
- package/dist/assets/classDiagram-v2-EOCWNBFH-BKXKMzKM.js +0 -1
- package/dist/assets/config-split-page-CA_a0AJ5.js +0 -1
- package/dist/assets/confirm-dialog-CxZfenjK.js +0 -5
- package/dist/assets/cynefin-VYW2F7L2-BWg7U2UD.js +0 -1
- package/dist/assets/desktop-update-config-BEKC8Ly9.js +0 -1
- package/dist/assets/doc-browser-Cl2ldE3f.js +0 -1
- package/dist/assets/doc-browser-DXCSd63E.js +0 -1
- package/dist/assets/doc-browser-context-FDPs3gJf.js +0 -1
- package/dist/assets/eventmodeling-45OFAUF4-SB-J4tpq.js +0 -1
- package/dist/assets/flowDiagram-23GEKE2U-BQ_u-eLM.js +0 -1
- package/dist/assets/form-actions-0c0aw_bl.js +0 -1
- package/dist/assets/gitGraph-TEB2WS4Q-DPxNwsFd.js +0 -1
- package/dist/assets/i18n-provider-DkITJNz8.js +0 -1
- package/dist/assets/index-CQ2LcI2p.css +0 -1
- package/dist/assets/index-CrdfvBVg.js +0 -107
- package/dist/assets/info-DKCQHKI2-DNlNGH90.js +0 -1
- package/dist/assets/loader-circle-DHtUxCIA.js +0 -1
- package/dist/assets/mcp-marketplace-page-Bc_jI5iH.js +0 -9
- package/dist/assets/mcp-marketplace-page-CzCieD9r.js +0 -1
- package/dist/assets/model-config-page-C4jw-pcj.js +0 -1
- package/dist/assets/packet-7NZHBO7P-BpeiqkBZ.js +0 -1
- package/dist/assets/pie-RZYD4A2V-Cy1yxsPd.js +0 -1
- package/dist/assets/plus-CG1RwZQq.js +0 -1
- package/dist/assets/provider-scoped-model-input-CmH4BFvc.js +0 -1
- package/dist/assets/providers-config-page-CJQjwzaw.js +0 -1
- package/dist/assets/radar-I7S5WNFK-CEcPKCj8.js +0 -1
- package/dist/assets/railroad-3IZDKUUU-CW38eNDs.js +0 -1
- package/dist/assets/railroad-abnf-AHOZXSZD-ByrylcXf.js +0 -1
- package/dist/assets/railroad-ebnf-EBAXGLYW-CNB6GwP-.js +0 -1
- package/dist/assets/railroad-peg-LSFZ7HO6-x6hnqlBG.js +0 -1
- package/dist/assets/react-DjFBVA0n.js +0 -8
- package/dist/assets/remote-BIlpD3yL.js +0 -1
- package/dist/assets/rotate-cw-bKG8zH8M.js +0 -1
- package/dist/assets/runtime-config-page-B_x2Glz5.js +0 -1
- package/dist/assets/search-config-page-BaIijtmO.js +0 -1
- package/dist/assets/security-config-DB8apj09.js +0 -1
- package/dist/assets/skeleton-Bt6zxcAB.js +0 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-ZC6dFORv.js +0 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-CRkh51Im.js +0 -8
- package/dist/assets/treeView-QDETBFTQ-Bw0DSCH7.js +0 -1
- package/dist/assets/treemap-6X3UGDF4-DFWBFcfh.js +0 -1
- package/dist/assets/wardley-OPB4EBWU-CoWturk0.js +0 -1
- package/dist/assets/x-CowtCu9Z.js +0 -1
- /package/dist/assets/{array-NADKd9aU.js → array-BQVzeGRt.js} +0 -0
- /package/dist/assets/{chunk-KEIR6QF5-BuyuzJJL.js → chunk-KEIR6QF5-f9psyCXK.js} +0 -0
- /package/dist/assets/{chunk-Y2CYZVJY-D_B2ZRNt.js → chunk-Y2CYZVJY-D1mAU_Po.js} +0 -0
- /package/dist/assets/{config-hints-BcfVUMij.js → config-hints-nV5HPOvq.js} +0 -0
- /package/dist/assets/{cytoscape.esm-BANTlgza.js → cytoscape.esm-0uDtdD0l.js} +0 -0
- /package/dist/assets/{defaultLocale-C4_L0aEs.js → defaultLocale-DSWXGgt0.js} +0 -0
- /package/dist/assets/{dist-DAPEIJbz.js → dist--ta5rX12.js} +0 -0
- /package/dist/assets/{graphlib-ChqXg0dI.js → graphlib-CQ6QV4yP.js} +0 -0
- /package/dist/assets/{host-capabilities-D9C4CBK5.js → host-capabilities-Tk038i04.js} +0 -0
- /package/dist/assets/{init-D8wZg9xq.js → init-Y6h9jGtZ.js} +0 -0
- /package/dist/assets/{jszip.min-CkbBfwAQ.js → jszip.min-8hyJpgpx.js} +0 -0
- /package/dist/assets/{katex-TZJFa0J_.js → katex-ARhY9PS1.js} +0 -0
- /package/dist/assets/{middleware-B3k-TSmZ.js → middleware-DXsbf9xI.js} +0 -0
- /package/dist/assets/{path-DodfxcX7.js → path-10BjdyLh.js} +0 -0
- /package/dist/assets/{rough.esm-CUaa1Rbe.js → rough.esm-DxgC_14r.js} +0 -0
- /package/dist/assets/{xlsx-CxByi7bR.js → xlsx-DrDuDNAa.js} +0 -0
|
@@ -16,13 +16,15 @@ import {
|
|
|
16
16
|
type ReleaseNotesLocale,
|
|
17
17
|
type ReleaseNotesSection
|
|
18
18
|
} from '@/features/system-status/utils/update-release-notes.utils';
|
|
19
|
-
import {
|
|
19
|
+
import { RefreshCw, RotateCw } from 'lucide-react';
|
|
20
20
|
|
|
21
21
|
const STATUS_LABEL_KEYS: Record<string, string> = {
|
|
22
22
|
checking: 'desktopUpdatesStatusChecking',
|
|
23
23
|
'update-available': 'desktopUpdatesStatusAvailable',
|
|
24
24
|
downloading: 'desktopUpdatesStatusDownloading',
|
|
25
25
|
downloaded: 'desktopUpdatesStatusDownloaded',
|
|
26
|
+
applying: 'desktopUpdatesStatusApplying',
|
|
27
|
+
'restart-required': 'desktopUpdatesStatusRestartRequired',
|
|
26
28
|
'up-to-date': 'desktopUpdatesStatusUpToDate',
|
|
27
29
|
blocked: 'desktopUpdatesStatusBlocked',
|
|
28
30
|
failed: 'desktopUpdatesStatusFailed',
|
|
@@ -103,7 +105,7 @@ function getStatusLabel(snapshot: UpdateSnapshot): string {
|
|
|
103
105
|
return t(STATUS_LABEL_KEYS[snapshot.status] ?? 'desktopUpdatesStatusIdle');
|
|
104
106
|
}
|
|
105
107
|
function getStatusTone(status: string): string {
|
|
106
|
-
if (status === 'downloaded') {
|
|
108
|
+
if (status === 'downloaded' || status === 'restart-required') {
|
|
107
109
|
return 'bg-emerald-50 text-emerald-700 ring-emerald-100';
|
|
108
110
|
}
|
|
109
111
|
if (status === 'update-available' || status === 'downloading' || status === 'checking') {
|
|
@@ -218,9 +220,12 @@ export function DesktopUpdateConfig() {
|
|
|
218
220
|
const isChecking = busyAction === 'checking';
|
|
219
221
|
const isDownloading = busyAction === 'downloading';
|
|
220
222
|
const isApplying = busyAction === 'applying';
|
|
223
|
+
const isUpdating = busyAction === 'updating';
|
|
221
224
|
const isSwitchingChannel = busyAction === 'switching-channel';
|
|
222
|
-
const
|
|
223
|
-
|
|
225
|
+
const canUpdate = (snapshot.status === 'update-available' || snapshot.status === 'downloaded')
|
|
226
|
+
&& !isDownloading
|
|
227
|
+
&& !isApplying
|
|
228
|
+
&& !isUpdating;
|
|
224
229
|
const overviewStats = [
|
|
225
230
|
[t('runtimeUpdatesHostVersion'), formatVersion(snapshot.hostVersion)],
|
|
226
231
|
[t('desktopUpdatesCurrentBundleVersion'), formatVersion(snapshot.currentVersion)],
|
|
@@ -232,7 +237,7 @@ export function DesktopUpdateConfig() {
|
|
|
232
237
|
<SettingsPage
|
|
233
238
|
title={t('runtimeUpdatesPageTitle')}
|
|
234
239
|
description={t('runtimeUpdatesPageDescription')}
|
|
235
|
-
actions={<Button variant='outline' onClick={() => void runtimeUpdateManager.checkForUpdates()} disabled={isChecking || isDownloading || isApplying}><RefreshCw className={cn('mr-2 h-4 w-4', isChecking && 'animate-spin')} />{t('desktopUpdatesCheckNow')}</Button>}
|
|
240
|
+
actions={<Button variant='outline' onClick={() => void runtimeUpdateManager.checkForUpdates()} disabled={isChecking || isDownloading || isApplying || isUpdating}><RefreshCw className={cn('mr-2 h-4 w-4', isChecking && 'animate-spin')} />{t('desktopUpdatesCheckNow')}</Button>}
|
|
236
241
|
>
|
|
237
242
|
<SettingsSection title={t('desktopUpdatesOverviewTitle')} description={t('desktopUpdatesOverviewDescription')}>
|
|
238
243
|
<SettingsGroup>
|
|
@@ -278,7 +283,7 @@ export function DesktopUpdateConfig() {
|
|
|
278
283
|
layout='stacked'
|
|
279
284
|
>
|
|
280
285
|
<div className='space-y-2'>
|
|
281
|
-
<Select value={snapshot.channel} disabled={isSwitchingChannel || isChecking || isDownloading || isApplying} onValueChange={(value) => void runtimeUpdateManager.updateChannel(value as UpdateSnapshot['channel'])}>
|
|
286
|
+
<Select value={snapshot.channel} disabled={isSwitchingChannel || isChecking || isDownloading || isApplying || isUpdating} onValueChange={(value) => void runtimeUpdateManager.updateChannel(value as UpdateSnapshot['channel'])}>
|
|
282
287
|
<SelectTrigger className='w-full max-w-sm'>
|
|
283
288
|
<SelectValue placeholder={t('desktopUpdatesReleaseChannel')} />
|
|
284
289
|
</SelectTrigger>
|
|
@@ -295,16 +300,12 @@ export function DesktopUpdateConfig() {
|
|
|
295
300
|
<SettingsSection title={t('desktopUpdatesActionsTitle')} description={t('runtimeUpdatesActionsDescription')}>
|
|
296
301
|
<SettingsGroup>
|
|
297
302
|
<div className='flex flex-wrap items-center gap-3 p-4'>
|
|
298
|
-
<Button variant='outline' onClick={() => void runtimeUpdateManager.checkForUpdates()} disabled={isChecking || isDownloading || isApplying}>
|
|
303
|
+
<Button variant='outline' onClick={() => void runtimeUpdateManager.checkForUpdates()} disabled={isChecking || isDownloading || isApplying || isUpdating}>
|
|
299
304
|
<RefreshCw className={cn('mr-2 h-4 w-4', isChecking && 'animate-spin')} />
|
|
300
305
|
{t('desktopUpdatesCheckNow')}
|
|
301
306
|
</Button>
|
|
302
|
-
<Button onClick={() => void runtimeUpdateManager.
|
|
303
|
-
<
|
|
304
|
-
{t('desktopUpdatesDownloadNow')}
|
|
305
|
-
</Button>
|
|
306
|
-
<Button variant='secondary' onClick={() => void runtimeUpdateManager.applyDownloadedUpdate()} disabled={!canApply}>
|
|
307
|
-
<RotateCw className={cn('mr-2 h-4 w-4', isApplying && 'animate-spin')} />
|
|
307
|
+
<Button onClick={() => void runtimeUpdateManager.updateNow()} disabled={!canUpdate}>
|
|
308
|
+
<RotateCw className={cn('mr-2 h-4 w-4', isUpdating && 'animate-spin')} />
|
|
308
309
|
{t('runtimeUpdatesApplyNow')}
|
|
309
310
|
</Button>
|
|
310
311
|
</div>
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { UpdateSnapshot } from '@nextclaw/shared';
|
|
2
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import { RuntimeUpdateManager } from '@/features/system-status/managers/runtime-update.manager';
|
|
4
|
+
import { useRuntimeUpdateStore } from '@/features/system-status/stores/runtime-update.store';
|
|
5
|
+
|
|
6
|
+
const mocks = vi.hoisted(() => ({
|
|
7
|
+
applyRuntimeUpdate: vi.fn(),
|
|
8
|
+
checkRuntimeUpdate: vi.fn(),
|
|
9
|
+
downloadRuntimeUpdate: vi.fn(),
|
|
10
|
+
fetchRuntimeUpdate: vi.fn(),
|
|
11
|
+
updateRuntimeUpdateChannel: vi.fn()
|
|
12
|
+
}));
|
|
13
|
+
|
|
14
|
+
vi.mock('@/shared/lib/api', () => mocks);
|
|
15
|
+
|
|
16
|
+
const createSnapshot = (patch: Partial<UpdateSnapshot> = {}): UpdateSnapshot => ({
|
|
17
|
+
status: 'update-available',
|
|
18
|
+
installationKind: 'npm-runtime-bundle',
|
|
19
|
+
channel: 'stable',
|
|
20
|
+
hostVersion: '0.30.0',
|
|
21
|
+
currentVersion: '0.30.0',
|
|
22
|
+
availableVersion: '0.31.0',
|
|
23
|
+
downloadedVersion: null,
|
|
24
|
+
minimumHostVersion: null,
|
|
25
|
+
releaseNotesUrl: null,
|
|
26
|
+
lastCheckedAt: null,
|
|
27
|
+
progress: null,
|
|
28
|
+
canApplyInApp: false,
|
|
29
|
+
requiresRestart: false,
|
|
30
|
+
blockReason: null,
|
|
31
|
+
recoveryCommand: null,
|
|
32
|
+
errorMessage: null,
|
|
33
|
+
...patch
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
describe('RuntimeUpdateManager', () => {
|
|
37
|
+
beforeEach(() => {
|
|
38
|
+
vi.clearAllMocks();
|
|
39
|
+
useRuntimeUpdateStore.setState({
|
|
40
|
+
supported: false,
|
|
41
|
+
initialized: false,
|
|
42
|
+
busyAction: null,
|
|
43
|
+
snapshot: null
|
|
44
|
+
});
|
|
45
|
+
mocks.fetchRuntimeUpdate.mockResolvedValue(createSnapshot());
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('downloads and applies an available update from one user action', async () => {
|
|
49
|
+
const downloaded = createSnapshot({
|
|
50
|
+
status: 'downloaded',
|
|
51
|
+
downloadedVersion: '0.31.0',
|
|
52
|
+
canApplyInApp: true
|
|
53
|
+
});
|
|
54
|
+
const applied = createSnapshot({
|
|
55
|
+
status: 'restart-required',
|
|
56
|
+
availableVersion: null,
|
|
57
|
+
downloadedVersion: null,
|
|
58
|
+
requiresRestart: true
|
|
59
|
+
});
|
|
60
|
+
mocks.downloadRuntimeUpdate.mockResolvedValue(downloaded);
|
|
61
|
+
mocks.applyRuntimeUpdate.mockResolvedValue(applied);
|
|
62
|
+
const manager = new RuntimeUpdateManager();
|
|
63
|
+
await manager.start();
|
|
64
|
+
|
|
65
|
+
await manager.updateNow();
|
|
66
|
+
|
|
67
|
+
expect(mocks.downloadRuntimeUpdate).toHaveBeenCalledTimes(1);
|
|
68
|
+
expect(mocks.applyRuntimeUpdate).toHaveBeenCalledTimes(1);
|
|
69
|
+
expect(useRuntimeUpdateStore.getState()).toMatchObject({
|
|
70
|
+
busyAction: null,
|
|
71
|
+
snapshot: applied
|
|
72
|
+
});
|
|
73
|
+
manager.stop();
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('resumes a downloaded update without downloading it again', async () => {
|
|
77
|
+
const downloaded = createSnapshot({
|
|
78
|
+
status: 'downloaded',
|
|
79
|
+
downloadedVersion: '0.31.0',
|
|
80
|
+
canApplyInApp: true
|
|
81
|
+
});
|
|
82
|
+
const applied = createSnapshot({
|
|
83
|
+
status: 'restart-required',
|
|
84
|
+
availableVersion: null,
|
|
85
|
+
downloadedVersion: null,
|
|
86
|
+
requiresRestart: true
|
|
87
|
+
});
|
|
88
|
+
mocks.fetchRuntimeUpdate.mockResolvedValue(downloaded);
|
|
89
|
+
mocks.applyRuntimeUpdate.mockResolvedValue(applied);
|
|
90
|
+
const manager = new RuntimeUpdateManager();
|
|
91
|
+
await manager.start();
|
|
92
|
+
|
|
93
|
+
await manager.updateNow();
|
|
94
|
+
|
|
95
|
+
expect(mocks.downloadRuntimeUpdate).not.toHaveBeenCalled();
|
|
96
|
+
expect(mocks.applyRuntimeUpdate).toHaveBeenCalledTimes(1);
|
|
97
|
+
manager.stop();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
@@ -208,6 +208,28 @@ export class RuntimeUpdateManager {
|
|
|
208
208
|
}
|
|
209
209
|
};
|
|
210
210
|
|
|
211
|
+
updateNow = async () => {
|
|
212
|
+
const initialSnapshot = useRuntimeUpdateStore.getState().snapshot;
|
|
213
|
+
if (initialSnapshot?.status !== 'update-available' && initialSnapshot?.status !== 'downloaded') {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
try {
|
|
218
|
+
await this.runSnapshotCommand('updating', t('runtimeUpdatesUpdateFailed'), async (source) => {
|
|
219
|
+
const downloadedSnapshot = initialSnapshot.status === 'downloaded'
|
|
220
|
+
? initialSnapshot
|
|
221
|
+
: await source.downloadUpdate();
|
|
222
|
+
useRuntimeUpdateStore.setState({ snapshot: downloadedSnapshot });
|
|
223
|
+
if (downloadedSnapshot.status !== 'downloaded') {
|
|
224
|
+
return downloadedSnapshot;
|
|
225
|
+
}
|
|
226
|
+
return await source.applyDownloadedUpdate();
|
|
227
|
+
});
|
|
228
|
+
} catch {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
|
|
211
233
|
updateChannel = async (channel: UpdateSnapshot['channel']) => {
|
|
212
234
|
const currentChannel = useRuntimeUpdateStore.getState().snapshot?.channel;
|
|
213
235
|
if (currentChannel === channel) {
|
|
@@ -34,6 +34,21 @@ describe('IconActionButton', () => {
|
|
|
34
34
|
expect(button.className).toContain('hover:bg-[var(--interaction-hover)]');
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
+
it('uses surface-relative feedback without introducing a new surface', () => {
|
|
38
|
+
render(
|
|
39
|
+
<IconActionButton
|
|
40
|
+
tone="surface"
|
|
41
|
+
icon={<span data-testid="icon" />}
|
|
42
|
+
label="Add project"
|
|
43
|
+
/>,
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
const button = screen.getByRole('button', { name: 'Add project' });
|
|
47
|
+
expect(button.className).toContain('hover:bg-gray-200/60');
|
|
48
|
+
expect(button.className).toContain('hover:text-gray-900');
|
|
49
|
+
expect(button.className).toContain('active:bg-gray-200/80');
|
|
50
|
+
});
|
|
51
|
+
|
|
37
52
|
it('ignores restored pointer focus while preserving keyboard tooltip focus', () => {
|
|
38
53
|
render(
|
|
39
54
|
<IconActionButton
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import { cn } from '@/shared/lib/utils';
|
|
9
9
|
|
|
10
10
|
type IconActionButtonSize = 'sm' | 'md' | 'lg';
|
|
11
|
-
type IconActionButtonTone = 'default' | 'strong';
|
|
11
|
+
type IconActionButtonTone = 'default' | 'surface' | 'strong';
|
|
12
12
|
|
|
13
13
|
type IconActionButtonProps = Omit<
|
|
14
14
|
React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
@@ -17,7 +17,7 @@ type IconActionButtonProps = Omit<
|
|
|
17
17
|
icon: React.ReactNode;
|
|
18
18
|
label: string;
|
|
19
19
|
size?: IconActionButtonSize;
|
|
20
|
-
/** default:
|
|
20
|
+
/** default: global interaction hover. surface: relative feedback on the current surface. strong: denser feedback for nested hover surfaces. */
|
|
21
21
|
tone?: IconActionButtonTone;
|
|
22
22
|
tooltip?: string | false | null;
|
|
23
23
|
tooltipSide?: 'top' | 'right' | 'bottom' | 'left';
|
|
@@ -32,6 +32,8 @@ const SIZE_CLASS: Record<IconActionButtonSize, string> = {
|
|
|
32
32
|
const TONE_CLASS: Record<IconActionButtonTone, string> = {
|
|
33
33
|
default:
|
|
34
34
|
'text-muted-foreground hover:bg-[var(--interaction-hover)] hover:text-accent-foreground disabled:text-muted-foreground/45 disabled:hover:bg-transparent disabled:hover:text-muted-foreground/45',
|
|
35
|
+
surface:
|
|
36
|
+
'text-muted-foreground hover:bg-gray-200/60 hover:text-gray-900 active:bg-gray-200/80 disabled:text-muted-foreground/45 disabled:hover:bg-transparent disabled:hover:text-muted-foreground/45',
|
|
35
37
|
strong:
|
|
36
38
|
'text-muted-foreground hover:bg-black/10 hover:text-foreground disabled:text-muted-foreground/45 disabled:hover:bg-transparent disabled:hover:text-muted-foreground/45',
|
|
37
39
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { nextclawClient } from '@/shared/lib/api';
|
|
3
|
+
|
|
4
|
+
export function useSystemObjectReferences(params: {
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
query: string;
|
|
7
|
+
limit?: number;
|
|
8
|
+
objectType?: string;
|
|
9
|
+
}) {
|
|
10
|
+
const { enabled, limit, objectType } = params;
|
|
11
|
+
const query = params.query.trim();
|
|
12
|
+
return useQuery({
|
|
13
|
+
queryKey: ['system-object-references', objectType ?? null, query, limit ?? null],
|
|
14
|
+
queryFn: () => nextclawClient.systemObjectReferences.list({
|
|
15
|
+
query: query || undefined,
|
|
16
|
+
limit,
|
|
17
|
+
objectType,
|
|
18
|
+
}),
|
|
19
|
+
enabled,
|
|
20
|
+
staleTime: 10_000,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
@@ -6,6 +6,13 @@ export type {
|
|
|
6
6
|
ProjectListView,
|
|
7
7
|
ProjectTemplateView,
|
|
8
8
|
ProjectView,
|
|
9
|
+
SystemObjectReferenceDisplayText,
|
|
10
|
+
SystemObjectReferenceGroupDescriptor,
|
|
11
|
+
SystemObjectReferenceGroupIcon,
|
|
12
|
+
SystemObjectReferenceGroupView,
|
|
13
|
+
SystemObjectReferenceItem,
|
|
14
|
+
SystemObjectReferenceListView,
|
|
15
|
+
SystemObjectResolvedReference,
|
|
9
16
|
} from '@nextclaw/client-sdk';
|
|
10
17
|
export type {
|
|
11
18
|
SessionEntryView,
|
|
@@ -461,6 +468,9 @@ export type PanelAppEntryView = {
|
|
|
461
468
|
clientGranted: boolean;
|
|
462
469
|
lastOpenedAt?: string;
|
|
463
470
|
openCount: number;
|
|
471
|
+
sourceKind?: 'workspace' | 'package';
|
|
472
|
+
packageId?: string;
|
|
473
|
+
packageVersion?: string;
|
|
464
474
|
};
|
|
465
475
|
|
|
466
476
|
export type PanelAppListView = {
|
|
@@ -290,20 +290,27 @@
|
|
|
290
290
|
"chatPanelAppReferenceNoDescription": "No panel app description",
|
|
291
291
|
"chatContextReferenceLoading": "Searching references...",
|
|
292
292
|
"chatContextReferenceSection": "References",
|
|
293
|
-
"chatContextReferenceNoResult": "No matching files, folders, projects, or panel apps",
|
|
294
|
-
"chatContextReferenceHint": "Type @ to reference a file, folder, project, or panel app",
|
|
293
|
+
"chatContextReferenceNoResult": "No matching system objects, files, folders, projects, or panel apps",
|
|
294
|
+
"chatContextReferenceHint": "Type @ to reference a system object, file, folder, project, or panel app",
|
|
295
295
|
"chatContextReferenceItemHint": "Press Enter to add this reference.",
|
|
296
|
-
"chatContextReferenceFilesLabel": "Files
|
|
297
|
-
"chatContextReferenceFilesType": "Project
|
|
298
|
-
"chatContextReferenceFilesDescription": "
|
|
299
|
-
"chatContextReferenceFilesHint": "Press Enter to browse files
|
|
296
|
+
"chatContextReferenceFilesLabel": "Files",
|
|
297
|
+
"chatContextReferenceFilesType": "Project Files",
|
|
298
|
+
"chatContextReferenceFilesDescription": "Browse and reference files in the current project.",
|
|
299
|
+
"chatContextReferenceFilesHint": "Press Enter to browse files.",
|
|
300
|
+
"chatContextReferenceFoldersLabel": "Folders",
|
|
301
|
+
"chatContextReferenceFoldersType": "Project Folders",
|
|
302
|
+
"chatContextReferenceFoldersDescription": "Browse and reference folders in the current project.",
|
|
303
|
+
"chatContextReferenceFoldersHint": "Press Enter to browse folders.",
|
|
300
304
|
"chatContextReferenceBack": "Back to all references",
|
|
301
|
-
"chatContextReferenceBackDescription": "Return to the unified file, folder, project, and panel app reference menu.",
|
|
305
|
+
"chatContextReferenceBackDescription": "Return to the unified system object, file, folder, project, and panel app reference menu.",
|
|
302
306
|
"chatContextReferenceBackHint": "Press Enter to go back.",
|
|
303
307
|
"chatContextReferenceParent": "Up one folder",
|
|
304
308
|
"chatContextReferenceParentDescription": "Browse the parent folder without closing the reference menu.",
|
|
305
309
|
"chatContextReferenceParentHint": "Press Enter to open the parent folder.",
|
|
306
310
|
"chatContextReferenceCurrentDirectory": "Reference current folder",
|
|
311
|
+
"chatSystemObjectSection": "System Objects",
|
|
312
|
+
"chatSystemObjectGroupHint": "Press Enter to browse this category.",
|
|
313
|
+
"chatSystemObjectResolveFailed": "Could not reference system object",
|
|
307
314
|
"chatContextReferenceFileDescription": "Use this file as explicit context for the current message.",
|
|
308
315
|
"chatContextReferenceDirectoryDescription": "Use this folder as a context scope for the current message.",
|
|
309
316
|
"chatContextReferenceProjectsLabel": "Projects",
|
|
@@ -316,8 +323,7 @@
|
|
|
316
323
|
"chatContextReferenceProjectSection": "Projects",
|
|
317
324
|
"chatContextReferenceProjectsLoadFailed": "Failed to load projects",
|
|
318
325
|
"chatContextReferenceProjectRoot": "Project directory",
|
|
319
|
-
"
|
|
320
|
-
"chatContextReferenceSearchFailed": "File search failed",
|
|
326
|
+
"chatContextReferenceSearchFailed": "Reference search failed",
|
|
321
327
|
"chatSkillScopeBuiltin": "Built-in",
|
|
322
328
|
"chatSkillScopeGlobal": "Global",
|
|
323
329
|
"chatSkillScopeProject": "Project",
|
|
@@ -484,6 +490,7 @@
|
|
|
484
490
|
"chatSidebarTaskRecords": "Sessions",
|
|
485
491
|
"chatSidebarViewTime": "Time",
|
|
486
492
|
"chatSidebarViewProject": "Project",
|
|
493
|
+
"chatSidebarViewMode": "Session list view",
|
|
487
494
|
"chatSidebarToday": "Today",
|
|
488
495
|
"chatSidebarYesterday": "Yesterday",
|
|
489
496
|
"chatSidebarPrevious7Days": "Previous 7 Days",
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"updates": "Updates",
|
|
3
3
|
"runtimeUpdatesPageTitle": "Runtime Updates",
|
|
4
|
-
"runtimeUpdatesPageDescription": "NextClaw checks every two hours; you choose when to
|
|
4
|
+
"runtimeUpdatesPageDescription": "NextClaw checks every two hours; you choose when to start each update.",
|
|
5
5
|
"runtimeUpdatesUnavailableTitle": "Updates Are Currently Unavailable",
|
|
6
6
|
"runtimeUpdatesUnavailableDescription": "This runtime environment does not currently expose an update host.",
|
|
7
7
|
"runtimeUpdatesUnavailableHint": "The update entry appears automatically once the host supports updates.",
|
|
8
8
|
"runtimeUpdatesHostVersion": "Host Version",
|
|
9
|
-
"runtimeUpdatesDownloadedBannerDescription": "Version {version} has finished downloading and is ready to
|
|
10
|
-
"runtimeUpdatesActionsDescription": "
|
|
9
|
+
"runtimeUpdatesDownloadedBannerDescription": "Version {version} has finished downloading and is ready to finish updating.",
|
|
10
|
+
"runtimeUpdatesActionsDescription": "Check manually, then complete the update in one action whenever you are ready.",
|
|
11
11
|
"runtimeUpdatesApplyNow": "Update Now",
|
|
12
12
|
"runtimeUpdatesLoadFailed": "Failed to load update state",
|
|
13
13
|
"runtimeUpdatesCheckFailed": "Failed to check for updates",
|
|
14
14
|
"runtimeUpdatesDownloadFailed": "Failed to download update",
|
|
15
15
|
"runtimeUpdatesApplyFailed": "Failed to apply update",
|
|
16
|
+
"runtimeUpdatesUpdateFailed": "Failed to update",
|
|
16
17
|
"runtimeUpdatesChannelChangeFailed": "Failed to change the release channel",
|
|
17
18
|
"runtimeUpdatesAlreadyLatest": "You already have the latest version.",
|
|
18
19
|
"runtimeUpdatesReadyToApply": "The update is ready and can be applied now.",
|
|
@@ -33,6 +34,8 @@
|
|
|
33
34
|
"desktopUpdatesStatusAvailable": "Update Available",
|
|
34
35
|
"desktopUpdatesStatusDownloading": "Downloading",
|
|
35
36
|
"desktopUpdatesStatusDownloaded": "Downloaded",
|
|
37
|
+
"desktopUpdatesStatusApplying": "Updating",
|
|
38
|
+
"desktopUpdatesStatusRestartRequired": "Restart Required",
|
|
36
39
|
"desktopUpdatesStatusUpToDate": "Up to Date",
|
|
37
40
|
"desktopUpdatesStatusBlocked": "Blocked",
|
|
38
41
|
"desktopUpdatesStatusFailed": "Failed",
|
|
@@ -64,7 +67,7 @@
|
|
|
64
67
|
"desktopUpdatesBlockedRootCause.host-too-old": "Root cause: the host is too old for this runtime bundle; upgrade the NextClaw launcher first.",
|
|
65
68
|
"desktopUpdatesBlockedRootCause.unsupported-installation": "Root cause: this installation or update source does not support auto-update; use a configured build.",
|
|
66
69
|
"desktopUpdatesChannelSettingsTitle": "Update Channel",
|
|
67
|
-
"desktopUpdatesChannelSettingsDescription": "NextClaw checks every two hours;
|
|
70
|
+
"desktopUpdatesChannelSettingsDescription": "NextClaw checks every two hours; you choose when an update starts.",
|
|
68
71
|
"desktopUpdatesReleaseChannel": "Release Channel",
|
|
69
72
|
"desktopUpdatesReleaseChannelHelp": "Stable is for everyday use, while Beta lets you try newer builds earlier with more risk.",
|
|
70
73
|
"desktopUpdatesReleaseChannelDowngradeHint": "Switching back to Stable does not force an immediate downgrade. Stable updates resume once that channel catches up with or exceeds your current version.",
|
|
@@ -29,6 +29,46 @@
|
|
|
29
29
|
"sideDockVisibilityTitle": "Show SideDock",
|
|
30
30
|
"sideDockVisibilityDescription": "Keep the right shortcut dock visible beside the workspace.",
|
|
31
31
|
"appsTitle": "Apps",
|
|
32
|
+
"appPackagesLibraryTitle": "Your apps",
|
|
33
|
+
"appPackagesLibraryDescription": "Enable apps when you need them and open them here. App data stays in a separate local directory.",
|
|
34
|
+
"appPackagesLoading": "Loading apps…",
|
|
35
|
+
"appPackagesLoadFailed": "Failed to load apps",
|
|
36
|
+
"appPackagesRefresh": "Refresh apps",
|
|
37
|
+
"appPackagesBrowse": "Browse apps",
|
|
38
|
+
"appPackagesMarketplaceTitle": "Browse Mini APPs",
|
|
39
|
+
"appPackagesMarketplaceDescription": "Discover apps from the official NextClaw registry and install them in one step.",
|
|
40
|
+
"appPackagesMarketplaceSearch": "Search apps, features, or tags",
|
|
41
|
+
"appPackagesMarketplaceLoading": "Loading the app marketplace…",
|
|
42
|
+
"appPackagesMarketplaceFailed": "The app marketplace is temporarily unavailable. You can still install from a trusted source.",
|
|
43
|
+
"appPackagesMarketplaceEmpty": "No matching apps found",
|
|
44
|
+
"appPackagesMarketplaceFeatured": "Featured",
|
|
45
|
+
"appPackagesMarketplaceDetails": "Details",
|
|
46
|
+
"appPackagesMarketplaceInstalled": "Installed",
|
|
47
|
+
"appPackagesMarketplaceTrustHint": "Apps are downloaded from the official registry. Review the app details before enabling a Service that can run local code.",
|
|
48
|
+
"appPackagesInstall": "Install app",
|
|
49
|
+
"appPackagesInstallTitle": "Install a Mini APP",
|
|
50
|
+
"appPackagesInstallDescription": "Enter a trusted .napp file, local app directory, or Marketplace install URL.",
|
|
51
|
+
"appPackagesInstallSource": "Install source",
|
|
52
|
+
"appPackagesInstallPlaceholder": "File path or https:// install URL",
|
|
53
|
+
"appPackagesInstallTrustHint": "Only install sources you trust. Apps with a Service can run local code, and start only after you enable them.",
|
|
54
|
+
"appPackagesInstalling": "Installing…",
|
|
55
|
+
"appPackagesEmptyTitle": "No apps available yet",
|
|
56
|
+
"appPackagesEmptyDescription": "Install a Mini APP, or upgrade to a NextClaw version that includes built-in apps.",
|
|
57
|
+
"appPackagesEnabled": "Enabled",
|
|
58
|
+
"appPackagesAvailable": "Available",
|
|
59
|
+
"appPackagesBuiltIn": "Built into NextClaw",
|
|
60
|
+
"appPackagesLocalService": "Local data service",
|
|
61
|
+
"appPackagesEnable": "Enable",
|
|
62
|
+
"appPackagesDisable": "Disable",
|
|
63
|
+
"appPackagesWorking": "Working…",
|
|
64
|
+
"appPackagesEnableToOpen": "Enable this app to open it",
|
|
65
|
+
"appPackagesMoreActions": "More app actions",
|
|
66
|
+
"appPackagesCheckUpdate": "Check for updates",
|
|
67
|
+
"appPackagesRollback": "Switch to",
|
|
68
|
+
"appPackagesUninstall": "Uninstall",
|
|
69
|
+
"appPackagesUninstallTitle": "Uninstall this app?",
|
|
70
|
+
"appPackagesUninstallDescription": "The app code will be removed. Personal data is kept by default so a future reinstall can continue using it.",
|
|
71
|
+
"appPackagesActionFailed": "App action failed",
|
|
32
72
|
"panelAppsTitle": "Panel Apps",
|
|
33
73
|
"panelAppsLoading": "Loading panel apps...",
|
|
34
74
|
"panelAppsLoadFailed": "Failed to load panel apps",
|
|
@@ -44,6 +44,9 @@
|
|
|
44
44
|
"marketplaceNoInstalledMcp": "No installed MCP servers found.",
|
|
45
45
|
"marketplaceUninstallTitle": "Uninstall",
|
|
46
46
|
"marketplaceUninstallDescription": "This will remove the extension. You can install it again from the marketplace.",
|
|
47
|
+
"marketplaceUpdateConflictTitle": "Overwrite local changes and update?",
|
|
48
|
+
"marketplaceUpdateConflictDescription": "This skill was changed after installation. Continuing replaces local changes in its skill directory with the latest marketplace version. Canceling leaves the current files unchanged.",
|
|
49
|
+
"marketplaceUpdateConflictConfirm": "Overwrite and Update",
|
|
47
50
|
"marketplaceInstallSuccessSkill": "Skill installed successfully",
|
|
48
51
|
"marketplaceInstallSuccessMcp": "MCP installed successfully",
|
|
49
52
|
"marketplaceEnableSuccess": "Enabled successfully",
|
|
@@ -250,7 +250,7 @@
|
|
|
250
250
|
"chatProcessSummaryCancelled": "已取消",
|
|
251
251
|
"chatRuntimeInitializing": "聊天能力正在初始化。你可以先输入内容,完成后即可发送。",
|
|
252
252
|
"chatRuntimeInitializationFailed": "聊天能力启动失败,请稍后重试或检查服务日志。",
|
|
253
|
-
"chatInputPlaceholder": "输入消息,/ 选命令、应用或技能,@
|
|
253
|
+
"chatInputPlaceholder": "输入消息,/ 选命令、应用或技能,@ 引用文件、文件夹、项目或面板应用,Enter 发送,Shift + Enter 换行",
|
|
254
254
|
"chatInputPlaceholderCompact": "发消息...",
|
|
255
255
|
"chatWelcomeInputPlaceholder": "描述你想完成的目标……",
|
|
256
256
|
"chatInputHint": "支持多轮上下文,默认走当前会话。",
|
|
@@ -290,22 +290,29 @@
|
|
|
290
290
|
"chatPanelAppReferenceNoDescription": "暂无面板应用描述",
|
|
291
291
|
"chatContextReferenceLoading": "搜索引用中…",
|
|
292
292
|
"chatContextReferenceSection": "引用",
|
|
293
|
-
"chatContextReferenceNoResult": "
|
|
294
|
-
"chatContextReferenceHint": "输入 @
|
|
293
|
+
"chatContextReferenceNoResult": "没有匹配的系统对象、文件、文件夹、项目或面板应用",
|
|
294
|
+
"chatContextReferenceHint": "输入 @ 引用系统对象、文件、文件夹、项目或面板应用",
|
|
295
295
|
"chatContextReferenceItemHint": "回车添加这个引用。",
|
|
296
|
-
"chatContextReferenceFilesLabel": "
|
|
297
|
-
"chatContextReferenceFilesType": "
|
|
298
|
-
"chatContextReferenceFilesDescription": "
|
|
299
|
-
"chatContextReferenceFilesHint": "
|
|
296
|
+
"chatContextReferenceFilesLabel": "文件",
|
|
297
|
+
"chatContextReferenceFilesType": "项目文件",
|
|
298
|
+
"chatContextReferenceFilesDescription": "浏览并引用当前项目中的文件。",
|
|
299
|
+
"chatContextReferenceFilesHint": "回车进入文件列表。",
|
|
300
|
+
"chatContextReferenceFoldersLabel": "文件夹",
|
|
301
|
+
"chatContextReferenceFoldersType": "项目文件夹",
|
|
302
|
+
"chatContextReferenceFoldersDescription": "浏览并引用当前项目中的文件夹。",
|
|
303
|
+
"chatContextReferenceFoldersHint": "回车进入文件夹列表。",
|
|
300
304
|
"chatContextReferenceBack": "返回全部引用",
|
|
301
|
-
"chatContextReferenceBackDescription": "
|
|
305
|
+
"chatContextReferenceBackDescription": "返回系统对象、文件、文件夹、项目和面板应用的统一引用入口。",
|
|
302
306
|
"chatContextReferenceBackHint": "回车返回。",
|
|
303
307
|
"chatContextReferenceParent": "返回上一级",
|
|
304
308
|
"chatContextReferenceParentDescription": "在不关闭引用菜单的情况下浏览上一级文件夹。",
|
|
305
309
|
"chatContextReferenceParentHint": "回车打开上一级文件夹。",
|
|
306
310
|
"chatContextReferenceCurrentDirectory": "引用当前文件夹",
|
|
311
|
+
"chatSystemObjectSection": "系统对象",
|
|
312
|
+
"chatSystemObjectGroupHint": "回车进入该分类。",
|
|
313
|
+
"chatSystemObjectResolveFailed": "无法引用系统对象",
|
|
307
314
|
"chatContextReferenceFileDescription": "把这个文件作为本次消息的显式上下文。",
|
|
308
|
-
"chatContextReferenceDirectoryDescription": "
|
|
315
|
+
"chatContextReferenceDirectoryDescription": "把这个文件夹作为本次消息的上下文范围。",
|
|
309
316
|
"chatContextReferenceProjectsLabel": "项目",
|
|
310
317
|
"chatContextReferenceProjectsType": "项目上下文",
|
|
311
318
|
"chatContextReferenceProjectsDescription": "从已登记项目中选择一个,作为本次消息的上下文。",
|
|
@@ -316,8 +323,7 @@
|
|
|
316
323
|
"chatContextReferenceProjectSection": "项目",
|
|
317
324
|
"chatContextReferenceProjectsLoadFailed": "项目加载失败",
|
|
318
325
|
"chatContextReferenceProjectRoot": "项目目录",
|
|
319
|
-
"
|
|
320
|
-
"chatContextReferenceSearchFailed": "文件搜索失败",
|
|
326
|
+
"chatContextReferenceSearchFailed": "引用搜索失败",
|
|
321
327
|
"chatSkillScopeBuiltin": "内建",
|
|
322
328
|
"chatSkillScopeGlobal": "全局",
|
|
323
329
|
"chatSkillScopeProject": "项目",
|
|
@@ -484,6 +490,7 @@
|
|
|
484
490
|
"chatSidebarTaskRecords": "会话记录",
|
|
485
491
|
"chatSidebarViewTime": "时间",
|
|
486
492
|
"chatSidebarViewProject": "项目",
|
|
493
|
+
"chatSidebarViewMode": "会话列表视图",
|
|
487
494
|
"chatSidebarToday": "今天",
|
|
488
495
|
"chatSidebarYesterday": "昨天",
|
|
489
496
|
"chatSidebarPrevious7Days": "近 7 天",
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"updates": "更新",
|
|
3
3
|
"runtimeUpdatesPageTitle": "版本更新",
|
|
4
|
-
"runtimeUpdatesPageDescription": "
|
|
4
|
+
"runtimeUpdatesPageDescription": "系统每两小时自动检查新版本;发现更新后,由你决定何时开始更新。",
|
|
5
5
|
"runtimeUpdatesUnavailableTitle": "当前环境暂不支持更新",
|
|
6
6
|
"runtimeUpdatesUnavailableDescription": "这个运行环境暂时没有可用的更新宿主。",
|
|
7
7
|
"runtimeUpdatesUnavailableHint": "更新入口会在宿主支持后自动出现,不需要前端单独区分环境。",
|
|
8
8
|
"runtimeUpdatesHostVersion": "宿主版本",
|
|
9
|
-
"runtimeUpdatesDownloadedBannerDescription": "版本 {version}
|
|
10
|
-
"runtimeUpdatesActionsDescription": "
|
|
9
|
+
"runtimeUpdatesDownloadedBannerDescription": "版本 {version} 已下载完成,可以继续完成更新。",
|
|
10
|
+
"runtimeUpdatesActionsDescription": "你可以手动检查,并在准备好之后一次完成更新。",
|
|
11
11
|
"runtimeUpdatesApplyNow": "立即更新",
|
|
12
12
|
"runtimeUpdatesLoadFailed": "读取更新状态失败",
|
|
13
13
|
"runtimeUpdatesCheckFailed": "检查更新失败",
|
|
14
14
|
"runtimeUpdatesDownloadFailed": "下载更新失败",
|
|
15
15
|
"runtimeUpdatesApplyFailed": "应用更新失败",
|
|
16
|
+
"runtimeUpdatesUpdateFailed": "更新失败",
|
|
16
17
|
"runtimeUpdatesChannelChangeFailed": "切换更新通道失败",
|
|
17
18
|
"runtimeUpdatesAlreadyLatest": "当前已经是最新版本。",
|
|
18
19
|
"runtimeUpdatesReadyToApply": "更新已下载完成,已经可以切换到新版本。",
|
|
@@ -33,6 +34,8 @@
|
|
|
33
34
|
"desktopUpdatesStatusAvailable": "有可用更新",
|
|
34
35
|
"desktopUpdatesStatusDownloading": "下载中",
|
|
35
36
|
"desktopUpdatesStatusDownloaded": "已下载待应用",
|
|
37
|
+
"desktopUpdatesStatusApplying": "更新中",
|
|
38
|
+
"desktopUpdatesStatusRestartRequired": "等待重启生效",
|
|
36
39
|
"desktopUpdatesStatusUpToDate": "已是最新",
|
|
37
40
|
"desktopUpdatesStatusBlocked": "更新被阻塞",
|
|
38
41
|
"desktopUpdatesStatusFailed": "更新失败",
|
|
@@ -64,7 +67,7 @@
|
|
|
64
67
|
"desktopUpdatesBlockedRootCause.host-too-old": "根因:当前宿主版本太旧,不满足新运行包的最低宿主版本要求;请先升级 NextClaw 启动器。",
|
|
65
68
|
"desktopUpdatesBlockedRootCause.unsupported-installation": "根因:当前安装形态或更新源配置不支持自动更新;请安装支持自动更新的版本,或由维护者补齐更新源配置。",
|
|
66
69
|
"desktopUpdatesChannelSettingsTitle": "更新通道",
|
|
67
|
-
"desktopUpdatesChannelSettingsDescription": "
|
|
70
|
+
"desktopUpdatesChannelSettingsDescription": "系统每两小时自动检查更新;是否开始更新由你确认。",
|
|
68
71
|
"desktopUpdatesReleaseChannel": "更新通道",
|
|
69
72
|
"desktopUpdatesReleaseChannelHelp": "Stable 面向日常主力使用;Beta 用于提前体验新版本,但可能更不稳定。",
|
|
70
73
|
"desktopUpdatesReleaseChannelDowngradeHint": "切回 Stable 后不会立刻强制降级;只有当 Stable 追平或超过当前版本时,才会继续提供 Stable 更新。",
|
|
@@ -29,6 +29,46 @@
|
|
|
29
29
|
"sideDockVisibilityTitle": "显示快捷栏",
|
|
30
30
|
"sideDockVisibilityDescription": "在工作区右侧显示快捷入口栏。",
|
|
31
31
|
"appsTitle": "应用",
|
|
32
|
+
"appPackagesLibraryTitle": "你的应用",
|
|
33
|
+
"appPackagesLibraryDescription": "按需启用应用,并从这里直接打开。应用数据保存在独立的本机目录中。",
|
|
34
|
+
"appPackagesLoading": "加载应用中…",
|
|
35
|
+
"appPackagesLoadFailed": "应用加载失败",
|
|
36
|
+
"appPackagesRefresh": "刷新应用",
|
|
37
|
+
"appPackagesBrowse": "浏览应用",
|
|
38
|
+
"appPackagesMarketplaceTitle": "浏览 Mini APP",
|
|
39
|
+
"appPackagesMarketplaceDescription": "从 NextClaw 官方应用库发现应用,并一步安装到自己的空间。",
|
|
40
|
+
"appPackagesMarketplaceSearch": "搜索应用、功能或标签",
|
|
41
|
+
"appPackagesMarketplaceLoading": "正在加载应用市场…",
|
|
42
|
+
"appPackagesMarketplaceFailed": "应用市场暂时不可用,你仍可从可信来源手动安装。",
|
|
43
|
+
"appPackagesMarketplaceEmpty": "没有找到匹配的应用",
|
|
44
|
+
"appPackagesMarketplaceFeatured": "精选",
|
|
45
|
+
"appPackagesMarketplaceDetails": "查看详情",
|
|
46
|
+
"appPackagesMarketplaceInstalled": "已安装",
|
|
47
|
+
"appPackagesMarketplaceTrustHint": "应用从官方 Registry 下载。启用可在本机运行代码的 Service 前,请先查看应用详情。",
|
|
48
|
+
"appPackagesInstall": "安装应用",
|
|
49
|
+
"appPackagesInstallTitle": "安装 Mini APP",
|
|
50
|
+
"appPackagesInstallDescription": "输入可信的 .napp 文件、本机应用目录或 Marketplace 安装地址。",
|
|
51
|
+
"appPackagesInstallSource": "安装来源",
|
|
52
|
+
"appPackagesInstallPlaceholder": "文件路径或 https:// 安装地址",
|
|
53
|
+
"appPackagesInstallTrustHint": "只安装你信任的来源。包含 Service 的应用可在本机运行代码,并仅在启用后启动。",
|
|
54
|
+
"appPackagesInstalling": "安装中…",
|
|
55
|
+
"appPackagesEmptyTitle": "还没有可用应用",
|
|
56
|
+
"appPackagesEmptyDescription": "安装一个 Mini APP,或升级到包含内置应用的 NextClaw 版本。",
|
|
57
|
+
"appPackagesEnabled": "已启用",
|
|
58
|
+
"appPackagesAvailable": "可用",
|
|
59
|
+
"appPackagesBuiltIn": "NextClaw 内置",
|
|
60
|
+
"appPackagesLocalService": "本地数据服务",
|
|
61
|
+
"appPackagesEnable": "启用",
|
|
62
|
+
"appPackagesDisable": "停用",
|
|
63
|
+
"appPackagesWorking": "处理中…",
|
|
64
|
+
"appPackagesEnableToOpen": "启用后即可打开",
|
|
65
|
+
"appPackagesMoreActions": "更多应用操作",
|
|
66
|
+
"appPackagesCheckUpdate": "检查更新",
|
|
67
|
+
"appPackagesRollback": "切换到",
|
|
68
|
+
"appPackagesUninstall": "卸载",
|
|
69
|
+
"appPackagesUninstallTitle": "卸载这个应用?",
|
|
70
|
+
"appPackagesUninstallDescription": "应用代码会被移除,个人数据默认保留,之后重新安装仍可继续使用。",
|
|
71
|
+
"appPackagesActionFailed": "应用操作失败",
|
|
32
72
|
"panelAppsTitle": "面板应用",
|
|
33
73
|
"panelAppsLoading": "加载面板应用中...",
|
|
34
74
|
"panelAppsLoadFailed": "面板应用加载失败",
|