@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,86 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+
3
+ import { defineAction } from "@agent-native/core";
4
+ import {
5
+ readPrivateBlob,
6
+ type PrivateBlobHandle,
7
+ } from "@agent-native/core/private-blob";
8
+ import {
9
+ getRequestOrgId,
10
+ getRequestUserEmail,
11
+ } from "@agent-native/core/server";
12
+ import { resolveNativeContextCloneReference } from "@agent-native/creative-context/server";
13
+ import { z } from "zod";
14
+
15
+ import {
16
+ getDashboard,
17
+ upsertDashboard,
18
+ } from "../server/lib/dashboards-store.js";
19
+
20
+ const payloadSchema = z.object({
21
+ id: z.string(),
22
+ kind: z.enum(["explorer", "sql"]),
23
+ title: z.string(),
24
+ config: z.record(z.string(), z.unknown()),
25
+ updatedAt: z.string(),
26
+ });
27
+
28
+ export default defineAction({
29
+ description:
30
+ "Clone an exact governed SQL-backed Analytics dashboard without executing any of its queries.",
31
+ schema: z.object({
32
+ contextId: z.string(),
33
+ artifactKey: z.string(),
34
+ resourceId: z.string(),
35
+ expectedUpdatedAt: z.string().optional(),
36
+ title: z.string().optional(),
37
+ }),
38
+ publicAgent: { expose: true, readOnly: false, requiresAuth: true },
39
+ run: async (args) => {
40
+ const email = getRequestUserEmail();
41
+ if (!email) throw new Error("no authenticated user");
42
+ const orgId = getRequestOrgId() ?? null;
43
+ const reference = await resolveNativeContextCloneReference({
44
+ appId: "analytics",
45
+ resourceType: "dashboard",
46
+ resourceId: args.resourceId,
47
+ expectedUpdatedAt: args.expectedUpdatedAt,
48
+ contextId: args.contextId,
49
+ artifactKey: args.artifactKey,
50
+ });
51
+ const raw = await readPrivateBlob(
52
+ reference.cloneHandle as PrivateBlobHandle,
53
+ );
54
+ const body = Buffer.from(raw.data).toString("utf8");
55
+ const hash = createHash("sha256").update(body).digest("hex");
56
+ if (
57
+ raw.metadata?.appId !== "analytics" ||
58
+ raw.metadata?.resourceType !== "dashboard" ||
59
+ raw.metadata?.resourceId !== args.resourceId ||
60
+ raw.metadata?.contentHash !== hash
61
+ )
62
+ throw new Error(
63
+ "Governed dashboard clone payload failed integrity verification.",
64
+ );
65
+ const payload = payloadSchema.parse(JSON.parse(body));
66
+ const id = `sql-dashboard-${randomUUID()}`;
67
+ const dashboard = await upsertDashboard(
68
+ id,
69
+ payload.kind,
70
+ {
71
+ title: args.title?.trim() || `Copy of ${payload.title}`,
72
+ ...payload.config,
73
+ },
74
+ { email, orgId },
75
+ );
76
+ const persisted = await getDashboard(id, { email, orgId });
77
+ if (!persisted || persisted.updatedAt !== dashboard.updatedAt)
78
+ throw new Error("Dashboard clone did not persist.");
79
+ return {
80
+ id: persisted.id,
81
+ title: persisted.title,
82
+ kind: persisted.kind,
83
+ clonedExactVersion: reference.publishedItemVersionId,
84
+ };
85
+ },
86
+ });
@@ -132,7 +132,7 @@ export const DASHBOARD_MUTATION_EXAMPLES = [
132
132
  `dashboard.insertPanel({"id":"new-kpi","title":"New KPI","source":"first-party","chartType":"metric","width":1,"config":{"timeScope":"dashboard"},"sql":"SELECT COUNT(*) AS value FROM analytics_events WHERE event_date >= '{{dateStart}}' AND event_date < '{{dateEnd}}'"}).atTop();`,
133
133
  `dashboard.insertPanel({"id":"new-chart","title":"New Chart","source":"first-party","chartType":"line","width":1,"config":{"timeScope":"dashboard"},"sql":"SELECT event_date AS date, COUNT(*) AS value FROM analytics_events WHERE event_date >= '{{dateStart}}' AND event_date < '{{dateEnd}}' GROUP BY event_date ORDER BY event_date"}).nextTo("retention-over-time");`,
134
134
  `dashboard.insertPanel({"id":"row-chart","title":"Row Chart","source":"first-party","chartType":"bar","width":1,"config":{"timeScope":"dashboard"},"sql":"SELECT event_name AS name, COUNT(*) AS value FROM analytics_events WHERE event_date >= '{{dateStart}}' AND event_date < '{{dateEnd}}' GROUP BY event_name"}).atRow(2);`,
135
- 'dashboard.insertPanel({"id":"pipeline-widget","title":"Pipeline Widget","chartType":"extension","width":3,"config":{"extensionId":"<existing-extension-id>"}}).atBottom();',
135
+ 'dashboard.insertPanel({"id":"pipeline-widget","title":"Pipeline Widget","chartType":"extension","width":3,"config":{"extensionSlotId":"analytics.dashboard.<dashboard-id>.panel.pipeline-widget"}}).atBottom();',
136
136
  ] as const;
137
137
 
138
138
  export type DashboardMutationOperation =
@@ -369,8 +369,12 @@ export function validateDashboardConfig(
369
369
  cfg && typeof cfg.extensionId === "string"
370
370
  ? cfg.extensionId.trim()
371
371
  : "";
372
- if (!extensionId) {
373
- return `panel[${i}].config.extensionId is required for extension panels (the id of the extension to render inline)`;
372
+ const extensionSlotId =
373
+ cfg && typeof cfg.extensionSlotId === "string"
374
+ ? cfg.extensionSlotId.trim()
375
+ : "";
376
+ if (!extensionId && !extensionSlotId) {
377
+ return `panel[${i}].config.extensionId or config.extensionSlotId is required for extension panels`;
374
378
  }
375
379
  }
376
380
  if (
@@ -1,5 +1,8 @@
1
1
  import { useDemoModeStatus, useT } from "@agent-native/core/client";
2
- import { EmbeddedExtension } from "@agent-native/core/client/extensions";
2
+ import {
3
+ EmbeddedExtension,
4
+ ExtensionSlot,
5
+ } from "@agent-native/core/client/extensions";
3
6
  import {
4
7
  IconArrowsSort,
5
8
  IconSortAscending,
@@ -1185,6 +1188,8 @@ interface SqlChartProps {
1185
1188
  className?: string;
1186
1189
  loadData?: boolean;
1187
1190
  onExportCsvChange?: (handler: (() => void) | null) => void;
1191
+ /** Dashboard/panel state sent to slot-backed extension boxes. */
1192
+ extensionContext?: Record<string, unknown> | null;
1188
1193
  }
1189
1194
 
1190
1195
  export function SqlChart({
@@ -1192,6 +1197,7 @@ export function SqlChart({
1192
1197
  resolvedSql,
1193
1198
  loadData = true,
1194
1199
  onExportCsvChange,
1200
+ extensionContext,
1195
1201
  }: SqlChartProps) {
1196
1202
  const t = useT();
1197
1203
  const { enabled: demoModeEnabled } = useDemoModeStatus();
@@ -1266,11 +1272,12 @@ export function SqlChart({
1266
1272
  );
1267
1273
  }
1268
1274
 
1269
- // Extension panels render a sandboxed extension iframe instead of querying a
1270
- // data source. The extension id lives in config.extensionId.
1275
+ // Extension panels render either a named extension-point slot or a legacy
1276
+ // direct extension iframe instead of querying a data source.
1271
1277
  if (isExtension) {
1272
1278
  const extensionId = panel.config?.extensionId;
1273
- if (!extensionId) {
1279
+ const slotId = panel.config?.extensionSlotId;
1280
+ if (!extensionId && !slotId) {
1274
1281
  return (
1275
1282
  <div className="flex flex-1 items-center justify-center px-4 py-8 min-h-[120px]">
1276
1283
  <p className="text-sm text-muted-foreground text-center">
@@ -1280,7 +1287,12 @@ export function SqlChart({
1280
1287
  );
1281
1288
  }
1282
1289
  return (
1283
- <DashboardExtensionPanel extensionId={extensionId} panelId={panel.id} />
1290
+ <DashboardExtensionPanel
1291
+ extensionId={extensionId}
1292
+ panelId={panel.id}
1293
+ slotId={slotId}
1294
+ context={extensionContext}
1295
+ />
1284
1296
  );
1285
1297
  }
1286
1298
  const colors = panel.config?.colors || DEFAULT_COLORS;
@@ -1409,9 +1421,13 @@ export function SqlChart({
1409
1421
  function DashboardExtensionPanel({
1410
1422
  extensionId,
1411
1423
  panelId,
1424
+ slotId,
1425
+ context,
1412
1426
  }: {
1413
- extensionId: string;
1427
+ extensionId?: string;
1414
1428
  panelId: string;
1429
+ slotId?: string;
1430
+ context?: Record<string, unknown> | null;
1415
1431
  }) {
1416
1432
  const t = useT();
1417
1433
  // Hold the report-readiness marker until the extension iframe paints so
@@ -1419,6 +1435,18 @@ function DashboardExtensionPanel({
1419
1435
  const [ready, setReady] = useState(false);
1420
1436
  const [unavailable, setUnavailable] = useState(false);
1421
1437
 
1438
+ if (slotId) {
1439
+ return (
1440
+ <ExtensionSlot
1441
+ id={slotId}
1442
+ context={context}
1443
+ showEmptyAffordance
1444
+ className="min-h-[120px] w-full"
1445
+ toolClassName="w-full"
1446
+ />
1447
+ );
1448
+ }
1449
+
1422
1450
  // Embedding never grants access to the extension itself (same model as
1423
1451
  // ExtensionSlots). A viewer with dashboard-only access who can't see the
1424
1452
  // referenced extension gets a clear message instead of a blank panel.
@@ -1438,7 +1466,7 @@ function DashboardExtensionPanel({
1438
1466
  data-dashboard-report-loading={ready ? undefined : "true"}
1439
1467
  >
1440
1468
  <EmbeddedExtension
1441
- extensionId={extensionId}
1469
+ extensionId={extensionId!}
1442
1470
  slotId={`dashboard-panel-${panelId}`}
1443
1471
  className="w-full"
1444
1472
  // Intentional for v1: extension panels are standalone widgets and do not
@@ -10,6 +10,7 @@ import {
10
10
  useT,
11
11
  } from "@agent-native/core/client";
12
12
  import { InvitationBanner } from "@agent-native/core/client/org";
13
+ import { CreativeContextComposerChip } from "@agent-native/creative-context/client";
13
14
  import { useEffect, useMemo } from "react";
14
15
  import { useLocation, useNavigate } from "react-router";
15
16
 
@@ -162,8 +163,6 @@ export function Layout({ children }: LayoutProps) {
162
163
  activePath: location.pathname,
163
164
  enabled: !isAskRoute && !reportScreenshot,
164
165
  });
165
- const sidebarScope = chatHomeHandoffActive ? null : analyticsScope;
166
-
167
166
  useEffect(() => {
168
167
  function handleChatRunning(event: Event) {
169
168
  const detail = (event as CustomEvent).detail;
@@ -293,7 +292,8 @@ export function Layout({ children }: LayoutProps) {
293
292
  t("chat.suggestionAnomalies"),
294
293
  t("chat.suggestionMrr"),
295
294
  ]}
296
- scope={sidebarScope}
295
+ scope={analyticsScope}
296
+ composerSlot={<CreativeContextComposerChip />}
297
297
  >
298
298
  {contentFrame}
299
299
  </AgentSidebar>
@@ -598,6 +598,7 @@ const messages = {
598
598
  untitledTheme: "無標題主題",
599
599
  },
600
600
  dashboard: {
601
+ sqlDashboard: "SQL 儀表板",
601
602
  historyTitle: "儀表板歷史記錄",
602
603
  historyDescription: "還原先前的儀表板狀態。還原前會先保存目前狀態。",
603
604
  historyEmpty: "尚無歷史記錄。下一次編輯後,變更會自動保存在這裡。",
@@ -34,6 +34,7 @@ const enUS = {
34
34
  created: "Created {{date}}",
35
35
  },
36
36
  dashboard: {
37
+ sqlDashboard: "SQL dashboard",
37
38
  historyTitle: "Dashboard history",
38
39
  historyDescription:
39
40
  "Restore a previous dashboard state. Restoring snapshots the current state first.",
@@ -3,6 +3,7 @@ import {
3
3
  useAgentChatContext,
4
4
  useT,
5
5
  } from "@agent-native/core/client";
6
+ import { CreativeContextComposerChip } from "@agent-native/creative-context/client";
6
7
  import { useEffect, useMemo, useState } from "react";
7
8
 
8
9
  import {
@@ -54,10 +55,13 @@ export default function AskPage() {
54
55
  composerLayoutVariant="hero"
55
56
  composerPlaceholder={t("common.askPlaceholder")}
56
57
  composerSlot={
57
- <div className="analytics-chat-intro">
58
- <h1>{t("common.askIntroTitle")}</h1>
59
- <p>{t("common.askIntroBody")}</p>
60
- </div>
58
+ <>
59
+ <CreativeContextComposerChip />
60
+ <div className="analytics-chat-intro">
61
+ <h1>{t("common.askIntroTitle")}</h1>
62
+ <p>{t("common.askIntroBody")}</p>
63
+ </div>
64
+ </>
61
65
  }
62
66
  />
63
67
  </div>
@@ -67,6 +67,7 @@ interface SqlChartCardProps {
67
67
  isDragSource?: boolean;
68
68
  selectedForChat?: boolean;
69
69
  onSelectForChat?: (options?: SelectDashboardPanelOptions) => void;
70
+ extensionContext?: Record<string, unknown> | null;
70
71
  }
71
72
 
72
73
  const PanelDragHandle = memo(function PanelDragHandle({
@@ -122,6 +123,7 @@ export function SqlChartCard({
122
123
  isDragSource = false,
123
124
  selectedForChat = false,
124
125
  onSelectForChat,
126
+ extensionContext,
125
127
  }: SqlChartCardProps) {
126
128
  const t = useT();
127
129
  const queryClient = useQueryClient();
@@ -346,6 +348,7 @@ export function SqlChartCard({
346
348
  panel={panel}
347
349
  resolvedSql={resolvedSql}
348
350
  loadData
351
+ extensionContext={extensionContext}
349
352
  />
350
353
  )}
351
354
  <div className="absolute right-1 top-1 flex items-center gap-1 opacity-0 group-hover:opacity-100">
@@ -435,6 +438,7 @@ export function SqlChartCard({
435
438
  panel={panel}
436
439
  resolvedSql={resolvedSql}
437
440
  loadData
441
+ extensionContext={extensionContext}
438
442
  />
439
443
  </ChartFillHeight>
440
444
  </div>
@@ -616,6 +620,7 @@ export function SqlChartCard({
616
620
  resolvedSql={resolvedSql}
617
621
  loadData={shouldLoadData}
618
622
  onExportCsvChange={handleExportCsvChange}
623
+ extensionContext={extensionContext}
619
624
  />
620
625
  </CardContent>
621
626
  </Card>
@@ -627,7 +632,12 @@ export function SqlChartCard({
627
632
  </DialogHeader>
628
633
  <div className="flex min-h-0 flex-1 flex-col overflow-auto">
629
634
  <ChartFillHeight>
630
- <SqlChart panel={panel} resolvedSql={resolvedSql} loadData />
635
+ <SqlChart
636
+ panel={panel}
637
+ resolvedSql={resolvedSql}
638
+ loadData
639
+ extensionContext={extensionContext}
640
+ />
631
641
  </ChartFillHeight>
632
642
  </div>
633
643
  </DialogContent>
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Stable extension-point name for a dashboard box. The dashboard and panel ids
3
+ * are encoded independently so arbitrary saved ids cannot collapse into one
4
+ * slot or add path separators to the slots API.
5
+ */
6
+ export function dashboardExtensionSlotId(
7
+ dashboardId: string,
8
+ panelId: string,
9
+ ): string {
10
+ return `analytics.dashboard.${encodeURIComponent(dashboardId)}.panel.${encodeURIComponent(panelId)}`;
11
+ }
@@ -13,6 +13,10 @@ import {
13
13
  useT,
14
14
  type CollabUser,
15
15
  } from "@agent-native/core/client";
16
+ import {
17
+ CreativeContextShareSheet,
18
+ CreativeContextShareTab,
19
+ } from "@agent-native/creative-context/client";
16
20
  import {
17
21
  useDroppable,
18
22
  DndContext,
@@ -138,6 +142,7 @@ import {
138
142
  resolveFilterVars,
139
143
  } from "./DashboardFilterBar";
140
144
  import { EmailReportDialog } from "./EmailReportDialog";
145
+ import { dashboardExtensionSlotId } from "./extension-slot";
141
146
  import { interpolate } from "./interpolate";
142
147
  import { serializePanelSql } from "./panel-sql";
143
148
  import { AddPanelPopover, PanelEditorDialog } from "./PanelEditorDialog";
@@ -267,6 +272,7 @@ const PanelCell = memo(function PanelCell({
267
272
  onRemovePanel,
268
273
  onEditPanel,
269
274
  onSavePanel,
275
+ dashboardExtensionContext,
270
276
  }: {
271
277
  panel: SqlPanel;
272
278
  vars: Record<string, string>;
@@ -282,6 +288,7 @@ const PanelCell = memo(function PanelCell({
282
288
  onRemovePanel: (panelId: string) => void;
283
289
  onEditPanel: (panel: SqlPanel) => void;
284
290
  onSavePanel: (panel: SqlPanel) => Promise<void>;
291
+ dashboardExtensionContext: Record<string, unknown>;
285
292
  }) {
286
293
  const resolved = useMemo(
287
294
  () =>
@@ -362,6 +369,23 @@ const PanelCell = memo(function PanelCell({
362
369
  isDragSource={isDragSource}
363
370
  selectedForChat={selectedForChat}
364
371
  onSelectForChat={handleSelectForChat}
372
+ extensionContext={
373
+ panel.chartType === "extension"
374
+ ? {
375
+ ...dashboardExtensionContext,
376
+ panel: {
377
+ id: panel.id,
378
+ title: panel.title,
379
+ slotId:
380
+ panel.config?.extensionSlotId ??
381
+ dashboardExtensionSlotId(
382
+ String(dashboardExtensionContext.dashboardId),
383
+ panel.id,
384
+ ),
385
+ },
386
+ }
387
+ : undefined
388
+ }
365
389
  />
366
390
  </div>
367
391
  );
@@ -504,6 +528,7 @@ export default function SqlDashboardPage() {
504
528
  const [emailReportOpen, setEmailReportOpen] = useState(false);
505
529
  const [historyOpen, setHistoryOpen] = useState(false);
506
530
  const [dashboardActionsOpen, setDashboardActionsOpen] = useState(false);
531
+ const [contextSheetOpen, setContextSheetOpen] = useState(false);
507
532
  const [activeDropSlot, setActiveDropSlot] =
508
533
  useState<DashboardDropSlot | null>(null);
509
534
  const [activeDragPanelId, setActiveDragPanelId] = useState<string | null>(
@@ -1424,6 +1449,29 @@ export default function SqlDashboardPage() {
1424
1449
  resourceId={dashboardId}
1425
1450
  resourceTitle={dashboard.name}
1426
1451
  variant="compact"
1452
+ shareTabs={{
1453
+ tabs: [
1454
+ {
1455
+ value: "context",
1456
+ label: "Context",
1457
+ content: (
1458
+ <CreativeContextShareTab
1459
+ resource={{
1460
+ appId: "analytics",
1461
+ resourceType: "dashboard",
1462
+ resourceId: dashboardId,
1463
+ title: dashboard.name,
1464
+ updatedAt: dashboardUpdatedAt ?? undefined,
1465
+ preview: {
1466
+ kind: "document",
1467
+ label: t("dashboard.sqlDashboard"),
1468
+ },
1469
+ }}
1470
+ />
1471
+ ),
1472
+ },
1473
+ ],
1474
+ }}
1427
1475
  />
1428
1476
  ) : null}
1429
1477
  {canEdit ? (
@@ -1509,6 +1557,18 @@ export default function SqlDashboardPage() {
1509
1557
  {(canEdit && !archivedAt) || canManage ? (
1510
1558
  <DropdownMenuSeparator />
1511
1559
  ) : null}
1560
+ {dashboardId && canEdit && !archivedAt ? (
1561
+ <DropdownMenuItem
1562
+ onSelect={(event) => {
1563
+ event.preventDefault();
1564
+ setDashboardActionsOpen(false);
1565
+ setContextSheetOpen(true);
1566
+ }}
1567
+ >
1568
+ <IconPlus className="mr-2 h-3.5 w-3.5" />
1569
+ {t("creativeContext.addToContext" /* i18n-key-ignore */)}
1570
+ </DropdownMenuItem>
1571
+ ) : null}
1512
1572
  {dashboardId ? (
1513
1573
  <>
1514
1574
  <DropdownMenuSeparator />
@@ -1581,6 +1641,25 @@ export default function SqlDashboardPage() {
1581
1641
  canRestore={canEdit && !archivedAt}
1582
1642
  />
1583
1643
  ) : null}
1644
+ {dashboardId ? (
1645
+ <CreativeContextShareSheet
1646
+ open={contextSheetOpen}
1647
+ onOpenChange={setContextSheetOpen}
1648
+ resource={{
1649
+ appId: "analytics",
1650
+ resourceType: "dashboard",
1651
+ resourceId: dashboardId,
1652
+ title: dashboard.name,
1653
+ updatedAt: dashboardUpdatedAt ?? undefined,
1654
+ visibility: dashboardVisibility ?? undefined,
1655
+ preview: {
1656
+ kind: "document",
1657
+ label: t("dashboard.sqlDashboard"),
1658
+ },
1659
+ }}
1660
+ canManage={canManage}
1661
+ />
1662
+ ) : null}
1584
1663
  {canManage ? (
1585
1664
  <AlertDialog
1586
1665
  open={confirmDeleteOpen}
@@ -1907,6 +1986,13 @@ export default function SqlDashboardPage() {
1907
1986
  onRemovePanel={removePanel}
1908
1987
  onEditPanel={openEditPanel}
1909
1988
  onSavePanel={handleSavePanel}
1989
+ dashboardExtensionContext={{
1990
+ dashboardId,
1991
+ dashboardName: dashboard.name,
1992
+ dashboardDescription:
1993
+ dashboard.description ?? null,
1994
+ filters: vars,
1995
+ }}
1910
1996
  />
1911
1997
  <DashboardDropLine
1912
1998
  slot={{
@@ -99,8 +99,14 @@ export interface SqlPanelConfig {
99
99
  /**
100
100
  * Extension panels only (`chartType: "extension"`): id of the extension to
101
101
  * render inline as a sandboxed iframe instead of running the SQL pipeline.
102
+ * Kept for dashboards saved before slot-backed dashboard boxes.
102
103
  */
103
104
  extensionId?: string;
105
+ /**
106
+ * Extension panels only: a named extension-point slot. The dashboard renders
107
+ * its installed extensions as this panel's box and supplies dashboard context.
108
+ */
109
+ extensionSlotId?: string;
104
110
  }
105
111
 
106
112
  export interface SqlPanel {
@@ -1,5 +1,11 @@
1
1
  import { AgentTabsPage } from "@agent-native/core/client";
2
+ import { createCreativeContextAgentTab } from "@agent-native/creative-context/client";
2
3
 
3
4
  export default function AgentRoute() {
4
- return <AgentTabsPage appName="Analytics" />;
5
+ return (
6
+ <AgentTabsPage
7
+ appName="Analytics"
8
+ extraTabFactories={[createCreativeContextAgentTab]}
9
+ />
10
+ );
5
11
  }
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-07-17
4
+ ---
5
+
6
+ Dashboards can now host installed extensions as contextual, slot-backed boxes.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-17
4
+ ---
5
+
6
+ Library now flags published dashboards with newer versions and lets you submit the update in place.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-07-17
4
+ ---
5
+
6
+ Resources can be added to Creative Context from their action menus.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-07-17
4
+ ---
5
+
6
+ You can add exact, approved artifact versions to governed Creative Contexts for safe reuse.
@@ -15,6 +15,7 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "@agent-native/core": "workspace:*",
18
+ "@agent-native/creative-context": "workspace:*",
18
19
  "@agent-native/toolkit": "workspace:*",
19
20
  "@dnd-kit/core": "^6.3.1",
20
21
  "@dnd-kit/sortable": "^10.0.0",
@@ -64,6 +64,14 @@ function panelSummaries(config: Record<string, unknown>) {
64
64
  typeof panelConfig.description === "string"
65
65
  ? panelConfig.description
66
66
  : undefined,
67
+ extensionId:
68
+ typeof panelConfig.extensionId === "string"
69
+ ? panelConfig.extensionId
70
+ : undefined,
71
+ extensionSlotId:
72
+ typeof panelConfig.extensionSlotId === "string"
73
+ ? panelConfig.extensionSlotId
74
+ : undefined,
67
75
  };
68
76
  });
69
77
  }