@agent-native/core 0.108.0 → 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.
Files changed (302) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +18 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/a2a/client.ts +140 -17
  5. package/corpus/core/src/a2a/handlers.ts +60 -0
  6. package/corpus/core/src/a2a/index.ts +6 -1
  7. package/corpus/core/src/a2a/invoke.ts +68 -1
  8. package/corpus/core/src/a2a/server.ts +13 -1
  9. package/corpus/core/src/a2a/types.ts +16 -0
  10. package/corpus/core/src/action.ts +3 -2
  11. package/corpus/core/src/agent/production-agent.ts +10 -4
  12. package/corpus/core/src/client/AssistantChat.tsx +648 -603
  13. package/corpus/core/src/client/MultiTabAssistantChat.tsx +31 -4
  14. package/corpus/core/src/client/agent-chat-adapter.ts +23 -37
  15. package/corpus/core/src/client/agent-sidebar-state.ts +4 -0
  16. package/corpus/core/src/client/analytics.ts +84 -0
  17. package/corpus/core/src/client/chat/message-components.tsx +94 -22
  18. package/corpus/core/src/client/chat/tool-call-display.tsx +170 -47
  19. package/corpus/core/src/client/chat/use-agent-chat-lifecycle-tracking.ts +74 -0
  20. package/corpus/core/src/client/chat-thread-url.ts +11 -0
  21. package/corpus/core/src/client/error-capture.ts +12 -0
  22. package/corpus/core/src/client/extensions/ExtensionSlot.tsx +37 -1
  23. package/corpus/core/src/client/index.ts +2 -0
  24. package/corpus/core/src/client/route-chunk-recovery.ts +20 -8
  25. package/corpus/core/src/client/session-replay.ts +31 -0
  26. package/corpus/core/src/extensions/actions.ts +2 -14
  27. package/corpus/core/src/extensions/store.ts +1 -1
  28. package/corpus/core/src/localization/default-messages.ts +3 -0
  29. package/corpus/core/src/mcp/build-server.ts +2 -2
  30. package/corpus/core/src/progress/actions.ts +4 -2
  31. package/corpus/core/src/provider-api/index.ts +205 -105
  32. package/corpus/core/src/scripts/call-agent.ts +137 -17
  33. package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +40 -0
  34. package/corpus/core/src/server/agent-chat-plugin.ts +31 -0
  35. package/corpus/core/src/styles/agent-conversation.css +7 -0
  36. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +20 -0
  37. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +20 -0
  38. package/corpus/core/src/templates/default/app/i18n/en-US.ts +20 -0
  39. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +20 -0
  40. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +21 -0
  41. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +19 -0
  42. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +20 -0
  43. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +19 -0
  44. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +20 -0
  45. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +19 -0
  46. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +19 -0
  47. package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +28 -0
  48. package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
  49. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
  50. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +29 -10
  51. package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +54 -23
  52. package/corpus/templates/analytics/.builder/skills/apollo/SKILL.md +19 -41
  53. package/corpus/templates/analytics/.builder/skills/commonroom/SKILL.md +20 -35
  54. package/corpus/templates/analytics/.builder/skills/github/SKILL.md +23 -67
  55. package/corpus/templates/analytics/.builder/skills/pylon/SKILL.md +25 -43
  56. package/corpus/templates/analytics/AGENTS.md +22 -13
  57. package/corpus/templates/analytics/actions/account-deep-dive.ts +1 -0
  58. package/corpus/templates/analytics/actions/configure-gong-native-insights.ts +29 -0
  59. package/corpus/templates/analytics/actions/content-calendar-schema.ts +8 -4
  60. package/corpus/templates/analytics/actions/content-calendar.ts +12 -4
  61. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +2 -1
  62. package/corpus/templates/analytics/actions/gong-calls.ts +113 -22
  63. package/corpus/templates/analytics/actions/gong-native-insights.ts +166 -0
  64. package/corpus/templates/analytics/actions/hubspot-deals.ts +190 -46
  65. package/corpus/templates/analytics/actions/pylon-issues.ts +123 -0
  66. package/corpus/templates/analytics/actions/slack-messages.ts +179 -27
  67. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +48 -152
  68. package/corpus/templates/analytics/app/components/ui/chart.tsx +1 -1
  69. package/corpus/templates/analytics/app/hooks/use-chart-tooltip-flip.ts +21 -6
  70. package/corpus/templates/analytics/app/i18n/zh-TW.ts +13 -0
  71. package/corpus/templates/analytics/app/i18n-data.ts +134 -0
  72. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +181 -30
  73. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +6 -0
  74. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +4 -3
  75. package/corpus/templates/analytics/changelog/2026-07-17-dashboard-editors-can-add-shared-extensions-or-opt-into-per-.md +6 -0
  76. package/corpus/templates/analytics/changelog/2026-07-17-dashboard-extensions-show-a-loading-skeleton.md +6 -0
  77. package/corpus/templates/analytics/changelog/2026-07-17-errors-now-group-repeat-failures-consistently-and-keep-priva.md +6 -0
  78. package/corpus/templates/analytics/changelog/2026-07-17-gong-transcript-reviews-now-batch-bounded-call-windows-for-f.md +6 -0
  79. package/corpus/templates/analytics/changelog/2026-07-17-hubspot-deal-filters-now-run-in-hubspot-before-paging-result.md +6 -0
  80. package/corpus/templates/analytics/changelog/2026-07-17-notion-content-calendars-now-discover-the-matching-database-.md +6 -0
  81. package/corpus/templates/analytics/changelog/2026-07-17-pylon-dashboard-reads-now-use-the-paginated-issue-search-api.md +6 -0
  82. package/corpus/templates/analytics/changelog/2026-07-17-slack-reads-no-longer-join-channels-and-report-pagination-coverage.md +6 -0
  83. package/corpus/templates/analytics/server/handlers/notion.ts +14 -3
  84. package/corpus/templates/analytics/server/handlers/slack.ts +182 -29
  85. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +2 -6
  86. package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +6 -2
  87. package/corpus/templates/analytics/server/lib/error-capture.ts +75 -8
  88. package/corpus/templates/analytics/server/lib/gong-native-policy.ts +72 -0
  89. package/corpus/templates/analytics/server/lib/gong.ts +54 -66
  90. package/corpus/templates/analytics/server/lib/hubspot.ts +40 -3
  91. package/corpus/templates/analytics/server/lib/notion.ts +83 -8
  92. package/corpus/templates/analytics/server/lib/real-data-actions.ts +4 -0
  93. package/corpus/templates/analytics/server/lib/slack.ts +242 -90
  94. package/corpus/templates/analytics/server/plugins/agent-chat.ts +3 -3
  95. package/corpus/templates/analytics/server/routes/api/pylon/accounts.get.ts +42 -1
  96. package/corpus/templates/analytics/server/routes/api/pylon/issues.get.ts +71 -1
  97. package/corpus/templates/analytics/server/routes/api/test-connection.post.ts +44 -4
  98. package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +19 -1
  99. package/corpus/templates/clips/app/components/library/create-folder-dialog.tsx +123 -0
  100. package/corpus/templates/clips/app/components/library/library-grid.tsx +42 -4
  101. package/corpus/templates/clips/app/components/library/recording-card.tsx +30 -0
  102. package/corpus/templates/clips/app/entry.client.tsx +6 -1
  103. package/corpus/templates/clips/app/i18n/ar-SA.ts +12 -1
  104. package/corpus/templates/clips/app/i18n/de-DE.ts +12 -1
  105. package/corpus/templates/clips/app/i18n/en-US.ts +12 -1
  106. package/corpus/templates/clips/app/i18n/es-ES.ts +11 -1
  107. package/corpus/templates/clips/app/i18n/fr-FR.ts +11 -1
  108. package/corpus/templates/clips/app/i18n/hi-IN.ts +10 -1
  109. package/corpus/templates/clips/app/i18n/ja-JP.ts +12 -1
  110. package/corpus/templates/clips/app/i18n/ko-KR.ts +11 -1
  111. package/corpus/templates/clips/app/i18n/pt-BR.ts +11 -1
  112. package/corpus/templates/clips/app/i18n/zh-CN.ts +11 -1
  113. package/corpus/templates/clips/app/i18n/zh-TW.ts +11 -1
  114. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +72 -1
  115. package/corpus/templates/clips/changelog/2026-07-17-choose-which-workspace-receives-new-clips-recordings-and-des.md +6 -0
  116. package/corpus/templates/clips/changelog/2026-07-17-create-folders-directly-from-the-move-menu.md +6 -0
  117. package/corpus/templates/clips/changelog/2026-07-17-failed-desktop-uploads-now-offer-a-direct-way-to-reopen-clip.md +6 -0
  118. package/corpus/templates/clips/desktop/src/app.tsx +1 -1
  119. package/corpus/templates/content/app/entry.client.tsx +6 -1
  120. package/corpus/templates/dispatch/AGENTS.md +5 -0
  121. package/corpus/templates/dispatch/changelog/2026-07-17-apps-page-links-to-other-available-apps.md +6 -0
  122. package/corpus/templates/dispatch/changelog/2026-07-17-curated-template-remixes.md +6 -0
  123. package/corpus/templates/mail/app/entry.client.tsx +6 -1
  124. package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +11 -7
  125. package/corpus/templates/slides/.env.example +0 -1
  126. package/corpus/templates/slides/AGENTS.md +4 -0
  127. package/corpus/templates/slides/DEVELOPING.md +2 -2
  128. package/corpus/templates/slides/actions/index-design-system-with-builder.ts +1 -1
  129. package/corpus/templates/slides/actions/logo-config.ts +6 -7
  130. package/corpus/templates/slides/actions/search-images.ts +11 -39
  131. package/corpus/templates/slides/actions/search-logos.ts +5 -52
  132. package/corpus/templates/slides/app/components/editor/ImageSearchPanel.tsx +1 -1
  133. package/corpus/templates/slides/app/components/editor/LogoSearchPanel.tsx +16 -26
  134. package/corpus/templates/slides/app/entry.client.tsx +6 -1
  135. package/corpus/templates/slides/server/lib/media-search-providers.ts +216 -0
  136. package/corpus/templates/slides/server/register-secrets.ts +30 -0
  137. package/dist/a2a/client.d.ts +38 -1
  138. package/dist/a2a/client.d.ts.map +1 -1
  139. package/dist/a2a/client.js +81 -12
  140. package/dist/a2a/client.js.map +1 -1
  141. package/dist/a2a/handlers.d.ts.map +1 -1
  142. package/dist/a2a/handlers.js +47 -0
  143. package/dist/a2a/handlers.js.map +1 -1
  144. package/dist/a2a/index.d.ts +4 -4
  145. package/dist/a2a/index.d.ts.map +1 -1
  146. package/dist/a2a/index.js +2 -2
  147. package/dist/a2a/index.js.map +1 -1
  148. package/dist/a2a/invoke.d.ts +26 -2
  149. package/dist/a2a/invoke.d.ts.map +1 -1
  150. package/dist/a2a/invoke.js +30 -1
  151. package/dist/a2a/invoke.js.map +1 -1
  152. package/dist/a2a/server.d.ts.map +1 -1
  153. package/dist/a2a/server.js +14 -1
  154. package/dist/a2a/server.js.map +1 -1
  155. package/dist/a2a/types.d.ts +12 -0
  156. package/dist/a2a/types.d.ts.map +1 -1
  157. package/dist/a2a/types.js.map +1 -1
  158. package/dist/action.d.ts +3 -2
  159. package/dist/action.d.ts.map +1 -1
  160. package/dist/action.js.map +1 -1
  161. package/dist/agent/production-agent.d.ts +5 -0
  162. package/dist/agent/production-agent.d.ts.map +1 -1
  163. package/dist/agent/production-agent.js +5 -3
  164. package/dist/agent/production-agent.js.map +1 -1
  165. package/dist/client/AssistantChat.d.ts +14 -1
  166. package/dist/client/AssistantChat.d.ts.map +1 -1
  167. package/dist/client/AssistantChat.js +158 -136
  168. package/dist/client/AssistantChat.js.map +1 -1
  169. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  170. package/dist/client/MultiTabAssistantChat.js +27 -4
  171. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  172. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  173. package/dist/client/agent-chat-adapter.js +21 -39
  174. package/dist/client/agent-chat-adapter.js.map +1 -1
  175. package/dist/client/agent-sidebar-state.d.ts +1 -0
  176. package/dist/client/agent-sidebar-state.d.ts.map +1 -1
  177. package/dist/client/agent-sidebar-state.js +4 -0
  178. package/dist/client/agent-sidebar-state.js.map +1 -1
  179. package/dist/client/analytics.d.ts +14 -0
  180. package/dist/client/analytics.d.ts.map +1 -1
  181. package/dist/client/analytics.js +67 -0
  182. package/dist/client/analytics.js.map +1 -1
  183. package/dist/client/chat/message-components.d.ts +8 -0
  184. package/dist/client/chat/message-components.d.ts.map +1 -1
  185. package/dist/client/chat/message-components.js +62 -19
  186. package/dist/client/chat/message-components.js.map +1 -1
  187. package/dist/client/chat/tool-call-display.d.ts +6 -0
  188. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  189. package/dist/client/chat/tool-call-display.js +83 -14
  190. package/dist/client/chat/tool-call-display.js.map +1 -1
  191. package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts +8 -0
  192. package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts.map +1 -0
  193. package/dist/client/chat/use-agent-chat-lifecycle-tracking.js +51 -0
  194. package/dist/client/chat/use-agent-chat-lifecycle-tracking.js.map +1 -0
  195. package/dist/client/chat-thread-url.d.ts +2 -0
  196. package/dist/client/chat-thread-url.d.ts.map +1 -0
  197. package/dist/client/chat-thread-url.js +12 -0
  198. package/dist/client/chat-thread-url.js.map +1 -0
  199. package/dist/client/error-capture.d.ts.map +1 -1
  200. package/dist/client/error-capture.js +7 -0
  201. package/dist/client/error-capture.js.map +1 -1
  202. package/dist/client/extensions/ExtensionSlot.d.ts +3 -1
  203. package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
  204. package/dist/client/extensions/ExtensionSlot.js +28 -3
  205. package/dist/client/extensions/ExtensionSlot.js.map +1 -1
  206. package/dist/client/index.d.ts +1 -1
  207. package/dist/client/index.d.ts.map +1 -1
  208. package/dist/client/index.js +1 -1
  209. package/dist/client/index.js.map +1 -1
  210. package/dist/client/route-chunk-recovery.d.ts.map +1 -1
  211. package/dist/client/route-chunk-recovery.js +14 -9
  212. package/dist/client/route-chunk-recovery.js.map +1 -1
  213. package/dist/client/session-replay.d.ts +15 -0
  214. package/dist/client/session-replay.d.ts.map +1 -1
  215. package/dist/client/session-replay.js +20 -0
  216. package/dist/client/session-replay.js.map +1 -1
  217. package/dist/collab/routes.d.ts +1 -1
  218. package/dist/collab/struct-routes.d.ts +1 -1
  219. package/dist/extensions/actions.d.ts.map +1 -1
  220. package/dist/extensions/actions.js +2 -10
  221. package/dist/extensions/actions.js.map +1 -1
  222. package/dist/extensions/store.js +1 -1
  223. package/dist/extensions/store.js.map +1 -1
  224. package/dist/localization/default-messages.d.ts +3 -0
  225. package/dist/localization/default-messages.d.ts.map +1 -1
  226. package/dist/localization/default-messages.js +3 -0
  227. package/dist/localization/default-messages.js.map +1 -1
  228. package/dist/mcp/build-server.d.ts +2 -0
  229. package/dist/mcp/build-server.d.ts.map +1 -1
  230. package/dist/mcp/build-server.js +2 -2
  231. package/dist/mcp/build-server.js.map +1 -1
  232. package/dist/notifications/routes.d.ts +2 -2
  233. package/dist/observability/routes.d.ts +1 -1
  234. package/dist/progress/actions.d.ts.map +1 -1
  235. package/dist/progress/actions.js +3 -2
  236. package/dist/progress/actions.js.map +1 -1
  237. package/dist/progress/routes.d.ts +1 -1
  238. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  239. package/dist/provider-api/index.d.ts.map +1 -1
  240. package/dist/provider-api/index.js +91 -8
  241. package/dist/provider-api/index.js.map +1 -1
  242. package/dist/resources/handlers.d.ts +2 -2
  243. package/dist/scripts/call-agent.d.ts.map +1 -1
  244. package/dist/scripts/call-agent.js +107 -16
  245. package/dist/scripts/call-agent.js.map +1 -1
  246. package/dist/server/agent-chat/action-filters-a2a.d.ts +6 -0
  247. package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -1
  248. package/dist/server/agent-chat/action-filters-a2a.js +27 -0
  249. package/dist/server/agent-chat/action-filters-a2a.js.map +1 -1
  250. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  251. package/dist/server/agent-chat-plugin.js +27 -1
  252. package/dist/server/agent-chat-plugin.js.map +1 -1
  253. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  254. package/dist/server/transcribe-voice.d.ts +1 -1
  255. package/dist/styles/agent-conversation.css +7 -0
  256. package/dist/templates/default/app/i18n/ar-SA.ts +20 -0
  257. package/dist/templates/default/app/i18n/de-DE.ts +20 -0
  258. package/dist/templates/default/app/i18n/en-US.ts +20 -0
  259. package/dist/templates/default/app/i18n/es-ES.ts +20 -0
  260. package/dist/templates/default/app/i18n/fr-FR.ts +21 -0
  261. package/dist/templates/default/app/i18n/hi-IN.ts +19 -0
  262. package/dist/templates/default/app/i18n/ja-JP.ts +20 -0
  263. package/dist/templates/default/app/i18n/ko-KR.ts +19 -0
  264. package/dist/templates/default/app/i18n/pt-BR.ts +20 -0
  265. package/dist/templates/default/app/i18n/zh-CN.ts +19 -0
  266. package/dist/templates/default/app/i18n/zh-TW.ts +19 -0
  267. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +28 -0
  268. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
  269. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
  270. package/package.json +1 -1
  271. package/src/templates/default/app/i18n/ar-SA.ts +20 -0
  272. package/src/templates/default/app/i18n/de-DE.ts +20 -0
  273. package/src/templates/default/app/i18n/en-US.ts +20 -0
  274. package/src/templates/default/app/i18n/es-ES.ts +20 -0
  275. package/src/templates/default/app/i18n/fr-FR.ts +21 -0
  276. package/src/templates/default/app/i18n/hi-IN.ts +19 -0
  277. package/src/templates/default/app/i18n/ja-JP.ts +20 -0
  278. package/src/templates/default/app/i18n/ko-KR.ts +19 -0
  279. package/src/templates/default/app/i18n/pt-BR.ts +20 -0
  280. package/src/templates/default/app/i18n/zh-CN.ts +19 -0
  281. package/src/templates/default/app/i18n/zh-TW.ts +19 -0
  282. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +28 -0
  283. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
  284. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
  285. package/corpus/templates/analytics/server/handlers/github.ts +0 -200
  286. package/corpus/templates/analytics/server/handlers/pylon.ts +0 -43
  287. package/corpus/templates/analytics/server/lib/apollo.ts +0 -167
  288. package/corpus/templates/analytics/server/lib/commonroom.ts +0 -149
  289. package/corpus/templates/analytics/server/lib/github.ts +0 -660
  290. package/corpus/templates/analytics/server/lib/mixpanel.ts +0 -156
  291. package/corpus/templates/analytics/server/lib/posthog.ts +0 -194
  292. package/corpus/templates/analytics/server/lib/pylon.ts +0 -109
  293. package/corpus/templates/analytics/server/routes/api/github/graphql.post.ts +0 -1
  294. package/corpus/templates/analytics/server/routes/api/github/issue.get.ts +0 -1
  295. package/corpus/templates/analytics/server/routes/api/github/org-prs.get.ts +0 -1
  296. package/corpus/templates/analytics/server/routes/api/github/pr.get.ts +0 -1
  297. package/corpus/templates/analytics/server/routes/api/github/prs.get.ts +0 -1
  298. package/corpus/templates/analytics/server/routes/api/github/search.get.ts +0 -1
  299. package/corpus/templates/slides/actions/fetch-logos.ts +0 -90
  300. package/corpus/templates/slides/actions/image-search.ts +0 -64
  301. package/corpus/templates/slides/actions/import-github.ts +0 -182
  302. package/corpus/templates/slides/actions/logo-lookup.ts +0 -113
@@ -12,6 +12,15 @@ dive that asks what happened in customer conversations.
12
12
 
13
13
  ## Actions
14
14
 
15
+ - `gong-native-insights` — one provider-native qualitative synthesis operation
16
+ (`ask_account`, `ask_deal`, or `generate_brief`) through Gong's connected MCP.
17
+ Use it for themes, risks, summaries, and deck narrative when the native tools
18
+ are connected. One action invocation makes at most one Gong AI request; omit
19
+ `operation` to inspect its schemas without spending a credit request, and set
20
+ `allowCreditRequest=true` only for the one consolidated request you intend to
21
+ send. Paid calls also require a workspace owner to enable them once with
22
+ `configure-gong-native-insights`; the policy defaults off and disabling it
23
+ never blocks the raw evidence path.
15
24
  - `account-deep-dive` — first choice for named account/deal deep dives that
16
25
  need HubSpot plus Gong. It searches by account/deal/company/contact domain,
17
26
  loads Gong call details, and returns compact transcript excerpts for synthesis.
@@ -19,18 +28,32 @@ dive that asks what happened in customer conversations.
19
28
  a single transcript by call ID, or return transcript excerpts for matching
20
29
  calls.
21
30
 
22
- ## Two-Pass Search Algorithm
31
+ ## Route Synthesis and Evidence Separately
23
32
 
24
- Gong search uses `POST /v2/calls/extensive` (not `GET /v2/calls` that returns
25
- no parties). The search works in two passes:
33
+ - Use `gong-native-insights` for qualitative synthesis where Gong may retrieve
34
+ and analyze evidence internally. Its result is provider synthesis: coverage
35
+ is unknown and raw transcript evidence is unavailable.
36
+ - Use `gong-calls` or `provider-corpus-job` for quotes, exact counts, transcript
37
+ records, coverage-sensitive claims, and proof that something was absent.
38
+ - Consolidate related native questions into one narrowly scoped request. Each
39
+ native operation independently consumes Gong credits, so do not make one call
40
+ per slide, bullet, or sub-question.
41
+ - From a sibling app, call the exact cataloged read action directly through
42
+ `call-agent`'s `action` + `input` mode. This skips Analytics' second model loop.
43
+ Use ordinary message delegation only when Analytics must plan, join sources,
44
+ or synthesize across multiple operations.
26
45
 
27
- 1. **Title match first**: filter calls whose title contains any search variant
28
- directly.
29
- 2. **Party/email-domain match second**: for calls that did not title-match,
30
- fetch party data via the extensive endpoint and match against external
31
- participant names, emails, and email domains.
46
+ ## Account Search Algorithm
32
47
 
33
- This two-pass approach catches calls titled "Builder <> Acme" when you search
48
+ Gong search pages `POST /v2/calls/extensive` directly with the requested date
49
+ window and party data (not `GET /v2/calls`, which returns no parties). Each call
50
+ is matched against both:
51
+
52
+ 1. **Title variants**: the call title contains a generated search variant.
53
+ 2. **External parties**: an external participant's name, email, or domain
54
+ matches a generated search variant.
55
+
56
+ This catches calls titled "Builder <> Acme" when you search
34
57
  "Acme Corp" by matching the "acme" name variant or "@acme.com" domain variant.
35
58
  The lib generates variants by stripping deal suffixes (`- New Deal`, `- Fusion`),
36
59
  corporate suffixes (`Group`, `Inc`, `Corp`, `LLC`), and deriving first word and
@@ -63,6 +86,10 @@ For account or deal deep dives:
63
86
  4. Use `transcriptLimit` around 3-5 for a first pass. For broad coverage of a
64
87
  named account, increase to 10-20 — the action supports up to 50. Increase
65
88
  when the returned calls don't cover the time window or key people you need.
89
+ For a bounded "review all calls" request with at most 50 matches, make one
90
+ call with `exhaustive=true`, `after`, `before`, and
91
+ `includeTranscripts=true`; do not split discovery and transcripts into
92
+ separate agent tool calls.
66
93
  5. Use the compact transcript excerpts returned by `includeTranscripts=true`.
67
94
  Do not fetch raw individual transcripts unless the user asks for exhaustive
68
95
  quoting, debugging, or export.
@@ -91,22 +118,26 @@ When a single transcript is needed, `gong-calls(transcript: "...")` returns
91
118
  compact extracted text by default. Set `rawTranscript=true` only for
92
119
  debugging/export, and never pass raw transcript payloads into `save-analysis`.
93
120
 
94
- ## Complete-Coverage Transcript Scan (corpus-first)
121
+ ## Complete-Coverage Transcript Scan
95
122
 
96
123
  When the question is "do ANY of these calls mention X?" or "how many calls across
97
124
  this cohort mention X?" — where missing a single call makes the answer wrong — do
98
- NOT rely on `includeTranscripts` excerpts. They load only the newest few calls,
99
- truncated, and concluding "not mentioned" from that sample is how you ship a false
100
- negative. Use this two-step pattern:
101
-
102
- 1. **Discover every call (cheap, metadata only).** For each account/deal, call
103
- `gong-calls` with `exhaustive: true` and a bounded window via `after` (e.g. the
104
- deal's closed-won date) and optionally `before`. This returns ALL matching
105
- calls — not just `limit` and never auto-loads transcripts, so it stays under
106
- the function timeout. Collect the full `calls[]` (IDs + titles) across the cohort.
107
-
108
- 2. **Batch-search the raw transcript endpoint.** Prefer `provider-corpus-job`
109
- with `mode: "batch-search"` over one-call-at-a-time loops. Use
125
+ NOT conclude absence from a sampled `includeTranscripts` result. Choose the
126
+ smallest complete path for the bounded cohort:
127
+
128
+ 1. **Named account, up to 50 calls, qualitative review.** Make one `gong-calls`
129
+ call with `exhaustive=true`, a bounded `after`/`before` window, and
130
+ `includeTranscripts=true`. The action discovers every matching call and
131
+ fetches transcript excerpts in batches, returning `transcriptCoverage`. Do
132
+ not fetch the same call IDs one at a time afterward.
133
+
134
+ 2. **Bounded mention/absence search, up to 200 calls.** Make one `gong-calls`
135
+ call with `exhaustive=true`, the date window, `transcriptQuery`, and an
136
+ adequate `transcriptScanLimit`. Report its coverage fields and only make an
137
+ absence claim when coverage is complete.
138
+
139
+ 3. **Larger or multi-account corpus.** Prefer `provider-corpus-job` with
140
+ `mode: "batch-search"` over one-call-at-a-time loops. Use
110
141
  `provider-api-catalog(provider: "gong")` and its `corpusRecipes` if you need
111
142
  the exact shape. The canonical request is `POST /calls/transcript` with
112
143
  `batch.itemBodyPath: "filter.callIds"`, `batch.responseItemsPath:
@@ -115,7 +146,7 @@ negative. Use this two-step pattern:
115
146
  call IDs through `batch.inputDatasetId` + `batch.inputValuePath` or through
116
147
  `batch.items`.
117
148
 
118
- 3. **Use `run-code` only for joins/reductions around the corpus path.** After
149
+ 4. **Use `run-code` only for joins/reductions around the corpus path.** After
119
150
  the transcript job exists, use `run-code`, `query-staged-dataset`, or job
120
151
  results to join hits back to deals/accounts, compute variants, dedupe, and
121
152
  format evidence. A `run-code` loop over `gong-calls(transcript: id)` is a
@@ -7,54 +7,32 @@ description: >
7
7
 
8
8
  # Apollo.io Integration (Contact & Company Enrichment)
9
9
 
10
- ## Connection
10
+ ## Use the shared provider API actions
11
11
 
12
- - **Base URL**: `https://api.apollo.io`
13
- - **Auth**: `x-api-key: $APOLLO_API_KEY`
14
- - **Env vars**: `APOLLO_API_KEY`
15
- - **Caching**: 10-minute in-memory cache, max 120 entries
12
+ Apollo has no provider-specific action, route, or server client in Analytics.
13
+ Use the shared provider API substrate:
16
14
 
17
- ## Server Lib & API Routes
15
+ - `provider-api-catalog` with `provider: "apollo"` to inspect the registered
16
+ base URL, authentication, official docs, placeholders, and examples.
17
+ - `provider-api-docs` before relying on a remembered endpoint or request body.
18
+ - `provider-api-request` for the authenticated request. The server injects
19
+ `APOLLO_API_KEY` as `x-api-key`; never pass the key in action arguments.
18
20
 
19
- - **File**: `server/lib/apollo.ts`
21
+ For large searches, pass `stageAs` and the documented pagination settings, then
22
+ use `query-staged-dataset` to filter or aggregate without loading the full
23
+ response into agent context.
20
24
 
21
- ### Exported Functions
22
-
23
- | Function | Description |
24
- | ------------------------------------- | --------------------------------------------------- |
25
- | `searchPeople(params)` | Search people by criteria |
26
- | `enrichPerson(email)` | Enrich a contact by email (returns null on failure) |
27
- | `searchOrganizations(query, params?)` | Search companies |
28
- | `enrichOrganization(domain)` | Enrich company by domain (returns null on failure) |
29
-
30
- ### API Routes
31
-
32
- | Route | Description |
33
- | ------------------------ | ------------------------- |
34
- | `GET /api/apollo/search` | Search contacts/companies |
35
-
36
- ## Script Usage
25
+ ## Example workflow
37
26
 
38
27
  ```bash
39
- # Search by email
40
- pnpm action apollo-search --email=user@example.com
41
-
42
- # Search by company
43
- pnpm action apollo-search --company=Example Inc
44
-
45
- # Search by domain
46
- pnpm action apollo-search --domain=example.com
47
-
48
- # Find decision-makers
49
- pnpm action apollo-search --company=Example Inc --title=CTO
50
-
51
- # Search by name
52
- pnpm action apollo-search --name="John Smith"
28
+ pnpm action provider-api-catalog --provider=apollo
29
+ pnpm action provider-api-docs --provider=apollo
30
+ pnpm action provider-api-request --provider=apollo --method=POST --path=/api/v1/mixed_people/search --body='{"q_keywords":"vp marketing","page":1,"per_page":10}'
53
31
  ```
54
32
 
55
33
  ## Key Patterns & Gotchas
56
34
 
57
- - `enrichPerson` and `enrichOrganization` swallow errors and return `null` on failure (try/catch)
58
- - API uses POST for all searches and enrichment POST responses are cached for 10 minutes
59
- - API endpoints: `/v1/mixed_people/search`, `/v1/people/match`, `/v1/mixed_companies/search`, `/v1/organizations/enrich`
60
- - Pagination info available via `response.pagination?.total_entries`
35
+ - Apollo search and enrichment endpoints use POST; confirm current endpoint
36
+ paths and payloads through `provider-api-docs` before calling them.
37
+ - Report the method, path, filters, returned row count, and pagination coverage.
38
+ - Do not treat a default page as complete coverage.
@@ -7,48 +7,33 @@ description: >
7
7
 
8
8
  # Common Room Integration (Community)
9
9
 
10
- ## Connection
10
+ ## Use the shared provider API actions
11
11
 
12
- - **Base URL**: `https://api.commonroom.io/community/v1`
13
- - **Auth**: `Authorization: Bearer $COMMONROOM_API_TOKEN`
14
- - **Env vars**: `COMMONROOM_API_TOKEN`
15
- - **Caching**: 10-minute in-memory cache, max 120 entries
12
+ Common Room has no provider-specific action, route, or server client in
13
+ Analytics. Use the shared provider API substrate:
16
14
 
17
- ## Server Lib & API Routes
15
+ - `provider-api-catalog` with `provider: "commonroom"` to inspect the
16
+ registered base URL, authentication, official docs, and examples.
17
+ - `provider-api-docs` before relying on a remembered endpoint, filter, or
18
+ pagination shape.
19
+ - `provider-api-request` for the authenticated request. The server injects
20
+ `COMMONROOM_API_TOKEN` as a bearer token; never pass it in action arguments.
18
21
 
19
- - **File**: `server/lib/commonroom.ts`
22
+ For broad member or activity pulls, pass `stageAs` and the documented
23
+ pagination settings, then use `query-staged-dataset` to search or aggregate the
24
+ complete staged cohort.
20
25
 
21
- ### Exported Functions
22
-
23
- | Function | Description |
24
- | -------------------------------- | --------------------------------------------------- |
25
- | `getTokenStatus()` | Check API token validity |
26
- | `getMemberByEmail(email)` | Look up a member by email (returns null on failure) |
27
- | `getMembers(params?)` | Search members (POST with query, cursor, limit) |
28
- | `getActivityForMember(memberId)` | Get activity feed for a member |
29
- | `getSegments()` | List community segments |
30
-
31
- ### API Routes
32
-
33
- | Route | Description |
34
- | ----------------------------- | ------------------------ |
35
- | `GET /api/commonroom/members` | Search community members |
36
-
37
- ## Script Usage
26
+ ## Example workflow
38
27
 
39
28
  ```bash
40
- # Search by email
41
- pnpm action commonroom-members --email=user@example.com
42
-
43
- # Search by query
44
- pnpm action commonroom-members --query=search_term
45
-
46
- # List segments
47
- pnpm action commonroom-members --segments
29
+ pnpm action provider-api-catalog --provider=commonroom
30
+ pnpm action provider-api-docs --provider=commonroom
31
+ pnpm action provider-api-request --provider=commonroom --method=GET --path=/members
48
32
  ```
49
33
 
50
34
  ## Key Patterns & Gotchas
51
35
 
52
- - `getMemberByEmail` uses POST `/members/search` and returns single `CommunityMember` or null on error
53
- - API returns `{ items: ... }` wrappers or raw arrays — code handles both
54
- - Use for finding community engagement signals to enrich customer profiles
36
+ - Verify member-search, activity, and segment endpoints in
37
+ `provider-api-docs`; do not rely on the removed bespoke client's assumptions.
38
+ - Report the method, path, filters, returned row count, and pagination coverage.
39
+ - Use raw activity/member evidence for exhaustive or absence-sensitive claims.
@@ -7,70 +7,29 @@ description: >
7
7
 
8
8
  # GitHub Integration
9
9
 
10
- ## Connection
11
-
12
- - **Base URL**: `https://api.github.com` (REST v3), `https://api.github.com/graphql` (GraphQL v4)
13
- - **Auth**: `Authorization: Bearer $GITHUB_TOKEN` (personal access token)
14
- - **Env vars**: `GITHUB_TOKEN`
15
- - **Caching**: 5-minute in-memory cache, max 200 entries
16
-
17
- ## Server Lib & API Routes
18
-
19
- - **Server lib**: `server/lib/github.ts`
20
- - **Route handler**: `server/routes/github.ts`
21
-
22
- ### Exported Functions
23
-
24
- | Function | Description |
25
- | ------------------------------- | --------------------------------------------------------------- |
26
- | `searchPRs(opts)` | Search PRs using GitHub search syntax |
27
- | `searchIssues(opts)` | Search issues using GitHub search syntax |
28
- | `getPR(owner, repo, number)` | Full PR detail — commits, reviews, files (4 parallel API calls) |
29
- | `getIssue(owner, repo, number)` | Issue detail with labels, assignees |
30
- | `listPRs(owner, repo, opts)` | List repo PRs by state (open/closed/all) |
31
- | `searchOrgPRs(opts)` | Convenience wrapper — prepends the `org:<org> is:pr` qualifiers |
32
- | `runGraphQL(query, variables?)` | Raw GraphQL query |
33
-
34
- ### API Routes
35
-
36
- | Route | Description |
37
- | -------------------------------------------------------------------- | -------------------------------------- |
38
- | `GET /api/github/search?q=...&type=pr\|issue&limit=30` | Full GitHub search syntax |
39
- | `GET /api/github/pr?owner=...&repo=...&number=...` | PR detail with commits, reviews, files |
40
- | `GET /api/github/issue?owner=...&repo=...&number=...` | Issue detail |
41
- | `GET /api/github/prs?owner=...&repo=...&state=open\|closed\|all` | List repo PRs |
42
- | `GET /api/github/org-prs?org=<org>&q=...&state=OPEN\|CLOSED\|MERGED` | Org-wide PR search |
43
- | `POST /api/github/graphql` body: `{ query, variables? }` | Raw GraphQL |
44
-
45
- ## Script Usage
46
-
47
- ```bash
48
- # Search open PRs in an org
49
- pnpm action github-prs --org=<org> --query="is:open label:bug"
50
-
51
- # List PRs for a specific repo
52
- pnpm action github-prs --repo=<org>/<repo> --state=open
53
-
54
- # Get full PR detail (commits, reviews, files)
55
- pnpm action github-prs --pr=<org>/<repo>/1234
56
-
57
- # Get issue detail
58
- pnpm action github-prs --issue=<org>/<repo>/567
59
-
60
- # Full GitHub search syntax (works across all orgs/repos)
61
- pnpm action github-prs --search="fix authentication is:pr is:merged"
62
- pnpm action github-prs --search="memory leak" --type=issue
63
-
64
- # Raw GraphQL
65
- pnpm action github-prs --graphql='{ viewer { login } }'
66
-
67
- # Filtering with built-in helpers
68
- pnpm action github-prs --org=<org> --grep="auth" --fields=number,title,state,url
69
- ```
10
+ GitHub access uses the shared provider API runtime and the Analytics GitHub
11
+ OAuth connection. Do not add a separate GitHub client or `/api/github/*`
12
+ pass-through routes.
13
+
14
+ ## Access Paths
15
+
16
+ - Use `github-repo-files` for repository file discovery, bounded text search,
17
+ and file reads. It is the stable, agent-friendly wrapper around the shared
18
+ core implementation.
19
+ - Use `provider-api-catalog`, `provider-api-docs`, and
20
+ `provider-api-request` with provider `github` for pull requests, issues,
21
+ searches, and GraphQL operations not modeled by `github-repo-files`.
22
+ - For broad or paginated analysis, stage the provider response and reduce it
23
+ with `query-staged-dataset` or `run-code` instead of returning a large corpus
24
+ to chat.
25
+
26
+ Authentication remains owned by `server/lib/github-oauth.ts`; provider calls
27
+ must resolve the current viewer's OAuth grant or scoped credential through the
28
+ shared runtime.
70
29
 
71
30
  ## Key Patterns & Gotchas
72
31
 
73
- ### GitHub search qualifiers (useful for --search and --query)
32
+ ### GitHub search qualifiers
74
33
 
75
34
  - `org:<org>` — all repos in org
76
35
  - `repo:<org>/<repo>` — specific repo
@@ -84,9 +43,6 @@ pnpm action github-prs --org=<org> --grep="auth" --fields=number,title,state,url
84
43
  - `review:approved` — approved PRs
85
44
  - `review:changes_requested`
86
45
 
87
- ### Implementation Notes
88
-
89
- - `searchOrgPRs()` is a convenience wrapper that prepends `org:<org> is:pr` — use `searchPRs()` / `searchIssues()` directly for full control
90
- - The REST search API returns up to 100 results per call; paginated list endpoints use `restGetPaginated()` with Link header traversal
91
- - `getPR()` makes 4 parallel API calls: PR data, commits, reviews, files — provides a complete picture in one shot
92
- - 5-minute in-memory cache on all requests
46
+ Use provider documentation to confirm endpoint, version, pagination, and search
47
+ behavior before making absence claims. Report the repository or organization,
48
+ filters, page coverage, and any truncation with the answer.
@@ -7,49 +7,31 @@ description: >
7
7
 
8
8
  # Pylon Integration (Support)
9
9
 
10
- ## Connection
11
-
12
- - **Base URL**: `https://api.usepylon.com`
13
- - **Auth**: `Authorization: Bearer $PYLON_API_KEY`
14
- - **Env vars**: `PYLON_API_KEY`
15
- - **Caching**: 10-minute in-memory cache, max 120 entries
16
-
17
- ## Server Lib & API Routes
18
-
19
- - **File**: `server/lib/pylon.ts`
20
-
21
- ### Exported Functions
22
-
23
- | Function | Description |
24
- | --------------------- | ------------------------------------ |
25
- | `getAccounts(query?)` | List/search accounts |
26
- | `getAccount(id)` | Get single account |
27
- | `getIssues(params?)` | List issues (30-day window enforced) |
28
- | `getContacts(query?)` | Search contacts |
29
-
30
- ### API Routes
31
-
32
- | Route | Description |
33
- | ------------------------- | -------------------- |
34
- | `GET /api/pylon/issues` | List support tickets |
35
- | `GET /api/pylon/accounts` | List accounts |
36
-
37
- ## Script Usage
38
-
39
- ```bash
40
- # Open support tickets for a customer
41
- pnpm action pylon-issues --account="Example Corp" --state=open
42
-
43
- # All issues
44
- pnpm action pylon-issues --query=search_term
45
-
46
- # List accounts
47
- pnpm action pylon-issues --accounts
48
- ```
10
+ Pylon access uses the shared provider API runtime. Do not add a separate Pylon
11
+ client. `/api/pylon/issues` remains only as a thin compatibility route for an
12
+ existing dashboard and delegates to the same action/provider runtime.
13
+
14
+ ## Access Paths
15
+
16
+ - Use `provider-api-catalog`, `provider-api-docs`, and
17
+ `provider-api-request` with provider `pylon` for bounded account, contact,
18
+ and issue queries.
19
+ - Use a data program with `providerFetchAll("pylon", ...)` for reusable joins,
20
+ exhaustive support-ticket analysis, or dashboard sources. Existing risk
21
+ meeting programs demonstrate the HubSpot-to-Pylon domain join.
22
+ - Stage large responses and reduce them with `query-staged-dataset` or
23
+ `run-code` before returning results to chat.
24
+ - For issue corpora, prefer `POST /issues/search` with the created-at filter and
25
+ body cursor. The older `GET /issues` endpoint has a 30-day window and should
26
+ not be used for broad dashboard coverage.
27
+
28
+ Authentication is resolved from the current viewer's scoped Pylon credential
29
+ through the shared provider runtime.
49
30
 
50
31
  ## Key Patterns & Gotchas
51
32
 
52
- - `getIssues` enforces a max 30-day window via `start_time` and `end_time` query params (API requirement)
53
- - API returns `{ data: ... }` wrappers or raw arrays — code handles both defensively
54
- - Pylon API exists in this analytics app (`code/`) but the secrets `pylon.api_key` and `pylon.api_secret` referenced elsewhere are in secrets manager, not env vars
55
- - No Pylon data in BigQuery must query the API directly
33
+ - Confirm the current endpoint, time-window, filter, and cursor contract with
34
+ `provider-api-docs`; do not impose a fixed lookback window in a wrapper.
35
+ - Report inspected issue/account counts, pagination coverage, failed pages, and
36
+ truncation. A sampled response cannot support an exhaustive absence claim.
37
+ - Query Pylon directly unless the user explicitly asks for a warehouse copy.
@@ -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 for incident triage:
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`. Fetch the summary before the
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
- six incident reads above are bounded, user/org-scoped fallback tools for
141
- callers that already know which lookup they need. Generic core
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
@@ -174,14 +176,17 @@ membership id when its native update status reports `update-available`.
174
176
  serialization traps. The script is constrained: only documented dashboard
175
177
  method calls with JSON-compatible arguments are parsed; variables, imports,
176
178
  loops, functions, network, filesystem, and DB access are not available.
177
- - Dashboard extension boxes use `chartType: "extension"` with
178
- `config.extensionSlotId`. The stable per-box slot is
179
- `analytics.dashboard.<dashboard-id>.panel.<panel-id>`. To add an extension,
180
- create/choose it, call `add-extension-slot-target` with that slot id, then
181
- `install-extension` with the same slot id. Installs are per-user; the
182
- dashboard panel remains shared. Slot-backed extensions receive dashboard id,
183
- name, description, current filters, and the panel id/title/slot id as context.
184
- `config.extensionId` is legacy direct embedding for existing dashboards.
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.
185
190
  - Dashboard saves keep bounded history in SQL. Use
186
191
  `list-dashboard-revisions` to inspect undo points and
187
192
  `restore-dashboard-revision` to restore one instead of hand-editing history
@@ -207,7 +212,11 @@ membership id when its native update status reports `update-available`.
207
212
  `update-extension` blocks full-body replacement unless
208
213
  `allowFullReplacement: true` is explicit, and that flag is reserved for a
209
214
  user-requested broad rewrite or a complete replacement body supplied by the
210
- user. If a focused edit fails, do not retry unchanged arguments.
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.
211
220
  - Use framework sharing and access helpers for dashboards, analyses, and saved
212
221
  resources.
213
222
  - Dashboard email reports live in SQL via the
@@ -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: "Get the Notion content calendar database schema.",
8
- schema: z.object({}),
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
- run: async () => {
11
- return await getContentCalendarSchema();
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: "Get all entries from the Notion content calendar.",
11
- schema: z.object({}),
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":{"extensionSlotId":"analytics.dashboard.<dashboard-id>.panel.pipeline-widget"}}).atBottom();',
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 =