@agent-native/core 0.149.2 → 0.149.4

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 (347) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +54 -488
  3. package/corpus/templates/analytics/.agents/skills/actions/references/action-fields.md +136 -0
  4. package/corpus/templates/analytics/.agents/skills/actions/references/examples.md +94 -0
  5. package/corpus/templates/analytics/.agents/skills/actions/references/provider-apis.md +95 -0
  6. package/corpus/templates/analytics/.agents/skills/create-skill/SKILL.md +9 -35
  7. package/corpus/templates/analytics/.agents/skills/creative-context/SKILL.md +4 -2
  8. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +4 -5
  9. package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +18 -31
  10. package/corpus/templates/analytics/AGENTS.md +25 -32
  11. package/corpus/templates/analytics/app/global.css +1 -1
  12. package/corpus/templates/analytics/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
  13. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +54 -488
  14. package/corpus/templates/assets/.agents/skills/actions/references/action-fields.md +136 -0
  15. package/corpus/templates/assets/.agents/skills/actions/references/examples.md +94 -0
  16. package/corpus/templates/assets/.agents/skills/actions/references/provider-apis.md +95 -0
  17. package/corpus/templates/assets/.agents/skills/create-skill/SKILL.md +9 -35
  18. package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +4 -2
  19. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +4 -5
  20. package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +18 -31
  21. package/corpus/templates/assets/AGENTS.md +6 -9
  22. package/corpus/templates/assets/app/global.css +1 -1
  23. package/corpus/templates/assets/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
  24. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +54 -488
  25. package/corpus/templates/brain/.agents/skills/actions/references/action-fields.md +136 -0
  26. package/corpus/templates/brain/.agents/skills/actions/references/examples.md +94 -0
  27. package/corpus/templates/brain/.agents/skills/actions/references/provider-apis.md +95 -0
  28. package/corpus/templates/brain/.agents/skills/create-skill/SKILL.md +9 -35
  29. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +4 -5
  30. package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +18 -31
  31. package/corpus/templates/brain/AGENTS.md +5 -12
  32. package/corpus/templates/brain/app/global.css +1 -1
  33. package/corpus/templates/brain/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
  34. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +54 -488
  35. package/corpus/templates/calendar/.agents/skills/actions/references/action-fields.md +136 -0
  36. package/corpus/templates/calendar/.agents/skills/actions/references/examples.md +94 -0
  37. package/corpus/templates/calendar/.agents/skills/actions/references/provider-apis.md +95 -0
  38. package/corpus/templates/calendar/.agents/skills/create-skill/SKILL.md +9 -35
  39. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +4 -5
  40. package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +18 -31
  41. package/corpus/templates/calendar/AGENTS.md +8 -9
  42. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +54 -488
  43. package/corpus/templates/chat/.agents/skills/actions/references/action-fields.md +136 -0
  44. package/corpus/templates/chat/.agents/skills/actions/references/examples.md +94 -0
  45. package/corpus/templates/chat/.agents/skills/actions/references/provider-apis.md +95 -0
  46. package/corpus/templates/chat/.agents/skills/create-skill/SKILL.md +9 -35
  47. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +4 -5
  48. package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -31
  49. package/corpus/templates/chat/AGENTS.md +32 -80
  50. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +54 -488
  51. package/corpus/templates/clips/.agents/skills/actions/references/action-fields.md +136 -0
  52. package/corpus/templates/clips/.agents/skills/actions/references/examples.md +94 -0
  53. package/corpus/templates/clips/.agents/skills/actions/references/provider-apis.md +95 -0
  54. package/corpus/templates/clips/.agents/skills/create-skill/SKILL.md +9 -35
  55. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +4 -5
  56. package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +18 -31
  57. package/corpus/templates/clips/AGENTS.md +25 -31
  58. package/corpus/templates/content/.agents/skills/actions/SKILL.md +54 -488
  59. package/corpus/templates/content/.agents/skills/actions/references/action-fields.md +136 -0
  60. package/corpus/templates/content/.agents/skills/actions/references/examples.md +94 -0
  61. package/corpus/templates/content/.agents/skills/actions/references/provider-apis.md +95 -0
  62. package/corpus/templates/content/.agents/skills/create-skill/SKILL.md +9 -35
  63. package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +4 -2
  64. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +4 -5
  65. package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +18 -31
  66. package/corpus/templates/content/AGENTS.md +5 -9
  67. package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +18 -31
  68. package/corpus/templates/crm/AGENTS.md +7 -11
  69. package/corpus/templates/crm/app/global.css +1 -1
  70. package/corpus/templates/crm/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
  71. package/corpus/templates/design/.agents/skills/actions/SKILL.md +54 -488
  72. package/corpus/templates/design/.agents/skills/actions/references/action-fields.md +136 -0
  73. package/corpus/templates/design/.agents/skills/actions/references/examples.md +94 -0
  74. package/corpus/templates/design/.agents/skills/actions/references/provider-apis.md +95 -0
  75. package/corpus/templates/design/.agents/skills/create-skill/SKILL.md +9 -35
  76. package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +4 -2
  77. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +4 -5
  78. package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +18 -31
  79. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +70 -3
  80. package/corpus/templates/design/AGENTS.md +13 -21
  81. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +12 -0
  82. package/corpus/templates/design/app/components/design/LayersPanel.tsx +19 -2
  83. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +115 -7
  84. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +82 -7
  85. package/corpus/templates/design/app/components/design/design-trace.ts +120 -0
  86. package/corpus/templates/design/app/components/design/dnd-debug.ts +2 -1
  87. package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +40 -26
  88. package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +4 -1
  89. package/corpus/templates/design/app/components/design/multi-screen/frame-geometry.ts +12 -3
  90. package/corpus/templates/design/app/components/design/multi-screen/screen-content-cache.ts +4 -0
  91. package/corpus/templates/design/app/components/design/multi-screen/types.ts +7 -0
  92. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +3 -2
  93. package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -2
  94. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +3 -0
  95. package/corpus/templates/design/app/i18n-data.ts +1 -0
  96. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +5 -5
  97. package/corpus/templates/design/app/pages/DesignSystems.tsx +3 -2
  98. package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +100 -13
  99. package/corpus/templates/design/app/pages/design-editor/cross-screen-text-color.ts +1 -1
  100. package/corpus/templates/design/app/pages/design-editor/data-operations.ts +14 -0
  101. package/corpus/templates/design/changelog/2026-08-10-marquee-selecting-layers-far-down-a-tall-screen-now-selects-.md +6 -0
  102. package/corpus/templates/design/changelog/2026-08-10-the-frame-tool-draws-a-plain-frame-by-default-with-screen-av.md +6 -0
  103. package/corpus/templates/design/e2e/global-setup.ts +27 -32
  104. package/corpus/templates/design/playwright.config.ts +3 -5
  105. package/corpus/templates/design/shared/breakpoint-media.ts +9 -2
  106. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +54 -488
  107. package/corpus/templates/dispatch/.agents/skills/actions/references/action-fields.md +136 -0
  108. package/corpus/templates/dispatch/.agents/skills/actions/references/examples.md +94 -0
  109. package/corpus/templates/dispatch/.agents/skills/actions/references/provider-apis.md +95 -0
  110. package/corpus/templates/dispatch/.agents/skills/create-skill/SKILL.md +9 -35
  111. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +4 -5
  112. package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +18 -31
  113. package/corpus/templates/dispatch/AGENTS.md +9 -16
  114. package/corpus/templates/factory/.agents/skills/actions/SKILL.md +54 -488
  115. package/corpus/templates/factory/.agents/skills/actions/references/action-fields.md +136 -0
  116. package/corpus/templates/factory/.agents/skills/actions/references/examples.md +94 -0
  117. package/corpus/templates/factory/.agents/skills/actions/references/provider-apis.md +95 -0
  118. package/corpus/templates/factory/.agents/skills/create-skill/SKILL.md +9 -35
  119. package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +4 -5
  120. package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +18 -31
  121. package/corpus/templates/factory/AGENTS.md +10 -24
  122. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +54 -488
  123. package/corpus/templates/forms/.agents/skills/actions/references/action-fields.md +136 -0
  124. package/corpus/templates/forms/.agents/skills/actions/references/examples.md +94 -0
  125. package/corpus/templates/forms/.agents/skills/actions/references/provider-apis.md +95 -0
  126. package/corpus/templates/forms/.agents/skills/create-skill/SKILL.md +9 -35
  127. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +4 -5
  128. package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +18 -31
  129. package/corpus/templates/forms/AGENTS.md +11 -17
  130. package/corpus/templates/forms/app/global.css +1 -0
  131. package/corpus/templates/forms/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
  132. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +4 -5
  133. package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +18 -31
  134. package/corpus/templates/macros/AGENTS.md +8 -8
  135. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +54 -488
  136. package/corpus/templates/mail/.agents/skills/actions/references/action-fields.md +136 -0
  137. package/corpus/templates/mail/.agents/skills/actions/references/examples.md +94 -0
  138. package/corpus/templates/mail/.agents/skills/actions/references/provider-apis.md +95 -0
  139. package/corpus/templates/mail/.agents/skills/create-skill/SKILL.md +9 -35
  140. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +4 -5
  141. package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +18 -31
  142. package/corpus/templates/mail/AGENTS.md +5 -6
  143. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +54 -488
  144. package/corpus/templates/plan/.agents/skills/actions/references/action-fields.md +136 -0
  145. package/corpus/templates/plan/.agents/skills/actions/references/examples.md +94 -0
  146. package/corpus/templates/plan/.agents/skills/actions/references/provider-apis.md +95 -0
  147. package/corpus/templates/plan/.agents/skills/create-skill/SKILL.md +9 -35
  148. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +4 -5
  149. package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +18 -31
  150. package/corpus/templates/plan/AGENTS.md +5 -14
  151. package/corpus/templates/plan/changelog/2026-08-11-plan-no-longer-reloads-when-runtime-state-changes.md +6 -0
  152. package/corpus/templates/plan/vite.config.ts +5 -0
  153. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +54 -488
  154. package/corpus/templates/slides/.agents/skills/actions/references/action-fields.md +136 -0
  155. package/corpus/templates/slides/.agents/skills/actions/references/examples.md +94 -0
  156. package/corpus/templates/slides/.agents/skills/actions/references/provider-apis.md +95 -0
  157. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +2 -2
  158. package/corpus/templates/slides/.agents/skills/create-skill/SKILL.md +9 -35
  159. package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +6 -3
  160. package/corpus/templates/slides/.agents/skills/deck-management/SKILL.md +6 -1
  161. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +4 -5
  162. package/corpus/templates/slides/.agents/skills/image-generation-via-a2a/SKILL.md +3 -2
  163. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +3 -0
  164. package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +3 -3
  165. package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +18 -31
  166. package/corpus/templates/slides/AGENTS.md +22 -25
  167. package/corpus/templates/slides/actions/get-deck-reference-context.ts +2 -2
  168. package/corpus/templates/slides/actions/get-deck.ts +57 -9
  169. package/corpus/templates/slides/actions/import-file.ts +2 -1
  170. package/corpus/templates/slides/actions/patch-deck.ts +45 -2
  171. package/corpus/templates/slides/actions/update-slide.ts +1 -1
  172. package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +2 -2
  173. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +1 -23
  174. package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +2 -2
  175. package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +6 -6
  176. package/corpus/templates/slides/app/components/editor/AnimationsPanel.tsx +3 -3
  177. package/corpus/templates/slides/app/components/editor/DeckEditorSkeleton.tsx +4 -4
  178. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +1 -1
  179. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +428 -180
  180. package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +294 -266
  181. package/corpus/templates/slides/app/components/editor/PromptDialog.tsx +7 -5
  182. package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +1 -1
  183. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +40 -12
  184. package/corpus/templates/slides/app/components/editor/SpeakerNotesPanel.tsx +6 -12
  185. package/corpus/templates/slides/app/components/editor/editor-command-model.ts +35 -0
  186. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +8 -10
  187. package/corpus/templates/slides/app/context/DeckContext.tsx +2 -1
  188. package/corpus/templates/slides/app/global.css +76 -1
  189. package/corpus/templates/slides/app/i18n/en-US.ts +1 -0
  190. package/corpus/templates/slides/app/lib/create-deck-generation.ts +51 -23
  191. package/corpus/templates/slides/app/lib/slide-animation-elements.ts +68 -5
  192. package/corpus/templates/slides/app/pages/DeckEditor.tsx +13 -6
  193. package/corpus/templates/slides/app/pages/DesignSystems.tsx +2 -2
  194. package/corpus/templates/slides/app/pages/Index.tsx +87 -74
  195. package/corpus/templates/slides/app/root.tsx +43 -0
  196. package/corpus/templates/slides/changelog/2026-08-11-faster-slides-chat-deck-reads.md +6 -0
  197. package/corpus/templates/slides/changelog/2026-08-11-slides-chat-can-read-one-slide-without-loading-the-full-deck.md +6 -0
  198. package/corpus/templates/slides/changelog/2026-08-11-slides-clearly-indicate-when-an-ai-agent-is-editing-alongsid.md +6 -0
  199. package/corpus/templates/slides/package.json +1 -0
  200. package/corpus/templates/slides/server/lib/validate-slide-animations.ts +163 -0
  201. package/corpus/templates/slides/server/plugins/agent-chat.ts +4 -3
  202. package/corpus/templates/slides/shared/api.ts +46 -15
  203. package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +54 -488
  204. package/corpus/templates/tasks/.agents/skills/actions/references/action-fields.md +136 -0
  205. package/corpus/templates/tasks/.agents/skills/actions/references/examples.md +94 -0
  206. package/corpus/templates/tasks/.agents/skills/actions/references/provider-apis.md +95 -0
  207. package/corpus/templates/tasks/.agents/skills/agent-watchdog/SKILL.md +1 -0
  208. package/corpus/templates/tasks/.agents/skills/create-skill/SKILL.md +9 -35
  209. package/corpus/templates/tasks/.agents/skills/efficient-fable/SKILL.md +1 -0
  210. package/corpus/templates/tasks/.agents/skills/efficient-frontier/SKILL.md +1 -0
  211. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +4 -5
  212. package/corpus/templates/tasks/.agents/skills/plan-arbiter/SKILL.md +1 -0
  213. package/corpus/templates/tasks/.agents/skills/plow-ahead/SKILL.md +1 -0
  214. package/corpus/templates/tasks/.agents/skills/quick-recap/SKILL.md +1 -0
  215. package/corpus/templates/tasks/.agents/skills/read-the-damn-docs/SKILL.md +1 -0
  216. package/corpus/templates/tasks/.agents/skills/stay-within-limits/SKILL.md +1 -0
  217. package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +18 -31
  218. package/corpus/templates/tasks/AGENTS.md +5 -20
  219. package/dist/agent/production-agent.js +376 -345
  220. package/dist/agent/run-manager.js +156 -14
  221. package/dist/agent/run-store.d.ts +11 -10
  222. package/dist/agent/run-store.js +17 -13
  223. package/dist/client/AssistantChat.d.ts +6 -2
  224. package/dist/client/AssistantChat.js +216 -131
  225. package/dist/client/active-run-state.d.ts +9 -1
  226. package/dist/client/active-run-state.js +34 -3
  227. package/dist/client/agent-chat-adapter.d.ts +8 -0
  228. package/dist/client/agent-chat-adapter.js +114 -28
  229. package/dist/client/chat/message-components.d.ts +7 -1
  230. package/dist/client/chat/message-components.js +32 -5
  231. package/dist/client/chat/run-recovery.d.ts +1 -0
  232. package/dist/client/chat/run-recovery.js +8 -0
  233. package/dist/client/chat/tool-call-display.d.ts +2 -0
  234. package/dist/client/chat/tool-call-display.js +2 -0
  235. package/dist/client/chat-first/apps-rail.js +1 -1
  236. package/dist/client/chat-first/chat-history.d.ts +1 -1
  237. package/dist/client/chat-first/chat-history.js +5 -2
  238. package/dist/client/sse-event-processor.d.ts +4 -2
  239. package/dist/client/sse-event-processor.js +36 -6
  240. package/dist/client/use-run-stuck-detection.d.ts +2 -0
  241. package/dist/client/use-run-stuck-detection.js +85 -9
  242. package/dist/collab/routes.d.ts +1 -1
  243. package/dist/deploy/build.d.ts +4 -0
  244. package/dist/deploy/build.js +5 -0
  245. package/dist/deploy/workspace-deploy.js +5 -0
  246. package/dist/integrations/adapters/slack.d.ts +0 -4
  247. package/dist/integrations/adapters/slack.js +6 -30
  248. package/dist/integrations/catalog.js +1 -1
  249. package/dist/integrations/pending-tasks-store.d.ts +0 -8
  250. package/dist/integrations/pending-tasks-store.js +0 -21
  251. package/dist/integrations/slack-manifest.d.ts +2 -2
  252. package/dist/integrations/slack-manifest.js +0 -3
  253. package/dist/notifications/routes.d.ts +3 -3
  254. package/dist/observability/routes.d.ts +3 -3
  255. package/dist/provider-api/actions/custom-provider-registration.d.ts +4 -4
  256. package/dist/provider-api/actions/provider-api.d.ts +8 -8
  257. package/dist/resources/handlers.d.ts +1 -1
  258. package/dist/scripts/docs/source-search.js +2 -2
  259. package/dist/secrets/routes.d.ts +9 -9
  260. package/dist/server/agent-chat/framework-prompts.js +7 -2
  261. package/dist/server/agent-chat/prompt-resources.js +2 -2
  262. package/dist/server/agent-chat/skill-frontmatter.d.ts +31 -2
  263. package/dist/server/agent-chat/skill-frontmatter.js +41 -15
  264. package/dist/server/agent-chat-plugin.js +3 -3
  265. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  266. package/dist/server/agents-bundle.d.ts +16 -19
  267. package/dist/server/agents-bundle.js +19 -35
  268. package/dist/server/better-auth-instance.d.ts +1 -0
  269. package/dist/server/better-auth-instance.js +17 -2
  270. package/dist/server/prompts/framework-core-compact.d.ts +6 -1
  271. package/dist/server/prompts/framework-core-compact.js +12 -9
  272. package/dist/server/prompts/framework-core.d.ts +6 -1
  273. package/dist/server/prompts/framework-core.js +11 -9
  274. package/dist/server/prompts/index.d.ts +1 -1
  275. package/dist/server/prompts/index.js +1 -1
  276. package/dist/server/prompts/shared-rules.d.ts +15 -11
  277. package/dist/server/prompts/shared-rules.js +17 -13
  278. package/dist/server/realtime-token.d.ts +1 -1
  279. package/dist/server/transcribe-voice.d.ts +1 -1
  280. package/dist/templates/chat/.agents/skills/actions/SKILL.md +54 -488
  281. package/dist/templates/chat/.agents/skills/actions/references/action-fields.md +136 -0
  282. package/dist/templates/chat/.agents/skills/actions/references/examples.md +94 -0
  283. package/dist/templates/chat/.agents/skills/actions/references/provider-apis.md +95 -0
  284. package/dist/templates/chat/.agents/skills/create-skill/SKILL.md +9 -35
  285. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +4 -5
  286. package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -31
  287. package/dist/templates/chat/AGENTS.md +32 -80
  288. package/dist/templates/default/.agents/skills/actions/SKILL.md +54 -488
  289. package/dist/templates/default/.agents/skills/actions/references/action-fields.md +136 -0
  290. package/dist/templates/default/.agents/skills/actions/references/examples.md +94 -0
  291. package/dist/templates/default/.agents/skills/actions/references/provider-apis.md +95 -0
  292. package/dist/templates/default/.agents/skills/create-skill/SKILL.md +9 -35
  293. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +4 -5
  294. package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +18 -31
  295. package/dist/templates/headless/.agents/skills/actions/SKILL.md +54 -488
  296. package/dist/templates/headless/.agents/skills/actions/references/action-fields.md +136 -0
  297. package/dist/templates/headless/.agents/skills/actions/references/examples.md +94 -0
  298. package/dist/templates/headless/.agents/skills/actions/references/provider-apis.md +95 -0
  299. package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +18 -31
  300. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +54 -488
  301. package/dist/templates/workspace-core/.agents/skills/actions/references/action-fields.md +136 -0
  302. package/dist/templates/workspace-core/.agents/skills/actions/references/examples.md +94 -0
  303. package/dist/templates/workspace-core/.agents/skills/actions/references/provider-apis.md +95 -0
  304. package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +1 -0
  305. package/dist/templates/workspace-core/.agents/skills/agent-page/SKILL.md +1 -0
  306. package/dist/templates/workspace-core/.agents/skills/create-skill/SKILL.md +9 -35
  307. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +4 -5
  308. package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +21 -29
  309. package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +18 -31
  310. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +7 -17
  311. package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +3 -3
  312. package/dist/templates/workspace-core/AGENTS.md +7 -16
  313. package/docs/content/messaging.mdx +6 -7
  314. package/package.json +1 -1
  315. package/src/templates/chat/.agents/skills/actions/SKILL.md +54 -488
  316. package/src/templates/chat/.agents/skills/actions/references/action-fields.md +136 -0
  317. package/src/templates/chat/.agents/skills/actions/references/examples.md +94 -0
  318. package/src/templates/chat/.agents/skills/actions/references/provider-apis.md +95 -0
  319. package/src/templates/chat/.agents/skills/create-skill/SKILL.md +9 -35
  320. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +4 -5
  321. package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -31
  322. package/src/templates/chat/AGENTS.md +32 -80
  323. package/src/templates/default/.agents/skills/actions/SKILL.md +54 -488
  324. package/src/templates/default/.agents/skills/actions/references/action-fields.md +136 -0
  325. package/src/templates/default/.agents/skills/actions/references/examples.md +94 -0
  326. package/src/templates/default/.agents/skills/actions/references/provider-apis.md +95 -0
  327. package/src/templates/default/.agents/skills/create-skill/SKILL.md +9 -35
  328. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +4 -5
  329. package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +18 -31
  330. package/src/templates/headless/.agents/skills/actions/SKILL.md +54 -488
  331. package/src/templates/headless/.agents/skills/actions/references/action-fields.md +136 -0
  332. package/src/templates/headless/.agents/skills/actions/references/examples.md +94 -0
  333. package/src/templates/headless/.agents/skills/actions/references/provider-apis.md +95 -0
  334. package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +18 -31
  335. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +54 -488
  336. package/src/templates/workspace-core/.agents/skills/actions/references/action-fields.md +136 -0
  337. package/src/templates/workspace-core/.agents/skills/actions/references/examples.md +94 -0
  338. package/src/templates/workspace-core/.agents/skills/actions/references/provider-apis.md +95 -0
  339. package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +1 -0
  340. package/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +1 -0
  341. package/src/templates/workspace-core/.agents/skills/create-skill/SKILL.md +9 -35
  342. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +4 -5
  343. package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +21 -29
  344. package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +18 -31
  345. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +7 -17
  346. package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +3 -3
  347. package/src/templates/workspace-core/AGENTS.md +7 -16
@@ -4,11 +4,18 @@ Slides is an agent-native deck editor. The agent creates, edits, imports,
4
4
  exports, styles, shares, and navigates decks through actions and shared SQL
5
5
  state.
6
6
 
7
- Detailed deck, slide-editing, image, design-system, and export workflows live in
8
- `.agents/skills/`.
7
+ ## Skills
8
+
9
+ Read the relevant skill before deeper work:
9
10
 
10
- Before building common workspace or agent UI, read `agent-native-toolkit` and
11
- `customizing-agent-native` for the public kit and configure/eject seams.
11
+ - `create-deck` for new decks, reference decks, workspace defaults, outlines.
12
+ - `slide-editing` for targeted slide changes; covers fit, density, and overflow.
13
+ - `deck-management` for organization, sharing, import/export, and metadata.
14
+ - `slide-images` and `image-generation-via-a2a` for image work.
15
+ - `design-systems` for per-source design-system actions.
16
+ - `creative-context` for cross-app source reuse, pinned packs, provenance, and
17
+ context opt-out.
18
+ - `analytics-data-for-decks` for delegated data requests.
12
19
 
13
20
  ## Core Rules
14
21
 
@@ -17,9 +24,8 @@ Before building common workspace or agent UI, read `agent-native-toolkit` and
17
24
  - Never hardcode secrets or private/customer data; use vault/OAuth/runtime
18
25
  configuration and fake placeholders in examples.
19
26
  - Use actions for deck lifecycle, slide edits, imports, exports, images, design
20
- systems, and sharing. Do not write deck/slide rows directly.
21
- - In dev, call actions with `pnpm action <name>`; in production, use native
22
- tools. Read the action schema if a parameter is unclear.
27
+ systems, and sharing. Do not write deck/slide rows directly. Read the action
28
+ schema if a parameter is unclear.
23
29
  - Use `view-screen` before editing when the active deck, selected slide, or
24
30
  current layout is unclear.
25
31
  - Preserve deck structure and visual consistency. Prefer focused slide edits over
@@ -34,7 +40,6 @@ Before building common workspace or agent UI, read `agent-native-toolkit` and
34
40
  - Preserve freeform objects and their `data-slide-object-id` values. They are
35
41
  absolutely positioned `.fmd-slide` children; keep generated flex/grid in
36
42
  normal flow and mint ids only for duplicates. Use styled HTML, not inline SVG.
37
- - Read `slide-editing` before creating slides; it covers fit, density, and overflow.
38
43
  - Follow linked design-system tokens; read `design-systems` for per-source actions.
39
44
  - Import/export actions are shortcuts, not capability limits. For exact Google
40
45
  Drive API needs, use `provider-api-catalog`, `provider-api-docs`, and
@@ -53,15 +58,15 @@ Before building common workspace or agent UI, read `agent-native-toolkit` and
53
58
  default. Let that specialist use its own instructions, skills, sources, and
54
59
  tools. Direct action invocation is only for an exact bounded read with a
55
60
  fully known schema; never use it as a workaround for slow or failed A2A.
56
- - For data requests, read `.agents/skills/analytics-data-for-decks/SKILL.md` and
57
- delegate via Analytics over A2A; do not write SQL or call providers directly.
61
+ - For data requests, read `analytics-data-for-decks` and delegate via Analytics
62
+ over A2A; do not write SQL or call providers directly.
58
63
  - When the user names no reference deck or design system, call
59
64
  `get-workspace-defaults` first so a bare "make a deck about X" is still on
60
65
  brand.
61
- - Before generation, follow `.agents/skills/creative-context/SKILL.md`: explicit
62
- request/current deck, then pinned/current pack, then narrow library search.
63
- Respect `contextMode: "off"`. Submit governed context through the Context tab
64
- or `manage-context-membership`; reuse only its opaque clone reference.
66
+ - Before generation, follow `creative-context`: explicit request/current deck,
67
+ then pinned/current pack, then narrow library search. Respect
68
+ `contextMode: "off"`. Submit governed context through the Context tab or
69
+ `manage-context-membership`; reuse only its opaque clone reference.
65
70
 
66
71
  ## Persistence Model
67
72
 
@@ -91,15 +96,7 @@ Deck data lives in SQL and all writes go through server-side actions. Read
91
96
  PPTX and have the user import it into Google Slides. Creating a native Google
92
97
  Slides file directly requires a separate Google Slides API batchUpdate path.
93
98
 
94
- ## Skills
95
-
96
- Read the relevant skill before deeper work:
99
+ ## Source Changes
97
100
 
98
- - `create-deck` for new decks, reference decks, workspace defaults, outlines.
99
- - `slide-editing` for targeted slide changes.
100
- - `deck-management` for organization, sharing, import/export, and metadata.
101
- - `slide-images` and `image-generation-via-a2a` for image work.
102
- - `design-systems`, `frontend-design`, `shadcn-ui`, and `actions` as needed.
103
- - `creative-context` for cross-app source reuse, pinned packs, provenance, and
104
- context opt-out.
105
- - `analytics-data-for-decks` for delegated data.
101
+ Before building common workspace or agent UI, read `agent-native-toolkit`; read
102
+ `customizing-agent-native` before adapting shared UI.
@@ -89,7 +89,7 @@ export function buildReferenceDeckContext({
89
89
 
90
90
  lines.push(
91
91
  "",
92
- `These are samples, not the full deck. Call \`get-deck --id ${id}\` if you need to see how this deck handles a case the patterns above do not cover.`,
92
+ `These are samples, not the full deck. Call \`get-deck --id ${id} --compact false\` only if you need full slide HTML for a case the patterns above do not cover.`,
93
93
  );
94
94
 
95
95
  return truncate(lines.join("\n"), MAX_CONTEXT_CHARS);
@@ -99,7 +99,7 @@ export default defineAction({
99
99
  description:
100
100
  "Get an existing deck's visual language as a reusable pattern library so a new deck can be written in the same style. " +
101
101
  "Returns one worked HTML example per layout as `agentContext`, deliberately without the deck's slide order — the new deck's structure comes from its own content. " +
102
- "Use `get-deck` when you need a specific slide's full content instead.",
102
+ "Use `get-deck` with compact=false when you need full slide content instead.",
103
103
  schema: z.object({
104
104
  id: z.string().describe("Deck ID to use as the reference"),
105
105
  }),
@@ -4,6 +4,7 @@ import { getRequestUserEmail } from "@agent-native/core/server/request-context";
4
4
  import { resolveAccess } from "@agent-native/core/sharing";
5
5
  import { z } from "zod";
6
6
 
7
+ import { summarizeSlideAnimationTargets } from "../server/lib/validate-slide-animations.js";
7
8
  import "../server/db/index.js"; // ensure registerShareableResource runs
8
9
 
9
10
  function stripHtml(html: string): string {
@@ -16,8 +17,9 @@ function stripHtml(html: string): string {
16
17
  .trim();
17
18
  }
18
19
 
19
- function compactAnimationSummary(value: unknown) {
20
+ function compactAnimationSummary(value: unknown, content: string) {
20
21
  if (!Array.isArray(value)) return null;
22
+ const targetSummaries = summarizeSlideAnimationTargets(content, value);
21
23
  return {
22
24
  count: value.length,
23
25
  steps: value.map((entry, index) => {
@@ -25,6 +27,7 @@ function compactAnimationSummary(value: unknown) {
25
27
  return { order: index + 1, valid: false };
26
28
  }
27
29
  const animation = entry as Record<string, unknown>;
30
+ const targetSummary = targetSummaries[index];
28
31
  return {
29
32
  order: index + 1,
30
33
  id: typeof animation.id === "string" ? animation.id : null,
@@ -36,6 +39,12 @@ function compactAnimationSummary(value: unknown) {
36
39
  ? animation.elementPath
37
40
  : null,
38
41
  type: typeof animation.type === "string" ? animation.type : null,
42
+ targetPreview: targetSummary?.targetPreview ?? null,
43
+ resolvedPath: targetSummary?.resolvedPath ?? null,
44
+ targetValid: targetSummary?.targetValid ?? false,
45
+ targetIssue: targetSummary
46
+ ? targetSummary.targetIssue
47
+ : "target-not-found",
39
48
  };
40
49
  }),
41
50
  };
@@ -51,14 +60,22 @@ function deckDeepLink(deckId: string): string {
51
60
 
52
61
  export default defineAction({
53
62
  description:
54
- "Get a specific deck with all slides. Returns full deck JSON including slide content. User-visible slide numbers are 1-based and match the UI: slide 1 is the first slide. Use slideId for edits. After a mutation or for a large deck when only IDs, count, previews, and animation targets are needed, pass compact=true to avoid retransmitting all slide HTML.",
63
+ "Get a specific deck. Pass slideId to return only that slide; targeted agent reads include full HTML by default. In-app agent calls without slideId return compact slide metadata by default; set compact=false when full deck HTML is needed. Frontend and CLI reads remain full unless compact=true. User-visible slide numbers are 1-based and match the UI: slide 1 is the first slide. Use slideId for edits.",
55
64
  timeoutMs: 60_000,
56
65
  schema: z.object({
57
66
  id: z.string().optional().describe("Deck ID (required)"),
67
+ slideId: z
68
+ .string()
69
+ .optional()
70
+ .describe(
71
+ "Optional stable slide ID. When set, return only that slide for a targeted read.",
72
+ ),
58
73
  compact: z
59
74
  .enum(["true", "false"])
60
75
  .optional()
61
- .describe("Set to 'true' for compact output (slide summaries only)"),
76
+ .describe(
77
+ "Set to 'true' for compact slide summaries, or 'false' for full slide HTML. In-app agent calls without slideId default to compact output.",
78
+ ),
62
79
  }),
63
80
  http: { method: "GET" },
64
81
  mcpApp: {
@@ -71,7 +88,7 @@ export default defineAction({
71
88
  height: 680,
72
89
  }),
73
90
  },
74
- run: async (args) => {
91
+ run: async (args, ctx) => {
75
92
  if (!args.id) {
76
93
  throw new Error("--id is required.");
77
94
  }
@@ -87,8 +104,31 @@ export default defineAction({
87
104
  const data = JSON.parse(row.data);
88
105
  const slides = data?.slides || [];
89
106
  const ownerEmail = getRequestUserEmail();
107
+ const selectedSlideIndex =
108
+ args.slideId === undefined
109
+ ? -1
110
+ : slides.findIndex((slide: any) => slide?.id === args.slideId);
111
+
112
+ if (args.slideId !== undefined && selectedSlideIndex < 0) {
113
+ throw Object.assign(new Error(`Slide not found: ${args.slideId}`), {
114
+ statusCode: 404,
115
+ });
116
+ }
90
117
 
91
- if (args.compact === "true") {
118
+ const selectedSlide =
119
+ selectedSlideIndex >= 0 ? slides[selectedSlideIndex] : null;
120
+ const slideEntries: Array<{ slide: any; index: number }> =
121
+ selectedSlideIndex >= 0
122
+ ? [{ slide: selectedSlide, index: selectedSlideIndex }]
123
+ : slides.map((slide: any, index: number) => ({ slide, index }));
124
+
125
+ const compact =
126
+ args.compact === "true" ||
127
+ (args.compact === undefined &&
128
+ ctx?.caller === "tool" &&
129
+ selectedSlideIndex < 0);
130
+
131
+ if (compact) {
92
132
  return {
93
133
  id: row.id,
94
134
  title: row.title || data?.title,
@@ -110,20 +150,27 @@ export default defineAction({
110
150
  slideNumbering:
111
151
  'User-visible slide numbers are 1-based and match the UI. "Slide 1" means slideNumber 1 / zeroBasedIndex 0. Use slideId for edits.',
112
152
  deepLink: deckDeepLink(row.id),
113
- slides: slides.map((s: any, i: number) => ({
153
+ ...(selectedSlide ? { selectedSlideId: selectedSlide.id } : {}),
154
+ slides: slideEntries.map(({ slide: s, index: i }) => ({
114
155
  slideNumber: i + 1,
115
156
  zeroBasedIndex: i,
116
157
  id: s.id,
117
158
  layout: s.layout ?? null,
118
159
  transition: s.transition ?? null,
119
- animations: compactAnimationSummary(s.animations),
160
+ animations: compactAnimationSummary(
161
+ s.animations,
162
+ typeof s.content === "string" ? s.content : "",
163
+ ),
120
164
  textPreview: stripHtml(s.content || "").slice(0, 120),
121
165
  })),
122
166
  };
123
167
  }
124
168
 
169
+ const deckMetadata = { ...data };
170
+ delete deckMetadata.slides;
171
+
125
172
  return {
126
- ...data,
173
+ ...deckMetadata,
127
174
  id: row.id,
128
175
  title: row.title || data?.title,
129
176
  visibility: row.visibility,
@@ -136,7 +183,8 @@ export default defineAction({
136
183
  typeof data.createdAt === "string" ? data.createdAt : row.createdAt,
137
184
  updatedAt: row.updatedAt,
138
185
  deepLink: deckDeepLink(row.id),
139
- slides: slides.map((s: any, i: number) => ({
186
+ ...(selectedSlide ? { selectedSlideId: selectedSlide.id } : {}),
187
+ slides: slideEntries.map(({ slide: s, index: i }) => ({
140
188
  ...s,
141
189
  slideNumber: i + 1,
142
190
  zeroBasedIndex: i,
@@ -28,6 +28,7 @@ import {
28
28
  DEFAULT_ASPECT_RATIO,
29
29
  type AspectRatio,
30
30
  } from "../shared/aspect-ratios.js";
31
+ import { isOpaqueDeckTitle } from "../shared/deck-title.js";
31
32
  import { readUserUploadedFile } from "./_uploaded-files.js";
32
33
  import { withDeckLock } from "./patch-deck.js";
33
34
 
@@ -586,7 +587,7 @@ async function buildPptxSlide(
586
587
 
587
588
  function titleFromPath(filePath: string): string {
588
589
  const base = path.basename(filePath, path.extname(filePath)).trim();
589
- return base || "Imported File";
590
+ return base && !isOpaqueDeckTitle(base) ? base : "Imported File";
590
591
  }
591
592
 
592
593
  function normalizePdfPages(result: unknown): { num: number; text: string }[] {
@@ -31,6 +31,7 @@ import {
31
31
  sourceImportForDeck,
32
32
  type SourceImportMetadata,
33
33
  } from "../server/lib/source-import.js";
34
+ import { assertSlideAnimationsResolve } from "../server/lib/validate-slide-animations.js";
34
35
  import { ASPECT_RATIO_VALUES } from "../shared/aspect-ratios.js";
35
36
  import {
36
37
  assertHumanReadableDeckTitle,
@@ -84,11 +85,13 @@ const SlideAnimationSchema = z.object({
84
85
  .min(1)
85
86
  .optional()
86
87
  .describe(
87
- "Preferred 0-based child-index path from the outer .fmd-slide wrapper. Re-read final HTML after content edits.",
88
+ "Preferred 0-based child-index path from the outer .fmd-slide wrapper. Required for agent-created or content-revised animations; re-read final HTML after content edits.",
88
89
  ),
89
90
  type: z
90
91
  .enum(["appear", "fade", "slide-up", "zoom"])
91
- .describe("Animation used when this step is revealed"),
92
+ .describe(
93
+ "Animation used when this step is revealed. Supported semantics: appear (immediate reveal), fade (opacity), slide-up (subtle upward motion), zoom (subtle scale). Do not invent other types.",
94
+ ),
92
95
  });
93
96
 
94
97
  const SlideFieldsSchema = z.object({
@@ -431,6 +434,43 @@ export function applyOperation(deck: any, op: Operation): void {
431
434
  }
432
435
  }
433
436
 
437
+ /**
438
+ * Content and animation metadata are one contract. Validate only slides whose
439
+ * content or animation list changed so unrelated note/title writes do not
440
+ * resurrect old metadata failures, while any edit that can stale a path is
441
+ * rejected before persistence.
442
+ */
443
+ export function assertPatchedSlideAnimationsResolve(
444
+ deck: any,
445
+ operations: readonly Operation[],
446
+ options?: { requireElementPaths?: boolean },
447
+ ): void {
448
+ const slideIdsToValidate = new Set(
449
+ operations.flatMap((operation) =>
450
+ operation.op === "patch-slide" &&
451
+ (operation.fields.content !== undefined ||
452
+ operation.fields.animations !== undefined)
453
+ ? [operation.slideId]
454
+ : [],
455
+ ),
456
+ );
457
+ if (slideIdsToValidate.size === 0) return;
458
+
459
+ const slides: any[] = Array.isArray(deck.slides) ? deck.slides : [];
460
+ for (const slideId of slideIdsToValidate) {
461
+ const slide = slides.find((candidate) => candidate?.id === slideId);
462
+ if (!slide || !Array.isArray(slide.animations) || !slide.animations.length)
463
+ continue;
464
+
465
+ assertSlideAnimationsResolve({
466
+ slideId,
467
+ content: typeof slide.content === "string" ? slide.content : "",
468
+ animations: slide.animations,
469
+ requireElementPaths: options?.requireElementPaths,
470
+ });
471
+ }
472
+ }
473
+
434
474
  /**
435
475
  * Resolve the last operation in a sequence. For example, when typing a new name
436
476
  * this will be the latest name of the deck in a sequence of keystrokes.
@@ -580,6 +620,9 @@ export default defineAction({
580
620
  for (const op of operations) {
581
621
  applyOperation(deck, op);
582
622
  }
623
+ assertPatchedSlideAnimationsResolve(deck, operations, {
624
+ requireElementPaths: isAgentCaller,
625
+ });
583
626
 
584
627
  const now = new Date().toISOString();
585
628
  deck.updatedAt = now;
@@ -364,7 +364,7 @@ export default defineAction({
364
364
  if (rmw.notFound) {
365
365
  return {
366
366
  ok: false,
367
- message: `Text not found in slide: "${find!.slice(0, 60)}". Use get-deck to see current slide content.`,
367
+ message: `Text not found in slide: "${find!.slice(0, 60)}". Use get-deck with compact=false to see the current slide HTML.`,
368
368
  };
369
369
  }
370
370
 
@@ -458,9 +458,9 @@ export function SlideCommentsPanel({
458
458
  const showInput = pendingComment || addingComment;
459
459
 
460
460
  return (
461
- <div className="flex h-full w-[17rem] flex-shrink-0 flex-col border-l border-border bg-background">
461
+ <div className="flex h-full w-[17rem] flex-shrink-0 flex-col bg-[var(--slides-editor-surface)]">
462
462
  {/* Header */}
463
- <div className="flex items-center justify-between px-4 py-3 border-b border-border flex-shrink-0">
463
+ <div className="flex flex-shrink-0 items-center justify-between px-4 py-3">
464
464
  <span className="text-[13px] font-medium text-foreground/80">
465
465
  {t("comments.title")}
466
466
  </span>
@@ -7,7 +7,6 @@ import {
7
7
  IconTrash,
8
8
  IconCopy,
9
9
  IconPencil,
10
- IconPalette,
11
10
  IconPlus,
12
11
  IconStar,
13
12
  IconStarFilled,
@@ -33,7 +32,6 @@ interface DeckCardProps {
33
32
  onRename: (id: string, newTitle: string) => void;
34
33
  onDuplicate: (id: string) => void;
35
34
  onToggleStar: (id: string, starred: boolean) => void;
36
- designSystemTitle?: string | null;
37
35
  isWorkspaceDefault?: boolean;
38
36
  canSetWorkspaceDefault?: boolean;
39
37
  onSetWorkspaceDefault?: (id: string, isDefault: boolean) => void;
@@ -45,7 +43,6 @@ export default function DeckCard({
45
43
  onRename,
46
44
  onDuplicate,
47
45
  onToggleStar,
48
- designSystemTitle,
49
46
  isWorkspaceDefault = false,
50
47
  canSetWorkspaceDefault = false,
51
48
  onSetWorkspaceDefault,
@@ -101,7 +98,7 @@ export default function DeckCard({
101
98
  <div className="group relative">
102
99
  <Link
103
100
  to={`/deck/${deck.id}`}
104
- className="block rounded-xl border border-border bg-card hover:border-border transition-all duration-200 overflow-hidden hover:shadow-lg hover:shadow-[#609FF8]/5"
101
+ className="block overflow-hidden rounded-xl border border-transparent bg-card transition-[background-color,border-color] duration-200 hover:border-border hover:bg-accent/30"
105
102
  onClick={(e) => {
106
103
  if (isRenaming) e.preventDefault();
107
104
  }}
@@ -144,25 +141,6 @@ export default function DeckCard({
144
141
  )}
145
142
  <VisibilityBadge visibility={deck.visibility} />
146
143
  </div>
147
- <div className="mt-1 flex min-w-0 items-center gap-2 text-xs text-muted-foreground">
148
- <span className="shrink-0 whitespace-nowrap">
149
- {deck.slides.length} slide{deck.slides.length !== 1 ? "s" : ""}
150
- </span>
151
- {isWorkspaceDefault && (
152
- <span className="inline-flex shrink-0 items-center gap-1 rounded border border-[#609FF8]/40 px-1.5 py-0.5 text-[10px] text-[#609FF8]">
153
- <IconBuildingCommunity className="h-3 w-3 shrink-0" />
154
- {t("home.workspaceDefaultBadge")}
155
- </span>
156
- )}
157
- {deck.designSystemId && (
158
- <span className="inline-flex min-w-0 max-w-full items-center gap-1 rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground/80">
159
- <IconPalette className="h-3 w-3 shrink-0 text-[#609FF8]" />
160
- <span className="max-w-28 truncate">
161
- {designSystemTitle || "Design system"}
162
- </span>
163
- </span>
164
- )}
165
- </div>
166
144
  </div>
167
145
  </Link>
168
146
 
@@ -3,8 +3,8 @@ import { ShareButton } from "@agent-native/core/client/sharing";
3
3
  import { VisibilityBadge } from "@agent-native/toolkit/sharing";
4
4
  import {
5
5
  IconBuildingCommunity,
6
+ IconComponents,
6
7
  IconDots,
7
- IconPalette,
8
8
  IconStar,
9
9
  IconStarFilled,
10
10
  IconTrash,
@@ -190,7 +190,7 @@ export function DesignSystemCard({
190
190
  {/* Info area */}
191
191
  <div className="p-4 space-y-1.5">
192
192
  <div className="flex items-center gap-2 min-w-0">
193
- <IconPalette className="w-3.5 h-3.5 text-muted-foreground shrink-0" />
193
+ <IconComponents className="w-3.5 h-3.5 text-muted-foreground shrink-0" />
194
194
  <h3
195
195
  className="font-medium text-sm text-foreground truncate"
196
196
  title={title}
@@ -8,7 +8,7 @@ import { openAgentSidebar } from "@agent-native/core/client/navigation";
8
8
  import { withBuilderUtmTrackingParams } from "@agent-native/core/shared";
9
9
  import {
10
10
  IconWorld,
11
- IconPalette,
11
+ IconComponents,
12
12
  IconLoader2,
13
13
  IconBrandGithub,
14
14
  IconBrandFigma,
@@ -721,7 +721,7 @@ export function DesignSystemSetup({
721
721
  </div>
722
722
 
723
723
  <SourceAccordionRow
724
- icon={IconPalette}
724
+ icon={IconComponents}
725
725
  title={t("designSystemSetup.otherSources")}
726
726
  description={t("designSystemSetup.otherSourcesDescription")}
727
727
  expanded={sourcePanel === "other"}
@@ -741,7 +741,7 @@ export function DesignSystemSetup({
741
741
  <div className="divide-y divide-border">
742
742
  <SourceAccordionRow
743
743
  className="rounded-none border-0"
744
- icon={IconPalette}
744
+ icon={IconComponents}
745
745
  title={t("designSystemSetup.companyBrand")}
746
746
  description={t(
747
747
  "designSystemSetup.companyBrandPlaceholder",
@@ -771,7 +771,7 @@ export function DesignSystemSetup({
771
771
  {existingSystems.length > 0 && (
772
772
  <SourceAccordionRow
773
773
  className="rounded-none border-0"
774
- icon={IconPalette}
774
+ icon={IconComponents}
775
775
  title={t("designSystemSetup.forkExisting")}
776
776
  description={t(
777
777
  "designSystemSetup.customInstructionsDescription",
@@ -1064,7 +1064,7 @@ export function DesignSystemSetup({
1064
1064
  }`}
1065
1065
  >
1066
1066
  <div className="flex items-center gap-2">
1067
- <IconPalette className="w-3.5 h-3.5 text-muted-foreground" />
1067
+ <IconComponents className="w-3.5 h-3.5 text-muted-foreground" />
1068
1068
  <span className="text-sm text-foreground/80 truncate">
1069
1069
  {ds.title}
1070
1070
  </span>
@@ -1276,7 +1276,7 @@ function BuilderSourceStatus({ builder }: { builder: BuilderSourceDetails }) {
1276
1276
  ? IconBrandGithub
1277
1277
  : sourceKind === "code"
1278
1278
  ? IconFolder
1279
- : IconPalette;
1279
+ : IconComponents;
1280
1280
  const sourceTitle =
1281
1281
  sourceKind === "figma"
1282
1282
  ? t("designSystemSetup.sourceFigma")
@@ -244,9 +244,9 @@ export function AnimationsPanel({
244
244
  );
245
245
 
246
246
  return (
247
- <div className="w-60 flex flex-col h-full border-l border-border bg-background">
247
+ <div className="flex h-full w-60 flex-col bg-[var(--slides-editor-surface)]">
248
248
  {/* Header */}
249
- <div className="flex items-center justify-between px-3 py-2.5 border-b border-border">
249
+ <div className="flex items-center justify-between px-3 py-2.5">
250
250
  <span className="text-xs font-medium text-foreground/90">
251
251
  {t("animations.title")}
252
252
  </span>
@@ -303,7 +303,7 @@ export function AnimationsPanel({
303
303
 
304
304
  {/* Available elements to add */}
305
305
  {availableElements.length > 0 && (
306
- <div className="border-t border-border px-2 py-2">
306
+ <div className="px-2 py-2">
307
307
  <div className="flex items-center justify-between mb-1.5 px-1">
308
308
  <span className="text-[9px] font-medium text-muted-foreground/70 uppercase tracking-wider">
309
309
  {t("animations.elements")}
@@ -3,12 +3,12 @@ import { Skeleton } from "@/components/ui/skeleton";
3
3
  export function DeckEditorSkeleton({ label }: { label: string }) {
4
4
  return (
5
5
  <div
6
- className="flex h-full min-h-0 flex-1 flex-col overflow-hidden bg-background"
6
+ className="deck-editor-shell flex h-full min-h-0 flex-1 flex-col overflow-hidden rounded-xl bg-background"
7
7
  role="status"
8
8
  aria-label={label}
9
9
  data-testid="deck-editor-loading"
10
10
  >
11
- <div className="flex h-11 shrink-0 items-center gap-3 border-b border-border px-3">
11
+ <div className="flex h-11 shrink-0 items-center gap-3 px-3">
12
12
  <Skeleton className="size-8 rounded-md" />
13
13
  <Skeleton className="h-5 w-36" />
14
14
  <div className="ml-auto flex items-center gap-2">
@@ -18,7 +18,7 @@ export function DeckEditorSkeleton({ label }: { label: string }) {
18
18
  </div>
19
19
  </div>
20
20
  <div className="flex min-h-0 flex-1">
21
- <div className="hidden w-56 shrink-0 flex-col gap-4 border-r border-border p-4 sm:w-64 md:flex">
21
+ <div className="hidden w-56 shrink-0 flex-col gap-4 p-4 sm:w-64 md:flex">
22
22
  {[0, 1, 2].map((index) => (
23
23
  <div key={index} className="flex gap-3">
24
24
  <Skeleton className="h-4 w-4 shrink-0 rounded-sm" />
@@ -26,7 +26,7 @@ export function DeckEditorSkeleton({ label }: { label: string }) {
26
26
  </div>
27
27
  ))}
28
28
  </div>
29
- <div className="flex min-w-0 flex-1 items-center justify-center bg-muted/20 p-6">
29
+ <div className="flex min-w-0 flex-1 items-center justify-center bg-[var(--slides-editor-surface)] p-6">
30
30
  <Skeleton className="aspect-video w-full max-w-4xl rounded-md shadow-sm" />
31
31
  </div>
32
32
  </div>
@@ -445,7 +445,7 @@ export default function EditorSidebar({
445
445
  }, [slides, activeSlideId, onSelectSlide]);
446
446
 
447
447
  return (
448
- <div className="flex h-full min-h-0 w-48 flex-shrink-0 flex-col border-r border-border/70 bg-background/95 sm:w-52">
448
+ <div className="flex h-full min-h-0 w-48 flex-shrink-0 flex-col bg-background sm:w-52">
449
449
  <div
450
450
  ref={thumbScrollRef}
451
451
  className="relative min-h-0 flex-1 space-y-1 overflow-y-auto overscroll-contain p-2"