@nextclaw/ui 0.13.12 → 0.14.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 +43 -0
- package/dist/assets/{api-DmxQnm30.js → api-B50yVdT8.js} +7 -7
- package/dist/assets/app-presenter-provider-BI-ewLbO.js +3 -0
- package/dist/assets/arrow-left-BOCJyLbQ.js +1 -0
- package/dist/assets/book-open-Bd2Xbrrc.js +1 -0
- package/dist/assets/channels-list-page-moJkpxtU.js +8 -0
- package/dist/assets/chat-page-CO27cl4v.js +105 -0
- package/dist/assets/config-split-page-CsQ2rIdq.js +1 -0
- package/dist/assets/{confirm-dialog-BWRNsRgb.js → confirm-dialog-DRSelLdI.js} +2 -2
- package/dist/assets/desktop-update-config-qa-SynOc.js +1 -0
- package/dist/assets/{dist-DzM2ZEVN.js → dist-D19wiQwB.js} +1 -1
- package/dist/assets/{dist-CyWdaJvr.js → dist-NZRV-BxD.js} +1 -1
- package/dist/assets/doc-browser-2ddUJCA0.js +1 -0
- package/dist/assets/doc-browser-BjHUczQb.js +1 -0
- package/dist/assets/doc-browser-context-C8KPbj-p.js +1 -0
- package/dist/assets/{ellipsis-BDgTYNDX.js → ellipsis-BYy8TP0A.js} +1 -1
- package/dist/assets/{es2015-WqekV0OK.js → es2015-BUIIKCNh.js} +1 -1
- package/dist/assets/{external-link-BLjo8z2a.js → external-link-528k6MDD.js} +1 -1
- package/dist/assets/host-capabilities-9bB_998Z.js +1 -0
- package/dist/assets/index-CMNrRhnG.js +101 -0
- package/dist/assets/index-UTmTW1eU.css +1 -0
- package/dist/assets/{key-round-Du8x3sWa.js → key-round-D3vD9dj7.js} +1 -1
- package/dist/assets/loader-circle-DV9TSRns.js +1 -0
- package/dist/assets/mcp-marketplace-page-CS5Lh3oA.js +1 -0
- package/dist/assets/mcp-marketplace-page-DEOMcWb0.js +40 -0
- package/dist/assets/model-config-page-BSc4o7pb.js +1 -0
- package/dist/assets/{notice-card-3a7FmAz-.js → notice-card-qqlbsOoR.js} +1 -1
- package/dist/assets/plus-Bf9qhPDO.js +1 -0
- package/dist/assets/{popover-BlJLguiZ.js → popover-BnmPOXe3.js} +1 -1
- package/dist/assets/provider-scoped-model-input-Ca56s475.js +1 -0
- package/dist/assets/providers-config-page-D8Kf4U3u.js +1 -0
- package/dist/assets/{react-BVjl1ZaK.js → react-Dsotw5vM.js} +1 -1
- package/dist/assets/{refresh-cw-DFR87zei.js → refresh-cw-Bmx4wc9P.js} +1 -1
- package/dist/assets/remote-DNMEy_c4.js +1 -0
- package/dist/assets/rotate-cw-CL0sVBel.js +1 -0
- package/dist/assets/runtime-config-page-CUFtKr0U.js +1 -0
- package/dist/assets/{save-BDmIlHvN.js → save-CHDnDTok.js} +1 -1
- package/dist/assets/search-D7L-TCH-.js +1 -0
- package/dist/assets/search-config-page-CA3RVAef.js +1 -0
- package/dist/assets/secrets-config-page-95yaH1fa.js +3 -0
- package/dist/assets/{status-dot-SVPjIyG5.js → status-dot-Dm4h-bjn.js} +1 -1
- package/dist/assets/tabs-CJvw5Lqp.js +1 -0
- package/dist/assets/{tag-chip-Cdwb3JSH.js → tag-chip-Cr8GwpRE.js} +1 -1
- package/dist/assets/{tooltip-CKGxLGnG.js → tooltip-Bxzi6aDL.js} +1 -1
- package/dist/assets/{trash-2-yLA8BEcE.js → trash-2-CSfX-BvU.js} +1 -1
- package/dist/assets/use-config-TzwzTgg0.js +1 -0
- package/dist/assets/x-fkIWvi07.js +1 -0
- package/dist/index.html +27 -25
- package/package.json +9 -8
- package/src/app/index.tsx +8 -4
- package/src/features/account/components/account-panel.tsx +3 -3
- package/src/features/account/hooks/{use-auth.test.ts → __tests__/use-auth.test.ts} +1 -1
- package/src/features/account/managers/account.manager.ts +6 -5
- package/src/features/agents/components/{agents-page.test.tsx → __tests__/agents-page.test.tsx} +41 -2
- package/src/features/agents/components/agent-dialogs.tsx +2 -2
- package/src/features/agents/components/agents-page.tsx +1 -1
- package/src/features/channels/components/config/channel-form.tsx +1 -1
- package/src/features/channels/pages/channels-list-page.tsx +18 -15
- package/src/features/channels/utils/{channel-form-fields.utils.test.ts → __tests__/channel-form-fields.utils.test.ts} +1 -1
- package/src/features/chat/components/{chat-welcome.test.tsx → __tests__/chat-welcome.test.tsx} +1 -1
- package/src/features/chat/components/conversation/{chat-conversation-header.test.tsx → __tests__/chat-conversation-header.test.tsx} +25 -32
- package/src/features/chat/components/conversation/{chat-conversation-panel.test.tsx → __tests__/chat-conversation-panel.test.tsx} +201 -37
- package/src/features/chat/components/conversation/chat-conversation-alerts.tsx +37 -0
- package/src/features/chat/components/conversation/chat-conversation-content.tsx +91 -0
- package/src/features/chat/components/conversation/chat-conversation-header-section.tsx +151 -0
- package/src/features/chat/components/conversation/chat-conversation-header.tsx +26 -89
- package/src/features/chat/components/conversation/chat-conversation-panel.tsx +13 -376
- package/src/features/chat/components/conversation/chat-conversation-parent-banner.tsx +16 -0
- package/src/features/chat/components/conversation/chat-conversation-skeleton.tsx +86 -0
- package/src/features/chat/components/conversation/chat-conversation-workspace-section.tsx +42 -0
- package/src/features/chat/components/layout/{chat-page-shell.test.tsx → __tests__/chat-page-shell.test.tsx} +1 -1
- package/src/features/chat/components/layout/__tests__/chat-sidebar-read-state.test.tsx +167 -0
- package/src/features/chat/components/layout/__tests__/chat-sidebar.test.tsx +834 -0
- package/src/features/chat/components/layout/chat-page-shell.tsx +11 -30
- package/src/features/chat/components/layout/chat-sidebar-toolbar.tsx +33 -53
- package/src/features/chat/components/layout/chat-sidebar-utility-menu.tsx +1 -1
- package/src/features/chat/components/layout/chat-sidebar.tsx +156 -202
- package/src/features/chat/components/providers/chat-presenter.provider.tsx +13 -44
- package/src/features/chat/{components/conversation → features/input/components/__tests__}/chat-attachment-upload-limit.test.ts +1 -1
- package/src/features/chat/{components/conversation → features/input/components}/chat-input-bar.container.tsx +133 -31
- package/src/features/chat/{hooks → features/input/hooks/__tests__}/use-chat-input-bar-controller.test.tsx +1 -1
- package/src/features/chat/{utils → features/input/utils/__tests__}/chat-composer-state.utils.test.ts +1 -1
- package/src/features/chat/{utils → features/input/utils/__tests__}/chat-inline-token.utils.test.ts +1 -1
- package/src/features/chat/{utils → features/input/utils/__tests__}/chat-input-bar.utils.test.ts +2 -2
- package/src/features/chat/{utils → features/input/utils/__tests__}/ncp-chat-input-availability.utils.test.ts +2 -1
- package/src/features/chat/{utils → features/input/utils}/ncp-chat-input-availability.utils.ts +6 -6
- package/src/features/chat/{components/conversation → features/message/components/__tests__}/chat-message-list.container.test.tsx +38 -3
- package/src/features/chat/{components/conversation → features/message/components}/chat-message-list.container.tsx +9 -13
- package/src/features/chat/{utils → features/message/utils/__tests__}/chat-message-invalid-tool-arguments.utils.test.ts +2 -2
- package/src/features/chat/{utils → features/message/utils/__tests__}/chat-message-session-spawn-tool-card.utils.test.ts +2 -2
- package/src/features/chat/features/message/utils/__tests__/chat-message-show-content-tool-card.utils.test.ts +54 -0
- package/src/features/chat/{utils → features/message/utils/__tests__}/chat-message-summary-truncation.utils.test.ts +2 -2
- package/src/features/chat/{utils → features/message/utils/__tests__}/chat-message-tool-agent-id.utils.test.ts +1 -1
- package/src/features/chat/{utils → features/message/utils/__tests__}/chat-message.utils.test.ts +2 -2
- package/src/features/chat/{utils → features/message/utils}/chat-message-inline-content.utils.ts +1 -1
- package/src/features/chat/{utils → features/message/utils}/chat-message-part.utils.ts +15 -2
- package/src/features/chat/{utils → features/message/utils}/chat-message-session-request-tool-card.utils.ts +1 -1
- package/src/features/chat/features/message/utils/chat-message-show-content-tool-card.utils.ts +165 -0
- package/src/features/chat/{utils → features/message/utils}/chat-message-tool-card.utils.ts +1 -1
- package/src/features/chat/{utils → features/message/utils}/chat-message.utils.ts +1 -1
- package/src/features/chat/features/ncp/hooks/__tests__/use-hydrated-ncp-agent.test.tsx +57 -0
- package/src/features/chat/{hooks → features/ncp/hooks/__tests__}/use-ncp-agent-runtime.test.tsx +2 -2
- package/src/features/chat/features/ncp/hooks/__tests__/use-ncp-chat-derived-state.test.tsx +22 -0
- package/src/features/chat/features/ncp/hooks/__tests__/use-ncp-chat-query-store-sync.test.tsx +101 -0
- package/src/features/chat/{hooks → features/ncp/hooks/__tests__}/use-ncp-session-conversation.test.tsx +1 -1
- package/src/features/chat/features/ncp/hooks/__tests__/use-ui-show-content-event.test.tsx +52 -0
- package/src/features/chat/features/ncp/hooks/use-ncp-chat-derived-state.ts +37 -0
- package/src/features/chat/features/ncp/hooks/use-ncp-chat-query-store-sync.ts +28 -0
- package/src/features/chat/{hooks → features/ncp/hooks}/use-ncp-child-session-tabs-view.ts +4 -4
- package/src/features/chat/{hooks → features/ncp/hooks}/use-ncp-session-conversation.ts +1 -1
- package/src/features/chat/{hooks → features/ncp/hooks}/use-ncp-session-list-view.ts +3 -3
- package/src/features/chat/features/ncp/hooks/use-ncp-session-queries.ts +32 -0
- package/src/features/chat/features/ncp/hooks/use-ui-show-content-event.ts +14 -0
- package/src/features/chat/features/ncp/utils/ncp-chat-query-derived.utils.ts +77 -0
- package/src/features/chat/{utils → features/runtime/utils/__tests__}/ncp-app-client-fetch.utils.test.ts +1 -1
- package/src/features/chat/{utils → features/runtime/utils/__tests__}/ncp-chat-runtime-availability.utils.test.ts +1 -1
- package/src/features/chat/{utils → features/runtime/utils}/chat-runtime.utils.ts +1 -1
- package/src/features/chat/{components → features/session/components}/chat-sidebar-project-groups.tsx +21 -42
- package/src/features/chat/{components/layout → features/session/components}/chat-sidebar-session-entry.tsx +40 -13
- package/src/features/chat/{components → features/session/components}/chat-sidebar-session-item.tsx +36 -44
- package/src/features/chat/features/session/components/chat-sidebar-session-list.tsx +78 -0
- package/src/features/chat/{components/session → features/session/components}/session-context-icon.tsx +1 -1
- package/src/features/chat/{components/conversation/session-header → features/session/components/session-header/__tests__}/chat-session-header-actions.test.tsx +3 -3
- package/src/features/chat/{components/conversation/session-header → features/session/components/session-header/__tests__}/chat-session-project-badge.test.tsx +3 -3
- package/src/features/chat/{components/conversation → features/session/components}/session-header/chat-session-header-actions.tsx +15 -27
- package/src/features/chat/{components/conversation → features/session/components}/session-header/chat-session-project-badge.tsx +1 -1
- package/src/features/chat/{hooks → features/session/hooks/__tests__}/use-chat-session-project.test.tsx +2 -2
- package/src/features/chat/{hooks → features/session/hooks/__tests__}/use-chat-session-update.test.tsx +1 -1
- package/src/features/chat/{hooks → features/session/hooks}/use-chat-session-project.ts +1 -1
- package/src/features/chat/{hooks → features/session/hooks}/use-chat-session-update.ts +17 -0
- package/src/features/chat/{hooks → features/session/hooks}/use-chat-sidebar-session-label-editor.ts +1 -1
- package/src/features/chat/{hooks → features/session/hooks}/use-selected-session-context-window-indicator.ts +1 -1
- package/src/features/chat/{utils → features/session/utils/__tests__}/chat-session-display.utils.test.ts +1 -1
- package/src/features/chat/{utils → features/session/utils/__tests__}/chat-session-route.utils.test.ts +1 -1
- package/src/features/chat/{utils → features/session/utils/__tests__}/ncp-session-adapter.utils.cancelled-tool.test.ts +2 -2
- package/src/features/chat/{utils → features/session/utils/__tests__}/ncp-session-adapter.utils.test.ts +2 -2
- package/src/features/chat/{utils → features/session/utils/__tests__}/session-context.utils.test.ts +1 -1
- package/src/features/chat/features/session/utils/chat-run-metadata.utils.ts +60 -0
- package/src/features/chat/{utils → features/session/utils}/chat-session-preference-governance.utils.ts +0 -128
- package/src/features/chat/features/session/utils/chat-sidebar-session-groups.utils.ts +144 -0
- package/src/features/chat/{components → features/session-type/components/__tests__}/chat-session-type-option-item.test.tsx +1 -1
- package/src/features/chat/{components → features/session-type/components}/chat-session-type-option-item.tsx +7 -16
- package/src/features/chat/features/session-type/components/chat-sidebar-create-menu.tsx +42 -0
- package/src/features/chat/{hooks → features/session-type/hooks/__tests__}/use-chat-session-type-state.test.tsx +1 -1
- package/src/features/chat/{hooks → features/session-type/hooks}/use-chat-session-type-state.ts +23 -94
- package/src/features/chat/features/session-type/utils/chat-session-type.utils.ts +105 -0
- package/src/features/chat/{components → features/workspace/components/__tests__}/chat-session-workspace-file-preview.test.tsx +1 -1
- package/src/features/chat/{components → features/workspace/components}/chat-session-workspace-file-preview.tsx +2 -2
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-content.tsx +156 -0
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-nav.tsx +84 -0
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel.tsx +138 -0
- package/src/features/chat/{components/workspace → features/workspace/components}/session-cron-job-content.tsx +1 -1
- package/src/features/chat/features/workspace/hooks/use-chat-conversation-workspace-state.ts +63 -0
- package/src/features/chat/features/workspace/utils/__tests__/chat-workspace-panel-view-model.utils.test.ts +103 -0
- package/src/features/chat/features/workspace/utils/chat-workspace-panel-view-model.utils.ts +183 -0
- package/src/features/chat/index.ts +16 -6
- package/src/features/chat/managers/__tests__/chat-input.manager.test.ts +355 -0
- package/src/features/chat/managers/__tests__/chat-query.manager.test.ts +39 -0
- package/src/features/chat/managers/__tests__/chat-run.manager.test.ts +202 -0
- package/src/features/chat/managers/{chat-session-list.manager.test.ts → __tests__/chat-session-list.manager.test.ts} +98 -74
- package/src/features/chat/managers/{chat-session-preference-sync.manager.test.ts → __tests__/chat-session-preference-sync.manager.test.ts} +1 -1
- package/src/features/chat/managers/__tests__/chat-thread.manager.test.ts +622 -0
- package/src/features/chat/managers/__tests__/chat-ui.manager.test.ts +126 -0
- package/src/features/chat/managers/{recent-selection.manager.test.ts → __tests__/recent-selection.manager.test.ts} +1 -1
- package/src/features/chat/managers/{ncp-chat-input.manager.ts → chat-input.manager.ts} +108 -35
- package/src/features/chat/managers/chat-query.manager.ts +48 -0
- package/src/features/chat/managers/chat-run.manager.ts +107 -0
- package/src/features/chat/managers/chat-session-list.manager.ts +47 -15
- package/src/features/chat/managers/chat-session-preference-sync.manager.ts +60 -5
- package/src/features/chat/managers/{ncp-chat-thread.manager.ts → chat-thread.manager.ts} +210 -37
- package/src/features/chat/managers/chat-ui.manager.ts +55 -9
- package/src/features/chat/pages/{ncp-chat-page.test.ts → __tests__/ncp-chat-page.test.ts} +49 -12
- package/src/features/chat/pages/ncp-chat-page.tsx +123 -399
- package/src/features/chat/presenters/chat.presenter.ts +39 -0
- package/src/features/chat/stores/__tests__/chat-thread.store.test.ts +148 -0
- package/src/features/chat/stores/chat-input.store.ts +5 -1
- package/src/features/chat/stores/chat-thread.store.ts +287 -28
- package/src/features/chat/stores/ncp-chat-query.store.ts +25 -0
- package/src/features/chat/types/chat-input.types.ts +1 -0
- package/src/features/chat/types/chat-message.types.ts +1 -0
- package/src/features/chat/types/chat-run.types.ts +41 -0
- package/src/{shared → features/cron}/components/cron-config.tsx +1 -1
- package/src/features/cron/hooks/use-cron-jobs.ts +58 -0
- package/src/features/cron/index.ts +7 -0
- package/src/features/marketplace/components/{marketplace-page.test.tsx → __tests__/marketplace-page.test.tsx} +37 -1
- package/src/features/marketplace/components/curated-shelves/marketplace-curated-shelves.tsx +15 -61
- package/src/features/marketplace/components/marketplace-external-skill-source-action.tsx +14 -0
- package/src/features/marketplace/components/marketplace-item-list-view.tsx +167 -0
- package/src/features/marketplace/components/marketplace-list-card.tsx +27 -31
- package/src/features/marketplace/components/marketplace-page-data.ts +0 -6
- package/src/features/marketplace/components/marketplace-page-parts.tsx +10 -2
- package/src/features/marketplace/components/marketplace-page.tsx +110 -434
- package/src/features/marketplace/components/mcp/mcp-marketplace-card.tsx +1 -1
- package/src/features/marketplace/components/mcp/mcp-marketplace-dialogs.tsx +1 -1
- package/src/features/marketplace/components/mcp/mcp-marketplace-page.tsx +2 -1
- package/src/features/marketplace/hooks/__tests__/use-marketplace.test.tsx +109 -0
- package/src/features/marketplace/hooks/use-marketplace-item-actions.ts +101 -0
- package/src/features/marketplace/hooks/use-marketplace-item-detail.ts +109 -0
- package/src/features/marketplace/hooks/use-marketplace-list-model.ts +160 -0
- package/src/features/marketplace/hooks/use-marketplace.ts +3 -5
- package/src/features/marketplace/utils/{marketplace-installed-cache.utils.test.ts → __tests__/marketplace-installed-cache.utils.test.ts} +1 -1
- package/src/features/panel-apps/components/{panel-app-list-item.test.tsx → __tests__/panel-app-list-item.test.tsx} +1 -1
- package/src/features/panel-apps/components/{panel-app-toolbar.test.tsx → __tests__/panel-app-toolbar.test.tsx} +1 -1
- package/src/features/panel-apps/utils/{panel-app-view.utils.test.ts → __tests__/panel-app-view.utils.test.ts} +1 -1
- package/src/features/pwa/managers/{pwa-service-worker-cache.manager.test.ts → __tests__/pwa-service-worker-cache.manager.test.ts} +1 -1
- package/src/features/remote/components/remote-access-page.tsx +2 -2
- package/src/features/remote/services/{remote-access-feedback.service.test.ts → __tests__/remote-access-feedback.service.test.ts} +1 -1
- package/src/{shared → features/settings}/components/config/provider-form.tsx +7 -7
- package/src/{shared/components → features/settings/components/config}/provider-status-badge.tsx +1 -1
- package/src/{shared/components/model-config.test.tsx → features/settings/pages/__tests__/model-config-page.test.tsx} +40 -5
- package/src/{shared/components/config/providers-list.test.tsx → features/settings/pages/__tests__/providers-config-page.test.tsx} +48 -5
- package/src/{shared/components/search-config.test.tsx → features/settings/pages/__tests__/search-config-page.test.tsx} +3 -3
- package/src/{shared/components/config/secrets-config.test.tsx → features/settings/pages/__tests__/secrets-config-page.test.tsx} +3 -3
- package/src/{shared/components/model-config.tsx → features/settings/pages/model-config-page.tsx} +1 -1
- package/src/{shared/components/config/providers-list.tsx → features/settings/pages/providers-config-page.tsx} +3 -3
- package/src/{shared/components/search-config.tsx → features/settings/pages/search-config-page.tsx} +1 -1
- package/src/{shared/components/config/secrets-config.tsx → features/settings/pages/secrets-config-page.tsx} +2 -2
- package/src/{shared/components/config/provider-form-support.test.ts → features/settings/utils/__tests__/provider-form-support.utils.test.ts} +1 -1
- package/src/features/side-dock/components/{side-dock.test.tsx → __tests__/side-dock.test.tsx} +25 -0
- package/src/features/side-dock/components/side-dock.tsx +13 -0
- package/src/features/system-status/components/{runtime-control-card.test.tsx → __tests__/runtime-control-card.test.tsx} +1 -1
- package/src/features/system-status/components/{runtime-presence-card.test.tsx → __tests__/runtime-presence-card.test.tsx} +1 -1
- package/src/features/system-status/components/desktop-update-config.tsx +2 -1
- package/src/features/system-status/components/runtime-presence-card.tsx +2 -2
- package/src/features/system-status/managers/{system-status.manager.bootstrap-polling.test.ts → __tests__/system-status.manager.bootstrap-polling.test.ts} +1 -1
- package/src/features/system-status/managers/{system-status.manager.test.ts → __tests__/system-status.manager.test.ts} +1 -1
- package/src/features/system-status/utils/{system-status.utils.test.ts → __tests__/system-status.utils.test.ts} +1 -1
- package/src/platforms/desktop/types/desktop-update.types.ts +9 -0
- package/src/shared/components/actions/action-link.tsx +49 -0
- package/src/shared/components/common/{agent-avatar.test.tsx → __tests__/agent-avatar.test.tsx} +1 -1
- package/src/shared/components/common/agent-identity/use-agent-identity.ts +3 -8
- package/src/shared/components/common/brand-header.tsx +1 -1
- package/src/shared/components/common/tag-input.tsx +1 -1
- package/src/shared/components/doc-browser/{doc-browser-context.test.tsx → __tests__/doc-browser-context.test.tsx} +1 -1
- package/src/shared/components/doc-browser/doc-browser-tab-strip.tsx +64 -161
- package/src/shared/components/doc-browser/doc-browser.tsx +4 -4
- package/src/shared/components/doc-browser/managers/doc-browser.manager.ts +39 -32
- package/src/shared/components/resizable-right-panel/__tests__/resizable-right-panel.test.tsx +66 -0
- package/src/shared/components/resizable-right-panel/resizable-right-panel.tsx +11 -8
- package/src/shared/components/ui/actions/icon-action-button.tsx +53 -0
- package/src/shared/components/ui/tab-strip/__tests__/compact-tab-strip.test.tsx +52 -0
- package/src/shared/components/ui/tab-strip/compact-tab-strip.tsx +228 -0
- package/src/shared/hooks/use-app-meta.ts +10 -0
- package/src/shared/hooks/use-config.ts +1 -148
- package/src/shared/lib/api/{ncp-session.test.ts → __tests__/ncp-session.test.ts} +3 -3
- package/src/shared/lib/api/{raw-client.test.ts → __tests__/raw-client.test.ts} +1 -1
- package/src/shared/lib/api/chat-session-type.types.ts +3 -0
- package/src/shared/lib/cadence/services/{adaptive-cadence.service.test.ts → __tests__/adaptive-cadence.service.test.ts} +1 -1
- package/src/shared/lib/host-capabilities/__tests__/host-capability.manager.test.ts +50 -0
- package/src/shared/lib/host-capabilities/host-capability.manager.ts +62 -0
- package/src/shared/lib/host-capabilities/index.ts +1 -0
- package/src/shared/lib/i18n/README.md +16 -3
- package/src/shared/lib/i18n/index.ts +93 -426
- package/src/shared/lib/i18n/locales/en-US/agents.json +49 -0
- package/src/shared/lib/i18n/locales/en-US/channel-auth.json +51 -0
- package/src/shared/lib/i18n/locales/en-US/channels.json +50 -0
- package/src/shared/lib/i18n/locales/en-US/chat.json +183 -0
- package/src/shared/lib/i18n/locales/en-US/core.json +311 -0
- package/src/shared/lib/i18n/locales/en-US/cron.json +32 -0
- package/src/shared/lib/i18n/locales/en-US/desktop-update.json +90 -0
- package/src/shared/lib/i18n/locales/en-US/doc-browser.json +87 -0
- package/src/shared/lib/i18n/locales/en-US/marketplace.json +72 -0
- package/src/shared/lib/i18n/locales/en-US/path-picker.json +12 -0
- package/src/shared/lib/i18n/locales/en-US/pwa.json +26 -0
- package/src/shared/lib/i18n/locales/en-US/remote.json +168 -0
- package/src/shared/lib/i18n/locales/en-US/runtime-control.json +105 -0
- package/src/shared/lib/i18n/locales/en-US/search.json +28 -0
- package/src/shared/lib/i18n/locales/zh-CN/agents.json +49 -0
- package/src/shared/lib/i18n/locales/zh-CN/channel-auth.json +51 -0
- package/src/shared/lib/i18n/locales/zh-CN/channels.json +50 -0
- package/src/shared/lib/i18n/locales/zh-CN/chat.json +183 -0
- package/src/shared/lib/i18n/locales/zh-CN/core.json +311 -0
- package/src/shared/lib/i18n/locales/zh-CN/cron.json +32 -0
- package/src/shared/lib/i18n/locales/zh-CN/desktop-update.json +90 -0
- package/src/shared/lib/i18n/locales/zh-CN/doc-browser.json +87 -0
- package/src/shared/lib/i18n/locales/zh-CN/marketplace.json +72 -0
- package/src/shared/lib/i18n/locales/zh-CN/path-picker.json +12 -0
- package/src/shared/lib/i18n/locales/zh-CN/pwa.json +26 -0
- package/src/shared/lib/i18n/locales/zh-CN/remote.json +168 -0
- package/src/shared/lib/i18n/locales/zh-CN/runtime-control.json +105 -0
- package/src/shared/lib/i18n/locales/zh-CN/search.json +28 -0
- package/src/shared/lib/i18n/runtime/{i18n-language-owner.test.ts → __tests__/i18n-language-owner.test.ts} +2 -2
- package/src/shared/lib/navigation-history/__tests__/navigation-history.utils.test.ts +60 -0
- package/src/shared/lib/navigation-history/index.ts +1 -0
- package/src/shared/lib/navigation-history/navigation-history.utils.ts +105 -0
- package/src/shared/lib/provider-models/{index.test.ts → __tests__/index.test.ts} +1 -1
- package/src/shared/lib/transport/{app-client.test.ts → __tests__/app-client.test.ts} +3 -3
- package/src/shared/lib/transport/{remote.transport.test.ts → __tests__/remote.transport.test.ts} +1 -1
- package/src/shared/lib/transport/{sse-stream.test.ts → __tests__/sse-stream.test.ts} +1 -1
- package/tsconfig.json +2 -5
- package/vite.config.ts +4 -4
- package/vitest.config.ts +4 -0
- package/dist/assets/app-presenter-provider-CDSjiqfE.js +0 -3
- package/dist/assets/arrow-left-Dd45Mvr1.js +0 -1
- package/dist/assets/channels-list-page-D-WYFmcG.js +0 -8
- package/dist/assets/chat-page-D1X8YNTC.js +0 -105
- package/dist/assets/config-split-page-CdJEkWxv.js +0 -1
- package/dist/assets/desktop-update-config-DOi5R1fX.js +0 -1
- package/dist/assets/doc-browser-D5FJcAyz.js +0 -1
- package/dist/assets/doc-browser-DewXa6oX.js +0 -1
- package/dist/assets/doc-browser-context-CpL2m4Sp.js +0 -1
- package/dist/assets/index-Q891JiF_.css +0 -1
- package/dist/assets/index-ZDJP_uJc.js +0 -101
- package/dist/assets/loader-circle-Dz4FssYC.js +0 -1
- package/dist/assets/mcp-marketplace-page-LmMhKH5a.js +0 -1
- package/dist/assets/mcp-marketplace-page-RqISBSqO.js +0 -40
- package/dist/assets/model-config-JUsW1Khb.js +0 -1
- package/dist/assets/play-BziM-Y34.js +0 -1
- package/dist/assets/plus-DrpyArC8.js +0 -1
- package/dist/assets/provider-models-C_yOh6DE.js +0 -1
- package/dist/assets/provider-scoped-model-input-IMD4W0jD.js +0 -1
- package/dist/assets/providers-list-BsDpxNzy.js +0 -1
- package/dist/assets/remote-DjhVMpVd.js +0 -1
- package/dist/assets/rotate-cw-DMBnsYKm.js +0 -1
- package/dist/assets/runtime-config-page-DzbTVebD.js +0 -1
- package/dist/assets/search-CjHGYvTI.js +0 -1
- package/dist/assets/search-config-CJ6OPxAf.js +0 -1
- package/dist/assets/secrets-config-CYOHWL7P.js +0 -3
- package/dist/assets/tabs-Czd2mj6z.js +0 -1
- package/dist/assets/tabs-custom-Ix4nkp2h.js +0 -1
- package/dist/assets/x-dpDISboO.js +0 -1
- package/src/features/chat/components/chat-session-workspace-panel-nav.tsx +0 -232
- package/src/features/chat/components/chat-session-workspace-panel.tsx +0 -371
- package/src/features/chat/components/layout/chat-sidebar-read-state.test.tsx +0 -145
- package/src/features/chat/components/layout/chat-sidebar.test.tsx +0 -896
- package/src/features/chat/hooks/use-chat-session-label.ts +0 -18
- package/src/features/chat/hooks/use-hydrated-ncp-agent.test.tsx +0 -90
- package/src/features/chat/hooks/use-ncp-chat-derived-state.ts +0 -181
- package/src/features/chat/hooks/use-ncp-chat-page-data.test.tsx +0 -70
- package/src/features/chat/hooks/use-ncp-chat-page-data.ts +0 -260
- package/src/features/chat/managers/chat-stream-actions.manager.ts +0 -35
- package/src/features/chat/managers/ncp-chat-input.manager.test.ts +0 -232
- package/src/features/chat/managers/ncp-chat-presenter.manager.ts +0 -28
- package/src/features/chat/managers/ncp-chat-thread.manager.test.ts +0 -241
- package/src/features/chat/types/chat-stream.types.ts +0 -32
- package/src/features/chat/utils/chat-session-preference-governance.utils.test.tsx +0 -114
- package/src/features/marketplace/components/marketplace-catalog-grid.tsx +0 -114
- package/src/shared/components/resizable-right-panel/resizable-right-panel.test.tsx +0 -38
- package/src/shared/components/ui/action-link.tsx +0 -27
- package/src/shared/components/ui/config-card.tsx +0 -71
- package/src/shared/components/ui/highlight-card.tsx +0 -40
- package/src/shared/components/ui/tabs-custom.tsx +0 -49
- package/src/shared/lib/i18n/agents.ts +0 -85
- package/src/shared/lib/i18n/channel-auth.constants.ts +0 -87
- package/src/shared/lib/i18n/channels.ts +0 -53
- package/src/shared/lib/i18n/chat-labels.utils.ts +0 -206
- package/src/shared/lib/i18n/cron-labels.utils.ts +0 -32
- package/src/shared/lib/i18n/desktop-update-labels.utils.ts +0 -165
- package/src/shared/lib/i18n/marketplace-labels.utils.ts +0 -78
- package/src/shared/lib/i18n/pwa.ts +0 -62
- package/src/shared/lib/i18n/remote.ts +0 -273
- package/src/shared/lib/i18n/runtime/doc-browser-labels.utils.ts +0 -120
- package/src/shared/lib/i18n/runtime/i18n.path-picker.ts +0 -12
- package/src/shared/lib/i18n/runtime-control-labels.utils.ts +0 -180
- package/src/shared/lib/i18n/search.ts +0 -37
- /package/dist/assets/{config-hints-Ceiol9x4.js → config-hints-Cl2XAhzV.js} +0 -0
- /package/src/{app.test.tsx → __tests__/app.test.tsx} +0 -0
- /package/src/app/components/layout/{app-layout.test.tsx → __tests__/app-layout.test.tsx} +0 -0
- /package/src/app/components/layout/{runtime-status-entry.test.tsx → __tests__/runtime-status-entry.test.tsx} +0 -0
- /package/src/app/components/layout/{settings-entry-page.test.tsx → __tests__/settings-entry-page.test.tsx} +0 -0
- /package/src/app/components/layout/{sidebar.layout.test.tsx → __tests__/sidebar.layout.test.tsx} +0 -0
- /package/src/features/channels/components/config/{channel-form.test.tsx → __tests__/channel-form.test.tsx} +0 -0
- /package/src/features/channels/components/config/{weixin-channel-auth-section.test.tsx → __tests__/weixin-channel-auth-section.test.tsx} +0 -0
- /package/src/features/channels/pages/{channels-list-page.test.tsx → __tests__/channels-list-page.test.tsx} +0 -0
- /package/src/features/chat/{hooks → features/input/hooks}/use-chat-input-bar-controller.ts +0 -0
- /package/src/features/chat/{utils → features/input/utils}/chat-composer-state.utils.ts +0 -0
- /package/src/features/chat/{utils → features/input/utils}/chat-inline-token.utils.ts +0 -0
- /package/src/features/chat/{utils → features/input/utils}/chat-input-bar.utils.ts +0 -0
- /package/src/features/chat/{utils → features/input/utils}/chat-input-toolbar.utils.ts +0 -0
- /package/src/features/chat/{utils → features/message/utils}/chat-message-core.utils.ts +0 -0
- /package/src/features/chat/{utils → features/message/utils}/chat-message-partial-json.utils.ts +0 -0
- /package/src/features/chat/{utils → features/message/utils}/chat-message-tool-agent-id.utils.ts +0 -0
- /package/src/features/chat/{utils → features/message/utils}/file-operation/card.utils.ts +0 -0
- /package/src/features/chat/{utils → features/message/utils}/file-operation/diff.utils.ts +0 -0
- /package/src/features/chat/{utils → features/message/utils}/file-operation/line-builder.utils.ts +0 -0
- /package/src/features/chat/{utils → features/message/utils}/file-operation/parsed-block.utils.ts +0 -0
- /package/src/features/chat/{utils → features/message/utils}/file-operation/record-readers.utils.ts +0 -0
- /package/src/features/chat/{utils → features/runtime/utils}/ncp-app-client-fetch.utils.ts +0 -0
- /package/src/features/chat/{utils → features/runtime/utils}/ncp-chat-runtime-availability.utils.ts +0 -0
- /package/src/features/chat/{components/conversation → features/session/components}/session-header/chat-session-header-menu-item.tsx +0 -0
- /package/src/features/chat/{components/conversation → features/session/components}/session-header/chat-session-project-dialog.tsx +0 -0
- /package/src/features/chat/{components/session → features/session/components}/session-run-badge.tsx +0 -0
- /package/src/features/chat/{utils → features/session/utils}/chat-context-window-indicator.utils.ts +0 -0
- /package/src/features/chat/{utils → features/session/utils}/chat-session-display.utils.ts +0 -0
- /package/src/features/chat/{utils → features/session/utils}/chat-session-route.utils.ts +0 -0
- /package/src/features/chat/{utils → features/session/utils}/ncp-session-adapter.utils.ts +0 -0
- /package/src/features/chat/{utils → features/session/utils}/ncp-session-context-metadata.utils.ts +0 -0
- /package/src/features/chat/{utils → features/session/utils}/session-context.utils.ts +0 -0
- /package/src/features/chat/{hooks → features/session-type/hooks}/use-ncp-chat-session-types.ts +0 -0
- /package/src/features/chat/{components/workspace → features/workspace/components}/chat-session-workspace-file-breadcrumbs.tsx +0 -0
- /package/src/features/marketplace/components/{marketplace-page-detail.test.tsx → __tests__/marketplace-page-detail.test.tsx} +0 -0
- /package/src/features/marketplace/components/curated-shelves/{marketplace-curated-scene-route.test.tsx → __tests__/marketplace-curated-scene-route.test.tsx} +0 -0
- /package/src/features/marketplace/components/detail-doc/{marketplace-detail-doc.test.ts → __tests__/marketplace-detail-doc.test.ts} +0 -0
- /package/src/features/marketplace/components/mcp/{mcp-marketplace-page.test.tsx → __tests__/mcp-marketplace-page.test.tsx} +0 -0
- /package/src/features/panel-apps/managers/{panel-app-bridge.manager.test.ts → __tests__/panel-app-bridge.manager.test.ts} +0 -0
- /package/src/features/panel-apps/utils/{panel-app-doc-browser.utils.test.ts → __tests__/panel-app-doc-browser.utils.test.ts} +0 -0
- /package/src/features/pwa/components/{pwa-install-entry.test.tsx → __tests__/pwa-install-entry.test.tsx} +0 -0
- /package/src/features/pwa/managers/{pwa-install.manager.test.ts → __tests__/pwa-install.manager.test.ts} +0 -0
- /package/src/features/pwa/managers/{pwa-shell-theme.manager.test.ts → __tests__/pwa-shell-theme.manager.test.ts} +0 -0
- /package/src/features/remote/components/{remote-access-page.test.tsx → __tests__/remote-access-page.test.tsx} +0 -0
- /package/src/features/right-panel-resources/utils/{right-panel-resource-route-resolver.utils.test.ts → __tests__/right-panel-resource-route-resolver.utils.test.ts} +0 -0
- /package/src/features/right-panel-resources/utils/{right-panel-resource-uri.utils.test.ts → __tests__/right-panel-resource-uri.utils.test.ts} +0 -0
- /package/src/features/service-apps/components/{service-apps-panel.test.tsx → __tests__/service-apps-panel.test.tsx} +0 -0
- /package/src/{shared/components → features/settings/components/config}/provider-advanced-settings-section.tsx +0 -0
- /package/src/{shared/components → features/settings/components/config}/provider-auth-section.tsx +0 -0
- /package/src/{shared → features/settings}/components/config/provider-models-section.tsx +0 -0
- /package/src/{shared/components → features/settings/components/config}/provider-pill-selector.tsx +0 -0
- /package/src/{shared → features/settings}/components/config/secrets-config-form.tsx +0 -0
- /package/src/features/settings/pages/{language-settings-page.test.tsx → __tests__/language-settings-page.test.tsx} +0 -0
- /package/src/{shared/components/config/provider-form-support.ts → features/settings/utils/provider-form-support.utils.ts} +0 -0
- /package/src/features/side-dock/managers/{side-dock.manager.test.ts → __tests__/side-dock.manager.test.ts} +0 -0
- /package/src/features/side-dock/utils/{side-dock-item.utils.test.ts → __tests__/side-dock-item.utils.test.ts} +0 -0
- /package/src/features/system-status/components/{desktop-update-config.test.tsx → __tests__/desktop-update-config.test.tsx} +0 -0
- /package/src/features/system-status/pages/{runtime-config-page.test.tsx → __tests__/runtime-config-page.test.tsx} +0 -0
- /package/src/platforms/desktop/components/{desktop-app-shell.test.tsx → __tests__/desktop-app-shell.test.tsx} +0 -0
- /package/src/platforms/mobile/components/{mobile-app-shell.test.tsx → __tests__/mobile-app-shell.test.tsx} +0 -0
- /package/src/platforms/mobile/components/{mobile-bottom-nav.test.tsx → __tests__/mobile-bottom-nav.test.tsx} +0 -0
- /package/src/shared/components/common/{brand-header.test.tsx → __tests__/brand-header.test.tsx} +0 -0
- /package/src/shared/components/doc-browser/{doc-browser.test.tsx → __tests__/doc-browser.test.tsx} +0 -0
- /package/src/shared/components/{ui → feedback}/notice-card.tsx +0 -0
- /package/src/shared/components/path-picker/{server-path-picker-dialog.test.tsx → __tests__/server-path-picker-dialog.test.tsx} +0 -0
- /package/src/shared/components/{ui → settings}/setting-row.tsx +0 -0
- /package/src/shared/components/{ui → status}/status-dot.tsx +0 -0
- /package/src/shared/components/{ui → tags}/tag-chip.tsx +0 -0
- /package/src/shared/lib/api/{api-base.test.ts → __tests__/api-base.test.ts} +0 -0
- /package/src/shared/lib/api/{client.test.ts → __tests__/client.test.ts} +0 -0
- /package/src/shared/lib/api/{ncp-session-query-cache.utils.test.ts → __tests__/ncp-session-query-cache.utils.test.ts} +0 -0
- /package/src/shared/lib/app-resource-uri/{app-resource-uri.test.ts → __tests__/app-resource-uri.test.ts} +0 -0
- /package/src/shared/lib/resource-uri/utils/{resource-uri-resolver.utils.test.ts → __tests__/resource-uri-resolver.utils.test.ts} +0 -0
- /package/src/shared/lib/session-project/{workspace-file-breadcrumb.test.ts → __tests__/workspace-file-breadcrumb.test.ts} +0 -0
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
MarketplaceInstalledRecord,
|
|
3
|
-
MarketplaceItemSummary,
|
|
4
|
-
MarketplaceManageAction,
|
|
5
|
-
} from "@/shared/lib/api";
|
|
6
|
-
import {
|
|
7
|
-
MarketplaceListCard,
|
|
8
|
-
type InstallState,
|
|
9
|
-
type ManageState,
|
|
10
|
-
} from "@/features/marketplace/components/marketplace-list-card";
|
|
11
|
-
import { MarketplaceListSkeleton } from "@/features/marketplace/components/marketplace-page-parts";
|
|
12
|
-
import {
|
|
13
|
-
findInstalledRecordForItem,
|
|
14
|
-
type InstalledRenderEntry,
|
|
15
|
-
} from "@/features/marketplace/components/marketplace-page-data";
|
|
16
|
-
import { cn } from "@/shared/lib/utils";
|
|
17
|
-
|
|
18
|
-
type MarketplaceCatalogGridProps = {
|
|
19
|
-
scope: "all" | "installed";
|
|
20
|
-
title: string;
|
|
21
|
-
summary: string;
|
|
22
|
-
showTitle: boolean;
|
|
23
|
-
showListSkeleton: boolean;
|
|
24
|
-
skeletonCardCount: number;
|
|
25
|
-
allItems: MarketplaceItemSummary[];
|
|
26
|
-
installedEntries: InstalledRenderEntry[];
|
|
27
|
-
installedRecordLookup: Map<string, MarketplaceInstalledRecord>;
|
|
28
|
-
language: string;
|
|
29
|
-
installState: InstallState;
|
|
30
|
-
manageState: ManageState;
|
|
31
|
-
onOpen: (item?: MarketplaceItemSummary, record?: MarketplaceInstalledRecord) => void;
|
|
32
|
-
onInstall: (item: MarketplaceItemSummary) => void;
|
|
33
|
-
onManage: (
|
|
34
|
-
action: MarketplaceManageAction,
|
|
35
|
-
record: MarketplaceInstalledRecord,
|
|
36
|
-
) => void;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export function MarketplaceCatalogGrid(props: MarketplaceCatalogGridProps) {
|
|
40
|
-
const {
|
|
41
|
-
scope,
|
|
42
|
-
title,
|
|
43
|
-
summary,
|
|
44
|
-
showTitle,
|
|
45
|
-
showListSkeleton,
|
|
46
|
-
skeletonCardCount,
|
|
47
|
-
allItems,
|
|
48
|
-
installedEntries,
|
|
49
|
-
installedRecordLookup,
|
|
50
|
-
language,
|
|
51
|
-
installState,
|
|
52
|
-
manageState,
|
|
53
|
-
onOpen,
|
|
54
|
-
onInstall,
|
|
55
|
-
onManage,
|
|
56
|
-
} = props;
|
|
57
|
-
|
|
58
|
-
return (
|
|
59
|
-
<section className={cn("flex min-h-full flex-col", showTitle && "gap-3")}>
|
|
60
|
-
{showTitle && (
|
|
61
|
-
<div className="flex items-center justify-between gap-3">
|
|
62
|
-
<h3 className="text-[14px] font-semibold text-gray-950">{title}</h3>
|
|
63
|
-
<span className="text-[12px] text-gray-500">{summary}</span>
|
|
64
|
-
</div>
|
|
65
|
-
)}
|
|
66
|
-
|
|
67
|
-
<div
|
|
68
|
-
data-testid={showListSkeleton ? "marketplace-list-skeleton" : undefined}
|
|
69
|
-
className={cn(
|
|
70
|
-
"grid grid-cols-1 gap-3 lg:grid-cols-2 2xl:grid-cols-3",
|
|
71
|
-
showListSkeleton && "min-h-0 flex-1 auto-rows-[104px] content-start",
|
|
72
|
-
)}
|
|
73
|
-
>
|
|
74
|
-
{showListSkeleton && (
|
|
75
|
-
<MarketplaceListSkeleton count={skeletonCardCount} />
|
|
76
|
-
)}
|
|
77
|
-
|
|
78
|
-
{!showListSkeleton &&
|
|
79
|
-
scope === "all" &&
|
|
80
|
-
allItems.map((item) => (
|
|
81
|
-
<MarketplaceListCard
|
|
82
|
-
key={item.id}
|
|
83
|
-
item={item}
|
|
84
|
-
record={findInstalledRecordForItem(item, installedRecordLookup)}
|
|
85
|
-
language={language}
|
|
86
|
-
installState={installState}
|
|
87
|
-
manageState={manageState}
|
|
88
|
-
onOpen={() =>
|
|
89
|
-
onOpen(item, findInstalledRecordForItem(item, installedRecordLookup))
|
|
90
|
-
}
|
|
91
|
-
onInstall={onInstall}
|
|
92
|
-
onManage={onManage}
|
|
93
|
-
/>
|
|
94
|
-
))}
|
|
95
|
-
|
|
96
|
-
{!showListSkeleton &&
|
|
97
|
-
scope === "installed" &&
|
|
98
|
-
installedEntries.map((entry) => (
|
|
99
|
-
<MarketplaceListCard
|
|
100
|
-
key={entry.key}
|
|
101
|
-
item={entry.item}
|
|
102
|
-
record={entry.record}
|
|
103
|
-
language={language}
|
|
104
|
-
installState={installState}
|
|
105
|
-
manageState={manageState}
|
|
106
|
-
onOpen={() => onOpen(entry.item, entry.record)}
|
|
107
|
-
onInstall={onInstall}
|
|
108
|
-
onManage={onManage}
|
|
109
|
-
/>
|
|
110
|
-
))}
|
|
111
|
-
</div>
|
|
112
|
-
</section>
|
|
113
|
-
);
|
|
114
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { fireEvent, render, screen } from "@testing-library/react";
|
|
2
|
-
import { describe, expect, it } from "vitest";
|
|
3
|
-
import { ResizableRightPanel } from "./resizable-right-panel";
|
|
4
|
-
|
|
5
|
-
describe("ResizableRightPanel", () => {
|
|
6
|
-
it("resizes horizontally from the left handle and clamps to max width", () => {
|
|
7
|
-
render(
|
|
8
|
-
<ResizableRightPanel
|
|
9
|
-
data-testid="right-panel"
|
|
10
|
-
defaultWidth={420}
|
|
11
|
-
minWidth={320}
|
|
12
|
-
maxWidth={500}
|
|
13
|
-
>
|
|
14
|
-
Content
|
|
15
|
-
</ResizableRightPanel>,
|
|
16
|
-
);
|
|
17
|
-
|
|
18
|
-
fireEvent.mouseDown(screen.getByTestId("resizable-right-panel-handle"), {
|
|
19
|
-
clientX: 800,
|
|
20
|
-
});
|
|
21
|
-
fireEvent.mouseMove(window, { clientX: 600 });
|
|
22
|
-
|
|
23
|
-
expect(screen.getByTestId("right-panel").style.width).toBe("500px");
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it("does not render resize controls in overlay mode", () => {
|
|
27
|
-
render(
|
|
28
|
-
<ResizableRightPanel data-testid="right-panel" overlay>
|
|
29
|
-
Content
|
|
30
|
-
</ResizableRightPanel>,
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
expect(
|
|
34
|
-
screen.queryByTestId("resizable-right-panel-handle"),
|
|
35
|
-
).toBeNull();
|
|
36
|
-
expect(screen.getByTestId("right-panel").className).toContain("fixed");
|
|
37
|
-
});
|
|
38
|
-
});
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { cn } from '@/shared/lib/utils';
|
|
2
|
-
import { ArrowRight } from 'lucide-react';
|
|
3
|
-
|
|
4
|
-
interface ActionLinkProps {
|
|
5
|
-
label: string;
|
|
6
|
-
className?: string;
|
|
7
|
-
onClick?: () => void;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Unified action link with arrow indicator.
|
|
12
|
-
* Used in card footers for "Configure →", "Enable →", etc.
|
|
13
|
-
*/
|
|
14
|
-
export function ActionLink({ label, className, onClick }: ActionLinkProps) {
|
|
15
|
-
return (
|
|
16
|
-
<span
|
|
17
|
-
onClick={onClick}
|
|
18
|
-
className={cn(
|
|
19
|
-
'inline-flex items-center gap-1 text-[13px] font-medium text-gray-600 hover:text-primary transition-colors cursor-pointer group/action',
|
|
20
|
-
className
|
|
21
|
-
)}
|
|
22
|
-
>
|
|
23
|
-
{label}
|
|
24
|
-
<ArrowRight className="h-3 w-3 transition-transform group-hover/action:translate-x-0.5" />
|
|
25
|
-
</span>
|
|
26
|
-
);
|
|
27
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { cn } from '@/shared/lib/utils';
|
|
3
|
-
|
|
4
|
-
interface ConfigCardProps {
|
|
5
|
-
children: React.ReactNode;
|
|
6
|
-
onClick?: () => void;
|
|
7
|
-
className?: string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Unified config card used for Channels, Providers, etc.
|
|
12
|
-
* Style follows YouMind: generous padding, large radius, soft shadow.
|
|
13
|
-
*/
|
|
14
|
-
export function ConfigCard({ children, onClick, className }: ConfigCardProps) {
|
|
15
|
-
return (
|
|
16
|
-
<div
|
|
17
|
-
onClick={onClick}
|
|
18
|
-
className={cn(
|
|
19
|
-
'group relative flex flex-col p-6 rounded-2xl border border-gray-200/50 bg-white shadow-card',
|
|
20
|
-
'transition-all duration-base cursor-pointer',
|
|
21
|
-
'hover:shadow-card-hover hover:border-gray-200',
|
|
22
|
-
className
|
|
23
|
-
)}
|
|
24
|
-
>
|
|
25
|
-
{children}
|
|
26
|
-
</div>
|
|
27
|
-
);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
interface ConfigCardHeaderProps {
|
|
31
|
-
children: React.ReactNode;
|
|
32
|
-
className?: string;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export function ConfigCardHeader({ children, className }: ConfigCardHeaderProps) {
|
|
36
|
-
return (
|
|
37
|
-
<div className={cn('flex items-start justify-between mb-4', className)}>
|
|
38
|
-
{children}
|
|
39
|
-
</div>
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
interface ConfigCardBodyProps {
|
|
44
|
-
title: string;
|
|
45
|
-
description?: string;
|
|
46
|
-
className?: string;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export function ConfigCardBody({ title, description, className }: ConfigCardBodyProps) {
|
|
50
|
-
return (
|
|
51
|
-
<div className={cn('flex-1', className)}>
|
|
52
|
-
<h3 className="text-[14px] font-bold text-gray-900 mb-0.5">{title}</h3>
|
|
53
|
-
{description && (
|
|
54
|
-
<p className="text-[12px] text-gray-400 leading-relaxed line-clamp-2">{description}</p>
|
|
55
|
-
)}
|
|
56
|
-
</div>
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
interface ConfigCardFooterProps {
|
|
61
|
-
children: React.ReactNode;
|
|
62
|
-
className?: string;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export function ConfigCardFooter({ children, className }: ConfigCardFooterProps) {
|
|
66
|
-
return (
|
|
67
|
-
<div className={cn('mt-4 pt-3 flex items-center justify-between', className)}>
|
|
68
|
-
{children}
|
|
69
|
-
</div>
|
|
70
|
-
);
|
|
71
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { cn } from '@/shared/lib/utils';
|
|
3
|
-
import { ArrowRight } from 'lucide-react';
|
|
4
|
-
|
|
5
|
-
interface HighlightCardProps {
|
|
6
|
-
category: string;
|
|
7
|
-
title: string;
|
|
8
|
-
description: string;
|
|
9
|
-
image: string;
|
|
10
|
-
gradient: string;
|
|
11
|
-
className?: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function HighlightCard({ category, title, description, image, gradient, className }: HighlightCardProps) {
|
|
15
|
-
return (
|
|
16
|
-
<div className={cn(
|
|
17
|
-
'group relative overflow-hidden rounded-xl bg-white border border-gray-200 flex h-[180px] transition-all duration-base hover:shadow-card-hover hover:border-gray-300 cursor-pointer',
|
|
18
|
-
className
|
|
19
|
-
)}>
|
|
20
|
-
<div className="flex-1 p-6 flex flex-col">
|
|
21
|
-
<span className="text-[10px] font-semibold text-gray-400 uppercase tracking-widest mb-2">{category}</span>
|
|
22
|
-
<h3 className="text-lg font-semibold text-gray-900 leading-tight mb-2 group-hover:text-primary transition-colors duration-fast">{title}</h3>
|
|
23
|
-
<p className="text-sm text-gray-500 line-clamp-2 leading-relaxed max-w-[200px]">{description}</p>
|
|
24
|
-
|
|
25
|
-
<div className="mt-auto flex items-center gap-1 text-xs font-medium text-primary opacity-0 group-hover:opacity-100 transition-opacity duration-fast">
|
|
26
|
-
Learn more <ArrowRight className="h-3 w-3" />
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
|
|
30
|
-
<div className={cn('w-[160px] relative overflow-hidden', gradient)}>
|
|
31
|
-
<img
|
|
32
|
-
src={image}
|
|
33
|
-
alt={title}
|
|
34
|
-
className="w-full h-full object-cover mix-blend-multiply opacity-90 group-hover:scale-110 transition-transform duration-slow"
|
|
35
|
-
/>
|
|
36
|
-
<div className="absolute inset-0 bg-gradient-to-l from-transparent to-white/10" />
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
);
|
|
40
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { cn } from '@/shared/lib/utils';
|
|
3
|
-
import { formatNumber } from '@/shared/lib/i18n';
|
|
4
|
-
|
|
5
|
-
interface Tab {
|
|
6
|
-
id: string;
|
|
7
|
-
label: string;
|
|
8
|
-
count?: number;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
interface TabsProps {
|
|
12
|
-
tabs: Tab[];
|
|
13
|
-
activeTab: string;
|
|
14
|
-
onChange: (id: string) => void;
|
|
15
|
-
className?: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function Tabs({ tabs, activeTab, onChange, className }: TabsProps) {
|
|
19
|
-
return (
|
|
20
|
-
<div className={cn('flex items-center gap-6 border-b border-gray-200/60 mb-6', className)}>
|
|
21
|
-
{tabs.map((tab) => {
|
|
22
|
-
const isActive = activeTab === tab.id;
|
|
23
|
-
return (
|
|
24
|
-
<button
|
|
25
|
-
key={tab.id}
|
|
26
|
-
onClick={() => onChange(tab.id)}
|
|
27
|
-
className={cn(
|
|
28
|
-
'relative pb-3 text-[14px] font-medium transition-all duration-fast flex items-center gap-1.5',
|
|
29
|
-
isActive
|
|
30
|
-
? 'text-gray-900'
|
|
31
|
-
: 'text-gray-600 hover:text-gray-900'
|
|
32
|
-
)}
|
|
33
|
-
>
|
|
34
|
-
{tab.label}
|
|
35
|
-
{tab.count !== undefined && (
|
|
36
|
-
<span className={cn(
|
|
37
|
-
'text-[11px] font-medium',
|
|
38
|
-
isActive ? 'text-gray-500' : 'text-gray-500'
|
|
39
|
-
)}>{formatNumber(tab.count)}</span>
|
|
40
|
-
)}
|
|
41
|
-
{isActive && (
|
|
42
|
-
<div className="absolute bottom-0 left-0 right-0 h-[2px] bg-primary rounded-full" />
|
|
43
|
-
)}
|
|
44
|
-
</button>
|
|
45
|
-
);
|
|
46
|
-
})}
|
|
47
|
-
</div>
|
|
48
|
-
);
|
|
49
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
export const AGENT_LABELS: Record<string, { zh: string; en: string }> = {
|
|
2
|
-
agentsPageTitle: { zh: 'Agent 管理', en: 'Agents' },
|
|
3
|
-
agentsPageDescription: {
|
|
4
|
-
zh: '管理可对话的 Agent 身份。每个 Agent 都有自己的主目录、设定、记忆与技能。',
|
|
5
|
-
en: 'Manage conversational agent identities. Each agent owns its home directory, setup, memory, and skills.'
|
|
6
|
-
},
|
|
7
|
-
agentsHeroEyebrow: { zh: 'Agent 管理台', en: 'Agent Gallery' },
|
|
8
|
-
agentsHeroTitle: {
|
|
9
|
-
zh: '让每个 Agent 都像真正的协作者一样存在',
|
|
10
|
-
en: 'Give every agent the presence of a real collaborator'
|
|
11
|
-
},
|
|
12
|
-
agentsHeroDescription: {
|
|
13
|
-
zh: '在这里浏览、创建并切换不同的 Agent 身份。每个 Agent 都有自己的头像、名称、主目录,以及独立的记忆与技能空间。',
|
|
14
|
-
en: 'Browse, create, and choose distinct agent identities. Every agent carries its own avatar, name, home directory, memory, and skills space.'
|
|
15
|
-
},
|
|
16
|
-
agentsCreateButton: { zh: '新增 Agent', en: 'New Agent' },
|
|
17
|
-
agentsCreateDialogTitle: { zh: '创建新的 Agent 身份', en: 'Create a new agent identity' },
|
|
18
|
-
agentsCreateDialogDescription: {
|
|
19
|
-
zh: '默认逻辑保持简单。只填必要信息,其余能力继续走统一配置与主目录模板。',
|
|
20
|
-
en: 'Keep the flow simple. Provide only the essentials and let shared defaults plus the home directory template do the rest.'
|
|
21
|
-
},
|
|
22
|
-
agentsCreateDialogHint: {
|
|
23
|
-
zh: '如果你希望让 AI 自动完成全部自定义,也可以继续使用 `nextclaw agents new`。',
|
|
24
|
-
en: 'If you want AI to automate the full setup, you can still use `nextclaw agents new`.'
|
|
25
|
-
},
|
|
26
|
-
agentsCreateTitle: { zh: '创建 Agent', en: 'Create Agent' },
|
|
27
|
-
agentsCreateDescription: {
|
|
28
|
-
zh: '这里提供轻量入口。完整自动化创建链路也可通过 `nextclaw agents new` 使用。',
|
|
29
|
-
en: 'This is the lightweight UI entry. The full automation path is also available through `nextclaw agents new`.'
|
|
30
|
-
},
|
|
31
|
-
agentsFormIdPlaceholder: { zh: 'Agent ID,例如 engineer', en: 'Agent ID, for example engineer' },
|
|
32
|
-
agentsFormNamePlaceholder: { zh: '显示名称,可选', en: 'Display name, optional' },
|
|
33
|
-
agentsFormDescriptionPlaceholder: { zh: '角色描述,可选', en: 'Role description, optional' },
|
|
34
|
-
agentsFormAvatarPlaceholder: { zh: '头像 URL 或本地路径,可选', en: 'Avatar URL or local path, optional' },
|
|
35
|
-
agentsFormHomePlaceholder: { zh: '主目录,可选', en: 'Home Directory, optional' },
|
|
36
|
-
agentsFormRuntimePlaceholder: { zh: 'Runtime(如 native 或 codex,可选)', en: 'Runtime (e.g. native or codex, optional)' },
|
|
37
|
-
agentsRuntimeSelectPlaceholder: { zh: '选择 Runtime', en: 'Select runtime' },
|
|
38
|
-
agentsRuntimeUnavailableHelp: {
|
|
39
|
-
zh: '当前 Runtime 已不在可用列表中;建议改选一个已安装且可用的 Runtime。',
|
|
40
|
-
en: 'This runtime is no longer available in the current list. Switch to an installed and available runtime.'
|
|
41
|
-
},
|
|
42
|
-
agentsCreateAction: { zh: '创建 Agent', en: 'Create Agent' },
|
|
43
|
-
agentsEditAction: { zh: '编辑', en: 'Edit' },
|
|
44
|
-
agentsEditDialogTitle: { zh: '编辑 Agent 身份', en: 'Edit agent identity' },
|
|
45
|
-
agentsEditDialogDescription: {
|
|
46
|
-
zh: '更新名称、角色描述与头像。Agent ID 与主目录保持稳定,避免影响既有记忆、技能与会话。',
|
|
47
|
-
en: 'Update the name, role description, and avatar. The agent ID and home directory stay stable to protect existing memory, skills, and sessions.'
|
|
48
|
-
},
|
|
49
|
-
agentsEditHomeReadonly: { zh: '主目录保持不变', en: 'Home directory stays unchanged' },
|
|
50
|
-
agentsEditHomeReadonlyHint: {
|
|
51
|
-
zh: '如需迁移主目录,请走独立配置迁移流程,避免意外丢失 Agent 上下文。',
|
|
52
|
-
en: 'Use a dedicated config migration flow to move the home directory and avoid losing agent context unexpectedly.'
|
|
53
|
-
},
|
|
54
|
-
agentsEditSaveAction: { zh: '保存编辑', en: 'Save edits' },
|
|
55
|
-
agentsRemoveAction: { zh: '移除', en: 'Remove' },
|
|
56
|
-
agentsNewChat: { zh: '新建会话', en: 'New Chat' },
|
|
57
|
-
agentsLoading: { zh: '正在加载 Agent...', en: 'Loading agents...' },
|
|
58
|
-
agentsEmpty: { zh: '当前还没有附加 Agent', en: 'No extra agents yet' },
|
|
59
|
-
agentsEmptyDescription: {
|
|
60
|
-
zh: '先创建第一个专职 Agent,让它拥有自己的名字、头像与主目录。',
|
|
61
|
-
en: 'Create the first specialist agent with its own name, avatar, and home directory.'
|
|
62
|
-
},
|
|
63
|
-
agentsBuiltIn: { zh: '内建', en: 'Built-in' },
|
|
64
|
-
agentsCustom: { zh: '自定义', en: 'Custom' },
|
|
65
|
-
agentsOverviewTotal: { zh: '全部 Agent', en: 'Conversational agents' },
|
|
66
|
-
agentsOverviewBuiltIn: { zh: '系统主 Agent', en: 'System main agents' },
|
|
67
|
-
agentsOverviewCustom: { zh: '专职 Agent', en: 'Specialist agents' },
|
|
68
|
-
agentsCardBuiltInSummary: {
|
|
69
|
-
zh: '系统主 Agent,适合作为默认入口与总控协作者。',
|
|
70
|
-
en: 'The built-in main agent, ideal as the default entry and coordinating collaborator.'
|
|
71
|
-
},
|
|
72
|
-
agentsCardCustomSummary: {
|
|
73
|
-
zh: '专属 Agent 身份,可沉淀自己的记忆、技能与角色风格。',
|
|
74
|
-
en: 'A dedicated identity with its own memory, skills, and role style.'
|
|
75
|
-
},
|
|
76
|
-
agentsCardRuntimeLabel: { zh: 'Runtime', en: 'Runtime' },
|
|
77
|
-
agentsCardHomeLabel: { zh: '主目录', en: 'Home Directory' },
|
|
78
|
-
agentsCardAvatarLabel: { zh: 'Avatar', en: 'Avatar' },
|
|
79
|
-
agentsCardStartChat: { zh: '开始对话', en: 'Start Chat' },
|
|
80
|
-
agentsCardBuiltInTag: { zh: '系统主', en: 'Main Agent' },
|
|
81
|
-
agentsCardCustomTag: { zh: '专职', en: 'Specialist' },
|
|
82
|
-
chatDraftAgentTitle: { zh: '本次会话 Agent', en: 'Draft agent' },
|
|
83
|
-
chatDraftAgentDescription: { zh: '创建后不可切换', en: 'Locked after creation' },
|
|
84
|
-
chatDraftAgentCurrent: { zh: '当前 Agent', en: 'Current Agent' }
|
|
85
|
-
};
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
export const CHANNEL_AUTH_LABELS: Record<string, { zh: string; en: string }> = {
|
|
2
|
-
weixinAuthTitle: { zh: '扫码连接微信', en: 'Connect Weixin by QR' },
|
|
3
|
-
weixinAuthDescription: { zh: '微信渠道现在以扫码连接为主流程。', en: 'Weixin now uses QR login as the primary setup flow.' },
|
|
4
|
-
weixinAuthHint: {
|
|
5
|
-
zh: '通常只需要点击按钮并扫码确认,连接成功后会自动写入配置。',
|
|
6
|
-
en: 'In most cases you only need to start the flow, scan the QR code, and confirm on your phone. The config will be saved automatically.'
|
|
7
|
-
},
|
|
8
|
-
weixinAuthCapabilityHint: {
|
|
9
|
-
zh: '连接成功后,Agent 可以通过微信渠道向已知微信用户主动发消息。',
|
|
10
|
-
en: 'After connecting, the agent can proactively message known Weixin users through this channel.'
|
|
11
|
-
},
|
|
12
|
-
weixinAuthPrimaryAccount: { zh: '当前默认账号', en: 'Current default account' },
|
|
13
|
-
weixinAuthConnectedAccounts: { zh: '已连接账号', en: 'Connected accounts' },
|
|
14
|
-
weixinAuthBaseUrl: { zh: '当前接口地址', en: 'Current API base URL' },
|
|
15
|
-
weixinAuthConnect: { zh: '扫码连接微信', en: 'Scan QR to connect Weixin' },
|
|
16
|
-
weixinAuthReconnect: { zh: '重新扫码连接', en: 'Reconnect with QR' },
|
|
17
|
-
weixinAuthStarting: { zh: '正在生成二维码...', en: 'Generating QR code...' },
|
|
18
|
-
weixinAuthWaiting: { zh: '等待扫码确认', en: 'Waiting for scan confirmation' },
|
|
19
|
-
weixinAuthScanned: { zh: '已扫码,等待确认', en: 'Scanned, waiting for confirmation' },
|
|
20
|
-
weixinAuthAuthorized: { zh: '已连接', en: 'Connected' },
|
|
21
|
-
weixinAuthConnectedDisabled: { zh: '已连接,但渠道未启用', en: 'Connected, but channel inactive' },
|
|
22
|
-
weixinAuthNotConnected: { zh: '未连接', en: 'Not connected' },
|
|
23
|
-
weixinAuthDisabledHint: {
|
|
24
|
-
zh: '当前账号已完成扫码连接,但渠道处于未启用状态。打开 Enabled 后才会开始收发消息。',
|
|
25
|
-
en: 'This account is connected, but the channel is inactive. Turn on Enabled before it can send or receive messages.'
|
|
26
|
-
},
|
|
27
|
-
weixinAuthRetryRequired: { zh: '二维码已失效,请重新扫码。', en: 'QR session expired. Please start again.' },
|
|
28
|
-
weixinAuthQrAlt: { zh: '微信登录二维码', en: 'Weixin login QR code' },
|
|
29
|
-
weixinAuthScanPrompt: { zh: '请用微信扫码,并在手机上确认登录。', en: 'Scan with Weixin and confirm the login on your phone.' },
|
|
30
|
-
weixinAuthExpiresAt: { zh: '二维码过期时间', en: 'QR expires at' },
|
|
31
|
-
weixinAuthOpenQr: { zh: '新窗口打开二维码', en: 'Open QR code in new tab' },
|
|
32
|
-
weixinAuthReadyTitle: { zh: '准备连接微信', en: 'Ready to connect Weixin' },
|
|
33
|
-
weixinAuthReadyDescription: {
|
|
34
|
-
zh: '点击左侧按钮后,这里会显示二维码。整个首配流程默认不需要手动填写底层参数。',
|
|
35
|
-
en: 'After you start the flow, the QR code will appear here. Most first-time setups do not require filling low-level fields manually.'
|
|
36
|
-
},
|
|
37
|
-
weixinAuthAdvancedTitle: { zh: '高级设置', en: 'Advanced settings' },
|
|
38
|
-
weixinAuthAdvancedDescription: {
|
|
39
|
-
zh: '仅在你需要自定义接口地址、账号映射或白名单时再展开这些字段。',
|
|
40
|
-
en: 'Expand these fields only when you need to customize the API base URL, account mapping, or allowlist.'
|
|
41
|
-
},
|
|
42
|
-
feishuAuthTitle: { zh: '扫码连接飞书', en: 'Connect Feishu by QR' },
|
|
43
|
-
feishuAuthCreateNew: { zh: '创建新智能体', en: 'Create new agent' },
|
|
44
|
-
feishuAuthConnectExisting: { zh: '连接已有智能体', en: 'Connect existing agent' },
|
|
45
|
-
feishuAuthDescription: { zh: '飞书渠道使用扫码创建新的智能体,不再要求手动复制应用凭证。', en: 'Feishu can create a new agent by QR, so you no longer need to copy app credentials manually.' },
|
|
46
|
-
feishuAuthHint: {
|
|
47
|
-
zh: '点击按钮后用飞书扫码确认,连接成功后会自动保存新智能体凭证并启用 WebSocket 收发。',
|
|
48
|
-
en: 'Start the flow, scan with Feishu, and the new agent credentials will be saved automatically for WebSocket messaging.'
|
|
49
|
-
},
|
|
50
|
-
feishuAuthCapabilityHint: {
|
|
51
|
-
zh: '连接成功后,Agent 可以通过飞书自建应用收发私聊和群聊消息。',
|
|
52
|
-
en: 'After connecting, the agent can send and receive Feishu direct and group messages through the registered app.'
|
|
53
|
-
},
|
|
54
|
-
feishuAuthDisabledHint: {
|
|
55
|
-
zh: '当前飞书应用已完成扫码连接,但渠道处于未启用状态。打开 Enabled 后才会开始收发消息。',
|
|
56
|
-
en: 'This Feishu app is connected, but the channel is inactive. Turn on Enabled before it can send or receive messages.'
|
|
57
|
-
},
|
|
58
|
-
feishuAuthConnect: { zh: '扫码连接飞书', en: 'Scan QR to connect Feishu' },
|
|
59
|
-
feishuAuthQrAlt: { zh: '飞书智能体创建二维码', en: 'Feishu agent creation QR code' },
|
|
60
|
-
feishuAuthScanPrompt: { zh: '请用飞书扫码,并按页面提示完成智能体创建授权。', en: 'Scan with Feishu and follow the prompts to finish agent creation.' },
|
|
61
|
-
feishuAuthReadyTitle: { zh: '准备连接飞书', en: 'Ready to connect Feishu' },
|
|
62
|
-
feishuAuthReadyDescription: {
|
|
63
|
-
zh: '点击左侧按钮后,这里会显示智能体创建二维码。已有智能体请切换到连接入口。',
|
|
64
|
-
en: 'After you start the flow, the agent creation QR code will appear here. Use the existing-agent tab when you already have one.'
|
|
65
|
-
},
|
|
66
|
-
feishuAuthAdvancedTitle: { zh: '高级设置', en: 'Advanced settings' },
|
|
67
|
-
feishuAuthAdvancedDescription: {
|
|
68
|
-
zh: '仅在你需要切换 Feishu/Lark 域名、指定默认账号、白名单或群聊策略时再展开这些字段。',
|
|
69
|
-
en: 'Expand these fields only when you need to switch Feishu/Lark domains, choose a default account, or adjust allowlist and group policies.'
|
|
70
|
-
},
|
|
71
|
-
feishuAuthDomain: {
|
|
72
|
-
zh: '飞书平台',
|
|
73
|
-
en: 'Feishu platform'
|
|
74
|
-
},
|
|
75
|
-
feishuPlatform: { zh: '平台', en: 'Platform' },
|
|
76
|
-
feishuExistingAgentTitle: { zh: '连接已有飞书智能体', en: 'Connect an existing Feishu agent' },
|
|
77
|
-
feishuExistingAgentDescription: { zh: '填入已有智能体的 App ID 和 App Secret。', en: 'Enter the App ID and App Secret for an existing agent.' },
|
|
78
|
-
feishuExistingAgentHint: {
|
|
79
|
-
zh: '在飞书开放平台选择已有智能体,进入基础信息里的凭证与基础信息,然后复制凭证回来验证。',
|
|
80
|
-
en: 'Open the developer console, choose an existing agent, then copy the credentials from its basic information page.'
|
|
81
|
-
},
|
|
82
|
-
feishuExistingAgentOpenFeishuList: { zh: '打开飞书智能体列表', en: 'Open Feishu agent list' },
|
|
83
|
-
feishuExistingAgentOpenLarkList: { zh: '打开 Lark 智能体列表', en: 'Open Lark agent list' },
|
|
84
|
-
feishuExistingAgentConnect: { zh: '验证并连接', en: 'Verify and connect' },
|
|
85
|
-
feishuExistingAgentConnecting: { zh: '正在验证', en: 'Verifying' },
|
|
86
|
-
feishuExistingAgentConnectSuccess: { zh: '飞书智能体已连接', en: 'Feishu agent connected' }
|
|
87
|
-
};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
export const CHANNEL_LABELS: Record<string, { zh: string; en: string }> = {
|
|
2
|
-
channelsPageTitle: { zh: '消息渠道', en: 'Message Channels' },
|
|
3
|
-
channelsPageDescription: {
|
|
4
|
-
zh: '在一个页面中连续筛选、切换并配置各个消息渠道。',
|
|
5
|
-
en: 'Filter, switch, and configure messaging channels in one continuous workspace.'
|
|
6
|
-
},
|
|
7
|
-
channelsLoading: { zh: '加载渠道中...', en: 'Loading channels...' },
|
|
8
|
-
channelsTabEnabled: { zh: '已启用', en: 'Enabled' },
|
|
9
|
-
channelsTabAll: { zh: '全部渠道', en: 'All Channels' },
|
|
10
|
-
channelsFilterPlaceholder: { zh: '搜索渠道', en: 'Search channels' },
|
|
11
|
-
channelsNoMatch: { zh: '没有匹配的渠道', en: 'No matching channels' },
|
|
12
|
-
channelsSelectTitle: { zh: '选择左侧渠道开始配置', en: 'Select a channel from the left to configure' },
|
|
13
|
-
channelsSelectDescription: { zh: '你可以连续切换多个渠道并逐个保存配置。', en: 'Switch between channels continuously and save each configuration.' },
|
|
14
|
-
channelsFormDescription: { zh: '配置消息渠道参数', en: 'Configure message channel parameters' },
|
|
15
|
-
channelsEmptyTitle: { zh: '暂无启用渠道', en: 'No channels enabled' },
|
|
16
|
-
channelsEmptyDescription: { zh: '启用一个消息渠道以开始接收消息。', en: 'Enable a messaging channel to start receiving messages.' },
|
|
17
|
-
channelDescriptionDefault: { zh: '配置该通信渠道', en: 'Configure this communication channel' },
|
|
18
|
-
channelDescTelegram: { zh: '连接 Telegram 机器人以进行即时消息收发', en: 'Connect with Telegram bots for instant messaging' },
|
|
19
|
-
channelDescSlack: { zh: '接入 Slack 工作区进行团队协作消息处理', en: 'Integrate with Slack workspaces for team collaboration' },
|
|
20
|
-
channelDescEmail: { zh: '通过邮件协议收发消息', en: 'Send and receive messages via email protocols' },
|
|
21
|
-
channelDescWebhook: { zh: '接收 HTTP Webhook 以支持自定义集成', en: 'Receive HTTP webhooks for custom integrations' },
|
|
22
|
-
channelDescDiscord: { zh: '将 Discord 机器人连接到你的社区服务器', en: 'Connect Discord bots to your community servers' },
|
|
23
|
-
channelDescFeishu: { zh: '企业消息与协作平台接入', en: 'Enterprise messaging and collaboration platform' },
|
|
24
|
-
channelDescWeixin: { zh: '通过微信扫码登录并使用长轮询收发个人微信消息', en: 'Use QR login and long-poll updates for personal Weixin messaging' },
|
|
25
|
-
configureMessageChannelParameters: { zh: '配置消息渠道参数', en: 'Configure message channel parameters' },
|
|
26
|
-
channelsGuideTitle: { zh: '查看指南', en: 'View Guide' },
|
|
27
|
-
allowFrom: { zh: '允许来源', en: 'Allow From' },
|
|
28
|
-
token: { zh: 'Token', en: 'Token' },
|
|
29
|
-
botToken: { zh: 'Bot Token', en: 'Bot Token' },
|
|
30
|
-
appToken: { zh: 'App Token', en: 'App Token' },
|
|
31
|
-
appId: { zh: 'App ID', en: 'App ID' },
|
|
32
|
-
domain: { zh: '域名', en: 'Domain' },
|
|
33
|
-
corpId: { zh: '企业 ID', en: 'Corp ID' },
|
|
34
|
-
agentId: { zh: '应用 Agent ID', en: 'Agent ID' },
|
|
35
|
-
appSecret: { zh: 'App Secret', en: 'App Secret' },
|
|
36
|
-
markdownSupport: { zh: 'Markdown 支持', en: 'Markdown Support' },
|
|
37
|
-
clientId: { zh: 'Client ID', en: 'Client ID' },
|
|
38
|
-
clientSecret: { zh: 'Client Secret', en: 'Client Secret' },
|
|
39
|
-
encryptKey: { zh: '加密密钥', en: 'Encrypt Key' },
|
|
40
|
-
verificationToken: { zh: '验证令牌', en: 'Verification Token' },
|
|
41
|
-
bridgeUrl: { zh: '桥接 URL', en: 'Bridge URL' },
|
|
42
|
-
gatewayUrl: { zh: '网关 URL', en: 'Gateway URL' },
|
|
43
|
-
proxy: { zh: '代理', en: 'Proxy' },
|
|
44
|
-
intents: { zh: 'Intents', en: 'Intents' },
|
|
45
|
-
mode: { zh: '模式', en: 'Mode' },
|
|
46
|
-
webhookPath: { zh: 'Webhook 路径', en: 'Webhook Path' },
|
|
47
|
-
callbackPort: { zh: '回调端口', en: 'Callback Port' },
|
|
48
|
-
callbackPath: { zh: '回调路径', en: 'Callback Path' },
|
|
49
|
-
defaultAccountId: { zh: '默认账号 ID', en: 'Default Account ID' },
|
|
50
|
-
pollTimeoutMs: { zh: '长轮询超时(毫秒)', en: 'Long Poll Timeout (ms)' },
|
|
51
|
-
accountsJson: { zh: '账号配置 JSON', en: 'Accounts JSON' },
|
|
52
|
-
groupPolicy: { zh: '群组策略', en: 'Group Policy' }
|
|
53
|
-
};
|