@agent-native/core 0.117.2 → 0.118.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/corpus/README.md +3 -3
- package/corpus/core/CHANGELOG.md +30 -0
- package/corpus/core/docs/content/custom-design-system.mdx +445 -0
- package/corpus/core/docs/content/toolkit-ui.mdx +16 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/types.ts +1 -0
- package/corpus/core/src/agent/types.ts +1 -1
- package/corpus/core/src/client/AgentPanel.tsx +90 -107
- package/corpus/core/src/client/AssistantChat.tsx +30 -13
- package/corpus/core/src/client/CommandMenu.tsx +68 -178
- package/corpus/core/src/client/agent-chat-adapter.ts +3 -1
- package/corpus/core/src/client/app-providers.tsx +1 -1
- package/corpus/core/src/client/chat/message-components.tsx +116 -10
- package/corpus/core/src/client/chat/tool-call-display.tsx +26 -5
- package/corpus/core/src/client/chat/widgets/InlineExtensionWidget.tsx +14 -40
- package/corpus/core/src/client/components/ui/message-scroller.tsx +15 -1
- package/corpus/core/src/client/i18n.tsx +22 -0
- package/corpus/core/src/client/index.ts +17 -0
- package/corpus/core/src/client/org/TeamPage.tsx +257 -153
- package/corpus/core/src/client/progress/RunsTray.tsx +89 -88
- package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +5 -2
- package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +34 -13
- package/corpus/core/src/client/resources/mcp-integration-catalog.ts +13 -0
- package/corpus/core/src/client/settings/DemoModeSection.tsx +6 -18
- package/corpus/core/src/client/settings/SecretsSection.tsx +97 -52
- package/corpus/core/src/client/settings/SettingsPanel.tsx +202 -246
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +23 -2
- package/corpus/core/src/client/settings/VoiceTranscriptionSection.tsx +7 -18
- package/corpus/core/src/client/settings/index.ts +7 -0
- package/corpus/core/src/client/settings/useSettingsPanelController.ts +155 -0
- package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +116 -51
- package/corpus/core/src/client/setup-connections/index.ts +10 -0
- package/corpus/core/src/client/setup-connections/useBuilderConnectCardController.ts +82 -0
- package/corpus/core/src/client/sharing/ShareButton.tsx +64 -586
- package/corpus/core/src/client/sharing/ShareDialog.tsx +299 -633
- package/corpus/core/src/client/sharing/index.ts +42 -0
- package/corpus/core/src/client/sharing/share-controller-helpers.ts +318 -0
- package/corpus/core/src/client/sharing/useShareButtonController.ts +600 -0
- package/corpus/core/src/client/sharing/useShareDialogController.ts +559 -0
- package/corpus/core/src/client/sse-event-processor.ts +23 -0
- package/corpus/core/src/client/tool-display.ts +71 -0
- package/corpus/core/src/client/use-agent-engine-configured.ts +12 -19
- package/corpus/core/src/client/use-chat-threads.ts +33 -12
- package/corpus/core/src/localization/default-messages.ts +5 -0
- package/corpus/core/src/mcp-client/oauth-routes.ts +16 -2
- package/corpus/core/src/scripts/call-agent.ts +5 -1
- package/corpus/core/src/server/realtime-voice.ts +1 -1
- package/corpus/core/src/styles/agent-native.css +0 -24
- package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/core/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/core/src/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
- package/corpus/core/src/templates/default/app/design-system.ts +3 -0
- package/corpus/core/src/templates/default/app/root.tsx +5 -2
- package/corpus/core/src/templates/default/package.json +1 -0
- package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/core/src/vite/client.ts +39 -0
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/analytics/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/analytics/app/design-system.ts +3 -0
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/assets/app/components/ui/alert.tsx +1 -0
- package/corpus/templates/assets/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/assets/app/design-system.ts +3 -0
- package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +26 -30
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/brain/app/components/ui/dialog.tsx +1 -0
- package/corpus/templates/brain/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/brain/app/design-system.ts +3 -0
- package/corpus/templates/brain/app/routes/sources.tsx +8 -8
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/calendar/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/calendar/app/design-system.ts +3 -0
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/chat/app/design-system.ts +3 -0
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/clips/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/clips/app/design-system.ts +3 -0
- package/corpus/templates/clips/app/routes/_app.library._index.tsx +1 -1
- package/corpus/templates/clips/changelog/2026-07-22-fixed-windows-recordings-aborting-during-the-countdown.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-permissions-and-rewind-controls-are-now-grouped-with-clearer.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-the-desktop-popover-opens-centered-under-the-menu-bar-icon-o.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +86 -82
- package/corpus/templates/clips/desktop/src/styles.css +13 -0
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +10 -1
- package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +37 -2
- package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -0
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +41 -59
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +41 -41
- package/corpus/templates/content/app/components/editor/database/GalleryView.tsx +2 -1
- package/corpus/templates/content/app/components/editor/database/ListView.tsx +2 -1
- package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +9 -9
- package/corpus/templates/content/app/components/editor/database/sidebar.tsx +7 -7
- package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +11 -11
- package/corpus/templates/content/app/components/ui/checkbox.tsx +1 -0
- package/corpus/templates/content/app/components/ui/collapsible.tsx +1 -0
- package/corpus/templates/content/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/content/app/design-system.ts +3 -0
- package/corpus/templates/content/app/global.css +29 -3
- package/corpus/templates/content/changelog/2026-07-22-page-actions-are-grouped-into-the-three-dots-menu-for-a-clea.md +6 -0
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +10 -10
- package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +1 -6
- package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +3 -2
- package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +13 -12
- package/corpus/templates/crm/app/components/crm/RecordActions.tsx +17 -17
- package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +8 -8
- package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +3 -8
- package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +2 -1
- package/corpus/templates/crm/app/components/crm/Surface.tsx +3 -2
- package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +2 -2
- package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +7 -7
- package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +1 -1
- package/corpus/templates/crm/app/components/ui/alert-dialog.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/badge.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/button.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/card.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/dialog.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/input.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/label.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/select.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/sheet.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/skeleton.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/switch.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/table.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/tabs.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/textarea.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/toolkit-provider.tsx +17 -0
- package/corpus/templates/crm/app/design-system.ts +3 -0
- package/corpus/templates/crm/app/root.tsx +9 -6
- package/corpus/templates/crm/app/routes/dashboard.tsx +1 -1
- package/corpus/templates/crm/app/routes/proposals.tsx +13 -13
- package/corpus/templates/crm/app/routes/setup.tsx +9 -9
- package/corpus/templates/crm/app/routes/tasks.tsx +14 -14
- package/corpus/templates/crm/app/routes/views.tsx +16 -16
- package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +8 -8
- package/corpus/templates/design/app/components/ui/command.tsx +1 -0
- package/corpus/templates/design/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/design/app/design-system.ts +3 -0
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/dispatch/app/components/ui/button.tsx +1 -0
- package/corpus/templates/dispatch/app/components/ui/toolkit-provider.tsx +17 -0
- package/corpus/templates/dispatch/app/design-system.ts +3 -0
- package/corpus/templates/dispatch/app/root.tsx +10 -7
- package/corpus/templates/dispatch/package.json +1 -0
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/forms/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/forms/app/design-system.ts +3 -0
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/macros/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/macros/app/design-system.ts +3 -0
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +134 -93
- package/corpus/templates/mail/app/components/email/email-iframe-document.ts +8 -2
- package/corpus/templates/mail/app/components/ui/textarea.tsx +1 -21
- package/corpus/templates/mail/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/mail/app/design-system.ts +3 -0
- package/corpus/templates/mail/changelog/2026-07-22-email-messages-no-longer-flash-with-an-unstyled-page-while-l.md +6 -0
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/plan/app/components/plan/PlanContentRenderer.tsx +1 -1
- package/corpus/templates/plan/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/plan/app/design-system.ts +3 -0
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/slides/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/slides/app/design-system.ts +3 -0
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/tasks/app/components/ui/toolkit-provider.tsx +17 -0
- package/corpus/templates/tasks/app/design-system.ts +3 -0
- package/corpus/templates/tasks/app/root.tsx +5 -2
- package/corpus/toolkit/CHANGELOG.md +14 -0
- package/corpus/toolkit/agent-native.eject.json +71 -0
- package/corpus/toolkit/package.json +31 -1
- package/corpus/toolkit/src/chat-history/ChatHistoryRail.tsx +100 -39
- package/corpus/toolkit/src/chat-history/index.ts +9 -0
- package/corpus/toolkit/src/chat-history/useChatHistoryRailController.ts +76 -0
- package/corpus/toolkit/src/chat-history.css +2 -0
- package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +11 -8
- package/corpus/toolkit/src/composer/PromptComposer.tsx +27 -6
- package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +107 -22
- package/corpus/toolkit/src/conformance/__fixtures__/css-in-js-adapter.tsx +401 -0
- package/corpus/toolkit/src/conformance/index.ts +3 -0
- package/corpus/toolkit/src/conformance/runner.tsx +710 -0
- package/corpus/toolkit/src/conformance/types.ts +45 -0
- package/corpus/toolkit/src/conformance/version.ts +22 -0
- package/corpus/toolkit/src/design-system/components.tsx +146 -0
- package/corpus/toolkit/src/design-system/context.tsx +31 -0
- package/corpus/toolkit/src/design-system/default-adapter.tsx +915 -0
- package/corpus/toolkit/src/design-system/definition.ts +14 -0
- package/corpus/toolkit/src/design-system/error-boundary.tsx +37 -0
- package/corpus/toolkit/src/design-system/index.ts +7 -0
- package/corpus/toolkit/src/design-system/theme.ts +145 -0
- package/corpus/toolkit/src/design-system/types.ts +363 -0
- package/corpus/toolkit/src/provider.tsx +98 -5
- package/corpus/toolkit/src/ui/button.tsx +95 -6
- package/corpus/toolkit/src/ui/dialog.tsx +48 -23
- package/corpus/toolkit/src/ui/popover.tsx +16 -2
- package/corpus/toolkit/src/ui/select.tsx +7 -3
- package/corpus/toolkit/src/ui/sidebar.tsx +47 -48
- package/corpus/toolkit/src/ui/tooltip.tsx +7 -3
- package/dist/a2a/types.d.ts +1 -1
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/agent/types.d.ts +1 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +14 -14
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +26 -15
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +18 -106
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +2 -1
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/app-providers.d.ts.map +1 -1
- package/dist/client/app-providers.js +1 -1
- package/dist/client/app-providers.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +9 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +62 -7
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +20 -5
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat/widgets/InlineExtensionWidget.d.ts.map +1 -1
- package/dist/client/chat/widgets/InlineExtensionWidget.js +9 -12
- package/dist/client/chat/widgets/InlineExtensionWidget.js.map +1 -1
- package/dist/client/components/ui/message-scroller.d.ts +1 -1
- package/dist/client/components/ui/message-scroller.d.ts.map +1 -1
- package/dist/client/components/ui/message-scroller.js +4 -3
- package/dist/client/components/ui/message-scroller.js.map +1 -1
- package/dist/client/i18n.d.ts.map +1 -1
- package/dist/client/i18n.js +9 -0
- package/dist/client/i18n.js.map +1 -1
- package/dist/client/index.d.ts +2 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +41 -33
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/progress/RunsTray.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.js +9 -10
- package/dist/client/progress/RunsTray.js.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.js +5 -4
- package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
- package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
- package/dist/client/resources/McpIntegrationDialog.js +10 -8
- package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.d.ts +1 -0
- package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.js +13 -0
- package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
- package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
- package/dist/client/settings/DemoModeSection.js +2 -5
- package/dist/client/settings/DemoModeSection.js.map +1 -1
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +18 -6
- package/dist/client/settings/SecretsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +52 -117
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +16 -1
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +2 -5
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/settings/index.d.ts +1 -0
- package/dist/client/settings/index.d.ts.map +1 -1
- package/dist/client/settings/index.js +1 -0
- package/dist/client/settings/index.js.map +1 -1
- package/dist/client/settings/useSettingsPanelController.d.ts +22 -0
- package/dist/client/settings/useSettingsPanelController.d.ts.map +1 -0
- package/dist/client/settings/useSettingsPanelController.js +103 -0
- package/dist/client/settings/useSettingsPanelController.js.map +1 -0
- package/dist/client/setup-connections/BuilderConnectCard.d.ts +14 -6
- package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -1
- package/dist/client/setup-connections/BuilderConnectCard.js +24 -16
- package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -1
- package/dist/client/setup-connections/index.d.ts +2 -1
- package/dist/client/setup-connections/index.d.ts.map +1 -1
- package/dist/client/setup-connections/index.js +2 -1
- package/dist/client/setup-connections/index.js.map +1 -1
- package/dist/client/setup-connections/useBuilderConnectCardController.d.ts +34 -0
- package/dist/client/setup-connections/useBuilderConnectCardController.d.ts.map +1 -0
- package/dist/client/setup-connections/useBuilderConnectCardController.js +39 -0
- package/dist/client/setup-connections/useBuilderConnectCardController.js.map +1 -0
- package/dist/client/sharing/ShareButton.d.ts +2 -1
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +17 -463
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareDialog.d.ts +6 -6
- package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/client/sharing/ShareDialog.js +69 -283
- package/dist/client/sharing/ShareDialog.js.map +1 -1
- package/dist/client/sharing/index.d.ts +3 -0
- package/dist/client/sharing/index.d.ts.map +1 -1
- package/dist/client/sharing/index.js +3 -0
- package/dist/client/sharing/index.js.map +1 -1
- package/dist/client/sharing/share-controller-helpers.d.ts +70 -0
- package/dist/client/sharing/share-controller-helpers.d.ts.map +1 -0
- package/dist/client/sharing/share-controller-helpers.js +224 -0
- package/dist/client/sharing/share-controller-helpers.js.map +1 -0
- package/dist/client/sharing/useShareButtonController.d.ts +91 -0
- package/dist/client/sharing/useShareButtonController.d.ts.map +1 -0
- package/dist/client/sharing/useShareButtonController.js +397 -0
- package/dist/client/sharing/useShareButtonController.js.map +1 -0
- package/dist/client/sharing/useShareDialogController.d.ts +109 -0
- package/dist/client/sharing/useShareDialogController.d.ts.map +1 -0
- package/dist/client/sharing/useShareDialogController.js +348 -0
- package/dist/client/sharing/useShareDialogController.js.map +1 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +21 -0
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/tool-display.d.ts +16 -0
- package/dist/client/tool-display.d.ts.map +1 -1
- package/dist/client/tool-display.js +52 -0
- package/dist/client/tool-display.js.map +1 -1
- package/dist/client/use-agent-engine-configured.d.ts +3 -2
- package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
- package/dist/client/use-agent-engine-configured.js +7 -19
- package/dist/client/use-agent-engine-configured.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +21 -8
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/localization/default-messages.d.ts +4 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +4 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp-client/oauth-routes.d.ts +2 -0
- package/dist/mcp-client/oauth-routes.d.ts.map +1 -1
- package/dist/mcp-client/oauth-routes.js +12 -2
- package/dist/mcp-client/oauth-routes.js.map +1 -1
- package/dist/observability/routes.d.ts +3 -3
- package/dist/provider-api/actions/custom-provider-registration.d.ts +4 -4
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +5 -1
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/realtime-voice.js +1 -1
- package/dist/server/realtime-voice.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/styles/agent-native.css +0 -24
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
- package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/dist/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
- package/dist/templates/chat/app/design-system.ts +3 -0
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
- package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/dist/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
- package/dist/templates/default/app/design-system.ts +3 -0
- package/dist/templates/default/app/root.tsx +5 -2
- package/dist/templates/default/package.json +1 -0
- package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
- package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/dist/vite/client.d.ts +3 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +31 -0
- package/dist/vite/client.js.map +1 -1
- package/docs/content/custom-design-system.mdx +445 -0
- package/docs/content/toolkit-ui.mdx +16 -0
- package/package.json +2 -2
- package/src/a2a/types.ts +1 -0
- package/src/agent/types.ts +1 -1
- package/src/client/AgentPanel.tsx +90 -107
- package/src/client/AssistantChat.tsx +30 -13
- package/src/client/CommandMenu.tsx +68 -178
- package/src/client/agent-chat-adapter.ts +3 -1
- package/src/client/app-providers.tsx +1 -1
- package/src/client/chat/message-components.tsx +116 -10
- package/src/client/chat/tool-call-display.tsx +26 -5
- package/src/client/chat/widgets/InlineExtensionWidget.tsx +14 -40
- package/src/client/components/ui/message-scroller.tsx +15 -1
- package/src/client/i18n.tsx +22 -0
- package/src/client/index.ts +17 -0
- package/src/client/org/TeamPage.tsx +257 -153
- package/src/client/progress/RunsTray.tsx +89 -88
- package/src/client/resources/McpConnectionSuggestion.tsx +5 -2
- package/src/client/resources/McpIntegrationDialog.tsx +34 -13
- package/src/client/resources/mcp-integration-catalog.ts +13 -0
- package/src/client/settings/DemoModeSection.tsx +6 -18
- package/src/client/settings/SecretsSection.tsx +97 -52
- package/src/client/settings/SettingsPanel.tsx +202 -246
- package/src/client/settings/SettingsTabsPage.tsx +23 -2
- package/src/client/settings/VoiceTranscriptionSection.tsx +7 -18
- package/src/client/settings/index.ts +7 -0
- package/src/client/settings/useSettingsPanelController.ts +155 -0
- package/src/client/setup-connections/BuilderConnectCard.tsx +116 -51
- package/src/client/setup-connections/index.ts +10 -0
- package/src/client/setup-connections/useBuilderConnectCardController.ts +82 -0
- package/src/client/sharing/ShareButton.tsx +64 -586
- package/src/client/sharing/ShareDialog.tsx +299 -633
- package/src/client/sharing/index.ts +42 -0
- package/src/client/sharing/share-controller-helpers.ts +318 -0
- package/src/client/sharing/useShareButtonController.ts +600 -0
- package/src/client/sharing/useShareDialogController.ts +559 -0
- package/src/client/sse-event-processor.ts +23 -0
- package/src/client/tool-display.ts +71 -0
- package/src/client/use-agent-engine-configured.ts +12 -19
- package/src/client/use-chat-threads.ts +33 -12
- package/src/localization/default-messages.ts +5 -0
- package/src/mcp-client/oauth-routes.ts +16 -2
- package/src/scripts/call-agent.ts +5 -1
- package/src/server/realtime-voice.ts +1 -1
- package/src/styles/agent-native.css +0 -24
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
- package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/src/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
- package/src/templates/chat/app/design-system.ts +3 -0
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
- package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/src/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
- package/src/templates/default/app/design-system.ts +3 -0
- package/src/templates/default/app/root.tsx +5 -2
- package/src/templates/default/package.json +1 -0
- package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
- package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/src/vite/client.ts +39 -0
- package/corpus/templates/analytics/app/components/ui/calendar.tsx +0 -70
- package/corpus/templates/analytics/app/components/ui/chart.tsx +0 -386
- package/corpus/templates/calendar/app/components/ui/sonner.tsx +0 -58
- package/corpus/templates/forms/app/components/ui/calendar.tsx +0 -214
- package/corpus/templates/forms/app/components/ui/chart.tsx +0 -379
- package/corpus/templates/forms/app/components/ui/command.tsx +0 -153
- package/corpus/templates/forms/app/components/ui/context-menu.tsx +0 -198
- package/corpus/templates/forms/app/components/ui/menubar.tsx +0 -254
- package/corpus/templates/macros/app/components/ui/menubar.tsx +0 -238
- package/corpus/templates/macros/app/components/ui/progress.tsx +0 -26
- package/corpus/templates/mail/app/components/ui/calendar.tsx +0 -211
- package/corpus/templates/mail/app/components/ui/chart.tsx +0 -379
- package/corpus/templates/mail/app/components/ui/command.tsx +0 -153
- package/corpus/templates/mail/app/components/ui/context-menu.tsx +0 -198
- package/corpus/templates/mail/app/components/ui/menubar.tsx +0 -254
- package/corpus/templates/tasks/app/components/ui/accordion.tsx +0 -56
- package/corpus/templates/tasks/app/components/ui/aspect-ratio.tsx +0 -5
- package/corpus/templates/tasks/app/components/ui/breadcrumb.tsx +0 -115
- package/corpus/templates/tasks/app/components/ui/calendar.tsx +0 -70
- package/corpus/templates/tasks/app/components/ui/carousel.tsx +0 -260
- package/corpus/templates/tasks/app/components/ui/chart.tsx +0 -379
- package/corpus/templates/tasks/app/components/ui/form.tsx +0 -177
- package/corpus/templates/tasks/app/components/ui/hover-card.tsx +0 -27
- package/corpus/templates/tasks/app/components/ui/input-otp.tsx +0 -69
- package/corpus/templates/tasks/app/components/ui/menubar.tsx +0 -254
- package/corpus/templates/tasks/app/components/ui/navigation-menu.tsx +0 -128
- package/corpus/templates/tasks/app/components/ui/pagination.tsx +0 -121
- package/corpus/templates/tasks/app/components/ui/resizable.tsx +0 -43
- package/corpus/templates/tasks/app/components/ui/sidebar.tsx +0 -782
- package/corpus/templates/tasks/app/components/ui/toggle.tsx +0 -43
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
Checkbox,
|
|
3
|
+
Picker,
|
|
4
|
+
TextField,
|
|
5
|
+
} from "@agent-native/toolkit/design-system";
|
|
6
|
+
import { Button as ToolkitButton } from "@agent-native/toolkit/ui/button";
|
|
2
7
|
import {
|
|
3
8
|
IconChevronDown,
|
|
4
9
|
IconChevronRight,
|
|
@@ -35,6 +40,7 @@ import React, {
|
|
|
35
40
|
useMemo,
|
|
36
41
|
useRef,
|
|
37
42
|
} from "react";
|
|
43
|
+
import { Link } from "react-router";
|
|
38
44
|
|
|
39
45
|
import { PROVIDER_ENV_PLACEHOLDERS } from "../../agent/engine/provider-env-vars.js";
|
|
40
46
|
import type { UserProfile } from "../../user-profile/shared.js";
|
|
@@ -62,7 +68,6 @@ import {
|
|
|
62
68
|
AGENT_SETTINGS_SECTIONS,
|
|
63
69
|
ALL_SETTINGS_SECTIONS,
|
|
64
70
|
CONNECTION_SETTINGS_SECTIONS,
|
|
65
|
-
SETTINGS_SECTION_IDS,
|
|
66
71
|
WORKSPACE_SETTINGS_SECTIONS,
|
|
67
72
|
getAgentSettingsSearchTabs,
|
|
68
73
|
type SettingsSectionId,
|
|
@@ -84,8 +89,28 @@ import {
|
|
|
84
89
|
useBuilderConnectFlow,
|
|
85
90
|
useBuilderStatus,
|
|
86
91
|
} from "./useBuilderStatus.js";
|
|
92
|
+
import {
|
|
93
|
+
settingsSectionDomId,
|
|
94
|
+
useSettingsPanelController,
|
|
95
|
+
} from "./useSettingsPanelController.js";
|
|
87
96
|
import { VoiceTranscriptionSection } from "./VoiceTranscriptionSection.js";
|
|
88
97
|
|
|
98
|
+
const Button = React.forwardRef<
|
|
99
|
+
HTMLButtonElement,
|
|
100
|
+
React.ComponentPropsWithoutRef<typeof ToolkitButton>
|
|
101
|
+
>(({ className, ...props }, ref) => (
|
|
102
|
+
<ToolkitButton
|
|
103
|
+
ref={ref}
|
|
104
|
+
variant="ghost"
|
|
105
|
+
className={cn(
|
|
106
|
+
"h-auto p-0 hover:bg-transparent hover:text-inherit active:scale-100 [&_svg]:!size-auto",
|
|
107
|
+
className,
|
|
108
|
+
)}
|
|
109
|
+
{...props}
|
|
110
|
+
/>
|
|
111
|
+
));
|
|
112
|
+
Button.displayName = "SettingsPrimitiveButton";
|
|
113
|
+
|
|
89
114
|
const IntegrationsPanel = lazy(() =>
|
|
90
115
|
import("../integrations/IntegrationsPanel.js").then((m) => ({
|
|
91
116
|
default: m.IntegrationsPanel,
|
|
@@ -189,7 +214,6 @@ function SettingsSelect({
|
|
|
189
214
|
}) {
|
|
190
215
|
const isPage = useSettingsSurface() === "page";
|
|
191
216
|
const controlStyle = isPage ? CONTROL_STYLE_PAGE : CONTROL_STYLE;
|
|
192
|
-
const selected = options.find((option) => option.value === value);
|
|
193
217
|
|
|
194
218
|
return (
|
|
195
219
|
<div className="space-y-1.5">
|
|
@@ -197,69 +221,27 @@ function SettingsSelect({
|
|
|
197
221
|
<p className={fieldLabelClass(isPage)}>{label}</p>
|
|
198
222
|
{labelAdornment}
|
|
199
223
|
</div>
|
|
200
|
-
<
|
|
224
|
+
<Picker
|
|
225
|
+
mode="select"
|
|
226
|
+
options={options.map((option) => ({
|
|
227
|
+
value: option.value,
|
|
228
|
+
label: option.label,
|
|
229
|
+
description: option.description,
|
|
230
|
+
textValue: option.label,
|
|
231
|
+
}))}
|
|
201
232
|
value={value}
|
|
202
|
-
|
|
233
|
+
onChange={(next) => {
|
|
234
|
+
if (next != null) onValueChange(String(next));
|
|
235
|
+
}}
|
|
203
236
|
disabled={disabled}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
>
|
|
213
|
-
<SelectPrimitive.Value>
|
|
214
|
-
{selected?.label ?? value}
|
|
215
|
-
</SelectPrimitive.Value>
|
|
216
|
-
<SelectPrimitive.Icon asChild>
|
|
217
|
-
<IconChevronDown size={16} className="text-muted-foreground" />
|
|
218
|
-
</SelectPrimitive.Icon>
|
|
219
|
-
</SelectPrimitive.Trigger>
|
|
220
|
-
<SelectPrimitive.Portal>
|
|
221
|
-
<SelectPrimitive.Content
|
|
222
|
-
position="popper"
|
|
223
|
-
sideOffset={6}
|
|
224
|
-
className="z-[9999] w-[var(--radix-select-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover shadow-lg"
|
|
225
|
-
>
|
|
226
|
-
<SelectPrimitive.Viewport className="p-1">
|
|
227
|
-
{options.map((option) => (
|
|
228
|
-
<SelectPrimitive.Item
|
|
229
|
-
key={option.value}
|
|
230
|
-
value={option.value}
|
|
231
|
-
className={cn(
|
|
232
|
-
"relative flex w-full cursor-pointer select-none items-start gap-2 rounded-md px-8 outline-none data-[highlighted]:bg-accent/60 data-[state=checked]:bg-accent/40",
|
|
233
|
-
isPage ? "py-2.5 text-sm" : "py-2.5 text-[12px]",
|
|
234
|
-
)}
|
|
235
|
-
style={controlStyle}
|
|
236
|
-
>
|
|
237
|
-
<span className="absolute start-2 top-2.5 flex h-4 w-4 items-center justify-center text-muted-foreground">
|
|
238
|
-
<SelectPrimitive.ItemIndicator>
|
|
239
|
-
<IconCheck size={14} />
|
|
240
|
-
</SelectPrimitive.ItemIndicator>
|
|
241
|
-
</span>
|
|
242
|
-
<div className="flex min-w-0 flex-col">
|
|
243
|
-
<SelectPrimitive.ItemText>
|
|
244
|
-
<span className="text-foreground">{option.label}</span>
|
|
245
|
-
</SelectPrimitive.ItemText>
|
|
246
|
-
{option.description ? (
|
|
247
|
-
<span
|
|
248
|
-
className={cn(
|
|
249
|
-
"mt-0.5 leading-relaxed text-muted-foreground",
|
|
250
|
-
isPage ? "text-xs" : "text-[11px]",
|
|
251
|
-
)}
|
|
252
|
-
>
|
|
253
|
-
{option.description}
|
|
254
|
-
</span>
|
|
255
|
-
) : null}
|
|
256
|
-
</div>
|
|
257
|
-
</SelectPrimitive.Item>
|
|
258
|
-
))}
|
|
259
|
-
</SelectPrimitive.Viewport>
|
|
260
|
-
</SelectPrimitive.Content>
|
|
261
|
-
</SelectPrimitive.Portal>
|
|
262
|
-
</SelectPrimitive.Root>
|
|
237
|
+
aria-label={label}
|
|
238
|
+
placeholder={value}
|
|
239
|
+
style={controlStyle}
|
|
240
|
+
className={cn(
|
|
241
|
+
"w-full text-start text-foreground",
|
|
242
|
+
isPage ? "text-sm" : "text-[12px]",
|
|
243
|
+
)}
|
|
244
|
+
/>
|
|
263
245
|
</div>
|
|
264
246
|
);
|
|
265
247
|
}
|
|
@@ -375,28 +357,34 @@ function DisconnectBuilderButton() {
|
|
|
375
357
|
if (phase === "armed") {
|
|
376
358
|
return (
|
|
377
359
|
<>
|
|
378
|
-
<
|
|
360
|
+
<Button
|
|
379
361
|
type="button"
|
|
362
|
+
intent="danger"
|
|
363
|
+
emphasis="solid"
|
|
380
364
|
onClick={handleDisconnectClick}
|
|
381
365
|
className="inline-flex items-center gap-1 rounded border border-destructive/40 bg-destructive/10 px-2 py-0.5 text-[10px] font-medium text-destructive hover:bg-destructive/20"
|
|
382
366
|
>
|
|
383
367
|
Confirm disconnect
|
|
384
|
-
</
|
|
385
|
-
<
|
|
368
|
+
</Button>
|
|
369
|
+
<Button
|
|
386
370
|
type="button"
|
|
371
|
+
intent="neutral"
|
|
372
|
+
emphasis="outline"
|
|
387
373
|
onClick={handleCancel}
|
|
388
374
|
className="inline-flex items-center gap-1 rounded border border-border px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground hover:bg-accent/40"
|
|
389
375
|
>
|
|
390
376
|
Cancel
|
|
391
|
-
</
|
|
377
|
+
</Button>
|
|
392
378
|
</>
|
|
393
379
|
);
|
|
394
380
|
}
|
|
395
381
|
|
|
396
382
|
return (
|
|
397
383
|
<>
|
|
398
|
-
<
|
|
384
|
+
<Button
|
|
399
385
|
type="button"
|
|
386
|
+
intent="danger"
|
|
387
|
+
emphasis="outline"
|
|
400
388
|
onClick={handleDisconnectClick}
|
|
401
389
|
disabled={phase === "busy"}
|
|
402
390
|
className="inline-flex items-center gap-1 rounded border border-border px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground hover:bg-accent/40 disabled:opacity-60 disabled:cursor-wait"
|
|
@@ -410,7 +398,7 @@ function DisconnectBuilderButton() {
|
|
|
410
398
|
) : (
|
|
411
399
|
"Disconnect"
|
|
412
400
|
)}
|
|
413
|
-
</
|
|
401
|
+
</Button>
|
|
414
402
|
{err && <span className="text-[10px] text-destructive">{err}</span>}
|
|
415
403
|
</>
|
|
416
404
|
);
|
|
@@ -485,8 +473,10 @@ function UseBuilderCard({
|
|
|
485
473
|
{connectUrl || credentialSource !== "env" ? (
|
|
486
474
|
<div className="flex items-center gap-2 mt-2.5">
|
|
487
475
|
{connectUrl && (
|
|
488
|
-
<
|
|
476
|
+
<Button
|
|
489
477
|
type="button"
|
|
478
|
+
intent="neutral"
|
|
479
|
+
emphasis="ghost"
|
|
490
480
|
onClick={() =>
|
|
491
481
|
builderFlow.start({ trackingSource, trackingFlow })
|
|
492
482
|
}
|
|
@@ -499,7 +489,7 @@ function UseBuilderCard({
|
|
|
499
489
|
? "Connect account"
|
|
500
490
|
: "Reconnect"}
|
|
501
491
|
<IconExternalLink size={isPage ? 14 : 10} />
|
|
502
|
-
</
|
|
492
|
+
</Button>
|
|
503
493
|
)}
|
|
504
494
|
{credentialSource !== "env" ? <DisconnectBuilderButton /> : null}
|
|
505
495
|
</div>
|
|
@@ -511,13 +501,14 @@ function UseBuilderCard({
|
|
|
511
501
|
if (!connectUrl) return null;
|
|
512
502
|
|
|
513
503
|
return (
|
|
514
|
-
<
|
|
504
|
+
<Button
|
|
515
505
|
type="button"
|
|
516
506
|
onClick={() => builderFlow.start({ trackingSource, trackingFlow })}
|
|
517
507
|
disabled={builderFlow.connecting}
|
|
518
508
|
className={cn(
|
|
519
509
|
"block w-full rounded-md border border-border text-start no-underline bg-gradient-to-br from-teal-500/10 via-transparent to-transparent hover:border-foreground/30 transition-colors disabled:cursor-wait disabled:opacity-70",
|
|
520
510
|
isPage ? "px-4 py-3.5" : "px-3 py-3",
|
|
511
|
+
isPage ? "[&_svg]:!size-4" : "[&_svg]:!size-3.5",
|
|
521
512
|
)}
|
|
522
513
|
>
|
|
523
514
|
<div className="flex items-start gap-2.5">
|
|
@@ -565,7 +556,7 @@ function UseBuilderCard({
|
|
|
565
556
|
className="shrink-0 text-muted-foreground mt-0.5"
|
|
566
557
|
/>
|
|
567
558
|
</div>
|
|
568
|
-
</
|
|
559
|
+
</Button>
|
|
569
560
|
);
|
|
570
561
|
}
|
|
571
562
|
|
|
@@ -766,19 +757,21 @@ export function AppDefaultModelField({
|
|
|
766
757
|
return (
|
|
767
758
|
<div className="space-y-1.5">
|
|
768
759
|
<p className={fieldLabelClass(isPage)}>Model</p>
|
|
769
|
-
<
|
|
770
|
-
type="text"
|
|
771
|
-
list={`app-model-suggestions-${engine}`}
|
|
760
|
+
<TextField
|
|
772
761
|
value={value}
|
|
762
|
+
onChange={onValueChange}
|
|
773
763
|
disabled={disabled}
|
|
774
|
-
|
|
764
|
+
list={`app-model-suggestions-${engine}`}
|
|
775
765
|
onKeyDown={(event) => {
|
|
776
766
|
if (event.key === "Enter") onEnter?.();
|
|
777
767
|
}}
|
|
778
768
|
placeholder={defaultModel ?? "model-id"}
|
|
779
|
-
spellCheck={false}
|
|
780
769
|
autoComplete="off"
|
|
781
|
-
|
|
770
|
+
aria-label="Model"
|
|
771
|
+
className={cn(
|
|
772
|
+
"w-full disabled:opacity-60",
|
|
773
|
+
isPage ? "text-sm" : "text-[12px]",
|
|
774
|
+
)}
|
|
782
775
|
style={isPage ? CONTROL_STYLE_PAGE : CONTROL_STYLE}
|
|
783
776
|
/>
|
|
784
777
|
{modelOptions.length > 0 && (
|
|
@@ -1180,7 +1173,7 @@ function LLMSectionInner({
|
|
|
1180
1173
|
|
|
1181
1174
|
{isOpenAiEngine && (
|
|
1182
1175
|
<div className="border-t border-border/70 pt-2">
|
|
1183
|
-
<
|
|
1176
|
+
<Button
|
|
1184
1177
|
type="button"
|
|
1185
1178
|
onClick={() => setAdvancedOpen((v) => !v)}
|
|
1186
1179
|
className="flex w-full cursor-pointer items-center justify-between gap-2 rounded px-0.5 py-1 text-left hover:text-foreground"
|
|
@@ -1199,7 +1192,7 @@ function LLMSectionInner({
|
|
|
1199
1192
|
<span className="truncate text-[10px] text-muted-foreground">
|
|
1200
1193
|
OpenAI-compatible endpoint
|
|
1201
1194
|
</span>
|
|
1202
|
-
</
|
|
1195
|
+
</Button>
|
|
1203
1196
|
|
|
1204
1197
|
{advancedOpen && (
|
|
1205
1198
|
<div className="mt-1.5 space-y-1.5">
|
|
@@ -1238,21 +1231,23 @@ function LLMSectionInner({
|
|
|
1238
1231
|
</p>
|
|
1239
1232
|
{baseUrlConfigured && (
|
|
1240
1233
|
<label className="flex items-center gap-1.5 text-[10px] text-muted-foreground">
|
|
1241
|
-
<
|
|
1242
|
-
type="checkbox"
|
|
1234
|
+
<Checkbox
|
|
1243
1235
|
checked={clearBaseUrl}
|
|
1244
|
-
onChange={(
|
|
1245
|
-
setClearBaseUrl(
|
|
1246
|
-
if (
|
|
1236
|
+
onChange={(checked) => {
|
|
1237
|
+
setClearBaseUrl(checked);
|
|
1238
|
+
if (checked) setBaseUrl("");
|
|
1247
1239
|
}}
|
|
1248
|
-
|
|
1240
|
+
aria-label="Clear saved endpoint override"
|
|
1241
|
+
className="shrink-0"
|
|
1249
1242
|
/>
|
|
1250
1243
|
Clear saved endpoint override
|
|
1251
1244
|
</label>
|
|
1252
1245
|
)}
|
|
1253
1246
|
{envVar && envConfigured && endpointChanged && (
|
|
1254
|
-
<
|
|
1247
|
+
<Button
|
|
1255
1248
|
type="button"
|
|
1249
|
+
intent="neutral"
|
|
1250
|
+
emphasis="solid"
|
|
1256
1251
|
onClick={handleSave}
|
|
1257
1252
|
disabled={saving}
|
|
1258
1253
|
className="rounded bg-accent px-2.5 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40"
|
|
@@ -1264,7 +1259,7 @@ function LLMSectionInner({
|
|
|
1264
1259
|
) : (
|
|
1265
1260
|
"Save endpoint"
|
|
1266
1261
|
)}
|
|
1267
|
-
</
|
|
1262
|
+
</Button>
|
|
1268
1263
|
)}
|
|
1269
1264
|
</div>
|
|
1270
1265
|
)}
|
|
@@ -1294,7 +1289,9 @@ function LLMSectionInner({
|
|
|
1294
1289
|
className={cn(textInputClass(isPage), "flex-1")}
|
|
1295
1290
|
style={isPage ? CONTROL_STYLE_PAGE : undefined}
|
|
1296
1291
|
/>
|
|
1297
|
-
<
|
|
1292
|
+
<Button
|
|
1293
|
+
intent="primary"
|
|
1294
|
+
emphasis="solid"
|
|
1298
1295
|
onClick={handleSave}
|
|
1299
1296
|
disabled={!providerSettingsChanged || saving}
|
|
1300
1297
|
className={pillButtonClass(isPage, "solid")}
|
|
@@ -1309,12 +1306,14 @@ function LLMSectionInner({
|
|
|
1309
1306
|
) : (
|
|
1310
1307
|
"Save"
|
|
1311
1308
|
)}
|
|
1312
|
-
</
|
|
1309
|
+
</Button>
|
|
1313
1310
|
</div>
|
|
1314
1311
|
) : null}
|
|
1315
1312
|
|
|
1316
1313
|
<div className="flex items-center gap-2">
|
|
1317
|
-
<
|
|
1314
|
+
<Button
|
|
1315
|
+
intent="neutral"
|
|
1316
|
+
emphasis="outline"
|
|
1318
1317
|
onClick={handleTest}
|
|
1319
1318
|
disabled={testing}
|
|
1320
1319
|
className={pillButtonClass(isPage, "outline")}
|
|
@@ -1330,19 +1329,23 @@ function LLMSectionInner({
|
|
|
1330
1329
|
) : (
|
|
1331
1330
|
"Test"
|
|
1332
1331
|
)}
|
|
1333
|
-
</
|
|
1332
|
+
</Button>
|
|
1334
1333
|
{engineChanged && (
|
|
1335
|
-
<
|
|
1334
|
+
<Button
|
|
1335
|
+
intent="primary"
|
|
1336
|
+
emphasis="solid"
|
|
1336
1337
|
onClick={handleApply}
|
|
1337
1338
|
className={pillButtonClass(isPage, "solid")}
|
|
1338
1339
|
>
|
|
1339
1340
|
Apply
|
|
1340
|
-
</
|
|
1341
|
+
</Button>
|
|
1341
1342
|
)}
|
|
1342
1343
|
{settingsStatus != null && (
|
|
1343
1344
|
<Tooltip>
|
|
1344
1345
|
<TooltipTrigger asChild>
|
|
1345
|
-
<
|
|
1346
|
+
<Button
|
|
1347
|
+
intent="danger"
|
|
1348
|
+
emphasis="outline"
|
|
1346
1349
|
onClick={handleDisconnect}
|
|
1347
1350
|
className={cn(
|
|
1348
1351
|
pillButtonClass(isPage, "outline"),
|
|
@@ -1350,7 +1353,7 @@ function LLMSectionInner({
|
|
|
1350
1353
|
)}
|
|
1351
1354
|
>
|
|
1352
1355
|
Disconnect
|
|
1353
|
-
</
|
|
1356
|
+
</Button>
|
|
1354
1357
|
</TooltipTrigger>
|
|
1355
1358
|
<TooltipContent>
|
|
1356
1359
|
Clear the saved engine — the app will fall back to the
|
|
@@ -1663,8 +1666,10 @@ function AppModelDefaultsSectionInner({
|
|
|
1663
1666
|
/>
|
|
1664
1667
|
|
|
1665
1668
|
<div className="flex items-center gap-1.5">
|
|
1666
|
-
<
|
|
1669
|
+
<Button
|
|
1667
1670
|
type="button"
|
|
1671
|
+
intent="primary"
|
|
1672
|
+
emphasis="solid"
|
|
1668
1673
|
onClick={save}
|
|
1669
1674
|
disabled={!hasPendingChange || saving}
|
|
1670
1675
|
className={pillButtonClass(isPage, "solid")}
|
|
@@ -1679,15 +1684,17 @@ function AppModelDefaultsSectionInner({
|
|
|
1679
1684
|
) : (
|
|
1680
1685
|
"Save"
|
|
1681
1686
|
)}
|
|
1682
|
-
</
|
|
1683
|
-
<
|
|
1687
|
+
</Button>
|
|
1688
|
+
<Button
|
|
1684
1689
|
type="button"
|
|
1690
|
+
intent="neutral"
|
|
1691
|
+
emphasis="outline"
|
|
1685
1692
|
onClick={reset}
|
|
1686
1693
|
disabled={!settings.canUpdate || !hasAppDefault || saving}
|
|
1687
1694
|
className={pillButtonClass(isPage, "outline")}
|
|
1688
1695
|
>
|
|
1689
1696
|
Reset
|
|
1690
|
-
</
|
|
1697
|
+
</Button>
|
|
1691
1698
|
</div>
|
|
1692
1699
|
</div>
|
|
1693
1700
|
|
|
@@ -1839,27 +1846,17 @@ function EmailSectionInner({
|
|
|
1839
1846
|
<SettingsSkeleton lines={2} />
|
|
1840
1847
|
) : (
|
|
1841
1848
|
<div className="space-y-2">
|
|
1842
|
-
<
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
onChange={(e) =>
|
|
1854
|
-
setEmailProvider(e.target.value as "resend" | "sendgrid")
|
|
1855
|
-
}
|
|
1856
|
-
className={cn(textInputClass(isPage), "w-full")}
|
|
1857
|
-
style={isPage ? CONTROL_STYLE_PAGE : undefined}
|
|
1858
|
-
>
|
|
1859
|
-
<option value="resend">Resend</option>
|
|
1860
|
-
<option value="sendgrid">SendGrid</option>
|
|
1861
|
-
</select>
|
|
1862
|
-
</label>
|
|
1849
|
+
<SettingsSelect
|
|
1850
|
+
label="Provider"
|
|
1851
|
+
value={emailProvider}
|
|
1852
|
+
options={[
|
|
1853
|
+
{ value: "resend", label: "Resend" },
|
|
1854
|
+
{ value: "sendgrid", label: "SendGrid" },
|
|
1855
|
+
]}
|
|
1856
|
+
onValueChange={(value) =>
|
|
1857
|
+
setEmailProvider(value as "resend" | "sendgrid")
|
|
1858
|
+
}
|
|
1859
|
+
/>
|
|
1863
1860
|
|
|
1864
1861
|
{emailProvider === "resend" ? (
|
|
1865
1862
|
<ManualSetupCard
|
|
@@ -1889,7 +1886,9 @@ function EmailSectionInner({
|
|
|
1889
1886
|
placeholder="re_..."
|
|
1890
1887
|
className={emailInputCls}
|
|
1891
1888
|
/>
|
|
1892
|
-
<
|
|
1889
|
+
<Button
|
|
1890
|
+
intent="primary"
|
|
1891
|
+
emphasis="solid"
|
|
1893
1892
|
onClick={saveResend}
|
|
1894
1893
|
disabled={!resendKey.trim() || saving}
|
|
1895
1894
|
className={emailBtnCls}
|
|
@@ -1901,7 +1900,7 @@ function EmailSectionInner({
|
|
|
1901
1900
|
) : (
|
|
1902
1901
|
"Save"
|
|
1903
1902
|
)}
|
|
1904
|
-
</
|
|
1903
|
+
</Button>
|
|
1905
1904
|
</div>
|
|
1906
1905
|
)}
|
|
1907
1906
|
{fromConfigured ? (
|
|
@@ -1927,7 +1926,9 @@ function EmailSectionInner({
|
|
|
1927
1926
|
className={emailInputCls}
|
|
1928
1927
|
/>
|
|
1929
1928
|
{!resendConfigured ? null : (
|
|
1930
|
-
<
|
|
1929
|
+
<Button
|
|
1930
|
+
intent="primary"
|
|
1931
|
+
emphasis="solid"
|
|
1931
1932
|
onClick={saveResend}
|
|
1932
1933
|
disabled={!fromAddr.trim() || saving}
|
|
1933
1934
|
className={emailBtnCls}
|
|
@@ -1939,7 +1940,7 @@ function EmailSectionInner({
|
|
|
1939
1940
|
) : (
|
|
1940
1941
|
"Save"
|
|
1941
1942
|
)}
|
|
1942
|
-
</
|
|
1943
|
+
</Button>
|
|
1943
1944
|
)}
|
|
1944
1945
|
</div>
|
|
1945
1946
|
)}
|
|
@@ -1972,7 +1973,9 @@ function EmailSectionInner({
|
|
|
1972
1973
|
placeholder="SG...."
|
|
1973
1974
|
className={emailInputCls}
|
|
1974
1975
|
/>
|
|
1975
|
-
<
|
|
1976
|
+
<Button
|
|
1977
|
+
intent="primary"
|
|
1978
|
+
emphasis="solid"
|
|
1976
1979
|
onClick={saveSendgrid}
|
|
1977
1980
|
disabled={!sendgridKey.trim() || saving}
|
|
1978
1981
|
className={emailBtnCls}
|
|
@@ -1984,7 +1987,7 @@ function EmailSectionInner({
|
|
|
1984
1987
|
) : (
|
|
1985
1988
|
"Save"
|
|
1986
1989
|
)}
|
|
1987
|
-
</
|
|
1990
|
+
</Button>
|
|
1988
1991
|
</div>
|
|
1989
1992
|
)}
|
|
1990
1993
|
{fromConfigured ? (
|
|
@@ -2010,7 +2013,9 @@ function EmailSectionInner({
|
|
|
2010
2013
|
className={emailInputCls}
|
|
2011
2014
|
/>
|
|
2012
2015
|
{!sendgridConfigured ? null : (
|
|
2013
|
-
<
|
|
2016
|
+
<Button
|
|
2017
|
+
intent="primary"
|
|
2018
|
+
emphasis="solid"
|
|
2014
2019
|
onClick={saveSendgrid}
|
|
2015
2020
|
disabled={!fromAddr.trim() || saving}
|
|
2016
2021
|
className={emailBtnCls}
|
|
@@ -2022,7 +2027,7 @@ function EmailSectionInner({
|
|
|
2022
2027
|
) : (
|
|
2023
2028
|
"Save"
|
|
2024
2029
|
)}
|
|
2025
|
-
</
|
|
2030
|
+
</Button>
|
|
2026
2031
|
)}
|
|
2027
2032
|
</div>
|
|
2028
2033
|
)}
|
|
@@ -2246,8 +2251,10 @@ function AgentLimitsSectionInner({
|
|
|
2246
2251
|
)}
|
|
2247
2252
|
style={isPage ? CONTROL_STYLE_PAGE : undefined}
|
|
2248
2253
|
/>
|
|
2249
|
-
<
|
|
2254
|
+
<Button
|
|
2250
2255
|
type="button"
|
|
2256
|
+
intent="primary"
|
|
2257
|
+
emphasis="solid"
|
|
2251
2258
|
onClick={save}
|
|
2252
2259
|
disabled={!hasPendingChange || saving}
|
|
2253
2260
|
className={pillButtonClass(isPage, "solid")}
|
|
@@ -2262,9 +2269,11 @@ function AgentLimitsSectionInner({
|
|
|
2262
2269
|
) : (
|
|
2263
2270
|
"Save"
|
|
2264
2271
|
)}
|
|
2265
|
-
</
|
|
2266
|
-
<
|
|
2272
|
+
</Button>
|
|
2273
|
+
<Button
|
|
2267
2274
|
type="button"
|
|
2275
|
+
intent="neutral"
|
|
2276
|
+
emphasis="outline"
|
|
2268
2277
|
onClick={reset}
|
|
2269
2278
|
disabled={
|
|
2270
2279
|
!settings.canUpdate ||
|
|
@@ -2274,7 +2283,7 @@ function AgentLimitsSectionInner({
|
|
|
2274
2283
|
className={pillButtonClass(isPage, "outline")}
|
|
2275
2284
|
>
|
|
2276
2285
|
Reset
|
|
2277
|
-
</
|
|
2286
|
+
</Button>
|
|
2278
2287
|
</div>
|
|
2279
2288
|
{!settings.canUpdate && (
|
|
2280
2289
|
<p
|
|
@@ -2313,51 +2322,6 @@ export interface SettingsPanelProps {
|
|
|
2313
2322
|
sectionRequestKey?: number;
|
|
2314
2323
|
}
|
|
2315
2324
|
|
|
2316
|
-
function normalizeSettingsSection(
|
|
2317
|
-
value?: string | null,
|
|
2318
|
-
): SettingsSectionId | null {
|
|
2319
|
-
const normalized = value?.replace(/^#/, "").toLowerCase() ?? "";
|
|
2320
|
-
if (!normalized) return null;
|
|
2321
|
-
if (normalized.startsWith("secrets")) return "secrets";
|
|
2322
|
-
if (
|
|
2323
|
-
normalized === "workspace" ||
|
|
2324
|
-
normalized === "workspace-settings" ||
|
|
2325
|
-
normalized === "organization" ||
|
|
2326
|
-
normalized === "org"
|
|
2327
|
-
) {
|
|
2328
|
-
return "secrets";
|
|
2329
|
-
}
|
|
2330
|
-
if (normalized === "agent-engine") return "llm";
|
|
2331
|
-
if (
|
|
2332
|
-
normalized === "agent-model-defaults" ||
|
|
2333
|
-
normalized === "app-model-defaults" ||
|
|
2334
|
-
normalized === "models"
|
|
2335
|
-
) {
|
|
2336
|
-
return "app-models";
|
|
2337
|
-
}
|
|
2338
|
-
if (normalized === "agent-limits" || normalized === "loop-settings") {
|
|
2339
|
-
return "limits";
|
|
2340
|
-
}
|
|
2341
|
-
return SETTINGS_SECTION_IDS.has(normalized as SettingsSectionId)
|
|
2342
|
-
? (normalized as SettingsSectionId)
|
|
2343
|
-
: null;
|
|
2344
|
-
}
|
|
2345
|
-
|
|
2346
|
-
function settingsSectionDomId(section: SettingsSectionId): string {
|
|
2347
|
-
return `agent-settings-section-${section}`;
|
|
2348
|
-
}
|
|
2349
|
-
|
|
2350
|
-
function initialOpenSection(): SettingsSectionId {
|
|
2351
|
-
if (typeof window === "undefined") return "llm";
|
|
2352
|
-
return normalizeSettingsSection(window.location.hash) ?? "llm";
|
|
2353
|
-
}
|
|
2354
|
-
|
|
2355
|
-
function firstVisibleSection(
|
|
2356
|
-
sections: readonly SettingsSectionId[],
|
|
2357
|
-
): SettingsSectionId {
|
|
2358
|
-
return sections[0] ?? "llm";
|
|
2359
|
-
}
|
|
2360
|
-
|
|
2361
2325
|
// Agent capability modes. The internal values ("production"/"development") are
|
|
2362
2326
|
// kept for back-compat with the AGENT_MODE wiring; only the visible labels
|
|
2363
2327
|
// changed to "App mode" / "Code mode" so this control reads as the agent
|
|
@@ -2441,13 +2405,15 @@ function CapabilityStatusStrip({
|
|
|
2441
2405
|
) : builderConnected ? (
|
|
2442
2406
|
"Connected"
|
|
2443
2407
|
) : (
|
|
2444
|
-
<
|
|
2408
|
+
<Button
|
|
2445
2409
|
type="button"
|
|
2410
|
+
intent="neutral"
|
|
2411
|
+
emphasis="outline"
|
|
2446
2412
|
onClick={onOpenLlm}
|
|
2447
2413
|
className="rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground transition-colors hover:bg-accent/40 hover:text-foreground"
|
|
2448
2414
|
>
|
|
2449
2415
|
Connect
|
|
2450
|
-
</
|
|
2416
|
+
</Button>
|
|
2451
2417
|
)
|
|
2452
2418
|
}
|
|
2453
2419
|
/>
|
|
@@ -2590,8 +2556,10 @@ function AccountSectionInner({
|
|
|
2590
2556
|
className="hidden"
|
|
2591
2557
|
onChange={handleAvatarChange}
|
|
2592
2558
|
/>
|
|
2593
|
-
<
|
|
2559
|
+
<Button
|
|
2594
2560
|
type="button"
|
|
2561
|
+
intent="neutral"
|
|
2562
|
+
emphasis="outline"
|
|
2595
2563
|
disabled={!email || uploading}
|
|
2596
2564
|
onClick={() => fileInputRef.current?.click()}
|
|
2597
2565
|
className={cn(
|
|
@@ -2602,7 +2570,7 @@ function AccountSectionInner({
|
|
|
2602
2570
|
{uploading
|
|
2603
2571
|
? t("settings.profileUploading")
|
|
2604
2572
|
: t("settings.profileChangePhoto")}
|
|
2605
|
-
</
|
|
2573
|
+
</Button>
|
|
2606
2574
|
</div>
|
|
2607
2575
|
<form
|
|
2608
2576
|
className="space-y-1.5"
|
|
@@ -2646,8 +2614,10 @@ function AccountSectionInner({
|
|
|
2646
2614
|
</p>
|
|
2647
2615
|
)}
|
|
2648
2616
|
</div>
|
|
2649
|
-
<
|
|
2617
|
+
<Button
|
|
2650
2618
|
type="submit"
|
|
2619
|
+
intent="primary"
|
|
2620
|
+
emphasis="solid"
|
|
2651
2621
|
disabled={
|
|
2652
2622
|
!email ||
|
|
2653
2623
|
profileQuery.isLoading ||
|
|
@@ -2660,7 +2630,7 @@ function AccountSectionInner({
|
|
|
2660
2630
|
{updateProfile.isPending
|
|
2661
2631
|
? t("settings.profileSaving")
|
|
2662
2632
|
: t("settings.profileSave")}
|
|
2663
|
-
</
|
|
2633
|
+
</Button>
|
|
2664
2634
|
</div>
|
|
2665
2635
|
</form>
|
|
2666
2636
|
</SettingsSection>
|
|
@@ -2703,27 +2673,6 @@ function SettingsPanelContent({
|
|
|
2703
2673
|
trackingSource: "settings_panel_builder_card",
|
|
2704
2674
|
});
|
|
2705
2675
|
|
|
2706
|
-
// When opened via a `#secrets:<KEY>` hash, focus that specific secret input
|
|
2707
|
-
// inside the "API Keys & Connections" section.
|
|
2708
|
-
const [focusSecretKey, setFocusSecretKey] = useState<string | undefined>(
|
|
2709
|
-
undefined,
|
|
2710
|
-
);
|
|
2711
|
-
const visibleSections = useMemo(() => new Set(sections), [sections]);
|
|
2712
|
-
const shouldShowSection = useCallback(
|
|
2713
|
-
(section: SettingsSectionId) => visibleSections.has(section),
|
|
2714
|
-
[visibleSections],
|
|
2715
|
-
);
|
|
2716
|
-
|
|
2717
|
-
// Accordion: only one section open at a time (null = all closed)
|
|
2718
|
-
const [openSection, setOpenSection] = useState<string | null>(() => {
|
|
2719
|
-
const initial = initialOpenSection();
|
|
2720
|
-
return visibleSections.has(initial)
|
|
2721
|
-
? initial
|
|
2722
|
-
: firstVisibleSection(sections);
|
|
2723
|
-
});
|
|
2724
|
-
const toggle = (id: string) =>
|
|
2725
|
-
setOpenSection((prev) => (prev === id ? null : id));
|
|
2726
|
-
|
|
2727
2676
|
const scrollSectionIntoView = useCallback((section: SettingsSectionId) => {
|
|
2728
2677
|
window.requestAnimationFrame(() => {
|
|
2729
2678
|
document.getElementById(settingsSectionDomId(section))?.scrollIntoView({
|
|
@@ -2732,47 +2681,23 @@ function SettingsPanelContent({
|
|
|
2732
2681
|
});
|
|
2733
2682
|
});
|
|
2734
2683
|
}, []);
|
|
2735
|
-
|
|
2736
|
-
|
|
2737
|
-
|
|
2738
|
-
|
|
2739
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
useEffect(() => {
|
|
2745
|
-
const section = normalizeSettingsSection(initialSection);
|
|
2746
|
-
if (!section || !shouldShowSection(section)) return;
|
|
2747
|
-
if (section !== "secrets") setFocusSecretKey(undefined);
|
|
2748
|
-
openSettingsSection(section, true);
|
|
2749
|
-
}, [
|
|
2684
|
+
const {
|
|
2685
|
+
focusSecretKey,
|
|
2686
|
+
isSectionVisible: shouldShowSection,
|
|
2687
|
+
openSection,
|
|
2688
|
+
toggleSection: toggle,
|
|
2689
|
+
openSettingsSection: openControllerSection,
|
|
2690
|
+
} = useSettingsPanelController({
|
|
2691
|
+
sections,
|
|
2750
2692
|
initialSection,
|
|
2751
2693
|
sectionRequestKey,
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
-
if (typeof window === "undefined") return;
|
|
2760
|
-
const handleHash = () => {
|
|
2761
|
-
const hash = window.location.hash?.replace(/^#/, "") ?? "";
|
|
2762
|
-
const section = normalizeSettingsSection(hash);
|
|
2763
|
-
if (!section || !shouldShowSection(section)) return;
|
|
2764
|
-
if (hash.startsWith("secrets:") || hash === "secrets") {
|
|
2765
|
-
const key = hash.slice("secrets:".length);
|
|
2766
|
-
setFocusSecretKey(key || undefined);
|
|
2767
|
-
} else {
|
|
2768
|
-
setFocusSecretKey(undefined);
|
|
2769
|
-
}
|
|
2770
|
-
openSettingsSection(section, true);
|
|
2771
|
-
};
|
|
2772
|
-
handleHash();
|
|
2773
|
-
window.addEventListener("hashchange", handleHash);
|
|
2774
|
-
return () => window.removeEventListener("hashchange", handleHash);
|
|
2775
|
-
}, [openSettingsSection, shouldShowSection]);
|
|
2694
|
+
onScrollToSection: scrollSectionIntoView,
|
|
2695
|
+
});
|
|
2696
|
+
const openSettingsSection = useCallback(
|
|
2697
|
+
(section: SettingsSectionId, scroll = false) =>
|
|
2698
|
+
openControllerSection(section, { scroll }),
|
|
2699
|
+
[openControllerSection],
|
|
2700
|
+
);
|
|
2776
2701
|
|
|
2777
2702
|
const isPage = surface === "page";
|
|
2778
2703
|
|
|
@@ -3158,6 +3083,36 @@ export function SettingsPanel(props: SettingsPanelProps) {
|
|
|
3158
3083
|
return <SettingsPanelContent {...props} />;
|
|
3159
3084
|
}
|
|
3160
3085
|
|
|
3086
|
+
function McpConnectionsCard() {
|
|
3087
|
+
const t = useT();
|
|
3088
|
+
|
|
3089
|
+
return (
|
|
3090
|
+
<section className="rounded-lg border border-border bg-muted/20 p-3">
|
|
3091
|
+
<div className="flex items-start gap-2.5">
|
|
3092
|
+
<IconPlugConnected
|
|
3093
|
+
size={16}
|
|
3094
|
+
className="mt-0.5 shrink-0 text-muted-foreground"
|
|
3095
|
+
/>
|
|
3096
|
+
<div className="min-w-0 flex-1">
|
|
3097
|
+
<h2 className="text-sm font-semibold text-foreground">
|
|
3098
|
+
{t("settings.mcpConnectionsTitle")}
|
|
3099
|
+
</h2>
|
|
3100
|
+
<p className="mt-1 text-xs leading-5 text-muted-foreground">
|
|
3101
|
+
{t("settings.mcpConnectionsDescription")}
|
|
3102
|
+
</p>
|
|
3103
|
+
<Link
|
|
3104
|
+
to="/agent#connections"
|
|
3105
|
+
className="mt-2 inline-flex items-center gap-1 text-xs font-medium text-foreground underline-offset-4 hover:underline"
|
|
3106
|
+
>
|
|
3107
|
+
{t("settings.openMcpConnections")}
|
|
3108
|
+
<IconExternalLink size={13} />
|
|
3109
|
+
</Link>
|
|
3110
|
+
</div>
|
|
3111
|
+
</div>
|
|
3112
|
+
</section>
|
|
3113
|
+
);
|
|
3114
|
+
}
|
|
3115
|
+
|
|
3161
3116
|
export function ConnectionsSettingsContent({
|
|
3162
3117
|
settingsPanelProps,
|
|
3163
3118
|
}: {
|
|
@@ -3166,6 +3121,7 @@ export function ConnectionsSettingsContent({
|
|
|
3166
3121
|
return (
|
|
3167
3122
|
<div className="mx-auto w-full max-w-2xl space-y-4">
|
|
3168
3123
|
<BuilderConnectCard trackingSource="settings_connections" />
|
|
3124
|
+
<McpConnectionsCard />
|
|
3169
3125
|
<SettingsPanelContent
|
|
3170
3126
|
{...settingsPanelProps}
|
|
3171
3127
|
surface="page"
|