@agent-native/core 0.117.2 → 0.118.1
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 +51 -0
- package/corpus/core/docs/content/custom-design-system.mdx +445 -0
- package/corpus/core/docs/content/toolkit-ui.mdx +16 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/client.ts +32 -10
- package/corpus/core/src/a2a/types.ts +1 -0
- package/corpus/core/src/agent/types.ts +1 -1
- package/corpus/core/src/cli/index.ts +18 -10
- package/corpus/core/src/cli/multi-frontier-runs.ts +5 -3
- package/corpus/core/src/cli/templates-meta.ts +0 -12
- package/corpus/core/src/cli/workspace-dev.ts +1 -1
- package/corpus/core/src/client/AgentPanel.tsx +99 -108
- package/corpus/core/src/client/AssistantChat.tsx +30 -13
- package/corpus/core/src/client/CommandMenu.tsx +68 -178
- package/corpus/core/src/client/RunStuckBanner.tsx +39 -47
- 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/action-chat-ui-surface.tsx +32 -0
- package/corpus/core/src/client/chat/message-components.tsx +169 -18
- package/corpus/core/src/client/chat/tool-call-display.tsx +50 -14
- package/corpus/core/src/client/chat/widgets/InlineExtensionWidget.tsx +13 -40
- package/corpus/core/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
- package/corpus/core/src/client/components/ui/message-scroller.tsx +15 -1
- package/corpus/core/src/client/conversation/AgentConversation.tsx +12 -1
- package/corpus/core/src/client/error-capture.ts +2 -6
- package/corpus/core/src/client/i18n.tsx +22 -0
- package/corpus/core/src/client/index.ts +17 -0
- package/corpus/core/src/client/org/TeamPage.tsx +257 -153
- package/corpus/core/src/client/progress/RunsTray.tsx +89 -88
- package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +25 -16
- package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +34 -13
- package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
- package/corpus/core/src/client/resources/mcp-integration-catalog.ts +20 -17
- package/corpus/core/src/client/resources/mcp-integration-logos.ts +2 -2
- package/corpus/core/src/client/route-chunk-recovery.ts +5 -3
- package/corpus/core/src/client/session-replay.ts +3 -3
- 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 +217 -252
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +23 -2
- package/corpus/core/src/client/settings/VoiceTranscriptionSection.tsx +7 -18
- package/corpus/core/src/client/settings/index.ts +7 -0
- package/corpus/core/src/client/settings/useSettingsPanelController.ts +155 -0
- package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +116 -51
- package/corpus/core/src/client/setup-connections/index.ts +10 -0
- package/corpus/core/src/client/setup-connections/useBuilderConnectCardController.ts +82 -0
- package/corpus/core/src/client/sharing/ShareButton.tsx +64 -586
- package/corpus/core/src/client/sharing/ShareDialog.tsx +299 -633
- package/corpus/core/src/client/sharing/index.ts +42 -0
- package/corpus/core/src/client/sharing/share-controller-helpers.ts +318 -0
- package/corpus/core/src/client/sharing/useShareButtonController.ts +600 -0
- package/corpus/core/src/client/sharing/useShareDialogController.ts +559 -0
- package/corpus/core/src/client/sse-event-processor.ts +23 -0
- package/corpus/core/src/client/tool-display.ts +71 -0
- package/corpus/core/src/client/transcription/use-live-transcription.ts +64 -45
- 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/deploy/build.ts +2 -1
- package/corpus/core/src/guards/db-tool-scoping.ts +1 -1
- package/corpus/core/src/integrations/adapters/slack.ts +84 -5
- package/corpus/core/src/integrations/index.ts +5 -1
- package/corpus/core/src/localization/default-messages.ts +6 -1
- package/corpus/core/src/mcp-client/oauth-routes.ts +61 -14
- package/corpus/core/src/scripts/call-agent.ts +5 -1
- package/corpus/core/src/server/realtime-voice.ts +5 -2
- package/corpus/core/src/styles/agent-native.css +0 -24
- package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/core/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/core/src/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
- package/corpus/core/src/templates/default/app/design-system.ts +3 -0
- package/corpus/core/src/templates/default/app/root.tsx +5 -2
- package/corpus/core/src/templates/default/package.json +1 -0
- package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
- package/corpus/core/src/terminal/cli-registry.ts +1 -1
- package/corpus/core/src/vite/client.ts +205 -1
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/analytics/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/analytics/app/design-system.ts +3 -0
- package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +13 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +10 -0
- package/corpus/templates/analytics/changelog/2026-07-22-show-a-useful-error-when-saving-a-dashboard-view-fails.md +6 -0
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/assets/app/components/ui/alert.tsx +1 -0
- package/corpus/templates/assets/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/assets/app/design-system.ts +3 -0
- package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +26 -30
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/brain/app/components/ui/dialog.tsx +1 -0
- package/corpus/templates/brain/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/brain/app/design-system.ts +3 -0
- package/corpus/templates/brain/app/routes/sources.tsx +189 -122
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/calendar/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/calendar/app/design-system.ts +3 -0
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/chat/app/design-system.ts +3 -0
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/clips/AGENTS.md +8 -6
- package/corpus/templates/clips/actions/request-transcript.ts +90 -420
- package/corpus/templates/clips/actions/save-browser-transcript.ts +11 -28
- package/corpus/templates/clips/app/components/capture-install-options.tsx +5 -3
- package/corpus/templates/clips/app/components/player/transcript-panel.tsx +3 -136
- 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/lib/capture-install-options.ts +15 -4
- package/corpus/templates/clips/app/routes/_app.library._index.tsx +1 -1
- package/corpus/templates/clips/app/routes/download.tsx +3 -2
- package/corpus/templates/clips/changelog/2026-07-22-fixed-an-intermittent-hydration-error-on-the-download-page.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-fixed-transcript-generation-when-native-speech-capture-retur.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-permissions-and-rewind-controls-are-now-grouped-with-clearer.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-the-desktop-popover-opens-centered-under-the-menu-bar-icon-o.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-transcript-generation-now-retries-with-backup-speech-recogni.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +86 -82
- package/corpus/templates/clips/desktop/src/styles.css +13 -0
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +10 -1
- package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +37 -2
- package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -0
- package/corpus/templates/clips/server/lib/public-agent-context.ts +2 -2
- package/corpus/templates/clips/server/register-secrets.ts +7 -6
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +41 -59
- package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +16 -84
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +13 -7
- 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/editor/extensions/ImageBlock.tsx +2 -2
- package/corpus/templates/content/app/components/ui/checkbox.tsx +1 -0
- package/corpus/templates/content/app/components/ui/collapsible.tsx +1 -0
- package/corpus/templates/content/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/content/app/design-system.ts +3 -0
- package/corpus/templates/content/app/global.css +29 -3
- package/corpus/templates/content/app/i18n-data.ts +10 -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/design/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +8 -8
- package/corpus/templates/design/app/components/ui/command.tsx +1 -0
- package/corpus/templates/design/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/design/app/design-system.ts +3 -0
- package/corpus/templates/design/server/lib/fig-file-decoder.ts +1 -0
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/dispatch/app/components/ui/button.tsx +1 -0
- package/corpus/templates/dispatch/app/components/ui/toolkit-provider.tsx +17 -0
- package/corpus/templates/dispatch/app/design-system.ts +3 -0
- package/corpus/templates/dispatch/app/root.tsx +10 -7
- package/corpus/templates/dispatch/package.json +1 -0
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/forms/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/forms/app/design-system.ts +3 -0
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/macros/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/macros/app/design-system.ts +3 -0
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +134 -93
- package/corpus/templates/mail/app/components/email/email-iframe-document.ts +8 -2
- package/corpus/templates/mail/app/components/ui/textarea.tsx +1 -21
- package/corpus/templates/mail/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/mail/app/design-system.ts +3 -0
- package/corpus/templates/mail/changelog/2026-07-22-email-messages-no-longer-flash-with-an-unstyled-page-while-l.md +6 -0
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/plan/app/components/plan/PlanContentRenderer.tsx +1 -1
- package/corpus/templates/plan/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/plan/app/design-system.ts +3 -0
- package/corpus/templates/plan/app/entry.client.tsx +3 -0
- package/corpus/templates/plan/changelog/2026-07-22-recover-stale-pages-after-a-deployment-refresh-automatically.md +6 -0
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/slides/app/components/ui/toolkit-provider.tsx +6 -1
- package/corpus/templates/slides/app/design-system.ts +3 -0
- package/corpus/templates/slides/app/hooks/use-agent-generating.ts +10 -3
- package/corpus/templates/slides/app/pages/Index.tsx +1 -0
- package/corpus/templates/slides/changelog/2026-07-22-new-deck-prompts-now-open-in-their-own-visible-chat-thread.md +6 -0
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +22 -2
- package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/corpus/templates/tasks/app/components/ui/toolkit-provider.tsx +17 -0
- package/corpus/templates/tasks/app/design-system.ts +3 -0
- package/corpus/templates/tasks/app/root.tsx +5 -2
- package/corpus/toolkit/CHANGELOG.md +23 -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 +32 -7
- package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +119 -31
- package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +124 -9
- 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 +862 -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/editor/SharedRichEditor.tsx +13 -2
- package/corpus/toolkit/src/editor/SlashCommandMenu.tsx +20 -0
- package/corpus/toolkit/src/editor/index.ts +2 -0
- package/corpus/toolkit/src/provider.tsx +98 -5
- package/corpus/toolkit/src/styles.css +52 -23
- 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/client.d.ts +3 -1
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +17 -12
- package/dist/a2a/client.js.map +1 -1
- 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/index.js +18 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/multi-frontier-runs.js +3 -3
- package/dist/cli/multi-frontier-runs.js.map +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +0 -12
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/cli/workspace-dev.js +1 -1
- package/dist/cli/workspace-dev.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +18 -15
- 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/RunStuckBanner.d.ts +3 -5
- package/dist/client/RunStuckBanner.d.ts.map +1 -1
- package/dist/client/RunStuckBanner.js +17 -18
- package/dist/client/RunStuckBanner.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/action-chat-ui-surface.d.ts +8 -0
- package/dist/client/chat/action-chat-ui-surface.d.ts.map +1 -0
- package/dist/client/chat/action-chat-ui-surface.js +10 -0
- package/dist/client/chat/action-chat-ui-surface.js.map +1 -0
- package/dist/client/chat/message-components.d.ts +12 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +102 -14
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +3 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +33 -14
- 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/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
- package/dist/client/chat/widgets/builtin-tool-renderers.js +5 -3
- package/dist/client/chat/widgets/builtin-tool-renderers.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/conversation/AgentConversation.d.ts.map +1 -1
- package/dist/client/conversation/AgentConversation.js +3 -2
- package/dist/client/conversation/AgentConversation.js.map +1 -1
- package/dist/client/error-capture.d.ts.map +1 -1
- package/dist/client/error-capture.js +2 -2
- package/dist/client/error-capture.js.map +1 -1
- package/dist/client/i18n.d.ts.map +1 -1
- package/dist/client/i18n.js +9 -0
- package/dist/client/i18n.js.map +1 -1
- package/dist/client/index.d.ts +2 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +41 -33
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/progress/RunsTray.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.js +9 -10
- package/dist/client/progress/RunsTray.js.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.d.ts +1 -0
- package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.js +14 -12
- 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/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +3 -1
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.d.ts +2 -0
- package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.js +17 -17
- package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
- package/dist/client/resources/mcp-integration-logos.js +2 -2
- package/dist/client/resources/mcp-integration-logos.js.map +1 -1
- package/dist/client/route-chunk-recovery.d.ts.map +1 -1
- package/dist/client/route-chunk-recovery.js +5 -3
- package/dist/client/route-chunk-recovery.js.map +1 -1
- package/dist/client/session-replay.js +3 -3
- package/dist/client/session-replay.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 +53 -118
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +16 -1
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +2 -5
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/settings/index.d.ts +1 -0
- package/dist/client/settings/index.d.ts.map +1 -1
- package/dist/client/settings/index.js +1 -0
- package/dist/client/settings/index.js.map +1 -1
- package/dist/client/settings/useSettingsPanelController.d.ts +22 -0
- package/dist/client/settings/useSettingsPanelController.d.ts.map +1 -0
- package/dist/client/settings/useSettingsPanelController.js +103 -0
- package/dist/client/settings/useSettingsPanelController.js.map +1 -0
- package/dist/client/setup-connections/BuilderConnectCard.d.ts +14 -6
- package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -1
- package/dist/client/setup-connections/BuilderConnectCard.js +24 -16
- package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -1
- package/dist/client/setup-connections/index.d.ts +2 -1
- package/dist/client/setup-connections/index.d.ts.map +1 -1
- package/dist/client/setup-connections/index.js +2 -1
- package/dist/client/setup-connections/index.js.map +1 -1
- package/dist/client/setup-connections/useBuilderConnectCardController.d.ts +34 -0
- package/dist/client/setup-connections/useBuilderConnectCardController.d.ts.map +1 -0
- package/dist/client/setup-connections/useBuilderConnectCardController.js +39 -0
- package/dist/client/setup-connections/useBuilderConnectCardController.js.map +1 -0
- package/dist/client/sharing/ShareButton.d.ts +2 -1
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +17 -463
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareDialog.d.ts +6 -6
- package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/client/sharing/ShareDialog.js +69 -283
- package/dist/client/sharing/ShareDialog.js.map +1 -1
- package/dist/client/sharing/index.d.ts +3 -0
- package/dist/client/sharing/index.d.ts.map +1 -1
- package/dist/client/sharing/index.js +3 -0
- package/dist/client/sharing/index.js.map +1 -1
- package/dist/client/sharing/share-controller-helpers.d.ts +70 -0
- package/dist/client/sharing/share-controller-helpers.d.ts.map +1 -0
- package/dist/client/sharing/share-controller-helpers.js +224 -0
- package/dist/client/sharing/share-controller-helpers.js.map +1 -0
- package/dist/client/sharing/useShareButtonController.d.ts +91 -0
- package/dist/client/sharing/useShareButtonController.d.ts.map +1 -0
- package/dist/client/sharing/useShareButtonController.js +397 -0
- package/dist/client/sharing/useShareButtonController.js.map +1 -0
- package/dist/client/sharing/useShareDialogController.d.ts +109 -0
- package/dist/client/sharing/useShareDialogController.d.ts.map +1 -0
- package/dist/client/sharing/useShareDialogController.js +348 -0
- package/dist/client/sharing/useShareDialogController.js.map +1 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +21 -0
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/tool-display.d.ts +16 -0
- package/dist/client/tool-display.d.ts.map +1 -1
- package/dist/client/tool-display.js +52 -0
- package/dist/client/tool-display.js.map +1 -1
- package/dist/client/transcription/use-live-transcription.d.ts +3 -3
- package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
- package/dist/client/transcription/use-live-transcription.js +22 -11
- package/dist/client/transcription/use-live-transcription.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/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +1 -1
- package/dist/deploy/build.js.map +1 -1
- package/dist/guards/db-tool-scoping.js +1 -1
- package/dist/guards/db-tool-scoping.js.map +1 -1
- package/dist/integrations/adapters/slack.d.ts +1 -0
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +61 -5
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/index.d.ts +1 -1
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +1 -1
- package/dist/integrations/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +4 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +5 -1
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp-client/oauth-routes.d.ts +5 -0
- package/dist/mcp-client/oauth-routes.d.ts.map +1 -1
- package/dist/mcp-client/oauth-routes.js +53 -14
- package/dist/mcp-client/oauth-routes.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- 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/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/realtime-voice.d.ts.map +1 -1
- package/dist/server/realtime-voice.js +2 -2
- package/dist/server/realtime-voice.js.map +1 -1
- package/dist/styles/agent-native.css +0 -24
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
- package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/dist/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
- package/dist/templates/chat/app/design-system.ts +3 -0
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
- package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/dist/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
- package/dist/templates/default/app/design-system.ts +3 -0
- package/dist/templates/default/app/root.tsx +5 -2
- package/dist/templates/default/package.json +1 -0
- package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
- package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
- package/dist/terminal/cli-registry.js +1 -1
- package/dist/terminal/cli-registry.js.map +1 -1
- package/dist/vite/client.d.ts +11 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +144 -2
- package/dist/vite/client.js.map +1 -1
- package/docs/content/custom-design-system.mdx +445 -0
- package/docs/content/toolkit-ui.mdx +16 -0
- package/package.json +2 -2
- package/src/a2a/client.ts +32 -10
- package/src/a2a/types.ts +1 -0
- package/src/agent/types.ts +1 -1
- package/src/cli/index.ts +18 -10
- package/src/cli/multi-frontier-runs.ts +5 -3
- package/src/cli/templates-meta.ts +0 -12
- package/src/cli/workspace-dev.ts +1 -1
- package/src/client/AgentPanel.tsx +99 -108
- package/src/client/AssistantChat.tsx +30 -13
- package/src/client/CommandMenu.tsx +68 -178
- package/src/client/RunStuckBanner.tsx +39 -47
- package/src/client/agent-chat-adapter.ts +3 -1
- package/src/client/app-providers.tsx +1 -1
- package/src/client/chat/action-chat-ui-surface.tsx +32 -0
- package/src/client/chat/message-components.tsx +169 -18
- package/src/client/chat/tool-call-display.tsx +50 -14
- package/src/client/chat/widgets/InlineExtensionWidget.tsx +13 -40
- package/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
- package/src/client/components/ui/message-scroller.tsx +15 -1
- package/src/client/conversation/AgentConversation.tsx +12 -1
- package/src/client/error-capture.ts +2 -6
- package/src/client/i18n.tsx +22 -0
- package/src/client/index.ts +17 -0
- package/src/client/org/TeamPage.tsx +257 -153
- package/src/client/progress/RunsTray.tsx +89 -88
- package/src/client/resources/McpConnectionSuggestion.tsx +25 -16
- package/src/client/resources/McpIntegrationDialog.tsx +34 -13
- package/src/client/resources/ResourcesPanel.tsx +5 -1
- package/src/client/resources/mcp-integration-catalog.ts +20 -17
- package/src/client/resources/mcp-integration-logos.ts +2 -2
- package/src/client/route-chunk-recovery.ts +5 -3
- package/src/client/session-replay.ts +3 -3
- package/src/client/settings/DemoModeSection.tsx +6 -18
- package/src/client/settings/SecretsSection.tsx +97 -52
- package/src/client/settings/SettingsPanel.tsx +217 -252
- package/src/client/settings/SettingsTabsPage.tsx +23 -2
- package/src/client/settings/VoiceTranscriptionSection.tsx +7 -18
- package/src/client/settings/index.ts +7 -0
- package/src/client/settings/useSettingsPanelController.ts +155 -0
- package/src/client/setup-connections/BuilderConnectCard.tsx +116 -51
- package/src/client/setup-connections/index.ts +10 -0
- package/src/client/setup-connections/useBuilderConnectCardController.ts +82 -0
- package/src/client/sharing/ShareButton.tsx +64 -586
- package/src/client/sharing/ShareDialog.tsx +299 -633
- package/src/client/sharing/index.ts +42 -0
- package/src/client/sharing/share-controller-helpers.ts +318 -0
- package/src/client/sharing/useShareButtonController.ts +600 -0
- package/src/client/sharing/useShareDialogController.ts +559 -0
- package/src/client/sse-event-processor.ts +23 -0
- package/src/client/tool-display.ts +71 -0
- package/src/client/transcription/use-live-transcription.ts +64 -45
- package/src/client/use-agent-engine-configured.ts +12 -19
- package/src/client/use-chat-threads.ts +33 -12
- package/src/deploy/build.ts +2 -1
- package/src/guards/db-tool-scoping.ts +1 -1
- package/src/integrations/adapters/slack.ts +84 -5
- package/src/integrations/index.ts +5 -1
- package/src/localization/default-messages.ts +6 -1
- package/src/mcp-client/oauth-routes.ts +61 -14
- package/src/scripts/call-agent.ts +5 -1
- package/src/server/realtime-voice.ts +5 -2
- package/src/styles/agent-native.css +0 -24
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
- package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/src/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
- package/src/templates/chat/app/design-system.ts +3 -0
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
- package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/src/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
- package/src/templates/default/app/design-system.ts +3 -0
- package/src/templates/default/app/root.tsx +5 -2
- package/src/templates/default/package.json +1 -0
- package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
- package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
- package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
- package/src/terminal/cli-registry.ts +1 -1
- package/src/vite/client.ts +205 -1
- 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/crm/.agents/skills/agent-native-docs/SKILL.md +0 -115
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +0 -142
- package/corpus/templates/crm/.agents/skills/crm/SKILL.md +0 -128
- package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +0 -145
- package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +0 -169
- package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +0 -100
- package/corpus/templates/crm/.env.example +0 -5
- package/corpus/templates/crm/AGENTS.md +0 -120
- package/corpus/templates/crm/CHANGELOG.md +0 -1
- package/corpus/templates/crm/DEVELOPING.md +0 -66
- package/corpus/templates/crm/README.md +0 -106
- package/corpus/templates/crm/_gitignore +0 -12
- package/corpus/templates/crm/actions/_crm-action-utils.ts +0 -87
- package/corpus/templates/crm/actions/_crm-dashboard.ts +0 -69
- package/corpus/templates/crm/actions/_crm-data-program-actions.ts +0 -15
- package/corpus/templates/crm/actions/_crm-signal-utils.ts +0 -79
- package/corpus/templates/crm/actions/apply-crm-proposals.ts +0 -203
- package/corpus/templates/crm/actions/attach-call-evidence.ts +0 -170
- package/corpus/templates/crm/actions/configure-crm-connection.ts +0 -126
- package/corpus/templates/crm/actions/configure-native-crm.ts +0 -44
- package/corpus/templates/crm/actions/create-crm-record.ts +0 -148
- package/corpus/templates/crm/actions/create-crm-signal-tracker.ts +0 -58
- package/corpus/templates/crm/actions/delete-staged-dataset.ts +0 -14
- package/corpus/templates/crm/actions/get-crm-automation-recipe.ts +0 -36
- package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +0 -35
- package/corpus/templates/crm/actions/get-crm-dashboard.ts +0 -14
- package/corpus/templates/crm/actions/get-crm-overview.ts +0 -13
- package/corpus/templates/crm/actions/get-crm-pipeline-data.ts +0 -61
- package/corpus/templates/crm/actions/get-crm-record.ts +0 -75
- package/corpus/templates/crm/actions/install-crm-pipeline-dashboard.ts +0 -81
- package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +0 -15
- package/corpus/templates/crm/actions/list-crm-dashboards.ts +0 -15
- package/corpus/templates/crm/actions/list-crm-proposals.ts +0 -31
- package/corpus/templates/crm/actions/list-crm-records.ts +0 -79
- package/corpus/templates/crm/actions/list-crm-saved-views.ts +0 -15
- package/corpus/templates/crm/actions/list-crm-signal-hits.ts +0 -43
- package/corpus/templates/crm/actions/list-crm-signal-trackers.ts +0 -32
- package/corpus/templates/crm/actions/list-crm-tasks.ts +0 -22
- package/corpus/templates/crm/actions/list-staged-datasets.ts +0 -14
- package/corpus/templates/crm/actions/list-workspace-connections.ts +0 -47
- package/corpus/templates/crm/actions/manage-crm-signal-tracker.ts +0 -87
- package/corpus/templates/crm/actions/manage-crm-task.ts +0 -132
- package/corpus/templates/crm/actions/navigate.ts +0 -63
- package/corpus/templates/crm/actions/provider-api-catalog.ts +0 -22
- package/corpus/templates/crm/actions/provider-api-docs.ts +0 -54
- package/corpus/templates/crm/actions/provider-api-request.ts +0 -92
- package/corpus/templates/crm/actions/query-staged-dataset.ts +0 -44
- package/corpus/templates/crm/actions/record-crm-call-insight.ts +0 -160
- package/corpus/templates/crm/actions/record-crm-smart-signal.ts +0 -150
- package/corpus/templates/crm/actions/restore-crm-dashboard-revision.ts +0 -23
- package/corpus/templates/crm/actions/review-crm-signal.ts +0 -31
- package/corpus/templates/crm/actions/run-crm-saved-view-program.ts +0 -103
- package/corpus/templates/crm/actions/run-crm-signal-trackers.ts +0 -275
- package/corpus/templates/crm/actions/run.ts +0 -7
- package/corpus/templates/crm/actions/save-crm-dashboard.ts +0 -51
- package/corpus/templates/crm/actions/save-crm-saved-view.ts +0 -119
- package/corpus/templates/crm/actions/sync-crm.ts +0 -146
- package/corpus/templates/crm/actions/update-crm-record.ts +0 -510
- package/corpus/templates/crm/actions/view-screen.ts +0 -218
- package/corpus/templates/crm/agent-native.app-skill.json +0 -58
- package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +0 -158
- package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +0 -83
- package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +0 -225
- package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +0 -413
- package/corpus/templates/crm/app/components/crm/RecordActions.tsx +0 -510
- package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +0 -134
- package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +0 -367
- package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +0 -92
- package/corpus/templates/crm/app/components/crm/Surface.tsx +0 -96
- package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +0 -180
- package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +0 -112
- package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +0 -84
- package/corpus/templates/crm/app/entry.client.tsx +0 -16
- package/corpus/templates/crm/app/entry.server.tsx +0 -10
- package/corpus/templates/crm/app/global.css +0 -167
- package/corpus/templates/crm/app/hooks/use-navigation-state.ts +0 -60
- package/corpus/templates/crm/app/i18n/en-US.ts +0 -89
- package/corpus/templates/crm/app/i18n/index.ts +0 -34
- package/corpus/templates/crm/app/lib/dashboard.ts +0 -13
- package/corpus/templates/crm/app/lib/navigation.ts +0 -54
- package/corpus/templates/crm/app/lib/tab-id.ts +0 -1
- package/corpus/templates/crm/app/lib/types.ts +0 -172
- package/corpus/templates/crm/app/lib/utils.ts +0 -1
- package/corpus/templates/crm/app/root.tsx +0 -88
- package/corpus/templates/crm/app/routes/_index.tsx +0 -26
- package/corpus/templates/crm/app/routes/accounts.tsx +0 -41
- package/corpus/templates/crm/app/routes/agent.tsx +0 -5
- package/corpus/templates/crm/app/routes/ask.tsx +0 -53
- package/corpus/templates/crm/app/routes/dashboard.tsx +0 -118
- package/corpus/templates/crm/app/routes/opportunities.tsx +0 -41
- package/corpus/templates/crm/app/routes/people.tsx +0 -41
- package/corpus/templates/crm/app/routes/proposals.tsx +0 -266
- package/corpus/templates/crm/app/routes/records.$recordId.tsx +0 -35
- package/corpus/templates/crm/app/routes/settings.tsx +0 -63
- package/corpus/templates/crm/app/routes/setup.tsx +0 -308
- package/corpus/templates/crm/app/routes/tasks.tsx +0 -252
- package/corpus/templates/crm/app/routes/views.tsx +0 -333
- package/corpus/templates/crm/app/routes.ts +0 -17
- package/corpus/templates/crm/app/vite-env.d.ts +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-agent-native-crm.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-clips-call-evidence-review-recipe.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-find-and-review-evidence-grounded-call-signals-w.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-manage-keyword-and-smart-call-signal-trackers-fr.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-delegated-local-crm-automation.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-native-sql.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboard.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboards-now-install-correctly-from-the-crm-actio.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-21-salesforce-connection.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-22-crm-field-validation-now-explains-which-fields-cannot-be-edi.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-22-fixed-hubspot-contact-syncs-missing-records-updated-after-th.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-22-fixed-pipeline-dashboard-panels-so-their-opportunity-data-lo.md +0 -6
- package/corpus/templates/crm/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +0 -6
- package/corpus/templates/crm/components.json +0 -20
- package/corpus/templates/crm/docs/architecture/crm-contract.md +0 -180
- package/corpus/templates/crm/learnings.defaults.md +0 -5
- package/corpus/templates/crm/package.json +0 -59
- package/corpus/templates/crm/public/favicon.svg +0 -1
- package/corpus/templates/crm/public/icon-180.svg +0 -1
- package/corpus/templates/crm/public/manifest.json +0 -11
- package/corpus/templates/crm/react-router.config.ts +0 -7
- package/corpus/templates/crm/server/crm/adapter.ts +0 -32
- package/corpus/templates/crm/server/crm/crm-field-firewall.ts +0 -64
- package/corpus/templates/crm/server/crm/crm-mirror.ts +0 -711
- package/corpus/templates/crm/server/crm/hubspot-adapter.ts +0 -1146
- package/corpus/templates/crm/server/crm/native-adapter.ts +0 -1715
- package/corpus/templates/crm/server/crm/read-through.ts +0 -207
- package/corpus/templates/crm/server/crm/salesforce-adapter.ts +0 -1255
- package/corpus/templates/crm/server/db/crm-store.ts +0 -1170
- package/corpus/templates/crm/server/db/index.ts +0 -169
- package/corpus/templates/crm/server/db/schema.ts +0 -441
- package/corpus/templates/crm/server/lib/intelligence/default-detectors.ts +0 -65
- package/corpus/templates/crm/server/lib/intelligence/evidence.ts +0 -105
- package/corpus/templates/crm/server/lib/intelligence/keyword-detector.ts +0 -100
- package/corpus/templates/crm/server/lib/intelligence/smart-detector.ts +0 -144
- package/corpus/templates/crm/server/lib/intelligence/summary.ts +0 -141
- package/corpus/templates/crm/server/lib/provider-api.ts +0 -64
- package/corpus/templates/crm/server/middleware/auth.ts +0 -4
- package/corpus/templates/crm/server/plugins/agent-chat.ts +0 -68
- package/corpus/templates/crm/server/plugins/auth.ts +0 -14
- package/corpus/templates/crm/server/plugins/core-routes.ts +0 -17
- package/corpus/templates/crm/server/plugins/db.ts +0 -454
- package/corpus/templates/crm/server/routes/[...page].get.ts +0 -5
- package/corpus/templates/crm/shared/crm-automation-recipes.ts +0 -132
- package/corpus/templates/crm/shared/crm-contract.ts +0 -254
- package/corpus/templates/crm/shared/crm-sales-config.ts +0 -63
- package/corpus/templates/crm/ssr-entry.ts +0 -11
- package/corpus/templates/crm/tsconfig.json +0 -24
- package/corpus/templates/crm/vite.config.ts +0 -15
- package/corpus/templates/crm/vitest.config.ts +0 -5
- 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,9 +6,9 @@
|
|
|
6
6
|
* stop when the user hits stop. The accumulated transcript is available
|
|
7
7
|
* immediately — no round-trip to Whisper needed.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* Builder can transcribe the original recording afterward if native capture
|
|
10
|
+
* produces no text, but this gives users something useful from second zero
|
|
11
|
+
* without a cloud transcription request.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
@@ -58,12 +58,21 @@ export function useLiveTranscription(
|
|
|
58
58
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
59
|
const recognitionRef = useRef<any>(null);
|
|
60
60
|
const transcriptRef = useRef("");
|
|
61
|
+
const interimRef = useRef("");
|
|
61
62
|
const stoppedManuallyRef = useRef(false);
|
|
62
63
|
const stopWaiterRef = useRef<((text: string) => void) | null>(null);
|
|
63
64
|
const restartTimerRef = useRef<number | null>(null);
|
|
64
65
|
const networkErrorCountRef = useRef(0);
|
|
65
66
|
const restartDelayRef = useRef(0);
|
|
66
67
|
|
|
68
|
+
const currentTranscript = useCallback(
|
|
69
|
+
() =>
|
|
70
|
+
[transcriptRef.current.trim(), interimRef.current.trim()]
|
|
71
|
+
.filter(Boolean)
|
|
72
|
+
.join(" "),
|
|
73
|
+
[],
|
|
74
|
+
);
|
|
75
|
+
|
|
67
76
|
const supported = !!getSpeechRecognitionCtor();
|
|
68
77
|
|
|
69
78
|
const start = useCallback(() => {
|
|
@@ -89,6 +98,7 @@ export function useLiveTranscription(
|
|
|
89
98
|
recognition.lang = lang;
|
|
90
99
|
recognitionRef.current = recognition;
|
|
91
100
|
transcriptRef.current = "";
|
|
101
|
+
interimRef.current = "";
|
|
92
102
|
stoppedManuallyRef.current = false;
|
|
93
103
|
networkErrorCountRef.current = 0;
|
|
94
104
|
restartDelayRef.current = 0;
|
|
@@ -107,6 +117,7 @@ export function useLiveTranscription(
|
|
|
107
117
|
interim += text;
|
|
108
118
|
}
|
|
109
119
|
}
|
|
120
|
+
interimRef.current = interim;
|
|
110
121
|
setInterimText(interim);
|
|
111
122
|
if (event.results.length > 0) {
|
|
112
123
|
networkErrorCountRef.current = 0;
|
|
@@ -167,7 +178,7 @@ export function useLiveTranscription(
|
|
|
167
178
|
}
|
|
168
179
|
setIsActive(false);
|
|
169
180
|
if (stopWaiterRef.current) {
|
|
170
|
-
stopWaiterRef.current(
|
|
181
|
+
stopWaiterRef.current(currentTranscript());
|
|
171
182
|
}
|
|
172
183
|
};
|
|
173
184
|
|
|
@@ -177,14 +188,16 @@ export function useLiveTranscription(
|
|
|
177
188
|
} catch {
|
|
178
189
|
/* browser may block without user gesture */
|
|
179
190
|
}
|
|
180
|
-
}, [lang]);
|
|
191
|
+
}, [currentTranscript, lang]);
|
|
181
192
|
|
|
182
193
|
const stop = useCallback((): string => {
|
|
194
|
+
const text = currentTranscript();
|
|
183
195
|
stoppedManuallyRef.current = true;
|
|
184
196
|
if (restartTimerRef.current !== null) {
|
|
185
197
|
window.clearTimeout(restartTimerRef.current);
|
|
186
198
|
restartTimerRef.current = null;
|
|
187
199
|
}
|
|
200
|
+
interimRef.current = "";
|
|
188
201
|
setInterimText("");
|
|
189
202
|
if (recognitionRef.current) {
|
|
190
203
|
try {
|
|
@@ -195,51 +208,57 @@ export function useLiveTranscription(
|
|
|
195
208
|
recognitionRef.current = null;
|
|
196
209
|
}
|
|
197
210
|
setIsActive(false);
|
|
198
|
-
return
|
|
199
|
-
}, []);
|
|
211
|
+
return text;
|
|
212
|
+
}, [currentTranscript]);
|
|
200
213
|
|
|
201
|
-
const stopAndWait = useCallback(
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
const recognition = recognitionRef.current;
|
|
210
|
-
if (!recognition) {
|
|
211
|
-
setIsActive(false);
|
|
212
|
-
return Promise.resolve(transcriptRef.current);
|
|
213
|
-
}
|
|
214
|
+
const stopAndWait = useCallback(
|
|
215
|
+
(timeoutMs = 1200): Promise<string> => {
|
|
216
|
+
stoppedManuallyRef.current = true;
|
|
217
|
+
if (restartTimerRef.current !== null) {
|
|
218
|
+
window.clearTimeout(restartTimerRef.current);
|
|
219
|
+
restartTimerRef.current = null;
|
|
220
|
+
}
|
|
221
|
+
setInterimText("");
|
|
214
222
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
settled = true;
|
|
220
|
-
window.clearTimeout(timeout);
|
|
221
|
-
if (stopWaiterRef.current === finish) {
|
|
222
|
-
stopWaiterRef.current = null;
|
|
223
|
-
}
|
|
224
|
-
if (recognitionRef.current === recognition) {
|
|
225
|
-
recognitionRef.current = null;
|
|
226
|
-
}
|
|
223
|
+
const recognition = recognitionRef.current;
|
|
224
|
+
if (!recognition) {
|
|
225
|
+
const text = currentTranscript();
|
|
226
|
+
interimRef.current = "";
|
|
227
227
|
setIsActive(false);
|
|
228
|
-
resolve(text);
|
|
229
|
-
}
|
|
228
|
+
return Promise.resolve(text);
|
|
229
|
+
}
|
|
230
230
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
231
|
+
return new Promise((resolve) => {
|
|
232
|
+
let settled = false;
|
|
233
|
+
const finish = (text: string) => {
|
|
234
|
+
if (settled) return;
|
|
235
|
+
settled = true;
|
|
236
|
+
window.clearTimeout(timeout);
|
|
237
|
+
if (stopWaiterRef.current === finish) {
|
|
238
|
+
stopWaiterRef.current = null;
|
|
239
|
+
}
|
|
240
|
+
if (recognitionRef.current === recognition) {
|
|
241
|
+
recognitionRef.current = null;
|
|
242
|
+
}
|
|
243
|
+
interimRef.current = "";
|
|
244
|
+
setIsActive(false);
|
|
245
|
+
resolve(text);
|
|
246
|
+
};
|
|
234
247
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
248
|
+
const timeout = window.setTimeout(() => {
|
|
249
|
+
finish(currentTranscript());
|
|
250
|
+
}, timeoutMs);
|
|
251
|
+
|
|
252
|
+
stopWaiterRef.current = finish;
|
|
253
|
+
try {
|
|
254
|
+
recognition.stop();
|
|
255
|
+
} catch {
|
|
256
|
+
finish(currentTranscript());
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
},
|
|
260
|
+
[currentTranscript],
|
|
261
|
+
);
|
|
243
262
|
|
|
244
263
|
const pause = useCallback(() => {
|
|
245
264
|
if (!recognitionRef.current) return;
|
|
@@ -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) => {
|
|
@@ -1805,7 +1805,8 @@ async function buildCloudflarePages() {
|
|
|
1805
1805
|
// fails: context-xray token counts fall back to char/4 estimates and the
|
|
1806
1806
|
// OG image route falls back to SVG.
|
|
1807
1807
|
const heavyClientExternals = CLOUDFLARE_WORKER_ESBUILD_EXTERNALS.filter(
|
|
1808
|
-
(p) =>
|
|
1808
|
+
(p) =>
|
|
1809
|
+
!Object.prototype.hasOwnProperty.call(CLOUDFLARE_WORKER_STUB_MODULES, p),
|
|
1809
1810
|
).map((p) => `--external:${p}`);
|
|
1810
1811
|
|
|
1811
1812
|
execFileSync(
|
|
@@ -103,7 +103,7 @@ export function scanDbToolScoping(options: DbToolScopingOptions): GuardResult {
|
|
|
103
103
|
const tables = extractTableCalls(contents);
|
|
104
104
|
for (const table of tables) {
|
|
105
105
|
if (hasRawDbScope(table.body)) continue;
|
|
106
|
-
if (Object.
|
|
106
|
+
if (Object.prototype.hasOwnProperty.call(denylist, table.sqlName)) {
|
|
107
107
|
seenAllowed.add(table.sqlName);
|
|
108
108
|
continue;
|
|
109
109
|
}
|
|
@@ -45,6 +45,17 @@ const SLACK_IDENTITY_CACHE_TTL_MS = 10 * 60 * 1_000;
|
|
|
45
45
|
// API blip must not fail-close a sender's identity (and DMs) for 10 minutes.
|
|
46
46
|
const SLACK_IDENTITY_NEGATIVE_CACHE_TTL_MS = 30 * 1_000;
|
|
47
47
|
const SLACK_IDENTITY_CACHE_MAX_ENTRIES = 1_000;
|
|
48
|
+
const SLACK_TOKEN_IDENTITY_CACHE_TTL_MS = 10 * 60 * 1_000;
|
|
49
|
+
const SLACK_TOKEN_IDENTITY_NEGATIVE_CACHE_TTL_MS = 30 * 1_000;
|
|
50
|
+
|
|
51
|
+
type SlackTokenIdentity = {
|
|
52
|
+
teamId: string | null;
|
|
53
|
+
appId: string | null;
|
|
54
|
+
valid: boolean;
|
|
55
|
+
expiresAt: number;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const slackTokenIdentityCache = new Map<string, SlackTokenIdentity>();
|
|
48
59
|
|
|
49
60
|
interface SlackUserIdentity {
|
|
50
61
|
email: string | null;
|
|
@@ -116,8 +127,7 @@ export function slackAdapter(
|
|
|
116
127
|
): PlatformAdapter {
|
|
117
128
|
const resolveBotToken = async (incoming: IncomingMessage) =>
|
|
118
129
|
(await options.resolveBotToken?.(incoming)) ??
|
|
119
|
-
(await
|
|
120
|
-
(await resolveSecret("SLACK_BOT_TOKEN")) ??
|
|
130
|
+
(await resolveSlackBotTokenForIncoming(incoming)) ??
|
|
121
131
|
undefined;
|
|
122
132
|
|
|
123
133
|
return {
|
|
@@ -713,6 +723,19 @@ function parseAllowlistEnv(name: string): Set<string> | null {
|
|
|
713
723
|
return new Set(values);
|
|
714
724
|
}
|
|
715
725
|
|
|
726
|
+
export async function resolveSlackBotTokenForIncoming(
|
|
727
|
+
incoming: IncomingMessage,
|
|
728
|
+
): Promise<string | undefined> {
|
|
729
|
+
const managedToken = await resolveManagedSlackBotToken(incoming);
|
|
730
|
+
if (managedToken) return managedToken;
|
|
731
|
+
|
|
732
|
+
const legacyToken = await resolveSecret("SLACK_BOT_TOKEN");
|
|
733
|
+
if (!legacyToken) return undefined;
|
|
734
|
+
return (await isSlackTokenForIncoming(legacyToken, incoming))
|
|
735
|
+
? legacyToken
|
|
736
|
+
: undefined;
|
|
737
|
+
}
|
|
738
|
+
|
|
716
739
|
async function resolveManagedSlackBotToken(
|
|
717
740
|
incoming: IncomingMessage,
|
|
718
741
|
): Promise<string | undefined> {
|
|
@@ -736,13 +759,13 @@ async function resolveManagedSlackBotToken(
|
|
|
736
759
|
slackInstallationKey({ teamId, enterpriseId, apiAppId }),
|
|
737
760
|
)
|
|
738
761
|
: null;
|
|
739
|
-
if (!installation && teamId) {
|
|
762
|
+
if (!installation && !apiAppId && teamId) {
|
|
740
763
|
installation = await getActiveIntegrationInstallationForTenant(
|
|
741
764
|
"slack",
|
|
742
765
|
teamId,
|
|
743
766
|
);
|
|
744
767
|
}
|
|
745
|
-
if (!installation && enterpriseId) {
|
|
768
|
+
if (!installation && !apiAppId && enterpriseId) {
|
|
746
769
|
installation = await getActiveIntegrationInstallationForTenant(
|
|
747
770
|
"slack",
|
|
748
771
|
enterpriseId,
|
|
@@ -757,6 +780,62 @@ async function resolveManagedSlackBotToken(
|
|
|
757
780
|
}
|
|
758
781
|
}
|
|
759
782
|
|
|
783
|
+
async function isSlackTokenForIncoming(
|
|
784
|
+
token: string,
|
|
785
|
+
incoming: IncomingMessage,
|
|
786
|
+
): Promise<boolean> {
|
|
787
|
+
const teamId = slackIdentityValue(incoming.platformContext.teamId);
|
|
788
|
+
const apiAppId = slackIdentityValue(incoming.platformContext.apiAppId);
|
|
789
|
+
if (!teamId && !apiAppId) return true;
|
|
790
|
+
|
|
791
|
+
const cached = slackTokenIdentityCache.get(token);
|
|
792
|
+
if (cached && cached.expiresAt > Date.now()) {
|
|
793
|
+
return (
|
|
794
|
+
cached.valid &&
|
|
795
|
+
(!teamId || cached.teamId === teamId) &&
|
|
796
|
+
(!apiAppId || cached.appId === apiAppId)
|
|
797
|
+
);
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
const auth = await slackJson(token, "auth.test", {});
|
|
801
|
+
const authTeamId = slackIdentityValue(auth?.team_id);
|
|
802
|
+
const botId = slackIdentityValue(auth?.bot_id);
|
|
803
|
+
let appId: string | null = null;
|
|
804
|
+
let valid = !!auth;
|
|
805
|
+
|
|
806
|
+
if (valid && apiAppId) {
|
|
807
|
+
const bot = botId
|
|
808
|
+
? await slackJson(token, "bots.info", { bot: botId })
|
|
809
|
+
: null;
|
|
810
|
+
appId = slackIdentityValue(bot?.bot?.app_id);
|
|
811
|
+
valid = !!appId;
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
const identity: SlackTokenIdentity = {
|
|
815
|
+
teamId: authTeamId,
|
|
816
|
+
appId,
|
|
817
|
+
valid,
|
|
818
|
+
expiresAt:
|
|
819
|
+
Date.now() +
|
|
820
|
+
(valid
|
|
821
|
+
? SLACK_TOKEN_IDENTITY_CACHE_TTL_MS
|
|
822
|
+
: SLACK_TOKEN_IDENTITY_NEGATIVE_CACHE_TTL_MS),
|
|
823
|
+
};
|
|
824
|
+
slackTokenIdentityCache.set(token, identity);
|
|
825
|
+
|
|
826
|
+
return (
|
|
827
|
+
valid &&
|
|
828
|
+
(!teamId || identity.teamId === teamId) &&
|
|
829
|
+
(!apiAppId || identity.appId === apiAppId)
|
|
830
|
+
);
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
function slackIdentityValue(value: unknown): string | null {
|
|
834
|
+
if (typeof value !== "string") return null;
|
|
835
|
+
const normalized = value.trim();
|
|
836
|
+
return normalized && normalized !== "unknown" ? normalized : null;
|
|
837
|
+
}
|
|
838
|
+
|
|
760
839
|
let _missingAllowlistWarned = false;
|
|
761
840
|
|
|
762
841
|
/**
|
|
@@ -1079,7 +1158,7 @@ async function resolveSlackThreadPermalink(
|
|
|
1079
1158
|
if (typeof channelId !== "string" || typeof threadTs !== "string") {
|
|
1080
1159
|
return undefined;
|
|
1081
1160
|
}
|
|
1082
|
-
const token = resolvedToken
|
|
1161
|
+
const token = resolvedToken;
|
|
1083
1162
|
if (!token) return undefined;
|
|
1084
1163
|
|
|
1085
1164
|
try {
|
|
@@ -114,7 +114,11 @@ export type {
|
|
|
114
114
|
} from "./remote-types.js";
|
|
115
115
|
|
|
116
116
|
// Adapters
|
|
117
|
-
export {
|
|
117
|
+
export {
|
|
118
|
+
resolveSlackBotTokenForIncoming,
|
|
119
|
+
slackAdapter,
|
|
120
|
+
type SlackAdapterOptions,
|
|
121
|
+
} from "./adapters/slack.js";
|
|
118
122
|
export { telegramAdapter } from "./adapters/telegram.js";
|
|
119
123
|
export { whatsappAdapter } from "./adapters/whatsapp.js";
|
|
120
124
|
export { discordAdapter } from "./adapters/discord.js";
|
|
@@ -32,6 +32,10 @@ const messages = {
|
|
|
32
32
|
openTeamSettings: "Open team settings",
|
|
33
33
|
openResourceSettings: "Open resource settings",
|
|
34
34
|
backHome: "Back to home",
|
|
35
|
+
mcpConnectionsTitle: "MCP connections",
|
|
36
|
+
mcpConnectionsDescription:
|
|
37
|
+
"Connect remote MCP servers so the agent can use their tools.",
|
|
38
|
+
openMcpConnections: "Manage MCP connections",
|
|
35
39
|
profileTitle: "Account",
|
|
36
40
|
profileDescription: "Your name, profile photo, and signed-in identity.",
|
|
37
41
|
profileLoading: "Loading...",
|
|
@@ -332,6 +336,7 @@ const messages = {
|
|
|
332
336
|
addOwnKeys: "Add your own keys",
|
|
333
337
|
configureProviderKeys: "Configure Anthropic, OpenAI, or another provider",
|
|
334
338
|
checkingAiConnection: "Checking AI connection...",
|
|
339
|
+
connectionUnavailable: "Unable to check AI connection. Click to retry.",
|
|
335
340
|
voiceMode: {
|
|
336
341
|
entryButtonLabel: "Use microphone",
|
|
337
342
|
promptTitle: "Use your voice",
|
|
@@ -801,7 +806,7 @@ const messages = {
|
|
|
801
806
|
connected: "Connected",
|
|
802
807
|
configure: "Configure",
|
|
803
808
|
connect: "Connect",
|
|
804
|
-
connectWithOAuth: "Connect
|
|
809
|
+
connectWithOAuth: "Connect",
|
|
805
810
|
useApiToken: "Use API token",
|
|
806
811
|
connectSuggestion: "Connect {{name}} to use it in chat",
|
|
807
812
|
connectSuggestionWithApiToken:
|
|
@@ -4,10 +4,11 @@ import type { OAuthClientInformationMixed } from "@modelcontextprotocol/sdk/shar
|
|
|
4
4
|
import {
|
|
5
5
|
deleteCookie,
|
|
6
6
|
defineEventHandler,
|
|
7
|
+
getChunkedCookie,
|
|
7
8
|
getCookie,
|
|
8
9
|
getMethod,
|
|
9
10
|
getQuery,
|
|
10
|
-
|
|
11
|
+
setChunkedCookie,
|
|
11
12
|
setResponseStatus,
|
|
12
13
|
type H3Event,
|
|
13
14
|
} from "h3";
|
|
@@ -32,6 +33,9 @@ import {
|
|
|
32
33
|
|
|
33
34
|
const FLOW_COOKIE = "an_mcp_oauth_flow";
|
|
34
35
|
const FLOW_TTL_SECONDS = 10 * 60;
|
|
36
|
+
const FLOW_COOKIE_CHUNK_SIZE = 2_800;
|
|
37
|
+
const FLOW_COOKIE_MAX_CHUNKS = 8;
|
|
38
|
+
const CHUNKED_COOKIE_PREFIX = "__chunked__";
|
|
35
39
|
|
|
36
40
|
export interface McpOAuthFlow {
|
|
37
41
|
name: string;
|
|
@@ -54,6 +58,20 @@ export interface McpOAuthRoutesOptions {
|
|
|
54
58
|
reconfigure: () => Promise<void>;
|
|
55
59
|
}
|
|
56
60
|
|
|
61
|
+
export function redirectWithStagedCookies(
|
|
62
|
+
event: H3Event,
|
|
63
|
+
location: string,
|
|
64
|
+
): Response {
|
|
65
|
+
const headers = new Headers({
|
|
66
|
+
Location: location,
|
|
67
|
+
"Cache-Control": "no-store",
|
|
68
|
+
});
|
|
69
|
+
for (const cookie of event.res?.headers?.getSetCookie?.() ?? []) {
|
|
70
|
+
headers.append("set-cookie", cookie);
|
|
71
|
+
}
|
|
72
|
+
return new Response(null, { status: 302, headers });
|
|
73
|
+
}
|
|
74
|
+
|
|
57
75
|
export function mountMcpOAuthRoutes(
|
|
58
76
|
nitroApp: any,
|
|
59
77
|
options: McpOAuthRoutesOptions,
|
|
@@ -175,14 +193,8 @@ async function handleMcpOAuthStart(
|
|
|
175
193
|
...(safeReturnUrl ? { returnUrl: safeReturnUrl } : {}),
|
|
176
194
|
expiresAt: Date.now() + FLOW_TTL_SECONDS * 1_000,
|
|
177
195
|
};
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
secure: redirectUri.startsWith("https://"),
|
|
181
|
-
sameSite: "lax",
|
|
182
|
-
path: "/",
|
|
183
|
-
maxAge: FLOW_TTL_SECONDS,
|
|
184
|
-
});
|
|
185
|
-
return Response.redirect(started.authorizationUrl.href, 302);
|
|
196
|
+
setMcpOAuthFlowCookie(event, flow, redirectUri.startsWith("https://"));
|
|
197
|
+
return redirectWithStagedCookies(event, started.authorizationUrl.href);
|
|
186
198
|
} catch {
|
|
187
199
|
setResponseStatus(event, 400);
|
|
188
200
|
return {
|
|
@@ -203,8 +215,8 @@ async function handleMcpOAuthCallback(
|
|
|
203
215
|
const code = text(query.code);
|
|
204
216
|
const state = text(query.state);
|
|
205
217
|
const providerError = text(query.error);
|
|
206
|
-
const flow =
|
|
207
|
-
|
|
218
|
+
const flow = readMcpOAuthFlowCookie(event);
|
|
219
|
+
clearMcpOAuthFlowCookies(event);
|
|
208
220
|
if (providerError || !code || !state) {
|
|
209
221
|
setResponseStatus(event, 400);
|
|
210
222
|
return { error: "MCP OAuth authorization was not completed." };
|
|
@@ -254,15 +266,43 @@ async function handleMcpOAuthCallback(
|
|
|
254
266
|
const returnPath =
|
|
255
267
|
flow.returnUrl ??
|
|
256
268
|
`/settings/connections?connected=mcp-${encodeURIComponent(flow.name)}`;
|
|
257
|
-
return
|
|
269
|
+
return redirectWithStagedCookies(event, getAppUrl(event, returnPath));
|
|
258
270
|
} catch {
|
|
259
271
|
setResponseStatus(event, 400);
|
|
260
272
|
return { error: "MCP OAuth authorization could not be completed." };
|
|
261
273
|
}
|
|
262
274
|
}
|
|
263
275
|
|
|
264
|
-
function
|
|
265
|
-
|
|
276
|
+
export function setMcpOAuthFlowCookie(
|
|
277
|
+
event: H3Event,
|
|
278
|
+
flow: McpOAuthFlow,
|
|
279
|
+
secure: boolean,
|
|
280
|
+
): void {
|
|
281
|
+
const encrypted = encryptSecretValue(JSON.stringify(flow));
|
|
282
|
+
const chunkCount = Math.ceil(encrypted.length / FLOW_COOKIE_CHUNK_SIZE);
|
|
283
|
+
if (chunkCount > FLOW_COOKIE_MAX_CHUNKS) {
|
|
284
|
+
throw new Error("MCP OAuth flow state exceeds the cookie size limit.");
|
|
285
|
+
}
|
|
286
|
+
setChunkedCookie(event, FLOW_COOKIE, encrypted, {
|
|
287
|
+
httpOnly: true,
|
|
288
|
+
secure,
|
|
289
|
+
sameSite: "lax",
|
|
290
|
+
path: "/",
|
|
291
|
+
maxAge: FLOW_TTL_SECONDS,
|
|
292
|
+
chunkMaxLength: FLOW_COOKIE_CHUNK_SIZE,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export function readMcpOAuthFlowCookie(event: H3Event): McpOAuthFlow | null {
|
|
297
|
+
const primaryCookie = getCookie(event, FLOW_COOKIE);
|
|
298
|
+
if (!primaryCookie) return null;
|
|
299
|
+
if (primaryCookie.startsWith(CHUNKED_COOKIE_PREFIX)) {
|
|
300
|
+
const rawCount = primaryCookie.slice(CHUNKED_COOKIE_PREFIX.length);
|
|
301
|
+
if (!/^\d+$/.test(rawCount)) return null;
|
|
302
|
+
const chunkCount = Number(rawCount);
|
|
303
|
+
if (chunkCount < 2 || chunkCount > FLOW_COOKIE_MAX_CHUNKS) return null;
|
|
304
|
+
}
|
|
305
|
+
const encrypted = getChunkedCookie(event, FLOW_COOKIE);
|
|
266
306
|
if (!encrypted) return null;
|
|
267
307
|
try {
|
|
268
308
|
const parsed = JSON.parse(decryptSecretValue(encrypted)) as McpOAuthFlow;
|
|
@@ -272,6 +312,13 @@ function readFlow(event: H3Event): McpOAuthFlow | null {
|
|
|
272
312
|
}
|
|
273
313
|
}
|
|
274
314
|
|
|
315
|
+
export function clearMcpOAuthFlowCookies(event: H3Event): void {
|
|
316
|
+
deleteCookie(event, FLOW_COOKIE, { path: "/" });
|
|
317
|
+
for (let index = 1; index <= FLOW_COOKIE_MAX_CHUNKS; index += 1) {
|
|
318
|
+
deleteCookie(event, `${FLOW_COOKIE}.${index}`, { path: "/" });
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
275
322
|
export function isValidMcpOAuthFlow(
|
|
276
323
|
flow: McpOAuthFlow,
|
|
277
324
|
email: string,
|