@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
@@ -11,6 +11,19 @@ import {
11
11
  } from "@agent-native/core/collab";
12
12
  import { buildDeepLink } from "@agent-native/core/server";
13
13
  import { assertAccess } from "@agent-native/core/sharing";
14
+ import {
15
+ getGenerationCreativeContext,
16
+ mergeCreativeContextReuseLabels,
17
+ recordGenerationCreativeContext,
18
+ replaceCreativeContextElementProvenance,
19
+ resolveGenerationCreativeContext,
20
+ validateCreativeContextReuseLabels,
21
+ validateGenerationCreativeContext,
22
+ } from "@agent-native/creative-context/server";
23
+ import type {
24
+ CreativeContextElementProvenance,
25
+ CreativeContextReuseLabel,
26
+ } from "@agent-native/creative-context/types";
14
27
  import { eq } from "drizzle-orm";
15
28
  import { nanoid } from "nanoid";
16
29
  import { z } from "zod";
@@ -74,6 +87,34 @@ const DEFAULT_RESPONSIVE_BREAKPOINTS = [390, 768, 1440].map((widthPx) => ({
74
87
  prefix: widthToPrefix(widthPx),
75
88
  }));
76
89
 
90
+ const reuseLabelSchema = z
91
+ .object({
92
+ itemId: z.string().min(1).optional(),
93
+ itemVersionId: z.string().min(1).optional(),
94
+ kind: z.string().min(1),
95
+ label: z.string().min(1),
96
+ dataRole: z.literal("untrusted-reference").default("untrusted-reference"),
97
+ elementId: z.string().min(1).optional(),
98
+ influence: z
99
+ .enum(["reused", "adapted", "reference-conditioned", "generated"])
100
+ .optional(),
101
+ })
102
+ .superRefine((label, context) => {
103
+ const influence = label.influence ?? "reference-conditioned";
104
+ if (Boolean(label.itemId) !== Boolean(label.itemVersionId)) {
105
+ context.addIssue({
106
+ code: "custom",
107
+ message: "itemId and itemVersionId must be provided together",
108
+ });
109
+ }
110
+ if (influence !== "generated" && !label.itemId) {
111
+ context.addIssue({
112
+ code: "custom",
113
+ message: "Only generated labels may omit context item ids",
114
+ });
115
+ }
116
+ });
117
+
77
118
  function hasBreakpointSet(value: unknown): boolean {
78
119
  if (!value || typeof value !== "object" || Array.isArray(value)) {
79
120
  return false;
@@ -128,26 +169,190 @@ function withGenerationSessionLock<T>(
128
169
  return next;
129
170
  }
130
171
 
131
- async function updateGenerationSessionForSavedFiles(
172
+ interface DesignCreativeContextProvenance {
173
+ contextMode: "off" | "auto" | "pinned";
174
+ contextPackId: string | null;
175
+ reuseLabels: CreativeContextReuseLabel[];
176
+ }
177
+
178
+ async function resolveDesignCreativeContext(input: {
179
+ prompt: string;
180
+ generationSession: DesignGenerationSession | null;
181
+ contextPackId?: string;
182
+ contextModeOverride?: "off";
183
+ reuseLabels: CreativeContextReuseLabel[];
184
+ }): Promise<DesignCreativeContextProvenance> {
185
+ if (input.contextModeOverride === "off") {
186
+ const validated = await validateGenerationCreativeContext({
187
+ contextPackId: input.contextPackId,
188
+ contextModeOverride: "off",
189
+ reuseLabels: input.reuseLabels,
190
+ });
191
+ return {
192
+ contextMode: validated.contextMode,
193
+ contextPackId: validated.contextPackId,
194
+ reuseLabels: validated.reuseLabels,
195
+ };
196
+ }
197
+
198
+ const sessionContext = input.generationSession?.creativeContext;
199
+ if (sessionContext) {
200
+ if (
201
+ input.contextPackId !== undefined &&
202
+ input.contextPackId !== sessionContext.contextPackId
203
+ ) {
204
+ throw new Error(
205
+ "generate-design must preserve the generation session's creative-context pack",
206
+ );
207
+ }
208
+ const requestedLabels = input.reuseLabels.length
209
+ ? input.reuseLabels
210
+ : sessionContext.reuseLabels;
211
+ if (!sessionContext.contextPackId) {
212
+ return {
213
+ contextMode: sessionContext.contextMode,
214
+ contextPackId: null,
215
+ reuseLabels: validateCreativeContextReuseLabels(requestedLabels, {
216
+ generatedOnly: true,
217
+ }),
218
+ };
219
+ }
220
+ const validated = await validateGenerationCreativeContext({
221
+ contextPackId: sessionContext.contextPackId,
222
+ contextPackSource: "inherited",
223
+ reuseLabels: requestedLabels,
224
+ reuseLabelsSource: input.reuseLabels.length ? "explicit" : "inherited",
225
+ });
226
+ return {
227
+ contextMode: sessionContext.contextMode,
228
+ contextPackId: validated.contextPackId,
229
+ reuseLabels: validated.reuseLabels,
230
+ };
231
+ }
232
+
233
+ if (input.contextPackId) {
234
+ const validated = await validateGenerationCreativeContext({
235
+ contextPackId: input.contextPackId,
236
+ reuseLabels: input.reuseLabels.length ? input.reuseLabels : undefined,
237
+ });
238
+ return {
239
+ contextMode: validated.contextMode,
240
+ contextPackId: validated.contextPackId,
241
+ reuseLabels: validated.reuseLabels,
242
+ };
243
+ }
244
+
245
+ const resolved = await resolveGenerationCreativeContext({
246
+ query: input.prompt,
247
+ role: "design",
248
+ });
249
+ if (!input.reuseLabels.length) {
250
+ return {
251
+ contextMode: resolved.contextMode,
252
+ contextPackId: resolved.contextPackId,
253
+ reuseLabels: resolved.reuseLabels,
254
+ };
255
+ }
256
+ const validated = await validateGenerationCreativeContext({
257
+ contextPackId: resolved.contextPackId,
258
+ reuseLabels: input.reuseLabels,
259
+ });
260
+ return {
261
+ contextMode: validated.contextMode,
262
+ contextPackId: validated.contextPackId,
263
+ reuseLabels: validated.reuseLabels,
264
+ };
265
+ }
266
+
267
+ function provenanceForSavedFiles(
268
+ savedFiles: readonly { id: string; filename: string }[],
269
+ generationSession: DesignGenerationSession | null,
270
+ reuseLabels: readonly CreativeContextReuseLabel[],
271
+ ): CreativeContextElementProvenance[] {
272
+ return savedFiles.flatMap((file) => {
273
+ const frame = generationSession?.frames.find(
274
+ (candidate) => candidate.filename === file.filename,
275
+ );
276
+ const elementId = frame?.frameId ?? file.id;
277
+ const labels = reuseLabels.filter(
278
+ (label) =>
279
+ !label.elementId ||
280
+ label.elementId === file.id ||
281
+ label.elementId === file.filename ||
282
+ label.elementId === frame?.frameId,
283
+ );
284
+ if (!labels.length) {
285
+ return [
286
+ {
287
+ elementId,
288
+ influence: "generated" as const,
289
+ label: file.filename,
290
+ },
291
+ ];
292
+ }
293
+ return labels.map((label) => ({
294
+ elementId,
295
+ influence: label.influence ?? ("reference-conditioned" as const),
296
+ ...(label.itemId ? { itemId: label.itemId } : {}),
297
+ ...(label.itemVersionId ? { itemVersionId: label.itemVersionId } : {}),
298
+ label: label.label,
299
+ }));
300
+ });
301
+ }
302
+
303
+ async function finalizeGenerationForSavedFiles(
132
304
  designId: string,
133
- savedFilenames: string[],
305
+ savedFiles: readonly { id: string; filename: string }[],
306
+ generationSession: DesignGenerationSession | null,
307
+ creativeContext: DesignCreativeContextProvenance,
134
308
  ) {
135
309
  await withGenerationSessionLock(designId, async () => {
136
310
  const key = designGenerationSessionKey(designId);
137
311
  const rawSession = await readAppState(key).catch(() => null);
138
- if (!rawSession || typeof rawSession !== "object") return;
139
- const session = rawSession as unknown as DesignGenerationSession;
140
- if (session.designId !== designId || !Array.isArray(session.frames)) {
141
- return;
312
+ if (rawSession && typeof rawSession === "object") {
313
+ const session = rawSession as unknown as DesignGenerationSession;
314
+ if (session.designId === designId && Array.isArray(session.frames)) {
315
+ const nextSession = updateGenerationSessionWithSavedFiles(
316
+ session,
317
+ savedFiles.map((file) => file.filename),
318
+ );
319
+ if (nextSession !== session) {
320
+ await writeAppState(
321
+ key,
322
+ nextSession as unknown as Record<string, unknown>,
323
+ );
324
+ }
325
+ }
142
326
  }
143
327
 
144
- const nextSession = updateGenerationSessionWithSavedFiles(
145
- session,
146
- savedFilenames,
328
+ const nextElementProvenance = provenanceForSavedFiles(
329
+ savedFiles,
330
+ generationSession,
331
+ creativeContext.reuseLabels,
147
332
  );
148
- if (nextSession === session) return;
149
-
150
- await writeAppState(key, nextSession as unknown as Record<string, unknown>);
333
+ const previous =
334
+ creativeContext.contextMode === "off"
335
+ ? null
336
+ : await getGenerationCreativeContext({
337
+ appId: "design",
338
+ artifactType: "design",
339
+ artifactId: designId,
340
+ });
341
+ const elementProvenance =
342
+ previous?.contextMode === creativeContext.contextMode &&
343
+ previous.contextPackId === creativeContext.contextPackId
344
+ ? replaceCreativeContextElementProvenance(
345
+ previous.elementProvenance,
346
+ nextElementProvenance,
347
+ )
348
+ : nextElementProvenance;
349
+ await recordGenerationCreativeContext({
350
+ appId: "design",
351
+ artifactType: "design",
352
+ artifactId: designId,
353
+ ...creativeContext,
354
+ elementProvenance,
355
+ });
151
356
  });
152
357
  }
153
358
 
@@ -190,6 +395,22 @@ const generateDesignAgentParameters = {
190
395
  "Optional JSON array of overview-canvas placements keyed by filename or fileId. " +
191
396
  "Pass explicit x/y/width/height for every generated screen; desktop is 1440x1024.",
192
397
  },
398
+ contextPackId: {
399
+ type: "string",
400
+ description:
401
+ "Immutable creative-context pack. Omit to preserve the active generation session pack.",
402
+ },
403
+ contextModeOverride: {
404
+ type: "string",
405
+ enum: ["off"],
406
+ description:
407
+ "Disable Creative Context for this generation only without changing the saved preference.",
408
+ },
409
+ reuseLabels: {
410
+ type: "string",
411
+ description:
412
+ "Optional JSON array of exact item/version labels, with elementId set to a target filename or frame id when evidence applies to one screen.",
413
+ },
193
414
  primaryViewport: {
194
415
  type: "string",
195
416
  enum: ["mobile", "tablet", "desktop"],
@@ -353,6 +574,26 @@ const generateDesignAction = defineAction({
353
574
  "Reference each screen by filename or fileId and include x/y/width/height " +
354
575
  "from generate-screens regions or your planned canvas layout.",
355
576
  ),
577
+ contextPackId: z
578
+ .string()
579
+ .optional()
580
+ .describe(
581
+ "Immutable creative-context pack. Omit to preserve the generation session pack.",
582
+ ),
583
+ contextModeOverride: z
584
+ .literal("off")
585
+ .optional()
586
+ .describe(
587
+ "Disable Creative Context for this generation only without changing the saved preference.",
588
+ ),
589
+ reuseLabels: z
590
+ .preprocess(
591
+ (value) => (typeof value === "string" ? JSON.parse(value) : value),
592
+ z.array(reuseLabelSchema).optional().default([]),
593
+ )
594
+ .describe(
595
+ "Exact item/version labels used by the generated files or frames.",
596
+ ),
356
597
  primaryViewport: z
357
598
  .enum(["mobile", "tablet", "desktop"])
358
599
  .optional()
@@ -381,11 +622,26 @@ const generateDesignAction = defineAction({
381
622
  tweaks,
382
623
  canvasFrames,
383
624
  primaryViewport,
625
+ contextPackId,
626
+ contextModeOverride,
627
+ reuseLabels,
384
628
  }) => {
385
629
  await assertAccess("design", designId, "editor");
386
630
  if (designSystemId) {
387
631
  await assertAccess("design-system", designSystemId, "viewer");
388
632
  }
633
+ const rawGenerationSession = (await readAppState(
634
+ designGenerationSessionKey(designId),
635
+ ).catch(() => null)) as DesignGenerationSession | null;
636
+ const generationSession =
637
+ rawGenerationSession?.designId === designId ? rawGenerationSession : null;
638
+ const creativeContextProvenance = await resolveDesignCreativeContext({
639
+ prompt,
640
+ generationSession,
641
+ contextPackId,
642
+ contextModeOverride,
643
+ reuseLabels,
644
+ });
389
645
 
390
646
  const db = getDb();
391
647
  const now = new Date().toISOString();
@@ -579,6 +835,7 @@ const generateDesignAction = defineAction({
579
835
  lastPrompt: prompt,
580
836
  generatedAt: now,
581
837
  fileCount: files.length,
838
+ creativeContext: creativeContextProvenance,
582
839
  };
583
840
  if (normalizedTweaks !== undefined) {
584
841
  mergedData.tweaks = normalizedTweaks;
@@ -659,6 +916,10 @@ const generateDesignAction = defineAction({
659
916
  current.lastPrompt !== prompt ||
660
917
  current.generatedAt !== now ||
661
918
  current.fileCount !== files.length ||
919
+ !jsonValuesEqual(
920
+ current.creativeContext,
921
+ creativeContextProvenance,
922
+ ) ||
662
923
  (normalizedTweaks !== undefined &&
663
924
  !jsonValuesEqual(current.tweaks, normalizedTweaks))
664
925
  ) {
@@ -700,9 +961,11 @@ const generateDesignAction = defineAction({
700
961
  .where(eq(schema.designs.id, designId));
701
962
  }
702
963
 
703
- await updateGenerationSessionForSavedFiles(
964
+ await finalizeGenerationForSavedFiles(
704
965
  designId,
705
- savedFiles.map((file) => file.filename),
966
+ savedFiles,
967
+ generationSession,
968
+ creativeContextProvenance,
706
969
  );
707
970
 
708
971
  return {
@@ -712,6 +975,7 @@ const generateDesignAction = defineAction({
712
975
  savedFiles,
713
976
  placedFrames,
714
977
  fileCount: savedFiles.length,
978
+ ...creativeContextProvenance,
715
979
  };
716
980
  },
717
981
  link: ({ result }) => {
@@ -2,6 +2,10 @@ import { defineAction, embedApp } from "@agent-native/core";
2
2
  import { writeAppState } from "@agent-native/core/application-state";
3
3
  import { buildDeepLink } from "@agent-native/core/server";
4
4
  import { assertAccess } from "@agent-native/core/sharing";
5
+ import {
6
+ recordGenerationCreativeContext,
7
+ resolveGenerationCreativeContext,
8
+ } from "@agent-native/creative-context/server";
5
9
  import { eq } from "drizzle-orm";
6
10
  import { nanoid } from "nanoid";
7
11
  import { z } from "zod";
@@ -257,6 +261,12 @@ export default defineAction({
257
261
  .optional()
258
262
  .default([])
259
263
  .describe("Selected frame/image/reference ids attached as context"),
264
+ contextModeOverride: z
265
+ .literal("off")
266
+ .optional()
267
+ .describe(
268
+ "Disable Creative Context for this generation session only without changing the saved preference.",
269
+ ),
260
270
  }),
261
271
  mcpApp: {
262
272
  compactCatalog: true,
@@ -268,11 +278,28 @@ export default defineAction({
268
278
  height: 720,
269
279
  }),
270
280
  },
271
- run: async ({ designId, prompt, screens, designSystemId, contextRefs }) => {
281
+ run: async ({
282
+ designId,
283
+ prompt,
284
+ screens,
285
+ designSystemId,
286
+ contextRefs,
287
+ contextModeOverride,
288
+ }) => {
272
289
  await assertAccess("design", designId, "editor");
273
290
  if (designSystemId) {
274
291
  await assertAccess("design-system", designSystemId, "viewer");
275
292
  }
293
+ const creativeContext = await resolveGenerationCreativeContext({
294
+ query: prompt,
295
+ role: "design",
296
+ contextModeOverride,
297
+ });
298
+ const creativeContextProvenance = {
299
+ contextMode: creativeContext.contextMode,
300
+ contextPackId: creativeContext.contextPackId,
301
+ reuseLabels: creativeContext.reuseLabels,
302
+ };
276
303
 
277
304
  const regionSizes = screens.map(regionSizeForScreen);
278
305
  const regions = assignRegionsForSizes(regionSizes, {
@@ -357,6 +384,7 @@ export default defineAction({
357
384
  designSystemId,
358
385
  prompt,
359
386
  contextRefs,
387
+ creativeContext: creativeContextProvenance,
360
388
  frames,
361
389
  startedAt: new Date().toISOString(),
362
390
  };
@@ -371,6 +399,17 @@ export default defineAction({
371
399
  editorView: "overview",
372
400
  path: `/design/${encodeURIComponent(designId)}?view=overview`,
373
401
  });
402
+ await recordGenerationCreativeContext(
403
+ {
404
+ appId: "design",
405
+ artifactType: "generation-session",
406
+ artifactId: session.id,
407
+ ...creativeContextProvenance,
408
+ },
409
+ {
410
+ artifactAccess: { resourceType: "design", resourceId: designId },
411
+ },
412
+ );
374
413
 
375
414
  const targets = frames.map((frame, index) => {
376
415
  const requested = screens[index]!;
@@ -398,6 +437,8 @@ export default defineAction({
398
437
  status: session.status,
399
438
  frames,
400
439
  targets,
440
+ ...creativeContextProvenance,
441
+ contextResults: creativeContext.results,
401
442
  path: `/design/${encodeURIComponent(designId)}?view=overview`,
402
443
  embed: true,
403
444
  nextRequiredAction:
@@ -56,6 +56,10 @@
56
56
  "path": ".agents/skills/design-review-feedback",
57
57
  "visibility": "both",
58
58
  "exportAs": "design-review-feedback"
59
+ },
60
+ {
61
+ "path": ".agents/skills/creative-context",
62
+ "visibility": "internal"
59
63
  }
60
64
  ],
61
65
  "hostAdapters": [
@@ -6,6 +6,7 @@ import {
6
6
  useSession,
7
7
  useT,
8
8
  } from "@agent-native/core/client";
9
+ import { CreativeContextComposerChip } from "@agent-native/creative-context/client";
9
10
  import { HeaderActionsProvider } from "@agent-native/toolkit/app-shell";
10
11
  import { IconMenu2 } from "@tabler/icons-react";
11
12
  import {
@@ -163,9 +164,12 @@ export function Layout({ children }: LayoutProps) {
163
164
  threadFooterSlot={designQuestionsWaitingSlot}
164
165
  onComposerTextChange={handleComposerTextChange}
165
166
  composerSlot={
166
- detectedFigmaComposerLink ? (
167
- <FigmaLinkComposerBubble link={detectedFigmaComposerLink} />
168
- ) : null
167
+ <>
168
+ <CreativeContextComposerChip />
169
+ {detectedFigmaComposerLink ? (
170
+ <FigmaLinkComposerBubble link={detectedFigmaComposerLink} />
171
+ ) : null}
172
+ </>
169
173
  }
170
174
  >
171
175
  <div className="agent-layout-shell flex h-dvh w-full overflow-hidden bg-background text-foreground">
@@ -1,3 +1,5 @@
1
+ import { creativeContextMessagesByLocale } from "@agent-native/creative-context/messages";
2
+
1
3
  import {
2
4
  attachLocalizedKeyboardShortcuts,
3
5
  keyboardKeyLabels,
@@ -6,6 +8,7 @@ import {
6
8
  import { designTemplateFeatureOverrides } from "../i18n-template-feature";
7
9
 
8
10
  const messages = {
11
+ creativeContext: creativeContextMessagesByLocale["zh-TW"],
9
12
  root: {
10
13
  commandActions: "操作",
11
14
  commandSearch: "搜尋",
@@ -1,4 +1,5 @@
1
1
  import type { LocaleCode } from "@agent-native/core/client";
2
+ import { creativeContextMessagesByLocale } from "@agent-native/creative-context/messages";
2
3
 
3
4
  import { breakpointBarOverrides } from "./i18n-breakpoints";
4
5
  import {
@@ -11,6 +12,7 @@ import { designTemplateFeatureOverrides } from "./i18n-template-feature";
11
12
  import zhTW from "./i18n/zh-TW";
12
13
 
13
14
  const enUS = {
15
+ creativeContext: creativeContextMessagesByLocale["en-US"],
14
16
  root: {
15
17
  commandActions: "Actions",
16
18
  commandSearch: "Search",
@@ -31,10 +33,10 @@ const enUS = {
31
33
  collapseSidebar: "Collapse sidebar",
32
34
  },
33
35
  settings: {
34
- agentTitle: "Agent settings",
36
+ agentTitle: "Agent workspace",
35
37
  agentDescription:
36
- "Open the agent sidebar settings for model, API keys, automations, voice, and other agent controls.",
37
- openAgentSettings: "Open agent settings",
38
+ "Open the agent workspace for model, API keys, automations, voice, and other agent controls.",
39
+ openAgentSettings: "Open agent workspace",
38
40
  languageTitle: "Language",
39
41
  languageDescription: "Choose the interface language for Design.",
40
42
  languageLabel: "Interface language",
@@ -1571,7 +1573,11 @@ function mergeLocalizedMessages(
1571
1573
  overrides: PartialMessages,
1572
1574
  ): Messages {
1573
1575
  return attachLocalizedKeyboardShortcuts(
1574
- mergeMessages(overrides),
1576
+ mergeMessages(
1577
+ mergePartialMessages(overrides, {
1578
+ creativeContext: creativeContextMessagesByLocale[locale],
1579
+ }),
1580
+ ),
1575
1581
  keyboardShortcutLabels[locale],
1576
1582
  keyboardKeyLabels[locale],
1577
1583
  );
@@ -1,4 +1,5 @@
1
1
  import { AgentTabsPage, useT } from "@agent-native/core/client";
2
+ import { createCreativeContextAgentTab } from "@agent-native/creative-context/client";
2
3
  import { useSetPageTitle } from "@agent-native/toolkit/app-shell";
3
4
 
4
5
  import messages from "@/i18n/en-US";
@@ -11,5 +12,5 @@ export default function AgentRoute() {
11
12
  const t = useT();
12
13
  useSetPageTitle(t("settings.agentTitle"));
13
14
 
14
- return <AgentTabsPage />;
15
+ return <AgentTabsPage extraTabFactories={[createCreativeContextAgentTab]} />;
15
16
  }
@@ -7,6 +7,7 @@ import {
7
7
  type SettingsSearchEntry,
8
8
  } from "@agent-native/core/client";
9
9
  import { TeamPage } from "@agent-native/core/client/org";
10
+ import { CreativeContextSettingsLink } from "@agent-native/creative-context/client";
10
11
  import { useMemo } from "react";
11
12
 
12
13
  import {
@@ -48,6 +49,8 @@ export default function SettingsRoute() {
48
49
  generalSearchEntries={generalSearchEntries}
49
50
  general={
50
51
  <div className="mx-auto w-full max-w-2xl space-y-6">
52
+ <CreativeContextSettingsLink />
53
+
51
54
  <Card id="language" className="scroll-mt-16">
52
55
  <CardHeader>
53
56
  <CardTitle className="text-base">
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ The Agent workspace now includes a Library for reusing verified creative context, including version-pinned Figma designs cloned as editable HTML/CSS without regeneration.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-16
4
+ ---
5
+
6
+ Design agent chat now stays inline with the editor rail without a separate Chat or Workspace header.
@@ -19,6 +19,7 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "@agent-native/core": "workspace:*",
22
+ "@agent-native/creative-context": "workspace:*",
22
23
  "@agent-native/pinpoint": "workspace:*",
23
24
  "@agent-native/toolkit": "workspace:*",
24
25
  "@fontsource-variable/inter": "^5.2.8",