@agent-native/core 0.108.0 → 0.109.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +25 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/a2a/client.ts +162 -17
  5. package/corpus/core/src/a2a/correlation.ts +50 -0
  6. package/corpus/core/src/a2a/handlers.ts +200 -14
  7. package/corpus/core/src/a2a/index.ts +7 -1
  8. package/corpus/core/src/a2a/invoke.ts +77 -1
  9. package/corpus/core/src/a2a/server.ts +13 -1
  10. package/corpus/core/src/a2a/task-store.ts +146 -6
  11. package/corpus/core/src/a2a/types.ts +32 -0
  12. package/corpus/core/src/action.ts +5 -2
  13. package/corpus/core/src/agent/production-agent.ts +33 -4
  14. package/corpus/core/src/client/AssistantChat.tsx +648 -603
  15. package/corpus/core/src/client/MultiTabAssistantChat.tsx +31 -4
  16. package/corpus/core/src/client/agent-chat-adapter.ts +23 -37
  17. package/corpus/core/src/client/agent-sidebar-state.ts +4 -0
  18. package/corpus/core/src/client/analytics.ts +84 -0
  19. package/corpus/core/src/client/chat/message-components.tsx +94 -22
  20. package/corpus/core/src/client/chat/tool-call-display.tsx +170 -47
  21. package/corpus/core/src/client/chat/use-agent-chat-lifecycle-tracking.ts +74 -0
  22. package/corpus/core/src/client/chat-thread-url.ts +11 -0
  23. package/corpus/core/src/client/error-capture.ts +12 -0
  24. package/corpus/core/src/client/extensions/ExtensionSlot.tsx +37 -1
  25. package/corpus/core/src/client/index.ts +2 -0
  26. package/corpus/core/src/client/route-chunk-recovery.ts +20 -8
  27. package/corpus/core/src/client/session-replay.ts +31 -0
  28. package/corpus/core/src/client/use-run-stuck-detection.ts +27 -1
  29. package/corpus/core/src/db/client.ts +55 -0
  30. package/corpus/core/src/extensions/actions.ts +2 -14
  31. package/corpus/core/src/extensions/store.ts +1 -1
  32. package/corpus/core/src/localization/default-messages.ts +3 -0
  33. package/corpus/core/src/mcp/build-server.ts +2 -2
  34. package/corpus/core/src/observability/traces.ts +172 -19
  35. package/corpus/core/src/progress/actions.ts +4 -2
  36. package/corpus/core/src/provider-api/index.ts +205 -105
  37. package/corpus/core/src/scripts/call-agent.ts +190 -19
  38. package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +112 -25
  39. package/corpus/core/src/server/agent-chat-plugin.ts +136 -4
  40. package/corpus/core/src/styles/agent-conversation.css +7 -0
  41. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +20 -0
  42. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +20 -0
  43. package/corpus/core/src/templates/default/app/i18n/en-US.ts +20 -0
  44. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +20 -0
  45. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +21 -0
  46. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +19 -0
  47. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +20 -0
  48. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +19 -0
  49. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +20 -0
  50. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +19 -0
  51. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +19 -0
  52. package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +49 -0
  53. package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
  54. package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +7 -1
  55. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
  56. package/corpus/core/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +1 -1
  57. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +29 -10
  58. package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +54 -23
  59. package/corpus/templates/analytics/.builder/skills/apollo/SKILL.md +19 -41
  60. package/corpus/templates/analytics/.builder/skills/commonroom/SKILL.md +20 -35
  61. package/corpus/templates/analytics/.builder/skills/github/SKILL.md +23 -67
  62. package/corpus/templates/analytics/.builder/skills/pylon/SKILL.md +25 -43
  63. package/corpus/templates/analytics/AGENTS.md +22 -13
  64. package/corpus/templates/analytics/actions/account-deep-dive.ts +1 -0
  65. package/corpus/templates/analytics/actions/configure-gong-native-insights.ts +29 -0
  66. package/corpus/templates/analytics/actions/content-calendar-schema.ts +8 -4
  67. package/corpus/templates/analytics/actions/content-calendar.ts +12 -4
  68. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +2 -1
  69. package/corpus/templates/analytics/actions/gong-calls.ts +113 -22
  70. package/corpus/templates/analytics/actions/gong-native-insights.ts +166 -0
  71. package/corpus/templates/analytics/actions/hubspot-deals.ts +190 -46
  72. package/corpus/templates/analytics/actions/pylon-issues.ts +123 -0
  73. package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +1 -1
  74. package/corpus/templates/analytics/actions/slack-messages.ts +179 -27
  75. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +48 -152
  76. package/corpus/templates/analytics/app/components/ui/chart.tsx +1 -1
  77. package/corpus/templates/analytics/app/hooks/use-chart-tooltip-flip.ts +21 -6
  78. package/corpus/templates/analytics/app/i18n/zh-TW.ts +13 -0
  79. package/corpus/templates/analytics/app/i18n-data.ts +134 -0
  80. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +181 -30
  81. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +6 -0
  82. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +4 -3
  83. package/corpus/templates/analytics/changelog/2026-07-17-analytics-now-includes-a-default-alert-for-spikes-in-stuck-agent-chats.md +6 -0
  84. package/corpus/templates/analytics/changelog/2026-07-17-dashboard-editors-can-add-shared-extensions-or-opt-into-per-.md +6 -0
  85. package/corpus/templates/analytics/changelog/2026-07-17-dashboard-extensions-show-a-loading-skeleton.md +6 -0
  86. package/corpus/templates/analytics/changelog/2026-07-17-errors-now-group-repeat-failures-consistently-and-keep-priva.md +6 -0
  87. package/corpus/templates/analytics/changelog/2026-07-17-gong-transcript-reviews-now-batch-bounded-call-windows-for-f.md +6 -0
  88. package/corpus/templates/analytics/changelog/2026-07-17-hubspot-deal-filters-now-run-in-hubspot-before-paging-result.md +6 -0
  89. package/corpus/templates/analytics/changelog/2026-07-17-notion-content-calendars-now-discover-the-matching-database-.md +6 -0
  90. package/corpus/templates/analytics/changelog/2026-07-17-pylon-dashboard-reads-now-use-the-paginated-issue-search-api.md +6 -0
  91. package/corpus/templates/analytics/changelog/2026-07-17-slack-reads-no-longer-join-channels-and-report-pagination-coverage.md +6 -0
  92. package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +23 -14
  93. package/corpus/templates/analytics/docs/schemas/tracked-events.md +5 -1
  94. package/corpus/templates/analytics/server/handlers/notion.ts +14 -3
  95. package/corpus/templates/analytics/server/handlers/slack.ts +182 -29
  96. package/corpus/templates/analytics/server/jobs/analytics-alerts.ts +3 -3
  97. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +2 -6
  98. package/corpus/templates/analytics/server/lib/analytics-alerts.ts +209 -87
  99. package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +6 -2
  100. package/corpus/templates/analytics/server/lib/error-capture.ts +75 -8
  101. package/corpus/templates/analytics/server/lib/gong-native-policy.ts +72 -0
  102. package/corpus/templates/analytics/server/lib/gong.ts +54 -66
  103. package/corpus/templates/analytics/server/lib/hubspot.ts +40 -3
  104. package/corpus/templates/analytics/server/lib/notion.ts +83 -8
  105. package/corpus/templates/analytics/server/lib/real-data-actions.ts +4 -0
  106. package/corpus/templates/analytics/server/lib/slack.ts +242 -90
  107. package/corpus/templates/analytics/server/plugins/agent-chat.ts +3 -3
  108. package/corpus/templates/analytics/server/routes/api/pylon/accounts.get.ts +42 -1
  109. package/corpus/templates/analytics/server/routes/api/pylon/issues.get.ts +71 -1
  110. package/corpus/templates/analytics/server/routes/api/test-connection.post.ts +44 -4
  111. package/corpus/templates/clips/actions/finalize-recording.ts +541 -62
  112. package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +19 -1
  113. package/corpus/templates/clips/app/components/library/create-folder-dialog.tsx +123 -0
  114. package/corpus/templates/clips/app/components/library/library-grid.tsx +42 -4
  115. package/corpus/templates/clips/app/components/library/recording-card.tsx +30 -0
  116. package/corpus/templates/clips/app/components/player/playback-comment-overlay.tsx +17 -2
  117. package/corpus/templates/clips/app/components/player/video-player.tsx +14 -2
  118. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +2 -2
  119. package/corpus/templates/clips/app/entry.client.tsx +6 -1
  120. package/corpus/templates/clips/app/i18n/ar-SA.ts +12 -1
  121. package/corpus/templates/clips/app/i18n/de-DE.ts +12 -1
  122. package/corpus/templates/clips/app/i18n/en-US.ts +12 -1
  123. package/corpus/templates/clips/app/i18n/es-ES.ts +11 -1
  124. package/corpus/templates/clips/app/i18n/fr-FR.ts +11 -1
  125. package/corpus/templates/clips/app/i18n/hi-IN.ts +10 -1
  126. package/corpus/templates/clips/app/i18n/ja-JP.ts +12 -1
  127. package/corpus/templates/clips/app/i18n/ko-KR.ts +11 -1
  128. package/corpus/templates/clips/app/i18n/pt-BR.ts +11 -1
  129. package/corpus/templates/clips/app/i18n/zh-CN.ts +11 -1
  130. package/corpus/templates/clips/app/i18n/zh-TW.ts +11 -1
  131. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +72 -1
  132. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +1 -1
  133. package/corpus/templates/clips/app/routes/record.tsx +3 -3
  134. package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -3
  135. package/corpus/templates/clips/changelog/2026-07-17-choose-which-workspace-receives-new-clips-recordings-and-des.md +6 -0
  136. package/corpus/templates/clips/changelog/2026-07-17-clips-now-retries-storage-verification-in-the-background-ins.md +6 -0
  137. package/corpus/templates/clips/changelog/2026-07-17-create-folders-directly-from-the-move-menu.md +6 -0
  138. package/corpus/templates/clips/changelog/2026-07-17-failed-desktop-uploads-now-offer-a-direct-way-to-reopen-clip.md +6 -0
  139. package/corpus/templates/clips/changelog/2026-07-17-fixed-broken-thumbnail-icons-appearing-over-playable-clip-em.md +6 -0
  140. package/corpus/templates/clips/changelog/2026-07-17-playback-comments-stay-readable-at-faster-playback-speeds.md +6 -0
  141. package/corpus/templates/clips/chrome-extension/src/finalize-recovery.ts +3 -0
  142. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +3 -3
  143. package/corpus/templates/clips/desktop/src/app.tsx +19 -7
  144. package/corpus/templates/clips/desktop/src/lib/recorder.ts +111 -13
  145. package/corpus/templates/clips/desktop/src/lib/upload-verification.ts +16 -7
  146. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +2 -4
  147. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +32 -15
  148. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +45 -18
  149. package/corpus/templates/clips/server/jobs/media-verification.ts +130 -0
  150. package/corpus/templates/clips/server/lib/builder-media-compression.ts +15 -0
  151. package/corpus/templates/clips/server/lib/media-verification-state.ts +38 -0
  152. package/corpus/templates/clips/server/lib/player-thumbnail-url.ts +31 -0
  153. package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +10 -3
  154. package/corpus/templates/clips/server/plugins/auth.ts +5 -5
  155. package/corpus/templates/clips/server/plugins/calendar-jobs.ts +2 -0
  156. package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +12 -2
  157. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +6 -1
  158. package/corpus/templates/clips/server/routes/api/thumbnail/[recordingId].get.ts +340 -0
  159. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +24 -7
  160. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +91 -7
  161. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/status.get.ts +14 -0
  162. package/corpus/templates/clips/shared/finalize-recovery.ts +61 -2
  163. package/corpus/templates/clips/shared/share-meta.ts +1 -1
  164. package/corpus/templates/content/app/entry.client.tsx +6 -1
  165. package/corpus/templates/dispatch/AGENTS.md +5 -0
  166. package/corpus/templates/dispatch/changelog/2026-07-17-apps-page-links-to-other-available-apps.md +6 -0
  167. package/corpus/templates/dispatch/changelog/2026-07-17-curated-template-remixes.md +6 -0
  168. package/corpus/templates/mail/app/entry.client.tsx +6 -1
  169. package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +11 -7
  170. package/corpus/templates/slides/.env.example +0 -1
  171. package/corpus/templates/slides/AGENTS.md +4 -0
  172. package/corpus/templates/slides/DEVELOPING.md +2 -2
  173. package/corpus/templates/slides/actions/index-design-system-with-builder.ts +1 -1
  174. package/corpus/templates/slides/actions/logo-config.ts +6 -7
  175. package/corpus/templates/slides/actions/search-images.ts +11 -39
  176. package/corpus/templates/slides/actions/search-logos.ts +5 -52
  177. package/corpus/templates/slides/app/components/editor/ImageSearchPanel.tsx +1 -1
  178. package/corpus/templates/slides/app/components/editor/LogoSearchPanel.tsx +16 -26
  179. package/corpus/templates/slides/app/entry.client.tsx +6 -1
  180. package/corpus/templates/slides/server/lib/media-search-providers.ts +216 -0
  181. package/corpus/templates/slides/server/register-secrets.ts +30 -0
  182. package/dist/a2a/client.d.ts +47 -1
  183. package/dist/a2a/client.d.ts.map +1 -1
  184. package/dist/a2a/client.js +94 -12
  185. package/dist/a2a/client.js.map +1 -1
  186. package/dist/a2a/correlation.d.ts +10 -0
  187. package/dist/a2a/correlation.d.ts.map +1 -0
  188. package/dist/a2a/correlation.js +40 -0
  189. package/dist/a2a/correlation.js.map +1 -0
  190. package/dist/a2a/handlers.d.ts.map +1 -1
  191. package/dist/a2a/handlers.js +147 -15
  192. package/dist/a2a/handlers.js.map +1 -1
  193. package/dist/a2a/index.d.ts +4 -4
  194. package/dist/a2a/index.d.ts.map +1 -1
  195. package/dist/a2a/index.js +2 -2
  196. package/dist/a2a/index.js.map +1 -1
  197. package/dist/a2a/invoke.d.ts +29 -2
  198. package/dist/a2a/invoke.d.ts.map +1 -1
  199. package/dist/a2a/invoke.js +33 -1
  200. package/dist/a2a/invoke.js.map +1 -1
  201. package/dist/a2a/server.d.ts.map +1 -1
  202. package/dist/a2a/server.js +14 -1
  203. package/dist/a2a/server.js.map +1 -1
  204. package/dist/a2a/task-store.d.ts +12 -1
  205. package/dist/a2a/task-store.d.ts.map +1 -1
  206. package/dist/a2a/task-store.js +96 -6
  207. package/dist/a2a/task-store.js.map +1 -1
  208. package/dist/a2a/types.d.ts +27 -0
  209. package/dist/a2a/types.d.ts.map +1 -1
  210. package/dist/a2a/types.js.map +1 -1
  211. package/dist/action.d.ts +5 -2
  212. package/dist/action.d.ts.map +1 -1
  213. package/dist/action.js.map +1 -1
  214. package/dist/agent/production-agent.d.ts +14 -0
  215. package/dist/agent/production-agent.d.ts.map +1 -1
  216. package/dist/agent/production-agent.js +19 -3
  217. package/dist/agent/production-agent.js.map +1 -1
  218. package/dist/client/AssistantChat.d.ts +14 -1
  219. package/dist/client/AssistantChat.d.ts.map +1 -1
  220. package/dist/client/AssistantChat.js +158 -136
  221. package/dist/client/AssistantChat.js.map +1 -1
  222. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  223. package/dist/client/MultiTabAssistantChat.js +27 -4
  224. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  225. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  226. package/dist/client/agent-chat-adapter.js +21 -39
  227. package/dist/client/agent-chat-adapter.js.map +1 -1
  228. package/dist/client/agent-sidebar-state.d.ts +1 -0
  229. package/dist/client/agent-sidebar-state.d.ts.map +1 -1
  230. package/dist/client/agent-sidebar-state.js +4 -0
  231. package/dist/client/agent-sidebar-state.js.map +1 -1
  232. package/dist/client/analytics.d.ts +14 -0
  233. package/dist/client/analytics.d.ts.map +1 -1
  234. package/dist/client/analytics.js +67 -0
  235. package/dist/client/analytics.js.map +1 -1
  236. package/dist/client/chat/message-components.d.ts +8 -0
  237. package/dist/client/chat/message-components.d.ts.map +1 -1
  238. package/dist/client/chat/message-components.js +62 -19
  239. package/dist/client/chat/message-components.js.map +1 -1
  240. package/dist/client/chat/tool-call-display.d.ts +6 -0
  241. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  242. package/dist/client/chat/tool-call-display.js +83 -14
  243. package/dist/client/chat/tool-call-display.js.map +1 -1
  244. package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts +8 -0
  245. package/dist/client/chat/use-agent-chat-lifecycle-tracking.d.ts.map +1 -0
  246. package/dist/client/chat/use-agent-chat-lifecycle-tracking.js +51 -0
  247. package/dist/client/chat/use-agent-chat-lifecycle-tracking.js.map +1 -0
  248. package/dist/client/chat-thread-url.d.ts +2 -0
  249. package/dist/client/chat-thread-url.d.ts.map +1 -0
  250. package/dist/client/chat-thread-url.js +12 -0
  251. package/dist/client/chat-thread-url.js.map +1 -0
  252. package/dist/client/error-capture.d.ts.map +1 -1
  253. package/dist/client/error-capture.js +7 -0
  254. package/dist/client/error-capture.js.map +1 -1
  255. package/dist/client/extensions/ExtensionSlot.d.ts +3 -1
  256. package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
  257. package/dist/client/extensions/ExtensionSlot.js +28 -3
  258. package/dist/client/extensions/ExtensionSlot.js.map +1 -1
  259. package/dist/client/index.d.ts +1 -1
  260. package/dist/client/index.d.ts.map +1 -1
  261. package/dist/client/index.js +1 -1
  262. package/dist/client/index.js.map +1 -1
  263. package/dist/client/route-chunk-recovery.d.ts.map +1 -1
  264. package/dist/client/route-chunk-recovery.js +14 -9
  265. package/dist/client/route-chunk-recovery.js.map +1 -1
  266. package/dist/client/session-replay.d.ts +15 -0
  267. package/dist/client/session-replay.d.ts.map +1 -1
  268. package/dist/client/session-replay.js +20 -0
  269. package/dist/client/session-replay.js.map +1 -1
  270. package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
  271. package/dist/client/use-run-stuck-detection.js +25 -1
  272. package/dist/client/use-run-stuck-detection.js.map +1 -1
  273. package/dist/db/client.d.ts +7 -0
  274. package/dist/db/client.d.ts.map +1 -1
  275. package/dist/db/client.js +33 -0
  276. package/dist/db/client.js.map +1 -1
  277. package/dist/extensions/actions.d.ts.map +1 -1
  278. package/dist/extensions/actions.js +2 -10
  279. package/dist/extensions/actions.js.map +1 -1
  280. package/dist/extensions/store.js +1 -1
  281. package/dist/extensions/store.js.map +1 -1
  282. package/dist/localization/default-messages.d.ts +3 -0
  283. package/dist/localization/default-messages.d.ts.map +1 -1
  284. package/dist/localization/default-messages.js +3 -0
  285. package/dist/localization/default-messages.js.map +1 -1
  286. package/dist/mcp/build-server.d.ts +2 -0
  287. package/dist/mcp/build-server.d.ts.map +1 -1
  288. package/dist/mcp/build-server.js +2 -2
  289. package/dist/mcp/build-server.js.map +1 -1
  290. package/dist/notifications/routes.d.ts +2 -2
  291. package/dist/observability/routes.d.ts +5 -5
  292. package/dist/observability/traces.d.ts +9 -0
  293. package/dist/observability/traces.d.ts.map +1 -1
  294. package/dist/observability/traces.js +137 -19
  295. package/dist/observability/traces.js.map +1 -1
  296. package/dist/progress/actions.d.ts.map +1 -1
  297. package/dist/progress/actions.js +3 -2
  298. package/dist/progress/actions.js.map +1 -1
  299. package/dist/progress/routes.d.ts +1 -1
  300. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  301. package/dist/provider-api/index.d.ts.map +1 -1
  302. package/dist/provider-api/index.js +91 -8
  303. package/dist/provider-api/index.js.map +1 -1
  304. package/dist/scripts/call-agent.d.ts.map +1 -1
  305. package/dist/scripts/call-agent.js +140 -17
  306. package/dist/scripts/call-agent.js.map +1 -1
  307. package/dist/secrets/routes.d.ts +9 -9
  308. package/dist/server/agent-chat/action-filters-a2a.d.ts +24 -2
  309. package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -1
  310. package/dist/server/agent-chat/action-filters-a2a.js +62 -7
  311. package/dist/server/agent-chat/action-filters-a2a.js.map +1 -1
  312. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  313. package/dist/server/agent-chat-plugin.js +118 -5
  314. package/dist/server/agent-chat-plugin.js.map +1 -1
  315. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  316. package/dist/server/transcribe-voice.d.ts +1 -1
  317. package/dist/styles/agent-conversation.css +7 -0
  318. package/dist/templates/default/app/i18n/ar-SA.ts +20 -0
  319. package/dist/templates/default/app/i18n/de-DE.ts +20 -0
  320. package/dist/templates/default/app/i18n/en-US.ts +20 -0
  321. package/dist/templates/default/app/i18n/es-ES.ts +20 -0
  322. package/dist/templates/default/app/i18n/fr-FR.ts +21 -0
  323. package/dist/templates/default/app/i18n/hi-IN.ts +19 -0
  324. package/dist/templates/default/app/i18n/ja-JP.ts +20 -0
  325. package/dist/templates/default/app/i18n/ko-KR.ts +19 -0
  326. package/dist/templates/default/app/i18n/pt-BR.ts +20 -0
  327. package/dist/templates/default/app/i18n/zh-CN.ts +19 -0
  328. package/dist/templates/default/app/i18n/zh-TW.ts +19 -0
  329. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +49 -0
  330. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
  331. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +7 -1
  332. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
  333. package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +1 -1
  334. package/package.json +1 -1
  335. package/src/templates/default/app/i18n/ar-SA.ts +20 -0
  336. package/src/templates/default/app/i18n/de-DE.ts +20 -0
  337. package/src/templates/default/app/i18n/en-US.ts +20 -0
  338. package/src/templates/default/app/i18n/es-ES.ts +20 -0
  339. package/src/templates/default/app/i18n/fr-FR.ts +21 -0
  340. package/src/templates/default/app/i18n/hi-IN.ts +19 -0
  341. package/src/templates/default/app/i18n/ja-JP.ts +20 -0
  342. package/src/templates/default/app/i18n/ko-KR.ts +19 -0
  343. package/src/templates/default/app/i18n/pt-BR.ts +20 -0
  344. package/src/templates/default/app/i18n/zh-CN.ts +19 -0
  345. package/src/templates/default/app/i18n/zh-TW.ts +19 -0
  346. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +49 -0
  347. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +5 -0
  348. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +7 -1
  349. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +13 -0
  350. package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +1 -1
  351. package/corpus/templates/analytics/server/handlers/github.ts +0 -200
  352. package/corpus/templates/analytics/server/handlers/pylon.ts +0 -43
  353. package/corpus/templates/analytics/server/lib/apollo.ts +0 -167
  354. package/corpus/templates/analytics/server/lib/commonroom.ts +0 -149
  355. package/corpus/templates/analytics/server/lib/github.ts +0 -660
  356. package/corpus/templates/analytics/server/lib/mixpanel.ts +0 -156
  357. package/corpus/templates/analytics/server/lib/posthog.ts +0 -194
  358. package/corpus/templates/analytics/server/lib/pylon.ts +0 -109
  359. package/corpus/templates/analytics/server/routes/api/github/graphql.post.ts +0 -1
  360. package/corpus/templates/analytics/server/routes/api/github/issue.get.ts +0 -1
  361. package/corpus/templates/analytics/server/routes/api/github/org-prs.get.ts +0 -1
  362. package/corpus/templates/analytics/server/routes/api/github/pr.get.ts +0 -1
  363. package/corpus/templates/analytics/server/routes/api/github/prs.get.ts +0 -1
  364. package/corpus/templates/analytics/server/routes/api/github/search.get.ts +0 -1
  365. package/corpus/templates/slides/actions/fetch-logos.ts +0 -90
  366. package/corpus/templates/slides/actions/image-search.ts +0 -64
  367. package/corpus/templates/slides/actions/import-github.ts +0 -182
  368. package/corpus/templates/slides/actions/logo-lookup.ts +0 -113
@@ -117,6 +117,54 @@ const answer = await callAgent(
117
117
  // answer is a plain string
118
118
  ```
119
119
 
120
+ ### Fast bounded read: `invokeAgentAction()`
121
+
122
+ When the caller knows the exact receiver-owned read action and arguments, skip
123
+ the receiver's model loop:
124
+
125
+ ```ts
126
+ import { invokeAgentAction } from "@agent-native/core/a2a";
127
+
128
+ const { result } = await invokeAgentAction({
129
+ target: "analytics",
130
+ action: "gong-calls",
131
+ input: { company: "Acme", days: 90, includeTranscripts: true },
132
+ userEmail,
133
+ orgDomain,
134
+ orgSecret,
135
+ });
136
+ ```
137
+
138
+ The receiver still owns schema validation, credentials, access scoping, audit
139
+ attribution, and exposure policy. Direct invocation is available only for
140
+ cataloged, authenticated, explicitly exposed read-only actions that do not
141
+ require approval. Its JWT is audience-bound to the receiving app. Use normal
142
+ message delegation for planning, synthesis, multi-step work, or mutations.
143
+
144
+ Inside an agent loop, `call-agent` exposes the same path with `action` + `input`;
145
+ omit `message` and `taskId` in that mode.
146
+
147
+ ### Retry safety and trace linkage
148
+
149
+ `call-agent` automatically derives an owner-scoped idempotency key from the
150
+ originating turn, target, and exact message. If a retry reaches the receiver
151
+ after the caller timed out, asynchronous `message/send` returns the existing
152
+ active or completed task instead of starting a duplicate agent run. Failed and
153
+ canceled tasks release the key for an intentional retry; synchronous calls are
154
+ never deduplicated. Lower-level clients may pass an
155
+ `idempotencyKey` explicitly; keep it stable for the same logical submission and
156
+ change it when the work changes. Dedupe is scoped to the JWT-authenticated
157
+ owner and verified org, and keys are limited to 128 characters.
158
+
159
+ The caller also forwards bounded correlation metadata (`callerApp`,
160
+ `callerThreadId`, `parentRunId`, `parentTurnId`, and direct-read
161
+ `invocationId`). These fields
162
+ are telemetry hints only. Receivers must continue to derive identity,
163
+ ownership, org scope, access, and approval from the verified request context.
164
+ Delegated model loops emit `$ai_generation` with A2A/MCP lineage, while direct
165
+ reads emit the content-free `$a2a_read_invoke` event; neither event includes
166
+ action arguments or results.
167
+
120
168
  ### Advanced: `A2AClient` (full control)
121
169
 
122
170
  ```ts
@@ -178,6 +226,7 @@ cannot carry these grants.
178
226
  | ---------------- | -------------------------------- | ------------- |
179
227
  | `message/send` | Send a message, get a task back | Yes |
180
228
  | `message/stream` | Send a message, stream responses | Yes |
229
+ | `actions/invoke` | Invoke one exposed read action | Yes, JWT |
181
230
  | `tasks/get` | Get task status by ID | Yes |
182
231
  | `tasks/cancel` | Cancel a running task | Yes |
183
232
 
@@ -42,6 +42,11 @@ The main agent should discover available siblings before assuming capability:
42
42
  - In the agent loop, use `call-agent` with the sibling app id when another app
43
43
  owns the work or data. Never call the current app through `call-agent`; use
44
44
  local actions instead.
45
+ - When the exact sibling-owned read action and input are already known, use
46
+ `invokeAgentAction()` or `call-agent` with `action` + `input`. This preserves
47
+ the receiver's credentials and access checks while skipping its second model
48
+ loop. Use prompt-based `invokeAgent()` only when the sibling must reason,
49
+ synthesize, mutate, or perform a multi-step workflow.
45
50
 
46
51
  Send narrow prompts to siblings: name the exact question, relevant ids, date
47
52
  ranges, and expected output shape. Preserve returned ids and URLs verbatim.
@@ -285,7 +285,13 @@ LLM generation:
285
285
  - Agent Native Analytics shape: the same event lands in `analytics_events` with
286
286
  mirrored query-friendly properties such as `run_id`, `thread_id`,
287
287
  `cost_cents_x100`, `duration_ms`, `tool_calls`, `successful_tools`,
288
- `failed_tools`, and `status`.
288
+ `failed_tools`, and `status`. A content-free `tools` array includes at most
289
+ 50 tool names, start offsets, durations, statuses, and coarse error classes;
290
+ interrupted calls are finalized as errors, and failed runs still emit with
291
+ zero or known usage. `tools_truncated` marks longer runs while the rollup counts remain complete.
292
+ Delegated runs add `delegation_protocol`, `caller_app`, `a2a_task_id`, and
293
+ `parent_run_id` when available. `parent_turn_id` is separate because one
294
+ logical turn may span multiple concrete runs.
289
295
 
290
296
  Do not build a separate LLM-observability ingestion API unless there is a clear
291
297
  reason the tracking provider registry cannot express the use case. Keep prompt,
@@ -99,6 +99,19 @@ index the growing tables first.
99
99
  `await`s — each `await` is another round-trip.
100
100
  - Prefer **one composed endpoint** over several dependent calls.
101
101
 
102
+ For provider wrappers, inspect the upstream API before building a list-then-
103
+ enrich flow. Prefer the richest endpoint that can apply the real filters and
104
+ return the needed associations or participants in one paginated operation.
105
+ Cursor pagination is already serial; adding a serial detail/enrichment request
106
+ to every page doubles its critical path. Exhaustive records belong in corpus
107
+ recipes or data programs with explicit coverage, not one agent tool call per
108
+ page or item.
109
+
110
+ First-class provider actions should represent one stable conceptual operation.
111
+ Keep arbitrary endpoint, filter, and pagination access in the provider API
112
+ substrate; do not turn a convenience action into a capability ceiling or
113
+ duplicate the provider transport, auth, quota, and cache implementation.
114
+
102
115
  ## 4. Avoid client-side waterfalls
103
116
 
104
117
  - Don't gate query B on query A's result unless B truly needs it. Fire
@@ -141,7 +141,7 @@ Other framework-level baseline events:
141
141
  - `signup` from Better Auth user creation, with `auth_provider`, `auth_user_id`, and first-touch referral attribution (`referral_source`, `referrer_user`, `referral_medium`, `referral_campaign`, `utm_*`, `first_touch_path`, `landing_referrer` — see "Referral / viral attribution" above)
142
142
  - `builder connect clicked` and `builder connect popup blocked` from browser Connect Builder CTAs
143
143
  - `builder connect started`, `builder connect succeeded`, `builder connect failed`, `builder disconnect succeeded`, and `builder disconnect failed` from the Builder connection routes, with LLM connection context when resolvable
144
- - `$ai_generation` from instrumented agent loops, with PostHog AI Observability fields such as `$ai_trace_id`, `$ai_session_id`, `$ai_model`, `$ai_provider`, `$ai_input_tokens`, `$ai_output_tokens`, `$ai_latency`, `$ai_total_cost_usd`, and mirrored Agent Native query fields such as `run_id`, `thread_id`, `cost_cents_x100`, `duration_ms`, `tool_calls`, and `status`. Prompt, tool argument, and output content is not included by default.
144
+ - `$ai_generation` from instrumented agent loops, with PostHog AI Observability fields such as `$ai_trace_id`, `$ai_session_id`, `$ai_model`, `$ai_provider`, `$ai_input_tokens`, `$ai_output_tokens`, `$ai_latency`, `$ai_total_cost_usd`, and mirrored Agent Native query fields such as `run_id`, `thread_id`, `cost_cents_x100`, `duration_ms`, `tool_calls`, and `status`. A bounded `tools` array contains names, start offsets, durations, statuses, and coarse error classes only; interrupted tools and failed runs remain visible, and delegated runs include protocol/task/parent-run/parent-turn correlation. Prompt, tool argument, result, and output content is excluded.
145
145
 
146
146
  For new lifecycle events, call `track()` server-side when the server is the source of truth, and `trackEvent()` client-side only for browser interactions.
147
147
 
@@ -83,7 +83,7 @@ When the user asks for a dashboard:
83
83
  2. If a metric definition, date range, or grain is ambiguous and the choice would change the panel's numbers, use the `ask-question` clarifying tool once before building. Skip it when the dictionary or the user already settled it.
84
84
  3. If a metric is not documented, do not guess column names. Ask for the table/columns or introspect the provider schema, then propose a dictionary entry with `save-data-dictionary-entry`.
85
85
  4. Build a complete `SqlDashboardConfig` with `name` and `panels`. Optionally set top-level `columns` (1–6, default 2) to control how many grid columns the panels before any section use.
86
- 5. Every panel needs `id`, `title`, `source`, `chartType`, `width`, and `sql`. `width` is the number of grid columns the panel spans (1..6, clamped to the active section's column count). Section panels skip `source` and `sql` and may set their own `columns` (1–6) to override the dashboard default for the panels following the section. Extension panels (`chartType: "extension"`) also skip `source` and `sql`; use `config.extensionSlotId` for new panels, with legacy `config.extensionId` supported for existing direct embeds (see "Embedding An Extension As A Panel").
86
+ 5. Every panel needs `id`, `title`, `source`, `chartType`, `width`, and `sql`. `width` is the number of grid columns the panel spans (1..6, clamped to the active section's column count). Section panels skip `source` and `sql` and may set their own `columns` (1–6) to override the dashboard default for the panels following the section. Extension panels (`chartType: "extension"`) also skip `source` and `sql`; use `config.extensionId` for ordinary author-selected shared embeds. Use `config.extensionSlotId` only when the user explicitly asks for a personal/per-viewer slot (see "Embedding An Extension As A Panel").
87
87
  6. Persist with `update-dashboard`, not raw SQL or settings writes.
88
88
  7. Navigate to it with `pnpm action navigate --view=adhoc --dashboardId=<id>`.
89
89
 
@@ -115,8 +115,27 @@ rather than forcing it into a native dashboard config.
115
115
  ## Embedding An Extension As A Panel
116
116
 
117
117
  Use `chartType: "extension"` to add an extension box alongside normal SQL
118
- charts. The panel skips `source` and `sql`. New boxes use a stable slot id in
119
- `config.extensionSlotId`:
118
+ charts. The panel skips `source` and `sql`. For ordinary requests such as "put
119
+ X in this dashboard," save the author-selected extension id in
120
+ `config.extensionId`. This makes the selection part of the shared dashboard and
121
+ keeps the widget present in scheduled report captures:
122
+
123
+ ```jsonc
124
+ {
125
+ "id": "pipeline-widget",
126
+ "title": "Pipeline Widget",
127
+ "chartType": "extension",
128
+ "width": 3,
129
+ "config": { "extensionId": "extension-123" },
130
+ }
131
+ ```
132
+
133
+ Direct embeds receive the dashboard id, name, description, current filters,
134
+ and panel context. Embedding does not grant extension access, so share the
135
+ extension with the dashboard audience.
136
+
137
+ Use a stable `config.extensionSlotId` only when the user explicitly wants each
138
+ viewer to choose or install their own widget:
120
139
 
121
140
  ```text
122
141
  analytics.dashboard.<dashboard-id>.panel.<panel-id>
@@ -141,14 +160,14 @@ Empty slots show the normal install affordance instead of a broken iframe.
141
160
 
142
161
  Notes:
143
162
 
144
- - Slot-backed extensions receive the dashboard id, name, description, current
145
- filters, and panel id/title/slot id as live context.
163
+ - Both direct and slot-backed extensions receive dashboard and panel context.
146
164
  - Installs and extension access are per viewer. Sharing the dashboard does not
147
165
  automatically install or grant access to its extension for other viewers.
148
- - `config.extensionId` remains supported for legacy direct embeds. Use it only
149
- when preserving an existing dashboard; new boxes should use a slot.
166
+ - Slot installs are per-user preferences. Different viewers can see different
167
+ widgets, and scheduled reports running as a service identity may show an
168
+ empty slot. This is why slots are opt-in rather than the default.
150
169
 
151
- ## Cloning A Legacy Direct-Extension Dashboard (e.g. per-customer copies)
170
+ ## Cloning A Direct-Extension Dashboard (e.g. per-customer copies)
152
171
 
153
172
  When the user asks for a copy of an existing extension-backed dashboard for a
154
173
  different customer/org (for example "make an Intuit version of the Roku usage
@@ -159,7 +178,7 @@ from that written file — never by pulling the body into chat context first or
159
178
  re-typing it as a `content` argument.
160
179
 
161
180
  1. `get-sql-dashboard` with `includeConfig: true` on the source dashboard and
162
- confirm the target panel is a legacy `chartType: "extension"` panel with
181
+ confirm the target panel is a `chartType: "extension"` panel with
163
182
  `config.extensionId`; grab that extension id. For a slot-backed panel, clone
164
183
  the dashboard panel with a new stable `extensionSlotId`, then target and
165
184
  install the desired extension into that slot instead of using this body-copy
@@ -405,7 +424,7 @@ type PanelInput = PanelPatch & {
405
424
  chartType: NonNullable<PanelPatch["chartType"]>;
406
425
  source?: PanelPatch["source"]; // required for non-section / non-extension panels
407
426
  sql?: string; // required for non-section / non-extension panels
408
- // For chartType "extension": use config.extensionSlotId; extensionId is legacy direct embed compatibility.
427
+ // For chartType "extension": use config.extensionId by default; extensionSlotId is opt-in per-viewer content.
409
428
  };
410
429
 
411
430
  type PanelFilter = {
@@ -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.