@agent-native/core 0.90.11 → 0.91.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 (322) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +34 -0
  3. package/corpus/core/docs/content/toolkit-settings.mdx +56 -3
  4. package/corpus/core/package.json +2 -1
  5. package/corpus/core/src/agent/run-ownership.ts +29 -1
  6. package/corpus/core/src/changelog/parse.ts +78 -0
  7. package/corpus/core/src/chat-threads/schema.ts +43 -0
  8. package/corpus/core/src/chat-threads/store.ts +144 -12
  9. package/corpus/core/src/cli/design-connect.ts +53 -9
  10. package/corpus/core/src/cli/workspace-dev.ts +25 -5
  11. package/corpus/core/src/client/AgentPanel.tsx +79 -14
  12. package/corpus/core/src/client/AssistantChat.tsx +359 -425
  13. package/corpus/core/src/client/analytics-session.ts +70 -0
  14. package/corpus/core/src/client/analytics.ts +175 -49
  15. package/corpus/core/src/client/chat/message-components.tsx +22 -2
  16. package/corpus/core/src/client/components/ui/message-scroller.tsx +131 -0
  17. package/corpus/core/src/client/conversation/AgentConversation.tsx +63 -41
  18. package/corpus/core/src/client/error-capture.ts +616 -0
  19. package/corpus/core/src/client/index.ts +12 -0
  20. package/corpus/core/src/client/session-replay.ts +57 -7
  21. package/corpus/core/src/client/settings/SettingsPanel.tsx +123 -1
  22. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +292 -45
  23. package/corpus/core/src/client/settings/index.ts +1 -0
  24. package/corpus/core/src/client/sharing/ShareButton.tsx +14 -11
  25. package/corpus/core/src/client/sharing/ShareDialog.tsx +13 -10
  26. package/corpus/core/src/mcp/builtin-tools.ts +29 -2
  27. package/corpus/core/src/server/agent-chat-plugin.ts +174 -79
  28. package/corpus/core/src/server/onboarding-html.ts +28 -16
  29. package/corpus/core/src/sharing/actions/list-resource-shares.ts +45 -1
  30. package/corpus/core/src/sharing/actions/share-resource.ts +9 -0
  31. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -2
  32. package/corpus/core/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +9 -6
  33. package/corpus/core/src/vite/client.ts +217 -35
  34. package/corpus/templates/analytics/.agents/skills/adhoc-analysis/SKILL.md +8 -7
  35. package/corpus/templates/analytics/.agents/skills/analysis-workspace/SKILL.md +14 -10
  36. package/corpus/templates/analytics/.agents/skills/bigquery/SKILL.md +15 -15
  37. package/corpus/templates/analytics/.agents/skills/cross-source-analysis/SKILL.md +1 -0
  38. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +38 -22
  39. package/corpus/templates/analytics/.agents/skills/data-programs/SKILL.md +114 -61
  40. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +1 -0
  41. package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +7 -7
  42. package/corpus/templates/analytics/.agents/skills/hubspot/SKILL.md +1 -0
  43. package/corpus/templates/analytics/.agents/skills/prometheus/SKILL.md +1 -1
  44. package/corpus/templates/analytics/.builder/skills/bigquery/SKILL.md +17 -17
  45. package/corpus/templates/analytics/.builder/skills/gcloud/SKILL.md +5 -5
  46. package/corpus/templates/analytics/.builder/skills/github/SKILL.md +7 -7
  47. package/corpus/templates/analytics/.builder/skills/gong/SKILL.md +12 -12
  48. package/corpus/templates/analytics/.builder/skills/grafana/SKILL.md +7 -7
  49. package/corpus/templates/analytics/.builder/skills/sentry/SKILL.md +7 -7
  50. package/corpus/templates/analytics/.builder/skills/slack/SKILL.md +6 -6
  51. package/corpus/templates/analytics/.builder/skills/stripe/SKILL.md +7 -7
  52. package/corpus/templates/analytics/AGENTS.md +47 -2
  53. package/corpus/templates/analytics/actions/add-status-page-monitor.ts +36 -0
  54. package/corpus/templates/analytics/actions/capture-test-error.ts +33 -0
  55. package/corpus/templates/analytics/actions/delete-monitor.ts +24 -0
  56. package/corpus/templates/analytics/actions/delete-status-page.ts +23 -0
  57. package/corpus/templates/analytics/actions/get-error-issue.ts +36 -0
  58. package/corpus/templates/analytics/actions/get-monitor-stats.ts +55 -0
  59. package/corpus/templates/analytics/actions/get-monitor.ts +27 -0
  60. package/corpus/templates/analytics/actions/get-public-status-page.ts +41 -0
  61. package/corpus/templates/analytics/actions/get-status-page.ts +29 -0
  62. package/corpus/templates/analytics/actions/list-error-issues.ts +40 -0
  63. package/corpus/templates/analytics/actions/list-monitors.ts +21 -0
  64. package/corpus/templates/analytics/actions/list-status-pages.ts +21 -0
  65. package/corpus/templates/analytics/actions/match-error-issues.ts +51 -0
  66. package/corpus/templates/analytics/actions/navigate.ts +58 -4
  67. package/corpus/templates/analytics/actions/remove-status-page-monitor.ts +22 -0
  68. package/corpus/templates/analytics/actions/reorder-status-page-monitors.ts +25 -0
  69. package/corpus/templates/analytics/actions/resolve-error-issue.ts +38 -0
  70. package/corpus/templates/analytics/actions/run-monitor-check.ts +23 -0
  71. package/corpus/templates/analytics/actions/save-analysis.ts +1 -0
  72. package/corpus/templates/analytics/actions/save-monitor.ts +145 -0
  73. package/corpus/templates/analytics/actions/save-status-page.ts +47 -0
  74. package/corpus/templates/analytics/actions/view-screen.ts +212 -0
  75. package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -0
  76. package/corpus/templates/analytics/app/components/layout/Layout.tsx +10 -1
  77. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +134 -39
  78. package/corpus/templates/analytics/app/components/monitoring/PublicStatusView.tsx +351 -0
  79. package/corpus/templates/analytics/app/components/monitoring/ResponseTimeChart.tsx +174 -0
  80. package/corpus/templates/analytics/app/components/monitoring/UptimeStatCards.tsx +85 -0
  81. package/corpus/templates/analytics/app/components/monitoring/UptimeTimelineBars.tsx +106 -0
  82. package/corpus/templates/analytics/app/components/monitoring/chart-utils.ts +101 -0
  83. package/corpus/templates/analytics/app/components/monitoring/index.ts +28 -0
  84. package/corpus/templates/analytics/app/components/monitoring/types.ts +42 -0
  85. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +34 -0
  86. package/corpus/templates/analytics/app/i18n/zh-TW.ts +6 -0
  87. package/corpus/templates/analytics/app/i18n-data.ts +33 -0
  88. package/corpus/templates/analytics/app/pages/DataSources.tsx +28 -0
  89. package/corpus/templates/analytics/app/pages/Settings.tsx +77 -9
  90. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +3 -3
  91. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-layout.ts +7 -0
  92. package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +205 -0
  93. package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +100 -0
  94. package/corpus/templates/analytics/app/pages/monitoring/UptimePanel.tsx +475 -0
  95. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +372 -0
  96. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +360 -0
  97. package/corpus/templates/analytics/app/pages/monitoring/errors/Sparkline.tsx +55 -0
  98. package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +106 -0
  99. package/corpus/templates/analytics/app/pages/monitoring/errors/types.ts +75 -0
  100. package/corpus/templates/analytics/app/pages/monitoring/errors/utils.ts +132 -0
  101. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorDetail.tsx +535 -0
  102. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +1026 -0
  103. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorList.tsx +311 -0
  104. package/corpus/templates/analytics/app/pages/monitoring/uptime/i18n.ts +235 -0
  105. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/StatusPageEditor.tsx +661 -0
  106. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/StatusPagesView.tsx +355 -0
  107. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/i18n.ts +106 -0
  108. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/slug.ts +24 -0
  109. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-pages/types.ts +20 -0
  110. package/corpus/templates/analytics/app/pages/monitoring/uptime/status-summary.ts +87 -0
  111. package/corpus/templates/analytics/app/pages/monitoring/uptime/types.ts +161 -0
  112. package/corpus/templates/analytics/app/pages/monitoring/uptime/utils.ts +210 -0
  113. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +76 -1
  114. package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +74 -9
  115. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +197 -20
  116. package/corpus/templates/analytics/app/root.tsx +33 -1
  117. package/corpus/templates/analytics/app/routes/monitoring._index.tsx +10 -0
  118. package/corpus/templates/analytics/app/routes/status.$slug.tsx +118 -0
  119. package/corpus/templates/analytics/changelog/2026-07-08-add-uptime-monitors-that-ping-your-urls-and-alert-you-when-t.md +6 -0
  120. package/corpus/templates/analytics/changelog/2026-07-08-analytics-chats-keep-large-data-dictionaries-compact-so-prov.md +6 -0
  121. package/corpus/templates/analytics/changelog/2026-07-08-create-public-status-pages-that-share-the-live-health-of-cho.md +6 -0
  122. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-extension-panels-use-clearer-open-copy.md +6 -0
  123. package/corpus/templates/analytics/changelog/2026-07-08-error-capture.md +6 -0
  124. package/corpus/templates/analytics/changelog/2026-07-08-fixed-single-panel-dashboard-drags-so-they-no-longer-rewrite.md +6 -0
  125. package/corpus/templates/analytics/changelog/2026-07-08-jump-straight-from-an-error-in-a-session-recording-to-its-fu.md +6 -0
  126. package/corpus/templates/analytics/changelog/2026-07-08-monitor-detail-and-list-now-show-colorful-uptime-timelines-r.md +6 -0
  127. package/corpus/templates/analytics/changelog/2026-07-08-pinned-ask-chats-now-show-a-pin-icon-in-the-sidebar.md +6 -0
  128. package/corpus/templates/analytics/changelog/2026-07-08-publish-a-public-uptime-status-page-with-colorful-uptime-tim.md +6 -0
  129. package/corpus/templates/analytics/changelog/2026-07-08-sessions-now-hide-visitor-emails-in-demo-mode-and-show-clean.md +6 -0
  130. package/corpus/templates/analytics/changelog/2026-07-08-settings-are-cleaner-searchable-and-alerts-have-their-own-tab.md +5 -0
  131. package/corpus/templates/analytics/changelog/2026-07-08-sidebar-sections-stay-collapsed-until-opened.md +5 -0
  132. package/corpus/templates/analytics/changelog/2026-07-08-the-uptime-monitor-list-now-has-a-current-status-overview-wi.md +6 -0
  133. package/corpus/templates/analytics/docs/error-capture.md +172 -0
  134. package/corpus/templates/analytics/docs/uptime-monitoring.md +150 -0
  135. package/corpus/templates/analytics/server/db/schema-errors.ts +150 -0
  136. package/corpus/templates/analytics/server/db/schema-monitoring.ts +177 -0
  137. package/corpus/templates/analytics/server/db/schema.ts +6 -0
  138. package/corpus/templates/analytics/server/jobs/uptime-monitors.ts +123 -0
  139. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +41 -0
  140. package/corpus/templates/analytics/server/lib/data-dictionary-context.ts +55 -12
  141. package/corpus/templates/analytics/server/lib/error-capture.ts +1331 -0
  142. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +47 -1
  143. package/corpus/templates/analytics/server/lib/monitor-stats.ts +494 -0
  144. package/corpus/templates/analytics/server/lib/status-pages.ts +798 -0
  145. package/corpus/templates/analytics/server/lib/uptime-monitors.ts +1665 -0
  146. package/corpus/templates/analytics/server/plugins/agent-chat.ts +7 -37
  147. package/corpus/templates/analytics/server/plugins/auth.ts +11 -1
  148. package/corpus/templates/analytics/server/plugins/db.ts +408 -0
  149. package/corpus/templates/analytics/server/plugins/uptime-monitor-jobs.ts +63 -0
  150. package/corpus/templates/assets/app/routes/_index.tsx +1 -1
  151. package/corpus/templates/assets/app/routes/settings.tsx +22 -1
  152. package/corpus/templates/assets/changelog/2026-07-08-recent-drafts-keep-comfortable-side-padding.md +6 -0
  153. package/corpus/templates/assets/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  154. package/corpus/templates/brain/app/routes/settings.tsx +43 -5
  155. package/corpus/templates/brain/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  156. package/corpus/templates/calendar/app/pages/Settings.tsx +44 -6
  157. package/corpus/templates/calendar/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  158. package/corpus/templates/chat/app/routes/settings.tsx +16 -1
  159. package/corpus/templates/chat/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  160. package/corpus/templates/clips/actions/lib/audio-only-transcription.ts +79 -37
  161. package/corpus/templates/clips/app/components/player/player-controls.tsx +35 -0
  162. package/corpus/templates/clips/app/components/player/video-player.tsx +162 -18
  163. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +63 -6
  164. package/corpus/templates/clips/app/routes/record.tsx +18 -1
  165. package/corpus/templates/clips/changelog/2026-07-07-shared-clips-start-playback-reliably-from-the-first-play-click.md +6 -0
  166. package/corpus/templates/clips/changelog/2026-07-08-chrome-extension-camera-and-microphone-menus-now-show-which-.md +6 -0
  167. package/corpus/templates/clips/changelog/2026-07-08-chrome-extension-copies-new-clip-links-after-saving.md +6 -0
  168. package/corpus/templates/clips/changelog/2026-07-08-chrome-extension-recordings-now-continue-after-granting-came.md +6 -0
  169. package/corpus/templates/clips/changelog/2026-07-08-mobile-shared-clips-now-have-loom-style-tap-and-skip-controls.md +6 -0
  170. package/corpus/templates/clips/changelog/2026-07-08-recordings-and-uploads-copy-links-after-saving.md +6 -0
  171. package/corpus/templates/clips/changelog/2026-07-08-settings-are-cleaner-searchable-and-collapse-s3-with-builder.md +5 -0
  172. package/corpus/templates/clips/changelog/2026-07-08-transcripts-are-more-reliable-for-longer-desktop-recordings-.md +6 -0
  173. package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -0
  174. package/corpus/templates/clips/chrome-extension/src/background.ts +162 -13
  175. package/corpus/templates/clips/chrome-extension/src/content-script.ts +14 -0
  176. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +36 -0
  177. package/corpus/templates/clips/chrome-extension/src/overlay.ts +99 -25
  178. package/corpus/templates/clips/chrome-extension/src/permission.ts +63 -14
  179. package/corpus/templates/clips/chrome-extension/src/popup.ts +123 -23
  180. package/corpus/templates/content/actions/_builder-cms-read-client.ts +47 -0
  181. package/corpus/templates/content/actions/_database-source-utils.ts +33 -4
  182. package/corpus/templates/content/actions/add-content-database-source-field-property.ts +214 -29
  183. package/corpus/templates/content/actions/attach-content-database-source.ts +3 -0
  184. package/corpus/templates/content/actions/change-content-database-source-role.ts +1 -0
  185. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +42 -32
  186. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +352 -81
  187. package/corpus/templates/content/app/components/editor/database/settings.tsx +49 -24
  188. package/corpus/templates/content/app/routes/_app.settings.tsx +19 -1
  189. package/corpus/templates/content/changelog/2026-07-07-builder-source-tag-fields-now-import-as-multi-select.md +6 -0
  190. package/corpus/templates/content/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  191. package/corpus/templates/content/shared/api.ts +3 -0
  192. package/corpus/templates/content/shared/properties.ts +42 -0
  193. package/corpus/templates/design/AGENTS.md +9 -0
  194. package/corpus/templates/design/actions/generate-design.ts +3 -0
  195. package/corpus/templates/design/actions/get-design-system.ts +147 -1
  196. package/corpus/templates/design/actions/request-localhost-write-consent.ts +141 -0
  197. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +13 -19
  198. package/corpus/templates/design/app/routes/settings.tsx +16 -1
  199. package/corpus/templates/design/changelog/2026-07-08-design-generation-now-follows-hydrated-builder-design-system.md +6 -0
  200. package/corpus/templates/design/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  201. package/corpus/templates/design/server/lib/verify-write-grant.ts +4 -2
  202. package/corpus/templates/dispatch/app/routes/settings.tsx +23 -2
  203. package/corpus/templates/dispatch/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  204. package/corpus/templates/forms/app/routes/_app.settings.tsx +16 -1
  205. package/corpus/templates/forms/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  206. package/corpus/templates/macros/app/routes/settings.tsx +16 -1
  207. package/corpus/templates/macros/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  208. package/corpus/templates/mail/app/components/settings/GmailFiltersSection.tsx +1 -1
  209. package/corpus/templates/mail/app/components/settings/SnippetsSection.tsx +1 -1
  210. package/corpus/templates/mail/app/pages/SettingsPage.tsx +123 -105
  211. package/corpus/templates/mail/changelog/2026-07-08-settings-redesigned-with-a-consistent-searchable-layout.md +5 -0
  212. package/corpus/templates/plan/app/routes/settings.tsx +23 -2
  213. package/corpus/templates/plan/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  214. package/corpus/templates/slides/actions/add-slide.ts +1 -0
  215. package/corpus/templates/slides/actions/get-design-system.ts +147 -1
  216. package/corpus/templates/slides/app/pages/Index.tsx +46 -1
  217. package/corpus/templates/slides/app/routes/settings.tsx +16 -1
  218. package/corpus/templates/slides/changelog/2026-07-08-deck-generation-now-follows-hydrated-builder-design-system-g.md +6 -0
  219. package/corpus/templates/slides/changelog/2026-07-08-settings-are-cleaner-and-searchable.md +5 -0
  220. package/dist/agent/run-ownership.d.ts +6 -0
  221. package/dist/agent/run-ownership.d.ts.map +1 -1
  222. package/dist/agent/run-ownership.js +11 -1
  223. package/dist/agent/run-ownership.js.map +1 -1
  224. package/dist/changelog/parse.d.ts +7 -0
  225. package/dist/changelog/parse.d.ts.map +1 -1
  226. package/dist/changelog/parse.js +64 -0
  227. package/dist/changelog/parse.js.map +1 -1
  228. package/dist/chat-threads/schema.d.ts +445 -0
  229. package/dist/chat-threads/schema.d.ts.map +1 -0
  230. package/dist/chat-threads/schema.js +39 -0
  231. package/dist/chat-threads/schema.js.map +1 -0
  232. package/dist/chat-threads/store.d.ts +12 -0
  233. package/dist/chat-threads/store.d.ts.map +1 -1
  234. package/dist/chat-threads/store.js +99 -10
  235. package/dist/chat-threads/store.js.map +1 -1
  236. package/dist/cli/design-connect.d.ts.map +1 -1
  237. package/dist/cli/design-connect.js +40 -10
  238. package/dist/cli/design-connect.js.map +1 -1
  239. package/dist/cli/workspace-dev.d.ts.map +1 -1
  240. package/dist/cli/workspace-dev.js +20 -5
  241. package/dist/cli/workspace-dev.js.map +1 -1
  242. package/dist/client/AgentPanel.d.ts.map +1 -1
  243. package/dist/client/AgentPanel.js +35 -7
  244. package/dist/client/AgentPanel.js.map +1 -1
  245. package/dist/client/AssistantChat.d.ts.map +1 -1
  246. package/dist/client/AssistantChat.js +105 -183
  247. package/dist/client/AssistantChat.js.map +1 -1
  248. package/dist/client/analytics-session.d.ts +3 -0
  249. package/dist/client/analytics-session.d.ts.map +1 -0
  250. package/dist/client/analytics-session.js +66 -0
  251. package/dist/client/analytics-session.js.map +1 -0
  252. package/dist/client/analytics.d.ts +32 -0
  253. package/dist/client/analytics.d.ts.map +1 -1
  254. package/dist/client/analytics.js +116 -46
  255. package/dist/client/analytics.js.map +1 -1
  256. package/dist/client/chat/message-components.d.ts +2 -1
  257. package/dist/client/chat/message-components.d.ts.map +1 -1
  258. package/dist/client/chat/message-components.js +16 -6
  259. package/dist/client/chat/message-components.js.map +1 -1
  260. package/dist/client/components/ui/message-scroller.d.ts +16 -0
  261. package/dist/client/components/ui/message-scroller.d.ts.map +1 -0
  262. package/dist/client/components/ui/message-scroller.js +25 -0
  263. package/dist/client/components/ui/message-scroller.js.map +1 -0
  264. package/dist/client/conversation/AgentConversation.d.ts +1 -1
  265. package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
  266. package/dist/client/conversation/AgentConversation.js +3 -8
  267. package/dist/client/conversation/AgentConversation.js.map +1 -1
  268. package/dist/client/error-capture.d.ts +99 -0
  269. package/dist/client/error-capture.d.ts.map +1 -0
  270. package/dist/client/error-capture.js +437 -0
  271. package/dist/client/error-capture.js.map +1 -0
  272. package/dist/client/index.d.ts +2 -2
  273. package/dist/client/index.d.ts.map +1 -1
  274. package/dist/client/index.js +3 -1
  275. package/dist/client/index.js.map +1 -1
  276. package/dist/client/session-replay.d.ts +22 -0
  277. package/dist/client/session-replay.d.ts.map +1 -1
  278. package/dist/client/session-replay.js +45 -4
  279. package/dist/client/session-replay.js.map +1 -1
  280. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  281. package/dist/client/settings/SettingsPanel.js +100 -5
  282. package/dist/client/settings/SettingsPanel.js.map +1 -1
  283. package/dist/client/settings/SettingsTabsPage.d.ts +49 -1
  284. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  285. package/dist/client/settings/SettingsTabsPage.js +131 -19
  286. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  287. package/dist/client/settings/index.d.ts +1 -1
  288. package/dist/client/settings/index.d.ts.map +1 -1
  289. package/dist/client/settings/index.js.map +1 -1
  290. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  291. package/dist/client/sharing/ShareButton.js +13 -8
  292. package/dist/client/sharing/ShareButton.js.map +1 -1
  293. package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
  294. package/dist/client/sharing/ShareDialog.js +12 -7
  295. package/dist/client/sharing/ShareDialog.js.map +1 -1
  296. package/dist/collab/routes.d.ts +1 -1
  297. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  298. package/dist/mcp/builtin-tools.d.ts.map +1 -1
  299. package/dist/mcp/builtin-tools.js +21 -2
  300. package/dist/mcp/builtin-tools.js.map +1 -1
  301. package/dist/observability/routes.d.ts +1 -1
  302. package/dist/org/schema.d.ts +15 -15
  303. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  304. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  305. package/dist/server/agent-chat-plugin.js +109 -73
  306. package/dist/server/agent-chat-plugin.js.map +1 -1
  307. package/dist/server/onboarding-html.d.ts.map +1 -1
  308. package/dist/server/onboarding-html.js +28 -16
  309. package/dist/server/onboarding-html.js.map +1 -1
  310. package/dist/sharing/actions/list-resource-shares.js +30 -1
  311. package/dist/sharing/actions/list-resource-shares.js.map +1 -1
  312. package/dist/sharing/actions/share-resource.js +6 -0
  313. package/dist/sharing/actions/share-resource.js.map +1 -1
  314. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -2
  315. package/dist/templates/workspace-core/.agents/skills/changelog/SKILL.md +9 -6
  316. package/dist/vite/client.d.ts.map +1 -1
  317. package/dist/vite/client.js +192 -30
  318. package/dist/vite/client.js.map +1 -1
  319. package/docs/content/toolkit-settings.mdx +56 -3
  320. package/package.json +2 -1
  321. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +4 -2
  322. package/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +9 -6
@@ -7,7 +7,10 @@ import {
7
7
  } from "@agent-native/core/server";
8
8
 
9
9
  import actionsRegistry from "../../.generated/actions-registry.js";
10
- import { applyAnalyticsPlanModePolicy } from "../lib/agent-chat-plan-mode";
10
+ import {
11
+ applyAnalyticsPlanModePolicy,
12
+ INITIAL_TOOL_NAMES,
13
+ } from "../lib/agent-chat-plan-mode";
11
14
  import { renderDataDictionary } from "../lib/data-dictionary-context";
12
15
  import {
13
16
  failedDataQueryAttemptMessage,
@@ -31,43 +34,9 @@ import {
31
34
  const DATA_DICT_PREFIX = "data-dict-";
32
35
  const ANALYTICS_BACKGROUND_RUN_SOFT_TIMEOUT_MS = 13 * 60_000;
33
36
 
34
- const INITIAL_TOOL_NAMES = [
35
- "view-screen",
36
- "data-source-status",
37
- "list-analyses",
38
- "get-analysis",
39
- "save-analysis",
40
- "rename-analysis",
41
- "delete-analysis",
42
- "get-sql-dashboard",
43
- "mutate-dashboard",
44
- "generate-chart",
45
- "query-agent-native-analytics",
46
- "bigquery",
47
- "search-bigquery-schema",
48
- "bigquery-table-info",
49
- "provider-api-catalog",
50
- "provider-api-docs",
51
- "provider-api-request",
52
- "provider-corpus-job",
53
- "provider-corpus-jobs",
54
- "query-staged-dataset",
55
- "list-staged-datasets",
56
- "delete-staged-dataset",
57
- "account-deep-dive",
58
- "hubspot-deals",
59
- "hubspot-records",
60
- "gong-calls",
61
- "jira-search",
62
- "slack-messages",
63
- "sentry",
64
- "list-data-dictionary",
65
- "save-data-dictionary-entry",
66
- "navigate",
67
- ];
68
-
69
37
  export {
70
38
  applyAnalyticsPlanModePolicy,
39
+ INITIAL_TOOL_NAMES,
71
40
  PLAN_MODE_ACT_ONLY_TOOLS,
72
41
  } from "../lib/agent-chat-plan-mode";
73
42
 
@@ -220,7 +189,8 @@ export default createAgentChatPlugin({
220
189
  "<analytics-artifact-guidance>\n" +
221
190
  "Native Analytics dashboards and saved analyses are constrained artifacts: dashboards are JSON configs rendered by the built-in dashboard components, and analyses are Markdown reports with generated chart images plus structured resultData. " +
222
191
  "If the user's requested dashboard, analysis surface, visualization, interaction model, custom layout, or bespoke workflow cannot be faithfully represented within those native components/config fields, do not hand-wave, force an approximate JSON dashboard, or route to source-code changes. In production mode, automatically create a sandboxed extension with `create-extension` instead, using Alpine.js HTML and the available app/data helpers. " +
223
- "After creating the extension, briefly tell the user that the request needed bespoke UI/code beyond the native Analytics dashboard or analysis format, so you built it as an extension.\n" +
192
+ "After creating the extension, briefly tell the user that the request needed bespoke UI/code beyond the native Analytics dashboard or analysis format, so you built it as an extension. " +
193
+ "Do not also create a same-named dashboard or saved analysis unless the user explicitly asked for multiple artifacts; saved analyses appear in the sidebar and should not be used for throwaway notes or scratch summaries.\n" +
224
194
  "</analytics-artifact-guidance>";
225
195
 
226
196
  // In the durable background-function worker, skip the data-dictionary read
@@ -1,7 +1,17 @@
1
1
  import { createAuthPlugin } from "@agent-native/core/server";
2
2
 
3
3
  export default createAuthPlugin({
4
- publicPaths: ["/track", "/api/analytics/track", "/api/analytics/replay"],
4
+ publicPaths: [
5
+ "/track",
6
+ "/api/analytics/track",
7
+ "/api/analytics/replay",
8
+ // Public uptime status pages: the SSR route `/status/<slug>` and its
9
+ // matching unauthenticated read action. The action only ever returns the
10
+ // sanitized projection of a PUBLISHED page (see actions/get-public-status-page.ts
11
+ // and server/lib/status-pages.ts `getPublicStatusPage`).
12
+ "/status",
13
+ "/_agent-native/actions/get-public-status-page",
14
+ ],
5
15
  marketing: {
6
16
  appName: "Agent-Native Analytics",
7
17
  tagline:
@@ -706,6 +706,414 @@ const runAnalyticsMigrations = runMigrations(
706
706
  name: "analytics-db-admin-connections-org-updated-idx",
707
707
  sql: `CREATE INDEX IF NOT EXISTS analytics_db_admin_connections_org_updated_idx ON analytics_db_admin_connections (org_id, updated_at)`,
708
708
  },
709
+ // --- v83+: error capture (Sentry-style exception tracking). Grouped
710
+ // issues + individual occurrences linked to session replays. See
711
+ // server/db/schema-errors.ts and server/lib/error-capture.ts.
712
+ {
713
+ version: 83,
714
+ name: "error-issues-table",
715
+ sql: {
716
+ postgres: `CREATE TABLE IF NOT EXISTS error_issues (
717
+ id TEXT PRIMARY KEY,
718
+ fingerprint TEXT NOT NULL,
719
+ type TEXT NOT NULL DEFAULT 'Error',
720
+ title TEXT NOT NULL,
721
+ culprit TEXT,
722
+ level TEXT NOT NULL DEFAULT 'error',
723
+ status TEXT NOT NULL DEFAULT 'unresolved',
724
+ first_seen_at TEXT NOT NULL,
725
+ last_seen_at TEXT NOT NULL,
726
+ event_count INTEGER NOT NULL DEFAULT 0,
727
+ users_affected INTEGER NOT NULL DEFAULT 0,
728
+ sample_event_id TEXT,
729
+ last_session_recording_id TEXT,
730
+ assignee TEXT,
731
+ app TEXT,
732
+ template TEXT,
733
+ created_at TEXT NOT NULL DEFAULT (now()::text),
734
+ updated_at TEXT NOT NULL DEFAULT (now()::text),
735
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost',
736
+ org_id TEXT,
737
+ visibility TEXT NOT NULL DEFAULT 'private'
738
+ )`,
739
+ sqlite: `CREATE TABLE IF NOT EXISTS error_issues (
740
+ id TEXT PRIMARY KEY,
741
+ fingerprint TEXT NOT NULL,
742
+ type TEXT NOT NULL DEFAULT 'Error',
743
+ title TEXT NOT NULL,
744
+ culprit TEXT,
745
+ level TEXT NOT NULL DEFAULT 'error',
746
+ status TEXT NOT NULL DEFAULT 'unresolved',
747
+ first_seen_at TEXT NOT NULL,
748
+ last_seen_at TEXT NOT NULL,
749
+ event_count INTEGER NOT NULL DEFAULT 0,
750
+ users_affected INTEGER NOT NULL DEFAULT 0,
751
+ sample_event_id TEXT,
752
+ last_session_recording_id TEXT,
753
+ assignee TEXT,
754
+ app TEXT,
755
+ template TEXT,
756
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
757
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
758
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost',
759
+ org_id TEXT,
760
+ visibility TEXT NOT NULL DEFAULT 'private'
761
+ )`,
762
+ },
763
+ },
764
+ {
765
+ version: 84,
766
+ name: "error-issue-shares-table",
767
+ sql: {
768
+ postgres: `CREATE TABLE IF NOT EXISTS error_issue_shares (
769
+ id TEXT PRIMARY KEY,
770
+ resource_id TEXT NOT NULL,
771
+ principal_type TEXT NOT NULL,
772
+ principal_id TEXT NOT NULL,
773
+ role TEXT NOT NULL DEFAULT 'viewer',
774
+ created_by TEXT NOT NULL,
775
+ created_at TEXT NOT NULL DEFAULT (now()::text)
776
+ )`,
777
+ sqlite: `CREATE TABLE IF NOT EXISTS error_issue_shares (
778
+ id TEXT PRIMARY KEY,
779
+ resource_id TEXT NOT NULL,
780
+ principal_type TEXT NOT NULL,
781
+ principal_id TEXT NOT NULL,
782
+ role TEXT NOT NULL DEFAULT 'viewer',
783
+ created_by TEXT NOT NULL,
784
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
785
+ )`,
786
+ },
787
+ },
788
+ {
789
+ version: 85,
790
+ name: "error-events-table",
791
+ sql: {
792
+ postgres: `CREATE TABLE IF NOT EXISTS error_events (
793
+ id TEXT PRIMARY KEY,
794
+ issue_id TEXT NOT NULL,
795
+ fingerprint TEXT NOT NULL,
796
+ type TEXT NOT NULL DEFAULT 'Error',
797
+ message TEXT NOT NULL DEFAULT '',
798
+ culprit TEXT,
799
+ level TEXT NOT NULL DEFAULT 'error',
800
+ stack TEXT NOT NULL DEFAULT '[]',
801
+ raw_stack TEXT,
802
+ handled BOOLEAN NOT NULL DEFAULT true,
803
+ url TEXT,
804
+ user_id TEXT,
805
+ anonymous_id TEXT,
806
+ user_key TEXT,
807
+ session_id TEXT,
808
+ client_recording_id TEXT,
809
+ session_recording_id TEXT,
810
+ release TEXT,
811
+ environment TEXT,
812
+ tags TEXT NOT NULL DEFAULT '{}',
813
+ extra TEXT NOT NULL DEFAULT '{}',
814
+ breadcrumbs TEXT NOT NULL DEFAULT '[]',
815
+ occurred_at TEXT NOT NULL,
816
+ created_at TEXT NOT NULL DEFAULT (now()::text),
817
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost',
818
+ org_id TEXT
819
+ )`,
820
+ sqlite: `CREATE TABLE IF NOT EXISTS error_events (
821
+ id TEXT PRIMARY KEY,
822
+ issue_id TEXT NOT NULL,
823
+ fingerprint TEXT NOT NULL,
824
+ type TEXT NOT NULL DEFAULT 'Error',
825
+ message TEXT NOT NULL DEFAULT '',
826
+ culprit TEXT,
827
+ level TEXT NOT NULL DEFAULT 'error',
828
+ stack TEXT NOT NULL DEFAULT '[]',
829
+ raw_stack TEXT,
830
+ handled INTEGER NOT NULL DEFAULT 1,
831
+ url TEXT,
832
+ user_id TEXT,
833
+ anonymous_id TEXT,
834
+ user_key TEXT,
835
+ session_id TEXT,
836
+ client_recording_id TEXT,
837
+ session_recording_id TEXT,
838
+ release TEXT,
839
+ environment TEXT,
840
+ tags TEXT NOT NULL DEFAULT '{}',
841
+ extra TEXT NOT NULL DEFAULT '{}',
842
+ breadcrumbs TEXT NOT NULL DEFAULT '[]',
843
+ occurred_at TEXT NOT NULL,
844
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
845
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost',
846
+ org_id TEXT
847
+ )`,
848
+ },
849
+ },
850
+ {
851
+ version: 86,
852
+ name: "error-issues-scope-fingerprint-idx",
853
+ sql: `CREATE UNIQUE INDEX IF NOT EXISTS error_issues_scope_fingerprint_idx ON error_issues (owner_email, org_id, fingerprint)`,
854
+ },
855
+ {
856
+ version: 87,
857
+ name: "error-issues-scope-last-seen-idx",
858
+ sql: `CREATE INDEX IF NOT EXISTS error_issues_scope_last_seen_idx ON error_issues (owner_email, org_id, last_seen_at)`,
859
+ },
860
+ {
861
+ version: 88,
862
+ name: "error-issues-scope-status-idx",
863
+ sql: `CREATE INDEX IF NOT EXISTS error_issues_scope_status_idx ON error_issues (org_id, owner_email, status, last_seen_at)`,
864
+ },
865
+ {
866
+ version: 89,
867
+ name: "error-events-issue-occurred-idx",
868
+ sql: `CREATE INDEX IF NOT EXISTS error_events_issue_occurred_idx ON error_events (issue_id, occurred_at)`,
869
+ },
870
+ {
871
+ version: 90,
872
+ name: "error-events-scope-occurred-idx",
873
+ sql: `CREATE INDEX IF NOT EXISTS error_events_scope_occurred_idx ON error_events (owner_email, org_id, occurred_at)`,
874
+ },
875
+ {
876
+ version: 91,
877
+ name: "error-issue-shares-resource-idx",
878
+ sql: `CREATE INDEX IF NOT EXISTS error_issue_shares_resource_idx ON error_issue_shares (resource_id)`,
879
+ },
880
+ // --- v92+: uptime monitoring (synthetic HTTP checks + alerting). See
881
+ // server/db/schema-monitoring.ts and server/lib/uptime-monitors.ts.
882
+ {
883
+ version: 92,
884
+ name: "uptime-monitors-table",
885
+ sql: {
886
+ postgres: `CREATE TABLE IF NOT EXISTS monitors (
887
+ id TEXT PRIMARY KEY,
888
+ name TEXT NOT NULL,
889
+ url TEXT NOT NULL,
890
+ method TEXT NOT NULL DEFAULT 'GET',
891
+ request_headers TEXT NOT NULL DEFAULT '{}',
892
+ request_body TEXT,
893
+ interval_seconds INTEGER NOT NULL DEFAULT 300,
894
+ timeout_ms INTEGER NOT NULL DEFAULT 15000,
895
+ expected_status TEXT NOT NULL DEFAULT '{"mode":"class","classes":["2xx"]}',
896
+ assertions TEXT NOT NULL DEFAULT '[]',
897
+ follow_redirects BOOLEAN NOT NULL DEFAULT true,
898
+ severity TEXT NOT NULL DEFAULT 'critical',
899
+ channels TEXT NOT NULL DEFAULT '["inbox"]',
900
+ email_recipients TEXT NOT NULL DEFAULT '[]',
901
+ cooldown_minutes INTEGER NOT NULL DEFAULT 15,
902
+ enabled BOOLEAN NOT NULL DEFAULT true,
903
+ last_status TEXT,
904
+ last_checked_at TEXT,
905
+ last_success_at TEXT,
906
+ last_error TEXT,
907
+ last_latency_ms INTEGER,
908
+ last_status_code INTEGER,
909
+ consecutive_failures INTEGER NOT NULL DEFAULT 0,
910
+ created_at TEXT NOT NULL DEFAULT (now()::text),
911
+ updated_at TEXT NOT NULL DEFAULT (now()::text),
912
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost',
913
+ org_id TEXT,
914
+ visibility TEXT NOT NULL DEFAULT 'private'
915
+ )`,
916
+ sqlite: `CREATE TABLE IF NOT EXISTS monitors (
917
+ id TEXT PRIMARY KEY,
918
+ name TEXT NOT NULL,
919
+ url TEXT NOT NULL,
920
+ method TEXT NOT NULL DEFAULT 'GET',
921
+ request_headers TEXT NOT NULL DEFAULT '{}',
922
+ request_body TEXT,
923
+ interval_seconds INTEGER NOT NULL DEFAULT 300,
924
+ timeout_ms INTEGER NOT NULL DEFAULT 15000,
925
+ expected_status TEXT NOT NULL DEFAULT '{"mode":"class","classes":["2xx"]}',
926
+ assertions TEXT NOT NULL DEFAULT '[]',
927
+ follow_redirects INTEGER NOT NULL DEFAULT 1,
928
+ severity TEXT NOT NULL DEFAULT 'critical',
929
+ channels TEXT NOT NULL DEFAULT '["inbox"]',
930
+ email_recipients TEXT NOT NULL DEFAULT '[]',
931
+ cooldown_minutes INTEGER NOT NULL DEFAULT 15,
932
+ enabled INTEGER NOT NULL DEFAULT 1,
933
+ last_status TEXT,
934
+ last_checked_at TEXT,
935
+ last_success_at TEXT,
936
+ last_error TEXT,
937
+ last_latency_ms INTEGER,
938
+ last_status_code INTEGER,
939
+ consecutive_failures INTEGER NOT NULL DEFAULT 0,
940
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
941
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
942
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost',
943
+ org_id TEXT,
944
+ visibility TEXT NOT NULL DEFAULT 'private'
945
+ )`,
946
+ },
947
+ },
948
+ {
949
+ version: 93,
950
+ name: "uptime-monitor-check-results-table",
951
+ sql: {
952
+ postgres: `CREATE TABLE IF NOT EXISTS monitor_check_results (
953
+ id TEXT PRIMARY KEY,
954
+ monitor_id TEXT NOT NULL,
955
+ checked_at TEXT NOT NULL,
956
+ ok BOOLEAN NOT NULL,
957
+ status TEXT NOT NULL DEFAULT 'up',
958
+ status_code INTEGER,
959
+ latency_ms INTEGER,
960
+ error TEXT,
961
+ failed_assertions TEXT NOT NULL DEFAULT '[]',
962
+ created_at TEXT NOT NULL DEFAULT (now()::text),
963
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost',
964
+ org_id TEXT,
965
+ visibility TEXT NOT NULL DEFAULT 'private'
966
+ )`,
967
+ sqlite: `CREATE TABLE IF NOT EXISTS monitor_check_results (
968
+ id TEXT PRIMARY KEY,
969
+ monitor_id TEXT NOT NULL,
970
+ checked_at TEXT NOT NULL,
971
+ ok INTEGER NOT NULL,
972
+ status TEXT NOT NULL DEFAULT 'up',
973
+ status_code INTEGER,
974
+ latency_ms INTEGER,
975
+ error TEXT,
976
+ failed_assertions TEXT NOT NULL DEFAULT '[]',
977
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
978
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost',
979
+ org_id TEXT,
980
+ visibility TEXT NOT NULL DEFAULT 'private'
981
+ )`,
982
+ },
983
+ },
984
+ {
985
+ version: 94,
986
+ name: "uptime-monitor-incidents-table",
987
+ sql: {
988
+ postgres: `CREATE TABLE IF NOT EXISTS monitor_incidents (
989
+ id TEXT PRIMARY KEY,
990
+ monitor_id TEXT NOT NULL,
991
+ started_at TEXT NOT NULL,
992
+ resolved_at TEXT,
993
+ status TEXT NOT NULL DEFAULT 'down',
994
+ severity TEXT NOT NULL DEFAULT 'critical',
995
+ cause TEXT NOT NULL DEFAULT '',
996
+ last_error TEXT,
997
+ notification_id TEXT,
998
+ checks_failed INTEGER NOT NULL DEFAULT 1,
999
+ created_at TEXT NOT NULL DEFAULT (now()::text),
1000
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost',
1001
+ org_id TEXT,
1002
+ visibility TEXT NOT NULL DEFAULT 'private'
1003
+ )`,
1004
+ sqlite: `CREATE TABLE IF NOT EXISTS monitor_incidents (
1005
+ id TEXT PRIMARY KEY,
1006
+ monitor_id TEXT NOT NULL,
1007
+ started_at TEXT NOT NULL,
1008
+ resolved_at TEXT,
1009
+ status TEXT NOT NULL DEFAULT 'down',
1010
+ severity TEXT NOT NULL DEFAULT 'critical',
1011
+ cause TEXT NOT NULL DEFAULT '',
1012
+ last_error TEXT,
1013
+ notification_id TEXT,
1014
+ checks_failed INTEGER NOT NULL DEFAULT 1,
1015
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
1016
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost',
1017
+ org_id TEXT,
1018
+ visibility TEXT NOT NULL DEFAULT 'private'
1019
+ )`,
1020
+ },
1021
+ },
1022
+ {
1023
+ version: 95,
1024
+ name: "uptime-monitors-scope-enabled-idx",
1025
+ sql: `CREATE INDEX IF NOT EXISTS monitors_scope_enabled_idx ON monitors (org_id, owner_email, enabled)`,
1026
+ },
1027
+ {
1028
+ version: 96,
1029
+ name: "uptime-monitors-due-idx",
1030
+ sql: `CREATE INDEX IF NOT EXISTS monitors_due_idx ON monitors (enabled, last_status, last_checked_at)`,
1031
+ },
1032
+ {
1033
+ version: 97,
1034
+ name: "uptime-monitor-check-results-monitor-idx",
1035
+ sql: `CREATE INDEX IF NOT EXISTS monitor_check_results_monitor_idx ON monitor_check_results (monitor_id, checked_at)`,
1036
+ },
1037
+ {
1038
+ version: 98,
1039
+ name: "uptime-monitor-check-results-checked-idx",
1040
+ sql: `CREATE INDEX IF NOT EXISTS monitor_check_results_checked_idx ON monitor_check_results (checked_at)`,
1041
+ },
1042
+ {
1043
+ version: 99,
1044
+ name: "uptime-monitor-incidents-monitor-idx",
1045
+ sql: `CREATE INDEX IF NOT EXISTS monitor_incidents_monitor_idx ON monitor_incidents (monitor_id, started_at)`,
1046
+ },
1047
+ {
1048
+ version: 100,
1049
+ name: "uptime-monitor-incidents-open-idx",
1050
+ sql: `CREATE INDEX IF NOT EXISTS monitor_incidents_open_idx ON monitor_incidents (monitor_id, resolved_at)`,
1051
+ },
1052
+ {
1053
+ version: 101,
1054
+ name: "error-issues-personal-fingerprint-unique-idx",
1055
+ sql: `CREATE UNIQUE INDEX IF NOT EXISTS error_issues_personal_fingerprint_unique_idx ON error_issues (owner_email, fingerprint) WHERE org_id IS NULL`,
1056
+ },
1057
+ {
1058
+ version: 102,
1059
+ name: "error-issues-org-fingerprint-unique-idx",
1060
+ sql: `CREATE UNIQUE INDEX IF NOT EXISTS error_issues_org_fingerprint_unique_idx ON error_issues (owner_email, org_id, fingerprint) WHERE org_id IS NOT NULL`,
1061
+ },
1062
+ // --- v103+: public status pages (owner-authored, publicly shareable uptime
1063
+ // status pages). See server/db/schema-monitoring.ts (`statusPages`) and
1064
+ // server/lib/status-pages.ts.
1065
+ {
1066
+ version: 103,
1067
+ name: "status-pages-table",
1068
+ sql: {
1069
+ postgres: `CREATE TABLE IF NOT EXISTS status_pages (
1070
+ id TEXT PRIMARY KEY,
1071
+ slug TEXT NOT NULL,
1072
+ title TEXT NOT NULL,
1073
+ description TEXT,
1074
+ published BOOLEAN NOT NULL DEFAULT false,
1075
+ show_uptime_bars BOOLEAN NOT NULL DEFAULT true,
1076
+ show_overall_uptime BOOLEAN NOT NULL DEFAULT true,
1077
+ show_response_time BOOLEAN NOT NULL DEFAULT false,
1078
+ density TEXT NOT NULL DEFAULT 'comfortable',
1079
+ alignment TEXT NOT NULL DEFAULT 'left',
1080
+ monitors TEXT NOT NULL DEFAULT '[]',
1081
+ created_at TEXT NOT NULL DEFAULT (now()::text),
1082
+ updated_at TEXT NOT NULL DEFAULT (now()::text),
1083
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost',
1084
+ org_id TEXT,
1085
+ visibility TEXT NOT NULL DEFAULT 'private'
1086
+ )`,
1087
+ sqlite: `CREATE TABLE IF NOT EXISTS status_pages (
1088
+ id TEXT PRIMARY KEY,
1089
+ slug TEXT NOT NULL,
1090
+ title TEXT NOT NULL,
1091
+ description TEXT,
1092
+ published INTEGER NOT NULL DEFAULT 0,
1093
+ show_uptime_bars INTEGER NOT NULL DEFAULT 1,
1094
+ show_overall_uptime INTEGER NOT NULL DEFAULT 1,
1095
+ show_response_time INTEGER NOT NULL DEFAULT 0,
1096
+ density TEXT NOT NULL DEFAULT 'comfortable',
1097
+ alignment TEXT NOT NULL DEFAULT 'left',
1098
+ monitors TEXT NOT NULL DEFAULT '[]',
1099
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
1100
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
1101
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost',
1102
+ org_id TEXT,
1103
+ visibility TEXT NOT NULL DEFAULT 'private'
1104
+ )`,
1105
+ },
1106
+ },
1107
+ {
1108
+ version: 104,
1109
+ name: "status-pages-slug-unique-idx",
1110
+ sql: `CREATE UNIQUE INDEX IF NOT EXISTS status_pages_slug_unique_idx ON status_pages (slug)`,
1111
+ },
1112
+ {
1113
+ version: 105,
1114
+ name: "status-pages-scope-updated-idx",
1115
+ sql: `CREATE INDEX IF NOT EXISTS status_pages_scope_updated_idx ON status_pages (owner_email, org_id, updated_at)`,
1116
+ },
709
1117
  ],
710
1118
  { table: "analytics_migrations" },
711
1119
  );
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Background uptime-monitor sweep registration. Mirrors
3
+ * server/plugins/analytics-alert-jobs.ts for gating (env flags, platform
4
+ * scheduler ownership, prod default on) and interval scheduling.
5
+ *
6
+ * The monitor tables are created by the app migration list (server/plugins/
7
+ * db.ts, versions 92+), which runs at boot regardless of this cron gate — so
8
+ * the actions/UI have their schema even when in-process sweeps are disabled.
9
+ */
10
+ import { runDueMonitorsOnce } from "../jobs/uptime-monitors";
11
+
12
+ const DEFAULT_INTERVAL_MS = 30_000;
13
+ let skippingLogged = false;
14
+
15
+ declare global {
16
+ var __AGENT_NATIVE_UPTIME_MONITOR_SCHEDULED_RUNTIME__: boolean | undefined;
17
+ }
18
+
19
+ function platformSchedulerOwnsMonitors(): boolean {
20
+ return (
21
+ process.env.NETLIFY === "true" ||
22
+ globalThis.__AGENT_NATIVE_UPTIME_MONITOR_SCHEDULED_RUNTIME__ === true
23
+ );
24
+ }
25
+
26
+ function intervalMs(): number {
27
+ const raw = process.env.UPTIME_MONITOR_INTERVAL_MS?.trim();
28
+ if (!raw) return DEFAULT_INTERVAL_MS;
29
+ const parsed = Number.parseInt(raw, 10);
30
+ return Number.isFinite(parsed) && parsed >= 10_000
31
+ ? parsed
32
+ : DEFAULT_INTERVAL_MS;
33
+ }
34
+
35
+ export default function registerUptimeMonitorJobs(): void {
36
+ const isProd = process.env.NODE_ENV === "production";
37
+ const flag =
38
+ process.env.UPTIME_MONITOR_JOBS ?? process.env.RUN_BACKGROUND_JOBS;
39
+ const enabled =
40
+ !platformSchedulerOwnsMonitors() &&
41
+ (flag === "1" || (isProd && flag !== "0"));
42
+
43
+ if (!enabled) {
44
+ if (!skippingLogged) {
45
+ console.log(
46
+ platformSchedulerOwnsMonitors()
47
+ ? "[uptime-monitors] Skipping in-process cron because the platform scheduler owns monitor sweeps."
48
+ : "[uptime-monitors] Skipping background cron (set UPTIME_MONITOR_JOBS=1 or RUN_BACKGROUND_JOBS=1 to enable in dev; on by default in production)",
49
+ );
50
+ skippingLogged = true;
51
+ }
52
+ return;
53
+ }
54
+
55
+ const ms = intervalMs();
56
+ setInterval(() => {
57
+ runDueMonitorsOnce().catch((err) =>
58
+ console.error("[uptime-monitors] interval failed:", err),
59
+ );
60
+ }, ms);
61
+
62
+ console.log(`[uptime-monitors] Recurring monitor sweep every ${ms / 1000}s.`);
63
+ }
@@ -123,7 +123,7 @@ export default function CreatePage() {
123
123
  </button>
124
124
  ))}
125
125
  </div>
126
- <div className="mt-8 w-full text-left">
126
+ <div className="mt-8 w-[min(100vw-2rem,64rem)] px-4 text-left sm:px-6">
127
127
  <RecentDraftsSection />
128
128
  </div>
129
129
  </div>
@@ -8,6 +8,7 @@ import {
8
8
  useBuilderConnectFlow,
9
9
  useBuilderStatus,
10
10
  useT,
11
+ type SettingsSearchEntry,
11
12
  } from "@agent-native/core/client";
12
13
  import {
13
14
  useOnboarding,
@@ -80,6 +81,25 @@ export default function SettingsPage() {
80
81
  data?: { count?: number };
81
82
  };
82
83
 
84
+ const generalSearchEntries = useMemo<SettingsSearchEntry[]>(
85
+ () => [
86
+ {
87
+ id: "assets-language",
88
+ label: t("settings.languageTitle"),
89
+ keywords: "language locale translation i18n",
90
+ hash: "language",
91
+ },
92
+ {
93
+ id: "assets-generation-setup",
94
+ label: t("settings.setupTitle"),
95
+ keywords:
96
+ "builder generation storage object storage api key gemini openai brand kit setup connect",
97
+ hash: "asset-generation-setup",
98
+ },
99
+ ],
100
+ [t],
101
+ );
102
+
83
103
  return (
84
104
  <PageShell
85
105
  title={t("settings.title")}
@@ -89,6 +109,7 @@ export default function SettingsPage() {
89
109
  <SettingsTabsPage
90
110
  teamLabel={t("team.title")}
91
111
  extraTabs={agentSettingsTabs}
112
+ generalSearchEntries={generalSearchEntries}
92
113
  general={
93
114
  <div className="mx-auto w-full max-w-2xl space-y-6">
94
115
  <div>
@@ -100,7 +121,7 @@ export default function SettingsPage() {
100
121
  </p>
101
122
  </div>
102
123
 
103
- <Card>
124
+ <Card id="language" className="scroll-mt-4">
104
125
  <CardHeader>
105
126
  <CardTitle className="text-base">
106
127
  {t("settings.languageTitle")}
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-08
4
+ ---
5
+
6
+ Recent drafts keep comfortable side padding on the Create page.
@@ -0,0 +1,5 @@
1
+ ---
2
+ type: improved
3
+ ---
4
+
5
+ Settings are cleaner and searchable, with a consistent navigation that jumps straight to any setting.