@agent-native/core 0.90.1 → 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 (714) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +26 -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/AgentPanel.tsx +1 -1
  36. package/corpus/core/src/client/command-navigation/index.ts +15 -0
  37. package/corpus/core/src/client/comments-review/index.ts +1 -0
  38. package/corpus/core/src/client/history/VersionHistoryPanel.tsx +145 -0
  39. package/corpus/core/src/client/history/index.ts +18 -0
  40. package/corpus/core/src/client/history/use-history.ts +86 -0
  41. package/corpus/core/src/client/index.ts +76 -9
  42. package/corpus/core/src/client/org/OrgSwitcher.tsx +6 -6
  43. package/corpus/core/src/client/org/RequireActiveOrg.tsx +2 -2
  44. package/corpus/core/src/client/org/TeamPage.tsx +3 -3
  45. package/corpus/core/src/client/org/hooks.ts +32 -0
  46. package/corpus/core/src/client/org/index.ts +30 -1
  47. package/corpus/core/src/client/org-team/index.ts +1 -0
  48. package/corpus/core/src/client/review/ReviewStatusBadge.tsx +39 -0
  49. package/corpus/core/src/client/review/ReviewThreadPanel.tsx +278 -0
  50. package/corpus/core/src/client/review/index.ts +25 -0
  51. package/corpus/core/src/client/review/use-review.ts +114 -0
  52. package/corpus/core/src/client/rich-markdown-editor/useCollabReconcile.ts +11 -6
  53. package/corpus/core/src/client/settings/index.ts +11 -1
  54. package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +94 -0
  55. package/corpus/core/src/client/setup-connections/ProviderReadinessBadge.tsx +73 -0
  56. package/corpus/core/src/client/setup-connections/SetupConnectionsPage.tsx +94 -0
  57. package/corpus/core/src/client/setup-connections/index.ts +46 -0
  58. package/corpus/core/src/client/sharing/ShareButton.tsx +20 -14
  59. package/corpus/core/src/client/sharing/ShareDialog.tsx +3 -3
  60. package/corpus/core/src/client/use-action.ts +39 -2
  61. package/corpus/core/src/client/use-db-sync.ts +44 -18
  62. package/corpus/core/src/command-navigation/actions.ts +100 -0
  63. package/corpus/core/src/command-navigation/index.ts +12 -0
  64. package/corpus/core/src/comments-review/index.ts +1 -0
  65. package/corpus/core/src/db/create-get-db.ts +32 -2
  66. package/corpus/core/src/file-upload/builder.ts +24 -3
  67. package/corpus/core/src/file-upload/types.ts +3 -1
  68. package/corpus/core/src/history/actions/create-resource-version.ts +89 -0
  69. package/corpus/core/src/history/actions/get-resource-version.ts +60 -0
  70. package/corpus/core/src/history/actions/list-resource-history.ts +53 -0
  71. package/corpus/core/src/history/actions/list-resource-versions.ts +43 -0
  72. package/corpus/core/src/history/actions/restore-resource-version.ts +96 -0
  73. package/corpus/core/src/history/index.ts +27 -0
  74. package/corpus/core/src/history/registry.ts +99 -0
  75. package/corpus/core/src/history/store.ts +348 -0
  76. package/corpus/core/src/history/types.ts +69 -0
  77. package/corpus/core/src/index.ts +10 -0
  78. package/corpus/core/src/navigation/index.ts +170 -0
  79. package/corpus/core/src/org/index.ts +8 -0
  80. package/corpus/core/src/org/permissions.ts +30 -0
  81. package/corpus/core/src/org-team/index.ts +1 -0
  82. package/corpus/core/src/private-blob/registry.ts +1 -0
  83. package/corpus/core/src/review/actions/consume-review-feedback.ts +38 -0
  84. package/corpus/core/src/review/actions/create-review-comment.ts +107 -0
  85. package/corpus/core/src/review/actions/delete-review-comment.ts +55 -0
  86. package/corpus/core/src/review/actions/get-review-feedback.ts +54 -0
  87. package/corpus/core/src/review/actions/list-review-comments.ts +53 -0
  88. package/corpus/core/src/review/actions/reply-review-comment.ts +107 -0
  89. package/corpus/core/src/review/actions/resolve-review-thread.ts +60 -0
  90. package/corpus/core/src/review/actions/set-review-status.ts +58 -0
  91. package/corpus/core/src/review/index.ts +36 -0
  92. package/corpus/core/src/review/mentions.ts +44 -0
  93. package/corpus/core/src/review/registry.ts +99 -0
  94. package/corpus/core/src/review/store.ts +687 -0
  95. package/corpus/core/src/review/types.ts +97 -0
  96. package/corpus/core/src/server/action-discovery.ts +54 -0
  97. package/corpus/core/src/server/agent-engine-api-key-route.ts +5 -0
  98. package/corpus/core/src/server/credential-provider.ts +108 -0
  99. package/corpus/core/src/server/framework-request-handler.ts +52 -4
  100. package/corpus/core/src/setup-connections/index.ts +89 -0
  101. package/corpus/core/src/setup-connections/onboarding.ts +47 -0
  102. package/corpus/core/src/transcription/builder-transcription.ts +9 -2
  103. package/corpus/core/src/vite/action-types-plugin.ts +52 -0
  104. package/corpus/templates/analytics/app/components/layout/Layout.tsx +2 -1
  105. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +2 -2
  106. package/corpus/templates/analytics/app/global.css +22 -10
  107. package/corpus/templates/analytics/app/i18n/zh-TW.ts +6 -1
  108. package/corpus/templates/analytics/app/i18n-data.ts +81 -13
  109. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +2 -2
  110. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +2 -2
  111. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +528 -108
  112. package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +466 -183
  113. package/corpus/templates/analytics/changelog/2026-07-07-session-replays-load-sooner-show-clearer-activity-timelines-.md +6 -0
  114. package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +5 -0
  115. package/corpus/templates/assets/.agents/skills/logo-composite/SKILL.md +34 -6
  116. package/corpus/templates/assets/AGENTS.md +23 -4
  117. package/corpus/templates/assets/actions/_generation-preset-settings.ts +48 -0
  118. package/corpus/templates/assets/actions/_helpers.ts +8 -1
  119. package/corpus/templates/assets/actions/_preset-skeleton-validation.ts +64 -0
  120. package/corpus/templates/assets/actions/create-generation-preset.ts +11 -3
  121. package/corpus/templates/assets/actions/generate-image-batch.ts +7 -2
  122. package/corpus/templates/assets/actions/generate-image.ts +342 -25
  123. package/corpus/templates/assets/actions/get-library.ts +4 -3
  124. package/corpus/templates/assets/actions/navigate.ts +2 -1
  125. package/corpus/templates/assets/actions/refresh-generation-run.ts +5 -1
  126. package/corpus/templates/assets/actions/update-asset.ts +1 -0
  127. package/corpus/templates/assets/actions/update-generation-preset.ts +8 -1
  128. package/corpus/templates/assets/actions/view-screen.ts +8 -1
  129. package/corpus/templates/assets/app/components/generation/GenerationResults.tsx +9 -1
  130. package/corpus/templates/assets/app/hooks/use-image-model-menu.ts +1 -0
  131. package/corpus/templates/assets/app/hooks/use-navigation-state.ts +11 -0
  132. package/corpus/templates/assets/app/i18n/zh-TW.ts +64 -0
  133. package/corpus/templates/assets/app/i18n-data.ts +650 -0
  134. package/corpus/templates/assets/app/routes/asset.$id.tsx +2 -1
  135. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +44 -33
  136. package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +1474 -0
  137. package/corpus/templates/assets/app/routes/library.tsx +43 -1
  138. package/corpus/templates/assets/server/lib/generation.ts +366 -44
  139. package/corpus/templates/assets/server/lib/image-processing.ts +252 -0
  140. package/corpus/templates/assets/server/lib/preset-skeleton.ts +137 -0
  141. package/corpus/templates/assets/shared/api.ts +47 -0
  142. package/corpus/templates/brain/app/routes/settings.tsx +2 -2
  143. package/corpus/templates/calendar/app/components/calendar/AttendeeAutocomplete.tsx +32 -6
  144. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +120 -40
  145. package/corpus/templates/calendar/app/hooks/use-people.ts +55 -0
  146. package/corpus/templates/calendar/changelog/2026-07-07-guest-suggestions-now-find-coworkers-from-your-google-worksp.md +6 -0
  147. package/corpus/templates/calendar/changelog/2026-07-07-zoom-stays-selected-after-connecting-it-from-a-draft-event.md +6 -0
  148. package/corpus/templates/clips/actions/create-recording.ts +5 -1
  149. package/corpus/templates/clips/actions/finalize-recording.ts +140 -1
  150. package/corpus/templates/clips/actions/import-loom-recording.ts +1 -0
  151. package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +1 -0
  152. package/corpus/templates/clips/actions/request-transcript.ts +31 -0
  153. package/corpus/templates/clips/actions/set-thumbnail.ts +2 -0
  154. package/corpus/templates/clips/app/components/library/library-layout.tsx +7 -2
  155. package/corpus/templates/clips/app/components/library/organization-switcher.tsx +2 -2
  156. package/corpus/templates/clips/app/components/library/sort-menu.tsx +1 -1
  157. package/corpus/templates/clips/app/components/player/scrubber-position.ts +9 -0
  158. package/corpus/templates/clips/app/components/player/scrubber.tsx +5 -2
  159. package/corpus/templates/clips/app/components/player/share-dialog.tsx +69 -41
  160. package/corpus/templates/clips/app/components/player/video-player.tsx +38 -1
  161. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +114 -33
  162. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +3 -3
  163. package/corpus/templates/clips/app/components/sharing/slack-share-hint.tsx +9 -19
  164. package/corpus/templates/clips/app/routes/_app.library._index.tsx +27 -1
  165. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +9 -3
  166. package/corpus/templates/clips/app/routes/record.tsx +178 -80
  167. package/corpus/templates/clips/changelog/2026-07-02-recordings-now-wait-for-storage-media-to-serve-before-finishing.md +6 -0
  168. package/corpus/templates/clips/changelog/2026-07-07-a-pending-app-update-no-longer-blocks-screen-recording-updat.md +6 -0
  169. package/corpus/templates/clips/changelog/2026-07-07-chrome-extension-recordings-keep-audio-after-refreshing-tab.md +6 -0
  170. package/corpus/templates/clips/changelog/2026-07-07-clip-playback-progress-now-starts-and-finishes-at-the-right-times.md +6 -0
  171. package/corpus/templates/clips/changelog/2026-07-07-sharing-public-clips-now-stays-focused-on-the-normal-link-wi.md +6 -0
  172. package/corpus/templates/clips/chrome-extension/src/background.ts +18 -0
  173. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +23 -8
  174. package/corpus/templates/clips/desktop/src/app.tsx +40 -3
  175. package/corpus/templates/clips/desktop/src/hooks/useMediaDevices.ts +19 -7
  176. package/corpus/templates/clips/desktop/src/lib/permissions.ts +2 -0
  177. package/corpus/templates/clips/desktop/src/lib/updater.ts +25 -2
  178. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +7 -0
  179. package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +1 -0
  180. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +23 -6
  181. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +28 -3
  182. package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +13 -6
  183. package/corpus/templates/clips/shared/finalize-recovery.ts +35 -3
  184. package/corpus/templates/content/AGENTS.md +52 -52
  185. package/corpus/templates/content/actions/_builder-cms-read-client.ts +188 -8
  186. package/corpus/templates/content/actions/_builder-docs-client.ts +41 -3
  187. package/corpus/templates/content/actions/_database-source-utils.ts +998 -160
  188. package/corpus/templates/content/actions/_database-utils.ts +44 -4
  189. package/corpus/templates/content/actions/_notion-action-utils.ts +6 -2
  190. package/corpus/templates/content/actions/add-content-database-source-field-property.ts +23 -1
  191. package/corpus/templates/content/actions/attach-content-database-source.ts +85 -12
  192. package/corpus/templates/content/actions/change-content-database-source-role.ts +9 -1
  193. package/corpus/templates/content/actions/delete-content-database.ts +1 -0
  194. package/corpus/templates/content/actions/delete-document.ts +337 -52
  195. package/corpus/templates/content/actions/get-document.ts +11 -2
  196. package/corpus/templates/content/actions/list-content-databases.ts +57 -9
  197. package/corpus/templates/content/actions/prepare-builder-source-review.ts +23 -6
  198. package/corpus/templates/content/actions/refresh-content-database-source.ts +26 -3
  199. package/corpus/templates/content/actions/restore-content-database.ts +1 -0
  200. package/corpus/templates/content/actions/update-document.ts +43 -0
  201. package/corpus/templates/content/app/components/editor/BuilderBodySyncingNotice.tsx +21 -0
  202. package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +0 -1
  203. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +70 -28
  204. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +69 -17
  205. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +4 -4
  206. package/corpus/templates/content/app/components/editor/body-hydration.ts +112 -0
  207. package/corpus/templates/content/app/components/editor/builder-body-hydration-pump.ts +52 -0
  208. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +9076 -2876
  209. package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +41 -1
  210. package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +36 -11
  211. package/corpus/templates/content/app/components/editor/previewDocumentSaveController.ts +21 -1
  212. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +11 -1
  213. package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +11 -8
  214. package/corpus/templates/content/app/global.css +41 -0
  215. package/corpus/templates/content/app/hooks/use-content-database.ts +346 -42
  216. package/corpus/templates/content/app/hooks/use-db-sync.ts +9 -0
  217. package/corpus/templates/content/app/hooks/use-documents.ts +47 -0
  218. package/corpus/templates/content/app/hooks/use-notion.ts +12 -10
  219. package/corpus/templates/content/app/i18n/zh-TW.ts +35 -0
  220. package/corpus/templates/content/app/i18n-data.ts +355 -0
  221. package/corpus/templates/content/app/root.tsx +22 -0
  222. package/corpus/templates/content/changelog/2026-07-01-builder-database-sources-keep-loading-rows-in-the-background.md +6 -0
  223. package/corpus/templates/content/changelog/2026-07-01-builder-source-attach-starts-with-usable-rows.md +6 -0
  224. package/corpus/templates/content/changelog/2026-07-01-builder-source-attachment-now-stays-connected-after-large.md +6 -0
  225. package/corpus/templates/content/changelog/2026-07-01-builder-source-refreshes-now-show-progress-for-large-docs-blog.md +6 -0
  226. package/corpus/templates/content/changelog/2026-07-01-database-pages-now-delete-to-trash-without-route-errors.md +6 -0
  227. package/corpus/templates/content/changelog/2026-07-02-builder-source-refreshes-recover-from-stalled-background-row.md +6 -0
  228. package/corpus/templates/content/changelog/2026-07-02-builder-sourced-rows-open-with-sync-protection.md +6 -0
  229. package/corpus/templates/content/changelog/2026-07-02-database-rows-and-pages-open-faster-from-recently-loaded-dat.md +6 -0
  230. package/corpus/templates/content/changelog/2026-07-02-preview-panels-close-reliably-narrow-sidebar-row-actions-sta.md +6 -0
  231. package/corpus/templates/content/changelog/2026-07-06-builder-sync-progress-no-longer-shows-continue.md +6 -0
  232. package/corpus/templates/content/changelog/2026-07-07-permanently-deleting-trashed-databases-now-finishes-reliably.md +6 -0
  233. package/corpus/templates/content/shared/api.ts +13 -0
  234. package/corpus/templates/content/shared/builder-mdx.ts +16 -3
  235. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +23 -13
  236. package/corpus/templates/design/.agents/skills/responsive-breakpoints/SKILL.md +98 -0
  237. package/corpus/templates/design/.agents/skills/shader-fills/SKILL.md +162 -0
  238. package/corpus/templates/design/AGENTS.md +9 -2
  239. package/corpus/templates/design/actions/add-breakpoint.ts +6 -3
  240. package/corpus/templates/design/actions/apply-a11y-fix.ts +57 -37
  241. package/corpus/templates/design/actions/apply-component-prop-edit.ts +41 -20
  242. package/corpus/templates/design/actions/apply-motion-edit.ts +251 -38
  243. package/corpus/templates/design/actions/apply-shader-fill.ts +90 -66
  244. package/corpus/templates/design/actions/apply-visual-edit.ts +282 -55
  245. package/corpus/templates/design/actions/create-component.ts +29 -60
  246. package/corpus/templates/design/actions/create-file.ts +9 -2
  247. package/corpus/templates/design/actions/duplicate-design.ts +31 -2
  248. package/corpus/templates/design/actions/edit-design.ts +36 -38
  249. package/corpus/templates/design/actions/generate-design-title.ts +87 -0
  250. package/corpus/templates/design/actions/generate-design.ts +53 -18
  251. package/corpus/templates/design/actions/generate-screens.ts +108 -4
  252. package/corpus/templates/design/actions/get-motion-timeline.ts +35 -7
  253. package/corpus/templates/design/actions/insert-asset.ts +34 -29
  254. package/corpus/templates/design/actions/insert-design-native-asset.ts +129 -32
  255. package/corpus/templates/design/actions/insert-figma-library-asset.ts +35 -30
  256. package/corpus/templates/design/actions/present-design-variants.ts +7 -2
  257. package/corpus/templates/design/actions/remove-motion-timeline.ts +31 -36
  258. package/corpus/templates/design/actions/update-file.ts +190 -75
  259. package/corpus/templates/design/app/components/design/BreakpointBar.tsx +403 -0
  260. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +469 -222
  261. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +708 -53
  262. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +83 -3
  263. package/corpus/templates/design/app/components/design/EditPanel.tsx +1091 -6948
  264. package/corpus/templates/design/app/components/design/LayersPanel.tsx +419 -85
  265. package/corpus/templates/design/app/components/design/MotionDock.tsx +1124 -103
  266. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +2610 -1398
  267. package/corpus/templates/design/app/components/design/ReadOnlyDesignBanner.tsx +22 -0
  268. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +2182 -235
  269. package/corpus/templates/design/app/components/design/bridge/motion-preview.bridge.ts +187 -11
  270. package/corpus/templates/design/app/components/design/bridge/shader-fill-preview.bridge.ts +376 -1
  271. package/corpus/templates/design/app/components/design/bridge/shader-runtime.bridge.ts +746 -0
  272. package/corpus/templates/design/app/components/design/canvas-primitive-style.ts +17 -0
  273. package/corpus/templates/design/app/components/design/code-workbench/SideBar.tsx +1 -1
  274. package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +1 -3
  275. package/corpus/templates/design/app/components/design/code-workbench/quickinput/QuickInput.tsx +1 -1
  276. package/corpus/templates/design/app/components/design/edit-panel/appearance-properties.tsx +518 -0
  277. package/corpus/templates/design/app/components/design/edit-panel/code-inspect-helpers.tsx +562 -0
  278. package/corpus/templates/design/app/components/design/edit-panel/component-section.tsx +763 -0
  279. package/corpus/templates/design/app/components/design/edit-panel/document-colors.ts +94 -0
  280. package/corpus/templates/design/app/components/design/edit-panel/effects-properties.tsx +780 -0
  281. package/corpus/templates/design/app/components/design/edit-panel/element-classification.ts +446 -0
  282. package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +79 -0
  283. package/corpus/templates/design/app/components/design/edit-panel/field-primitives.tsx +315 -0
  284. package/corpus/templates/design/app/components/design/edit-panel/fill-gradient-helpers.ts +344 -0
  285. package/corpus/templates/design/app/components/design/edit-panel/fill-properties.tsx +594 -0
  286. package/corpus/templates/design/app/components/design/edit-panel/frame-presets-panel.tsx +119 -0
  287. package/corpus/templates/design/app/components/design/edit-panel/inspector-controls.tsx +248 -0
  288. package/corpus/templates/design/app/components/design/edit-panel/interaction-state-helpers.ts +45 -0
  289. package/corpus/templates/design/app/components/design/edit-panel/layout-properties.tsx +693 -0
  290. package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +724 -0
  291. package/corpus/templates/design/app/components/design/edit-panel/position-helpers.ts +207 -0
  292. package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +628 -0
  293. package/corpus/templates/design/app/components/design/edit-panel/selection-helpers.ts +91 -0
  294. package/corpus/templates/design/app/components/design/edit-panel/stroke-properties.tsx +649 -0
  295. package/corpus/templates/design/app/components/design/edit-panel/style-change-types.ts +118 -0
  296. package/corpus/templates/design/app/components/design/edit-panel/style-options.ts +88 -0
  297. package/corpus/templates/design/app/components/design/edit-panel/transform-helpers.ts +100 -0
  298. package/corpus/templates/design/app/components/design/edit-panel/typography-helpers.ts +117 -0
  299. package/corpus/templates/design/app/components/design/edit-panel/typography-properties.tsx +501 -0
  300. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +91 -40
  301. package/corpus/templates/design/app/components/design/inspector/BreakpointOverrideIndicator.tsx +82 -0
  302. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +189 -87
  303. package/corpus/templates/design/app/components/design/inspector/GlslShaderPanel.tsx +1097 -0
  304. package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +44 -0
  305. package/corpus/templates/design/app/components/design/inspector/InteractionStatePanel.tsx +258 -0
  306. package/corpus/templates/design/app/components/design/inspector/MotionKeyframeDiamond.tsx +144 -0
  307. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +99 -9
  308. package/corpus/templates/design/app/components/design/inspector/frame-size-presets.ts +116 -0
  309. package/corpus/templates/design/app/components/design/inspector/index.ts +26 -0
  310. package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +29 -0
  311. package/corpus/templates/design/app/components/design/multi-screen/alt-hover-measurement.ts +171 -0
  312. package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +220 -0
  313. package/corpus/templates/design/app/components/design/multi-screen/chrome-transitions.ts +35 -0
  314. package/corpus/templates/design/app/components/design/multi-screen/cross-screen-drop.ts +134 -0
  315. package/corpus/templates/design/app/components/design/multi-screen/culling.ts +185 -0
  316. package/corpus/templates/design/app/components/design/multi-screen/gradient-overlay-geometry.ts +120 -0
  317. package/corpus/templates/design/app/components/design/multi-screen/types.ts +892 -0
  318. package/corpus/templates/design/app/components/design/multi-screen/vector-edit-geometry.ts +21 -0
  319. package/corpus/templates/design/app/components/design/types.ts +15 -0
  320. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +109 -5
  321. package/corpus/templates/design/app/global.css +8 -8
  322. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +259 -2
  323. package/corpus/templates/design/app/i18n/zh-TW.ts +163 -9
  324. package/corpus/templates/design/app/i18n-breakpoints.ts +205 -0
  325. package/corpus/templates/design/app/i18n-data.ts +1664 -152
  326. package/corpus/templates/design/app/i18n-motion.ts +563 -0
  327. package/corpus/templates/design/app/lib/design-import.ts +73 -0
  328. package/corpus/templates/design/app/pages/Index.tsx +41 -22
  329. package/corpus/templates/design/changelog/2026-06-29-design-inspector-controls-now-match-figmas-softer-dark-chrome.md +1 -1
  330. package/corpus/templates/design/changelog/2026-06-30-design-now-has-a-figma-style-left-rail-for-file-agent-assets.md +1 -1
  331. package/corpus/templates/design/changelog/2026-06-30-design-tools-now-use-a-quieter-figma-style-list-layout.md +1 -1
  332. package/corpus/templates/design/changelog/2026-06-30-multi-select-outlines-now-stay-consistent-across-all-screens.md +1 -1
  333. package/corpus/templates/design/changelog/2026-07-03-canvas-interactions-now-match-figma-rotation-aware-resizing-.md +1 -1
  334. package/corpus/templates/design/changelog/2026-07-03-layers-panel-matches-figma-top-layer-on-top-drag-with-auto-s.md +1 -1
  335. package/corpus/templates/design/changelog/2026-07-05-designs-get-ai-generated-names-from-your-prompt.md +6 -0
  336. package/corpus/templates/design/changelog/2026-07-05-local-code-screens-keep-their-connection-when-duplicated-and.md +6 -0
  337. package/corpus/templates/design/changelog/2026-07-05-press-a-to-draw-screens-on-the-canvas-inside-a-screen-it-dr.md +6 -0
  338. package/corpus/templates/design/changelog/2026-07-06-3d-rotation-and-perspective-controls-on-every-element.md +6 -0
  339. package/corpus/templates/design/changelog/2026-07-06-ai-generated-and-duplicated-screens-now-get-their-editor-sel.md +6 -0
  340. package/corpus/templates/design/changelog/2026-07-06-applying-shaders-and-fills-in-quick-succession-can-no-longer.md +6 -0
  341. package/corpus/templates/design/changelog/2026-07-06-breakpoint-frames-in-the-overview-now-support-click-to-selec.md +6 -0
  342. package/corpus/templates/design/changelog/2026-07-06-breakpoint-segments-in-the-inspector-now-show-a-device-icon-.md +6 -0
  343. package/corpus/templates/design/changelog/2026-07-06-breakpoint-targeting-now-lives-in-one-compact-control-in-the.md +6 -0
  344. package/corpus/templates/design/changelog/2026-07-06-canvas-edits-can-no-longer-be-overwritten-by-stale-collabora.md +6 -0
  345. package/corpus/templates/design/changelog/2026-07-06-canvas-edits-inside-screens-save-reliably-again.md +6 -0
  346. package/corpus/templates/design/changelog/2026-07-06-cleaner-inspector-removed-the-ask-ai-box-from-the-design-tab.md +6 -0
  347. package/corpus/templates/design/changelog/2026-07-06-clicking-empty-canvas-space-now-deselects-an-element-inside-.md +6 -0
  348. package/corpus/templates/design/changelog/2026-07-06-dragging-an-element-onto-a-rectangle-now-nests-it-inside-wit.md +6 -0
  349. package/corpus/templates/design/changelog/2026-07-06-dragging-screens-and-objects-on-the-canvas-is-now-much-smoot.md +6 -0
  350. package/corpus/templates/design/changelog/2026-07-06-drawing-a-shape-or-text-on-the-canvas-no-longer-flashes-away.md +6 -0
  351. package/corpus/templates/design/changelog/2026-07-06-dropping-an-element-between-two-others-inside-a-screen-now-s.md +6 -0
  352. package/corpus/templates/design/changelog/2026-07-06-duplicating-a-screen-now-places-the-copy-exactly-where-you-d.md +6 -0
  353. package/corpus/templates/design/changelog/2026-07-06-edit-gradients-directly-on-elements-inside-screens-scale-str.md +6 -0
  354. package/corpus/templates/design/changelog/2026-07-06-edits-from-collaborators-and-the-agent-now-update-the-canvas.md +6 -0
  355. package/corpus/templates/design/changelog/2026-07-06-fixed-a-bug-where-most-style-position-and-text-edits-briefly.md +6 -0
  356. package/corpus/templates/design/changelog/2026-07-06-fixed-a-confusing-raw-error-message-when-a-file-upload-fails.md +6 -0
  357. package/corpus/templates/design/changelog/2026-07-06-fixed-a-rare-case-where-an-edit-could-be-silently-overwritte.md +6 -0
  358. package/corpus/templates/design/changelog/2026-07-06-fixed-inserted-assets-sometimes-disappearing-reappearing-or-.md +6 -0
  359. package/corpus/templates/design/changelog/2026-07-06-fixed-inspector-value-scrubbing-producing-erratic-numbers-an.md +6 -0
  360. package/corpus/templates/design/changelog/2026-07-06-fixed-padding-gap-and-min-max-size-scrubbing-not-updating-th.md +6 -0
  361. package/corpus/templates/design/changelog/2026-07-06-fixed-text-stroke-color-turning-black-and-glyphs-disappearin.md +6 -0
  362. package/corpus/templates/design/changelog/2026-07-06-fixed-the-collapsed-effects-and-stroke-inspector-sections-sh.md +6 -0
  363. package/corpus/templates/design/changelog/2026-07-06-fixed-the-new-design-dialog-closing-unexpectedly-when-using-.md +6 -0
  364. package/corpus/templates/design/changelog/2026-07-06-fixed-the-typography-section-missing-when-selecting-text-nes.md +6 -0
  365. package/corpus/templates/design/changelog/2026-07-06-full-view-no-longer-flashes-back-to-the-overview-on-entry-no.md +6 -0
  366. package/corpus/templates/design/changelog/2026-07-06-keyframe-animation-timeline-per-property-keyframes-easing-cu.md +6 -0
  367. package/corpus/templates/design/changelog/2026-07-06-moving-restyling-and-scrubbing-values-on-elements-in-ai-gene.md +6 -0
  368. package/corpus/templates/design/changelog/2026-07-06-padding-and-corner-radius-value-scrubbing-now-snaps-to-whole.md +6 -0
  369. package/corpus/templates/design/changelog/2026-07-06-padding-handles-now-only-resize-on-the-handle-line-itself-sh.md +6 -0
  370. package/corpus/templates/design/changelog/2026-07-06-preview-and-edit-hover-focus-and-pressed-states-with-real-cs.md +6 -0
  371. package/corpus/templates/design/changelog/2026-07-06-promoting-an-element-to-a-component-now-works-correctly-for-.md +6 -0
  372. package/corpus/templates/design/changelog/2026-07-06-reduced-url-history-churn-and-selection-overlay-flicker-whil.md +6 -0
  373. package/corpus/templates/design/changelog/2026-07-06-removed-the-decorative-dot-before-screen-names-in-the-overvi.md +6 -0
  374. package/corpus/templates/design/changelog/2026-07-06-responsive-breakpoints-edit-at-any-width-with-cascading-over.md +6 -0
  375. package/corpus/templates/design/changelog/2026-07-06-screen-labels-no-longer-turn-blue-when-you-hover-inside-the-.md +6 -0
  376. package/corpus/templates/design/changelog/2026-07-06-scrolling-a-screen-with-an-element-selected-stays-smooth-on-.md +6 -0
  377. package/corpus/templates/design/changelog/2026-07-06-selecting-multiple-elements-and-dragging-now-moves-the-whole.md +6 -0
  378. package/corpus/templates/design/changelog/2026-07-06-selection-borders-handles-and-value-readouts-now-stay-the-sa.md +6 -0
  379. package/corpus/templates/design/changelog/2026-07-06-selection-handles-and-editing-chrome-now-stay-a-constant-siz.md +6 -0
  380. package/corpus/templates/design/changelog/2026-07-06-shader-fills-and-effects-ai-authored-or-preset-glsl-shaders-.md +6 -0
  381. package/corpus/templates/design/changelog/2026-07-06-text-drawn-on-the-canvas-now-defaults-to-white-and-inter-in-.md +6 -0
  382. package/corpus/templates/design/changelog/2026-07-06-text-dropped-into-a-shape-now-stays-readable-instead-of-disa.md +6 -0
  383. package/corpus/templates/design/changelog/2026-07-06-the-add-tweak-controls-prompt-no-longer-jumps-to-the-corner-.md +6 -0
  384. package/corpus/templates/design/changelog/2026-07-06-the-padding-value-readout-now-stays-visible-while-you-hover-.md +6 -0
  385. package/corpus/templates/design/changelog/2026-07-06-the-selected-element-attachment-now-clears-from-the-chat-com.md +6 -0
  386. package/corpus/templates/design/changelog/2026-07-06-the-zoom-menu-is-more-compact-with-tight-rows-and-right-alig.md +6 -0
  387. package/corpus/templates/design/changelog/2026-07-06-undo-and-redo-no-longer-flash-the-screen-changes-now-apply-i.md +6 -0
  388. package/corpus/templates/design/changelog/2026-07-06-zoom-presets-like-zoom-to-50-now-stay-on-the-focused-screen-.md +6 -0
  389. package/corpus/templates/design/server/lib/import-design-files.ts +11 -2
  390. package/corpus/templates/design/server/source-workspace.ts +139 -59
  391. package/corpus/templates/design/shared/board-file.ts +11 -2
  392. package/corpus/templates/design/shared/breakpoint-media.ts +543 -0
  393. package/corpus/templates/design/shared/canvas-math.ts +354 -35
  394. package/corpus/templates/design/shared/code-layer.ts +277 -8
  395. package/corpus/templates/design/shared/design-state.ts +11 -4
  396. package/corpus/templates/design/shared/interaction-states.ts +548 -0
  397. package/corpus/templates/design/shared/motion-compiler.ts +186 -23
  398. package/corpus/templates/design/shared/motion-easing.ts +294 -0
  399. package/corpus/templates/design/shared/motion-timeline.ts +400 -34
  400. package/corpus/templates/design/shared/prompt-title.ts +95 -0
  401. package/corpus/templates/design/shared/responsive-classes.ts +448 -10
  402. package/corpus/templates/design/shared/screen-annotation.ts +46 -0
  403. package/corpus/templates/design/shared/shader-fills.ts +1009 -0
  404. package/corpus/templates/design/shared/shader-presets.ts +852 -4
  405. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +15 -2
  406. package/corpus/templates/slides/app/components/editor/ImportButton.tsx +10 -1
  407. package/corpus/templates/slides/app/lib/upload-response.ts +71 -0
  408. package/corpus/templates/slides/app/pages/DeckEditor.tsx +2 -2
  409. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  410. package/dist/agent/engine/ai-sdk-engine.js +15 -1
  411. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  412. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  413. package/dist/agent/engine/anthropic-engine.js +20 -1
  414. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  415. package/dist/agent/engine/registry.d.ts.map +1 -1
  416. package/dist/agent/engine/registry.js +22 -14
  417. package/dist/agent/engine/registry.js.map +1 -1
  418. package/dist/agent/production-agent.d.ts.map +1 -1
  419. package/dist/agent/production-agent.js +27 -7
  420. package/dist/agent/production-agent.js.map +1 -1
  421. package/dist/client/AgentPanel.js +1 -1
  422. package/dist/client/AgentPanel.js.map +1 -1
  423. package/dist/client/command-navigation/index.d.ts +4 -0
  424. package/dist/client/command-navigation/index.d.ts.map +1 -0
  425. package/dist/client/command-navigation/index.js +4 -0
  426. package/dist/client/command-navigation/index.js.map +1 -0
  427. package/dist/client/comments-review/index.d.ts +2 -0
  428. package/dist/client/comments-review/index.d.ts.map +1 -0
  429. package/dist/client/comments-review/index.js +2 -0
  430. package/dist/client/comments-review/index.js.map +1 -0
  431. package/dist/client/history/VersionHistoryPanel.d.ts +18 -0
  432. package/dist/client/history/VersionHistoryPanel.d.ts.map +1 -0
  433. package/dist/client/history/VersionHistoryPanel.js +24 -0
  434. package/dist/client/history/VersionHistoryPanel.js.map +1 -0
  435. package/dist/client/history/index.d.ts +3 -0
  436. package/dist/client/history/index.d.ts.map +1 -0
  437. package/dist/client/history/index.js +3 -0
  438. package/dist/client/history/index.js.map +1 -0
  439. package/dist/client/history/use-history.d.ts +46 -0
  440. package/dist/client/history/use-history.d.ts.map +1 -0
  441. package/dist/client/history/use-history.js +18 -0
  442. package/dist/client/history/use-history.js.map +1 -0
  443. package/dist/client/index.d.ts +6 -4
  444. package/dist/client/index.d.ts.map +1 -1
  445. package/dist/client/index.js +6 -4
  446. package/dist/client/index.js.map +1 -1
  447. package/dist/client/org/OrgSwitcher.js +5 -5
  448. package/dist/client/org/OrgSwitcher.js.map +1 -1
  449. package/dist/client/org/RequireActiveOrg.js +2 -2
  450. package/dist/client/org/RequireActiveOrg.js.map +1 -1
  451. package/dist/client/org/TeamPage.js +3 -3
  452. package/dist/client/org/TeamPage.js.map +1 -1
  453. package/dist/client/org/hooks.d.ts +12 -1
  454. package/dist/client/org/hooks.d.ts.map +1 -1
  455. package/dist/client/org/hooks.js +15 -0
  456. package/dist/client/org/hooks.js.map +1 -1
  457. package/dist/client/org/index.d.ts +4 -2
  458. package/dist/client/org/index.d.ts.map +1 -1
  459. package/dist/client/org/index.js +3 -1
  460. package/dist/client/org/index.js.map +1 -1
  461. package/dist/client/org-team/index.d.ts +2 -0
  462. package/dist/client/org-team/index.d.ts.map +1 -0
  463. package/dist/client/org-team/index.js +2 -0
  464. package/dist/client/org-team/index.js.map +1 -0
  465. package/dist/client/review/ReviewStatusBadge.d.ts +7 -0
  466. package/dist/client/review/ReviewStatusBadge.d.ts.map +1 -0
  467. package/dist/client/review/ReviewStatusBadge.js +19 -0
  468. package/dist/client/review/ReviewStatusBadge.js.map +1 -0
  469. package/dist/client/review/ReviewThreadPanel.d.ts +20 -0
  470. package/dist/client/review/ReviewThreadPanel.d.ts.map +1 -0
  471. package/dist/client/review/ReviewThreadPanel.js +84 -0
  472. package/dist/client/review/ReviewThreadPanel.js.map +1 -0
  473. package/dist/client/review/index.d.ts +4 -0
  474. package/dist/client/review/index.d.ts.map +1 -0
  475. package/dist/client/review/index.js +4 -0
  476. package/dist/client/review/index.js.map +1 -0
  477. package/dist/client/review/use-review.d.ts +68 -0
  478. package/dist/client/review/use-review.d.ts.map +1 -0
  479. package/dist/client/review/use-review.js +22 -0
  480. package/dist/client/review/use-review.js.map +1 -0
  481. package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +1 -1
  482. package/dist/client/rich-markdown-editor/useCollabReconcile.js +11 -6
  483. package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +1 -1
  484. package/dist/client/settings/index.d.ts +1 -1
  485. package/dist/client/settings/index.d.ts.map +1 -1
  486. package/dist/client/settings/index.js +1 -1
  487. package/dist/client/settings/index.js.map +1 -1
  488. package/dist/client/setup-connections/BuilderConnectCard.d.ts +9 -0
  489. package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -0
  490. package/dist/client/setup-connections/BuilderConnectCard.js +25 -0
  491. package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -0
  492. package/dist/client/setup-connections/ProviderReadinessBadge.d.ts +8 -0
  493. package/dist/client/setup-connections/ProviderReadinessBadge.d.ts.map +1 -0
  494. package/dist/client/setup-connections/ProviderReadinessBadge.js +32 -0
  495. package/dist/client/setup-connections/ProviderReadinessBadge.js.map +1 -0
  496. package/dist/client/setup-connections/SetupConnectionsPage.d.ts +17 -0
  497. package/dist/client/setup-connections/SetupConnectionsPage.d.ts.map +1 -0
  498. package/dist/client/setup-connections/SetupConnectionsPage.js +10 -0
  499. package/dist/client/setup-connections/SetupConnectionsPage.js.map +1 -0
  500. package/dist/client/setup-connections/index.d.ts +7 -0
  501. package/dist/client/setup-connections/index.d.ts.map +1 -0
  502. package/dist/client/setup-connections/index.js +7 -0
  503. package/dist/client/setup-connections/index.js.map +1 -0
  504. package/dist/client/sharing/ShareButton.d.ts +4 -4
  505. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  506. package/dist/client/sharing/ShareButton.js +13 -7
  507. package/dist/client/sharing/ShareButton.js.map +1 -1
  508. package/dist/client/sharing/ShareDialog.js +3 -3
  509. package/dist/client/sharing/ShareDialog.js.map +1 -1
  510. package/dist/client/use-action.d.ts +3 -0
  511. package/dist/client/use-action.d.ts.map +1 -1
  512. package/dist/client/use-action.js +34 -3
  513. package/dist/client/use-action.js.map +1 -1
  514. package/dist/client/use-db-sync.d.ts +4 -0
  515. package/dist/client/use-db-sync.d.ts.map +1 -1
  516. package/dist/client/use-db-sync.js +37 -18
  517. package/dist/client/use-db-sync.js.map +1 -1
  518. package/dist/collab/routes.d.ts +1 -1
  519. package/dist/command-navigation/actions.d.ts +25 -0
  520. package/dist/command-navigation/actions.d.ts.map +1 -0
  521. package/dist/command-navigation/actions.js +64 -0
  522. package/dist/command-navigation/actions.js.map +1 -0
  523. package/dist/command-navigation/index.d.ts +4 -0
  524. package/dist/command-navigation/index.d.ts.map +1 -0
  525. package/dist/command-navigation/index.js +4 -0
  526. package/dist/command-navigation/index.js.map +1 -0
  527. package/dist/comments-review/index.d.ts +2 -0
  528. package/dist/comments-review/index.d.ts.map +1 -0
  529. package/dist/comments-review/index.js +2 -0
  530. package/dist/comments-review/index.js.map +1 -0
  531. package/dist/db/create-get-db.d.ts +25 -0
  532. package/dist/db/create-get-db.d.ts.map +1 -1
  533. package/dist/db/create-get-db.js +25 -2
  534. package/dist/db/create-get-db.js.map +1 -1
  535. package/dist/file-upload/builder.d.ts.map +1 -1
  536. package/dist/file-upload/builder.js +18 -2
  537. package/dist/file-upload/builder.js.map +1 -1
  538. package/dist/file-upload/types.d.ts +3 -0
  539. package/dist/file-upload/types.d.ts.map +1 -1
  540. package/dist/file-upload/types.js.map +1 -1
  541. package/dist/history/actions/create-resource-version.d.ts +10 -0
  542. package/dist/history/actions/create-resource-version.d.ts.map +1 -0
  543. package/dist/history/actions/create-resource-version.js +65 -0
  544. package/dist/history/actions/create-resource-version.js.map +1 -0
  545. package/dist/history/actions/get-resource-version.d.ts +10 -0
  546. package/dist/history/actions/get-resource-version.d.ts.map +1 -0
  547. package/dist/history/actions/get-resource-version.js +38 -0
  548. package/dist/history/actions/get-resource-version.js.map +1 -0
  549. package/dist/history/actions/list-resource-history.d.ts +10 -0
  550. package/dist/history/actions/list-resource-history.d.ts.map +1 -0
  551. package/dist/history/actions/list-resource-history.js +45 -0
  552. package/dist/history/actions/list-resource-history.js.map +1 -0
  553. package/dist/history/actions/list-resource-versions.d.ts +10 -0
  554. package/dist/history/actions/list-resource-versions.d.ts.map +1 -0
  555. package/dist/history/actions/list-resource-versions.js +35 -0
  556. package/dist/history/actions/list-resource-versions.js.map +1 -0
  557. package/dist/history/actions/restore-resource-version.d.ts +11 -0
  558. package/dist/history/actions/restore-resource-version.d.ts.map +1 -0
  559. package/dist/history/actions/restore-resource-version.js +59 -0
  560. package/dist/history/actions/restore-resource-version.js.map +1 -0
  561. package/dist/history/index.d.ts +4 -0
  562. package/dist/history/index.d.ts.map +1 -0
  563. package/dist/history/index.js +3 -0
  564. package/dist/history/index.js.map +1 -0
  565. package/dist/history/registry.d.ts +10 -0
  566. package/dist/history/registry.d.ts.map +1 -0
  567. package/dist/history/registry.js +61 -0
  568. package/dist/history/registry.js.map +1 -0
  569. package/dist/history/store.d.ts +34 -0
  570. package/dist/history/store.d.ts.map +1 -0
  571. package/dist/history/store.js +265 -0
  572. package/dist/history/store.js.map +1 -0
  573. package/dist/history/types.d.ts +55 -0
  574. package/dist/history/types.d.ts.map +1 -0
  575. package/dist/history/types.js +2 -0
  576. package/dist/history/types.js.map +1 -0
  577. package/dist/index.d.ts +6 -0
  578. package/dist/index.d.ts.map +1 -1
  579. package/dist/index.js +6 -0
  580. package/dist/index.js.map +1 -1
  581. package/dist/navigation/index.d.ts +53 -0
  582. package/dist/navigation/index.d.ts.map +1 -0
  583. package/dist/navigation/index.js +105 -0
  584. package/dist/navigation/index.js.map +1 -0
  585. package/dist/observability/routes.d.ts +3 -3
  586. package/dist/org/index.d.ts +1 -0
  587. package/dist/org/index.d.ts.map +1 -1
  588. package/dist/org/index.js +1 -0
  589. package/dist/org/index.js.map +1 -1
  590. package/dist/org/permissions.d.ts +7 -0
  591. package/dist/org/permissions.d.ts.map +1 -0
  592. package/dist/org/permissions.js +21 -0
  593. package/dist/org/permissions.js.map +1 -0
  594. package/dist/org-team/index.d.ts +2 -0
  595. package/dist/org-team/index.d.ts.map +1 -0
  596. package/dist/org-team/index.js +2 -0
  597. package/dist/org-team/index.js.map +1 -0
  598. package/dist/private-blob/registry.d.ts.map +1 -1
  599. package/dist/private-blob/registry.js +1 -0
  600. package/dist/private-blob/registry.js.map +1 -1
  601. package/dist/resources/handlers.d.ts +2 -2
  602. package/dist/review/actions/consume-review-feedback.d.ts +9 -0
  603. package/dist/review/actions/consume-review-feedback.d.ts.map +1 -0
  604. package/dist/review/actions/consume-review-feedback.js +29 -0
  605. package/dist/review/actions/consume-review-feedback.js.map +1 -0
  606. package/dist/review/actions/create-review-comment.d.ts +18 -0
  607. package/dist/review/actions/create-review-comment.d.ts.map +1 -0
  608. package/dist/review/actions/create-review-comment.js +81 -0
  609. package/dist/review/actions/create-review-comment.js.map +1 -0
  610. package/dist/review/actions/delete-review-comment.d.ts +10 -0
  611. package/dist/review/actions/delete-review-comment.d.ts.map +1 -0
  612. package/dist/review/actions/delete-review-comment.js +45 -0
  613. package/dist/review/actions/delete-review-comment.js.map +1 -0
  614. package/dist/review/actions/get-review-feedback.d.ts +10 -0
  615. package/dist/review/actions/get-review-feedback.d.ts.map +1 -0
  616. package/dist/review/actions/get-review-feedback.js +45 -0
  617. package/dist/review/actions/get-review-feedback.js.map +1 -0
  618. package/dist/review/actions/list-review-comments.d.ts +13 -0
  619. package/dist/review/actions/list-review-comments.d.ts.map +1 -0
  620. package/dist/review/actions/list-review-comments.js +44 -0
  621. package/dist/review/actions/list-review-comments.js.map +1 -0
  622. package/dist/review/actions/reply-review-comment.d.ts +16 -0
  623. package/dist/review/actions/reply-review-comment.d.ts.map +1 -0
  624. package/dist/review/actions/reply-review-comment.js +84 -0
  625. package/dist/review/actions/reply-review-comment.js.map +1 -0
  626. package/dist/review/actions/resolve-review-thread.d.ts +11 -0
  627. package/dist/review/actions/resolve-review-thread.d.ts.map +1 -0
  628. package/dist/review/actions/resolve-review-thread.js +46 -0
  629. package/dist/review/actions/resolve-review-thread.js.map +1 -0
  630. package/dist/review/actions/set-review-status.d.ts +9 -0
  631. package/dist/review/actions/set-review-status.d.ts.map +1 -0
  632. package/dist/review/actions/set-review-status.js +43 -0
  633. package/dist/review/actions/set-review-status.js.map +1 -0
  634. package/dist/review/index.d.ts +5 -0
  635. package/dist/review/index.d.ts.map +1 -0
  636. package/dist/review/index.js +4 -0
  637. package/dist/review/index.js.map +1 -0
  638. package/dist/review/mentions.d.ts +4 -0
  639. package/dist/review/mentions.d.ts.map +1 -0
  640. package/dist/review/mentions.js +39 -0
  641. package/dist/review/mentions.js.map +1 -0
  642. package/dist/review/registry.d.ts +10 -0
  643. package/dist/review/registry.d.ts.map +1 -0
  644. package/dist/review/registry.js +61 -0
  645. package/dist/review/registry.js.map +1 -0
  646. package/dist/review/store.d.ts +63 -0
  647. package/dist/review/store.d.ts.map +1 -0
  648. package/dist/review/store.js +558 -0
  649. package/dist/review/store.js.map +1 -0
  650. package/dist/review/types.d.ts +77 -0
  651. package/dist/review/types.d.ts.map +1 -0
  652. package/dist/review/types.js +2 -0
  653. package/dist/review/types.js.map +1 -0
  654. package/dist/secrets/routes.d.ts +9 -9
  655. package/dist/server/action-discovery.d.ts.map +1 -1
  656. package/dist/server/action-discovery.js +54 -0
  657. package/dist/server/action-discovery.js.map +1 -1
  658. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  659. package/dist/server/agent-engine-api-key-route.d.ts.map +1 -1
  660. package/dist/server/agent-engine-api-key-route.js +5 -0
  661. package/dist/server/agent-engine-api-key-route.js.map +1 -1
  662. package/dist/server/credential-provider.d.ts +26 -0
  663. package/dist/server/credential-provider.d.ts.map +1 -1
  664. package/dist/server/credential-provider.js +82 -0
  665. package/dist/server/credential-provider.js.map +1 -1
  666. package/dist/server/framework-request-handler.d.ts.map +1 -1
  667. package/dist/server/framework-request-handler.js +37 -1
  668. package/dist/server/framework-request-handler.js.map +1 -1
  669. package/dist/setup-connections/index.d.ts +6 -0
  670. package/dist/setup-connections/index.d.ts.map +1 -0
  671. package/dist/setup-connections/index.js +6 -0
  672. package/dist/setup-connections/index.js.map +1 -0
  673. package/dist/setup-connections/onboarding.d.ts +14 -0
  674. package/dist/setup-connections/onboarding.d.ts.map +1 -0
  675. package/dist/setup-connections/onboarding.js +23 -0
  676. package/dist/setup-connections/onboarding.js.map +1 -0
  677. package/dist/transcription/builder-transcription.d.ts +1 -0
  678. package/dist/transcription/builder-transcription.d.ts.map +1 -1
  679. package/dist/transcription/builder-transcription.js +5 -2
  680. package/dist/transcription/builder-transcription.js.map +1 -1
  681. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  682. package/dist/vite/action-types-plugin.js +52 -0
  683. package/dist/vite/action-types-plugin.js.map +1 -1
  684. package/docs/content/agent-native-toolkit.mdx +87 -80
  685. package/docs/content/locales/ar-SA/agent-native-toolkit.mdx +89 -80
  686. package/docs/content/locales/de-DE/agent-native-toolkit.mdx +89 -80
  687. package/docs/content/locales/es-ES/agent-native-toolkit.mdx +89 -80
  688. package/docs/content/locales/fr-FR/agent-native-toolkit.mdx +89 -80
  689. package/docs/content/locales/hi-IN/agent-native-toolkit.mdx +89 -80
  690. package/docs/content/locales/ja-JP/agent-native-toolkit.mdx +89 -80
  691. package/docs/content/locales/ko-KR/agent-native-toolkit.mdx +89 -80
  692. package/docs/content/locales/pt-BR/agent-native-toolkit.mdx +89 -80
  693. package/docs/content/locales/zh-CN/agent-native-toolkit.mdx +89 -80
  694. package/docs/content/locales/zh-TW/agent-native-toolkit.mdx +89 -80
  695. package/docs/content/toolkit-agent-ux.mdx +43 -0
  696. package/docs/content/toolkit-app-adapters.mdx +9 -0
  697. package/docs/content/toolkit-collaboration-ui.mdx +12 -0
  698. package/docs/content/toolkit-collaboration.mdx +74 -0
  699. package/docs/content/toolkit-command-navigation.mdx +106 -0
  700. package/docs/content/toolkit-comments-review.mdx +98 -0
  701. package/docs/content/toolkit-history.mdx +95 -0
  702. package/docs/content/toolkit-observability.mdx +41 -0
  703. package/docs/content/toolkit-org-team.mdx +80 -0
  704. package/docs/content/toolkit-resources.mdx +57 -0
  705. package/docs/content/toolkit-settings.mdx +65 -0
  706. package/docs/content/toolkit-setup-connections.mdx +109 -0
  707. package/docs/content/toolkit-sharing-ui.mdx +18 -6
  708. package/docs/content/toolkit-sharing.mdx +81 -0
  709. package/docs/content/toolkit-shell-hooks.mdx +9 -0
  710. package/docs/content/toolkit-ui.mdx +9 -0
  711. package/package.json +36 -2
  712. package/corpus/templates/design/app/components/design/inspector/InspectorAiActions.tsx +0 -153
  713. package/corpus/templates/design/app/hooks/useAgentEditRequest.ts +0 -133
  714. package/corpus/templates/design/app/pages/DesignEditor.tsx +0 -22924
@@ -0,0 +1,94 @@
1
+ import type { ReactNode } from "react";
2
+
3
+ import { IntegrationsPanel } from "../integrations/IntegrationsPanel.js";
4
+ import { OnboardingPanel } from "../onboarding/OnboardingPanel.js";
5
+ import { SecretsSection } from "../settings/SecretsSection.js";
6
+ import { cn } from "../utils.js";
7
+ import { BuilderConnectCard } from "./BuilderConnectCard.js";
8
+
9
+ export interface SetupConnectionsPageProps {
10
+ title?: string;
11
+ description?: string;
12
+ onboardingTitle?: string;
13
+ focusSecretKey?: string;
14
+ providerReadiness?: ReactNode;
15
+ workspaceConnections?: ReactNode;
16
+ children?: ReactNode;
17
+ showOnboarding?: boolean;
18
+ showBuilderConnect?: boolean;
19
+ showSecrets?: boolean;
20
+ showIntegrations?: boolean;
21
+ className?: string;
22
+ }
23
+
24
+ export function SetupConnectionsPage({
25
+ title = "Setup & connections",
26
+ description = "Manage setup status, Builder connect, app secrets, and workspace connections from one standard surface.",
27
+ onboardingTitle = "Setup checklist",
28
+ focusSecretKey,
29
+ providerReadiness,
30
+ workspaceConnections,
31
+ children,
32
+ showOnboarding = true,
33
+ showBuilderConnect = true,
34
+ showSecrets = true,
35
+ showIntegrations = false,
36
+ className,
37
+ }: SetupConnectionsPageProps) {
38
+ return (
39
+ <div className={cn("min-h-full bg-background p-4 sm:p-6", className)}>
40
+ <div className="mx-auto flex w-full max-w-6xl flex-col gap-5">
41
+ <header className="space-y-1">
42
+ <h1 className="text-2xl font-semibold tracking-normal text-foreground">
43
+ {title}
44
+ </h1>
45
+ <p className="max-w-3xl text-sm leading-6 text-muted-foreground">
46
+ {description}
47
+ </p>
48
+ </header>
49
+
50
+ <div className="grid gap-4 lg:grid-cols-[minmax(0,1fr)_360px]">
51
+ <main className="flex min-w-0 flex-col gap-4">
52
+ {showOnboarding ? (
53
+ <OnboardingPanel title={onboardingTitle} />
54
+ ) : null}
55
+ {workspaceConnections ? (
56
+ <section className="rounded-lg border border-border bg-background p-4 shadow-sm">
57
+ {workspaceConnections}
58
+ </section>
59
+ ) : null}
60
+ {providerReadiness ? (
61
+ <section className="rounded-lg border border-border bg-background p-4 shadow-sm">
62
+ {providerReadiness}
63
+ </section>
64
+ ) : null}
65
+ {children}
66
+ </main>
67
+
68
+ <aside className="flex min-w-0 flex-col gap-4">
69
+ {showBuilderConnect ? <BuilderConnectCard /> : null}
70
+ {showSecrets ? (
71
+ <section className="rounded-lg border border-border bg-background p-4 shadow-sm">
72
+ <div className="mb-3">
73
+ <h2 className="text-sm font-semibold text-foreground">
74
+ Secrets
75
+ </h2>
76
+ <p className="mt-1 text-xs leading-5 text-muted-foreground">
77
+ Registered keys and OAuth credentials are stored in the
78
+ scoped secrets store.
79
+ </p>
80
+ </div>
81
+ <SecretsSection focusKey={focusSecretKey} />
82
+ </section>
83
+ ) : null}
84
+ {showIntegrations ? (
85
+ <section className="rounded-lg border border-border bg-background p-4 shadow-sm">
86
+ <IntegrationsPanel />
87
+ </section>
88
+ ) : null}
89
+ </aside>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ );
94
+ }
@@ -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
  )}
@@ -68,9 +68,41 @@ export function defaultActionQueryRetry(
68
68
  // A timeout already made the user wait the full timeout window once;
69
69
  // silently retrying would multiply that wait. Surface it instead.
70
70
  if (isActionTimeout(error)) return false;
71
+ if (isBrowserResourceExhaustion(error)) return false;
72
+ // Network-level failures never carry an HTTP `status` (actionFetch only
73
+ // sets it after a response arrives). Chrome reports connection-pool
74
+ // exhaustion (net::ERR_INSUFFICIENT_RESOURCES) as a generic "Failed to
75
+ // fetch", indistinguishable from a transient blip — allow one retry, not
76
+ // three, so an exhausted tab cannot sustain its own fetch storm.
77
+ if (isNetworkLevelFailure(error)) return failureCount < 1;
71
78
  return failureCount < 3;
72
79
  }
73
80
 
81
+ /** @internal alias kept for existing specs. */
82
+ export const shouldRetryActionQueryForError = defaultActionQueryRetry;
83
+
84
+ function isBrowserResourceExhaustion(error: unknown): boolean {
85
+ const message =
86
+ error instanceof Error
87
+ ? error.message
88
+ : typeof error === "string"
89
+ ? error
90
+ : "";
91
+ return /ERR_INSUFFICIENT_RESOURCES|insufficient resources/i.test(message);
92
+ }
93
+
94
+ function isNetworkLevelFailure(error: unknown): boolean {
95
+ // Match the exact shape actionFetch produces for fetch-level failures (its
96
+ // catch wraps the cause as "Action <name> failed: <cause>" and never sets a
97
+ // status). Other status-less errors (test doubles, transport internals)
98
+ // keep the standard three-retry policy.
99
+ return (
100
+ error instanceof Error &&
101
+ (error as { status?: unknown }).status === undefined &&
102
+ /^Action .+ failed: /.test(error.message)
103
+ );
104
+ }
105
+
74
106
  /**
75
107
  * Default retry backoff for action queries. React Query's stock retryDelay
76
108
  * (1s → 2s → 4s) makes a failing query sit on a spinner for ~7s before the
@@ -436,12 +468,14 @@ export function useActionMutation<
436
468
  "mutationFn"
437
469
  > & {
438
470
  method?: "POST" | "PUT" | "DELETE";
471
+ skipActionQueryInvalidation?: boolean;
439
472
  },
440
473
  ) {
441
474
  const queryClient = useQueryClient();
442
475
  const {
443
476
  method: methodOpt,
444
477
  onSuccess,
478
+ skipActionQueryInvalidation = false,
445
479
  ...restOptions
446
480
  } = options ?? ({} as any);
447
481
  const method = methodOpt ?? "POST";
@@ -454,8 +488,11 @@ export function useActionMutation<
454
488
  mutationFn: (params) =>
455
489
  actionFetch<D>(actionName, method, params as Record<string, any>),
456
490
  onSuccess: (...args: [any, any, any]) => {
457
- // Invalidate related action queries
458
- queryClient.invalidateQueries({ queryKey: ["action"] });
491
+ // Most mutations change app data broadly. High-volume background
492
+ // mutations can opt out and perform narrower invalidation in onSuccess.
493
+ if (!skipActionQueryInvalidation) {
494
+ queryClient.invalidateQueries({ queryKey: ["action"] });
495
+ }
459
496
  (onSuccess as Function)?.(...args);
460
497
  },
461
498
  });
@@ -561,6 +561,9 @@ export function subscribeSyncEvents(
561
561
  * compatibility invalidate triggered by `action` events. Use this to keep
562
562
  * expensive active queries on explicit-refresh semantics while still letting
563
563
  * normal source-versioned queries react through `useChangeVersion`.
564
+ * @param options.suppressActionInvalidationFor - Action names whose sync events
565
+ * should not invalidate all action queries. Use only for high-volume
566
+ * background actions that perform their own narrow client invalidation.
564
567
  */
565
568
  export function useDbSync(
566
569
  options: {
@@ -576,6 +579,7 @@ export function useDbSync(
576
579
  pauseWhenHidden?: boolean;
577
580
  ignoreSource?: string;
578
581
  actionInvalidatePredicate?: (query: Query) => boolean;
582
+ suppressActionInvalidationFor?: string[];
579
583
  } = {},
580
584
  ): void {
581
585
  const {
@@ -599,6 +603,11 @@ export function useDbSync(
599
603
  options.actionInvalidatePredicate,
600
604
  );
601
605
  actionInvalidatePredicateRef.current = options.actionInvalidatePredicate;
606
+ const suppressActionInvalidationForRef = useRef(
607
+ options.suppressActionInvalidationFor,
608
+ );
609
+ suppressActionInvalidationForRef.current =
610
+ options.suppressActionInvalidationFor;
602
611
 
603
612
  useEffect(() => {
604
613
  const id = Symbol("useDbSync");
@@ -621,6 +630,18 @@ export function useDbSync(
621
630
  const relevant = ignore
622
631
  ? events.filter((e) => e.requestSource !== ignore)
623
632
  : events;
633
+ const suppressedActions = new Set(
634
+ suppressActionInvalidationForRef.current ?? [],
635
+ );
636
+ const isSuppressedActionEvent = (evt: SyncEvent) =>
637
+ evt.source === "action" &&
638
+ typeof evt.key === "string" &&
639
+ suppressedActions.has(evt.key);
640
+ const nonAwareness = relevant.filter((e) => e.source !== "awareness");
641
+ const suppressesWholeBatch =
642
+ nonAwareness.length > 0 &&
643
+ nonAwareness.every((evt) => evt.source === "action") &&
644
+ nonAwareness.every(isSuppressedActionEvent);
624
645
 
625
646
  // Bump per-source change counters. Components that read these via
626
647
  // `useChangeVersion(source)` and fold the value into a React Query
@@ -642,7 +663,7 @@ export function useDbSync(
642
663
 
643
664
  if (invalidating.length > 0 && queryClient) {
644
665
  const hasActionEvent = invalidating.some(
645
- (evt) => evt.source === "action",
666
+ (evt) => evt.source === "action" && !isSuppressedActionEvent(evt),
646
667
  );
647
668
  if (hasActionEvent) {
648
669
  // Custom apps frequently start with raw `useQuery` calls before
@@ -661,23 +682,28 @@ export function useDbSync(
661
682
  // etc.). Templates' own data queries do NOT live here — they react
662
683
  // through `useChangeVersion(source)` in their query keys instead, so
663
684
  // a single change event doesn't fan out into "refetch everything".
664
- queryClient.invalidateQueries({ queryKey: ["action"] });
665
- queryClient.invalidateQueries({ queryKey: ["extension"] });
666
- queryClient.invalidateQueries({ queryKey: ["extensions"] });
667
- queryClient.invalidateQueries({ queryKey: ["extension-slots"] });
668
- queryClient.invalidateQueries({ queryKey: ["slot-installs"] });
669
- queryClient.invalidateQueries({ queryKey: ["slot-available"] });
670
- queryClient.invalidateQueries({ queryKey: ["tool"] });
671
- queryClient.invalidateQueries({ queryKey: ["tools"] });
672
- queryClient.invalidateQueries({ queryKey: ["app-state"] });
673
- if (hasAppStateEvent(invalidating, "navigate")) {
674
- queryClient.invalidateQueries({ queryKey: ["navigate-command"] });
675
- }
676
- if (hasAppStateEvent(invalidating, "show-questions")) {
677
- queryClient.invalidateQueries({ queryKey: ["show-questions"] });
678
- }
679
- if (hasAppStateEvent(invalidating, "__set_url__")) {
680
- queryClient.invalidateQueries({ queryKey: ["__set_url__"] });
685
+ // Suppressed-action-only batches skip this whole list (their
686
+ // mutations perform their own narrow invalidation) — but events must
687
+ // STILL reach the onEvent forwarding below, so guard, don't return.
688
+ if (!suppressesWholeBatch) {
689
+ queryClient.invalidateQueries({ queryKey: ["action"] });
690
+ queryClient.invalidateQueries({ queryKey: ["extension"] });
691
+ queryClient.invalidateQueries({ queryKey: ["extensions"] });
692
+ queryClient.invalidateQueries({ queryKey: ["extension-slots"] });
693
+ queryClient.invalidateQueries({ queryKey: ["slot-installs"] });
694
+ queryClient.invalidateQueries({ queryKey: ["slot-available"] });
695
+ queryClient.invalidateQueries({ queryKey: ["tool"] });
696
+ queryClient.invalidateQueries({ queryKey: ["tools"] });
697
+ queryClient.invalidateQueries({ queryKey: ["app-state"] });
698
+ if (hasAppStateEvent(invalidating, "navigate")) {
699
+ queryClient.invalidateQueries({ queryKey: ["navigate-command"] });
700
+ }
701
+ if (hasAppStateEvent(invalidating, "show-questions")) {
702
+ queryClient.invalidateQueries({ queryKey: ["show-questions"] });
703
+ }
704
+ if (hasAppStateEvent(invalidating, "__set_url__")) {
705
+ queryClient.invalidateQueries({ queryKey: ["__set_url__"] });
706
+ }
681
707
  }
682
708
  }
683
709
 
@@ -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";
@@ -1,3 +1,5 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+
1
3
  import { drizzle as drizzleD1 } from "drizzle-orm/d1";
2
4
  import type { LibSQLDatabase } from "drizzle-orm/libsql";
3
5
 
@@ -320,15 +322,26 @@ function getBetterSqliteDrizzle() {
320
322
  * The patched transaction also patches the tx object it passes to the callback
321
323
  * so that nested async calls (tx.transaction(async …)) work recursively.
322
324
  */
323
- function patchBetterSqliteTransactions<
325
+ /** @internal exported for the async-tx concurrency spec */
326
+ export function patchBetterSqliteTransactions<
324
327
  DB extends { transaction: (...args: any[]) => any; session: any },
325
328
  >(db: DB, sqlite: { inTransaction: boolean; exec: (sql: string) => void }): DB {
326
329
  let savepointSeq = 0;
330
+ // Concurrent TOP-LEVEL async transactions on the single better-sqlite3
331
+ // connection must not interleave: a second transaction starting while the
332
+ // first is open would see `inTransaction` and open a savepoint INSIDE the
333
+ // first transaction, which then commits out from under it ("no such
334
+ // savepoint"). Serialize top-level transactions through a promise chain;
335
+ // genuine same-task nesting (tx.transaction or db.transaction inside an
336
+ // open callback) is detected via AsyncLocalStorage and keeps the direct
337
+ // savepoint path so it cannot deadlock on the queue.
338
+ const txContext = new AsyncLocalStorage<boolean>();
339
+ let txChain: Promise<unknown> = Promise.resolve();
327
340
 
328
341
  function makeAsyncTransaction(
329
342
  originalTransaction: (...args: any[]) => any,
330
343
  ): (...args: any[]) => Promise<unknown> {
331
- return async function asyncTransaction(
344
+ async function runTransactionBody(
332
345
  cb: (tx: unknown) => unknown,
333
346
  ): Promise<unknown> {
334
347
  // Extract the drizzle tx proxy synchronously — call the original with a
@@ -392,6 +405,23 @@ function patchBetterSqliteTransactions<
392
405
  }
393
406
  throw err;
394
407
  }
408
+ }
409
+
410
+ return function asyncTransaction(
411
+ cb: (tx: unknown) => unknown,
412
+ ): Promise<unknown> {
413
+ if (txContext.getStore()) {
414
+ // Same-task nesting: run directly (savepoint path inside the open
415
+ // transaction). Queueing here would deadlock behind the outer tx.
416
+ return runTransactionBody(cb);
417
+ }
418
+ const run = () => txContext.run(true, () => runTransactionBody(cb));
419
+ const next = txChain.then(run, run);
420
+ txChain = next.then(
421
+ () => undefined,
422
+ () => undefined,
423
+ );
424
+ return next;
395
425
  };
396
426
  }
397
427