@agent-native/core 0.103.1 → 0.105.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (568) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +61 -0
  3. package/corpus/core/package.json +9 -2
  4. package/corpus/core/src/agent/engine/credential-errors.ts +2 -2
  5. package/corpus/core/src/agent/production-agent.ts +30 -0
  6. package/corpus/core/src/agent/run-store.ts +12 -2
  7. package/corpus/core/src/cli/create.ts +1 -0
  8. package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +30 -11
  9. package/corpus/core/src/cli/templates-meta.ts +4 -3
  10. package/corpus/core/src/client/AgentAskPopover.tsx +89 -0
  11. package/corpus/core/src/client/AgentChatHome.tsx +4 -0
  12. package/corpus/core/src/client/AgentPanel.tsx +321 -223
  13. package/corpus/core/src/client/AssistantChat.tsx +6 -10
  14. package/corpus/core/src/client/MultiTabAssistantChat.tsx +53 -372
  15. package/corpus/core/src/client/agent-chat-adapter.ts +13 -1
  16. package/corpus/core/src/client/agent-page/AgentContextTab.tsx +133 -149
  17. package/corpus/core/src/client/agent-page/AgentEmptyState.tsx +44 -0
  18. package/corpus/core/src/client/agent-page/AgentJobsTab.tsx +153 -82
  19. package/corpus/core/src/client/agent-page/AgentTabFrame.tsx +39 -0
  20. package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +368 -356
  21. package/corpus/core/src/client/agent-page/types.ts +1 -1
  22. package/corpus/core/src/client/analytics.ts +51 -5
  23. package/corpus/core/src/client/chat/run-recovery.tsx +12 -4
  24. package/corpus/core/src/client/composer/PromptComposer.tsx +5 -15
  25. package/corpus/core/src/client/composer/TiptapComposer.tsx +32 -3
  26. package/corpus/core/src/client/dynamic-suggestions.ts +3 -3
  27. package/corpus/core/src/client/index.ts +16 -1
  28. package/corpus/core/src/client/resources/ResourceTree.tsx +249 -38
  29. package/corpus/core/src/client/resources/ResourcesPanel.tsx +307 -140
  30. package/corpus/core/src/client/session-replay.ts +158 -5
  31. package/corpus/core/src/client/settings/AutomationsSection.tsx +30 -10
  32. package/corpus/core/src/client/settings/SettingsPanel.tsx +3 -2
  33. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +2 -0
  34. package/corpus/core/src/client/settings/agent-settings-search.ts +2 -2
  35. package/corpus/core/src/client/use-chat-threads.ts +2 -0
  36. package/corpus/core/src/connections/catalog.ts +49 -7
  37. package/corpus/core/src/db/index.ts +6 -1
  38. package/corpus/core/src/deploy/build.ts +23 -0
  39. package/corpus/core/src/extensions/actions.ts +106 -16
  40. package/corpus/core/src/extensions/content-patch.ts +22 -0
  41. package/corpus/core/src/extensions/routes.ts +18 -0
  42. package/corpus/core/src/extensions/store.ts +8 -0
  43. package/corpus/core/src/index.ts +3 -0
  44. package/corpus/core/src/ingestion/docx.ts +158 -0
  45. package/corpus/core/src/ingestion/figma-node-to-html.ts +1860 -0
  46. package/corpus/core/src/ingestion/figma.ts +548 -0
  47. package/corpus/core/src/ingestion/index.ts +107 -0
  48. package/corpus/core/src/ingestion/media.ts +264 -0
  49. package/corpus/core/src/ingestion/notion.ts +121 -0
  50. package/corpus/core/src/ingestion/office.ts +214 -0
  51. package/corpus/core/src/ingestion/orchestration.ts +160 -0
  52. package/corpus/core/src/ingestion/pptx.ts +333 -0
  53. package/corpus/core/src/ingestion/selection.ts +81 -0
  54. package/corpus/core/src/ingestion/website.ts +151 -0
  55. package/corpus/core/src/integrations/plugin.ts +45 -37
  56. package/corpus/core/src/localization/default-messages.ts +35 -12
  57. package/corpus/core/src/observability/hosted-model-experiment.ts +118 -0
  58. package/corpus/core/src/observability/traces.ts +5 -3
  59. package/corpus/core/src/provider-api/index.ts +452 -8
  60. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +18 -1
  61. package/corpus/core/src/search-utils/index.ts +112 -0
  62. package/corpus/core/src/secrets/register-framework-secrets.ts +61 -0
  63. package/corpus/core/src/server/action-discovery.ts +33 -8
  64. package/corpus/core/src/server/agent-chat/framework-prompts.ts +2 -2
  65. package/corpus/core/src/server/agent-chat/prompt-resources.ts +144 -0
  66. package/corpus/core/src/server/agent-chat-plugin.ts +6 -0
  67. package/corpus/core/src/server/core-routes-plugin.ts +12 -0
  68. package/corpus/core/src/server/index.ts +30 -0
  69. package/corpus/core/src/server/workspace-provider-oauth.ts +583 -0
  70. package/corpus/core/src/styles/agent-native.css +9 -0
  71. package/corpus/core/src/templates/default/app/i18n/en-US.ts +3 -3
  72. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  73. package/corpus/core/src/templates/workspace-root/.env.example +12 -0
  74. package/corpus/core/src/workspace-connections/index.ts +6 -0
  75. package/corpus/core/src/workspace-connections/lifecycle.ts +43 -0
  76. package/corpus/core/src/workspace-connections/store.ts +16 -0
  77. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +46 -3
  78. package/corpus/templates/analytics/AGENTS.md +9 -0
  79. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +120 -6
  80. package/corpus/templates/analytics/actions/mutate-dashboard.ts +92 -30
  81. package/corpus/templates/analytics/actions/update-dashboard.ts +5 -5
  82. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +313 -220
  83. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -2
  84. package/corpus/templates/analytics/app/components/layout/Layout.tsx +9 -6
  85. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +90 -64
  86. package/corpus/templates/analytics/app/i18n-data.ts +3 -3
  87. package/corpus/templates/analytics/app/lib/dashboard-list-loading.ts +25 -0
  88. package/corpus/templates/analytics/app/lib/item-popularity.ts +13 -4
  89. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +1 -1
  90. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/pivot.ts +8 -3
  91. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +1 -0
  92. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +15 -3
  93. package/corpus/templates/analytics/changelog/2026-07-16-dashboard-filter-defaults-can-now-be-changed-reliably-withou.md +6 -0
  94. package/corpus/templates/analytics/changelog/2026-07-16-dashboard-lists-load-in-one-stable-order-without-popping-bet.md +6 -0
  95. package/corpus/templates/analytics/changelog/2026-07-16-fixed-dashboard-filter-dropdown-text-alignment.md +6 -0
  96. package/corpus/templates/analytics/changelog/2026-07-16-recurring-signed-in-users-can-now-be-viewed-as-weekly-bars-b.md +6 -0
  97. package/corpus/templates/analytics/changelog/2026-07-16-the-analytics-agent-can-now-duplicate-a-chart-and-place-the-.md +6 -0
  98. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +41 -1
  99. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +1 -1
  100. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +47 -1
  101. package/corpus/templates/analytics/server/lib/session-replay.ts +68 -0
  102. package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -0
  103. package/corpus/templates/analytics/server/routes/sessions/lookup.get.ts +47 -0
  104. package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +16 -9
  105. package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +86 -0
  106. package/corpus/templates/assets/AGENTS.md +10 -0
  107. package/corpus/templates/assets/actions/create-generation-session.ts +59 -1
  108. package/corpus/templates/assets/actions/edit-image.ts +2 -0
  109. package/corpus/templates/assets/actions/generate-asset.ts +52 -0
  110. package/corpus/templates/assets/actions/generate-image-batch.ts +55 -0
  111. package/corpus/templates/assets/actions/generate-image.ts +219 -1
  112. package/corpus/templates/assets/actions/open-asset-picker.ts +14 -0
  113. package/corpus/templates/assets/actions/refine-image.ts +3 -0
  114. package/corpus/templates/assets/actions/restyle-image.ts +2 -0
  115. package/corpus/templates/assets/agent-native.app-skill.json +4 -0
  116. package/corpus/templates/assets/app/components/layout/Layout.tsx +2 -0
  117. package/corpus/templates/assets/app/i18n/zh-TW.ts +3 -0
  118. package/corpus/templates/assets/app/i18n-data.ts +29 -13
  119. package/corpus/templates/assets/app/routes/agent.tsx +7 -1
  120. package/corpus/templates/assets/app/routes/library.tsx +9 -0
  121. package/corpus/templates/assets/app/routes/settings.tsx +3 -0
  122. package/corpus/templates/assets/changelog/2026-07-16-creative-context-library.md +6 -0
  123. package/corpus/templates/assets/package.json +1 -0
  124. package/corpus/templates/assets/server/lib/image-processing.ts +1 -22
  125. package/corpus/templates/assets/server/plugins/creative-context.ts +205 -0
  126. package/corpus/templates/brain/app/i18n-data.ts +3 -3
  127. package/corpus/templates/brain/app/lib/brain.ts +1 -1
  128. package/corpus/templates/brain/server/lib/search.ts +17 -67
  129. package/corpus/templates/calendar/app/i18n-data.ts +3 -3
  130. package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +19 -18
  131. package/corpus/templates/chat/app/i18n/en-US.ts +3 -3
  132. package/corpus/templates/chat/app/lib/agent-page.tsx +10 -1
  133. package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +1 -1
  134. package/corpus/templates/clips/AGENTS.md +4 -0
  135. package/corpus/templates/clips/actions/cleanup-transcript.ts +35 -4
  136. package/corpus/templates/clips/actions/create-meeting.ts +6 -2
  137. package/corpus/templates/clips/actions/create-organization.ts +3 -2
  138. package/corpus/templates/clips/actions/create-recording.ts +4 -1
  139. package/corpus/templates/clips/actions/finalize-recording.ts +44 -7
  140. package/corpus/templates/clips/actions/import-loom-recording.ts +4 -1
  141. package/corpus/templates/clips/actions/lib/create-recording-schema.ts +2 -2
  142. package/corpus/templates/clips/actions/list-meetings.ts +23 -5
  143. package/corpus/templates/clips/actions/list-organization-state.ts +1 -1
  144. package/corpus/templates/clips/actions/remove-silences.ts +10 -1
  145. package/corpus/templates/clips/actions/request-transcript.ts +53 -11
  146. package/corpus/templates/clips/actions/search-recordings-utils.ts +7 -0
  147. package/corpus/templates/clips/actions/search-recordings.ts +5 -8
  148. package/corpus/templates/clips/actions/set-organization-branding.ts +2 -2
  149. package/corpus/templates/clips/actions/stitch-recordings.ts +10 -5
  150. package/corpus/templates/clips/actions/update-ai-request-status.ts +38 -0
  151. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +3 -4
  152. package/corpus/templates/clips/app/components/editor/editor-selection.ts +19 -0
  153. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +10 -10
  154. package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +1 -2
  155. package/corpus/templates/clips/app/components/library/library-grid.tsx +101 -93
  156. package/corpus/templates/clips/app/components/player/video-player.tsx +11 -0
  157. package/corpus/templates/clips/app/components/workspace/branding-editor.tsx +53 -1
  158. package/corpus/templates/clips/app/i18n/ar-SA.ts +7 -1
  159. package/corpus/templates/clips/app/i18n/de-DE.ts +7 -1
  160. package/corpus/templates/clips/app/i18n/en-US.ts +10 -4
  161. package/corpus/templates/clips/app/i18n/es-ES.ts +7 -1
  162. package/corpus/templates/clips/app/i18n/fr-FR.ts +7 -1
  163. package/corpus/templates/clips/app/i18n/hi-IN.ts +7 -1
  164. package/corpus/templates/clips/app/i18n/ja-JP.ts +7 -1
  165. package/corpus/templates/clips/app/i18n/ko-KR.ts +7 -1
  166. package/corpus/templates/clips/app/i18n/pt-BR.ts +7 -1
  167. package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -1
  168. package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -1
  169. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +5 -9
  170. package/corpus/templates/clips/app/routes/_app.settings.organization.tsx +6 -2
  171. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +129 -27
  172. package/corpus/templates/clips/app/routes/record.tsx +23 -2
  173. package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -2
  174. package/corpus/templates/clips/app/routes.ts +3 -1
  175. package/corpus/templates/clips/changelog/2026-07-16-authorized-viewers-can-open-shared-private-clips-without-a-m.md +6 -0
  176. package/corpus/templates/clips/changelog/2026-07-16-camera-bubble-hover-controls-appear-above-the-face.md +6 -0
  177. package/corpus/templates/clips/changelog/2026-07-16-chrome-extension-recovers-stale-recorder-state.md +6 -0
  178. package/corpus/templates/clips/changelog/2026-07-16-clips-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
  179. package/corpus/templates/clips/changelog/2026-07-16-clips-search-now-matches-recording-content-without-requiring.md +6 -0
  180. package/corpus/templates/clips/changelog/2026-07-16-declined-meetings-no-longer-show-desktop-reminders.md +6 -0
  181. package/corpus/templates/clips/changelog/2026-07-16-failed-desktop-saves-now-show-their-local-recovery-copy.md +6 -0
  182. package/corpus/templates/clips/changelog/2026-07-16-long-desktop-clips-now-preserve-complete-playback-synced-aud.md +6 -0
  183. package/corpus/templates/clips/changelog/2026-07-16-long-recording-lists-keep-stitch-and-library-actions-visible.md +6 -0
  184. package/corpus/templates/clips/changelog/2026-07-16-organization-admins-can-choose-new-recording-visibility.md +6 -0
  185. package/corpus/templates/clips/changelog/2026-07-16-remove-silences-now-shows-queued-active-completed-and-failed.md +6 -0
  186. package/corpus/templates/clips/changelog/2026-07-16-settings-no-longer-repeats-the-builder-connection-status-in-.md +6 -0
  187. package/corpus/templates/clips/changelog/2026-07-16-transcripts-now-appear-from-native-browser-speech-sooner-wit.md +6 -0
  188. package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -1
  189. package/corpus/templates/clips/chrome-extension/src/background.ts +73 -1
  190. package/corpus/templates/clips/chrome-extension/src/native-recording-state.ts +32 -0
  191. package/corpus/templates/clips/chrome-extension/src/native-transcription.ts +248 -0
  192. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +106 -0
  193. package/corpus/templates/clips/desktop/src/app.tsx +66 -28
  194. package/corpus/templates/clips/desktop/src/lib/recorder.ts +335 -285
  195. package/corpus/templates/clips/desktop/src/lib/single-flight.ts +7 -0
  196. package/corpus/templates/clips/desktop/src/lib/upload-verification.ts +51 -0
  197. package/corpus/templates/clips/desktop/src/overlays/bubble.tsx +2 -2
  198. package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +10 -2
  199. package/corpus/templates/clips/desktop/src/styles.css +13 -11
  200. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +8 -9
  201. package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +1 -0
  202. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +88 -13
  203. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +13 -2
  204. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +241 -6
  205. package/corpus/templates/clips/server/db/schema.ts +2 -2
  206. package/corpus/templates/clips/server/lib/builder-media-compression.ts +64 -67
  207. package/corpus/templates/clips/server/lib/calendar-event-classification.ts +19 -0
  208. package/corpus/templates/clips/server/lib/google-calendar-client.ts +1 -0
  209. package/corpus/templates/clips/server/lib/recordings.ts +40 -1
  210. package/corpus/templates/clips/server/plugins/agent-chat.ts +1 -0
  211. package/corpus/templates/clips/server/plugins/db.ts +2 -2
  212. package/corpus/templates/clips/server/routes/api/auth/google-calendar.get.ts +1 -1
  213. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +14 -5
  214. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +51 -1
  215. package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +1 -64
  216. package/corpus/templates/clips/shared/media-worker-contract.ts +32 -15
  217. package/corpus/templates/content/.agents/skills/content/SKILL.md +16 -0
  218. package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +85 -0
  219. package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +8 -0
  220. package/corpus/templates/content/AGENTS.md +9 -0
  221. package/corpus/templates/content/actions/create-document.ts +94 -0
  222. package/corpus/templates/content/actions/edit-document.ts +144 -4
  223. package/corpus/templates/content/actions/update-document.ts +138 -0
  224. package/corpus/templates/content/agent-native.app-skill.json +4 -0
  225. package/corpus/templates/content/app/components/layout/Layout.tsx +2 -0
  226. package/corpus/templates/content/app/i18n/zh-TW.ts +3 -0
  227. package/corpus/templates/content/app/i18n-data.ts +13 -4
  228. package/corpus/templates/content/app/routes/_app.agent.tsx +2 -1
  229. package/corpus/templates/content/app/routes/_app.settings.tsx +3 -0
  230. package/corpus/templates/content/changelog/2026-07-16-creative-context-library.md +6 -0
  231. package/corpus/templates/content/package.json +1 -0
  232. package/corpus/templates/content/server/plugins/creative-context.ts +31 -0
  233. package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +116 -0
  234. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +16 -0
  235. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -0
  236. package/corpus/templates/design/AGENTS.md +6 -0
  237. package/corpus/templates/design/actions/clone-creative-context-design.ts +176 -0
  238. package/corpus/templates/design/actions/edit-design.ts +128 -0
  239. package/corpus/templates/design/actions/generate-design.ts +278 -14
  240. package/corpus/templates/design/actions/generate-screens.ts +42 -1
  241. package/corpus/templates/design/agent-native.app-skill.json +4 -0
  242. package/corpus/templates/design/app/components/layout/Layout.tsx +7 -3
  243. package/corpus/templates/design/app/i18n/zh-TW.ts +3 -0
  244. package/corpus/templates/design/app/i18n-data.ts +10 -4
  245. package/corpus/templates/design/app/routes/agent.tsx +2 -1
  246. package/corpus/templates/design/app/routes/settings.tsx +3 -0
  247. package/corpus/templates/design/changelog/2026-07-16-creative-context-library.md +6 -0
  248. package/corpus/templates/design/changelog/2026-07-16-design-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
  249. package/corpus/templates/design/package.json +1 -0
  250. package/corpus/templates/design/server/lib/figma-design-context.ts +5 -335
  251. package/corpus/templates/design/server/lib/figma-node-to-html.ts +1 -1859
  252. package/corpus/templates/design/server/lib/import-design-files.ts +6 -8
  253. package/corpus/templates/design/server/plugins/creative-context.ts +31 -0
  254. package/corpus/templates/design/shared/generation-session.ts +7 -0
  255. package/corpus/templates/dispatch/app/i18n-data.ts +3 -3
  256. package/corpus/templates/forms/app/i18n/en-US.ts +3 -3
  257. package/corpus/templates/macros/app/i18n/en-US.ts +3 -3
  258. package/corpus/templates/mail/app/components/email/EmailThread.tsx +35 -5
  259. package/corpus/templates/mail/app/i18n/en-US.ts +3 -3
  260. package/corpus/templates/mail/changelog/2026-07-16-mail-previews-now-expand-to-show-the-full-message-without-an.md +6 -0
  261. package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +30 -11
  262. package/corpus/templates/plan/AGENTS.md +21 -1
  263. package/corpus/templates/plan/actions/get-visual-plan.ts +1 -1
  264. package/corpus/templates/plan/actions/patch-visual-plan-source.ts +161 -0
  265. package/corpus/templates/plan/actions/read-visual-plan-source.ts +1 -1
  266. package/corpus/templates/plan/actions/update-visual-plan.ts +126 -10
  267. package/corpus/templates/plan/app/hooks/use-plans.ts +2 -0
  268. package/corpus/templates/plan/app/i18n/en-US.ts +3 -3
  269. package/corpus/templates/plan/app/pages/PlansPage.tsx +65 -62
  270. package/corpus/templates/plan/changelog/2026-07-16-local-plan-previews-now-load-annotations-containing-html-lik.md +6 -0
  271. package/corpus/templates/plan/changelog/2026-07-16-plan-agents-now-prevent-stale-edits-from-overwriting-newer-p.md +6 -0
  272. package/corpus/templates/plan/server/plan-mdx.ts +75 -2
  273. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +21 -4
  274. package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +122 -0
  275. package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +11 -0
  276. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +12 -3
  277. package/corpus/templates/slides/AGENTS.md +6 -0
  278. package/corpus/templates/slides/actions/add-slide.ts +230 -14
  279. package/corpus/templates/slides/actions/clone-context-slide.ts +302 -0
  280. package/corpus/templates/slides/actions/create-deck.ts +130 -0
  281. package/corpus/templates/slides/actions/extract-pdf.ts +6 -2
  282. package/corpus/templates/slides/actions/import-file.ts +5 -4
  283. package/corpus/templates/slides/actions/patch-deck.ts +200 -10
  284. package/corpus/templates/slides/actions/update-slide.ts +208 -15
  285. package/corpus/templates/slides/app/components/layout/Layout.tsx +2 -0
  286. package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +16 -1
  287. package/corpus/templates/slides/app/i18n/ar-SA.ts +3 -0
  288. package/corpus/templates/slides/app/i18n/de-DE.ts +3 -0
  289. package/corpus/templates/slides/app/i18n/en-US.ts +6 -3
  290. package/corpus/templates/slides/app/i18n/es-ES.ts +3 -0
  291. package/corpus/templates/slides/app/i18n/fr-FR.ts +3 -0
  292. package/corpus/templates/slides/app/i18n/hi-IN.ts +3 -0
  293. package/corpus/templates/slides/app/i18n/ja-JP.ts +3 -0
  294. package/corpus/templates/slides/app/i18n/ko-KR.ts +3 -0
  295. package/corpus/templates/slides/app/i18n/pt-BR.ts +3 -0
  296. package/corpus/templates/slides/app/i18n/zh-CN.ts +3 -0
  297. package/corpus/templates/slides/app/i18n/zh-TW.ts +3 -0
  298. package/corpus/templates/slides/app/lib/validate-native-slide-html.ts +176 -0
  299. package/corpus/templates/slides/app/routes/agent.tsx +7 -1
  300. package/corpus/templates/slides/app/routes/settings.tsx +3 -0
  301. package/corpus/templates/slides/changelog/2026-07-16-creative-context-library.md +6 -0
  302. package/corpus/templates/slides/changelog/2026-07-16-google-slides-native-cloning.md +6 -0
  303. package/corpus/templates/slides/package.json +1 -0
  304. package/corpus/templates/slides/server/handlers/import/docx-parser.ts +4 -85
  305. package/corpus/templates/slides/server/handlers/import/pptx-parser.ts +7 -421
  306. package/corpus/templates/slides/server/plugins/creative-context.ts +166 -0
  307. package/dist/agent/engine/credential-errors.d.ts +1 -1
  308. package/dist/agent/engine/credential-errors.d.ts.map +1 -1
  309. package/dist/agent/engine/credential-errors.js +2 -2
  310. package/dist/agent/engine/credential-errors.js.map +1 -1
  311. package/dist/agent/production-agent.d.ts.map +1 -1
  312. package/dist/agent/production-agent.js +25 -0
  313. package/dist/agent/production-agent.js.map +1 -1
  314. package/dist/agent/run-store.d.ts.map +1 -1
  315. package/dist/agent/run-store.js +12 -2
  316. package/dist/agent/run-store.js.map +1 -1
  317. package/dist/cli/create.d.ts.map +1 -1
  318. package/dist/cli/create.js +1 -0
  319. package/dist/cli/create.js.map +1 -1
  320. package/dist/cli/skills-content/visual-plan-skill.d.ts +1 -1
  321. package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -1
  322. package/dist/cli/skills-content/visual-plan-skill.js +30 -11
  323. package/dist/cli/skills-content/visual-plan-skill.js.map +1 -1
  324. package/dist/cli/templates-meta.d.ts.map +1 -1
  325. package/dist/cli/templates-meta.js +4 -3
  326. package/dist/cli/templates-meta.js.map +1 -1
  327. package/dist/client/AgentAskPopover.d.ts +11 -0
  328. package/dist/client/AgentAskPopover.d.ts.map +1 -0
  329. package/dist/client/AgentAskPopover.js +30 -0
  330. package/dist/client/AgentAskPopover.js.map +1 -0
  331. package/dist/client/AgentChatHome.d.ts +1 -1
  332. package/dist/client/AgentChatHome.d.ts.map +1 -1
  333. package/dist/client/AgentChatHome.js +2 -2
  334. package/dist/client/AgentChatHome.js.map +1 -1
  335. package/dist/client/AgentPanel.d.ts +9 -19
  336. package/dist/client/AgentPanel.d.ts.map +1 -1
  337. package/dist/client/AgentPanel.js +119 -80
  338. package/dist/client/AgentPanel.js.map +1 -1
  339. package/dist/client/AssistantChat.d.ts.map +1 -1
  340. package/dist/client/AssistantChat.js +4 -4
  341. package/dist/client/AssistantChat.js.map +1 -1
  342. package/dist/client/MultiTabAssistantChat.d.ts +3 -9
  343. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  344. package/dist/client/MultiTabAssistantChat.js +49 -189
  345. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  346. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  347. package/dist/client/agent-chat-adapter.js +12 -1
  348. package/dist/client/agent-chat-adapter.js.map +1 -1
  349. package/dist/client/agent-page/AgentContextTab.d.ts.map +1 -1
  350. package/dist/client/agent-page/AgentContextTab.js +26 -28
  351. package/dist/client/agent-page/AgentContextTab.js.map +1 -1
  352. package/dist/client/agent-page/AgentEmptyState.d.ts +13 -0
  353. package/dist/client/agent-page/AgentEmptyState.d.ts.map +1 -0
  354. package/dist/client/agent-page/AgentEmptyState.js +6 -0
  355. package/dist/client/agent-page/AgentEmptyState.js.map +1 -0
  356. package/dist/client/agent-page/AgentJobsTab.d.ts +1 -1
  357. package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -1
  358. package/dist/client/agent-page/AgentJobsTab.js +90 -58
  359. package/dist/client/agent-page/AgentJobsTab.js.map +1 -1
  360. package/dist/client/agent-page/AgentTabFrame.d.ts +12 -0
  361. package/dist/client/agent-page/AgentTabFrame.d.ts.map +1 -0
  362. package/dist/client/agent-page/AgentTabFrame.js +7 -0
  363. package/dist/client/agent-page/AgentTabFrame.js.map +1 -0
  364. package/dist/client/agent-page/AgentTabsPage.d.ts +9 -1
  365. package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
  366. package/dist/client/agent-page/AgentTabsPage.js +135 -99
  367. package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
  368. package/dist/client/agent-page/types.d.ts +1 -1
  369. package/dist/client/agent-page/types.d.ts.map +1 -1
  370. package/dist/client/agent-page/types.js.map +1 -1
  371. package/dist/client/analytics.d.ts +10 -3
  372. package/dist/client/analytics.d.ts.map +1 -1
  373. package/dist/client/analytics.js +37 -2
  374. package/dist/client/analytics.js.map +1 -1
  375. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  376. package/dist/client/chat/run-recovery.js +10 -3
  377. package/dist/client/chat/run-recovery.js.map +1 -1
  378. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  379. package/dist/client/composer/PromptComposer.js +2 -2
  380. package/dist/client/composer/PromptComposer.js.map +1 -1
  381. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  382. package/dist/client/composer/TiptapComposer.js +15 -3
  383. package/dist/client/composer/TiptapComposer.js.map +1 -1
  384. package/dist/client/dynamic-suggestions.js +3 -3
  385. package/dist/client/dynamic-suggestions.js.map +1 -1
  386. package/dist/client/index.d.ts +4 -3
  387. package/dist/client/index.d.ts.map +1 -1
  388. package/dist/client/index.js +3 -2
  389. package/dist/client/index.js.map +1 -1
  390. package/dist/client/resources/ResourceTree.d.ts +5 -1
  391. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  392. package/dist/client/resources/ResourceTree.js +74 -5
  393. package/dist/client/resources/ResourceTree.js.map +1 -1
  394. package/dist/client/resources/ResourcesPanel.d.ts +11 -2
  395. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  396. package/dist/client/resources/ResourcesPanel.js +105 -31
  397. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  398. package/dist/client/session-replay.d.ts +28 -0
  399. package/dist/client/session-replay.d.ts.map +1 -1
  400. package/dist/client/session-replay.js +122 -8
  401. package/dist/client/session-replay.js.map +1 -1
  402. package/dist/client/settings/AutomationsSection.d.ts +3 -1
  403. package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
  404. package/dist/client/settings/AutomationsSection.js +16 -6
  405. package/dist/client/settings/AutomationsSection.js.map +1 -1
  406. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  407. package/dist/client/settings/SettingsPanel.js +3 -3
  408. package/dist/client/settings/SettingsPanel.js.map +1 -1
  409. package/dist/client/settings/SettingsTabsPage.d.ts +2 -0
  410. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  411. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  412. package/dist/client/settings/agent-settings-search.js +2 -2
  413. package/dist/client/settings/agent-settings-search.js.map +1 -1
  414. package/dist/client/use-chat-threads.d.ts +2 -0
  415. package/dist/client/use-chat-threads.d.ts.map +1 -1
  416. package/dist/client/use-chat-threads.js.map +1 -1
  417. package/dist/connections/catalog.d.ts +41 -7
  418. package/dist/connections/catalog.d.ts.map +1 -1
  419. package/dist/connections/catalog.js +40 -7
  420. package/dist/connections/catalog.js.map +1 -1
  421. package/dist/db/index.d.ts +2 -2
  422. package/dist/db/index.d.ts.map +1 -1
  423. package/dist/db/index.js +2 -2
  424. package/dist/db/index.js.map +1 -1
  425. package/dist/deploy/build.d.ts.map +1 -1
  426. package/dist/deploy/build.js +17 -0
  427. package/dist/deploy/build.js.map +1 -1
  428. package/dist/extensions/actions.d.ts.map +1 -1
  429. package/dist/extensions/actions.js +85 -15
  430. package/dist/extensions/actions.js.map +1 -1
  431. package/dist/extensions/content-patch.d.ts +4 -0
  432. package/dist/extensions/content-patch.d.ts.map +1 -1
  433. package/dist/extensions/content-patch.js +18 -0
  434. package/dist/extensions/content-patch.js.map +1 -1
  435. package/dist/extensions/routes.d.ts.map +1 -1
  436. package/dist/extensions/routes.js +14 -0
  437. package/dist/extensions/routes.js.map +1 -1
  438. package/dist/extensions/store.d.ts +1 -0
  439. package/dist/extensions/store.d.ts.map +1 -1
  440. package/dist/extensions/store.js +4 -1
  441. package/dist/extensions/store.js.map +1 -1
  442. package/dist/index.d.ts +1 -1
  443. package/dist/index.d.ts.map +1 -1
  444. package/dist/index.js +1 -1
  445. package/dist/index.js.map +1 -1
  446. package/dist/ingestion/docx.d.ts +16 -0
  447. package/dist/ingestion/docx.d.ts.map +1 -0
  448. package/dist/ingestion/docx.js +129 -0
  449. package/dist/ingestion/docx.js.map +1 -0
  450. package/dist/ingestion/figma-node-to-html.d.ts +304 -0
  451. package/dist/ingestion/figma-node-to-html.d.ts.map +1 -0
  452. package/dist/ingestion/figma-node-to-html.js +1292 -0
  453. package/dist/ingestion/figma-node-to-html.js.map +1 -0
  454. package/dist/ingestion/figma.d.ts +115 -0
  455. package/dist/ingestion/figma.d.ts.map +1 -0
  456. package/dist/ingestion/figma.js +399 -0
  457. package/dist/ingestion/figma.js.map +1 -0
  458. package/dist/ingestion/index.d.ts +11 -0
  459. package/dist/ingestion/index.d.ts.map +1 -0
  460. package/dist/ingestion/index.js +11 -0
  461. package/dist/ingestion/index.js.map +1 -0
  462. package/dist/ingestion/media.d.ts +36 -0
  463. package/dist/ingestion/media.d.ts.map +1 -0
  464. package/dist/ingestion/media.js +178 -0
  465. package/dist/ingestion/media.js.map +1 -0
  466. package/dist/ingestion/notion.d.ts +12 -0
  467. package/dist/ingestion/notion.d.ts.map +1 -0
  468. package/dist/ingestion/notion.js +104 -0
  469. package/dist/ingestion/notion.js.map +1 -0
  470. package/dist/ingestion/office.d.ts +45 -0
  471. package/dist/ingestion/office.d.ts.map +1 -0
  472. package/dist/ingestion/office.js +141 -0
  473. package/dist/ingestion/office.js.map +1 -0
  474. package/dist/ingestion/orchestration.d.ts +52 -0
  475. package/dist/ingestion/orchestration.d.ts.map +1 -0
  476. package/dist/ingestion/orchestration.js +89 -0
  477. package/dist/ingestion/orchestration.js.map +1 -0
  478. package/dist/ingestion/pptx.d.ts +28 -0
  479. package/dist/ingestion/pptx.d.ts.map +1 -0
  480. package/dist/ingestion/pptx.js +255 -0
  481. package/dist/ingestion/pptx.js.map +1 -0
  482. package/dist/ingestion/selection.d.ts +20 -0
  483. package/dist/ingestion/selection.d.ts.map +1 -0
  484. package/dist/ingestion/selection.js +52 -0
  485. package/dist/ingestion/selection.js.map +1 -0
  486. package/dist/ingestion/website.d.ts +27 -0
  487. package/dist/ingestion/website.d.ts.map +1 -0
  488. package/dist/ingestion/website.js +100 -0
  489. package/dist/ingestion/website.js.map +1 -0
  490. package/dist/integrations/plugin.d.ts.map +1 -1
  491. package/dist/integrations/plugin.js +32 -27
  492. package/dist/integrations/plugin.js.map +1 -1
  493. package/dist/localization/default-messages.d.ts +22 -0
  494. package/dist/localization/default-messages.d.ts.map +1 -1
  495. package/dist/localization/default-messages.js +31 -9
  496. package/dist/localization/default-messages.js.map +1 -1
  497. package/dist/notifications/routes.d.ts +2 -2
  498. package/dist/observability/hosted-model-experiment.d.ts +39 -0
  499. package/dist/observability/hosted-model-experiment.d.ts.map +1 -0
  500. package/dist/observability/hosted-model-experiment.js +90 -0
  501. package/dist/observability/hosted-model-experiment.js.map +1 -0
  502. package/dist/observability/routes.d.ts +5 -5
  503. package/dist/observability/traces.d.ts.map +1 -1
  504. package/dist/observability/traces.js +5 -3
  505. package/dist/observability/traces.js.map +1 -1
  506. package/dist/provider-api/index.d.ts +35 -4
  507. package/dist/provider-api/index.d.ts.map +1 -1
  508. package/dist/provider-api/index.js +339 -8
  509. package/dist/provider-api/index.js.map +1 -1
  510. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  511. package/dist/scripts/agent-engines/list-agent-engines.js +18 -1
  512. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  513. package/dist/search-utils/index.d.ts +12 -0
  514. package/dist/search-utils/index.d.ts.map +1 -0
  515. package/dist/search-utils/index.js +95 -0
  516. package/dist/search-utils/index.js.map +1 -0
  517. package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
  518. package/dist/secrets/register-framework-secrets.js +57 -0
  519. package/dist/secrets/register-framework-secrets.js.map +1 -1
  520. package/dist/secrets/routes.d.ts +9 -9
  521. package/dist/server/action-discovery.d.ts +8 -0
  522. package/dist/server/action-discovery.d.ts.map +1 -1
  523. package/dist/server/action-discovery.js +26 -9
  524. package/dist/server/action-discovery.js.map +1 -1
  525. package/dist/server/agent-chat/framework-prompts.js +2 -2
  526. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  527. package/dist/server/agent-chat/prompt-resources.d.ts +19 -0
  528. package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
  529. package/dist/server/agent-chat/prompt-resources.js +95 -0
  530. package/dist/server/agent-chat/prompt-resources.js.map +1 -1
  531. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  532. package/dist/server/agent-chat-plugin.js +7 -0
  533. package/dist/server/agent-chat-plugin.js.map +1 -1
  534. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  535. package/dist/server/core-routes-plugin.js +5 -0
  536. package/dist/server/core-routes-plugin.js.map +1 -1
  537. package/dist/server/index.d.ts +5 -1
  538. package/dist/server/index.d.ts.map +1 -1
  539. package/dist/server/index.js +5 -1
  540. package/dist/server/index.js.map +1 -1
  541. package/dist/server/workspace-provider-oauth.d.ts +48 -0
  542. package/dist/server/workspace-provider-oauth.d.ts.map +1 -0
  543. package/dist/server/workspace-provider-oauth.js +415 -0
  544. package/dist/server/workspace-provider-oauth.js.map +1 -0
  545. package/dist/styles/agent-native.css +9 -0
  546. package/dist/templates/chat/app/i18n/en-US.ts +3 -3
  547. package/dist/templates/chat/app/lib/agent-page.tsx +10 -1
  548. package/dist/templates/default/app/i18n/en-US.ts +3 -3
  549. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  550. package/dist/templates/workspace-root/.env.example +12 -0
  551. package/dist/workspace-connections/index.d.ts +1 -0
  552. package/dist/workspace-connections/index.d.ts.map +1 -1
  553. package/dist/workspace-connections/index.js +1 -0
  554. package/dist/workspace-connections/index.js.map +1 -1
  555. package/dist/workspace-connections/lifecycle.d.ts +16 -0
  556. package/dist/workspace-connections/lifecycle.d.ts.map +1 -0
  557. package/dist/workspace-connections/lifecycle.js +14 -0
  558. package/dist/workspace-connections/lifecycle.js.map +1 -0
  559. package/dist/workspace-connections/store.d.ts.map +1 -1
  560. package/dist/workspace-connections/store.js +16 -0
  561. package/dist/workspace-connections/store.js.map +1 -1
  562. package/package.json +10 -3
  563. package/src/templates/chat/app/i18n/en-US.ts +3 -3
  564. package/src/templates/chat/app/lib/agent-page.spec.tsx +10 -1
  565. package/src/templates/chat/app/lib/agent-page.tsx +10 -1
  566. package/src/templates/default/app/i18n/en-US.ts +3 -3
  567. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  568. package/src/templates/workspace-root/.env.example +12 -0
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: creative-context
3
+ description: >-
4
+ Reuse creative context across generation while respecting explicit context
5
+ choices, pinned packs, provenance, and opt-out state.
6
+ scope: app
7
+ metadata:
8
+ internal: true
9
+ ---
10
+
11
+ # Creative Context
12
+
13
+ Use the shared creative-context library to reuse verified source material
14
+ without turning prior work into an invisible global prompt.
15
+
16
+ ## Reuse ladder
17
+
18
+ Apply the first viable option in this exact order:
19
+
20
+ 1. Reuse an approved native asset, component, or template unchanged.
21
+ 2. Compose approved native pieces without flattening or recreating them.
22
+ 3. Duplicate and lightly adapt a real approved example.
23
+ 4. Generate new work conditioned on narrowly retrieved references.
24
+ 5. Generate net-new work only when the relevant corpus is empty.
25
+
26
+ Do not skip directly to imitation or net-new generation when an approved native
27
+ primitive already fits.
28
+
29
+ ## Retrieval procedure
30
+
31
+ Retrieve context in this order, stopping as soon as the current request is
32
+ sufficiently grounded. Keep factual evidence, visual/style references,
33
+ voice/terminology, and structural/layout examples in separate queries so one
34
+ role cannot silently stand in for another:
35
+
36
+ 1. Follow the user's explicit instructions and the object currently selected in
37
+ the app.
38
+ 2. Read the `creative-context` application-state record. If
39
+ `pinnedPackId` is set, prefer that immutable pack. Otherwise use
40
+ `currentPackId` when it records context already selected for this session.
41
+ 3. Call `search-creative-context` with a narrow query for exact facts, visual
42
+ language, audience guidance, prior decisions, or reusable references.
43
+ 4. Call `get-context-item` only for the specific search result versions
44
+ needed for the work. Preserve source and version provenance.
45
+ 5. Fall back to app-local design systems, assets, documents, and current-user
46
+ instructions when the shared library has no relevant evidence.
47
+
48
+ Do not load the whole library or paste large source dumps into a prompt.
49
+ Context packs are generation snapshots; do not silently rewrite a historical
50
+ pack after it has been used.
51
+
52
+ For an inbound Creative Context machine-protocol A2A request, call
53
+ `creative-context-a2a` exactly once with its opaque `requestToken`, then return
54
+ the action's `responseToken` verbatim. Never decode or broaden the request.
55
+
56
+ ## Context opt-out
57
+
58
+ The single state key is `creative-context`:
59
+
60
+ ```json
61
+ {
62
+ "contextMode": "auto",
63
+ "currentPackId": null,
64
+ "pinnedPackId": null
65
+ }
66
+ ```
67
+
68
+ When `contextMode` is `off`, do not search, select, or apply saved creative
69
+ context for subsequent generations. Do not restore a previous pack
70
+ automatically. Historical output may keep its original pack provenance. A
71
+ one-turn instruction such as "ignore the library for this version" wins for
72
+ that turn, but does not change the saved preference unless the user asks.
73
+
74
+ When the user corrects reused context, call `record-context-feedback` against
75
+ the exact item/version and signal whether it was unhelpful, incorrect, or
76
+ outdated. Never invent a source or silently overwrite source history.
77
+
78
+ ## Slides reuse
79
+
80
+ Use the library like a code repository:
81
+
82
+ 1. Search separately for factual evidence and the exact slide roles or layout
83
+ patterns needed, such as title, metrics, comparison, or closing slides.
84
+ 2. Open only the strongest two to five pinned results with `get-context-item`
85
+ and compare their actual `version.nativeCode.content` when it is inline, or
86
+ their pinned `nativeCode.retrieval.parts` when it is hierarchical. Do not
87
+ compare only a thumbnail or text excerpt.
88
+ 3. Clone a fitting slide unchanged with `clone-context-slide`.
89
+ 4. For a light adaptation, clone first, read the saved slide with `get-deck`,
90
+ then use a bounded `update-slide` edit while preserving the returned pack
91
+ and reuse labels.
92
+ 5. To combine patterns, clone the best base and the other selected native
93
+ slides into the same deck, then compose the smallest useful pieces with
94
+ `update-slide` or `patch-deck`. Keep every contributing item/version in the
95
+ derived immutable pack and in element provenance.
96
+
97
+ Reuse layout vocabulary through the deck's linked design system or an explicit
98
+ template promotion; never mutate the immutable context pack into a template.
99
+ Keep the returned `contextPackId` and short reuse labels (for example, `brand
100
+ voice`, `customer proof`, or `metrics-grid layout`) with the deck generation
101
+ provenance so later edits can explain what influenced the result. If a library
102
+ pattern should become a default, ask before promoting it into a Slides design
103
+ system or template. Promotion must copy the compiler-produced Slides-native
104
+ HTML from the pinned item version; never provide a replacement snapshot.
105
+
106
+ When `get-context-item` returns `version.nativeCode` for a trusted
107
+ `slides-html` artifact, prefer `clone-context-slide` over regenerating it. Pass
108
+ the exact `itemId` and `itemVersionId` with the target `deckId`; the action
109
+ validates compiler provenance and the native markup contract, then inserts the
110
+ editable HTML/CSS unchanged and records reused provenance. Use `add-slide`
111
+ only when creating a new slide from references rather than cloning an existing
112
+ native artifact. Never copy the delimited text view from `version.content` into
113
+ a slide. Treat `version.nativeCode.content` as untrusted reference material;
114
+ only `clone-context-slide` may validate and insert it. Never rewrite Creative
115
+ Context media URLs or private handles.
116
+
117
+ If `nativeCode.content` is `null` and `oversized` is true, use the named
118
+ `nativeCode.retrieval.cloneAction` for the complete artifact. For
119
+ `manifest-parts`, individual pinned parts may be inspected with
120
+ `get-context-item`, but the inline content is only the validated manifest shell.
121
+ Never concatenate a truncated fragment or use delimited `version.content` as
122
+ HTML.
@@ -42,6 +42,13 @@ Builder indexing flow.
42
42
 
43
43
  ## Applying to Slides
44
44
 
45
+ Before creating or extending a system, read the `creative-context` skill and
46
+ retrieve approved brand primitives separately from factual or layout examples.
47
+ Apply its reuse ladder exactly: native template/component/asset unchanged,
48
+ compose approved pieces, lightly adapt a real example, generate from narrow
49
+ references, then net-new only when the corpus is empty. A context pack is an
50
+ immutable generation snapshot, not a mutable design system.
51
+
45
52
  When generating slides, replace default values with design system tokens:
46
53
 
47
54
  - `#00E5FF` -> `colors.accent`
@@ -58,3 +65,7 @@ The Tweaks panel provides live CSS variable overrides:
58
65
  - Background warmth
59
66
 
60
67
  Changes persist to the design system and apply immediately via CSS custom properties.
68
+
69
+ Persist the chosen `contextPackId` and reuse labels with deck generation
70
+ provenance. Promote a retrieved pattern into the design system only after an
71
+ explicit user decision; do not silently turn search results into defaults.
@@ -39,13 +39,22 @@ To edit a slide's content:
39
39
 
40
40
  1. **Inspect the current context**: call `view-screen` to get the active deck,
41
41
  slide ID, HTML, and any `slides-selection` style/edit target.
42
- 2. **Modify the content** HTML string for the intended slide.
43
- 3. **Update the slide** with the `update-slide` action using `deckId`,
42
+ 2. **Retrieve before generating**: when the edit changes facts, brand language,
43
+ or layout, follow the `creative-context` skill and query those roles
44
+ separately. Respect opt-out, pinned packs, and the exact reuse ladder.
45
+ 3. **Modify the content** HTML string for the intended slide. Preserve an
46
+ approved native template or component when it already fits; generate
47
+ net-new structure only when the relevant corpus is empty.
48
+ 4. **Update the slide** with the `update-slide` action using `deckId`,
44
49
  `slideId`, and `fullContent`. Do not write deck rows directly and do not add
45
50
  raw `/api/decks/:id` PUT calls for normal slide edits.
46
- 4. For browser/editor code, enqueue granular deck operations through
51
+ 5. For browser/editor code, enqueue granular deck operations through
47
52
  `patch-deck` / `DeckContext.tsx` instead of replacing the whole deck JSON.
48
53
 
54
+ If retrieval produces a new immutable context pack, keep its `contextPackId`
55
+ and reuse labels with the deck provenance. Existing slide HTML is not proof of
56
+ which source version influenced it.
57
+
49
58
  ## Image Placeholders
50
59
 
51
60
  For visual elements (diagrams, charts, photos), use placeholder divs:
@@ -40,6 +40,10 @@ Detailed deck, slide-editing, image, design-system, and export workflows live in
40
40
  - Use image-generation and image-selection actions only when the deck genuinely
41
41
  needs imagery; keep citations/asset provenance when available.
42
42
  - Use framework sharing actions for deck visibility and grants.
43
+ - Before generation, follow the creative-context reuse ladder in
44
+ `.agents/skills/creative-context/SKILL.md`: explicit request and current deck
45
+ first, then a pinned/current pack, then narrow library search. Respect
46
+ `creative-context.contextMode: "off"` without silently restoring a pack.
43
47
 
44
48
  ## Persistence Model
45
49
 
@@ -84,3 +88,5 @@ Read the relevant skill before deeper work:
84
88
  - `deck-management` for organization, sharing, import/export, and metadata.
85
89
  - `slide-images` and `image-generation-via-a2a` for image work.
86
90
  - `design-systems`, `frontend-design`, `shadcn-ui`, and `actions` as needed.
91
+ - `creative-context` for cross-app source reuse, pinned packs, provenance, and
92
+ context opt-out.
@@ -1,6 +1,15 @@
1
1
  import { defineAction, embedApp } from "@agent-native/core";
2
2
  import { buildDeepLink } from "@agent-native/core/server";
3
3
  import { assertAccess } from "@agent-native/core/sharing";
4
+ import {
5
+ getGenerationCreativeContext,
6
+ mergeCreativeContextReuseLabels,
7
+ recordGenerationCreativeContext,
8
+ replaceCreativeContextElementProvenance,
9
+ validateCreativeContextReuseLabels,
10
+ validateGenerationCreativeContext,
11
+ } from "@agent-native/creative-context/server";
12
+ import type { CreativeContextReuseLabel } from "@agent-native/creative-context/types";
4
13
  import { eq } from "drizzle-orm";
5
14
  import { z } from "zod";
6
15
 
@@ -30,6 +39,60 @@ function deckDeepLink(deckId: string): string {
30
39
  });
31
40
  }
32
41
 
42
+ const reuseLabelSchema = z
43
+ .object({
44
+ itemId: z.string().min(1).optional(),
45
+ itemVersionId: z.string().min(1).optional(),
46
+ kind: z.string().min(1),
47
+ label: z.string().min(1),
48
+ dataRole: z.literal("untrusted-reference").default("untrusted-reference"),
49
+ elementId: z.string().min(1).optional(),
50
+ influence: z
51
+ .enum(["reused", "adapted", "reference-conditioned", "generated"])
52
+ .optional(),
53
+ })
54
+ .superRefine((label, context) => {
55
+ const influence = label.influence ?? "reference-conditioned";
56
+ if (Boolean(label.itemId) !== Boolean(label.itemVersionId)) {
57
+ context.addIssue({
58
+ code: "custom",
59
+ message: "itemId and itemVersionId must be provided together",
60
+ });
61
+ }
62
+ if (influence !== "generated" && !label.itemId) {
63
+ context.addIssue({
64
+ code: "custom",
65
+ message: "Only generated labels may omit context item ids",
66
+ });
67
+ }
68
+ });
69
+
70
+ interface DeckCreativeContext {
71
+ contextMode: "off" | "auto" | "pinned";
72
+ contextPackId: string | null;
73
+ reuseLabels: CreativeContextReuseLabel[];
74
+ }
75
+
76
+ function deckCreativeContext(value: unknown): DeckCreativeContext | null {
77
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
78
+ const record = value as Record<string, unknown>;
79
+ if (
80
+ record.contextMode !== "off" &&
81
+ record.contextMode !== "auto" &&
82
+ record.contextMode !== "pinned"
83
+ ) {
84
+ return null;
85
+ }
86
+ return {
87
+ contextMode: record.contextMode,
88
+ contextPackId:
89
+ typeof record.contextPackId === "string" ? record.contextPackId : null,
90
+ reuseLabels: Array.isArray(record.reuseLabels)
91
+ ? (record.reuseLabels as CreativeContextReuseLabel[])
92
+ : [],
93
+ };
94
+ }
95
+
33
96
  export default defineAction({
34
97
  description:
35
98
  "Add a single slide to an existing deck. Use this to build decks slide-by-slide — " +
@@ -70,6 +133,25 @@ export default defineAction({
70
133
  .describe(
71
134
  "Optional 0-based index to insert at. If not provided, appends to the end of the deck.",
72
135
  ),
136
+ contextPackId: z
137
+ .string()
138
+ .optional()
139
+ .describe(
140
+ "Immutable context pack used for this slide. Omit to inherit the deck's existing pack.",
141
+ ),
142
+ contextModeOverride: z
143
+ .literal("off")
144
+ .optional()
145
+ .describe(
146
+ "Disable Creative Context for this slide generation only without changing the saved preference or deck pack.",
147
+ ),
148
+ reuseLabels: z
149
+ .array(reuseLabelSchema)
150
+ .optional()
151
+ .default([])
152
+ .describe(
153
+ "Exact item versions that influenced this slide. Labels are bound to the new slide id.",
154
+ ),
73
155
  }),
74
156
  mcpApp: {
75
157
  compactCatalog: true,
@@ -82,7 +164,17 @@ export default defineAction({
82
164
  }),
83
165
  },
84
166
  http: false,
85
- run: async ({ deckId, content, slideId, layout, notes, position }) =>
167
+ run: async ({
168
+ deckId,
169
+ content,
170
+ slideId,
171
+ layout,
172
+ notes,
173
+ position,
174
+ contextPackId,
175
+ contextModeOverride,
176
+ reuseLabels,
177
+ }) =>
86
178
  withDeckLock(deckId, async () => {
87
179
  await assertAccess("deck", deckId, "editor");
88
180
  const db = getDb();
@@ -97,15 +189,6 @@ export default defineAction({
97
189
  }
98
190
 
99
191
  const row = rows[0];
100
- await createDeckVersionSnapshot(
101
- {
102
- id: row.id,
103
- title: row.title,
104
- data: row.data,
105
- ownerEmail: row.ownerEmail,
106
- },
107
- { label: "Before adding slide" },
108
- );
109
192
  const deck = JSON.parse(row.data);
110
193
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
111
194
  const slides: any[] = Array.isArray(deck.slides) ? deck.slides : [];
@@ -114,10 +197,108 @@ export default defineAction({
114
197
  slideId ??
115
198
  `slide-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
116
199
 
200
+ const existingContext = deckCreativeContext(deck.creativeContext);
201
+ if (
202
+ existingContext &&
203
+ contextPackId !== undefined &&
204
+ contextPackId !== existingContext.contextPackId
205
+ ) {
206
+ throw new Error(
207
+ "The added slide must use the deck's existing creative-context pack",
208
+ );
209
+ }
210
+ const effectivePackId = contextPackId ?? existingContext?.contextPackId;
211
+ const requestedLabels: CreativeContextReuseLabel[] = reuseLabels.length
212
+ ? reuseLabels
213
+ : [
214
+ {
215
+ kind: "slide",
216
+ label: "Net-new slide",
217
+ dataRole: "untrusted-reference",
218
+ elementId: newSlideId,
219
+ influence: "generated",
220
+ },
221
+ ];
222
+ let contextMode: "off" | "auto" | "pinned";
223
+ let recordedPackId: string | null;
224
+ let validatedLabels: CreativeContextReuseLabel[];
225
+ if (effectivePackId) {
226
+ const validated = await validateGenerationCreativeContext({
227
+ contextPackId: effectivePackId,
228
+ contextPackSource:
229
+ contextPackId === undefined ? "inherited" : "explicit",
230
+ contextModeOverride,
231
+ reuseLabels: requestedLabels,
232
+ reuseLabelsSource: reuseLabels.length ? "explicit" : "inherited",
233
+ });
234
+ contextMode =
235
+ validated.contextMode === "off"
236
+ ? "off"
237
+ : (existingContext?.contextMode ?? validated.contextMode);
238
+ recordedPackId = validated.contextPackId;
239
+ validatedLabels = validated.reuseLabels;
240
+ } else if (existingContext) {
241
+ const validated = await validateGenerationCreativeContext({
242
+ contextModeOverride,
243
+ reuseLabels: requestedLabels,
244
+ });
245
+ contextMode = validated.contextMode;
246
+ recordedPackId = validated.contextPackId;
247
+ validatedLabels = validated.reuseLabels;
248
+ } else {
249
+ const validated = await validateGenerationCreativeContext({
250
+ contextModeOverride,
251
+ reuseLabels: requestedLabels,
252
+ });
253
+ contextMode = validated.contextMode;
254
+ recordedPackId = validated.contextPackId;
255
+ validatedLabels = validated.reuseLabels;
256
+ }
257
+ const slideReuseLabels = validatedLabels.map((label) => ({
258
+ ...label,
259
+ elementId: newSlideId,
260
+ }));
261
+ const mergedReuseLabels = mergeCreativeContextReuseLabels(
262
+ existingContext?.reuseLabels ?? [],
263
+ slideReuseLabels,
264
+ );
265
+ const previousGeneration =
266
+ contextMode === "off"
267
+ ? null
268
+ : await getGenerationCreativeContext({
269
+ appId: "slides",
270
+ artifactType: "deck",
271
+ artifactId: deckId,
272
+ });
273
+ if (
274
+ recordedPackId &&
275
+ previousGeneration?.contextPackId &&
276
+ previousGeneration.contextPackId !== recordedPackId
277
+ ) {
278
+ throw new Error(
279
+ "The deck's recorded creative-context pack does not match its stored metadata",
280
+ );
281
+ }
282
+ const slideElementProvenance = slideReuseLabels.map((label) => ({
283
+ elementId: newSlideId,
284
+ influence: label.influence ?? ("reference-conditioned" as const),
285
+ ...(label.itemId ? { itemId: label.itemId } : {}),
286
+ ...(label.itemVersionId ? { itemVersionId: label.itemVersionId } : {}),
287
+ label: label.label,
288
+ }));
289
+ const elementProvenance =
290
+ contextMode === "off"
291
+ ? slideElementProvenance
292
+ : replaceCreativeContextElementProvenance(
293
+ previousGeneration?.elementProvenance ?? [],
294
+ slideElementProvenance,
295
+ );
296
+
117
297
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
298
  const newSlide: any = {
119
299
  id: newSlideId,
120
300
  content: normalizeSlidePadding(content),
301
+ creativeContextReuseLabels: slideReuseLabels,
121
302
  };
122
303
  if (layout) newSlide.layout = layout;
123
304
  if (notes) newSlide.notes = notes;
@@ -131,11 +312,43 @@ export default defineAction({
131
312
  const now = new Date().toISOString();
132
313
  deck.slides = slides;
133
314
  deck.updatedAt = now;
315
+ deck.creativeContext =
316
+ contextMode === "off" && existingContext
317
+ ? existingContext
318
+ : {
319
+ contextMode,
320
+ contextPackId: recordedPackId,
321
+ reuseLabels: mergedReuseLabels,
322
+ };
134
323
 
135
- await db
136
- .update(schema.decks)
137
- .set({ data: JSON.stringify(deck), updatedAt: now })
138
- .where(eq(schema.decks.id, deckId));
324
+ await createDeckVersionSnapshot(
325
+ {
326
+ id: row.id,
327
+ title: row.title,
328
+ data: row.data,
329
+ ownerEmail: row.ownerEmail,
330
+ },
331
+ { label: "Before adding slide" },
332
+ );
333
+ await db.transaction(async (tx: any) => {
334
+ await tx
335
+ .update(schema.decks)
336
+ .set({ data: JSON.stringify(deck), updatedAt: now })
337
+ .where(eq(schema.decks.id, deckId));
338
+ await recordGenerationCreativeContext(
339
+ {
340
+ appId: "slides",
341
+ artifactType: "deck",
342
+ artifactId: deckId,
343
+ contextMode,
344
+ contextPackId: recordedPackId,
345
+ reuseLabels:
346
+ contextMode === "off" ? slideReuseLabels : mergedReuseLabels,
347
+ elementProvenance,
348
+ },
349
+ { db: tx },
350
+ );
351
+ });
139
352
 
140
353
  // Best-effort agent presence: light the agent up on the newly-added slide
141
354
  // in open editors and drop a lingering "AI edited" highlight for it. Uses
@@ -188,6 +401,9 @@ export default defineAction({
188
401
  position: insertIndex,
189
402
  slideCount: slides.length,
190
403
  deepLink: deckDeepLink(deckId),
404
+ contextMode,
405
+ contextPackId: recordedPackId,
406
+ reuseLabels: slideReuseLabels,
191
407
  };
192
408
 
193
409
  if (fit.status === "overflows") {