@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
@@ -129,6 +129,9 @@ const messages = {
129
129
  'Apps in the "{{workspace}}" workspace. Each app gets its own route under this workspace and shares its database, auth, and agent chat.',
130
130
  appsInWorkspace: "Apps in {{workspace}}",
131
131
  workspaceApps: "Workspace apps",
132
+ otherApps: "Other apps",
133
+ otherAppsDescription: "Open other apps available to you.",
134
+ availableCount: "{{count}} available",
132
135
  activeCount: "{{count}} active",
133
136
  hiddenCount: "{{count}} hidden",
134
137
  createApp: "Create app",
@@ -345,7 +345,7 @@ function warnFullCatalogServed(toolCount: number): void {
345
345
  );
346
346
  }
347
347
 
348
- function isAuthenticatedReadAction(entry: ActionEntry): boolean {
348
+ export function isAuthenticatedReadAction(entry: ActionEntry): boolean {
349
349
  return (
350
350
  entry.http !== false &&
351
351
  entry.http?.method === "GET" &&
@@ -404,7 +404,7 @@ const AUTO_READ_EXCLUDED_ACTION_PATTERNS: RegExp[] = [
404
404
  /browser-session/,
405
405
  ];
406
406
 
407
- function isAutoReadExcludedActionName(name: string): boolean {
407
+ export function isAutoReadExcludedActionName(name: string): boolean {
408
408
  return (
409
409
  AUTO_READ_EXCLUDED_ACTION_NAMES.has(name) ||
410
410
  AUTO_READ_EXCLUDED_ACTION_PATTERNS.some((pattern) => pattern.test(name))
@@ -26,6 +26,16 @@ function costUsdFromCenticents(value: number): number {
26
26
  return Math.round((value / 10_000) * 1_000_000) / 1_000_000;
27
27
  }
28
28
 
29
+ const MAX_TRACKED_GENERATION_TOOL_CALLS = 50;
30
+
31
+ type GenerationToolCall = {
32
+ name: string;
33
+ started_offset_ms: number;
34
+ duration_ms: number;
35
+ status: "success" | "error";
36
+ error_class: "tool_error" | "legacy_inferred_error" | "interrupted" | null;
37
+ };
38
+
29
39
  function emitLlmGenerationTrackingEvent(args: {
30
40
  runId: string;
31
41
  threadId: string | null;
@@ -45,6 +55,15 @@ function emitLlmGenerationTrackingEvent(args: {
45
55
  toolCalls: number;
46
56
  successfulTools: number;
47
57
  failedTools: number;
58
+ tools: GenerationToolCall[];
59
+ toolsTruncated: boolean;
60
+ delegation?: {
61
+ protocol: "a2a" | "mcp";
62
+ callerApp?: string;
63
+ taskId?: string;
64
+ parentRunId?: string;
65
+ parentTurnId?: string;
66
+ };
48
67
  createdAt: number;
49
68
  experimentAssignments?: Array<{
50
69
  experimentId: string;
@@ -77,6 +96,14 @@ function emitLlmGenerationTrackingEvent(args: {
77
96
  tool_calls: args.toolCalls,
78
97
  successful_tools: args.successfulTools,
79
98
  failed_tools: args.failedTools,
99
+ tools: args.tools,
100
+ tools_truncated: args.toolsTruncated,
101
+ delegated: args.delegation ? true : undefined,
102
+ delegation_protocol: args.delegation?.protocol,
103
+ caller_app: args.delegation?.callerApp,
104
+ a2a_task_id: args.delegation?.taskId,
105
+ parent_run_id: args.delegation?.parentRunId,
106
+ parent_turn_id: args.delegation?.parentTurnId,
80
107
  model_selection_source: args.modelSelectionSource,
81
108
  created_at: new Date(args.createdAt).toISOString(),
82
109
  created_at_ms: args.createdAt,
@@ -191,6 +218,7 @@ export async function instrumentAgentLoop(opts: {
191
218
  send: (event: AgentChatEvent) => void;
192
219
  signal: AbortSignal;
193
220
  providerOptions?: any;
221
+ runId?: string;
194
222
  }) => Promise<AgentLoopUsage>;
195
223
  loopOpts: {
196
224
  engine: any;
@@ -202,6 +230,7 @@ export async function instrumentAgentLoop(opts: {
202
230
  send: (event: AgentChatEvent) => void;
203
231
  signal: AbortSignal;
204
232
  providerOptions?: any;
233
+ runId?: string;
205
234
  };
206
235
  runId: string;
207
236
  threadId: string | null;
@@ -217,6 +246,13 @@ export async function instrumentAgentLoop(opts: {
217
246
  variantId: string;
218
247
  }>;
219
248
  modelSelectionSource?: string;
249
+ delegation?: {
250
+ protocol: "a2a" | "mcp";
251
+ callerApp?: string;
252
+ taskId?: string;
253
+ parentRunId?: string;
254
+ parentTurnId?: string;
255
+ };
220
256
  /** Raw user-authored message before prompt/context enrichment. */
221
257
  sentimentInput?: string;
222
258
  classifyError?: (error: unknown) =>
@@ -271,6 +307,7 @@ export async function instrumentAgentLoop(opts: {
271
307
  number,
272
308
  {
273
309
  spanId: string;
310
+ callId?: string;
274
311
  startMs: number;
275
312
  toolName: string;
276
313
  input: AgentToolInput;
@@ -278,12 +315,11 @@ export async function instrumentAgentLoop(opts: {
278
315
  endResult?: { status: "success" | "error"; errorMessage: string | null };
279
316
  }
280
317
  >();
281
- // Secondary index: tool name FIFO queue of pending invocation counters.
282
- // tool_start/tool_done events carry only the tool name (no call id), so to
283
- // pair starts and dones correctly when the agent runs concurrent calls to the
284
- // same tool name (read-only / parallelSafe batches via Promise.all), we keep a
285
- // queue per name and match each done to the OLDEST still-pending start.
318
+ // Secondary index for legacy emitters without call ids. Current tool events
319
+ // are paired by id first; same-name FIFO remains as a compatibility fallback.
286
320
  const toolNameToCounters = new Map<string, number[]>();
321
+ const toolCallIdToCounter = new Map<string, number>();
322
+ const generationToolCalls = new Map<number, GenerationToolCall>();
287
323
 
288
324
  let toolCallCount = 0;
289
325
  let successfulTools = 0;
@@ -304,6 +340,7 @@ export async function instrumentAgentLoop(opts: {
304
340
  // microtask gap by recording the span on the pending entry when ready.
305
341
  const entry: {
306
342
  spanId: string;
343
+ callId?: string;
307
344
  startMs: number;
308
345
  toolName: string;
309
346
  input: AgentToolInput;
@@ -316,12 +353,14 @@ export async function instrumentAgentLoop(opts: {
316
353
  };
317
354
  } = {
318
355
  spanId: sid,
356
+ ...(event.id ? { callId: event.id } : {}),
319
357
  startMs: Date.now(),
320
358
  toolName: event.tool,
321
359
  input: event.input,
322
360
  otelSpan: null,
323
361
  };
324
362
  pendingTools.set(counter, entry);
363
+ if (event.id) toolCallIdToCounter.set(event.id, counter);
325
364
  void startAgentSpan("tool.call", {
326
365
  "tool.name": event.tool,
327
366
  }).then((span) => {
@@ -343,16 +382,39 @@ export async function instrumentAgentLoop(opts: {
343
382
  else toolNameToCounters.set(event.tool, [counter]);
344
383
  } else if (event.type === "tool_done") {
345
384
  const queue = toolNameToCounters.get(event.tool);
346
- const counter = queue?.shift();
385
+ const counterFromId = event.id
386
+ ? toolCallIdToCounter.get(event.id)
387
+ : undefined;
388
+ const legacyQueueIndex =
389
+ event.id && counterFromId === undefined && queue
390
+ ? queue.findIndex(
391
+ (candidate) => !pendingTools.get(candidate)?.callId,
392
+ )
393
+ : -1;
394
+ const counter =
395
+ counterFromId ??
396
+ (event.id
397
+ ? legacyQueueIndex >= 0
398
+ ? queue?.[legacyQueueIndex]
399
+ : undefined
400
+ : queue?.shift());
347
401
  const pending =
348
402
  counter !== undefined ? pendingTools.get(counter) : undefined;
349
403
  if (counter !== undefined) {
350
404
  pendingTools.delete(counter);
405
+ if (pending?.callId) toolCallIdToCounter.delete(pending.callId);
406
+ if ((counterFromId !== undefined || legacyQueueIndex >= 0) && queue) {
407
+ const queueIndex = queue.indexOf(counter);
408
+ if (queueIndex >= 0) queue.splice(queueIndex, 1);
409
+ }
351
410
  if (queue && queue.length === 0)
352
411
  toolNameToCounters.delete(event.tool);
353
412
  }
354
413
  toolCallCount++;
355
414
 
415
+ const finishedAt = Date.now();
416
+
417
+ const explicitError = event.isError === true;
356
418
  const isError =
357
419
  typeof event.isError === "boolean"
358
420
  ? event.isError
@@ -362,6 +424,24 @@ export async function instrumentAgentLoop(opts: {
362
424
  if (isError) failedTools++;
363
425
  else successfulTools++;
364
426
 
427
+ if (
428
+ counter !== undefined &&
429
+ counter < MAX_TRACKED_GENERATION_TOOL_CALLS &&
430
+ pending
431
+ ) {
432
+ generationToolCalls.set(counter, {
433
+ name: pending.toolName,
434
+ started_offset_ms: Math.max(0, pending.startMs - runStart),
435
+ duration_ms: Math.max(0, finishedAt - pending.startMs),
436
+ status: isError ? "error" : "success",
437
+ error_class: !isError
438
+ ? null
439
+ : explicitError
440
+ ? "tool_error"
441
+ : "legacy_inferred_error",
442
+ });
443
+ }
444
+
365
445
  // Finalize the OTel tool span. If the span promise hasn't resolved yet
366
446
  // we record the result on the entry so its `.then` handler ends it.
367
447
  const otelEndResult = {
@@ -392,7 +472,7 @@ export async function instrumentAgentLoop(opts: {
392
472
  cacheReadTokens: 0,
393
473
  cacheWriteTokens: 0,
394
474
  costCentsX100: 0,
395
- durationMs: pending ? Date.now() - pending.startMs : 0,
475
+ durationMs: pending ? Math.max(0, finishedAt - pending.startMs) : 0,
396
476
  status: isError ? "error" : "success",
397
477
  errorMessage: isError ? event.result : null,
398
478
  metadata:
@@ -422,7 +502,11 @@ export async function instrumentAgentLoop(opts: {
422
502
  let errorMessage: string | null = null;
423
503
  let runMetadata: Record<string, unknown> | null = opts.metadata ?? null;
424
504
  try {
425
- usage = await runAgentLoop({ ...loopOpts, send: instrumentedSend });
505
+ usage = await runAgentLoop({
506
+ ...loopOpts,
507
+ runId,
508
+ send: instrumentedSend,
509
+ });
426
510
  } catch (err: any) {
427
511
  const classification = opts.classifyError?.(err) ?? null;
428
512
  runStatus = classification?.status ?? "error";
@@ -440,6 +524,62 @@ export async function instrumentAgentLoop(opts: {
440
524
  const runEnd = Date.now();
441
525
  const totalDurationMs = runEnd - runStart;
442
526
 
527
+ if (pendingTools.size > 0) {
528
+ if (runStatus === "success") {
529
+ runStatus = "error";
530
+ errorMessage ??= "Agent run ended with interrupted tool calls";
531
+ }
532
+ for (const [counter, pending] of pendingTools) {
533
+ toolCallCount += 1;
534
+ failedTools += 1;
535
+ if (counter < MAX_TRACKED_GENERATION_TOOL_CALLS) {
536
+ generationToolCalls.set(counter, {
537
+ name: pending.toolName,
538
+ started_offset_ms: Math.max(0, pending.startMs - runStart),
539
+ duration_ms: Math.max(0, runEnd - pending.startMs),
540
+ status: "error",
541
+ error_class: "interrupted",
542
+ });
543
+ }
544
+ const interruptedMessage = "Tool call interrupted before completion";
545
+ if (pending.otelSpan) {
546
+ openOtelToolSpans.delete(pending.otelSpan);
547
+ endAgentSpan(pending.otelSpan, {
548
+ status: "error",
549
+ errorMessage: interruptedMessage,
550
+ attributes: { "tool.name": pending.toolName },
551
+ });
552
+ } else {
553
+ pending.endResult = {
554
+ status: "error",
555
+ errorMessage: interruptedMessage,
556
+ };
557
+ }
558
+ spans.push({
559
+ id: pending.spanId,
560
+ runId,
561
+ threadId,
562
+ userId,
563
+ parentSpanId,
564
+ spanType: "tool_call",
565
+ name: pending.toolName,
566
+ inputTokens: 0,
567
+ outputTokens: 0,
568
+ cacheReadTokens: 0,
569
+ cacheWriteTokens: 0,
570
+ costCentsX100: 0,
571
+ durationMs: Math.max(0, runEnd - pending.startMs),
572
+ status: "error",
573
+ errorMessage: interruptedMessage,
574
+ metadata: null,
575
+ createdAt: runEnd,
576
+ });
577
+ }
578
+ pendingTools.clear();
579
+ toolNameToCounters.clear();
580
+ toolCallIdToCounter.clear();
581
+ }
582
+
443
583
  let costCentsX100 = 0;
444
584
  try {
445
585
  const { calculateCost } = await import("../usage/store.js");
@@ -455,8 +595,15 @@ export async function instrumentAgentLoop(opts: {
455
595
  } catch {}
456
596
 
457
597
  let llmCallCount = 0;
458
- if (usage) {
598
+ if (usage || runStatus === "error") {
459
599
  llmCallCount = 1;
600
+ const generationUsage = usage ?? {
601
+ inputTokens: 0,
602
+ outputTokens: 0,
603
+ cacheReadTokens: 0,
604
+ cacheWriteTokens: 0,
605
+ model: loopOpts.model,
606
+ };
460
607
  const llmSpanId = spanId();
461
608
  const llmSpan: TraceSpan = {
462
609
  id: llmSpanId,
@@ -465,11 +612,11 @@ export async function instrumentAgentLoop(opts: {
465
612
  userId,
466
613
  parentSpanId,
467
614
  spanType: "llm_call",
468
- name: usage.model,
469
- inputTokens: usage.inputTokens,
470
- outputTokens: usage.outputTokens,
471
- cacheReadTokens: usage.cacheReadTokens,
472
- cacheWriteTokens: usage.cacheWriteTokens,
615
+ name: generationUsage.model,
616
+ inputTokens: generationUsage.inputTokens,
617
+ outputTokens: generationUsage.outputTokens,
618
+ cacheReadTokens: generationUsage.cacheReadTokens,
619
+ cacheWriteTokens: generationUsage.cacheWriteTokens,
473
620
  costCentsX100,
474
621
  durationMs: totalDurationMs,
475
622
  status: runStatus,
@@ -488,11 +635,11 @@ export async function instrumentAgentLoop(opts: {
488
635
  typeof loopOpts.engine?.name === "string"
489
636
  ? loopOpts.engine.name
490
637
  : undefined,
491
- model: usage.model,
492
- inputTokens: usage.inputTokens,
493
- outputTokens: usage.outputTokens,
494
- cacheReadTokens: usage.cacheReadTokens,
495
- cacheWriteTokens: usage.cacheWriteTokens,
638
+ model: generationUsage.model,
639
+ inputTokens: generationUsage.inputTokens,
640
+ outputTokens: generationUsage.outputTokens,
641
+ cacheReadTokens: generationUsage.cacheReadTokens,
642
+ cacheWriteTokens: generationUsage.cacheWriteTokens,
496
643
  costCentsX100,
497
644
  durationMs: totalDurationMs,
498
645
  status: runStatus,
@@ -500,6 +647,12 @@ export async function instrumentAgentLoop(opts: {
500
647
  toolCalls: toolCallCount,
501
648
  successfulTools,
502
649
  failedTools,
650
+ tools: [...generationToolCalls.entries()]
651
+ .sort(([a], [b]) => a - b)
652
+ .map(([, detail]) => detail),
653
+ toolsTruncated:
654
+ toolInvocationCounter > MAX_TRACKED_GENERATION_TOOL_CALLS,
655
+ delegation: opts.delegation,
503
656
  createdAt: runStart,
504
657
  experimentAssignments: opts.experimentAssignments,
505
658
  modelSelectionSource: opts.modelSelectionSource,
@@ -35,6 +35,7 @@ Use for non-trivial work with multiple real steps (not single-action lookups). D
35
35
  - Exactly one task in progress at a time; never batch-complete steps after the fact — update as you go.
36
36
  - Always transition pending → in_progress before completing a step.
37
37
  - If the task pivots (scope change, unexpected blocker), update the current step to reflect it before continuing.
38
+ - Only include fields for the selected action; do not send empty placeholder fields.
38
39
  - End every run with "complete" (succeeded / failed / cancelled). Never leave a run open indefinitely.
39
40
 
40
41
  Actions:
@@ -78,8 +79,9 @@ Actions:
78
79
  },
79
80
  status: {
80
81
  type: "string",
81
- enum: ["succeeded", "failed", "cancelled"],
82
- description: "[complete] Terminal status for the run.",
82
+ enum: ["", "succeeded", "failed", "cancelled"],
83
+ description:
84
+ '[complete] Terminal status for the run. Omit it for "start" and "update".',
83
85
  },
84
86
  active: {
85
87
  type: "boolean",