@agent-native/core 0.106.3 → 0.107.1

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 (292) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +23 -0
  3. package/corpus/core/docs/content/integrations.mdx +597 -0
  4. package/corpus/core/docs/content/locales/ar-SA/mcp-clients.mdx +19 -1
  5. package/corpus/core/docs/content/locales/de-DE/mcp-clients.mdx +22 -1
  6. package/corpus/core/docs/content/locales/es-ES/mcp-clients.mdx +23 -1
  7. package/corpus/core/docs/content/locales/fr-FR/mcp-clients.mdx +23 -1
  8. package/corpus/core/docs/content/locales/hi-IN/mcp-clients.mdx +22 -1
  9. package/corpus/core/docs/content/locales/ja-JP/mcp-clients.mdx +21 -1
  10. package/corpus/core/docs/content/locales/ko-KR/mcp-clients.mdx +20 -1
  11. package/corpus/core/docs/content/locales/pt-BR/mcp-clients.mdx +22 -1
  12. package/corpus/core/docs/content/locales/zh-CN/mcp-clients.mdx +17 -1
  13. package/corpus/core/docs/content/locales/zh-TW/mcp-clients.mdx +17 -1
  14. package/corpus/core/docs/content/mcp-clients.mdx +51 -1
  15. package/corpus/core/docs/content/organizations-teams-permissions.mdx +413 -0
  16. package/corpus/core/package.json +1 -1
  17. package/corpus/core/src/agent/production-agent.ts +19 -0
  18. package/corpus/core/src/agent/run-store.ts +98 -2
  19. package/corpus/core/src/client/AssistantChat.tsx +26 -1
  20. package/corpus/core/src/client/CommandMenu.tsx +5 -0
  21. package/corpus/core/src/client/active-run-state.ts +34 -0
  22. package/corpus/core/src/client/agent-chat-adapter.ts +4 -0
  23. package/corpus/core/src/client/chat/message-components.tsx +41 -0
  24. package/corpus/core/src/client/composer/TiptapComposer.tsx +45 -8
  25. package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +30 -11
  26. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +270 -0
  27. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +177 -40
  28. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +478 -4
  29. package/corpus/core/src/client/resources/mcp-integration-logos.ts +108 -0
  30. package/corpus/core/src/client/sharing/ShareButton.tsx +30 -9
  31. package/corpus/core/src/client/use-agent-chat-home-handoff.ts +2 -2
  32. package/corpus/core/src/deploy/build.ts +32 -0
  33. package/corpus/core/src/extensions/html-shell.ts +33 -1
  34. package/corpus/core/src/ingestion/office.ts +1 -2
  35. package/corpus/core/src/ingestion/pptx.ts +2 -4
  36. package/corpus/core/src/localization/default-messages.ts +129 -1
  37. package/corpus/core/src/mcp/actions/call-mcp-tool.ts +1 -0
  38. package/corpus/core/src/secrets/register-framework-secrets.ts +28 -0
  39. package/corpus/core/src/server/agent-chat-plugin.ts +29 -1
  40. package/corpus/core/src/server/index.ts +4 -0
  41. package/corpus/core/src/server/org-admin.ts +28 -0
  42. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +9 -0
  43. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/references/api.md +31 -0
  44. package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +9 -0
  45. package/corpus/core/src/vite/client.ts +24 -0
  46. package/corpus/templates/analytics/.agents/skills/creative-context/SKILL.md +64 -0
  47. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +29 -21
  48. package/corpus/templates/analytics/AGENTS.md +13 -0
  49. package/corpus/templates/analytics/actions/clone-creative-context-dashboard.ts +86 -0
  50. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +1 -1
  51. package/corpus/templates/analytics/actions/update-dashboard.ts +6 -2
  52. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +35 -7
  53. package/corpus/templates/analytics/app/components/layout/Layout.tsx +3 -3
  54. package/corpus/templates/analytics/app/i18n/zh-TW.ts +1 -0
  55. package/corpus/templates/analytics/app/i18n-data.ts +1 -0
  56. package/corpus/templates/analytics/app/pages/Ask.tsx +8 -4
  57. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +11 -1
  58. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/extension-slot.ts +11 -0
  59. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +86 -0
  60. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +6 -0
  61. package/corpus/templates/analytics/app/routes/agent.tsx +7 -1
  62. package/corpus/templates/analytics/changelog/2026-07-17-dashboard-extension-boxes.md +6 -0
  63. package/corpus/templates/analytics/changelog/2026-07-17-library-now-flags-published-dashboards-with-newer-versions-a.md +6 -0
  64. package/corpus/templates/analytics/changelog/2026-07-17-resources-can-be-added-to-creative-context-from-their-action.md +6 -0
  65. package/corpus/templates/analytics/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
  66. package/corpus/templates/analytics/package.json +1 -0
  67. package/corpus/templates/analytics/server/lib/agent-readable-resource-context.ts +8 -0
  68. package/corpus/templates/analytics/server/lib/native-creative-context.ts +158 -0
  69. package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -0
  70. package/corpus/templates/analytics/server/plugins/creative-context.ts +10 -0
  71. package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +12 -3
  72. package/corpus/templates/assets/AGENTS.md +5 -0
  73. package/corpus/templates/assets/actions/clone-creative-context-asset.ts +74 -0
  74. package/corpus/templates/assets/app/hooks/use-navigation-state.ts +2 -1
  75. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +308 -178
  76. package/corpus/templates/assets/app/routes/library.tsx +5 -11
  77. package/corpus/templates/assets/changelog/2026-07-17-library-now-flags-published-assets-with-newer-versions-and-l.md +6 -0
  78. package/corpus/templates/assets/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  79. package/corpus/templates/assets/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
  80. package/corpus/templates/assets/server/lib/native-creative-context.ts +198 -0
  81. package/corpus/templates/assets/server/plugins/creative-context.ts +4 -0
  82. package/corpus/templates/brain/actions/provider-api-request.ts +1 -0
  83. package/corpus/templates/brain/app/hooks/use-navigation-state.ts +6 -1
  84. package/corpus/templates/brain/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  85. package/corpus/templates/calendar/actions/provider-api-request.ts +1 -0
  86. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +1 -1
  87. package/corpus/templates/calendar/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  88. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +4 -1
  89. package/corpus/templates/chat/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  90. package/corpus/templates/clips/actions/get-recording-insights.ts +7 -4
  91. package/corpus/templates/clips/actions/list-recordings.ts +48 -0
  92. package/corpus/templates/clips/actions/list-viewers.ts +2 -1
  93. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +3 -1
  94. package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -1
  95. package/corpus/templates/clips/app/components/player/share-dialog.tsx +1 -3
  96. package/corpus/templates/clips/app/hooks/use-desktop-promo.ts +11 -6
  97. package/corpus/templates/clips/app/hooks/use-view-tracking.ts +6 -1
  98. package/corpus/templates/clips/app/lib/ffmpeg-export.ts +4 -2
  99. package/corpus/templates/clips/app/routes/share.$shareId.tsx +21 -3
  100. package/corpus/templates/clips/changelog/2026-07-17-dictation-keeps-sentence-spacing-and-no-longer-crashes-when-.md +6 -0
  101. package/corpus/templates/clips/changelog/2026-07-17-shared-clips-now-preserve-editor-access-and-show-editor-insi.md +6 -0
  102. package/corpus/templates/clips/changelog/2026-07-17-stitching-clips-no-longer-fails-when-editor-media-metadata-i.md +6 -0
  103. package/corpus/templates/clips/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  104. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +14 -8
  105. package/corpus/templates/clips/shared/view-analytics.ts +4 -0
  106. package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +12 -3
  107. package/corpus/templates/content/AGENTS.md +5 -0
  108. package/corpus/templates/content/actions/_content-space-access.ts +45 -2
  109. package/corpus/templates/content/actions/clone-creative-context-document.ts +61 -0
  110. package/corpus/templates/content/actions/create-content-database.ts +41 -7
  111. package/corpus/templates/content/actions/provider-api-request.ts +1 -0
  112. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +21 -0
  113. package/corpus/templates/content/app/components/layout/Layout.tsx +1 -1
  114. package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +29 -0
  115. package/corpus/templates/content/app/root.tsx +1 -10
  116. package/corpus/templates/content/changelog/2026-07-17-creating-a-database-now-completes-reliably-in-hosted-workspa.md +6 -0
  117. package/corpus/templates/content/changelog/2026-07-17-library-now-flags-published-documents-with-newer-versions-an.md +6 -0
  118. package/corpus/templates/content/changelog/2026-07-17-resources-can-be-added-to-creative-context-from-their-action.md +6 -0
  119. package/corpus/templates/content/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  120. package/corpus/templates/content/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
  121. package/corpus/templates/content/parity/matrix.md +1 -1
  122. package/corpus/templates/content/parity/matrix.ts +1 -0
  123. package/corpus/templates/content/server/lib/native-creative-context.ts +191 -0
  124. package/corpus/templates/content/server/plugins/creative-context.ts +8 -1
  125. package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +11 -3
  126. package/corpus/templates/design/AGENTS.md +5 -0
  127. package/corpus/templates/design/actions/clone-creative-context-design-native.ts +111 -0
  128. package/corpus/templates/design/actions/provider-api-request.ts +1 -0
  129. package/corpus/templates/design/app/pages/Index.tsx +44 -0
  130. package/corpus/templates/design/app/pages/design-editor/types.ts +1 -0
  131. package/corpus/templates/design/changelog/2026-07-17-library-now-flags-published-designs-with-newer-versions-and-.md +6 -0
  132. package/corpus/templates/design/changelog/2026-07-17-resources-can-be-added-to-creative-context-from-their-action.md +6 -0
  133. package/corpus/templates/design/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
  134. package/corpus/templates/design/server/lib/native-creative-context.ts +265 -0
  135. package/corpus/templates/design/server/plugins/creative-context.ts +8 -1
  136. package/corpus/templates/dispatch/actions/provider-api-request.ts +1 -0
  137. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +4 -1
  138. package/corpus/templates/dispatch/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  139. package/corpus/templates/forms/app/components/layout/Layout.tsx +2 -4
  140. package/corpus/templates/forms/app/components/ui/popover.tsx +25 -1
  141. package/corpus/templates/forms/app/hooks/use-navigation-state.ts +6 -1
  142. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +13 -10
  143. package/corpus/templates/forms/app/root.tsx +6 -1
  144. package/corpus/templates/forms/changelog/2026-07-17-form-builder-popovers-stay-within-the-viewport.md +6 -0
  145. package/corpus/templates/forms/changelog/2026-07-17-form-editor-loading-matches-current-sidebar-free-layout.md +6 -0
  146. package/corpus/templates/forms/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  147. package/corpus/templates/mail/actions/provider-api-request.ts +1 -0
  148. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +1 -1
  149. package/corpus/templates/mail/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  150. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +14 -3
  151. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +8 -1
  152. package/corpus/templates/plan/app/root.tsx +0 -2
  153. package/corpus/templates/plan/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  154. package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +11 -3
  155. package/corpus/templates/slides/AGENTS.md +5 -0
  156. package/corpus/templates/slides/actions/clone-creative-context-deck.ts +96 -0
  157. package/corpus/templates/slides/actions/extract-pdf.ts +3 -2
  158. package/corpus/templates/slides/actions/import-file.ts +3 -2
  159. package/corpus/templates/slides/actions/provider-api-request.ts +1 -0
  160. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +27 -0
  161. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +21 -0
  162. package/corpus/templates/slides/app/components/layout/Layout.tsx +1 -1
  163. package/corpus/templates/slides/app/context/DeckContext.tsx +23 -23
  164. package/corpus/templates/slides/changelog/2026-07-17-duplicated-slides-now-stay-in-the-deck.md +6 -0
  165. package/corpus/templates/slides/changelog/2026-07-17-library-now-flags-published-decks-with-newer-versions-and-le.md +6 -0
  166. package/corpus/templates/slides/changelog/2026-07-17-pdf-and-powerpoint-imports-now-work-reliably-in-hosted-decks.md +6 -0
  167. package/corpus/templates/slides/changelog/2026-07-17-resources-can-be-added-to-creative-context-from-their-action.md +6 -0
  168. package/corpus/templates/slides/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  169. package/corpus/templates/slides/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
  170. package/corpus/templates/slides/server/lib/native-creative-context.ts +288 -0
  171. package/corpus/templates/slides/server/plugins/creative-context.ts +4 -0
  172. package/corpus/templates/tasks/app/components/layout/Layout.tsx +2 -13
  173. package/corpus/templates/tasks/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it.md +6 -0
  174. package/dist/agent/production-agent.d.ts.map +1 -1
  175. package/dist/agent/production-agent.js +13 -1
  176. package/dist/agent/production-agent.js.map +1 -1
  177. package/dist/agent/run-store.d.ts +17 -0
  178. package/dist/agent/run-store.d.ts.map +1 -1
  179. package/dist/agent/run-store.js +84 -2
  180. package/dist/agent/run-store.js.map +1 -1
  181. package/dist/client/AssistantChat.d.ts.map +1 -1
  182. package/dist/client/AssistantChat.js +18 -3
  183. package/dist/client/AssistantChat.js.map +1 -1
  184. package/dist/client/CommandMenu.d.ts.map +1 -1
  185. package/dist/client/CommandMenu.js +4 -0
  186. package/dist/client/CommandMenu.js.map +1 -1
  187. package/dist/client/active-run-state.d.ts +7 -0
  188. package/dist/client/active-run-state.d.ts.map +1 -1
  189. package/dist/client/active-run-state.js +28 -0
  190. package/dist/client/active-run-state.js.map +1 -1
  191. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  192. package/dist/client/agent-chat-adapter.js +4 -1
  193. package/dist/client/agent-chat-adapter.js.map +1 -1
  194. package/dist/client/chat/message-components.d.ts.map +1 -1
  195. package/dist/client/chat/message-components.js +35 -1
  196. package/dist/client/chat/message-components.js.map +1 -1
  197. package/dist/client/composer/TiptapComposer.d.ts +7 -0
  198. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  199. package/dist/client/composer/TiptapComposer.js +37 -8
  200. package/dist/client/composer/TiptapComposer.js.map +1 -1
  201. package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
  202. package/dist/client/integrations/IntegrationsPanel.js +3 -2
  203. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  204. package/dist/client/resources/McpConnectionSuggestion.d.ts +9 -0
  205. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -0
  206. package/dist/client/resources/McpConnectionSuggestion.js +134 -0
  207. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -0
  208. package/dist/client/resources/McpIntegrationDialog.d.ts +2 -1
  209. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  210. package/dist/client/resources/McpIntegrationDialog.js +51 -21
  211. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  212. package/dist/client/resources/mcp-integration-catalog.d.ts +15 -0
  213. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  214. package/dist/client/resources/mcp-integration-catalog.js +420 -4
  215. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  216. package/dist/client/resources/mcp-integration-logos.d.ts +2 -0
  217. package/dist/client/resources/mcp-integration-logos.d.ts.map +1 -0
  218. package/dist/client/resources/mcp-integration-logos.js +109 -0
  219. package/dist/client/resources/mcp-integration-logos.js.map +1 -0
  220. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  221. package/dist/client/sharing/ShareButton.js +15 -12
  222. package/dist/client/sharing/ShareButton.js.map +1 -1
  223. package/dist/client/use-agent-chat-home-handoff.d.ts +1 -1
  224. package/dist/client/use-agent-chat-home-handoff.d.ts.map +1 -1
  225. package/dist/client/use-agent-chat-home-handoff.js +1 -1
  226. package/dist/client/use-agent-chat-home-handoff.js.map +1 -1
  227. package/dist/collab/routes.d.ts +1 -1
  228. package/dist/collab/struct-routes.d.ts +1 -1
  229. package/dist/deploy/build.d.ts.map +1 -1
  230. package/dist/deploy/build.js +23 -0
  231. package/dist/deploy/build.js.map +1 -1
  232. package/dist/extensions/html-shell.d.ts.map +1 -1
  233. package/dist/extensions/html-shell.js +33 -1
  234. package/dist/extensions/html-shell.js.map +1 -1
  235. package/dist/ingestion/office.d.ts.map +1 -1
  236. package/dist/ingestion/office.js +1 -2
  237. package/dist/ingestion/office.js.map +1 -1
  238. package/dist/ingestion/pptx.js +2 -4
  239. package/dist/ingestion/pptx.js.map +1 -1
  240. package/dist/localization/default-messages.d.ts +100 -0
  241. package/dist/localization/default-messages.d.ts.map +1 -1
  242. package/dist/localization/default-messages.js +101 -1
  243. package/dist/localization/default-messages.js.map +1 -1
  244. package/dist/mcp/actions/call-mcp-tool.js +1 -0
  245. package/dist/mcp/actions/call-mcp-tool.js.map +1 -1
  246. package/dist/notifications/routes.d.ts +1 -1
  247. package/dist/observability/routes.d.ts +5 -5
  248. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  249. package/dist/resources/handlers.d.ts +1 -1
  250. package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
  251. package/dist/secrets/register-framework-secrets.js +25 -0
  252. package/dist/secrets/register-framework-secrets.js.map +1 -1
  253. package/dist/secrets/routes.d.ts +9 -9
  254. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  255. package/dist/server/agent-chat-plugin.js +23 -1
  256. package/dist/server/agent-chat-plugin.js.map +1 -1
  257. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  258. package/dist/server/index.d.ts +1 -0
  259. package/dist/server/index.d.ts.map +1 -1
  260. package/dist/server/index.js +1 -0
  261. package/dist/server/index.js.map +1 -1
  262. package/dist/server/org-admin.d.ts +3 -0
  263. package/dist/server/org-admin.d.ts.map +1 -0
  264. package/dist/server/org-admin.js +24 -0
  265. package/dist/server/org-admin.js.map +1 -0
  266. package/dist/templates/chat/app/hooks/use-navigation-state.ts +4 -1
  267. package/dist/templates/chat/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  268. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +9 -0
  269. package/dist/templates/workspace-core/.agents/skills/extensions/references/api.md +31 -0
  270. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +9 -0
  271. package/dist/vite/client.d.ts.map +1 -1
  272. package/dist/vite/client.js +20 -0
  273. package/dist/vite/client.js.map +1 -1
  274. package/docs/content/integrations.mdx +597 -0
  275. package/docs/content/locales/ar-SA/mcp-clients.mdx +19 -1
  276. package/docs/content/locales/de-DE/mcp-clients.mdx +22 -1
  277. package/docs/content/locales/es-ES/mcp-clients.mdx +23 -1
  278. package/docs/content/locales/fr-FR/mcp-clients.mdx +23 -1
  279. package/docs/content/locales/hi-IN/mcp-clients.mdx +22 -1
  280. package/docs/content/locales/ja-JP/mcp-clients.mdx +21 -1
  281. package/docs/content/locales/ko-KR/mcp-clients.mdx +20 -1
  282. package/docs/content/locales/pt-BR/mcp-clients.mdx +22 -1
  283. package/docs/content/locales/zh-CN/mcp-clients.mdx +17 -1
  284. package/docs/content/locales/zh-TW/mcp-clients.mdx +17 -1
  285. package/docs/content/mcp-clients.mdx +51 -1
  286. package/docs/content/organizations-teams-permissions.mdx +413 -0
  287. package/package.json +1 -1
  288. package/src/templates/chat/app/hooks/use-navigation-state.ts +4 -1
  289. package/src/templates/chat/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  290. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +9 -0
  291. package/src/templates/workspace-core/.agents/skills/extensions/references/api.md +31 -0
  292. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +9 -0
@@ -0,0 +1,265 @@
1
+ import { createHash } from "node:crypto";
2
+
3
+ import { putPrivateBlob } from "@agent-native/core/private-blob";
4
+ import { accessFilter, resolveAccess } from "@agent-native/core/sharing";
5
+ import {
6
+ renderSafeNativeHtmlPreviews,
7
+ serializePrivateBlobHandle,
8
+ type NativeResourceCaptureAdapter,
9
+ } from "@agent-native/creative-context/server";
10
+ import { and, inArray } from "drizzle-orm";
11
+ import { nanoid } from "nanoid";
12
+
13
+ import { getDb, schema } from "../db/index.js";
14
+ import { buildDesignSnapshot } from "./design-snapshot.js";
15
+
16
+ function previewText(value: string, limit = 280) {
17
+ return value
18
+ .replace(/<[^>]+>/g, " ")
19
+ .replace(/\s+/g, " ")
20
+ .trim()
21
+ .slice(0, limit);
22
+ }
23
+
24
+ async function captureDesignPreviewMedia(input: {
25
+ designId: string;
26
+ ownerEmail: string;
27
+ files: Array<{
28
+ id: string;
29
+ filename: string;
30
+ fileType: string;
31
+ content: string;
32
+ }>;
33
+ }) {
34
+ const previewFiles = input.files
35
+ .filter((file) => file.fileType === "html")
36
+ .slice(0, 12);
37
+ const rendered = await renderSafeNativeHtmlPreviews(
38
+ previewFiles.map((file) => ({
39
+ id: file.id,
40
+ html: file.content,
41
+ width: 1_280,
42
+ height: 800,
43
+ })),
44
+ );
45
+ const media = new Map<
46
+ string,
47
+ {
48
+ kind: "image";
49
+ mimeType: "image/png";
50
+ accessMode: "private";
51
+ storageKey: string;
52
+ altText: string;
53
+ contentHash: string;
54
+ width: number;
55
+ height: number;
56
+ metadata: { role: "design-preview"; fileId: string };
57
+ }
58
+ >();
59
+ await Promise.all(
60
+ rendered.map(async (preview) => {
61
+ const contentHash = createHash("sha256")
62
+ .update(preview.data)
63
+ .digest("hex");
64
+ const handle = await putPrivateBlob({
65
+ data: preview.data,
66
+ filename: `${input.designId}-${preview.id}.preview.png`,
67
+ mimeType: "image/png",
68
+ ownerEmail: input.ownerEmail,
69
+ key: `creative-context/design/${input.designId}/previews/${contentHash}.png`,
70
+ metadata: {
71
+ appId: "design",
72
+ resourceType: "design-preview",
73
+ resourceId: input.designId,
74
+ contentHash,
75
+ },
76
+ }).catch(() => null);
77
+ if (!handle) return;
78
+ const file = previewFiles.find(
79
+ (candidate) => candidate.id === preview.id,
80
+ );
81
+ media.set(preview.id, {
82
+ kind: "image",
83
+ mimeType: "image/png",
84
+ accessMode: "private",
85
+ storageKey: serializePrivateBlobHandle(handle),
86
+ altText: file?.filename ?? "Design preview",
87
+ contentHash,
88
+ width: preview.width,
89
+ height: preview.height,
90
+ metadata: { role: "design-preview", fileId: preview.id },
91
+ });
92
+ }),
93
+ );
94
+ return media;
95
+ }
96
+
97
+ export const nativeDesignCreativeContextAdapter: NativeResourceCaptureAdapter =
98
+ {
99
+ appId: "design",
100
+ resourceType: "design",
101
+ async listResourceVersions(resourceIds) {
102
+ if (!resourceIds.length) return [];
103
+ return getDb()
104
+ .select({
105
+ resourceId: schema.designs.id,
106
+ sourceModifiedAt: schema.designs.updatedAt,
107
+ })
108
+ .from(schema.designs)
109
+ .where(
110
+ and(
111
+ inArray(schema.designs.id, [...resourceIds]),
112
+ accessFilter(schema.designs, schema.designShares),
113
+ ),
114
+ );
115
+ },
116
+ async capture(reference) {
117
+ const access = await resolveAccess("design", reference.resourceId);
118
+ if (!access) throw new Error("Design not found");
119
+ const design = access.resource as typeof schema.designs.$inferSelect;
120
+ if (
121
+ reference.expectedUpdatedAt &&
122
+ reference.expectedUpdatedAt !== design.updatedAt
123
+ )
124
+ throw new Error(
125
+ "Design changed before it could be submitted to Context.",
126
+ );
127
+ const snapshot = await buildDesignSnapshot(design.id, design.data);
128
+ const payload = JSON.stringify({
129
+ designId: design.id,
130
+ designData: design.data,
131
+ files: snapshot.files,
132
+ tweaks: snapshot.tweaks,
133
+ appliedTweaks: snapshot.appliedTweaks,
134
+ resolvedCssVars: snapshot.resolvedCssVars,
135
+ });
136
+ const contentHash = createHash("sha256").update(payload).digest("hex");
137
+ const versionId = nanoid();
138
+ await getDb().insert(schema.designVersions).values({
139
+ id: versionId,
140
+ designId: design.id,
141
+ label: "Creative Context submission",
142
+ snapshot: payload,
143
+ createdAt: new Date().toISOString(),
144
+ });
145
+ const handle = await putPrivateBlob({
146
+ data: Buffer.from(payload),
147
+ filename: `${design.id}.design.json`,
148
+ mimeType: "application/json",
149
+ ownerEmail: design.ownerEmail,
150
+ key: `creative-context/design/${design.id}/${contentHash}.json`,
151
+ metadata: {
152
+ appId: "design",
153
+ resourceType: "design",
154
+ resourceId: design.id,
155
+ contentHash,
156
+ },
157
+ });
158
+ if (!handle)
159
+ throw new Error(
160
+ "Private blob storage is required to submit a design to Context.",
161
+ );
162
+ const previewMedia = await captureDesignPreviewMedia({
163
+ designId: design.id,
164
+ ownerEmail: design.ownerEmail,
165
+ files: snapshot.files,
166
+ });
167
+ const sourceModifiedAt = design.updatedAt ?? undefined;
168
+ return {
169
+ artifactKey: `design:design:${design.id}`,
170
+ source: {
171
+ name: "Design",
172
+ kind: "native-app",
173
+ externalRef: design.id,
174
+ access: {
175
+ visibility: design.visibility ?? "private",
176
+ canManage: access.role === "owner" || access.role === "admin",
177
+ },
178
+ },
179
+ items: [
180
+ {
181
+ externalId: `native:design:design:${design.id}`,
182
+ kind: "design-project",
183
+ title: design.title,
184
+ canonicalUrl: `/design/${design.id}`,
185
+ mimeType: "application/json",
186
+ content: snapshot.files
187
+ .map(
188
+ (file) =>
189
+ `${file.filename}\n${file.content.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ")}`,
190
+ )
191
+ .join("\n")
192
+ .slice(0, 40_000),
193
+ summary: `${snapshot.files.length} saved design files captured as an immutable version.`,
194
+ contentHash,
195
+ sourceModifiedAt,
196
+ sourceVersion: versionId,
197
+ metadata: {
198
+ preview: {
199
+ type: "design",
200
+ fileCount: snapshot.files.length,
201
+ frames: snapshot.files.slice(0, 24).map((file) => ({
202
+ title: file.filename.slice(0, 160),
203
+ fileType: file.fileType.slice(0, 80),
204
+ excerpt: previewText(file.content),
205
+ })),
206
+ },
207
+ },
208
+ media: [...previewMedia.values()],
209
+ edges: snapshot.files.map((file) => ({
210
+ relation: "contains",
211
+ toExternalId: `native:design:design:${design.id}:frame:${file.id}`,
212
+ })),
213
+ },
214
+ ...snapshot.files.map((file) => {
215
+ const content = file.content
216
+ .replace(/<[^>]+>/g, " ")
217
+ .replace(/\s+/g, " ")
218
+ .trim();
219
+ return {
220
+ externalId: `native:design:design:${design.id}:frame:${file.id}`,
221
+ kind: "design-frame",
222
+ title: file.filename,
223
+ canonicalUrl: `/design/${design.id}`,
224
+ mimeType: "text/html",
225
+ content,
226
+ summary: content.slice(0, 500),
227
+ contentHash: createHash("sha256")
228
+ .update(file.content)
229
+ .digest("hex"),
230
+ sourceModifiedAt,
231
+ sourceVersion: versionId,
232
+ metadata: {
233
+ preview: {
234
+ type: "design-frame",
235
+ title: file.filename.slice(0, 160),
236
+ fileType: file.fileType.slice(0, 80),
237
+ excerpt: previewText(file.content),
238
+ },
239
+ },
240
+ media: previewMedia.has(file.id)
241
+ ? [previewMedia.get(file.id)!]
242
+ : undefined,
243
+ };
244
+ }),
245
+ ],
246
+ privateMetadata: {
247
+ nativeResource: {
248
+ appId: "design",
249
+ resourceType: "design",
250
+ resourceId: design.id,
251
+ expectedUpdatedAt: reference.expectedUpdatedAt,
252
+ },
253
+ clone: {
254
+ handle,
255
+ appId: "design",
256
+ resourceType: "design",
257
+ resourceId: design.id,
258
+ contentHash,
259
+ sourceVersion: versionId,
260
+ updatedAt: design.updatedAt,
261
+ },
262
+ },
263
+ };
264
+ },
265
+ };
@@ -1,7 +1,12 @@
1
1
  import { registerOnboardingStep } from "@agent-native/core/onboarding";
2
- import { setupCreativeContext } from "@agent-native/creative-context/server";
2
+ import {
3
+ registerNativeResourceCaptureAdapter,
4
+ setupCreativeContext,
5
+ } from "@agent-native/creative-context/server";
3
6
  import { listContextSources } from "@agent-native/creative-context/store";
4
7
 
8
+ import { nativeDesignCreativeContextAdapter } from "../lib/native-creative-context.js";
9
+
5
10
  registerOnboardingStep({
6
11
  id: "creative-context-library",
7
12
  order: 18,
@@ -28,4 +33,6 @@ registerOnboardingStep({
28
33
  },
29
34
  });
30
35
 
36
+ registerNativeResourceCaptureAdapter(nativeDesignCreativeContextAdapter);
37
+
31
38
  export default setupCreativeContext({ appId: "design" });
@@ -196,6 +196,7 @@ export default defineAction({
196
196
  ),
197
197
  }),
198
198
  http: false,
199
+ toolCallable: false,
199
200
  run: async (args) => {
200
201
  if (args.stageAs) {
201
202
  const ctx = getCredentialContext();
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  appBasePath,
3
3
  appPath,
4
+ isAgentChatHomeHandoffActive,
4
5
  markAgentChatHomeHandoff,
5
6
  useAgentRouteState,
6
7
  } from "@agent-native/core/client";
@@ -54,7 +55,9 @@ export function useNavigationState(extensions?: DispatchExtensionConfig) {
54
55
  routerPath(location.pathname) === "/chat" &&
55
56
  pathnameFromPath(path) !== "/chat"
56
57
  ) {
57
- markAgentChatHomeHandoff("dispatch");
58
+ if (isAgentChatHomeHandoffActive("dispatch")) {
59
+ markAgentChatHomeHandoff("dispatch");
60
+ }
58
61
  }
59
62
  },
60
63
  });
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-17
4
+ ---
5
+
6
+ The agent chat sidebar stays closed until you open it or start a chat handoff.
@@ -51,8 +51,6 @@ export function Layout({ children }: LayoutProps) {
51
51
  if (!formId) return null;
52
52
  return { type: "form" as const, id: formId };
53
53
  }, [location.pathname]);
54
- const sidebarScope = chatHomeHandoffActive ? null : formScope;
55
-
56
54
  if (BARE_ROUTES.has(location.pathname)) {
57
55
  return <>{children}</>;
58
56
  }
@@ -89,7 +87,7 @@ export function Layout({ children }: LayoutProps) {
89
87
  <AgentSidebar
90
88
  position="right"
91
89
  agentPageHref="/agent"
92
- defaultOpen
90
+ defaultOpen={false}
93
91
  chatViewTransition
94
92
  storageKey="forms"
95
93
  browserTabId={TAB_ID}
@@ -101,7 +99,7 @@ export function Layout({ children }: LayoutProps) {
101
99
  t("agent.suggestionSubmissions"),
102
100
  t("agent.suggestionExport"),
103
101
  ]}
104
- scope={sidebarScope}
102
+ scope={formScope}
105
103
  >
106
104
  <div className="flex h-full flex-1 flex-col overflow-hidden">
107
105
  {showHeader ? <Header /> : null}
@@ -1 +1,25 @@
1
- export * from "@agent-native/toolkit/ui/popover";
1
+ import {
2
+ Popover,
3
+ PopoverAnchor,
4
+ PopoverContent as ToolkitPopoverContent,
5
+ PopoverTrigger,
6
+ } from "@agent-native/toolkit/ui/popover";
7
+ import * as React from "react";
8
+
9
+ import { cn } from "@/lib/utils";
10
+
11
+ const PopoverContent = React.forwardRef<
12
+ React.ElementRef<typeof ToolkitPopoverContent>,
13
+ React.ComponentPropsWithoutRef<typeof ToolkitPopoverContent>
14
+ >(({ className, collisionPadding = 16, ...props }, ref) => (
15
+ <ToolkitPopoverContent
16
+ ref={ref}
17
+ collisionPadding={collisionPadding}
18
+ className={cn("max-w-[calc(100vw-2rem)]", className)}
19
+ {...props}
20
+ />
21
+ ));
22
+
23
+ PopoverContent.displayName = ToolkitPopoverContent.displayName;
24
+
25
+ export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger };
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  appBasePath,
3
+ isAgentChatHomeHandoffActive,
3
4
  markAgentChatHomeHandoff,
4
5
  useAgentRouteState,
5
6
  } from "@agent-native/core/client";
@@ -131,7 +132,11 @@ export function useNavigationState() {
131
132
  navigateOptions: { flushSync: true, replace: true },
132
133
  onNavigate: (_command, path) => {
133
134
  void prewarmFormsRoutePath(path);
134
- if (location.pathname === "/ask" && path !== "/ask") {
135
+ if (
136
+ location.pathname === "/ask" &&
137
+ path !== "/ask" &&
138
+ isAgentChatHomeHandoffActive("forms")
139
+ ) {
135
140
  markAgentChatHomeHandoff("forms");
136
141
  }
137
142
  },
@@ -359,10 +359,19 @@ export function FormBuilderPage() {
359
359
  <Skeleton className="h-8 w-20 rounded-md" />
360
360
  </div>
361
361
  </div>
362
- {/* Body: builder + properties */}
363
- <div className="flex flex-1 overflow-hidden">
364
- <div className="flex-1 overflow-auto p-4 sm:p-6">
365
- <div className="max-w-2xl mx-auto space-y-4">
362
+ {/* Tabs */}
363
+ <div className="border-b border-border px-2 sm:px-4 py-2 shrink-0 overflow-hidden">
364
+ <div className="flex w-max items-center gap-1 rounded-lg bg-muted/40 p-1">
365
+ <Skeleton className="h-8 w-12 rounded-md" />
366
+ <Skeleton className="h-8 w-16 rounded-md" />
367
+ <Skeleton className="h-8 w-16 rounded-md" />
368
+ <Skeleton className="h-8 w-24 rounded-md" />
369
+ </div>
370
+ </div>
371
+ {/* Body: builder */}
372
+ <div className="flex flex-1 overflow-hidden relative">
373
+ <div className="flex-1 overflow-auto bg-muted/30">
374
+ <div className="max-w-2xl mx-auto py-4 sm:py-8 px-3 sm:px-4 space-y-4">
366
375
  <Skeleton className="h-8 w-2/3" />
367
376
  <Skeleton className="h-4 w-1/2" />
368
377
  <div className="space-y-3 pt-4">
@@ -378,12 +387,6 @@ export function FormBuilderPage() {
378
387
  </div>
379
388
  </div>
380
389
  </div>
381
- <div className="hidden lg:block w-72 border-s border-border p-4 space-y-4">
382
- <Skeleton className="h-4 w-32" />
383
- <Skeleton className="h-9 w-full" />
384
- <Skeleton className="h-9 w-full" />
385
- <Skeleton className="h-9 w-full" />
386
- </div>
387
390
  </div>
388
391
  </div>
389
392
  );
@@ -8,6 +8,7 @@ import {
8
8
  useCommandMenuShortcut,
9
9
  getThemeInitScript,
10
10
  configureTracking,
11
+ isAgentChatHomeHandoffActive,
11
12
  markAgentChatHomeHandoff,
12
13
  navigateWithAgentChatViewTransition,
13
14
  setClientAppState,
@@ -199,7 +200,11 @@ function OpenLinkInterceptor() {
199
200
  if (!path) return;
200
201
 
201
202
  event.preventDefault();
202
- if (location.pathname === "/ask" && path !== "/ask") {
203
+ if (
204
+ location.pathname === "/ask" &&
205
+ path !== "/ask" &&
206
+ isAgentChatHomeHandoffActive("forms")
207
+ ) {
203
208
  markAgentChatHomeHandoff("forms");
204
209
  }
205
210
  navigateWithAgentChatViewTransition(navigate, path);
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-17
4
+ ---
5
+
6
+ Form builder popovers stay within the viewport
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-17
4
+ ---
5
+
6
+ Form editor loading now matches the current sidebar-free layout.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-17
4
+ ---
5
+
6
+ The agent chat sidebar stays closed until you open it or start a chat handoff.
@@ -205,6 +205,7 @@ export default defineAction({
205
205
  ),
206
206
  }),
207
207
  http: false,
208
+ toolCallable: false,
208
209
  run: async (args) => {
209
210
  if (args.stageAs) {
210
211
  const ctx = getCredentialContext();
@@ -196,7 +196,7 @@ export function AppLayout({ children }: AppLayoutProps) {
196
196
  return (
197
197
  <AgentSidebar
198
198
  position="right"
199
- defaultOpen={!isMobile}
199
+ defaultOpen={false}
200
200
  agentPageHref="/agent"
201
201
  emptyStateText={t("agent.emptyState")}
202
202
  suggestions={[
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-17
4
+ ---
5
+
6
+ The agent chat sidebar stays closed until you open it or start a chat handoff.
@@ -3,6 +3,7 @@ import {
3
3
  DevDatabaseLink,
4
4
  FeedbackButton,
5
5
  appPath,
6
+ isAgentChatHomeHandoffActive,
6
7
  markAgentChatHomeHandoff,
7
8
  navigateWithAgentChatViewTransition,
8
9
  PromptComposer,
@@ -442,13 +443,17 @@ function PlansSidebarSection({ collapsed }: { collapsed: boolean }) {
442
443
  signInForPlanCreate();
443
444
  return;
444
445
  }
445
- markAgentChatHomeHandoff("plans");
446
+ if (location.pathname === "/" && isAgentChatHomeHandoffActive("plans")) {
447
+ markAgentChatHomeHandoff("plans");
448
+ }
446
449
  navigateWithAgentChatViewTransition(navigate, "/plans?create=1");
447
450
  };
448
451
 
449
452
  const openPlanPath = (event: MouseEvent<HTMLAnchorElement>, path: string) => {
450
453
  event.preventDefault();
451
- markAgentChatHomeHandoff("plans");
454
+ if (location.pathname === "/" && isAgentChatHomeHandoffActive("plans")) {
455
+ markAgentChatHomeHandoff("plans");
456
+ }
452
457
  navigateWithAgentChatViewTransition(navigate, path);
453
458
  };
454
459
 
@@ -738,7 +743,13 @@ export function Sidebar({
738
743
  <Link
739
744
  to={item.href}
740
745
  onClick={() => {
741
- if (item.href !== "/") markAgentChatHomeHandoff("plans");
746
+ if (
747
+ item.href !== "/" &&
748
+ location.pathname === "/" &&
749
+ isAgentChatHomeHandoffActive("plans")
750
+ ) {
751
+ markAgentChatHomeHandoff("plans");
752
+ }
742
753
  }}
743
754
  className={cn(
744
755
  "flex items-center gap-3 rounded-lg px-3 py-2 text-sm transition-colors",
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  agentNativePath,
3
3
  appBasePath,
4
+ isAgentChatHomeHandoffActive,
4
5
  markAgentChatHomeHandoff,
5
6
  } from "@agent-native/core/client";
6
7
  import { useQuery, useQueryClient } from "@tanstack/react-query";
@@ -108,7 +109,13 @@ export function useNavigationState() {
108
109
  deleteCommand();
109
110
  const path = planNavigateCommandPath(cmd);
110
111
  void prewarmPlanRoutePath(path);
111
- if (path !== "/") markAgentChatHomeHandoff("plans");
112
+ if (
113
+ location.pathname === "/" &&
114
+ path !== "/" &&
115
+ isAgentChatHomeHandoffActive("plans")
116
+ ) {
117
+ markAgentChatHomeHandoff("plans");
118
+ }
112
119
  const commitNavigation = () =>
113
120
  navigate(path, { replace: true, flushSync: true });
114
121
  if (
@@ -6,7 +6,6 @@ import {
6
6
  createAgentNativeQueryClient,
7
7
  getLocaleInitScript,
8
8
  getThemeInitScript,
9
- markAgentChatHomeHandoff,
10
9
  navigateWithAgentChatViewTransition,
11
10
  useCommandMenuShortcut,
12
11
  useT,
@@ -153,7 +152,6 @@ function AppContent() {
153
152
  useCommandMenuShortcut(useCallback(() => setCmdkOpen(true), []));
154
153
  const go = useCallback(
155
154
  (path: string) => {
156
- if (path !== "/") markAgentChatHomeHandoff("plans");
157
155
  navigateWithAgentChatViewTransition(navigate, path);
158
156
  setCmdkOpen(false);
159
157
  },
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-17
4
+ ---
5
+
6
+ The agent chat sidebar stays closed until you open it or start a chat handoff.
@@ -35,9 +35,11 @@ role cannot silently stand in for another:
35
35
 
36
36
  1. Follow the user's explicit instructions and the object currently selected in
37
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.
38
+ 2. Read the `creative-context` application-state record. If `pinnedPackId` is
39
+ set, replay that immutable pack. Otherwise honor `selectedContextId`; when it
40
+ is unset, let retrieval use Default plus at most one app-bound or
41
+ semantically matching specialty context. `currentPackId` is the receipt from
42
+ the latest materialized generation, not a replacement for context selection.
41
43
  3. Call `search-creative-context` with a narrow query for exact facts, visual
42
44
  language, audience guidance, prior decisions, or reusable references.
43
45
  4. Call `get-context-item` only for the specific search result versions
@@ -60,6 +62,7 @@ The single state key is `creative-context`:
60
62
  ```json
61
63
  {
62
64
  "contextMode": "auto",
65
+ "selectedContextId": null,
63
66
  "currentPackId": null,
64
67
  "pinnedPackId": null
65
68
  }
@@ -120,3 +123,8 @@ If `nativeCode.content` is `null` and `oversized` is true, use the named
120
123
  `get-context-item`, but the inline content is only the validated manifest shell.
121
124
  Never concatenate a truncated fragment or use delimited `version.content` as
122
125
  HTML.
126
+
127
+ For an app-created deck snapshot, use `clone-creative-context-deck` instead.
128
+ That typed action resolves the exact approved private deck payload and runs it
129
+ through Slides' normal deck creation and sanitization path. Generic context
130
+ actions must never receive or return that payload.
@@ -44,6 +44,11 @@ Detailed deck, slide-editing, image, design-system, and export workflows live in
44
44
  `.agents/skills/creative-context/SKILL.md`: explicit request and current deck
45
45
  first, then a pinned/current pack, then narrow library search. Respect
46
46
  `creative-context.contextMode: "off"` without silently restoring a pack.
47
+ - To submit a deck to a governed Creative Context, use the Context tab or
48
+ `manage-context-membership`; it captures one immutable deck version. Reuse
49
+ only a returned opaque native clone reference through the Slides clone action.
50
+ Use `operation="submit-latest"` with a Library membership id when its native
51
+ update status reports `update-available`.
47
52
 
48
53
  ## Persistence Model
49
54