@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
|
@@ -122,10 +122,11 @@ membership id when its native update status reports `update-available`.
|
|
|
122
122
|
with captured errors, mint a temporary replay-context link, and inspect the
|
|
123
123
|
timeline, page navigation, console diagnostics, failed network requests, and
|
|
124
124
|
clicks when needed. The authenticated connector catalog is the fast fallback
|
|
125
|
-
and exposes only bounded, user/org-scoped read actions
|
|
125
|
+
and exposes only bounded, user/org-scoped read actions. Incident triage uses:
|
|
126
126
|
`list-session-recordings`, `get-session-replay-summary`,
|
|
127
127
|
`get-session-replay-timeline`, `query-agent-native-analytics`,
|
|
128
|
-
`list-error-issues`, and `get-error-issue`.
|
|
128
|
+
`list-error-issues`, and `get-error-issue`. Cross-app Gong work also exposes
|
|
129
|
+
`account-deep-dive`, `gong-calls`, and `gong-native-insights`. Fetch the summary before the
|
|
129
130
|
sanitized timeline; the timeline contains bounded page/click/error markers
|
|
130
131
|
without raw replay events or storage references. Do not add replay blob or
|
|
131
132
|
dashboard mutation actions to this catalog without an explicit security
|
|
@@ -137,8 +138,9 @@ membership id when its native update status reports `update-available`.
|
|
|
137
138
|
issue id.
|
|
138
139
|
- Analytics keeps its direct MCP surface explicitly curated, so external
|
|
139
140
|
agents should use `ask_app` for multi-step investigation and changes. The
|
|
140
|
-
|
|
141
|
-
|
|
141
|
+
cataloged reads above are bounded, user/org-scoped fallback tools for callers
|
|
142
|
+
that already know which lookup they need. Sibling apps should invoke the exact
|
|
143
|
+
action directly when no Analytics reasoning loop is needed. Generic core
|
|
142
144
|
`db-schema` / `db-query` remain in-app agent tools and are not exposed
|
|
143
145
|
directly because broad SQL/schema access is too powerful to infer from
|
|
144
146
|
read-only metadata. Writes remain `ask_app`-only. Use the explicit catalog
|
|
@@ -146,7 +148,18 @@ membership id when its native update status reports `update-available`.
|
|
|
146
148
|
exposing an unannotated action.
|
|
147
149
|
- `/agents` is the Analytics home for admin surfaces. The default Monitoring
|
|
148
150
|
view embeds the shared observability dashboard for traces, conversations,
|
|
149
|
-
evals, experiments, and feedback. `/agents?view=
|
|
151
|
+
evals, agent experiments, and feedback. `/agents?view=flags` is the
|
|
152
|
+
sole admin-only fleet feature-flag control plane. Call
|
|
153
|
+
`list-workspace-feature-flags` before changing a flag and preserve
|
|
154
|
+
each app's explicit state: `unsupported`, `unreachable`, `forbidden`, and
|
|
155
|
+
`unknown-legacy` are unknown states, never synonyms for off. Use
|
|
156
|
+
`set-workspace-feature-flag` for app-qualified changes; target apps remain the
|
|
157
|
+
source of truth and are resolved only through the trusted organization
|
|
158
|
+
directory. Treat only a versioned mutation response whose key, org scope, and
|
|
159
|
+
requested rules match as success. Flags are source-declared booleans; do not
|
|
160
|
+
create variants, metrics, exposure tracking, or per-app management panels.
|
|
161
|
+
Report a failed target mutation instead of claiming the rollout changed.
|
|
162
|
+
`/agents?view=dashboards` shows the
|
|
150
163
|
admin-only dashboard usage audit; call `list-dashboard-usage-stats` when
|
|
151
164
|
admins ask about dashboard created/modified dates, owners, last tracked
|
|
152
165
|
modifier, views, engagements, saved views, or cleanup candidates. The
|
|
@@ -163,14 +176,17 @@ membership id when its native update status reports `update-available`.
|
|
|
163
176
|
serialization traps. The script is constrained: only documented dashboard
|
|
164
177
|
method calls with JSON-compatible arguments are parsed; variables, imports,
|
|
165
178
|
loops, functions, network, filesystem, and DB access are not available.
|
|
166
|
-
- Dashboard extension boxes use `chartType: "extension"
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
`
|
|
179
|
+
- Dashboard extension boxes use `chartType: "extension"`. For ordinary requests
|
|
180
|
+
such as "put X in this dashboard," default to `config.extensionId`: the
|
|
181
|
+
author-selected extension is part of the shared dashboard, renders for every
|
|
182
|
+
viewer who can access it, and remains present in scheduled report captures.
|
|
183
|
+
Direct embeds receive dashboard id, name, description, current filters, and
|
|
184
|
+
panel context. Use `config.extensionSlotId` only when the user explicitly asks
|
|
185
|
+
for a personal/per-viewer widget slot. The stable per-box slot is
|
|
186
|
+
`analytics.dashboard.<dashboard-id>.panel.<panel-id>`; call
|
|
187
|
+
`add-extension-slot-target` and `install-extension` for it. Slot installs are
|
|
188
|
+
per-user, so different viewers can see different widgets and service-account
|
|
189
|
+
report captures may show the empty install affordance.
|
|
174
190
|
- Dashboard saves keep bounded history in SQL. Use
|
|
175
191
|
`list-dashboard-revisions` to inspect undo points and
|
|
176
192
|
`restore-dashboard-revision` to restore one instead of hand-editing history
|
|
@@ -196,7 +212,11 @@ membership id when its native update status reports `update-available`.
|
|
|
196
212
|
`update-extension` blocks full-body replacement unless
|
|
197
213
|
`allowFullReplacement: true` is explicit, and that flag is reserved for a
|
|
198
214
|
user-requested broad rewrite or a complete replacement body supplied by the
|
|
199
|
-
user.
|
|
215
|
+
user. A request that combines a visual rewrite (for example compacting,
|
|
216
|
+
removing sections, renaming, or changing padding) with a data repair is still
|
|
217
|
+
a broad rewrite; after inspecting the current extension, set
|
|
218
|
+
`allowFullReplacement: true` for the complete replacement. If a focused edit
|
|
219
|
+
fails, do not retry unchanged arguments.
|
|
200
220
|
- Use framework sharing and access helpers for dashboards, analyses, and saved
|
|
201
221
|
resources.
|
|
202
222
|
- Dashboard email reports live in SQL via the
|
|
@@ -256,8 +276,9 @@ membership id when its native update status reports `update-available`.
|
|
|
256
276
|
replay, `view="monitoring"` with `monitoringView="uptime|errors"` (plus the
|
|
257
277
|
`monitorId`, `statusPageId`, or `errorIssueId` deep links) for uptime checks,
|
|
258
278
|
public status pages, or error triage, and `view="agents"` with
|
|
259
|
-
`agentsView="dashboards|database"` plus optional
|
|
260
|
-
dashboard usage
|
|
279
|
+
`agentsView="dashboards|database|flags"` plus optional
|
|
280
|
+
`dbAdminConnectionId` for dashboard usage, connected app database admin,
|
|
281
|
+
or fleet feature flags.
|
|
261
282
|
- Use `view-screen` when the active dashboard/chart context is unclear.
|
|
262
283
|
|
|
263
284
|
## Session Replay
|
|
@@ -377,6 +377,7 @@ export default defineAction({
|
|
|
377
377
|
}),
|
|
378
378
|
http: { method: "GET" },
|
|
379
379
|
readOnly: true,
|
|
380
|
+
publicAgent: { expose: true, readOnly: true, requiresAuth: true },
|
|
380
381
|
run: async (args) => {
|
|
381
382
|
const trimmedQuery = args.query.trim();
|
|
382
383
|
const gaps: string[] = [];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
|
|
4
|
+
import { writeGongNativeInsightsPolicy } from "../server/lib/gong-native-policy";
|
|
5
|
+
|
|
6
|
+
export default defineAction({
|
|
7
|
+
description:
|
|
8
|
+
"Enable or disable paid Gong native semantic operations for the current workspace. Enabling this permits individually authorized gong-native-insights calls to consume Gong credits; it does not send a Gong request by itself. Disable it to fail closed for every semantic request while keeping raw Gong evidence actions available.",
|
|
9
|
+
schema: z.object({
|
|
10
|
+
enabled: z
|
|
11
|
+
.boolean()
|
|
12
|
+
.describe(
|
|
13
|
+
"Whether this workspace may make paid Gong native semantic requests.",
|
|
14
|
+
),
|
|
15
|
+
}),
|
|
16
|
+
http: { method: "POST" },
|
|
17
|
+
needsApproval: true,
|
|
18
|
+
toolCallable: false,
|
|
19
|
+
run: async ({ enabled }) => {
|
|
20
|
+
const policy = await writeGongNativeInsightsPolicy(enabled);
|
|
21
|
+
return {
|
|
22
|
+
...policy,
|
|
23
|
+
creditRequests: 0,
|
|
24
|
+
guidance: enabled
|
|
25
|
+
? "Gong native semantic requests are enabled for this scope. Each request still requires allowCreditRequest=true and independently consumes Gong credits."
|
|
26
|
+
: "Gong native semantic requests are disabled. Use gong-calls or the provider corpus evidence path.",
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
});
|
|
@@ -4,10 +4,14 @@ import { z } from "zod";
|
|
|
4
4
|
import { getContentCalendarSchema } from "../server/lib/notion";
|
|
5
5
|
|
|
6
6
|
export default defineAction({
|
|
7
|
-
description:
|
|
8
|
-
|
|
7
|
+
description:
|
|
8
|
+
"Get a Notion content calendar database schema. Pass databaseId when discovery would be ambiguous.",
|
|
9
|
+
schema: z.object({
|
|
10
|
+
databaseId: z.string().optional(),
|
|
11
|
+
}),
|
|
9
12
|
http: { method: "GET" },
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
readOnly: true,
|
|
14
|
+
run: async ({ databaseId }) => {
|
|
15
|
+
return await getContentCalendarSchema(databaseId);
|
|
12
16
|
},
|
|
13
17
|
});
|
|
@@ -7,11 +7,19 @@ export default defineAction({
|
|
|
7
7
|
// Read-only provider query: safe to call from run-code `appAction` and
|
|
8
8
|
// reusable across continuation retries (no re-fetch on resume).
|
|
9
9
|
readOnly: true,
|
|
10
|
-
description:
|
|
11
|
-
|
|
10
|
+
description:
|
|
11
|
+
"Get all entries from a Notion content calendar. Pass databaseId when a workspace has multiple matching databases; otherwise the action discovers the uniquely matching database by schema.",
|
|
12
|
+
schema: z.object({
|
|
13
|
+
databaseId: z
|
|
14
|
+
.string()
|
|
15
|
+
.optional()
|
|
16
|
+
.describe(
|
|
17
|
+
"Optional Notion database ID. Omit to discover a unique database with Topic, Status, and Publish Date properties.",
|
|
18
|
+
),
|
|
19
|
+
}),
|
|
12
20
|
http: { method: "GET" },
|
|
13
|
-
run: async () => {
|
|
14
|
-
const entries = await getContentCalendar();
|
|
21
|
+
run: async ({ databaseId }) => {
|
|
22
|
+
const entries = await getContentCalendar(databaseId);
|
|
15
23
|
return { entries, total: Array.isArray(entries) ? entries.length : 0 };
|
|
16
24
|
},
|
|
17
25
|
});
|
|
@@ -132,7 +132,8 @@ export const DASHBOARD_MUTATION_EXAMPLES = [
|
|
|
132
132
|
`dashboard.insertPanel({"id":"new-kpi","title":"New KPI","source":"first-party","chartType":"metric","width":1,"config":{"timeScope":"dashboard"},"sql":"SELECT COUNT(*) AS value FROM analytics_events WHERE event_date >= '{{dateStart}}' AND event_date < '{{dateEnd}}'"}).atTop();`,
|
|
133
133
|
`dashboard.insertPanel({"id":"new-chart","title":"New Chart","source":"first-party","chartType":"line","width":1,"config":{"timeScope":"dashboard"},"sql":"SELECT event_date AS date, COUNT(*) AS value FROM analytics_events WHERE event_date >= '{{dateStart}}' AND event_date < '{{dateEnd}}' GROUP BY event_date ORDER BY event_date"}).nextTo("retention-over-time");`,
|
|
134
134
|
`dashboard.insertPanel({"id":"row-chart","title":"Row Chart","source":"first-party","chartType":"bar","width":1,"config":{"timeScope":"dashboard"},"sql":"SELECT event_name AS name, COUNT(*) AS value FROM analytics_events WHERE event_date >= '{{dateStart}}' AND event_date < '{{dateEnd}}' GROUP BY event_name"}).atRow(2);`,
|
|
135
|
-
'dashboard.insertPanel({"id":"pipeline-widget","title":"Pipeline Widget","chartType":"extension","width":3,"config":{"
|
|
135
|
+
'dashboard.insertPanel({"id":"pipeline-widget","title":"Pipeline Widget","chartType":"extension","width":3,"config":{"extensionId":"<extension-id>"}}).atBottom();',
|
|
136
|
+
'dashboard.insertPanel({"id":"personal-widget-slot","title":"Personal Widget Slot","chartType":"extension","width":3,"config":{"extensionSlotId":"analytics.dashboard.<dashboard-id>.panel.personal-widget-slot"}}).atBottom();',
|
|
136
137
|
] as const;
|
|
137
138
|
|
|
138
139
|
export type DashboardMutationOperation =
|
|
@@ -20,10 +20,12 @@ const DEFAULT_GONG_TRANSCRIPT_LIMIT = 3;
|
|
|
20
20
|
const MAX_GONG_TRANSCRIPT_LIMIT = 50;
|
|
21
21
|
const DEFAULT_TRANSCRIPT_MAX_CHARS = 8_000;
|
|
22
22
|
const MAX_TRANSCRIPT_MAX_CHARS = 100_000;
|
|
23
|
+
const MAX_AGGREGATE_TRANSCRIPT_CHARS = 60_000;
|
|
23
24
|
const DEFAULT_TRANSCRIPT_SCAN_LIMIT = 50;
|
|
24
25
|
const MAX_TRANSCRIPT_SCAN_LIMIT = 200;
|
|
25
26
|
const DEFAULT_TRANSCRIPT_SEARCH_MAX_CHARS = MAX_TRANSCRIPT_MAX_CHARS;
|
|
26
27
|
const TRANSCRIPT_BATCH_SIZE = 20;
|
|
28
|
+
const TRANSCRIPT_BATCH_CONCURRENCY = 3;
|
|
27
29
|
const MAX_TRANSCRIPT_MATCHES_PER_CALL = 5;
|
|
28
30
|
const MATCH_SNIPPET_RADIUS = 240;
|
|
29
31
|
|
|
@@ -74,6 +76,20 @@ function normalizeBoundedInt(
|
|
|
74
76
|
return Math.max(min, Math.min(max, Math.floor(value!)));
|
|
75
77
|
}
|
|
76
78
|
|
|
79
|
+
function boundedTranscriptExcerptChars(
|
|
80
|
+
requestedChars: number,
|
|
81
|
+
transcriptCount: number,
|
|
82
|
+
): number {
|
|
83
|
+
if (transcriptCount <= 0) return requestedChars;
|
|
84
|
+
return Math.min(
|
|
85
|
+
requestedChars,
|
|
86
|
+
Math.max(
|
|
87
|
+
1_000,
|
|
88
|
+
Math.floor(MAX_AGGREGATE_TRANSCRIPT_CHARS / transcriptCount),
|
|
89
|
+
),
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
77
93
|
function asRecord(value: unknown): Record<string, unknown> | null {
|
|
78
94
|
return value && typeof value === "object"
|
|
79
95
|
? (value as Record<string, unknown>)
|
|
@@ -218,6 +234,36 @@ async function fetchTranscriptBatch(calls: GongCall[]): Promise<{
|
|
|
218
234
|
}
|
|
219
235
|
}
|
|
220
236
|
|
|
237
|
+
async function fetchTranscriptBatches(calls: GongCall[]): Promise<
|
|
238
|
+
Array<{
|
|
239
|
+
calls: GongCall[];
|
|
240
|
+
result: Awaited<ReturnType<typeof fetchTranscriptBatch>>;
|
|
241
|
+
}>
|
|
242
|
+
> {
|
|
243
|
+
const batches = chunkCalls(calls, TRANSCRIPT_BATCH_SIZE);
|
|
244
|
+
const results: Array<{
|
|
245
|
+
calls: GongCall[];
|
|
246
|
+
result: Awaited<ReturnType<typeof fetchTranscriptBatch>>;
|
|
247
|
+
}> = [];
|
|
248
|
+
for (
|
|
249
|
+
let index = 0;
|
|
250
|
+
index < batches.length;
|
|
251
|
+
index += TRANSCRIPT_BATCH_CONCURRENCY
|
|
252
|
+
) {
|
|
253
|
+
results.push(
|
|
254
|
+
...(await Promise.all(
|
|
255
|
+
batches
|
|
256
|
+
.slice(index, index + TRANSCRIPT_BATCH_CONCURRENCY)
|
|
257
|
+
.map(async (batch) => ({
|
|
258
|
+
calls: batch,
|
|
259
|
+
result: await fetchTranscriptBatch(batch),
|
|
260
|
+
})),
|
|
261
|
+
)),
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
return results;
|
|
265
|
+
}
|
|
266
|
+
|
|
221
267
|
async function searchTranscriptEvidence(
|
|
222
268
|
calls: GongCall[],
|
|
223
269
|
query: string,
|
|
@@ -234,8 +280,10 @@ async function searchTranscriptEvidence(
|
|
|
234
280
|
let truncatedTranscripts = 0;
|
|
235
281
|
const callsToScan = calls.slice(0, scanLimit);
|
|
236
282
|
|
|
237
|
-
for (const
|
|
238
|
-
|
|
283
|
+
for (const {
|
|
284
|
+
calls: batch,
|
|
285
|
+
result: batchResult,
|
|
286
|
+
} of await fetchTranscriptBatches(callsToScan)) {
|
|
239
287
|
errors.push(...batchResult.errors);
|
|
240
288
|
|
|
241
289
|
for (const call of batch) {
|
|
@@ -374,8 +422,10 @@ async function loadTranscriptEvidence(
|
|
|
374
422
|
): Promise<TranscriptEvidence[]> {
|
|
375
423
|
const evidence: TranscriptEvidence[] = [];
|
|
376
424
|
const callsToLoad = calls.slice(0, limit);
|
|
377
|
-
for (const
|
|
378
|
-
|
|
425
|
+
for (const {
|
|
426
|
+
calls: batch,
|
|
427
|
+
result: batchResult,
|
|
428
|
+
} of await fetchTranscriptBatches(callsToLoad)) {
|
|
379
429
|
const errorByCallId = new Map(
|
|
380
430
|
batchResult.errors.map((error) => [error.callId, error.error]),
|
|
381
431
|
);
|
|
@@ -411,19 +461,31 @@ async function loadTranscriptEvidence(
|
|
|
411
461
|
* ISO string for the Gong window filters. Returns undefined for empty/invalid
|
|
412
462
|
* input so the caller falls back to the `days` window.
|
|
413
463
|
*/
|
|
414
|
-
function normalizeGongDate(
|
|
464
|
+
function normalizeGongDate(
|
|
465
|
+
value: string | undefined,
|
|
466
|
+
boundary: "start" | "end" = "start",
|
|
467
|
+
): string | undefined {
|
|
415
468
|
if (!value || typeof value !== "string") return undefined;
|
|
416
|
-
const
|
|
469
|
+
const normalized = value.trim();
|
|
470
|
+
const dateOnly = /^\d{4}-\d{2}-\d{2}$/.test(normalized);
|
|
471
|
+
const ms = Date.parse(dateOnly ? `${normalized}T00:00:00.000Z` : normalized);
|
|
417
472
|
if (Number.isNaN(ms)) return undefined;
|
|
418
|
-
|
|
473
|
+
const date = new Date(ms);
|
|
474
|
+
if (dateOnly && boundary === "end") date.setUTCDate(date.getUTCDate() + 1);
|
|
475
|
+
return date.toISOString();
|
|
419
476
|
}
|
|
420
477
|
|
|
421
478
|
export default defineAction({
|
|
422
479
|
// Read-only provider query: safe to call from run-code `appAction` and
|
|
423
480
|
// reusable across continuation retries (no re-fetch on resume).
|
|
424
481
|
readOnly: true,
|
|
482
|
+
publicAgent: { expose: true, readOnly: true, requiresAuth: true },
|
|
483
|
+
// A bounded multi-call transcript review is intentionally larger than the
|
|
484
|
+
// shared 50K tool default. One batched result avoids 10+ one-call-at-a-time
|
|
485
|
+
// model round trips while still staying well below the model context limit.
|
|
486
|
+
maxResultChars: 100_000,
|
|
425
487
|
description:
|
|
426
|
-
"Query Gong sales calls, transcripts, and users. Pass --users for user list, --transcript for one transcript, --company to search by company/domain/person/email. For bounded account-level transcript mention/search questions, set transcriptQuery to search matching transcripts server-side and return coverage counts plus snippets instead of large transcript blobs. For deal, customer, objection, next-step, or deep-dive analysis, set includeTranscripts=true only when you need broad qualitative context rather than a specific term search. For
|
|
488
|
+
"Query Gong sales calls, transcripts, and users. Pass --users for user list, --transcript for one transcript, --company to search by company/domain/person/email. For bounded account-level transcript mention/search questions, set transcriptQuery to search matching transcripts server-side and return coverage counts plus snippets instead of large transcript blobs. For deal, customer, objection, next-step, or deep-dive analysis, set includeTranscripts=true only when you need broad qualitative context rather than a specific term search. For an 'all calls' transcript review in a bounded account/date window, use exhaustive=true with after/before and includeTranscripts=true; the action batches transcript retrieval and reports complete/partial coverage instead of forcing one tool call per transcript. For very broad cohorts or defensible absence searches, use provider-api-catalog(provider='gong') and provider-corpus-job mode='batch-search' against /calls/transcript after call-id discovery.",
|
|
427
489
|
schema: z.object({
|
|
428
490
|
users: cliBoolean.optional().describe("Set to true to list Gong users"),
|
|
429
491
|
transcript: z.string().optional().describe("Call ID to get transcript"),
|
|
@@ -470,7 +532,7 @@ export default defineAction({
|
|
|
470
532
|
.max(MAX_TRANSCRIPT_MAX_CHARS)
|
|
471
533
|
.optional()
|
|
472
534
|
.describe(
|
|
473
|
-
"Maximum transcript characters to return per call (default 8000, max 100000). Use the default for analysis; raise it only when the user asks for more quoted detail.",
|
|
535
|
+
"Maximum transcript characters to return per call (default 8000, max 100000). Batched results also share a 60000-character aggregate excerpt budget. Use the default for analysis; raise it only when the user asks for more quoted detail.",
|
|
474
536
|
),
|
|
475
537
|
transcriptQuery: z
|
|
476
538
|
.string()
|
|
@@ -490,7 +552,7 @@ export default defineAction({
|
|
|
490
552
|
exhaustive: cliBoolean
|
|
491
553
|
.optional()
|
|
492
554
|
.describe(
|
|
493
|
-
"Return EVERY matching call in the window instead of stopping at `limit` — use this for complete cohort/account coverage when 'how many' or absence matters
|
|
555
|
+
"Return EVERY matching call in the window instead of stopping at `limit` — use this for complete cohort/account coverage when 'how many' or absence matters. By default this is metadata-only. With includeTranscripts=true, transcripts are fetched in batches up to transcriptLimit (all matched calls by default when there are 50 or fewer) and explicit coverage is returned. Always bound it with after/before or a small days window: an unbounded exhaustive scan pages the whole Gong org and can hit the function timeout.",
|
|
494
556
|
),
|
|
495
557
|
after: z
|
|
496
558
|
.string()
|
|
@@ -532,21 +594,21 @@ export default defineAction({
|
|
|
532
594
|
);
|
|
533
595
|
const exhaustive = Boolean(args.exhaustive);
|
|
534
596
|
const fromDateTime = normalizeGongDate(args.after);
|
|
535
|
-
const toDateTime = normalizeGongDate(args.before);
|
|
597
|
+
const toDateTime = normalizeGongDate(args.before, "end");
|
|
536
598
|
const result = await searchCalls(args.company, days, limit, {
|
|
537
599
|
exhaustive,
|
|
538
600
|
...(fromDateTime ? { fromDateTime } : {}),
|
|
539
601
|
...(toDateTime ? { toDateTime } : {}),
|
|
540
602
|
});
|
|
541
|
-
|
|
542
|
-
// transcripts (that would bloat context and risk the function timeout).
|
|
543
|
-
// The agent pulls transcripts deliberately afterward (--transcript or a
|
|
544
|
-
// run-code scan over result.calls).
|
|
545
|
-
const shouldLoadTranscripts =
|
|
546
|
-
Boolean(args.includeTranscripts) && !exhaustive;
|
|
603
|
+
const shouldLoadTranscripts = Boolean(args.includeTranscripts);
|
|
547
604
|
const transcriptLimit = normalizeBoundedInt(
|
|
548
605
|
args.transcriptLimit,
|
|
549
|
-
|
|
606
|
+
exhaustive
|
|
607
|
+
? Math.max(
|
|
608
|
+
1,
|
|
609
|
+
Math.min(result.calls.length, MAX_GONG_TRANSCRIPT_LIMIT),
|
|
610
|
+
)
|
|
611
|
+
: DEFAULT_GONG_TRANSCRIPT_LIMIT,
|
|
550
612
|
1,
|
|
551
613
|
MAX_GONG_TRANSCRIPT_LIMIT,
|
|
552
614
|
);
|
|
@@ -557,6 +619,10 @@ export default defineAction({
|
|
|
557
619
|
1_000,
|
|
558
620
|
MAX_TRANSCRIPT_MAX_CHARS,
|
|
559
621
|
);
|
|
622
|
+
const boundedTranscriptExcerptMaxChars = boundedTranscriptExcerptChars(
|
|
623
|
+
transcriptExcerptMaxChars,
|
|
624
|
+
Math.min(transcriptLimit, result.calls.length),
|
|
625
|
+
);
|
|
560
626
|
const transcriptSearchMaxChars = normalizeBoundedInt(
|
|
561
627
|
args.transcriptMaxChars,
|
|
562
628
|
transcriptQuery
|
|
@@ -583,9 +649,16 @@ export default defineAction({
|
|
|
583
649
|
? await loadTranscriptEvidence(
|
|
584
650
|
result.calls,
|
|
585
651
|
transcriptLimit,
|
|
586
|
-
|
|
652
|
+
boundedTranscriptExcerptMaxChars,
|
|
587
653
|
)
|
|
588
654
|
: undefined;
|
|
655
|
+
const transcriptErrors =
|
|
656
|
+
transcripts?.filter((transcript) => Boolean(transcript.error)) ?? [];
|
|
657
|
+
const transcriptCoverageComplete = Boolean(
|
|
658
|
+
transcripts &&
|
|
659
|
+
transcripts.length >= result.calls.length &&
|
|
660
|
+
transcriptErrors.length === 0,
|
|
661
|
+
);
|
|
589
662
|
|
|
590
663
|
return {
|
|
591
664
|
...result,
|
|
@@ -611,15 +684,29 @@ export default defineAction({
|
|
|
611
684
|
}
|
|
612
685
|
: {}),
|
|
613
686
|
...(transcripts ? { transcripts } : {}),
|
|
687
|
+
...(transcripts
|
|
688
|
+
? {
|
|
689
|
+
transcriptCoverage: {
|
|
690
|
+
availableCalls: result.calls.length,
|
|
691
|
+
inspectedCalls: transcripts.length,
|
|
692
|
+
successfulCalls: transcripts.length - transcriptErrors.length,
|
|
693
|
+
errorCount: transcriptErrors.length,
|
|
694
|
+
coverageComplete: transcriptCoverageComplete,
|
|
695
|
+
scanLimited: transcripts.length < result.calls.length,
|
|
696
|
+
},
|
|
697
|
+
}
|
|
698
|
+
: {}),
|
|
614
699
|
guidance: [
|
|
615
700
|
transcriptSearch
|
|
616
701
|
? `Transcript search inspected ${transcriptSearch.inspectedCalls} of ${result.calls.length} matching call(s) for "${transcriptQuery}" and found ${transcriptSearch.matches.length} matching call(s). Use coverageComplete/errors before making absence claims; increase transcriptScanLimit or narrow the window if coverage is incomplete.`
|
|
617
702
|
: "",
|
|
618
703
|
exhaustive
|
|
619
|
-
?
|
|
704
|
+
? shouldLoadTranscripts
|
|
705
|
+
? `Exhaustive discovery returned all ${result.calls.length} matching call(s) in the bounded window before loading transcripts.`
|
|
706
|
+
: `Exhaustive discovery: returned all ${result.calls.length} matching call(s) in the window (metadata only). Set includeTranscripts=true to fetch the bounded set in batches, or use a provider-corpus job for a broader transcript search.`
|
|
620
707
|
: callLimitGuidance(result.limit, result.truncated),
|
|
621
708
|
shouldLoadTranscripts
|
|
622
|
-
? `Loaded transcript excerpts for ${transcripts?.length ?? 0} matching call(s). Ground qualitative claims in the transcript text and cite
|
|
709
|
+
? `Loaded transcript excerpts for ${transcripts?.length ?? 0} of ${result.calls.length} matching call(s) in batches (${transcriptCoverageComplete ? "complete coverage" : "partial coverage"}). Ground qualitative claims in the transcript text and cite transcriptCoverage; do not fetch these calls again one at a time.`
|
|
623
710
|
: exhaustive
|
|
624
711
|
? ""
|
|
625
712
|
: "For deep-dive or qualitative analysis, call this action again with includeTranscripts=true before drawing conclusions from call content.",
|
|
@@ -651,6 +738,10 @@ export default defineAction({
|
|
|
651
738
|
1_000,
|
|
652
739
|
MAX_TRANSCRIPT_MAX_CHARS,
|
|
653
740
|
);
|
|
741
|
+
const boundedTranscriptExcerptMaxChars = boundedTranscriptExcerptChars(
|
|
742
|
+
transcriptExcerptMaxChars,
|
|
743
|
+
Math.min(transcriptLimit, limited.calls.length),
|
|
744
|
+
);
|
|
654
745
|
const transcriptSearchMaxChars = normalizeBoundedInt(
|
|
655
746
|
args.transcriptMaxChars,
|
|
656
747
|
transcriptQuery
|
|
@@ -677,7 +768,7 @@ export default defineAction({
|
|
|
677
768
|
? await loadTranscriptEvidence(
|
|
678
769
|
limited.calls,
|
|
679
770
|
transcriptLimit,
|
|
680
|
-
|
|
771
|
+
boundedTranscriptExcerptMaxChars,
|
|
681
772
|
)
|
|
682
773
|
: undefined;
|
|
683
774
|
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import {
|
|
3
|
+
callMcpTool,
|
|
4
|
+
listVisibleMcpTools,
|
|
5
|
+
type AppMcpTool,
|
|
6
|
+
} from "@agent-native/core/mcp-client";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
|
|
9
|
+
import { readGongNativeInsightsPolicy } from "../server/lib/gong-native-policy";
|
|
10
|
+
|
|
11
|
+
const GONG_NATIVE_OPERATIONS = [
|
|
12
|
+
"ask_account",
|
|
13
|
+
"ask_deal",
|
|
14
|
+
"generate_brief",
|
|
15
|
+
] as const;
|
|
16
|
+
|
|
17
|
+
type GongNativeOperation = (typeof GONG_NATIVE_OPERATIONS)[number];
|
|
18
|
+
|
|
19
|
+
function operationName(value: string): string {
|
|
20
|
+
return value.trim().toLowerCase().replace(/-/g, "_");
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function gongNativeTools(tools: AppMcpTool[]): AppMcpTool[] {
|
|
24
|
+
const names = new Set<string>(GONG_NATIVE_OPERATIONS);
|
|
25
|
+
return tools.filter((tool) => names.has(operationName(tool.name)));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function selectTool(
|
|
29
|
+
tools: AppMcpTool[],
|
|
30
|
+
operation: GongNativeOperation,
|
|
31
|
+
): AppMcpTool | null {
|
|
32
|
+
const matches = tools.filter(
|
|
33
|
+
(tool) => operationName(tool.name) === operation,
|
|
34
|
+
);
|
|
35
|
+
if (matches.length === 1) return matches[0];
|
|
36
|
+
const gongNamed = matches.filter((tool) => /gong/i.test(tool.serverId));
|
|
37
|
+
return gongNamed.length === 1 ? gongNamed[0] : null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default defineAction({
|
|
41
|
+
description:
|
|
42
|
+
"Use Gong's official MCP semantic operations for one bounded qualitative synthesis request. Omit operation to inspect the connected schemas without spending Gong credits. Paid calls fail closed unless configure-gong-native-insights has enabled them for this workspace and this invocation sets allowCreditRequest=true. With operation, pass one consolidated arguments object; each invocation independently consumes Gong credits. Use this only for themes, risks, summaries, and deck narrative. For transcripts, quotes, counts, source records, or absence/exhaustive claims use gong-calls or the provider corpus evidence path instead.",
|
|
43
|
+
schema: z.object({
|
|
44
|
+
operation: z
|
|
45
|
+
.enum(GONG_NATIVE_OPERATIONS)
|
|
46
|
+
.optional()
|
|
47
|
+
.describe(
|
|
48
|
+
"Official Gong MCP operation. Omit to list the currently connected operation schemas without calling Gong AI.",
|
|
49
|
+
),
|
|
50
|
+
allowCreditRequest: z
|
|
51
|
+
.boolean()
|
|
52
|
+
.default(false)
|
|
53
|
+
.describe(
|
|
54
|
+
"Explicitly authorize this one Gong semantic request. Leave false while inspecting schemas or when the workspace should not spend Gong credits.",
|
|
55
|
+
),
|
|
56
|
+
arguments: z
|
|
57
|
+
.record(z.string(), z.unknown())
|
|
58
|
+
.default({})
|
|
59
|
+
.describe(
|
|
60
|
+
"Arguments passed unchanged to the connected Gong MCP operation. Consolidate related questions into one request and narrow the entity/date scope.",
|
|
61
|
+
),
|
|
62
|
+
}),
|
|
63
|
+
readOnly: true,
|
|
64
|
+
parallelSafe: true,
|
|
65
|
+
needsApproval: ({ operation, allowCreditRequest }) =>
|
|
66
|
+
Boolean(operation && allowCreditRequest),
|
|
67
|
+
publicAgent: { expose: true, readOnly: true, requiresAuth: true },
|
|
68
|
+
http: false,
|
|
69
|
+
run: async ({ operation, allowCreditRequest, arguments: args }) => {
|
|
70
|
+
const tools = gongNativeTools(await listVisibleMcpTools());
|
|
71
|
+
if (!operation) {
|
|
72
|
+
return {
|
|
73
|
+
connected: tools.length > 0,
|
|
74
|
+
creditRequests: 0,
|
|
75
|
+
creditUnit: "request",
|
|
76
|
+
evidenceMode: "provider-synthesis",
|
|
77
|
+
rawEvidenceAvailable: false,
|
|
78
|
+
operations: tools.map((tool) => ({
|
|
79
|
+
operation: operationName(tool.name),
|
|
80
|
+
serverId: tool.serverId,
|
|
81
|
+
description: tool.description,
|
|
82
|
+
inputSchema: tool.inputSchema,
|
|
83
|
+
})),
|
|
84
|
+
evidenceFallbackAction: "gong-calls",
|
|
85
|
+
guidance:
|
|
86
|
+
tools.length > 0
|
|
87
|
+
? "Choose one operation and make one consolidated, narrowly scoped request. Inspecting this catalog did not call Gong AI or consume a Gong credit request."
|
|
88
|
+
: "No official Gong semantic MCP operations are connected in this request scope. Use gong-calls for bounded evidence, or connect Gong MCP before using the synthesis path.",
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (!allowCreditRequest) {
|
|
93
|
+
return {
|
|
94
|
+
connected: tools.length > 0,
|
|
95
|
+
operation,
|
|
96
|
+
blocked: true,
|
|
97
|
+
creditRequests: 0,
|
|
98
|
+
creditUnit: "request",
|
|
99
|
+
evidenceMode: "provider-synthesis",
|
|
100
|
+
rawEvidenceAvailable: false,
|
|
101
|
+
evidenceFallbackAction: "gong-calls",
|
|
102
|
+
guidance:
|
|
103
|
+
"This Gong semantic request was not sent. Set allowCreditRequest=true only after choosing one consolidated, narrowly scoped request; use gong-calls for evidence retrieval without Gong AI synthesis.",
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const policy = await readGongNativeInsightsPolicy();
|
|
108
|
+
if (!policy.enabled) {
|
|
109
|
+
return {
|
|
110
|
+
connected: tools.length > 0,
|
|
111
|
+
operation,
|
|
112
|
+
blocked: true,
|
|
113
|
+
blockedBy: "workspace-policy",
|
|
114
|
+
policy,
|
|
115
|
+
creditRequests: 0,
|
|
116
|
+
creditUnit: "request",
|
|
117
|
+
evidenceMode: "provider-synthesis",
|
|
118
|
+
rawEvidenceAvailable: false,
|
|
119
|
+
evidenceFallbackAction: "gong-calls",
|
|
120
|
+
guidance:
|
|
121
|
+
"This Gong semantic request was not sent because paid native insights are disabled for this workspace. An authorized user can enable them with configure-gong-native-insights; use gong-calls for evidence retrieval in the meantime.",
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const tool = selectTool(tools, operation);
|
|
126
|
+
if (!tool) {
|
|
127
|
+
return {
|
|
128
|
+
connected: tools.length > 0,
|
|
129
|
+
operation,
|
|
130
|
+
creditRequests: 0,
|
|
131
|
+
creditUnit: "request",
|
|
132
|
+
evidenceMode: "provider-synthesis",
|
|
133
|
+
rawEvidenceAvailable: false,
|
|
134
|
+
error:
|
|
135
|
+
tools.length === 0
|
|
136
|
+
? "No official Gong semantic MCP operations are connected in this request scope."
|
|
137
|
+
: `The ${operation} operation is missing or ambiguous across connected MCP servers.`,
|
|
138
|
+
availableOperations: tools.map((candidate) => ({
|
|
139
|
+
operation: operationName(candidate.name),
|
|
140
|
+
serverId: candidate.serverId,
|
|
141
|
+
})),
|
|
142
|
+
evidenceFallbackAction: "gong-calls",
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const startedAt = Date.now();
|
|
147
|
+
const result = await callMcpTool(tool.serverId, tool.name, args);
|
|
148
|
+
return {
|
|
149
|
+
connected: true,
|
|
150
|
+
source: "gong-native-mcp",
|
|
151
|
+
operation,
|
|
152
|
+
creditRequests: 1,
|
|
153
|
+
creditUnit: "request",
|
|
154
|
+
durationMs: Date.now() - startedAt,
|
|
155
|
+
evidenceMode: "provider-synthesis",
|
|
156
|
+
synthesisOnly: true,
|
|
157
|
+
rawEvidenceAvailable: false,
|
|
158
|
+
coverageComplete: false,
|
|
159
|
+
coverageUnknown: true,
|
|
160
|
+
result,
|
|
161
|
+
evidenceFallbackAction: "gong-calls",
|
|
162
|
+
guidance:
|
|
163
|
+
"Treat this as Gong-generated qualitative synthesis, not transcript evidence. Do not use it for verbatim quotes, exact counts, source-record claims, or proof of absence; route those to gong-calls or the provider corpus evidence path.",
|
|
164
|
+
};
|
|
165
|
+
},
|
|
166
|
+
});
|