@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
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/file-upload/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8GAA8G;IAC9G,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;qFAEqF;AACrF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf;uEACmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,wDAAwD;IACxD,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9D;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACnC,UAAU,CACR,OAAO,EAAE,sBAAsB,EAC/B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,UAAU,EACjB,OAAO,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACjC,eAAe,CACb,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;YAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;SAAE,GAC1C,OAAO,CAAC,MAAM,CAAC,CAAC;KACpB,CAAC;CACH"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/file-upload/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8GAA8G;IAC9G,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,4GAA4G;IAC5G,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;qFAEqF;AACrF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf;uEACmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,wDAAwD;IACxD,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9D;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACnC,UAAU,CACR,OAAO,EAAE,sBAAsB,EAC/B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,UAAU,EACjB,OAAO,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACjC,eAAe,CACb,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;YAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE,GACjE,OAAO,CAAC,MAAM,CAAC,CAAC;KACpB,CAAC;CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/file-upload/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG","sourcesContent":["/**\n * File upload framework primitive.\n *\n * Templates call `uploadFile()` to upload a file and get back a URL.\n * The framework dispatches to whichever provider is registered (Builder.io\n * built-in, or a user-supplied one). If no provider is active, it falls back\n * to the SQL resources store — fine for dev, not recommended for production.\n */\n\nexport interface FileUploadInput {\n /** File contents. */\n data: Uint8Array | Buffer;\n /** Original filename, used for extension/display. */\n filename?: string;\n /** MIME type, e.g. \"image/png\". */\n mimeType?: string;\n /** Optional owner email for per-user scoping in fallback storage. */\n ownerEmail?: string;\n /** Builder.io upload hint: return after asset registration instead of waiting for server-side compression. */\n skipCompressionWait?: boolean;\n}\n\nexport interface FileUploadResult {\n /** Public URL where the file can be fetched. */\n url: string;\n /** Optional provider-specific id (e.g. resource id, Builder asset id). */\n id?: string;\n /** The provider that handled the upload. */\n provider: string;\n}\n\n/** Opaque session handle returned by {@link FileUploadProvider.resumable.startSession}.\n * `sessionId` is provider-specific (GCS Location URI, S3 UploadId, etc.).\n * `meta` holds any provider state needed for subsequent relay and complete calls. */\nexport interface ResumableUploadSession {\n sessionId: string;\n meta: Record<string, unknown>;\n}\n\nexport interface ResumableChunkResult {\n ok: boolean;\n status: number;\n /** Providers that need per-chunk state (e.g. S3 ETags) return updated meta\n * here; the chunk route merges it back into the stored session. */\n updatedMeta?: Record<string, unknown>;\n}\n\nexport interface FileUploadProvider {\n /** Unique id, e.g. \"builder\", \"s3\". */\n id: string;\n /** Human-readable name. */\n name: string;\n /** Returns true if this provider is configured from synchronous runtime state. */\n isConfigured: () => boolean;\n /**\n * Returns true if this provider is configured for the active request.\n * Use for DB-backed user/org/workspace secrets that require request context.\n */\n isConfiguredForRequest?: () => Promise<boolean>;\n /** Upload a file and return a URL. Throw on failure. */\n upload: (input: FileUploadInput) => Promise<FileUploadResult>;\n /**\n * Optional resumable/streaming upload capability.\n * When present, create-recording will initialise a session and stream chunks\n * during recording instead of assembling the full blob after stop().\n */\n resumable?: {\n startSession(\n filename: string,\n mimeType: string,\n maxBytes: number,\n ): Promise<ResumableUploadSession>;\n relayChunk(\n session: ResumableUploadSession,\n contentRange: string,\n bytes: Uint8Array,\n options?: { mimeType?: string },\n ): Promise<ResumableChunkResult>;\n completeSession(\n session: ResumableUploadSession,\n filename: string,\n options?: { skipCompressionWait?: boolean },\n ): Promise<string>;\n };\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/file-upload/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG","sourcesContent":["/**\n * File upload framework primitive.\n *\n * Templates call `uploadFile()` to upload a file and get back a URL.\n * The framework dispatches to whichever provider is registered (Builder.io\n * built-in, or a user-supplied one). If no provider is active, it falls back\n * to the SQL resources store — fine for dev, not recommended for production.\n */\n\nexport interface FileUploadInput {\n /** File contents. */\n data: Uint8Array | Buffer;\n /** Original filename, used for extension/display. */\n filename?: string;\n /** MIME type, e.g. \"image/png\". */\n mimeType?: string;\n /** Optional owner email for per-user scoping in fallback storage. */\n ownerEmail?: string;\n /** Builder.io upload hint: return after asset registration instead of waiting for server-side compression. */\n skipCompressionWait?: boolean;\n /** Builder.io upload hint: set false for internal artifacts that should not appear in the asset library. */\n recordAsset?: boolean;\n}\n\nexport interface FileUploadResult {\n /** Public URL where the file can be fetched. */\n url: string;\n /** Optional provider-specific id (e.g. resource id, Builder asset id). */\n id?: string;\n /** The provider that handled the upload. */\n provider: string;\n}\n\n/** Opaque session handle returned by {@link FileUploadProvider.resumable.startSession}.\n * `sessionId` is provider-specific (GCS Location URI, S3 UploadId, etc.).\n * `meta` holds any provider state needed for subsequent relay and complete calls. */\nexport interface ResumableUploadSession {\n sessionId: string;\n meta: Record<string, unknown>;\n}\n\nexport interface ResumableChunkResult {\n ok: boolean;\n status: number;\n /** Providers that need per-chunk state (e.g. S3 ETags) return updated meta\n * here; the chunk route merges it back into the stored session. */\n updatedMeta?: Record<string, unknown>;\n}\n\nexport interface FileUploadProvider {\n /** Unique id, e.g. \"builder\", \"s3\". */\n id: string;\n /** Human-readable name. */\n name: string;\n /** Returns true if this provider is configured from synchronous runtime state. */\n isConfigured: () => boolean;\n /**\n * Returns true if this provider is configured for the active request.\n * Use for DB-backed user/org/workspace secrets that require request context.\n */\n isConfiguredForRequest?: () => Promise<boolean>;\n /** Upload a file and return a URL. Throw on failure. */\n upload: (input: FileUploadInput) => Promise<FileUploadResult>;\n /**\n * Optional resumable/streaming upload capability.\n * When present, create-recording will initialise a session and stream chunks\n * during recording instead of assembling the full blob after stop().\n */\n resumable?: {\n startSession(\n filename: string,\n mimeType: string,\n maxBytes: number,\n ): Promise<ResumableUploadSession>;\n relayChunk(\n session: ResumableUploadSession,\n contentRange: string,\n bytes: Uint8Array,\n options?: { mimeType?: string },\n ): Promise<ResumableChunkResult>;\n completeSession(\n session: ResumableUploadSession,\n filename: string,\n options?: { skipCompressionWait?: boolean; recordAsset?: boolean },\n ): Promise<string>;\n };\n}\n"]}
@@ -0,0 +1,10 @@
1
+ declare const _default: import("../../action.js").ActionDefinition<{
2
+ resourceType: string;
3
+ resourceId: string;
4
+ title?: string;
5
+ summary?: string;
6
+ snapshot?: unknown;
7
+ metadata?: Record<string, unknown>;
8
+ }, import("../types.js").ResourceVersion>;
9
+ export default _default;
10
+ //# sourceMappingURL=create-resource-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-resource-version.d.ts","sourceRoot":"","sources":["../../../src/history/actions/create-resource-version.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ import { z } from "zod";
2
+ import { defineAction } from "../../action.js";
3
+ import { assertVersionedResourceAccess, getVersionedResource, normalizeHistoryVisibility, } from "../registry.js";
4
+ import { insertResourceVersion } from "../store.js";
5
+ const schema = z.object({
6
+ resourceType: z.string().min(1),
7
+ resourceId: z.string().min(1),
8
+ title: z.string().optional(),
9
+ summary: z.string().optional(),
10
+ snapshot: z.unknown().optional(),
11
+ metadata: z.record(z.string(), z.unknown()).optional(),
12
+ });
13
+ export default defineAction({
14
+ description: "Create a reusable version-history snapshot for a resource.",
15
+ schema,
16
+ run: async (args, ctx) => {
17
+ const actionCtx = ctx;
18
+ const access = await assertVersionedResourceAccess(args.resourceType, args.resourceId, actionCtx, "editor");
19
+ const registration = getVersionedResource(args.resourceType);
20
+ const snapshot = args.snapshot !== undefined
21
+ ? args.snapshot
22
+ : await registration?.getSnapshot?.({
23
+ resourceType: args.resourceType,
24
+ resourceId: args.resourceId,
25
+ ctx: actionCtx,
26
+ access,
27
+ });
28
+ if (snapshot === undefined) {
29
+ throw new Error(`No snapshot was provided and ${args.resourceType} has no getSnapshot history handler`);
30
+ }
31
+ return insertResourceVersion({
32
+ resourceType: args.resourceType,
33
+ resourceId: args.resourceId,
34
+ createdBy: actionCtx?.userEmail ?? null,
35
+ actorKind: actorKindFromContext(actionCtx),
36
+ ownerEmail: access.ownerEmail ?? actionCtx?.userEmail ?? null,
37
+ orgId: access.orgId ?? actionCtx?.orgId ?? null,
38
+ visibility: normalizeHistoryVisibility(access.visibility),
39
+ title: args.title,
40
+ summary: args.summary,
41
+ snapshot,
42
+ metadata: args.metadata,
43
+ });
44
+ },
45
+ audit: {
46
+ target: (args, result) => {
47
+ const version = result;
48
+ return {
49
+ type: args.resourceType,
50
+ id: args.resourceId,
51
+ ownerEmail: version.ownerEmail,
52
+ orgId: version.orgId,
53
+ visibility: version.visibility,
54
+ };
55
+ },
56
+ },
57
+ });
58
+ function actorKindFromContext(ctx) {
59
+ const caller = typeof ctx?.caller === "string" ? ctx.caller : "";
60
+ if (caller === "agent" || caller === "tool") {
61
+ return "agent";
62
+ }
63
+ return ctx?.userEmail ? "human" : "system";
64
+ }
65
+ //# sourceMappingURL=create-resource-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-resource-version.js","sourceRoot":"","sources":["../../../src/history/actions/create-resource-version.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\nimport { defineAction } from \"../../action.js\";\nimport {\n assertVersionedResourceAccess,\n getVersionedResource,\n normalizeHistoryVisibility,\n} from \"../registry.js\";\nimport { insertResourceVersion } from \"../store.js\";\nimport type { HistoryActorKind, VersionedResourceContext } from \"../types.js\";\n\nconst schema = z.object({\n resourceType: z.string().min(1),\n resourceId: z.string().min(1),\n title: z.string().optional(),\n summary: z.string().optional(),\n snapshot: z.unknown().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport default defineAction({\n description: \"Create a reusable version-history snapshot for a resource.\",\n schema,\n run: async (args, ctx) => {\n const actionCtx = ctx as VersionedResourceContext | undefined;\n const access = await assertVersionedResourceAccess(\n args.resourceType,\n args.resourceId,\n actionCtx,\n \"editor\",\n );\n const registration = getVersionedResource(args.resourceType);\n const snapshot =\n args.snapshot !== undefined\n ? args.snapshot\n : await registration?.getSnapshot?.({\n resourceType: args.resourceType,\n resourceId: args.resourceId,\n ctx: actionCtx,\n access,\n });\n\n if (snapshot === undefined) {\n throw new Error(\n `No snapshot was provided and ${args.resourceType} has no getSnapshot history handler`,\n );\n }\n\n return insertResourceVersion({\n resourceType: args.resourceType,\n resourceId: args.resourceId,\n createdBy: actionCtx?.userEmail ?? null,\n actorKind: actorKindFromContext(actionCtx),\n ownerEmail: access.ownerEmail ?? actionCtx?.userEmail ?? null,\n orgId: access.orgId ?? actionCtx?.orgId ?? null,\n visibility: normalizeHistoryVisibility(access.visibility),\n title: args.title,\n summary: args.summary,\n snapshot,\n metadata: args.metadata,\n });\n },\n audit: {\n target: (args, result) => {\n const version = result as {\n ownerEmail?: string | null;\n orgId?: string | null;\n visibility?: \"private\" | \"org\" | \"public\";\n };\n return {\n type: args.resourceType,\n id: args.resourceId,\n ownerEmail: version.ownerEmail,\n orgId: version.orgId,\n visibility: version.visibility,\n };\n },\n },\n});\n\nfunction actorKindFromContext(\n ctx: VersionedResourceContext | undefined,\n): HistoryActorKind {\n const caller = typeof ctx?.caller === \"string\" ? ctx.caller : \"\";\n if (caller === \"agent\" || caller === \"tool\") {\n return \"agent\";\n }\n return ctx?.userEmail ? \"human\" : \"system\";\n}\n"]}
@@ -0,0 +1,10 @@
1
+ declare const _default: import("../../action.js").ActionDefinition<{
2
+ id?: string;
3
+ resourceType?: string;
4
+ resourceId?: string;
5
+ versionNumber?: number;
6
+ }, {
7
+ version: import("../types.js").ResourceVersion;
8
+ }>;
9
+ export default _default;
10
+ //# sourceMappingURL=get-resource-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-resource-version.d.ts","sourceRoot":"","sources":["../../../src/history/actions/get-resource-version.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ import { defineAction } from "../../action.js";
3
+ import { assertVersionedResourceAccess } from "../registry.js";
4
+ import { getResourceVersionById, getResourceVersionByNumber, } from "../store.js";
5
+ const schema = z
6
+ .object({
7
+ id: z.string().optional(),
8
+ resourceType: z.string().min(1).optional(),
9
+ resourceId: z.string().min(1).optional(),
10
+ versionNumber: z.number().int().positive().optional(),
11
+ })
12
+ .refine((value) => value.id ||
13
+ (value.resourceType && value.resourceId && value.versionNumber), {
14
+ message: "Provide either id or resourceType, resourceId, and versionNumber",
15
+ });
16
+ export default defineAction({
17
+ description: "Read one version-history snapshot for a reusable resource.",
18
+ schema,
19
+ http: { method: "GET" },
20
+ readOnly: true,
21
+ parallelSafe: true,
22
+ run: async (args, ctx) => {
23
+ const actionCtx = ctx;
24
+ const scope = {
25
+ userEmail: actionCtx?.userEmail ?? null,
26
+ orgId: actionCtx?.orgId ?? null,
27
+ };
28
+ const version = args.id
29
+ ? await getResourceVersionById(args.id, scope, { bypassScope: true })
30
+ : await getResourceVersionByNumber(args.resourceType, args.resourceId, args.versionNumber, scope, { bypassScope: true });
31
+ if (!version) {
32
+ throw new Error("Resource version not found");
33
+ }
34
+ await assertVersionedResourceAccess(version.resourceType, version.resourceId, actionCtx, "viewer");
35
+ return { version };
36
+ },
37
+ });
38
+ //# sourceMappingURL=get-resource-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-resource-version.js","sourceRoot":"","sources":["../../../src/history/actions/get-resource-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAGrB,MAAM,MAAM,GAAG,CAAC;KACb,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACtD,CAAC;KACD,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,EAAE;IACR,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,aAAa,CAAC,EACjE;IACE,OAAO,EACL,kEAAkE;CACrE,CACF,CAAC;AAEJ,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,4DAA4D;IACzE,MAAM;IACN,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;IACvB,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;IAClB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,GAA2C,CAAC;QAC9D,MAAM,KAAK,GAAG;YACZ,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI;YACvC,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,IAAI;SAChC,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE;YACrB,CAAC,CAAC,MAAM,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACrE,CAAC,CAAC,MAAM,0BAA0B,CAC9B,IAAI,CAAC,YAAa,EAClB,IAAI,CAAC,UAAW,EAChB,IAAI,CAAC,aAAc,EACnB,KAAK,EACL,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB,CAAC;QACN,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,6BAA6B,CACjC,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,UAAU,EAClB,SAAS,EACT,QAAQ,CACT,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\n\nimport { defineAction } from \"../../action.js\";\nimport { assertVersionedResourceAccess } from \"../registry.js\";\nimport {\n getResourceVersionById,\n getResourceVersionByNumber,\n} from \"../store.js\";\nimport type { VersionedResourceContext } from \"../types.js\";\n\nconst schema = z\n .object({\n id: z.string().optional(),\n resourceType: z.string().min(1).optional(),\n resourceId: z.string().min(1).optional(),\n versionNumber: z.number().int().positive().optional(),\n })\n .refine(\n (value) =>\n value.id ||\n (value.resourceType && value.resourceId && value.versionNumber),\n {\n message:\n \"Provide either id or resourceType, resourceId, and versionNumber\",\n },\n );\n\nexport default defineAction({\n description: \"Read one version-history snapshot for a reusable resource.\",\n schema,\n http: { method: \"GET\" },\n readOnly: true,\n parallelSafe: true,\n run: async (args, ctx) => {\n const actionCtx = ctx as VersionedResourceContext | undefined;\n const scope = {\n userEmail: actionCtx?.userEmail ?? null,\n orgId: actionCtx?.orgId ?? null,\n };\n const version = args.id\n ? await getResourceVersionById(args.id, scope, { bypassScope: true })\n : await getResourceVersionByNumber(\n args.resourceType!,\n args.resourceId!,\n args.versionNumber!,\n scope,\n { bypassScope: true },\n );\n if (!version) {\n throw new Error(\"Resource version not found\");\n }\n await assertVersionedResourceAccess(\n version.resourceType,\n version.resourceId,\n actionCtx,\n \"viewer\",\n );\n return { version };\n },\n});\n"]}
@@ -0,0 +1,10 @@
1
+ declare const _default: import("../../action.js").ActionDefinition<{
2
+ resourceType: string;
3
+ resourceId: string;
4
+ limit?: number;
5
+ }, {
6
+ versions: import("../types.js").ResourceVersion[];
7
+ auditEvents: import("../../audit/types.js").AuditEvent[];
8
+ }>;
9
+ export default _default;
10
+ //# sourceMappingURL=list-resource-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-resource-history.d.ts","sourceRoot":"","sources":["../../../src/history/actions/list-resource-history.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import { z } from "zod";
2
+ import { defineAction } from "../../action.js";
3
+ import { queryAuditEvents } from "../../audit/store.js";
4
+ import { assertVersionedResourceAccess } from "../registry.js";
5
+ import { queryResourceVersions } from "../store.js";
6
+ const schema = z.object({
7
+ resourceType: z.string().min(1),
8
+ resourceId: z.string().min(1),
9
+ limit: z.number().int().positive().max(200).optional(),
10
+ });
11
+ export default defineAction({
12
+ description: "List versions and audit events for a reusable resource.",
13
+ schema,
14
+ http: { method: "GET" },
15
+ readOnly: true,
16
+ parallelSafe: true,
17
+ run: async (args, ctx) => {
18
+ const actionCtx = ctx;
19
+ await assertVersionedResourceAccess(args.resourceType, args.resourceId, actionCtx, "viewer");
20
+ const scope = {
21
+ userEmail: actionCtx?.userEmail ?? null,
22
+ orgId: actionCtx?.orgId ?? null,
23
+ };
24
+ const auditScope = {
25
+ userEmail: actionCtx?.userEmail ?? undefined,
26
+ orgId: actionCtx?.orgId ?? undefined,
27
+ };
28
+ const [versions, auditEvents] = await Promise.all([
29
+ queryResourceVersions({
30
+ resourceType: args.resourceType,
31
+ resourceId: args.resourceId,
32
+ scope,
33
+ bypassScope: true,
34
+ limit: args.limit,
35
+ }),
36
+ queryAuditEvents(auditScope, {
37
+ targetType: args.resourceType,
38
+ targetId: args.resourceId,
39
+ limit: args.limit ?? 50,
40
+ }),
41
+ ]);
42
+ return { versions, auditEvents };
43
+ },
44
+ });
45
+ //# sourceMappingURL=list-resource-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-resource-history.js","sourceRoot":"","sources":["../../../src/history/actions/list-resource-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAEH,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,yDAAyD;IACtE,MAAM;IACN,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;IACvB,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;IAClB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,GAA2C,CAAC;QAC9D,MAAM,6BAA6B,CACjC,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,UAAU,EACf,SAAS,EACT,QAAQ,CACT,CAAC;QACF,MAAM,KAAK,GAAG;YACZ,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI;YACvC,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,IAAI;SAChC,CAAC;QACF,MAAM,UAAU,GAAG;YACjB,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,SAAS;YAC5C,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,SAAS;SACrC,CAAC;QACF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAChD,qBAAqB,CAAC;gBACpB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK;gBACL,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC;YACF,gBAAgB,CAAC,UAAU,EAAE;gBAC3B,UAAU,EAAE,IAAI,CAAC,YAAY;gBAC7B,QAAQ,EAAE,IAAI,CAAC,UAAU;gBACzB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;aACxB,CAAC;SACH,CAAC,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACnC,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\n\nimport { defineAction } from \"../../action.js\";\nimport { queryAuditEvents } from \"../../audit/store.js\";\nimport { assertVersionedResourceAccess } from \"../registry.js\";\nimport { queryResourceVersions } from \"../store.js\";\nimport type { VersionedResourceContext } from \"../types.js\";\n\nconst schema = z.object({\n resourceType: z.string().min(1),\n resourceId: z.string().min(1),\n limit: z.number().int().positive().max(200).optional(),\n});\n\nexport default defineAction({\n description: \"List versions and audit events for a reusable resource.\",\n schema,\n http: { method: \"GET\" },\n readOnly: true,\n parallelSafe: true,\n run: async (args, ctx) => {\n const actionCtx = ctx as VersionedResourceContext | undefined;\n await assertVersionedResourceAccess(\n args.resourceType,\n args.resourceId,\n actionCtx,\n \"viewer\",\n );\n const scope = {\n userEmail: actionCtx?.userEmail ?? null,\n orgId: actionCtx?.orgId ?? null,\n };\n const auditScope = {\n userEmail: actionCtx?.userEmail ?? undefined,\n orgId: actionCtx?.orgId ?? undefined,\n };\n const [versions, auditEvents] = await Promise.all([\n queryResourceVersions({\n resourceType: args.resourceType,\n resourceId: args.resourceId,\n scope,\n bypassScope: true,\n limit: args.limit,\n }),\n queryAuditEvents(auditScope, {\n targetType: args.resourceType,\n targetId: args.resourceId,\n limit: args.limit ?? 50,\n }),\n ]);\n return { versions, auditEvents };\n },\n});\n"]}
@@ -0,0 +1,10 @@
1
+ declare const _default: import("../../action.js").ActionDefinition<{
2
+ resourceType: string;
3
+ resourceId: string;
4
+ limit?: number;
5
+ offset?: number;
6
+ }, {
7
+ versions: import("../types.js").ResourceVersion[];
8
+ }>;
9
+ export default _default;
10
+ //# sourceMappingURL=list-resource-versions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-resource-versions.d.ts","sourceRoot":"","sources":["../../../src/history/actions/list-resource-versions.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { z } from "zod";
2
+ import { defineAction } from "../../action.js";
3
+ import { assertVersionedResourceAccess } from "../registry.js";
4
+ import { queryResourceVersions } from "../store.js";
5
+ const schema = z.object({
6
+ resourceType: z.string().min(1),
7
+ resourceId: z.string().min(1),
8
+ limit: z.number().int().positive().max(200).optional(),
9
+ offset: z.number().int().nonnegative().optional(),
10
+ });
11
+ export default defineAction({
12
+ description: "List version-history snapshots for a reusable resource.",
13
+ schema,
14
+ http: { method: "GET" },
15
+ readOnly: true,
16
+ parallelSafe: true,
17
+ run: async (args, ctx) => {
18
+ const actionCtx = ctx;
19
+ await assertVersionedResourceAccess(args.resourceType, args.resourceId, actionCtx, "viewer");
20
+ return {
21
+ versions: await queryResourceVersions({
22
+ resourceType: args.resourceType,
23
+ resourceId: args.resourceId,
24
+ scope: {
25
+ userEmail: actionCtx?.userEmail ?? null,
26
+ orgId: actionCtx?.orgId ?? null,
27
+ },
28
+ bypassScope: true,
29
+ limit: args.limit,
30
+ offset: args.offset,
31
+ }),
32
+ };
33
+ },
34
+ });
35
+ //# sourceMappingURL=list-resource-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-resource-versions.js","sourceRoot":"","sources":["../../../src/history/actions/list-resource-versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACtD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CAClD,CAAC,CAAC;AAEH,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,yDAAyD;IACtE,MAAM;IACN,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;IACvB,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;IAClB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,GAA2C,CAAC;QAC9D,MAAM,6BAA6B,CACjC,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,UAAU,EACf,SAAS,EACT,QAAQ,CACT,CAAC;QACF,OAAO;YACL,QAAQ,EAAE,MAAM,qBAAqB,CAAC;gBACpC,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK,EAAE;oBACL,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI;oBACvC,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,IAAI;iBAChC;gBACD,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC;SACH,CAAC;IACJ,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\n\nimport { defineAction } from \"../../action.js\";\nimport { assertVersionedResourceAccess } from \"../registry.js\";\nimport { queryResourceVersions } from \"../store.js\";\nimport type { VersionedResourceContext } from \"../types.js\";\n\nconst schema = z.object({\n resourceType: z.string().min(1),\n resourceId: z.string().min(1),\n limit: z.number().int().positive().max(200).optional(),\n offset: z.number().int().nonnegative().optional(),\n});\n\nexport default defineAction({\n description: \"List version-history snapshots for a reusable resource.\",\n schema,\n http: { method: \"GET\" },\n readOnly: true,\n parallelSafe: true,\n run: async (args, ctx) => {\n const actionCtx = ctx as VersionedResourceContext | undefined;\n await assertVersionedResourceAccess(\n args.resourceType,\n args.resourceId,\n actionCtx,\n \"viewer\",\n );\n return {\n versions: await queryResourceVersions({\n resourceType: args.resourceType,\n resourceId: args.resourceId,\n scope: {\n userEmail: actionCtx?.userEmail ?? null,\n orgId: actionCtx?.orgId ?? null,\n },\n bypassScope: true,\n limit: args.limit,\n offset: args.offset,\n }),\n };\n },\n});\n"]}
@@ -0,0 +1,11 @@
1
+ declare const _default: import("../../action.js").ActionDefinition<{
2
+ id?: string;
3
+ resourceType?: string;
4
+ resourceId?: string;
5
+ versionNumber?: number;
6
+ }, {
7
+ version: import("../types.js").ResourceVersion;
8
+ result: unknown;
9
+ }>;
10
+ export default _default;
11
+ //# sourceMappingURL=restore-resource-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore-resource-version.d.ts","sourceRoot":"","sources":["../../../src/history/actions/restore-resource-version.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ import { defineAction } from "../../action.js";
3
+ import { assertVersionedResourceAccess, getVersionedResource, } from "../registry.js";
4
+ import { getResourceVersionById, getResourceVersionByNumber, } from "../store.js";
5
+ const schema = z
6
+ .object({
7
+ id: z.string().optional(),
8
+ resourceType: z.string().min(1).optional(),
9
+ resourceId: z.string().min(1).optional(),
10
+ versionNumber: z.number().int().positive().optional(),
11
+ })
12
+ .refine((value) => value.id ||
13
+ (value.resourceType && value.resourceId && value.versionNumber), {
14
+ message: "Provide either id or resourceType, resourceId, and versionNumber",
15
+ });
16
+ export default defineAction({
17
+ description: "Restore a resource from a reusable version-history snapshot.",
18
+ schema,
19
+ run: async (args, ctx) => {
20
+ const actionCtx = ctx;
21
+ const scope = {
22
+ userEmail: actionCtx?.userEmail ?? null,
23
+ orgId: actionCtx?.orgId ?? null,
24
+ };
25
+ const version = args.id
26
+ ? await getResourceVersionById(args.id, scope, { bypassScope: true })
27
+ : await getResourceVersionByNumber(args.resourceType, args.resourceId, args.versionNumber, scope, { bypassScope: true });
28
+ if (!version) {
29
+ throw new Error("Resource version not found");
30
+ }
31
+ const access = await assertVersionedResourceAccess(version.resourceType, version.resourceId, actionCtx, "editor");
32
+ const registration = getVersionedResource(version.resourceType);
33
+ if (!registration?.restoreSnapshot) {
34
+ throw new Error(`${version.resourceType} has no restoreSnapshot history handler registered`);
35
+ }
36
+ const result = await registration.restoreSnapshot({
37
+ resourceType: version.resourceType,
38
+ resourceId: version.resourceId,
39
+ ctx: actionCtx,
40
+ access,
41
+ version,
42
+ snapshot: version.snapshot,
43
+ });
44
+ return { version, result };
45
+ },
46
+ audit: {
47
+ target: (_args, result) => {
48
+ const restored = result;
49
+ return {
50
+ type: restored.version.resourceType,
51
+ id: restored.version.resourceId,
52
+ ownerEmail: restored.version.ownerEmail,
53
+ orgId: restored.version.orgId,
54
+ visibility: restored.version.visibility,
55
+ };
56
+ },
57
+ },
58
+ });
59
+ //# sourceMappingURL=restore-resource-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore-resource-version.js","sourceRoot":"","sources":["../../../src/history/actions/restore-resource-version.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\nimport { defineAction } from \"../../action.js\";\nimport {\n assertVersionedResourceAccess,\n getVersionedResource,\n} from \"../registry.js\";\nimport {\n getResourceVersionById,\n getResourceVersionByNumber,\n} from \"../store.js\";\nimport type { VersionedResourceContext } from \"../types.js\";\n\nconst schema = z\n .object({\n id: z.string().optional(),\n resourceType: z.string().min(1).optional(),\n resourceId: z.string().min(1).optional(),\n versionNumber: z.number().int().positive().optional(),\n })\n .refine(\n (value) =>\n value.id ||\n (value.resourceType && value.resourceId && value.versionNumber),\n {\n message:\n \"Provide either id or resourceType, resourceId, and versionNumber\",\n },\n );\n\nexport default defineAction({\n description: \"Restore a resource from a reusable version-history snapshot.\",\n schema,\n run: async (args, ctx) => {\n const actionCtx = ctx as VersionedResourceContext | undefined;\n const scope = {\n userEmail: actionCtx?.userEmail ?? null,\n orgId: actionCtx?.orgId ?? null,\n };\n const version = args.id\n ? await getResourceVersionById(args.id, scope, { bypassScope: true })\n : await getResourceVersionByNumber(\n args.resourceType!,\n args.resourceId!,\n args.versionNumber!,\n scope,\n { bypassScope: true },\n );\n if (!version) {\n throw new Error(\"Resource version not found\");\n }\n\n const access = await assertVersionedResourceAccess(\n version.resourceType,\n version.resourceId,\n actionCtx,\n \"editor\",\n );\n const registration = getVersionedResource(version.resourceType);\n if (!registration?.restoreSnapshot) {\n throw new Error(\n `${version.resourceType} has no restoreSnapshot history handler registered`,\n );\n }\n\n const result = await registration.restoreSnapshot({\n resourceType: version.resourceType,\n resourceId: version.resourceId,\n ctx: actionCtx,\n access,\n version,\n snapshot: version.snapshot,\n });\n return { version, result };\n },\n audit: {\n target: (_args, result) => {\n const restored = result as {\n version: {\n resourceType: string;\n resourceId: string;\n ownerEmail?: string | null;\n orgId?: string | null;\n visibility?: \"private\" | \"org\" | \"public\";\n };\n };\n return {\n type: restored.version.resourceType,\n id: restored.version.resourceId,\n ownerEmail: restored.version.ownerEmail,\n orgId: restored.version.orgId,\n visibility: restored.version.visibility,\n };\n },\n },\n});\n"]}
@@ -0,0 +1,4 @@
1
+ export type { HistoryActorKind, HistoryResourceRole, ResourceHistoryScope, ResourceVersion, VersionedResourceAccess, VersionedResourceContext, VersionedResourceRegistration, VersionedResourceRestoreContext, VersionedResourceSnapshotContext, } from "./types.js";
2
+ export { __resetVersionedResourcesForTests, assertVersionedResourceAccess, getVersionedResource, listVersionedResources, registerVersionedResource, resolveVersionedResourceAccess, } from "./registry.js";
3
+ export { __resetHistoryInitForTests, ensureResourceVersionsTable, getResourceVersionById, getResourceVersionByNumber, insertResourceVersion, queryResourceVersions, } from "./store.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/history/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,EAC7B,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { __resetVersionedResourcesForTests, assertVersionedResourceAccess, getVersionedResource, listVersionedResources, registerVersionedResource, resolveVersionedResourceAccess, } from "./registry.js";
2
+ export { __resetHistoryInitForTests, ensureResourceVersionsTable, getResourceVersionById, getResourceVersionByNumber, insertResourceVersion, queryResourceVersions, } from "./store.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/history/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,YAAY,CAAC","sourcesContent":["export type {\n HistoryActorKind,\n HistoryResourceRole,\n ResourceHistoryScope,\n ResourceVersion,\n VersionedResourceAccess,\n VersionedResourceContext,\n VersionedResourceRegistration,\n VersionedResourceRestoreContext,\n VersionedResourceSnapshotContext,\n} from \"./types.js\";\nexport {\n __resetVersionedResourcesForTests,\n assertVersionedResourceAccess,\n getVersionedResource,\n listVersionedResources,\n registerVersionedResource,\n resolveVersionedResourceAccess,\n} from \"./registry.js\";\nexport {\n __resetHistoryInitForTests,\n ensureResourceVersionsTable,\n getResourceVersionById,\n getResourceVersionByNumber,\n insertResourceVersion,\n queryResourceVersions,\n} from \"./store.js\";\n"]}
@@ -0,0 +1,10 @@
1
+ import { type Visibility } from "../sharing/schema.js";
2
+ import type { HistoryResourceRole, VersionedResourceAccess, VersionedResourceContext, VersionedResourceRegistration } from "./types.js";
3
+ export declare function registerVersionedResource(registration: VersionedResourceRegistration): void;
4
+ export declare function getVersionedResource(type: string): VersionedResourceRegistration | undefined;
5
+ export declare function listVersionedResources(): VersionedResourceRegistration[];
6
+ export declare function resolveVersionedResourceAccess(resourceType: string, resourceId: string, ctx?: VersionedResourceContext): Promise<VersionedResourceAccess | null>;
7
+ export declare function assertVersionedResourceAccess(resourceType: string, resourceId: string, ctx: VersionedResourceContext | undefined, minimumRole: HistoryResourceRole): Promise<VersionedResourceAccess>;
8
+ export declare function normalizeHistoryVisibility(visibility: Visibility | null | undefined): Visibility;
9
+ export declare function __resetVersionedResourcesForTests(): void;
10
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/history/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,EAC9B,MAAM,YAAY,CAAC;AAIpB,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,6BAA6B,GAC1C,IAAI,CAON;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX,6BAA6B,GAAG,SAAS,CAE3C;AAED,wBAAgB,sBAAsB,IAAI,6BAA6B,EAAE,CAExE;AAED,wBAAsB,8BAA8B,CAClD,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,wBAAwB,GAC7B,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CA8BzC;AAED,wBAAsB,6BAA6B,CACjD,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,wBAAwB,GAAG,SAAS,EACzC,WAAW,EAAE,mBAAmB,GAC/B,OAAO,CAAC,uBAAuB,CAAC,CAYlC;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GACxC,UAAU,CAIZ;AAED,wBAAgB,iCAAiC,IAAI,IAAI,CAExD"}
@@ -0,0 +1,61 @@
1
+ import { ForbiddenError, resolveAccess } from "../sharing/access.js";
2
+ import { getShareableResource } from "../sharing/registry.js";
3
+ import { roleSatisfies } from "../sharing/schema.js";
4
+ const registrations = new Map();
5
+ export function registerVersionedResource(registration) {
6
+ if (!registration.type.trim()) {
7
+ throw new Error("registerVersionedResource requires a non-empty resource type");
8
+ }
9
+ registrations.set(registration.type, registration);
10
+ }
11
+ export function getVersionedResource(type) {
12
+ return registrations.get(type);
13
+ }
14
+ export function listVersionedResources() {
15
+ return Array.from(registrations.values());
16
+ }
17
+ export async function resolveVersionedResourceAccess(resourceType, resourceId, ctx) {
18
+ const registration = getVersionedResource(resourceType);
19
+ if (registration?.resolveAccess) {
20
+ return registration.resolveAccess(resourceId, ctx);
21
+ }
22
+ if (getShareableResource(resourceType)) {
23
+ const access = await resolveAccess(resourceType, resourceId);
24
+ if (!access) {
25
+ return null;
26
+ }
27
+ return {
28
+ role: access.role,
29
+ ownerEmail: access.resource.ownerEmail ?? null,
30
+ orgId: access.resource.orgId ?? null,
31
+ visibility: access.resource.visibility,
32
+ resource: access.resource,
33
+ };
34
+ }
35
+ const userEmail = ctx?.userEmail ?? null;
36
+ if (!userEmail) {
37
+ return null;
38
+ }
39
+ return {
40
+ role: "owner",
41
+ ownerEmail: userEmail,
42
+ orgId: ctx?.orgId ?? null,
43
+ visibility: "private",
44
+ };
45
+ }
46
+ export async function assertVersionedResourceAccess(resourceType, resourceId, ctx, minimumRole) {
47
+ const access = await resolveVersionedResourceAccess(resourceType, resourceId, ctx);
48
+ if (!access || !roleSatisfies(access.role, minimumRole)) {
49
+ throw new ForbiddenError(`Not allowed to access ${resourceType}:${resourceId}`);
50
+ }
51
+ return access;
52
+ }
53
+ export function normalizeHistoryVisibility(visibility) {
54
+ return visibility === "org" || visibility === "public"
55
+ ? visibility
56
+ : "private";
57
+ }
58
+ export function __resetVersionedResourcesForTests() {
59
+ registrations.clear();
60
+ }
61
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/history/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAmB,MAAM,sBAAsB,CAAC;AAQtE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAyC,CAAC;AAEvE,MAAM,UAAU,yBAAyB,CACvC,YAA2C;IAE3C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IACD,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY;IAEZ,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,YAAoB,EACpB,UAAkB,EAClB,GAA8B;IAE9B,MAAM,YAAY,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACxD,IAAI,YAAY,EAAE,aAAa,EAAE,CAAC;QAChC,OAAO,YAAY,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAA2B;YACxC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI;YAC9C,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI;YACpC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU;YACtC,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,IAAI,CAAC;IACzC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,SAAS;QACrB,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,IAAI;QACzB,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,YAAoB,EACpB,UAAkB,EAClB,GAAyC,EACzC,WAAgC;IAEhC,MAAM,MAAM,GAAG,MAAM,8BAA8B,CACjD,YAAY,EACZ,UAAU,EACV,GAAG,CACJ,CAAC;IACF,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,cAAc,CACtB,yBAAyB,YAAY,IAAI,UAAU,EAAE,CACtD,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,UAAyC;IAEzC,OAAO,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,QAAQ;QACpD,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iCAAiC;IAC/C,aAAa,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC","sourcesContent":["import { ForbiddenError, resolveAccess } from \"../sharing/access.js\";\nimport { getShareableResource } from \"../sharing/registry.js\";\nimport { roleSatisfies, type Visibility } from \"../sharing/schema.js\";\nimport type {\n HistoryResourceRole,\n VersionedResourceAccess,\n VersionedResourceContext,\n VersionedResourceRegistration,\n} from \"./types.js\";\n\nconst registrations = new Map<string, VersionedResourceRegistration>();\n\nexport function registerVersionedResource(\n registration: VersionedResourceRegistration,\n): void {\n if (!registration.type.trim()) {\n throw new Error(\n \"registerVersionedResource requires a non-empty resource type\",\n );\n }\n registrations.set(registration.type, registration);\n}\n\nexport function getVersionedResource(\n type: string,\n): VersionedResourceRegistration | undefined {\n return registrations.get(type);\n}\n\nexport function listVersionedResources(): VersionedResourceRegistration[] {\n return Array.from(registrations.values());\n}\n\nexport async function resolveVersionedResourceAccess(\n resourceType: string,\n resourceId: string,\n ctx?: VersionedResourceContext,\n): Promise<VersionedResourceAccess | null> {\n const registration = getVersionedResource(resourceType);\n if (registration?.resolveAccess) {\n return registration.resolveAccess(resourceId, ctx);\n }\n\n if (getShareableResource(resourceType)) {\n const access = await resolveAccess(resourceType, resourceId);\n if (!access) {\n return null;\n }\n return {\n role: access.role as HistoryResourceRole,\n ownerEmail: access.resource.ownerEmail ?? null,\n orgId: access.resource.orgId ?? null,\n visibility: access.resource.visibility,\n resource: access.resource,\n };\n }\n\n const userEmail = ctx?.userEmail ?? null;\n if (!userEmail) {\n return null;\n }\n return {\n role: \"owner\",\n ownerEmail: userEmail,\n orgId: ctx?.orgId ?? null,\n visibility: \"private\",\n };\n}\n\nexport async function assertVersionedResourceAccess(\n resourceType: string,\n resourceId: string,\n ctx: VersionedResourceContext | undefined,\n minimumRole: HistoryResourceRole,\n): Promise<VersionedResourceAccess> {\n const access = await resolveVersionedResourceAccess(\n resourceType,\n resourceId,\n ctx,\n );\n if (!access || !roleSatisfies(access.role, minimumRole)) {\n throw new ForbiddenError(\n `Not allowed to access ${resourceType}:${resourceId}`,\n );\n }\n return access;\n}\n\nexport function normalizeHistoryVisibility(\n visibility: Visibility | null | undefined,\n): Visibility {\n return visibility === \"org\" || visibility === \"public\"\n ? visibility\n : \"private\";\n}\n\nexport function __resetVersionedResourcesForTests(): void {\n registrations.clear();\n}\n"]}
@@ -0,0 +1,34 @@
1
+ import type { Visibility } from "../sharing/schema.js";
2
+ import type { HistoryActorKind, ResourceHistoryScope, ResourceVersion } from "./types.js";
3
+ export interface InsertResourceVersionInput {
4
+ resourceType: string;
5
+ resourceId: string;
6
+ createdBy?: string | null;
7
+ actorKind?: HistoryActorKind;
8
+ ownerEmail?: string | null;
9
+ orgId?: string | null;
10
+ visibility?: Visibility | null;
11
+ title?: string | null;
12
+ summary?: string | null;
13
+ snapshot: unknown;
14
+ metadata?: Record<string, unknown> | null;
15
+ }
16
+ export interface QueryResourceVersionsInput {
17
+ resourceType: string;
18
+ resourceId: string;
19
+ scope: ResourceHistoryScope;
20
+ bypassScope?: boolean;
21
+ limit?: number;
22
+ offset?: number;
23
+ }
24
+ export declare function ensureResourceVersionsTable(): Promise<void>;
25
+ export declare function insertResourceVersion(input: InsertResourceVersionInput): Promise<ResourceVersion>;
26
+ export declare function queryResourceVersions(input: QueryResourceVersionsInput): Promise<ResourceVersion[]>;
27
+ export declare function getResourceVersionById(id: string, scope: ResourceHistoryScope, options?: {
28
+ bypassScope?: boolean;
29
+ }): Promise<ResourceVersion | null>;
30
+ export declare function getResourceVersionByNumber(resourceType: string, resourceId: string, versionNumber: number, scope: ResourceHistoryScope, options?: {
31
+ bypassScope?: boolean;
32
+ }): Promise<ResourceVersion | null>;
33
+ export declare function __resetHistoryInitForTests(): void;
34
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/history/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EAChB,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAkDjE;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,eAAe,CAAC,CAwE1B;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,eAAe,EAAE,CAAC,CAiB5B;AAED,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,oBAAoB,EAC3B,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAejC;AAED,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,oBAAoB,EAC3B,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAkBjC;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}