@agent-native/core 0.149.1 → 0.149.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) 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/dashboard-management/SKILL.md +2 -0
  9. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +4 -5
  10. package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +18 -31
  11. package/corpus/templates/analytics/AGENTS.md +25 -32
  12. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +150 -46
  13. package/corpus/templates/analytics/app/global.css +1 -1
  14. package/corpus/templates/analytics/app/i18n-data.ts +37 -0
  15. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +1 -1
  16. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +32 -0
  17. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +2 -0
  18. package/corpus/templates/analytics/changelog/2026-08-10-dashboard-tables-can-be-copied-and-sorted-by-multiple-column.md +6 -0
  19. package/corpus/templates/analytics/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
  20. package/corpus/templates/analytics/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
  21. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +54 -488
  22. package/corpus/templates/assets/.agents/skills/actions/references/action-fields.md +136 -0
  23. package/corpus/templates/assets/.agents/skills/actions/references/examples.md +94 -0
  24. package/corpus/templates/assets/.agents/skills/actions/references/provider-apis.md +95 -0
  25. package/corpus/templates/assets/.agents/skills/create-skill/SKILL.md +9 -35
  26. package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +4 -2
  27. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +4 -5
  28. package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +18 -31
  29. package/corpus/templates/assets/AGENTS.md +6 -9
  30. package/corpus/templates/assets/app/global.css +1 -1
  31. package/corpus/templates/assets/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
  32. package/corpus/templates/assets/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
  33. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +54 -488
  34. package/corpus/templates/brain/.agents/skills/actions/references/action-fields.md +136 -0
  35. package/corpus/templates/brain/.agents/skills/actions/references/examples.md +94 -0
  36. package/corpus/templates/brain/.agents/skills/actions/references/provider-apis.md +95 -0
  37. package/corpus/templates/brain/.agents/skills/create-skill/SKILL.md +9 -35
  38. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +4 -5
  39. package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +18 -31
  40. package/corpus/templates/brain/AGENTS.md +5 -12
  41. package/corpus/templates/brain/app/global.css +1 -1
  42. package/corpus/templates/brain/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
  43. package/corpus/templates/brain/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
  44. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +54 -488
  45. package/corpus/templates/calendar/.agents/skills/actions/references/action-fields.md +136 -0
  46. package/corpus/templates/calendar/.agents/skills/actions/references/examples.md +94 -0
  47. package/corpus/templates/calendar/.agents/skills/actions/references/provider-apis.md +95 -0
  48. package/corpus/templates/calendar/.agents/skills/create-skill/SKILL.md +9 -35
  49. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +4 -5
  50. package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +18 -31
  51. package/corpus/templates/calendar/AGENTS.md +8 -9
  52. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +54 -488
  53. package/corpus/templates/chat/.agents/skills/actions/references/action-fields.md +136 -0
  54. package/corpus/templates/chat/.agents/skills/actions/references/examples.md +94 -0
  55. package/corpus/templates/chat/.agents/skills/actions/references/provider-apis.md +95 -0
  56. package/corpus/templates/chat/.agents/skills/create-skill/SKILL.md +9 -35
  57. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +4 -5
  58. package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -31
  59. package/corpus/templates/chat/AGENTS.md +32 -80
  60. package/corpus/templates/chat/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
  61. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +54 -488
  62. package/corpus/templates/clips/.agents/skills/actions/references/action-fields.md +136 -0
  63. package/corpus/templates/clips/.agents/skills/actions/references/examples.md +94 -0
  64. package/corpus/templates/clips/.agents/skills/actions/references/provider-apis.md +95 -0
  65. package/corpus/templates/clips/.agents/skills/create-skill/SKILL.md +9 -35
  66. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +4 -5
  67. package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +18 -31
  68. package/corpus/templates/clips/AGENTS.md +25 -31
  69. package/corpus/templates/clips/changelog/2026-08-10-clips-desktop-sign-in-now-starts-with-magic-links-and-google.md +6 -0
  70. package/corpus/templates/clips/chrome-extension/src/overlay.css +1 -0
  71. package/corpus/templates/clips/desktop/src/app.tsx +274 -137
  72. package/corpus/templates/clips/desktop/src/styles.css +35 -0
  73. package/corpus/templates/content/.agents/skills/actions/SKILL.md +54 -488
  74. package/corpus/templates/content/.agents/skills/actions/references/action-fields.md +136 -0
  75. package/corpus/templates/content/.agents/skills/actions/references/examples.md +94 -0
  76. package/corpus/templates/content/.agents/skills/actions/references/provider-apis.md +95 -0
  77. package/corpus/templates/content/.agents/skills/create-skill/SKILL.md +9 -35
  78. package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +4 -2
  79. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +4 -5
  80. package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +18 -31
  81. package/corpus/templates/content/AGENTS.md +5 -9
  82. package/corpus/templates/content/app/global.css +1 -0
  83. package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +18 -31
  84. package/corpus/templates/crm/AGENTS.md +7 -11
  85. package/corpus/templates/crm/app/global.css +1 -1
  86. package/corpus/templates/crm/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
  87. package/corpus/templates/crm/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
  88. package/corpus/templates/design/.agents/skills/actions/SKILL.md +54 -488
  89. package/corpus/templates/design/.agents/skills/actions/references/action-fields.md +136 -0
  90. package/corpus/templates/design/.agents/skills/actions/references/examples.md +94 -0
  91. package/corpus/templates/design/.agents/skills/actions/references/provider-apis.md +95 -0
  92. package/corpus/templates/design/.agents/skills/create-skill/SKILL.md +9 -35
  93. package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +4 -2
  94. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +4 -5
  95. package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +18 -31
  96. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +70 -3
  97. package/corpus/templates/design/AGENTS.md +13 -21
  98. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +12 -0
  99. package/corpus/templates/design/app/components/design/LayersPanel.tsx +19 -2
  100. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +115 -7
  101. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +82 -7
  102. package/corpus/templates/design/app/components/design/design-trace.ts +120 -0
  103. package/corpus/templates/design/app/components/design/dnd-debug.ts +2 -1
  104. package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +40 -26
  105. package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +4 -1
  106. package/corpus/templates/design/app/components/design/multi-screen/frame-geometry.ts +12 -3
  107. package/corpus/templates/design/app/components/design/multi-screen/screen-content-cache.ts +4 -0
  108. package/corpus/templates/design/app/components/design/multi-screen/types.ts +7 -0
  109. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +3 -2
  110. package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -2
  111. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +3 -0
  112. package/corpus/templates/design/app/i18n-data.ts +1 -0
  113. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +5 -5
  114. package/corpus/templates/design/app/pages/DesignSystems.tsx +3 -2
  115. package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +100 -13
  116. package/corpus/templates/design/app/pages/design-editor/cross-screen-text-color.ts +1 -1
  117. package/corpus/templates/design/app/pages/design-editor/data-operations.ts +14 -0
  118. package/corpus/templates/design/changelog/2026-08-10-marquee-selecting-layers-far-down-a-tall-screen-now-selects-.md +6 -0
  119. package/corpus/templates/design/changelog/2026-08-10-the-frame-tool-draws-a-plain-frame-by-default-with-screen-av.md +6 -0
  120. package/corpus/templates/design/e2e/global-setup.ts +27 -32
  121. package/corpus/templates/design/playwright.config.ts +3 -5
  122. package/corpus/templates/design/shared/breakpoint-media.ts +9 -2
  123. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +54 -488
  124. package/corpus/templates/dispatch/.agents/skills/actions/references/action-fields.md +136 -0
  125. package/corpus/templates/dispatch/.agents/skills/actions/references/examples.md +94 -0
  126. package/corpus/templates/dispatch/.agents/skills/actions/references/provider-apis.md +95 -0
  127. package/corpus/templates/dispatch/.agents/skills/create-skill/SKILL.md +9 -35
  128. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +4 -5
  129. package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +18 -31
  130. package/corpus/templates/dispatch/AGENTS.md +9 -16
  131. package/corpus/templates/dispatch/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
  132. package/corpus/templates/factory/.agents/skills/actions/SKILL.md +54 -488
  133. package/corpus/templates/factory/.agents/skills/actions/references/action-fields.md +136 -0
  134. package/corpus/templates/factory/.agents/skills/actions/references/examples.md +94 -0
  135. package/corpus/templates/factory/.agents/skills/actions/references/provider-apis.md +95 -0
  136. package/corpus/templates/factory/.agents/skills/create-skill/SKILL.md +9 -35
  137. package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +4 -5
  138. package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +18 -31
  139. package/corpus/templates/factory/AGENTS.md +10 -24
  140. package/corpus/templates/factory/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
  141. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +54 -488
  142. package/corpus/templates/forms/.agents/skills/actions/references/action-fields.md +136 -0
  143. package/corpus/templates/forms/.agents/skills/actions/references/examples.md +94 -0
  144. package/corpus/templates/forms/.agents/skills/actions/references/provider-apis.md +95 -0
  145. package/corpus/templates/forms/.agents/skills/create-skill/SKILL.md +9 -35
  146. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +4 -5
  147. package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +18 -31
  148. package/corpus/templates/forms/AGENTS.md +11 -17
  149. package/corpus/templates/forms/app/global.css +1 -0
  150. package/corpus/templates/forms/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
  151. package/corpus/templates/forms/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
  152. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +4 -5
  153. package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +18 -31
  154. package/corpus/templates/macros/AGENTS.md +8 -8
  155. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +54 -488
  156. package/corpus/templates/mail/.agents/skills/actions/references/action-fields.md +136 -0
  157. package/corpus/templates/mail/.agents/skills/actions/references/examples.md +94 -0
  158. package/corpus/templates/mail/.agents/skills/actions/references/provider-apis.md +95 -0
  159. package/corpus/templates/mail/.agents/skills/create-skill/SKILL.md +9 -35
  160. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +4 -5
  161. package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +18 -31
  162. package/corpus/templates/mail/AGENTS.md +5 -6
  163. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +54 -488
  164. package/corpus/templates/plan/.agents/skills/actions/references/action-fields.md +136 -0
  165. package/corpus/templates/plan/.agents/skills/actions/references/examples.md +94 -0
  166. package/corpus/templates/plan/.agents/skills/actions/references/provider-apis.md +95 -0
  167. package/corpus/templates/plan/.agents/skills/create-skill/SKILL.md +9 -35
  168. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +4 -5
  169. package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +18 -31
  170. package/corpus/templates/plan/AGENTS.md +5 -14
  171. package/corpus/templates/plan/app/global.css +1 -0
  172. package/corpus/templates/plan/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
  173. package/corpus/templates/plan/changelog/2026-08-11-plan-no-longer-reloads-when-runtime-state-changes.md +6 -0
  174. package/corpus/templates/plan/server/ui-plan-html.ts +4 -1
  175. package/corpus/templates/plan/vite.config.ts +5 -0
  176. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +54 -488
  177. package/corpus/templates/slides/.agents/skills/actions/references/action-fields.md +136 -0
  178. package/corpus/templates/slides/.agents/skills/actions/references/examples.md +94 -0
  179. package/corpus/templates/slides/.agents/skills/actions/references/provider-apis.md +95 -0
  180. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +2 -2
  181. package/corpus/templates/slides/.agents/skills/create-skill/SKILL.md +9 -35
  182. package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +6 -3
  183. package/corpus/templates/slides/.agents/skills/deck-management/SKILL.md +6 -1
  184. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +4 -5
  185. package/corpus/templates/slides/.agents/skills/image-generation-via-a2a/SKILL.md +3 -2
  186. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +3 -0
  187. package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +3 -3
  188. package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +18 -31
  189. package/corpus/templates/slides/AGENTS.md +33 -35
  190. package/corpus/templates/slides/actions/add-deck.ts +2 -0
  191. package/corpus/templates/slides/actions/add-slide.ts +15 -1
  192. package/corpus/templates/slides/actions/create-deck.ts +18 -6
  193. package/corpus/templates/slides/actions/get-deck-reference-context.ts +2 -2
  194. package/corpus/templates/slides/actions/get-deck.ts +83 -7
  195. package/corpus/templates/slides/actions/import-file.ts +2 -1
  196. package/corpus/templates/slides/actions/patch-deck.ts +165 -9
  197. package/corpus/templates/slides/actions/save-deck.ts +24 -1
  198. package/corpus/templates/slides/actions/update-slide.ts +1 -1
  199. package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +2 -2
  200. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +1 -23
  201. package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +2 -2
  202. package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +6 -6
  203. package/corpus/templates/slides/app/components/editor/AnimationsPanel.tsx +3 -3
  204. package/corpus/templates/slides/app/components/editor/DeckEditorSkeleton.tsx +4 -4
  205. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +1 -1
  206. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +432 -668
  207. package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +296 -259
  208. package/corpus/templates/slides/app/components/editor/GeneratingSlidePreview.tsx +1 -1
  209. package/corpus/templates/slides/app/components/editor/GoogleDriveConnectionCta.tsx +13 -1
  210. package/corpus/templates/slides/app/components/editor/NewDeckReferenceStep.tsx +56 -174
  211. package/corpus/templates/slides/app/components/editor/PromptDialog.tsx +241 -116
  212. package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +1 -1
  213. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +42 -14
  214. package/corpus/templates/slides/app/components/editor/SpeakerNotesPanel.tsx +6 -12
  215. package/corpus/templates/slides/app/components/editor/editor-command-model.ts +35 -0
  216. package/corpus/templates/slides/app/components/layout/AgentWorkIndicator.tsx +1 -1
  217. package/corpus/templates/slides/app/components/layout/Layout.tsx +34 -35
  218. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +8 -10
  219. package/corpus/templates/slides/app/components/layout/layout-route-policy.ts +2 -5
  220. package/corpus/templates/slides/app/components/onboarding/FirstDeckOnboardingFlow.tsx +45 -40
  221. package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +63 -16
  222. package/corpus/templates/slides/app/context/DeckContext.tsx +2 -1
  223. package/corpus/templates/slides/app/global.css +76 -1
  224. package/corpus/templates/slides/app/hooks/use-generating-slide-preview.ts +25 -3
  225. package/corpus/templates/slides/app/i18n/en-US.ts +2 -0
  226. package/corpus/templates/slides/app/lib/create-deck-generation.ts +52 -23
  227. package/corpus/templates/slides/app/lib/recent-references.ts +23 -1
  228. package/corpus/templates/slides/app/lib/slide-animation-elements.ts +104 -3
  229. package/corpus/templates/slides/app/pages/DeckEditor.tsx +17 -33
  230. package/corpus/templates/slides/app/pages/DesignSystems.tsx +2 -2
  231. package/corpus/templates/slides/app/pages/Index.tsx +315 -151
  232. package/corpus/templates/slides/app/root.tsx +43 -0
  233. package/corpus/templates/slides/changelog/2026-08-10-ai-editing-avatar-badge.md +6 -0
  234. package/corpus/templates/slides/changelog/2026-08-10-generated-decks-keep-a-clear-human-readable-title.md +6 -0
  235. package/corpus/templates/slides/changelog/2026-08-10-new-deck-creation-now-shows-progress-opens-the-editor-direct.md +6 -0
  236. package/corpus/templates/slides/changelog/2026-08-10-presentation-reveals-now-follow-valid-targets.md +6 -0
  237. package/corpus/templates/slides/changelog/2026-08-10-slides-editing-controls-are-consolidated-into-one-focused-me.md +6 -0
  238. package/corpus/templates/slides/changelog/2026-08-10-slides-now-verify-and-restyle-every-imported-slide-in-one-pa.md +6 -0
  239. package/corpus/templates/slides/changelog/2026-08-10-slides-only-suggests-a-google-connection-for-relevant-reques.md +6 -0
  240. package/corpus/templates/slides/changelog/2026-08-10-the-google-slides-import-option-is-now-labeled-slides.md +6 -0
  241. package/corpus/templates/slides/changelog/2026-08-11-faster-slides-chat-deck-reads.md +6 -0
  242. package/corpus/templates/slides/changelog/2026-08-11-slides-chat-can-read-one-slide-without-loading-the-full-deck.md +6 -0
  243. package/corpus/templates/slides/changelog/2026-08-11-slides-clearly-indicate-when-an-ai-agent-is-editing-alongsid.md +6 -0
  244. package/corpus/templates/slides/package.json +1 -0
  245. package/corpus/templates/slides/server/lib/chat-attachments.ts +1 -1
  246. package/corpus/templates/slides/server/lib/validate-slide-animations.ts +163 -0
  247. package/corpus/templates/slides/server/plugins/agent-chat.ts +8 -5
  248. package/corpus/templates/slides/shared/api.ts +47 -15
  249. package/corpus/templates/slides/shared/deck-title.ts +135 -0
  250. package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +54 -488
  251. package/corpus/templates/tasks/.agents/skills/actions/references/action-fields.md +136 -0
  252. package/corpus/templates/tasks/.agents/skills/actions/references/examples.md +94 -0
  253. package/corpus/templates/tasks/.agents/skills/actions/references/provider-apis.md +95 -0
  254. package/corpus/templates/tasks/.agents/skills/agent-watchdog/SKILL.md +1 -0
  255. package/corpus/templates/tasks/.agents/skills/create-skill/SKILL.md +9 -35
  256. package/corpus/templates/tasks/.agents/skills/efficient-fable/SKILL.md +1 -0
  257. package/corpus/templates/tasks/.agents/skills/efficient-frontier/SKILL.md +1 -0
  258. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +4 -5
  259. package/corpus/templates/tasks/.agents/skills/plan-arbiter/SKILL.md +1 -0
  260. package/corpus/templates/tasks/.agents/skills/plow-ahead/SKILL.md +1 -0
  261. package/corpus/templates/tasks/.agents/skills/quick-recap/SKILL.md +1 -0
  262. package/corpus/templates/tasks/.agents/skills/read-the-damn-docs/SKILL.md +1 -0
  263. package/corpus/templates/tasks/.agents/skills/stay-within-limits/SKILL.md +1 -0
  264. package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +18 -31
  265. package/corpus/templates/tasks/AGENTS.md +5 -20
  266. package/corpus/templates/tasks/app/components/tasks/TaskListRow.tsx +4 -1
  267. package/dist/agent/engine/ai-sdk-engine.js +1 -1
  268. package/dist/agent/production-agent.d.ts +21 -1
  269. package/dist/agent/production-agent.js +505 -355
  270. package/dist/agent/run-manager.js +156 -14
  271. package/dist/agent/run-store.d.ts +11 -10
  272. package/dist/agent/run-store.js +17 -13
  273. package/dist/agent/tool-approval-store.d.ts +18 -0
  274. package/dist/agent/tool-approval-store.js +122 -0
  275. package/dist/agent/types.d.ts +1 -1
  276. package/dist/cli/code-agent-executor.js +11 -2
  277. package/dist/client/AgentPanel.js +31 -6
  278. package/dist/client/AssistantChat.d.ts +9 -4
  279. package/dist/client/AssistantChat.js +221 -149
  280. package/dist/client/active-run-state.d.ts +9 -1
  281. package/dist/client/active-run-state.js +34 -3
  282. package/dist/client/agent-chat/index.d.ts +1 -1
  283. package/dist/client/agent-chat-adapter.d.ts +8 -0
  284. package/dist/client/agent-chat-adapter.js +125 -28
  285. package/dist/client/agent-chat.d.ts +1 -1
  286. package/dist/client/chat/markdown-renderer.js +14 -2
  287. package/dist/client/chat/message-components.d.ts +13 -3
  288. package/dist/client/chat/message-components.js +57 -52
  289. package/dist/client/chat/run-recovery.d.ts +1 -0
  290. package/dist/client/chat/run-recovery.js +8 -0
  291. package/dist/client/chat/tool-call-display.d.ts +5 -5
  292. package/dist/client/chat/tool-call-display.js +9 -212
  293. package/dist/client/chat-first/apps-rail.js +3 -3
  294. package/dist/client/chat-first/browser-pane.js +4 -1
  295. package/dist/client/chat-first/chat-history.d.ts +3 -1
  296. package/dist/client/chat-first/chat-history.js +7 -4
  297. package/dist/client/chat-first/surface-tabs.d.ts +1 -1
  298. package/dist/client/chat-first/surface-tabs.js +52 -41
  299. package/dist/client/chat-first/types.d.ts +3 -0
  300. package/dist/client/chat-first.d.ts +10 -0
  301. package/dist/client/chat-first.js +37 -2
  302. package/dist/client/components/ui/message-scroller.js +4 -1
  303. package/dist/client/i18n.js +3 -1
  304. package/dist/client/resources/McpConnectionSuggestion.js +9 -1
  305. package/dist/client/sse-event-processor.d.ts +4 -2
  306. package/dist/client/sse-event-processor.js +46 -6
  307. package/dist/client/use-chat-models.js +156 -80
  308. package/dist/client/use-run-stuck-detection.d.ts +2 -0
  309. package/dist/client/use-run-stuck-detection.js +85 -9
  310. package/dist/collab/awareness.d.ts +2 -2
  311. package/dist/collab/routes.d.ts +1 -1
  312. package/dist/collab/struct-routes.d.ts +1 -1
  313. package/dist/integrations/adapters/slack.d.ts +0 -4
  314. package/dist/integrations/adapters/slack.js +6 -30
  315. package/dist/integrations/catalog.js +1 -1
  316. package/dist/integrations/pending-tasks-store.d.ts +0 -8
  317. package/dist/integrations/pending-tasks-store.js +0 -21
  318. package/dist/integrations/slack-manifest.d.ts +2 -2
  319. package/dist/integrations/slack-manifest.js +0 -3
  320. package/dist/integrations/webhook-handler.js +1 -1
  321. package/dist/mcp/screen-memory-stdio.d.ts +7 -7
  322. package/dist/observability/routes.d.ts +3 -3
  323. package/dist/provider-api/actions/custom-provider-registration.d.ts +4 -4
  324. package/dist/provider-api/actions/provider-api.d.ts +8 -8
  325. package/dist/scripts/docs/source-search.js +2 -2
  326. package/dist/server/agent-chat/framework-prompts.js +7 -2
  327. package/dist/server/agent-chat/prompt-resources.js +2 -2
  328. package/dist/server/agent-chat/skill-frontmatter.d.ts +31 -2
  329. package/dist/server/agent-chat/skill-frontmatter.js +41 -15
  330. package/dist/server/agent-chat-plugin.js +3 -3
  331. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  332. package/dist/server/agents-bundle.d.ts +16 -19
  333. package/dist/server/agents-bundle.js +19 -35
  334. package/dist/server/auth.js +262 -31
  335. package/dist/server/better-auth-instance.d.ts +1 -0
  336. package/dist/server/better-auth-instance.js +17 -2
  337. package/dist/server/onboarding-html.js +56 -9
  338. package/dist/server/prompts/framework-core-compact.d.ts +6 -1
  339. package/dist/server/prompts/framework-core-compact.js +12 -9
  340. package/dist/server/prompts/framework-core.d.ts +6 -1
  341. package/dist/server/prompts/framework-core.js +11 -9
  342. package/dist/server/prompts/index.d.ts +1 -1
  343. package/dist/server/prompts/index.js +1 -1
  344. package/dist/server/prompts/shared-rules.d.ts +15 -11
  345. package/dist/server/prompts/shared-rules.js +17 -13
  346. package/dist/server/realtime-token.d.ts +1 -1
  347. package/dist/server/transcribe-voice.d.ts +1 -1
  348. package/dist/shared/reasoning-effort.d.ts +8 -8
  349. package/dist/shared/reasoning-effort.js +10 -10
  350. package/dist/shared/streaming-text-smoothing.js +41 -11
  351. package/dist/styles/agent-native.css +19 -32
  352. package/dist/templates/chat/.agents/skills/actions/SKILL.md +54 -488
  353. package/dist/templates/chat/.agents/skills/actions/references/action-fields.md +136 -0
  354. package/dist/templates/chat/.agents/skills/actions/references/examples.md +94 -0
  355. package/dist/templates/chat/.agents/skills/actions/references/provider-apis.md +95 -0
  356. package/dist/templates/chat/.agents/skills/create-skill/SKILL.md +9 -35
  357. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +4 -5
  358. package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -31
  359. package/dist/templates/chat/AGENTS.md +32 -80
  360. package/dist/templates/chat/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
  361. package/dist/templates/default/.agents/skills/actions/SKILL.md +54 -488
  362. package/dist/templates/default/.agents/skills/actions/references/action-fields.md +136 -0
  363. package/dist/templates/default/.agents/skills/actions/references/examples.md +94 -0
  364. package/dist/templates/default/.agents/skills/actions/references/provider-apis.md +95 -0
  365. package/dist/templates/default/.agents/skills/create-skill/SKILL.md +9 -35
  366. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +4 -5
  367. package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +18 -31
  368. package/dist/templates/headless/.agents/skills/actions/SKILL.md +54 -488
  369. package/dist/templates/headless/.agents/skills/actions/references/action-fields.md +136 -0
  370. package/dist/templates/headless/.agents/skills/actions/references/examples.md +94 -0
  371. package/dist/templates/headless/.agents/skills/actions/references/provider-apis.md +95 -0
  372. package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +18 -31
  373. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +54 -488
  374. package/dist/templates/workspace-core/.agents/skills/actions/references/action-fields.md +136 -0
  375. package/dist/templates/workspace-core/.agents/skills/actions/references/examples.md +94 -0
  376. package/dist/templates/workspace-core/.agents/skills/actions/references/provider-apis.md +95 -0
  377. package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +1 -0
  378. package/dist/templates/workspace-core/.agents/skills/agent-page/SKILL.md +1 -0
  379. package/dist/templates/workspace-core/.agents/skills/create-skill/SKILL.md +9 -35
  380. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +4 -5
  381. package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +21 -29
  382. package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +18 -31
  383. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +7 -17
  384. package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +3 -3
  385. package/dist/templates/workspace-core/AGENTS.md +7 -16
  386. package/docs/content/messaging.mdx +6 -7
  387. package/docs/content/template-chat.mdx +1 -1
  388. package/package.json +2 -2
  389. package/src/templates/chat/.agents/skills/actions/SKILL.md +54 -488
  390. package/src/templates/chat/.agents/skills/actions/references/action-fields.md +136 -0
  391. package/src/templates/chat/.agents/skills/actions/references/examples.md +94 -0
  392. package/src/templates/chat/.agents/skills/actions/references/provider-apis.md +95 -0
  393. package/src/templates/chat/.agents/skills/create-skill/SKILL.md +9 -35
  394. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +4 -5
  395. package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -31
  396. package/src/templates/chat/AGENTS.md +32 -80
  397. package/src/templates/chat/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
  398. package/src/templates/default/.agents/skills/actions/SKILL.md +54 -488
  399. package/src/templates/default/.agents/skills/actions/references/action-fields.md +136 -0
  400. package/src/templates/default/.agents/skills/actions/references/examples.md +94 -0
  401. package/src/templates/default/.agents/skills/actions/references/provider-apis.md +95 -0
  402. package/src/templates/default/.agents/skills/create-skill/SKILL.md +9 -35
  403. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +4 -5
  404. package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +18 -31
  405. package/src/templates/headless/.agents/skills/actions/SKILL.md +54 -488
  406. package/src/templates/headless/.agents/skills/actions/references/action-fields.md +136 -0
  407. package/src/templates/headless/.agents/skills/actions/references/examples.md +94 -0
  408. package/src/templates/headless/.agents/skills/actions/references/provider-apis.md +95 -0
  409. package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +18 -31
  410. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +54 -488
  411. package/src/templates/workspace-core/.agents/skills/actions/references/action-fields.md +136 -0
  412. package/src/templates/workspace-core/.agents/skills/actions/references/examples.md +94 -0
  413. package/src/templates/workspace-core/.agents/skills/actions/references/provider-apis.md +95 -0
  414. package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +1 -0
  415. package/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +1 -0
  416. package/src/templates/workspace-core/.agents/skills/create-skill/SKILL.md +9 -35
  417. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +4 -5
  418. package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +21 -29
  419. package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +18 -31
  420. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +7 -17
  421. package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +3 -3
  422. package/src/templates/workspace-core/AGENTS.md +7 -16
@@ -4,39 +4,42 @@ 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
 
15
- - Store large file/blob payloads in configured file/blob storage, not SQL: no
16
- base64, `data:` URLs, images, video/audio, PDFs, ZIPs, screenshots,
17
- thumbnails, or replay chunks in app tables, `application_state`, `settings`,
18
- or `resources`; persist URLs, ids, or handles instead.
19
- - Never hardcode API keys, tokens, webhook URLs, signing secrets, private Builder/internal data, customer data, or credential-looking literals. Use secrets/OAuth/runtime configuration and obvious placeholders in examples.
22
+ - Keep large files/blobs in configured file storage, not SQL, settings, or
23
+ resources; persist only URLs, ids, or handles.
24
+ - Never hardcode secrets or private/customer data; use vault/OAuth/runtime
25
+ configuration and fake placeholders in examples.
20
26
  - Use actions for deck lifecycle, slide edits, imports, exports, images, design
21
- systems, and sharing. Do not write deck/slide rows directly.
22
- - In dev, call actions with `pnpm action <name>`; in production, use native
23
- 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.
24
29
  - Use `view-screen` before editing when the active deck, selected slide, or
25
30
  current layout is unclear.
26
31
  - Preserve deck structure and visual consistency. Prefer focused slide edits over
27
32
  regenerating whole decks unless requested.
28
- - When an uploaded PPTX or PDF is being improved, import it into the target deck
29
- first with `import-pptx` or `import-file --importIntoDeck true`. Treat the
30
- resulting `sourceImport` metadata as the source-of-truth contract: preserve
31
- slide count, order, IDs, factual copy, notes, images, and positioned objects;
32
- use `update-slide` for bounded visual edits and verify with `get-deck`.
33
+ - When improving an uploaded PPTX or PDF, import it into the target deck first.
34
+ Treat `sourceImport` as the source-of-truth contract: preserve slide count,
35
+ order, IDs, copy, notes, images, and positioned objects; verify with
36
+ `get-deck`.
33
37
  - A source import with `fidelity: partial` or `imagesSkipped` is not safe to
34
38
  restyle automatically. Report the exact warning rather than silently
35
39
  replacing missing content.
36
40
  - Preserve freeform objects and their `data-slide-object-id` values. They are
37
41
  absolutely positioned `.fmd-slide` children; keep generated flex/grid in
38
42
  normal flow and mint ids only for duplicates. Use styled HTML, not inline SVG.
39
- - Read `slide-editing` before creating slides; it covers fit, density, and overflow.
40
43
  - Follow linked design-system tokens; read `design-systems` for per-source actions.
41
44
  - Import/export actions are shortcuts, not capability limits. For exact Google
42
45
  Drive API needs, use `provider-api-catalog`, `provider-api-docs`, and
@@ -46,21 +49,24 @@ Before building common workspace or agent UI, read `agent-native-toolkit` and
46
49
  pasted URLs may need a one-time Google reconnect for Drive export. Preserve
47
50
  imported PPTX timing metadata, including by-paragraph reveals, on slide
48
51
  records.
52
+ - For per-click reveals, use ordered 0-based animation targets and patch the
53
+ complete animation list with content; stale or missing targets disable
54
+ reveals.
49
55
  - For images, use `generate-image-api` with provenance; show results as
50
56
  `![alt](url)`.
51
57
  - Ask a sibling app's agent with a natural-language `call-agent` message by
52
58
  default. Let that specialist use its own instructions, skills, sources, and
53
59
  tools. Direct action invocation is only for an exact bounded read with a
54
60
  fully known schema; never use it as a workaround for slow or failed A2A.
55
- - For data requests, read `.agents/skills/analytics-data-for-decks/SKILL.md` and
56
- 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.
57
63
  - When the user names no reference deck or design system, call
58
64
  `get-workspace-defaults` first so a bare "make a deck about X" is still on
59
65
  brand.
60
- - Before generation, follow `.agents/skills/creative-context/SKILL.md`: explicit
61
- request/current deck, then pinned/current pack, then narrow library search.
62
- Respect `contextMode: "off"`. Submit governed context through the Context tab
63
- 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.
64
70
 
65
71
  ## Persistence Model
66
72
 
@@ -90,15 +96,7 @@ Deck data lives in SQL and all writes go through server-side actions. Read
90
96
  PPTX and have the user import it into Google Slides. Creating a native Google
91
97
  Slides file directly requires a separate Google Slides API batchUpdate path.
92
98
 
93
- ## Skills
94
-
95
- Read the relevant skill before deeper work:
99
+ ## Source Changes
96
100
 
97
- - `create-deck` for new decks, reference decks, workspace defaults, outlines.
98
- - `slide-editing` for targeted slide changes.
99
- - `deck-management` for organization, sharing, import/export, and metadata.
100
- - `slide-images` and `image-generation-via-a2a` for image work.
101
- - `design-systems`, `frontend-design`, `shadcn-ui`, and `actions` as needed.
102
- - `creative-context` for cross-app source reuse, pinned packs, provenance, and
103
- context opt-out.
104
- - `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.
@@ -16,6 +16,7 @@ import { z } from "zod";
16
16
 
17
17
  import { getDb, schema } from "../server/db/index.js";
18
18
  import { notifyClients } from "../server/handlers/decks.js";
19
+ import { assertHumanReadableDeckTitle } from "../shared/deck-title.js";
19
20
  import {
20
21
  assertDesignSystemReadable,
21
22
  assertValidAspectRatio,
@@ -50,6 +51,7 @@ export default defineAction({
50
51
  const now = new Date().toISOString();
51
52
  deck.createdAt = deck.createdAt || now;
52
53
  deck.updatedAt = now;
54
+ assertHumanReadableDeckTitle(deckTitle(deck));
53
55
 
54
56
  const designSystemId = deckDesignSystemId(deck);
55
57
  await assertDesignSystemReadable(designSystemId);
@@ -17,6 +17,7 @@ import { normalizeSlidePadding } from "../app/lib/normalize-slide-padding.js";
17
17
  import { getDb, schema } from "../server/db/index.js";
18
18
  import { notifyClients } from "../server/handlers/decks.js";
19
19
  import { createDeckVersionSnapshot } from "../server/lib/deck-versions.js";
20
+ import { repairGeneratedDeckTitle } from "../shared/deck-title.js";
20
21
  import { hashSlideContent } from "../shared/slide-fit.js";
21
22
  import { slideLabelFor, touchAgentSlidePresence } from "./_agent-presence.js";
22
23
  import {
@@ -308,11 +309,20 @@ export default defineAction({
308
309
  typeof position === "number"
309
310
  ? Math.max(0, Math.min(position, slides.length))
310
311
  : slides.length;
312
+ const shouldRepairTitle = slides.length === 0;
311
313
  slides.splice(insertIndex, 0, newSlide);
312
314
 
313
315
  const now = new Date().toISOString();
314
316
  deck.slides = slides;
315
317
  deck.updatedAt = now;
318
+ const currentTitle =
319
+ typeof row.title === "string" && row.title.trim()
320
+ ? row.title
321
+ : deck.title;
322
+ const repairedTitle = shouldRepairTitle
323
+ ? repairGeneratedDeckTitle(currentTitle, newSlide.content)
324
+ : null;
325
+ if (repairedTitle) deck.title = repairedTitle;
316
326
  deck.creativeContext =
317
327
  contextMode === "off" && existingContext
318
328
  ? existingContext
@@ -334,7 +344,11 @@ export default defineAction({
334
344
  await db.transaction(async (tx: any) => {
335
345
  await tx
336
346
  .update(schema.decks)
337
- .set({ data: JSON.stringify(deck), updatedAt: now })
347
+ .set({
348
+ ...(repairedTitle ? { title: repairedTitle } : {}),
349
+ data: JSON.stringify(deck),
350
+ updatedAt: now,
351
+ })
338
352
  .where(eq(schema.decks.id, deckId));
339
353
  await recordGenerationCreativeContext(
340
354
  {
@@ -20,6 +20,10 @@ import { notifyClients } from "../server/handlers/decks.js";
20
20
  import { createDeckVersionSnapshot } from "../server/lib/deck-versions.js";
21
21
  import { resolveDefaultDesignSystemId } from "../server/workspace-defaults.js";
22
22
  import { ASPECT_RATIO_VALUES } from "../shared/aspect-ratios.js";
23
+ import {
24
+ assertHumanReadableDeckTitle,
25
+ repairGeneratedDeckTitle,
26
+ } from "../shared/deck-title.js";
23
27
  import { getDeckUrl } from "./_app-url.js";
24
28
 
25
29
  const ReuseLabelSchema = z
@@ -216,6 +220,9 @@ export default defineAction({
216
220
  ...s,
217
221
  content: normalizeSlidePadding(s.content),
218
222
  }));
223
+ const firstSlideContent = slides[0]?.content;
224
+ const resolvedTitle =
225
+ repairGeneratedDeckTitle(title, firstSlideContent) ?? title;
219
226
 
220
227
  if (deckId) {
221
228
  if (designSystemId) {
@@ -231,6 +238,10 @@ export default defineAction({
231
238
  if (!existing[0]) {
232
239
  throw new Error(`Deck not found: ${deckId}`);
233
240
  }
241
+ const existingDeckTitle =
242
+ repairGeneratedDeckTitle(title, firstSlideContent, existing[0].title) ??
243
+ resolvedTitle;
244
+ assertHumanReadableDeckTitle(existingDeckTitle);
234
245
  await createDeckVersionSnapshot(
235
246
  {
236
247
  id: existing[0].id,
@@ -242,7 +253,7 @@ export default defineAction({
242
253
  );
243
254
  const prevData = existing[0] ? JSON.parse(existing[0].data) : {};
244
255
  const data = {
245
- title,
256
+ title: existingDeckTitle,
246
257
  slides,
247
258
  updatedAt: now,
248
259
  aspectRatio: aspectRatio ?? prevData.aspectRatio,
@@ -252,7 +263,7 @@ export default defineAction({
252
263
  await db
253
264
  .update(schema.decks)
254
265
  .set({
255
- title,
266
+ title: existingDeckTitle,
256
267
  data: JSON.stringify(data),
257
268
  designSystemId: designSystemId ?? existing[0]?.designSystemId ?? null,
258
269
  updatedAt: now,
@@ -271,7 +282,7 @@ export default defineAction({
271
282
  });
272
283
  return {
273
284
  id: deckId,
274
- title,
285
+ title: existingDeckTitle,
275
286
  slideCount: slides.length,
276
287
  url: getDeckUrl(deckId),
277
288
  deepLink: deckDeepLink(deckId),
@@ -282,6 +293,7 @@ export default defineAction({
282
293
 
283
294
  const ownerEmail = getRequestUserEmail();
284
295
  if (!ownerEmail) throw new Error("no authenticated user");
296
+ assertHumanReadableDeckTitle(resolvedTitle);
285
297
 
286
298
  let resolvedDesignSystemId = designSystemId;
287
299
  if (resolvedDesignSystemId) {
@@ -293,7 +305,7 @@ export default defineAction({
293
305
 
294
306
  const id = `deck-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
295
307
  const data: Record<string, unknown> = {
296
- title,
308
+ title: resolvedTitle,
297
309
  slides,
298
310
  createdAt: now,
299
311
  updatedAt: now,
@@ -303,7 +315,7 @@ export default defineAction({
303
315
  data.creativeContext = creativeContextProvenance;
304
316
  await db.insert(schema.decks).values({
305
317
  id,
306
- title,
318
+ title: resolvedTitle,
307
319
  data: JSON.stringify(data),
308
320
  designSystemId: resolvedDesignSystemId ?? null,
309
321
  ownerEmail,
@@ -323,7 +335,7 @@ export default defineAction({
323
335
  });
324
336
  return {
325
337
  id,
326
- title,
338
+ title: resolvedTitle,
327
339
  slideCount: slides.length,
328
340
  url: getDeckUrl(id),
329
341
  deepLink: deckDeepLink(id),
@@ -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,6 +17,39 @@ function stripHtml(html: string): string {
16
17
  .trim();
17
18
  }
18
19
 
20
+ function compactAnimationSummary(value: unknown, content: string) {
21
+ if (!Array.isArray(value)) return null;
22
+ const targetSummaries = summarizeSlideAnimationTargets(content, value);
23
+ return {
24
+ count: value.length,
25
+ steps: value.map((entry, index) => {
26
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
27
+ return { order: index + 1, valid: false };
28
+ }
29
+ const animation = entry as Record<string, unknown>;
30
+ const targetSummary = targetSummaries[index];
31
+ return {
32
+ order: index + 1,
33
+ id: typeof animation.id === "string" ? animation.id : null,
34
+ elementIndex:
35
+ typeof animation.elementIndex === "number"
36
+ ? animation.elementIndex
37
+ : null,
38
+ elementPath: Array.isArray(animation.elementPath)
39
+ ? animation.elementPath
40
+ : null,
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",
48
+ };
49
+ }),
50
+ };
51
+ }
52
+
19
53
  function deckDeepLink(deckId: string): string {
20
54
  return buildDeepLink({
21
55
  app: "slides",
@@ -26,13 +60,22 @@ function deckDeepLink(deckId: string): string {
26
60
 
27
61
  export default defineAction({
28
62
  description:
29
- "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.",
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.",
64
+ timeoutMs: 60_000,
30
65
  schema: z.object({
31
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
+ ),
32
73
  compact: z
33
74
  .enum(["true", "false"])
34
75
  .optional()
35
- .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
+ ),
36
79
  }),
37
80
  http: { method: "GET" },
38
81
  mcpApp: {
@@ -45,7 +88,7 @@ export default defineAction({
45
88
  height: 680,
46
89
  }),
47
90
  },
48
- run: async (args) => {
91
+ run: async (args, ctx) => {
49
92
  if (!args.id) {
50
93
  throw new Error("--id is required.");
51
94
  }
@@ -61,8 +104,31 @@ export default defineAction({
61
104
  const data = JSON.parse(row.data);
62
105
  const slides = data?.slides || [];
63
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
+ }
64
117
 
65
- 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) {
66
132
  return {
67
133
  id: row.id,
68
134
  title: row.title || data?.title,
@@ -84,18 +150,27 @@ export default defineAction({
84
150
  slideNumbering:
85
151
  'User-visible slide numbers are 1-based and match the UI. "Slide 1" means slideNumber 1 / zeroBasedIndex 0. Use slideId for edits.',
86
152
  deepLink: deckDeepLink(row.id),
87
- slides: slides.map((s: any, i: number) => ({
153
+ ...(selectedSlide ? { selectedSlideId: selectedSlide.id } : {}),
154
+ slides: slideEntries.map(({ slide: s, index: i }) => ({
88
155
  slideNumber: i + 1,
89
156
  zeroBasedIndex: i,
90
157
  id: s.id,
91
158
  layout: s.layout ?? null,
159
+ transition: s.transition ?? null,
160
+ animations: compactAnimationSummary(
161
+ s.animations,
162
+ typeof s.content === "string" ? s.content : "",
163
+ ),
92
164
  textPreview: stripHtml(s.content || "").slice(0, 120),
93
165
  })),
94
166
  };
95
167
  }
96
168
 
169
+ const deckMetadata = { ...data };
170
+ delete deckMetadata.slides;
171
+
97
172
  return {
98
- ...data,
173
+ ...deckMetadata,
99
174
  id: row.id,
100
175
  title: row.title || data?.title,
101
176
  visibility: row.visibility,
@@ -108,7 +183,8 @@ export default defineAction({
108
183
  typeof data.createdAt === "string" ? data.createdAt : row.createdAt,
109
184
  updatedAt: row.updatedAt,
110
185
  deepLink: deckDeepLink(row.id),
111
- slides: slides.map((s: any, i: number) => ({
186
+ ...(selectedSlide ? { selectedSlideId: selectedSlide.id } : {}),
187
+ slides: slideEntries.map(({ slide: s, index: i }) => ({
112
188
  ...s,
113
189
  slideNumber: i + 1,
114
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 }[] {