@agent-native/core 0.117.1 → 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 +40 -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 +2 -1
- package/corpus/core/src/a2a/types.ts +1 -0
- package/corpus/core/src/agent/types.ts +1 -1
- package/corpus/core/src/cli/context-xray-local.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/extensions/ExtensionViewer.tsx +4 -4
- package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +11 -11
- package/corpus/core/src/client/extensions/agent-native-extension-runtime.ts +1 -1
- package/corpus/core/src/client/extensions/delete-extension.ts +2 -2
- package/corpus/core/src/client/i18n.tsx +22 -0
- package/corpus/core/src/client/index.ts +17 -0
- package/corpus/core/src/client/org/OrgSwitcher.tsx +25 -1
- 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 +302 -254
- 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 +71 -592
- 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/db/client.ts +13 -10
- package/corpus/core/src/extensions/actions.ts +13 -5
- package/corpus/core/src/extensions/local.ts +1 -0
- package/corpus/core/src/extensions/routes.ts +10 -5
- package/corpus/core/src/extensions/schema.ts +5 -0
- package/corpus/core/src/extensions/slots/store.ts +14 -4
- package/corpus/core/src/extensions/store.ts +55 -19
- package/corpus/core/src/extensions/theme.ts +1 -1
- package/corpus/core/src/file-upload/registry.ts +9 -0
- package/corpus/core/src/index.browser.ts +5 -0
- package/corpus/core/src/index.ts +1 -0
- package/corpus/core/src/localization/default-messages.ts +28 -6
- 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/action-discovery.ts +8 -0
- package/corpus/core/src/server/better-auth-instance.ts +7 -2
- package/corpus/core/src/server/email-template.ts +18 -0
- package/corpus/core/src/server/email-templates.ts +3 -0
- package/corpus/core/src/server/email.ts +40 -4
- package/corpus/core/src/server/realtime-voice.ts +1 -1
- package/corpus/core/src/sharing/actions/share-resource.ts +1 -0
- package/corpus/core/src/styles/agent-native.css +0 -24
- package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/global.css +1 -1
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +7 -7
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +7 -7
- 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 +43 -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 +43 -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/user-profile/actions/get-user-profile.ts +16 -0
- package/corpus/core/src/user-profile/actions/update-user-profile.ts +24 -0
- package/corpus/core/src/user-profile/index.ts +5 -0
- package/corpus/core/src/user-profile/shared.ts +14 -0
- package/corpus/core/src/user-profile/store.ts +50 -0
- package/corpus/core/src/vite/client.ts +39 -0
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +43 -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 +43 -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/layout/Sidebar.tsx +2 -2
- 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/global.css +1 -1
- package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +26 -30
- package/corpus/templates/assets/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/global.css +2 -2
- package/corpus/templates/brain/app/lib/brain.ts +2 -2
- package/corpus/templates/brain/app/root.tsx +2 -2
- package/corpus/templates/brain/app/routes/sources.tsx +8 -8
- package/corpus/templates/brain/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/layout/Sidebar.tsx +6 -2
- 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/calendar/app/global.css +1 -1
- package/corpus/templates/calendar/app/root.tsx +2 -2
- package/corpus/templates/calendar/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/layout/Sidebar.tsx +2 -2
- 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/chat/app/global.css +1 -1
- package/corpus/templates/chat/app/root.tsx +2 -2
- package/corpus/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/actions/export-to-brain.ts +1 -1
- package/corpus/templates/clips/actions/invite-member.ts +1 -0
- package/corpus/templates/clips/app/components/library/library-layout.tsx +2 -2
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +20 -11
- 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/global.css +1 -1
- package/corpus/templates/clips/app/root.tsx +7 -2
- package/corpus/templates/clips/app/routes/_app.library._index.tsx +1 -1
- package/corpus/templates/clips/app/routes/record.tsx +2 -88
- package/corpus/templates/clips/changelog/2026-07-22-builder-connected-recordings-start-resumable-upload-sessions.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-clip-thumbnails-now-come-from-the-recording-instead-of-the-p.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-clips-emails-now-render-the-agent-native-logo-in-gmail-and-o.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-dismissed-zoom-and-teams-meeting-note-prompts-now-stay-dismi.md +6 -0
- 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-manage-agent-navigation-now-uses-the-connected-nodes-icon.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-quieter-permissions-and-rewind-controls.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 +100 -62
- package/corpus/templates/clips/desktop/src/lib/meeting-notification-dismissal.ts +31 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +4 -167
- package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +10 -1
- package/corpus/templates/clips/desktop/src/styles.css +111 -36
- package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +67 -4
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +11 -2
- package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +51 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +5 -1
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +0 -189
- package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +62 -0
- 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/clips/server/plugins/db.ts +6 -2
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/sidebar/DocumentSidebar.tsx +3 -3
- 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 +30 -4
- package/corpus/templates/content/app/root.tsx +2 -2
- package/corpus/templates/content/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- 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 +43 -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/global.css +1 -1
- 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 +43 -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/design/CanvasContextMenu.tsx +19 -1
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +12 -1
- package/corpus/templates/design/app/components/design/EditPanel.tsx +177 -52
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +179 -59
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +74 -27
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +2 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +8 -8
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -2
- 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/design/app/global.css +1 -1
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +6 -5
- package/corpus/templates/design/app/root.tsx +2 -2
- package/corpus/templates/design/changelog/2026-07-22-design-owners-can-keep-editing-their-designs-after-switching.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-inspector-tabs-keep-their-text-labels-at-narrow-widths.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-narrow-breakpoint-previews-keep-their-device-labels-readable.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-removed-the-draft-status-chip-from-the-design-editor.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-responsive-breakpoint-controls-stay-within-narrow-sidebars.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-responsive-peers-now-use-a-softer-selection-highlight-withou.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-rotate-from-context-menu.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-the-selection-outline-now-stays-attached-while-moving-screen.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-view-only-designs-now-support-figma-style-layer-inspection-w.md +6 -0
- package/corpus/templates/design/server/db/index.ts +4 -0
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/dispatch-extensions.tsx +2 -2
- package/corpus/templates/dispatch/app/global.css +1 -1
- package/corpus/templates/dispatch/app/root.tsx +12 -9
- package/corpus/templates/dispatch/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/dispatch/package.json +1 -0
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/layout/Layout.tsx +1 -1
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +3 -3
- 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/forms/app/global.css +1 -1
- package/corpus/templates/forms/app/hooks/use-forms.ts +55 -2
- package/corpus/templates/forms/app/i18n/en-US.ts +2 -0
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +3 -3
- package/corpus/templates/forms/app/pages/FormsListPage.tsx +23 -6
- package/corpus/templates/forms/app/root.tsx +2 -2
- package/corpus/templates/forms/changelog/2026-07-22-forms-now-archive-with-optimistic-feedback.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -1
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/layout/AppLayout.tsx +2 -2
- 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/macros/app/root.tsx +2 -2
- package/corpus/templates/macros/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/layout/AppLayout.tsx +3 -3
- package/corpus/templates/mail/app/components/layout/CommandPalette.tsx +2 -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/app/global.css +1 -1
- 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/mail/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/layout/Sidebar.tsx +2 -2
- 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/plan/app/global.css +1 -1
- package/corpus/templates/plan/app/root.tsx +2 -2
- package/corpus/templates/plan/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/layout/Sidebar.tsx +2 -2
- 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/slides/app/root.tsx +2 -2
- package/corpus/templates/slides/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-22-slides-no-longer-fail-intermittently-on-fresh-server-instances.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-22-uploaded-screenshots-can-now-be-analyzed-and-recreated-as-ed.md +6 -0
- package/corpus/templates/slides/server/lib/chat-attachments.ts +7 -3
- package/corpus/templates/slides/server/plugins/db.ts +44 -17
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/global.css +1 -1
- 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/cli/context-xray-local.js +1 -1
- package/dist/cli/context-xray-local.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/extensions/ExtensionViewer.js +2 -2
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +11 -11
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/extensions/agent-native-extension-runtime.js +1 -1
- package/dist/client/extensions/agent-native-extension-runtime.js.map +1 -1
- package/dist/client/extensions/delete-extension.d.ts +1 -1
- package/dist/client/extensions/delete-extension.d.ts.map +1 -1
- package/dist/client/extensions/delete-extension.js +1 -1
- package/dist/client/extensions/delete-extension.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/OrgSwitcher.d.ts +3 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +12 -4
- package/dist/client/org/OrgSwitcher.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 +87 -119
- 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 +5 -5
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +19 -464
- 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/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/db/client.d.ts +7 -7
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +13 -10
- package/dist/db/client.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +8 -5
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/local.d.ts.map +1 -1
- package/dist/extensions/local.js +1 -0
- package/dist/extensions/local.js.map +1 -1
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +9 -4
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/schema.d.ts +23 -2
- package/dist/extensions/schema.d.ts.map +1 -1
- package/dist/extensions/schema.js +5 -0
- package/dist/extensions/schema.js.map +1 -1
- package/dist/extensions/slots/store.d.ts +1 -1
- package/dist/extensions/slots/store.d.ts.map +1 -1
- package/dist/extensions/slots/store.js +4 -4
- package/dist/extensions/slots/store.js.map +1 -1
- package/dist/extensions/store.d.ts +1 -0
- package/dist/extensions/store.d.ts.map +1 -1
- package/dist/extensions/store.js +38 -21
- package/dist/extensions/store.js.map +1 -1
- package/dist/extensions/theme.js +1 -1
- package/dist/extensions/theme.js.map +1 -1
- package/dist/file-upload/registry.d.ts.map +1 -1
- package/dist/file-upload/registry.js +9 -0
- package/dist/file-upload/registry.js.map +1 -1
- package/dist/index.browser.d.ts +1 -0
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -0
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +20 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +26 -6
- 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 +3 -3
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- 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/secrets/routes.d.ts +6 -6
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +8 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +7 -2
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/email-template.d.ts +3 -0
- package/dist/server/email-template.d.ts.map +1 -1
- package/dist/server/email-template.js +13 -0
- package/dist/server/email-template.js.map +1 -1
- package/dist/server/email-templates.d.ts.map +1 -1
- package/dist/server/email-templates.js +3 -0
- package/dist/server/email-templates.js.map +1 -1
- package/dist/server/email.d.ts.map +1 -1
- package/dist/server/email.js +27 -4
- package/dist/server/email.js.map +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/sharing/actions/share-resource.js +1 -0
- package/dist/sharing/actions/share-resource.js.map +1 -1
- package/dist/styles/agent-native.css +0 -24
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/layout/Sidebar.tsx +2 -2
- 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/chat/app/global.css +1 -1
- package/dist/templates/chat/app/root.tsx +2 -2
- package/dist/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/global.css +1 -1
- package/dist/templates/default/app/i18n/ar-SA.ts +6 -6
- package/dist/templates/default/app/i18n/de-DE.ts +6 -6
- package/dist/templates/default/app/i18n/en-US.ts +6 -6
- package/dist/templates/default/app/i18n/es-ES.ts +6 -6
- package/dist/templates/default/app/i18n/fr-FR.ts +6 -6
- package/dist/templates/default/app/i18n/hi-IN.ts +6 -6
- package/dist/templates/default/app/i18n/ja-JP.ts +6 -6
- package/dist/templates/default/app/i18n/ko-KR.ts +6 -6
- package/dist/templates/default/app/i18n/pt-BR.ts +6 -6
- package/dist/templates/default/app/i18n/zh-CN.ts +7 -7
- package/dist/templates/default/app/i18n/zh-TW.ts +7 -7
- 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 +43 -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 +43 -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/user-profile/actions/get-user-profile.d.ts +4 -0
- package/dist/user-profile/actions/get-user-profile.d.ts.map +1 -0
- package/dist/user-profile/actions/get-user-profile.js +14 -0
- package/dist/user-profile/actions/get-user-profile.js.map +1 -0
- package/dist/user-profile/actions/update-user-profile.d.ts +6 -0
- package/dist/user-profile/actions/update-user-profile.d.ts.map +1 -0
- package/dist/user-profile/actions/update-user-profile.js +20 -0
- package/dist/user-profile/actions/update-user-profile.js.map +1 -0
- package/dist/user-profile/index.d.ts +2 -0
- package/dist/user-profile/index.d.ts.map +1 -0
- package/dist/user-profile/index.js +2 -0
- package/dist/user-profile/index.js.map +1 -0
- package/dist/user-profile/shared.d.ts +7 -0
- package/dist/user-profile/shared.d.ts.map +1 -0
- package/dist/user-profile/shared.js +6 -0
- package/dist/user-profile/shared.js.map +1 -0
- package/dist/user-profile/store.d.ts +4 -0
- package/dist/user-profile/store.d.ts.map +1 -0
- package/dist/user-profile/store.js +38 -0
- package/dist/user-profile/store.js.map +1 -0
- 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 +3 -2
- package/src/a2a/types.ts +1 -0
- package/src/agent/types.ts +1 -1
- package/src/cli/context-xray-local.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/extensions/ExtensionViewer.tsx +4 -4
- package/src/client/extensions/ExtensionsSidebarSection.tsx +11 -11
- package/src/client/extensions/agent-native-extension-runtime.ts +1 -1
- package/src/client/extensions/delete-extension.ts +2 -2
- package/src/client/i18n.tsx +22 -0
- package/src/client/index.ts +17 -0
- package/src/client/org/OrgSwitcher.tsx +25 -1
- 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 +302 -254
- 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 +71 -592
- 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/db/client.ts +13 -10
- package/src/extensions/actions.ts +13 -5
- package/src/extensions/local.ts +1 -0
- package/src/extensions/routes.ts +10 -5
- package/src/extensions/schema.ts +5 -0
- package/src/extensions/slots/store.ts +14 -4
- package/src/extensions/store.ts +55 -19
- package/src/extensions/theme.ts +1 -1
- package/src/file-upload/registry.ts +9 -0
- package/src/index.browser.ts +5 -0
- package/src/index.ts +1 -0
- package/src/localization/default-messages.ts +28 -6
- package/src/mcp-client/oauth-routes.ts +16 -2
- package/src/scripts/call-agent.ts +5 -1
- package/src/server/action-discovery.ts +8 -0
- package/src/server/better-auth-instance.ts +7 -2
- package/src/server/email-template.ts +18 -0
- package/src/server/email-templates.ts +3 -0
- package/src/server/email.ts +40 -4
- package/src/server/realtime-voice.ts +1 -1
- package/src/sharing/actions/share-resource.ts +1 -0
- package/src/styles/agent-native.css +0 -24
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/layout/Sidebar.tsx +2 -2
- 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/chat/app/global.css +1 -1
- package/src/templates/chat/app/root.tsx +2 -2
- package/src/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +43 -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/global.css +1 -1
- package/src/templates/default/app/i18n/ar-SA.ts +6 -6
- package/src/templates/default/app/i18n/de-DE.ts +6 -6
- package/src/templates/default/app/i18n/en-US.ts +6 -6
- package/src/templates/default/app/i18n/es-ES.ts +6 -6
- package/src/templates/default/app/i18n/fr-FR.ts +6 -6
- package/src/templates/default/app/i18n/hi-IN.ts +6 -6
- package/src/templates/default/app/i18n/ja-JP.ts +6 -6
- package/src/templates/default/app/i18n/ko-KR.ts +6 -6
- package/src/templates/default/app/i18n/pt-BR.ts +6 -6
- package/src/templates/default/app/i18n/zh-CN.ts +7 -7
- package/src/templates/default/app/i18n/zh-TW.ts +7 -7
- 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 +43 -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 +43 -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/user-profile/actions/get-user-profile.ts +16 -0
- package/src/user-profile/actions/update-user-profile.ts +24 -0
- package/src/user-profile/index.ts +5 -0
- package/src/user-profile/shared.ts +14 -0
- package/src/user-profile/store.ts +50 -0
- 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,8 +40,10 @@ 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";
|
|
46
|
+
import type { UserProfile } from "../../user-profile/shared.js";
|
|
40
47
|
import { saveAgentEngineProviderSettings } from "../agent-engine-key.js";
|
|
41
48
|
import { agentNativePath } from "../api-path.js";
|
|
42
49
|
import { BuilderBMark } from "../builder-mark.js";
|
|
@@ -45,9 +52,14 @@ import {
|
|
|
45
52
|
TooltipContent,
|
|
46
53
|
TooltipTrigger,
|
|
47
54
|
} from "../components/ui/tooltip.js";
|
|
55
|
+
import { useT } from "../i18n.js";
|
|
48
56
|
import { TeamPage } from "../org/TeamPage.js";
|
|
49
57
|
import { BuilderConnectCard } from "../setup-connections/BuilderConnectCard.js";
|
|
50
|
-
import {
|
|
58
|
+
import {
|
|
59
|
+
useActionMutation,
|
|
60
|
+
useActionQuery,
|
|
61
|
+
callAction,
|
|
62
|
+
} from "../use-action.js";
|
|
51
63
|
import { uploadAvatar, useAvatarUrl } from "../use-avatar.js";
|
|
52
64
|
import { useDevMode } from "../use-dev-mode.js";
|
|
53
65
|
import { useSession } from "../use-session.js";
|
|
@@ -56,7 +68,6 @@ import {
|
|
|
56
68
|
AGENT_SETTINGS_SECTIONS,
|
|
57
69
|
ALL_SETTINGS_SECTIONS,
|
|
58
70
|
CONNECTION_SETTINGS_SECTIONS,
|
|
59
|
-
SETTINGS_SECTION_IDS,
|
|
60
71
|
WORKSPACE_SETTINGS_SECTIONS,
|
|
61
72
|
getAgentSettingsSearchTabs,
|
|
62
73
|
type SettingsSectionId,
|
|
@@ -78,8 +89,28 @@ import {
|
|
|
78
89
|
useBuilderConnectFlow,
|
|
79
90
|
useBuilderStatus,
|
|
80
91
|
} from "./useBuilderStatus.js";
|
|
92
|
+
import {
|
|
93
|
+
settingsSectionDomId,
|
|
94
|
+
useSettingsPanelController,
|
|
95
|
+
} from "./useSettingsPanelController.js";
|
|
81
96
|
import { VoiceTranscriptionSection } from "./VoiceTranscriptionSection.js";
|
|
82
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
|
+
|
|
83
114
|
const IntegrationsPanel = lazy(() =>
|
|
84
115
|
import("../integrations/IntegrationsPanel.js").then((m) => ({
|
|
85
116
|
default: m.IntegrationsPanel,
|
|
@@ -183,7 +214,6 @@ function SettingsSelect({
|
|
|
183
214
|
}) {
|
|
184
215
|
const isPage = useSettingsSurface() === "page";
|
|
185
216
|
const controlStyle = isPage ? CONTROL_STYLE_PAGE : CONTROL_STYLE;
|
|
186
|
-
const selected = options.find((option) => option.value === value);
|
|
187
217
|
|
|
188
218
|
return (
|
|
189
219
|
<div className="space-y-1.5">
|
|
@@ -191,69 +221,27 @@ function SettingsSelect({
|
|
|
191
221
|
<p className={fieldLabelClass(isPage)}>{label}</p>
|
|
192
222
|
{labelAdornment}
|
|
193
223
|
</div>
|
|
194
|
-
<
|
|
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
|
+
}))}
|
|
195
232
|
value={value}
|
|
196
|
-
|
|
233
|
+
onChange={(next) => {
|
|
234
|
+
if (next != null) onValueChange(String(next));
|
|
235
|
+
}}
|
|
197
236
|
disabled={disabled}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
>
|
|
207
|
-
<SelectPrimitive.Value>
|
|
208
|
-
{selected?.label ?? value}
|
|
209
|
-
</SelectPrimitive.Value>
|
|
210
|
-
<SelectPrimitive.Icon asChild>
|
|
211
|
-
<IconChevronDown size={16} className="text-muted-foreground" />
|
|
212
|
-
</SelectPrimitive.Icon>
|
|
213
|
-
</SelectPrimitive.Trigger>
|
|
214
|
-
<SelectPrimitive.Portal>
|
|
215
|
-
<SelectPrimitive.Content
|
|
216
|
-
position="popper"
|
|
217
|
-
sideOffset={6}
|
|
218
|
-
className="z-[9999] w-[var(--radix-select-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover shadow-lg"
|
|
219
|
-
>
|
|
220
|
-
<SelectPrimitive.Viewport className="p-1">
|
|
221
|
-
{options.map((option) => (
|
|
222
|
-
<SelectPrimitive.Item
|
|
223
|
-
key={option.value}
|
|
224
|
-
value={option.value}
|
|
225
|
-
className={cn(
|
|
226
|
-
"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",
|
|
227
|
-
isPage ? "py-2.5 text-sm" : "py-2.5 text-[12px]",
|
|
228
|
-
)}
|
|
229
|
-
style={controlStyle}
|
|
230
|
-
>
|
|
231
|
-
<span className="absolute start-2 top-2.5 flex h-4 w-4 items-center justify-center text-muted-foreground">
|
|
232
|
-
<SelectPrimitive.ItemIndicator>
|
|
233
|
-
<IconCheck size={14} />
|
|
234
|
-
</SelectPrimitive.ItemIndicator>
|
|
235
|
-
</span>
|
|
236
|
-
<div className="flex min-w-0 flex-col">
|
|
237
|
-
<SelectPrimitive.ItemText>
|
|
238
|
-
<span className="text-foreground">{option.label}</span>
|
|
239
|
-
</SelectPrimitive.ItemText>
|
|
240
|
-
{option.description ? (
|
|
241
|
-
<span
|
|
242
|
-
className={cn(
|
|
243
|
-
"mt-0.5 leading-relaxed text-muted-foreground",
|
|
244
|
-
isPage ? "text-xs" : "text-[11px]",
|
|
245
|
-
)}
|
|
246
|
-
>
|
|
247
|
-
{option.description}
|
|
248
|
-
</span>
|
|
249
|
-
) : null}
|
|
250
|
-
</div>
|
|
251
|
-
</SelectPrimitive.Item>
|
|
252
|
-
))}
|
|
253
|
-
</SelectPrimitive.Viewport>
|
|
254
|
-
</SelectPrimitive.Content>
|
|
255
|
-
</SelectPrimitive.Portal>
|
|
256
|
-
</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
|
+
/>
|
|
257
245
|
</div>
|
|
258
246
|
);
|
|
259
247
|
}
|
|
@@ -369,28 +357,34 @@ function DisconnectBuilderButton() {
|
|
|
369
357
|
if (phase === "armed") {
|
|
370
358
|
return (
|
|
371
359
|
<>
|
|
372
|
-
<
|
|
360
|
+
<Button
|
|
373
361
|
type="button"
|
|
362
|
+
intent="danger"
|
|
363
|
+
emphasis="solid"
|
|
374
364
|
onClick={handleDisconnectClick}
|
|
375
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"
|
|
376
366
|
>
|
|
377
367
|
Confirm disconnect
|
|
378
|
-
</
|
|
379
|
-
<
|
|
368
|
+
</Button>
|
|
369
|
+
<Button
|
|
380
370
|
type="button"
|
|
371
|
+
intent="neutral"
|
|
372
|
+
emphasis="outline"
|
|
381
373
|
onClick={handleCancel}
|
|
382
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"
|
|
383
375
|
>
|
|
384
376
|
Cancel
|
|
385
|
-
</
|
|
377
|
+
</Button>
|
|
386
378
|
</>
|
|
387
379
|
);
|
|
388
380
|
}
|
|
389
381
|
|
|
390
382
|
return (
|
|
391
383
|
<>
|
|
392
|
-
<
|
|
384
|
+
<Button
|
|
393
385
|
type="button"
|
|
386
|
+
intent="danger"
|
|
387
|
+
emphasis="outline"
|
|
394
388
|
onClick={handleDisconnectClick}
|
|
395
389
|
disabled={phase === "busy"}
|
|
396
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"
|
|
@@ -404,7 +398,7 @@ function DisconnectBuilderButton() {
|
|
|
404
398
|
) : (
|
|
405
399
|
"Disconnect"
|
|
406
400
|
)}
|
|
407
|
-
</
|
|
401
|
+
</Button>
|
|
408
402
|
{err && <span className="text-[10px] text-destructive">{err}</span>}
|
|
409
403
|
</>
|
|
410
404
|
);
|
|
@@ -479,8 +473,10 @@ function UseBuilderCard({
|
|
|
479
473
|
{connectUrl || credentialSource !== "env" ? (
|
|
480
474
|
<div className="flex items-center gap-2 mt-2.5">
|
|
481
475
|
{connectUrl && (
|
|
482
|
-
<
|
|
476
|
+
<Button
|
|
483
477
|
type="button"
|
|
478
|
+
intent="neutral"
|
|
479
|
+
emphasis="ghost"
|
|
484
480
|
onClick={() =>
|
|
485
481
|
builderFlow.start({ trackingSource, trackingFlow })
|
|
486
482
|
}
|
|
@@ -493,7 +489,7 @@ function UseBuilderCard({
|
|
|
493
489
|
? "Connect account"
|
|
494
490
|
: "Reconnect"}
|
|
495
491
|
<IconExternalLink size={isPage ? 14 : 10} />
|
|
496
|
-
</
|
|
492
|
+
</Button>
|
|
497
493
|
)}
|
|
498
494
|
{credentialSource !== "env" ? <DisconnectBuilderButton /> : null}
|
|
499
495
|
</div>
|
|
@@ -505,13 +501,14 @@ function UseBuilderCard({
|
|
|
505
501
|
if (!connectUrl) return null;
|
|
506
502
|
|
|
507
503
|
return (
|
|
508
|
-
<
|
|
504
|
+
<Button
|
|
509
505
|
type="button"
|
|
510
506
|
onClick={() => builderFlow.start({ trackingSource, trackingFlow })}
|
|
511
507
|
disabled={builderFlow.connecting}
|
|
512
508
|
className={cn(
|
|
513
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",
|
|
514
510
|
isPage ? "px-4 py-3.5" : "px-3 py-3",
|
|
511
|
+
isPage ? "[&_svg]:!size-4" : "[&_svg]:!size-3.5",
|
|
515
512
|
)}
|
|
516
513
|
>
|
|
517
514
|
<div className="flex items-start gap-2.5">
|
|
@@ -559,7 +556,7 @@ function UseBuilderCard({
|
|
|
559
556
|
className="shrink-0 text-muted-foreground mt-0.5"
|
|
560
557
|
/>
|
|
561
558
|
</div>
|
|
562
|
-
</
|
|
559
|
+
</Button>
|
|
563
560
|
);
|
|
564
561
|
}
|
|
565
562
|
|
|
@@ -760,19 +757,21 @@ export function AppDefaultModelField({
|
|
|
760
757
|
return (
|
|
761
758
|
<div className="space-y-1.5">
|
|
762
759
|
<p className={fieldLabelClass(isPage)}>Model</p>
|
|
763
|
-
<
|
|
764
|
-
type="text"
|
|
765
|
-
list={`app-model-suggestions-${engine}`}
|
|
760
|
+
<TextField
|
|
766
761
|
value={value}
|
|
762
|
+
onChange={onValueChange}
|
|
767
763
|
disabled={disabled}
|
|
768
|
-
|
|
764
|
+
list={`app-model-suggestions-${engine}`}
|
|
769
765
|
onKeyDown={(event) => {
|
|
770
766
|
if (event.key === "Enter") onEnter?.();
|
|
771
767
|
}}
|
|
772
768
|
placeholder={defaultModel ?? "model-id"}
|
|
773
|
-
spellCheck={false}
|
|
774
769
|
autoComplete="off"
|
|
775
|
-
|
|
770
|
+
aria-label="Model"
|
|
771
|
+
className={cn(
|
|
772
|
+
"w-full disabled:opacity-60",
|
|
773
|
+
isPage ? "text-sm" : "text-[12px]",
|
|
774
|
+
)}
|
|
776
775
|
style={isPage ? CONTROL_STYLE_PAGE : CONTROL_STYLE}
|
|
777
776
|
/>
|
|
778
777
|
{modelOptions.length > 0 && (
|
|
@@ -1174,7 +1173,7 @@ function LLMSectionInner({
|
|
|
1174
1173
|
|
|
1175
1174
|
{isOpenAiEngine && (
|
|
1176
1175
|
<div className="border-t border-border/70 pt-2">
|
|
1177
|
-
<
|
|
1176
|
+
<Button
|
|
1178
1177
|
type="button"
|
|
1179
1178
|
onClick={() => setAdvancedOpen((v) => !v)}
|
|
1180
1179
|
className="flex w-full cursor-pointer items-center justify-between gap-2 rounded px-0.5 py-1 text-left hover:text-foreground"
|
|
@@ -1193,7 +1192,7 @@ function LLMSectionInner({
|
|
|
1193
1192
|
<span className="truncate text-[10px] text-muted-foreground">
|
|
1194
1193
|
OpenAI-compatible endpoint
|
|
1195
1194
|
</span>
|
|
1196
|
-
</
|
|
1195
|
+
</Button>
|
|
1197
1196
|
|
|
1198
1197
|
{advancedOpen && (
|
|
1199
1198
|
<div className="mt-1.5 space-y-1.5">
|
|
@@ -1232,21 +1231,23 @@ function LLMSectionInner({
|
|
|
1232
1231
|
</p>
|
|
1233
1232
|
{baseUrlConfigured && (
|
|
1234
1233
|
<label className="flex items-center gap-1.5 text-[10px] text-muted-foreground">
|
|
1235
|
-
<
|
|
1236
|
-
type="checkbox"
|
|
1234
|
+
<Checkbox
|
|
1237
1235
|
checked={clearBaseUrl}
|
|
1238
|
-
onChange={(
|
|
1239
|
-
setClearBaseUrl(
|
|
1240
|
-
if (
|
|
1236
|
+
onChange={(checked) => {
|
|
1237
|
+
setClearBaseUrl(checked);
|
|
1238
|
+
if (checked) setBaseUrl("");
|
|
1241
1239
|
}}
|
|
1242
|
-
|
|
1240
|
+
aria-label="Clear saved endpoint override"
|
|
1241
|
+
className="shrink-0"
|
|
1243
1242
|
/>
|
|
1244
1243
|
Clear saved endpoint override
|
|
1245
1244
|
</label>
|
|
1246
1245
|
)}
|
|
1247
1246
|
{envVar && envConfigured && endpointChanged && (
|
|
1248
|
-
<
|
|
1247
|
+
<Button
|
|
1249
1248
|
type="button"
|
|
1249
|
+
intent="neutral"
|
|
1250
|
+
emphasis="solid"
|
|
1250
1251
|
onClick={handleSave}
|
|
1251
1252
|
disabled={saving}
|
|
1252
1253
|
className="rounded bg-accent px-2.5 py-1 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40"
|
|
@@ -1258,7 +1259,7 @@ function LLMSectionInner({
|
|
|
1258
1259
|
) : (
|
|
1259
1260
|
"Save endpoint"
|
|
1260
1261
|
)}
|
|
1261
|
-
</
|
|
1262
|
+
</Button>
|
|
1262
1263
|
)}
|
|
1263
1264
|
</div>
|
|
1264
1265
|
)}
|
|
@@ -1288,7 +1289,9 @@ function LLMSectionInner({
|
|
|
1288
1289
|
className={cn(textInputClass(isPage), "flex-1")}
|
|
1289
1290
|
style={isPage ? CONTROL_STYLE_PAGE : undefined}
|
|
1290
1291
|
/>
|
|
1291
|
-
<
|
|
1292
|
+
<Button
|
|
1293
|
+
intent="primary"
|
|
1294
|
+
emphasis="solid"
|
|
1292
1295
|
onClick={handleSave}
|
|
1293
1296
|
disabled={!providerSettingsChanged || saving}
|
|
1294
1297
|
className={pillButtonClass(isPage, "solid")}
|
|
@@ -1303,12 +1306,14 @@ function LLMSectionInner({
|
|
|
1303
1306
|
) : (
|
|
1304
1307
|
"Save"
|
|
1305
1308
|
)}
|
|
1306
|
-
</
|
|
1309
|
+
</Button>
|
|
1307
1310
|
</div>
|
|
1308
1311
|
) : null}
|
|
1309
1312
|
|
|
1310
1313
|
<div className="flex items-center gap-2">
|
|
1311
|
-
<
|
|
1314
|
+
<Button
|
|
1315
|
+
intent="neutral"
|
|
1316
|
+
emphasis="outline"
|
|
1312
1317
|
onClick={handleTest}
|
|
1313
1318
|
disabled={testing}
|
|
1314
1319
|
className={pillButtonClass(isPage, "outline")}
|
|
@@ -1324,19 +1329,23 @@ function LLMSectionInner({
|
|
|
1324
1329
|
) : (
|
|
1325
1330
|
"Test"
|
|
1326
1331
|
)}
|
|
1327
|
-
</
|
|
1332
|
+
</Button>
|
|
1328
1333
|
{engineChanged && (
|
|
1329
|
-
<
|
|
1334
|
+
<Button
|
|
1335
|
+
intent="primary"
|
|
1336
|
+
emphasis="solid"
|
|
1330
1337
|
onClick={handleApply}
|
|
1331
1338
|
className={pillButtonClass(isPage, "solid")}
|
|
1332
1339
|
>
|
|
1333
1340
|
Apply
|
|
1334
|
-
</
|
|
1341
|
+
</Button>
|
|
1335
1342
|
)}
|
|
1336
1343
|
{settingsStatus != null && (
|
|
1337
1344
|
<Tooltip>
|
|
1338
1345
|
<TooltipTrigger asChild>
|
|
1339
|
-
<
|
|
1346
|
+
<Button
|
|
1347
|
+
intent="danger"
|
|
1348
|
+
emphasis="outline"
|
|
1340
1349
|
onClick={handleDisconnect}
|
|
1341
1350
|
className={cn(
|
|
1342
1351
|
pillButtonClass(isPage, "outline"),
|
|
@@ -1344,7 +1353,7 @@ function LLMSectionInner({
|
|
|
1344
1353
|
)}
|
|
1345
1354
|
>
|
|
1346
1355
|
Disconnect
|
|
1347
|
-
</
|
|
1356
|
+
</Button>
|
|
1348
1357
|
</TooltipTrigger>
|
|
1349
1358
|
<TooltipContent>
|
|
1350
1359
|
Clear the saved engine — the app will fall back to the
|
|
@@ -1657,8 +1666,10 @@ function AppModelDefaultsSectionInner({
|
|
|
1657
1666
|
/>
|
|
1658
1667
|
|
|
1659
1668
|
<div className="flex items-center gap-1.5">
|
|
1660
|
-
<
|
|
1669
|
+
<Button
|
|
1661
1670
|
type="button"
|
|
1671
|
+
intent="primary"
|
|
1672
|
+
emphasis="solid"
|
|
1662
1673
|
onClick={save}
|
|
1663
1674
|
disabled={!hasPendingChange || saving}
|
|
1664
1675
|
className={pillButtonClass(isPage, "solid")}
|
|
@@ -1673,15 +1684,17 @@ function AppModelDefaultsSectionInner({
|
|
|
1673
1684
|
) : (
|
|
1674
1685
|
"Save"
|
|
1675
1686
|
)}
|
|
1676
|
-
</
|
|
1677
|
-
<
|
|
1687
|
+
</Button>
|
|
1688
|
+
<Button
|
|
1678
1689
|
type="button"
|
|
1690
|
+
intent="neutral"
|
|
1691
|
+
emphasis="outline"
|
|
1679
1692
|
onClick={reset}
|
|
1680
1693
|
disabled={!settings.canUpdate || !hasAppDefault || saving}
|
|
1681
1694
|
className={pillButtonClass(isPage, "outline")}
|
|
1682
1695
|
>
|
|
1683
1696
|
Reset
|
|
1684
|
-
</
|
|
1697
|
+
</Button>
|
|
1685
1698
|
</div>
|
|
1686
1699
|
</div>
|
|
1687
1700
|
|
|
@@ -1833,27 +1846,17 @@ function EmailSectionInner({
|
|
|
1833
1846
|
<SettingsSkeleton lines={2} />
|
|
1834
1847
|
) : (
|
|
1835
1848
|
<div className="space-y-2">
|
|
1836
|
-
<
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
onChange={(e) =>
|
|
1848
|
-
setEmailProvider(e.target.value as "resend" | "sendgrid")
|
|
1849
|
-
}
|
|
1850
|
-
className={cn(textInputClass(isPage), "w-full")}
|
|
1851
|
-
style={isPage ? CONTROL_STYLE_PAGE : undefined}
|
|
1852
|
-
>
|
|
1853
|
-
<option value="resend">Resend</option>
|
|
1854
|
-
<option value="sendgrid">SendGrid</option>
|
|
1855
|
-
</select>
|
|
1856
|
-
</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
|
+
/>
|
|
1857
1860
|
|
|
1858
1861
|
{emailProvider === "resend" ? (
|
|
1859
1862
|
<ManualSetupCard
|
|
@@ -1883,7 +1886,9 @@ function EmailSectionInner({
|
|
|
1883
1886
|
placeholder="re_..."
|
|
1884
1887
|
className={emailInputCls}
|
|
1885
1888
|
/>
|
|
1886
|
-
<
|
|
1889
|
+
<Button
|
|
1890
|
+
intent="primary"
|
|
1891
|
+
emphasis="solid"
|
|
1887
1892
|
onClick={saveResend}
|
|
1888
1893
|
disabled={!resendKey.trim() || saving}
|
|
1889
1894
|
className={emailBtnCls}
|
|
@@ -1895,7 +1900,7 @@ function EmailSectionInner({
|
|
|
1895
1900
|
) : (
|
|
1896
1901
|
"Save"
|
|
1897
1902
|
)}
|
|
1898
|
-
</
|
|
1903
|
+
</Button>
|
|
1899
1904
|
</div>
|
|
1900
1905
|
)}
|
|
1901
1906
|
{fromConfigured ? (
|
|
@@ -1921,7 +1926,9 @@ function EmailSectionInner({
|
|
|
1921
1926
|
className={emailInputCls}
|
|
1922
1927
|
/>
|
|
1923
1928
|
{!resendConfigured ? null : (
|
|
1924
|
-
<
|
|
1929
|
+
<Button
|
|
1930
|
+
intent="primary"
|
|
1931
|
+
emphasis="solid"
|
|
1925
1932
|
onClick={saveResend}
|
|
1926
1933
|
disabled={!fromAddr.trim() || saving}
|
|
1927
1934
|
className={emailBtnCls}
|
|
@@ -1933,7 +1940,7 @@ function EmailSectionInner({
|
|
|
1933
1940
|
) : (
|
|
1934
1941
|
"Save"
|
|
1935
1942
|
)}
|
|
1936
|
-
</
|
|
1943
|
+
</Button>
|
|
1937
1944
|
)}
|
|
1938
1945
|
</div>
|
|
1939
1946
|
)}
|
|
@@ -1966,7 +1973,9 @@ function EmailSectionInner({
|
|
|
1966
1973
|
placeholder="SG...."
|
|
1967
1974
|
className={emailInputCls}
|
|
1968
1975
|
/>
|
|
1969
|
-
<
|
|
1976
|
+
<Button
|
|
1977
|
+
intent="primary"
|
|
1978
|
+
emphasis="solid"
|
|
1970
1979
|
onClick={saveSendgrid}
|
|
1971
1980
|
disabled={!sendgridKey.trim() || saving}
|
|
1972
1981
|
className={emailBtnCls}
|
|
@@ -1978,7 +1987,7 @@ function EmailSectionInner({
|
|
|
1978
1987
|
) : (
|
|
1979
1988
|
"Save"
|
|
1980
1989
|
)}
|
|
1981
|
-
</
|
|
1990
|
+
</Button>
|
|
1982
1991
|
</div>
|
|
1983
1992
|
)}
|
|
1984
1993
|
{fromConfigured ? (
|
|
@@ -2004,7 +2013,9 @@ function EmailSectionInner({
|
|
|
2004
2013
|
className={emailInputCls}
|
|
2005
2014
|
/>
|
|
2006
2015
|
{!sendgridConfigured ? null : (
|
|
2007
|
-
<
|
|
2016
|
+
<Button
|
|
2017
|
+
intent="primary"
|
|
2018
|
+
emphasis="solid"
|
|
2008
2019
|
onClick={saveSendgrid}
|
|
2009
2020
|
disabled={!fromAddr.trim() || saving}
|
|
2010
2021
|
className={emailBtnCls}
|
|
@@ -2016,7 +2027,7 @@ function EmailSectionInner({
|
|
|
2016
2027
|
) : (
|
|
2017
2028
|
"Save"
|
|
2018
2029
|
)}
|
|
2019
|
-
</
|
|
2030
|
+
</Button>
|
|
2020
2031
|
)}
|
|
2021
2032
|
</div>
|
|
2022
2033
|
)}
|
|
@@ -2240,8 +2251,10 @@ function AgentLimitsSectionInner({
|
|
|
2240
2251
|
)}
|
|
2241
2252
|
style={isPage ? CONTROL_STYLE_PAGE : undefined}
|
|
2242
2253
|
/>
|
|
2243
|
-
<
|
|
2254
|
+
<Button
|
|
2244
2255
|
type="button"
|
|
2256
|
+
intent="primary"
|
|
2257
|
+
emphasis="solid"
|
|
2245
2258
|
onClick={save}
|
|
2246
2259
|
disabled={!hasPendingChange || saving}
|
|
2247
2260
|
className={pillButtonClass(isPage, "solid")}
|
|
@@ -2256,9 +2269,11 @@ function AgentLimitsSectionInner({
|
|
|
2256
2269
|
) : (
|
|
2257
2270
|
"Save"
|
|
2258
2271
|
)}
|
|
2259
|
-
</
|
|
2260
|
-
<
|
|
2272
|
+
</Button>
|
|
2273
|
+
<Button
|
|
2261
2274
|
type="button"
|
|
2275
|
+
intent="neutral"
|
|
2276
|
+
emphasis="outline"
|
|
2262
2277
|
onClick={reset}
|
|
2263
2278
|
disabled={
|
|
2264
2279
|
!settings.canUpdate ||
|
|
@@ -2268,7 +2283,7 @@ function AgentLimitsSectionInner({
|
|
|
2268
2283
|
className={pillButtonClass(isPage, "outline")}
|
|
2269
2284
|
>
|
|
2270
2285
|
Reset
|
|
2271
|
-
</
|
|
2286
|
+
</Button>
|
|
2272
2287
|
</div>
|
|
2273
2288
|
{!settings.canUpdate && (
|
|
2274
2289
|
<p
|
|
@@ -2307,51 +2322,6 @@ export interface SettingsPanelProps {
|
|
|
2307
2322
|
sectionRequestKey?: number;
|
|
2308
2323
|
}
|
|
2309
2324
|
|
|
2310
|
-
function normalizeSettingsSection(
|
|
2311
|
-
value?: string | null,
|
|
2312
|
-
): SettingsSectionId | null {
|
|
2313
|
-
const normalized = value?.replace(/^#/, "").toLowerCase() ?? "";
|
|
2314
|
-
if (!normalized) return null;
|
|
2315
|
-
if (normalized.startsWith("secrets")) return "secrets";
|
|
2316
|
-
if (
|
|
2317
|
-
normalized === "workspace" ||
|
|
2318
|
-
normalized === "workspace-settings" ||
|
|
2319
|
-
normalized === "organization" ||
|
|
2320
|
-
normalized === "org"
|
|
2321
|
-
) {
|
|
2322
|
-
return "secrets";
|
|
2323
|
-
}
|
|
2324
|
-
if (normalized === "agent-engine") return "llm";
|
|
2325
|
-
if (
|
|
2326
|
-
normalized === "agent-model-defaults" ||
|
|
2327
|
-
normalized === "app-model-defaults" ||
|
|
2328
|
-
normalized === "models"
|
|
2329
|
-
) {
|
|
2330
|
-
return "app-models";
|
|
2331
|
-
}
|
|
2332
|
-
if (normalized === "agent-limits" || normalized === "loop-settings") {
|
|
2333
|
-
return "limits";
|
|
2334
|
-
}
|
|
2335
|
-
return SETTINGS_SECTION_IDS.has(normalized as SettingsSectionId)
|
|
2336
|
-
? (normalized as SettingsSectionId)
|
|
2337
|
-
: null;
|
|
2338
|
-
}
|
|
2339
|
-
|
|
2340
|
-
function settingsSectionDomId(section: SettingsSectionId): string {
|
|
2341
|
-
return `agent-settings-section-${section}`;
|
|
2342
|
-
}
|
|
2343
|
-
|
|
2344
|
-
function initialOpenSection(): SettingsSectionId {
|
|
2345
|
-
if (typeof window === "undefined") return "llm";
|
|
2346
|
-
return normalizeSettingsSection(window.location.hash) ?? "llm";
|
|
2347
|
-
}
|
|
2348
|
-
|
|
2349
|
-
function firstVisibleSection(
|
|
2350
|
-
sections: readonly SettingsSectionId[],
|
|
2351
|
-
): SettingsSectionId {
|
|
2352
|
-
return sections[0] ?? "llm";
|
|
2353
|
-
}
|
|
2354
|
-
|
|
2355
2325
|
// Agent capability modes. The internal values ("production"/"development") are
|
|
2356
2326
|
// kept for back-compat with the AGENT_MODE wiring; only the visible labels
|
|
2357
2327
|
// changed to "App mode" / "Code mode" so this control reads as the agent
|
|
@@ -2435,13 +2405,15 @@ function CapabilityStatusStrip({
|
|
|
2435
2405
|
) : builderConnected ? (
|
|
2436
2406
|
"Connected"
|
|
2437
2407
|
) : (
|
|
2438
|
-
<
|
|
2408
|
+
<Button
|
|
2439
2409
|
type="button"
|
|
2410
|
+
intent="neutral"
|
|
2411
|
+
emphasis="outline"
|
|
2440
2412
|
onClick={onOpenLlm}
|
|
2441
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"
|
|
2442
2414
|
>
|
|
2443
2415
|
Connect
|
|
2444
|
-
</
|
|
2416
|
+
</Button>
|
|
2445
2417
|
)
|
|
2446
2418
|
}
|
|
2447
2419
|
/>
|
|
@@ -2458,21 +2430,40 @@ function AccountSectionInner({
|
|
|
2458
2430
|
onToggle: () => void;
|
|
2459
2431
|
}) {
|
|
2460
2432
|
const isPage = useSettingsSurface() === "page";
|
|
2433
|
+
const t = useT();
|
|
2461
2434
|
const { session, isLoading } = useSession();
|
|
2462
2435
|
const email = session?.email;
|
|
2436
|
+
const profileQuery = useActionQuery<UserProfile>(
|
|
2437
|
+
"get-user-profile",
|
|
2438
|
+
undefined,
|
|
2439
|
+
{ enabled: !!email },
|
|
2440
|
+
);
|
|
2441
|
+
const updateProfile = useActionMutation<UserProfile, { name: string }>(
|
|
2442
|
+
"update-user-profile",
|
|
2443
|
+
);
|
|
2463
2444
|
const avatarUrl = useAvatarUrl(email);
|
|
2464
2445
|
const fileInputRef = useRef<HTMLInputElement>(null);
|
|
2465
2446
|
const [uploading, setUploading] = useState(false);
|
|
2466
2447
|
const [status, setStatus] = useState<"idle" | "saved" | "error">("idle");
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
const
|
|
2448
|
+
const [name, setName] = useState("");
|
|
2449
|
+
|
|
2450
|
+
const displayName =
|
|
2451
|
+
profileQuery.data?.name ||
|
|
2452
|
+
session?.name ||
|
|
2453
|
+
email ||
|
|
2454
|
+
t("settings.profileSignedOut");
|
|
2455
|
+
const initials = (displayName || "?")
|
|
2470
2456
|
.split(/[ @._-]+/)
|
|
2471
2457
|
.filter(Boolean)
|
|
2472
2458
|
.slice(0, 2)
|
|
2473
2459
|
.map((part) => part[0]?.toUpperCase())
|
|
2474
2460
|
.join("");
|
|
2475
2461
|
|
|
2462
|
+
useEffect(() => {
|
|
2463
|
+
const nextName = profileQuery.data?.name || session?.name;
|
|
2464
|
+
if (nextName) setName(nextName);
|
|
2465
|
+
}, [profileQuery.data?.name, session?.name]);
|
|
2466
|
+
|
|
2476
2467
|
const handleAvatarChange = async (
|
|
2477
2468
|
event: React.ChangeEvent<HTMLInputElement>,
|
|
2478
2469
|
) => {
|
|
@@ -2491,12 +2482,18 @@ function AccountSectionInner({
|
|
|
2491
2482
|
}
|
|
2492
2483
|
};
|
|
2493
2484
|
|
|
2485
|
+
const handleProfileSave = () => {
|
|
2486
|
+
const nextName = name.trim();
|
|
2487
|
+
if (!nextName || !email) return;
|
|
2488
|
+
updateProfile.mutate({ name: nextName });
|
|
2489
|
+
};
|
|
2490
|
+
|
|
2494
2491
|
return (
|
|
2495
2492
|
<SettingsSection
|
|
2496
2493
|
id={settingsSectionDomId("account")}
|
|
2497
2494
|
icon={<IconUserCircle size={14} />}
|
|
2498
|
-
title="
|
|
2499
|
-
subtitle="
|
|
2495
|
+
title={t("settings.profileTitle")}
|
|
2496
|
+
subtitle={t("settings.profileDescription")}
|
|
2500
2497
|
open={open}
|
|
2501
2498
|
onToggle={onToggle}
|
|
2502
2499
|
>
|
|
@@ -2524,7 +2521,7 @@ function AccountSectionInner({
|
|
|
2524
2521
|
isPage ? "text-sm" : "text-[12px]",
|
|
2525
2522
|
)}
|
|
2526
2523
|
>
|
|
2527
|
-
{isLoading ? "
|
|
2524
|
+
{isLoading ? t("settings.profileLoading") : displayName}
|
|
2528
2525
|
</p>
|
|
2529
2526
|
{email && (
|
|
2530
2527
|
<p
|
|
@@ -2543,12 +2540,12 @@ function AccountSectionInner({
|
|
|
2543
2540
|
subTextClass(isPage),
|
|
2544
2541
|
)}
|
|
2545
2542
|
>
|
|
2546
|
-
|
|
2543
|
+
{t("settings.profilePhotoUpdated")}
|
|
2547
2544
|
</p>
|
|
2548
2545
|
)}
|
|
2549
2546
|
{status === "error" && (
|
|
2550
2547
|
<p className={cn("mt-1 text-destructive", subTextClass(isPage))}>
|
|
2551
|
-
|
|
2548
|
+
{t("settings.profilePhotoError")}
|
|
2552
2549
|
</p>
|
|
2553
2550
|
)}
|
|
2554
2551
|
</div>
|
|
@@ -2559,8 +2556,10 @@ function AccountSectionInner({
|
|
|
2559
2556
|
className="hidden"
|
|
2560
2557
|
onChange={handleAvatarChange}
|
|
2561
2558
|
/>
|
|
2562
|
-
<
|
|
2559
|
+
<Button
|
|
2563
2560
|
type="button"
|
|
2561
|
+
intent="neutral"
|
|
2562
|
+
emphasis="outline"
|
|
2564
2563
|
disabled={!email || uploading}
|
|
2565
2564
|
onClick={() => fileInputRef.current?.click()}
|
|
2566
2565
|
className={cn(
|
|
@@ -2568,9 +2567,72 @@ function AccountSectionInner({
|
|
|
2568
2567
|
"shrink-0 justify-center",
|
|
2569
2568
|
)}
|
|
2570
2569
|
>
|
|
2571
|
-
{uploading
|
|
2572
|
-
|
|
2570
|
+
{uploading
|
|
2571
|
+
? t("settings.profileUploading")
|
|
2572
|
+
: t("settings.profileChangePhoto")}
|
|
2573
|
+
</Button>
|
|
2573
2574
|
</div>
|
|
2575
|
+
<form
|
|
2576
|
+
className="space-y-1.5"
|
|
2577
|
+
onSubmit={(event) => {
|
|
2578
|
+
event.preventDefault();
|
|
2579
|
+
handleProfileSave();
|
|
2580
|
+
}}
|
|
2581
|
+
>
|
|
2582
|
+
<label
|
|
2583
|
+
htmlFor="agent-native-profile-name"
|
|
2584
|
+
className={fieldLabelClass(isPage)}
|
|
2585
|
+
>
|
|
2586
|
+
{t("settings.profileNameLabel")}
|
|
2587
|
+
</label>
|
|
2588
|
+
<input
|
|
2589
|
+
id="agent-native-profile-name"
|
|
2590
|
+
type="text"
|
|
2591
|
+
value={name}
|
|
2592
|
+
onChange={(event) => {
|
|
2593
|
+
updateProfile.reset();
|
|
2594
|
+
setName(event.target.value);
|
|
2595
|
+
}}
|
|
2596
|
+
placeholder={t("settings.profileNamePlaceholder")}
|
|
2597
|
+
disabled={!email || profileQuery.isLoading || updateProfile.isPending}
|
|
2598
|
+
maxLength={120}
|
|
2599
|
+
className={textInputClass(isPage)}
|
|
2600
|
+
/>
|
|
2601
|
+
<p className={cn("text-muted-foreground", noteTextClass(isPage))}>
|
|
2602
|
+
{t("settings.profileNameDescription")}
|
|
2603
|
+
</p>
|
|
2604
|
+
<div className="flex items-center justify-between gap-3 pt-1">
|
|
2605
|
+
<div className="min-h-4">
|
|
2606
|
+
{updateProfile.isSuccess && (
|
|
2607
|
+
<p className="text-green-600 dark:text-green-400">
|
|
2608
|
+
{t("settings.profileSaved")}
|
|
2609
|
+
</p>
|
|
2610
|
+
)}
|
|
2611
|
+
{updateProfile.error && (
|
|
2612
|
+
<p className="text-destructive">
|
|
2613
|
+
{t("settings.profileSaveError")}
|
|
2614
|
+
</p>
|
|
2615
|
+
)}
|
|
2616
|
+
</div>
|
|
2617
|
+
<Button
|
|
2618
|
+
type="submit"
|
|
2619
|
+
intent="primary"
|
|
2620
|
+
emphasis="solid"
|
|
2621
|
+
disabled={
|
|
2622
|
+
!email ||
|
|
2623
|
+
profileQuery.isLoading ||
|
|
2624
|
+
updateProfile.isPending ||
|
|
2625
|
+
!name.trim() ||
|
|
2626
|
+
name.trim() === displayName
|
|
2627
|
+
}
|
|
2628
|
+
className={pillButtonClass(isPage, "solid")}
|
|
2629
|
+
>
|
|
2630
|
+
{updateProfile.isPending
|
|
2631
|
+
? t("settings.profileSaving")
|
|
2632
|
+
: t("settings.profileSave")}
|
|
2633
|
+
</Button>
|
|
2634
|
+
</div>
|
|
2635
|
+
</form>
|
|
2574
2636
|
</SettingsSection>
|
|
2575
2637
|
);
|
|
2576
2638
|
}
|
|
@@ -2611,27 +2673,6 @@ function SettingsPanelContent({
|
|
|
2611
2673
|
trackingSource: "settings_panel_builder_card",
|
|
2612
2674
|
});
|
|
2613
2675
|
|
|
2614
|
-
// When opened via a `#secrets:<KEY>` hash, focus that specific secret input
|
|
2615
|
-
// inside the "API Keys & Connections" section.
|
|
2616
|
-
const [focusSecretKey, setFocusSecretKey] = useState<string | undefined>(
|
|
2617
|
-
undefined,
|
|
2618
|
-
);
|
|
2619
|
-
const visibleSections = useMemo(() => new Set(sections), [sections]);
|
|
2620
|
-
const shouldShowSection = useCallback(
|
|
2621
|
-
(section: SettingsSectionId) => visibleSections.has(section),
|
|
2622
|
-
[visibleSections],
|
|
2623
|
-
);
|
|
2624
|
-
|
|
2625
|
-
// Accordion: only one section open at a time (null = all closed)
|
|
2626
|
-
const [openSection, setOpenSection] = useState<string | null>(() => {
|
|
2627
|
-
const initial = initialOpenSection();
|
|
2628
|
-
return visibleSections.has(initial)
|
|
2629
|
-
? initial
|
|
2630
|
-
: firstVisibleSection(sections);
|
|
2631
|
-
});
|
|
2632
|
-
const toggle = (id: string) =>
|
|
2633
|
-
setOpenSection((prev) => (prev === id ? null : id));
|
|
2634
|
-
|
|
2635
2676
|
const scrollSectionIntoView = useCallback((section: SettingsSectionId) => {
|
|
2636
2677
|
window.requestAnimationFrame(() => {
|
|
2637
2678
|
document.getElementById(settingsSectionDomId(section))?.scrollIntoView({
|
|
@@ -2640,47 +2681,23 @@ function SettingsPanelContent({
|
|
|
2640
2681
|
});
|
|
2641
2682
|
});
|
|
2642
2683
|
}, []);
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
useEffect(() => {
|
|
2653
|
-
const section = normalizeSettingsSection(initialSection);
|
|
2654
|
-
if (!section || !shouldShowSection(section)) return;
|
|
2655
|
-
if (section !== "secrets") setFocusSecretKey(undefined);
|
|
2656
|
-
openSettingsSection(section, true);
|
|
2657
|
-
}, [
|
|
2684
|
+
const {
|
|
2685
|
+
focusSecretKey,
|
|
2686
|
+
isSectionVisible: shouldShowSection,
|
|
2687
|
+
openSection,
|
|
2688
|
+
toggleSection: toggle,
|
|
2689
|
+
openSettingsSection: openControllerSection,
|
|
2690
|
+
} = useSettingsPanelController({
|
|
2691
|
+
sections,
|
|
2658
2692
|
initialSection,
|
|
2659
2693
|
sectionRequestKey,
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
if (typeof window === "undefined") return;
|
|
2668
|
-
const handleHash = () => {
|
|
2669
|
-
const hash = window.location.hash?.replace(/^#/, "") ?? "";
|
|
2670
|
-
const section = normalizeSettingsSection(hash);
|
|
2671
|
-
if (!section || !shouldShowSection(section)) return;
|
|
2672
|
-
if (hash.startsWith("secrets:") || hash === "secrets") {
|
|
2673
|
-
const key = hash.slice("secrets:".length);
|
|
2674
|
-
setFocusSecretKey(key || undefined);
|
|
2675
|
-
} else {
|
|
2676
|
-
setFocusSecretKey(undefined);
|
|
2677
|
-
}
|
|
2678
|
-
openSettingsSection(section, true);
|
|
2679
|
-
};
|
|
2680
|
-
handleHash();
|
|
2681
|
-
window.addEventListener("hashchange", handleHash);
|
|
2682
|
-
return () => window.removeEventListener("hashchange", handleHash);
|
|
2683
|
-
}, [openSettingsSection, shouldShowSection]);
|
|
2694
|
+
onScrollToSection: scrollSectionIntoView,
|
|
2695
|
+
});
|
|
2696
|
+
const openSettingsSection = useCallback(
|
|
2697
|
+
(section: SettingsSectionId, scroll = false) =>
|
|
2698
|
+
openControllerSection(section, { scroll }),
|
|
2699
|
+
[openControllerSection],
|
|
2700
|
+
);
|
|
2684
2701
|
|
|
2685
2702
|
const isPage = surface === "page";
|
|
2686
2703
|
|
|
@@ -3066,6 +3083,36 @@ export function SettingsPanel(props: SettingsPanelProps) {
|
|
|
3066
3083
|
return <SettingsPanelContent {...props} />;
|
|
3067
3084
|
}
|
|
3068
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
|
+
|
|
3069
3116
|
export function ConnectionsSettingsContent({
|
|
3070
3117
|
settingsPanelProps,
|
|
3071
3118
|
}: {
|
|
@@ -3074,6 +3121,7 @@ export function ConnectionsSettingsContent({
|
|
|
3074
3121
|
return (
|
|
3075
3122
|
<div className="mx-auto w-full max-w-2xl space-y-4">
|
|
3076
3123
|
<BuilderConnectCard trackingSource="settings_connections" />
|
|
3124
|
+
<McpConnectionsCard />
|
|
3077
3125
|
<SettingsPanelContent
|
|
3078
3126
|
{...settingsPanelProps}
|
|
3079
3127
|
surface="page"
|