@agent-native/core 0.130.2 → 0.131.2

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 (866) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +51 -0
  3. package/corpus/core/docs/content/agent-surfaces.mdx +4 -4
  4. package/corpus/core/docs/content/automations.mdx +61 -12
  5. package/corpus/core/docs/content/deployment.mdx +11 -4
  6. package/corpus/core/docs/content/extensions.mdx +39 -33
  7. package/corpus/core/docs/content/recurring-jobs.mdx +41 -19
  8. package/corpus/core/docs/content/template-dispatch-operations.mdx +19 -7
  9. package/corpus/core/package.json +3 -1
  10. package/corpus/core/src/action.ts +55 -0
  11. package/corpus/core/src/agent/engine/builder-engine.ts +8 -4
  12. package/corpus/core/src/agent/production-agent.ts +175 -100
  13. package/corpus/core/src/agent/tool-search.ts +36 -0
  14. package/corpus/core/src/automations/service.ts +506 -0
  15. package/corpus/core/src/browser-context/index.ts +392 -0
  16. package/corpus/core/src/client/AgentPanel.tsx +2 -1
  17. package/corpus/core/src/client/FeedbackButton.tsx +37 -4
  18. package/corpus/core/src/client/MultiTabAssistantChat.tsx +21 -0
  19. package/corpus/core/src/client/agent-chat.ts +31 -3
  20. package/corpus/core/src/client/agent-page/AgentJobsTab.tsx +438 -310
  21. package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +4 -4
  22. package/corpus/core/src/client/agent-page/use-jobs.ts +7 -0
  23. package/corpus/core/src/client/analytics-session.ts +13 -0
  24. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +67 -0
  25. package/corpus/core/src/client/settings/AutomationsSection.tsx +27 -499
  26. package/corpus/core/src/client/settings/SettingsPanel.tsx +32 -11
  27. package/corpus/core/src/client/settings/index.ts +2 -0
  28. package/corpus/core/src/client/use-agent-chat.ts +35 -3
  29. package/corpus/core/src/client/use-chat-threads.ts +8 -25
  30. package/corpus/core/src/deploy/build.ts +2 -0
  31. package/corpus/core/src/deploy/workspace-deploy.ts +2 -0
  32. package/corpus/core/src/extensions/actions.ts +115 -3
  33. package/corpus/core/src/extensions/fetch-tool.ts +11 -0
  34. package/corpus/core/src/extensions/routes.ts +16 -1
  35. package/corpus/core/src/extensions/web-content.ts +96 -1
  36. package/corpus/core/src/integrations/computer-supervision.ts +33 -1
  37. package/corpus/core/src/integrations/index.ts +6 -0
  38. package/corpus/core/src/integrations/integration-durable-dispatch-config.ts +10 -0
  39. package/corpus/core/src/integrations/integration-durable-dispatch.ts +4 -0
  40. package/corpus/core/src/integrations/plugin.ts +94 -41
  41. package/corpus/core/src/integrations/remote-browser-actions.ts +621 -0
  42. package/corpus/core/src/jobs/actions/list-recurring-jobs.ts +5 -7
  43. package/corpus/core/src/jobs/actions/manage-recurring-job.ts +3 -7
  44. package/corpus/core/src/jobs/background-automation-runner.ts +437 -0
  45. package/corpus/core/src/jobs/frontmatter.ts +308 -0
  46. package/corpus/core/src/jobs/scheduler.ts +89 -598
  47. package/corpus/core/src/jobs/tools.ts +22 -3
  48. package/corpus/core/src/localization/default-messages.ts +45 -45
  49. package/corpus/core/src/mcp-client/index.ts +6 -0
  50. package/corpus/core/src/notifications/actions.ts +5 -0
  51. package/corpus/core/src/progress/actions.ts +5 -0
  52. package/corpus/core/src/provider-api/actions/github-repo-files.ts +11 -0
  53. package/corpus/core/src/provider-api/actions/provider-api.ts +13 -0
  54. package/corpus/core/src/server/action-discovery.ts +7 -0
  55. package/corpus/core/src/server/agent-chat/browser-team-tools.ts +126 -3
  56. package/corpus/core/src/server/agent-chat/framework-prompts.ts +7 -11
  57. package/corpus/core/src/server/agent-chat/plugin-options.ts +3 -3
  58. package/corpus/core/src/server/agent-chat/script-entries.ts +52 -1
  59. package/corpus/core/src/server/agent-chat-plugin.ts +25 -5
  60. package/corpus/core/src/server/attribution.ts +22 -0
  61. package/corpus/core/src/server/auth.ts +20 -6
  62. package/corpus/core/src/server/better-auth-instance.ts +10 -2
  63. package/corpus/core/src/server/core-routes-plugin.ts +10 -1
  64. package/corpus/core/src/server/csrf.ts +25 -0
  65. package/corpus/core/src/server/google-oauth.ts +21 -1
  66. package/corpus/core/src/server/onboarding-html.ts +18 -0
  67. package/corpus/core/src/server/prompts/framework-core-compact.ts +3 -3
  68. package/corpus/core/src/server/prompts/framework-core.ts +3 -3
  69. package/corpus/core/src/server/prompts/shared-rules.ts +3 -3
  70. package/corpus/core/src/settings/index.ts +1 -0
  71. package/corpus/core/src/shared/analytics-anonymous-id.ts +35 -0
  72. package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  73. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +26 -0
  74. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +28 -0
  75. package/corpus/core/src/templates/default/app/i18n/en-US.ts +27 -0
  76. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +28 -0
  77. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +28 -0
  78. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +25 -0
  79. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +27 -0
  80. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +27 -0
  81. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +27 -0
  82. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +24 -0
  83. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +24 -0
  84. package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  85. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  86. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +10 -7
  87. package/corpus/core/src/templates/workspace-core/.agents/skills/automations/SKILL.md +53 -8
  88. package/corpus/core/src/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +131 -0
  89. package/corpus/core/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +13 -4
  90. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +23 -15
  91. package/corpus/core/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +33 -18
  92. package/corpus/core/src/tracking/providers.ts +1 -0
  93. package/corpus/core/src/tracking/registry.ts +2 -1
  94. package/corpus/core/src/tracking/types.ts +1 -0
  95. package/corpus/core/src/triggers/actions/list-automations.ts +43 -44
  96. package/corpus/core/src/triggers/actions/manage-automation.ts +17 -48
  97. package/corpus/core/src/triggers/actions.ts +218 -127
  98. package/corpus/core/src/triggers/dispatcher.ts +181 -367
  99. package/corpus/core/src/triggers/routes.ts +84 -27
  100. package/corpus/core/src/triggers/types.ts +9 -23
  101. package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  102. package/corpus/templates/analytics/actions/install-dashboard-template.ts +13 -4
  103. package/corpus/templates/analytics/actions/rename-dashboard.ts +8 -3
  104. package/corpus/templates/analytics/actions/restore-dashboard-revision.ts +8 -3
  105. package/corpus/templates/analytics/actions/update-dashboard.ts +22 -5
  106. package/corpus/templates/analytics/app/components/dashboard/DashboardPanelSkeleton.tsx +7 -1
  107. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +1 -82
  108. package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +4 -4
  109. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +23 -13
  110. package/corpus/templates/analytics/app/global.css +21 -0
  111. package/corpus/templates/analytics/app/i18n-data.ts +165 -101
  112. package/corpus/templates/analytics/app/lib/custom-block-promotion.ts +62 -0
  113. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +17 -2
  114. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +3 -1
  115. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +77 -12
  116. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-save-queue.ts +34 -0
  117. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +42 -26
  118. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +15 -0
  119. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +1 -1
  120. package/corpus/templates/analytics/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
  121. package/corpus/templates/analytics/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-the-dashboard.md +6 -0
  122. package/corpus/templates/analytics/changelog/2026-07-29-custom-dashboard-blocks-now-identify-one-off-agent-patches-a.md +6 -0
  123. package/corpus/templates/analytics/changelog/2026-07-29-dashboard-chart-deletions-now-save-in-order-so-removed-rows-.md +6 -0
  124. package/corpus/templates/analytics/changelog/2026-07-29-dashboard-chart-loaders-are-easier-to-see-and-animate-more-s.md +6 -0
  125. package/corpus/templates/analytics/changelog/2026-07-29-plan-mode-can-now-query-connected-analytics-sources-while-ke.md +6 -0
  126. package/corpus/templates/analytics/changelog/2026-07-29-plan-mode-can-use-clips-as-read-only-prompt-context.md +6 -0
  127. package/corpus/templates/analytics/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  128. package/corpus/templates/analytics/changelog/2026-07-29-signup-entry-pages-now-show-the-first-page-viewed-before-eac.md +6 -0
  129. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +26 -1
  130. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +0 -33
  131. package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +13 -3
  132. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +9 -1
  133. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +44 -1
  134. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +96 -16
  135. package/corpus/templates/analytics/server/plugins/agent-chat.ts +18 -27
  136. package/corpus/templates/analytics/server/plugins/core-routes.ts +1 -0
  137. package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  138. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +4 -8
  139. package/corpus/templates/assets/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
  140. package/corpus/templates/assets/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-the-workspace.md +6 -0
  141. package/corpus/templates/assets/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  142. package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  143. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +3 -7
  144. package/corpus/templates/brain/app/root.tsx +0 -3
  145. package/corpus/templates/brain/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
  146. package/corpus/templates/brain/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-ask-brain.md +6 -0
  147. package/corpus/templates/brain/changelog/2026-07-29-extensions-are-no-longer-shown-as-a-default-command-menu-des.md +6 -0
  148. package/corpus/templates/brain/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  149. package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  150. package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +25 -5
  151. package/corpus/templates/calendar/AGENTS.md +5 -0
  152. package/corpus/templates/calendar/actions/create-event.ts +43 -13
  153. package/corpus/templates/calendar/actions/event-action-helpers.ts +131 -1
  154. package/corpus/templates/calendar/actions/manage-event-draft.ts +65 -2
  155. package/corpus/templates/calendar/app/components/calendar/CreateEventDialog.tsx +437 -258
  156. package/corpus/templates/calendar/app/components/calendar/DayView.tsx +19 -3
  157. package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +24 -0
  158. package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +15 -2
  159. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +1 -5
  160. package/corpus/templates/calendar/app/hooks/use-events.ts +44 -5
  161. package/corpus/templates/calendar/app/i18n-data.ts +50 -0
  162. package/corpus/templates/calendar/app/lib/all-day-layout.ts +9 -2
  163. package/corpus/templates/calendar/app/lib/event-form-initialization.ts +4 -8
  164. package/corpus/templates/calendar/app/lib/event-form-utils.ts +30 -8
  165. package/corpus/templates/calendar/app/lib/location-suggestions.ts +36 -0
  166. package/corpus/templates/calendar/app/lib/out-of-office.ts +87 -1
  167. package/corpus/templates/calendar/app/pages/CalendarView.tsx +68 -13
  168. package/corpus/templates/calendar/changelog/2026-07-26-out-of-office-events-now-default-to-full-days-with-a-ready.md +6 -0
  169. package/corpus/templates/calendar/changelog/2026-07-29-recent-calendar-locations-now-appear-as-address-suggestions-.md +6 -0
  170. package/corpus/templates/calendar/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  171. package/corpus/templates/calendar/server/lib/find-time.ts +29 -5
  172. package/corpus/templates/calendar/shared/api.ts +2 -0
  173. package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  174. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +1 -5
  175. package/corpus/templates/chat/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  176. package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  177. package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -5
  178. package/corpus/templates/clips/changelog/2026-07-29-fixed-system-audio-recordings-picking-up-your-microphone-in-.md +6 -0
  179. package/corpus/templates/clips/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  180. package/corpus/templates/clips/changelog/2026-07-29-the-desktop-camera-preview-now-closes-after-a-recording-fin.md +6 -0
  181. package/corpus/templates/clips/desktop/src/app.tsx +14 -15
  182. package/corpus/templates/clips/desktop/src/lib/bubble-session.ts +11 -0
  183. package/corpus/templates/clips/desktop/src/lib/recorder.ts +9 -4
  184. package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +11 -0
  185. package/corpus/templates/clips/server/jobs/transactional-emails.ts +47 -23
  186. package/corpus/templates/clips/server/lib/transactional-email-store.ts +16 -6
  187. package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  188. package/corpus/templates/content/.agents/skills/content-product-development/SKILL.md +103 -0
  189. package/corpus/templates/content/.agents/skills/content-product-development/references/verification.md +57 -0
  190. package/corpus/templates/content/AGENTS.md +2 -0
  191. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -6
  192. package/corpus/templates/content/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  193. package/corpus/templates/content/docs/product/README.md +115 -0
  194. package/corpus/templates/content/docs/product/architecture.md +98 -0
  195. package/corpus/templates/content/docs/product/capabilities/content.access.page-database.md +76 -0
  196. package/corpus/templates/content/docs/product/capabilities/content.access.row-private.md +75 -0
  197. package/corpus/templates/content/docs/product/capabilities/content.access.safe-aggregate.md +75 -0
  198. package/corpus/templates/content/docs/product/capabilities/content.access.visibility-closure.md +79 -0
  199. package/corpus/templates/content/docs/product/capabilities/content.action.button.md +67 -0
  200. package/corpus/templates/content/docs/product/capabilities/content.agent.action-parity.md +73 -0
  201. package/corpus/templates/content/docs/product/capabilities/content.agent.audience-safe.md +91 -0
  202. package/corpus/templates/content/docs/product/capabilities/content.agent.automation.md +67 -0
  203. package/corpus/templates/content/docs/product/capabilities/content.agent.expression-authoring.md +71 -0
  204. package/corpus/templates/content/docs/product/capabilities/content.agent.presence.md +103 -0
  205. package/corpus/templates/content/docs/product/capabilities/content.agent.resource-consent.md +90 -0
  206. package/corpus/templates/content/docs/product/capabilities/content.agent.skill-catalog.md +67 -0
  207. package/corpus/templates/content/docs/product/capabilities/content.api.cms.md +70 -0
  208. package/corpus/templates/content/docs/product/capabilities/content.author.code.md +71 -0
  209. package/corpus/templates/content/docs/product/capabilities/content.author.document-editor.md +71 -0
  210. package/corpus/templates/content/docs/product/capabilities/content.author.footnotes.md +71 -0
  211. package/corpus/templates/content/docs/product/capabilities/content.author.math.md +71 -0
  212. package/corpus/templates/content/docs/product/capabilities/content.author.media.md +71 -0
  213. package/corpus/templates/content/docs/product/capabilities/content.author.mermaid.md +71 -0
  214. package/corpus/templates/content/docs/product/capabilities/content.automation.scheduled.md +67 -0
  215. package/corpus/templates/content/docs/product/capabilities/content.capture.enrich.md +75 -0
  216. package/corpus/templates/content/docs/product/capabilities/content.command.fabric.md +67 -0
  217. package/corpus/templates/content/docs/product/capabilities/content.comment.page-owned.md +75 -0
  218. package/corpus/templates/content/docs/product/capabilities/content.diff.ai-assist.md +75 -0
  219. package/corpus/templates/content/docs/product/capabilities/content.diff.filtered-review.md +79 -0
  220. package/corpus/templates/content/docs/product/capabilities/content.diff.in-place.md +80 -0
  221. package/corpus/templates/content/docs/product/capabilities/content.discussion.page.md +80 -0
  222. package/corpus/templates/content/docs/product/capabilities/content.embed.host-grant.md +70 -0
  223. package/corpus/templates/content/docs/product/capabilities/content.embed.mcp-app.md +69 -0
  224. package/corpus/templates/content/docs/product/capabilities/content.embed.surface.md +74 -0
  225. package/corpus/templates/content/docs/product/capabilities/content.event.committed.md +85 -0
  226. package/corpus/templates/content/docs/product/capabilities/content.expression.cached-result.md +71 -0
  227. package/corpus/templates/content/docs/product/capabilities/content.expression.catalog.md +71 -0
  228. package/corpus/templates/content/docs/product/capabilities/content.expression.language.md +76 -0
  229. package/corpus/templates/content/docs/product/capabilities/content.feedback.signal.md +67 -0
  230. package/corpus/templates/content/docs/product/capabilities/content.form.shared-engine.md +72 -0
  231. package/corpus/templates/content/docs/product/capabilities/content.history.queryable.md +79 -0
  232. package/corpus/templates/content/docs/product/capabilities/content.home.global.md +80 -0
  233. package/corpus/templates/content/docs/product/capabilities/content.job.durable.md +76 -0
  234. package/corpus/templates/content/docs/product/capabilities/content.knowledge.graph.md +67 -0
  235. package/corpus/templates/content/docs/product/capabilities/content.knowledge.links.md +67 -0
  236. package/corpus/templates/content/docs/product/capabilities/content.knowledge.search.md +67 -0
  237. package/corpus/templates/content/docs/product/capabilities/content.layout.responsive.md +80 -0
  238. package/corpus/templates/content/docs/product/capabilities/content.navigation.sidebar.md +86 -0
  239. package/corpus/templates/content/docs/product/capabilities/content.notification.source.md +71 -0
  240. package/corpus/templates/content/docs/product/capabilities/content.object.block.md +76 -0
  241. package/corpus/templates/content/docs/product/capabilities/content.object.blocks-field.md +79 -0
  242. package/corpus/templates/content/docs/product/capabilities/content.object.database.md +92 -0
  243. package/corpus/templates/content/docs/product/capabilities/content.object.multi-membership.md +75 -0
  244. package/corpus/templates/content/docs/product/capabilities/content.object.page.md +76 -0
  245. package/corpus/templates/content/docs/product/capabilities/content.object.reference.md +75 -0
  246. package/corpus/templates/content/docs/product/capabilities/content.object.transclusion.md +75 -0
  247. package/corpus/templates/content/docs/product/capabilities/content.organization.teams.md +71 -0
  248. package/corpus/templates/content/docs/product/capabilities/content.portability.pdf-export.md +78 -0
  249. package/corpus/templates/content/docs/product/capabilities/content.portability.roundtrip.md +154 -0
  250. package/corpus/templates/content/docs/product/capabilities/content.portability.source-representation.md +70 -0
  251. package/corpus/templates/content/docs/product/capabilities/content.portability.vault-export.md +80 -0
  252. package/corpus/templates/content/docs/product/capabilities/content.presentation.mode.md +76 -0
  253. package/corpus/templates/content/docs/product/capabilities/content.preset.catalog.md +71 -0
  254. package/corpus/templates/content/docs/product/capabilities/content.property.actor.md +75 -0
  255. package/corpus/templates/content/docs/product/capabilities/content.property.catalog.md +76 -0
  256. package/corpus/templates/content/docs/product/capabilities/content.property.constraints.md +75 -0
  257. package/corpus/templates/content/docs/product/capabilities/content.property.guarded-change.md +76 -0
  258. package/corpus/templates/content/docs/product/capabilities/content.property.location.md +71 -0
  259. package/corpus/templates/content/docs/product/capabilities/content.property.typed.md +71 -0
  260. package/corpus/templates/content/docs/product/capabilities/content.publish.public.md +75 -0
  261. package/corpus/templates/content/docs/product/capabilities/content.publish.reading.md +74 -0
  262. package/corpus/templates/content/docs/product/capabilities/content.query.object.md +114 -0
  263. package/corpus/templates/content/docs/product/capabilities/content.reader.documents.md +69 -0
  264. package/corpus/templates/content/docs/product/capabilities/content.reader.surface.md +75 -0
  265. package/corpus/templates/content/docs/product/capabilities/content.relationship.edge.md +183 -0
  266. package/corpus/templates/content/docs/product/capabilities/content.renderer.artifact-block.md +71 -0
  267. package/corpus/templates/content/docs/product/capabilities/content.renderer.custom-block.md +81 -0
  268. package/corpus/templates/content/docs/product/capabilities/content.renderer.graph.md +71 -0
  269. package/corpus/templates/content/docs/product/capabilities/content.renderer.typed.md +92 -0
  270. package/corpus/templates/content/docs/product/capabilities/content.research.annotation.md +75 -0
  271. package/corpus/templates/content/docs/product/capabilities/content.research.citation.md +70 -0
  272. package/corpus/templates/content/docs/product/capabilities/content.review.code.md +67 -0
  273. package/corpus/templates/content/docs/product/capabilities/content.revision.suggestions.md +76 -0
  274. package/corpus/templates/content/docs/product/capabilities/content.rule.deterministic.md +79 -0
  275. package/corpus/templates/content/docs/product/capabilities/content.schedule.constraints.md +81 -0
  276. package/corpus/templates/content/docs/product/capabilities/content.security.private-vault.md +71 -0
  277. package/corpus/templates/content/docs/product/capabilities/content.share.views.md +140 -0
  278. package/corpus/templates/content/docs/product/capabilities/content.source.adapters.md +154 -0
  279. package/corpus/templates/content/docs/product/capabilities/content.source.builder-codec.md +70 -0
  280. package/corpus/templates/content/docs/product/capabilities/content.source.catalog.md +149 -0
  281. package/corpus/templates/content/docs/product/capabilities/content.source.file-folder.md +71 -0
  282. package/corpus/templates/content/docs/product/capabilities/content.source.local-bridge.md +156 -0
  283. package/corpus/templates/content/docs/product/capabilities/content.source.local-project.md +70 -0
  284. package/corpus/templates/content/docs/product/capabilities/content.source.page-link.md +70 -0
  285. package/corpus/templates/content/docs/product/capabilities/content.source.row-union.md +69 -0
  286. package/corpus/templates/content/docs/product/capabilities/content.source.spaces-files.md +75 -0
  287. package/corpus/templates/content/docs/product/capabilities/content.source.sync-policy.md +161 -0
  288. package/corpus/templates/content/docs/product/capabilities/content.system.dependencies.md +80 -0
  289. package/corpus/templates/content/docs/product/capabilities/content.system.my-tasks.md +75 -0
  290. package/corpus/templates/content/docs/product/capabilities/content.system.project-status.md +77 -0
  291. package/corpus/templates/content/docs/product/capabilities/content.system.research-workspace.md +80 -0
  292. package/corpus/templates/content/docs/product/capabilities/content.system.task-project.md +76 -0
  293. package/corpus/templates/content/docs/product/capabilities/content.template.governance.md +76 -0
  294. package/corpus/templates/content/docs/product/capabilities/content.template.graph.md +76 -0
  295. package/corpus/templates/content/docs/product/capabilities/content.template.item-body.md +71 -0
  296. package/corpus/templates/content/docs/product/capabilities/content.template.update.md +71 -0
  297. package/corpus/templates/content/docs/product/capabilities/content.time.types.md +85 -0
  298. package/corpus/templates/content/docs/product/capabilities/content.version.branching.md +151 -0
  299. package/corpus/templates/content/docs/product/capabilities/content.version.field-history.md +103 -0
  300. package/corpus/templates/content/docs/product/capabilities/content.view.canvas.md +94 -0
  301. package/corpus/templates/content/docs/product/capabilities/content.view.chart.md +91 -0
  302. package/corpus/templates/content/docs/product/capabilities/content.view.dynamic-create.md +137 -0
  303. package/corpus/templates/content/docs/product/capabilities/content.view.fast-capture.md +82 -0
  304. package/corpus/templates/content/docs/product/capabilities/content.view.graph.md +95 -0
  305. package/corpus/templates/content/docs/product/capabilities/content.view.grouping-aggregation.md +83 -0
  306. package/corpus/templates/content/docs/product/capabilities/content.view.map.md +77 -0
  307. package/corpus/templates/content/docs/product/capabilities/content.view.personal-state.md +99 -0
  308. package/corpus/templates/content/docs/product/capabilities/content.view.pivot.md +76 -0
  309. package/corpus/templates/content/docs/product/capabilities/content.view.query.md +106 -0
  310. package/corpus/templates/content/docs/product/capabilities/content.view.renderer-conformance.md +77 -0
  311. package/corpus/templates/content/docs/product/capabilities/content.view.scale.md +77 -0
  312. package/corpus/templates/content/docs/product/capabilities/content.view.source-query.md +159 -0
  313. package/corpus/templates/content/docs/product/capabilities/content.view.timeline.md +86 -0
  314. package/corpus/templates/content/docs/product/capabilities/content.view.tree.md +77 -0
  315. package/corpus/templates/content/docs/product/capabilities/content.workspace.multi-scope.md +80 -0
  316. package/corpus/templates/content/docs/product/capabilities/content.workspace.session-restore.md +76 -0
  317. package/corpus/templates/content/docs/product/capabilities/content.workspace.view-instance.md +76 -0
  318. package/corpus/templates/content/docs/product/capabilities/content.workspace.working-set.md +77 -0
  319. package/corpus/templates/content/docs/product/chapters/content.chapter.capture-research.md +20 -0
  320. package/corpus/templates/content/docs/product/chapters/content.chapter.connected-sources.md +20 -0
  321. package/corpus/templates/content/docs/product/chapters/content.chapter.consensus.md +19 -0
  322. package/corpus/templates/content/docs/product/chapters/content.chapter.durable-home.md +21 -0
  323. package/corpus/templates/content/docs/product/chapters/content.chapter.publishing-portability.md +21 -0
  324. package/corpus/templates/content/docs/product/chapters/content.chapter.working-systems.md +27 -0
  325. package/corpus/templates/content/docs/product/encyclopedia.md +559 -0
  326. package/corpus/templates/content/docs/product/features/content.feature.bring-your-local-work.md +39 -0
  327. package/corpus/templates/content/docs/product/features/content.feature.build-living-dashboards.md +34 -0
  328. package/corpus/templates/content/docs/product/features/content.feature.build-new-surfaces.md +33 -0
  329. package/corpus/templates/content/docs/product/features/content.feature.capture-into-action.md +34 -0
  330. package/corpus/templates/content/docs/product/features/content.feature.cite-what-you-found.md +34 -0
  331. package/corpus/templates/content/docs/product/features/content.feature.collaborate-in-context.md +59 -0
  332. package/corpus/templates/content/docs/product/features/content.feature.collect-structured-input.md +38 -0
  333. package/corpus/templates/content/docs/product/features/content.feature.connect-your-sources.md +38 -0
  334. package/corpus/templates/content/docs/product/features/content.feature.data-that-keeps-itself-right.md +45 -0
  335. package/corpus/templates/content/docs/product/features/content.feature.durable-foundations.md +48 -0
  336. package/corpus/templates/content/docs/product/features/content.feature.evolve-systems-safely.md +38 -0
  337. package/corpus/templates/content/docs/product/features/content.feature.explore-alternatives-safely.md +39 -0
  338. package/corpus/templates/content/docs/product/features/content.feature.find-your-place-again.md +40 -0
  339. package/corpus/templates/content/docs/product/features/content.feature.keep-your-private-vault-private.md +39 -0
  340. package/corpus/templates/content/docs/product/features/content.feature.living-references.md +38 -0
  341. package/corpus/templates/content/docs/product/features/content.feature.make-the-workspace-yours.md +40 -0
  342. package/corpus/templates/content/docs/product/features/content.feature.move-without-starting-over.md +38 -0
  343. package/corpus/templates/content/docs/product/features/content.feature.plan-work-across-time.md +39 -0
  344. package/corpus/templates/content/docs/product/features/content.feature.publish-with-confidence.md +43 -0
  345. package/corpus/templates/content/docs/product/features/content.feature.put-your-organizations-know-how-to-work.md +38 -0
  346. package/corpus/templates/content/docs/product/features/content.feature.read-and-annotate-anything.md +38 -0
  347. package/corpus/templates/content/docs/product/features/content.feature.review-changes-in-place.md +39 -0
  348. package/corpus/templates/content/docs/product/features/content.feature.run-projects-your-way.md +44 -0
  349. package/corpus/templates/content/docs/product/features/content.feature.see-your-information-your-way.md +44 -0
  350. package/corpus/templates/content/docs/product/features/content.feature.share-how-your-organization-works.md +38 -0
  351. package/corpus/templates/content/docs/product/features/content.feature.sketch-connections-keep-whats-true.md +39 -0
  352. package/corpus/templates/content/docs/product/features/content.feature.take-the-whole-vault-with-you.md +39 -0
  353. package/corpus/templates/content/docs/product/features/content.feature.trust-your-connected-sources.md +40 -0
  354. package/corpus/templates/content/docs/product/features/content.feature.understand-what-your-data-says.md +39 -0
  355. package/corpus/templates/content/docs/product/features/content.feature.when-this-happens-that-follows.md +43 -0
  356. package/corpus/templates/content/docs/product/features/content.feature.work-across-every-workspace.md +37 -0
  357. package/corpus/templates/content/docs/product/features/content.feature.work-on-content-inside-another-application.md +37 -0
  358. package/corpus/templates/content/docs/product/roadmap.md +878 -0
  359. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  360. package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +1 -7
  361. package/corpus/templates/crm/app/i18n/en-US.ts +4 -0
  362. package/corpus/templates/crm/app/routes/settings.tsx +33 -8
  363. package/corpus/templates/crm/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  364. package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  365. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +133 -63
  366. package/corpus/templates/design/.generated/bridge/embedded-wheel.generated.ts +19 -2
  367. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +51 -14
  368. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +41 -26
  369. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +22 -4
  370. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +216 -116
  371. package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +21 -2
  372. package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +5 -1
  373. package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbenchLoader.tsx +10 -2
  374. package/corpus/templates/design/app/components/design/code-workbench/code-workbench-shell.ts +2 -0
  375. package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +60 -55
  376. package/corpus/templates/design/app/components/design/design-canvas/content-size-report.ts +88 -2
  377. package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +3 -2
  378. package/corpus/templates/design/app/components/design/types.ts +4 -0
  379. package/corpus/templates/design/app/components/layout/Sidebar.tsx +1 -5
  380. package/corpus/templates/design/app/pages/design-editor/clipboard-layer-source.ts +28 -0
  381. package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +117 -0
  382. package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +3 -1
  383. package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +120 -74
  384. package/corpus/templates/design/app/pages/design-editor/pending-structure-verification.ts +11 -0
  385. package/corpus/templates/design/app/pages/design-editor/react-semantic-handoff.ts +2 -0
  386. package/corpus/templates/design/app/pages/design-editor/source-location.ts +1 -1
  387. package/corpus/templates/design/changelog/2026-07-29-copy-rendered-ui-between-live-local-apps-and-design-files-wh.md +6 -0
  388. package/corpus/templates/design/changelog/2026-07-29-design-boards-stay-dark-and-viewport-height-content-keeps-it.md +6 -0
  389. package/corpus/templates/design/changelog/2026-07-29-design-frames-no-longer-grow-continuously-when-their-content.md +6 -0
  390. package/corpus/templates/design/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  391. package/corpus/templates/design/changelog/2026-07-29-the-code-panel-and-apply-design-update-control-now-use-clear.md +6 -0
  392. package/corpus/templates/design/changelog/2026-07-29-the-tools-panel-now-keeps-extension-creation-and-discovery-h.md +6 -0
  393. package/corpus/templates/design/shared/source-mode.ts +7 -1
  394. package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  395. package/corpus/templates/dispatch/app/i18n-data.ts +171 -0
  396. package/corpus/templates/dispatch/app/routes/browser-chat.tsx +4 -0
  397. package/corpus/templates/dispatch/app/routes/browser-connect.tsx +4 -0
  398. package/corpus/templates/dispatch/changelog/2026-07-29-browser-chat-can-securely-connect-the-agent-native-chrome-ex.md +6 -0
  399. package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  400. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +1 -6
  401. package/corpus/templates/forms/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  402. package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  403. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +1 -5
  404. package/corpus/templates/macros/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  405. package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  406. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +1 -9
  407. package/corpus/templates/mail/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  408. package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  409. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +3 -7
  410. package/corpus/templates/plan/app/pages/PlansPage.tsx +2 -2
  411. package/corpus/templates/plan/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
  412. package/corpus/templates/plan/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-ask-plan.md +6 -0
  413. package/corpus/templates/plan/changelog/2026-07-29-fixed-plan-pages-crashing-when-recent-activity-is-unavailabl.md +6 -0
  414. package/corpus/templates/plan/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  415. package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  416. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +60 -4
  417. package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +20 -0
  418. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +30 -1
  419. package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +3 -1
  420. package/corpus/templates/slides/AGENTS.md +22 -24
  421. package/corpus/templates/slides/actions/check-image-gen.ts +8 -2
  422. package/corpus/templates/slides/actions/create-deck.ts +4 -12
  423. package/corpus/templates/slides/actions/export-pptx.ts +25 -3
  424. package/corpus/templates/slides/actions/generate-image-api.ts +4 -2
  425. package/corpus/templates/slides/actions/generate-slides-ai.ts +1 -1
  426. package/corpus/templates/slides/actions/get-deck-reference-context.ts +136 -0
  427. package/corpus/templates/slides/actions/get-workspace-defaults.ts +55 -0
  428. package/corpus/templates/slides/actions/image-gen-status.ts +10 -1
  429. package/corpus/templates/slides/actions/import-file.ts +53 -38
  430. package/corpus/templates/slides/actions/list-decks.ts +2 -0
  431. package/corpus/templates/slides/actions/patch-deck.ts +2 -0
  432. package/corpus/templates/slides/actions/set-workspace-defaults.ts +50 -0
  433. package/corpus/templates/slides/actions/view-screen.ts +6 -0
  434. package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +1 -1
  435. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +67 -3
  436. package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +40 -8
  437. package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +33 -8
  438. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +6 -2
  439. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +114 -128
  440. package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +2 -1
  441. package/corpus/templates/slides/app/components/editor/ImageGenPanel.tsx +1 -1
  442. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +1193 -267
  443. package/corpus/templates/slides/app/components/editor/SlideStyleInspector.tsx +302 -102
  444. package/corpus/templates/slides/app/components/editor/rich-text-selection.ts +270 -0
  445. package/corpus/templates/slides/app/components/editor/slide-escape-arbiter.ts +34 -0
  446. package/corpus/templates/slides/app/components/editor/slide-object-interactions.ts +368 -0
  447. package/corpus/templates/slides/app/components/editor/slide-presence.ts +13 -0
  448. package/corpus/templates/slides/app/components/layout/AgentWorkIndicator.tsx +23 -3
  449. package/corpus/templates/slides/app/components/layout/Layout.tsx +39 -6
  450. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +1 -6
  451. package/corpus/templates/slides/app/components/layout/layout-route-policy.ts +23 -0
  452. package/corpus/templates/slides/app/components/visual-editor/DrawOverlay.tsx +0 -2
  453. package/corpus/templates/slides/app/context/DeckContext.tsx +2 -0
  454. package/corpus/templates/slides/app/global.css +60 -0
  455. package/corpus/templates/slides/app/hooks/use-agent-generating.ts +76 -5
  456. package/corpus/templates/slides/app/hooks/use-workspace-defaults.ts +26 -0
  457. package/corpus/templates/slides/app/i18n/en-US.ts +38 -3
  458. package/corpus/templates/slides/app/lib/generation-state.ts +13 -3
  459. package/corpus/templates/slides/app/lib/slide-image-replacement.ts +27 -6
  460. package/corpus/templates/slides/app/lib/text-tool-shortcut.ts +62 -0
  461. package/corpus/templates/slides/app/pages/DeckEditor.tsx +197 -83
  462. package/corpus/templates/slides/app/pages/DesignSystems.tsx +95 -0
  463. package/corpus/templates/slides/app/pages/Index.tsx +348 -53
  464. package/corpus/templates/slides/changelog/2026-07-28-pick-an-existing-deck-as-a-style-reference-when-creating-a-n.md +6 -0
  465. package/corpus/templates/slides/changelog/2026-07-29-ai-editing-status-is-now-quieter-and-only-shows-slide-presen.md +6 -0
  466. package/corpus/templates/slides/changelog/2026-07-29-design-systems-and-reference-decks-are-easier-to-choose-toge.md +6 -0
  467. package/corpus/templates/slides/changelog/2026-07-29-generated-decks-now-receive-a-concise-relevant-title-before-.md +6 -0
  468. package/corpus/templates/slides/changelog/2026-07-29-new-deck-prompts-reuse-empty-chats.md +6 -0
  469. package/corpus/templates/slides/changelog/2026-07-29-new-deck-setup-now-stays-in-the-editor-with-closable-style-a.md +6 -0
  470. package/corpus/templates/slides/changelog/2026-07-29-selected-words-and-text-runs-can-now-be-styled-independently.md +6 -0
  471. package/corpus/templates/slides/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  472. package/corpus/templates/slides/changelog/2026-07-29-slide-annotation-tools-are-clearer-and-escape-now-exits-anno.md +6 -0
  473. package/corpus/templates/slides/changelog/2026-07-29-slide-editing-now-opens-with-the-app-navigation-collapsed-fo.md +6 -0
  474. package/corpus/templates/slides/changelog/2026-07-29-slide-editing-stays-visually-clean-on-hover-without-a-canvas.md +6 -0
  475. package/corpus/templates/slides/changelog/2026-07-29-slides-now-appear-one-by-one-while-ai-builds-a-deck-with-ste.md +6 -0
  476. package/corpus/templates/slides/changelog/2026-07-29-text-boxes-now-select-move-duplicate-resize-and-style-like-a.md +6 -0
  477. package/corpus/templates/slides/changelog/2026-07-29-untitled-decks-now-use-a-clearer-this-deck-label-in-the-agen.md +6 -0
  478. package/corpus/templates/slides/server/handlers/image-providers/builder.ts +305 -0
  479. package/corpus/templates/slides/server/handlers/image-providers/index.ts +6 -3
  480. package/corpus/templates/slides/server/plugins/agent-chat.ts +1 -0
  481. package/corpus/templates/slides/server/workspace-defaults.ts +169 -0
  482. package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  483. package/corpus/templates/tasks/app/components/layout/Sidebar.tsx +31 -8
  484. package/corpus/templates/tasks/app/i18n/en-US.ts +7 -0
  485. package/corpus/templates/tasks/app/routes/settings.tsx +25 -2
  486. package/corpus/templates/tasks/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  487. package/corpus/toolkit/CHANGELOG.md +15 -0
  488. package/corpus/toolkit/README.md +2 -2
  489. package/corpus/toolkit/package.json +1 -1
  490. package/corpus/toolkit/src/app-shell/sidebar-footer-actions.tsx +0 -3
  491. package/corpus/toolkit/src/chat-history.css +1 -0
  492. package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +35 -14
  493. package/corpus/toolkit/src/composer/PromptComposer.tsx +6 -0
  494. package/corpus/toolkit/src/composer/TiptapComposer.tsx +11 -3
  495. package/corpus/toolkit/src/design-tweaks/visual-style-controls.tsx +64 -11
  496. package/dist/action.d.ts +44 -0
  497. package/dist/action.d.ts.map +1 -1
  498. package/dist/action.js +9 -0
  499. package/dist/action.js.map +1 -1
  500. package/dist/agent/engine/builder-engine.js +6 -4
  501. package/dist/agent/engine/builder-engine.js.map +1 -1
  502. package/dist/agent/production-agent.d.ts +11 -1
  503. package/dist/agent/production-agent.d.ts.map +1 -1
  504. package/dist/agent/production-agent.js +131 -90
  505. package/dist/agent/production-agent.js.map +1 -1
  506. package/dist/agent/tool-search.d.ts +4 -0
  507. package/dist/agent/tool-search.d.ts.map +1 -1
  508. package/dist/agent/tool-search.js +30 -0
  509. package/dist/agent/tool-search.js.map +1 -1
  510. package/dist/automations/service.d.ts +85 -0
  511. package/dist/automations/service.d.ts.map +1 -0
  512. package/dist/automations/service.js +332 -0
  513. package/dist/automations/service.js.map +1 -0
  514. package/dist/browser-context/index.d.ts +579 -0
  515. package/dist/browser-context/index.d.ts.map +1 -0
  516. package/dist/browser-context/index.js +331 -0
  517. package/dist/browser-context/index.js.map +1 -0
  518. package/dist/client/AgentPanel.d.ts.map +1 -1
  519. package/dist/client/AgentPanel.js +1 -1
  520. package/dist/client/AgentPanel.js.map +1 -1
  521. package/dist/client/FeedbackButton.d.ts +6 -2
  522. package/dist/client/FeedbackButton.d.ts.map +1 -1
  523. package/dist/client/FeedbackButton.js +20 -3
  524. package/dist/client/FeedbackButton.js.map +1 -1
  525. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  526. package/dist/client/MultiTabAssistantChat.js +19 -2
  527. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  528. package/dist/client/agent-chat.d.ts +15 -0
  529. package/dist/client/agent-chat.d.ts.map +1 -1
  530. package/dist/client/agent-chat.js +13 -3
  531. package/dist/client/agent-chat.js.map +1 -1
  532. package/dist/client/agent-page/AgentJobsTab.d.ts +1 -0
  533. package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -1
  534. package/dist/client/agent-page/AgentJobsTab.js +186 -98
  535. package/dist/client/agent-page/AgentJobsTab.js.map +1 -1
  536. package/dist/client/agent-page/AgentTabsPage.js +4 -4
  537. package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
  538. package/dist/client/agent-page/use-jobs.d.ts +7 -0
  539. package/dist/client/agent-page/use-jobs.d.ts.map +1 -1
  540. package/dist/client/agent-page/use-jobs.js.map +1 -1
  541. package/dist/client/analytics-session.d.ts.map +1 -1
  542. package/dist/client/analytics-session.js +13 -0
  543. package/dist/client/analytics-session.js.map +1 -1
  544. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  545. package/dist/client/extensions/ExtensionViewer.js +29 -6
  546. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  547. package/dist/client/settings/AutomationsSection.d.ts +0 -9
  548. package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
  549. package/dist/client/settings/AutomationsSection.js +9 -168
  550. package/dist/client/settings/AutomationsSection.js.map +1 -1
  551. package/dist/client/settings/SettingsPanel.d.ts +9 -1
  552. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  553. package/dist/client/settings/SettingsPanel.js +19 -11
  554. package/dist/client/settings/SettingsPanel.js.map +1 -1
  555. package/dist/client/settings/index.d.ts +1 -1
  556. package/dist/client/settings/index.d.ts.map +1 -1
  557. package/dist/client/settings/index.js +1 -1
  558. package/dist/client/settings/index.js.map +1 -1
  559. package/dist/client/use-agent-chat.d.ts.map +1 -1
  560. package/dist/client/use-agent-chat.js +20 -3
  561. package/dist/client/use-agent-chat.js.map +1 -1
  562. package/dist/client/use-chat-threads.d.ts.map +1 -1
  563. package/dist/client/use-chat-threads.js +4 -17
  564. package/dist/client/use-chat-threads.js.map +1 -1
  565. package/dist/collab/awareness.d.ts +2 -2
  566. package/dist/collab/awareness.d.ts.map +1 -1
  567. package/dist/deploy/build.d.ts.map +1 -1
  568. package/dist/deploy/build.js +2 -1
  569. package/dist/deploy/build.js.map +1 -1
  570. package/dist/deploy/workspace-deploy.d.ts.map +1 -1
  571. package/dist/deploy/workspace-deploy.js +2 -1
  572. package/dist/deploy/workspace-deploy.js.map +1 -1
  573. package/dist/extensions/actions.d.ts.map +1 -1
  574. package/dist/extensions/actions.js +82 -6
  575. package/dist/extensions/actions.js.map +1 -1
  576. package/dist/extensions/fetch-tool.d.ts.map +1 -1
  577. package/dist/extensions/fetch-tool.js +11 -0
  578. package/dist/extensions/fetch-tool.js.map +1 -1
  579. package/dist/extensions/routes.d.ts +5 -1
  580. package/dist/extensions/routes.d.ts.map +1 -1
  581. package/dist/extensions/routes.js +7 -1
  582. package/dist/extensions/routes.js.map +1 -1
  583. package/dist/extensions/web-content.d.ts +1 -0
  584. package/dist/extensions/web-content.d.ts.map +1 -1
  585. package/dist/extensions/web-content.js +82 -1
  586. package/dist/extensions/web-content.js.map +1 -1
  587. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  588. package/dist/integrations/computer-supervision.d.ts.map +1 -1
  589. package/dist/integrations/computer-supervision.js +22 -1
  590. package/dist/integrations/computer-supervision.js.map +1 -1
  591. package/dist/integrations/index.d.ts +3 -2
  592. package/dist/integrations/index.d.ts.map +1 -1
  593. package/dist/integrations/index.js +3 -2
  594. package/dist/integrations/index.js.map +1 -1
  595. package/dist/integrations/integration-durable-dispatch-config.d.ts +2 -0
  596. package/dist/integrations/integration-durable-dispatch-config.d.ts.map +1 -1
  597. package/dist/integrations/integration-durable-dispatch-config.js +4 -0
  598. package/dist/integrations/integration-durable-dispatch-config.js.map +1 -1
  599. package/dist/integrations/integration-durable-dispatch.d.ts +2 -2
  600. package/dist/integrations/integration-durable-dispatch.d.ts.map +1 -1
  601. package/dist/integrations/integration-durable-dispatch.js +2 -2
  602. package/dist/integrations/integration-durable-dispatch.js.map +1 -1
  603. package/dist/integrations/plugin.d.ts.map +1 -1
  604. package/dist/integrations/plugin.js +84 -39
  605. package/dist/integrations/plugin.js.map +1 -1
  606. package/dist/integrations/remote-browser-actions.d.ts +7 -0
  607. package/dist/integrations/remote-browser-actions.d.ts.map +1 -0
  608. package/dist/integrations/remote-browser-actions.js +482 -0
  609. package/dist/integrations/remote-browser-actions.js.map +1 -0
  610. package/dist/jobs/actions/list-recurring-jobs.d.ts.map +1 -1
  611. package/dist/jobs/actions/list-recurring-jobs.js +4 -6
  612. package/dist/jobs/actions/list-recurring-jobs.js.map +1 -1
  613. package/dist/jobs/actions/manage-recurring-job.js +3 -6
  614. package/dist/jobs/actions/manage-recurring-job.js.map +1 -1
  615. package/dist/jobs/background-automation-runner.d.ts +76 -0
  616. package/dist/jobs/background-automation-runner.d.ts.map +1 -0
  617. package/dist/jobs/background-automation-runner.js +288 -0
  618. package/dist/jobs/background-automation-runner.js.map +1 -0
  619. package/dist/jobs/frontmatter.d.ts +63 -0
  620. package/dist/jobs/frontmatter.d.ts.map +1 -0
  621. package/dist/jobs/frontmatter.js +216 -0
  622. package/dist/jobs/frontmatter.js.map +1 -0
  623. package/dist/jobs/scheduler.d.ts +6 -60
  624. package/dist/jobs/scheduler.d.ts.map +1 -1
  625. package/dist/jobs/scheduler.js +67 -484
  626. package/dist/jobs/scheduler.js.map +1 -1
  627. package/dist/jobs/tools.d.ts.map +1 -1
  628. package/dist/jobs/tools.js +24 -3
  629. package/dist/jobs/tools.js.map +1 -1
  630. package/dist/localization/default-messages.d.ts +28 -33
  631. package/dist/localization/default-messages.d.ts.map +1 -1
  632. package/dist/localization/default-messages.js +34 -39
  633. package/dist/localization/default-messages.js.map +1 -1
  634. package/dist/mcp-client/index.d.ts.map +1 -1
  635. package/dist/mcp-client/index.js +4 -0
  636. package/dist/mcp-client/index.js.map +1 -1
  637. package/dist/notifications/actions.d.ts.map +1 -1
  638. package/dist/notifications/actions.js +5 -0
  639. package/dist/notifications/actions.js.map +1 -1
  640. package/dist/notifications/routes.d.ts +6 -6
  641. package/dist/observability/routes.d.ts +3 -3
  642. package/dist/progress/actions.d.ts.map +1 -1
  643. package/dist/progress/actions.js +5 -0
  644. package/dist/progress/actions.js.map +1 -1
  645. package/dist/progress/routes.d.ts +1 -1
  646. package/dist/provider-api/actions/custom-provider-registration.d.ts +14 -14
  647. package/dist/provider-api/actions/github-repo-files.d.ts.map +1 -1
  648. package/dist/provider-api/actions/github-repo-files.js +9 -0
  649. package/dist/provider-api/actions/github-repo-files.js.map +1 -1
  650. package/dist/provider-api/actions/provider-api.d.ts +16 -16
  651. package/dist/provider-api/actions/provider-api.d.ts.map +1 -1
  652. package/dist/provider-api/actions/provider-api.js +14 -0
  653. package/dist/provider-api/actions/provider-api.js.map +1 -1
  654. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  655. package/dist/server/action-discovery.d.ts.map +1 -1
  656. package/dist/server/action-discovery.js +5 -0
  657. package/dist/server/action-discovery.js.map +1 -1
  658. package/dist/server/agent-chat/browser-team-tools.d.ts.map +1 -1
  659. package/dist/server/agent-chat/browser-team-tools.js +90 -3
  660. package/dist/server/agent-chat/browser-team-tools.js.map +1 -1
  661. package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
  662. package/dist/server/agent-chat/framework-prompts.js +7 -11
  663. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  664. package/dist/server/agent-chat/plugin-options.d.ts +3 -3
  665. package/dist/server/agent-chat/plugin-options.js.map +1 -1
  666. package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
  667. package/dist/server/agent-chat/script-entries.js +43 -1
  668. package/dist/server/agent-chat/script-entries.js.map +1 -1
  669. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  670. package/dist/server/agent-chat-plugin.js +24 -5
  671. package/dist/server/agent-chat-plugin.js.map +1 -1
  672. package/dist/server/attribution.d.ts +6 -0
  673. package/dist/server/attribution.d.ts.map +1 -1
  674. package/dist/server/attribution.js +14 -14
  675. package/dist/server/attribution.js.map +1 -1
  676. package/dist/server/auth.d.ts.map +1 -1
  677. package/dist/server/auth.js +5 -2
  678. package/dist/server/auth.js.map +1 -1
  679. package/dist/server/better-auth-instance.d.ts +2 -1
  680. package/dist/server/better-auth-instance.d.ts.map +1 -1
  681. package/dist/server/better-auth-instance.js +6 -3
  682. package/dist/server/better-auth-instance.js.map +1 -1
  683. package/dist/server/core-routes-plugin.d.ts +7 -0
  684. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  685. package/dist/server/core-routes-plugin.js +3 -1
  686. package/dist/server/core-routes-plugin.js.map +1 -1
  687. package/dist/server/csrf.d.ts.map +1 -1
  688. package/dist/server/csrf.js +25 -0
  689. package/dist/server/csrf.js.map +1 -1
  690. package/dist/server/google-oauth.d.ts +3 -0
  691. package/dist/server/google-oauth.d.ts.map +1 -1
  692. package/dist/server/google-oauth.js +12 -1
  693. package/dist/server/google-oauth.js.map +1 -1
  694. package/dist/server/onboarding-html.d.ts.map +1 -1
  695. package/dist/server/onboarding-html.js +18 -0
  696. package/dist/server/onboarding-html.js.map +1 -1
  697. package/dist/server/prompts/framework-core-compact.js +3 -3
  698. package/dist/server/prompts/framework-core-compact.js.map +1 -1
  699. package/dist/server/prompts/framework-core.js +3 -3
  700. package/dist/server/prompts/framework-core.js.map +1 -1
  701. package/dist/server/prompts/shared-rules.js +3 -3
  702. package/dist/server/prompts/shared-rules.js.map +1 -1
  703. package/dist/server/realtime-token.d.ts +1 -1
  704. package/dist/server/transcribe-voice.d.ts +1 -1
  705. package/dist/settings/index.d.ts +1 -1
  706. package/dist/settings/index.d.ts.map +1 -1
  707. package/dist/settings/index.js +1 -1
  708. package/dist/settings/index.js.map +1 -1
  709. package/dist/shared/analytics-anonymous-id.d.ts +12 -0
  710. package/dist/shared/analytics-anonymous-id.d.ts.map +1 -0
  711. package/dist/shared/analytics-anonymous-id.js +29 -0
  712. package/dist/shared/analytics-anonymous-id.js.map +1 -0
  713. package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  714. package/dist/templates/chat/app/components/layout/Sidebar.tsx +1 -5
  715. package/dist/templates/chat/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  716. package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  717. package/dist/templates/default/app/i18n/ar-SA.ts +26 -0
  718. package/dist/templates/default/app/i18n/de-DE.ts +28 -0
  719. package/dist/templates/default/app/i18n/en-US.ts +27 -0
  720. package/dist/templates/default/app/i18n/es-ES.ts +28 -0
  721. package/dist/templates/default/app/i18n/fr-FR.ts +28 -0
  722. package/dist/templates/default/app/i18n/hi-IN.ts +25 -0
  723. package/dist/templates/default/app/i18n/ja-JP.ts +27 -0
  724. package/dist/templates/default/app/i18n/ko-KR.ts +27 -0
  725. package/dist/templates/default/app/i18n/pt-BR.ts +27 -0
  726. package/dist/templates/default/app/i18n/zh-CN.ts +24 -0
  727. package/dist/templates/default/app/i18n/zh-TW.ts +24 -0
  728. package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  729. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  730. package/dist/templates/workspace-core/.agents/skills/agent-page/SKILL.md +10 -7
  731. package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +53 -8
  732. package/dist/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +131 -0
  733. package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +13 -4
  734. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +23 -15
  735. package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +33 -18
  736. package/dist/tracking/providers.d.ts.map +1 -1
  737. package/dist/tracking/providers.js +1 -0
  738. package/dist/tracking/providers.js.map +1 -1
  739. package/dist/tracking/registry.d.ts +1 -0
  740. package/dist/tracking/registry.d.ts.map +1 -1
  741. package/dist/tracking/registry.js +1 -0
  742. package/dist/tracking/registry.js.map +1 -1
  743. package/dist/tracking/types.d.ts +1 -0
  744. package/dist/tracking/types.d.ts.map +1 -1
  745. package/dist/tracking/types.js.map +1 -1
  746. package/dist/triggers/actions/list-automations.d.ts +7 -0
  747. package/dist/triggers/actions/list-automations.d.ts.map +1 -1
  748. package/dist/triggers/actions/list-automations.js +29 -41
  749. package/dist/triggers/actions/list-automations.js.map +1 -1
  750. package/dist/triggers/actions/manage-automation.js +15 -33
  751. package/dist/triggers/actions/manage-automation.js.map +1 -1
  752. package/dist/triggers/actions.d.ts.map +1 -1
  753. package/dist/triggers/actions.js +184 -95
  754. package/dist/triggers/actions.js.map +1 -1
  755. package/dist/triggers/dispatcher.d.ts +3 -9
  756. package/dist/triggers/dispatcher.d.ts.map +1 -1
  757. package/dist/triggers/dispatcher.js +134 -304
  758. package/dist/triggers/dispatcher.js.map +1 -1
  759. package/dist/triggers/routes.d.ts.map +1 -1
  760. package/dist/triggers/routes.js +76 -17
  761. package/dist/triggers/routes.js.map +1 -1
  762. package/dist/triggers/types.d.ts +4 -23
  763. package/dist/triggers/types.d.ts.map +1 -1
  764. package/dist/triggers/types.js.map +1 -1
  765. package/docs/content/agent-surfaces.mdx +4 -4
  766. package/docs/content/automations.mdx +61 -12
  767. package/docs/content/deployment.mdx +11 -4
  768. package/docs/content/extensions.mdx +39 -33
  769. package/docs/content/recurring-jobs.mdx +41 -19
  770. package/docs/content/template-dispatch-operations.mdx +19 -7
  771. package/package.json +4 -2
  772. package/src/action.ts +55 -0
  773. package/src/agent/engine/builder-engine.ts +8 -4
  774. package/src/agent/production-agent.ts +175 -100
  775. package/src/agent/tool-search.ts +36 -0
  776. package/src/automations/service.ts +506 -0
  777. package/src/browser-context/index.ts +392 -0
  778. package/src/client/AgentPanel.tsx +2 -1
  779. package/src/client/FeedbackButton.tsx +37 -4
  780. package/src/client/MultiTabAssistantChat.tsx +21 -0
  781. package/src/client/agent-chat.ts +31 -3
  782. package/src/client/agent-page/AgentJobsTab.tsx +438 -310
  783. package/src/client/agent-page/AgentTabsPage.tsx +4 -4
  784. package/src/client/agent-page/use-jobs.ts +7 -0
  785. package/src/client/analytics-session.ts +13 -0
  786. package/src/client/extensions/ExtensionViewer.tsx +67 -0
  787. package/src/client/settings/AutomationsSection.tsx +27 -499
  788. package/src/client/settings/SettingsPanel.tsx +32 -11
  789. package/src/client/settings/index.ts +2 -0
  790. package/src/client/use-agent-chat.ts +35 -3
  791. package/src/client/use-chat-threads.ts +8 -25
  792. package/src/deploy/build.ts +2 -0
  793. package/src/deploy/workspace-deploy.ts +2 -0
  794. package/src/extensions/actions.ts +115 -3
  795. package/src/extensions/fetch-tool.ts +11 -0
  796. package/src/extensions/routes.ts +16 -1
  797. package/src/extensions/web-content.ts +96 -1
  798. package/src/integrations/computer-supervision.ts +33 -1
  799. package/src/integrations/index.ts +6 -0
  800. package/src/integrations/integration-durable-dispatch-config.ts +10 -0
  801. package/src/integrations/integration-durable-dispatch.ts +4 -0
  802. package/src/integrations/plugin.ts +94 -41
  803. package/src/integrations/remote-browser-actions.ts +621 -0
  804. package/src/jobs/actions/list-recurring-jobs.ts +5 -7
  805. package/src/jobs/actions/manage-recurring-job.ts +3 -7
  806. package/src/jobs/background-automation-runner.ts +437 -0
  807. package/src/jobs/frontmatter.ts +308 -0
  808. package/src/jobs/scheduler.ts +89 -598
  809. package/src/jobs/tools.ts +22 -3
  810. package/src/localization/default-messages.ts +45 -45
  811. package/src/mcp-client/index.ts +6 -0
  812. package/src/notifications/actions.ts +5 -0
  813. package/src/progress/actions.ts +5 -0
  814. package/src/provider-api/actions/github-repo-files.ts +11 -0
  815. package/src/provider-api/actions/provider-api.ts +13 -0
  816. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +4 -4
  817. package/src/server/action-discovery.ts +7 -0
  818. package/src/server/agent-chat/browser-team-tools.ts +126 -3
  819. package/src/server/agent-chat/framework-prompts.ts +7 -11
  820. package/src/server/agent-chat/plugin-options.ts +3 -3
  821. package/src/server/agent-chat/script-entries.ts +52 -1
  822. package/src/server/agent-chat-plugin.ts +25 -5
  823. package/src/server/attribution.ts +22 -0
  824. package/src/server/auth.ts +20 -6
  825. package/src/server/better-auth-instance.ts +10 -2
  826. package/src/server/core-routes-plugin.ts +10 -1
  827. package/src/server/csrf.ts +25 -0
  828. package/src/server/google-oauth.ts +21 -1
  829. package/src/server/onboarding-html.ts +18 -0
  830. package/src/server/prompts/framework-core-compact.ts +3 -3
  831. package/src/server/prompts/framework-core.ts +3 -3
  832. package/src/server/prompts/shared-rules.ts +3 -3
  833. package/src/settings/index.ts +1 -0
  834. package/src/shared/analytics-anonymous-id.ts +35 -0
  835. package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  836. package/src/templates/chat/app/components/layout/Sidebar.tsx +1 -5
  837. package/src/templates/chat/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  838. package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  839. package/src/templates/default/app/i18n/ar-SA.ts +26 -0
  840. package/src/templates/default/app/i18n/de-DE.ts +28 -0
  841. package/src/templates/default/app/i18n/en-US.ts +27 -0
  842. package/src/templates/default/app/i18n/es-ES.ts +28 -0
  843. package/src/templates/default/app/i18n/fr-FR.ts +28 -0
  844. package/src/templates/default/app/i18n/hi-IN.ts +25 -0
  845. package/src/templates/default/app/i18n/ja-JP.ts +27 -0
  846. package/src/templates/default/app/i18n/ko-KR.ts +27 -0
  847. package/src/templates/default/app/i18n/pt-BR.ts +27 -0
  848. package/src/templates/default/app/i18n/zh-CN.ts +24 -0
  849. package/src/templates/default/app/i18n/zh-TW.ts +24 -0
  850. package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  851. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  852. package/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +10 -7
  853. package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +53 -8
  854. package/src/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +131 -0
  855. package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +13 -4
  856. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +23 -15
  857. package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +33 -18
  858. package/src/tracking/providers.ts +1 -0
  859. package/src/tracking/registry.ts +2 -1
  860. package/src/tracking/types.ts +1 -0
  861. package/src/triggers/actions/list-automations.ts +43 -44
  862. package/src/triggers/actions/manage-automation.ts +17 -48
  863. package/src/triggers/actions.ts +218 -127
  864. package/src/triggers/dispatcher.ts +181 -367
  865. package/src/triggers/routes.ts +84 -27
  866. package/src/triggers/types.ts +9 -23
@@ -5,10 +5,18 @@ import {
5
5
  type H3Event,
6
6
  } from "h3";
7
7
 
8
+ import { canUpdateAutomationResource } from "../automations/service.js";
8
9
  import { getDbExec } from "../db/client.js";
9
10
  import { nextOccurrence, describeCron, isValidCron } from "../jobs/cron.js";
11
+ import {
12
+ buildJobResourceContent,
13
+ parseJobResource,
14
+ type JobFrontmatter,
15
+ } from "../jobs/frontmatter.js";
10
16
  import { getOrgContext } from "../org/context.js";
11
17
  import {
18
+ organizationIdFromResourceOwner,
19
+ organizationResourceOwner,
12
20
  resourceGetByPath,
13
21
  resourceListAllOwners,
14
22
  resourcePut,
@@ -17,11 +25,7 @@ import {
17
25
  } from "../resources/store.js";
18
26
  import { getSession } from "../server/auth.js";
19
27
  import { readBody } from "../server/h3-helpers.js";
20
- import {
21
- buildTriggerContent,
22
- parseTriggerFrontmatter,
23
- refreshEventSubscriptions,
24
- } from "./dispatcher.js";
28
+ import { refreshEventSubscriptions } from "./dispatcher.js";
25
29
  import type { TriggerFrontmatter } from "./types.js";
26
30
 
27
31
  export interface AutomationRouteItem {
@@ -57,6 +61,14 @@ function automationName(path: string): string {
57
61
  return path.replace(/^jobs\//, "").replace(/\.md$/, "");
58
62
  }
59
63
 
64
+ function asTriggerFrontmatter(meta: JobFrontmatter): TriggerFrontmatter {
65
+ return {
66
+ ...meta,
67
+ triggerType: meta.triggerType ?? "schedule",
68
+ mode: meta.mode ?? "agentic",
69
+ };
70
+ }
71
+
60
72
  function normalizeAutomationPath(input: SetAutomationEnabledInput): string {
61
73
  const rawPath = input.path ?? (input.name ? `jobs/${input.name}.md` : "");
62
74
  const path = rawPath.replace(/^\/+/, "");
@@ -105,12 +117,33 @@ function nextRunForMeta(meta: TriggerFrontmatter): string | undefined {
105
117
  async function currentUserCanUpdateAutomation(
106
118
  event: H3Event,
107
119
  userEmail: string,
108
- resourceOwner: string,
120
+ resource: Resource,
109
121
  meta: TriggerFrontmatter,
110
122
  ): Promise<boolean> {
123
+ const resourceOwner = resource.owner;
111
124
  if (resourceOwner === userEmail) return true;
125
+ const resourceOrgId = organizationIdFromResourceOwner(resourceOwner);
126
+ if (resourceOrgId) {
127
+ try {
128
+ const org = await getOrgContext(event);
129
+ if (org.orgId !== resourceOrgId) return false;
130
+ return await canUpdateAutomationResource(
131
+ { userEmail, orgId: resourceOrgId },
132
+ resource,
133
+ );
134
+ } catch {
135
+ return false;
136
+ }
137
+ }
112
138
  if (resourceOwner !== SHARED_OWNER) return false;
113
139
 
140
+ if (meta.orgId) {
141
+ const activeOrgId = await getOrgContext(event)
142
+ .then((context) => context.orgId)
143
+ .catch(() => null);
144
+ if (activeOrgId !== meta.orgId) return false;
145
+ }
146
+
114
147
  if (
115
148
  meta.createdBy &&
116
149
  meta.createdBy.toLowerCase() === userEmail.toLowerCase()
@@ -145,7 +178,8 @@ async function resourceToAutomationItem(
145
178
  userEmail: string,
146
179
  resource: Resource,
147
180
  ): Promise<AutomationRouteItem> {
148
- const { meta, body } = parseTriggerFrontmatter(resource.content);
181
+ const parsed = parseJobResource(resource.content);
182
+ const meta = asTriggerFrontmatter(parsed.meta);
149
183
  return {
150
184
  id: resource.id,
151
185
  name: automationName(resource.path),
@@ -154,7 +188,7 @@ async function resourceToAutomationItem(
154
188
  canUpdate: await currentUserCanUpdateAutomation(
155
189
  event,
156
190
  userEmail,
157
- resource.owner,
191
+ resource,
158
192
  meta,
159
193
  ),
160
194
  triggerType: meta.triggerType,
@@ -170,7 +204,7 @@ async function resourceToAutomationItem(
170
204
  lastError: meta.lastError,
171
205
  nextRun: nextRunForMeta(meta),
172
206
  createdBy: meta.createdBy,
173
- body,
207
+ body: parsed.body,
174
208
  };
175
209
  }
176
210
 
@@ -179,12 +213,27 @@ export async function listAutomationsForOwner(
179
213
  userEmail: string,
180
214
  ): Promise<AutomationRouteItem[]> {
181
215
  const allResources = await resourceListAllOwners("jobs/");
182
- const resources = allResources.filter(
183
- (resource) =>
184
- (resource.owner === userEmail || resource.owner === SHARED_OWNER) &&
185
- resource.path.endsWith(".md") &&
186
- !resource.path.endsWith(".keep"),
187
- );
216
+ const activeOrgId = await getOrgContext(event)
217
+ .then((context) => context.orgId)
218
+ .catch(() => null);
219
+ const activeOrgOwner = activeOrgId
220
+ ? organizationResourceOwner(activeOrgId)
221
+ : null;
222
+ const resources = allResources.filter((resource) => {
223
+ if (!resource.path.endsWith(".md") || resource.path.endsWith(".keep")) {
224
+ return false;
225
+ }
226
+ if (
227
+ resource.owner !== userEmail &&
228
+ resource.owner !== SHARED_OWNER &&
229
+ resource.owner !== activeOrgOwner
230
+ ) {
231
+ return false;
232
+ }
233
+ if (resource.owner !== SHARED_OWNER) return true;
234
+ const { meta } = parseJobResource(resource.content);
235
+ return !meta.orgId || meta.orgId === activeOrgId;
236
+ });
188
237
  return Promise.all(
189
238
  resources.map((resource) =>
190
239
  resourceToAutomationItem(event, userEmail, resource),
@@ -204,18 +253,29 @@ export async function setAutomationEnabledForOwner(
204
253
  }
205
254
 
206
255
  const path = normalizeAutomationPath(input);
256
+ const activeOrgId = await getOrgContext(event)
257
+ .then((context) => context.orgId)
258
+ .catch(() => null);
259
+ const activeOrgOwner = activeOrgId
260
+ ? organizationResourceOwner(activeOrgId)
261
+ : null;
207
262
  const requestedOwner =
208
- input.owner === SHARED_OWNER ? SHARED_OWNER : userEmail;
263
+ input.owner === SHARED_OWNER
264
+ ? SHARED_OWNER
265
+ : input.owner === activeOrgOwner
266
+ ? activeOrgOwner
267
+ : userEmail;
209
268
  const resource = await resourceGetByPath(requestedOwner, path);
210
269
  if (!resource) {
211
270
  throw Object.assign(new Error("Automation not found"), { statusCode: 404 });
212
271
  }
213
272
 
214
- const { meta, body } = parseTriggerFrontmatter(resource.content);
273
+ const parsed = parseJobResource(resource.content);
274
+ const meta = asTriggerFrontmatter(parsed.meta);
215
275
  const allowed = await currentUserCanUpdateAutomation(
216
276
  event,
217
277
  userEmail,
218
- resource.owner,
278
+ resource,
219
279
  meta,
220
280
  );
221
281
  if (!allowed) {
@@ -225,26 +285,23 @@ export async function setAutomationEnabledForOwner(
225
285
  );
226
286
  }
227
287
 
228
- meta.enabled = input.enabled;
288
+ parsed.meta.enabled = input.enabled;
229
289
  if (
230
- meta.enabled &&
290
+ parsed.meta.enabled &&
231
291
  meta.triggerType !== "event" &&
232
292
  meta.schedule &&
233
293
  isValidCron(meta.schedule)
234
294
  ) {
235
- meta.nextRun = nextOccurrence(meta.schedule).toISOString();
295
+ parsed.meta.nextRun = nextOccurrence(meta.schedule).toISOString();
236
296
  }
237
297
 
238
- await resourcePut(
239
- resource.owner,
240
- resource.path,
241
- buildTriggerContent(meta, body),
242
- );
298
+ const updatedContent = buildJobResourceContent(parsed.meta, parsed.body);
299
+ await resourcePut(resource.owner, resource.path, updatedContent);
243
300
  await refreshEventSubscriptions();
244
301
 
245
302
  return resourceToAutomationItem(event, userEmail, {
246
303
  ...resource,
247
- content: buildTriggerContent(meta, body),
304
+ content: updatedContent,
248
305
  });
249
306
  }
250
307
 
@@ -6,15 +6,15 @@
6
6
  * cron scheduler and dispatched by the event bus instead.
7
7
  */
8
8
 
9
- export interface TriggerFrontmatter {
10
- schedule: string;
11
- enabled: boolean;
9
+ import type {
10
+ JobExecutionMode,
11
+ JobFrontmatter,
12
+ JobTriggerType,
13
+ } from "../jobs/frontmatter.js";
14
+
15
+ export interface TriggerFrontmatter extends JobFrontmatter {
12
16
  /** "schedule" = cron-based (legacy jobs). "event" = fires on bus event. */
13
- triggerType: "schedule" | "event";
14
- /** For event triggers: the event name to subscribe to. */
15
- event?: string;
16
- /** Natural-language condition evaluated by Haiku before dispatch. */
17
- condition?: string;
17
+ triggerType: JobTriggerType;
18
18
  /**
19
19
  * "agentic" = full runAgentLoop; the only mode `manage-automations` will
20
20
  * define/update going forward. "deterministic" was removed from the
@@ -22,21 +22,7 @@ export interface TriggerFrontmatter {
22
22
  * before the removal may still carry it, and the dispatcher's
23
23
  * warn-and-skip branch keeps them inert by design — do not make them fire.
24
24
  */
25
- mode: "agentic" | "deterministic";
26
- /** Domain tag for filtering in per-template UIs. */
27
- domain?: string;
28
- /**
29
- * Optional application-owned policy id carried into actions by the trusted
30
- * trigger dispatcher. It is not model-supplied action input.
31
- */
32
- delegatedPolicyId?: string;
33
- createdBy?: string;
34
- orgId?: string;
35
- runAs?: "creator" | "shared";
36
- lastRun?: string;
37
- lastStatus?: "success" | "error" | "running" | "skipped";
38
- lastError?: string;
39
- nextRun?: string;
25
+ mode: JobExecutionMode;
40
26
  }
41
27
 
42
28
  export interface TriggerDispatchContext {
@@ -117,6 +117,11 @@ in the moment of agent use.
117
117
  missing-secret states, OAuth grants, and provider connection health.
118
118
  - **Agent UX kit**: sidebar, composer, staged context, mentions, voice, human
119
119
  approval, generative UI, progress, and screen-state exposure.
120
+ - **Custom block kit**: optional extension creation, viewer chrome, slots, and
121
+ promotion affordances. Apps must opt in; Core keeps the sandbox, SQL storage,
122
+ access checks, and compatibility routes, while Toolkit owns reusable adoption
123
+ UI. Analytics may expose this as one-off **Custom Blocks**; durable behavior
124
+ should be promoted to app code.
120
125
  - **Chat history kit**: presentational chat lists and recent-chat rails belong
121
126
  in Toolkit; Core keeps thread persistence, agent execution, transport, and
122
127
  page-to-sidebar handoff. Use Toolkit's `ChatHistoryRail` for the standard
@@ -28,12 +28,13 @@ import {
28
28
  async function syncToCollab(
29
29
  dashboardId: string,
30
30
  config: Record<string, unknown>,
31
+ requestSource?: string,
31
32
  ): Promise<void> {
32
33
  const docId = `dash-${dashboardId}`;
33
34
  const configStr = JSON.stringify(config);
34
35
  try {
35
36
  if (await hasCollabState(docId)) {
36
- await applyText(docId, configStr, "content", "agent");
37
+ await applyText(docId, configStr, "content", requestSource);
37
38
  } else {
38
39
  await seedFromText(docId, configStr);
39
40
  }
@@ -137,7 +138,7 @@ export default defineAction({
137
138
  height: 760,
138
139
  }),
139
140
  },
140
- run: async (args) => {
141
+ run: async (args, actionContext) => {
141
142
  const email = getRequestUserEmail();
142
143
  if (!email) throw new Error("no authenticated user");
143
144
  const ctx = { email, orgId: getRequestOrgId() || null };
@@ -242,7 +243,11 @@ export default defineAction({
242
243
  return { kind: existing.kind, body: computed.mergedConfig };
243
244
  },
244
245
  );
245
- await syncToCollab(targetId, saved.config as Record<string, unknown>);
246
+ await syncToCollab(
247
+ targetId,
248
+ saved.config as Record<string, unknown>,
249
+ actionContext?.caller === "frontend" ? undefined : "agent",
250
+ );
246
251
  savedTitle = saved.title;
247
252
  }
248
253
 
@@ -315,7 +320,11 @@ export default defineAction({
315
320
  dashboardConfig,
316
321
  ctx,
317
322
  );
318
- await syncToCollab(dashboardId, dashboardConfig);
323
+ await syncToCollab(
324
+ dashboardId,
325
+ dashboardConfig,
326
+ actionContext?.caller === "frontend" ? undefined : "agent",
327
+ );
319
328
 
320
329
  return {
321
330
  templateId: entry.id,
@@ -22,12 +22,13 @@ function resolveScope() {
22
22
  async function syncToCollab(
23
23
  dashboardId: string,
24
24
  config: Record<string, unknown>,
25
+ requestSource?: string,
25
26
  ): Promise<void> {
26
27
  const docId = `dash-${dashboardId}`;
27
28
  const configStr = JSON.stringify(config);
28
29
  try {
29
30
  if (await hasCollabState(docId)) {
30
- await applyText(docId, configStr, "content", "agent");
31
+ await applyText(docId, configStr, "content", requestSource);
31
32
  } else {
32
33
  await seedFromText(docId, configStr);
33
34
  }
@@ -42,7 +43,7 @@ export default defineAction({
42
43
  id: z.string().describe("The dashboard ID to rename"),
43
44
  name: z.string().describe("The new dashboard name"),
44
45
  }),
45
- run: async (args) => {
46
+ run: async (args, actionContext) => {
46
47
  const name = args.name.trim();
47
48
  if (!name) throw new Error("name is required");
48
49
 
@@ -53,7 +54,11 @@ export default defineAction({
53
54
  const updated = await upsertDashboardWithRetry(args.id, ctx, (existing) => {
54
55
  return { kind: existing.kind, body: { ...existing.config, name } };
55
56
  });
56
- await syncToCollab(args.id, updated.config);
57
+ await syncToCollab(
58
+ args.id,
59
+ updated.config,
60
+ actionContext?.caller === "frontend" ? undefined : "agent",
61
+ );
57
62
  return { id: updated.id, name: updated.title };
58
63
  },
59
64
  });
@@ -22,13 +22,14 @@ function resolveScope() {
22
22
  async function syncToCollab(
23
23
  dashboardId: string,
24
24
  config: Record<string, unknown>,
25
+ requestSource?: string,
25
26
  ): Promise<void> {
26
27
  const docId = `dash-${dashboardId}`;
27
28
  const configStr = JSON.stringify(config);
28
29
  try {
29
30
  const exists = await hasCollabState(docId);
30
31
  if (exists) {
31
- await applyText(docId, configStr, "content", "agent");
32
+ await applyText(docId, configStr, "content", requestSource);
32
33
  } else {
33
34
  await seedFromText(docId, configStr);
34
35
  }
@@ -49,7 +50,7 @@ export default defineAction({
49
50
  .describe("The dashboard updatedAt value observed before this restore"),
50
51
  }),
51
52
  http: { method: "POST" },
52
- run: async (args) => {
53
+ run: async (args, actionContext) => {
53
54
  const restored = await restoreDashboardRevision(
54
55
  args.dashboardId,
55
56
  args.revisionId,
@@ -62,7 +63,11 @@ export default defineAction({
62
63
  );
63
64
  }
64
65
  const { dashboard, snapshotRevisionId } = restored;
65
- await syncToCollab(dashboard.id, dashboard.config);
66
+ await syncToCollab(
67
+ dashboard.id,
68
+ dashboard.config,
69
+ actionContext?.caller === "frontend" ? undefined : "agent",
70
+ );
66
71
  return {
67
72
  id: dashboard.id,
68
73
  kind: dashboard.kind,
@@ -544,13 +544,14 @@ function opCanChangePanelSql(op: JsonOp): boolean {
544
544
  async function syncToCollab(
545
545
  dashboardId: string,
546
546
  config: Record<string, unknown>,
547
+ requestSource?: string,
547
548
  ): Promise<void> {
548
549
  const docId = `dash-${dashboardId}`;
549
550
  const configStr = JSON.stringify(config);
550
551
  try {
551
552
  const exists = await hasCollabState(docId);
552
553
  if (exists) {
553
- await applyText(docId, configStr, "content", "agent");
554
+ await applyText(docId, configStr, "content", requestSource);
554
555
  } else {
555
556
  await seedFromText(docId, configStr);
556
557
  }
@@ -559,6 +560,10 @@ async function syncToCollab(
559
560
  }
560
561
  }
561
562
 
563
+ function isAgentCaller(caller: string | undefined): boolean {
564
+ return caller === "tool" || caller === "mcp" || caller === "a2a";
565
+ }
566
+
562
567
  // Reads + writes now go through the SQL-backed dashboards store, which
563
568
  // lazy-migrates legacy settings keys on first access. See
564
569
  // `server/lib/dashboards-store.ts`.
@@ -614,7 +619,7 @@ export default defineAction({
614
619
  height: 680,
615
620
  }),
616
621
  },
617
- run: async (args) => {
622
+ run: async (args, actionContext) => {
618
623
  const dashboardId = resolveDashboardId(args);
619
624
  const modeCount = [args.ops, args.panelOrder, args.config].filter(
620
625
  (value) => value !== undefined,
@@ -638,7 +643,11 @@ export default defineAction({
638
643
  const sqlError = await validatePanelSql(args.config);
639
644
  if (sqlError) throw new Error(sqlError);
640
645
  await upsertDashboard(dashboardId, "sql", args.config, ctx);
641
- await syncToCollab(dashboardId, args.config);
646
+ await syncToCollab(
647
+ dashboardId,
648
+ args.config,
649
+ isAgentCaller(actionContext?.caller) ? "agent" : undefined,
650
+ );
642
651
  const panelCount = countPanels(args.config);
643
652
  return dashboardResult(
644
653
  dashboardId,
@@ -667,7 +676,11 @@ export default defineAction({
667
676
  },
668
677
  );
669
678
  const root = saved.config as Record<string, unknown>;
670
- await syncToCollab(dashboardId, root);
679
+ await syncToCollab(
680
+ dashboardId,
681
+ root,
682
+ isAgentCaller(actionContext?.caller) ? "agent" : undefined,
683
+ );
671
684
  return dashboardResult(
672
685
  dashboardId,
673
686
  root,
@@ -709,7 +722,11 @@ export default defineAction({
709
722
  },
710
723
  );
711
724
  const root = saved.config as Record<string, unknown>;
712
- await syncToCollab(dashboardId, root);
725
+ await syncToCollab(
726
+ dashboardId,
727
+ root,
728
+ isAgentCaller(actionContext?.caller) ? "agent" : undefined,
729
+ );
713
730
 
714
731
  const panelCount = countPanels(root);
715
732
  return dashboardResult(
@@ -1,10 +1,16 @@
1
1
  import type { ComponentProps } from "react";
2
2
 
3
3
  import { Skeleton } from "@/components/ui/skeleton";
4
+ import { cn } from "@/lib/utils";
4
5
 
5
6
  export function DashboardPanelSkeleton({
6
7
  className,
7
8
  ...props
8
9
  }: ComponentProps<typeof Skeleton>) {
9
- return <Skeleton {...props} className={className} />;
10
+ return (
11
+ <Skeleton
12
+ {...props}
13
+ className={cn("analytics-dashboard-panel-skeleton", className)}
14
+ />
15
+ );
10
16
  }
@@ -1,6 +1,4 @@
1
- import { agentNativePath } from "@agent-native/core/client/api-path";
2
1
  import { ChangelogDialog } from "@agent-native/core/client/changelog";
3
- import { extensionPath } from "@agent-native/core/client/extensions";
4
2
  import { callAction, useChangeVersions } from "@agent-native/core/client/hooks";
5
3
  import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
6
4
  import { useOrgRole } from "@agent-native/core/client/org";
@@ -75,12 +73,6 @@ interface ExplorerDashboard {
75
73
  hiddenAt?: string | null;
76
74
  }
77
75
 
78
- interface ExtensionSearchItem {
79
- id: string;
80
- name: string;
81
- description?: string;
82
- }
83
-
84
76
  const defaultTools = [
85
77
  {
86
78
  id: "agents",
@@ -258,32 +250,6 @@ async function fetchSqlDashboards(
258
250
  );
259
251
  }
260
252
 
261
- async function fetchExtensions(): Promise<ExtensionSearchItem[]> {
262
- const res = await fetch(agentNativePath("/_agent-native/extensions"));
263
- if (!res.ok) throw new Error(`Failed to load extensions (${res.status})`);
264
- const data = await res.json();
265
- return uniqueCommandItems(
266
- (Array.isArray(data) ? data : [])
267
- .filter((extension: any) => {
268
- return (
269
- extension &&
270
- typeof extension.id === "string" &&
271
- extension.id.length > 0 &&
272
- typeof extension.name === "string" &&
273
- extension.name.trim().length > 0
274
- );
275
- })
276
- .map((extension: any) => ({
277
- id: extension.id,
278
- name: extension.name,
279
- description:
280
- typeof extension.description === "string"
281
- ? extension.description
282
- : undefined,
283
- })),
284
- );
285
- }
286
-
287
253
  function persistThemePreference(theme: "light" | "dark") {
288
254
  callAction("set-theme", { theme }).catch(() => {});
289
255
  }
@@ -334,33 +300,21 @@ export function CommandPalette() {
334
300
  placeholderData: (prev) => prev,
335
301
  });
336
302
 
337
- const extensionsQuery = useQuery<ExtensionSearchItem[]>({
338
- queryKey: ["extensions"],
339
- queryFn: fetchExtensions,
340
- staleTime: 30_000,
341
- enabled: open,
342
- placeholderData: (prev) => prev,
343
- });
344
-
345
303
  const savedCharts = savedChartsQuery.data ?? [];
346
304
  const explorerDashboards = explorerDashboardsQuery.data ?? [];
347
305
  const sqlDashboards = sqlDashboardsQuery.data ?? [];
348
- const extensions = extensionsQuery.data ?? [];
349
306
  const savedChartsLoading = savedChartsQuery.isLoading;
350
307
  const explorerDashboardsLoading = explorerDashboardsQuery.isLoading;
351
308
  const sqlDashboardsLoading = sqlDashboardsQuery.isLoading;
352
- const extensionsLoading = extensionsQuery.isLoading;
353
309
  const asyncGroupsErrored =
354
310
  savedChartsQuery.isError ||
355
311
  explorerDashboardsQuery.isError ||
356
- sqlDashboardsQuery.isError ||
357
- extensionsQuery.isError;
312
+ sqlDashboardsQuery.isError;
358
313
  const retryAsyncGroups = () => {
359
314
  void Promise.all([
360
315
  savedChartsQuery.refetch(),
361
316
  explorerDashboardsQuery.refetch(),
362
317
  sqlDashboardsQuery.refetch(),
363
- extensionsQuery.refetch(),
364
318
  ]);
365
319
  };
366
320
 
@@ -400,7 +354,6 @@ export function CommandPalette() {
400
354
  const asyncGroupsLoading =
401
355
  (explorerDashboardsLoading && explorerDashboards.length === 0) ||
402
356
  (sqlDashboardsLoading && sqlDashboards.length === 0) ||
403
- (extensionsLoading && extensions.length === 0) ||
404
357
  (savedChartsLoading && savedCharts.length === 0);
405
358
  const showHiddenResults = searchQuery.trim().length > 0;
406
359
  const visibleExplorerDashboards = showHiddenResults
@@ -517,32 +470,6 @@ export function CommandPalette() {
517
470
  </CommandGroup>
518
471
  )}
519
472
 
520
- {extensions.length > 0 && (
521
- <CommandGroup
522
- key="extensions"
523
- heading={t("commandPalette.groupExtensions")}
524
- >
525
- {extensions.map((extension) => (
526
- <CommandItem
527
- key={`extension-${extension.id}`}
528
- value={`extension:${extension.id}:${extension.name}`}
529
- onSelect={() =>
530
- go(extensionPath(extension.id, extension.name))
531
- }
532
- keywords={commandPaletteKeywords(
533
- extension.name,
534
- extension.description,
535
- "extension",
536
- "tool",
537
- )}
538
- >
539
- <IconTool className="me-2 h-4 w-4 text-muted-foreground" />
540
- {extension.name}
541
- </CommandItem>
542
- ))}
543
- </CommandGroup>
544
- )}
545
-
546
473
  <CommandGroup
547
474
  key="dashboards"
548
475
  heading={t("commandPalette.groupDashboards")}
@@ -735,14 +662,6 @@ export function CommandPalette() {
735
662
  />
736
663
  )}
737
664
 
738
- {extensionsLoading && extensions.length === 0 && (
739
- <CommandLoadingGroup
740
- key="extensions-loading"
741
- heading={t("commandPalette.groupExtensions")}
742
- rows={3}
743
- />
744
- )}
745
-
746
665
  {savedChartsLoading && savedCharts.length === 0 && (
747
666
  <CommandLoadingGroup
748
667
  key="saved-charts-loading"
@@ -12,14 +12,14 @@ import {
12
12
 
13
13
  const DASHBOARD_CONTEXT =
14
14
  "The user wants to create a new analytics dashboard. " +
15
- 'DASHBOARD ARTIFACT RULE — Dashboards are the only user-facing Analytics artifact. For deep dives, saved reports, custom visualizations, or bespoke workflows, always create or update a dashboard. If bespoke UI is needed, create the extension and immediately add it as one or more `chartType: "extension"` panels in that dashboard; never leave the extension standalone or direct the user to an Extensions page. ' +
15
+ "DASHBOARD ARTIFACT RULE — Dashboards are the only user-facing Analytics artifact. Build with native dashboard panels and Data Programs first. A sandboxed extension is presented only as a dashboard-scoped Custom Block, never as a separate Analytics result. Create one only when the user explicitly wants a genuinely bespoke, one-off visualization or interaction for this dashboard and native panels cannot represent it faithfully. If the behavior should be reused across dashboards/users or added natively, call `connect-builder` instead. " +
16
16
  "TEMPLATE FIRST — If the user names an existing dashboard as a template to clone/base this on, resolve its id first (use `list-sql-dashboards` if you only have a title), then call `get-sql-dashboard` with `includeConfig: true` immediately and inspect `panels[].chartType`. " +
17
- 'If any panel is `chartType: "extension"`, this is an extension-backed dashboard: call `get-extension` for that panel\'s `config.extensionId`, clone/adapt it with `create-extension` (apply the requested customer/org filters), then save a new dashboard via `update-dashboard` that embeds the new extension panel (`chartType: "extension"`, `config.extensionId`). Do not rebuild an extension template as guessed SQL/BigQuery panels. ' +
17
+ 'If an explicitly named template already contains a `chartType: "extension"` Custom Block, call `get-extension` for that panel\'s `config.extensionId`, clone/adapt it with `create-extension` (apply the requested customer/org filters), then save a new dashboard via `update-dashboard` that embeds the cloned block. Preserve or add `config.customBlock` provenance with `authoredBy: "agent"`, `intent: "one-off"`, `scope: "dashboard"`, and a categorical `nativeGapReason`; never put prompt/customer text in that metadata. Do not rebuild an existing Custom Block as guessed SQL/BigQuery panels. ' +
18
18
  "LARGE EXTENSION CLONE — Extension bodies can be very large (tens of thousands of characters). Call `get-extension` with `forceContent: true` exactly ONCE and reuse that body; a second same-run read intentionally omits `content` (you'll see `contentOmitted`), so don't treat that as the content being gone. Call `create-extension` / `update-extension` as NATIVE tools — they are mutating actions and cannot be invoked from `run-code`/`appAction`. For customer-specific clones, change only the small static config block (e.g. `ACCOUNT_USAGE_STATIC`) and prefer a focused `update-extension` edit over regenerating the whole HTML. Never shovel the full body through `run-code` or chat; if you stage it in a workspace scratch file, read it back with `workspaceRead` (which returns the whole file). " +
19
19
  "REAL_DATA_REQUIRED: before presenting numbers or authoring new SQL that invents tables/columns/filters, run at least one real data-source query action; `data-source-status`, `list-data-dictionary`, `get-sql-dashboard`, `get-extension`, `update-dashboard`, `mutate-dashboard`, and dry-run validation do not count as data queries. It is OK to inspect a template, clone an extension shell, ask one clarifying question (org id / account filter), or report an exact unavailable/error result without running a data query, as long as you do not invent metrics. " +
20
20
  "The `demo` source is reserved for the built-in Node Exporter demo and does not satisfy REAL_DATA_REQUIRED unless the user explicitly asks to work on that demo dashboard. " +
21
21
  "If no source can answer, report the exact unavailable/error result instead of saving a dashboard with guessed schema or metrics. " +
22
- "SQL PANELS — Only for native SQL dashboards (not template clones of an extension-backed dashboard): create a SQL-driven dashboard by calling the `update-dashboard` action with `dashboardId` and `config`. " +
22
+ "NATIVE PANELS — Create a SQL-driven dashboard by calling the `update-dashboard` action with `dashboardId` and `config`; use a Data Program first when reusable fetching or transformation is the missing layer. " +
23
23
  "The config shape is: { name: string, panels: [{ id, title, sql, source, chartType, width, tab?, config? }] }. " +
24
24
  "Each panel needs: id (unique string), title, sql (the query), source ('bigquery' | 'ga4' | 'amplitude' | 'first-party' | 'demo' | 'prometheus'), " +
25
25
  "chartType ('line' | 'area' | 'bar' | 'metric' | 'table' | 'pie'), width (1 or 2). " +
@@ -29,7 +29,7 @@ const DASHBOARD_CONTEXT =
29
29
  "For the built-in demo dashboard, source is 'demo' and sql uses the same Prometheus JSON descriptor shape as source 'prometheus': { promql, mode, range, step }. " +
30
30
  "Call `data-source-status` if you need to see which data sources are connected. " +
31
31
  "Refer to AGENTS.md, .agents/skills, the data dictionary, and connected data-source instructions for SQL patterns and table names. " +
32
- "NO code files need to be created only the dashboard config JSON via `update-dashboard`. " +
32
+ "Do not create code files for an ordinary native dashboard. Use `connect-builder` only for an explicitly reusable/native code request. " +
33
33
  "After saving, call the `navigate` action with view='adhoc' and dashboardId so the new dashboard opens immediately.";
34
34
 
35
35
  export function NewDashboardDialog() {