@agent-native/core 0.107.2 → 0.109.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +24 -0
- package/corpus/core/docs/content/actions.mdx +48 -0
- package/corpus/core/docs/content/locales/ar-SA/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/de-DE/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/es-ES/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/fr-FR/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/hi-IN/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/ja-JP/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/ko-KR/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/pt-BR/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/zh-CN/actions.mdx +38 -0
- package/corpus/core/docs/content/locales/zh-TW/actions.mdx +38 -0
- package/corpus/core/package.json +5 -1
- package/corpus/core/src/a2a/client.ts +140 -17
- package/corpus/core/src/a2a/handlers.ts +60 -0
- package/corpus/core/src/a2a/index.ts +6 -1
- package/corpus/core/src/a2a/invoke.ts +68 -1
- package/corpus/core/src/a2a/server.ts +13 -1
- package/corpus/core/src/a2a/types.ts +16 -0
- package/corpus/core/src/a2a-claims.ts +52 -0
- package/corpus/core/src/action.ts +7 -2
- package/corpus/core/src/agent/production-agent.ts +10 -4
- package/corpus/core/src/audit/record.ts +6 -0
- package/corpus/core/src/client/AssistantChat.tsx +648 -603
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +31 -4
- package/corpus/core/src/client/agent-chat-adapter.ts +23 -37
- package/corpus/core/src/client/agent-sidebar-state.ts +4 -0
- package/corpus/core/src/client/analytics.ts +84 -0
- package/corpus/core/src/client/chat/message-components.tsx +94 -22
- package/corpus/core/src/client/chat/tool-call-display.tsx +170 -47
- package/corpus/core/src/client/chat/use-agent-chat-lifecycle-tracking.ts +74 -0
- package/corpus/core/src/client/chat-thread-url.ts +11 -0
- package/corpus/core/src/client/error-capture.ts +12 -0
- package/corpus/core/src/client/extensions/ExtensionSlot.tsx +37 -1
- package/corpus/core/src/client/feature-flags/FeatureFlagsPanel.tsx +519 -0
- package/corpus/core/src/client/feature-flags/helpers.ts +77 -0
- package/corpus/core/src/client/feature-flags/index.ts +13 -0
- package/corpus/core/src/client/feature-flags/types.ts +29 -0
- package/corpus/core/src/client/feature-flags/use-feature-flag.ts +26 -0
- package/corpus/core/src/client/index.ts +13 -0
- package/corpus/core/src/client/route-chunk-recovery.ts +20 -8
- package/corpus/core/src/client/session-replay.ts +31 -0
- package/corpus/core/src/extensions/actions.ts +2 -14
- package/corpus/core/src/extensions/routes.ts +1 -1
- package/corpus/core/src/extensions/store.ts +1 -1
- package/corpus/core/src/feature-flags/a2a-action-route.ts +56 -0
- package/corpus/core/src/feature-flags/actions/get-feature-flags.ts +24 -0
- package/corpus/core/src/feature-flags/actions/list-feature-flags.ts +69 -0
- package/corpus/core/src/feature-flags/actions/set-feature-flag.ts +89 -0
- package/corpus/core/src/feature-flags/index.ts +21 -0
- package/corpus/core/src/feature-flags/permissions.ts +53 -0
- package/corpus/core/src/feature-flags/plugin.ts +44 -0
- package/corpus/core/src/feature-flags/registry.ts +96 -0
- package/corpus/core/src/feature-flags/store.ts +176 -0
- package/corpus/core/src/index.ts +15 -0
- package/corpus/core/src/localization/default-messages.ts +50 -0
- package/corpus/core/src/mcp/build-server.ts +2 -2
- package/corpus/core/src/progress/actions.ts +4 -2
- package/corpus/core/src/provider-api/index.ts +205 -105
- package/corpus/core/src/scripts/call-agent.ts +137 -17
- package/corpus/core/src/server/action-discovery.ts +12 -0
- package/corpus/core/src/server/action-routes.ts +47 -5
- package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +40 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +31 -0
- package/corpus/core/src/server/index.ts +1 -0
- package/corpus/core/src/settings/org-settings.ts +13 -0
- package/corpus/core/src/settings/store.ts +57 -0
- package/corpus/core/src/styles/agent-conversation.css +7 -0
- package/corpus/core/src/templates/default/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/core/src/templates/default/AGENTS.md +1 -0
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +21 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +19 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +19 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +20 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +19 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +19 -0
- package/corpus/core/src/templates/headless/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +28 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
- package/corpus/core/src/templates/workspace-core/AGENTS.md +1 -1
- package/corpus/core/src/templates/workspace-root/AGENTS.md +1 -1
- package/corpus/core/src/vite/action-types-plugin.ts +12 -0
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +29 -10
- package/corpus/templates/analytics/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +54 -23
- package/corpus/templates/analytics/.builder/skills/apollo/SKILL.md +19 -41
- package/corpus/templates/analytics/.builder/skills/commonroom/SKILL.md +20 -35
- package/corpus/templates/analytics/.builder/skills/github/SKILL.md +23 -67
- package/corpus/templates/analytics/.builder/skills/pylon/SKILL.md +25 -43
- package/corpus/templates/analytics/AGENTS.md +37 -16
- package/corpus/templates/analytics/actions/account-deep-dive.ts +1 -0
- package/corpus/templates/analytics/actions/configure-gong-native-insights.ts +29 -0
- package/corpus/templates/analytics/actions/content-calendar-schema.ts +8 -4
- package/corpus/templates/analytics/actions/content-calendar.ts +12 -4
- package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +2 -1
- package/corpus/templates/analytics/actions/gong-calls.ts +113 -22
- package/corpus/templates/analytics/actions/gong-native-insights.ts +166 -0
- package/corpus/templates/analytics/actions/hubspot-deals.ts +190 -46
- package/corpus/templates/analytics/actions/list-workspace-feature-flags.ts +15 -0
- package/corpus/templates/analytics/actions/navigate.ts +2 -2
- package/corpus/templates/analytics/actions/pylon-issues.ts +123 -0
- package/corpus/templates/analytics/actions/set-workspace-feature-flag.ts +45 -0
- package/corpus/templates/analytics/actions/slack-messages.ts +179 -27
- package/corpus/templates/analytics/actions/view-screen.ts +13 -0
- package/corpus/templates/analytics/app/components/agents/FeatureFlagsFleetPanel.tsx +243 -0
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +48 -152
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +11 -3
- package/corpus/templates/analytics/app/components/ui/chart.tsx +1 -1
- package/corpus/templates/analytics/app/hooks/use-chart-tooltip-flip.ts +21 -6
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +3 -1
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +30 -0
- package/corpus/templates/analytics/app/i18n-data.ts +385 -0
- package/corpus/templates/analytics/app/pages/Agents.tsx +22 -2
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +181 -30
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +6 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +4 -3
- package/corpus/templates/analytics/changelog/2026-07-17-dashboard-editors-can-add-shared-extensions-or-opt-into-per-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-dashboard-extensions-show-a-loading-skeleton.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-errors-now-group-repeat-failures-consistently-and-keep-priva.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-gong-transcript-reviews-now-batch-bounded-call-windows-for-f.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-hubspot-deal-filters-now-run-in-hubspot-before-paging-result.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-manage-feature-flag-rollouts-across-your-organization-s-apps.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-notion-content-calendars-now-discover-the-matching-database-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-pylon-dashboard-reads-now-use-the-paginated-issue-search-api.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-17-slack-reads-no-longer-join-channels-and-report-pagination-coverage.md +6 -0
- package/corpus/templates/analytics/server/handlers/notion.ts +14 -3
- package/corpus/templates/analytics/server/handlers/slack.ts +182 -29
- package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +2 -6
- package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +6 -2
- package/corpus/templates/analytics/server/lib/db-admin-connections.ts +13 -5
- package/corpus/templates/analytics/server/lib/error-capture.ts +75 -8
- package/corpus/templates/analytics/server/lib/gong-native-policy.ts +72 -0
- package/corpus/templates/analytics/server/lib/gong.ts +54 -66
- package/corpus/templates/analytics/server/lib/hubspot.ts +40 -3
- package/corpus/templates/analytics/server/lib/notion.ts +83 -8
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +4 -0
- package/corpus/templates/analytics/server/lib/slack.ts +242 -90
- package/corpus/templates/analytics/server/lib/workspace-feature-flags.ts +347 -0
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +3 -3
- package/corpus/templates/analytics/server/routes/api/pylon/accounts.get.ts +42 -1
- package/corpus/templates/analytics/server/routes/api/pylon/issues.get.ts +71 -1
- package/corpus/templates/analytics/server/routes/api/test-connection.post.ts +44 -4
- package/corpus/templates/assets/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/brain/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/calendar/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/chat/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/clips/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +19 -1
- package/corpus/templates/clips/app/components/library/create-folder-dialog.tsx +123 -0
- package/corpus/templates/clips/app/components/library/library-grid.tsx +42 -4
- package/corpus/templates/clips/app/components/library/recording-card.tsx +30 -0
- package/corpus/templates/clips/app/entry.client.tsx +6 -1
- package/corpus/templates/clips/app/i18n/ar-SA.ts +12 -1
- package/corpus/templates/clips/app/i18n/de-DE.ts +12 -1
- package/corpus/templates/clips/app/i18n/en-US.ts +12 -1
- package/corpus/templates/clips/app/i18n/es-ES.ts +11 -1
- package/corpus/templates/clips/app/i18n/fr-FR.ts +11 -1
- package/corpus/templates/clips/app/i18n/hi-IN.ts +10 -1
- package/corpus/templates/clips/app/i18n/ja-JP.ts +12 -1
- package/corpus/templates/clips/app/i18n/ko-KR.ts +11 -1
- package/corpus/templates/clips/app/i18n/pt-BR.ts +11 -1
- package/corpus/templates/clips/app/i18n/zh-CN.ts +11 -1
- package/corpus/templates/clips/app/i18n/zh-TW.ts +11 -1
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +72 -1
- package/corpus/templates/clips/changelog/2026-07-17-choose-which-workspace-receives-new-clips-recordings-and-des.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-17-create-folders-directly-from-the-move-menu.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-17-failed-desktop-uploads-now-offer-a-direct-way-to-reopen-clip.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +1 -1
- package/corpus/templates/clips/server/plugins/feature-flags.ts +11 -0
- package/corpus/templates/clips/shared/feature-flags.ts +30 -37
- package/corpus/templates/content/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/content/app/entry.client.tsx +6 -1
- package/corpus/templates/design/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/design/AGENTS.md +5 -3
- package/corpus/templates/design/actions/add-fusion-screens.ts +4 -6
- package/corpus/templates/design/actions/apply-fusion-edits.ts +4 -6
- package/corpus/templates/design/actions/create-fusion-app.ts +5 -4
- package/corpus/templates/design/actions/deploy-fusion-app.ts +4 -3
- package/corpus/templates/design/actions/get-fusion-deploy-status.ts +4 -6
- package/corpus/templates/design/actions/list-fusion-edits.ts +4 -3
- package/corpus/templates/design/actions/push-fusion-app.ts +4 -6
- package/corpus/templates/design/actions/queue-fusion-edit.ts +4 -3
- package/corpus/templates/design/actions/send-fusion-message.ts +4 -6
- package/corpus/templates/design/actions/sync-fusion-app.ts +4 -3
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +1 -1
- package/corpus/templates/design/app/pages/Index.tsx +8 -6
- package/corpus/templates/design/server/plugins/feature-flags.ts +5 -0
- package/corpus/templates/design/shared/full-app.ts +10 -7
- package/corpus/templates/dispatch/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/dispatch/AGENTS.md +5 -0
- package/corpus/templates/dispatch/changelog/2026-07-17-apps-page-links-to-other-available-apps.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-17-curated-template-remixes.md +6 -0
- package/corpus/templates/forms/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/macros/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/mail/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/mail/app/entry.client.tsx +6 -1
- package/corpus/templates/plan/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/slides/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +11 -7
- package/corpus/templates/slides/.env.example +0 -1
- package/corpus/templates/slides/AGENTS.md +4 -0
- package/corpus/templates/slides/DEVELOPING.md +2 -2
- package/corpus/templates/slides/actions/index-design-system-with-builder.ts +1 -1
- package/corpus/templates/slides/actions/logo-config.ts +6 -7
- package/corpus/templates/slides/actions/search-images.ts +11 -39
- package/corpus/templates/slides/actions/search-logos.ts +5 -52
- package/corpus/templates/slides/app/components/editor/ImageSearchPanel.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/LogoSearchPanel.tsx +16 -26
- package/corpus/templates/slides/app/entry.client.tsx +6 -1
- package/corpus/templates/slides/server/lib/media-search-providers.ts +216 -0
- package/corpus/templates/slides/server/register-secrets.ts +30 -0
- package/corpus/templates/tasks/.agents/skills/feature-flags/SKILL.md +169 -0
- package/dist/a2a/client.d.ts +38 -1
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +81 -12
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +47 -0
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/index.d.ts +4 -4
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +2 -2
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/invoke.d.ts +26 -2
- package/dist/a2a/invoke.d.ts.map +1 -1
- package/dist/a2a/invoke.js +30 -1
- package/dist/a2a/invoke.js.map +1 -1
- package/dist/a2a/server.d.ts.map +1 -1
- package/dist/a2a/server.js +14 -1
- package/dist/a2a/server.js.map +1 -1
- package/dist/a2a/types.d.ts +12 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/a2a-claims.d.ts +10 -0
- package/dist/a2a-claims.d.ts.map +1 -0
- package/dist/a2a-claims.js +41 -0
- package/dist/a2a-claims.js.map +1 -0
- package/dist/action.d.ts +7 -2
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js.map +1 -1
- package/dist/agent/production-agent.d.ts +5 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +5 -3
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/audit/record.d.ts +3 -0
- package/dist/audit/record.d.ts.map +1 -1
- package/dist/audit/record.js +3 -0
- package/dist/audit/record.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +14 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +158 -136
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +27 -4
- 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 +21 -39
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-sidebar-state.d.ts +1 -0
- package/dist/client/agent-sidebar-state.d.ts.map +1 -1
- package/dist/client/agent-sidebar-state.js +4 -0
- package/dist/client/agent-sidebar-state.js.map +1 -1
- package/dist/client/analytics.d.ts +14 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +67 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +8 -0
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +62 -19
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +6 -0
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +83 -14
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts +8 -0
- package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts.map +1 -0
- package/dist/client/chat/use-agent-chat-lifecycle-tracking.js +51 -0
- package/dist/client/chat/use-agent-chat-lifecycle-tracking.js.map +1 -0
- package/dist/client/chat-thread-url.d.ts +2 -0
- package/dist/client/chat-thread-url.d.ts.map +1 -0
- package/dist/client/chat-thread-url.js +12 -0
- package/dist/client/chat-thread-url.js.map +1 -0
- package/dist/client/error-capture.d.ts.map +1 -1
- package/dist/client/error-capture.js +7 -0
- package/dist/client/error-capture.js.map +1 -1
- package/dist/client/extensions/ExtensionSlot.d.ts +3 -1
- package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionSlot.js +28 -3
- package/dist/client/extensions/ExtensionSlot.js.map +1 -1
- package/dist/client/feature-flags/FeatureFlagsPanel.d.ts +10 -0
- package/dist/client/feature-flags/FeatureFlagsPanel.d.ts.map +1 -0
- package/dist/client/feature-flags/FeatureFlagsPanel.js +143 -0
- package/dist/client/feature-flags/FeatureFlagsPanel.js.map +1 -0
- package/dist/client/feature-flags/helpers.d.ts +16 -0
- package/dist/client/feature-flags/helpers.d.ts.map +1 -0
- package/dist/client/feature-flags/helpers.js +50 -0
- package/dist/client/feature-flags/helpers.js.map +1 -0
- package/dist/client/feature-flags/index.d.ts +5 -0
- package/dist/client/feature-flags/index.d.ts.map +1 -0
- package/dist/client/feature-flags/index.js +4 -0
- package/dist/client/feature-flags/index.js.map +1 -0
- package/dist/client/feature-flags/types.d.ts +27 -0
- package/dist/client/feature-flags/types.d.ts.map +1 -0
- package/dist/client/feature-flags/types.js +2 -0
- package/dist/client/feature-flags/types.js.map +1 -0
- package/dist/client/feature-flags/use-feature-flag.d.ts +8 -0
- package/dist/client/feature-flags/use-feature-flag.d.ts.map +1 -0
- package/dist/client/feature-flags/use-feature-flag.js +15 -0
- package/dist/client/feature-flags/use-feature-flag.js.map +1 -0
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/route-chunk-recovery.d.ts.map +1 -1
- package/dist/client/route-chunk-recovery.js +14 -9
- package/dist/client/route-chunk-recovery.js.map +1 -1
- package/dist/client/session-replay.d.ts +15 -0
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +20 -0
- package/dist/client/session-replay.js.map +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +2 -10
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +1 -1
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/store.js +1 -1
- package/dist/extensions/store.js.map +1 -1
- package/dist/feature-flags/a2a-action-route.d.ts +14 -0
- package/dist/feature-flags/a2a-action-route.d.ts.map +1 -0
- package/dist/feature-flags/a2a-action-route.js +50 -0
- package/dist/feature-flags/a2a-action-route.js.map +1 -0
- package/dist/feature-flags/actions/get-feature-flags.d.ts +3 -0
- package/dist/feature-flags/actions/get-feature-flags.d.ts.map +1 -0
- package/dist/feature-flags/actions/get-feature-flags.js +18 -0
- package/dist/feature-flags/actions/get-feature-flags.js.map +1 -0
- package/dist/feature-flags/actions/list-feature-flags.d.ts +28 -0
- package/dist/feature-flags/actions/list-feature-flags.d.ts.map +1 -0
- package/dist/feature-flags/actions/list-feature-flags.js +60 -0
- package/dist/feature-flags/actions/list-feature-flags.js.map +1 -0
- package/dist/feature-flags/actions/set-feature-flag.d.ts +26 -0
- package/dist/feature-flags/actions/set-feature-flag.d.ts.map +1 -0
- package/dist/feature-flags/actions/set-feature-flag.js +78 -0
- package/dist/feature-flags/actions/set-feature-flag.js.map +1 -0
- package/dist/feature-flags/index.d.ts +5 -0
- package/dist/feature-flags/index.d.ts.map +1 -0
- package/dist/feature-flags/index.js +5 -0
- package/dist/feature-flags/index.js.map +1 -0
- package/dist/feature-flags/permissions.d.ts +13 -0
- package/dist/feature-flags/permissions.d.ts.map +1 -0
- package/dist/feature-flags/permissions.js +37 -0
- package/dist/feature-flags/permissions.js.map +1 -0
- package/dist/feature-flags/plugin.d.ts +17 -0
- package/dist/feature-flags/plugin.d.ts.map +1 -0
- package/dist/feature-flags/plugin.js +29 -0
- package/dist/feature-flags/plugin.js.map +1 -0
- package/dist/feature-flags/registry.d.ts +23 -0
- package/dist/feature-flags/registry.d.ts.map +1 -0
- package/dist/feature-flags/registry.js +59 -0
- package/dist/feature-flags/registry.js.map +1 -0
- package/dist/feature-flags/store.d.ts +31 -0
- package/dist/feature-flags/store.d.ts.map +1 -0
- package/dist/feature-flags/store.js +124 -0
- package/dist/feature-flags/store.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +45 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +45 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/build-server.d.ts +2 -0
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +2 -2
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/progress/actions.d.ts.map +1 -1
- package/dist/progress/actions.js +3 -2
- package/dist/progress/actions.js.map +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +91 -8
- package/dist/provider-api/index.js.map +1 -1
- package/dist/resources/handlers.d.ts +3 -3
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +107 -16
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +12 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/action-routes.d.ts +3 -0
- package/dist/server/action-routes.d.ts.map +1 -1
- package/dist/server/action-routes.js +45 -5
- package/dist/server/action-routes.js.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.d.ts +6 -0
- package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.js +27 -0
- package/dist/server/agent-chat/action-filters-a2a.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +27 -1
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/settings/org-settings.d.ts +2 -0
- package/dist/settings/org-settings.d.ts.map +1 -1
- package/dist/settings/org-settings.js +5 -1
- package/dist/settings/org-settings.js.map +1 -1
- package/dist/settings/store.d.ts +8 -0
- package/dist/settings/store.d.ts.map +1 -1
- package/dist/settings/store.js +48 -0
- package/dist/settings/store.js.map +1 -1
- package/dist/styles/agent-conversation.css +7 -0
- package/dist/templates/chat/.agents/skills/feature-flags/SKILL.md +169 -0
- package/dist/templates/default/.agents/skills/feature-flags/SKILL.md +169 -0
- package/dist/templates/default/AGENTS.md +1 -0
- package/dist/templates/default/app/i18n/ar-SA.ts +20 -0
- package/dist/templates/default/app/i18n/de-DE.ts +20 -0
- package/dist/templates/default/app/i18n/en-US.ts +20 -0
- package/dist/templates/default/app/i18n/es-ES.ts +20 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +21 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +19 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +20 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +19 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +20 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +19 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +19 -0
- package/dist/templates/headless/.agents/skills/feature-flags/SKILL.md +169 -0
- package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +28 -0
- package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +169 -0
- package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
- package/dist/templates/workspace-core/AGENTS.md +1 -1
- package/dist/templates/workspace-root/AGENTS.md +1 -1
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +12 -0
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/docs/content/actions.mdx +48 -0
- package/docs/content/locales/ar-SA/actions.mdx +38 -0
- package/docs/content/locales/de-DE/actions.mdx +38 -0
- package/docs/content/locales/es-ES/actions.mdx +38 -0
- package/docs/content/locales/fr-FR/actions.mdx +38 -0
- package/docs/content/locales/hi-IN/actions.mdx +38 -0
- package/docs/content/locales/ja-JP/actions.mdx +38 -0
- package/docs/content/locales/ko-KR/actions.mdx +38 -0
- package/docs/content/locales/pt-BR/actions.mdx +38 -0
- package/docs/content/locales/zh-CN/actions.mdx +38 -0
- package/docs/content/locales/zh-TW/actions.mdx +38 -0
- package/package.json +5 -1
- package/src/templates/chat/.agents/skills/feature-flags/SKILL.md +169 -0
- package/src/templates/default/.agents/skills/feature-flags/SKILL.md +169 -0
- package/src/templates/default/AGENTS.md +1 -0
- package/src/templates/default/app/i18n/ar-SA.ts +20 -0
- package/src/templates/default/app/i18n/de-DE.ts +20 -0
- package/src/templates/default/app/i18n/en-US.ts +20 -0
- package/src/templates/default/app/i18n/es-ES.ts +20 -0
- package/src/templates/default/app/i18n/fr-FR.ts +21 -0
- package/src/templates/default/app/i18n/hi-IN.ts +19 -0
- package/src/templates/default/app/i18n/ja-JP.ts +20 -0
- package/src/templates/default/app/i18n/ko-KR.ts +19 -0
- package/src/templates/default/app/i18n/pt-BR.ts +20 -0
- package/src/templates/default/app/i18n/zh-CN.ts +19 -0
- package/src/templates/default/app/i18n/zh-TW.ts +19 -0
- package/src/templates/headless/.agents/skills/feature-flags/SKILL.md +169 -0
- package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +28 -0
- package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +169 -0
- package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
- package/src/templates/workspace-core/AGENTS.md +1 -1
- package/src/templates/workspace-root/AGENTS.md +1 -1
- package/corpus/templates/analytics/server/handlers/github.ts +0 -200
- package/corpus/templates/analytics/server/handlers/pylon.ts +0 -43
- package/corpus/templates/analytics/server/lib/apollo.ts +0 -167
- package/corpus/templates/analytics/server/lib/commonroom.ts +0 -149
- package/corpus/templates/analytics/server/lib/github.ts +0 -660
- package/corpus/templates/analytics/server/lib/mixpanel.ts +0 -156
- package/corpus/templates/analytics/server/lib/posthog.ts +0 -194
- package/corpus/templates/analytics/server/lib/pylon.ts +0 -109
- package/corpus/templates/analytics/server/routes/api/github/graphql.post.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/issue.get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/org-prs.get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/pr.get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/prs.get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/github/search.get.ts +0 -1
- package/corpus/templates/clips/actions/get-feature-flags.ts +0 -30
- package/corpus/templates/slides/actions/fetch-logos.ts +0 -90
- package/corpus/templates/slides/actions/image-search.ts +0 -64
- package/corpus/templates/slides/actions/import-github.ts +0 -182
- package/corpus/templates/slides/actions/logo-lookup.ts +0 -113
|
@@ -404,7 +404,7 @@ export function matchesGongCallQuery(call: GongCall, query: string): boolean {
|
|
|
404
404
|
|
|
405
405
|
function isExternalCall(call: GongCall): boolean {
|
|
406
406
|
const scope = (call as Record<string, unknown>).scope;
|
|
407
|
-
return typeof scope !== "string" || scope === "
|
|
407
|
+
return typeof scope !== "string" || scope.toLowerCase() === "external";
|
|
408
408
|
}
|
|
409
409
|
|
|
410
410
|
function partyMatchesQuery(
|
|
@@ -437,11 +437,6 @@ function partyMatchesQuery(
|
|
|
437
437
|
);
|
|
438
438
|
}
|
|
439
439
|
|
|
440
|
-
const extensivePartyCache = new Map<
|
|
441
|
-
string,
|
|
442
|
-
{ name: string; emailAddress?: string; affiliation?: string }[]
|
|
443
|
-
>();
|
|
444
|
-
|
|
445
440
|
export interface GongCallSearchResult {
|
|
446
441
|
calls: Array<GongCall & { matchedQueries?: string[] }>;
|
|
447
442
|
limit: number;
|
|
@@ -487,6 +482,38 @@ function addMatchedQuery(
|
|
|
487
482
|
});
|
|
488
483
|
}
|
|
489
484
|
|
|
485
|
+
function normalizeExtensiveCall(value: unknown): GongCall | null {
|
|
486
|
+
if (!value || typeof value !== "object") return null;
|
|
487
|
+
const record = value as Record<string, unknown>;
|
|
488
|
+
const metadata =
|
|
489
|
+
record.metaData && typeof record.metaData === "object"
|
|
490
|
+
? (record.metaData as Record<string, unknown>)
|
|
491
|
+
: record;
|
|
492
|
+
const id = typeof metadata.id === "string" ? metadata.id : "";
|
|
493
|
+
const started = typeof metadata.started === "string" ? metadata.started : "";
|
|
494
|
+
if (!id || !started) return null;
|
|
495
|
+
const parties = Array.isArray(record.parties)
|
|
496
|
+
? record.parties.map((party) => {
|
|
497
|
+
const item = party as Record<string, unknown>;
|
|
498
|
+
return {
|
|
499
|
+
name: typeof item.name === "string" ? item.name : "",
|
|
500
|
+
...(typeof item.emailAddress === "string"
|
|
501
|
+
? { emailAddress: item.emailAddress }
|
|
502
|
+
: {}),
|
|
503
|
+
...(typeof item.affiliation === "string"
|
|
504
|
+
? { affiliation: item.affiliation }
|
|
505
|
+
: {}),
|
|
506
|
+
};
|
|
507
|
+
})
|
|
508
|
+
: [];
|
|
509
|
+
return {
|
|
510
|
+
...metadata,
|
|
511
|
+
id,
|
|
512
|
+
started,
|
|
513
|
+
parties,
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
|
|
490
517
|
export async function searchCallsForQueries(
|
|
491
518
|
queries: string[],
|
|
492
519
|
days = 90,
|
|
@@ -515,75 +542,36 @@ export async function searchCallsForQueries(
|
|
|
515
542
|
let searchedCallCount = 0;
|
|
516
543
|
let cursor: string | undefined;
|
|
517
544
|
do {
|
|
518
|
-
const
|
|
519
|
-
|
|
520
|
-
if (cursor) params.set("cursor", cursor);
|
|
521
|
-
const data = await apiGet<{
|
|
522
|
-
calls?: GongCall[];
|
|
545
|
+
const data = await apiPost<{
|
|
546
|
+
calls?: unknown[];
|
|
523
547
|
records?: { cursor?: string; totalRecords?: number };
|
|
524
|
-
}>(
|
|
525
|
-
|
|
548
|
+
}>("/calls/extensive", {
|
|
549
|
+
filter: {
|
|
550
|
+
fromDateTime,
|
|
551
|
+
...(options.toDateTime ? { toDateTime: options.toDateTime } : {}),
|
|
552
|
+
},
|
|
553
|
+
contentSelector: { exposedFields: { parties: true } },
|
|
554
|
+
...(cursor ? { cursor } : {}),
|
|
555
|
+
});
|
|
556
|
+
const calls = (data.calls ?? [])
|
|
557
|
+
.map(normalizeExtensiveCall)
|
|
558
|
+
.filter((call): call is GongCall => Boolean(call))
|
|
559
|
+
.filter(isExternalCall);
|
|
526
560
|
searchedCallCount += calls.length;
|
|
527
561
|
cursor = data.records?.cursor;
|
|
528
562
|
|
|
529
|
-
const remainingForExtensive: GongCall[] = [];
|
|
530
563
|
for (const call of calls) {
|
|
531
|
-
|
|
564
|
+
const parties = call.parties ?? [];
|
|
532
565
|
for (const query of normalizedQueries) {
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
566
|
+
const titleMatches = matchesGongCallQuery(
|
|
567
|
+
{ ...call, parties: [] },
|
|
568
|
+
query,
|
|
569
|
+
);
|
|
570
|
+
if (titleMatches || partyMatchesQuery(parties, query)) {
|
|
571
|
+
addMatchedQuery(matches, call, query, parties);
|
|
536
572
|
}
|
|
537
573
|
}
|
|
538
|
-
if (!matched) {
|
|
539
|
-
remainingForExtensive.push(call);
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
for (let i = 0; i < remainingForExtensive.length; i += 100) {
|
|
544
574
|
if (!options.exhaustive && matches.size >= normalizedLimit) break;
|
|
545
|
-
const batch = remainingForExtensive.slice(i, i + 100);
|
|
546
|
-
const uncached = batch.filter(
|
|
547
|
-
(call) => !extensivePartyCache.has(call.id),
|
|
548
|
-
);
|
|
549
|
-
if (uncached.length) {
|
|
550
|
-
try {
|
|
551
|
-
const data = await apiPost<{ calls?: any[] }>(
|
|
552
|
-
"/calls/extensive",
|
|
553
|
-
{
|
|
554
|
-
filter: { callIds: uncached.map((call) => call.id) },
|
|
555
|
-
contentSelector: { exposedFields: { parties: true } },
|
|
556
|
-
},
|
|
557
|
-
`extensive-parties-batch:${uncached.map((call) => call.id).join(",")}`,
|
|
558
|
-
);
|
|
559
|
-
for (const call of data.calls ?? []) {
|
|
560
|
-
const id = call.metaData?.id;
|
|
561
|
-
if (!id) continue;
|
|
562
|
-
extensivePartyCache.set(
|
|
563
|
-
id,
|
|
564
|
-
(call.parties ?? []).map((party: any) => ({
|
|
565
|
-
name: party.name ?? "",
|
|
566
|
-
emailAddress: party.emailAddress ?? undefined,
|
|
567
|
-
affiliation: party.affiliation ?? undefined,
|
|
568
|
-
})),
|
|
569
|
-
);
|
|
570
|
-
}
|
|
571
|
-
} catch {
|
|
572
|
-
// Title matches already cover the obvious path. If extensive lookup
|
|
573
|
-
// fails, return those instead of failing the entire account search.
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
for (const call of batch) {
|
|
578
|
-
if (!options.exhaustive && matches.size >= normalizedLimit) break;
|
|
579
|
-
const parties = extensivePartyCache.get(call.id) ?? [];
|
|
580
|
-
if (!parties.length) continue;
|
|
581
|
-
for (const query of normalizedQueries) {
|
|
582
|
-
if (partyMatchesQuery(parties, query)) {
|
|
583
|
-
addMatchedQuery(matches, call, query, parties);
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
575
|
}
|
|
588
576
|
} while (cursor && (options.exhaustive || matches.size < normalizedLimit));
|
|
589
577
|
|
|
@@ -8,6 +8,22 @@ import {
|
|
|
8
8
|
} from "./provider-credentials";
|
|
9
9
|
|
|
10
10
|
const API_BASE = "https://api.hubapi.com";
|
|
11
|
+
const HUBSPOT_SEARCH_MIN_INTERVAL_MS = 200;
|
|
12
|
+
|
|
13
|
+
let hubspotSearchSchedule = Promise.resolve();
|
|
14
|
+
let nextHubSpotSearchAt = 0;
|
|
15
|
+
|
|
16
|
+
async function waitForHubSpotSearchSlot(): Promise<void> {
|
|
17
|
+
const scheduled = hubspotSearchSchedule.then(async () => {
|
|
18
|
+
const delay = Math.max(0, nextHubSpotSearchAt - Date.now());
|
|
19
|
+
if (delay > 0) {
|
|
20
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
21
|
+
}
|
|
22
|
+
nextHubSpotSearchAt = Date.now() + HUBSPOT_SEARCH_MIN_INTERVAL_MS;
|
|
23
|
+
});
|
|
24
|
+
hubspotSearchSchedule = scheduled.catch(() => undefined);
|
|
25
|
+
await scheduled;
|
|
26
|
+
}
|
|
11
27
|
|
|
12
28
|
// In-memory cache
|
|
13
29
|
const cache = new Map<string, { data: unknown; ts: number }>();
|
|
@@ -89,6 +105,10 @@ async function apiPost<T>(
|
|
|
89
105
|
return cached.data as T;
|
|
90
106
|
}
|
|
91
107
|
|
|
108
|
+
if (path.endsWith("/search")) {
|
|
109
|
+
await waitForHubSpotSearchSlot();
|
|
110
|
+
}
|
|
111
|
+
|
|
92
112
|
const res = await hubspotFetch(`${API_BASE}${path}`, {
|
|
93
113
|
method: "POST",
|
|
94
114
|
headers: {
|
|
@@ -164,6 +184,18 @@ export interface Deal {
|
|
|
164
184
|
};
|
|
165
185
|
}
|
|
166
186
|
|
|
187
|
+
export interface HubSpotSearchFilter {
|
|
188
|
+
propertyName: string;
|
|
189
|
+
operator: string;
|
|
190
|
+
value?: string;
|
|
191
|
+
values?: string[];
|
|
192
|
+
highValue?: string;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export interface HubSpotSearchFilterGroup {
|
|
196
|
+
filters: HubSpotSearchFilter[];
|
|
197
|
+
}
|
|
198
|
+
|
|
167
199
|
export interface HubSpotOwner {
|
|
168
200
|
id: string;
|
|
169
201
|
email?: string;
|
|
@@ -398,6 +430,7 @@ async function resolveObjectProperties(
|
|
|
398
430
|
export async function searchHubSpotObjects(options: {
|
|
399
431
|
objectType: HubSpotObjectType;
|
|
400
432
|
query?: string;
|
|
433
|
+
filterGroups?: HubSpotSearchFilterGroup[];
|
|
401
434
|
properties?: string[];
|
|
402
435
|
limit?: number;
|
|
403
436
|
after?: string;
|
|
@@ -408,19 +441,23 @@ export async function searchHubSpotObjects(options: {
|
|
|
408
441
|
properties: string[];
|
|
409
442
|
}> {
|
|
410
443
|
const objectType = options.objectType;
|
|
411
|
-
const limit = Math.max(1, Math.min(
|
|
444
|
+
const limit = Math.max(1, Math.min(200, options.limit ?? 25));
|
|
412
445
|
const query = options.query?.trim();
|
|
446
|
+
const filterGroups = options.filterGroups?.filter(
|
|
447
|
+
(group) => group.filters.length > 0,
|
|
448
|
+
);
|
|
413
449
|
const properties = await resolveObjectProperties(
|
|
414
450
|
objectType,
|
|
415
451
|
options.properties ?? [],
|
|
416
452
|
);
|
|
417
453
|
|
|
418
|
-
if (query) {
|
|
454
|
+
if (query || filterGroups?.length) {
|
|
419
455
|
const body: Record<string, unknown> = {
|
|
420
|
-
query,
|
|
421
456
|
limit,
|
|
422
457
|
properties,
|
|
423
458
|
};
|
|
459
|
+
if (query) body.query = query;
|
|
460
|
+
if (filterGroups?.length) body.filterGroups = filterGroups;
|
|
424
461
|
if (options.after) body.after = options.after;
|
|
425
462
|
const data = await apiPost<HubSpotObjectListResponse>(
|
|
426
463
|
`/crm/v3/objects/${objectType}/search`,
|
|
@@ -7,7 +7,12 @@ import { resolveAnalyticsProviderCredential } from "./provider-credentials";
|
|
|
7
7
|
|
|
8
8
|
const NOTION_API = "https://api.notion.com/v1";
|
|
9
9
|
const NOTION_VERSION = "2022-06-28";
|
|
10
|
-
const
|
|
10
|
+
const CONTENT_DATABASE_REQUIRED_PROPERTIES = [
|
|
11
|
+
"Topic",
|
|
12
|
+
"Status",
|
|
13
|
+
"Publish Date",
|
|
14
|
+
] as const;
|
|
15
|
+
const MAX_DATABASE_DISCOVERY_PAGES = 10;
|
|
11
16
|
|
|
12
17
|
// Cache for Notion data (refreshed less frequently)
|
|
13
18
|
const contentCalendarCache = new Map<
|
|
@@ -15,6 +20,10 @@ const contentCalendarCache = new Map<
|
|
|
15
20
|
{ entries: ContentCalendarEntry[]; ts: number }
|
|
16
21
|
>();
|
|
17
22
|
const CACHE_TTL_MS = 10 * 60 * 1000; // 10 minutes
|
|
23
|
+
const contentDatabaseCache = new Map<
|
|
24
|
+
string,
|
|
25
|
+
{ databaseId: string; ts: number }
|
|
26
|
+
>();
|
|
18
27
|
|
|
19
28
|
// Page block cache
|
|
20
29
|
const pageCache = new Map<string, { data: NotionPageData; ts: number }>();
|
|
@@ -116,6 +125,66 @@ function extractProp(props: any, name: string): string {
|
|
|
116
125
|
}
|
|
117
126
|
}
|
|
118
127
|
|
|
128
|
+
async function resolveContentDatabaseId(
|
|
129
|
+
requestedDatabaseId?: string,
|
|
130
|
+
): Promise<string> {
|
|
131
|
+
const requested = requestedDatabaseId?.trim();
|
|
132
|
+
if (requested) return requested;
|
|
133
|
+
|
|
134
|
+
const scope = credentialCacheScope("NOTION_API_KEY");
|
|
135
|
+
const cached = contentDatabaseCache.get(scope);
|
|
136
|
+
if (cached && Date.now() - cached.ts < CACHE_TTL_MS) {
|
|
137
|
+
return cached.databaseId;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const candidates: Array<{ id: string; score: number }> = [];
|
|
141
|
+
let startCursor: string | undefined;
|
|
142
|
+
for (let page = 0; page < MAX_DATABASE_DISCOVERY_PAGES; page += 1) {
|
|
143
|
+
const result = (await notionPost("/search", {
|
|
144
|
+
filter: { property: "object", value: "database" },
|
|
145
|
+
page_size: 100,
|
|
146
|
+
...(startCursor ? { start_cursor: startCursor } : {}),
|
|
147
|
+
})) as any;
|
|
148
|
+
|
|
149
|
+
for (const database of result.results ?? []) {
|
|
150
|
+
const properties = database.properties ?? {};
|
|
151
|
+
if (
|
|
152
|
+
!CONTENT_DATABASE_REQUIRED_PROPERTIES.every(
|
|
153
|
+
(name) => name in properties,
|
|
154
|
+
)
|
|
155
|
+
) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const title = richTextToString(database.title ?? []).toLowerCase();
|
|
159
|
+
const titleScore = /content/.test(title) ? 2 : 0;
|
|
160
|
+
const calendarScore = /calendar/.test(title) ? 1 : 0;
|
|
161
|
+
candidates.push({ id: database.id, score: titleScore + calendarScore });
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
startCursor = result.next_cursor ?? undefined;
|
|
165
|
+
if (!result.has_more || !startCursor) break;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
candidates.sort((a, b) => b.score - a.score || a.id.localeCompare(b.id));
|
|
169
|
+
const best = candidates[0];
|
|
170
|
+
if (!best) {
|
|
171
|
+
throw new Error(
|
|
172
|
+
"No accessible Notion database has the required Topic, Status, and Publish Date properties. Pass databaseId explicitly or share the content calendar database with the integration.",
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
if (candidates[1]?.score === best.score) {
|
|
176
|
+
throw new Error(
|
|
177
|
+
"Multiple Notion databases match the content calendar schema. Pass databaseId explicitly to choose one.",
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
contentDatabaseCache.set(scope, {
|
|
182
|
+
databaseId: best.id,
|
|
183
|
+
ts: Date.now(),
|
|
184
|
+
});
|
|
185
|
+
return best.id;
|
|
186
|
+
}
|
|
187
|
+
|
|
119
188
|
export interface ContentCalendarEntry {
|
|
120
189
|
id: string;
|
|
121
190
|
title: string;
|
|
@@ -135,8 +204,11 @@ export interface ContentCalendarEntry {
|
|
|
135
204
|
}
|
|
136
205
|
|
|
137
206
|
// Fetch all content calendar entries, paginating through results
|
|
138
|
-
export async function getContentCalendar(
|
|
139
|
-
|
|
207
|
+
export async function getContentCalendar(
|
|
208
|
+
requestedDatabaseId?: string,
|
|
209
|
+
): Promise<ContentCalendarEntry[]> {
|
|
210
|
+
const databaseId = await resolveContentDatabaseId(requestedDatabaseId);
|
|
211
|
+
const calendarCacheKey = `${credentialCacheScope("NOTION_API_KEY")}:${databaseId}`;
|
|
140
212
|
const cached = contentCalendarCache.get(calendarCacheKey);
|
|
141
213
|
if (cached && Date.now() - cached.ts < CACHE_TTL_MS) {
|
|
142
214
|
return cached.entries;
|
|
@@ -151,7 +223,7 @@ export async function getContentCalendar(): Promise<ContentCalendarEntry[]> {
|
|
|
151
223
|
if (startCursor) body.start_cursor = startCursor;
|
|
152
224
|
|
|
153
225
|
const result = (await notionPost(
|
|
154
|
-
`/databases/${
|
|
226
|
+
`/databases/${encodeURIComponent(databaseId)}/query`,
|
|
155
227
|
body,
|
|
156
228
|
)) as any;
|
|
157
229
|
|
|
@@ -290,10 +362,13 @@ export async function getNotionPage(pageId: string): Promise<NotionPageData> {
|
|
|
290
362
|
return data;
|
|
291
363
|
}
|
|
292
364
|
|
|
293
|
-
export async function getContentCalendarSchema(
|
|
294
|
-
|
|
295
|
-
> {
|
|
296
|
-
const
|
|
365
|
+
export async function getContentCalendarSchema(
|
|
366
|
+
requestedDatabaseId?: string,
|
|
367
|
+
): Promise<{ name: string; type: string }[]> {
|
|
368
|
+
const databaseId = await resolveContentDatabaseId(requestedDatabaseId);
|
|
369
|
+
const db = (await notionGet(
|
|
370
|
+
`/databases/${encodeURIComponent(databaseId)}`,
|
|
371
|
+
)) as any;
|
|
297
372
|
const props = db.properties ?? {};
|
|
298
373
|
return Object.entries(props).map(([name, def]: [string, any]) => ({
|
|
299
374
|
name,
|
|
@@ -29,6 +29,7 @@ export const DATA_QUERY_ACTIONS = new Set([
|
|
|
29
29
|
"match-error-issues",
|
|
30
30
|
"gcloud",
|
|
31
31
|
"gong-calls",
|
|
32
|
+
"gong-native-insights",
|
|
32
33
|
"grafana",
|
|
33
34
|
"hubspot-deals",
|
|
34
35
|
"hubspot-metrics",
|
|
@@ -799,6 +800,9 @@ function actionEvidenceTextForSourceRecords(result: {
|
|
|
799
800
|
transcripts: record.transcripts,
|
|
800
801
|
});
|
|
801
802
|
}
|
|
803
|
+
if (normalizedName === "gong-native-insights") {
|
|
804
|
+
return "";
|
|
805
|
+
}
|
|
802
806
|
if (normalizedName === "run-code") {
|
|
803
807
|
return content;
|
|
804
808
|
}
|