@agent-native/core 0.91.2 → 0.92.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +31 -0
  3. package/corpus/core/docs/content/faq.mdx +17 -0
  4. package/corpus/core/docs/content/notifications.mdx +12 -6
  5. package/corpus/core/package.json +1 -1
  6. package/corpus/core/src/agent/production-agent.ts +140 -46
  7. package/corpus/core/src/agent/tool-search.ts +71 -4
  8. package/corpus/core/src/application-state/store.ts +12 -1
  9. package/corpus/core/src/cli/index.ts +20 -0
  10. package/corpus/core/src/cli/upgrade.ts +798 -0
  11. package/corpus/core/src/client/AssistantChat.tsx +28 -15
  12. package/corpus/core/src/client/HighlightedCodeBlock.tsx +20 -3
  13. package/corpus/core/src/client/PoweredByBadge.tsx +1 -8
  14. package/corpus/core/src/client/agent-chat-adapter.ts +68 -16
  15. package/corpus/core/src/client/chat/message-components.tsx +85 -8
  16. package/corpus/core/src/client/chat/tool-call-display.tsx +355 -144
  17. package/corpus/core/src/client/chat/widgets/DataTableWidget.tsx +52 -1
  18. package/corpus/core/src/client/code-agent-chat-adapter.ts +2 -9
  19. package/corpus/core/src/client/db-admin/TableEditor.tsx +49 -0
  20. package/corpus/core/src/client/db-admin/export-utils.ts +13 -4
  21. package/corpus/core/src/client/db-admin/useAgentSync.ts +72 -0
  22. package/corpus/core/src/client/error-capture.ts +69 -7
  23. package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +5 -1
  24. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +53 -8
  25. package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +5 -1
  26. package/corpus/core/src/client/extensions/portable-extension.ts +1 -0
  27. package/corpus/core/src/client/org/OrgSwitcher.tsx +12 -9
  28. package/corpus/core/src/client/org/TeamPage.tsx +77 -71
  29. package/corpus/core/src/client/session-replay.ts +3 -97
  30. package/corpus/core/src/client/settings/SettingsPanel.tsx +738 -441
  31. package/corpus/core/src/client/settings/SettingsSection.tsx +161 -17
  32. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +25 -9
  33. package/corpus/core/src/client/sse-event-processor.ts +29 -2
  34. package/corpus/core/src/db-admin/agent-tools.ts +8 -2
  35. package/corpus/core/src/db-admin/operations.ts +116 -4
  36. package/corpus/core/src/db-admin/routes.ts +1 -0
  37. package/corpus/core/src/db-admin/types.ts +4 -0
  38. package/corpus/core/src/extensions/actions.ts +113 -5
  39. package/corpus/core/src/extensions/html-shell.ts +5 -4
  40. package/corpus/core/src/extensions/routes.ts +10 -0
  41. package/corpus/core/src/navigation/index.ts +1 -1
  42. package/corpus/core/src/notifications/channels.ts +88 -25
  43. package/corpus/core/src/notifications/registry.ts +17 -3
  44. package/corpus/core/src/notifications/types.ts +4 -1
  45. package/corpus/core/src/resources/handlers.ts +10 -8
  46. package/corpus/core/src/server/agent-chat-plugin.ts +7 -3
  47. package/corpus/core/src/server/poll.ts +293 -8
  48. package/corpus/core/src/server/request-context.ts +7 -0
  49. package/corpus/core/src/styles/agent-conversation.css +1 -1
  50. package/corpus/core/src/styles/agent-native.css +27 -0
  51. package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
  52. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  53. package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  54. package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +7 -0
  55. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  56. package/corpus/core/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  57. package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  58. package/corpus/core/src/templates/default/AGENTS.md +14 -5
  59. package/corpus/core/src/templates/default/package.json +2 -1
  60. package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  61. package/corpus/core/src/templates/headless/AGENTS.md +13 -3
  62. package/corpus/core/src/templates/headless/package.json +1 -0
  63. package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  64. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  65. package/corpus/core/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  66. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  67. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  68. package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  69. package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  70. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  71. package/corpus/core/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  72. package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  73. package/corpus/core/src/templates/workspace-core/AGENTS.md +7 -1
  74. package/corpus/core/src/templates/workspace-root/AGENTS.md +17 -5
  75. package/corpus/core/src/templates/workspace-root/package.json +1 -0
  76. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +5 -0
  77. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +10 -0
  78. package/corpus/templates/analytics/.agents/skills/real-time-sync/SKILL.md +1 -1
  79. package/corpus/templates/analytics/.agents/skills/security/SKILL.md +7 -0
  80. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +20 -2
  81. package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +5 -6
  82. package/corpus/templates/analytics/.agents/skills/storing-data/SKILL.md +5 -1
  83. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  84. package/corpus/templates/analytics/AGENTS.md +39 -18
  85. package/corpus/templates/analytics/actions/capture-test-error.ts +4 -0
  86. package/corpus/templates/analytics/actions/get-analytics-alert-rule-defaults.ts +23 -0
  87. package/corpus/templates/analytics/actions/get-error-issue.ts +1 -1
  88. package/corpus/templates/analytics/actions/list-analysis-revisions.ts +40 -0
  89. package/corpus/templates/analytics/actions/list-dashboard-revisions.ts +40 -0
  90. package/corpus/templates/analytics/actions/list-dashboard-usage-stats.ts +299 -0
  91. package/corpus/templates/analytics/actions/navigate.ts +4 -2
  92. package/corpus/templates/analytics/actions/restore-analysis-revision.ts +43 -0
  93. package/corpus/templates/analytics/actions/restore-dashboard-revision.ts +68 -0
  94. package/corpus/templates/analytics/actions/save-analytics-alert-rule.ts +14 -0
  95. package/corpus/templates/analytics/actions/save-monitor.ts +15 -1
  96. package/corpus/templates/analytics/actions/view-screen.ts +24 -0
  97. package/corpus/templates/analytics/app/components/analysis/AnalysisHistoryPanel.tsx +181 -0
  98. package/corpus/templates/analytics/app/components/dashboard/DashboardHistoryPanel.tsx +184 -0
  99. package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +41 -6
  100. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +122 -11
  101. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +22 -16
  102. package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -1
  103. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +27 -21
  104. package/corpus/templates/analytics/app/hooks/use-analysis-revisions.ts +43 -0
  105. package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +110 -0
  106. package/corpus/templates/analytics/app/hooks/use-dashboard-revisions.ts +43 -0
  107. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +8 -3
  108. package/corpus/templates/analytics/app/i18n/zh-TW.ts +64 -2
  109. package/corpus/templates/analytics/app/i18n-data.ts +783 -3
  110. package/corpus/templates/analytics/app/pages/Agents.tsx +359 -19
  111. package/corpus/templates/analytics/app/pages/Settings.tsx +3 -2
  112. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +34 -1
  113. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +28 -0
  114. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +18 -1
  115. package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +7 -10
  116. package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +8 -2
  117. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +479 -23
  118. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +0 -9
  119. package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +11 -0
  120. package/corpus/templates/analytics/app/pages/monitoring/errors/types.ts +9 -1
  121. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +157 -35
  122. package/corpus/templates/analytics/app/pages/monitoring/uptime/i18n.ts +17 -2
  123. package/corpus/templates/analytics/app/pages/monitoring/uptime/types.ts +4 -0
  124. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +80 -220
  125. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +9 -99
  126. package/corpus/templates/analytics/app/pages/settings/AlertRulesSettingsCard.tsx +262 -104
  127. package/corpus/templates/analytics/app/routes/team.tsx +1 -1
  128. package/corpus/templates/analytics/changelog/2026-07-08-admins-can-audit-dashboard-usage-ownership-and-cleanup-signa.md +6 -0
  129. package/corpus/templates/analytics/changelog/2026-07-08-agent-monitoring-stays-available-to-non-admins.md +6 -0
  130. package/corpus/templates/analytics/changelog/2026-07-08-alert-rules-are-easier-to-scan-expand-and-edit-from-settings.md +6 -0
  131. package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-forms-remember-last-email-recipients.md +6 -0
  132. package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-rules-can-now-use-per-rule-slack-and-webhook.md +6 -0
  133. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-history-and-chat-context.md +5 -0
  134. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-tables-keep-their-size-while-loading.md +6 -0
  135. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-usage-now-counts-explorer-dashboard-traffic.md +6 -0
  136. package/corpus/templates/analytics/changelog/2026-07-08-demo-mode-session-emails-are-filtered-and-anonymized.md +6 -0
  137. package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-adds-stack-traces-and-frequency-bars.md +6 -0
  138. package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-now-shows-the-latest-occurrence-message-a.md +6 -0
  139. package/corpus/templates/analytics/changelog/2026-07-08-monitoring-errors-only-show-test-action-when-empty.md +6 -0
  140. package/corpus/templates/analytics/changelog/2026-07-08-monitoring-uptime-and-errors-tabs-now-clearly-show-which-view-is-active.md +6 -0
  141. package/corpus/templates/analytics/changelog/2026-07-08-production-session-replay-now-requires-private-blob-storage-.md +6 -0
  142. package/corpus/templates/analytics/changelog/2026-07-08-session-replay-uses-stock-rrweb-sizing-again-so-recorded.md +6 -0
  143. package/corpus/templates/analytics/changelog/2026-07-08-shared-extension-links-now-show-a-clear-message-when-you-do-.md +6 -0
  144. package/corpus/templates/analytics/changelog/2026-07-08-sidebar-dashboard-menus-now-open-above-the-dashboard-canvas.md +6 -0
  145. package/corpus/templates/analytics/changelog/2026-07-08-team-settings-show-access-controls-next-to-member-lists.md +6 -0
  146. package/corpus/templates/analytics/changelog/2026-07-08-uptime-alerting-clarifies-in-app-inbox-vs-email-and-lets-you-paste-slack-or-webhook-urls-per-monitor.md +6 -0
  147. package/corpus/templates/analytics/changelog/2026-07-08-uptime-monitors-now-use-a-10-second-request-timeout-by-defau.md +6 -0
  148. package/corpus/templates/analytics/docs/uptime-monitoring.md +13 -11
  149. package/corpus/templates/analytics/server/db/schema-monitoring.ts +5 -1
  150. package/corpus/templates/analytics/server/db/schema.ts +56 -0
  151. package/corpus/templates/analytics/server/lib/analytics-alerts.ts +92 -0
  152. package/corpus/templates/analytics/server/lib/dashboards-store.ts +334 -5
  153. package/corpus/templates/analytics/server/lib/error-capture.ts +231 -36
  154. package/corpus/templates/analytics/server/lib/session-replay.ts +114 -8
  155. package/corpus/templates/analytics/server/lib/uptime-monitors.ts +65 -16
  156. package/corpus/templates/analytics/server/plugins/db.ts +122 -2
  157. package/corpus/templates/analytics/server/routes/api/dashboard-agent-context.json.get.ts +1 -0
  158. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +5 -0
  159. package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +1 -1
  160. package/corpus/templates/assets/.agents/skills/security/SKILL.md +7 -0
  161. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +20 -2
  162. package/corpus/templates/assets/.agents/skills/storing-data/SKILL.md +5 -1
  163. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  164. package/corpus/templates/assets/AGENTS.md +4 -0
  165. package/corpus/templates/assets/app/routes/settings.tsx +1 -1
  166. package/corpus/templates/assets/app/routes/team.tsx +1 -1
  167. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +5 -0
  168. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
  169. package/corpus/templates/brain/.agents/skills/real-time-sync/SKILL.md +1 -1
  170. package/corpus/templates/brain/.agents/skills/security/SKILL.md +7 -0
  171. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +20 -2
  172. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  173. package/corpus/templates/brain/AGENTS.md +4 -0
  174. package/corpus/templates/brain/app/routes/team.tsx +1 -1
  175. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +5 -0
  176. package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +1 -1
  177. package/corpus/templates/calendar/.agents/skills/security/SKILL.md +7 -0
  178. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +20 -2
  179. package/corpus/templates/calendar/.agents/skills/storing-data/SKILL.md +5 -1
  180. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  181. package/corpus/templates/calendar/AGENTS.md +4 -0
  182. package/corpus/templates/calendar/app/components/calendar/DayView.tsx +11 -2
  183. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +21 -8
  184. package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +7 -1
  185. package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +11 -2
  186. package/corpus/templates/calendar/app/lib/popover-click-guard.ts +48 -4
  187. package/corpus/templates/calendar/app/pages/Settings.tsx +1 -1
  188. package/corpus/templates/calendar/app/routes/_app.team.tsx +1 -1
  189. package/corpus/templates/calendar/changelog/2026-07-08-clicking-empty-calendar-space-closes-an-open-event-popover-b.md +6 -0
  190. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +5 -0
  191. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
  192. package/corpus/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
  193. package/corpus/templates/chat/.agents/skills/security/SKILL.md +7 -0
  194. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +20 -2
  195. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  196. package/corpus/templates/chat/AGENTS.md +4 -0
  197. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +1 -1
  198. package/corpus/templates/chat/app/routes/settings.tsx +2 -2
  199. package/corpus/templates/chat/app/routes/team.tsx +1 -1
  200. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +5 -0
  201. package/corpus/templates/clips/.agents/skills/security/SKILL.md +7 -0
  202. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +20 -2
  203. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  204. package/corpus/templates/clips/AGENTS.md +4 -0
  205. package/corpus/templates/clips/actions/finalize-recording.ts +9 -3
  206. package/corpus/templates/clips/actions/set-thumbnail.ts +11 -2
  207. package/corpus/templates/clips/app/components/meetings/canvas-editor.tsx +1 -7
  208. package/corpus/templates/clips/app/components/player/player-controls.tsx +21 -13
  209. package/corpus/templates/clips/app/components/player/video-player.tsx +30 -75
  210. package/corpus/templates/clips/app/i18n/ar-SA.ts +6 -5
  211. package/corpus/templates/clips/app/i18n/de-DE.ts +6 -6
  212. package/corpus/templates/clips/app/i18n/en-US.ts +6 -5
  213. package/corpus/templates/clips/app/i18n/es-ES.ts +6 -5
  214. package/corpus/templates/clips/app/i18n/fr-FR.ts +6 -6
  215. package/corpus/templates/clips/app/i18n/hi-IN.ts +6 -5
  216. package/corpus/templates/clips/app/i18n/ja-JP.ts +6 -5
  217. package/corpus/templates/clips/app/i18n/ko-KR.ts +6 -5
  218. package/corpus/templates/clips/app/i18n/pt-BR.ts +6 -5
  219. package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -5
  220. package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -5
  221. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +51 -118
  222. package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-notes-stay-active-from-tray-and-shortcut-controls.md +6 -0
  223. package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-popovers-can-start-notes-and-join-the-meetin.md +6 -0
  224. package/corpus/templates/clips/changelog/2026-07-08-hosted-clip-uploads-now-clear-failed-buffered-chunks.md +6 -0
  225. package/corpus/templates/clips/changelog/2026-07-08-hosted-recording-uploads-now-avoid-sql-chunk-storage.md +6 -0
  226. package/corpus/templates/clips/changelog/2026-07-08-meeting-notes-keep-their-recording-state-when-the-desktop.md +6 -0
  227. package/corpus/templates/clips/changelog/2026-07-08-meeting-recaps-now-keep-summaries-action-items-and-transcrip.md +6 -0
  228. package/corpus/templates/clips/changelog/2026-07-08-meeting-reminder-dropdowns-now-expand-fully-instead-of-being.md +6 -0
  229. package/corpus/templates/clips/changelog/2026-07-08-video-playback-controls-now-match-loom-style-5-second-skips-.md +6 -0
  230. package/corpus/templates/clips/desktop/src/app.tsx +123 -3
  231. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +15 -1
  232. package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +23 -0
  233. package/corpus/templates/clips/desktop/src/styles.css +23 -1
  234. package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +1 -3
  235. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +40 -6
  236. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +4 -2
  237. package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +3 -5
  238. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +23 -19
  239. package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +3 -3
  240. package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +0 -1
  241. package/corpus/templates/clips/desktop/src-tauri/src/state.rs +5 -0
  242. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -6
  243. package/corpus/templates/clips/server/lib/recording-upload-state.ts +63 -0
  244. package/corpus/templates/clips/server/lib/video-storage.ts +4 -0
  245. package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +19 -13
  246. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +40 -1
  247. package/corpus/templates/content/.agents/skills/actions/SKILL.md +5 -0
  248. package/corpus/templates/content/.agents/skills/real-time-sync/SKILL.md +1 -1
  249. package/corpus/templates/content/.agents/skills/security/SKILL.md +7 -0
  250. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +20 -2
  251. package/corpus/templates/content/.agents/skills/storing-data/SKILL.md +5 -1
  252. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  253. package/corpus/templates/content/AGENTS.md +4 -0
  254. package/corpus/templates/content/actions/_batch-utils.ts +8 -0
  255. package/corpus/templates/content/actions/_builder-cms-read-client.ts +7 -5
  256. package/corpus/templates/content/actions/_database-source-utils.ts +776 -319
  257. package/corpus/templates/content/actions/_database-utils.ts +6 -1
  258. package/corpus/templates/content/actions/_property-utils.ts +168 -0
  259. package/corpus/templates/content/actions/add-content-database-source-field-property.ts +19 -12
  260. package/corpus/templates/content/actions/bind-content-database-source-field.ts +19 -12
  261. package/corpus/templates/content/actions/delete-document.ts +9 -13
  262. package/corpus/templates/content/actions/refresh-content-database-source.ts +5 -5
  263. package/corpus/templates/content/app/components/editor/body-hydration.ts +35 -11
  264. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +47 -5
  265. package/corpus/templates/content/app/hooks/use-documents.ts +8 -2
  266. package/corpus/templates/content/app/routes/_app.settings.tsx +2 -2
  267. package/corpus/templates/content/app/routes/_app.team.tsx +1 -1
  268. package/corpus/templates/content/changelog/2026-07-08-builder-source-sync-now-completes-reliably-on-hosted-databases.md +6 -0
  269. package/corpus/templates/content/changelog/2026-07-08-fixed-builder-database-sync-so-large-sources-continue-past-t.md +6 -0
  270. package/corpus/templates/content/server/plugins/db.ts +19 -0
  271. package/corpus/templates/design/.agents/skills/actions/SKILL.md +5 -0
  272. package/corpus/templates/design/.agents/skills/security/SKILL.md +7 -0
  273. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +20 -2
  274. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  275. package/corpus/templates/design/AGENTS.md +4 -0
  276. package/corpus/templates/design/actions/take-design-screenshot.ts +12 -9
  277. package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +57 -13
  278. package/corpus/templates/design/app/routes/team.tsx +1 -1
  279. package/corpus/templates/design/changelog/2026-07-08-local-images-added-to-designs-now-upload-to-file-storage-ins.md +6 -0
  280. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +5 -0
  281. package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +7 -0
  282. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +20 -2
  283. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  284. package/corpus/templates/dispatch/AGENTS.md +4 -0
  285. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +1 -1
  286. package/corpus/templates/dispatch/app/routes/settings.tsx +2 -2
  287. package/corpus/templates/dispatch/app/routes/team.tsx +1 -1
  288. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +5 -0
  289. package/corpus/templates/forms/.agents/skills/real-time-sync/SKILL.md +1 -1
  290. package/corpus/templates/forms/.agents/skills/security/SKILL.md +7 -0
  291. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +20 -2
  292. package/corpus/templates/forms/.agents/skills/storing-data/SKILL.md +5 -1
  293. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  294. package/corpus/templates/forms/AGENTS.md +4 -0
  295. package/corpus/templates/forms/app/routes/_app.settings.tsx +2 -2
  296. package/corpus/templates/forms/app/routes/_app.team.tsx +1 -1
  297. package/corpus/templates/forms/shared/navigation.ts +1 -1
  298. package/corpus/templates/macros/.agents/skills/security/SKILL.md +7 -0
  299. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  300. package/corpus/templates/macros/AGENTS.md +4 -0
  301. package/corpus/templates/macros/app/routes/settings.tsx +2 -2
  302. package/corpus/templates/macros/app/routes/team.tsx +1 -1
  303. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +5 -0
  304. package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +1 -1
  305. package/corpus/templates/mail/.agents/skills/real-time-sync/SKILL.md +1 -1
  306. package/corpus/templates/mail/.agents/skills/security/SKILL.md +7 -0
  307. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +20 -2
  308. package/corpus/templates/mail/.agents/skills/storing-data/SKILL.md +5 -1
  309. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  310. package/corpus/templates/mail/AGENTS.md +4 -0
  311. package/corpus/templates/mail/changelog/2026-07-08-mail-attachments-in-hosted-environments-now-require-file-sto.md +6 -0
  312. package/corpus/templates/mail/server/handlers/media.ts +26 -1
  313. package/corpus/templates/mail/server/lib/outgoing-email.ts +24 -1
  314. package/corpus/templates/mail/server/lib/upload-store.ts +2 -1
  315. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +5 -0
  316. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
  317. package/corpus/templates/plan/.agents/skills/real-time-sync/SKILL.md +1 -1
  318. package/corpus/templates/plan/.agents/skills/security/SKILL.md +7 -0
  319. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +20 -2
  320. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  321. package/corpus/templates/plan/AGENTS.md +4 -0
  322. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +1 -1
  323. package/corpus/templates/plan/app/routes/settings.tsx +2 -2
  324. package/corpus/templates/plan/app/routes/team.tsx +1 -1
  325. package/corpus/templates/plan/changelog/2026-07-08-hosted-plan-images-now-require-connected-storage.md +6 -0
  326. package/corpus/templates/plan/server/lib/plan-assets.ts +33 -4
  327. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +5 -0
  328. package/corpus/templates/slides/.agents/skills/security/SKILL.md +7 -0
  329. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +20 -2
  330. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  331. package/corpus/templates/slides/AGENTS.md +4 -0
  332. package/corpus/templates/slides/actions/generate-image-api.ts +15 -3
  333. package/corpus/templates/slides/app/routes/settings.tsx +2 -2
  334. package/corpus/templates/slides/app/routes/team.tsx +1 -1
  335. package/corpus/templates/slides/changelog/2026-07-08-generated-slide-images-now-return-hosted-file-storage-urls-i.md +6 -0
  336. package/corpus/templates/slides/shared/api.ts +1 -1
  337. package/corpus/templates/videos/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  338. package/corpus/templates/voice/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  339. package/dist/agent/production-agent.d.ts +5 -1
  340. package/dist/agent/production-agent.d.ts.map +1 -1
  341. package/dist/agent/production-agent.js +112 -42
  342. package/dist/agent/production-agent.js.map +1 -1
  343. package/dist/agent/tool-search.d.ts +2 -0
  344. package/dist/agent/tool-search.d.ts.map +1 -1
  345. package/dist/agent/tool-search.js +60 -4
  346. package/dist/agent/tool-search.js.map +1 -1
  347. package/dist/application-state/store.d.ts.map +1 -1
  348. package/dist/application-state/store.js +8 -2
  349. package/dist/application-state/store.js.map +1 -1
  350. package/dist/cli/index.js +19 -0
  351. package/dist/cli/index.js.map +1 -1
  352. package/dist/cli/upgrade.d.ts +100 -0
  353. package/dist/cli/upgrade.d.ts.map +1 -0
  354. package/dist/cli/upgrade.js +678 -0
  355. package/dist/cli/upgrade.js.map +1 -0
  356. package/dist/client/AssistantChat.d.ts.map +1 -1
  357. package/dist/client/AssistantChat.js +25 -14
  358. package/dist/client/AssistantChat.js.map +1 -1
  359. package/dist/client/HighlightedCodeBlock.d.ts +2 -0
  360. package/dist/client/HighlightedCodeBlock.d.ts.map +1 -1
  361. package/dist/client/HighlightedCodeBlock.js +10 -1
  362. package/dist/client/HighlightedCodeBlock.js.map +1 -1
  363. package/dist/client/PoweredByBadge.d.ts +1 -1
  364. package/dist/client/PoweredByBadge.d.ts.map +1 -1
  365. package/dist/client/PoweredByBadge.js +3 -9
  366. package/dist/client/PoweredByBadge.js.map +1 -1
  367. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  368. package/dist/client/agent-chat-adapter.js +60 -13
  369. package/dist/client/agent-chat-adapter.js.map +1 -1
  370. package/dist/client/chat/message-components.d.ts.map +1 -1
  371. package/dist/client/chat/message-components.js +61 -8
  372. package/dist/client/chat/message-components.js.map +1 -1
  373. package/dist/client/chat/tool-call-display.d.ts +12 -0
  374. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  375. package/dist/client/chat/tool-call-display.js +136 -42
  376. package/dist/client/chat/tool-call-display.js.map +1 -1
  377. package/dist/client/chat/widgets/DataTableWidget.d.ts.map +1 -1
  378. package/dist/client/chat/widgets/DataTableWidget.js +19 -2
  379. package/dist/client/chat/widgets/DataTableWidget.js.map +1 -1
  380. package/dist/client/code-agent-chat-adapter.js +2 -9
  381. package/dist/client/code-agent-chat-adapter.js.map +1 -1
  382. package/dist/client/db-admin/TableEditor.d.ts.map +1 -1
  383. package/dist/client/db-admin/TableEditor.js +19 -2
  384. package/dist/client/db-admin/TableEditor.js.map +1 -1
  385. package/dist/client/db-admin/export-utils.d.ts +2 -0
  386. package/dist/client/db-admin/export-utils.d.ts.map +1 -1
  387. package/dist/client/db-admin/export-utils.js +11 -3
  388. package/dist/client/db-admin/export-utils.js.map +1 -1
  389. package/dist/client/db-admin/useAgentSync.d.ts.map +1 -1
  390. package/dist/client/db-admin/useAgentSync.js +63 -0
  391. package/dist/client/db-admin/useAgentSync.js.map +1 -1
  392. package/dist/client/error-capture.d.ts.map +1 -1
  393. package/dist/client/error-capture.js +41 -7
  394. package/dist/client/error-capture.js.map +1 -1
  395. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  396. package/dist/client/extensions/EmbeddedExtension.js +3 -1
  397. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  398. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  399. package/dist/client/extensions/ExtensionViewer.js +32 -5
  400. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  401. package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
  402. package/dist/client/extensions/InlineExtensionFrame.js +3 -1
  403. package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
  404. package/dist/client/extensions/portable-extension.d.ts.map +1 -1
  405. package/dist/client/extensions/portable-extension.js +1 -0
  406. package/dist/client/extensions/portable-extension.js.map +1 -1
  407. package/dist/client/org/OrgSwitcher.d.ts +1 -1
  408. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  409. package/dist/client/org/OrgSwitcher.js +11 -6
  410. package/dist/client/org/OrgSwitcher.js.map +1 -1
  411. package/dist/client/org/TeamPage.d.ts.map +1 -1
  412. package/dist/client/org/TeamPage.js +5 -5
  413. package/dist/client/org/TeamPage.js.map +1 -1
  414. package/dist/client/session-replay.d.ts +0 -8
  415. package/dist/client/session-replay.d.ts.map +1 -1
  416. package/dist/client/session-replay.js +3 -80
  417. package/dist/client/session-replay.js.map +1 -1
  418. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  419. package/dist/client/settings/SettingsPanel.js +89 -33
  420. package/dist/client/settings/SettingsPanel.js.map +1 -1
  421. package/dist/client/settings/SettingsSection.d.ts +19 -4
  422. package/dist/client/settings/SettingsSection.d.ts.map +1 -1
  423. package/dist/client/settings/SettingsSection.js +33 -4
  424. package/dist/client/settings/SettingsSection.js.map +1 -1
  425. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  426. package/dist/client/settings/SettingsTabsPage.js +21 -10
  427. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  428. package/dist/client/sse-event-processor.d.ts +9 -0
  429. package/dist/client/sse-event-processor.d.ts.map +1 -1
  430. package/dist/client/sse-event-processor.js +20 -2
  431. package/dist/client/sse-event-processor.js.map +1 -1
  432. package/dist/db-admin/agent-tools.d.ts.map +1 -1
  433. package/dist/db-admin/agent-tools.js +7 -2
  434. package/dist/db-admin/agent-tools.js.map +1 -1
  435. package/dist/db-admin/operations.d.ts.map +1 -1
  436. package/dist/db-admin/operations.js +90 -4
  437. package/dist/db-admin/operations.js.map +1 -1
  438. package/dist/db-admin/routes.d.ts.map +1 -1
  439. package/dist/db-admin/routes.js +1 -0
  440. package/dist/db-admin/routes.js.map +1 -1
  441. package/dist/db-admin/types.d.ts +4 -0
  442. package/dist/db-admin/types.d.ts.map +1 -1
  443. package/dist/db-admin/types.js.map +1 -1
  444. package/dist/extensions/actions.d.ts.map +1 -1
  445. package/dist/extensions/actions.js +85 -5
  446. package/dist/extensions/actions.js.map +1 -1
  447. package/dist/extensions/html-shell.d.ts +5 -4
  448. package/dist/extensions/html-shell.d.ts.map +1 -1
  449. package/dist/extensions/html-shell.js.map +1 -1
  450. package/dist/extensions/routes.d.ts.map +1 -1
  451. package/dist/extensions/routes.js +8 -0
  452. package/dist/extensions/routes.js.map +1 -1
  453. package/dist/navigation/index.d.ts +1 -1
  454. package/dist/navigation/index.d.ts.map +1 -1
  455. package/dist/navigation/index.js +1 -1
  456. package/dist/navigation/index.js.map +1 -1
  457. package/dist/notifications/channels.d.ts +8 -3
  458. package/dist/notifications/channels.d.ts.map +1 -1
  459. package/dist/notifications/channels.js +61 -22
  460. package/dist/notifications/channels.js.map +1 -1
  461. package/dist/notifications/registry.d.ts.map +1 -1
  462. package/dist/notifications/registry.js +14 -3
  463. package/dist/notifications/registry.js.map +1 -1
  464. package/dist/notifications/types.d.ts +4 -1
  465. package/dist/notifications/types.d.ts.map +1 -1
  466. package/dist/notifications/types.js.map +1 -1
  467. package/dist/resources/handlers.d.ts +5 -0
  468. package/dist/resources/handlers.d.ts.map +1 -1
  469. package/dist/resources/handlers.js +9 -8
  470. package/dist/resources/handlers.js.map +1 -1
  471. package/dist/server/agent-chat-plugin.d.ts +5 -1
  472. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  473. package/dist/server/agent-chat-plugin.js +2 -2
  474. package/dist/server/agent-chat-plugin.js.map +1 -1
  475. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  476. package/dist/server/poll.d.ts +12 -4
  477. package/dist/server/poll.d.ts.map +1 -1
  478. package/dist/server/poll.js +236 -9
  479. package/dist/server/poll.js.map +1 -1
  480. package/dist/server/request-context.d.ts +7 -0
  481. package/dist/server/request-context.d.ts.map +1 -1
  482. package/dist/server/request-context.js.map +1 -1
  483. package/dist/styles/agent-conversation.css +1 -1
  484. package/dist/styles/agent-native.css +27 -0
  485. package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -0
  486. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  487. package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  488. package/dist/templates/default/.agents/skills/security/SKILL.md +7 -0
  489. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  490. package/dist/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  491. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  492. package/dist/templates/default/AGENTS.md +14 -5
  493. package/dist/templates/default/package.json +2 -1
  494. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  495. package/dist/templates/headless/AGENTS.md +13 -3
  496. package/dist/templates/headless/package.json +1 -0
  497. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  498. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  499. package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  500. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  501. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  502. package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  503. package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  504. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  505. package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  506. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  507. package/dist/templates/workspace-core/AGENTS.md +7 -1
  508. package/dist/templates/workspace-root/AGENTS.md +17 -5
  509. package/dist/templates/workspace-root/package.json +1 -0
  510. package/docs/content/faq.mdx +17 -0
  511. package/docs/content/notifications.mdx +12 -6
  512. package/package.json +2 -2
  513. package/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
  514. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  515. package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  516. package/src/templates/default/.agents/skills/security/SKILL.md +7 -0
  517. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  518. package/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  519. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  520. package/src/templates/default/AGENTS.md +14 -5
  521. package/src/templates/default/package.json +2 -1
  522. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  523. package/src/templates/headless/AGENTS.md +13 -3
  524. package/src/templates/headless/package.json +1 -0
  525. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  526. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  527. package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  528. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  529. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  530. package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  531. package/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  532. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  533. package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  534. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  535. package/src/templates/workspace-core/AGENTS.md +7 -1
  536. package/src/templates/workspace-root/AGENTS.md +17 -5
  537. package/src/templates/workspace-root/package.json +1 -0
  538. package/corpus/templates/analytics/changelog/2026-07-08-session-replay-clamps-ultra-wide-viewports-while-keeping-the.md +0 -6
@@ -5,7 +5,7 @@ import {
5
5
  } from "@agent-native/core/client";
6
6
  import {
7
7
  IconBell,
8
- IconBellRinging,
8
+ IconChevronDown,
9
9
  IconLoader2,
10
10
  IconPencil,
11
11
  IconPlayerPlay,
@@ -36,6 +36,11 @@ import {
36
36
  CardTitle,
37
37
  } from "@/components/ui/card";
38
38
  import { Checkbox } from "@/components/ui/checkbox";
39
+ import {
40
+ Collapsible,
41
+ CollapsibleContent,
42
+ CollapsibleTrigger,
43
+ } from "@/components/ui/collapsible";
39
44
  import {
40
45
  Dialog,
41
46
  DialogContent,
@@ -54,14 +59,6 @@ import {
54
59
  SelectValue,
55
60
  } from "@/components/ui/select";
56
61
  import { Switch } from "@/components/ui/switch";
57
- import {
58
- Table,
59
- TableBody,
60
- TableCell,
61
- TableHead,
62
- TableHeader,
63
- TableRow,
64
- } from "@/components/ui/table";
65
62
  import { Textarea } from "@/components/ui/textarea";
66
63
  import { cn } from "@/lib/utils";
67
64
 
@@ -92,6 +89,8 @@ interface AnalyticsAlertRule {
92
89
  severity: AlertSeverity;
93
90
  channels: string[];
94
91
  emailRecipients: string[];
92
+ slackWebhookUrl: string | null;
93
+ webhookUrl: string | null;
95
94
  enabled: boolean;
96
95
  lastEvaluatedAt: string | null;
97
96
  lastTriggeredAt: string | null;
@@ -108,6 +107,10 @@ interface RunAlertsResult {
108
107
  remaining: number;
109
108
  }
110
109
 
110
+ interface AlertRuleDefaults {
111
+ emailRecipients: string[];
112
+ }
113
+
111
114
  interface AlertRuleFormState {
112
115
  id?: string;
113
116
  name: string;
@@ -124,11 +127,16 @@ interface AlertRuleFormState {
124
127
  channels: Record<KnownChannel, boolean>;
125
128
  customChannels: string;
126
129
  emailRecipients: string;
130
+ slackWebhookUrl: string;
131
+ webhookUrl: string;
127
132
  }
128
133
 
129
134
  const KNOWN_CHANNELS = ["inbox", "email", "slack", "webhook"] as const;
130
135
 
131
- function emptyAlertForm(): AlertRuleFormState {
136
+ function emptyAlertForm(
137
+ defaults?: AlertRuleDefaults | null,
138
+ ): AlertRuleFormState {
139
+ const emailRecipients = defaults?.emailRecipients ?? [];
132
140
  return {
133
141
  name: "",
134
142
  description: "",
@@ -143,12 +151,14 @@ function emptyAlertForm(): AlertRuleFormState {
143
151
  enabled: true,
144
152
  channels: {
145
153
  inbox: true,
146
- email: false,
154
+ email: emailRecipients.length > 0,
147
155
  slack: false,
148
156
  webhook: false,
149
157
  },
150
158
  customChannels: "",
151
- emailRecipients: "",
159
+ emailRecipients: emailRecipients.join("\n"),
160
+ slackWebhookUrl: "",
161
+ webhookUrl: "",
152
162
  };
153
163
  }
154
164
 
@@ -180,6 +190,8 @@ function formFromRule(rule: AnalyticsAlertRule): AlertRuleFormState {
180
190
  },
181
191
  customChannels: customChannels.join(", "),
182
192
  emailRecipients: rule.emailRecipients.join("\n"),
193
+ slackWebhookUrl: rule.slackWebhookUrl ?? "",
194
+ webhookUrl: rule.webhookUrl ?? "",
183
195
  };
184
196
  }
185
197
 
@@ -195,6 +207,15 @@ function parseInteger(value: string, fallback: number): number {
195
207
  return Number.isFinite(parsed) ? parsed : fallback;
196
208
  }
197
209
 
210
+ function isHttpUrl(value: string): boolean {
211
+ try {
212
+ const parsed = new URL(value);
213
+ return parsed.protocol === "http:" || parsed.protocol === "https:";
214
+ } catch {
215
+ return false;
216
+ }
217
+ }
218
+
198
219
  function formatDate(value: string | null, fallback: string): string {
199
220
  if (!value) return fallback;
200
221
  const date = new Date(value);
@@ -237,6 +258,8 @@ function payloadFromRule(
237
258
  severity: rule.severity,
238
259
  channels: rule.channels,
239
260
  emailRecipients: rule.emailRecipients,
261
+ slackWebhookUrl: rule.slackWebhookUrl,
262
+ webhookUrl: rule.webhookUrl,
240
263
  enabled: rule.enabled,
241
264
  ...overrides,
242
265
  };
@@ -256,6 +279,9 @@ export function AlertRulesSettingsCard() {
256
279
  const t = useT();
257
280
  const queryClient = useQueryClient();
258
281
  const [editing, setEditing] = useState<AlertRuleFormState | null>(null);
282
+ const [expandedRuleIds, setExpandedRuleIds] = useState<Set<string>>(
283
+ () => new Set(),
284
+ );
259
285
  const [ruleToDelete, setRuleToDelete] = useState<AnalyticsAlertRule | null>(
260
286
  null,
261
287
  );
@@ -265,6 +291,11 @@ export function AlertRulesSettingsCard() {
265
291
  undefined,
266
292
  { staleTime: 10_000 },
267
293
  );
294
+ const { data: alertDefaults } = useActionQuery<AlertRuleDefaults>(
295
+ "get-analytics-alert-rule-defaults",
296
+ undefined,
297
+ { staleTime: 10_000 },
298
+ );
268
299
  const saveRule = useActionMutation("save-analytics-alert-rule");
269
300
  const deleteRule = useActionMutation("delete-analytics-alert-rule");
270
301
  const runAlerts = useActionMutation("run-analytics-alerts");
@@ -276,9 +307,28 @@ export function AlertRulesSettingsCard() {
276
307
  await queryClient.invalidateQueries({
277
308
  queryKey: ["action", "list-analytics-alert-rules"],
278
309
  });
310
+ await queryClient.invalidateQueries({
311
+ queryKey: ["action", "get-analytics-alert-rule-defaults"],
312
+ });
279
313
  await refetch();
280
314
  }
281
315
 
316
+ function startCreateAlert() {
317
+ setEditing(emptyAlertForm(alertDefaults));
318
+ }
319
+
320
+ function setRuleExpanded(ruleId: string, expanded: boolean) {
321
+ setExpandedRuleIds((current) => {
322
+ const next = new Set(current);
323
+ if (expanded) {
324
+ next.add(ruleId);
325
+ } else {
326
+ next.delete(ruleId);
327
+ }
328
+ return next;
329
+ });
330
+ }
331
+
282
332
  async function handleSave() {
283
333
  if (!editing) return;
284
334
  let filters: AnalyticsAlertFilter[];
@@ -304,6 +354,22 @@ export function AlertRulesSettingsCard() {
304
354
  toast.error(t("settings.alertChannelRequired"));
305
355
  return;
306
356
  }
357
+ if (
358
+ editing.channels.slack &&
359
+ editing.slackWebhookUrl.trim() &&
360
+ !isHttpUrl(editing.slackWebhookUrl.trim())
361
+ ) {
362
+ toast.error(t("settings.alertSlackWebhookUrlInvalid"));
363
+ return;
364
+ }
365
+ if (
366
+ editing.channels.webhook &&
367
+ editing.webhookUrl.trim() &&
368
+ !isHttpUrl(editing.webhookUrl.trim())
369
+ ) {
370
+ toast.error(t("settings.alertWebhookUrlInvalid"));
371
+ return;
372
+ }
307
373
 
308
374
  try {
309
375
  await saveRule.mutateAsync({
@@ -323,6 +389,10 @@ export function AlertRulesSettingsCard() {
323
389
  severity: editing.severity,
324
390
  channels,
325
391
  emailRecipients: splitList(editing.emailRecipients),
392
+ slackWebhookUrl: editing.channels.slack
393
+ ? editing.slackWebhookUrl.trim()
394
+ : null,
395
+ webhookUrl: editing.channels.webhook ? editing.webhookUrl.trim() : null,
326
396
  enabled: editing.enabled,
327
397
  });
328
398
  setEditing(null);
@@ -422,11 +492,7 @@ export function AlertRulesSettingsCard() {
422
492
  )}
423
493
  {t("settings.alertRunNow")}
424
494
  </Button>
425
- <Button
426
- type="button"
427
- size="sm"
428
- onClick={() => setEditing(emptyAlertForm())}
429
- >
495
+ <Button type="button" size="sm" onClick={startCreateAlert}>
430
496
  <IconPlus className="size-3.5" />
431
497
  {t("settings.alertNew")}
432
498
  </Button>
@@ -455,30 +521,25 @@ export function AlertRulesSettingsCard() {
455
521
  type="button"
456
522
  size="sm"
457
523
  className="mt-4"
458
- onClick={() => setEditing(emptyAlertForm())}
524
+ onClick={startCreateAlert}
459
525
  >
460
526
  <IconPlus className="size-3.5" />
461
527
  {t("settings.alertNew")}
462
528
  </Button>
463
529
  </div>
464
530
  ) : (
465
- <Table>
466
- <TableHeader>
467
- <TableRow>
468
- <TableHead>{t("settings.alertRuleColumn")}</TableHead>
469
- <TableHead>{t("settings.alertConditionColumn")}</TableHead>
470
- <TableHead>{t("settings.alertDeliveryColumn")}</TableHead>
471
- <TableHead>{t("settings.alertStatusColumn")}</TableHead>
472
- <TableHead className="w-[116px] text-end">
473
- {t("settings.alertActionsColumn")}
474
- </TableHead>
475
- </TableRow>
476
- </TableHeader>
477
- <TableBody>
478
- {rules.map((rule) => (
479
- <TableRow key={rule.id}>
480
- <TableCell className="min-w-[190px]">
481
- <div className="flex items-start gap-3">
531
+ <div className="space-y-2">
532
+ {rules.map((rule) => {
533
+ const expanded = expandedRuleIds.has(rule.id);
534
+ return (
535
+ <Collapsible
536
+ key={rule.id}
537
+ open={expanded}
538
+ onOpenChange={(open) => setRuleExpanded(rule.id, open)}
539
+ className="rounded-lg border border-border/60 bg-background/40"
540
+ >
541
+ <div className="flex flex-col gap-3 px-3 py-3 sm:flex-row sm:items-center">
542
+ <div className="flex min-w-0 flex-1 items-start gap-3">
482
543
  <Switch
483
544
  checked={rule.enabled}
484
545
  onCheckedChange={(enabled) =>
@@ -487,10 +548,11 @@ export function AlertRulesSettingsCard() {
487
548
  aria-label={t("settings.alertToggleLabel", {
488
549
  name: rule.name,
489
550
  })}
551
+ className="mt-0.5 shrink-0"
490
552
  />
491
- <div className="min-w-0">
553
+ <div className="min-w-0 flex-1">
492
554
  <div className="flex min-w-0 flex-wrap items-center gap-2">
493
- <span className="truncate font-medium">
555
+ <span className="truncate text-sm font-medium">
494
556
  {rule.name}
495
557
  </span>
496
558
  <Badge
@@ -506,79 +568,114 @@ export function AlertRulesSettingsCard() {
506
568
  : t("settings.alertSeverityWarning")}
507
569
  </Badge>
508
570
  </div>
509
- {rule.description ? (
510
- <p className="mt-1 line-clamp-2 text-xs text-muted-foreground">
511
- {rule.description}
512
- </p>
513
- ) : null}
571
+ <p className="mt-0.5 line-clamp-1 text-xs text-muted-foreground">
572
+ {rule.description || formatScope(rule, t)}
573
+ </p>
514
574
  </div>
515
575
  </div>
516
- </TableCell>
517
- <TableCell className="min-w-[180px] text-xs">
518
- <div className="font-medium">
519
- {formatThreshold(rule, t)}
520
- </div>
521
- <div className="mt-1 text-muted-foreground">
522
- {formatScope(rule, t)}
523
- </div>
524
- </TableCell>
525
- <TableCell className="min-w-[140px] text-xs">
526
- <div className="flex flex-wrap gap-1">
527
- {rule.channels.map((channel) => (
528
- <Badge
529
- key={channel}
530
- variant="secondary"
531
- className="text-[10px]"
576
+
577
+ <div className="flex flex-wrap items-center gap-3 sm:justify-end">
578
+ <div className="min-w-0 text-xs sm:w-40">
579
+ <div className="truncate font-medium">
580
+ {formatThreshold(rule, t)}
581
+ </div>
582
+ <div className="mt-0.5 flex items-center gap-1.5 text-muted-foreground">
583
+ <span
584
+ className={cn(
585
+ "size-1.5 rounded-full",
586
+ statusDotClass(rule.lastStatus),
587
+ )}
588
+ />
589
+ <span>{statusLabel(rule.lastStatus, t)}</span>
590
+ </div>
591
+ </div>
592
+ <div className="flex shrink-0 items-center gap-1">
593
+ <Button
594
+ type="button"
595
+ variant="outline"
596
+ size="sm"
597
+ onClick={() => setEditing(formFromRule(rule))}
598
+ aria-label={t("settings.alertEditLabel", {
599
+ name: rule.name,
600
+ })}
532
601
  >
533
- {knownChannelLabel(channel, t)}
534
- </Badge>
535
- ))}
536
- </div>
537
- {rule.emailRecipients.length > 0 ? (
538
- <div className="mt-1 truncate text-muted-foreground">
539
- {rule.emailRecipients.join(", ")}
602
+ <IconPencil className="size-3.5" />
603
+ {t("sidebar.edit")}
604
+ </Button>
605
+ <CollapsibleTrigger asChild>
606
+ <Button
607
+ type="button"
608
+ variant="ghost"
609
+ size="sm"
610
+ aria-label={t("sessions.devtoolsToggleDetails")}
611
+ >
612
+ {t("sqlDashboard.details")}
613
+ <IconChevronDown
614
+ className={cn(
615
+ "size-3.5 transition-transform",
616
+ expanded && "rotate-180",
617
+ )}
618
+ />
619
+ </Button>
620
+ </CollapsibleTrigger>
540
621
  </div>
541
- ) : null}
542
- </TableCell>
543
- <TableCell className="min-w-[150px] text-xs">
544
- <div className="flex items-center gap-2">
545
- <span
546
- className={cn(
547
- "size-2 rounded-full",
548
- statusDotClass(rule.lastStatus),
549
- )}
550
- />
551
- <span className="font-medium">
552
- {statusLabel(rule.lastStatus, t)}
553
- </span>
554
622
  </div>
555
- <div className="mt-1 text-muted-foreground">
556
- {t("settings.alertLastChecked", {
557
- date: formatDate(
558
- rule.lastEvaluatedAt,
623
+ </div>
624
+
625
+ <CollapsibleContent className="border-t border-border/60 px-3 py-3">
626
+ <div className="grid gap-3 text-xs sm:grid-cols-2 lg:grid-cols-3">
627
+ <AlertRuleDetail
628
+ label={t("settings.alertConditionColumn")}
629
+ value={formatThreshold(rule, t)}
630
+ detail={formatScope(rule, t)}
631
+ />
632
+ <AlertRuleDetail
633
+ label={t("settings.alertDeliveryColumn")}
634
+ value={rule.channels
635
+ .map((channel) => knownChannelLabel(channel, t))
636
+ .join(", ")}
637
+ detail={
638
+ rule.emailRecipients.length > 0
639
+ ? rule.emailRecipients.join(", ")
640
+ : undefined
641
+ }
642
+ />
643
+ <AlertRuleDetail
644
+ label={t("settings.alertStatusColumn")}
645
+ value={statusLabel(rule.lastStatus, t)}
646
+ detail={t("settings.alertLastChecked", {
647
+ date: formatDate(
648
+ rule.lastEvaluatedAt,
649
+ t("settings.alertNever"),
650
+ ),
651
+ })}
652
+ />
653
+ <AlertRuleDetail
654
+ label={t("settings.alertEventName")}
655
+ value={rule.eventName || t("settings.alertAllEvents")}
656
+ />
657
+ <AlertRuleDetail
658
+ label={t("settings.alertFilters")}
659
+ value={
660
+ rule.filters.length > 0
661
+ ? JSON.stringify(rule.filters)
662
+ : "[]"
663
+ }
664
+ />
665
+ <AlertRuleDetail
666
+ label={t("settings.alertStatusTriggered")}
667
+ value={formatDate(
668
+ rule.lastTriggeredAt,
559
669
  t("settings.alertNever"),
560
- ),
561
- })}
670
+ )}
671
+ />
562
672
  </div>
563
673
  {rule.lastError ? (
564
- <div className="mt-1 max-w-[220px] truncate text-destructive">
674
+ <div className="mt-3 rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-xs text-destructive">
565
675
  {rule.lastError}
566
676
  </div>
567
677
  ) : null}
568
- </TableCell>
569
- <TableCell>
570
- <div className="flex justify-end gap-1">
571
- <Button
572
- type="button"
573
- variant="ghost"
574
- size="sm"
575
- onClick={() => setEditing(formFromRule(rule))}
576
- aria-label={t("settings.alertEditLabel", {
577
- name: rule.name,
578
- })}
579
- >
580
- <IconPencil className="size-3.5" />
581
- </Button>
678
+ <div className="mt-3 flex justify-end">
582
679
  <Button
583
680
  type="button"
584
681
  variant="ghost"
@@ -590,13 +687,14 @@ export function AlertRulesSettingsCard() {
590
687
  })}
591
688
  >
592
689
  <IconTrash className="size-3.5" />
690
+ {t("sidebar.delete")}
593
691
  </Button>
594
692
  </div>
595
- </TableCell>
596
- </TableRow>
597
- ))}
598
- </TableBody>
599
- </Table>
693
+ </CollapsibleContent>
694
+ </Collapsible>
695
+ );
696
+ })}
697
+ </div>
600
698
  )}
601
699
  </CardContent>
602
700
  </Card>
@@ -642,6 +740,28 @@ export function AlertRulesSettingsCard() {
642
740
  );
643
741
  }
644
742
 
743
+ function AlertRuleDetail({
744
+ label,
745
+ value,
746
+ detail,
747
+ }: {
748
+ label: string;
749
+ value: string;
750
+ detail?: string;
751
+ }) {
752
+ return (
753
+ <div className="min-w-0 rounded-md bg-muted/25 px-3 py-2">
754
+ <div className="text-[11px] font-medium uppercase tracking-wide text-muted-foreground">
755
+ {label}
756
+ </div>
757
+ <div className="mt-1 truncate font-medium">{value}</div>
758
+ {detail ? (
759
+ <div className="mt-0.5 truncate text-muted-foreground">{detail}</div>
760
+ ) : null}
761
+ </div>
762
+ );
763
+ }
764
+
645
765
  function AlertRuleDialog({
646
766
  form,
647
767
  setForm,
@@ -853,6 +973,44 @@ function AlertRuleDialog({
853
973
  </div>
854
974
  </div>
855
975
 
976
+ {form.channels.slack ? (
977
+ <div className="space-y-1.5">
978
+ <Label htmlFor="alert-slack-webhook-url">
979
+ {t("settings.alertSlackWebhookUrl")}
980
+ </Label>
981
+ <Input
982
+ id="alert-slack-webhook-url"
983
+ type="url"
984
+ value={form.slackWebhookUrl}
985
+ onChange={(event) =>
986
+ setField("slackWebhookUrl", event.target.value)
987
+ }
988
+ placeholder={t("settings.alertSlackWebhookUrlPlaceholder")}
989
+ />
990
+ <p className="text-xs text-muted-foreground">
991
+ {t("settings.alertSlackWebhookUrlHint")}
992
+ </p>
993
+ </div>
994
+ ) : null}
995
+
996
+ {form.channels.webhook ? (
997
+ <div className="space-y-1.5">
998
+ <Label htmlFor="alert-webhook-url">
999
+ {t("settings.alertWebhookUrl")}
1000
+ </Label>
1001
+ <Input
1002
+ id="alert-webhook-url"
1003
+ type="url"
1004
+ value={form.webhookUrl}
1005
+ onChange={(event) => setField("webhookUrl", event.target.value)}
1006
+ placeholder={t("settings.alertWebhookUrlPlaceholder")}
1007
+ />
1008
+ <p className="text-xs text-muted-foreground">
1009
+ {t("settings.alertWebhookUrlHint")}
1010
+ </p>
1011
+ </div>
1012
+ ) : null}
1013
+
856
1014
  <div className="space-y-1.5">
857
1015
  <Label htmlFor="alert-custom-channels">
858
1016
  {t("settings.alertCustomChannels")}
@@ -7,5 +7,5 @@ export function meta() {
7
7
  }
8
8
 
9
9
  export default function TeamRoute() {
10
- return <Navigate to="/settings#team" replace />;
10
+ return <Navigate to="/settings#organization" replace />;
11
11
  }
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Admins can audit dashboard usage, ownership, and cleanup signals from a new Admin view.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Agent monitoring stays available to non-admin users while admin-only dashboard and database tools remain restricted.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Alert rules are easier to scan, expand, and edit from Settings.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Analytics alert forms remember your last email recipients when creating the next rule.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Analytics alert rules can now use per-rule Slack and webhook URLs.
@@ -0,0 +1,5 @@
1
+ ---
2
+ type: improved
3
+ ---
4
+
5
+ Dashboards and saved analyses now keep restorable history, and the active dashboard or database table appears as context in chat.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Dashboard charts and tables keep their layout steady while loading.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Dashboard usage now counts explorer dashboard traffic and links to explorer dashboards correctly.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Demo mode now filters session replay data to Builder sessions and anonymizes session email addresses everywhere sessions are shown.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Error issue details now show Sentry-style stack frames, source snippets, and a recent frequency bar chart.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Error issue detail now shows the latest occurrence message and metadata for faster triage.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Monitoring errors only shows the test-error action when no errors have been captured yet.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Monitoring Uptime and Errors tabs now clearly show which view is active.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Production session replay now requires private blob storage when full snapshot playback is enabled.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Session replay uses stock rrweb sizing again so recorded pages reassemble correctly instead of showing a blank stage