@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,746 @@
1
+ /**
2
+ * Code-backed GLSL shader runtime — the self-contained engine behind shader
3
+ * fills and shader effects.
4
+ *
5
+ * This script is BOTH:
6
+ * 1. injected into every editor canvas iframe (via
7
+ * SHADER_FILL_PREVIEW_BRIDGE_SCRIPT in DesignCanvas.tsx), and
8
+ * 2. embedded into persisted/exported screen HTML (via
9
+ * `ensureShaderRuntime()` in shared/shader-fills.ts) so standalone
10
+ * artifacts render their shaders without the editor.
11
+ *
12
+ * It is idempotent — a screen that already embeds the runtime and is then
13
+ * rendered inside the editor (which injects it again) initializes only once.
14
+ *
15
+ * Persisted format it consumes (see shared/shader-fills.ts for the canonical
16
+ * spec + serializers — keep the parsing here in sync):
17
+ *
18
+ * <script type="application/x-agent-native-shader"
19
+ * data-shader-id="an-shader-x" data-shader-name="Name"
20
+ * data-shader-mode="fill">
21
+ * [block comment] an-shader v1
22
+ * { "uniforms": { "u_speed": { "type": "float", "value": 1, ... } } }
23
+ * [end block comment]
24
+ * ...GLSL fragment source...
25
+ * </script>
26
+ *
27
+ * (The manifest rides in a leading GLSL block comment opened with slash-
28
+ * star-bang and the marker "an-shader v1", closed with star-slash; the
29
+ * literal characters can't appear in this header without ending it.)
30
+ *
31
+ * <div data-an-shader-fill="an-shader-x"
32
+ * data-an-shader-uniforms='{"u_speed":2}'>…</div>
33
+ * <div data-an-shader-effect="an-shader-y">…</div>
34
+ *
35
+ * Fills render to a canvas placed BEHIND the element's content (negative
36
+ * z-index inside an isolated stacking context, above the element's own
37
+ * background so the persisted fallback background stays underneath). Effects
38
+ * render to a pointer-transparent overlay canvas ON TOP of the content.
39
+ *
40
+ * Built-in uniforms provided automatically when declared by the GLSL:
41
+ * uniform float u_time; // seconds since load (0 for reduced motion)
42
+ * uniform vec2 u_resolution; // canvas size in physical pixels
43
+ *
44
+ * Graceful degradation: no WebGL, compile errors, or too many mounts → the
45
+ * canvas is removed and the element keeps its persisted fallback background.
46
+ * The failure reason lands in `data-an-shader-error` for inspectability.
47
+ *
48
+ * Rules:
49
+ * • No import/require of any module (DOM globals only).
50
+ * • No references to outer/module scope (runs inside an iframe).
51
+ * • Wrap everything in a self-executing IIFE.
52
+ */
53
+ (function () {
54
+ interface AnUniformDef {
55
+ type?: string; // 'float' | 'vec2' | 'color'
56
+ value?: unknown;
57
+ min?: number;
58
+ max?: number;
59
+ step?: number;
60
+ label?: string;
61
+ }
62
+
63
+ interface AnShaderDef {
64
+ name: string;
65
+ mode: "fill" | "effect";
66
+ glsl: string;
67
+ uniforms: Record<string, AnUniformDef>;
68
+ /** Raw script-tag text at last collect, to detect DOM-side updates. */
69
+ domText?: string;
70
+ /** True when updated at runtime (updateShader) and not yet persisted. */
71
+ volatile?: boolean;
72
+ }
73
+
74
+ interface AnShaderMount {
75
+ el: HTMLElement;
76
+ canvas: HTMLCanvasElement;
77
+ gl: WebGLRenderingContext;
78
+ program: WebGLProgram;
79
+ locs: Record<string, WebGLUniformLocation | null>;
80
+ defId: string;
81
+ mode: "fill" | "effect";
82
+ values: Record<string, unknown>;
83
+ preview: boolean;
84
+ visible: boolean;
85
+ }
86
+
87
+ interface AnShadersApi {
88
+ version: number;
89
+ scan: () => void;
90
+ applyPreview: (
91
+ target: { nodeId?: string; selector?: string },
92
+ def: {
93
+ id?: string;
94
+ name?: string;
95
+ glsl: string;
96
+ uniforms?: Record<string, AnUniformDef>;
97
+ values?: Record<string, unknown>;
98
+ },
99
+ mode?: string,
100
+ ) => boolean;
101
+ clearPreview: () => void;
102
+ setUniform: (
103
+ filter: { shaderId?: string; nodeId?: string; preview?: boolean },
104
+ name: string,
105
+ value: unknown,
106
+ ) => void;
107
+ updateShader: (
108
+ id: string,
109
+ patch: { glsl?: string; uniforms?: Record<string, AnUniformDef> },
110
+ ) => void;
111
+ }
112
+
113
+ const W = window as unknown as {
114
+ __anShaders?: AnShadersApi;
115
+ } & Window &
116
+ typeof globalThis;
117
+
118
+ if (W.__anShaders && W.__anShaders.version >= 1) {
119
+ // Another copy (embedded + injected) already runs — just rescan.
120
+ try {
121
+ W.__anShaders.scan();
122
+ } catch (_err) {
123
+ /* noop */
124
+ }
125
+ return;
126
+ }
127
+
128
+ const SCRIPT_TYPE = "application/x-agent-native-shader";
129
+ const FILL_ATTR = "data-an-shader-fill";
130
+ const EFFECT_ATTR = "data-an-shader-effect";
131
+ const VALUES_ATTR = "data-an-shader-uniforms";
132
+ const EFFECT_VALUES_ATTR = "data-an-shader-effect-uniforms";
133
+ const ERROR_ATTR = "data-an-shader-error";
134
+ const CANVAS_ATTR = "data-an-shader-canvas";
135
+ const PREVIEW_DEF_ID = "__an-shader-preview";
136
+ const MAX_MOUNTS = 8;
137
+ const VERT_SRC =
138
+ "attribute vec2 a_pos;void main(){gl_Position=vec4(a_pos,0.0,1.0);}";
139
+
140
+ const registry: Record<string, AnShaderDef> = {};
141
+ const mounts: AnShaderMount[] = [];
142
+ let rafId: number | null = null;
143
+ let needsRender = false;
144
+ let scanTimer: ReturnType<typeof setTimeout> | null = null;
145
+
146
+ function nowMs(): number {
147
+ return W.performance && W.performance.now
148
+ ? W.performance.now()
149
+ : Date.now();
150
+ }
151
+ const t0 = nowMs();
152
+
153
+ let reducedMotion = false;
154
+ try {
155
+ reducedMotion = !!(
156
+ W.matchMedia && W.matchMedia("(prefers-reduced-motion: reduce)").matches
157
+ );
158
+ if (W.matchMedia) {
159
+ const mq = W.matchMedia("(prefers-reduced-motion: reduce)");
160
+ const onChange = function () {
161
+ reducedMotion = mq.matches;
162
+ requestRender();
163
+ };
164
+ if (mq.addEventListener) mq.addEventListener("change", onChange);
165
+ }
166
+ } catch (_err) {
167
+ /* noop */
168
+ }
169
+
170
+ // ── Manifest parsing (keep in sync with shared/shader-fills.ts) ──────────
171
+
172
+ function parseBlock(text: string): {
173
+ uniforms: Record<string, AnUniformDef>;
174
+ glsl: string;
175
+ } {
176
+ const m = /^\s*\/\*!\s*an-shader\s+v\d+\s*([\s\S]*?)\*\//.exec(text);
177
+ let uniforms: Record<string, AnUniformDef> = {};
178
+ let glsl = text;
179
+ if (m) {
180
+ glsl = text.slice((m.index || 0) + m[0].length);
181
+ try {
182
+ const meta = JSON.parse(m[1]) as {
183
+ uniforms?: Record<string, AnUniformDef>;
184
+ };
185
+ if (meta && meta.uniforms && typeof meta.uniforms === "object") {
186
+ uniforms = meta.uniforms;
187
+ }
188
+ } catch (_err) {
189
+ /* malformed manifest — treat as no uniforms */
190
+ }
191
+ }
192
+ return { uniforms: uniforms, glsl: glsl.replace(/^[ \t]*\r?\n/, "") };
193
+ }
194
+
195
+ function hexToRgb(hex: unknown): [number, number, number] {
196
+ let h = String(hex || "").replace("#", "");
197
+ if (h.length === 3 || h.length === 4) {
198
+ h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];
199
+ }
200
+ const n = parseInt(h.slice(0, 6), 16);
201
+ if (isNaN(n)) return [0.5, 0.5, 0.5];
202
+ return [((n >> 16) & 255) / 255, ((n >> 8) & 255) / 255, (n & 255) / 255];
203
+ }
204
+
205
+ // ── Definition collection ─────────────────────────────────────────────────
206
+
207
+ function invalidateMountsFor(defId: string): void {
208
+ for (let i = mounts.length - 1; i >= 0; i--) {
209
+ if (mounts[i].defId === defId) unmount(mounts[i]);
210
+ }
211
+ }
212
+
213
+ function collectDefs(): void {
214
+ const scripts = document.querySelectorAll(
215
+ 'script[type="' + SCRIPT_TYPE + '"]',
216
+ );
217
+ for (let i = 0; i < scripts.length; i++) {
218
+ const s = scripts[i];
219
+ const id = s.getAttribute("data-shader-id");
220
+ if (!id) continue;
221
+ const text = s.textContent || "";
222
+ const prev = registry[id];
223
+ if (prev && prev.domText === text) continue; // unchanged in DOM
224
+ if (prev && prev.volatile && prev.domText === undefined) continue;
225
+ const parsed = parseBlock(text);
226
+ registry[id] = {
227
+ name: s.getAttribute("data-shader-name") || id,
228
+ mode:
229
+ s.getAttribute("data-shader-mode") === "effect" ? "effect" : "fill",
230
+ glsl: parsed.glsl,
231
+ uniforms: parsed.uniforms,
232
+ domText: text,
233
+ };
234
+ if (prev && prev.glsl !== parsed.glsl) invalidateMountsFor(id);
235
+ }
236
+ }
237
+
238
+ // ── WebGL plumbing ────────────────────────────────────────────────────────
239
+
240
+ function compileProgram(
241
+ gl: WebGLRenderingContext,
242
+ fragSrc: string,
243
+ ): WebGLProgram {
244
+ function sh(type: number, src: string): WebGLShader {
245
+ const shader = gl.createShader(type);
246
+ if (!shader) throw new Error("createShader failed");
247
+ gl.shaderSource(shader, src);
248
+ gl.compileShader(shader);
249
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
250
+ const log = gl.getShaderInfoLog(shader) || "shader compile failed";
251
+ gl.deleteShader(shader);
252
+ throw new Error(log);
253
+ }
254
+ return shader;
255
+ }
256
+ const vs = sh(gl.VERTEX_SHADER, VERT_SRC);
257
+ const fs = sh(gl.FRAGMENT_SHADER, fragSrc);
258
+ const program = gl.createProgram();
259
+ if (!program) throw new Error("createProgram failed");
260
+ gl.attachShader(program, vs);
261
+ gl.attachShader(program, fs);
262
+ gl.linkProgram(program);
263
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
264
+ throw new Error(gl.getProgramInfoLog(program) || "program link failed");
265
+ }
266
+ return program;
267
+ }
268
+
269
+ function resolveValues(
270
+ def: AnShaderDef,
271
+ overrides: Record<string, unknown> | null | undefined,
272
+ ): Record<string, unknown> {
273
+ const out: Record<string, unknown> = {};
274
+ for (const k in def.uniforms) {
275
+ if (!Object.prototype.hasOwnProperty.call(def.uniforms, k)) continue;
276
+ out[k] = def.uniforms[k].value;
277
+ }
278
+ if (overrides) {
279
+ for (const k2 in overrides) {
280
+ if (!Object.prototype.hasOwnProperty.call(overrides, k2)) continue;
281
+ if (Object.prototype.hasOwnProperty.call(out, k2)) {
282
+ out[k2] = overrides[k2];
283
+ }
284
+ }
285
+ }
286
+ return out;
287
+ }
288
+
289
+ let io: IntersectionObserver | null = null;
290
+ try {
291
+ io = new IntersectionObserver(function (entries) {
292
+ for (let i = 0; i < entries.length; i++) {
293
+ for (let j = 0; j < mounts.length; j++) {
294
+ if (mounts[j].canvas === entries[i].target) {
295
+ mounts[j].visible = entries[i].isIntersecting;
296
+ }
297
+ }
298
+ }
299
+ startLoop();
300
+ });
301
+ } catch (_err) {
302
+ io = null;
303
+ }
304
+
305
+ function unmount(mount: AnShaderMount): void {
306
+ const idx = mounts.indexOf(mount);
307
+ if (idx !== -1) mounts.splice(idx, 1);
308
+ try {
309
+ if (io) io.unobserve(mount.canvas);
310
+ } catch (_err) {
311
+ /* noop */
312
+ }
313
+ try {
314
+ const lose = mount.gl.getExtension("WEBGL_lose_context");
315
+ if (lose) lose.loseContext();
316
+ } catch (_err) {
317
+ /* noop */
318
+ }
319
+ if (mount.canvas.parentNode) {
320
+ mount.canvas.parentNode.removeChild(mount.canvas);
321
+ }
322
+ }
323
+
324
+ function ensureMount(
325
+ el: HTMLElement,
326
+ defId: string,
327
+ mode: "fill" | "effect",
328
+ overrides: Record<string, unknown> | null | undefined,
329
+ preview: boolean,
330
+ ): AnShaderMount | null {
331
+ const def = registry[defId];
332
+ if (!def || !def.glsl) return null;
333
+ // A fill and an effect may coexist on the same element — mount identity
334
+ // is (element, mode, preview), so replacing a fill never tears down the
335
+ // element's effect and vice versa.
336
+ for (let i = 0; i < mounts.length; i++) {
337
+ const existing = mounts[i];
338
+ if (
339
+ existing.el === el &&
340
+ existing.preview === preview &&
341
+ existing.mode === mode
342
+ ) {
343
+ if (existing.defId === defId) {
344
+ existing.values = resolveValues(def, overrides);
345
+ requestRender();
346
+ return existing;
347
+ }
348
+ unmount(existing);
349
+ break;
350
+ }
351
+ }
352
+ if (mounts.length >= MAX_MOUNTS) {
353
+ el.setAttribute(ERROR_ATTR, "too-many-shaders");
354
+ return null;
355
+ }
356
+
357
+ const canvas = document.createElement("canvas");
358
+ canvas.setAttribute(CANVAS_ATTR, defId);
359
+ canvas.setAttribute("aria-hidden", "true");
360
+ const cs = canvas.style;
361
+ cs.position = "absolute";
362
+ cs.left = "0";
363
+ cs.top = "0";
364
+ cs.width = "100%";
365
+ cs.height = "100%";
366
+ cs.pointerEvents = "none";
367
+ cs.borderRadius = "inherit";
368
+ cs.display = "block";
369
+ cs.zIndex = mode === "effect" ? "2147483646" : "-1";
370
+
371
+ try {
372
+ const computed = W.getComputedStyle(el);
373
+ if (computed && computed.position === "static") {
374
+ el.style.position = "relative";
375
+ }
376
+ } catch (_err) {
377
+ /* noop */
378
+ }
379
+ el.style.isolation = "isolate";
380
+ if (mode === "effect") el.appendChild(canvas);
381
+ else el.insertBefore(canvas, el.firstChild);
382
+
383
+ let gl: WebGLRenderingContext | null = null;
384
+ try {
385
+ gl = (canvas.getContext("webgl", {
386
+ alpha: true,
387
+ premultipliedAlpha: false,
388
+ antialias: true,
389
+ }) ||
390
+ canvas.getContext(
391
+ "experimental-webgl",
392
+ )) as WebGLRenderingContext | null;
393
+ } catch (_err) {
394
+ gl = null;
395
+ }
396
+ if (!gl) {
397
+ if (canvas.parentNode) canvas.parentNode.removeChild(canvas);
398
+ el.setAttribute(ERROR_ATTR, "webgl-unavailable");
399
+ return null;
400
+ }
401
+
402
+ let program: WebGLProgram;
403
+ try {
404
+ program = compileProgram(gl, def.glsl);
405
+ } catch (err) {
406
+ if (canvas.parentNode) canvas.parentNode.removeChild(canvas);
407
+ const msg = err instanceof Error ? err.message : String(err);
408
+ el.setAttribute(ERROR_ATTR, msg.slice(0, 200));
409
+ return null;
410
+ }
411
+ el.removeAttribute(ERROR_ATTR);
412
+
413
+ gl.useProgram(program);
414
+ const buf = gl.createBuffer();
415
+ gl.bindBuffer(gl.ARRAY_BUFFER, buf);
416
+ // One oversized triangle covering the viewport — cheaper than a quad.
417
+ gl.bufferData(
418
+ gl.ARRAY_BUFFER,
419
+ new Float32Array([-1, -1, 3, -1, -1, 3]),
420
+ gl.STATIC_DRAW,
421
+ );
422
+ const aPos = gl.getAttribLocation(program, "a_pos");
423
+ gl.enableVertexAttribArray(aPos);
424
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 0, 0);
425
+
426
+ const mount: AnShaderMount = {
427
+ el: el,
428
+ canvas: canvas,
429
+ gl: gl,
430
+ program: program,
431
+ locs: {},
432
+ defId: defId,
433
+ mode: mode,
434
+ values: resolveValues(def, overrides),
435
+ preview: preview,
436
+ visible: true,
437
+ };
438
+ mounts.push(mount);
439
+ try {
440
+ if (io) io.observe(canvas);
441
+ } catch (_err) {
442
+ /* noop */
443
+ }
444
+ requestRender();
445
+ return mount;
446
+ }
447
+
448
+ function loc(
449
+ mount: AnShaderMount,
450
+ name: string,
451
+ ): WebGLUniformLocation | null {
452
+ if (!(name in mount.locs)) {
453
+ mount.locs[name] = mount.gl.getUniformLocation(mount.program, name);
454
+ }
455
+ return mount.locs[name];
456
+ }
457
+
458
+ function drawMount(mount: AnShaderMount, timeSec: number): void {
459
+ const el = mount.el;
460
+ const canvas = mount.canvas;
461
+ const gl = mount.gl;
462
+ if (!el.isConnected) {
463
+ unmount(mount);
464
+ return;
465
+ }
466
+ const rect = el.getBoundingClientRect();
467
+ const wCss = Math.max(1, Math.round(rect.width));
468
+ const hCss = Math.max(1, Math.round(rect.height));
469
+ const dpr = Math.min(2, W.devicePixelRatio || 1);
470
+ const wPx = Math.max(1, Math.round(wCss * dpr));
471
+ const hPx = Math.max(1, Math.round(hCss * dpr));
472
+ if (canvas.width !== wPx || canvas.height !== hPx) {
473
+ canvas.width = wPx;
474
+ canvas.height = hPx;
475
+ gl.viewport(0, 0, wPx, hPx);
476
+ }
477
+ gl.useProgram(mount.program);
478
+ const def = registry[mount.defId];
479
+ const uniforms = def ? def.uniforms : {};
480
+ const lt = loc(mount, "u_time");
481
+ if (lt) gl.uniform1f(lt, timeSec);
482
+ const lr = loc(mount, "u_resolution");
483
+ if (lr) gl.uniform2f(lr, wPx, hPx);
484
+ for (const name in mount.values) {
485
+ if (!Object.prototype.hasOwnProperty.call(mount.values, name)) continue;
486
+ const u = uniforms[name];
487
+ const l = loc(mount, name);
488
+ if (!l || !u) continue;
489
+ const v = mount.values[name];
490
+ if (u.type === "color") {
491
+ const rgb = hexToRgb(v);
492
+ gl.uniform3f(l, rgb[0], rgb[1], rgb[2]);
493
+ } else if (u.type === "vec2" && Array.isArray(v) && v.length >= 2) {
494
+ gl.uniform2f(l, Number(v[0]) || 0, Number(v[1]) || 0);
495
+ } else {
496
+ gl.uniform1f(l, Number(v) || 0);
497
+ }
498
+ }
499
+ gl.clearColor(0, 0, 0, 0);
500
+ gl.clear(gl.COLOR_BUFFER_BIT);
501
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
502
+ }
503
+
504
+ function frame(): void {
505
+ rafId = null;
506
+ const t = (nowMs() - t0) / 1000;
507
+ const animate = !reducedMotion && !document.hidden;
508
+ for (let i = mounts.length - 1; i >= 0; i--) {
509
+ const mount = mounts[i];
510
+ if (!mount.el.isConnected) {
511
+ unmount(mount);
512
+ continue;
513
+ }
514
+ if (mount.visible === false && !needsRender) continue;
515
+ drawMount(mount, reducedMotion ? 0 : t);
516
+ }
517
+ needsRender = false;
518
+ if (animate && mounts.length > 0) startLoop();
519
+ }
520
+
521
+ function startLoop(): void {
522
+ if (rafId !== null) return;
523
+ if (mounts.length === 0) return;
524
+ if (W.requestAnimationFrame) {
525
+ rafId = W.requestAnimationFrame(frame);
526
+ } else {
527
+ rafId = setTimeout(frame, 66) as unknown as number;
528
+ }
529
+ }
530
+
531
+ function requestRender(): void {
532
+ needsRender = true;
533
+ startLoop();
534
+ }
535
+
536
+ // ── Scanning ──────────────────────────────────────────────────────────────
537
+
538
+ function parseOverrides(
539
+ el: HTMLElement,
540
+ attr: string,
541
+ ): Record<string, unknown> | null {
542
+ const raw = el.getAttribute(attr);
543
+ if (!raw) return null;
544
+ try {
545
+ const parsed = JSON.parse(raw) as Record<string, unknown>;
546
+ return parsed && typeof parsed === "object" ? parsed : null;
547
+ } catch (_err) {
548
+ return null;
549
+ }
550
+ }
551
+
552
+ function scan(): void {
553
+ collectDefs();
554
+ const els = document.querySelectorAll(
555
+ "[" + FILL_ATTR + "],[" + EFFECT_ATTR + "]",
556
+ );
557
+ const seen: AnShaderMount[] = [];
558
+ for (let i = 0; i < els.length; i++) {
559
+ const el = els[i] as HTMLElement;
560
+ const fillId = el.getAttribute(FILL_ATTR);
561
+ const effectId = el.getAttribute(EFFECT_ATTR);
562
+ if (fillId && registry[fillId]) {
563
+ const fillMount = ensureMount(
564
+ el,
565
+ fillId,
566
+ "fill",
567
+ parseOverrides(el, VALUES_ATTR),
568
+ false,
569
+ );
570
+ if (fillMount) seen.push(fillMount);
571
+ }
572
+ if (effectId && registry[effectId]) {
573
+ const effectMount = ensureMount(
574
+ el,
575
+ effectId,
576
+ "effect",
577
+ parseOverrides(el, EFFECT_VALUES_ATTR),
578
+ false,
579
+ );
580
+ if (effectMount) seen.push(effectMount);
581
+ }
582
+ }
583
+ for (let k = mounts.length - 1; k >= 0; k--) {
584
+ const mount = mounts[k];
585
+ if (mount.preview) continue;
586
+ if (seen.indexOf(mount) === -1) unmount(mount);
587
+ }
588
+ startLoop();
589
+ }
590
+
591
+ function scheduleScan(): void {
592
+ if (scanTimer !== null) return;
593
+ scanTimer = setTimeout(function () {
594
+ scanTimer = null;
595
+ scan();
596
+ }, 100);
597
+ }
598
+
599
+ // ── Public API (used by the shader-fill-preview bridge + inspector) ──────
600
+
601
+ function resolveTarget(target: {
602
+ nodeId?: string;
603
+ selector?: string;
604
+ }): HTMLElement | null {
605
+ if (target && target.selector) {
606
+ try {
607
+ const hit = document.querySelector(target.selector);
608
+ if (hit) return hit as HTMLElement;
609
+ } catch (_err) {
610
+ /* invalid selector */
611
+ }
612
+ }
613
+ if (target && target.nodeId) {
614
+ const byId = document.querySelector(
615
+ '[data-agent-native-node-id="' +
616
+ String(target.nodeId).replace(/"/g, '\\"') +
617
+ '"]',
618
+ );
619
+ if (byId) return byId as HTMLElement;
620
+ }
621
+ return null;
622
+ }
623
+
624
+ function applyPreview(
625
+ target: { nodeId?: string; selector?: string },
626
+ def: {
627
+ id?: string;
628
+ name?: string;
629
+ glsl: string;
630
+ uniforms?: Record<string, AnUniformDef>;
631
+ values?: Record<string, unknown>;
632
+ },
633
+ mode?: string,
634
+ ): boolean {
635
+ clearPreview();
636
+ const el = resolveTarget(target || {});
637
+ // No body fallback: in a multi-screen editor every screen iframe receives
638
+ // the same message — only the one containing the target should mount.
639
+ if (!el || !def || typeof def.glsl !== "string") return false;
640
+ const resolvedMode: "fill" | "effect" =
641
+ mode === "effect" ? "effect" : "fill";
642
+ registry[PREVIEW_DEF_ID] = {
643
+ name: (def.name || "Preview") + "",
644
+ mode: resolvedMode,
645
+ glsl: def.glsl,
646
+ uniforms: def.uniforms || {},
647
+ volatile: true,
648
+ };
649
+ const mount = ensureMount(
650
+ el,
651
+ PREVIEW_DEF_ID,
652
+ resolvedMode,
653
+ def.values || null,
654
+ true,
655
+ );
656
+ return !!mount;
657
+ }
658
+
659
+ function clearPreview(): void {
660
+ for (let i = mounts.length - 1; i >= 0; i--) {
661
+ if (mounts[i].preview) unmount(mounts[i]);
662
+ }
663
+ delete registry[PREVIEW_DEF_ID];
664
+ }
665
+
666
+ function setUniform(
667
+ filter: { shaderId?: string; nodeId?: string; preview?: boolean },
668
+ name: string,
669
+ value: unknown,
670
+ ): void {
671
+ const f = filter || {};
672
+ for (let i = 0; i < mounts.length; i++) {
673
+ const mount = mounts[i];
674
+ if (f.preview !== undefined && mount.preview !== !!f.preview) continue;
675
+ if (f.shaderId && mount.defId !== f.shaderId) continue;
676
+ if (f.nodeId) {
677
+ const nid = mount.el.getAttribute("data-agent-native-node-id");
678
+ if (nid !== f.nodeId) continue;
679
+ }
680
+ mount.values[name] = value;
681
+ }
682
+ requestRender();
683
+ }
684
+
685
+ function updateShader(
686
+ id: string,
687
+ patch: { glsl?: string; uniforms?: Record<string, AnUniformDef> },
688
+ ): void {
689
+ const def = registry[id];
690
+ if (!def || !patch) return;
691
+ let recompile = false;
692
+ if (typeof patch.glsl === "string" && patch.glsl !== def.glsl) {
693
+ def.glsl = patch.glsl;
694
+ recompile = true;
695
+ }
696
+ if (patch.uniforms && typeof patch.uniforms === "object") {
697
+ def.uniforms = patch.uniforms;
698
+ }
699
+ def.volatile = true;
700
+ if (recompile) invalidateMountsFor(id);
701
+ scan();
702
+ requestRender();
703
+ }
704
+
705
+ W.__anShaders = {
706
+ version: 1,
707
+ scan: scan,
708
+ applyPreview: applyPreview,
709
+ clearPreview: clearPreview,
710
+ setUniform: setUniform,
711
+ updateShader: updateShader,
712
+ };
713
+
714
+ // ── Boot ──────────────────────────────────────────────────────────────────
715
+
716
+ if (document.readyState === "loading") {
717
+ document.addEventListener("DOMContentLoaded", function () {
718
+ scan();
719
+ });
720
+ } else {
721
+ scan();
722
+ }
723
+
724
+ document.addEventListener("visibilitychange", function () {
725
+ if (!document.hidden) requestRender();
726
+ });
727
+
728
+ try {
729
+ new MutationObserver(function () {
730
+ // Debounced; scan() is idempotent so canvas-insert echoes converge.
731
+ scheduleScan();
732
+ }).observe(document.documentElement, {
733
+ childList: true,
734
+ subtree: true,
735
+ attributes: true,
736
+ attributeFilter: [
737
+ FILL_ATTR,
738
+ EFFECT_ATTR,
739
+ VALUES_ATTR,
740
+ EFFECT_VALUES_ATTR,
741
+ ],
742
+ });
743
+ } catch (_err) {
744
+ /* noop */
745
+ }
746
+ })();