@agent-native/core 0.130.1 → 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 (909) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +57 -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/email-template.ts +43 -13
  66. package/corpus/core/src/server/google-oauth.ts +21 -1
  67. package/corpus/core/src/server/onboarding-html.ts +18 -0
  68. package/corpus/core/src/server/prompts/framework-core-compact.ts +3 -3
  69. package/corpus/core/src/server/prompts/framework-core.ts +3 -3
  70. package/corpus/core/src/server/prompts/shared-rules.ts +3 -3
  71. package/corpus/core/src/settings/index.ts +1 -0
  72. package/corpus/core/src/shared/analytics-anonymous-id.ts +35 -0
  73. package/corpus/core/src/sharing/actions/share-resource.ts +26 -4
  74. package/corpus/core/src/sharing/index.ts +1 -0
  75. package/corpus/core/src/sharing/registry.ts +23 -0
  76. package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  77. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +26 -0
  78. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +28 -0
  79. package/corpus/core/src/templates/default/app/i18n/en-US.ts +27 -0
  80. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +28 -0
  81. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +28 -0
  82. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +25 -0
  83. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +27 -0
  84. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +27 -0
  85. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +27 -0
  86. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +24 -0
  87. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +24 -0
  88. package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  89. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  90. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +10 -7
  91. package/corpus/core/src/templates/workspace-core/.agents/skills/automations/SKILL.md +53 -8
  92. package/corpus/core/src/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +131 -0
  93. package/corpus/core/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +13 -4
  94. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +23 -15
  95. package/corpus/core/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +33 -18
  96. package/corpus/core/src/tracking/providers.ts +1 -0
  97. package/corpus/core/src/tracking/registry.ts +2 -1
  98. package/corpus/core/src/tracking/types.ts +1 -0
  99. package/corpus/core/src/triggers/actions/list-automations.ts +43 -44
  100. package/corpus/core/src/triggers/actions/manage-automation.ts +17 -48
  101. package/corpus/core/src/triggers/actions.ts +218 -127
  102. package/corpus/core/src/triggers/dispatcher.ts +181 -367
  103. package/corpus/core/src/triggers/routes.ts +84 -27
  104. package/corpus/core/src/triggers/types.ts +9 -23
  105. package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  106. package/corpus/templates/analytics/actions/install-dashboard-template.ts +13 -4
  107. package/corpus/templates/analytics/actions/rename-dashboard.ts +8 -3
  108. package/corpus/templates/analytics/actions/restore-dashboard-revision.ts +8 -3
  109. package/corpus/templates/analytics/actions/update-dashboard.ts +22 -5
  110. package/corpus/templates/analytics/app/components/dashboard/DashboardPanelSkeleton.tsx +7 -1
  111. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +1 -82
  112. package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +4 -4
  113. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +23 -13
  114. package/corpus/templates/analytics/app/global.css +21 -0
  115. package/corpus/templates/analytics/app/i18n-data.ts +165 -101
  116. package/corpus/templates/analytics/app/lib/custom-block-promotion.ts +62 -0
  117. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +17 -2
  118. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +3 -1
  119. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +77 -12
  120. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-save-queue.ts +34 -0
  121. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +42 -26
  122. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +15 -0
  123. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +1 -1
  124. package/corpus/templates/analytics/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
  125. package/corpus/templates/analytics/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-the-dashboard.md +6 -0
  126. package/corpus/templates/analytics/changelog/2026-07-29-custom-dashboard-blocks-now-identify-one-off-agent-patches-a.md +6 -0
  127. package/corpus/templates/analytics/changelog/2026-07-29-dashboard-chart-deletions-now-save-in-order-so-removed-rows-.md +6 -0
  128. package/corpus/templates/analytics/changelog/2026-07-29-dashboard-chart-loaders-are-easier-to-see-and-animate-more-s.md +6 -0
  129. package/corpus/templates/analytics/changelog/2026-07-29-plan-mode-can-now-query-connected-analytics-sources-while-ke.md +6 -0
  130. package/corpus/templates/analytics/changelog/2026-07-29-plan-mode-can-use-clips-as-read-only-prompt-context.md +6 -0
  131. package/corpus/templates/analytics/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  132. package/corpus/templates/analytics/changelog/2026-07-29-signup-entry-pages-now-show-the-first-page-viewed-before-eac.md +6 -0
  133. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +26 -1
  134. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +0 -33
  135. package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +13 -3
  136. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +9 -1
  137. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +44 -1
  138. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +96 -16
  139. package/corpus/templates/analytics/server/plugins/agent-chat.ts +18 -27
  140. package/corpus/templates/analytics/server/plugins/core-routes.ts +1 -0
  141. package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  142. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +4 -8
  143. package/corpus/templates/assets/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
  144. package/corpus/templates/assets/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-the-workspace.md +6 -0
  145. package/corpus/templates/assets/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  146. package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  147. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +3 -7
  148. package/corpus/templates/brain/app/root.tsx +0 -3
  149. package/corpus/templates/brain/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
  150. package/corpus/templates/brain/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-ask-brain.md +6 -0
  151. package/corpus/templates/brain/changelog/2026-07-29-extensions-are-no-longer-shown-as-a-default-command-menu-des.md +6 -0
  152. package/corpus/templates/brain/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  153. package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  154. package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +25 -5
  155. package/corpus/templates/calendar/AGENTS.md +5 -0
  156. package/corpus/templates/calendar/actions/create-event.ts +43 -13
  157. package/corpus/templates/calendar/actions/event-action-helpers.ts +131 -1
  158. package/corpus/templates/calendar/actions/manage-event-draft.ts +65 -2
  159. package/corpus/templates/calendar/app/components/calendar/CreateEventDialog.tsx +437 -258
  160. package/corpus/templates/calendar/app/components/calendar/DayView.tsx +19 -3
  161. package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +24 -0
  162. package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +15 -2
  163. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +1 -5
  164. package/corpus/templates/calendar/app/hooks/use-events.ts +44 -5
  165. package/corpus/templates/calendar/app/i18n-data.ts +50 -0
  166. package/corpus/templates/calendar/app/lib/all-day-layout.ts +9 -2
  167. package/corpus/templates/calendar/app/lib/event-form-initialization.ts +4 -8
  168. package/corpus/templates/calendar/app/lib/event-form-utils.ts +30 -8
  169. package/corpus/templates/calendar/app/lib/location-suggestions.ts +36 -0
  170. package/corpus/templates/calendar/app/lib/out-of-office.ts +87 -1
  171. package/corpus/templates/calendar/app/pages/CalendarView.tsx +68 -13
  172. package/corpus/templates/calendar/changelog/2026-07-26-out-of-office-events-now-default-to-full-days-with-a-ready.md +6 -0
  173. package/corpus/templates/calendar/changelog/2026-07-29-recent-calendar-locations-now-appear-as-address-suggestions-.md +6 -0
  174. package/corpus/templates/calendar/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  175. package/corpus/templates/calendar/server/lib/find-time.ts +29 -5
  176. package/corpus/templates/calendar/shared/api.ts +2 -0
  177. package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  178. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +1 -5
  179. package/corpus/templates/chat/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  180. package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  181. package/corpus/templates/clips/app/components/editor/editor-toolbar.tsx +3 -1
  182. package/corpus/templates/clips/app/components/library/library-layout.tsx +2 -6
  183. package/corpus/templates/clips/app/components/meetings/day-header.tsx +1 -1
  184. package/corpus/templates/clips/app/components/meetings/transcript-bubbles.tsx +1 -22
  185. package/corpus/templates/clips/app/components/workspace/branding-editor.tsx +26 -1
  186. package/corpus/templates/clips/app/components/workspace/organization-identity-card.tsx +107 -0
  187. package/corpus/templates/clips/app/i18n/en-US.ts +3 -4
  188. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +0 -10
  189. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +23 -51
  190. package/corpus/templates/clips/app/routes/share.meeting.$meetingId.tsx +1 -8
  191. package/corpus/templates/clips/changelog/2026-07-29-clearing-all-recording-edits-no-longer-leaves-the-editor-unr.md +6 -0
  192. package/corpus/templates/clips/changelog/2026-07-29-clip-share-emails-now-open-with-who-shared-the-clip-add-a-su.md +6 -0
  193. package/corpus/templates/clips/changelog/2026-07-29-finished-meeting-pills-now-have-a-clear-close-button.md +6 -0
  194. package/corpus/templates/clips/changelog/2026-07-29-fixed-system-audio-recordings-picking-up-your-microphone-in-.md +6 -0
  195. package/corpus/templates/clips/changelog/2026-07-29-meeting-cards-no-longer-flicker-or-disappear-when-hovered-in.md +6 -0
  196. package/corpus/templates/clips/changelog/2026-07-29-organization-name-logo-brand-color-and-default-visibility-no.md +6 -0
  197. package/corpus/templates/clips/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  198. package/corpus/templates/clips/changelog/2026-07-29-the-desktop-camera-preview-now-closes-after-a-recording-fin.md +6 -0
  199. package/corpus/templates/clips/changelog/2026-07-29-transcript-lines-on-the-meeting-page-no-longer-jump-to-the-r.md +6 -0
  200. package/corpus/templates/clips/changelog/2026-07-29-when-a-meeting-wraps-up-the-recording-pill-now-shows-a-green.md +6 -0
  201. package/corpus/templates/clips/desktop/src/app.tsx +14 -15
  202. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +6 -3
  203. package/corpus/templates/clips/desktop/src/lib/bubble-session.ts +11 -0
  204. package/corpus/templates/clips/desktop/src/lib/recorder.ts +9 -4
  205. package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +11 -0
  206. package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +112 -32
  207. package/corpus/templates/clips/desktop/src/styles.css +42 -2
  208. package/corpus/templates/clips/server/db/index.ts +6 -0
  209. package/corpus/templates/clips/server/jobs/transactional-emails.ts +47 -23
  210. package/corpus/templates/clips/server/lib/share-email-hero.ts +33 -0
  211. package/corpus/templates/clips/server/lib/transactional-email-store.ts +16 -6
  212. package/corpus/templates/clips/shared/clips-ai-prefs.ts +0 -1
  213. package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  214. package/corpus/templates/content/.agents/skills/content-product-development/SKILL.md +103 -0
  215. package/corpus/templates/content/.agents/skills/content-product-development/references/verification.md +57 -0
  216. package/corpus/templates/content/AGENTS.md +2 -0
  217. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -6
  218. package/corpus/templates/content/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  219. package/corpus/templates/content/docs/product/README.md +115 -0
  220. package/corpus/templates/content/docs/product/architecture.md +98 -0
  221. package/corpus/templates/content/docs/product/capabilities/content.access.page-database.md +76 -0
  222. package/corpus/templates/content/docs/product/capabilities/content.access.row-private.md +75 -0
  223. package/corpus/templates/content/docs/product/capabilities/content.access.safe-aggregate.md +75 -0
  224. package/corpus/templates/content/docs/product/capabilities/content.access.visibility-closure.md +79 -0
  225. package/corpus/templates/content/docs/product/capabilities/content.action.button.md +67 -0
  226. package/corpus/templates/content/docs/product/capabilities/content.agent.action-parity.md +73 -0
  227. package/corpus/templates/content/docs/product/capabilities/content.agent.audience-safe.md +91 -0
  228. package/corpus/templates/content/docs/product/capabilities/content.agent.automation.md +67 -0
  229. package/corpus/templates/content/docs/product/capabilities/content.agent.expression-authoring.md +71 -0
  230. package/corpus/templates/content/docs/product/capabilities/content.agent.presence.md +103 -0
  231. package/corpus/templates/content/docs/product/capabilities/content.agent.resource-consent.md +90 -0
  232. package/corpus/templates/content/docs/product/capabilities/content.agent.skill-catalog.md +67 -0
  233. package/corpus/templates/content/docs/product/capabilities/content.api.cms.md +70 -0
  234. package/corpus/templates/content/docs/product/capabilities/content.author.code.md +71 -0
  235. package/corpus/templates/content/docs/product/capabilities/content.author.document-editor.md +71 -0
  236. package/corpus/templates/content/docs/product/capabilities/content.author.footnotes.md +71 -0
  237. package/corpus/templates/content/docs/product/capabilities/content.author.math.md +71 -0
  238. package/corpus/templates/content/docs/product/capabilities/content.author.media.md +71 -0
  239. package/corpus/templates/content/docs/product/capabilities/content.author.mermaid.md +71 -0
  240. package/corpus/templates/content/docs/product/capabilities/content.automation.scheduled.md +67 -0
  241. package/corpus/templates/content/docs/product/capabilities/content.capture.enrich.md +75 -0
  242. package/corpus/templates/content/docs/product/capabilities/content.command.fabric.md +67 -0
  243. package/corpus/templates/content/docs/product/capabilities/content.comment.page-owned.md +75 -0
  244. package/corpus/templates/content/docs/product/capabilities/content.diff.ai-assist.md +75 -0
  245. package/corpus/templates/content/docs/product/capabilities/content.diff.filtered-review.md +79 -0
  246. package/corpus/templates/content/docs/product/capabilities/content.diff.in-place.md +80 -0
  247. package/corpus/templates/content/docs/product/capabilities/content.discussion.page.md +80 -0
  248. package/corpus/templates/content/docs/product/capabilities/content.embed.host-grant.md +70 -0
  249. package/corpus/templates/content/docs/product/capabilities/content.embed.mcp-app.md +69 -0
  250. package/corpus/templates/content/docs/product/capabilities/content.embed.surface.md +74 -0
  251. package/corpus/templates/content/docs/product/capabilities/content.event.committed.md +85 -0
  252. package/corpus/templates/content/docs/product/capabilities/content.expression.cached-result.md +71 -0
  253. package/corpus/templates/content/docs/product/capabilities/content.expression.catalog.md +71 -0
  254. package/corpus/templates/content/docs/product/capabilities/content.expression.language.md +76 -0
  255. package/corpus/templates/content/docs/product/capabilities/content.feedback.signal.md +67 -0
  256. package/corpus/templates/content/docs/product/capabilities/content.form.shared-engine.md +72 -0
  257. package/corpus/templates/content/docs/product/capabilities/content.history.queryable.md +79 -0
  258. package/corpus/templates/content/docs/product/capabilities/content.home.global.md +80 -0
  259. package/corpus/templates/content/docs/product/capabilities/content.job.durable.md +76 -0
  260. package/corpus/templates/content/docs/product/capabilities/content.knowledge.graph.md +67 -0
  261. package/corpus/templates/content/docs/product/capabilities/content.knowledge.links.md +67 -0
  262. package/corpus/templates/content/docs/product/capabilities/content.knowledge.search.md +67 -0
  263. package/corpus/templates/content/docs/product/capabilities/content.layout.responsive.md +80 -0
  264. package/corpus/templates/content/docs/product/capabilities/content.navigation.sidebar.md +86 -0
  265. package/corpus/templates/content/docs/product/capabilities/content.notification.source.md +71 -0
  266. package/corpus/templates/content/docs/product/capabilities/content.object.block.md +76 -0
  267. package/corpus/templates/content/docs/product/capabilities/content.object.blocks-field.md +79 -0
  268. package/corpus/templates/content/docs/product/capabilities/content.object.database.md +92 -0
  269. package/corpus/templates/content/docs/product/capabilities/content.object.multi-membership.md +75 -0
  270. package/corpus/templates/content/docs/product/capabilities/content.object.page.md +76 -0
  271. package/corpus/templates/content/docs/product/capabilities/content.object.reference.md +75 -0
  272. package/corpus/templates/content/docs/product/capabilities/content.object.transclusion.md +75 -0
  273. package/corpus/templates/content/docs/product/capabilities/content.organization.teams.md +71 -0
  274. package/corpus/templates/content/docs/product/capabilities/content.portability.pdf-export.md +78 -0
  275. package/corpus/templates/content/docs/product/capabilities/content.portability.roundtrip.md +154 -0
  276. package/corpus/templates/content/docs/product/capabilities/content.portability.source-representation.md +70 -0
  277. package/corpus/templates/content/docs/product/capabilities/content.portability.vault-export.md +80 -0
  278. package/corpus/templates/content/docs/product/capabilities/content.presentation.mode.md +76 -0
  279. package/corpus/templates/content/docs/product/capabilities/content.preset.catalog.md +71 -0
  280. package/corpus/templates/content/docs/product/capabilities/content.property.actor.md +75 -0
  281. package/corpus/templates/content/docs/product/capabilities/content.property.catalog.md +76 -0
  282. package/corpus/templates/content/docs/product/capabilities/content.property.constraints.md +75 -0
  283. package/corpus/templates/content/docs/product/capabilities/content.property.guarded-change.md +76 -0
  284. package/corpus/templates/content/docs/product/capabilities/content.property.location.md +71 -0
  285. package/corpus/templates/content/docs/product/capabilities/content.property.typed.md +71 -0
  286. package/corpus/templates/content/docs/product/capabilities/content.publish.public.md +75 -0
  287. package/corpus/templates/content/docs/product/capabilities/content.publish.reading.md +74 -0
  288. package/corpus/templates/content/docs/product/capabilities/content.query.object.md +114 -0
  289. package/corpus/templates/content/docs/product/capabilities/content.reader.documents.md +69 -0
  290. package/corpus/templates/content/docs/product/capabilities/content.reader.surface.md +75 -0
  291. package/corpus/templates/content/docs/product/capabilities/content.relationship.edge.md +183 -0
  292. package/corpus/templates/content/docs/product/capabilities/content.renderer.artifact-block.md +71 -0
  293. package/corpus/templates/content/docs/product/capabilities/content.renderer.custom-block.md +81 -0
  294. package/corpus/templates/content/docs/product/capabilities/content.renderer.graph.md +71 -0
  295. package/corpus/templates/content/docs/product/capabilities/content.renderer.typed.md +92 -0
  296. package/corpus/templates/content/docs/product/capabilities/content.research.annotation.md +75 -0
  297. package/corpus/templates/content/docs/product/capabilities/content.research.citation.md +70 -0
  298. package/corpus/templates/content/docs/product/capabilities/content.review.code.md +67 -0
  299. package/corpus/templates/content/docs/product/capabilities/content.revision.suggestions.md +76 -0
  300. package/corpus/templates/content/docs/product/capabilities/content.rule.deterministic.md +79 -0
  301. package/corpus/templates/content/docs/product/capabilities/content.schedule.constraints.md +81 -0
  302. package/corpus/templates/content/docs/product/capabilities/content.security.private-vault.md +71 -0
  303. package/corpus/templates/content/docs/product/capabilities/content.share.views.md +140 -0
  304. package/corpus/templates/content/docs/product/capabilities/content.source.adapters.md +154 -0
  305. package/corpus/templates/content/docs/product/capabilities/content.source.builder-codec.md +70 -0
  306. package/corpus/templates/content/docs/product/capabilities/content.source.catalog.md +149 -0
  307. package/corpus/templates/content/docs/product/capabilities/content.source.file-folder.md +71 -0
  308. package/corpus/templates/content/docs/product/capabilities/content.source.local-bridge.md +156 -0
  309. package/corpus/templates/content/docs/product/capabilities/content.source.local-project.md +70 -0
  310. package/corpus/templates/content/docs/product/capabilities/content.source.page-link.md +70 -0
  311. package/corpus/templates/content/docs/product/capabilities/content.source.row-union.md +69 -0
  312. package/corpus/templates/content/docs/product/capabilities/content.source.spaces-files.md +75 -0
  313. package/corpus/templates/content/docs/product/capabilities/content.source.sync-policy.md +161 -0
  314. package/corpus/templates/content/docs/product/capabilities/content.system.dependencies.md +80 -0
  315. package/corpus/templates/content/docs/product/capabilities/content.system.my-tasks.md +75 -0
  316. package/corpus/templates/content/docs/product/capabilities/content.system.project-status.md +77 -0
  317. package/corpus/templates/content/docs/product/capabilities/content.system.research-workspace.md +80 -0
  318. package/corpus/templates/content/docs/product/capabilities/content.system.task-project.md +76 -0
  319. package/corpus/templates/content/docs/product/capabilities/content.template.governance.md +76 -0
  320. package/corpus/templates/content/docs/product/capabilities/content.template.graph.md +76 -0
  321. package/corpus/templates/content/docs/product/capabilities/content.template.item-body.md +71 -0
  322. package/corpus/templates/content/docs/product/capabilities/content.template.update.md +71 -0
  323. package/corpus/templates/content/docs/product/capabilities/content.time.types.md +85 -0
  324. package/corpus/templates/content/docs/product/capabilities/content.version.branching.md +151 -0
  325. package/corpus/templates/content/docs/product/capabilities/content.version.field-history.md +103 -0
  326. package/corpus/templates/content/docs/product/capabilities/content.view.canvas.md +94 -0
  327. package/corpus/templates/content/docs/product/capabilities/content.view.chart.md +91 -0
  328. package/corpus/templates/content/docs/product/capabilities/content.view.dynamic-create.md +137 -0
  329. package/corpus/templates/content/docs/product/capabilities/content.view.fast-capture.md +82 -0
  330. package/corpus/templates/content/docs/product/capabilities/content.view.graph.md +95 -0
  331. package/corpus/templates/content/docs/product/capabilities/content.view.grouping-aggregation.md +83 -0
  332. package/corpus/templates/content/docs/product/capabilities/content.view.map.md +77 -0
  333. package/corpus/templates/content/docs/product/capabilities/content.view.personal-state.md +99 -0
  334. package/corpus/templates/content/docs/product/capabilities/content.view.pivot.md +76 -0
  335. package/corpus/templates/content/docs/product/capabilities/content.view.query.md +106 -0
  336. package/corpus/templates/content/docs/product/capabilities/content.view.renderer-conformance.md +77 -0
  337. package/corpus/templates/content/docs/product/capabilities/content.view.scale.md +77 -0
  338. package/corpus/templates/content/docs/product/capabilities/content.view.source-query.md +159 -0
  339. package/corpus/templates/content/docs/product/capabilities/content.view.timeline.md +86 -0
  340. package/corpus/templates/content/docs/product/capabilities/content.view.tree.md +77 -0
  341. package/corpus/templates/content/docs/product/capabilities/content.workspace.multi-scope.md +80 -0
  342. package/corpus/templates/content/docs/product/capabilities/content.workspace.session-restore.md +76 -0
  343. package/corpus/templates/content/docs/product/capabilities/content.workspace.view-instance.md +76 -0
  344. package/corpus/templates/content/docs/product/capabilities/content.workspace.working-set.md +77 -0
  345. package/corpus/templates/content/docs/product/chapters/content.chapter.capture-research.md +20 -0
  346. package/corpus/templates/content/docs/product/chapters/content.chapter.connected-sources.md +20 -0
  347. package/corpus/templates/content/docs/product/chapters/content.chapter.consensus.md +19 -0
  348. package/corpus/templates/content/docs/product/chapters/content.chapter.durable-home.md +21 -0
  349. package/corpus/templates/content/docs/product/chapters/content.chapter.publishing-portability.md +21 -0
  350. package/corpus/templates/content/docs/product/chapters/content.chapter.working-systems.md +27 -0
  351. package/corpus/templates/content/docs/product/encyclopedia.md +559 -0
  352. package/corpus/templates/content/docs/product/features/content.feature.bring-your-local-work.md +39 -0
  353. package/corpus/templates/content/docs/product/features/content.feature.build-living-dashboards.md +34 -0
  354. package/corpus/templates/content/docs/product/features/content.feature.build-new-surfaces.md +33 -0
  355. package/corpus/templates/content/docs/product/features/content.feature.capture-into-action.md +34 -0
  356. package/corpus/templates/content/docs/product/features/content.feature.cite-what-you-found.md +34 -0
  357. package/corpus/templates/content/docs/product/features/content.feature.collaborate-in-context.md +59 -0
  358. package/corpus/templates/content/docs/product/features/content.feature.collect-structured-input.md +38 -0
  359. package/corpus/templates/content/docs/product/features/content.feature.connect-your-sources.md +38 -0
  360. package/corpus/templates/content/docs/product/features/content.feature.data-that-keeps-itself-right.md +45 -0
  361. package/corpus/templates/content/docs/product/features/content.feature.durable-foundations.md +48 -0
  362. package/corpus/templates/content/docs/product/features/content.feature.evolve-systems-safely.md +38 -0
  363. package/corpus/templates/content/docs/product/features/content.feature.explore-alternatives-safely.md +39 -0
  364. package/corpus/templates/content/docs/product/features/content.feature.find-your-place-again.md +40 -0
  365. package/corpus/templates/content/docs/product/features/content.feature.keep-your-private-vault-private.md +39 -0
  366. package/corpus/templates/content/docs/product/features/content.feature.living-references.md +38 -0
  367. package/corpus/templates/content/docs/product/features/content.feature.make-the-workspace-yours.md +40 -0
  368. package/corpus/templates/content/docs/product/features/content.feature.move-without-starting-over.md +38 -0
  369. package/corpus/templates/content/docs/product/features/content.feature.plan-work-across-time.md +39 -0
  370. package/corpus/templates/content/docs/product/features/content.feature.publish-with-confidence.md +43 -0
  371. package/corpus/templates/content/docs/product/features/content.feature.put-your-organizations-know-how-to-work.md +38 -0
  372. package/corpus/templates/content/docs/product/features/content.feature.read-and-annotate-anything.md +38 -0
  373. package/corpus/templates/content/docs/product/features/content.feature.review-changes-in-place.md +39 -0
  374. package/corpus/templates/content/docs/product/features/content.feature.run-projects-your-way.md +44 -0
  375. package/corpus/templates/content/docs/product/features/content.feature.see-your-information-your-way.md +44 -0
  376. package/corpus/templates/content/docs/product/features/content.feature.share-how-your-organization-works.md +38 -0
  377. package/corpus/templates/content/docs/product/features/content.feature.sketch-connections-keep-whats-true.md +39 -0
  378. package/corpus/templates/content/docs/product/features/content.feature.take-the-whole-vault-with-you.md +39 -0
  379. package/corpus/templates/content/docs/product/features/content.feature.trust-your-connected-sources.md +40 -0
  380. package/corpus/templates/content/docs/product/features/content.feature.understand-what-your-data-says.md +39 -0
  381. package/corpus/templates/content/docs/product/features/content.feature.when-this-happens-that-follows.md +43 -0
  382. package/corpus/templates/content/docs/product/features/content.feature.work-across-every-workspace.md +37 -0
  383. package/corpus/templates/content/docs/product/features/content.feature.work-on-content-inside-another-application.md +37 -0
  384. package/corpus/templates/content/docs/product/roadmap.md +878 -0
  385. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  386. package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +1 -7
  387. package/corpus/templates/crm/app/i18n/en-US.ts +4 -0
  388. package/corpus/templates/crm/app/routes/settings.tsx +33 -8
  389. package/corpus/templates/crm/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  390. package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  391. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +133 -63
  392. package/corpus/templates/design/.generated/bridge/embedded-wheel.generated.ts +19 -2
  393. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +51 -14
  394. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +41 -26
  395. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +22 -4
  396. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +216 -116
  397. package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +21 -2
  398. package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +5 -1
  399. package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbenchLoader.tsx +10 -2
  400. package/corpus/templates/design/app/components/design/code-workbench/code-workbench-shell.ts +2 -0
  401. package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +60 -55
  402. package/corpus/templates/design/app/components/design/design-canvas/content-size-report.ts +88 -2
  403. package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +3 -2
  404. package/corpus/templates/design/app/components/design/types.ts +4 -0
  405. package/corpus/templates/design/app/components/layout/Sidebar.tsx +1 -5
  406. package/corpus/templates/design/app/pages/design-editor/clipboard-layer-source.ts +28 -0
  407. package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +117 -0
  408. package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +3 -1
  409. package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +120 -74
  410. package/corpus/templates/design/app/pages/design-editor/pending-structure-verification.ts +11 -0
  411. package/corpus/templates/design/app/pages/design-editor/react-semantic-handoff.ts +2 -0
  412. package/corpus/templates/design/app/pages/design-editor/source-location.ts +1 -1
  413. package/corpus/templates/design/changelog/2026-07-29-copy-rendered-ui-between-live-local-apps-and-design-files-wh.md +6 -0
  414. package/corpus/templates/design/changelog/2026-07-29-design-boards-stay-dark-and-viewport-height-content-keeps-it.md +6 -0
  415. package/corpus/templates/design/changelog/2026-07-29-design-frames-no-longer-grow-continuously-when-their-content.md +6 -0
  416. package/corpus/templates/design/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  417. package/corpus/templates/design/changelog/2026-07-29-the-code-panel-and-apply-design-update-control-now-use-clear.md +6 -0
  418. package/corpus/templates/design/changelog/2026-07-29-the-tools-panel-now-keeps-extension-creation-and-discovery-h.md +6 -0
  419. package/corpus/templates/design/shared/source-mode.ts +7 -1
  420. package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  421. package/corpus/templates/dispatch/app/i18n-data.ts +171 -0
  422. package/corpus/templates/dispatch/app/routes/browser-chat.tsx +4 -0
  423. package/corpus/templates/dispatch/app/routes/browser-connect.tsx +4 -0
  424. package/corpus/templates/dispatch/changelog/2026-07-29-browser-chat-can-securely-connect-the-agent-native-chrome-ex.md +6 -0
  425. package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  426. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +1 -6
  427. package/corpus/templates/forms/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  428. package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  429. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +1 -5
  430. package/corpus/templates/macros/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  431. package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  432. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +1 -9
  433. package/corpus/templates/mail/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  434. package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  435. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +3 -7
  436. package/corpus/templates/plan/app/pages/PlansPage.tsx +2 -2
  437. package/corpus/templates/plan/changelog/2026-07-29-chat-history-now-closes-smoothly-and-stays-ready-when-you-re.md +6 -0
  438. package/corpus/templates/plan/changelog/2026-07-29-chat-history-stays-visible-when-you-return-to-ask-plan.md +6 -0
  439. package/corpus/templates/plan/changelog/2026-07-29-fixed-plan-pages-crashing-when-recent-activity-is-unavailabl.md +6 -0
  440. package/corpus/templates/plan/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  441. package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  442. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +60 -4
  443. package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +20 -0
  444. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +30 -1
  445. package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +3 -1
  446. package/corpus/templates/slides/AGENTS.md +22 -24
  447. package/corpus/templates/slides/actions/check-image-gen.ts +8 -2
  448. package/corpus/templates/slides/actions/create-deck.ts +4 -12
  449. package/corpus/templates/slides/actions/export-pptx.ts +25 -3
  450. package/corpus/templates/slides/actions/generate-image-api.ts +4 -2
  451. package/corpus/templates/slides/actions/generate-slides-ai.ts +1 -1
  452. package/corpus/templates/slides/actions/get-deck-reference-context.ts +136 -0
  453. package/corpus/templates/slides/actions/get-workspace-defaults.ts +55 -0
  454. package/corpus/templates/slides/actions/image-gen-status.ts +10 -1
  455. package/corpus/templates/slides/actions/import-file.ts +53 -38
  456. package/corpus/templates/slides/actions/list-decks.ts +2 -0
  457. package/corpus/templates/slides/actions/patch-deck.ts +2 -0
  458. package/corpus/templates/slides/actions/set-workspace-defaults.ts +50 -0
  459. package/corpus/templates/slides/actions/view-screen.ts +6 -0
  460. package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +1 -1
  461. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +67 -3
  462. package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +40 -8
  463. package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +33 -8
  464. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +6 -2
  465. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +114 -128
  466. package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +2 -1
  467. package/corpus/templates/slides/app/components/editor/ImageGenPanel.tsx +1 -1
  468. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +1193 -267
  469. package/corpus/templates/slides/app/components/editor/SlideStyleInspector.tsx +302 -102
  470. package/corpus/templates/slides/app/components/editor/rich-text-selection.ts +270 -0
  471. package/corpus/templates/slides/app/components/editor/slide-escape-arbiter.ts +34 -0
  472. package/corpus/templates/slides/app/components/editor/slide-object-interactions.ts +368 -0
  473. package/corpus/templates/slides/app/components/editor/slide-presence.ts +13 -0
  474. package/corpus/templates/slides/app/components/layout/AgentWorkIndicator.tsx +23 -3
  475. package/corpus/templates/slides/app/components/layout/Layout.tsx +39 -6
  476. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +1 -6
  477. package/corpus/templates/slides/app/components/layout/layout-route-policy.ts +23 -0
  478. package/corpus/templates/slides/app/components/visual-editor/DrawOverlay.tsx +0 -2
  479. package/corpus/templates/slides/app/context/DeckContext.tsx +2 -0
  480. package/corpus/templates/slides/app/global.css +60 -0
  481. package/corpus/templates/slides/app/hooks/use-agent-generating.ts +76 -5
  482. package/corpus/templates/slides/app/hooks/use-workspace-defaults.ts +26 -0
  483. package/corpus/templates/slides/app/i18n/en-US.ts +38 -3
  484. package/corpus/templates/slides/app/lib/generation-state.ts +13 -3
  485. package/corpus/templates/slides/app/lib/slide-image-replacement.ts +27 -6
  486. package/corpus/templates/slides/app/lib/text-tool-shortcut.ts +62 -0
  487. package/corpus/templates/slides/app/pages/DeckEditor.tsx +197 -83
  488. package/corpus/templates/slides/app/pages/DesignSystems.tsx +95 -0
  489. package/corpus/templates/slides/app/pages/Index.tsx +348 -53
  490. package/corpus/templates/slides/changelog/2026-07-28-pick-an-existing-deck-as-a-style-reference-when-creating-a-n.md +6 -0
  491. package/corpus/templates/slides/changelog/2026-07-29-ai-editing-status-is-now-quieter-and-only-shows-slide-presen.md +6 -0
  492. package/corpus/templates/slides/changelog/2026-07-29-design-systems-and-reference-decks-are-easier-to-choose-toge.md +6 -0
  493. package/corpus/templates/slides/changelog/2026-07-29-generated-decks-now-receive-a-concise-relevant-title-before-.md +6 -0
  494. package/corpus/templates/slides/changelog/2026-07-29-new-deck-prompts-reuse-empty-chats.md +6 -0
  495. package/corpus/templates/slides/changelog/2026-07-29-new-deck-setup-now-stays-in-the-editor-with-closable-style-a.md +6 -0
  496. package/corpus/templates/slides/changelog/2026-07-29-selected-words-and-text-runs-can-now-be-styled-independently.md +6 -0
  497. package/corpus/templates/slides/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  498. package/corpus/templates/slides/changelog/2026-07-29-slide-annotation-tools-are-clearer-and-escape-now-exits-anno.md +6 -0
  499. package/corpus/templates/slides/changelog/2026-07-29-slide-editing-now-opens-with-the-app-navigation-collapsed-fo.md +6 -0
  500. package/corpus/templates/slides/changelog/2026-07-29-slide-editing-stays-visually-clean-on-hover-without-a-canvas.md +6 -0
  501. package/corpus/templates/slides/changelog/2026-07-29-slides-now-appear-one-by-one-while-ai-builds-a-deck-with-ste.md +6 -0
  502. package/corpus/templates/slides/changelog/2026-07-29-text-boxes-now-select-move-duplicate-resize-and-style-like-a.md +6 -0
  503. package/corpus/templates/slides/changelog/2026-07-29-untitled-decks-now-use-a-clearer-this-deck-label-in-the-agen.md +6 -0
  504. package/corpus/templates/slides/server/handlers/image-providers/builder.ts +305 -0
  505. package/corpus/templates/slides/server/handlers/image-providers/index.ts +6 -3
  506. package/corpus/templates/slides/server/plugins/agent-chat.ts +1 -0
  507. package/corpus/templates/slides/server/workspace-defaults.ts +169 -0
  508. package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  509. package/corpus/templates/tasks/app/components/layout/Sidebar.tsx +31 -8
  510. package/corpus/templates/tasks/app/i18n/en-US.ts +7 -0
  511. package/corpus/templates/tasks/app/routes/settings.tsx +25 -2
  512. package/corpus/templates/tasks/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  513. package/corpus/toolkit/CHANGELOG.md +15 -0
  514. package/corpus/toolkit/README.md +2 -2
  515. package/corpus/toolkit/package.json +1 -1
  516. package/corpus/toolkit/src/app-shell/sidebar-footer-actions.tsx +0 -3
  517. package/corpus/toolkit/src/chat-history.css +1 -0
  518. package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +35 -14
  519. package/corpus/toolkit/src/composer/PromptComposer.tsx +6 -0
  520. package/corpus/toolkit/src/composer/TiptapComposer.tsx +11 -3
  521. package/corpus/toolkit/src/design-tweaks/visual-style-controls.tsx +64 -11
  522. package/dist/action.d.ts +44 -0
  523. package/dist/action.d.ts.map +1 -1
  524. package/dist/action.js +9 -0
  525. package/dist/action.js.map +1 -1
  526. package/dist/agent/engine/builder-engine.js +6 -4
  527. package/dist/agent/engine/builder-engine.js.map +1 -1
  528. package/dist/agent/production-agent.d.ts +11 -1
  529. package/dist/agent/production-agent.d.ts.map +1 -1
  530. package/dist/agent/production-agent.js +131 -90
  531. package/dist/agent/production-agent.js.map +1 -1
  532. package/dist/agent/tool-search.d.ts +4 -0
  533. package/dist/agent/tool-search.d.ts.map +1 -1
  534. package/dist/agent/tool-search.js +30 -0
  535. package/dist/agent/tool-search.js.map +1 -1
  536. package/dist/automations/service.d.ts +85 -0
  537. package/dist/automations/service.d.ts.map +1 -0
  538. package/dist/automations/service.js +332 -0
  539. package/dist/automations/service.js.map +1 -0
  540. package/dist/browser-context/index.d.ts +579 -0
  541. package/dist/browser-context/index.d.ts.map +1 -0
  542. package/dist/browser-context/index.js +331 -0
  543. package/dist/browser-context/index.js.map +1 -0
  544. package/dist/client/AgentPanel.d.ts.map +1 -1
  545. package/dist/client/AgentPanel.js +1 -1
  546. package/dist/client/AgentPanel.js.map +1 -1
  547. package/dist/client/FeedbackButton.d.ts +6 -2
  548. package/dist/client/FeedbackButton.d.ts.map +1 -1
  549. package/dist/client/FeedbackButton.js +20 -3
  550. package/dist/client/FeedbackButton.js.map +1 -1
  551. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  552. package/dist/client/MultiTabAssistantChat.js +19 -2
  553. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  554. package/dist/client/agent-chat.d.ts +15 -0
  555. package/dist/client/agent-chat.d.ts.map +1 -1
  556. package/dist/client/agent-chat.js +13 -3
  557. package/dist/client/agent-chat.js.map +1 -1
  558. package/dist/client/agent-page/AgentJobsTab.d.ts +1 -0
  559. package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -1
  560. package/dist/client/agent-page/AgentJobsTab.js +186 -98
  561. package/dist/client/agent-page/AgentJobsTab.js.map +1 -1
  562. package/dist/client/agent-page/AgentTabsPage.js +4 -4
  563. package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
  564. package/dist/client/agent-page/use-jobs.d.ts +7 -0
  565. package/dist/client/agent-page/use-jobs.d.ts.map +1 -1
  566. package/dist/client/agent-page/use-jobs.js.map +1 -1
  567. package/dist/client/analytics-session.d.ts.map +1 -1
  568. package/dist/client/analytics-session.js +13 -0
  569. package/dist/client/analytics-session.js.map +1 -1
  570. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  571. package/dist/client/extensions/ExtensionViewer.js +29 -6
  572. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  573. package/dist/client/settings/AutomationsSection.d.ts +0 -9
  574. package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
  575. package/dist/client/settings/AutomationsSection.js +9 -168
  576. package/dist/client/settings/AutomationsSection.js.map +1 -1
  577. package/dist/client/settings/SettingsPanel.d.ts +9 -1
  578. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  579. package/dist/client/settings/SettingsPanel.js +19 -11
  580. package/dist/client/settings/SettingsPanel.js.map +1 -1
  581. package/dist/client/settings/index.d.ts +1 -1
  582. package/dist/client/settings/index.d.ts.map +1 -1
  583. package/dist/client/settings/index.js +1 -1
  584. package/dist/client/settings/index.js.map +1 -1
  585. package/dist/client/use-agent-chat.d.ts.map +1 -1
  586. package/dist/client/use-agent-chat.js +20 -3
  587. package/dist/client/use-agent-chat.js.map +1 -1
  588. package/dist/client/use-chat-threads.d.ts.map +1 -1
  589. package/dist/client/use-chat-threads.js +4 -17
  590. package/dist/client/use-chat-threads.js.map +1 -1
  591. package/dist/collab/struct-routes.d.ts +1 -1
  592. package/dist/deploy/build.d.ts.map +1 -1
  593. package/dist/deploy/build.js +2 -1
  594. package/dist/deploy/build.js.map +1 -1
  595. package/dist/deploy/workspace-deploy.d.ts.map +1 -1
  596. package/dist/deploy/workspace-deploy.js +2 -1
  597. package/dist/deploy/workspace-deploy.js.map +1 -1
  598. package/dist/extensions/actions.d.ts.map +1 -1
  599. package/dist/extensions/actions.js +82 -6
  600. package/dist/extensions/actions.js.map +1 -1
  601. package/dist/extensions/fetch-tool.d.ts.map +1 -1
  602. package/dist/extensions/fetch-tool.js +11 -0
  603. package/dist/extensions/fetch-tool.js.map +1 -1
  604. package/dist/extensions/routes.d.ts +5 -1
  605. package/dist/extensions/routes.d.ts.map +1 -1
  606. package/dist/extensions/routes.js +7 -1
  607. package/dist/extensions/routes.js.map +1 -1
  608. package/dist/extensions/web-content.d.ts +1 -0
  609. package/dist/extensions/web-content.d.ts.map +1 -1
  610. package/dist/extensions/web-content.js +82 -1
  611. package/dist/extensions/web-content.js.map +1 -1
  612. package/dist/integrations/computer-supervision.d.ts.map +1 -1
  613. package/dist/integrations/computer-supervision.js +22 -1
  614. package/dist/integrations/computer-supervision.js.map +1 -1
  615. package/dist/integrations/index.d.ts +3 -2
  616. package/dist/integrations/index.d.ts.map +1 -1
  617. package/dist/integrations/index.js +3 -2
  618. package/dist/integrations/index.js.map +1 -1
  619. package/dist/integrations/integration-durable-dispatch-config.d.ts +2 -0
  620. package/dist/integrations/integration-durable-dispatch-config.d.ts.map +1 -1
  621. package/dist/integrations/integration-durable-dispatch-config.js +4 -0
  622. package/dist/integrations/integration-durable-dispatch-config.js.map +1 -1
  623. package/dist/integrations/integration-durable-dispatch.d.ts +2 -2
  624. package/dist/integrations/integration-durable-dispatch.d.ts.map +1 -1
  625. package/dist/integrations/integration-durable-dispatch.js +2 -2
  626. package/dist/integrations/integration-durable-dispatch.js.map +1 -1
  627. package/dist/integrations/plugin.d.ts.map +1 -1
  628. package/dist/integrations/plugin.js +84 -39
  629. package/dist/integrations/plugin.js.map +1 -1
  630. package/dist/integrations/remote-browser-actions.d.ts +7 -0
  631. package/dist/integrations/remote-browser-actions.d.ts.map +1 -0
  632. package/dist/integrations/remote-browser-actions.js +482 -0
  633. package/dist/integrations/remote-browser-actions.js.map +1 -0
  634. package/dist/jobs/actions/list-recurring-jobs.d.ts.map +1 -1
  635. package/dist/jobs/actions/list-recurring-jobs.js +4 -6
  636. package/dist/jobs/actions/list-recurring-jobs.js.map +1 -1
  637. package/dist/jobs/actions/manage-recurring-job.js +3 -6
  638. package/dist/jobs/actions/manage-recurring-job.js.map +1 -1
  639. package/dist/jobs/background-automation-runner.d.ts +76 -0
  640. package/dist/jobs/background-automation-runner.d.ts.map +1 -0
  641. package/dist/jobs/background-automation-runner.js +288 -0
  642. package/dist/jobs/background-automation-runner.js.map +1 -0
  643. package/dist/jobs/frontmatter.d.ts +63 -0
  644. package/dist/jobs/frontmatter.d.ts.map +1 -0
  645. package/dist/jobs/frontmatter.js +216 -0
  646. package/dist/jobs/frontmatter.js.map +1 -0
  647. package/dist/jobs/scheduler.d.ts +6 -60
  648. package/dist/jobs/scheduler.d.ts.map +1 -1
  649. package/dist/jobs/scheduler.js +67 -484
  650. package/dist/jobs/scheduler.js.map +1 -1
  651. package/dist/jobs/tools.d.ts.map +1 -1
  652. package/dist/jobs/tools.js +24 -3
  653. package/dist/jobs/tools.js.map +1 -1
  654. package/dist/localization/default-messages.d.ts +28 -33
  655. package/dist/localization/default-messages.d.ts.map +1 -1
  656. package/dist/localization/default-messages.js +34 -39
  657. package/dist/localization/default-messages.js.map +1 -1
  658. package/dist/mcp-client/index.d.ts.map +1 -1
  659. package/dist/mcp-client/index.js +4 -0
  660. package/dist/mcp-client/index.js.map +1 -1
  661. package/dist/notifications/actions.d.ts.map +1 -1
  662. package/dist/notifications/actions.js +5 -0
  663. package/dist/notifications/actions.js.map +1 -1
  664. package/dist/notifications/routes.d.ts +6 -6
  665. package/dist/observability/routes.d.ts +3 -3
  666. package/dist/progress/actions.d.ts.map +1 -1
  667. package/dist/progress/actions.js +5 -0
  668. package/dist/progress/actions.js.map +1 -1
  669. package/dist/provider-api/actions/custom-provider-registration.d.ts +14 -14
  670. package/dist/provider-api/actions/github-repo-files.d.ts.map +1 -1
  671. package/dist/provider-api/actions/github-repo-files.js +9 -0
  672. package/dist/provider-api/actions/github-repo-files.js.map +1 -1
  673. package/dist/provider-api/actions/provider-api.d.ts +16 -16
  674. package/dist/provider-api/actions/provider-api.d.ts.map +1 -1
  675. package/dist/provider-api/actions/provider-api.js +14 -0
  676. package/dist/provider-api/actions/provider-api.js.map +1 -1
  677. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  678. package/dist/resources/handlers.d.ts +1 -1
  679. package/dist/secrets/routes.d.ts +9 -9
  680. package/dist/server/action-discovery.d.ts.map +1 -1
  681. package/dist/server/action-discovery.js +5 -0
  682. package/dist/server/action-discovery.js.map +1 -1
  683. package/dist/server/agent-chat/browser-team-tools.d.ts.map +1 -1
  684. package/dist/server/agent-chat/browser-team-tools.js +90 -3
  685. package/dist/server/agent-chat/browser-team-tools.js.map +1 -1
  686. package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
  687. package/dist/server/agent-chat/framework-prompts.js +7 -11
  688. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  689. package/dist/server/agent-chat/plugin-options.d.ts +3 -3
  690. package/dist/server/agent-chat/plugin-options.js.map +1 -1
  691. package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
  692. package/dist/server/agent-chat/script-entries.js +43 -1
  693. package/dist/server/agent-chat/script-entries.js.map +1 -1
  694. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  695. package/dist/server/agent-chat-plugin.js +24 -5
  696. package/dist/server/agent-chat-plugin.js.map +1 -1
  697. package/dist/server/attribution.d.ts +6 -0
  698. package/dist/server/attribution.d.ts.map +1 -1
  699. package/dist/server/attribution.js +14 -14
  700. package/dist/server/attribution.js.map +1 -1
  701. package/dist/server/auth.d.ts.map +1 -1
  702. package/dist/server/auth.js +5 -2
  703. package/dist/server/auth.js.map +1 -1
  704. package/dist/server/better-auth-instance.d.ts +2 -1
  705. package/dist/server/better-auth-instance.d.ts.map +1 -1
  706. package/dist/server/better-auth-instance.js +6 -3
  707. package/dist/server/better-auth-instance.js.map +1 -1
  708. package/dist/server/core-routes-plugin.d.ts +7 -0
  709. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  710. package/dist/server/core-routes-plugin.js +3 -1
  711. package/dist/server/core-routes-plugin.js.map +1 -1
  712. package/dist/server/csrf.d.ts.map +1 -1
  713. package/dist/server/csrf.js +25 -0
  714. package/dist/server/csrf.js.map +1 -1
  715. package/dist/server/email-template.d.ts +4 -0
  716. package/dist/server/email-template.d.ts.map +1 -1
  717. package/dist/server/email-template.js +25 -8
  718. package/dist/server/email-template.js.map +1 -1
  719. package/dist/server/google-oauth.d.ts +3 -0
  720. package/dist/server/google-oauth.d.ts.map +1 -1
  721. package/dist/server/google-oauth.js +12 -1
  722. package/dist/server/google-oauth.js.map +1 -1
  723. package/dist/server/onboarding-html.d.ts.map +1 -1
  724. package/dist/server/onboarding-html.js +18 -0
  725. package/dist/server/onboarding-html.js.map +1 -1
  726. package/dist/server/prompts/framework-core-compact.js +3 -3
  727. package/dist/server/prompts/framework-core-compact.js.map +1 -1
  728. package/dist/server/prompts/framework-core.js +3 -3
  729. package/dist/server/prompts/framework-core.js.map +1 -1
  730. package/dist/server/prompts/shared-rules.js +3 -3
  731. package/dist/server/prompts/shared-rules.js.map +1 -1
  732. package/dist/server/realtime-token.d.ts +1 -1
  733. package/dist/server/transcribe-voice.d.ts +1 -1
  734. package/dist/settings/index.d.ts +1 -1
  735. package/dist/settings/index.d.ts.map +1 -1
  736. package/dist/settings/index.js +1 -1
  737. package/dist/settings/index.js.map +1 -1
  738. package/dist/shared/analytics-anonymous-id.d.ts +12 -0
  739. package/dist/shared/analytics-anonymous-id.d.ts.map +1 -0
  740. package/dist/shared/analytics-anonymous-id.js +29 -0
  741. package/dist/shared/analytics-anonymous-id.js.map +1 -0
  742. package/dist/sharing/actions/share-resource.d.ts.map +1 -1
  743. package/dist/sharing/actions/share-resource.js +23 -4
  744. package/dist/sharing/actions/share-resource.js.map +1 -1
  745. package/dist/sharing/index.d.ts +1 -1
  746. package/dist/sharing/index.d.ts.map +1 -1
  747. package/dist/sharing/index.js.map +1 -1
  748. package/dist/sharing/registry.d.ts +23 -0
  749. package/dist/sharing/registry.d.ts.map +1 -1
  750. package/dist/sharing/registry.js.map +1 -1
  751. package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  752. package/dist/templates/chat/app/components/layout/Sidebar.tsx +1 -5
  753. package/dist/templates/chat/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  754. package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  755. package/dist/templates/default/app/i18n/ar-SA.ts +26 -0
  756. package/dist/templates/default/app/i18n/de-DE.ts +28 -0
  757. package/dist/templates/default/app/i18n/en-US.ts +27 -0
  758. package/dist/templates/default/app/i18n/es-ES.ts +28 -0
  759. package/dist/templates/default/app/i18n/fr-FR.ts +28 -0
  760. package/dist/templates/default/app/i18n/hi-IN.ts +25 -0
  761. package/dist/templates/default/app/i18n/ja-JP.ts +27 -0
  762. package/dist/templates/default/app/i18n/ko-KR.ts +27 -0
  763. package/dist/templates/default/app/i18n/pt-BR.ts +27 -0
  764. package/dist/templates/default/app/i18n/zh-CN.ts +24 -0
  765. package/dist/templates/default/app/i18n/zh-TW.ts +24 -0
  766. package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  767. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  768. package/dist/templates/workspace-core/.agents/skills/agent-page/SKILL.md +10 -7
  769. package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +53 -8
  770. package/dist/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +131 -0
  771. package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +13 -4
  772. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +23 -15
  773. package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +33 -18
  774. package/dist/tracking/providers.d.ts.map +1 -1
  775. package/dist/tracking/providers.js +1 -0
  776. package/dist/tracking/providers.js.map +1 -1
  777. package/dist/tracking/registry.d.ts +1 -0
  778. package/dist/tracking/registry.d.ts.map +1 -1
  779. package/dist/tracking/registry.js +1 -0
  780. package/dist/tracking/registry.js.map +1 -1
  781. package/dist/tracking/types.d.ts +1 -0
  782. package/dist/tracking/types.d.ts.map +1 -1
  783. package/dist/tracking/types.js.map +1 -1
  784. package/dist/triggers/actions/list-automations.d.ts +7 -0
  785. package/dist/triggers/actions/list-automations.d.ts.map +1 -1
  786. package/dist/triggers/actions/list-automations.js +29 -41
  787. package/dist/triggers/actions/list-automations.js.map +1 -1
  788. package/dist/triggers/actions/manage-automation.js +15 -33
  789. package/dist/triggers/actions/manage-automation.js.map +1 -1
  790. package/dist/triggers/actions.d.ts.map +1 -1
  791. package/dist/triggers/actions.js +184 -95
  792. package/dist/triggers/actions.js.map +1 -1
  793. package/dist/triggers/dispatcher.d.ts +3 -9
  794. package/dist/triggers/dispatcher.d.ts.map +1 -1
  795. package/dist/triggers/dispatcher.js +134 -304
  796. package/dist/triggers/dispatcher.js.map +1 -1
  797. package/dist/triggers/routes.d.ts.map +1 -1
  798. package/dist/triggers/routes.js +76 -17
  799. package/dist/triggers/routes.js.map +1 -1
  800. package/dist/triggers/types.d.ts +4 -23
  801. package/dist/triggers/types.d.ts.map +1 -1
  802. package/dist/triggers/types.js.map +1 -1
  803. package/docs/content/agent-surfaces.mdx +4 -4
  804. package/docs/content/automations.mdx +61 -12
  805. package/docs/content/deployment.mdx +11 -4
  806. package/docs/content/extensions.mdx +39 -33
  807. package/docs/content/recurring-jobs.mdx +41 -19
  808. package/docs/content/template-dispatch-operations.mdx +19 -7
  809. package/package.json +4 -2
  810. package/src/action.ts +55 -0
  811. package/src/agent/engine/builder-engine.ts +8 -4
  812. package/src/agent/production-agent.ts +175 -100
  813. package/src/agent/tool-search.ts +36 -0
  814. package/src/automations/service.ts +506 -0
  815. package/src/browser-context/index.ts +392 -0
  816. package/src/client/AgentPanel.tsx +2 -1
  817. package/src/client/FeedbackButton.tsx +37 -4
  818. package/src/client/MultiTabAssistantChat.tsx +21 -0
  819. package/src/client/agent-chat.ts +31 -3
  820. package/src/client/agent-page/AgentJobsTab.tsx +438 -310
  821. package/src/client/agent-page/AgentTabsPage.tsx +4 -4
  822. package/src/client/agent-page/use-jobs.ts +7 -0
  823. package/src/client/analytics-session.ts +13 -0
  824. package/src/client/extensions/ExtensionViewer.tsx +67 -0
  825. package/src/client/settings/AutomationsSection.tsx +27 -499
  826. package/src/client/settings/SettingsPanel.tsx +32 -11
  827. package/src/client/settings/index.ts +2 -0
  828. package/src/client/use-agent-chat.ts +35 -3
  829. package/src/client/use-chat-threads.ts +8 -25
  830. package/src/deploy/build.ts +2 -0
  831. package/src/deploy/workspace-deploy.ts +2 -0
  832. package/src/extensions/actions.ts +115 -3
  833. package/src/extensions/fetch-tool.ts +11 -0
  834. package/src/extensions/routes.ts +16 -1
  835. package/src/extensions/web-content.ts +96 -1
  836. package/src/integrations/computer-supervision.ts +33 -1
  837. package/src/integrations/index.ts +6 -0
  838. package/src/integrations/integration-durable-dispatch-config.ts +10 -0
  839. package/src/integrations/integration-durable-dispatch.ts +4 -0
  840. package/src/integrations/plugin.ts +94 -41
  841. package/src/integrations/remote-browser-actions.ts +621 -0
  842. package/src/jobs/actions/list-recurring-jobs.ts +5 -7
  843. package/src/jobs/actions/manage-recurring-job.ts +3 -7
  844. package/src/jobs/background-automation-runner.ts +437 -0
  845. package/src/jobs/frontmatter.ts +308 -0
  846. package/src/jobs/scheduler.ts +89 -598
  847. package/src/jobs/tools.ts +22 -3
  848. package/src/localization/default-messages.ts +45 -45
  849. package/src/mcp-client/index.ts +6 -0
  850. package/src/notifications/actions.ts +5 -0
  851. package/src/progress/actions.ts +5 -0
  852. package/src/provider-api/actions/github-repo-files.ts +11 -0
  853. package/src/provider-api/actions/provider-api.ts +13 -0
  854. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +4 -4
  855. package/src/server/action-discovery.ts +7 -0
  856. package/src/server/agent-chat/browser-team-tools.ts +126 -3
  857. package/src/server/agent-chat/framework-prompts.ts +7 -11
  858. package/src/server/agent-chat/plugin-options.ts +3 -3
  859. package/src/server/agent-chat/script-entries.ts +52 -1
  860. package/src/server/agent-chat-plugin.ts +25 -5
  861. package/src/server/attribution.ts +22 -0
  862. package/src/server/auth.ts +20 -6
  863. package/src/server/better-auth-instance.ts +10 -2
  864. package/src/server/core-routes-plugin.ts +10 -1
  865. package/src/server/csrf.ts +25 -0
  866. package/src/server/email-template.ts +43 -13
  867. package/src/server/google-oauth.ts +21 -1
  868. package/src/server/onboarding-html.ts +18 -0
  869. package/src/server/prompts/framework-core-compact.ts +3 -3
  870. package/src/server/prompts/framework-core.ts +3 -3
  871. package/src/server/prompts/shared-rules.ts +3 -3
  872. package/src/settings/index.ts +1 -0
  873. package/src/shared/analytics-anonymous-id.ts +35 -0
  874. package/src/sharing/actions/share-resource.ts +26 -4
  875. package/src/sharing/index.ts +1 -0
  876. package/src/sharing/registry.ts +23 -0
  877. package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  878. package/src/templates/chat/app/components/layout/Sidebar.tsx +1 -5
  879. package/src/templates/chat/changelog/2026-07-29-sidebar-footers-now-keep-feedback-search-and-collapse-togeth.md +6 -0
  880. package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  881. package/src/templates/default/app/i18n/ar-SA.ts +26 -0
  882. package/src/templates/default/app/i18n/de-DE.ts +28 -0
  883. package/src/templates/default/app/i18n/en-US.ts +27 -0
  884. package/src/templates/default/app/i18n/es-ES.ts +28 -0
  885. package/src/templates/default/app/i18n/fr-FR.ts +28 -0
  886. package/src/templates/default/app/i18n/hi-IN.ts +25 -0
  887. package/src/templates/default/app/i18n/ja-JP.ts +27 -0
  888. package/src/templates/default/app/i18n/ko-KR.ts +27 -0
  889. package/src/templates/default/app/i18n/pt-BR.ts +27 -0
  890. package/src/templates/default/app/i18n/zh-CN.ts +24 -0
  891. package/src/templates/default/app/i18n/zh-TW.ts +24 -0
  892. package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  893. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  894. package/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +10 -7
  895. package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +53 -8
  896. package/src/templates/workspace-core/.agents/skills/browser-sessions/SKILL.md +131 -0
  897. package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +13 -4
  898. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +23 -15
  899. package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +33 -18
  900. package/src/tracking/providers.ts +1 -0
  901. package/src/tracking/registry.ts +2 -1
  902. package/src/tracking/types.ts +1 -0
  903. package/src/triggers/actions/list-automations.ts +43 -44
  904. package/src/triggers/actions/manage-automation.ts +17 -48
  905. package/src/triggers/actions.ts +218 -127
  906. package/src/triggers/dispatcher.ts +181 -367
  907. package/src/triggers/routes.ts +84 -27
  908. package/src/triggers/types.ts +9 -23
  909. package/corpus/templates/clips/app/routes/_app.settings.organization.tsx +0 -232
@@ -209,6 +209,8 @@ export default function ExplorerDashboardPage() {
209
209
  const [addChartOpen, setAddChartOpen] = useState(false);
210
210
  const [loaded, setLoaded] = useState(false);
211
211
  const [confirmDeleteOpen, setConfirmDeleteOpen] = useState(false);
212
+ const [openDeleteAfterMenuClose, setOpenDeleteAfterMenuClose] =
213
+ useState(false);
212
214
  const [historyOpen, setHistoryOpen] = useState(false);
213
215
  const [dashboardActionsOpen, setDashboardActionsOpen] = useState(false);
214
216
  const [activeDragChartId, setActiveDragChartId] = useState<string | null>(
@@ -216,6 +218,20 @@ export default function ExplorerDashboardPage() {
216
218
  );
217
219
  const canEdit = resourceCanEdit(resourceAccess);
218
220
  const canManage = resourceCanManage(resourceAccess);
221
+ useEffect(() => {
222
+ if (dashboardActionsOpen || !openDeleteAfterMenuClose) return;
223
+ const frame = requestAnimationFrame(() => {
224
+ setOpenDeleteAfterMenuClose(false);
225
+ setConfirmDeleteOpen(true);
226
+ });
227
+ return () => cancelAnimationFrame(frame);
228
+ }, [dashboardActionsOpen, openDeleteAfterMenuClose]);
229
+
230
+ const requestDashboardDelete = useCallback(() => {
231
+ setOpenDeleteAfterMenuClose(true);
232
+ setDashboardActionsOpen(false);
233
+ }, []);
234
+
219
235
  const { selectedPanelId, selectPanelForChat } = useDashboardChatContext({
220
236
  id: dashboardId,
221
237
  kind: "explorer",
@@ -722,8 +738,7 @@ export default function ExplorerDashboardPage() {
722
738
  <DropdownMenuItem
723
739
  onSelect={(event) => {
724
740
  event.preventDefault();
725
- setDashboardActionsOpen(false);
726
- setConfirmDeleteOpen(true);
741
+ requestDashboardDelete();
727
742
  }}
728
743
  className="text-destructive focus:text-destructive"
729
744
  >
@@ -204,6 +204,7 @@ export function formToPanel(
204
204
  const isExtension = form.chartType === "extension";
205
205
  if (isExtension && form.extensionMode === "slot") {
206
206
  delete config.extensionId;
207
+ delete config.customBlock;
207
208
  config.extensionSlotId =
208
209
  form.extensionSlotId.trim() || dashboardExtensionSlotId(dashboardId, id);
209
210
  } else if (isExtension) {
@@ -212,6 +213,7 @@ export function formToPanel(
212
213
  } else {
213
214
  delete config.extensionId;
214
215
  delete config.extensionSlotId;
216
+ delete config.customBlock;
215
217
  }
216
218
  const isSection = form.chartType === "section";
217
219
  return {
@@ -393,7 +395,7 @@ function PanelEditorContent({
393
395
  `For demo panels, sql uses the same Prometheus JSON descriptor shape as source 'prometheus': {"promql":"rate(http_requests_total[5m])","mode":"range","range":"1h","step":"30s"}. ` +
394
396
  `For prometheus panels, sql is a JSON descriptor: {"promql":"rate(http_requests_total[5m])","mode":"range","range":"1h","step":"30s"}. mode defaults to "range"; range defaults to "1h"; step is auto if omitted. Returned rows have shape {timestamp, series, value} — set config.xKey="timestamp", config.yKey="value", and a single series in config.yKeys for clean charting. ` +
395
397
  `For program panels (arbitrary provider data joins/cohorts not expressible in the other sources), first save-data-program (or reuse an existing one via list-data-programs), then set sql to a JSON descriptor: {"programId":"<id>","params":{...}}. See the data-programs skill for the emit(rows, schema) contract and the Risk Meeting worked example. ` +
396
- `For extension panels, use config.extensionId by default so every dashboard viewer and scheduled report renders the author-selected shared extension. Use config.extensionSlotId only when the user explicitly asks for a personal/per-viewer slot; slot installs are per-user and automated report identities may have no install. ` +
398
+ `Native dashboard panels and Data Programs come first. Add an extension panel only when the user explicitly asks for a genuinely bespoke, one-off Custom Block for this dashboard and native panels cannot represent it faithfully. For a reusable/native capability call connect-builder instead. New agent-authored Custom Blocks use config.extensionId plus config.customBlock={authoredBy:"agent",intent:"one-off",scope:"dashboard",nativeGapReason:"custom-visualization"|"custom-interaction"|"custom-layout"|"other"}; never put prompt/customer text in that metadata. Use config.extensionSlotId only when the user explicitly asks for a personal/per-viewer slot; slot installs are per-user and automated report identities may have no install. ` +
397
399
  `Config is optional: { xKey, yKey, yKeys, yFormatter ('number'|'currency'|'percent'), rightYKeys, rightYFormatter, description, columns, pivot, limit, color, colors, stacked, legend, valueLabels }. ` +
398
400
  `For line/area/bar series that share an x-axis but not a unit (a count next to a rate), put the smaller-unit series on a second y-axis with config.rightYKeys (a subset of yKeys) and an optional config.rightYFormatter — do not build an extension for a dual-axis chart. ` +
399
401
  `Chart legends render automatically; set config.legend=false only when the user explicitly asks to hide the legend. ` +
@@ -1,3 +1,4 @@
1
+ import { sendToAgentChat } from "@agent-native/core/client/agent-chat";
1
2
  import { useActionMutation } from "@agent-native/core/client/hooks";
2
3
  import { useT } from "@agent-native/core/client/i18n";
3
4
  import { useDraggable } from "@dnd-kit/core";
@@ -12,6 +13,7 @@ import {
12
13
  IconDownload,
13
14
  IconMessageCircle,
14
15
  IconBrandGoogle,
16
+ IconArrowUpRight,
15
17
  } from "@tabler/icons-react";
16
18
  import { useQueryClient } from "@tanstack/react-query";
17
19
  import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -39,6 +41,7 @@ import {
39
41
  DropdownMenu,
40
42
  DropdownMenuContent,
41
43
  DropdownMenuItem,
44
+ DropdownMenuLabel,
42
45
  DropdownMenuSeparator,
43
46
  DropdownMenuTrigger,
44
47
  } from "@/components/ui/dropdown-menu";
@@ -48,6 +51,7 @@ import {
48
51
  TooltipTrigger,
49
52
  } from "@/components/ui/tooltip";
50
53
  import type { SelectDashboardPanelOptions } from "@/hooks/use-dashboard-chat-context";
54
+ import { buildCustomBlockPromotionRequest } from "@/lib/custom-block-promotion";
51
55
  import { cn } from "@/lib/utils";
52
56
 
53
57
  import { serializePanelSql } from "./panel-sql";
@@ -138,6 +142,9 @@ export function SqlChartCard({
138
142
  );
139
143
 
140
144
  const [confirmOpen, setConfirmOpen] = useState(false);
145
+ const [menuOpen, setMenuOpen] = useState(false);
146
+ const [openConfirmAfterMenuClose, setOpenConfirmAfterMenuClose] =
147
+ useState(false);
141
148
  const [expanded, setExpanded] = useState(false);
142
149
  const [extRefreshKey, setExtRefreshKey] = useState(0);
143
150
  const [exportCsv, setExportCsv] = useState<(() => void) | null>(null);
@@ -206,6 +213,28 @@ export function SqlChartCard({
206
213
  }
207
214
  }, [dashboardId, exportToGoogleSheets, filters, panel, t]);
208
215
 
216
+ const handlePromoteCustomBlock = useCallback(() => {
217
+ const extensionId = panel.config?.extensionId;
218
+ if (!dashboardId || !extensionId) return;
219
+ const dashboardName =
220
+ typeof extensionContext?.dashboardName === "string"
221
+ ? extensionContext.dashboardName
222
+ : undefined;
223
+ sendToAgentChat(
224
+ buildCustomBlockPromotionRequest(
225
+ {
226
+ dashboardId,
227
+ dashboardName,
228
+ panelId: panel.id,
229
+ panelTitle: panel.title,
230
+ extensionId,
231
+ nativeGapReason: panel.config?.customBlock?.nativeGapReason,
232
+ },
233
+ t("sqlDashboard.promoteCustomBlockMessage", { title: panel.title }),
234
+ ),
235
+ );
236
+ }, [dashboardId, extensionContext, panel, t]);
237
+
209
238
  const handleCardClick = useCallback(
210
239
  (event: React.MouseEvent<HTMLDivElement>) => {
211
240
  const target = event.target;
@@ -261,6 +290,20 @@ export function SqlChartCard({
261
290
  setExportCsv(null);
262
291
  }, [panel.id]);
263
292
 
293
+ useEffect(() => {
294
+ if (menuOpen || !openConfirmAfterMenuClose) return;
295
+ const frame = requestAnimationFrame(() => {
296
+ setOpenConfirmAfterMenuClose(false);
297
+ setConfirmOpen(true);
298
+ });
299
+ return () => cancelAnimationFrame(frame);
300
+ }, [menuOpen, openConfirmAfterMenuClose]);
301
+
302
+ const requestDeleteConfirmation = useCallback(() => {
303
+ setOpenConfirmAfterMenuClose(true);
304
+ setMenuOpen(false);
305
+ }, []);
306
+
264
307
  // Section panels render as a flush header row (no card chrome, full width)
265
308
  // so they read as dividers between groups of panels rather than as another
266
309
  // tile in the grid.
@@ -276,7 +319,7 @@ export function SqlChartCard({
276
319
  <h2 className="text-base font-semibold flex-1">{panel.title}</h2>
277
320
  {editable ? (
278
321
  <div className="flex items-center gap-1 opacity-0 group-hover:opacity-100">
279
- <DropdownMenu>
322
+ <DropdownMenu open={menuOpen} onOpenChange={setMenuOpen}>
280
323
  <Tooltip>
281
324
  <TooltipTrigger asChild>
282
325
  <DropdownMenuTrigger asChild>
@@ -301,9 +344,9 @@ export function SqlChartCard({
301
344
  )}
302
345
  {onEdit && <DropdownMenuSeparator />}
303
346
  <DropdownMenuItem
304
- onSelect={(e) => {
305
- e.preventDefault();
306
- setConfirmOpen(true);
347
+ onSelect={(event) => {
348
+ event.preventDefault();
349
+ requestDeleteConfirmation();
307
350
  }}
308
351
  >
309
352
  <IconTrash className="h-4 w-4 mr-2" />
@@ -386,7 +429,7 @@ export function SqlChartCard({
386
429
  />
387
430
  )}
388
431
  <div className="absolute right-1 top-1 flex items-center gap-1 opacity-0 group-hover:opacity-100">
389
- <DropdownMenu>
432
+ <DropdownMenu open={menuOpen} onOpenChange={setMenuOpen}>
390
433
  <Tooltip>
391
434
  <TooltipTrigger asChild>
392
435
  <DropdownMenuTrigger asChild>
@@ -401,6 +444,19 @@ export function SqlChartCard({
401
444
  <TooltipContent>{t("sqlDashboard.panelOptions")}</TooltipContent>
402
445
  </Tooltip>
403
446
  <DropdownMenuContent align="end" className="w-44">
447
+ <DropdownMenuLabel className="font-normal">
448
+ <span className="block text-xs font-medium text-foreground">
449
+ {t("sqlDashboard.customBlock")}
450
+ </span>
451
+ <span className="block text-[10px] leading-tight text-muted-foreground">
452
+ {t(
453
+ panel.config?.customBlock?.authoredBy === "agent"
454
+ ? "sqlDashboard.customBlockAgentProvenance"
455
+ : "sqlDashboard.customBlockProvenance",
456
+ )}
457
+ </span>
458
+ </DropdownMenuLabel>
459
+ <DropdownMenuSeparator />
404
460
  <DropdownMenuItem
405
461
  onSelect={() =>
406
462
  onSelectForChat?.({ openSidebar: true, focus: true })
@@ -419,6 +475,15 @@ export function SqlChartCard({
419
475
  <IconRefresh className="h-4 w-4 mr-2" />
420
476
  {t("sqlDashboard.refresh")}
421
477
  </DropdownMenuItem>
478
+ {editable && panel.config?.extensionId ? (
479
+ <>
480
+ <DropdownMenuSeparator />
481
+ <DropdownMenuItem onSelect={handlePromoteCustomBlock}>
482
+ <IconArrowUpRight className="h-4 w-4 mr-2" />
483
+ {t("sqlDashboard.promoteToAppCode")}
484
+ </DropdownMenuItem>
485
+ </>
486
+ ) : null}
422
487
  {editable ? (
423
488
  <>
424
489
  <DropdownMenuSeparator />
@@ -429,9 +494,9 @@ export function SqlChartCard({
429
494
  </DropdownMenuItem>
430
495
  ) : null}
431
496
  <DropdownMenuItem
432
- onSelect={(e) => {
433
- e.preventDefault();
434
- setConfirmOpen(true);
497
+ onSelect={(event) => {
498
+ event.preventDefault();
499
+ requestDeleteConfirmation();
435
500
  }}
436
501
  >
437
502
  <IconTrash className="h-4 w-4 mr-2" />
@@ -542,7 +607,7 @@ export function SqlChartCard({
542
607
  </ViewSqlPopover>
543
608
  ) : null}
544
609
  {showPanelMenu ? (
545
- <DropdownMenu>
610
+ <DropdownMenu open={menuOpen} onOpenChange={setMenuOpen}>
546
611
  <Tooltip>
547
612
  <TooltipTrigger asChild>
548
613
  <DropdownMenuTrigger asChild>
@@ -611,9 +676,9 @@ export function SqlChartCard({
611
676
  </DropdownMenuItem>
612
677
  {editable ? (
613
678
  <DropdownMenuItem
614
- onSelect={(e) => {
615
- e.preventDefault();
616
- setConfirmOpen(true);
679
+ onSelect={(event) => {
680
+ event.preventDefault();
681
+ requestDeleteConfirmation();
617
682
  }}
618
683
  >
619
684
  <IconTrash className="h-4 w-4 mr-2" />
@@ -0,0 +1,34 @@
1
+ export type DashboardSaveResult = {
2
+ isLatest: boolean;
3
+ };
4
+
5
+ /**
6
+ * Full-config dashboard saves must stay ordered. Each interaction derives a
7
+ * complete config, so an older request completing last would otherwise write
8
+ * its stale panel list back over a newer edit.
9
+ */
10
+ export function createDashboardSaveQueue<T>(
11
+ save: (config: T) => Promise<void>,
12
+ ): { enqueue(config: T): Promise<DashboardSaveResult> } {
13
+ let pendingCount = 0;
14
+ let tail: Promise<void> = Promise.resolve();
15
+
16
+ return {
17
+ enqueue(config) {
18
+ pendingCount += 1;
19
+ const saveResult = tail.then(async () => {
20
+ try {
21
+ await save(config);
22
+ return { isLatest: pendingCount === 1 };
23
+ } finally {
24
+ pendingCount -= 1;
25
+ }
26
+ });
27
+ tail = saveResult.then(
28
+ () => undefined,
29
+ () => undefined,
30
+ );
31
+ return saveResult;
32
+ },
33
+ };
34
+ }
@@ -1,5 +1,5 @@
1
1
  import { generateTabId } from "@agent-native/core/client/agent-chat";
2
- import { agentNativePath, appPath } from "@agent-native/core/client/api-path";
2
+ import { appPath } from "@agent-native/core/client/api-path";
3
3
  import {
4
4
  useCollaborativeDoc,
5
5
  emailToColor,
@@ -143,6 +143,7 @@ import {
143
143
  sameDropSlot,
144
144
  type DashboardDropSlot,
145
145
  } from "./dashboard-layout";
146
+ import { createDashboardSaveQueue } from "./dashboard-save-queue";
146
147
  import {
147
148
  createDashboardAdoptionHold,
148
149
  dashboardPrefetchInitialData,
@@ -588,6 +589,8 @@ function SqlDashboardPageContent({
588
589
  const [descriptionInput, setDescriptionInput] = useState("");
589
590
  const [loaded, setLoaded] = useState(false);
590
591
  const [confirmDeleteOpen, setConfirmDeleteOpen] = useState(false);
592
+ const [openDeleteAfterMenuClose, setOpenDeleteAfterMenuClose] =
593
+ useState(false);
591
594
  const [emailReportOpen, setEmailReportOpen] = useState(false);
592
595
  const [historyOpen, setHistoryOpen] = useState(false);
593
596
  const [undoRevisionId, setUndoRevisionId] = useState<string | null>(null);
@@ -601,9 +604,27 @@ function SqlDashboardPageContent({
601
604
  );
602
605
  const viewedDashboardIdRef = useRef<string | null>(null);
603
606
  const pendingConfigRef = useRef<DashboardAdoptionHold | null>(null);
607
+ const dashboardSaveQueueRef = useRef<{
608
+ dashboardId: string;
609
+ queue: ReturnType<typeof createDashboardSaveQueue<SqlDashboardConfig>>;
610
+ } | null>(null);
604
611
  const revisionRestoreInFlightRef = useRef(false);
605
612
  const canEdit = !reportScreenshot && resourceCanEdit(resourceAccess);
606
613
  const canManage = !reportScreenshot && resourceCanManage(resourceAccess);
614
+ useEffect(() => {
615
+ if (dashboardActionsOpen || !openDeleteAfterMenuClose) return;
616
+ const frame = requestAnimationFrame(() => {
617
+ setOpenDeleteAfterMenuClose(false);
618
+ setConfirmDeleteOpen(true);
619
+ });
620
+ return () => cancelAnimationFrame(frame);
621
+ }, [dashboardActionsOpen, openDeleteAfterMenuClose]);
622
+
623
+ const requestDashboardDelete = useCallback(() => {
624
+ setOpenDeleteAfterMenuClose(true);
625
+ setDashboardActionsOpen(false);
626
+ }, []);
627
+
607
628
  const resetRevisionNavigation = useCallback(() => {
608
629
  setUndoRevisionId(null);
609
630
  setRedoRevisionIds([]);
@@ -1004,23 +1025,19 @@ function SqlDashboardPageContent({
1004
1025
  reportScreenshot,
1005
1026
  ]);
1006
1027
 
1007
- /**
1008
- * Push a config update through the collab layer so other tabs/users
1009
- * receive the change in real time.
1010
- */
1011
- const pushToCollab = useCallback(
1012
- (updated: SqlDashboardConfig) => {
1013
- if (!collabDocId) return;
1014
- const body = JSON.stringify(updated);
1015
- fetch(agentNativePath(`/_agent-native/collab/${collabDocId}/text`), {
1016
- method: "POST",
1017
- headers: { "Content-Type": "application/json" },
1018
- body: JSON.stringify({ text: body, requestSource: TAB_ID }),
1019
- }).catch(() => {
1020
- // Best-effort — the HTTP save is the source of truth
1021
- });
1028
+ const enqueueDashboardSave = useCallback(
1029
+ (id: string, updated: SqlDashboardConfig) => {
1030
+ if (dashboardSaveQueueRef.current?.dashboardId !== id) {
1031
+ dashboardSaveQueueRef.current = {
1032
+ dashboardId: id,
1033
+ queue: createDashboardSaveQueue((config) =>
1034
+ saveDashboard(id, config),
1035
+ ),
1036
+ };
1037
+ }
1038
+ return dashboardSaveQueueRef.current.queue.enqueue(updated);
1022
1039
  },
1023
- [collabDocId],
1040
+ [],
1024
1041
  );
1025
1042
 
1026
1043
  /**
@@ -1040,9 +1057,9 @@ function SqlDashboardPageContent({
1040
1057
  holdDashboardConfig();
1041
1058
  setDashboard(updated);
1042
1059
  updateCachedDashboardConfig(updated);
1043
- pushToCollab(updated);
1044
- saveDashboard(dashboardId, updated)
1045
- .then(() => {
1060
+ void enqueueDashboardSave(dashboardId, updated)
1061
+ .then(({ isLatest }) => {
1062
+ if (!isLatest) return;
1046
1063
  queryClient.removeQueries({
1047
1064
  queryKey: sqlDashboardPrefetchKey(dashboardId),
1048
1065
  });
@@ -1069,9 +1086,9 @@ function SqlDashboardPageContent({
1069
1086
  [
1070
1087
  dashboardId,
1071
1088
  canEdit,
1089
+ enqueueDashboardSave,
1072
1090
  holdDashboardConfig,
1073
1091
  queryClient,
1074
- pushToCollab,
1075
1092
  resetRevisionNavigation,
1076
1093
  t,
1077
1094
  updateCachedDashboardConfig,
@@ -1090,10 +1107,10 @@ function SqlDashboardPageContent({
1090
1107
  }
1091
1108
  resetRevisionNavigation();
1092
1109
  holdDashboardConfig();
1093
- await saveDashboard(dashboardId, updated);
1110
+ const { isLatest } = await enqueueDashboardSave(dashboardId, updated);
1111
+ if (!isLatest) return;
1094
1112
  setDashboard(updated);
1095
1113
  updateCachedDashboardConfig(updated);
1096
- pushToCollab(updated);
1097
1114
  queryClient.removeQueries({
1098
1115
  queryKey: sqlDashboardPrefetchKey(dashboardId),
1099
1116
  });
@@ -1106,9 +1123,9 @@ function SqlDashboardPageContent({
1106
1123
  [
1107
1124
  dashboardId,
1108
1125
  canEdit,
1126
+ enqueueDashboardSave,
1109
1127
  holdDashboardConfig,
1110
1128
  queryClient,
1111
- pushToCollab,
1112
1129
  resetRevisionNavigation,
1113
1130
  t,
1114
1131
  updateCachedDashboardConfig,
@@ -1864,8 +1881,7 @@ function SqlDashboardPageContent({
1864
1881
  <DropdownMenuItem
1865
1882
  onSelect={(event) => {
1866
1883
  event.preventDefault();
1867
- setDashboardActionsOpen(false);
1868
- setConfirmDeleteOpen(true);
1884
+ requestDashboardDelete();
1869
1885
  }}
1870
1886
  className="text-destructive focus:text-destructive"
1871
1887
  >
@@ -116,6 +116,21 @@ export interface SqlPanelConfig {
116
116
  * personal installs render in the box and receive dashboard context.
117
117
  */
118
118
  extensionSlotId?: string;
119
+ /**
120
+ * Provenance for a deliberately one-off Custom Block. New agent-authored
121
+ * blocks set this so the UI and telemetry can distinguish a runtime patch
122
+ * from legacy extension-backed panels without exposing prompt text.
123
+ */
124
+ customBlock?: {
125
+ authoredBy: "agent" | "user";
126
+ intent: "one-off";
127
+ scope: "dashboard";
128
+ nativeGapReason:
129
+ | "custom-visualization"
130
+ | "custom-interaction"
131
+ | "custom-layout"
132
+ | "other";
133
+ };
119
134
  }
120
135
 
121
136
  export interface SqlPanel {
@@ -151,7 +151,7 @@ export default function AnalysisDetail() {
151
151
  send({
152
152
  message: t("analyses.rerunMessage", { name: analysis.name }),
153
153
  context:
154
- `This is a re-run of a legacy saved ad-hoc analysis. Treat the refreshed result as a dashboard artifact: REAL_DATA_REQUIRED: run at least one real data-source query action before saving or answering; data-source-status and generate-chart do not count as data queries. If no source can answer, report the exact unavailable/error result instead of saving guessed results. If the report needs bespoke UI, create an extension and immediately embed it in a dashboard panel with config.extensionId. Only call save-analysis when the user explicitly asks to preserve this legacy analysis record.\n\n` +
154
+ `This is a re-run of a legacy saved ad-hoc analysis. Treat the refreshed result as a dashboard artifact: REAL_DATA_REQUIRED: run at least one real data-source query action before saving or answering; data-source-status and generate-chart do not count as data queries. If no source can answer, report the exact unavailable/error result instead of saving guessed results. Build with native dashboard panels and Data Programs first. Create a dashboard-scoped Custom Block only when the user explicitly wants a bespoke one-off result that native panels cannot represent; set config.extensionId and categorical config.customBlock provenance. Route reusable/native capability requests through connect-builder. Only call save-analysis when the user explicitly asks to preserve this legacy analysis record.\n\n` +
155
155
  `Use these instructions to reproduce it:\n\n` +
156
156
  `Analysis ID: ${analysis.id}\n` +
157
157
  `Original question: ${analysis.question}\n\n` +
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-29
4
+ ---
5
+
6
+ Chat history now closes smoothly and stays ready when you return to Ask.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-29
4
+ ---
5
+
6
+ Chat history stays visible when you return to the dashboard.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-29
4
+ ---
5
+
6
+ Custom dashboard blocks now identify one-off agent patches and can be promoted to reusable app code.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-29
4
+ ---
5
+
6
+ Dashboard chart deletions now save in order, so removed rows stay gone after refresh.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-29
4
+ ---
5
+
6
+ Dashboard chart loaders are easier to see and animate more smoothly.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-29
4
+ ---
5
+
6
+ Plan mode can now query connected analytics sources while keeping changes blocked.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-29
4
+ ---
5
+
6
+ Plan mode can follow agent-readable context from shared URLs, and large Custom Blocks load focused excerpts without stalling.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-29
4
+ ---
5
+
6
+ Sidebar footers now keep Feedback, Search, and Collapse together without a separate language shortcut.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-29
4
+ ---
5
+
6
+ Signup entry pages now show the first page viewed before each tracked signup.
@@ -651,7 +651,7 @@
651
651
  "width": 1,
652
652
  "columns": 3,
653
653
  "config": {
654
- "description": "Signups attributed to shared clips and plans, who is driving referrals, and the share view to click to signup funnel. referral_* and utm_* fields are read from the signup event's properties JSON; share_view and share_cta_click track shared-surface engagement."
654
+ "description": "Signups attributed to shared clips and plans, who is driving referrals, and the share view to click to signup funnel. referral_* and utm_* fields are read from the signup event's properties JSON; browser identity now also links pre-signup pageviews to the signup event."
655
655
  }
656
656
  },
657
657
  {
@@ -707,6 +707,31 @@
707
707
  "description": "Signups grouped by referral_source over the window. Null/empty sources are bucketed as direct."
708
708
  }
709
709
  },
710
+ {
711
+ "id": "signup-entry-pages-90d",
712
+ "title": "Signup Entry Pages (90d)",
713
+ "chartType": "table",
714
+ "source": "first-party",
715
+ "width": 1,
716
+ "sql": "WITH signups AS (SELECT id AS signup_id, anonymous_id, timestamp::timestamptz AS signup_at FROM analytics_events WHERE event_name = 'signup' AND event_date >= to_char(CURRENT_DATE - INTERVAL '90 days', 'YYYY-MM-DD') AND anonymous_id IS NOT NULL AND anonymous_id <> ''), ranked_pageviews AS (SELECT signups.signup_id, COALESCE(NULLIF(pageviews.path, ''), '(unknown)') AS entry_path, ROW_NUMBER() OVER (PARTITION BY signups.signup_id ORDER BY pageviews.timestamp::timestamptz ASC, pageviews.id ASC) AS position FROM signups JOIN analytics_events AS pageviews ON pageviews.event_name = 'pageview' AND pageviews.anonymous_id = signups.anonymous_id AND pageviews.timestamp::timestamptz >= signups.signup_at - INTERVAL '400 days' AND pageviews.timestamp::timestamptz < signups.signup_at) SELECT entry_path, COUNT(*) AS signups FROM ranked_pageviews WHERE position = 1 GROUP BY entry_path ORDER BY signups DESC LIMIT 20",
717
+ "config": {
718
+ "timeScope": "cohort-history",
719
+ "description": "First tracked pageview from the 400 days before each signup in the window, joined through the browser anonymous id. Signups without a browser identity are intentionally excluded.",
720
+ "sortable": true,
721
+ "limit": 20,
722
+ "columns": [
723
+ {
724
+ "key": "entry_path",
725
+ "label": "First pageview"
726
+ },
727
+ {
728
+ "key": "signups",
729
+ "label": "Signups",
730
+ "format": "number"
731
+ }
732
+ ]
733
+ }
734
+ },
710
735
  {
711
736
  "id": "referred-signups-over-time",
712
737
  "title": "Referred Signups Over Time (90d)",
@@ -1,5 +1,3 @@
1
- import type { ActionEntry } from "@agent-native/core/server";
2
-
3
1
  export const INITIAL_TOOL_NAMES = [
4
2
  "view-screen",
5
3
  "data-source-status",
@@ -44,34 +42,3 @@ export const INITIAL_TOOL_NAMES = [
44
42
  "hubspot-records",
45
43
  "navigate",
46
44
  ];
47
-
48
- export const PLAN_MODE_ACT_ONLY_TOOLS = new Set([
49
- "query-agent-native-analytics",
50
- "bigquery",
51
- "provider-api-request",
52
- "provider-corpus-job",
53
- "query-staged-dataset",
54
- "account-deep-dive",
55
- "hubspot-deals",
56
- "hubspot-records",
57
- "hubspot-pipelines",
58
- "gong-calls",
59
- "gong-native-insights",
60
- "github-repo-files",
61
- "jira-search",
62
- "slack-messages",
63
- "sentry",
64
- ]);
65
-
66
- export function applyAnalyticsPlanModePolicy(
67
- actions: Record<string, ActionEntry>,
68
- ): Record<string, ActionEntry> {
69
- return Object.fromEntries(
70
- Object.entries(actions).map(([name, entry]) => [
71
- name,
72
- PLAN_MODE_ACT_ONLY_TOOLS.has(name)
73
- ? { ...entry, allowInPlanMode: false }
74
- : entry,
75
- ]),
76
- );
77
- }
@@ -10,8 +10,15 @@ export const LEGACY_NEW_VS_RECURRING_USERS_SQL = `WITH all_users AS (SELECT NULL
10
10
  const LEGACY_NEW_VS_RECURRING_USERS_DESCRIPTION =
11
11
  "Daily signed-in visitors split by first-ever session (New) vs return visit (Recurring), stacked with Recurring on the bottom and New on top. Docs excluded. A user is New only on their all-time first active day.";
12
12
  const NEW_VS_RECURRING_USERS_SQL = `WITH first_seen AS (SELECT NULLIF(user_key, '') AS user_key, MIN(event_date) AS first_date FROM analytics_events WHERE event_name = 'session status' AND signed_in = 'true' AND NULLIF(user_key, '') IS NOT NULL AND lower(COALESCE(NULLIF(template, ''), NULLIF(properties::jsonb ->> 'templateId', ''), NULLIF(app, ''), NULLIF(properties::jsonb ->> 'agent_native_app', ''), 'unknown')) <> 'docs' AND ('{{emailFilter}}' IN ('', 'all') OR ('{{emailFilter}}' = 'exclude_builder' AND lower(coalesce(user_id, '')) NOT LIKE '%@builder.io') OR ('{{emailFilter}}' = 'only_builder' AND lower(coalesce(user_id, '')) LIKE '%@builder.io')) AND event_date >= to_char(CURRENT_DATE - INTERVAL '365 days', 'YYYY-MM-DD') GROUP BY 1), activity AS (SELECT NULLIF(user_key, '') AS user_key, event_date FROM analytics_events WHERE event_name = 'session status' AND signed_in = 'true' AND NULLIF(user_key, '') IS NOT NULL AND lower(COALESCE(NULLIF(template, ''), NULLIF(properties::jsonb ->> 'templateId', ''), NULLIF(app, ''), NULLIF(properties::jsonb ->> 'agent_native_app', ''), 'unknown')) <> 'docs' AND ('{{emailFilter}}' IN ('', 'all') OR ('{{emailFilter}}' = 'exclude_builder' AND lower(coalesce(user_id, '')) NOT LIKE '%@builder.io') OR ('{{emailFilter}}' = 'only_builder' AND lower(coalesce(user_id, '')) LIKE '%@builder.io')) AND event_date >= to_char(CURRENT_DATE - INTERVAL '365 days', 'YYYY-MM-DD') AND ('{{timeRange}}' IN ('', 'all') OR ('{{timeRange}}' = '7d' AND event_date >= to_char(CURRENT_DATE - INTERVAL '7 days', 'YYYY-MM-DD')) OR ('{{timeRange}}' = '30d' AND event_date >= to_char(CURRENT_DATE - INTERVAL '30 days', 'YYYY-MM-DD')) OR ('{{timeRange}}' = '90d' AND event_date >= to_char(CURRENT_DATE - INTERVAL '90 days', 'YYYY-MM-DD')) OR ('{{timeRange}}' = '180d' AND event_date >= to_char(CURRENT_DATE - INTERVAL '180 days', 'YYYY-MM-DD')) OR ('{{timeRange}}' = '365d' AND event_date >= to_char(CURRENT_DATE - INTERVAL '365 days', 'YYYY-MM-DD')))), daily AS (SELECT a.event_date AS date, CASE WHEN a.event_date = f.first_date THEN 'New' ELSE 'Recurring' END AS user_type, COUNT(DISTINCT a.user_key) AS users FROM activity a JOIN first_seen f ON f.user_key = a.user_key GROUP BY 1, 2) SELECT date, user_type, users FROM daily ORDER BY date, CASE WHEN user_type = 'Recurring' THEN 0 ELSE 1 END`;
13
+ const MARKETING_SITE_TEMPLATE_FILTER =
14
+ "lower(COALESCE(NULLIF(template, ''), NULLIF(properties::jsonb ->> 'templateId', ''), NULLIF(app, ''), NULLIF(properties::jsonb ->> 'agent_native_app', ''), 'unknown')) <> 'www'";
15
+ const NEW_VS_RECURRING_USERS_WITHOUT_MARKETING_SITE_SQL =
16
+ NEW_VS_RECURRING_USERS_SQL.replace(
17
+ " <> 'docs' AND ",
18
+ ` <> 'docs' AND ${MARKETING_SITE_TEMPLATE_FILTER} AND `,
19
+ );
13
20
  const NEW_VS_RECURRING_USERS_DESCRIPTION =
14
- "Daily signed-in visitors split by first active day observed in the previous 365 days (New) vs return visit (Recurring), stacked with Recurring on the bottom and New on top. Docs excluded.";
21
+ "Daily signed-in visitors split by first active day observed in the previous 365 days (New) vs return visit (Recurring), stacked with Recurring on the bottom and New on top. Docs and marketing-site traffic are excluded.";
15
22
 
16
23
  const CANONICAL_CUSTOM_PANEL_REPLACEMENTS: readonly ExactFirstPartyPanelReplacement[] =
17
24
  [
@@ -25,8 +32,11 @@ const CANONICAL_CUSTOM_PANEL_REPLACEMENTS: readonly ExactFirstPartyPanelReplacem
25
32
  },
26
33
  {
27
34
  id: "new-vs-recurring-users",
28
- legacySql: [LEGACY_NEW_VS_RECURRING_USERS_SQL],
29
- sql: NEW_VS_RECURRING_USERS_SQL,
35
+ legacySql: [
36
+ LEGACY_NEW_VS_RECURRING_USERS_SQL,
37
+ NEW_VS_RECURRING_USERS_SQL,
38
+ ],
39
+ sql: NEW_VS_RECURRING_USERS_WITHOUT_MARKETING_SITE_SQL,
30
40
  legacyDescription: LEGACY_NEW_VS_RECURRING_USERS_DESCRIPTION,
31
41
  description: NEW_VS_RECURRING_USERS_DESCRIPTION,
32
42
  },