@agent-native/core 0.90.2 → 0.90.3

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 (429) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +12 -0
  3. package/corpus/core/docs/content/agent-native-toolkit.mdx +87 -80
  4. package/corpus/core/docs/content/locales/ar-SA/agent-native-toolkit.mdx +89 -80
  5. package/corpus/core/docs/content/locales/de-DE/agent-native-toolkit.mdx +89 -80
  6. package/corpus/core/docs/content/locales/es-ES/agent-native-toolkit.mdx +89 -80
  7. package/corpus/core/docs/content/locales/fr-FR/agent-native-toolkit.mdx +89 -80
  8. package/corpus/core/docs/content/locales/hi-IN/agent-native-toolkit.mdx +89 -80
  9. package/corpus/core/docs/content/locales/ja-JP/agent-native-toolkit.mdx +89 -80
  10. package/corpus/core/docs/content/locales/ko-KR/agent-native-toolkit.mdx +89 -80
  11. package/corpus/core/docs/content/locales/pt-BR/agent-native-toolkit.mdx +89 -80
  12. package/corpus/core/docs/content/locales/zh-CN/agent-native-toolkit.mdx +89 -80
  13. package/corpus/core/docs/content/locales/zh-TW/agent-native-toolkit.mdx +89 -80
  14. package/corpus/core/docs/content/toolkit-agent-ux.mdx +43 -0
  15. package/corpus/core/docs/content/toolkit-app-adapters.mdx +9 -0
  16. package/corpus/core/docs/content/toolkit-collaboration-ui.mdx +12 -0
  17. package/corpus/core/docs/content/toolkit-collaboration.mdx +74 -0
  18. package/corpus/core/docs/content/toolkit-command-navigation.mdx +106 -0
  19. package/corpus/core/docs/content/toolkit-comments-review.mdx +98 -0
  20. package/corpus/core/docs/content/toolkit-history.mdx +95 -0
  21. package/corpus/core/docs/content/toolkit-observability.mdx +41 -0
  22. package/corpus/core/docs/content/toolkit-org-team.mdx +80 -0
  23. package/corpus/core/docs/content/toolkit-resources.mdx +57 -0
  24. package/corpus/core/docs/content/toolkit-settings.mdx +65 -0
  25. package/corpus/core/docs/content/toolkit-setup-connections.mdx +109 -0
  26. package/corpus/core/docs/content/toolkit-sharing-ui.mdx +18 -6
  27. package/corpus/core/docs/content/toolkit-sharing.mdx +81 -0
  28. package/corpus/core/docs/content/toolkit-shell-hooks.mdx +9 -0
  29. package/corpus/core/docs/content/toolkit-ui.mdx +9 -0
  30. package/corpus/core/package.json +35 -1
  31. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +19 -1
  32. package/corpus/core/src/agent/engine/anthropic-engine.ts +25 -1
  33. package/corpus/core/src/agent/engine/registry.ts +23 -16
  34. package/corpus/core/src/agent/production-agent.ts +37 -6
  35. package/corpus/core/src/client/command-navigation/index.ts +15 -0
  36. package/corpus/core/src/client/comments-review/index.ts +1 -0
  37. package/corpus/core/src/client/history/VersionHistoryPanel.tsx +145 -0
  38. package/corpus/core/src/client/history/index.ts +18 -0
  39. package/corpus/core/src/client/history/use-history.ts +86 -0
  40. package/corpus/core/src/client/index.ts +76 -9
  41. package/corpus/core/src/client/org/OrgSwitcher.tsx +6 -6
  42. package/corpus/core/src/client/org/RequireActiveOrg.tsx +2 -2
  43. package/corpus/core/src/client/org/TeamPage.tsx +3 -3
  44. package/corpus/core/src/client/org/hooks.ts +32 -0
  45. package/corpus/core/src/client/org/index.ts +30 -1
  46. package/corpus/core/src/client/org-team/index.ts +1 -0
  47. package/corpus/core/src/client/review/ReviewStatusBadge.tsx +39 -0
  48. package/corpus/core/src/client/review/ReviewThreadPanel.tsx +278 -0
  49. package/corpus/core/src/client/review/index.ts +25 -0
  50. package/corpus/core/src/client/review/use-review.ts +114 -0
  51. package/corpus/core/src/client/settings/index.ts +11 -1
  52. package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +94 -0
  53. package/corpus/core/src/client/setup-connections/ProviderReadinessBadge.tsx +73 -0
  54. package/corpus/core/src/client/setup-connections/SetupConnectionsPage.tsx +94 -0
  55. package/corpus/core/src/client/setup-connections/index.ts +46 -0
  56. package/corpus/core/src/client/sharing/ShareButton.tsx +20 -14
  57. package/corpus/core/src/client/sharing/ShareDialog.tsx +3 -3
  58. package/corpus/core/src/command-navigation/actions.ts +100 -0
  59. package/corpus/core/src/command-navigation/index.ts +12 -0
  60. package/corpus/core/src/comments-review/index.ts +1 -0
  61. package/corpus/core/src/file-upload/builder.ts +24 -3
  62. package/corpus/core/src/file-upload/types.ts +3 -1
  63. package/corpus/core/src/history/actions/create-resource-version.ts +89 -0
  64. package/corpus/core/src/history/actions/get-resource-version.ts +60 -0
  65. package/corpus/core/src/history/actions/list-resource-history.ts +53 -0
  66. package/corpus/core/src/history/actions/list-resource-versions.ts +43 -0
  67. package/corpus/core/src/history/actions/restore-resource-version.ts +96 -0
  68. package/corpus/core/src/history/index.ts +27 -0
  69. package/corpus/core/src/history/registry.ts +99 -0
  70. package/corpus/core/src/history/store.ts +348 -0
  71. package/corpus/core/src/history/types.ts +69 -0
  72. package/corpus/core/src/index.ts +10 -0
  73. package/corpus/core/src/navigation/index.ts +170 -0
  74. package/corpus/core/src/org/index.ts +8 -0
  75. package/corpus/core/src/org/permissions.ts +30 -0
  76. package/corpus/core/src/org-team/index.ts +1 -0
  77. package/corpus/core/src/private-blob/registry.ts +1 -0
  78. package/corpus/core/src/review/actions/consume-review-feedback.ts +38 -0
  79. package/corpus/core/src/review/actions/create-review-comment.ts +107 -0
  80. package/corpus/core/src/review/actions/delete-review-comment.ts +55 -0
  81. package/corpus/core/src/review/actions/get-review-feedback.ts +54 -0
  82. package/corpus/core/src/review/actions/list-review-comments.ts +53 -0
  83. package/corpus/core/src/review/actions/reply-review-comment.ts +107 -0
  84. package/corpus/core/src/review/actions/resolve-review-thread.ts +60 -0
  85. package/corpus/core/src/review/actions/set-review-status.ts +58 -0
  86. package/corpus/core/src/review/index.ts +36 -0
  87. package/corpus/core/src/review/mentions.ts +44 -0
  88. package/corpus/core/src/review/registry.ts +99 -0
  89. package/corpus/core/src/review/store.ts +687 -0
  90. package/corpus/core/src/review/types.ts +97 -0
  91. package/corpus/core/src/server/action-discovery.ts +54 -0
  92. package/corpus/core/src/server/agent-engine-api-key-route.ts +5 -0
  93. package/corpus/core/src/server/credential-provider.ts +108 -0
  94. package/corpus/core/src/setup-connections/index.ts +89 -0
  95. package/corpus/core/src/setup-connections/onboarding.ts +47 -0
  96. package/corpus/core/src/transcription/builder-transcription.ts +9 -2
  97. package/corpus/core/src/vite/action-types-plugin.ts +52 -0
  98. package/corpus/templates/analytics/app/components/layout/Layout.tsx +2 -1
  99. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +2 -2
  100. package/corpus/templates/analytics/app/global.css +22 -10
  101. package/corpus/templates/analytics/app/i18n/zh-TW.ts +6 -1
  102. package/corpus/templates/analytics/app/i18n-data.ts +81 -13
  103. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +2 -2
  104. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +2 -2
  105. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +528 -108
  106. package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +466 -183
  107. package/corpus/templates/analytics/changelog/2026-07-07-session-replays-load-sooner-show-clearer-activity-timelines-.md +6 -0
  108. package/corpus/templates/brain/app/routes/settings.tsx +2 -2
  109. package/corpus/templates/calendar/app/components/calendar/AttendeeAutocomplete.tsx +32 -6
  110. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +120 -40
  111. package/corpus/templates/calendar/app/hooks/use-people.ts +55 -0
  112. package/corpus/templates/calendar/changelog/2026-07-07-guest-suggestions-now-find-coworkers-from-your-google-worksp.md +6 -0
  113. package/corpus/templates/calendar/changelog/2026-07-07-zoom-stays-selected-after-connecting-it-from-a-draft-event.md +6 -0
  114. package/corpus/templates/clips/actions/create-recording.ts +5 -1
  115. package/corpus/templates/clips/actions/finalize-recording.ts +140 -1
  116. package/corpus/templates/clips/actions/import-loom-recording.ts +1 -0
  117. package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +1 -0
  118. package/corpus/templates/clips/actions/request-transcript.ts +31 -0
  119. package/corpus/templates/clips/actions/set-thumbnail.ts +2 -0
  120. package/corpus/templates/clips/app/components/library/organization-switcher.tsx +2 -2
  121. package/corpus/templates/clips/app/components/player/scrubber-position.ts +9 -0
  122. package/corpus/templates/clips/app/components/player/scrubber.tsx +5 -2
  123. package/corpus/templates/clips/app/components/player/share-dialog.tsx +69 -41
  124. package/corpus/templates/clips/app/components/player/video-player.tsx +38 -1
  125. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +3 -3
  126. package/corpus/templates/clips/app/components/sharing/slack-share-hint.tsx +9 -19
  127. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +9 -3
  128. package/corpus/templates/clips/app/routes/record.tsx +21 -12
  129. package/corpus/templates/clips/changelog/2026-07-02-recordings-now-wait-for-storage-media-to-serve-before-finishing.md +6 -0
  130. package/corpus/templates/clips/changelog/2026-07-07-a-pending-app-update-no-longer-blocks-screen-recording-updat.md +6 -0
  131. package/corpus/templates/clips/changelog/2026-07-07-chrome-extension-recordings-keep-audio-after-refreshing-tab.md +6 -0
  132. package/corpus/templates/clips/changelog/2026-07-07-clip-playback-progress-now-starts-and-finishes-at-the-right-times.md +6 -0
  133. package/corpus/templates/clips/changelog/2026-07-07-sharing-public-clips-now-stays-focused-on-the-normal-link-wi.md +6 -0
  134. package/corpus/templates/clips/chrome-extension/src/background.ts +18 -0
  135. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +23 -8
  136. package/corpus/templates/clips/desktop/src/app.tsx +40 -3
  137. package/corpus/templates/clips/desktop/src/hooks/useMediaDevices.ts +19 -7
  138. package/corpus/templates/clips/desktop/src/lib/permissions.ts +2 -0
  139. package/corpus/templates/clips/desktop/src/lib/updater.ts +25 -2
  140. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +7 -0
  141. package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +1 -0
  142. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +22 -5
  143. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +8 -0
  144. package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +13 -6
  145. package/corpus/templates/clips/shared/finalize-recovery.ts +12 -0
  146. package/corpus/templates/content/actions/delete-document.ts +337 -52
  147. package/corpus/templates/content/changelog/2026-07-07-permanently-deleting-trashed-databases-now-finishes-reliably.md +6 -0
  148. package/corpus/templates/slides/app/pages/DeckEditor.tsx +2 -2
  149. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  150. package/dist/agent/engine/ai-sdk-engine.js +15 -1
  151. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  152. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  153. package/dist/agent/engine/anthropic-engine.js +20 -1
  154. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  155. package/dist/agent/engine/registry.d.ts.map +1 -1
  156. package/dist/agent/engine/registry.js +22 -14
  157. package/dist/agent/engine/registry.js.map +1 -1
  158. package/dist/agent/production-agent.d.ts.map +1 -1
  159. package/dist/agent/production-agent.js +27 -7
  160. package/dist/agent/production-agent.js.map +1 -1
  161. package/dist/client/command-navigation/index.d.ts +4 -0
  162. package/dist/client/command-navigation/index.d.ts.map +1 -0
  163. package/dist/client/command-navigation/index.js +4 -0
  164. package/dist/client/command-navigation/index.js.map +1 -0
  165. package/dist/client/comments-review/index.d.ts +2 -0
  166. package/dist/client/comments-review/index.d.ts.map +1 -0
  167. package/dist/client/comments-review/index.js +2 -0
  168. package/dist/client/comments-review/index.js.map +1 -0
  169. package/dist/client/history/VersionHistoryPanel.d.ts +18 -0
  170. package/dist/client/history/VersionHistoryPanel.d.ts.map +1 -0
  171. package/dist/client/history/VersionHistoryPanel.js +24 -0
  172. package/dist/client/history/VersionHistoryPanel.js.map +1 -0
  173. package/dist/client/history/index.d.ts +3 -0
  174. package/dist/client/history/index.d.ts.map +1 -0
  175. package/dist/client/history/index.js +3 -0
  176. package/dist/client/history/index.js.map +1 -0
  177. package/dist/client/history/use-history.d.ts +46 -0
  178. package/dist/client/history/use-history.d.ts.map +1 -0
  179. package/dist/client/history/use-history.js +18 -0
  180. package/dist/client/history/use-history.js.map +1 -0
  181. package/dist/client/index.d.ts +6 -4
  182. package/dist/client/index.d.ts.map +1 -1
  183. package/dist/client/index.js +6 -4
  184. package/dist/client/index.js.map +1 -1
  185. package/dist/client/org/OrgSwitcher.js +5 -5
  186. package/dist/client/org/OrgSwitcher.js.map +1 -1
  187. package/dist/client/org/RequireActiveOrg.js +2 -2
  188. package/dist/client/org/RequireActiveOrg.js.map +1 -1
  189. package/dist/client/org/TeamPage.js +3 -3
  190. package/dist/client/org/TeamPage.js.map +1 -1
  191. package/dist/client/org/hooks.d.ts +12 -1
  192. package/dist/client/org/hooks.d.ts.map +1 -1
  193. package/dist/client/org/hooks.js +15 -0
  194. package/dist/client/org/hooks.js.map +1 -1
  195. package/dist/client/org/index.d.ts +4 -2
  196. package/dist/client/org/index.d.ts.map +1 -1
  197. package/dist/client/org/index.js +3 -1
  198. package/dist/client/org/index.js.map +1 -1
  199. package/dist/client/org-team/index.d.ts +2 -0
  200. package/dist/client/org-team/index.d.ts.map +1 -0
  201. package/dist/client/org-team/index.js +2 -0
  202. package/dist/client/org-team/index.js.map +1 -0
  203. package/dist/client/review/ReviewStatusBadge.d.ts +7 -0
  204. package/dist/client/review/ReviewStatusBadge.d.ts.map +1 -0
  205. package/dist/client/review/ReviewStatusBadge.js +19 -0
  206. package/dist/client/review/ReviewStatusBadge.js.map +1 -0
  207. package/dist/client/review/ReviewThreadPanel.d.ts +20 -0
  208. package/dist/client/review/ReviewThreadPanel.d.ts.map +1 -0
  209. package/dist/client/review/ReviewThreadPanel.js +84 -0
  210. package/dist/client/review/ReviewThreadPanel.js.map +1 -0
  211. package/dist/client/review/index.d.ts +4 -0
  212. package/dist/client/review/index.d.ts.map +1 -0
  213. package/dist/client/review/index.js +4 -0
  214. package/dist/client/review/index.js.map +1 -0
  215. package/dist/client/review/use-review.d.ts +68 -0
  216. package/dist/client/review/use-review.d.ts.map +1 -0
  217. package/dist/client/review/use-review.js +22 -0
  218. package/dist/client/review/use-review.js.map +1 -0
  219. package/dist/client/settings/index.d.ts +1 -1
  220. package/dist/client/settings/index.d.ts.map +1 -1
  221. package/dist/client/settings/index.js +1 -1
  222. package/dist/client/settings/index.js.map +1 -1
  223. package/dist/client/setup-connections/BuilderConnectCard.d.ts +9 -0
  224. package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -0
  225. package/dist/client/setup-connections/BuilderConnectCard.js +25 -0
  226. package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -0
  227. package/dist/client/setup-connections/ProviderReadinessBadge.d.ts +8 -0
  228. package/dist/client/setup-connections/ProviderReadinessBadge.d.ts.map +1 -0
  229. package/dist/client/setup-connections/ProviderReadinessBadge.js +32 -0
  230. package/dist/client/setup-connections/ProviderReadinessBadge.js.map +1 -0
  231. package/dist/client/setup-connections/SetupConnectionsPage.d.ts +17 -0
  232. package/dist/client/setup-connections/SetupConnectionsPage.d.ts.map +1 -0
  233. package/dist/client/setup-connections/SetupConnectionsPage.js +10 -0
  234. package/dist/client/setup-connections/SetupConnectionsPage.js.map +1 -0
  235. package/dist/client/setup-connections/index.d.ts +7 -0
  236. package/dist/client/setup-connections/index.d.ts.map +1 -0
  237. package/dist/client/setup-connections/index.js +7 -0
  238. package/dist/client/setup-connections/index.js.map +1 -0
  239. package/dist/client/sharing/ShareButton.d.ts +4 -4
  240. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  241. package/dist/client/sharing/ShareButton.js +13 -7
  242. package/dist/client/sharing/ShareButton.js.map +1 -1
  243. package/dist/client/sharing/ShareDialog.js +3 -3
  244. package/dist/client/sharing/ShareDialog.js.map +1 -1
  245. package/dist/collab/struct-routes.d.ts +1 -1
  246. package/dist/command-navigation/actions.d.ts +25 -0
  247. package/dist/command-navigation/actions.d.ts.map +1 -0
  248. package/dist/command-navigation/actions.js +64 -0
  249. package/dist/command-navigation/actions.js.map +1 -0
  250. package/dist/command-navigation/index.d.ts +4 -0
  251. package/dist/command-navigation/index.d.ts.map +1 -0
  252. package/dist/command-navigation/index.js +4 -0
  253. package/dist/command-navigation/index.js.map +1 -0
  254. package/dist/comments-review/index.d.ts +2 -0
  255. package/dist/comments-review/index.d.ts.map +1 -0
  256. package/dist/comments-review/index.js +2 -0
  257. package/dist/comments-review/index.js.map +1 -0
  258. package/dist/file-upload/builder.d.ts.map +1 -1
  259. package/dist/file-upload/builder.js +18 -2
  260. package/dist/file-upload/builder.js.map +1 -1
  261. package/dist/file-upload/types.d.ts +3 -0
  262. package/dist/file-upload/types.d.ts.map +1 -1
  263. package/dist/file-upload/types.js.map +1 -1
  264. package/dist/history/actions/create-resource-version.d.ts +10 -0
  265. package/dist/history/actions/create-resource-version.d.ts.map +1 -0
  266. package/dist/history/actions/create-resource-version.js +65 -0
  267. package/dist/history/actions/create-resource-version.js.map +1 -0
  268. package/dist/history/actions/get-resource-version.d.ts +10 -0
  269. package/dist/history/actions/get-resource-version.d.ts.map +1 -0
  270. package/dist/history/actions/get-resource-version.js +38 -0
  271. package/dist/history/actions/get-resource-version.js.map +1 -0
  272. package/dist/history/actions/list-resource-history.d.ts +10 -0
  273. package/dist/history/actions/list-resource-history.d.ts.map +1 -0
  274. package/dist/history/actions/list-resource-history.js +45 -0
  275. package/dist/history/actions/list-resource-history.js.map +1 -0
  276. package/dist/history/actions/list-resource-versions.d.ts +10 -0
  277. package/dist/history/actions/list-resource-versions.d.ts.map +1 -0
  278. package/dist/history/actions/list-resource-versions.js +35 -0
  279. package/dist/history/actions/list-resource-versions.js.map +1 -0
  280. package/dist/history/actions/restore-resource-version.d.ts +11 -0
  281. package/dist/history/actions/restore-resource-version.d.ts.map +1 -0
  282. package/dist/history/actions/restore-resource-version.js +59 -0
  283. package/dist/history/actions/restore-resource-version.js.map +1 -0
  284. package/dist/history/index.d.ts +4 -0
  285. package/dist/history/index.d.ts.map +1 -0
  286. package/dist/history/index.js +3 -0
  287. package/dist/history/index.js.map +1 -0
  288. package/dist/history/registry.d.ts +10 -0
  289. package/dist/history/registry.d.ts.map +1 -0
  290. package/dist/history/registry.js +61 -0
  291. package/dist/history/registry.js.map +1 -0
  292. package/dist/history/store.d.ts +34 -0
  293. package/dist/history/store.d.ts.map +1 -0
  294. package/dist/history/store.js +265 -0
  295. package/dist/history/store.js.map +1 -0
  296. package/dist/history/types.d.ts +55 -0
  297. package/dist/history/types.d.ts.map +1 -0
  298. package/dist/history/types.js +2 -0
  299. package/dist/history/types.js.map +1 -0
  300. package/dist/index.d.ts +6 -0
  301. package/dist/index.d.ts.map +1 -1
  302. package/dist/index.js +6 -0
  303. package/dist/index.js.map +1 -1
  304. package/dist/navigation/index.d.ts +53 -0
  305. package/dist/navigation/index.d.ts.map +1 -0
  306. package/dist/navigation/index.js +105 -0
  307. package/dist/navigation/index.js.map +1 -0
  308. package/dist/org/index.d.ts +1 -0
  309. package/dist/org/index.d.ts.map +1 -1
  310. package/dist/org/index.js +1 -0
  311. package/dist/org/index.js.map +1 -1
  312. package/dist/org/permissions.d.ts +7 -0
  313. package/dist/org/permissions.d.ts.map +1 -0
  314. package/dist/org/permissions.js +21 -0
  315. package/dist/org/permissions.js.map +1 -0
  316. package/dist/org-team/index.d.ts +2 -0
  317. package/dist/org-team/index.d.ts.map +1 -0
  318. package/dist/org-team/index.js +2 -0
  319. package/dist/org-team/index.js.map +1 -0
  320. package/dist/private-blob/registry.d.ts.map +1 -1
  321. package/dist/private-blob/registry.js +1 -0
  322. package/dist/private-blob/registry.js.map +1 -1
  323. package/dist/resources/handlers.d.ts +2 -2
  324. package/dist/review/actions/consume-review-feedback.d.ts +9 -0
  325. package/dist/review/actions/consume-review-feedback.d.ts.map +1 -0
  326. package/dist/review/actions/consume-review-feedback.js +29 -0
  327. package/dist/review/actions/consume-review-feedback.js.map +1 -0
  328. package/dist/review/actions/create-review-comment.d.ts +18 -0
  329. package/dist/review/actions/create-review-comment.d.ts.map +1 -0
  330. package/dist/review/actions/create-review-comment.js +81 -0
  331. package/dist/review/actions/create-review-comment.js.map +1 -0
  332. package/dist/review/actions/delete-review-comment.d.ts +10 -0
  333. package/dist/review/actions/delete-review-comment.d.ts.map +1 -0
  334. package/dist/review/actions/delete-review-comment.js +45 -0
  335. package/dist/review/actions/delete-review-comment.js.map +1 -0
  336. package/dist/review/actions/get-review-feedback.d.ts +10 -0
  337. package/dist/review/actions/get-review-feedback.d.ts.map +1 -0
  338. package/dist/review/actions/get-review-feedback.js +45 -0
  339. package/dist/review/actions/get-review-feedback.js.map +1 -0
  340. package/dist/review/actions/list-review-comments.d.ts +13 -0
  341. package/dist/review/actions/list-review-comments.d.ts.map +1 -0
  342. package/dist/review/actions/list-review-comments.js +44 -0
  343. package/dist/review/actions/list-review-comments.js.map +1 -0
  344. package/dist/review/actions/reply-review-comment.d.ts +16 -0
  345. package/dist/review/actions/reply-review-comment.d.ts.map +1 -0
  346. package/dist/review/actions/reply-review-comment.js +84 -0
  347. package/dist/review/actions/reply-review-comment.js.map +1 -0
  348. package/dist/review/actions/resolve-review-thread.d.ts +11 -0
  349. package/dist/review/actions/resolve-review-thread.d.ts.map +1 -0
  350. package/dist/review/actions/resolve-review-thread.js +46 -0
  351. package/dist/review/actions/resolve-review-thread.js.map +1 -0
  352. package/dist/review/actions/set-review-status.d.ts +9 -0
  353. package/dist/review/actions/set-review-status.d.ts.map +1 -0
  354. package/dist/review/actions/set-review-status.js +43 -0
  355. package/dist/review/actions/set-review-status.js.map +1 -0
  356. package/dist/review/index.d.ts +5 -0
  357. package/dist/review/index.d.ts.map +1 -0
  358. package/dist/review/index.js +4 -0
  359. package/dist/review/index.js.map +1 -0
  360. package/dist/review/mentions.d.ts +4 -0
  361. package/dist/review/mentions.d.ts.map +1 -0
  362. package/dist/review/mentions.js +39 -0
  363. package/dist/review/mentions.js.map +1 -0
  364. package/dist/review/registry.d.ts +10 -0
  365. package/dist/review/registry.d.ts.map +1 -0
  366. package/dist/review/registry.js +61 -0
  367. package/dist/review/registry.js.map +1 -0
  368. package/dist/review/store.d.ts +63 -0
  369. package/dist/review/store.d.ts.map +1 -0
  370. package/dist/review/store.js +558 -0
  371. package/dist/review/store.js.map +1 -0
  372. package/dist/review/types.d.ts +77 -0
  373. package/dist/review/types.d.ts.map +1 -0
  374. package/dist/review/types.js +2 -0
  375. package/dist/review/types.js.map +1 -0
  376. package/dist/server/action-discovery.d.ts.map +1 -1
  377. package/dist/server/action-discovery.js +54 -0
  378. package/dist/server/action-discovery.js.map +1 -1
  379. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  380. package/dist/server/agent-engine-api-key-route.d.ts.map +1 -1
  381. package/dist/server/agent-engine-api-key-route.js +5 -0
  382. package/dist/server/agent-engine-api-key-route.js.map +1 -1
  383. package/dist/server/credential-provider.d.ts +26 -0
  384. package/dist/server/credential-provider.d.ts.map +1 -1
  385. package/dist/server/credential-provider.js +82 -0
  386. package/dist/server/credential-provider.js.map +1 -1
  387. package/dist/setup-connections/index.d.ts +6 -0
  388. package/dist/setup-connections/index.d.ts.map +1 -0
  389. package/dist/setup-connections/index.js +6 -0
  390. package/dist/setup-connections/index.js.map +1 -0
  391. package/dist/setup-connections/onboarding.d.ts +14 -0
  392. package/dist/setup-connections/onboarding.d.ts.map +1 -0
  393. package/dist/setup-connections/onboarding.js +23 -0
  394. package/dist/setup-connections/onboarding.js.map +1 -0
  395. package/dist/transcription/builder-transcription.d.ts +1 -0
  396. package/dist/transcription/builder-transcription.d.ts.map +1 -1
  397. package/dist/transcription/builder-transcription.js +5 -2
  398. package/dist/transcription/builder-transcription.js.map +1 -1
  399. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  400. package/dist/vite/action-types-plugin.js +52 -0
  401. package/dist/vite/action-types-plugin.js.map +1 -1
  402. package/docs/content/agent-native-toolkit.mdx +87 -80
  403. package/docs/content/locales/ar-SA/agent-native-toolkit.mdx +89 -80
  404. package/docs/content/locales/de-DE/agent-native-toolkit.mdx +89 -80
  405. package/docs/content/locales/es-ES/agent-native-toolkit.mdx +89 -80
  406. package/docs/content/locales/fr-FR/agent-native-toolkit.mdx +89 -80
  407. package/docs/content/locales/hi-IN/agent-native-toolkit.mdx +89 -80
  408. package/docs/content/locales/ja-JP/agent-native-toolkit.mdx +89 -80
  409. package/docs/content/locales/ko-KR/agent-native-toolkit.mdx +89 -80
  410. package/docs/content/locales/pt-BR/agent-native-toolkit.mdx +89 -80
  411. package/docs/content/locales/zh-CN/agent-native-toolkit.mdx +89 -80
  412. package/docs/content/locales/zh-TW/agent-native-toolkit.mdx +89 -80
  413. package/docs/content/toolkit-agent-ux.mdx +43 -0
  414. package/docs/content/toolkit-app-adapters.mdx +9 -0
  415. package/docs/content/toolkit-collaboration-ui.mdx +12 -0
  416. package/docs/content/toolkit-collaboration.mdx +74 -0
  417. package/docs/content/toolkit-command-navigation.mdx +106 -0
  418. package/docs/content/toolkit-comments-review.mdx +98 -0
  419. package/docs/content/toolkit-history.mdx +95 -0
  420. package/docs/content/toolkit-observability.mdx +41 -0
  421. package/docs/content/toolkit-org-team.mdx +80 -0
  422. package/docs/content/toolkit-resources.mdx +57 -0
  423. package/docs/content/toolkit-settings.mdx +65 -0
  424. package/docs/content/toolkit-setup-connections.mdx +109 -0
  425. package/docs/content/toolkit-sharing-ui.mdx +18 -6
  426. package/docs/content/toolkit-sharing.mdx +81 -0
  427. package/docs/content/toolkit-shell-hooks.mdx +9 -0
  428. package/docs/content/toolkit-ui.mdx +9 -0
  429. package/package.json +36 -2
@@ -0,0 +1,46 @@
1
+ export {
2
+ BuilderConnectCard,
3
+ type BuilderConnectCardProps,
4
+ } from "./BuilderConnectCard.js";
5
+ export {
6
+ ProviderReadinessBadge,
7
+ type ProviderReadinessBadgeProps,
8
+ } from "./ProviderReadinessBadge.js";
9
+ export {
10
+ SetupConnectionsPage,
11
+ type SetupConnectionsPageProps,
12
+ } from "./SetupConnectionsPage.js";
13
+ export {
14
+ OnboardingBanner,
15
+ OnboardingPanel,
16
+ SetupButton,
17
+ useOnboarding,
18
+ useOnboardingPreviewMode,
19
+ type OnboardingFormField,
20
+ type OnboardingMethod,
21
+ type OnboardingMethodBadge,
22
+ type OnboardingStep,
23
+ type OnboardingStepStatus,
24
+ type UseOnboardingResult,
25
+ } from "../onboarding/index.js";
26
+ export {
27
+ SecretsSection,
28
+ SettingsPanel,
29
+ SettingsTabsPage,
30
+ openBuilderConnectPopup,
31
+ useBuilderConnectFlow,
32
+ useBuilderStatus,
33
+ type BuilderConnectFlow,
34
+ type BuilderConnectFlowOptions,
35
+ type BuilderStatus,
36
+ type OpenBuilderConnectPopupOptions,
37
+ type SecretsSectionProps,
38
+ type SettingsPanelProps,
39
+ type SettingsTabItem,
40
+ type SettingsTabsPageProps,
41
+ } from "../settings/index.js";
42
+ export {
43
+ IntegrationsPanel,
44
+ useIntegrationStatus,
45
+ type IntegrationStatus,
46
+ } from "../integrations/index.js";
@@ -1,7 +1,6 @@
1
1
  import * as Select from "@radix-ui/react-select";
2
2
  import {
3
3
  IconLock,
4
- IconBuilding,
5
4
  IconWorld,
6
5
  IconTrash,
7
6
  IconCheck,
@@ -11,6 +10,7 @@ import {
11
10
  IconSearch,
12
11
  IconSearchOff,
13
12
  IconShare3,
13
+ IconUsersGroup,
14
14
  } from "@tabler/icons-react";
15
15
  import { useQueryClient } from "@tanstack/react-query";
16
16
  import {
@@ -46,11 +46,11 @@ export interface ShareButtonProps {
46
46
  /** @deprecated No longer affects rendering — trigger always says
47
47
  * "Share". Kept for callsite compatibility. */
48
48
  variant?: "compact" | "label";
49
- /** Optional trigger style. Defaults to the Google-Docs-style "Share" label.
50
- * Use "label-icon" to render a leading share glyph alongside the label so
51
- * the trigger matches adjacent icon+label buttons; "icon" is icon-only. */
49
+ /** Optional trigger style. Defaults to the Google-Docs-style "Share" label
50
+ * with a leading visibility icon. "label-icon" is kept for callsites that
51
+ * want to explicitly opt into icon+label parity; "icon" is icon-only. */
52
52
  trigger?: "label" | "icon" | "label-icon";
53
- /** @deprecated Label triggers no longer render a visibility/share glyph. */
53
+ /** @deprecated No longer affects rendering triggers show visibility state. */
54
54
  hideTriggerIcon?: boolean;
55
55
  /** Optional className applied to the trigger button. */
56
56
  triggerClassName?: string;
@@ -197,7 +197,7 @@ const VIS_META: Record<
197
197
  org: {
198
198
  label: "Organization",
199
199
  description: "Anyone in your organization can view",
200
- Icon: IconBuilding,
200
+ Icon: IconUsersGroup,
201
201
  },
202
202
  public: {
203
203
  label: "Public",
@@ -356,10 +356,17 @@ export function ShareButton(props: ShareButtonProps) {
356
356
  });
357
357
  };
358
358
 
359
- // The default trigger stays text-only; the icon trigger keeps the share glyph.
360
- // "label-icon" renders the glyph alongside the label for icon+label parity.
359
+ const triggerVisibility =
360
+ pendingVisibility ??
361
+ (sharesQuery.data
362
+ ? ((sharesQuery.data.visibility as Visibility | null) ?? "private")
363
+ : null);
364
+ const triggerMeta = triggerVisibility
365
+ ? visibilityMeta(triggerVisibility, props.visibilityCopy)
366
+ : null;
367
+ const TriggerIcon = triggerMeta?.Icon ?? IconShare3;
368
+ const triggerLabel = triggerMeta ? `Share (${triggerMeta.label})` : "Share";
361
369
  const iconOnly = props.trigger === "icon";
362
- const showLabelIcon = props.trigger === "label-icon";
363
370
 
364
371
  return (
365
372
  <Popover open={open} onOpenChange={handleOpenChange}>
@@ -370,11 +377,10 @@ export function ShareButton(props: ShareButtonProps) {
370
377
  iconOnly ? BUTTON_GHOST_ICON : BUTTON_OUTLINE_SM,
371
378
  props.triggerClassName,
372
379
  )}
373
- aria-label={iconOnly ? "Share" : undefined}
380
+ aria-label={triggerLabel}
381
+ title={triggerLabel}
374
382
  >
375
- {iconOnly || showLabelIcon ? (
376
- <IconShare3 size={16} strokeWidth={1.75} />
377
- ) : null}
383
+ <TriggerIcon size={16} strokeWidth={1.75} />
378
384
  {!iconOnly && <span>Share</span>}
379
385
  </button>
380
386
  </PopoverTrigger>
@@ -1663,7 +1669,7 @@ function Avatar({ label, org }: { label: string; org?: boolean }) {
1663
1669
  aria-hidden
1664
1670
  className="inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-muted text-[11px] font-semibold text-muted-foreground"
1665
1671
  >
1666
- {org ? <IconBuilding size={14} strokeWidth={1.75} /> : initials(label)}
1672
+ {org ? <IconUsersGroup size={14} strokeWidth={1.75} /> : initials(label)}
1667
1673
  </span>
1668
1674
  );
1669
1675
  }
@@ -3,7 +3,6 @@ import {
3
3
  IconX,
4
4
  IconTrash,
5
5
  IconLock,
6
- IconBuilding,
7
6
  IconWorld,
8
7
  IconCheck,
9
8
  IconCopy,
@@ -11,6 +10,7 @@ import {
11
10
  IconMail,
12
11
  IconCode,
13
12
  IconChevronDown,
13
+ IconUsersGroup,
14
14
  } from "@tabler/icons-react";
15
15
  import { useEffect, useState, type ReactNode } from "react";
16
16
  import { createPortal } from "react-dom";
@@ -117,7 +117,7 @@ const BUTTON_GHOST_ICON = cn(
117
117
 
118
118
  const VIS_ICONS: Record<Visibility, typeof IconLock> = {
119
119
  private: IconLock,
120
- org: IconBuilding,
120
+ org: IconUsersGroup,
121
121
  public: IconWorld,
122
122
  };
123
123
 
@@ -824,7 +824,7 @@ function Avatar({ label, org }: { label: string; org?: boolean }) {
824
824
  className="inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-muted text-[11px] font-semibold text-muted-foreground"
825
825
  >
826
826
  {org ? (
827
- <IconBuilding size={14} strokeWidth={1.75} />
827
+ <IconUsersGroup size={14} strokeWidth={1.75} />
828
828
  ) : (
829
829
  (label.split("@")[0]?.[0] ?? label[0] ?? "?").toUpperCase()
830
830
  )}
@@ -0,0 +1,100 @@
1
+ import { z } from "zod";
2
+
3
+ import { defineAction } from "../action.js";
4
+ import { readAppState, writeAppState } from "../application-state/index.js";
5
+
6
+ const navigateSchema = z
7
+ .object({
8
+ view: z.string().optional().describe("View name to navigate to"),
9
+ path: z.string().optional().describe("URL path to navigate to"),
10
+ })
11
+ .passthrough();
12
+
13
+ export interface CreateNavigateActionOptions {
14
+ description?: string;
15
+ stateKey?: string;
16
+ normalize?: (
17
+ args: z.infer<typeof navigateSchema>,
18
+ ) => Record<string, unknown> | Promise<Record<string, unknown>>;
19
+ describeResult?: (
20
+ navigation: Record<string, unknown>,
21
+ args: z.infer<typeof navigateSchema>,
22
+ ) => string;
23
+ }
24
+
25
+ export interface CreateViewScreenActionOptions {
26
+ description?: string;
27
+ navigationStateKey?: string;
28
+ extraStateKeys?: string[];
29
+ describeResult?: (
30
+ screen: Record<string, unknown>,
31
+ ) =>
32
+ | Record<string, unknown>
33
+ | string
34
+ | Promise<Record<string, unknown> | string>;
35
+ }
36
+
37
+ function writeId(): string {
38
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
39
+ }
40
+
41
+ export function createNavigateAction(
42
+ options: CreateNavigateActionOptions = {},
43
+ ) {
44
+ const stateKey = options.stateKey ?? "navigate";
45
+ return defineAction({
46
+ description:
47
+ options.description ??
48
+ "Navigate the UI to a specific view or path. Writes a navigate command to application state which the UI reads and auto-deletes.",
49
+ schema: navigateSchema,
50
+ http: false,
51
+ run: async (args) => {
52
+ if (!args.view && !args.path) {
53
+ throw new Error("At least --view or --path is required.");
54
+ }
55
+ const navigation = options.normalize
56
+ ? await options.normalize(args)
57
+ : ({
58
+ ...(args.view ? { view: args.view } : null),
59
+ ...(args.path ? { path: args.path } : null),
60
+ } as Record<string, unknown>);
61
+ navigation._writeId = writeId();
62
+ await writeAppState(stateKey, navigation);
63
+ return (
64
+ options.describeResult?.(navigation, args) ??
65
+ `Navigating to ${String(args.view || args.path)}`
66
+ );
67
+ },
68
+ });
69
+ }
70
+
71
+ export function createViewScreenAction(
72
+ options: CreateViewScreenActionOptions = {},
73
+ ) {
74
+ const navigationStateKey = options.navigationStateKey ?? "navigation";
75
+ return defineAction({
76
+ description:
77
+ options.description ??
78
+ "See what the user is currently looking at on screen. Returns the current navigation state.",
79
+ schema: z.object({}),
80
+ http: false,
81
+ readOnly: true,
82
+ run: async () => {
83
+ const screen: Record<string, unknown> = {};
84
+ const navigation = await readAppState(navigationStateKey);
85
+ if (navigation) screen.navigation = navigation;
86
+
87
+ for (const key of options.extraStateKeys ?? []) {
88
+ const value = await readAppState(key);
89
+ if (value !== null && value !== undefined) screen[key] = value;
90
+ }
91
+
92
+ if (Object.keys(screen).length === 0) {
93
+ return "No application state found. Is the app running?";
94
+ }
95
+ return options.describeResult
96
+ ? await options.describeResult(screen)
97
+ : screen;
98
+ },
99
+ });
100
+ }
@@ -0,0 +1,12 @@
1
+ export * from "../navigation/index.js";
2
+ export * from "./actions.js";
3
+ export {
4
+ buildDeepLink,
5
+ toAbsoluteOpenUrl,
6
+ toDesktopOpenUrl,
7
+ toVsCodeOpenUrl,
8
+ DESKTOP_OPEN_URL,
9
+ OPEN_ROUTE_SUBPATH,
10
+ VSCODE_OPEN_URL,
11
+ type DeepLinkInput,
12
+ } from "../server/deep-link.js";
@@ -0,0 +1 @@
1
+ export * from "../review/index.js";
@@ -60,6 +60,15 @@ function setSkipCompressionQueryParams(url: URL): void {
60
60
  }
61
61
  }
62
62
 
63
+ function setRecordAssetQueryParam(
64
+ url: URL,
65
+ recordAsset: boolean | undefined,
66
+ ): void {
67
+ if (recordAsset === false) {
68
+ url.searchParams.set("record", "false");
69
+ }
70
+ }
71
+
63
72
  async function assertOk(res: Response, label: string): Promise<void> {
64
73
  if (!res.ok) {
65
74
  const body = await res.text().catch(() => "");
@@ -111,7 +120,10 @@ async function uploadLargeFileViaSignedUrl(
111
120
  privateKey,
112
121
  assetId,
113
122
  input.filename,
114
- { skipCompressionWait: input.skipCompressionWait },
123
+ {
124
+ skipCompressionWait: input.skipCompressionWait,
125
+ recordAsset: input.recordAsset,
126
+ },
115
127
  );
116
128
  console.log(`[builder-upload] done [${assetId}]: ${url}`);
117
129
  return { url, id, provider: "builder" };
@@ -165,20 +177,25 @@ async function completeBuilderUpload(
165
177
  privateKey: string,
166
178
  assetId: string,
167
179
  filename: string | undefined,
168
- options?: { skipCompressionWait?: boolean },
180
+ options?: { skipCompressionWait?: boolean; recordAsset?: boolean },
169
181
  ): Promise<{ url: string; id?: string }> {
170
182
  const host = builderUploadHost();
171
183
  const url = new URL("/api/v1/upload/complete", host);
172
184
  if (options?.skipCompressionWait) {
173
185
  setSkipCompressionQueryParams(url);
174
186
  }
187
+ setRecordAssetQueryParam(url, options?.recordAsset);
175
188
  const res = await fetchWithTimeout(url.toString(), {
176
189
  method: "POST",
177
190
  headers: {
178
191
  Authorization: `Bearer ${privateKey}`,
179
192
  "Content-Type": "application/json",
180
193
  },
181
- body: JSON.stringify({ assetId, name: filename }),
194
+ body: JSON.stringify({
195
+ assetId,
196
+ name: filename,
197
+ ...(options?.recordAsset === false ? { record: false } : {}),
198
+ }),
182
199
  });
183
200
  await assertOk(res, "Builder.io upload complete failed");
184
201
  const json = (await res.json()) as { url?: string; id?: string };
@@ -273,6 +290,7 @@ export const builderFileUploadProvider: FileUploadProvider = {
273
290
  if (input.skipCompressionWait) {
274
291
  setSkipCompressionQueryParams(url);
275
292
  }
293
+ setRecordAssetQueryParam(url, input.recordAsset);
276
294
 
277
295
  const response = await uploadSmallFile(url, {
278
296
  method: "POST",
@@ -414,6 +432,9 @@ export const builderFileUploadProvider: FileUploadProvider = {
414
432
  skipCompressionWait:
415
433
  options?.skipCompressionWait ||
416
434
  session.meta.skipCompressionWait === true,
435
+ recordAsset:
436
+ options?.recordAsset ??
437
+ (session.meta.recordAsset === false ? false : undefined),
417
438
  },
418
439
  );
419
440
  console.log(`[builder-resumable] upload complete: ${url}`);
@@ -18,6 +18,8 @@ export interface FileUploadInput {
18
18
  ownerEmail?: string;
19
19
  /** Builder.io upload hint: return after asset registration instead of waiting for server-side compression. */
20
20
  skipCompressionWait?: boolean;
21
+ /** Builder.io upload hint: set false for internal artifacts that should not appear in the asset library. */
22
+ recordAsset?: boolean;
21
23
  }
22
24
 
23
25
  export interface FileUploadResult {
@@ -79,7 +81,7 @@ export interface FileUploadProvider {
79
81
  completeSession(
80
82
  session: ResumableUploadSession,
81
83
  filename: string,
82
- options?: { skipCompressionWait?: boolean },
84
+ options?: { skipCompressionWait?: boolean; recordAsset?: boolean },
83
85
  ): Promise<string>;
84
86
  };
85
87
  }
@@ -0,0 +1,89 @@
1
+ import { z } from "zod";
2
+
3
+ import { defineAction } from "../../action.js";
4
+ import {
5
+ assertVersionedResourceAccess,
6
+ getVersionedResource,
7
+ normalizeHistoryVisibility,
8
+ } from "../registry.js";
9
+ import { insertResourceVersion } from "../store.js";
10
+ import type { HistoryActorKind, VersionedResourceContext } from "../types.js";
11
+
12
+ const schema = z.object({
13
+ resourceType: z.string().min(1),
14
+ resourceId: z.string().min(1),
15
+ title: z.string().optional(),
16
+ summary: z.string().optional(),
17
+ snapshot: z.unknown().optional(),
18
+ metadata: z.record(z.string(), z.unknown()).optional(),
19
+ });
20
+
21
+ export default defineAction({
22
+ description: "Create a reusable version-history snapshot for a resource.",
23
+ schema,
24
+ run: async (args, ctx) => {
25
+ const actionCtx = ctx as VersionedResourceContext | undefined;
26
+ const access = await assertVersionedResourceAccess(
27
+ args.resourceType,
28
+ args.resourceId,
29
+ actionCtx,
30
+ "editor",
31
+ );
32
+ const registration = getVersionedResource(args.resourceType);
33
+ const snapshot =
34
+ args.snapshot !== undefined
35
+ ? args.snapshot
36
+ : await registration?.getSnapshot?.({
37
+ resourceType: args.resourceType,
38
+ resourceId: args.resourceId,
39
+ ctx: actionCtx,
40
+ access,
41
+ });
42
+
43
+ if (snapshot === undefined) {
44
+ throw new Error(
45
+ `No snapshot was provided and ${args.resourceType} has no getSnapshot history handler`,
46
+ );
47
+ }
48
+
49
+ return insertResourceVersion({
50
+ resourceType: args.resourceType,
51
+ resourceId: args.resourceId,
52
+ createdBy: actionCtx?.userEmail ?? null,
53
+ actorKind: actorKindFromContext(actionCtx),
54
+ ownerEmail: access.ownerEmail ?? actionCtx?.userEmail ?? null,
55
+ orgId: access.orgId ?? actionCtx?.orgId ?? null,
56
+ visibility: normalizeHistoryVisibility(access.visibility),
57
+ title: args.title,
58
+ summary: args.summary,
59
+ snapshot,
60
+ metadata: args.metadata,
61
+ });
62
+ },
63
+ audit: {
64
+ target: (args, result) => {
65
+ const version = result as {
66
+ ownerEmail?: string | null;
67
+ orgId?: string | null;
68
+ visibility?: "private" | "org" | "public";
69
+ };
70
+ return {
71
+ type: args.resourceType,
72
+ id: args.resourceId,
73
+ ownerEmail: version.ownerEmail,
74
+ orgId: version.orgId,
75
+ visibility: version.visibility,
76
+ };
77
+ },
78
+ },
79
+ });
80
+
81
+ function actorKindFromContext(
82
+ ctx: VersionedResourceContext | undefined,
83
+ ): HistoryActorKind {
84
+ const caller = typeof ctx?.caller === "string" ? ctx.caller : "";
85
+ if (caller === "agent" || caller === "tool") {
86
+ return "agent";
87
+ }
88
+ return ctx?.userEmail ? "human" : "system";
89
+ }
@@ -0,0 +1,60 @@
1
+ import { z } from "zod";
2
+
3
+ import { defineAction } from "../../action.js";
4
+ import { assertVersionedResourceAccess } from "../registry.js";
5
+ import {
6
+ getResourceVersionById,
7
+ getResourceVersionByNumber,
8
+ } from "../store.js";
9
+ import type { VersionedResourceContext } from "../types.js";
10
+
11
+ const schema = z
12
+ .object({
13
+ id: z.string().optional(),
14
+ resourceType: z.string().min(1).optional(),
15
+ resourceId: z.string().min(1).optional(),
16
+ versionNumber: z.number().int().positive().optional(),
17
+ })
18
+ .refine(
19
+ (value) =>
20
+ value.id ||
21
+ (value.resourceType && value.resourceId && value.versionNumber),
22
+ {
23
+ message:
24
+ "Provide either id or resourceType, resourceId, and versionNumber",
25
+ },
26
+ );
27
+
28
+ export default defineAction({
29
+ description: "Read one version-history snapshot for a reusable resource.",
30
+ schema,
31
+ http: { method: "GET" },
32
+ readOnly: true,
33
+ parallelSafe: true,
34
+ run: async (args, ctx) => {
35
+ const actionCtx = ctx as VersionedResourceContext | undefined;
36
+ const scope = {
37
+ userEmail: actionCtx?.userEmail ?? null,
38
+ orgId: actionCtx?.orgId ?? null,
39
+ };
40
+ const version = args.id
41
+ ? await getResourceVersionById(args.id, scope, { bypassScope: true })
42
+ : await getResourceVersionByNumber(
43
+ args.resourceType!,
44
+ args.resourceId!,
45
+ args.versionNumber!,
46
+ scope,
47
+ { bypassScope: true },
48
+ );
49
+ if (!version) {
50
+ throw new Error("Resource version not found");
51
+ }
52
+ await assertVersionedResourceAccess(
53
+ version.resourceType,
54
+ version.resourceId,
55
+ actionCtx,
56
+ "viewer",
57
+ );
58
+ return { version };
59
+ },
60
+ });
@@ -0,0 +1,53 @@
1
+ import { z } from "zod";
2
+
3
+ import { defineAction } from "../../action.js";
4
+ import { queryAuditEvents } from "../../audit/store.js";
5
+ import { assertVersionedResourceAccess } from "../registry.js";
6
+ import { queryResourceVersions } from "../store.js";
7
+ import type { VersionedResourceContext } from "../types.js";
8
+
9
+ const schema = z.object({
10
+ resourceType: z.string().min(1),
11
+ resourceId: z.string().min(1),
12
+ limit: z.number().int().positive().max(200).optional(),
13
+ });
14
+
15
+ export default defineAction({
16
+ description: "List versions and audit events for a reusable resource.",
17
+ schema,
18
+ http: { method: "GET" },
19
+ readOnly: true,
20
+ parallelSafe: true,
21
+ run: async (args, ctx) => {
22
+ const actionCtx = ctx as VersionedResourceContext | undefined;
23
+ await assertVersionedResourceAccess(
24
+ args.resourceType,
25
+ args.resourceId,
26
+ actionCtx,
27
+ "viewer",
28
+ );
29
+ const scope = {
30
+ userEmail: actionCtx?.userEmail ?? null,
31
+ orgId: actionCtx?.orgId ?? null,
32
+ };
33
+ const auditScope = {
34
+ userEmail: actionCtx?.userEmail ?? undefined,
35
+ orgId: actionCtx?.orgId ?? undefined,
36
+ };
37
+ const [versions, auditEvents] = await Promise.all([
38
+ queryResourceVersions({
39
+ resourceType: args.resourceType,
40
+ resourceId: args.resourceId,
41
+ scope,
42
+ bypassScope: true,
43
+ limit: args.limit,
44
+ }),
45
+ queryAuditEvents(auditScope, {
46
+ targetType: args.resourceType,
47
+ targetId: args.resourceId,
48
+ limit: args.limit ?? 50,
49
+ }),
50
+ ]);
51
+ return { versions, auditEvents };
52
+ },
53
+ });
@@ -0,0 +1,43 @@
1
+ import { z } from "zod";
2
+
3
+ import { defineAction } from "../../action.js";
4
+ import { assertVersionedResourceAccess } from "../registry.js";
5
+ import { queryResourceVersions } from "../store.js";
6
+ import type { VersionedResourceContext } from "../types.js";
7
+
8
+ const schema = z.object({
9
+ resourceType: z.string().min(1),
10
+ resourceId: z.string().min(1),
11
+ limit: z.number().int().positive().max(200).optional(),
12
+ offset: z.number().int().nonnegative().optional(),
13
+ });
14
+
15
+ export default defineAction({
16
+ description: "List version-history snapshots for a reusable resource.",
17
+ schema,
18
+ http: { method: "GET" },
19
+ readOnly: true,
20
+ parallelSafe: true,
21
+ run: async (args, ctx) => {
22
+ const actionCtx = ctx as VersionedResourceContext | undefined;
23
+ await assertVersionedResourceAccess(
24
+ args.resourceType,
25
+ args.resourceId,
26
+ actionCtx,
27
+ "viewer",
28
+ );
29
+ return {
30
+ versions: await queryResourceVersions({
31
+ resourceType: args.resourceType,
32
+ resourceId: args.resourceId,
33
+ scope: {
34
+ userEmail: actionCtx?.userEmail ?? null,
35
+ orgId: actionCtx?.orgId ?? null,
36
+ },
37
+ bypassScope: true,
38
+ limit: args.limit,
39
+ offset: args.offset,
40
+ }),
41
+ };
42
+ },
43
+ });