@nextclaw/ui 0.19.5 → 0.20.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/CHANGELOG.md +46 -0
- package/dist/assets/{abnfDiagram-VRR7QNED-DrbfiNNF.js → abnfDiagram-VRR7QNED-BcFJp_1X.js} +1 -1
- package/dist/assets/{aiden0z-pptx-renderer.es-DdLb2IVc.js → aiden0z-pptx-renderer.es-Dp2ezlQn.js} +1 -1
- package/dist/assets/api-C2iYhdTe.js +13 -0
- package/dist/assets/{appearance-settings-page-cTuZdROP.js → appearance-settings-page-BwQDQr0n.js} +1 -1
- package/dist/assets/{arc-BXlMc9B0.js → arc-CkgyPMyW.js} +1 -1
- package/dist/assets/architecture-TIHT7OUA-DO2x53FK.js +1 -0
- package/dist/assets/{architectureDiagram-ZJ3FMSHR-DXAJxxO0.js → architectureDiagram-ZJ3FMSHR-CMd4cIjI.js} +1 -1
- package/dist/assets/{blockDiagram-677ZJIJ3-i4Kz7zU0.js → blockDiagram-677ZJIJ3-Bz3tbhet.js} +1 -1
- package/dist/assets/book-open-C0IlT9zs.js +1 -0
- package/dist/assets/{c4Diagram-LMCZKHZV-BDc0TkPd.js → c4Diagram-LMCZKHZV-D9hFNAGv.js} +1 -1
- package/dist/assets/channel-nBvMaVyP.js +1 -0
- package/dist/assets/channels-list-page-B0z4bh8e.js +8 -0
- package/dist/assets/chunk-2Q5K7J3B-CJgqFDS4.js +1 -0
- package/dist/assets/{chunk-32BRIVSS-DuReei0Z.js → chunk-32BRIVSS-7NrjEITq.js} +1 -1
- package/dist/assets/{chunk-52WLFC77-D8APq0tm.js → chunk-52WLFC77-viIcqj9q.js} +1 -1
- package/dist/assets/{chunk-5FCAYU7R-BsPrNXNS.js → chunk-5FCAYU7R-Vsu4J-VM.js} +1 -1
- package/dist/assets/{chunk-5HE753X5-BRtkOPoJ.js → chunk-5HE753X5-C-w6CQZK.js} +1 -1
- package/dist/assets/{chunk-5JV3BV7I-ChPc8e8U.js → chunk-5JV3BV7I-CuKgJQ4W.js} +1 -1
- package/dist/assets/{chunk-5TONJI2A-CzTjlJGb.js → chunk-5TONJI2A-CYeiWZKb.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-xsv_22jR.js → chunk-5VM5RSS4-DRCbfwIn.js} +1 -1
- package/dist/assets/{chunk-7BUUIJ7U-CwECujme.js → chunk-7BUUIJ7U-BvydOcm3.js} +1 -1
- package/dist/assets/{chunk-BIQX33UG-DQAm173p.js → chunk-BIQX33UG-RlppOXKo.js} +1 -1
- package/dist/assets/{chunk-C7G6YPKG-BkpajeQb.js → chunk-C7G6YPKG-DAizzYwr.js} +1 -1
- package/dist/assets/{chunk-CQNSW5MT-ND65pWRA.js → chunk-CQNSW5MT-5eChJHca.js} +1 -1
- package/dist/assets/{chunk-CYSBUYHQ-vMu6ijxG.js → chunk-CYSBUYHQ-YHPr53fv.js} +1 -1
- package/dist/assets/{chunk-EMLP6XTP-CEaeW3gH.js → chunk-EMLP6XTP-CK4D7Hz5.js} +1 -1
- package/dist/assets/{chunk-EX3LRPZG-a4ER-HDr.js → chunk-EX3LRPZG-BmlDFIRW.js} +1 -1
- package/dist/assets/{chunk-FWX5IMBZ-C_8fQssn.js → chunk-FWX5IMBZ-D0ksHZZ9.js} +2 -2
- package/dist/assets/{chunk-HOUHSVGY-CEvw-PEd.js → chunk-HOUHSVGY-DPkq8FCm.js} +1 -1
- package/dist/assets/{chunk-ICXQ74PX-BEtF0fGY.js → chunk-ICXQ74PX-FAatv5fC.js} +1 -1
- package/dist/assets/{chunk-JG7HCLWE-DGRrVp8-.js → chunk-JG7HCLWE-DLkIi4F7.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-DRqpp_nM.js → chunk-JWPE2WC7-DawOjNE3.js} +1 -1
- package/dist/assets/{chunk-MOJQB5TN-BDEriOXs.js → chunk-MOJQB5TN-Di52TorW.js} +1 -1
- package/dist/assets/{chunk-MOZMSUNE-JWRNzdnw.js → chunk-MOZMSUNE-PfyK9w1-.js} +1 -1
- package/dist/assets/{chunk-OGEWGWER-DS2VTgCx.js → chunk-OGEWGWER-C3jdH3Ty.js} +1 -1
- package/dist/assets/{chunk-OSBZ3O6U-3LiYTBUB.js → chunk-OSBZ3O6U-CecHo-f0.js} +1 -1
- package/dist/assets/{chunk-PUDLZKDR-o9M2s_SO.js → chunk-PUDLZKDR-f3IJh3sN.js} +1 -1
- package/dist/assets/{chunk-Q4XR5HBZ-DTB7Ma2N.js → chunk-Q4XR5HBZ-DQFeUPxZ.js} +1 -1
- package/dist/assets/{chunk-QBLGF6JB-DpkxZJL5.js → chunk-QBLGF6JB-BhUeG0y2.js} +1 -1
- package/dist/assets/{chunk-R7FJI6CG-CRejkHJU.js → chunk-R7FJI6CG-C3XpZ-2u.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-B1boBjLt.js → chunk-RYQCIY6F-CAqa5klQ.js} +1 -1
- package/dist/assets/{chunk-U6XO7XAA-DgKa97bj.js → chunk-U6XO7XAA-D_WXezeD.js} +1 -1
- package/dist/assets/{chunk-V7JOEXUC-DE56eh0N.js → chunk-V7JOEXUC-CZ70oOtp.js} +1 -1
- package/dist/assets/chunk-VAUOI2AC-BGvh3yIx.js +1 -0
- package/dist/assets/{chunk-VR4S4FIN-BzomPZq2.js → chunk-VR4S4FIN-B7AHEYYk.js} +1 -1
- package/dist/assets/{chunk-WYO6CB5R-C6gy8rSd.js → chunk-WYO6CB5R-Dn9To_OI.js} +2 -2
- package/dist/assets/chunk-XXDRQBXY-DaBxG5gs.js +1 -0
- package/dist/assets/{chunk-YOTPTUD7-BK98yfl9.js → chunk-YOTPTUD7-BYEgRBk3.js} +1 -1
- package/dist/assets/{chunk-ZGVPDNZ5-DFXAhwUT.js → chunk-ZGVPDNZ5-C6YtZDU0.js} +1 -1
- package/dist/assets/{chunk-ZIRB5QZD-Bbu6BiNC.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-DO1Oyb-r.js → config-split-page-VDTf3zZb.js} +1 -1
- package/dist/assets/confirm-dialog-BI_Vt2s_.js +5 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-BV8KR4uF.js → cose-bilkent-JH36ORCC-Bc2Ex5Y3.js} +1 -1
- package/dist/assets/createLucideIcon-Bydi9Gc5.js +1 -0
- package/dist/assets/cynefin-VYW2F7L2-B-H8Qp-n.js +1 -0
- package/dist/assets/{cynefinDiagram-TSTJHNR4-Ckd6nU9t.js → cynefinDiagram-TSTJHNR4-DVysQoGz.js} +1 -1
- package/dist/assets/{dagre-D_T-FW5i.js → dagre-CMhQ1cAG.js} +1 -1
- package/dist/assets/{dagre-VKFMJZFB-CyDaQpD4.js → dagre-VKFMJZFB-RYyWpPJZ.js} +1 -1
- package/dist/assets/{desktop-update-config-XSV-DjJW.js → desktop-update-config-DVoD6NxG.js} +1 -1
- package/dist/assets/{diagram-FQU43EPY-CghnwS0H.js → diagram-FQU43EPY-BD6KONdF.js} +1 -1
- package/dist/assets/{diagram-G47NLZAW-DK4DJ3Kx.js → diagram-G47NLZAW-CGB2ptRR.js} +1 -1
- package/dist/assets/{diagram-NH7WQ7WH-CUgDkZCJ.js → diagram-NH7WQ7WH-DnkOI6cU.js} +1 -1
- package/dist/assets/{diagram-OA4YK3LP-vO2gyH6n.js → diagram-OA4YK3LP-DF82RZ7P.js} +1 -1
- package/dist/assets/{diagram-WEI45ONY-DbSBRDSr.js → diagram-WEI45ONY-Be2v7Ck9.js} +1 -1
- package/dist/assets/{dist-C-2H76Cv.js → dist-A5btQciA.js} +1 -1
- package/dist/assets/dist-CmHtkFbs.js +1 -0
- package/dist/assets/doc-browser-Cm_tMZ_C.js +1 -0
- package/dist/assets/doc-browser-Dto54tCf.js +1 -0
- package/dist/assets/{doc-browser-context-C0Bns1J6.js → doc-browser-context-Bxw0ora-.js} +1 -1
- package/dist/assets/{docx-preview-DfxIm9IB.js → docx-preview-BqwAjrj3.js} +1 -1
- package/dist/assets/{ebnfDiagram-CCIWWBDH-W7CAcK7r.js → ebnfDiagram-CCIWWBDH-CP98OYk8.js} +1 -1
- package/dist/assets/{erDiagram-Q63AITRT-LA0JWL8-.js → erDiagram-Q63AITRT-ZLlx8xfs.js} +1 -1
- package/dist/assets/eventmodeling-45OFAUF4-YVtShyFA.js +1 -0
- package/dist/assets/extensions-CG4voDCh.js +1 -0
- package/dist/assets/flowDiagram-23GEKE2U-BeKXabVO.js +1 -0
- package/dist/assets/{form-actions-CMxhPact.js → form-actions-lv47uGIB.js} +1 -1
- package/dist/assets/{ganttDiagram-NO4QXBWP-_PiTPavJ.js → ganttDiagram-NO4QXBWP-DXCDjHR2.js} +1 -1
- package/dist/assets/gitGraph-TEB2WS4Q-jTSiBj-p.js +1 -0
- package/dist/assets/{gitGraphDiagram-IHSO6WYX-DsRB1ZMU.js → gitGraphDiagram-IHSO6WYX-l2HWrTJp.js} +1 -1
- package/dist/assets/index-BTSwNDVi.js +109 -0
- package/dist/assets/index-QrdUWHfm.css +1 -0
- package/dist/assets/info-DKCQHKI2-BIporNWb.js +1 -0
- package/dist/assets/{infoDiagram-FWYZ7A6U-wIRraYx5.js → infoDiagram-FWYZ7A6U-D-DjX-bn.js} +1 -1
- package/dist/assets/{ishikawaDiagram-FXEZZL3T-CNzsrcrh.js → ishikawaDiagram-FXEZZL3T-y_Xy128F.js} +1 -1
- package/dist/assets/{journeyDiagram-5HDEW3XC-Dy9huHxy.js → journeyDiagram-5HDEW3XC-DJn5xYcQ.js} +1 -1
- package/dist/assets/{kanban-definition-HUTT4EX6-BOCIN365.js → kanban-definition-HUTT4EX6-DJVIOR21.js} +1 -1
- package/dist/assets/{line-BxsizOTs.js → line-Cos7PIOj.js} +1 -1
- package/dist/assets/{linear-C_YHf92I.js → linear-BtDLqtzF.js} +1 -1
- package/dist/assets/loader-circle-CkaqeEne.js +1 -0
- package/dist/assets/{map-CobcjgZ8.js → map-BKnQyvd0.js} +1 -1
- package/dist/assets/mcp-marketplace-page-BSk0qUOX.js +9 -0
- package/dist/assets/mcp-marketplace-page-BgZGc-S_.js +1 -0
- package/dist/assets/{mermaid-parser.core-D7lu2RbA.js → mermaid-parser.core-XUNZhr2W.js} +2 -2
- package/dist/assets/{mermaid.core-CbfW2Rk8.js → mermaid.core-ySrvolIe.js} +3 -3
- package/dist/assets/{mindmap-definition-LN4V7U3C-DUjGXlIC.js → mindmap-definition-LN4V7U3C-BypL9tei.js} +1 -1
- package/dist/assets/model-config-page-c8RnUGoH.js +1 -0
- package/dist/assets/{navigation-link-v3FaWcIr.js → navigation-link-D0agTj5t.js} +1 -1
- package/dist/assets/{ordinal-CjoUCHto.js → ordinal-CxxVWxYU.js} +1 -1
- package/dist/assets/packet-7NZHBO7P-CuFMADV0.js +1 -0
- package/dist/assets/{pegDiagram-2B236MQR-BQY2DgiP.js → pegDiagram-2B236MQR-D-U2KBGv.js} +1 -1
- package/dist/assets/pie-RZYD4A2V-XUeIXhM9.js +1 -0
- package/dist/assets/{pieDiagram-ENE6RG2P-D18owe4D.js → pieDiagram-ENE6RG2P-CBi3GusJ.js} +1 -1
- package/dist/assets/plus-BiMjkv3R.js +1 -0
- package/dist/assets/{privacy-settings-page-CYM1Dxwo.js → privacy-settings-page-CPkyTvEE.js} +1 -1
- package/dist/assets/providers-config-page-CGUEb5Dx.js +1 -0
- package/dist/assets/{quadrantDiagram-ABIIQ3AL-B8F7YoTA.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-RU8GpxN5.js → railroadDiagram-RFXS5EU6-D7Y2EqSd.js} +1 -1
- package/dist/assets/react-BMYFkaGi.js +8 -0
- package/dist/assets/refresh-cw-DjgY2Eju.js +1 -0
- package/dist/assets/remote-1LxkpRED.js +1 -0
- package/dist/assets/{requirementDiagram-TGXJPOKE-ubPOmmNi.js → requirementDiagram-TGXJPOKE-BiXNX1NN.js} +1 -1
- package/dist/assets/rotate-cw-Dot4PVh0.js +1 -0
- package/dist/assets/{runtime-config-page-C7vksFVD.js → runtime-config-page-C6nzqTHg.js} +1 -1
- package/dist/assets/{sankeyDiagram-HTMAVEWB-8L_hXJWW.js → sankeyDiagram-HTMAVEWB-qzDeLztW.js} +1 -1
- package/dist/assets/save-B-jdTe_c.js +1 -0
- package/dist/assets/search-CEp2AIiV.js +1 -0
- package/dist/assets/{search-config-page-DKdEf7m9.js → search-config-page-Dp5guS5O.js} +1 -1
- package/dist/assets/{secrets-config-page-COlMqSfL.js → secrets-config-page-C7nRMjiv.js} +2 -2
- package/dist/assets/security-config-DvHUDxSg.js +1 -0
- package/dist/assets/{select-BACzapV3.js → select-BNA3cma8.js} +2 -2
- package/dist/assets/{sequenceDiagram-DBY2YBRQ-Dom6Qor5.js → sequenceDiagram-DBY2YBRQ-BtRbPQtL.js} +1 -1
- package/dist/assets/{sizeCapture-X5ZJPWSS-cZcFSpLJ.js → sizeCapture-X5ZJPWSS-CMYvM3SL.js} +1 -1
- package/dist/assets/skeleton-CbroEO8Q.js +1 -0
- package/dist/assets/{src-BE9E1xcR.js → src-Bw-mzbQb.js} +1 -1
- package/dist/assets/{stateDiagram-2N3HPSRC-CHrpxmGO.js → stateDiagram-2N3HPSRC-BJ-mFeOz.js} +1 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-BE-HqxOK.js +1 -0
- package/dist/assets/{swimlanes-5IMT3BWC-D6nJS2xQ.js → swimlanes-5IMT3BWC-BsucVOO2.js} +2 -2
- package/dist/assets/swimlanesDiagram-G3AALYLV-Dr1H9LJH.js +8 -0
- package/dist/assets/{tag-chip-BnamTQVX.js → tag-chip-DmCNi4-9.js} +1 -1
- package/dist/assets/{timeline-definition-FHXFAJF6-DJNn-HQO.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-CCEzHoXt.js → vennDiagram-L72KCM5P-BxOOnO9x.js} +1 -1
- package/dist/assets/wardley-OPB4EBWU-CmSRKLR8.js +1 -0
- package/dist/assets/{wardleyDiagram-EHGQE667-BhyVxVXt.js → wardleyDiagram-EHGQE667-Cl7NltMv.js} +1 -1
- package/dist/assets/x-BTo5-A8h.js +1 -0
- package/dist/assets/{xychartDiagram-FW5EYKEG-CacW_246.js → xychartDiagram-FW5EYKEG-DiMIxQ7N.js} +1 -1
- package/dist/index.html +23 -22
- package/package.json +8 -8
- package/src/app/components/layout/__tests__/sidebar.layout.test.tsx +4 -0
- package/src/app/configs/app-navigation.config.ts +6 -0
- package/src/app/index.tsx +7 -0
- package/src/features/chat/features/conversation/components/__tests__/session-conversation-area.test.tsx +33 -1
- package/src/features/chat/features/conversation/components/__tests__/session-conversation-input.streaming.test.tsx +1 -0
- package/src/features/chat/features/conversation/hooks/__tests__/use-session-conversation-controller.test.tsx +18 -1
- package/src/features/chat/features/conversation/hooks/__tests__/use-session-run-queue.test.tsx +26 -0
- package/src/features/chat/features/conversation/hooks/use-session-conversation-controller.ts +4 -1
- package/src/features/chat/features/conversation/hooks/use-session-run-queue.ts +8 -2
- package/src/features/chat/features/message/components/__tests__/chat-message-observation-event.test.tsx +46 -0
- package/src/features/chat/features/message/components/chat-message-list.container.tsx +11 -0
- package/src/features/chat/features/message/components/chat-message-observation-event.tsx +92 -0
- package/src/features/chat/features/message/utils/__tests__/chat-message-timeline-compaction.utils.test.ts +38 -0
- package/src/features/chat/features/message/utils/__tests__/chat-message-timeline.utils.test.ts +52 -0
- package/src/features/chat/features/message/utils/__tests__/chat-message.utils.test.ts +34 -0
- package/src/features/chat/features/message/utils/chat-message-observation-event.utils.ts +81 -0
- package/src/features/chat/features/message/utils/chat-message-part.utils.ts +15 -1
- package/src/features/chat/features/message/utils/chat-message-timeline.utils.ts +62 -1
- package/src/features/chat/features/ncp/hooks/use-ncp-session-queries.ts +36 -2
- package/src/features/chat/features/session/components/__tests__/chat-sidebar-session-item.test.tsx +28 -0
- package/src/features/chat/features/session/components/chat-sidebar-session-item.tsx +10 -2
- package/src/features/chat/features/session/components/session-header/__tests__/chat-session-header-actions.test.tsx +35 -0
- package/src/features/chat/features/session/components/session-header/chat-session-header-actions.tsx +26 -47
- package/src/features/chat/features/session/components/session-header/chat-session-more-actions-menu.tsx +73 -0
- package/src/features/chat/features/session/utils/__tests__/ncp-session-adapter.utils.test.ts +28 -0
- package/src/features/chat/features/session/utils/ncp-session-adapter.utils.ts +3 -1
- package/src/features/chat/features/session/utils/ncp-session-context-metadata.utils.ts +3 -4
- package/src/features/chat/features/workspace/components/__tests__/chat-session-child-sessions.test.tsx +27 -1
- package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-panel-content.test.tsx +13 -0
- package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-panel.test.tsx +29 -0
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-content.tsx +19 -0
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-nav.tsx +36 -2
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel.tsx +4 -0
- package/src/features/chat/features/workspace/components/child-sessions/chat-session-child-sessions.tsx +28 -17
- package/src/features/chat/features/workspace/components/overview/__tests__/chat-session-continuous-attention.test.tsx +67 -0
- package/src/features/chat/features/workspace/components/overview/chat-session-continuous-attention.tsx +234 -0
- package/src/features/chat/features/workspace/utils/__tests__/chat-workspace-panel-view-model.utils.test.ts +9 -7
- package/src/features/chat/features/workspace/utils/chat-thread-workspace-session.utils.ts +9 -4
- package/src/features/chat/features/workspace/utils/chat-workspace-panel-view-model.utils.ts +25 -0
- package/src/features/chat/managers/chat-thread.manager.ts +5 -7
- package/src/features/chat/stores/chat-thread.store.ts +7 -4
- package/src/features/extensions/hooks/use-extensions.ts +11 -0
- package/src/features/extensions/index.ts +1 -0
- package/src/features/extensions/pages/__tests__/extensions-config-page.test.tsx +34 -0
- package/src/features/extensions/pages/extensions-config-page.tsx +136 -0
- package/src/shared/lib/api/ncp-session.types.ts +38 -0
- package/src/shared/lib/api/runtime-control.types.ts +17 -0
- package/src/shared/lib/api/types.ts +6 -0
- package/src/shared/lib/api/utils/ncp-session.utils.ts +35 -1
- package/src/shared/lib/api/utils/runtime-control.utils.ts +8 -0
- package/src/shared/lib/i18n/locales/en-US/chat.json +40 -0
- package/src/shared/lib/i18n/locales/en-US/core.json +27 -0
- package/src/shared/lib/i18n/locales/zh-CN/chat.json +40 -0
- package/src/shared/lib/i18n/locales/zh-CN/core.json +27 -0
- package/dist/assets/api-CUSlBpt_.js +0 -13
- package/dist/assets/architecture-TIHT7OUA-Bq0i9WiE.js +0 -1
- package/dist/assets/book-open-BJ-xAIp9.js +0 -1
- package/dist/assets/channel-iCaZQ87u.js +0 -1
- package/dist/assets/channels-list-page-nRHOasWA.js +0 -8
- package/dist/assets/chunk-2Q5K7J3B-DFQtlnJS.js +0 -1
- package/dist/assets/chunk-VAUOI2AC-CF9A-TeE.js +0 -1
- package/dist/assets/chunk-XXDRQBXY-BRxdfVCU.js +0 -1
- package/dist/assets/classDiagram-OUVF2IWQ-Bo28fPi-.js +0 -1
- package/dist/assets/classDiagram-v2-EOCWNBFH-BOVN9wUz.js +0 -1
- package/dist/assets/confirm-dialog-CCae9Fr4.js +0 -5
- package/dist/assets/cynefin-VYW2F7L2-B7rF3JRp.js +0 -1
- package/dist/assets/dist-1N9UpL3c.js +0 -1
- package/dist/assets/doc-browser-BHFCZIoL.js +0 -1
- package/dist/assets/doc-browser-CRlpqMwH.js +0 -1
- package/dist/assets/eventmodeling-45OFAUF4-DzQLXa3s.js +0 -1
- package/dist/assets/flowDiagram-23GEKE2U-C81eexJZ.js +0 -1
- package/dist/assets/gitGraph-TEB2WS4Q-Dt3ZqpFD.js +0 -1
- package/dist/assets/index-DdYOaKm7.js +0 -109
- package/dist/assets/index-DxCGKhAw.css +0 -1
- package/dist/assets/info-DKCQHKI2-CCCE7dXC.js +0 -1
- package/dist/assets/loader-circle-B-UdXjl4.js +0 -1
- package/dist/assets/mcp-marketplace-page-BUIGtSda.js +0 -1
- package/dist/assets/mcp-marketplace-page-CStb8ml2.js +0 -9
- package/dist/assets/model-config-page-BkfUYm95.js +0 -1
- package/dist/assets/packet-7NZHBO7P-D19yoxFV.js +0 -1
- package/dist/assets/pie-RZYD4A2V-hMaJbLrn.js +0 -1
- package/dist/assets/plus-Dw9QFnKr.js +0 -1
- package/dist/assets/providers-config-page-fxL4I4bz.js +0 -1
- package/dist/assets/radar-I7S5WNFK-C8BkvScA.js +0 -1
- package/dist/assets/railroad-3IZDKUUU-CozZOitC.js +0 -1
- package/dist/assets/railroad-abnf-AHOZXSZD-BqIoFXFi.js +0 -1
- package/dist/assets/railroad-ebnf-EBAXGLYW-CD2e3dng.js +0 -1
- package/dist/assets/railroad-peg-LSFZ7HO6-DoKlRUOF.js +0 -1
- package/dist/assets/react-Dlz_IxoP.js +0 -8
- package/dist/assets/refresh-cw-CK4I5UFv.js +0 -1
- package/dist/assets/remote-B0pPgtC6.js +0 -1
- package/dist/assets/rotate-cw-Z48dmh13.js +0 -1
- package/dist/assets/save-Bo37cIFb.js +0 -1
- package/dist/assets/search-CZiEm7YD.js +0 -1
- package/dist/assets/security-config-CitLihXA.js +0 -1
- package/dist/assets/skeleton-B2PCAZJG.js +0 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-b1pZQlDD.js +0 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-CowxgWVn.js +0 -8
- package/dist/assets/treeView-QDETBFTQ-BQlYkJbz.js +0 -1
- package/dist/assets/treemap-6X3UGDF4-DzTOd1bd.js +0 -1
- package/dist/assets/wardley-OPB4EBWU-D80jQc0y.js +0 -1
- package/dist/assets/x-BzYEzkLA.js +0 -1
- /package/dist/assets/{array-COEOjKUv.js → array-BQVzeGRt.js} +0 -0
- /package/dist/assets/{chunk-KEIR6QF5-D7oHAcry.js → chunk-KEIR6QF5-f9psyCXK.js} +0 -0
- /package/dist/assets/{chunk-Y2CYZVJY-08IUpgTP.js → chunk-Y2CYZVJY-D1mAU_Po.js} +0 -0
- /package/dist/assets/{config-hints-BoE41XDI.js → config-hints-nV5HPOvq.js} +0 -0
- /package/dist/assets/{cytoscape.esm-HifWufkp.js → cytoscape.esm-0uDtdD0l.js} +0 -0
- /package/dist/assets/{defaultLocale-CA-_SsC1.js → defaultLocale-DSWXGgt0.js} +0 -0
- /package/dist/assets/{dist-C60rvfy8.js → dist--ta5rX12.js} +0 -0
- /package/dist/assets/{graphlib-CGYCNsoJ.js → graphlib-CQ6QV4yP.js} +0 -0
- /package/dist/assets/{host-capabilities-DPNRAjIj.js → host-capabilities-Tk038i04.js} +0 -0
- /package/dist/assets/{init-C3plFVsG.js → init-Y6h9jGtZ.js} +0 -0
- /package/dist/assets/{jszip.min-CeYs17Gn.js → jszip.min-8hyJpgpx.js} +0 -0
- /package/dist/assets/{katex-DRThweSG.js → katex-ARhY9PS1.js} +0 -0
- /package/dist/assets/{middleware-D05fK5Sb.js → middleware-DXsbf9xI.js} +0 -0
- /package/dist/assets/{path-BKtKxQ6Y.js → path-10BjdyLh.js} +0 -0
- /package/dist/assets/{rough.esm-DurL7-u7.js → rough.esm-DxgC_14r.js} +0 -0
- /package/dist/assets/{xlsx-Sg8fZ6nH.js → xlsx-DrDuDNAa.js} +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/react';
|
|
2
|
+
import { expect, it, vi } from 'vitest';
|
|
3
|
+
import { ExtensionsConfigPage } from '@/features/extensions/pages/extensions-config-page';
|
|
4
|
+
|
|
5
|
+
vi.mock('@/features/extensions/hooks/use-extensions', () => ({
|
|
6
|
+
useExtensions: () => ({
|
|
7
|
+
data: {
|
|
8
|
+
extensions: [{
|
|
9
|
+
id: 'world-extension',
|
|
10
|
+
name: 'World',
|
|
11
|
+
version: '1.2.0',
|
|
12
|
+
state: 'running',
|
|
13
|
+
leaseCount: 1,
|
|
14
|
+
observations: { context: true, events: true },
|
|
15
|
+
channels: [{ id: 'world', name: 'World channel' }],
|
|
16
|
+
}],
|
|
17
|
+
counts: { total: 1, running: 1, withObservations: 1, withChannels: 1 },
|
|
18
|
+
},
|
|
19
|
+
isPending: false,
|
|
20
|
+
isError: false,
|
|
21
|
+
isFetching: false,
|
|
22
|
+
refetch: vi.fn(),
|
|
23
|
+
}),
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
it('shows the global Extension entry with runtime and capability information', () => {
|
|
27
|
+
render(<ExtensionsConfigPage />);
|
|
28
|
+
|
|
29
|
+
expect(screen.getByText('Extension Management')).toBeTruthy();
|
|
30
|
+
expect(screen.getByText('World')).toBeTruthy();
|
|
31
|
+
expect(screen.getByText('Continuous-attention capabilities')).toBeTruthy();
|
|
32
|
+
expect(screen.getByText('State · Events')).toBeTruthy();
|
|
33
|
+
expect(screen.getByText('World channel')).toBeTruthy();
|
|
34
|
+
});
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { Activity, Eye, Inbox, Puzzle, RefreshCw } from 'lucide-react';
|
|
2
|
+
import { SettingsPage } from '@/shared/components/settings/settings-page';
|
|
3
|
+
import { Button } from '@/shared/components/ui/button';
|
|
4
|
+
import { useExtensions } from '@/features/extensions/hooks/use-extensions';
|
|
5
|
+
import { t } from '@/shared/lib/i18n';
|
|
6
|
+
import { cn } from '@/shared/lib/utils';
|
|
7
|
+
import type { UiExtensionView } from '@/shared/lib/api';
|
|
8
|
+
|
|
9
|
+
const stateStyles: Record<UiExtensionView['state'], string> = {
|
|
10
|
+
running: 'bg-emerald-50 text-emerald-700',
|
|
11
|
+
starting: 'bg-amber-50 text-amber-700',
|
|
12
|
+
stopping: 'bg-amber-50 text-amber-700',
|
|
13
|
+
stopped: 'bg-muted text-muted-foreground',
|
|
14
|
+
failed: 'bg-rose-50 text-rose-700',
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
function ExtensionState({ state }: { state: UiExtensionView['state'] }) {
|
|
18
|
+
return (
|
|
19
|
+
<span className={cn('rounded-full px-2 py-1 text-xs font-medium', stateStyles[state])}>
|
|
20
|
+
{t(`extensionsState${state[0].toUpperCase()}${state.slice(1)}`)}
|
|
21
|
+
</span>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function SummaryCard({ label, value }: { label: string; value: number }) {
|
|
26
|
+
return (
|
|
27
|
+
<div className='rounded-xl border border-border/70 bg-card px-4 py-3'>
|
|
28
|
+
<div className='text-xs text-muted-foreground'>{label}</div>
|
|
29
|
+
<div className='mt-1 text-2xl font-semibold tabular-nums text-foreground'>{value}</div>
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function ExtensionCard({ extension }: { extension: UiExtensionView }) {
|
|
35
|
+
return (
|
|
36
|
+
<article className='rounded-xl border border-border/70 bg-card p-4'>
|
|
37
|
+
<div className='flex items-start gap-3'>
|
|
38
|
+
<span className='inline-flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-primary/10 text-primary'>
|
|
39
|
+
<Puzzle className='h-5 w-5' />
|
|
40
|
+
</span>
|
|
41
|
+
<div className='min-w-0 flex-1'>
|
|
42
|
+
<div className='flex flex-wrap items-center gap-2'>
|
|
43
|
+
<h2 className='truncate font-semibold text-foreground'>{extension.name}</h2>
|
|
44
|
+
<ExtensionState state={extension.state} />
|
|
45
|
+
</div>
|
|
46
|
+
<p className='mt-1 break-all text-xs text-muted-foreground'>
|
|
47
|
+
{extension.id}{extension.version ? ` · v${extension.version}` : ''}
|
|
48
|
+
</p>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
<div className='mt-4 grid gap-2 sm:grid-cols-2'>
|
|
52
|
+
<div className='rounded-lg bg-muted/40 px-3 py-2'>
|
|
53
|
+
<div className='flex items-center gap-1.5 text-xs font-medium text-foreground'>
|
|
54
|
+
<Eye className='h-3.5 w-3.5' />
|
|
55
|
+
{t('extensionsObservationCapabilities')}
|
|
56
|
+
</div>
|
|
57
|
+
<div className='mt-1 text-xs text-muted-foreground'>
|
|
58
|
+
{extension.observations.context ? t('extensionsContextCapability') : null}
|
|
59
|
+
{extension.observations.context && extension.observations.events ? ' · ' : null}
|
|
60
|
+
{extension.observations.events ? t('extensionsEventsCapability') : null}
|
|
61
|
+
{!extension.observations.context && !extension.observations.events ? t('extensionsNone') : null}
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
<div className='rounded-lg bg-muted/40 px-3 py-2'>
|
|
65
|
+
<div className='flex items-center gap-1.5 text-xs font-medium text-foreground'>
|
|
66
|
+
<Inbox className='h-3.5 w-3.5' />
|
|
67
|
+
{t('extensionsChannelCapabilities')}
|
|
68
|
+
</div>
|
|
69
|
+
<div className='mt-1 text-xs text-muted-foreground'>
|
|
70
|
+
{extension.channels.length > 0
|
|
71
|
+
? extension.channels.map((channel) => channel.name || channel.id).join(' · ')
|
|
72
|
+
: t('extensionsNone')}
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
<div className='mt-3 flex flex-wrap gap-x-4 gap-y-1 text-xs text-muted-foreground'>
|
|
77
|
+
<span>{t('extensionsLeaseCount')}: {extension.leaseCount}</span>
|
|
78
|
+
{extension.pid ? <span>{t('extensionsProcess')}: {extension.pid}</span> : null}
|
|
79
|
+
{extension.startedAt ? <span>{t('extensionsStartedAt')}: {new Date(extension.startedAt).toLocaleString()}</span> : null}
|
|
80
|
+
</div>
|
|
81
|
+
</article>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function ExtensionsConfigPage() {
|
|
86
|
+
const query = useExtensions();
|
|
87
|
+
const view = query.data;
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<SettingsPage
|
|
91
|
+
title={t('extensionsPageTitle')}
|
|
92
|
+
description={t('extensionsPageDescription')}
|
|
93
|
+
actions={(
|
|
94
|
+
<Button type='button' variant='outline' size='sm' disabled={query.isFetching} onClick={() => void query.refetch()}>
|
|
95
|
+
<RefreshCw className={cn('mr-2 h-4 w-4', query.isFetching && 'animate-spin')} />
|
|
96
|
+
{t('extensionsRefresh')}
|
|
97
|
+
</Button>
|
|
98
|
+
)}
|
|
99
|
+
>
|
|
100
|
+
<div className='rounded-xl border border-primary/20 bg-primary/5 px-4 py-3 text-sm text-muted-foreground'>
|
|
101
|
+
<div className='flex items-start gap-2'>
|
|
102
|
+
<Activity className='mt-0.5 h-4 w-4 shrink-0 text-primary' />
|
|
103
|
+
<p>{t('extensionsLifecycleDescription')}</p>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
{query.isPending ? (
|
|
107
|
+
<div className='text-sm text-muted-foreground'>{t('extensionsLoading')}</div>
|
|
108
|
+
) : query.isError ? (
|
|
109
|
+
<div className='rounded-xl border border-rose-200 bg-rose-50 px-4 py-5 text-sm text-rose-700'>
|
|
110
|
+
<p>{t('extensionsLoadFailed')}</p>
|
|
111
|
+
<Button className='mt-3' type='button' variant='outline' size='sm' onClick={() => void query.refetch()}>
|
|
112
|
+
{t('extensionsRetry')}
|
|
113
|
+
</Button>
|
|
114
|
+
</div>
|
|
115
|
+
) : view?.extensions.length ? (
|
|
116
|
+
<>
|
|
117
|
+
<div className='grid grid-cols-2 gap-2 lg:grid-cols-4'>
|
|
118
|
+
<SummaryCard label={t('extensionsTotal')} value={view.counts.total} />
|
|
119
|
+
<SummaryCard label={t('extensionsRunning')} value={view.counts.running} />
|
|
120
|
+
<SummaryCard label={t('extensionsWithObservations')} value={view.counts.withObservations} />
|
|
121
|
+
<SummaryCard label={t('extensionsWithChannels')} value={view.counts.withChannels} />
|
|
122
|
+
</div>
|
|
123
|
+
<div className='space-y-3'>
|
|
124
|
+
{view.extensions.map((extension) => <ExtensionCard key={extension.id} extension={extension} />)}
|
|
125
|
+
</div>
|
|
126
|
+
</>
|
|
127
|
+
) : (
|
|
128
|
+
<div className='rounded-xl border border-dashed border-border px-4 py-8 text-center text-sm text-muted-foreground'>
|
|
129
|
+
<Puzzle className='mx-auto h-5 w-5 text-muted-foreground/50' />
|
|
130
|
+
<p className='mt-2 font-medium text-foreground'>{t('extensionsEmpty')}</p>
|
|
131
|
+
<p className='mt-1'>{t('extensionsEmptyDescription')}</p>
|
|
132
|
+
</div>
|
|
133
|
+
)}
|
|
134
|
+
</SettingsPage>
|
|
135
|
+
);
|
|
136
|
+
}
|
|
@@ -118,3 +118,41 @@ export type NcpSessionMessagesView = {
|
|
|
118
118
|
};
|
|
119
119
|
|
|
120
120
|
export type NcpSessionTokenUsageView = UiNcpSessionTokenUsageView;
|
|
121
|
+
|
|
122
|
+
export type NcpSessionObservationKind = 'context' | 'events';
|
|
123
|
+
export type NcpSessionObservationStatus = 'active' | 'paused' | 'degraded' | 'expired' | 'broken';
|
|
124
|
+
|
|
125
|
+
export type NcpSessionObservationView = {
|
|
126
|
+
id: string;
|
|
127
|
+
kind: NcpSessionObservationKind;
|
|
128
|
+
extensionId: string;
|
|
129
|
+
title: string;
|
|
130
|
+
description?: string;
|
|
131
|
+
status: NcpSessionObservationStatus;
|
|
132
|
+
statusReason?: string;
|
|
133
|
+
createdAt: string;
|
|
134
|
+
expiresAt?: string;
|
|
135
|
+
lastReadAt?: string;
|
|
136
|
+
safeConfigPreview?: string;
|
|
137
|
+
pendingCount?: number;
|
|
138
|
+
suppressedCount?: number;
|
|
139
|
+
deliveryFailureCount?: number;
|
|
140
|
+
lastSuppressionReason?: string;
|
|
141
|
+
lastGapAt?: string;
|
|
142
|
+
gapReason?: string;
|
|
143
|
+
delivery?: 'queue' | 'prefer-steer';
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
export type NcpSessionObservationsView = {
|
|
147
|
+
sessionId: string;
|
|
148
|
+
bindings: NcpSessionObservationView[];
|
|
149
|
+
subscriptions: NcpSessionObservationView[];
|
|
150
|
+
counts: {
|
|
151
|
+
total: number;
|
|
152
|
+
context: number;
|
|
153
|
+
events: number;
|
|
154
|
+
needsAttention: number;
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
export type NcpSessionObservationAction = 'pause' | 'resume' | 'remove';
|
|
@@ -64,3 +64,20 @@ export type RuntimeControlActionResult = {
|
|
|
64
64
|
lifecycle: RuntimeLifecycleState;
|
|
65
65
|
message: string;
|
|
66
66
|
};
|
|
67
|
+
export type UiExtensionView = {
|
|
68
|
+
id: string;
|
|
69
|
+
name: string;
|
|
70
|
+
version?: string;
|
|
71
|
+
state: 'stopped' | 'starting' | 'running' | 'stopping' | 'failed';
|
|
72
|
+
generation?: string;
|
|
73
|
+
pid?: number;
|
|
74
|
+
startedAt?: string;
|
|
75
|
+
leaseCount: number;
|
|
76
|
+
observations: { context: boolean; events: boolean };
|
|
77
|
+
channels: Array<{ id: string; name?: string; description?: string }>;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export type UiExtensionsView = {
|
|
81
|
+
extensions: UiExtensionView[];
|
|
82
|
+
counts: { total: number; running: number; withObservations: number; withChannels: number };
|
|
83
|
+
};
|
|
@@ -25,6 +25,11 @@ export type {
|
|
|
25
25
|
NcpMessageView,
|
|
26
26
|
NcpSessionMessagesView,
|
|
27
27
|
NcpSessionTokenUsageView,
|
|
28
|
+
NcpSessionObservationKind,
|
|
29
|
+
NcpSessionObservationStatus,
|
|
30
|
+
NcpSessionObservationView,
|
|
31
|
+
NcpSessionObservationsView,
|
|
32
|
+
NcpSessionObservationAction,
|
|
28
33
|
SessionContextWindowView,
|
|
29
34
|
} from './ncp-session.types';
|
|
30
35
|
|
|
@@ -75,6 +80,7 @@ export type BootstrapStatusView = {
|
|
|
75
80
|
};
|
|
76
81
|
|
|
77
82
|
export type ThinkingLevel = 'off' | 'minimal' | 'low' | 'medium' | 'high' | 'adaptive' | 'xhigh';
|
|
83
|
+
|
|
78
84
|
export type AgentModelsView = Record<
|
|
79
85
|
string,
|
|
80
86
|
{
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { nextclawClient } from "@/shared/lib/api/managers/client.manager";
|
|
1
|
+
import { nextclawClient, requestApiResponse } from "@/shared/lib/api/managers/client.manager";
|
|
2
2
|
import type {
|
|
3
3
|
NcpSessionMessagesView,
|
|
4
4
|
NcpSessionTokenUsageView,
|
|
@@ -6,6 +6,9 @@ import type {
|
|
|
6
6
|
NcpSessionsListView,
|
|
7
7
|
NcpSessionSummaryView,
|
|
8
8
|
SessionPatchUpdate,
|
|
9
|
+
NcpSessionObservationAction,
|
|
10
|
+
NcpSessionObservationKind,
|
|
11
|
+
NcpSessionObservationsView,
|
|
9
12
|
} from "@/shared/lib/api/types";
|
|
10
13
|
|
|
11
14
|
// GET /api/ncp/sessions
|
|
@@ -58,6 +61,37 @@ export async function fetchNcpSessionTokenUsage(
|
|
|
58
61
|
return (await nextclawClient.sessions.getUsage(sessionId)) as NcpSessionTokenUsageView;
|
|
59
62
|
}
|
|
60
63
|
|
|
64
|
+
// GET /api/ncp/sessions/:sessionId/observations
|
|
65
|
+
export async function fetchNcpSessionObservations(
|
|
66
|
+
sessionId: string,
|
|
67
|
+
): Promise<NcpSessionObservationsView> {
|
|
68
|
+
const response = await requestApiResponse<NcpSessionObservationsView>(
|
|
69
|
+
`/api/ncp/sessions/${encodeURIComponent(sessionId)}/observations`,
|
|
70
|
+
);
|
|
71
|
+
if (!response.ok) throw new Error(response.error.message);
|
|
72
|
+
return response.data;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// PATCH /api/ncp/sessions/:sessionId/observations/:kind/:id
|
|
76
|
+
export async function updateNcpSessionObservation(
|
|
77
|
+
sessionId: string,
|
|
78
|
+
input: {
|
|
79
|
+
kind: NcpSessionObservationKind;
|
|
80
|
+
id: string;
|
|
81
|
+
action: NcpSessionObservationAction;
|
|
82
|
+
},
|
|
83
|
+
): Promise<NcpSessionObservationsView> {
|
|
84
|
+
const response = await requestApiResponse<NcpSessionObservationsView>(
|
|
85
|
+
`/api/ncp/sessions/${encodeURIComponent(sessionId)}/observations/${input.kind}/${encodeURIComponent(input.id)}`,
|
|
86
|
+
{
|
|
87
|
+
method: 'PATCH',
|
|
88
|
+
body: JSON.stringify({ action: input.action }),
|
|
89
|
+
},
|
|
90
|
+
);
|
|
91
|
+
if (!response.ok) throw new Error(response.error.message);
|
|
92
|
+
return response.data;
|
|
93
|
+
}
|
|
94
|
+
|
|
61
95
|
// GET /api/ncp/sessions/:sessionId/skills
|
|
62
96
|
export async function fetchNcpSessionSkills(
|
|
63
97
|
sessionId: string,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { nextclawClient } from '../managers/client.manager';
|
|
2
2
|
import type { RuntimeControlActionResult, RuntimeControlView } from '@/shared/lib/api/runtime-control.types';
|
|
3
|
+
import type { UiExtensionsView } from '@/shared/lib/api/runtime-control.types';
|
|
4
|
+
import { requestApiResponse } from '@/shared/lib/api/managers/client.manager';
|
|
3
5
|
|
|
4
6
|
export async function fetchRuntimeControl(): Promise<RuntimeControlView> {
|
|
5
7
|
return await nextclawClient.runtimeControl.fetch();
|
|
@@ -16,3 +18,9 @@ export async function restartRuntimeService(): Promise<RuntimeControlActionResul
|
|
|
16
18
|
export async function stopRuntimeService(): Promise<RuntimeControlActionResult> {
|
|
17
19
|
return await nextclawClient.runtimeControl.stopService();
|
|
18
20
|
}
|
|
21
|
+
|
|
22
|
+
export async function fetchExtensionCatalog(): Promise<UiExtensionsView> {
|
|
23
|
+
const response = await requestApiResponse<UiExtensionsView>('/api/runtime/extensions/catalog');
|
|
24
|
+
if (!response.ok) throw new Error(response.error.message);
|
|
25
|
+
return response.data;
|
|
26
|
+
}
|
|
@@ -49,6 +49,35 @@
|
|
|
49
49
|
"chatWorkspaceClosePanel": "Close workspace panel",
|
|
50
50
|
"chatWorkspaceOverview": "Overview",
|
|
51
51
|
"chatWorkspaceOverviewDescription": "Open this session's related conversations, scheduled work, and project files.",
|
|
52
|
+
"chatWorkspaceContinuousAttention": "Continuous attention",
|
|
53
|
+
"chatWorkspaceContinuousAttentionDescription": "Review the state and events this session keeps receiving.",
|
|
54
|
+
"chatWorkspaceContinuousAttentionState": "State",
|
|
55
|
+
"chatWorkspaceContinuousAttentionEvents": "Events",
|
|
56
|
+
"chatWorkspaceContinuousAttentionTotal": "Total",
|
|
57
|
+
"chatWorkspaceContinuousAttentionNeedsAttention": "Needs attention",
|
|
58
|
+
"chatWorkspaceContinuousAttentionStatusActive": "Active",
|
|
59
|
+
"chatWorkspaceContinuousAttentionStatusPaused": "Paused",
|
|
60
|
+
"chatWorkspaceContinuousAttentionStatusDegraded": "Degraded",
|
|
61
|
+
"chatWorkspaceContinuousAttentionStatusExpired": "Expired",
|
|
62
|
+
"chatWorkspaceContinuousAttentionStatusBroken": "Unavailable",
|
|
63
|
+
"chatWorkspaceContinuousAttentionCreated": "Created",
|
|
64
|
+
"chatWorkspaceContinuousAttentionExpires": "Expires",
|
|
65
|
+
"chatWorkspaceContinuousAttentionLastRead": "Last read",
|
|
66
|
+
"chatWorkspaceContinuousAttentionPending": "Pending {count}",
|
|
67
|
+
"chatWorkspaceContinuousAttentionSuppressed": "Suppressed {count}",
|
|
68
|
+
"chatWorkspaceContinuousAttentionFailures": "Delivery failures {count}",
|
|
69
|
+
"chatWorkspaceContinuousAttentionPause": "Pause",
|
|
70
|
+
"chatWorkspaceContinuousAttentionResume": "Resume",
|
|
71
|
+
"chatWorkspaceContinuousAttentionRemove": "Remove",
|
|
72
|
+
"chatWorkspaceContinuousAttentionUpdating": "Updating…",
|
|
73
|
+
"chatWorkspaceContinuousAttentionRemoveTitle": "Remove continuous attention?",
|
|
74
|
+
"chatWorkspaceContinuousAttentionRemoveDescription": "This session will stop keeping this state or event relationship. This cannot be undone.",
|
|
75
|
+
"chatWorkspaceContinuousAttentionLoading": "Loading continuous attention…",
|
|
76
|
+
"chatWorkspaceContinuousAttentionLoadFailed": "Couldn’t load continuous attention.",
|
|
77
|
+
"chatWorkspaceContinuousAttentionRetry": "Retry",
|
|
78
|
+
"chatWorkspaceContinuousAttentionActionFailed": "The action failed. Try again.",
|
|
79
|
+
"chatWorkspaceContinuousAttentionEmpty": "No continuous attention",
|
|
80
|
+
"chatWorkspaceContinuousAttentionEmptyDescription": "The Agent has not established this type of ongoing relationship for the session.",
|
|
52
81
|
"chatWorkspaceTokenUsage": "Token usage",
|
|
53
82
|
"chatWorkspaceTokenUsageDescription": "Counts this session's own AI runs. Cached input is included in input tokens; the hit rate is cached reads divided by all input.",
|
|
54
83
|
"chatWorkspaceTokenUsageLoading": "Calculating token usage…",
|
|
@@ -423,6 +452,9 @@
|
|
|
423
452
|
"chatDeleteSession": "Delete Session",
|
|
424
453
|
"chatDeleteSessionConfirm": "Delete the current session?",
|
|
425
454
|
"chatSessionMoreActions": "More actions",
|
|
455
|
+
"chatSessionCopyId": "Copy session ID",
|
|
456
|
+
"chatSessionCopyIdSuccess": "Session ID copied",
|
|
457
|
+
"chatSessionCopyIdFailed": "Couldn’t copy the session ID.",
|
|
426
458
|
"chatSessionViewMetadata": "View Metadata",
|
|
427
459
|
"chatSessionMetadataDialogTitle": "Session Metadata",
|
|
428
460
|
"chatSessionMetadataDialogDescription": "Raw metadata stored on the current session.",
|
|
@@ -471,6 +503,14 @@
|
|
|
471
503
|
"chatRoleTool": "Tool",
|
|
472
504
|
"chatRoleSystem": "System",
|
|
473
505
|
"chatRoleMessage": "Message",
|
|
506
|
+
"chatObservationEventLabel": "External event",
|
|
507
|
+
"chatObservationEventDetailsTitle": "Event details",
|
|
508
|
+
"chatObservationEventExtension": "Extension",
|
|
509
|
+
"chatObservationEventId": "Event ID",
|
|
510
|
+
"chatObservationEventTime": "Time",
|
|
511
|
+
"chatObservationEventPayloadLabel": "Event data",
|
|
512
|
+
"chatObservationEventShowDetails": "View event data",
|
|
513
|
+
"chatObservationEventPayloadEmpty": "No event data",
|
|
474
514
|
"chatToolCall": "Tool Call",
|
|
475
515
|
"chatToolResult": "Tool Result",
|
|
476
516
|
"chatToolInput": "Input",
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"model": "Model",
|
|
4
4
|
"searchChannels": "Search Channels",
|
|
5
5
|
"providers": "Providers",
|
|
6
|
+
"extensions": "Extensions",
|
|
6
7
|
"channels": "Channels",
|
|
7
8
|
"cron": "Cron Jobs",
|
|
8
9
|
"secrets": "Secrets",
|
|
@@ -93,6 +94,32 @@
|
|
|
93
94
|
"providersDefaultDescription": "Configure AI services for your agents",
|
|
94
95
|
"providersEmptyTitle": "No providers configured",
|
|
95
96
|
"providersEmptyDescription": "Add an AI provider to start using the platform.",
|
|
97
|
+
"extensionsPageTitle": "Extension Management",
|
|
98
|
+
"extensionsPageDescription": "Review discovered Extensions, their capabilities, and current runtime state.",
|
|
99
|
+
"extensionsRefresh": "Refresh",
|
|
100
|
+
"extensionsLifecycleDescription": "Extensions start and stop on demand based on channel usage and session continuous-attention relationships. This page is the global view of their capabilities and runtime state.",
|
|
101
|
+
"extensionsLoading": "Loading Extensions…",
|
|
102
|
+
"extensionsLoadFailed": "Couldn’t load Extensions.",
|
|
103
|
+
"extensionsRetry": "Retry",
|
|
104
|
+
"extensionsEmpty": "No Extensions discovered",
|
|
105
|
+
"extensionsEmptyDescription": "Install or place an Extension, then refresh this page.",
|
|
106
|
+
"extensionsTotal": "Total",
|
|
107
|
+
"extensionsRunning": "Running",
|
|
108
|
+
"extensionsWithObservations": "Continuous attention",
|
|
109
|
+
"extensionsWithChannels": "Channels",
|
|
110
|
+
"extensionsObservationCapabilities": "Continuous-attention capabilities",
|
|
111
|
+
"extensionsChannelCapabilities": "Channel capabilities",
|
|
112
|
+
"extensionsContextCapability": "State",
|
|
113
|
+
"extensionsEventsCapability": "Events",
|
|
114
|
+
"extensionsNone": "None",
|
|
115
|
+
"extensionsLeaseCount": "Active uses",
|
|
116
|
+
"extensionsProcess": "Process",
|
|
117
|
+
"extensionsStartedAt": "Started",
|
|
118
|
+
"extensionsStateRunning": "Running",
|
|
119
|
+
"extensionsStateStarting": "Starting",
|
|
120
|
+
"extensionsStateStopping": "Stopping",
|
|
121
|
+
"extensionsStateStopped": "Stopped",
|
|
122
|
+
"extensionsStateFailed": "Failed",
|
|
96
123
|
"apiKey": "API Key",
|
|
97
124
|
"apiBase": "API Base URL",
|
|
98
125
|
"extraHeaders": "Extra Headers",
|
|
@@ -49,6 +49,35 @@
|
|
|
49
49
|
"chatWorkspaceClosePanel": "关闭工作区侧栏",
|
|
50
50
|
"chatWorkspaceOverview": "概览",
|
|
51
51
|
"chatWorkspaceOverviewDescription": "查看与当前会话相关的子会话、定时任务和项目文件。",
|
|
52
|
+
"chatWorkspaceContinuousAttention": "持续关注",
|
|
53
|
+
"chatWorkspaceContinuousAttentionDescription": "查看这个会话持续获取的状态和事件。",
|
|
54
|
+
"chatWorkspaceContinuousAttentionState": "状态",
|
|
55
|
+
"chatWorkspaceContinuousAttentionEvents": "事件",
|
|
56
|
+
"chatWorkspaceContinuousAttentionTotal": "总数",
|
|
57
|
+
"chatWorkspaceContinuousAttentionNeedsAttention": "需要处理",
|
|
58
|
+
"chatWorkspaceContinuousAttentionStatusActive": "运行中",
|
|
59
|
+
"chatWorkspaceContinuousAttentionStatusPaused": "已暂停",
|
|
60
|
+
"chatWorkspaceContinuousAttentionStatusDegraded": "异常",
|
|
61
|
+
"chatWorkspaceContinuousAttentionStatusExpired": "已过期",
|
|
62
|
+
"chatWorkspaceContinuousAttentionStatusBroken": "不可用",
|
|
63
|
+
"chatWorkspaceContinuousAttentionCreated": "建立于",
|
|
64
|
+
"chatWorkspaceContinuousAttentionExpires": "到期于",
|
|
65
|
+
"chatWorkspaceContinuousAttentionLastRead": "最近读取",
|
|
66
|
+
"chatWorkspaceContinuousAttentionPending": "待处理 {count}",
|
|
67
|
+
"chatWorkspaceContinuousAttentionSuppressed": "已抑制 {count}",
|
|
68
|
+
"chatWorkspaceContinuousAttentionFailures": "投递失败 {count}",
|
|
69
|
+
"chatWorkspaceContinuousAttentionPause": "暂停",
|
|
70
|
+
"chatWorkspaceContinuousAttentionResume": "恢复",
|
|
71
|
+
"chatWorkspaceContinuousAttentionRemove": "移除",
|
|
72
|
+
"chatWorkspaceContinuousAttentionUpdating": "更新中…",
|
|
73
|
+
"chatWorkspaceContinuousAttentionRemoveTitle": "移除持续关注?",
|
|
74
|
+
"chatWorkspaceContinuousAttentionRemoveDescription": "移除后,这个会话将不再保持这条状态或事件关系。此操作无法撤销。",
|
|
75
|
+
"chatWorkspaceContinuousAttentionLoading": "正在加载持续关注…",
|
|
76
|
+
"chatWorkspaceContinuousAttentionLoadFailed": "持续关注加载失败。",
|
|
77
|
+
"chatWorkspaceContinuousAttentionRetry": "重试",
|
|
78
|
+
"chatWorkspaceContinuousAttentionActionFailed": "操作失败,请重试。",
|
|
79
|
+
"chatWorkspaceContinuousAttentionEmpty": "暂无持续关注",
|
|
80
|
+
"chatWorkspaceContinuousAttentionEmptyDescription": "Agent 尚未为这个会话建立这类持续关系。",
|
|
52
81
|
"chatWorkspaceTokenUsage": "Token 用量",
|
|
53
82
|
"chatWorkspaceTokenUsageDescription": "统计当前会话自身的 AI 运行。缓存输入已包含在输入 Token 中;命中率为缓存读取占全部输入的比例。",
|
|
54
83
|
"chatWorkspaceTokenUsageLoading": "正在统计 Token 用量…",
|
|
@@ -423,6 +452,9 @@
|
|
|
423
452
|
"chatDeleteSession": "删除会话",
|
|
424
453
|
"chatDeleteSessionConfirm": "确认删除当前会话?",
|
|
425
454
|
"chatSessionMoreActions": "更多操作",
|
|
455
|
+
"chatSessionCopyId": "复制会话 ID",
|
|
456
|
+
"chatSessionCopyIdSuccess": "会话 ID 已复制",
|
|
457
|
+
"chatSessionCopyIdFailed": "无法复制会话 ID。",
|
|
426
458
|
"chatSessionViewMetadata": "查看元数据",
|
|
427
459
|
"chatSessionMetadataDialogTitle": "会话元数据",
|
|
428
460
|
"chatSessionMetadataDialogDescription": "当前会话保存的原始元数据。",
|
|
@@ -471,6 +503,14 @@
|
|
|
471
503
|
"chatRoleTool": "工具",
|
|
472
504
|
"chatRoleSystem": "系统",
|
|
473
505
|
"chatRoleMessage": "消息",
|
|
506
|
+
"chatObservationEventLabel": "外部事件",
|
|
507
|
+
"chatObservationEventDetailsTitle": "事件详情",
|
|
508
|
+
"chatObservationEventExtension": "Extension",
|
|
509
|
+
"chatObservationEventId": "事件 ID",
|
|
510
|
+
"chatObservationEventTime": "时间",
|
|
511
|
+
"chatObservationEventPayloadLabel": "事件数据",
|
|
512
|
+
"chatObservationEventShowDetails": "查看事件数据",
|
|
513
|
+
"chatObservationEventPayloadEmpty": "无事件数据",
|
|
474
514
|
"chatToolCall": "工具调用",
|
|
475
515
|
"chatToolResult": "工具结果",
|
|
476
516
|
"chatToolInput": "输入",
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"model": "模型",
|
|
4
4
|
"searchChannels": "搜索渠道",
|
|
5
5
|
"providers": "提供商",
|
|
6
|
+
"extensions": "Extensions",
|
|
6
7
|
"channels": "渠道",
|
|
7
8
|
"cron": "定时任务",
|
|
8
9
|
"secrets": "密钥管理",
|
|
@@ -93,6 +94,32 @@
|
|
|
93
94
|
"providersDefaultDescription": "为你的智能体配置 AI 服务",
|
|
94
95
|
"providersEmptyTitle": "尚未配置提供商",
|
|
95
96
|
"providersEmptyDescription": "添加一个 AI 提供商后即可开始使用。",
|
|
97
|
+
"extensionsPageTitle": "Extensions 管理",
|
|
98
|
+
"extensionsPageDescription": "查看已发现的 Extension、能力和当前运行状态。",
|
|
99
|
+
"extensionsRefresh": "刷新",
|
|
100
|
+
"extensionsLifecycleDescription": "Extension 由运行时按渠道和会话持续关注关系按需启停;这里集中查看全局能力和运行状态。",
|
|
101
|
+
"extensionsLoading": "正在加载 Extensions…",
|
|
102
|
+
"extensionsLoadFailed": "Extensions 加载失败。",
|
|
103
|
+
"extensionsRetry": "重试",
|
|
104
|
+
"extensionsEmpty": "暂无已发现的 Extension",
|
|
105
|
+
"extensionsEmptyDescription": "安装或放置 Extension 后,重新刷新此页面。",
|
|
106
|
+
"extensionsTotal": "全部",
|
|
107
|
+
"extensionsRunning": "运行中",
|
|
108
|
+
"extensionsWithObservations": "支持持续关注",
|
|
109
|
+
"extensionsWithChannels": "支持渠道",
|
|
110
|
+
"extensionsObservationCapabilities": "持续关注能力",
|
|
111
|
+
"extensionsChannelCapabilities": "渠道能力",
|
|
112
|
+
"extensionsContextCapability": "状态",
|
|
113
|
+
"extensionsEventsCapability": "事件",
|
|
114
|
+
"extensionsNone": "无",
|
|
115
|
+
"extensionsLeaseCount": "活跃使用数",
|
|
116
|
+
"extensionsProcess": "进程",
|
|
117
|
+
"extensionsStartedAt": "启动于",
|
|
118
|
+
"extensionsStateRunning": "运行中",
|
|
119
|
+
"extensionsStateStarting": "启动中",
|
|
120
|
+
"extensionsStateStopping": "停止中",
|
|
121
|
+
"extensionsStateStopped": "已停止",
|
|
122
|
+
"extensionsStateFailed": "失败",
|
|
96
123
|
"apiKey": "API 密钥",
|
|
97
124
|
"apiBase": "API Base URL",
|
|
98
125
|
"extraHeaders": "额外请求头",
|