@agent-native/core 0.152.1 → 0.153.0

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 (907) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/adding-a-feature/SKILL.md +208 -0
  3. package/corpus/templates/analytics/.agents/skills/context-awareness/SKILL.md +206 -0
  4. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +6 -4
  5. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +73 -80
  6. package/corpus/templates/analytics/.agents/skills/portability/SKILL.md +107 -0
  7. package/corpus/templates/analytics/.agents/skills/secrets/SKILL.md +339 -0
  8. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +3 -3
  9. package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +1 -1
  10. package/corpus/templates/analytics/.agents/skills/sharing/SKILL.md +1 -0
  11. package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +116 -44
  12. package/corpus/templates/analytics/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  13. package/corpus/templates/analytics/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  14. package/corpus/templates/analytics/.agents/skills/workspace-conventions/SKILL.md +93 -0
  15. package/corpus/templates/analytics/actions/data-source-status.ts +4 -1
  16. package/corpus/templates/analytics/actions/migrate-first-party-analytics-to-bigquery.ts +2 -2
  17. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +7 -2
  18. package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +7 -1
  19. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +30 -32
  20. package/corpus/templates/analytics/app/components/layout/layout-route-policy.ts +10 -0
  21. package/corpus/templates/analytics/app/global.css +5 -1
  22. package/corpus/templates/analytics/app/lib/data-source-status.ts +3 -3
  23. package/corpus/templates/analytics/app/lib/resource-access.ts +6 -1
  24. package/corpus/templates/analytics/app/pages/DataSources.tsx +79 -51
  25. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +1 -0
  26. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +1 -0
  27. package/corpus/templates/analytics/changelog/2026-08-12-analytics-sidebar-ask-toggle-and-compact-rail.md +6 -0
  28. package/corpus/templates/analytics/changelog/2026-08-12-data-source-statuses-now-distinguish-workspace-access-from-c.md +6 -0
  29. package/corpus/templates/analytics/server/jobs/analytics-bigquery-backfill.ts +559 -147
  30. package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +79 -5
  31. package/corpus/templates/analytics/server/plugins/db.ts +84 -0
  32. package/corpus/templates/assets/.agents/skills/adding-a-feature/SKILL.md +208 -0
  33. package/corpus/templates/assets/.agents/skills/context-awareness/SKILL.md +206 -0
  34. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +73 -80
  35. package/corpus/templates/assets/.agents/skills/portability/SKILL.md +107 -0
  36. package/corpus/templates/assets/.agents/skills/secrets/SKILL.md +339 -0
  37. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +3 -3
  38. package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +1 -1
  39. package/corpus/templates/assets/.agents/skills/sharing/SKILL.md +1 -0
  40. package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +116 -44
  41. package/corpus/templates/assets/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  42. package/corpus/templates/assets/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  43. package/corpus/templates/assets/.agents/skills/workspace-conventions/SKILL.md +93 -0
  44. package/corpus/templates/assets/app/components/asset/AssetPreviewDialog.tsx +13 -5
  45. package/corpus/templates/assets/app/lib/asset-urls.ts +13 -0
  46. package/corpus/templates/assets/app/routes/asset.$id.tsx +16 -6
  47. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +1 -0
  48. package/corpus/templates/assets/app/routes/library.tsx +336 -78
  49. package/corpus/templates/assets/shared/api.ts +1 -1
  50. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +3 -2
  51. package/corpus/templates/brain/.agents/skills/brain/SKILL.md +8 -6
  52. package/corpus/templates/brain/.agents/skills/context-awareness/SKILL.md +206 -0
  53. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +73 -80
  54. package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +7 -0
  55. package/corpus/templates/brain/.agents/skills/portability/SKILL.md +107 -0
  56. package/corpus/templates/brain/.agents/skills/secrets/SKILL.md +339 -0
  57. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +3 -3
  58. package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +1 -1
  59. package/corpus/templates/brain/.agents/skills/sharing/SKILL.md +1 -0
  60. package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +116 -44
  61. package/corpus/templates/brain/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  62. package/corpus/templates/brain/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  63. package/corpus/templates/brain/.agents/skills/workspace-conventions/SKILL.md +93 -0
  64. package/corpus/templates/brain/AGENTS.md +2 -1
  65. package/corpus/templates/brain/actions/ask-brain.ts +19 -16
  66. package/corpus/templates/brain/actions/create-source.ts +11 -2
  67. package/corpus/templates/brain/actions/import-markdown-files.ts +237 -0
  68. package/corpus/templates/brain/actions/resanitize-captures.ts +3 -1
  69. package/corpus/templates/brain/actions/test-slack-connection.ts +12 -3
  70. package/corpus/templates/brain/actions/update-source.ts +10 -1
  71. package/corpus/templates/brain/app/components/brain/Surface.tsx +1 -11
  72. package/corpus/templates/brain/app/i18n-data.ts +111 -0
  73. package/corpus/templates/brain/app/lib/brain.ts +23 -1
  74. package/corpus/templates/brain/app/routes/knowledge.tsx +0 -2
  75. package/corpus/templates/brain/app/routes/ops.tsx +0 -2
  76. package/corpus/templates/brain/app/routes/review.tsx +0 -2
  77. package/corpus/templates/brain/app/routes/search.tsx +0 -2
  78. package/corpus/templates/brain/app/routes/sources.tsx +354 -6
  79. package/corpus/templates/brain/server/lib/brain-response-guard.ts +63 -1
  80. package/corpus/templates/brain/server/lib/brain.ts +9 -6
  81. package/corpus/templates/brain/server/lib/connectors.ts +20 -6
  82. package/corpus/templates/brain/server/lib/search.ts +9 -1
  83. package/corpus/templates/brain/server/lib/source-credentials.ts +95 -57
  84. package/corpus/templates/brain/server/plugins/agent-chat.ts +5 -2
  85. package/corpus/templates/brain/server/plugins/auth.ts +2 -0
  86. package/corpus/templates/calendar/.agents/skills/adding-a-feature/SKILL.md +208 -0
  87. package/corpus/templates/calendar/.agents/skills/context-awareness/SKILL.md +206 -0
  88. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +73 -80
  89. package/corpus/templates/calendar/.agents/skills/portability/SKILL.md +107 -0
  90. package/corpus/templates/calendar/.agents/skills/secrets/SKILL.md +339 -0
  91. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +3 -3
  92. package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +1 -1
  93. package/corpus/templates/calendar/.agents/skills/sharing/SKILL.md +1 -0
  94. package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +116 -44
  95. package/corpus/templates/calendar/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  96. package/corpus/templates/calendar/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  97. package/corpus/templates/calendar/.agents/skills/workspace-conventions/SKILL.md +93 -0
  98. package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +1 -0
  99. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +3 -2
  100. package/corpus/templates/chat/.agents/skills/context-awareness/SKILL.md +206 -0
  101. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +73 -80
  102. package/corpus/templates/chat/.agents/skills/portability/SKILL.md +107 -0
  103. package/corpus/templates/chat/.agents/skills/secrets/SKILL.md +339 -0
  104. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +3 -3
  105. package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +1 -1
  106. package/corpus/templates/chat/.agents/skills/sharing/SKILL.md +1 -0
  107. package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +116 -44
  108. package/corpus/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  109. package/corpus/templates/chat/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  110. package/corpus/templates/chat/.agents/skills/workspace-conventions/SKILL.md +93 -0
  111. package/corpus/templates/chat/AGENTS.md +4 -5
  112. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +73 -80
  113. package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +1 -1
  114. package/corpus/templates/clips/.agents/skills/secrets/SKILL.md +339 -0
  115. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +3 -3
  116. package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +1 -1
  117. package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +116 -44
  118. package/corpus/templates/clips/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  119. package/corpus/templates/clips/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  120. package/corpus/templates/clips/.agents/skills/workspace-conventions/SKILL.md +93 -0
  121. package/corpus/templates/clips/actions/add-comment.ts +1 -2
  122. package/corpus/templates/clips/actions/delete-comment.ts +2 -0
  123. package/corpus/templates/clips/actions/get-recording-insights.ts +9 -8
  124. package/corpus/templates/clips/actions/get-recording-player-data.ts +4 -1
  125. package/corpus/templates/clips/actions/react-to-comment.ts +1 -1
  126. package/corpus/templates/clips/actions/react-to-recording.ts +1 -1
  127. package/corpus/templates/clips/actions/reply-to-comment.ts +1 -1
  128. package/corpus/templates/clips/actions/resolve-comment.ts +1 -2
  129. package/corpus/templates/clips/actions/update-comment.ts +1 -1
  130. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +1 -0
  131. package/corpus/templates/clips/app/components/editor/thumbnail-picker.tsx +59 -16
  132. package/corpus/templates/clips/app/components/player/comments-panel.tsx +88 -39
  133. package/corpus/templates/clips/app/components/player/share-dialog.tsx +12 -8
  134. package/corpus/templates/clips/app/components/player/timestamped-comment-button.tsx +3 -1
  135. package/corpus/templates/clips/app/components/player/video-player.tsx +1 -1
  136. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +2 -1
  137. package/corpus/templates/clips/app/i18n/en-US.ts +2 -1
  138. package/corpus/templates/clips/app/lib/public-meeting.ts +1 -1
  139. package/corpus/templates/clips/app/lib/thumbnail-capture.ts +71 -0
  140. package/corpus/templates/clips/app/lib/thumbnail-picker-state.ts +93 -0
  141. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +1 -1
  142. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +25 -19
  143. package/corpus/templates/clips/app/routes/share.$shareId.tsx +8 -0
  144. package/corpus/templates/clips/changelog/2026-07-23-meeting-recording-meters-and-dismissed-prompts.md +1 -1
  145. package/corpus/templates/clips/changelog/2026-08-11-clips-asks-to-take-notes-again-when-you-join-an-adhoc-zoom-o.md +6 -0
  146. package/corpus/templates/clips/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  147. package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +166 -14
  148. package/corpus/templates/clips/desktop/src-tauri/src/call_activity.rs +146 -0
  149. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -0
  150. package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +2 -122
  151. package/corpus/templates/clips/server/lib/recording-page-access.ts +6 -1
  152. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +5 -0
  153. package/corpus/templates/clips/shared/share-meta.ts +19 -3
  154. package/corpus/templates/content/.agents/skills/adding-a-feature/SKILL.md +208 -0
  155. package/corpus/templates/content/.agents/skills/context-awareness/SKILL.md +206 -0
  156. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +73 -80
  157. package/corpus/templates/content/.agents/skills/portability/SKILL.md +107 -0
  158. package/corpus/templates/content/.agents/skills/secrets/SKILL.md +339 -0
  159. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +3 -3
  160. package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +1 -1
  161. package/corpus/templates/content/.agents/skills/sharing/SKILL.md +1 -0
  162. package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +116 -44
  163. package/corpus/templates/content/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  164. package/corpus/templates/content/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  165. package/corpus/templates/content/.agents/skills/workspace-conventions/SKILL.md +93 -0
  166. package/corpus/templates/content/actions/_database-utils.ts +10 -0
  167. package/corpus/templates/content/actions/add-comment.ts +1 -1
  168. package/corpus/templates/content/actions/attach-content-database-source.ts +158 -61
  169. package/corpus/templates/content/actions/create-document.ts +1 -0
  170. package/corpus/templates/content/actions/delete-comment.ts +1 -1
  171. package/corpus/templates/content/actions/get-document.ts +9 -1
  172. package/corpus/templates/content/actions/import-content-source.ts +8 -0
  173. package/corpus/templates/content/actions/list-documents.ts +10 -1
  174. package/corpus/templates/content/actions/update-comment.ts +1 -1
  175. package/corpus/templates/content/actions/update-document.ts +11 -0
  176. package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +52 -29
  177. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +13 -8
  178. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +62 -2
  179. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +163 -53
  180. package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +16 -0
  181. package/corpus/templates/content/app/components/editor/database/settings.tsx +22 -13
  182. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +7 -7
  183. package/corpus/templates/content/app/hooks/use-documents.ts +2 -0
  184. package/corpus/templates/content/app/i18n-data.ts +10 -0
  185. package/corpus/templates/content/app/root.tsx +1 -21
  186. package/corpus/templates/content/changelog/2026-08-05-connect-sources-from-add-column.md +6 -0
  187. package/corpus/templates/content/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  188. package/corpus/templates/content/shared/api.ts +7 -1
  189. package/corpus/templates/crm/.agents/skills/actions/SKILL.md +146 -0
  190. package/corpus/templates/crm/.agents/skills/actions/references/action-fields.md +136 -0
  191. package/corpus/templates/crm/.agents/skills/actions/references/examples.md +94 -0
  192. package/corpus/templates/crm/.agents/skills/actions/references/provider-apis.md +95 -0
  193. package/corpus/templates/crm/.agents/skills/adding-a-feature/SKILL.md +208 -0
  194. package/corpus/templates/crm/.agents/skills/context-awareness/SKILL.md +206 -0
  195. package/corpus/templates/crm/.agents/skills/delegate-to-agent/SKILL.md +289 -0
  196. package/corpus/templates/crm/.agents/skills/frontend-design/SKILL.md +296 -0
  197. package/corpus/templates/crm/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  198. package/corpus/templates/crm/.agents/skills/portability/SKILL.md +107 -0
  199. package/corpus/templates/crm/.agents/skills/real-time-sync/SKILL.md +232 -0
  200. package/corpus/templates/crm/.agents/skills/secrets/SKILL.md +339 -0
  201. package/corpus/templates/crm/.agents/skills/security/SKILL.md +324 -0
  202. package/corpus/templates/crm/.agents/skills/self-modifying-code/SKILL.md +123 -0
  203. package/corpus/templates/crm/.agents/skills/shadcn-ui/SKILL.md +123 -0
  204. package/corpus/templates/crm/.agents/skills/sharing/SKILL.md +1 -0
  205. package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +116 -44
  206. package/corpus/templates/crm/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  207. package/corpus/templates/crm/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  208. package/corpus/templates/crm/.agents/skills/workspace-conventions/SKILL.md +93 -0
  209. package/corpus/templates/design/.agents/skills/adding-a-feature/SKILL.md +208 -0
  210. package/corpus/templates/design/.agents/skills/context-awareness/SKILL.md +206 -0
  211. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +73 -80
  212. package/corpus/templates/design/.agents/skills/portability/SKILL.md +107 -0
  213. package/corpus/templates/design/.agents/skills/real-time-sync/SKILL.md +232 -0
  214. package/corpus/templates/design/.agents/skills/secrets/SKILL.md +339 -0
  215. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +3 -3
  216. package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +1 -1
  217. package/corpus/templates/design/.agents/skills/sharing/SKILL.md +1 -0
  218. package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +116 -44
  219. package/corpus/templates/design/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  220. package/corpus/templates/design/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  221. package/corpus/templates/design/.agents/skills/workspace-conventions/SKILL.md +93 -0
  222. package/corpus/templates/design/actions/index-design-system-with-builder.ts +16 -2
  223. package/corpus/templates/design/app/components/design-system/ProductionDesignSystemShowcase.tsx +6 -18
  224. package/corpus/templates/design/app/i18n/en-US.ts +1 -1
  225. package/corpus/templates/design/app/i18n-data.ts +40 -0
  226. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +153 -131
  227. package/corpus/templates/design/app/pages/DesignSystems.tsx +7 -61
  228. package/corpus/templates/design/app/pages/Present.tsx +8 -2
  229. package/corpus/templates/design/app/pages/Templates.tsx +1 -0
  230. package/corpus/templates/design/app/pages/design-editor/tool-state.ts +4 -1
  231. package/corpus/templates/design/app/pages/design-editor/types.ts +6 -1
  232. package/corpus/templates/design/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  233. package/corpus/templates/dispatch/.agents/skills/adding-a-feature/SKILL.md +208 -0
  234. package/corpus/templates/dispatch/.agents/skills/context-awareness/SKILL.md +206 -0
  235. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +73 -80
  236. package/corpus/templates/dispatch/.agents/skills/portability/SKILL.md +107 -0
  237. package/corpus/templates/dispatch/.agents/skills/real-time-sync/SKILL.md +232 -0
  238. package/corpus/templates/dispatch/.agents/skills/secrets/SKILL.md +339 -0
  239. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +3 -3
  240. package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +1 -1
  241. package/corpus/templates/dispatch/.agents/skills/sharing/SKILL.md +1 -0
  242. package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +116 -44
  243. package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  244. package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  245. package/corpus/templates/dispatch/.agents/skills/workspace-conventions/SKILL.md +93 -0
  246. package/corpus/templates/dispatch/actions/apply-workspace-connection-setup.ts +97 -15
  247. package/corpus/templates/dispatch/actions/connection-permissions.ts +77 -0
  248. package/corpus/templates/dispatch/actions/delete-workspace-connection.ts +12 -2
  249. package/corpus/templates/dispatch/actions/list-workspace-user-groups.ts +19 -0
  250. package/corpus/templates/dispatch/actions/plan-workspace-connection-setup.ts +9 -2
  251. package/corpus/templates/dispatch/actions/set-workspace-connection-grant.ts +21 -2
  252. package/corpus/templates/dispatch/actions/upsert-workspace-connection.ts +66 -1
  253. package/corpus/templates/dispatch/actions/upsert-workspace-user-group.ts +27 -0
  254. package/corpus/templates/dispatch/app/chat-first-pages.ts +84 -0
  255. package/corpus/templates/dispatch/app/i18n-data.ts +3989 -3527
  256. package/corpus/templates/dispatch/app/routes/integrations.tsx +1568 -685
  257. package/corpus/templates/dispatch/app/routes/settings.tsx +14 -9
  258. package/corpus/templates/dispatch/changelog/2026-08-12-search-and-pin-workspace-apps-from-the-app-catalog.md +6 -0
  259. package/corpus/templates/dispatch/changelog/2026-08-12-workspace-integration-access-now-shows-exactly-which-apps-ca.md +6 -0
  260. package/corpus/templates/dispatch/server/lib/app-roles.ts +5 -0
  261. package/corpus/templates/dispatch/shared/app-roles.ts +1 -0
  262. package/corpus/templates/factory/.agents/skills/adding-a-feature/SKILL.md +3 -2
  263. package/corpus/templates/factory/.agents/skills/context-awareness/SKILL.md +206 -0
  264. package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +73 -80
  265. package/corpus/templates/factory/.agents/skills/portability/SKILL.md +107 -0
  266. package/corpus/templates/factory/.agents/skills/secrets/SKILL.md +339 -0
  267. package/corpus/templates/factory/.agents/skills/self-modifying-code/SKILL.md +3 -3
  268. package/corpus/templates/factory/.agents/skills/shadcn-ui/SKILL.md +1 -1
  269. package/corpus/templates/factory/.agents/skills/sharing/SKILL.md +1 -0
  270. package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +116 -44
  271. package/corpus/templates/factory/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  272. package/corpus/templates/factory/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  273. package/corpus/templates/factory/.agents/skills/workspace-conventions/SKILL.md +93 -0
  274. package/corpus/templates/factory/AGENTS.md +10 -1
  275. package/corpus/templates/factory/README.md +18 -7
  276. package/corpus/templates/factory/actions/list-triage-items.ts +10 -4
  277. package/corpus/templates/factory/actions/poll-github-sources.ts +53 -14
  278. package/corpus/templates/factory/actions/poll-sentry-errors.ts +31 -13
  279. package/corpus/templates/factory/actions/poll-slack-channel.ts +41 -5
  280. package/corpus/templates/factory/actions/provider-api-catalog.ts +13 -0
  281. package/corpus/templates/factory/actions/provider-api-docs.ts +11 -0
  282. package/corpus/templates/factory/actions/provider-api-request.ts +17 -0
  283. package/corpus/templates/factory/actions/save-triage-config.ts +87 -38
  284. package/corpus/templates/factory/app/components/factory/FactoryAuditView.tsx +14 -12
  285. package/corpus/templates/factory/app/components/factory/FactoryCanvas.tsx +60 -77
  286. package/corpus/templates/factory/app/components/factory/FactoryInspector.tsx +66 -125
  287. package/corpus/templates/factory/app/components/layout/Header.tsx +1 -0
  288. package/corpus/templates/factory/app/components/layout/Layout.tsx +8 -3
  289. package/corpus/templates/factory/app/components/layout/Sidebar.tsx +9 -5
  290. package/corpus/templates/factory/app/components/ui/input.tsx +15 -1
  291. package/corpus/templates/factory/app/components/ui/popover.tsx +1 -0
  292. package/corpus/templates/factory/app/components/ui/switch.tsx +1 -0
  293. package/corpus/templates/factory/app/components/ui/textarea.tsx +20 -1
  294. package/corpus/templates/factory/app/hooks/use-navigation-state.ts +5 -3
  295. package/corpus/templates/factory/app/i18n/en-US.ts +17 -0
  296. package/corpus/templates/factory/app/routes/_index.tsx +5 -87
  297. package/corpus/templates/factory/app/routes/chat.$threadId.tsx +1 -1
  298. package/corpus/templates/factory/app/routes/chat.tsx +91 -0
  299. package/corpus/templates/factory/app/routes/factory.tsx +554 -427
  300. package/corpus/templates/factory/app/routes/settings.tsx +1 -1
  301. package/corpus/templates/factory/server/connectors/credentials.ts +25 -0
  302. package/corpus/templates/factory/server/lib/provider-api.ts +34 -0
  303. package/corpus/templates/factory/server/plugins/agent-chat.ts +15 -3
  304. package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +96 -24
  305. package/corpus/templates/factory/server/triage/review-state.ts +33 -0
  306. package/corpus/templates/factory/server/triage/slack-poller.ts +1 -0
  307. package/corpus/templates/forms/.agents/skills/adding-a-feature/SKILL.md +208 -0
  308. package/corpus/templates/forms/.agents/skills/context-awareness/SKILL.md +206 -0
  309. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +73 -80
  310. package/corpus/templates/forms/.agents/skills/portability/SKILL.md +107 -0
  311. package/corpus/templates/forms/.agents/skills/secrets/SKILL.md +339 -0
  312. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +3 -3
  313. package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +1 -1
  314. package/corpus/templates/forms/.agents/skills/sharing/SKILL.md +1 -0
  315. package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +116 -44
  316. package/corpus/templates/forms/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  317. package/corpus/templates/forms/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  318. package/corpus/templates/forms/.agents/skills/workspace-conventions/SKILL.md +93 -0
  319. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +1 -0
  320. package/corpus/templates/forms/shared/types.ts +1 -1
  321. package/corpus/templates/macros/.agents/skills/adding-a-feature/SKILL.md +208 -0
  322. package/corpus/templates/macros/.agents/skills/context-awareness/SKILL.md +206 -0
  323. package/corpus/templates/macros/.agents/skills/delegate-to-agent/SKILL.md +289 -0
  324. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +73 -80
  325. package/corpus/templates/macros/.agents/skills/portability/SKILL.md +107 -0
  326. package/corpus/templates/macros/.agents/skills/real-time-sync/SKILL.md +232 -0
  327. package/corpus/templates/macros/.agents/skills/secrets/SKILL.md +339 -0
  328. package/corpus/templates/macros/.agents/skills/self-modifying-code/SKILL.md +123 -0
  329. package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +1 -1
  330. package/corpus/templates/macros/.agents/skills/sharing/SKILL.md +1 -0
  331. package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +116 -44
  332. package/corpus/templates/macros/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  333. package/corpus/templates/macros/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  334. package/corpus/templates/macros/.agents/skills/workspace-conventions/SKILL.md +93 -0
  335. package/corpus/templates/mail/.agents/skills/adding-a-feature/SKILL.md +208 -0
  336. package/corpus/templates/mail/.agents/skills/context-awareness/SKILL.md +206 -0
  337. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +73 -80
  338. package/corpus/templates/mail/.agents/skills/portability/SKILL.md +107 -0
  339. package/corpus/templates/mail/.agents/skills/secrets/SKILL.md +339 -0
  340. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +3 -3
  341. package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +1 -1
  342. package/corpus/templates/mail/.agents/skills/sharing/SKILL.md +1 -0
  343. package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +116 -44
  344. package/corpus/templates/mail/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  345. package/corpus/templates/mail/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  346. package/corpus/templates/mail/.agents/skills/workspace-conventions/SKILL.md +93 -0
  347. package/corpus/templates/mail/actions/send-email.ts +9 -0
  348. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +4 -4
  349. package/corpus/templates/mail/changelog/2026-08-12-agent-sent-messages-appear-immediately.md +6 -0
  350. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +3 -2
  351. package/corpus/templates/plan/.agents/skills/context-awareness/SKILL.md +206 -0
  352. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +73 -80
  353. package/corpus/templates/plan/.agents/skills/portability/SKILL.md +107 -0
  354. package/corpus/templates/plan/.agents/skills/secrets/SKILL.md +339 -0
  355. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +3 -3
  356. package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +1 -1
  357. package/corpus/templates/plan/.agents/skills/sharing/SKILL.md +1 -0
  358. package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +116 -44
  359. package/corpus/templates/plan/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  360. package/corpus/templates/plan/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  361. package/corpus/templates/plan/.agents/skills/workspace-conventions/SKILL.md +93 -0
  362. package/corpus/templates/plan/actions/delete-plan-comment.ts +6 -0
  363. package/corpus/templates/plan/actions/reply-to-plan-comment.ts +7 -1
  364. package/corpus/templates/plan/actions/resolve-plan-comment.ts +7 -1
  365. package/corpus/templates/plan/actions/update-visual-plan.ts +6 -0
  366. package/corpus/templates/plan/app/hooks/use-plans.ts +1 -1
  367. package/corpus/templates/plan/app/pages/PlansPage.tsx +51 -23
  368. package/corpus/templates/plan/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  369. package/corpus/templates/plan/server/plans.ts +2 -2
  370. package/corpus/templates/plan/shared/types.ts +1 -1
  371. package/corpus/templates/slides/.agents/skills/adding-a-feature/SKILL.md +208 -0
  372. package/corpus/templates/slides/.agents/skills/context-awareness/SKILL.md +206 -0
  373. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +6 -0
  374. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +73 -80
  375. package/corpus/templates/slides/.agents/skills/portability/SKILL.md +107 -0
  376. package/corpus/templates/slides/.agents/skills/real-time-sync/SKILL.md +232 -0
  377. package/corpus/templates/slides/.agents/skills/secrets/SKILL.md +339 -0
  378. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +3 -3
  379. package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +1 -1
  380. package/corpus/templates/slides/.agents/skills/sharing/SKILL.md +1 -0
  381. package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +116 -44
  382. package/corpus/templates/slides/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  383. package/corpus/templates/slides/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  384. package/corpus/templates/slides/.agents/skills/workspace-conventions/SKILL.md +93 -0
  385. package/corpus/templates/slides/AGENTS.md +4 -0
  386. package/corpus/templates/slides/actions/add-slide-comment.ts +1 -1
  387. package/corpus/templates/slides/actions/delete-slide-comment.ts +1 -1
  388. package/corpus/templates/slides/actions/get-layout-overflows.ts +67 -2
  389. package/corpus/templates/slides/actions/update-slide-comment.ts +1 -1
  390. package/corpus/templates/slides/actions/view-screen.ts +76 -26
  391. package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +30 -8
  392. package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +2 -1
  393. package/corpus/templates/slides/app/components/editor/AlignmentGuides.tsx +75 -0
  394. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +80 -80
  395. package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +125 -10
  396. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +244 -9
  397. package/corpus/templates/slides/app/components/editor/SlideOverflowWarning.tsx +1 -1
  398. package/corpus/templates/slides/app/components/editor/canvas-interactions/slides-canvas-adapter.ts +3 -3
  399. package/corpus/templates/slides/app/components/editor/slide-object-interactions.ts +218 -0
  400. package/corpus/templates/slides/app/context/DeckContext.tsx +56 -30
  401. package/corpus/templates/slides/app/hooks/use-deck-role.ts +13 -5
  402. package/corpus/templates/slides/app/hooks/use-design-systems.ts +1 -1
  403. package/corpus/templates/slides/app/i18n/en-US.ts +6 -2
  404. package/corpus/templates/slides/app/lib/create-deck-generation.ts +1 -0
  405. package/corpus/templates/slides/app/lib/pending-deck-changes.ts +32 -0
  406. package/corpus/templates/slides/app/pages/DeckEditor.tsx +85 -4
  407. package/corpus/templates/slides/app/pages/Index.tsx +65 -66
  408. package/corpus/templates/slides/changelog/2026-08-12-viewers-are-read-only-and-commenters-can-comment.md +6 -0
  409. package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +3 -2
  410. package/corpus/templates/tasks/.agents/skills/context-awareness/SKILL.md +206 -0
  411. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +73 -80
  412. package/corpus/templates/tasks/.agents/skills/portability/SKILL.md +107 -0
  413. package/corpus/templates/tasks/.agents/skills/secrets/SKILL.md +339 -0
  414. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +3 -3
  415. package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +1 -1
  416. package/corpus/templates/tasks/.agents/skills/sharing/SKILL.md +1 -0
  417. package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +116 -44
  418. package/corpus/templates/tasks/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  419. package/corpus/templates/tasks/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  420. package/corpus/templates/tasks/.agents/skills/workspace-conventions/SKILL.md +93 -0
  421. package/corpus/templates/tasks/app/components/custom-fields/FieldsPage.tsx +1 -4
  422. package/corpus/templates/tasks/app/components/inbox/InboxList.tsx +0 -1
  423. package/corpus/templates/tasks/app/components/inbox/InboxListPage.tsx +0 -1
  424. package/corpus/templates/tasks/app/components/shared/ListViewHeader.tsx +0 -3
  425. package/corpus/templates/tasks/app/components/shared/PageHeader.tsx +1 -4
  426. package/corpus/templates/tasks/app/components/tasks/TaskList.tsx +0 -1
  427. package/corpus/templates/tasks/app/components/tasks/TaskListPage.tsx +0 -1
  428. package/dist/agent/engine/ai-sdk-engine.js +5 -0
  429. package/dist/agent/engine/anthropic-engine.js +8 -0
  430. package/dist/agent/engine/registry.js +24 -19
  431. package/dist/agent/engine/translate-anthropic.js +16 -1
  432. package/dist/automations/service.d.ts +2 -0
  433. package/dist/automations/service.js +5 -1
  434. package/dist/chat-threads/schema.d.ts +2 -2
  435. package/dist/cli/changelog.js +21 -4
  436. package/dist/cli/create.d.ts +12 -1
  437. package/dist/cli/create.js +99 -11
  438. package/dist/cli/index.js +6 -6
  439. package/dist/cli/process.d.ts +7 -0
  440. package/dist/cli/process.js +12 -0
  441. package/dist/cli/workspace-skill-policy.d.ts +15 -0
  442. package/dist/cli/workspace-skill-policy.js +62 -0
  443. package/dist/cli/workspacify.js +36 -0
  444. package/dist/client/AgentPanel.d.ts +14 -2
  445. package/dist/client/AgentPanel.js +40 -24
  446. package/dist/client/AssistantChat.js +90 -182
  447. package/dist/client/FeedbackButton.js +15 -2
  448. package/dist/client/RouteTransitionIndicator.d.ts +14 -2
  449. package/dist/client/RouteTransitionIndicator.js +16 -5
  450. package/dist/client/agent-page/AgentTabsPage.js +19 -6
  451. package/dist/client/app-config.d.ts +3 -0
  452. package/dist/client/app-config.js +6 -0
  453. package/dist/client/app-providers.js +2 -1
  454. package/dist/client/changelog/Changelog.d.ts +2 -1
  455. package/dist/client/changelog/Changelog.js +7 -5
  456. package/dist/client/chat/markdown-renderer.d.ts +3 -1
  457. package/dist/client/chat/markdown-renderer.js +24 -24
  458. package/dist/client/chat/message-components.d.ts +23 -0
  459. package/dist/client/chat/message-components.js +27 -44
  460. package/dist/client/chat/tool-call-display.d.ts +2 -2
  461. package/dist/client/chat/tool-call-display.js +6 -3
  462. package/dist/client/chat-first/app-open-actions.d.ts +28 -0
  463. package/dist/client/chat-first/app-open-actions.js +25 -0
  464. package/dist/client/chat-first/index.d.ts +1 -0
  465. package/dist/client/chat-first/index.js +1 -0
  466. package/dist/client/chat-first/primary-nav.d.ts +2 -1
  467. package/dist/client/chat-first/primary-nav.js +12 -5
  468. package/dist/client/conversation/use-near-bottom-autoscroll.d.ts +14 -0
  469. package/dist/client/conversation/use-near-bottom-autoscroll.js +14 -0
  470. package/dist/client/error-format.js +32 -3
  471. package/dist/client/extensions/EmbeddedExtension.js +1 -0
  472. package/dist/client/extensions/ExtensionViewer.js +3 -1
  473. package/dist/client/extensions/InlineExtensionFrame.js +1 -0
  474. package/dist/client/extensions/iframe-bridge.d.ts +3 -2
  475. package/dist/client/extensions/iframe-bridge.js +4 -2
  476. package/dist/client/i18n.js +28 -5
  477. package/dist/client/integrations/IntegrationConnectionChoice.d.ts +11 -0
  478. package/dist/client/integrations/IntegrationConnectionChoice.js +6 -0
  479. package/dist/client/integrations/IntegrationGrid.d.ts +23 -0
  480. package/dist/client/integrations/IntegrationGrid.js +12 -0
  481. package/dist/client/integrations/IntegrationsPanel.js +92 -26
  482. package/dist/client/integrations/index.d.ts +2 -0
  483. package/dist/client/integrations/index.js +2 -0
  484. package/dist/client/onboarding/FirstRunOnboarding.d.ts +3 -1
  485. package/dist/client/onboarding/FirstRunOnboarding.js +26 -16
  486. package/dist/client/onboarding/first-run-enabled.js +1 -5
  487. package/dist/client/onboarding/first-run-startup-gate.d.ts +5 -0
  488. package/dist/client/onboarding/first-run-startup-gate.js +51 -0
  489. package/dist/client/onboarding/first-run-status.d.ts +7 -0
  490. package/dist/client/onboarding/first-run-status.js +26 -0
  491. package/dist/client/onboarding/index.d.ts +3 -0
  492. package/dist/client/onboarding/index.js +3 -0
  493. package/dist/client/onboarding/use-onboarding.d.ts +1 -0
  494. package/dist/client/onboarding/use-onboarding.js +13 -11
  495. package/dist/client/org/TeamPage.js +174 -28
  496. package/dist/client/resources/McpConnectionSuggestion.js +29 -72
  497. package/dist/client/resources/McpIntegrationDialog.d.ts +3 -1
  498. package/dist/client/resources/McpIntegrationDialog.js +176 -51
  499. package/dist/client/resources/index.d.ts +1 -0
  500. package/dist/client/resources/index.js +1 -0
  501. package/dist/client/resources/mcp-integration-catalog.d.ts +8 -0
  502. package/dist/client/resources/mcp-integration-catalog.js +28 -0
  503. package/dist/client/settings/ExtensionsSettingsContent.js +2 -2
  504. package/dist/client/settings/SettingsPanel.d.ts +6 -0
  505. package/dist/client/settings/SettingsPanel.js +21 -8
  506. package/dist/client/settings/SettingsRow.d.ts +3 -1
  507. package/dist/client/settings/SettingsRow.js +4 -2
  508. package/dist/client/settings/SettingsSkeleton.js +5 -3
  509. package/dist/client/settings/SettingsTabsPage.js +2 -2
  510. package/dist/client/settings/UsageSection.d.ts +4 -1
  511. package/dist/client/settings/UsageSection.js +187 -93
  512. package/dist/client/settings/agent-settings-search.js +6 -2
  513. package/dist/client/setup-connections/useBuilderConnectCardController.d.ts +1 -1
  514. package/dist/client/setup-connections/useBuilderConnectCardController.js +2 -2
  515. package/dist/client/sharing/ShareButton.d.ts +2 -0
  516. package/dist/client/sharing/ShareButton.js +9 -2
  517. package/dist/client/sharing/ShareDialog.js +4 -1
  518. package/dist/client/sharing/useShareButtonController.d.ts +2 -1
  519. package/dist/client/sharing/useShareButtonController.js +8 -0
  520. package/dist/client/sharing/useShareDialogController.d.ts +1 -1
  521. package/dist/client/sharing/useShareDialogController.js +2 -1
  522. package/dist/collab/struct-routes.d.ts +1 -1
  523. package/dist/config.d.ts +13 -0
  524. package/dist/config.js +53 -0
  525. package/dist/dashboard-storage/schema.d.ts +2 -2
  526. package/dist/data-programs/schema.d.ts +2 -2
  527. package/dist/extensions/actions.js +2 -1
  528. package/dist/extensions/html-shell.d.ts +2 -2
  529. package/dist/extensions/routes.js +4 -1
  530. package/dist/extensions/schema.d.ts +2 -2
  531. package/dist/file-upload/pre-upload-attachments.js +1 -1
  532. package/dist/framework-tools.js +3 -0
  533. package/dist/history/types.d.ts +1 -1
  534. package/dist/index.d.ts +2 -1
  535. package/dist/index.js +2 -1
  536. package/dist/jobs/background-automation-runner.d.ts +1 -0
  537. package/dist/jobs/background-automation-runner.js +4 -2
  538. package/dist/jobs/frontmatter.d.ts +4 -0
  539. package/dist/jobs/frontmatter.js +16 -0
  540. package/dist/jobs/run-history.js +1 -1
  541. package/dist/jobs/tools.js +9 -5
  542. package/dist/localization/default-messages.d.ts +27 -0
  543. package/dist/localization/default-messages.js +28 -1
  544. package/dist/notifications/routes.d.ts +5 -5
  545. package/dist/observability/routes.d.ts +3 -3
  546. package/dist/onboarding/plugin.js +17 -2
  547. package/dist/org/context.js +16 -0
  548. package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
  549. package/dist/provider-api/actions/provider-api.d.ts +8 -8
  550. package/dist/review/actions/create-review-comment.js +1 -1
  551. package/dist/review/actions/delete-review-comment.js +4 -1
  552. package/dist/review/actions/list-review-comments.js +4 -2
  553. package/dist/review/actions/reply-review-comment.js +1 -1
  554. package/dist/review/types.d.ts +1 -1
  555. package/dist/secrets/routes.d.ts +9 -9
  556. package/dist/server/action-discovery.js +29 -0
  557. package/dist/server/agent-chat/plugin-options.d.ts +7 -0
  558. package/dist/server/agent-chat-plugin.d.ts +2 -0
  559. package/dist/server/agent-chat-plugin.js +12 -4
  560. package/dist/server/builder-browser.js +31 -0
  561. package/dist/server/onboarding-html.js +1 -1
  562. package/dist/server/transcribe-voice.d.ts +1 -1
  563. package/dist/server/workspace-provider-oauth.js +38 -26
  564. package/dist/setup-connections/index.d.ts +1 -1
  565. package/dist/setup-connections/index.js +1 -1
  566. package/dist/shared/first-run-onboarding.d.ts +6 -0
  567. package/dist/shared/first-run-onboarding.js +6 -0
  568. package/dist/sharing/access.d.ts +1 -1
  569. package/dist/sharing/access.js +4 -1
  570. package/dist/sharing/actions/share-resource.d.ts +1 -1
  571. package/dist/sharing/actions/share-resource.js +2 -2
  572. package/dist/sharing/registry.d.ts +2 -2
  573. package/dist/sharing/schema.d.ts +5 -5
  574. package/dist/sharing/schema.js +9 -6
  575. package/dist/styles/agent-native.css +21 -0
  576. package/dist/styles/chat-history-list.css +1 -1
  577. package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +3 -2
  578. package/dist/templates/chat/.agents/skills/context-awareness/SKILL.md +206 -0
  579. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +73 -80
  580. package/dist/templates/chat/.agents/skills/portability/SKILL.md +107 -0
  581. package/dist/templates/chat/.agents/skills/secrets/SKILL.md +339 -0
  582. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +3 -3
  583. package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +1 -1
  584. package/dist/templates/chat/.agents/skills/sharing/SKILL.md +1 -0
  585. package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +116 -44
  586. package/dist/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  587. package/dist/templates/chat/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  588. package/dist/templates/chat/.agents/skills/workspace-conventions/SKILL.md +93 -0
  589. package/dist/templates/chat/AGENTS.md +4 -5
  590. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +3 -2
  591. package/dist/templates/default/.agents/skills/context-awareness/SKILL.md +206 -0
  592. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +73 -80
  593. package/dist/templates/default/.agents/skills/portability/SKILL.md +107 -0
  594. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +3 -3
  595. package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +1 -1
  596. package/dist/templates/default/.agents/skills/sharing/SKILL.md +233 -0
  597. package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +116 -44
  598. package/dist/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  599. package/dist/templates/default/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  600. package/dist/templates/default/.agents/skills/workspace-conventions/SKILL.md +93 -0
  601. package/dist/templates/default/AGENTS.md +17 -2
  602. package/dist/templates/default/agent-native.config.ts +6 -0
  603. package/dist/templates/default/app/i18n/ar-SA.ts +2 -0
  604. package/dist/templates/default/app/i18n/de-DE.ts +2 -0
  605. package/dist/templates/default/app/i18n/en-US.ts +3 -1
  606. package/dist/templates/default/app/i18n/es-ES.ts +2 -0
  607. package/dist/templates/default/app/i18n/fr-FR.ts +2 -0
  608. package/dist/templates/default/app/i18n/hi-IN.ts +2 -0
  609. package/dist/templates/default/app/i18n/ja-JP.ts +2 -0
  610. package/dist/templates/default/app/i18n/ko-KR.ts +2 -0
  611. package/dist/templates/default/app/i18n/pt-BR.ts +2 -0
  612. package/dist/templates/default/app/i18n/zh-CN.ts +2 -0
  613. package/dist/templates/default/app/i18n/zh-TW.ts +2 -0
  614. package/dist/templates/headless/.agents/skills/delegate-to-agent/SKILL.md +289 -0
  615. package/dist/templates/headless/.agents/skills/security/SKILL.md +324 -0
  616. package/dist/templates/headless/.agents/skills/storing-data/SKILL.md +178 -0
  617. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +3 -2
  618. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +73 -80
  619. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +3 -3
  620. package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +1 -1
  621. package/dist/templates/workspace-core/.agents/skills/sharing/SKILL.md +1 -0
  622. package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +116 -44
  623. package/dist/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  624. package/dist/templates/workspace-core/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  625. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +3 -2
  626. package/dist/templates/workspace-core/AGENTS.md +9 -3
  627. package/dist/templates/workspace-root/AGENTS.md +26 -1
  628. package/dist/templates/workspace-root/agent-native.config.ts +8 -0
  629. package/dist/triggers/actions.js +2 -2
  630. package/dist/usage/actions/get-usage-alerts.d.ts +5 -0
  631. package/dist/usage/actions/get-usage-alerts.js +16 -0
  632. package/dist/usage/actions/get-usage-metrics.d.ts +7 -0
  633. package/dist/usage/actions/get-usage-metrics.js +26 -0
  634. package/dist/usage/actions/manage-usage-alert.d.ts +14 -0
  635. package/dist/usage/actions/manage-usage-alert.js +48 -0
  636. package/dist/usage/alerts-store.d.ts +78 -0
  637. package/dist/usage/alerts-store.js +592 -0
  638. package/dist/usage/metrics-store.d.ts +95 -0
  639. package/dist/usage/metrics-store.js +386 -0
  640. package/dist/usage/store.js +10 -0
  641. package/dist/vite/action-types-plugin.js +28 -0
  642. package/dist/vite/agent-native-config-loader.d.ts +6 -0
  643. package/dist/vite/agent-native-config-loader.js +54 -2
  644. package/dist/vite/client.js +11 -5
  645. package/dist/workspace-connections/actions/bulk-update-workspace-user-groups.d.ts +6 -0
  646. package/dist/workspace-connections/actions/bulk-update-workspace-user-groups.js +24 -0
  647. package/dist/workspace-connections/actions/delete-workspace-user-group.d.ts +7 -0
  648. package/dist/workspace-connections/actions/delete-workspace-user-group.js +29 -0
  649. package/dist/workspace-connections/actions/list-workspace-user-groups.d.ts +2 -0
  650. package/dist/workspace-connections/actions/list-workspace-user-groups.js +13 -0
  651. package/dist/workspace-connections/actions/upsert-workspace-user-group.d.ts +6 -0
  652. package/dist/workspace-connections/actions/upsert-workspace-user-group.js +22 -0
  653. package/dist/workspace-connections/credential-key-aliases.d.ts +3 -0
  654. package/dist/workspace-connections/credential-key-aliases.js +31 -0
  655. package/dist/workspace-connections/credentials.js +1 -25
  656. package/dist/workspace-connections/groups.d.ts +32 -0
  657. package/dist/workspace-connections/groups.js +288 -0
  658. package/dist/workspace-connections/index.d.ts +3 -1
  659. package/dist/workspace-connections/index.js +3 -1
  660. package/dist/workspace-connections/store.d.ts +9 -0
  661. package/dist/workspace-connections/store.js +68 -8
  662. package/docs/content/components.mdx +2 -2
  663. package/docs/content/sharing.mdx +2 -1
  664. package/package.json +10 -2
  665. package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +3 -2
  666. package/src/templates/chat/.agents/skills/context-awareness/SKILL.md +206 -0
  667. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +73 -80
  668. package/src/templates/chat/.agents/skills/portability/SKILL.md +107 -0
  669. package/src/templates/chat/.agents/skills/secrets/SKILL.md +339 -0
  670. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +3 -3
  671. package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +1 -1
  672. package/src/templates/chat/.agents/skills/sharing/SKILL.md +1 -0
  673. package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +116 -44
  674. package/src/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  675. package/src/templates/chat/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  676. package/src/templates/chat/.agents/skills/workspace-conventions/SKILL.md +93 -0
  677. package/src/templates/chat/AGENTS.md +4 -5
  678. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +3 -2
  679. package/src/templates/default/.agents/skills/context-awareness/SKILL.md +206 -0
  680. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +73 -80
  681. package/src/templates/default/.agents/skills/portability/SKILL.md +107 -0
  682. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +3 -3
  683. package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +1 -1
  684. package/src/templates/default/.agents/skills/sharing/SKILL.md +233 -0
  685. package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +116 -44
  686. package/src/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  687. package/src/templates/default/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  688. package/src/templates/default/.agents/skills/workspace-conventions/SKILL.md +93 -0
  689. package/src/templates/default/AGENTS.md +17 -2
  690. package/src/templates/default/agent-native.config.ts +6 -0
  691. package/src/templates/default/app/i18n/ar-SA.ts +2 -0
  692. package/src/templates/default/app/i18n/de-DE.ts +2 -0
  693. package/src/templates/default/app/i18n/en-US.ts +3 -1
  694. package/src/templates/default/app/i18n/es-ES.ts +2 -0
  695. package/src/templates/default/app/i18n/fr-FR.ts +2 -0
  696. package/src/templates/default/app/i18n/hi-IN.ts +2 -0
  697. package/src/templates/default/app/i18n/ja-JP.ts +2 -0
  698. package/src/templates/default/app/i18n/ko-KR.ts +2 -0
  699. package/src/templates/default/app/i18n/pt-BR.ts +2 -0
  700. package/src/templates/default/app/i18n/zh-CN.ts +2 -0
  701. package/src/templates/default/app/i18n/zh-TW.ts +2 -0
  702. package/src/templates/headless/.agents/skills/delegate-to-agent/SKILL.md +289 -0
  703. package/src/templates/headless/.agents/skills/security/SKILL.md +324 -0
  704. package/src/templates/headless/.agents/skills/storing-data/SKILL.md +178 -0
  705. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +3 -2
  706. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +73 -80
  707. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +3 -3
  708. package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +1 -1
  709. package/src/templates/workspace-core/.agents/skills/sharing/SKILL.md +1 -0
  710. package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +116 -44
  711. package/src/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +9 -3
  712. package/src/templates/workspace-core/.agents/skills/turn-into-app/references/spreadsheet-source.md +148 -0
  713. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +3 -2
  714. package/src/templates/workspace-core/AGENTS.md +9 -3
  715. package/src/templates/workspace-root/AGENTS.md +26 -1
  716. package/src/templates/workspace-root/agent-native.config.ts +8 -0
  717. package/corpus/templates/analytics/.agents/skills/capture-learnings/SKILL.md +0 -89
  718. package/corpus/templates/analytics/.agents/skills/create-skill/SKILL.md +0 -195
  719. package/corpus/templates/analytics/.agents/skills/feature-flags/SKILL.md +0 -169
  720. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  721. package/corpus/templates/assets/.agents/skills/capture-learnings/SKILL.md +0 -89
  722. package/corpus/templates/assets/.agents/skills/create-skill/SKILL.md +0 -195
  723. package/corpus/templates/assets/.agents/skills/feature-flags/SKILL.md +0 -169
  724. package/corpus/templates/assets/.agents/skills/real-time-collab/SKILL.md +0 -392
  725. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  726. package/corpus/templates/brain/.agents/skills/capture-learnings/SKILL.md +0 -89
  727. package/corpus/templates/brain/.agents/skills/create-skill/SKILL.md +0 -195
  728. package/corpus/templates/brain/.agents/skills/feature-flags/SKILL.md +0 -169
  729. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  730. package/corpus/templates/calendar/.agents/skills/capture-learnings/SKILL.md +0 -89
  731. package/corpus/templates/calendar/.agents/skills/create-skill/SKILL.md +0 -195
  732. package/corpus/templates/calendar/.agents/skills/feature-flags/SKILL.md +0 -169
  733. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  734. package/corpus/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
  735. package/corpus/templates/chat/.agents/skills/create-skill/SKILL.md +0 -195
  736. package/corpus/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
  737. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  738. package/corpus/templates/clips/.agents/skills/capture-learnings/SKILL.md +0 -89
  739. package/corpus/templates/clips/.agents/skills/create-skill/SKILL.md +0 -195
  740. package/corpus/templates/clips/.agents/skills/feature-flags/SKILL.md +0 -169
  741. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  742. package/corpus/templates/content/.agents/skills/capture-learnings/SKILL.md +0 -89
  743. package/corpus/templates/content/.agents/skills/create-skill/SKILL.md +0 -195
  744. package/corpus/templates/content/.agents/skills/feature-flags/SKILL.md +0 -169
  745. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  746. package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +0 -169
  747. package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  748. package/corpus/templates/design/.agents/skills/capture-learnings/SKILL.md +0 -89
  749. package/corpus/templates/design/.agents/skills/create-skill/SKILL.md +0 -195
  750. package/corpus/templates/design/.agents/skills/feature-flags/SKILL.md +0 -169
  751. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  752. package/corpus/templates/dispatch/.agents/skills/capture-learnings/SKILL.md +0 -89
  753. package/corpus/templates/dispatch/.agents/skills/create-skill/SKILL.md +0 -195
  754. package/corpus/templates/dispatch/.agents/skills/feature-flags/SKILL.md +0 -169
  755. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  756. package/corpus/templates/factory/.agents/skills/capture-learnings/SKILL.md +0 -89
  757. package/corpus/templates/factory/.agents/skills/create-skill/SKILL.md +0 -195
  758. package/corpus/templates/factory/.agents/skills/feature-flags/SKILL.md +0 -169
  759. package/corpus/templates/factory/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  760. package/corpus/templates/forms/.agents/skills/capture-learnings/SKILL.md +0 -89
  761. package/corpus/templates/forms/.agents/skills/create-skill/SKILL.md +0 -195
  762. package/corpus/templates/forms/.agents/skills/feature-flags/SKILL.md +0 -169
  763. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  764. package/corpus/templates/macros/.agents/skills/feature-flags/SKILL.md +0 -169
  765. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  766. package/corpus/templates/mail/.agents/skills/capture-learnings/SKILL.md +0 -89
  767. package/corpus/templates/mail/.agents/skills/create-skill/SKILL.md +0 -195
  768. package/corpus/templates/mail/.agents/skills/feature-flags/SKILL.md +0 -169
  769. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  770. package/corpus/templates/plan/.agents/skills/capture-learnings/SKILL.md +0 -89
  771. package/corpus/templates/plan/.agents/skills/create-skill/SKILL.md +0 -195
  772. package/corpus/templates/plan/.agents/skills/feature-flags/SKILL.md +0 -169
  773. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  774. package/corpus/templates/slides/.agents/skills/capture-learnings/SKILL.md +0 -89
  775. package/corpus/templates/slides/.agents/skills/create-skill/SKILL.md +0 -195
  776. package/corpus/templates/slides/.agents/skills/feature-flags/SKILL.md +0 -169
  777. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  778. package/corpus/templates/tasks/.agents/skills/capture-learnings/SKILL.md +0 -89
  779. package/corpus/templates/tasks/.agents/skills/create-skill/SKILL.md +0 -195
  780. package/corpus/templates/tasks/.agents/skills/feature-flags/SKILL.md +0 -169
  781. package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  782. package/dist/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
  783. package/dist/templates/chat/.agents/skills/create-skill/SKILL.md +0 -195
  784. package/dist/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
  785. package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  786. package/dist/templates/default/.agents/skills/capture-learnings/SKILL.md +0 -89
  787. package/dist/templates/default/.agents/skills/create-skill/SKILL.md +0 -195
  788. package/dist/templates/default/.agents/skills/feature-flags/SKILL.md +0 -169
  789. package/dist/templates/default/.agents/skills/integration-webhooks/SKILL.md +0 -364
  790. package/dist/templates/default/.agents/skills/internationalization/SKILL.md +0 -82
  791. package/dist/templates/default/.agents/skills/onboarding/SKILL.md +0 -56
  792. package/dist/templates/default/.agents/skills/real-time-collab/SKILL.md +0 -392
  793. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  794. package/dist/templates/headless/.agents/skills/feature-flags/SKILL.md +0 -169
  795. package/dist/templates/headless/.agents/skills/integration-webhooks/SKILL.md +0 -364
  796. package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +0 -402
  797. package/dist/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +0 -4
  798. package/dist/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +0 -90
  799. package/dist/templates/headless/.agents/skills/turn-into-skill/SKILL.md +0 -112
  800. package/dist/templates/headless/.agents/skills/turn-into-skill/agents/openai.yaml +0 -4
  801. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  802. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +0 -411
  803. package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +0 -107
  804. package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +0 -176
  805. package/dist/templates/workspace-core/.agents/skills/agent-page/SKILL.md +0 -63
  806. package/dist/templates/workspace-core/.agents/skills/audit-log/SKILL.md +0 -96
  807. package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +0 -295
  808. package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +0 -242
  809. package/dist/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +0 -131
  810. package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +0 -89
  811. package/dist/templates/workspace-core/.agents/skills/changelog/SKILL.md +0 -114
  812. package/dist/templates/workspace-core/.agents/skills/client-methods/SKILL.md +0 -115
  813. package/dist/templates/workspace-core/.agents/skills/client-methods/references/legacy-client-fetch-audit-2026-06-03.md +0 -62
  814. package/dist/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +0 -87
  815. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +0 -139
  816. package/dist/templates/workspace-core/.agents/skills/context-xray/SKILL.md +0 -72
  817. package/dist/templates/workspace-core/.agents/skills/create-skill/SKILL.md +0 -195
  818. package/dist/templates/workspace-core/.agents/skills/data-programs/SKILL.md +0 -128
  819. package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +0 -219
  820. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +0 -533
  821. package/dist/templates/workspace-core/.agents/skills/extensions/references/api.md +0 -340
  822. package/dist/templates/workspace-core/.agents/skills/extensions/references/examples.md +0 -259
  823. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +0 -547
  824. package/dist/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +0 -157
  825. package/dist/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +0 -169
  826. package/dist/templates/workspace-core/.agents/skills/generative-ui/SKILL.md +0 -117
  827. package/dist/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +0 -170
  828. package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +0 -364
  829. package/dist/templates/workspace-core/.agents/skills/internationalization/SKILL.md +0 -82
  830. package/dist/templates/workspace-core/.agents/skills/mvp-followup/SKILL.md +0 -52
  831. package/dist/templates/workspace-core/.agents/skills/native-navigation/SKILL.md +0 -67
  832. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -329
  833. package/dist/templates/workspace-core/.agents/skills/onboarding/SKILL.md +0 -56
  834. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +0 -299
  835. package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +0 -333
  836. package/dist/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +0 -392
  837. package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +0 -74
  838. package/dist/templates/workspace-core/.agents/skills/reliable-mutations/SKILL.md +0 -70
  839. package/dist/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +0 -84
  840. package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +0 -278
  841. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  842. package/dist/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +0 -101
  843. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +0 -222
  844. package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +0 -363
  845. package/src/templates/chat/.agents/skills/capture-learnings/SKILL.md +0 -89
  846. package/src/templates/chat/.agents/skills/create-skill/SKILL.md +0 -195
  847. package/src/templates/chat/.agents/skills/feature-flags/SKILL.md +0 -169
  848. package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  849. package/src/templates/default/.agents/skills/capture-learnings/SKILL.md +0 -89
  850. package/src/templates/default/.agents/skills/create-skill/SKILL.md +0 -195
  851. package/src/templates/default/.agents/skills/feature-flags/SKILL.md +0 -169
  852. package/src/templates/default/.agents/skills/integration-webhooks/SKILL.md +0 -364
  853. package/src/templates/default/.agents/skills/internationalization/SKILL.md +0 -82
  854. package/src/templates/default/.agents/skills/onboarding/SKILL.md +0 -56
  855. package/src/templates/default/.agents/skills/real-time-collab/SKILL.md +0 -392
  856. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  857. package/src/templates/headless/.agents/skills/feature-flags/SKILL.md +0 -169
  858. package/src/templates/headless/.agents/skills/integration-webhooks/SKILL.md +0 -364
  859. package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +0 -402
  860. package/src/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +0 -4
  861. package/src/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +0 -90
  862. package/src/templates/headless/.agents/skills/turn-into-skill/SKILL.md +0 -112
  863. package/src/templates/headless/.agents/skills/turn-into-skill/agents/openai.yaml +0 -4
  864. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  865. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +0 -411
  866. package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +0 -107
  867. package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +0 -176
  868. package/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +0 -63
  869. package/src/templates/workspace-core/.agents/skills/audit-log/SKILL.md +0 -96
  870. package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +0 -295
  871. package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +0 -242
  872. package/src/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +0 -131
  873. package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +0 -89
  874. package/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +0 -114
  875. package/src/templates/workspace-core/.agents/skills/client-methods/SKILL.md +0 -115
  876. package/src/templates/workspace-core/.agents/skills/client-methods/references/legacy-client-fetch-audit-2026-06-03.md +0 -62
  877. package/src/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +0 -87
  878. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +0 -139
  879. package/src/templates/workspace-core/.agents/skills/context-xray/SKILL.md +0 -72
  880. package/src/templates/workspace-core/.agents/skills/create-skill/SKILL.md +0 -195
  881. package/src/templates/workspace-core/.agents/skills/data-programs/SKILL.md +0 -128
  882. package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +0 -219
  883. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +0 -533
  884. package/src/templates/workspace-core/.agents/skills/extensions/references/api.md +0 -340
  885. package/src/templates/workspace-core/.agents/skills/extensions/references/examples.md +0 -259
  886. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +0 -547
  887. package/src/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +0 -157
  888. package/src/templates/workspace-core/.agents/skills/feature-flags/SKILL.md +0 -169
  889. package/src/templates/workspace-core/.agents/skills/generative-ui/SKILL.md +0 -117
  890. package/src/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +0 -170
  891. package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +0 -364
  892. package/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +0 -82
  893. package/src/templates/workspace-core/.agents/skills/mvp-followup/SKILL.md +0 -52
  894. package/src/templates/workspace-core/.agents/skills/native-navigation/SKILL.md +0 -67
  895. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -329
  896. package/src/templates/workspace-core/.agents/skills/onboarding/SKILL.md +0 -56
  897. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +0 -299
  898. package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +0 -333
  899. package/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +0 -392
  900. package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +0 -74
  901. package/src/templates/workspace-core/.agents/skills/reliable-mutations/SKILL.md +0 -70
  902. package/src/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +0 -84
  903. package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +0 -278
  904. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +0 -127
  905. package/src/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +0 -101
  906. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +0 -222
  907. package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +0 -363
@@ -88,6 +88,10 @@ import { shortcutLabel } from "@/lib/utils";
88
88
  import { enterSelectionMode } from "@/root";
89
89
 
90
90
  import type { DesignSystemData } from "../../../shared/api";
91
+ import {
92
+ AlignmentGuides,
93
+ type AlignmentGuideViewport,
94
+ } from "./AlignmentGuides";
91
95
  import { BlockBubbleMenu } from "./BlockBubbleMenu";
92
96
  import {
93
97
  createSlidesCanvasGestureController,
@@ -126,6 +130,7 @@ import {
126
130
  } from "./selection-overlay-measurement";
127
131
  import { decideSlideEscape } from "./slide-escape-arbiter";
128
132
  import {
133
+ alignSlideObjectMembers,
129
134
  applySlideObjectMoveDelta,
130
135
  buildPastedSlideObjects,
131
136
  clientPointToSlideCoordinates,
@@ -138,6 +143,7 @@ import {
138
143
  ensureSlideTextBoxCanvas,
139
144
  findSlideObjectById,
140
145
  freezeSlideElementForFreeform,
146
+ distributeSlideObjectMembers,
141
147
  getSlideTextBoxDefaultColor,
142
148
  getSlideSelectionIdentity,
143
149
  getSlideSelectionMode,
@@ -146,7 +152,12 @@ import {
146
152
  isDeletableSlideElement,
147
153
  removeSlideObjectAndLayoutSpacer,
148
154
  resolveSlideObjectContainingBlock,
155
+ snapSlideObjectMove,
156
+ unionSlideObjectGeometries,
149
157
  type CopiedSlideObjects,
158
+ type SlideAlignmentGuide,
159
+ type SlideObjectAlignment,
160
+ type SlideObjectDistribution,
150
161
  type ResizeHandle,
151
162
  type SlideObjectGeometry,
152
163
  type SlideObjectZOrderTarget,
@@ -215,6 +226,22 @@ function isSlideCanvasShell(element: HTMLElement): boolean {
215
226
  );
216
227
  }
217
228
 
229
+ function resolveSlidePositioningLayer(
230
+ element: HTMLElement,
231
+ ): HTMLElement | null {
232
+ const fmdSlide = element.closest<HTMLElement>(".fmd-slide");
233
+ if (fmdSlide) {
234
+ return (
235
+ Array.from(fmdSlide.children).find(
236
+ (child): child is HTMLElement =>
237
+ child instanceof HTMLElement &&
238
+ child.hasAttribute("data-fmd-autofit-content"),
239
+ ) ?? fmdSlide
240
+ );
241
+ }
242
+ return element.closest<HTMLElement>("[data-slide-canvas]");
243
+ }
244
+
218
245
  function ensureBuilderId(element: HTMLElement): string {
219
246
  const existing = element.getAttribute("data-builder-id");
220
247
  if (existing) return existing;
@@ -643,6 +670,8 @@ interface SlideEditorProps {
643
670
  * edit, even before a `content` update has been flushed.
644
671
  */
645
672
  onInlineEditStart?: () => void;
673
+ /** Called after inline edit mode exits and its draft has been handed off. */
674
+ onInlineEditEnd?: () => void;
646
675
  /** Other users (besides the current user) currently viewing/editing THIS
647
676
  * slide. Drives the soft same-slide-edit indicator on the canvas so a user
648
677
  * knows before they clobber someone else's last-writer-wins text edit. */
@@ -1065,6 +1094,7 @@ export default function SlideEditor({
1065
1094
  slideTitle,
1066
1095
  deckId,
1067
1096
  onInlineEditStart,
1097
+ onInlineEditEnd,
1068
1098
  presentUsers = [],
1069
1099
  recentEdits = [],
1070
1100
  }: SlideEditorProps) {
@@ -1180,6 +1210,10 @@ export default function SlideEditor({
1180
1210
  w: number;
1181
1211
  h: number;
1182
1212
  } | null>(null);
1213
+ const [activeAlignmentGuides, setActiveAlignmentGuides] = useState<{
1214
+ guides: SlideAlignmentGuide[];
1215
+ viewport: AlignmentGuideViewport;
1216
+ } | null>(null);
1183
1217
  /** Content overflow for the current slide (both axes 0 = fits). Reported by the
1184
1218
  * renderer so we can prompt the agent to rewrite the slide HTML instead of
1185
1219
  * silently scaling it down (which created unbalanced right/bottom margins
@@ -1799,6 +1833,7 @@ export default function SlideEditor({
1799
1833
  ) {
1800
1834
  onUpdateSlideRef.current({ content: html });
1801
1835
  }
1836
+ onInlineEditEnd?.();
1802
1837
  inlineEditDraftRef.current = null;
1803
1838
  inlineEditInitialContentRef.current = null;
1804
1839
  const escape = slidesCanvasInteractionCore.escape({
@@ -1821,6 +1856,7 @@ export default function SlideEditor({
1821
1856
  slide.id,
1822
1857
  clearSelectedElement,
1823
1858
  syncSelectionToAppState,
1859
+ onInlineEditEnd,
1824
1860
  ]);
1825
1861
 
1826
1862
  /** Enter edit mode on a smart block (text leaf or smart group) */
@@ -1880,10 +1916,11 @@ export default function SlideEditor({
1880
1916
  onUpdateSlideRef.current({ content: draft.content }, previousSlideId);
1881
1917
  inlineEditDraftRef.current = null;
1882
1918
  }
1919
+ if (editing || draft) onInlineEditEnd?.();
1883
1920
  inlineEditInitialContentRef.current = null;
1884
1921
 
1885
1922
  previousSlideIdRef.current = slide.id;
1886
- }, [slide.id]);
1923
+ }, [onInlineEditEnd, slide.id]);
1887
1924
 
1888
1925
  useEffect(() => {
1889
1926
  if (!editingEl) return;
@@ -3157,6 +3194,131 @@ export default function SlideEditor({
3157
3194
  [],
3158
3195
  );
3159
3196
 
3197
+ const applyMultiObjectGeometryPlan = useCallback(
3198
+ (
3199
+ members: ReturnType<typeof collectMovableSlideObjects>,
3200
+ plan: Map<string, SlideObjectGeometry>,
3201
+ ) => {
3202
+ if (
3203
+ members.length < 2 ||
3204
+ plan.size !== members.length ||
3205
+ members.some((member) => !plan.has(member.objectId))
3206
+ ) {
3207
+ return;
3208
+ }
3209
+ for (const member of members) {
3210
+ const geometry = plan.get(member.objectId);
3211
+ if (geometry) applyObjectGeometry(member.element, geometry);
3212
+ }
3213
+ const builderIds = new Set(
3214
+ members
3215
+ .map((member) => member.element.getAttribute("data-builder-id"))
3216
+ .filter((id): id is string => Boolean(id)),
3217
+ );
3218
+ refreshMultiSelectionRects(builderIds);
3219
+ commitMultiObjectChange(members.map((member) => member.objectId));
3220
+ },
3221
+ [applyObjectGeometry, commitMultiObjectChange, refreshMultiSelectionRects],
3222
+ );
3223
+
3224
+ const handleAlignSelectedObjects = useCallback(
3225
+ (alignment: SlideObjectAlignment) => {
3226
+ const selection = getObjectOperationSelection();
3227
+ if (!selection || selection.elements.length < 2) return;
3228
+ const members = collectMovableSlideObjects(
3229
+ selection.elements,
3230
+ getObjectGeometry,
3231
+ );
3232
+ if (members.length !== selection.elements.length) return;
3233
+ applyMultiObjectGeometryPlan(
3234
+ members,
3235
+ alignSlideObjectMembers(members, alignment),
3236
+ );
3237
+ },
3238
+ [
3239
+ applyMultiObjectGeometryPlan,
3240
+ getObjectGeometry,
3241
+ getObjectOperationSelection,
3242
+ ],
3243
+ );
3244
+
3245
+ const handleDistributeSelectedObjects = useCallback(
3246
+ (distribution: SlideObjectDistribution) => {
3247
+ const selection = getObjectOperationSelection();
3248
+ if (!selection || selection.elements.length < 3) return;
3249
+ const members = collectMovableSlideObjects(
3250
+ selection.elements,
3251
+ getObjectGeometry,
3252
+ );
3253
+ if (members.length !== selection.elements.length) return;
3254
+ applyMultiObjectGeometryPlan(
3255
+ members,
3256
+ distributeSlideObjectMembers(members, distribution),
3257
+ );
3258
+ },
3259
+ [
3260
+ applyMultiObjectGeometryPlan,
3261
+ getObjectGeometry,
3262
+ getObjectOperationSelection,
3263
+ ],
3264
+ );
3265
+
3266
+ const updateAlignmentGuides = useCallback(
3267
+ (
3268
+ guides: readonly SlideAlignmentGuide[],
3269
+ positioningLayer: HTMLElement,
3270
+ canvas: { width: number; height: number },
3271
+ ) => {
3272
+ if (guides.length === 0) {
3273
+ setActiveAlignmentGuides(null);
3274
+ return;
3275
+ }
3276
+ setActiveAlignmentGuides({
3277
+ guides: [...guides],
3278
+ viewport: {
3279
+ rect: positioningLayer.getBoundingClientRect(),
3280
+ canvas,
3281
+ },
3282
+ });
3283
+ },
3284
+ [],
3285
+ );
3286
+
3287
+ const clearAlignmentGuides = useCallback(() => {
3288
+ setActiveAlignmentGuides(null);
3289
+ }, []);
3290
+
3291
+ const getSnapPeerGeometries = useCallback(
3292
+ (movingElements: readonly HTMLElement[], positioningLayer: HTMLElement) => {
3293
+ const slideRoot =
3294
+ positioningLayer.closest<HTMLElement>(".fmd-slide") ??
3295
+ positioningLayer.closest<HTMLElement>("[data-slide-canvas]");
3296
+ if (!slideRoot || movingElements.length === 0) return [];
3297
+
3298
+ const movingSet = new Set(movingElements);
3299
+ const containingBlock = resolveSlideObjectContainingBlock(
3300
+ movingElements[0],
3301
+ positioningLayer,
3302
+ );
3303
+ return Array.from(
3304
+ slideRoot.querySelectorAll<HTMLElement>("[data-slide-object-id]"),
3305
+ )
3306
+ .filter(
3307
+ (element) =>
3308
+ !movingSet.has(element) &&
3309
+ !movingElements.some((moving) => moving.contains(element)) &&
3310
+ (element.closest<HTMLElement>(".fmd-slide") ??
3311
+ element.closest<HTMLElement>("[data-slide-canvas]")) ===
3312
+ slideRoot &&
3313
+ isPersistedFreeformObject(element) &&
3314
+ resolveSlideObjectContainingBlock(element, positioningLayer) ===
3315
+ containingBlock,
3316
+ )
3317
+ .map(getObjectGeometry);
3318
+ },
3319
+ [getObjectGeometry],
3320
+ );
3321
+
3160
3322
  const startElementDrag = useCallback(
3161
3323
  (
3162
3324
  e: React.PointerEvent,
@@ -3182,6 +3344,12 @@ export default function SlideEditor({
3182
3344
  ) {
3183
3345
  return;
3184
3346
  }
3347
+ let positioningLayer =
3348
+ resolveSlidePositioningLayer(element) ?? slideCanvas;
3349
+ let snapCanvas = {
3350
+ width: positioningLayer.offsetWidth || slideWidth,
3351
+ height: positioningLayer.offsetHeight || slideHeight,
3352
+ };
3185
3353
 
3186
3354
  // Pointer-down on the selection perimeter is a move gesture, never a
3187
3355
  // text caret placement. A selected object's body, however, has to keep
@@ -3220,6 +3388,14 @@ export default function SlideEditor({
3220
3388
  }
3221
3389
  promotedToFreeform = true;
3222
3390
  origin = getObjectGeometry(element);
3391
+ const promotedPositioningLayer = resolveSlidePositioningLayer(element);
3392
+ if (promotedPositioningLayer) {
3393
+ positioningLayer = promotedPositioningLayer;
3394
+ snapCanvas = {
3395
+ width: positioningLayer.offsetWidth || slideWidth,
3396
+ height: positioningLayer.offsetHeight || slideHeight,
3397
+ };
3398
+ }
3223
3399
  return true;
3224
3400
  };
3225
3401
 
@@ -3266,6 +3442,7 @@ export default function SlideEditor({
3266
3442
  window.removeEventListener("pointermove", onMove);
3267
3443
  window.removeEventListener("pointerup", onUp);
3268
3444
  window.removeEventListener("pointercancel", onCancel);
3445
+ clearAlignmentGuides();
3269
3446
  if (activeGestureCancelRef.current === onCancel) {
3270
3447
  activeGestureCancelRef.current = null;
3271
3448
  }
@@ -3310,11 +3487,20 @@ export default function SlideEditor({
3310
3487
  stampBuilderIds(clone);
3311
3488
  activeElement = clone;
3312
3489
  }
3490
+ const snap = snapSlideObjectMove({
3491
+ moving: dragOrigin,
3492
+ deltaX: gesture.canvasDelta.x,
3493
+ deltaY: gesture.canvasDelta.y,
3494
+ peers: getSnapPeerGeometries([activeElement], positioningLayer),
3495
+ canvas: snapCanvas,
3496
+ bypass: gesture.pointer.metaKey || gesture.pointer.ctrlKey,
3497
+ });
3313
3498
  applyObjectGeometry(activeElement, {
3314
3499
  ...dragOrigin,
3315
- x: dragOrigin.x + gesture.canvasDelta.x,
3316
- y: dragOrigin.y + gesture.canvasDelta.y,
3500
+ x: dragOrigin.x + snap.deltaX,
3501
+ y: dragOrigin.y + snap.deltaY,
3317
3502
  });
3503
+ updateAlignmentGuides(snap.guides, positioningLayer, snapCanvas);
3318
3504
  const selector = getBuilderSelector(activeElement);
3319
3505
  if (selector) selectElementForStyling(activeElement, selector);
3320
3506
  return { handled: true };
@@ -3423,10 +3609,14 @@ export default function SlideEditor({
3423
3609
  },
3424
3610
  [
3425
3611
  applyObjectGeometry,
3612
+ clearAlignmentGuides,
3613
+ getSnapPeerGeometries,
3426
3614
  getObjectGeometry,
3427
3615
  readCurrentSlideContentHtml,
3428
3616
  readOnly,
3429
3617
  selectElementForStyling,
3618
+ snapSlideObjectMove,
3619
+ updateAlignmentGuides,
3430
3620
  ],
3431
3621
  );
3432
3622
 
@@ -3621,7 +3811,6 @@ export default function SlideEditor({
3621
3811
  ) {
3622
3812
  return;
3623
3813
  }
3624
-
3625
3814
  const promotions: Array<{
3626
3815
  element: HTMLElement;
3627
3816
  originalClassName: string;
@@ -3634,6 +3823,7 @@ export default function SlideEditor({
3634
3823
  let members: ReturnType<typeof collectMovableSlideObjects> = [];
3635
3824
  let prepared = false;
3636
3825
  let promotionsRestored = false;
3826
+ let groupPositioningLayer: HTMLElement | null = null;
3637
3827
 
3638
3828
  const removeFreeformLayoutSpacer = (element: HTMLElement) => {
3639
3829
  const objectId = element.getAttribute("data-slide-object-id");
@@ -3767,6 +3957,7 @@ export default function SlideEditor({
3767
3957
  return false;
3768
3958
  }
3769
3959
 
3960
+ groupPositioningLayer = positioningLayer;
3770
3961
  members = nextMembers;
3771
3962
  return true;
3772
3963
  };
@@ -3775,6 +3966,7 @@ export default function SlideEditor({
3775
3966
  window.removeEventListener("pointermove", onMove);
3776
3967
  window.removeEventListener("pointerup", onUp);
3777
3968
  window.removeEventListener("pointercancel", onCancel);
3969
+ clearAlignmentGuides();
3778
3970
  if (activeGestureCancelRef.current === onCancel) {
3779
3971
  activeGestureCancelRef.current = null;
3780
3972
  }
@@ -3788,12 +3980,35 @@ export default function SlideEditor({
3788
3980
  // Claim the click only once a real drag starts, so a click without
3789
3981
  // movement on a multi-selected object remains normal editor input.
3790
3982
  suppressNextClickRef.current = true;
3983
+ const moving = unionSlideObjectGeometries(
3984
+ members.map((member) => member.start),
3985
+ );
3986
+ const positioningLayer = groupPositioningLayer;
3987
+ if (!moving || !positioningLayer) {
3988
+ return { handled: false, reason: "unhandled" };
3989
+ }
3990
+ const snapCanvas = {
3991
+ width: positioningLayer.offsetWidth || slideWidth,
3992
+ height: positioningLayer.offsetHeight || slideHeight,
3993
+ };
3994
+ const snap = snapSlideObjectMove({
3995
+ moving,
3996
+ deltaX: gesture.canvasDelta.x,
3997
+ deltaY: gesture.canvasDelta.y,
3998
+ peers: getSnapPeerGeometries(
3999
+ members.map((member) => member.element),
4000
+ positioningLayer,
4001
+ ),
4002
+ canvas: snapCanvas,
4003
+ bypass: gesture.pointer.metaKey || gesture.pointer.ctrlKey,
4004
+ });
3791
4005
  applySlideObjectMoveDelta(
3792
4006
  members,
3793
- gesture.canvasDelta.x,
3794
- gesture.canvasDelta.y,
4007
+ snap.deltaX,
4008
+ snap.deltaY,
3795
4009
  applyObjectGeometry,
3796
4010
  );
4011
+ updateAlignmentGuides(snap.guides, positioningLayer, snapCanvas);
3797
4012
  refreshMultiSelectionRects(ids);
3798
4013
  return { handled: true };
3799
4014
  },
@@ -3899,12 +4114,17 @@ export default function SlideEditor({
3899
4114
  },
3900
4115
  [
3901
4116
  applyObjectGeometry,
4117
+ clearAlignmentGuides,
3902
4118
  freezeElementForFreeformSelection,
3903
- refreshMultiSelectionRects,
4119
+ getSnapPeerGeometries,
3904
4120
  getObjectGeometry,
3905
4121
  getSlideContent,
3906
4122
  readCurrentSlideContentHtml,
3907
4123
  readOnly,
4124
+ refreshMultiSelectionRects,
4125
+ snapSlideObjectMove,
4126
+ unionSlideObjectGeometries,
4127
+ updateAlignmentGuides,
3908
4128
  ],
3909
4129
  );
3910
4130
 
@@ -4787,6 +5007,10 @@ export default function SlideEditor({
4787
5007
  const isSelectedElementDraggable = selectedForDrag
4788
5008
  ? getComputedStyle(selectedForDrag).position === "absolute"
4789
5009
  : false;
5010
+ const objectOperationSelection = getObjectOperationSelection();
5011
+ const hasObjectSelection = objectOperationSelection !== null;
5012
+ const objectSelectionCount = objectOperationSelection?.elements.length ?? 0;
5013
+
4790
5014
  // Excalidraw slides have no selectable slide content, so the row collapses
4791
5015
  // to its slide-level state — but that state owns the background picker, and
4792
5016
  // SlideRenderer paints `slide.background` behind the drawing, so the row has
@@ -4811,6 +5035,9 @@ export default function SlideEditor({
4811
5035
  onBackgroundChange={applySlideBackground}
4812
5036
  onArrange={handleArrangeSelected}
4813
5037
  onToggleList={handleToggleList}
5038
+ objectSelectionCount={objectSelectionCount}
5039
+ onAlignObjects={handleAlignSelectedObjects}
5040
+ onDistributeObjects={handleDistributeSelectedObjects}
4814
5041
  />
4815
5042
  </div>
4816
5043
  ) : null;
@@ -4831,13 +5058,14 @@ export default function SlideEditor({
4831
5058
  onBackgroundChange={applySlideBackground}
4832
5059
  onArrange={handleArrangeSelected}
4833
5060
  onToggleList={handleToggleList}
5061
+ objectSelectionCount={objectSelectionCount}
5062
+ onAlignObjects={handleAlignSelectedObjects}
5063
+ onDistributeObjects={handleDistributeSelectedObjects}
4834
5064
  className="slide-context-toolbar--top-row"
4835
5065
  />
4836
5066
  </div>
4837
5067
  ) : null;
4838
5068
 
4839
- const hasObjectSelection = getObjectOperationSelection() !== null;
4840
-
4841
5069
  return (
4842
5070
  <div
4843
5071
  className="relative flex h-full min-h-0 flex-1 flex-col overflow-hidden rounded-l-lg bg-[var(--slides-editor-surface)]"
@@ -5139,6 +5367,13 @@ export default function SlideEditor({
5139
5367
  <MarqueeRect rect={marquee} viewportRect={selectionViewportRect} />
5140
5368
  )}
5141
5369
 
5370
+ {activeAlignmentGuides && (
5371
+ <AlignmentGuides
5372
+ guides={activeAlignmentGuides.guides}
5373
+ viewport={activeAlignmentGuides.viewport}
5374
+ />
5375
+ )}
5376
+
5142
5377
  {/* Floating "N selected" chip */}
5143
5378
  <MultiSelectChip
5144
5379
  count={multiSelection.size}
@@ -34,7 +34,7 @@ export function SlideOverflowWarning({
34
34
  // w-max/nowrap: the containing block is the zoomed slide canvas, so at
35
35
  // low zoom the banner would otherwise wrap to a height taller than its
36
36
  // own -top-12 offset and spill down over the slide.
37
- className="absolute -top-12 left-0 z-20 flex w-max items-center gap-2 whitespace-nowrap rounded-md border border-foreground/40 px-2 py-1 text-xs text-foreground"
37
+ className="absolute -top-12 left-0 z-20 flex w-max items-center gap-2 whitespace-nowrap rounded-md bg-card px-2 py-1 text-xs text-foreground shadow-sm"
38
38
  onPointerDown={(event) => event.stopPropagation()}
39
39
  onClick={(event) => event.stopPropagation()}
40
40
  >
@@ -61,9 +61,9 @@ const slidesCanvasInteractionConfig = {
61
61
  minSize: MIN_SLIDE_OBJECT_SIZE,
62
62
  capabilities: {
63
63
  multiSelection: true,
64
- snapping: false,
65
- alignment: false,
66
- distribution: false,
64
+ snapping: true,
65
+ alignment: true,
66
+ distribution: true,
67
67
  grouping: false,
68
68
  rotation: false,
69
69
  marquee: true,
@@ -821,6 +821,224 @@ export function applySlideObjectMoveDelta(
821
821
  }
822
822
  }
823
823
 
824
+ export type SlideAlignmentGuideOrientation = "vertical" | "horizontal";
825
+
826
+ export interface SlideAlignmentGuide {
827
+ orientation: SlideAlignmentGuideOrientation;
828
+ /** Position in the shared slide coordinate space. */
829
+ position: number;
830
+ /** Visible span in the shared slide coordinate space. */
831
+ start: number;
832
+ end: number;
833
+ }
834
+
835
+ export interface SlideObjectSnapResult {
836
+ deltaX: number;
837
+ deltaY: number;
838
+ guides: SlideAlignmentGuide[];
839
+ }
840
+
841
+ export type SlideObjectAlignment =
842
+ | "left"
843
+ | "center"
844
+ | "right"
845
+ | "top"
846
+ | "middle"
847
+ | "bottom";
848
+
849
+ export type SlideObjectDistribution = "horizontal" | "vertical";
850
+
851
+ export const SLIDE_OBJECT_SNAP_TOLERANCE = 8;
852
+
853
+ function nearestSnapAdjustment(
854
+ movingStart: number,
855
+ movingSize: number,
856
+ proposedDelta: number,
857
+ targetPositions: number[],
858
+ tolerance: number,
859
+ ): { delta: number; position: number } | null {
860
+ const anchors = [0, movingSize / 2, movingSize];
861
+ let closest: { distance: number; delta: number; position: number } | null =
862
+ null;
863
+
864
+ for (const anchor of anchors) {
865
+ const proposedPosition = movingStart + proposedDelta + anchor;
866
+ for (const position of targetPositions) {
867
+ const adjustment = position - proposedPosition;
868
+ const distance = Math.abs(adjustment);
869
+ if (distance > tolerance) continue;
870
+ if (!closest || distance < closest.distance) {
871
+ closest = { distance, delta: proposedDelta + adjustment, position };
872
+ }
873
+ }
874
+ }
875
+
876
+ return closest ? { delta: closest.delta, position: closest.position } : null;
877
+ }
878
+
879
+ function uniquePositions(positions: number[]): number[] {
880
+ return Array.from(new Set(positions));
881
+ }
882
+
883
+ function objectAnchorPositions(
884
+ objects: readonly SlideObjectGeometry[],
885
+ axis: "x" | "y",
886
+ ): number[] {
887
+ return objects.flatMap((object) => {
888
+ const start = axis === "x" ? object.x : object.y;
889
+ const size = axis === "x" ? object.width : object.height;
890
+ return [start, start + size / 2, start + size];
891
+ });
892
+ }
893
+
894
+ /**
895
+ * Snap a proposed object/group delta to nearby peer or canvas anchors. The
896
+ * moving geometry is the object itself for a single drag and the union bounds
897
+ * for a group drag. The caller can bypass this transient behavior with the
898
+ * platform modifier used by Figma (Cmd/Ctrl) without changing persisted data.
899
+ */
900
+ export function snapSlideObjectMove({
901
+ moving,
902
+ deltaX,
903
+ deltaY,
904
+ peers,
905
+ canvas,
906
+ tolerance = SLIDE_OBJECT_SNAP_TOLERANCE,
907
+ bypass = false,
908
+ }: {
909
+ moving: SlideObjectGeometry;
910
+ deltaX: number;
911
+ deltaY: number;
912
+ peers: readonly SlideObjectGeometry[];
913
+ canvas?: { width: number; height: number };
914
+ tolerance?: number;
915
+ bypass?: boolean;
916
+ }): SlideObjectSnapResult {
917
+ if (bypass) return { deltaX, deltaY, guides: [] };
918
+
919
+ const xTargets = objectAnchorPositions(peers, "x");
920
+ const yTargets = objectAnchorPositions(peers, "y");
921
+ if (canvas) {
922
+ xTargets.push(0, canvas.width / 2, canvas.width);
923
+ yTargets.push(0, canvas.height / 2, canvas.height);
924
+ }
925
+
926
+ const xSnap = nearestSnapAdjustment(
927
+ moving.x,
928
+ moving.width,
929
+ deltaX,
930
+ uniquePositions(xTargets),
931
+ tolerance,
932
+ );
933
+ const ySnap = nearestSnapAdjustment(
934
+ moving.y,
935
+ moving.height,
936
+ deltaY,
937
+ uniquePositions(yTargets),
938
+ tolerance,
939
+ );
940
+ const guides: SlideAlignmentGuide[] = [];
941
+ if (xSnap) {
942
+ guides.push({
943
+ orientation: "vertical",
944
+ position: xSnap.position,
945
+ start: 0,
946
+ end: canvas?.height ?? moving.y + moving.height,
947
+ });
948
+ }
949
+ if (ySnap) {
950
+ guides.push({
951
+ orientation: "horizontal",
952
+ position: ySnap.position,
953
+ start: 0,
954
+ end: canvas?.width ?? moving.x + moving.width,
955
+ });
956
+ }
957
+
958
+ return {
959
+ deltaX: xSnap?.delta ?? deltaX,
960
+ deltaY: ySnap?.delta ?? deltaY,
961
+ guides,
962
+ };
963
+ }
964
+
965
+ export function unionSlideObjectGeometries(
966
+ geometries: readonly SlideObjectGeometry[],
967
+ ): SlideObjectGeometry | null {
968
+ if (geometries.length === 0) return null;
969
+ const left = Math.min(...geometries.map((geometry) => geometry.x));
970
+ const top = Math.min(...geometries.map((geometry) => geometry.y));
971
+ const right = Math.max(
972
+ ...geometries.map((geometry) => geometry.x + geometry.width),
973
+ );
974
+ const bottom = Math.max(
975
+ ...geometries.map((geometry) => geometry.y + geometry.height),
976
+ );
977
+ return { x: left, y: top, width: right - left, height: bottom - top };
978
+ }
979
+
980
+ export function alignSlideObjectMembers(
981
+ members: readonly SlideObjectMoveMember[],
982
+ alignment: SlideObjectAlignment,
983
+ ): Map<string, SlideObjectGeometry> {
984
+ const bounds = unionSlideObjectGeometries(
985
+ members.map((member) => member.start),
986
+ );
987
+ if (!bounds) return new Map();
988
+
989
+ const plan = new Map<string, SlideObjectGeometry>();
990
+ for (const member of members) {
991
+ const geometry = { ...member.start };
992
+ if (alignment === "left") geometry.x = bounds.x;
993
+ if (alignment === "center") {
994
+ geometry.x = bounds.x + (bounds.width - geometry.width) / 2;
995
+ }
996
+ if (alignment === "right") {
997
+ geometry.x = bounds.x + bounds.width - geometry.width;
998
+ }
999
+ if (alignment === "top") geometry.y = bounds.y;
1000
+ if (alignment === "middle") {
1001
+ geometry.y = bounds.y + (bounds.height - geometry.height) / 2;
1002
+ }
1003
+ if (alignment === "bottom") {
1004
+ geometry.y = bounds.y + bounds.height - geometry.height;
1005
+ }
1006
+ plan.set(member.objectId, geometry);
1007
+ }
1008
+ return plan;
1009
+ }
1010
+
1011
+ export function distributeSlideObjectMembers(
1012
+ members: readonly SlideObjectMoveMember[],
1013
+ distribution: SlideObjectDistribution,
1014
+ ): Map<string, SlideObjectGeometry> {
1015
+ if (members.length < 3) return new Map();
1016
+
1017
+ const axis = distribution === "horizontal" ? "x" : "y";
1018
+ const size = distribution === "horizontal" ? "width" : "height";
1019
+ const sorted = [...members].sort((left, right) => {
1020
+ const positionDelta = left.start[axis] - right.start[axis];
1021
+ return positionDelta || left.objectId.localeCompare(right.objectId);
1022
+ });
1023
+ const first = sorted[0].start[axis];
1024
+ const lastEnd = Math.max(
1025
+ ...sorted.map((member) => member.start[axis] + member.start[size]),
1026
+ );
1027
+ const occupied = sorted.reduce((sum, member) => sum + member.start[size], 0);
1028
+ const gap = (lastEnd - first - occupied) / (sorted.length - 1);
1029
+ const plan = new Map<string, SlideObjectGeometry>();
1030
+ let cursor = first;
1031
+
1032
+ for (const member of sorted) {
1033
+ const geometry = { ...member.start };
1034
+ geometry[axis] = cursor;
1035
+ plan.set(member.objectId, geometry);
1036
+ cursor += member.start[size] + gap;
1037
+ }
1038
+
1039
+ return plan;
1040
+ }
1041
+
824
1042
  export interface CopiedSlideObjects {
825
1043
  html: string[];
826
1044
  }