@agent-native/core 0.115.3 → 0.116.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/agent-native.eject.json +1 -0
- package/corpus/README.md +3 -3
- package/corpus/core/CHANGELOG.md +34 -0
- package/corpus/core/agent-native.eject.json +1 -0
- package/corpus/core/docs/AGENTS.md +1 -1
- package/corpus/core/docs/content/agent-mentions.mdx +2 -2
- package/corpus/core/docs/content/{workspace.mdx → agent-resources.mdx} +1 -7
- package/corpus/core/docs/content/agent-teams.mdx +4 -4
- package/corpus/core/docs/content/dispatch.mdx +10 -10
- package/corpus/core/docs/content/drop-in-agent.mdx +4 -4
- package/corpus/core/docs/content/external-agents.mdx +1 -1
- package/corpus/core/docs/content/frames.mdx +1 -1
- package/corpus/core/docs/content/integrations.mdx +13 -2
- package/corpus/core/docs/content/key-concepts.mdx +2 -2
- package/corpus/core/docs/content/mcp-clients.mdx +7 -1
- package/corpus/core/docs/content/multi-app-workspace.mdx +3 -3
- package/corpus/core/docs/content/real-time-collaboration.mdx +33 -15
- package/corpus/core/docs/content/recurring-jobs.mdx +7 -7
- package/corpus/core/docs/content/skills-guide.mdx +4 -4
- package/corpus/core/docs/content/template-brain.mdx +1 -1
- package/corpus/core/docs/content/toolkit-collaboration.mdx +1 -1
- package/corpus/core/docs/content/using-your-agent.mdx +1 -1
- package/corpus/core/docs/content/what-is-agent-native.mdx +4 -4
- package/corpus/core/docs/content/workspace-management.mdx +4 -4
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/production-agent.ts +13 -3
- package/corpus/core/src/cli/doctor.ts +6 -1
- package/corpus/core/src/client/AgentPanel.tsx +79 -41
- package/corpus/core/src/client/AssistantChat.tsx +71 -25
- package/corpus/core/src/client/FeedbackButton.tsx +33 -7
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +6 -8
- package/corpus/core/src/client/agent-chat-adapter.ts +11 -2
- package/corpus/core/src/client/agent-page/AgentTabFrame.tsx +22 -3
- package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +34 -19
- package/corpus/core/src/client/chat/message-components.tsx +43 -16
- package/corpus/core/src/client/chat/tool-call-display.tsx +30 -18
- package/corpus/core/src/client/chat/tool-render-registry.tsx +2 -0
- package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +19 -2
- package/corpus/core/src/client/resources/ResourceTree.tsx +7 -10
- package/corpus/core/src/client/resources/ResourcesPanel.tsx +33 -70
- package/corpus/core/src/client/resources/mcp-connection-resume.ts +107 -0
- package/corpus/core/src/client/resources/mcp-integration-catalog.ts +65 -12
- package/corpus/core/src/client/resources/mcp-integration-logos.ts +4 -0
- package/corpus/core/src/client/sse-event-processor.ts +50 -14
- package/corpus/core/src/client/use-db-sync.ts +16 -6
- package/corpus/core/src/connections/catalog.ts +7 -1
- package/corpus/core/src/eject/remote-mcp-presets.ts +37 -5
- package/corpus/core/src/guards/explicit-collab-access.ts +229 -0
- package/corpus/core/src/guards/index.ts +1 -0
- package/corpus/core/src/localization/default-messages.ts +54 -5
- package/corpus/core/src/mcp/connect-route.ts +34 -51
- package/corpus/core/src/provider-api/index.ts +1 -1
- package/corpus/core/src/server/builder-browser.ts +34 -4
- package/corpus/core/src/server/collab-plugin.ts +137 -18
- package/corpus/core/src/server/core-routes-plugin.ts +1 -1
- package/corpus/core/src/server/index.ts +2 -0
- package/corpus/core/src/styles/agent-native.css +40 -0
- package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/core/src/templates/default/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +12 -8
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/analytics/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/analytics/AGENTS.md +7 -2
- package/corpus/templates/analytics/actions/export-dashboard-panel-to-google-sheet.ts +144 -0
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -88
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +34 -37
- package/corpus/templates/analytics/app/global.css +0 -4
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +2 -7
- package/corpus/templates/analytics/app/i18n-data.ts +107 -0
- package/corpus/templates/analytics/app/lib/data-source-status.ts +9 -0
- package/corpus/templates/analytics/app/lib/sql-query.ts +1 -2
- package/corpus/templates/analytics/app/pages/Ask.tsx +2 -7
- package/corpus/templates/analytics/app/pages/DataSources.tsx +48 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +59 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +2 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/report-panel-window.ts +3 -1
- package/corpus/templates/analytics/changelog/2026-07-22-clear-background-chat-progress.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-22-daily-dashboard-email-query-batches.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-22-export-table-panels-directly-to-google-sheets.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-22-recent-chats-can-expand-in-the-sidebar.md +6 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +8 -8
- package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +31 -0
- package/corpus/templates/analytics/server/lib/dashboard-report-subscriptions.ts +3 -5
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +12 -0
- package/corpus/templates/analytics/server/lib/first-party-dashboard-repair.ts +3 -5
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +150 -21
- package/corpus/templates/analytics/server/lib/google-sheets-export.ts +188 -0
- package/corpus/templates/analytics/server/lib/provider-api.ts +7 -2
- package/corpus/templates/analytics/server/plugins/collab.ts +6 -3
- package/corpus/templates/analytics/shared/sql-query-limits.ts +1 -0
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/assets/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/assets/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +54 -62
- package/corpus/templates/assets/app/hooks/use-navigation-state.ts +2 -6
- package/corpus/templates/assets/app/routes/_index.tsx +8 -5
- package/corpus/templates/assets/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-22-recent-chats-expand-from-a-compact-list.md +6 -0
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/brain/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/brain/actions/rotate-source-ingest-token.ts +77 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +5 -1
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +38 -51
- package/corpus/templates/brain/app/hooks/use-navigation-state.ts +2 -9
- package/corpus/templates/brain/app/i18n-data.ts +120 -0
- package/corpus/templates/brain/app/routes/sources.tsx +156 -5
- package/corpus/templates/brain/changelog/2026-07-22-chat-runs-always-end-with-an-answer.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-22-clear-background-chat-progress.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-22-long-chat-titles-stay-inside-the-sidebar.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-22-new-clips-and-webhook-sources-now-show-their-secure-connecti.md +6 -0
- package/corpus/templates/brain/jobs/emit-netlify-brain-queue-cron.ts +125 -0
- package/corpus/templates/brain/netlify.toml +5 -1
- package/corpus/templates/brain/scripts/configure-prod-clips-source.ts +50 -0
- package/corpus/templates/brain/server/lib/capture-sanitization.ts +64 -6
- package/corpus/templates/brain/server/plugins/agent-chat.ts +4 -0
- package/corpus/templates/brain/server/plugins/brain-jobs.ts +1 -0
- package/corpus/templates/brain/server/routes/api/brain/queue/run.post.ts +55 -0
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/chat/app/components/layout/Layout.tsx +1 -0
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +43 -67
- package/corpus/templates/chat/app/hooks/use-navigation-state.ts +2 -7
- package/corpus/templates/chat/app/routes/_index.tsx +8 -5
- package/corpus/templates/chat/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
- package/corpus/templates/chat/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/chat/changelog/2026-07-22-recent-chats-are-easier-to-scan-and-expand.md +6 -0
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/clips/AGENTS.md +9 -1
- package/corpus/templates/clips/actions/export-to-brain.ts +82 -6
- package/corpus/templates/clips/actions/request-transcript.ts +25 -14
- package/corpus/templates/clips/changelog/2026-07-22-clips-transcripts-now-retry-brain-export.md +5 -0
- package/corpus/templates/clips/changelog/2026-07-22-german-umlauts-and-other-non-ascii-characters-now-paste-corr.md +6 -0
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +26 -3
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +10 -1
- package/corpus/templates/clips/jobs/emit-netlify-brain-export-cron.ts +118 -0
- package/corpus/templates/clips/netlify.toml +4 -1
- package/corpus/templates/clips/scripts/configure-prod-brain-export.ts +92 -0
- package/corpus/templates/clips/server/jobs/brain-export.ts +182 -0
- package/corpus/templates/clips/server/lib/brain-export-state.ts +42 -0
- package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +5 -1
- package/corpus/templates/clips/server/plugins/calendar-jobs.ts +2 -0
- package/corpus/templates/clips/server/register-secrets.ts +42 -0
- package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +10 -1
- package/corpus/templates/clips/server/routes/api/clips/brain-export/run.post.ts +45 -0
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/content/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -1
- package/corpus/templates/content/server/plugins/collab.ts +1 -1
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/crm/actions/_crm-data-program-actions.ts +15 -0
- package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +2 -0
- package/corpus/templates/crm/actions/run.ts +2 -6
- package/corpus/templates/crm/actions/update-crm-record.ts +4 -2
- package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +6 -0
- package/corpus/templates/crm/changelog/2026-07-22-crm-field-validation-now-explains-which-fields-cannot-be-edi.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-22-fixed-hubspot-contact-syncs-missing-records-updated-after-th.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-22-fixed-pipeline-dashboard-panels-so-their-opportunity-data-lo.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/crm/server/crm/hubspot-adapter.ts +4 -1
- package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +1 -1
- package/corpus/templates/design/server/plugins/collab.ts +11 -8
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/forms/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/forms/app/components/layout/Layout.tsx +1 -0
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +1 -1
- package/corpus/templates/forms/app/hooks/use-navigation-state.ts +2 -9
- package/corpus/templates/forms/app/root.tsx +1 -6
- package/corpus/templates/forms/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/mail/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +2 -2
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/plan/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/plan/app/components/layout/Layout.tsx +5 -1
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +57 -72
- package/corpus/templates/plan/app/hooks/use-navigation-state.ts +2 -9
- package/corpus/templates/plan/app/lib/create-plan-routing.ts +2 -2
- package/corpus/templates/plan/app/pages/PlanChatPage.tsx +0 -1
- package/corpus/templates/plan/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-22-recent-chats-and-sidebar-controls-are-more-compact.md +6 -0
- package/corpus/templates/plan/server/plugins/collab.ts +5 -2
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +1 -1
- package/corpus/templates/slides/server/plugins/collab.ts +11 -8
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/corpus/templates/tasks/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/corpus/templates/tasks/app/components/layout/Sidebar.tsx +5 -22
- package/corpus/templates/tasks/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
- package/corpus/toolkit/CHANGELOG.md +7 -0
- package/corpus/toolkit/README.md +12 -3
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/chat-history/ChatHistoryRail.tsx +89 -0
- package/corpus/toolkit/src/chat-history/index.ts +5 -0
- package/corpus/toolkit/src/chat-history.css +59 -0
- package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +106 -36
- package/corpus/toolkit/src/composer/VoiceButton.tsx +49 -0
- package/corpus/toolkit/src/composer/realtime-voice-audio-level.ts +2 -1
- package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +5 -3
- package/corpus/toolkit/src/styles.css +35 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +13 -3
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/doctor.d.ts +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +5 -2
- package/dist/cli/doctor.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +1 -0
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +38 -18
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +55 -20
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/FeedbackButton.d.ts +4 -2
- package/dist/client/FeedbackButton.d.ts.map +1 -1
- package/dist/client/FeedbackButton.js +18 -2
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +2 -3
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +11 -3
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-page/AgentTabFrame.d.ts +3 -1
- package/dist/client/agent-page/AgentTabFrame.d.ts.map +1 -1
- package/dist/client/agent-page/AgentTabFrame.js +3 -2
- package/dist/client/agent-page/AgentTabFrame.js.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.d.ts +2 -0
- package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.js +26 -15
- package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +6 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +17 -11
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +11 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +16 -17
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat/tool-render-registry.d.ts +2 -0
- package/dist/client/chat/tool-render-registry.d.ts.map +1 -1
- package/dist/client/chat/tool-render-registry.js.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
- package/dist/client/resources/McpConnectionSuggestion.js +15 -1
- package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
- package/dist/client/resources/ResourceTree.d.ts.map +1 -1
- package/dist/client/resources/ResourceTree.js +3 -3
- package/dist/client/resources/ResourceTree.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts +1 -0
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +34 -20
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/mcp-connection-resume.d.ts +11 -0
- package/dist/client/resources/mcp-connection-resume.d.ts.map +1 -0
- package/dist/client/resources/mcp-connection-resume.js +95 -0
- package/dist/client/resources/mcp-connection-resume.js.map +1 -0
- 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 +63 -8
- package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
- package/dist/client/resources/mcp-integration-logos.d.ts.map +1 -1
- package/dist/client/resources/mcp-integration-logos.js +4 -0
- package/dist/client/resources/mcp-integration-logos.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +5 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +39 -13
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/use-db-sync.d.ts +3 -2
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +17 -6
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/connections/catalog.d.ts +1 -1
- package/dist/connections/catalog.d.ts.map +1 -1
- package/dist/connections/catalog.js +7 -1
- package/dist/connections/catalog.js.map +1 -1
- package/dist/eject/remote-mcp-presets.d.ts.map +1 -1
- package/dist/eject/remote-mcp-presets.js +33 -3
- package/dist/eject/remote-mcp-presets.js.map +1 -1
- package/dist/guards/explicit-collab-access.d.ts +8 -0
- package/dist/guards/explicit-collab-access.d.ts.map +1 -0
- package/dist/guards/explicit-collab-access.js +214 -0
- package/dist/guards/explicit-collab-access.js.map +1 -0
- package/dist/guards/index.d.ts +1 -0
- package/dist/guards/index.d.ts.map +1 -1
- package/dist/guards/index.js +1 -0
- package/dist/guards/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +43 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +48 -5
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/connect-route.d.ts.map +1 -1
- package/dist/mcp/connect-route.js +34 -48
- package/dist/mcp/connect-route.js.map +1 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +5 -5
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +11 -11
- package/dist/provider-api/actions/provider-api.d.ts +7 -7
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/provider-api/index.js +1 -1
- package/dist/provider-api/index.js.map +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/builder-browser.d.ts +1 -0
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +27 -4
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/collab-plugin.d.ts +34 -3
- package/dist/server/collab-plugin.d.ts.map +1 -1
- package/dist/server/collab-plugin.js +65 -12
- package/dist/server/collab-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.js +1 -1
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/styles/agent-native.css +40 -0
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/dist/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/dist/templates/chat/app/components/layout/Layout.tsx +1 -0
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +43 -67
- package/dist/templates/chat/app/hooks/use-navigation-state.ts +2 -7
- package/dist/templates/chat/app/routes/_index.tsx +8 -5
- package/dist/templates/chat/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
- package/dist/templates/chat/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/dist/templates/chat/changelog/2026-07-22-recent-chats-are-easier-to-scan-and-expand.md +6 -0
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/dist/templates/default/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/dist/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +12 -8
- package/docs/AGENTS.md +1 -1
- package/docs/content/agent-mentions.mdx +2 -2
- package/docs/content/{workspace.mdx → agent-resources.mdx} +1 -7
- package/docs/content/agent-teams.mdx +4 -4
- package/docs/content/dispatch.mdx +10 -10
- package/docs/content/drop-in-agent.mdx +4 -4
- package/docs/content/external-agents.mdx +1 -1
- package/docs/content/frames.mdx +1 -1
- package/docs/content/integrations.mdx +13 -2
- package/docs/content/key-concepts.mdx +2 -2
- package/docs/content/mcp-clients.mdx +7 -1
- package/docs/content/multi-app-workspace.mdx +3 -3
- package/docs/content/real-time-collaboration.mdx +33 -15
- package/docs/content/recurring-jobs.mdx +7 -7
- package/docs/content/skills-guide.mdx +4 -4
- package/docs/content/template-brain.mdx +1 -1
- package/docs/content/toolkit-collaboration.mdx +1 -1
- package/docs/content/using-your-agent.mdx +1 -1
- package/docs/content/what-is-agent-native.mdx +4 -4
- package/docs/content/workspace-management.mdx +4 -4
- package/package.json +3 -3
- package/src/agent/production-agent.ts +13 -3
- package/src/cli/doctor.ts +6 -1
- package/src/client/AgentPanel.tsx +79 -41
- package/src/client/AssistantChat.tsx +71 -25
- package/src/client/FeedbackButton.tsx +33 -7
- package/src/client/MultiTabAssistantChat.tsx +6 -8
- package/src/client/agent-chat-adapter.ts +11 -2
- package/src/client/agent-page/AgentTabFrame.tsx +22 -3
- package/src/client/agent-page/AgentTabsPage.tsx +34 -19
- package/src/client/chat/message-components.tsx +43 -16
- package/src/client/chat/tool-call-display.tsx +30 -18
- package/src/client/chat/tool-render-registry.tsx +2 -0
- package/src/client/resources/McpConnectionSuggestion.tsx +19 -2
- package/src/client/resources/ResourceTree.tsx +7 -10
- package/src/client/resources/ResourcesPanel.tsx +33 -70
- package/src/client/resources/mcp-connection-resume.ts +107 -0
- package/src/client/resources/mcp-integration-catalog.ts +65 -12
- package/src/client/resources/mcp-integration-logos.ts +4 -0
- package/src/client/sse-event-processor.ts +50 -14
- package/src/client/use-db-sync.ts +16 -6
- package/src/connections/catalog.ts +7 -1
- package/src/eject/remote-mcp-presets.ts +37 -5
- package/src/guards/explicit-collab-access.ts +229 -0
- package/src/guards/index.ts +1 -0
- package/src/localization/default-messages.ts +54 -5
- package/src/mcp/connect-route.ts +34 -51
- package/src/provider-api/index.ts +1 -1
- package/src/server/builder-browser.ts +34 -4
- package/src/server/collab-plugin.ts +137 -18
- package/src/server/core-routes-plugin.ts +1 -1
- package/src/server/index.ts +2 -0
- package/src/styles/agent-native.css +40 -0
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/src/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/src/templates/chat/app/components/layout/Layout.tsx +1 -0
- package/src/templates/chat/app/components/layout/Sidebar.tsx +43 -67
- package/src/templates/chat/app/hooks/use-navigation-state.ts +2 -7
- package/src/templates/chat/app/routes/_index.tsx +8 -5
- package/src/templates/chat/changelog/2026-07-22-compact-sidebar-footer.md +6 -0
- package/src/templates/chat/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +6 -0
- package/src/templates/chat/changelog/2026-07-22-recent-chats-are-easier-to-scan-and-expand.md +6 -0
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/src/templates/default/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -1
- package/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +35 -13
- package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +12 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/connections/catalog.ts"],"names":[],"mappings":"AAkEA,MAAM,UAAU,iCAAiC,CAE/C,QAAW;IACX,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,iCAAiC,CAAC;QAChC,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,OAAO;QACd,WAAW,EACT,+GAA+G;QACjH,cAAc,EAAE;YACd;gBACE,GAAG,EAAE,iBAAiB;gBACtB,KAAK,EAAE,0BAA0B;gBACjC,WAAW,EACT,mHAAmH;gBACrH,QAAQ,EAAE,IAAI;aACf;SACF;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC;QAC9C,uBAAuB,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC;KAC5D,CAAC;IACF,iCAAiC,CAAC;QAChC,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,WAAW,EACT,6GAA6G;QAC/G,cAAc,EAAE;YACd;gBACE,GAAG,EAAE,cAAc;gBACnB,KAAK,EAAE,yBAAyB;gBAChC,WAAW,EACT,+EAA+E;gBACjF,QAAQ,EAAE,KAAK;aAChB;SACF;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EAAE,0CAA0C;YAC5D,QAAQ,EAAE,6CAA6C;YACvD,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC;SACxD;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QAClD,uBAAuB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC;KAC5D,CAAC;IACF,iCAAiC,CAAC;QAChC,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,OAAO;QACd,WAAW,EACT,kGAAkG;QACpG,cAAc,EAAE;YACd;gBACE,GAAG,EAAE,oBAAoB;gBACzB,KAAK,EAAE,wCAAwC;gBAC/C,WAAW,EACT,8EAA8E;gBAChF,QAAQ,EAAE,KAAK;aAChB;SACF;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,OAAO;YACjB,gBAAgB,EAAE,6BAA6B;YAC/C,QAAQ,EAAE,sCAAsC;YAChD,UAAU,EAAE,sCAAsC;YAClD,MAAM,EAAE;gBACN,mBAAmB;gBACnB,mBAAmB;gBACnB,oBAAoB;gBACpB,eAAe;aAChB;SACF;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;QAC1C,uBAAuB,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;KAClE,CAAC;IACF,iCAAiC,CAAC;QAChC,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,WAAW,EACT,+EAA+E;QACjF,cAAc,EAAE,EAAE;QAClB,KAAK,EAAE;YACL,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EAAE,2CAA2C;YAC7D,QAAQ,EAAE,uCAAuC;YACjD,UAAU,EAAE,uCAAuC;YACnD,MAAM,EAAE,EAAE;SACX;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;QAC1C,uBAAuB,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;KAC1D,CAAC;IACF,iCAAiC,CAAC;QAChC,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,OAAO;QACd,WAAW,EACT,uFAAuF;QACzF,cAAc,EAAE;YACd;gBACE,GAAG,EAAE,kBAAkB;gBACvB,KAAK,EAAE,wBAAwB;gBAC/B,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,GAAG,EAAE,sBAAsB;gBAC3B,KAAK,EAAE,4BAA4B;gBACnC,QAAQ,EAAE,IAAI;aACf;SACF;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC;QAC9C,uBAAuB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC;KACvD,CAAC;IACF,iCAAiC,CAAC;QAChC,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,iFAAiF;QACnF,cAAc,EAAE;YACd;gBACE,GAAG,EAAE,kBAAkB;gBACvB,KAAK,EAAE,wBAAwB;gBAC/B,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,GAAG,EAAE,sBAAsB;gBAC3B,KAAK,EAAE,4BAA4B;gBACnC,QAAQ,EAAE,IAAI;aACf;SACF;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;QAC1C,uBAAuB,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC;QACnE,KAAK,EAAE;YACL,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EAAE,8CAA8C;YAChE,QAAQ,EAAE,qCAAqC;YAC/C,MAAM,EAAE,CAAC,4CAA4C,CAAC;SACvD;KACF,CAAC;IACF,iCAAiC,CAAC;QAChC,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,0FAA0F;QAC5F,cAAc,EAAE;YACd;gBACE,GAAG,EAAE,2BAA2B;gBAChC,KAAK,EAAE,sCAAsC;gBAC7C,WAAW,EACT,8EAA8E;gBAChF,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,GAAG,EAAE,sBAAsB;gBAC3B,KAAK,EAAE,iCAAiC;gBACxC,WAAW,EACT,oEAAoE;gBACtE,QAAQ,EAAE,KAAK;aAChB;SACF;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,SAAS;YACnB,gBAAgB,EAAE,yCAAyC;YAC3D,QAAQ,EAAE,uCAAuC;YACjD,UAAU,EAAE,uCAAuC;YACnD,MAAM,EAAE;gBACN,OAAO;gBACP,2BAA2B;gBAC3B,4BAA4B;gBAC5B,wBAAwB;gBACxB,0BAA0B;gBAC1B,2BAA2B;gBAC3B,4BAA4B;gBAC5B,wBAAwB;gBACxB,0BAA0B;aAC3B;SACF;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;QACzC,uBAAuB,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC;KAC3E,CAAC;IACF,iCAAiC,CAAC;QAChC,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,sGAAsG;QACxG,cAAc,EAAE,EAAE;QAClB,KAAK,EAAE;YACL,QAAQ,EAAE,YAAY;YACtB,gBAAgB,EACd,wDAAwD;YAC1D,QAAQ,EAAE,oDAAoD;YAC9D,UAAU,EAAE,oDAAoD;YAChE,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC;SACvC;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;QACzC,uBAAuB,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC;KACnE,CAAC;IACF,iCAAiC,CAAC;QAChC,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,kGAAkG;QACpG,cAAc,EAAE;YACd;gBACE,GAAG,EAAE,eAAe;gBACpB,KAAK,EAAE,0BAA0B;gBACjC,WAAW,EACT,4GAA4G;gBAC9G,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,GAAG,EAAE,iBAAiB;gBACtB,KAAK,EAAE,uBAAuB;gBAC9B,WAAW,EACT,sEAAsE;gBACxE,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,GAAG,EAAE,gBAAgB;gBACrB,KAAK,EAAE,2BAA2B;gBAClC,WAAW,EACT,qGAAqG;gBACvG,QAAQ,EAAE,KAAK;aAChB;SACF;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM;YAChB,gBAAgB,EAAE,sCAAsC;YACxD,QAAQ,EAAE,wCAAwC;YAClD,UAAU,EAAE,wCAAwC;YACpD,MAAM,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;SAC/D;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QAClD,uBAAuB,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC;KAC5D,CAAC;IACF,iCAAiC,CAAC;QAChC,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,WAAW,EACT,8FAA8F;QAChG,cAAc,EAAE;YACd;gBACE,GAAG,EAAE,mBAAmB;gBACxB,KAAK,EAAE,8BAA8B;gBACrC,WAAW,EACT,wGAAwG;gBAC1G,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,GAAG,EAAE,qBAAqB;gBAC1B,KAAK,EAAE,gCAAgC;gBACvC,WAAW,EACT,iEAAiE;gBACnE,QAAQ,EAAE,KAAK;aAChB;SACF;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EAAE,oCAAoC;YACtD,QAAQ,EAAE,gCAAgC;YAC1C,UAAU,EAAE,gCAAgC;YAC5C,MAAM,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,CAAC;SAChE;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;QAC1C,uBAAuB,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC;KAC5D,CAAC;IACF,iCAAiC,CAAC;QAChC,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,2EAA2E;QAC7E,cAAc,EAAE;YACd;gBACE,GAAG,EAAE,iBAAiB;gBACtB,KAAK,EAAE,iBAAiB;gBACxB,WAAW,EACT,6FAA6F;gBAC/F,QAAQ,EAAE,IAAI;aACf;SACF;QACD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC;QACtD,uBAAuB,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC;KAC3D,CAAC;IACF,iCAAiC,CAAC;QAChC,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,OAAO;QACd,WAAW,EACT,iGAAiG;QACnG,cAAc,EAAE,EAAE;QAClB,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC;QAC9C,uBAAuB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;KAC5C,CAAC;IACF,iCAAiC,CAAC;QAChC,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,kHAAkH;QACpH,cAAc,EAAE,EAAE;QAClB,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;QAC1C,uBAAuB,EAAE;YACvB,OAAO;YACP,WAAW;YACX,SAAS;YACT,UAAU;YACV,OAAO;SACR;KACF,CAAC;CACuD,CAAC;AAE5D,MAAM,eAAe,GAAG,IAAI,GAAG,CAG7B,8BAA8B,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAE7E,MAAM,UAAU,gCAAgC,CAC9C,OAAO,GAA4C,EAAE;IAErD,OAAO,iCAAiC,CAAC,OAAO,CAAC,iBAAiB,CAAC;SAChE,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnB,IACE,OAAO,CAAC,UAAU;YAClB,CAAC,qCAAqC,CACpC,QAAQ,CAAC,YAAY,EACrB,OAAO,CAAC,UAAU,CACnB,EACD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IACE,OAAO,CAAC,WAAW;YACnB,CAAC,sCAAsC,CACrC,QAAQ,CAAC,uBAAuB,EAChC,OAAO,CAAC,WAAW,CACpB,EACD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,SAAS,GAA2C,EAAE;IAEtD,OAAO,oBAAoB,CAAC,8BAA8B,EAAE,SAAS,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,EAAU,EACV,SAAS,GAA2C,EAAE;IAEtD,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM;QAC/B,CAAC,CAAC,iCAAiC,CAAC,SAAS,CAAC,CAAC,IAAI,CAC/C,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CACnC;QACH,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,EAAmC,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,EAAU;IAEV,OAAO,eAAe,CAAC,GAAG,CAAC,EAAmC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,2CAA2C,CACzD,WAA2C,EAC3C,iBAAiB,GAA2C,EAAE;IAE9D,OAAO,gCAAgC,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,6CAA6C,CAC3D,UAAyC,EACzC,iBAAiB,GAA2C,EAAE;IAE9D,OAAO,gCAAgC,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,YAAkD,EAClD,UAAyC;IAEzC,MAAM,QAAQ,GACZ,OAAO,YAAY,KAAK,QAAQ;QAC9B,CAAC,CAAC,8BAA8B,CAAC,YAAY,CAAC;QAC9C,CAAC,CAAC,YAAY,CAAC;IACnB,OAAO,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;AAC9D,CAAC;AAED,SAAS,qCAAqC,CAC5C,YAAsD,EACtD,UAAyC;IAEzC,OAAO,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,sCAAsC,CAC7C,YAAuD,EACvD,WAA2C;IAE3C,OAAO,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC5C,CAAC;AACD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["export type WorkspaceConnectionCapability =\n | \"search\"\n | \"import\"\n | \"messages\"\n | \"meetings\"\n | \"crm\"\n | \"code\"\n | \"docs\";\n\nexport type WorkspaceConnectionTemplateUse =\n | \"analytics\"\n | \"brain\"\n | \"calendar\"\n | \"clips\"\n | \"content\"\n | \"crm\"\n | \"design\"\n | \"dispatch\"\n | \"forms\"\n | \"mail\"\n | \"slides\";\n\nexport type WorkspaceConnectionProviderId =\n | \"slack\"\n | \"github\"\n | \"figma\"\n | \"notion\"\n | \"gmail\"\n | \"google_drive\"\n | \"hubspot\"\n | \"salesforce\"\n | \"jira\"\n | \"sentry\"\n | \"granola\"\n | \"clips\"\n | \"generic\";\n\nexport interface WorkspaceConnectionCredentialKey {\n key: string;\n label: string;\n description?: string;\n required?: boolean;\n}\n\nexport interface WorkspaceConnectionProvider {\n id: WorkspaceConnectionProviderId;\n label: string;\n description: string;\n credentialKeys: readonly WorkspaceConnectionCredentialKey[];\n capabilities: readonly WorkspaceConnectionCapability[];\n recommendedTemplateUses: readonly WorkspaceConnectionTemplateUse[];\n oauth?: {\n provider: string;\n authorizationUrl: string;\n tokenUrl: string;\n refreshUrl?: string;\n scopes: readonly string[];\n };\n}\n\nexport interface ListWorkspaceConnectionProvidersOptions {\n capability?: WorkspaceConnectionCapability;\n templateUse?: WorkspaceConnectionTemplateUse;\n providerOverrides?: readonly WorkspaceConnectionProvider[];\n}\n\nexport function defineWorkspaceConnectionProvider<\n const T extends WorkspaceConnectionProvider,\n>(provider: T): T {\n return provider;\n}\n\nexport const WORKSPACE_CONNECTION_PROVIDERS = [\n defineWorkspaceConnectionProvider({\n id: \"slack\",\n label: \"Slack\",\n description:\n \"Workspace conversations and channel history for company memory, support workflows, and messaging automations.\",\n credentialKeys: [\n {\n key: \"SLACK_BOT_TOKEN\",\n label: \"Slack bot token (legacy)\",\n description:\n \"Legacy single-workspace fallback. For new messaging automations, connect Slack from Settings → Messaging instead.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"messages\"],\n recommendedTemplateUses: [\"brain\", \"dispatch\", \"analytics\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"github\",\n label: \"GitHub\",\n description:\n \"Repository, issue, pull request, and code context for product memory, engineering workflows, and analytics.\",\n credentialKeys: [\n {\n key: \"GITHUB_TOKEN\",\n label: \"GitHub token (fallback)\",\n description:\n \"Optional fine-grained token fallback. OAuth is preferred for new connections.\",\n required: false,\n },\n ],\n oauth: {\n provider: \"github\",\n authorizationUrl: \"https://github.com/login/oauth/authorize\",\n tokenUrl: \"https://github.com/login/oauth/access_token\",\n scopes: [\"repo\", \"read:org\", \"read:user\", \"user:email\"],\n },\n capabilities: [\"search\", \"import\", \"code\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"analytics\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"figma\",\n label: \"Figma\",\n description:\n \"Design files, frames, components, rendered previews, and library context for creative workflows.\",\n credentialKeys: [\n {\n key: \"FIGMA_ACCESS_TOKEN\",\n label: \"Figma personal access token (fallback)\",\n description:\n \"Optional fallback for local or individual use. Workspace OAuth is preferred.\",\n required: false,\n },\n ],\n oauth: {\n provider: \"figma\",\n authorizationUrl: \"https://www.figma.com/oauth\",\n tokenUrl: \"https://api.figma.com/v1/oauth/token\",\n refreshUrl: \"https://api.figma.com/v1/oauth/token\",\n scopes: [\n \"current_user:read\",\n \"file_content:read\",\n \"file_metadata:read\",\n \"projects:read\",\n ],\n },\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"design\", \"slides\", \"content\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"notion\",\n label: \"Notion\",\n description:\n \"Workspace docs, wikis, pages, and databases for knowledge capture and search.\",\n credentialKeys: [],\n oauth: {\n provider: \"notion\",\n authorizationUrl: \"https://api.notion.com/v1/oauth/authorize\",\n tokenUrl: \"https://api.notion.com/v1/oauth/token\",\n refreshUrl: \"https://api.notion.com/v1/oauth/token\",\n scopes: [],\n },\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"content\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"gmail\",\n label: \"Gmail\",\n description:\n \"Mailbox messages and threads for search, triage, customer context, and agent replies.\",\n credentialKeys: [\n {\n key: \"GOOGLE_CLIENT_ID\",\n label: \"Google OAuth client ID\",\n required: true,\n },\n {\n key: \"GOOGLE_CLIENT_SECRET\",\n label: \"Google OAuth client secret\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"messages\"],\n recommendedTemplateUses: [\"mail\", \"brain\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"google_drive\",\n label: \"Google Drive\",\n description:\n \"Drive files, Docs, Sheets, and Slides for document search and import workflows.\",\n credentialKeys: [\n {\n key: \"GOOGLE_CLIENT_ID\",\n label: \"Google OAuth client ID\",\n required: true,\n },\n {\n key: \"GOOGLE_CLIENT_SECRET\",\n label: \"Google OAuth client secret\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"content\", \"slides\", \"dispatch\"],\n oauth: {\n provider: \"google\",\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\"https://www.googleapis.com/auth/drive.file\"],\n },\n }),\n defineWorkspaceConnectionProvider({\n id: \"hubspot\",\n label: \"HubSpot\",\n description:\n \"CRM records, companies, contacts, deals, and engagement history for customer-aware apps.\",\n credentialKeys: [\n {\n key: \"HUBSPOT_PRIVATE_APP_TOKEN\",\n label: \"HubSpot private app token (fallback)\",\n description:\n \"Optional private app token fallback. OAuth is preferred for new connections.\",\n required: false,\n },\n {\n key: \"HUBSPOT_ACCESS_TOKEN\",\n label: \"HubSpot access token (fallback)\",\n description:\n \"Optional legacy access token fallback for existing HubSpot setups.\",\n required: false,\n },\n ],\n oauth: {\n provider: \"hubspot\",\n authorizationUrl: \"https://app.hubspot.com/oauth/authorize\",\n tokenUrl: \"https://api.hubapi.com/oauth/v3/token\",\n refreshUrl: \"https://api.hubapi.com/oauth/v3/token\",\n scopes: [\n \"oauth\",\n \"crm.objects.contacts.read\",\n \"crm.objects.companies.read\",\n \"crm.objects.deals.read\",\n \"crm.objects.tickets.read\",\n \"crm.schemas.contacts.read\",\n \"crm.schemas.companies.read\",\n \"crm.schemas.deals.read\",\n \"crm.schemas.tickets.read\",\n ],\n },\n capabilities: [\"search\", \"import\", \"crm\"],\n recommendedTemplateUses: [\"analytics\", \"brain\", \"crm\", \"mail\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"salesforce\",\n label: \"Salesforce\",\n description:\n \"CRM accounts, contacts, opportunities, custom objects, and activity history for customer-aware apps.\",\n credentialKeys: [],\n oauth: {\n provider: \"salesforce\",\n authorizationUrl:\n \"https://login.salesforce.com/services/oauth2/authorize\",\n tokenUrl: \"https://login.salesforce.com/services/oauth2/token\",\n refreshUrl: \"https://login.salesforce.com/services/oauth2/token\",\n scopes: [\"api\", \"refresh_token\", \"id\"],\n },\n capabilities: [\"search\", \"import\", \"crm\"],\n recommendedTemplateUses: [\"analytics\", \"brain\", \"crm\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"jira\",\n label: \"Jira Cloud\",\n description:\n \"Projects, issues, sprints, and delivery context for engineering analytics and product workflows.\",\n credentialKeys: [\n {\n key: \"JIRA_BASE_URL\",\n label: \"Jira base URL (fallback)\",\n description:\n \"Optional site URL for API-token fallback connections. OAuth connections discover their site automatically.\",\n required: false,\n },\n {\n key: \"JIRA_USER_EMAIL\",\n label: \"Jira email (fallback)\",\n description:\n \"Optional Atlassian account email for API-token fallback connections.\",\n required: false,\n },\n {\n key: \"JIRA_API_TOKEN\",\n label: \"Jira API token (fallback)\",\n description:\n \"Optional API token fallback for existing Jira Cloud setups. OAuth is preferred for new connections.\",\n required: false,\n },\n ],\n oauth: {\n provider: \"jira\",\n authorizationUrl: \"https://auth.atlassian.com/authorize\",\n tokenUrl: \"https://auth.atlassian.com/oauth/token\",\n refreshUrl: \"https://auth.atlassian.com/oauth/token\",\n scopes: [\"read:jira-work\", \"read:jira-user\", \"offline_access\"],\n },\n capabilities: [\"search\", \"import\", \"code\", \"docs\"],\n recommendedTemplateUses: [\"analytics\", \"brain\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"sentry\",\n label: \"Sentry\",\n description:\n \"Error tracking, performance issues, projects, and release context for engineering analytics.\",\n credentialKeys: [\n {\n key: \"SENTRY_AUTH_TOKEN\",\n label: \"Sentry auth token (fallback)\",\n description:\n \"Optional auth token fallback for self-hosted or local Sentry setups. OAuth is preferred for sentry.io.\",\n required: false,\n },\n {\n key: \"SENTRY_SERVER_TOKEN\",\n label: \"Sentry server token (fallback)\",\n description:\n \"Optional server token fallback for existing Sentry deployments.\",\n required: false,\n },\n ],\n oauth: {\n provider: \"sentry\",\n authorizationUrl: \"https://sentry.io/oauth/authorize/\",\n tokenUrl: \"https://sentry.io/oauth/token/\",\n refreshUrl: \"https://sentry.io/oauth/token/\",\n scopes: [\"org:read\", \"project:read\", \"event:read\", \"team:read\"],\n },\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\"analytics\", \"brain\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"granola\",\n label: \"Granola\",\n description:\n \"Meeting notes and transcripts for company memory and follow-up workflows.\",\n credentialKeys: [\n {\n key: \"GRANOLA_API_KEY\",\n label: \"Granola API key\",\n description:\n \"API key for accessible team notes; templates should respect Granola's workspace visibility.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"meetings\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"calendar\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"clips\",\n label: \"Clips\",\n description:\n \"Agent-native Clips exports and recordings for transcript import and searchable meeting context.\",\n credentialKeys: [],\n capabilities: [\"search\", \"import\", \"meetings\"],\n recommendedTemplateUses: [\"brain\", \"clips\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"generic\",\n label: \"Generic\",\n description:\n \"Custom webhooks, CSV exports, transcript drops, and one-off sources that do not need a first-class provider yet.\",\n credentialKeys: [],\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\n \"brain\",\n \"analytics\",\n \"content\",\n \"dispatch\",\n \"forms\",\n ],\n }),\n] as const satisfies readonly WorkspaceConnectionProvider[];\n\nconst PROVIDERS_BY_ID = new Map<\n WorkspaceConnectionProviderId,\n WorkspaceConnectionProvider\n>(WORKSPACE_CONNECTION_PROVIDERS.map((provider) => [provider.id, provider]));\n\nexport function listWorkspaceConnectionProviders(\n options: ListWorkspaceConnectionProvidersOptions = {},\n): WorkspaceConnectionProvider[] {\n return mergeWorkspaceConnectionProviders(options.providerOverrides)\n .filter((provider) => {\n if (\n options.capability &&\n !includesWorkspaceConnectionCapability(\n provider.capabilities,\n options.capability,\n )\n ) {\n return false;\n }\n if (\n options.templateUse &&\n !includesWorkspaceConnectionTemplateUse(\n provider.recommendedTemplateUses,\n options.templateUse,\n )\n ) {\n return false;\n }\n return true;\n })\n .map((provider) => ({ ...provider }));\n}\n\nexport function mergeWorkspaceConnectionProviders(\n overrides: readonly WorkspaceConnectionProvider[] = [],\n): WorkspaceConnectionProvider[] {\n return mergeDefinitionsById(WORKSPACE_CONNECTION_PROVIDERS, overrides);\n}\n\nexport function getWorkspaceConnectionProvider(\n id: string,\n overrides: readonly WorkspaceConnectionProvider[] = [],\n): WorkspaceConnectionProvider | undefined {\n const provider = overrides.length\n ? mergeWorkspaceConnectionProviders(overrides).find(\n (candidate) => candidate.id === id,\n )\n : PROVIDERS_BY_ID.get(id as WorkspaceConnectionProviderId);\n return provider ? { ...provider } : undefined;\n}\n\nexport function isWorkspaceConnectionProviderId(\n id: string,\n): id is WorkspaceConnectionProviderId {\n return PROVIDERS_BY_ID.has(id as WorkspaceConnectionProviderId);\n}\n\nexport function listWorkspaceConnectionProvidersForTemplate(\n templateUse: WorkspaceConnectionTemplateUse,\n providerOverrides: readonly WorkspaceConnectionProvider[] = [],\n): WorkspaceConnectionProvider[] {\n return listWorkspaceConnectionProviders({ templateUse, providerOverrides });\n}\n\nexport function listWorkspaceConnectionProvidersForCapability(\n capability: WorkspaceConnectionCapability,\n providerOverrides: readonly WorkspaceConnectionProvider[] = [],\n): WorkspaceConnectionProvider[] {\n return listWorkspaceConnectionProviders({ capability, providerOverrides });\n}\n\nexport function workspaceConnectionProviderSupports(\n providerOrId: WorkspaceConnectionProvider | string,\n capability: WorkspaceConnectionCapability,\n): boolean {\n const provider =\n typeof providerOrId === \"string\"\n ? getWorkspaceConnectionProvider(providerOrId)\n : providerOrId;\n return provider?.capabilities.includes(capability) ?? false;\n}\n\nfunction includesWorkspaceConnectionCapability(\n capabilities: readonly WorkspaceConnectionCapability[],\n capability: WorkspaceConnectionCapability,\n): boolean {\n return capabilities.includes(capability);\n}\n\nfunction includesWorkspaceConnectionTemplateUse(\n templateUses: readonly WorkspaceConnectionTemplateUse[],\n templateUse: WorkspaceConnectionTemplateUse,\n): boolean {\n return templateUses.includes(templateUse);\n}\nimport { mergeDefinitionsById } from \"../shared/merge-by-id.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/connections/catalog.ts"],"names":[],"mappings":"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","sourcesContent":["export type WorkspaceConnectionCapability =\n | \"search\"\n | \"import\"\n | \"messages\"\n | \"meetings\"\n | \"crm\"\n | \"code\"\n | \"docs\";\n\nexport type WorkspaceConnectionTemplateUse =\n | \"analytics\"\n | \"brain\"\n | \"calendar\"\n | \"clips\"\n | \"content\"\n | \"crm\"\n | \"design\"\n | \"dispatch\"\n | \"forms\"\n | \"mail\"\n | \"slides\";\n\nexport type WorkspaceConnectionProviderId =\n | \"slack\"\n | \"github\"\n | \"figma\"\n | \"notion\"\n | \"gmail\"\n | \"google_drive\"\n | \"hubspot\"\n | \"salesforce\"\n | \"jira\"\n | \"sentry\"\n | \"granola\"\n | \"clips\"\n | \"generic\";\n\nexport interface WorkspaceConnectionCredentialKey {\n key: string;\n label: string;\n description?: string;\n required?: boolean;\n}\n\nexport interface WorkspaceConnectionProvider {\n id: WorkspaceConnectionProviderId;\n label: string;\n description: string;\n credentialKeys: readonly WorkspaceConnectionCredentialKey[];\n capabilities: readonly WorkspaceConnectionCapability[];\n recommendedTemplateUses: readonly WorkspaceConnectionTemplateUse[];\n oauth?: {\n provider: string;\n authorizationUrl: string;\n tokenUrl: string;\n refreshUrl?: string;\n scopes: readonly string[];\n };\n}\n\nexport interface ListWorkspaceConnectionProvidersOptions {\n capability?: WorkspaceConnectionCapability;\n templateUse?: WorkspaceConnectionTemplateUse;\n providerOverrides?: readonly WorkspaceConnectionProvider[];\n}\n\nexport function defineWorkspaceConnectionProvider<\n const T extends WorkspaceConnectionProvider,\n>(provider: T): T {\n return provider;\n}\n\nexport const WORKSPACE_CONNECTION_PROVIDERS = [\n defineWorkspaceConnectionProvider({\n id: \"slack\",\n label: \"Slack\",\n description:\n \"Workspace conversations and channel history for company memory, support workflows, and messaging automations.\",\n credentialKeys: [\n {\n key: \"SLACK_BOT_TOKEN\",\n label: \"Slack bot token (legacy)\",\n description:\n \"Legacy single-workspace fallback. For new messaging automations, connect Slack from Settings → Messaging instead.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"messages\"],\n recommendedTemplateUses: [\"brain\", \"dispatch\", \"analytics\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"github\",\n label: \"GitHub\",\n description:\n \"Repository, issue, pull request, and code context for product memory, engineering workflows, and analytics.\",\n credentialKeys: [\n {\n key: \"GITHUB_TOKEN\",\n label: \"GitHub token (fallback)\",\n description:\n \"Optional fine-grained token fallback. OAuth is preferred for new connections.\",\n required: false,\n },\n ],\n oauth: {\n provider: \"github\",\n authorizationUrl: \"https://github.com/login/oauth/authorize\",\n tokenUrl: \"https://github.com/login/oauth/access_token\",\n scopes: [\"repo\", \"read:org\", \"read:user\", \"user:email\"],\n },\n capabilities: [\"search\", \"import\", \"code\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"analytics\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"figma\",\n label: \"Figma\",\n description:\n \"Design files, frames, components, rendered previews, and library context for creative workflows.\",\n credentialKeys: [\n {\n key: \"FIGMA_ACCESS_TOKEN\",\n label: \"Figma personal access token (fallback)\",\n description:\n \"Optional fallback for local or individual use. Workspace OAuth is preferred.\",\n required: false,\n },\n ],\n oauth: {\n provider: \"figma\",\n authorizationUrl: \"https://www.figma.com/oauth\",\n tokenUrl: \"https://api.figma.com/v1/oauth/token\",\n refreshUrl: \"https://api.figma.com/v1/oauth/token\",\n scopes: [\n \"current_user:read\",\n \"file_content:read\",\n \"file_metadata:read\",\n \"projects:read\",\n ],\n },\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"design\", \"slides\", \"content\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"notion\",\n label: \"Notion\",\n description:\n \"Workspace docs, wikis, pages, and databases for knowledge capture and search.\",\n credentialKeys: [],\n oauth: {\n provider: \"notion\",\n authorizationUrl: \"https://api.notion.com/v1/oauth/authorize\",\n tokenUrl: \"https://api.notion.com/v1/oauth/token\",\n refreshUrl: \"https://api.notion.com/v1/oauth/token\",\n scopes: [],\n },\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"content\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"gmail\",\n label: \"Gmail\",\n description:\n \"Mailbox messages and threads for search, triage, customer context, and agent replies.\",\n credentialKeys: [\n {\n key: \"GOOGLE_CLIENT_ID\",\n label: \"Google OAuth client ID\",\n required: true,\n },\n {\n key: \"GOOGLE_CLIENT_SECRET\",\n label: \"Google OAuth client secret\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"messages\"],\n recommendedTemplateUses: [\"mail\", \"brain\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"google_drive\",\n label: \"Google Drive\",\n description:\n \"Drive files, Docs, Sheets, and Slides for document search and import workflows.\",\n credentialKeys: [\n {\n key: \"GOOGLE_CLIENT_ID\",\n label: \"Google OAuth client ID\",\n required: true,\n },\n {\n key: \"GOOGLE_CLIENT_SECRET\",\n label: \"Google OAuth client secret\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\n \"brain\",\n \"content\",\n \"slides\",\n \"dispatch\",\n \"analytics\",\n ],\n oauth: {\n provider: \"google\",\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\"https://www.googleapis.com/auth/drive.file\"],\n },\n }),\n defineWorkspaceConnectionProvider({\n id: \"hubspot\",\n label: \"HubSpot\",\n description:\n \"CRM records, companies, contacts, deals, and engagement history for customer-aware apps.\",\n credentialKeys: [\n {\n key: \"HUBSPOT_PRIVATE_APP_TOKEN\",\n label: \"HubSpot private app token (fallback)\",\n description:\n \"Optional private app token fallback. OAuth is preferred for new connections.\",\n required: false,\n },\n {\n key: \"HUBSPOT_ACCESS_TOKEN\",\n label: \"HubSpot access token (fallback)\",\n description:\n \"Optional legacy access token fallback for existing HubSpot setups.\",\n required: false,\n },\n ],\n oauth: {\n provider: \"hubspot\",\n authorizationUrl: \"https://app.hubspot.com/oauth/authorize\",\n tokenUrl: \"https://api.hubapi.com/oauth/v3/token\",\n refreshUrl: \"https://api.hubapi.com/oauth/v3/token\",\n scopes: [\n \"oauth\",\n \"crm.objects.contacts.read\",\n \"crm.objects.companies.read\",\n \"crm.objects.deals.read\",\n \"crm.objects.tickets.read\",\n \"crm.schemas.contacts.read\",\n \"crm.schemas.companies.read\",\n \"crm.schemas.deals.read\",\n \"crm.schemas.tickets.read\",\n ],\n },\n capabilities: [\"search\", \"import\", \"crm\"],\n recommendedTemplateUses: [\"analytics\", \"brain\", \"crm\", \"mail\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"salesforce\",\n label: \"Salesforce\",\n description:\n \"CRM accounts, contacts, opportunities, custom objects, and activity history for customer-aware apps.\",\n credentialKeys: [],\n oauth: {\n provider: \"salesforce\",\n authorizationUrl:\n \"https://login.salesforce.com/services/oauth2/authorize\",\n tokenUrl: \"https://login.salesforce.com/services/oauth2/token\",\n refreshUrl: \"https://login.salesforce.com/services/oauth2/token\",\n scopes: [\"api\", \"refresh_token\", \"id\"],\n },\n capabilities: [\"search\", \"import\", \"crm\"],\n recommendedTemplateUses: [\"analytics\", \"brain\", \"crm\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"jira\",\n label: \"Jira Cloud\",\n description:\n \"Projects, issues, sprints, and delivery context for engineering analytics and product workflows.\",\n credentialKeys: [\n {\n key: \"JIRA_BASE_URL\",\n label: \"Jira base URL (fallback)\",\n description:\n \"Optional site URL for API-token fallback connections. OAuth connections discover their site automatically.\",\n required: false,\n },\n {\n key: \"JIRA_USER_EMAIL\",\n label: \"Jira email (fallback)\",\n description:\n \"Optional Atlassian account email for API-token fallback connections.\",\n required: false,\n },\n {\n key: \"JIRA_API_TOKEN\",\n label: \"Jira API token (fallback)\",\n description:\n \"Optional API token fallback for existing Jira Cloud setups. OAuth is preferred for new connections.\",\n required: false,\n },\n ],\n oauth: {\n provider: \"jira\",\n authorizationUrl: \"https://auth.atlassian.com/authorize\",\n tokenUrl: \"https://auth.atlassian.com/oauth/token\",\n refreshUrl: \"https://auth.atlassian.com/oauth/token\",\n scopes: [\"read:jira-work\", \"read:jira-user\", \"offline_access\"],\n },\n capabilities: [\"search\", \"import\", \"code\", \"docs\"],\n recommendedTemplateUses: [\"analytics\", \"brain\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"sentry\",\n label: \"Sentry\",\n description:\n \"Error tracking, performance issues, projects, and release context for engineering analytics.\",\n credentialKeys: [\n {\n key: \"SENTRY_AUTH_TOKEN\",\n label: \"Sentry auth token (fallback)\",\n description:\n \"Optional auth token fallback for self-hosted or local Sentry setups. OAuth is preferred for sentry.io.\",\n required: false,\n },\n {\n key: \"SENTRY_SERVER_TOKEN\",\n label: \"Sentry server token (fallback)\",\n description:\n \"Optional server token fallback for existing Sentry deployments.\",\n required: false,\n },\n ],\n oauth: {\n provider: \"sentry\",\n authorizationUrl: \"https://sentry.io/oauth/authorize/\",\n tokenUrl: \"https://sentry.io/oauth/token/\",\n refreshUrl: \"https://sentry.io/oauth/token/\",\n scopes: [\"org:read\", \"project:read\", \"event:read\", \"team:read\"],\n },\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\"analytics\", \"brain\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"granola\",\n label: \"Granola\",\n description:\n \"Meeting notes and transcripts for company memory and follow-up workflows.\",\n credentialKeys: [\n {\n key: \"GRANOLA_API_KEY\",\n label: \"Granola API key\",\n description:\n \"API key for accessible team notes; templates should respect Granola's workspace visibility.\",\n required: true,\n },\n ],\n capabilities: [\"search\", \"import\", \"meetings\", \"docs\"],\n recommendedTemplateUses: [\"brain\", \"calendar\", \"dispatch\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"clips\",\n label: \"Clips\",\n description:\n \"Agent-native Clips exports and recordings for transcript import and searchable meeting context.\",\n credentialKeys: [],\n capabilities: [\"search\", \"import\", \"meetings\"],\n recommendedTemplateUses: [\"brain\", \"clips\"],\n }),\n defineWorkspaceConnectionProvider({\n id: \"generic\",\n label: \"Generic\",\n description:\n \"Custom webhooks, CSV exports, transcript drops, and one-off sources that do not need a first-class provider yet.\",\n credentialKeys: [],\n capabilities: [\"search\", \"import\", \"docs\"],\n recommendedTemplateUses: [\n \"brain\",\n \"analytics\",\n \"content\",\n \"dispatch\",\n \"forms\",\n ],\n }),\n] as const satisfies readonly WorkspaceConnectionProvider[];\n\nconst PROVIDERS_BY_ID = new Map<\n WorkspaceConnectionProviderId,\n WorkspaceConnectionProvider\n>(WORKSPACE_CONNECTION_PROVIDERS.map((provider) => [provider.id, provider]));\n\nexport function listWorkspaceConnectionProviders(\n options: ListWorkspaceConnectionProvidersOptions = {},\n): WorkspaceConnectionProvider[] {\n return mergeWorkspaceConnectionProviders(options.providerOverrides)\n .filter((provider) => {\n if (\n options.capability &&\n !includesWorkspaceConnectionCapability(\n provider.capabilities,\n options.capability,\n )\n ) {\n return false;\n }\n if (\n options.templateUse &&\n !includesWorkspaceConnectionTemplateUse(\n provider.recommendedTemplateUses,\n options.templateUse,\n )\n ) {\n return false;\n }\n return true;\n })\n .map((provider) => ({ ...provider }));\n}\n\nexport function mergeWorkspaceConnectionProviders(\n overrides: readonly WorkspaceConnectionProvider[] = [],\n): WorkspaceConnectionProvider[] {\n return mergeDefinitionsById(WORKSPACE_CONNECTION_PROVIDERS, overrides);\n}\n\nexport function getWorkspaceConnectionProvider(\n id: string,\n overrides: readonly WorkspaceConnectionProvider[] = [],\n): WorkspaceConnectionProvider | undefined {\n const provider = overrides.length\n ? mergeWorkspaceConnectionProviders(overrides).find(\n (candidate) => candidate.id === id,\n )\n : PROVIDERS_BY_ID.get(id as WorkspaceConnectionProviderId);\n return provider ? { ...provider } : undefined;\n}\n\nexport function isWorkspaceConnectionProviderId(\n id: string,\n): id is WorkspaceConnectionProviderId {\n return PROVIDERS_BY_ID.has(id as WorkspaceConnectionProviderId);\n}\n\nexport function listWorkspaceConnectionProvidersForTemplate(\n templateUse: WorkspaceConnectionTemplateUse,\n providerOverrides: readonly WorkspaceConnectionProvider[] = [],\n): WorkspaceConnectionProvider[] {\n return listWorkspaceConnectionProviders({ templateUse, providerOverrides });\n}\n\nexport function listWorkspaceConnectionProvidersForCapability(\n capability: WorkspaceConnectionCapability,\n providerOverrides: readonly WorkspaceConnectionProvider[] = [],\n): WorkspaceConnectionProvider[] {\n return listWorkspaceConnectionProviders({ capability, providerOverrides });\n}\n\nexport function workspaceConnectionProviderSupports(\n providerOrId: WorkspaceConnectionProvider | string,\n capability: WorkspaceConnectionCapability,\n): boolean {\n const provider =\n typeof providerOrId === \"string\"\n ? getWorkspaceConnectionProvider(providerOrId)\n : providerOrId;\n return provider?.capabilities.includes(capability) ?? false;\n}\n\nfunction includesWorkspaceConnectionCapability(\n capabilities: readonly WorkspaceConnectionCapability[],\n capability: WorkspaceConnectionCapability,\n): boolean {\n return capabilities.includes(capability);\n}\n\nfunction includesWorkspaceConnectionTemplateUse(\n templateUses: readonly WorkspaceConnectionTemplateUse[],\n templateUse: WorkspaceConnectionTemplateUse,\n): boolean {\n return templateUses.includes(templateUse);\n}\nimport { mergeDefinitionsById } from \"../shared/merge-by-id.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-mcp-presets.d.ts","sourceRoot":"","sources":["../../src/eject/remote-mcp-presets.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,yBAAyB,IAAI,gCAAgC,EAG7D,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAqC,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAE7E,cAAc,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"remote-mcp-presets.d.ts","sourceRoot":"","sources":["../../src/eject/remote-mcp-presets.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,yBAAyB,IAAI,gCAAgC,EAG7D,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAqC,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAE7E,cAAc,6CAA6C,CAAC;AAyC5D,eAAO,MAAM,wBAAwB,EAAE,qBAAqB,EA2B3D,CAAC;AAEF,eAAO,MAAM,8BAA8B,yBAA2B,CAAC;AAEvE,wBAAgB,2BAA2B,CACzC,SAAS,GAAE,SAAS,qBAAqB,EAAO,GAC/C,qBAAqB,EAAE,CAKzB;AAED,wBAAgB,yBAAyB,CACvC,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,gCAAgC,CAAC,CAAC,CAAC,CAAC,EAC/D,SAAS,GAAE,SAAS,qBAAqB,EAAO,GAC/C,qBAAqB,EAAE,CAKzB;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,gCAAgC,CAAC,CAAC,CAAC,CAAC,GAC9D,OAAO,CAKT;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,YAAY,GAAE,qBAAqB,EAAgC,GAClE,qBAAqB,EAAE,CAEzB;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,YAAY,GAAE,qBAAqB,EAAgC,GAClE,qBAAqB,GAAG,IAAI,CAE9B;AAQD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,yBAAyB,GAC/B,YAAY,CAKd;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,GAClC,YAAY,CAKd;AAED,KAAK,0BAA0B,GAAG,mBAAmB,GAAG;IACtD,eAAe,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC3C,CAAC;AAEF,wBAAgB,cAAc,CAC5B,KAAK,GAAE,0BAA+B,GACrC,YAAY,CAOd"}
|
|
@@ -2,14 +2,44 @@ import { DEFAULT_MCP_INTEGRATIONS as RUNTIME_DEFAULT_MCP_INTEGRATIONS, McpConnec
|
|
|
2
2
|
import { createElement } from "react";
|
|
3
3
|
export * from "@agent-native/core/client/resources/runtime";
|
|
4
4
|
function preset(id) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const runtimePreset = RUNTIME_DEFAULT_MCP_INTEGRATIONS.find((integration) => integration.id === id);
|
|
6
|
+
if (runtimePreset)
|
|
7
|
+
return { ...runtimePreset };
|
|
8
|
+
if (id === "granola") {
|
|
9
|
+
return {
|
|
10
|
+
id: "granola",
|
|
11
|
+
name: "Granola",
|
|
12
|
+
provider: "granola",
|
|
13
|
+
description: "Search meeting notes, transcripts, and action items.",
|
|
14
|
+
descriptionKey: "mcpIntegrations.catalog.granola.description",
|
|
15
|
+
useCase: "meeting notes, recordings, transcripts, action items, follow-ups",
|
|
16
|
+
useCaseKey: "mcpIntegrations.catalog.granola.useCase",
|
|
17
|
+
url: "https://mcp.granola.ai/mcp",
|
|
18
|
+
authMode: "oauth",
|
|
19
|
+
connectionMode: "oauth",
|
|
20
|
+
availability: "ready",
|
|
21
|
+
verification: "preflight-only",
|
|
22
|
+
logoUrl: "",
|
|
23
|
+
docsUrl: "https://docs.granola.ai/help-center/sharing/integrations/mcp",
|
|
24
|
+
setupNoteKey: "mcpIntegrations.catalog.granola.setupNote",
|
|
25
|
+
keywords: [
|
|
26
|
+
"meetings",
|
|
27
|
+
"meeting notes",
|
|
28
|
+
"recordings",
|
|
29
|
+
"transcripts",
|
|
30
|
+
"action items",
|
|
31
|
+
"follow-ups",
|
|
32
|
+
"decisions",
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
throw new Error(`MCP preset ${id} is missing from the runtime catalog.`);
|
|
8
37
|
}
|
|
9
38
|
export const DEFAULT_MCP_INTEGRATIONS = [
|
|
10
39
|
preset("context7"),
|
|
11
40
|
preset("sentry"),
|
|
12
41
|
preset("notion"),
|
|
42
|
+
preset("granola"),
|
|
13
43
|
preset("semgrep"),
|
|
14
44
|
preset("linear"),
|
|
15
45
|
preset("atlassian"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-mcp-presets.js","sourceRoot":"","sources":["../../src/eject/remote-mcp-presets.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,IAAI,gCAAgC,EAC5D,uBAAuB,IAAI,8BAA8B,EACzD,oBAAoB,IAAI,2BAA2B,EACnD,cAAc,IAAI,qBAAqB,EACvC,qBAAqB,IAAI,4BAA4B,EACrD,yBAAyB,IAAI,gCAAgC,EAC7D,yBAAyB,IAAI,gCAAgC,EAC7D,6BAA6B,EAC7B,2BAA2B,IAAI,kCAAkC,GAKlE,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,aAAa,EAAyC,MAAM,OAAO,CAAC;AAE7E,cAAc,6CAA6C,CAAC;AAE5D,SAAS,MAAM,CAAC,EAAU;IACxB,
|
|
1
|
+
{"version":3,"file":"remote-mcp-presets.js","sourceRoot":"","sources":["../../src/eject/remote-mcp-presets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DEFAULT_MCP_INTEGRATIONS as RUNTIME_DEFAULT_MCP_INTEGRATIONS,\n McpConnectionSuggestion as RuntimeMcpConnectionSuggestion,\n McpIntegrationDialog as RuntimeMcpIntegrationDialog,\n ResourcesPanel as RuntimeResourcesPanel,\n filterMcpIntegrations as filterRuntimeMcpIntegrations,\n findMcpIntegrationForText as findRuntimeMcpIntegrationForText,\n getDefaultMcpIntegrations as getRuntimeDefaultMcpIntegrations,\n isCustomMcpIntegrationEnabled,\n mergeDefaultMcpIntegrations as mergeRuntimeDefaultMcpIntegrations,\n type DefaultMcpIntegration,\n type McpConnectionSuggestionProps,\n type McpIntegrationDialogProps,\n type ResourcesPanelProps,\n} from \"@agent-native/core/client/resources/runtime\";\nimport { createElement, type ComponentType, type ReactElement } from \"react\";\n\nexport * from \"@agent-native/core/client/resources/runtime\";\n\nfunction preset(id: string): DefaultMcpIntegration {\n const runtimePreset = RUNTIME_DEFAULT_MCP_INTEGRATIONS.find(\n (integration) => integration.id === id,\n );\n if (runtimePreset) return { ...runtimePreset };\n\n if (id === \"granola\") {\n return {\n id: \"granola\",\n name: \"Granola\",\n provider: \"granola\",\n description: \"Search meeting notes, transcripts, and action items.\",\n descriptionKey: \"mcpIntegrations.catalog.granola.description\",\n useCase:\n \"meeting notes, recordings, transcripts, action items, follow-ups\",\n useCaseKey: \"mcpIntegrations.catalog.granola.useCase\",\n url: \"https://mcp.granola.ai/mcp\",\n authMode: \"oauth\",\n connectionMode: \"oauth\",\n availability: \"ready\",\n verification: \"preflight-only\",\n logoUrl: \"\",\n docsUrl: \"https://docs.granola.ai/help-center/sharing/integrations/mcp\",\n setupNoteKey: \"mcpIntegrations.catalog.granola.setupNote\",\n keywords: [\n \"meetings\",\n \"meeting notes\",\n \"recordings\",\n \"transcripts\",\n \"action items\",\n \"follow-ups\",\n \"decisions\",\n ],\n };\n }\n\n throw new Error(`MCP preset ${id} is missing from the runtime catalog.`);\n}\n\nexport const DEFAULT_MCP_INTEGRATIONS: DefaultMcpIntegration[] = [\n preset(\"context7\"),\n preset(\"sentry\"),\n preset(\"notion\"),\n preset(\"granola\"),\n preset(\"semgrep\"),\n preset(\"linear\"),\n preset(\"atlassian\"),\n preset(\"supabase\"),\n preset(\"neon\"),\n preset(\"stripe\"),\n preset(\"cloudflare\"),\n preset(\"gitlab\"),\n preset(\"figma\"),\n preset(\"canva\"),\n preset(\"vercel\"),\n preset(\"github\"),\n preset(\"slack\"),\n preset(\"asana\"),\n preset(\"hubspot\"),\n preset(\"intercom\"),\n preset(\"monday\"),\n preset(\"webflow\"),\n preset(\"paypal\"),\n preset(\"box\"),\n preset(\"netlify\"),\n preset(\"zapier\"),\n];\n\nexport const defaultMcpIntegrationOverrides = DEFAULT_MCP_INTEGRATIONS;\n\nexport function mergeDefaultMcpIntegrations(\n overrides: readonly DefaultMcpIntegration[] = [],\n): DefaultMcpIntegration[] {\n return mergeRuntimeDefaultMcpIntegrations([\n ...defaultMcpIntegrationOverrides,\n ...overrides,\n ]);\n}\n\nexport function getDefaultMcpIntegrations(\n config?: Parameters<typeof getRuntimeDefaultMcpIntegrations>[0],\n overrides: readonly DefaultMcpIntegration[] = [],\n): DefaultMcpIntegration[] {\n return getRuntimeDefaultMcpIntegrations(config, [\n ...defaultMcpIntegrationOverrides,\n ...overrides,\n ]);\n}\n\nexport function isMcpIntegrationCatalogAvailable(\n config?: Parameters<typeof getRuntimeDefaultMcpIntegrations>[0],\n): boolean {\n return (\n isCustomMcpIntegrationEnabled(config) ||\n getDefaultMcpIntegrations(config).length > 0\n );\n}\n\nexport function filterMcpIntegrations(\n query: string,\n integrations: DefaultMcpIntegration[] = getDefaultMcpIntegrations(),\n): DefaultMcpIntegration[] {\n return filterRuntimeMcpIntegrations(query, integrations);\n}\n\nexport function findMcpIntegrationForText(\n text: string,\n integrations: DefaultMcpIntegration[] = getDefaultMcpIntegrations(),\n): DefaultMcpIntegration | null {\n return findRuntimeMcpIntegrationForText(text, integrations);\n}\n\nfunction withUiIntegrations(\n integrations: readonly DefaultMcpIntegration[] = [],\n): DefaultMcpIntegration[] {\n return mergeDefaultMcpIntegrations(integrations);\n}\n\nexport function McpIntegrationDialog(\n props: McpIntegrationDialogProps,\n): ReactElement {\n return createElement(RuntimeMcpIntegrationDialog, {\n ...props,\n integrations: withUiIntegrations(props.integrations),\n });\n}\n\nexport function McpConnectionSuggestion(\n props: McpConnectionSuggestionProps,\n): ReactElement {\n return createElement(RuntimeMcpConnectionSuggestion, {\n ...props,\n integrations: withUiIntegrations(props.integrations),\n });\n}\n\ntype EjectedResourcesPanelProps = ResourcesPanelProps & {\n mcpIntegrations?: DefaultMcpIntegration[];\n};\n\nexport function ResourcesPanel(\n props: EjectedResourcesPanelProps = {},\n): ReactElement {\n const Component =\n RuntimeResourcesPanel as ComponentType<EjectedResourcesPanelProps>;\n return createElement(Component, {\n ...props,\n mcpIntegrations: withUiIntegrations(props.mcpIntegrations),\n });\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Require generated apps to choose how collaboration events are scoped.
|
|
3
|
+
* Legacy `resourceType` callers remain valid during the access-option
|
|
4
|
+
* migration; this guard only reports implicit createCollabPlugin configs.
|
|
5
|
+
*/
|
|
6
|
+
import type { GuardResult, GuardScanOptions } from "./types.js";
|
|
7
|
+
export declare function scanExplicitCollabAccess(options: GuardScanOptions): GuardResult;
|
|
8
|
+
//# sourceMappingURL=explicit-collab-access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explicit-collab-access.d.ts","sourceRoot":"","sources":["../../src/guards/explicit-collab-access.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAgB,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA6K9E,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,gBAAgB,GACxB,WAAW,CAyCb"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Require generated apps to choose how collaboration events are scoped.
|
|
3
|
+
* Legacy `resourceType` callers remain valid during the access-option
|
|
4
|
+
* migration; this guard only reports implicit createCollabPlugin configs.
|
|
5
|
+
*/
|
|
6
|
+
import { lineColForOffset, readFileSafe, relPosix, walk, } from "./scan-utils.js";
|
|
7
|
+
const SOURCE_FILE = /\.(?:[cm]?[jt]s|[jt]sx)$/;
|
|
8
|
+
const CALL = /\bcreateCollabPlugin\s*\(/g;
|
|
9
|
+
const EXPLICIT_ACCESS_KEYS = new Set(["access", "resourceType"]);
|
|
10
|
+
const FINDING_MESSAGE = 'createCollabPlugin must declare access explicitly. Use access: { mode: "resource", resourceType: "..." } for scoped resources or access: { mode: "all-authenticated" } when deployment-wide delivery is intentional. Legacy resourceType is also accepted during migration.';
|
|
11
|
+
function maskCommentsAndStrings(contents) {
|
|
12
|
+
const masked = contents.split("");
|
|
13
|
+
for (let i = 0; i < contents.length; i++) {
|
|
14
|
+
const char = contents[i];
|
|
15
|
+
if (char === '"' || char === "'" || char === "`") {
|
|
16
|
+
const end = skipQuoted(contents, i);
|
|
17
|
+
for (let cursor = i; cursor < end; cursor++) {
|
|
18
|
+
if (masked[cursor] !== "\n")
|
|
19
|
+
masked[cursor] = " ";
|
|
20
|
+
}
|
|
21
|
+
i = end - 1;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (contents.startsWith("//", i)) {
|
|
25
|
+
const newline = contents.indexOf("\n", i + 2);
|
|
26
|
+
const end = newline === -1 ? contents.length : newline;
|
|
27
|
+
for (let cursor = i; cursor < end; cursor++)
|
|
28
|
+
masked[cursor] = " ";
|
|
29
|
+
i = end - 1;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (contents.startsWith("/*", i)) {
|
|
33
|
+
const commentEnd = contents.indexOf("*/", i + 2);
|
|
34
|
+
const end = commentEnd === -1 ? contents.length : commentEnd + 2;
|
|
35
|
+
for (let cursor = i; cursor < end; cursor++) {
|
|
36
|
+
if (masked[cursor] !== "\n")
|
|
37
|
+
masked[cursor] = " ";
|
|
38
|
+
}
|
|
39
|
+
i = end - 1;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return masked.join("");
|
|
43
|
+
}
|
|
44
|
+
function skipQuoted(contents, start) {
|
|
45
|
+
const quote = contents[start];
|
|
46
|
+
let escaped = false;
|
|
47
|
+
for (let i = start + 1; i < contents.length; i++) {
|
|
48
|
+
const char = contents[i];
|
|
49
|
+
if (escaped) {
|
|
50
|
+
escaped = false;
|
|
51
|
+
}
|
|
52
|
+
else if (char === "\\") {
|
|
53
|
+
escaped = true;
|
|
54
|
+
}
|
|
55
|
+
else if (char === quote) {
|
|
56
|
+
return i + 1;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return contents.length;
|
|
60
|
+
}
|
|
61
|
+
function skipTrivia(contents, start) {
|
|
62
|
+
let i = start;
|
|
63
|
+
while (i < contents.length) {
|
|
64
|
+
if (/\s/.test(contents[i] ?? "")) {
|
|
65
|
+
i++;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (contents.startsWith("//", i)) {
|
|
69
|
+
const newline = contents.indexOf("\n", i + 2);
|
|
70
|
+
i = newline === -1 ? contents.length : newline + 1;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (contents.startsWith("/*", i)) {
|
|
74
|
+
const end = contents.indexOf("*/", i + 2);
|
|
75
|
+
i = end === -1 ? contents.length : end + 2;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
return i;
|
|
81
|
+
}
|
|
82
|
+
function findObjectEnd(contents, start) {
|
|
83
|
+
let depth = 0;
|
|
84
|
+
for (let i = start; i < contents.length; i++) {
|
|
85
|
+
const char = contents[i];
|
|
86
|
+
if (char === '"' || char === "'" || char === "`") {
|
|
87
|
+
i = skipQuoted(contents, i) - 1;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (contents.startsWith("//", i)) {
|
|
91
|
+
const newline = contents.indexOf("\n", i + 2);
|
|
92
|
+
i = newline === -1 ? contents.length : newline;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (contents.startsWith("/*", i)) {
|
|
96
|
+
const end = contents.indexOf("*/", i + 2);
|
|
97
|
+
i = end === -1 ? contents.length : end + 1;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (char === "{")
|
|
101
|
+
depth++;
|
|
102
|
+
if (char === "}" && --depth === 0)
|
|
103
|
+
return i;
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
function hasExplicitAccessProperty(contents, objectStart, objectEnd) {
|
|
108
|
+
let braceDepth = 0;
|
|
109
|
+
let bracketDepth = 0;
|
|
110
|
+
let parenDepth = 0;
|
|
111
|
+
let expectingProperty = true;
|
|
112
|
+
for (let i = objectStart + 1; i < objectEnd; i++) {
|
|
113
|
+
i = skipTrivia(contents, i);
|
|
114
|
+
if (i >= objectEnd)
|
|
115
|
+
break;
|
|
116
|
+
const char = contents[i];
|
|
117
|
+
if (expectingProperty && (char === '"' || char === "'")) {
|
|
118
|
+
const tokenEnd = skipQuoted(contents, i);
|
|
119
|
+
const key = contents.slice(i + 1, tokenEnd - 1);
|
|
120
|
+
const afterKey = skipTrivia(contents, tokenEnd);
|
|
121
|
+
if (EXPLICIT_ACCESS_KEYS.has(key) && contents[afterKey] === ":") {
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
i = tokenEnd - 1;
|
|
125
|
+
expectingProperty = false;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (expectingProperty && /[A-Za-z_$]/.test(char ?? "")) {
|
|
129
|
+
let tokenEnd = i + 1;
|
|
130
|
+
while (/[A-Za-z0-9_$]/.test(contents[tokenEnd] ?? ""))
|
|
131
|
+
tokenEnd++;
|
|
132
|
+
const key = contents.slice(i, tokenEnd);
|
|
133
|
+
const afterKey = skipTrivia(contents, tokenEnd);
|
|
134
|
+
const delimiter = contents[afterKey];
|
|
135
|
+
if (EXPLICIT_ACCESS_KEYS.has(key) &&
|
|
136
|
+
(delimiter === ":" || delimiter === "," || afterKey >= objectEnd)) {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
i = tokenEnd - 1;
|
|
140
|
+
expectingProperty = false;
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (char === '"' || char === "'" || char === "`") {
|
|
144
|
+
i = skipQuoted(contents, i) - 1;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (contents.startsWith("//", i) || contents.startsWith("/*", i)) {
|
|
148
|
+
i = skipTrivia(contents, i) - 1;
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (char === "{")
|
|
152
|
+
braceDepth++;
|
|
153
|
+
else if (char === "}")
|
|
154
|
+
braceDepth--;
|
|
155
|
+
else if (char === "[")
|
|
156
|
+
bracketDepth++;
|
|
157
|
+
else if (char === "]")
|
|
158
|
+
bracketDepth--;
|
|
159
|
+
else if (char === "(")
|
|
160
|
+
parenDepth++;
|
|
161
|
+
else if (char === ")")
|
|
162
|
+
parenDepth--;
|
|
163
|
+
else if (char === "," &&
|
|
164
|
+
braceDepth === 0 &&
|
|
165
|
+
bracketDepth === 0 &&
|
|
166
|
+
parenDepth === 0) {
|
|
167
|
+
expectingProperty = true;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
export function scanExplicitCollabAccess(options) {
|
|
173
|
+
const { root } = options;
|
|
174
|
+
const findings = [];
|
|
175
|
+
for (const file of walk(root)) {
|
|
176
|
+
if (!SOURCE_FILE.test(file) || file.endsWith(".d.ts"))
|
|
177
|
+
continue;
|
|
178
|
+
const contents = readFileSafe(file);
|
|
179
|
+
if (contents === null || !contents.includes("createCollabPlugin"))
|
|
180
|
+
continue;
|
|
181
|
+
const searchable = maskCommentsAndStrings(contents);
|
|
182
|
+
CALL.lastIndex = 0;
|
|
183
|
+
let match;
|
|
184
|
+
while ((match = CALL.exec(searchable)) !== null) {
|
|
185
|
+
const callStart = match.index;
|
|
186
|
+
const objectStart = skipTrivia(contents, CALL.lastIndex);
|
|
187
|
+
if (contents[objectStart] !== "{") {
|
|
188
|
+
if (contents[objectStart] === ")") {
|
|
189
|
+
const { line } = lineColForOffset(contents, callStart);
|
|
190
|
+
findings.push({
|
|
191
|
+
file: relPosix(root, file),
|
|
192
|
+
line,
|
|
193
|
+
message: FINDING_MESSAGE,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
const objectEnd = findObjectEnd(contents, objectStart);
|
|
199
|
+
if (objectEnd === null)
|
|
200
|
+
continue;
|
|
201
|
+
CALL.lastIndex = objectEnd + 1;
|
|
202
|
+
if (hasExplicitAccessProperty(contents, objectStart, objectEnd))
|
|
203
|
+
continue;
|
|
204
|
+
const { line } = lineColForOffset(contents, callStart);
|
|
205
|
+
findings.push({
|
|
206
|
+
file: relPosix(root, file),
|
|
207
|
+
line,
|
|
208
|
+
message: FINDING_MESSAGE,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return { name: "explicit-collab-access", findings };
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=explicit-collab-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explicit-collab-access.js","sourceRoot":"","sources":["../../src/guards/explicit-collab-access.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Require generated apps to choose how collaboration events are scoped.\n * Legacy `resourceType` callers remain valid during the access-option\n * migration; this guard only reports implicit createCollabPlugin configs.\n */\n\nimport {\n lineColForOffset,\n readFileSafe,\n relPosix,\n walk,\n} from \"./scan-utils.js\";\nimport type { GuardFinding, GuardResult, GuardScanOptions } from \"./types.js\";\n\nconst SOURCE_FILE = /\\.(?:[cm]?[jt]s|[jt]sx)$/;\nconst CALL = /\\bcreateCollabPlugin\\s*\\(/g;\nconst EXPLICIT_ACCESS_KEYS = new Set([\"access\", \"resourceType\"]);\nconst FINDING_MESSAGE =\n 'createCollabPlugin must declare access explicitly. Use access: { mode: \"resource\", resourceType: \"...\" } for scoped resources or access: { mode: \"all-authenticated\" } when deployment-wide delivery is intentional. Legacy resourceType is also accepted during migration.';\n\nfunction maskCommentsAndStrings(contents: string): string {\n const masked = contents.split(\"\");\n for (let i = 0; i < contents.length; i++) {\n const char = contents[i];\n if (char === '\"' || char === \"'\" || char === \"`\") {\n const end = skipQuoted(contents, i);\n for (let cursor = i; cursor < end; cursor++) {\n if (masked[cursor] !== \"\\n\") masked[cursor] = \" \";\n }\n i = end - 1;\n continue;\n }\n if (contents.startsWith(\"//\", i)) {\n const newline = contents.indexOf(\"\\n\", i + 2);\n const end = newline === -1 ? contents.length : newline;\n for (let cursor = i; cursor < end; cursor++) masked[cursor] = \" \";\n i = end - 1;\n continue;\n }\n if (contents.startsWith(\"/*\", i)) {\n const commentEnd = contents.indexOf(\"*/\", i + 2);\n const end = commentEnd === -1 ? contents.length : commentEnd + 2;\n for (let cursor = i; cursor < end; cursor++) {\n if (masked[cursor] !== \"\\n\") masked[cursor] = \" \";\n }\n i = end - 1;\n }\n }\n return masked.join(\"\");\n}\n\nfunction skipQuoted(contents: string, start: number): number {\n const quote = contents[start];\n let escaped = false;\n for (let i = start + 1; i < contents.length; i++) {\n const char = contents[i];\n if (escaped) {\n escaped = false;\n } else if (char === \"\\\\\") {\n escaped = true;\n } else if (char === quote) {\n return i + 1;\n }\n }\n return contents.length;\n}\n\nfunction skipTrivia(contents: string, start: number): number {\n let i = start;\n while (i < contents.length) {\n if (/\\s/.test(contents[i] ?? \"\")) {\n i++;\n continue;\n }\n if (contents.startsWith(\"//\", i)) {\n const newline = contents.indexOf(\"\\n\", i + 2);\n i = newline === -1 ? contents.length : newline + 1;\n continue;\n }\n if (contents.startsWith(\"/*\", i)) {\n const end = contents.indexOf(\"*/\", i + 2);\n i = end === -1 ? contents.length : end + 2;\n continue;\n }\n break;\n }\n return i;\n}\n\nfunction findObjectEnd(contents: string, start: number): number | null {\n let depth = 0;\n for (let i = start; i < contents.length; i++) {\n const char = contents[i];\n if (char === '\"' || char === \"'\" || char === \"`\") {\n i = skipQuoted(contents, i) - 1;\n continue;\n }\n if (contents.startsWith(\"//\", i)) {\n const newline = contents.indexOf(\"\\n\", i + 2);\n i = newline === -1 ? contents.length : newline;\n continue;\n }\n if (contents.startsWith(\"/*\", i)) {\n const end = contents.indexOf(\"*/\", i + 2);\n i = end === -1 ? contents.length : end + 1;\n continue;\n }\n if (char === \"{\") depth++;\n if (char === \"}\" && --depth === 0) return i;\n }\n return null;\n}\n\nfunction hasExplicitAccessProperty(\n contents: string,\n objectStart: number,\n objectEnd: number,\n): boolean {\n let braceDepth = 0;\n let bracketDepth = 0;\n let parenDepth = 0;\n let expectingProperty = true;\n\n for (let i = objectStart + 1; i < objectEnd; i++) {\n i = skipTrivia(contents, i);\n if (i >= objectEnd) break;\n const char = contents[i];\n\n if (expectingProperty && (char === '\"' || char === \"'\")) {\n const tokenEnd = skipQuoted(contents, i);\n const key = contents.slice(i + 1, tokenEnd - 1);\n const afterKey = skipTrivia(contents, tokenEnd);\n if (EXPLICIT_ACCESS_KEYS.has(key) && contents[afterKey] === \":\") {\n return true;\n }\n i = tokenEnd - 1;\n expectingProperty = false;\n continue;\n }\n\n if (expectingProperty && /[A-Za-z_$]/.test(char ?? \"\")) {\n let tokenEnd = i + 1;\n while (/[A-Za-z0-9_$]/.test(contents[tokenEnd] ?? \"\")) tokenEnd++;\n const key = contents.slice(i, tokenEnd);\n const afterKey = skipTrivia(contents, tokenEnd);\n const delimiter = contents[afterKey];\n if (\n EXPLICIT_ACCESS_KEYS.has(key) &&\n (delimiter === \":\" || delimiter === \",\" || afterKey >= objectEnd)\n ) {\n return true;\n }\n i = tokenEnd - 1;\n expectingProperty = false;\n continue;\n }\n\n if (char === '\"' || char === \"'\" || char === \"`\") {\n i = skipQuoted(contents, i) - 1;\n continue;\n }\n if (contents.startsWith(\"//\", i) || contents.startsWith(\"/*\", i)) {\n i = skipTrivia(contents, i) - 1;\n continue;\n }\n\n if (char === \"{\") braceDepth++;\n else if (char === \"}\") braceDepth--;\n else if (char === \"[\") bracketDepth++;\n else if (char === \"]\") bracketDepth--;\n else if (char === \"(\") parenDepth++;\n else if (char === \")\") parenDepth--;\n else if (\n char === \",\" &&\n braceDepth === 0 &&\n bracketDepth === 0 &&\n parenDepth === 0\n ) {\n expectingProperty = true;\n }\n }\n\n return false;\n}\n\nexport function scanExplicitCollabAccess(\n options: GuardScanOptions,\n): GuardResult {\n const { root } = options;\n const findings: GuardFinding[] = [];\n\n for (const file of walk(root)) {\n if (!SOURCE_FILE.test(file) || file.endsWith(\".d.ts\")) continue;\n const contents = readFileSafe(file);\n if (contents === null || !contents.includes(\"createCollabPlugin\")) continue;\n const searchable = maskCommentsAndStrings(contents);\n\n CALL.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = CALL.exec(searchable)) !== null) {\n const callStart = match.index;\n const objectStart = skipTrivia(contents, CALL.lastIndex);\n if (contents[objectStart] !== \"{\") {\n if (contents[objectStart] === \")\") {\n const { line } = lineColForOffset(contents, callStart);\n findings.push({\n file: relPosix(root, file),\n line,\n message: FINDING_MESSAGE,\n });\n }\n continue;\n }\n const objectEnd = findObjectEnd(contents, objectStart);\n if (objectEnd === null) continue;\n CALL.lastIndex = objectEnd + 1;\n\n if (hasExplicitAccessProperty(contents, objectStart, objectEnd)) continue;\n const { line } = lineColForOffset(contents, callStart);\n findings.push({\n file: relPosix(root, file),\n line,\n message: FINDING_MESSAGE,\n });\n }\n }\n\n return { name: \"explicit-collab-access\", findings };\n}\n"]}
|
package/dist/guards/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
export { scanDbToolScoping } from "./db-tool-scoping.js";
|
|
13
13
|
export type { DbToolScopingOptions } from "./db-tool-scoping.js";
|
|
14
|
+
export { scanExplicitCollabAccess } from "./explicit-collab-access.js";
|
|
14
15
|
export { scanDrizzlePush } from "./no-drizzle-push.js";
|
|
15
16
|
export { scanEnvCredentials } from "./no-env-credentials.js";
|
|
16
17
|
export { scanEnvMutation } from "./no-env-mutation.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/guards/index.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* outside the CLI.
|
|
11
11
|
*/
|
|
12
12
|
export { scanDbToolScoping } from "./db-tool-scoping.js";
|
|
13
|
+
export { scanExplicitCollabAccess } from "./explicit-collab-access.js";
|
|
13
14
|
export { scanDrizzlePush } from "./no-drizzle-push.js";
|
|
14
15
|
export { scanEnvCredentials } from "./no-env-credentials.js";
|
|
15
16
|
export { scanEnvMutation } from "./no-env-mutation.js";
|
package/dist/guards/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["/**\n * `agent-native doctor`'s guard functions — the source-code safety\n * invariants ported from this monorepo's `scripts/guard-*.mjs` CI guards\n * (see report `advisor-plans/reports/005-doctor-design.md` for the\n * classification and per-guard parameterization). Each guard is a pure,\n * synchronous function that scans an app root and returns a `GuardResult`.\n *\n * `../cli/doctor.ts` is the only in-package caller; this module is also\n * published under the `./guards` export subpath for advanced/CI use\n * outside the CLI.\n */\n\nexport { scanDbToolScoping } from \"./db-tool-scoping.js\";\nexport type { DbToolScopingOptions } from \"./db-tool-scoping.js\";\nexport { scanDrizzlePush } from \"./no-drizzle-push.js\";\nexport { scanEnvCredentials } from \"./no-env-credentials.js\";\nexport { scanEnvMutation } from \"./no-env-mutation.js\";\nexport { scanLocalhostFallback } from \"./no-localhost-fallback.js\";\nexport type { LocalhostFallbackOptions } from \"./no-localhost-fallback.js\";\nexport { scanUnscopedCredentials } from \"./no-unscoped-credentials.js\";\nexport { scanUnscopedQueries } from \"./no-unscoped-queries.js\";\nexport type { UnscopedQueriesOptions } from \"./no-unscoped-queries.js\";\nexport type { GuardFinding, GuardResult, GuardScanOptions } from \"./types.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["/**\n * `agent-native doctor`'s guard functions — the source-code safety\n * invariants ported from this monorepo's `scripts/guard-*.mjs` CI guards\n * (see report `advisor-plans/reports/005-doctor-design.md` for the\n * classification and per-guard parameterization). Each guard is a pure,\n * synchronous function that scans an app root and returns a `GuardResult`.\n *\n * `../cli/doctor.ts` is the only in-package caller; this module is also\n * published under the `./guards` export subpath for advanced/CI use\n * outside the CLI.\n */\n\nexport { scanDbToolScoping } from \"./db-tool-scoping.js\";\nexport type { DbToolScopingOptions } from \"./db-tool-scoping.js\";\nexport { scanExplicitCollabAccess } from \"./explicit-collab-access.js\";\nexport { scanDrizzlePush } from \"./no-drizzle-push.js\";\nexport { scanEnvCredentials } from \"./no-env-credentials.js\";\nexport { scanEnvMutation } from \"./no-env-mutation.js\";\nexport { scanLocalhostFallback } from \"./no-localhost-fallback.js\";\nexport type { LocalhostFallbackOptions } from \"./no-localhost-fallback.js\";\nexport { scanUnscopedCredentials } from \"./no-unscoped-credentials.js\";\nexport { scanUnscopedQueries } from \"./no-unscoped-queries.js\";\nexport type { UnscopedQueriesOptions } from \"./no-unscoped-queries.js\";\nexport type { GuardFinding, GuardResult, GuardScanOptions } from \"./types.js\";\n"]}
|
|
@@ -26,6 +26,43 @@ declare const messages: {
|
|
|
26
26
|
openResourceSettings: string;
|
|
27
27
|
backHome: string;
|
|
28
28
|
};
|
|
29
|
+
agentResources: {
|
|
30
|
+
openDocs: string;
|
|
31
|
+
backToResources: string;
|
|
32
|
+
createFile: {
|
|
33
|
+
nameLabel: string;
|
|
34
|
+
namePlaceholder: string;
|
|
35
|
+
menuDescription: string;
|
|
36
|
+
};
|
|
37
|
+
files: {
|
|
38
|
+
title: string;
|
|
39
|
+
description: string;
|
|
40
|
+
};
|
|
41
|
+
instructions: {
|
|
42
|
+
title: string;
|
|
43
|
+
description: string;
|
|
44
|
+
};
|
|
45
|
+
agents: {
|
|
46
|
+
title: string;
|
|
47
|
+
description: string;
|
|
48
|
+
};
|
|
49
|
+
memory: {
|
|
50
|
+
title: string;
|
|
51
|
+
description: string;
|
|
52
|
+
};
|
|
53
|
+
skills: {
|
|
54
|
+
title: string;
|
|
55
|
+
description: string;
|
|
56
|
+
};
|
|
57
|
+
learnings: {
|
|
58
|
+
title: string;
|
|
59
|
+
description: string;
|
|
60
|
+
};
|
|
61
|
+
remoteAgents: {
|
|
62
|
+
title: string;
|
|
63
|
+
description: string;
|
|
64
|
+
};
|
|
65
|
+
};
|
|
29
66
|
featureFlags: {
|
|
30
67
|
title: string;
|
|
31
68
|
description: string;
|
|
@@ -253,6 +290,7 @@ declare const messages: {
|
|
|
253
290
|
startWithOpenAiKey: string;
|
|
254
291
|
start: string;
|
|
255
292
|
keepDictating: string;
|
|
293
|
+
rememberPreference: string;
|
|
256
294
|
showChat: string;
|
|
257
295
|
hideChat: string;
|
|
258
296
|
end: string;
|
|
@@ -711,6 +749,11 @@ declare const messages: {
|
|
|
711
749
|
useCase: string;
|
|
712
750
|
setupNote: string;
|
|
713
751
|
};
|
|
752
|
+
granola: {
|
|
753
|
+
description: string;
|
|
754
|
+
useCase: string;
|
|
755
|
+
setupNote: string;
|
|
756
|
+
};
|
|
714
757
|
semgrep: {
|
|
715
758
|
description: string;
|
|
716
759
|
useCase: string;
|