@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
|
@@ -6,7 +6,11 @@ import { agentNativePath } from "./api-path.js";
|
|
|
6
6
|
const PROVIDER_ENV_VAR_SET = new Set(PROVIDER_ENV_VARS);
|
|
7
7
|
|
|
8
8
|
/** `unknown` until the first check resolves, so callers don't flash the gate. */
|
|
9
|
-
export type AgentEngineConfiguredState =
|
|
9
|
+
export type AgentEngineConfiguredState =
|
|
10
|
+
| "unknown"
|
|
11
|
+
| "configured"
|
|
12
|
+
| "missing"
|
|
13
|
+
| "unavailable";
|
|
10
14
|
|
|
11
15
|
export interface UseAgentEngineConfiguredResult {
|
|
12
16
|
/** True once we know nothing can run the agent (no key / Builder / BYOK). */
|
|
@@ -30,7 +34,6 @@ export interface UseAgentEngineConfiguredOptions {
|
|
|
30
34
|
}
|
|
31
35
|
|
|
32
36
|
const DEFAULT_STATUS_CHECK_TIMEOUT_MS = 2500;
|
|
33
|
-
const UNKNOWN_STATUS_RETRY_MS = 2000;
|
|
34
37
|
|
|
35
38
|
async function fetchStatusJson(
|
|
36
39
|
path: string,
|
|
@@ -108,11 +111,10 @@ export async function fetchAgentEngineConfiguredState(
|
|
|
108
111
|
fetchStatusJson("/_agent-native/agent-engine/status", timeoutMs),
|
|
109
112
|
]);
|
|
110
113
|
|
|
111
|
-
// All three failed —
|
|
112
|
-
//
|
|
113
|
-
// setup without a fresh authoritative status response.
|
|
114
|
+
// All three failed — surface a retryable unavailable state instead of
|
|
115
|
+
// leaving the composer in an infinite checking loop.
|
|
114
116
|
if (envKeys == null && builderStatus == null && engineStatus == null) {
|
|
115
|
-
return "
|
|
117
|
+
return "unavailable";
|
|
116
118
|
}
|
|
117
119
|
|
|
118
120
|
const envKeysKnown = Array.isArray(envKeys);
|
|
@@ -138,7 +140,7 @@ export async function fetchAgentEngineConfiguredState(
|
|
|
138
140
|
if (engineStatusKnown) return "missing";
|
|
139
141
|
|
|
140
142
|
// Compatibility fallback for older hosts without the canonical route.
|
|
141
|
-
return envKeysKnown && builderStatusKnown ? "missing" : "
|
|
143
|
+
return envKeysKnown && builderStatusKnown ? "missing" : "unavailable";
|
|
142
144
|
}
|
|
143
145
|
|
|
144
146
|
/**
|
|
@@ -146,7 +148,8 @@ export async function fetchAgentEngineConfiguredState(
|
|
|
146
148
|
* composer and app prompt boxes. Checks the env-key / Builder / BYOK status
|
|
147
149
|
* endpoints on mount, re-checks on `agent-engine:configured-changed`, and folds
|
|
148
150
|
* in the adapter's `agent-chat:missing-api-key` signal. Pass `enabled = false`
|
|
149
|
-
* to short-circuit to configured;
|
|
151
|
+
* to short-circuit to configured; unavailable checks can be retried by firing
|
|
152
|
+
* `agent-engine:configured-changed`.
|
|
150
153
|
*/
|
|
151
154
|
export function useAgentEngineConfigured(
|
|
152
155
|
enabled = true,
|
|
@@ -156,25 +159,16 @@ export function useAgentEngineConfigured(
|
|
|
156
159
|
|
|
157
160
|
useEffect(() => {
|
|
158
161
|
let cancelled = false;
|
|
159
|
-
let retryId: ReturnType<typeof setTimeout> | undefined;
|
|
160
162
|
// Monotonic call counter: overlapping checks (mount + a
|
|
161
163
|
// `agent-engine:configured-changed` fired right after a key is saved) can
|
|
162
164
|
// resolve out of order; only the latest call may write state, or a slow
|
|
163
165
|
// stale "missing" response would overwrite the fresh "configured" one.
|
|
164
166
|
let requestSeq = 0;
|
|
165
167
|
const check = async (options?: { missingFallback?: boolean }) => {
|
|
166
|
-
if (retryId !== undefined) {
|
|
167
|
-
clearTimeout(retryId);
|
|
168
|
-
retryId = undefined;
|
|
169
|
-
}
|
|
170
168
|
const seq = ++requestSeq;
|
|
171
169
|
const nextState = await fetchAgentEngineConfiguredState(enabled, options);
|
|
172
170
|
if (cancelled || seq !== requestSeq) return;
|
|
173
|
-
|
|
174
|
-
retryId = setTimeout(() => void check(), UNKNOWN_STATUS_RETRY_MS);
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
setState(nextState);
|
|
171
|
+
setState(nextState === "unknown" ? "unavailable" : nextState);
|
|
178
172
|
};
|
|
179
173
|
const onConfiguredChanged = () => {
|
|
180
174
|
void check();
|
|
@@ -198,7 +192,6 @@ export function useAgentEngineConfigured(
|
|
|
198
192
|
window.addEventListener("agent-chat:missing-api-key", onMissing);
|
|
199
193
|
return () => {
|
|
200
194
|
cancelled = true;
|
|
201
|
-
if (retryId !== undefined) clearTimeout(retryId);
|
|
202
195
|
window.removeEventListener(
|
|
203
196
|
"agent-engine:configured-changed",
|
|
204
197
|
onConfiguredChanged,
|
|
@@ -344,6 +344,24 @@ export function useChatThreads(
|
|
|
344
344
|
const activeThreadIdRef = useRef(activeThreadId);
|
|
345
345
|
activeThreadIdRef.current = activeThreadId;
|
|
346
346
|
|
|
347
|
+
const persistActiveThreadId = useCallback(
|
|
348
|
+
(id: string) => {
|
|
349
|
+
try {
|
|
350
|
+
const threadScope = readKnownThreadScope(id);
|
|
351
|
+
const targetKey =
|
|
352
|
+
threadScope === undefined
|
|
353
|
+
? activeThreadKey
|
|
354
|
+
: activeThreadStorageKey(storageKey, threadScope);
|
|
355
|
+
localStorage.setItem(targetKey, id);
|
|
356
|
+
localStorage.setItem(
|
|
357
|
+
activeThreadSeenStorageKey(targetKey),
|
|
358
|
+
String(Date.now()),
|
|
359
|
+
);
|
|
360
|
+
} catch {}
|
|
361
|
+
},
|
|
362
|
+
[activeThreadKey, readKnownThreadScope, storageKey],
|
|
363
|
+
);
|
|
364
|
+
|
|
347
365
|
// Persist active thread ID — and rehydrate on scope flips. When the user
|
|
348
366
|
// navigates from deck A to deck B, `activeThreadKey` changes; we re-read B's
|
|
349
367
|
// scoped thread only if the currently visible chat is itself scoped to a
|
|
@@ -388,6 +406,9 @@ export function useChatThreads(
|
|
|
388
406
|
setActiveThreadId(nextActiveThreadId);
|
|
389
407
|
return;
|
|
390
408
|
}
|
|
409
|
+
if (!activeThreadId && !restoreActiveThread && !routeControlsActiveThread) {
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
391
412
|
try {
|
|
392
413
|
if (routeControlsActiveThread && !routeThreadId) {
|
|
393
414
|
localStorage.removeItem(activeThreadKey);
|
|
@@ -395,14 +416,7 @@ export function useChatThreads(
|
|
|
395
416
|
return;
|
|
396
417
|
}
|
|
397
418
|
if (activeThreadId) {
|
|
398
|
-
|
|
399
|
-
if (threadScope === undefined) return;
|
|
400
|
-
const targetKey = activeThreadStorageKey(storageKey, threadScope);
|
|
401
|
-
localStorage.setItem(targetKey, activeThreadId);
|
|
402
|
-
localStorage.setItem(
|
|
403
|
-
activeThreadSeenStorageKey(targetKey),
|
|
404
|
-
String(Date.now()),
|
|
405
|
-
);
|
|
419
|
+
persistActiveThreadId(activeThreadId);
|
|
406
420
|
} else {
|
|
407
421
|
localStorage.removeItem(activeThreadKey);
|
|
408
422
|
localStorage.removeItem(activeThreadSeenKey);
|
|
@@ -414,7 +428,9 @@ export function useChatThreads(
|
|
|
414
428
|
activeThreadSeenKey,
|
|
415
429
|
addOptimisticThread,
|
|
416
430
|
autoCreate,
|
|
431
|
+
persistActiveThreadId,
|
|
417
432
|
readKnownThreadScope,
|
|
433
|
+
restoreActiveThread,
|
|
418
434
|
routeControlsActiveThread,
|
|
419
435
|
routeThreadId,
|
|
420
436
|
storageKey,
|
|
@@ -640,10 +656,11 @@ export function useChatThreads(
|
|
|
640
656
|
const id = preferredId || createLocalThreadId();
|
|
641
657
|
newlyCreatedRef.current.add(id);
|
|
642
658
|
addOptimisticThread(id, scopeRef.current ?? null);
|
|
659
|
+
persistActiveThreadId(id);
|
|
643
660
|
setActiveThreadId(id);
|
|
644
661
|
return Promise.resolve(id);
|
|
645
662
|
},
|
|
646
|
-
[addOptimisticThread],
|
|
663
|
+
[addOptimisticThread, persistActiveThreadId],
|
|
647
664
|
);
|
|
648
665
|
|
|
649
666
|
useEffect(() => {
|
|
@@ -890,9 +907,13 @@ export function useChatThreads(
|
|
|
890
907
|
[],
|
|
891
908
|
);
|
|
892
909
|
|
|
893
|
-
const switchThread = useCallback(
|
|
894
|
-
|
|
895
|
-
|
|
910
|
+
const switchThread = useCallback(
|
|
911
|
+
(id: string) => {
|
|
912
|
+
persistActiveThreadId(id);
|
|
913
|
+
setActiveThreadId(id);
|
|
914
|
+
},
|
|
915
|
+
[persistActiveThreadId],
|
|
916
|
+
);
|
|
896
917
|
|
|
897
918
|
const removeThread = useCallback(
|
|
898
919
|
async (id: string) => {
|
package/src/db/client.ts
CHANGED
|
@@ -649,6 +649,8 @@ const CONNECTION_ERROR_CODES = new Set([
|
|
|
649
649
|
"ETIMEDOUT",
|
|
650
650
|
"EPIPE",
|
|
651
651
|
"ENOTFOUND",
|
|
652
|
+
"EMAXCONN",
|
|
653
|
+
"53300",
|
|
652
654
|
"CONNECT_TIMEOUT",
|
|
653
655
|
"CONNECTION_ENDED",
|
|
654
656
|
"CONNECTION_DESTROYED",
|
|
@@ -672,7 +674,7 @@ export function isConnectionError(err: any): boolean {
|
|
|
672
674
|
return true;
|
|
673
675
|
}
|
|
674
676
|
const msg = String(err.message || err.cause?.message || "");
|
|
675
|
-
return /ECONNRESET|ETIMEDOUT|EPIPE|connection.*(closed|ended|terminated)|socket hang up|websocket/i.test(
|
|
677
|
+
return /ECONNRESET|ETIMEDOUT|EPIPE|EMAXCONN|too many connections|max client connections|remaining connection slots|connection.*(closed|ended|terminated)|socket hang up|websocket/i.test(
|
|
676
678
|
msg,
|
|
677
679
|
);
|
|
678
680
|
}
|
|
@@ -699,6 +701,7 @@ export function isTransientDatabaseError(err: unknown): boolean {
|
|
|
699
701
|
const code = String(error?.code ?? error?.cause?.code ?? "");
|
|
700
702
|
if (
|
|
701
703
|
code === "ECHECKOUTTIMEOUT" ||
|
|
704
|
+
code === "EMAXCONN" ||
|
|
702
705
|
code === "53300" ||
|
|
703
706
|
code === "57014" ||
|
|
704
707
|
/^08/.test(code) ||
|
|
@@ -880,10 +883,10 @@ export function isServerlessRuntime(): boolean {
|
|
|
880
883
|
|
|
881
884
|
/**
|
|
882
885
|
* postgres.js pool options tuned per runtime. A serverless instance handles
|
|
883
|
-
* one request at a time, so a
|
|
884
|
-
*
|
|
885
|
-
*
|
|
886
|
-
*
|
|
886
|
+
* one request at a time, so a single connection is enough. Keeping the
|
|
887
|
+
* foreground pool at 1 is important because each instance can also open an
|
|
888
|
+
* app and Better Auth pool; a max of 2 on each pool still exhausted Neon
|
|
889
|
+
* under a burst of warm instances. idle_timeout is shortened on
|
|
887
890
|
* serverless so a thawed-but-idle instance releases its connections quickly.
|
|
888
891
|
* Long-lived Node servers keep the normal pool for throughput.
|
|
889
892
|
*/
|
|
@@ -891,7 +894,7 @@ export function pgPoolOptions(url: string): Record<string, unknown> {
|
|
|
891
894
|
const serverless = isServerlessRuntime();
|
|
892
895
|
return {
|
|
893
896
|
onnotice: () => {},
|
|
894
|
-
max: serverless ?
|
|
897
|
+
max: serverless ? 1 : 10,
|
|
895
898
|
idle_timeout: serverless ? 20 : 240,
|
|
896
899
|
max_lifetime: 60 * 30,
|
|
897
900
|
connect_timeout: 10,
|
|
@@ -903,9 +906,9 @@ export function pgPoolOptions(url: string): Record<string, unknown> {
|
|
|
903
906
|
|
|
904
907
|
/**
|
|
905
908
|
* Connection cap for the @neondatabase/serverless `Pool`. Same instance
|
|
906
|
-
* accumulation risk as postgres.js —
|
|
907
|
-
*
|
|
908
|
-
*
|
|
909
|
+
* accumulation risk as postgres.js — one connection is enough for a
|
|
910
|
+
* foreground serverless invocation and keeps the aggregate app/framework/auth
|
|
911
|
+
* budget bounded.
|
|
909
912
|
*/
|
|
910
913
|
export function neonPoolMax(): number {
|
|
911
914
|
if (!isServerlessRuntime()) return 10;
|
|
@@ -921,7 +924,7 @@ export function neonPoolMax(): number {
|
|
|
921
924
|
// burst; keep the foreground serverless pool tiny to avoid "Max client
|
|
922
925
|
// connections reached" across many warm instances.
|
|
923
926
|
if (isBackgroundFunctionPoolContext()) return 8;
|
|
924
|
-
return
|
|
927
|
+
return 1;
|
|
925
928
|
}
|
|
926
929
|
|
|
927
930
|
/**
|
|
@@ -839,7 +839,11 @@ export function createExtensionActionEntries(): Record<string, ActionEntry> {
|
|
|
839
839
|
|
|
840
840
|
await ensureExtensionsTables();
|
|
841
841
|
const access = await resolveAccess("extension", extensionId);
|
|
842
|
-
if (
|
|
842
|
+
if (
|
|
843
|
+
!access ||
|
|
844
|
+
(access.resource as ExtensionRow | undefined)?.archivedAt ||
|
|
845
|
+
access.role === "viewer"
|
|
846
|
+
)
|
|
843
847
|
return `Error: editor access required for extension ${extensionId}.`;
|
|
844
848
|
|
|
845
849
|
const userEmail = getRequestUserEmail()?.toLowerCase() ?? "";
|
|
@@ -942,7 +946,11 @@ export function createExtensionActionEntries(): Record<string, ActionEntry> {
|
|
|
942
946
|
|
|
943
947
|
await ensureExtensionsTables();
|
|
944
948
|
const access = await resolveAccess("extension", extensionId);
|
|
945
|
-
if (
|
|
949
|
+
if (
|
|
950
|
+
!access ||
|
|
951
|
+
(access.resource as ExtensionRow | undefined)?.archivedAt
|
|
952
|
+
)
|
|
953
|
+
return `Error: no access to extension ${extensionId}.`;
|
|
946
954
|
|
|
947
955
|
const userEmail = getRequestUserEmail()?.toLowerCase() ?? "";
|
|
948
956
|
const scope = args?.scope ?? "user";
|
|
@@ -1012,14 +1020,14 @@ export function createExtensionActionEntries(): Record<string, ActionEntry> {
|
|
|
1012
1020
|
"delete-extension": {
|
|
1013
1021
|
tool: {
|
|
1014
1022
|
description:
|
|
1015
|
-
"
|
|
1023
|
+
"Archive an extension everywhere it is shared. Archiving is a soft delete: the extension and its history, data, sharing, and slot configuration are retained, but it disappears from normal lists. Requires owner/admin access. If the user only wants a shared extension removed from their own sidebar/list, use hide-extension instead.",
|
|
1016
1024
|
parameters: {
|
|
1017
1025
|
type: "object",
|
|
1018
1026
|
properties: {
|
|
1019
1027
|
id: {
|
|
1020
1028
|
type: "string",
|
|
1021
1029
|
description:
|
|
1022
|
-
"Extension id to
|
|
1030
|
+
"Extension id to archive. Use list-extensions first if you only know the display name.",
|
|
1023
1031
|
},
|
|
1024
1032
|
},
|
|
1025
1033
|
required: ["id"],
|
|
@@ -1036,7 +1044,7 @@ export function createExtensionActionEntries(): Record<string, ActionEntry> {
|
|
|
1036
1044
|
try {
|
|
1037
1045
|
const ok = await deleteExtension(id);
|
|
1038
1046
|
if (!ok) return `Error: extension not found: ${id}`;
|
|
1039
|
-
return { ok: true,
|
|
1047
|
+
return { ok: true, archived: summarizeDeletedExtension(extension) };
|
|
1040
1048
|
} catch (err: any) {
|
|
1041
1049
|
return {
|
|
1042
1050
|
ok: false,
|
package/src/extensions/local.ts
CHANGED
package/src/extensions/routes.ts
CHANGED
|
@@ -227,8 +227,8 @@ async function dispatch(
|
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
const access = await resolveAccess("extension", parts[0]);
|
|
230
|
-
const extension = access?.resource;
|
|
231
|
-
if (!extension) {
|
|
230
|
+
const extension = access?.resource as ExtensionRow | undefined;
|
|
231
|
+
if (!access || !extension || extension.archivedAt) {
|
|
232
232
|
setResponseStatus(event, 404);
|
|
233
233
|
return { error: "Extension not found" };
|
|
234
234
|
}
|
|
@@ -317,11 +317,12 @@ async function dispatch(
|
|
|
317
317
|
}
|
|
318
318
|
|
|
319
319
|
const access = await resolveAccess("extension", parts[0]);
|
|
320
|
-
|
|
320
|
+
const extension = access?.resource as ExtensionRow | undefined;
|
|
321
|
+
if (!access || !extension || extension.archivedAt) {
|
|
321
322
|
setResponseStatus(event, 404);
|
|
322
323
|
return { error: "Extension not found" };
|
|
323
324
|
}
|
|
324
|
-
return extensionResponse(
|
|
325
|
+
return extensionResponse(extension, access.role);
|
|
325
326
|
}
|
|
326
327
|
|
|
327
328
|
// POST /:id/hide — remove from the current user's Extensions list/sidebar
|
|
@@ -433,7 +434,7 @@ async function dispatch(
|
|
|
433
434
|
setResponseStatus(event, 404);
|
|
434
435
|
return { error: "Extension not found" };
|
|
435
436
|
}
|
|
436
|
-
return { ok: true };
|
|
437
|
+
return { ok: true, archived: true };
|
|
437
438
|
}
|
|
438
439
|
|
|
439
440
|
setResponseStatus(event, 404);
|
|
@@ -662,6 +663,10 @@ async function requireExtensionDataAccess(
|
|
|
662
663
|
minRole: ShareRole,
|
|
663
664
|
): Promise<{ ok: true } | { ok: false; response: unknown }> {
|
|
664
665
|
const access = await resolveAccess("extension", extensionId);
|
|
666
|
+
if (access?.resource && (access.resource as ExtensionRow).archivedAt) {
|
|
667
|
+
setResponseStatus(event, 404);
|
|
668
|
+
return { ok: false, response: { error: "Extension not found" } };
|
|
669
|
+
}
|
|
665
670
|
if (access) {
|
|
666
671
|
if (ROLE_RANK[access.role] < ROLE_RANK[minRole]) {
|
|
667
672
|
setResponseStatus(event, 403);
|
package/src/extensions/schema.ts
CHANGED
|
@@ -27,6 +27,7 @@ export const extensions = table("tools", {
|
|
|
27
27
|
icon: text("icon"),
|
|
28
28
|
createdAt: text("created_at").notNull().default(now()),
|
|
29
29
|
updatedAt: text("updated_at").notNull().default(now()),
|
|
30
|
+
archivedAt: text("archived_at"),
|
|
30
31
|
hiddenAt: text("hidden_at"),
|
|
31
32
|
hiddenBy: text("hidden_by"),
|
|
32
33
|
...ownableColumns(),
|
|
@@ -66,6 +67,7 @@ export const EXTENSIONS_CREATE_SQL = `CREATE TABLE IF NOT EXISTS tools (
|
|
|
66
67
|
icon TEXT,
|
|
67
68
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
68
69
|
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
70
|
+
archived_at TEXT,
|
|
69
71
|
hidden_at TEXT,
|
|
70
72
|
hidden_by TEXT,
|
|
71
73
|
owner_email TEXT NOT NULL DEFAULT 'local@localhost',
|
|
@@ -81,6 +83,7 @@ export const EXTENSIONS_CREATE_SQL_PG = `CREATE TABLE IF NOT EXISTS tools (
|
|
|
81
83
|
icon TEXT,
|
|
82
84
|
created_at TEXT NOT NULL DEFAULT now(),
|
|
83
85
|
updated_at TEXT NOT NULL DEFAULT now(),
|
|
86
|
+
archived_at TEXT,
|
|
84
87
|
hidden_at TEXT,
|
|
85
88
|
hidden_by TEXT,
|
|
86
89
|
owner_email TEXT NOT NULL DEFAULT 'local@localhost',
|
|
@@ -162,6 +165,8 @@ export const EXTENSION_DATA_DROP_OLD_INDEX_SQL_PG = `DROP INDEX IF EXISTS tool_d
|
|
|
162
165
|
export const EXTENSIONS_OWNER_INDEX_SQL = `CREATE INDEX IF NOT EXISTS tools_owner_idx ON tools (owner_email)`;
|
|
163
166
|
export const EXTENSIONS_ORG_INDEX_SQL = `CREATE INDEX IF NOT EXISTS tools_org_idx ON tools (org_id)`;
|
|
164
167
|
export const EXTENSIONS_UPDATED_INDEX_SQL = `CREATE INDEX IF NOT EXISTS tools_updated_at_idx ON tools (updated_at)`;
|
|
168
|
+
export const EXTENSIONS_ARCHIVED_AT_COLUMN_SQL = `ALTER TABLE tools ADD COLUMN IF NOT EXISTS archived_at TEXT`;
|
|
169
|
+
export const EXTENSIONS_ARCHIVED_AT_INDEX_SQL = `CREATE INDEX IF NOT EXISTS tools_archived_at_idx ON tools (archived_at)`;
|
|
165
170
|
|
|
166
171
|
// Global (admin) hide: when set, the extension row is hidden from EVERYONE's
|
|
167
172
|
// list, distinct from the per-user `tool_hidden_extensions` table. Additive
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
|
|
3
|
-
import { and, eq, inArray, sql } from "drizzle-orm";
|
|
3
|
+
import { and, eq, inArray, isNull, sql } from "drizzle-orm";
|
|
4
4
|
|
|
5
5
|
import { getDbExec, isPostgres } from "../../db/client.js";
|
|
6
6
|
import { createGetDb } from "../../db/create-get-db.js";
|
|
@@ -203,7 +203,12 @@ export async function listExtensionsForSlot(slotId: string): Promise<
|
|
|
203
203
|
icon: extensions.icon,
|
|
204
204
|
})
|
|
205
205
|
.from(extensions)
|
|
206
|
-
.where(
|
|
206
|
+
.where(
|
|
207
|
+
and(
|
|
208
|
+
accessFilter(extensions, extensionShares),
|
|
209
|
+
isNull(extensions.archivedAt),
|
|
210
|
+
),
|
|
211
|
+
);
|
|
207
212
|
const localRows = (await listLocalExtensions())
|
|
208
213
|
.filter((extension) => extension.source.slots.includes(slotId))
|
|
209
214
|
.map((extension) => ({
|
|
@@ -397,7 +402,12 @@ export async function listSlotInstallsForUser(slotId: string): Promise<
|
|
|
397
402
|
updatedAt: extensions.updatedAt,
|
|
398
403
|
})
|
|
399
404
|
.from(extensions)
|
|
400
|
-
.where(
|
|
405
|
+
.where(
|
|
406
|
+
and(
|
|
407
|
+
accessFilter(extensions, extensionShares),
|
|
408
|
+
isNull(extensions.archivedAt),
|
|
409
|
+
),
|
|
410
|
+
);
|
|
401
411
|
const byId = new Map(accessible.map((t: any) => [t.id, t]));
|
|
402
412
|
|
|
403
413
|
const sqlInstalls = (installs as ExtensionSlotInstallRow[])
|
|
@@ -419,7 +429,7 @@ export async function listSlotInstallsForUser(slotId: string): Promise<
|
|
|
419
429
|
return [...localInstalls, ...sqlInstalls];
|
|
420
430
|
}
|
|
421
431
|
|
|
422
|
-
/** Delete every slot/install row referencing
|
|
432
|
+
/** Delete every slot/install row referencing an extension for maintenance. */
|
|
423
433
|
export async function cascadeDeleteExtensionSlots(
|
|
424
434
|
extensionId: string,
|
|
425
435
|
): Promise<void> {
|
package/src/extensions/store.ts
CHANGED
|
@@ -52,6 +52,8 @@ import {
|
|
|
52
52
|
EXTENSIONS_OWNER_INDEX_SQL,
|
|
53
53
|
EXTENSIONS_ORG_INDEX_SQL,
|
|
54
54
|
EXTENSIONS_UPDATED_INDEX_SQL,
|
|
55
|
+
EXTENSIONS_ARCHIVED_AT_COLUMN_SQL,
|
|
56
|
+
EXTENSIONS_ARCHIVED_AT_INDEX_SQL,
|
|
55
57
|
EXTENSIONS_HIDDEN_AT_COLUMN_SQL,
|
|
56
58
|
EXTENSIONS_HIDDEN_BY_COLUMN_SQL,
|
|
57
59
|
EXTENSIONS_HIDDEN_AT_INDEX_SQL,
|
|
@@ -103,6 +105,11 @@ export async function ensureExtensionsTables(): Promise<void> {
|
|
|
103
105
|
"tools_updated_at_idx",
|
|
104
106
|
EXTENSIONS_UPDATED_INDEX_SQL,
|
|
105
107
|
);
|
|
108
|
+
await ensureExtensionsArchivedColumn(client, pg);
|
|
109
|
+
await ensureIndexExists(
|
|
110
|
+
"tools_archived_at_idx",
|
|
111
|
+
EXTENSIONS_ARCHIVED_AT_INDEX_SQL,
|
|
112
|
+
);
|
|
106
113
|
await ensureExtensionsGlobalHideColumns(client, pg); // ADD COLUMN — guarded inside
|
|
107
114
|
await ensureIndexExists(
|
|
108
115
|
"tools_hidden_at_idx",
|
|
@@ -176,6 +183,10 @@ export async function ensureExtensionsTables(): Promise<void> {
|
|
|
176
183
|
await retryOnDdlRace(() => client.execute(EXTENSIONS_OWNER_INDEX_SQL));
|
|
177
184
|
await retryOnDdlRace(() => client.execute(EXTENSIONS_ORG_INDEX_SQL));
|
|
178
185
|
await retryOnDdlRace(() => client.execute(EXTENSIONS_UPDATED_INDEX_SQL));
|
|
186
|
+
await ensureExtensionsArchivedColumn(client, pg);
|
|
187
|
+
await retryOnDdlRace(() =>
|
|
188
|
+
client.execute(EXTENSIONS_ARCHIVED_AT_INDEX_SQL),
|
|
189
|
+
);
|
|
179
190
|
await ensureExtensionsGlobalHideColumns(client, pg);
|
|
180
191
|
await retryOnDdlRace(() =>
|
|
181
192
|
client.execute(EXTENSIONS_HIDDEN_AT_INDEX_SQL),
|
|
@@ -346,6 +357,31 @@ async function ensureExtensionsGlobalHideColumns(
|
|
|
346
357
|
await addCol(EXTENSIONS_HIDDEN_BY_COLUMN_SQL, "hidden_by", "TEXT");
|
|
347
358
|
}
|
|
348
359
|
|
|
360
|
+
async function ensureExtensionsArchivedColumn(
|
|
361
|
+
client: ReturnType<typeof getDbExec>,
|
|
362
|
+
pg: boolean,
|
|
363
|
+
): Promise<void> {
|
|
364
|
+
if (pg) {
|
|
365
|
+
await ensureColumnExists(
|
|
366
|
+
"tools",
|
|
367
|
+
"archived_at",
|
|
368
|
+
EXTENSIONS_ARCHIVED_AT_COLUMN_SQL,
|
|
369
|
+
);
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
await client
|
|
373
|
+
.execute("ALTER TABLE tools ADD COLUMN archived_at TEXT")
|
|
374
|
+
.catch((err: any) => {
|
|
375
|
+
if (
|
|
376
|
+
!String(err?.message ?? err)
|
|
377
|
+
.toLowerCase()
|
|
378
|
+
.includes("duplicate")
|
|
379
|
+
) {
|
|
380
|
+
throw err;
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
|
|
349
385
|
export function registerExtensionsShareable() {
|
|
350
386
|
registerShareableResource({
|
|
351
387
|
type: "extension",
|
|
@@ -373,6 +409,7 @@ export interface ExtensionRow {
|
|
|
373
409
|
icon: string | null;
|
|
374
410
|
createdAt: string;
|
|
375
411
|
updatedAt: string;
|
|
412
|
+
archivedAt: string | null;
|
|
376
413
|
hiddenAt: string | null;
|
|
377
414
|
hiddenBy: string | null;
|
|
378
415
|
ownerEmail: string;
|
|
@@ -881,9 +918,10 @@ export async function listExtensions(
|
|
|
881
918
|
// on repeated `.where()` calls, so combine the access filter and the
|
|
882
919
|
// global-hidden filter into one condition.
|
|
883
920
|
const base = accessFilter(extensions, extensionShares);
|
|
921
|
+
const visible = and(base, isNull(extensions.archivedAt));
|
|
884
922
|
const where = options.includeGloballyHidden
|
|
885
|
-
?
|
|
886
|
-
: and(
|
|
923
|
+
? visible
|
|
924
|
+
: and(visible, isNull(extensions.hiddenAt));
|
|
887
925
|
const rows = (await db
|
|
888
926
|
.select()
|
|
889
927
|
.from(extensions)
|
|
@@ -899,7 +937,8 @@ export async function listExtensions(
|
|
|
899
937
|
export async function getExtension(id: string): Promise<ExtensionRow | null> {
|
|
900
938
|
await ensureExtensionsTables();
|
|
901
939
|
const access = await resolveAccess("extension", id);
|
|
902
|
-
|
|
940
|
+
const resource = access?.resource as ExtensionRow | undefined;
|
|
941
|
+
return resource?.archivedAt ? null : (resource ?? null);
|
|
903
942
|
}
|
|
904
943
|
|
|
905
944
|
export interface ListExtensionHistoryOptions {
|
|
@@ -983,7 +1022,7 @@ export async function restoreExtensionHistoryVersion(
|
|
|
983
1022
|
.from(extensions)
|
|
984
1023
|
.where(eq(extensions.id, id));
|
|
985
1024
|
const existing = existingRows[0] as ExtensionRow | undefined;
|
|
986
|
-
if (!existing) return null;
|
|
1025
|
+
if (!existing || existing.archivedAt) return null;
|
|
987
1026
|
|
|
988
1027
|
await ensureExtensionHistoryBaseline(existing);
|
|
989
1028
|
const target = await getPersistedHistoryEntry(id, version, true);
|
|
@@ -1045,6 +1084,7 @@ export async function createExtension(
|
|
|
1045
1084
|
icon: data.icon ?? null,
|
|
1046
1085
|
createdAt: now,
|
|
1047
1086
|
updatedAt: now,
|
|
1087
|
+
archivedAt: null,
|
|
1048
1088
|
hiddenAt: null,
|
|
1049
1089
|
hiddenBy: null,
|
|
1050
1090
|
ownerEmail: userEmail,
|
|
@@ -1098,6 +1138,7 @@ export async function findRecentDuplicateExtension(data: {
|
|
|
1098
1138
|
eq(extensions.description, description),
|
|
1099
1139
|
icon === null ? isNull(extensions.icon) : eq(extensions.icon, icon),
|
|
1100
1140
|
gte(extensions.createdAt, fiveMinutesAgo),
|
|
1141
|
+
isNull(extensions.archivedAt),
|
|
1101
1142
|
isNull(extensions.hiddenAt),
|
|
1102
1143
|
),
|
|
1103
1144
|
)
|
|
@@ -1146,7 +1187,7 @@ export async function updateExtension(
|
|
|
1146
1187
|
.from(extensions)
|
|
1147
1188
|
.where(eq(extensions.id, id));
|
|
1148
1189
|
const existing = existingRows[0] as ExtensionRow | undefined;
|
|
1149
|
-
if (!existing) return null;
|
|
1190
|
+
if (!existing || existing.archivedAt) return null;
|
|
1150
1191
|
await ensureExtensionHistoryBaseline(existing);
|
|
1151
1192
|
await db.update(extensions).set(updates).where(eq(extensions.id, id));
|
|
1152
1193
|
const rows = await db.select().from(extensions).where(eq(extensions.id, id));
|
|
@@ -1200,7 +1241,9 @@ export async function updateExtensionContent(
|
|
|
1200
1241
|
.select()
|
|
1201
1242
|
.from(extensions)
|
|
1202
1243
|
.where(eq(extensions.id, id));
|
|
1203
|
-
if (!existingRows[0])
|
|
1244
|
+
if (!existingRows[0] || (existingRows[0] as ExtensionRow).archivedAt) {
|
|
1245
|
+
return null;
|
|
1246
|
+
}
|
|
1204
1247
|
const existing = existingRows[0] as ExtensionRow;
|
|
1205
1248
|
const existingContent = existing.content;
|
|
1206
1249
|
await ensureExtensionHistoryBaseline(existing);
|
|
@@ -1234,20 +1277,13 @@ export async function deleteExtension(id: string): Promise<boolean> {
|
|
|
1234
1277
|
const rows = await db.select().from(extensions).where(eq(extensions.id, id));
|
|
1235
1278
|
const row = rows[0] as ExtensionRow | undefined;
|
|
1236
1279
|
if (!row) return false;
|
|
1280
|
+
if (row.archivedAt) return true;
|
|
1237
1281
|
const targets = await extensionChangeTargetsForRow(row);
|
|
1238
|
-
|
|
1239
|
-
await db
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
});
|
|
1244
|
-
await getDbExec().execute({
|
|
1245
|
-
sql: `DELETE FROM tool_history WHERE tool_id = ?`,
|
|
1246
|
-
args: [id],
|
|
1247
|
-
});
|
|
1248
|
-
const { cascadeDeleteExtensionSlots } = await import("./slots/store.js");
|
|
1249
|
-
await cascadeDeleteExtensionSlots(id);
|
|
1250
|
-
await db.delete(extensions).where(eq(extensions.id, id));
|
|
1282
|
+
const archivedAt = new Date().toISOString();
|
|
1283
|
+
await db
|
|
1284
|
+
.update(extensions)
|
|
1285
|
+
.set({ archivedAt, updatedAt: archivedAt })
|
|
1286
|
+
.where(eq(extensions.id, id));
|
|
1251
1287
|
await notifyExtensionChanged(targets);
|
|
1252
1288
|
return true;
|
|
1253
1289
|
}
|
package/src/extensions/theme.ts
CHANGED
|
@@ -92,7 +92,7 @@ export function getThemeVars(_isDark?: boolean): string {
|
|
|
92
92
|
--muted-foreground: 240 5% 64.9%;
|
|
93
93
|
--accent: 240 3.7% 15.9%;
|
|
94
94
|
--accent-foreground: 0 0% 98%;
|
|
95
|
-
--destructive: 0
|
|
95
|
+
--destructive: 0 84% 60%;
|
|
96
96
|
--destructive-foreground: 0 0% 98%;
|
|
97
97
|
--border: 240 3.7% 15.9%;
|
|
98
98
|
--input: 240 3.7% 15.9%;
|
|
@@ -69,6 +69,15 @@ export async function getActiveFileUploadProviderForRequest(): Promise<FileUploa
|
|
|
69
69
|
if (builderFileUploadProvider.isConfigured()) {
|
|
70
70
|
return builderFileUploadProvider;
|
|
71
71
|
}
|
|
72
|
+
try {
|
|
73
|
+
const { resolveHasBuilderPrivateKey } =
|
|
74
|
+
await import("../server/credential-provider.js");
|
|
75
|
+
if (await resolveHasBuilderPrivateKey()) {
|
|
76
|
+
return builderFileUploadProvider;
|
|
77
|
+
}
|
|
78
|
+
} catch {
|
|
79
|
+
// Treat failed scoped credential lookups as unavailable.
|
|
80
|
+
}
|
|
72
81
|
return null;
|
|
73
82
|
}
|
|
74
83
|
|
package/src/index.browser.ts
CHANGED
|
@@ -100,6 +100,11 @@ export {
|
|
|
100
100
|
type ActionMcpAppResourceConfig,
|
|
101
101
|
type ActionMcpAppResourceMeta,
|
|
102
102
|
} from "./action.js";
|
|
103
|
+
export {
|
|
104
|
+
normalizeUserProfileName,
|
|
105
|
+
USER_PROFILE_SETTING_KEY,
|
|
106
|
+
type UserProfile,
|
|
107
|
+
} from "./user-profile/index.js";
|
|
103
108
|
export {
|
|
104
109
|
ACTION_CHAT_UI_DATA_CHART_RENDERER,
|
|
105
110
|
ACTION_CHAT_UI_DATA_INSIGHTS_RENDERER,
|