@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
@@ -14,6 +14,9 @@ const enUS = {
14
14
  dataSources: "Data Sources",
15
15
  dataDictionary: "Data Dictionary",
16
16
  sessions: "Sessions",
17
+ monitoring: "Monitoring",
18
+ monitoringUptime: "Uptime",
19
+ monitoringErrors: "Errors",
17
20
  agents: "Agents",
18
21
  templateCatalog: "Catalog",
19
22
  dashboards: "Dashboards",
@@ -38,6 +41,8 @@ const enUS = {
38
41
  sidebar: {
39
42
  collapseSidebar: "Collapse sidebar",
40
43
  expandSidebar: "Expand sidebar",
44
+ collapseAsk: "Collapse Ask",
45
+ expandAsk: "Expand Ask",
41
46
  collapseDashboards: "Collapse dashboards",
42
47
  expandDashboards: "Expand dashboards",
43
48
  collapseAnalyses: "Collapse analyses",
@@ -347,6 +352,7 @@ const enUS = {
347
352
  dataDictionary: "Data Dictionary - Analytics",
348
353
  dataSources: "Data Sources - Analytics",
349
354
  sessions: "Sessions - Analytics",
355
+ monitoring: "Monitoring - Analytics",
350
356
  agents: "Agents - Analytics",
351
357
  session: "Session Replay - Analytics",
352
358
  tool: "Tool - Analytics",
@@ -3704,6 +3710,8 @@ export const messagesByLocale = {
3704
3710
  sidebar: {
3705
3711
  collapseSidebar: "折叠侧边栏",
3706
3712
  expandSidebar: "展开侧边栏",
3713
+ collapseAsk: "收起提问",
3714
+ expandAsk: "展开提问",
3707
3715
  collapseDashboards: "收起仪表板",
3708
3716
  expandDashboards: "展开仪表板",
3709
3717
  collapseAnalyses: "收起分析",
@@ -3906,6 +3914,8 @@ export const messagesByLocale = {
3906
3914
  sidebar: {
3907
3915
  collapseSidebar: "Contraer barra lateral",
3908
3916
  expandSidebar: "Expandir barra lateral",
3917
+ collapseAsk: "Contraer Ask",
3918
+ expandAsk: "Expandir Ask",
3909
3919
  collapseDashboards: "Contraer paneles",
3910
3920
  expandDashboards: "Expandir paneles",
3911
3921
  collapseAnalyses: "Contraer análisis",
@@ -4119,6 +4129,8 @@ export const messagesByLocale = {
4119
4129
  sidebar: {
4120
4130
  collapseSidebar: "Réduire la barre latérale",
4121
4131
  expandSidebar: "Développer la barre latérale",
4132
+ collapseAsk: "Réduire Ask",
4133
+ expandAsk: "Développer Ask",
4122
4134
  collapseDashboards: "Réduire les tableaux de bord",
4123
4135
  expandDashboards: "Développer les tableaux de bord",
4124
4136
  collapseAnalyses: "Réduire les analyses",
@@ -4338,6 +4350,8 @@ export const messagesByLocale = {
4338
4350
  sidebar: {
4339
4351
  collapseSidebar: "Seitenleiste einklappen",
4340
4352
  expandSidebar: "Seitenleiste erweitern",
4353
+ collapseAsk: "Ask einklappen",
4354
+ expandAsk: "Ask ausklappen",
4341
4355
  collapseDashboards: "Dashboards einklappen",
4342
4356
  expandDashboards: "Dashboards ausklappen",
4343
4357
  collapseAnalyses: "Analysen einklappen",
@@ -4557,6 +4571,8 @@ export const messagesByLocale = {
4557
4571
  sidebar: {
4558
4572
  collapseSidebar: "サイドバーを折りたたむ",
4559
4573
  expandSidebar: "サイドバーを展開",
4574
+ collapseAsk: "Ask を折りたたむ",
4575
+ expandAsk: "Ask を展開",
4560
4576
  collapseDashboards: "ダッシュボードを折りたたむ",
4561
4577
  expandDashboards: "ダッシュボードを展開",
4562
4578
  collapseAnalyses: "分析を折りたたむ",
@@ -4769,6 +4785,8 @@ export const messagesByLocale = {
4769
4785
  sidebar: {
4770
4786
  collapseSidebar: "사이드바 접기",
4771
4787
  expandSidebar: "사이드바 펼치기",
4788
+ collapseAsk: "Ask 접기",
4789
+ expandAsk: "Ask 펼치기",
4772
4790
  collapseDashboards: "대시보드 접기",
4773
4791
  expandDashboards: "대시보드 펼치기",
4774
4792
  collapseAnalyses: "분석 접기",
@@ -4981,6 +4999,8 @@ export const messagesByLocale = {
4981
4999
  sidebar: {
4982
5000
  collapseSidebar: "Recolher barra lateral",
4983
5001
  expandSidebar: "Expandir barra lateral",
5002
+ collapseAsk: "Recolher Ask",
5003
+ expandAsk: "Expandir Ask",
4984
5004
  collapseDashboards: "Recolher dashboards",
4985
5005
  expandDashboards: "Expandir dashboards",
4986
5006
  collapseAnalyses: "Recolher análises",
@@ -5200,6 +5220,8 @@ export const messagesByLocale = {
5200
5220
  sidebar: {
5201
5221
  collapseSidebar: "साइडबार समेटें",
5202
5222
  expandSidebar: "साइडबार फैलाएं",
5223
+ collapseAsk: "Ask समेटें",
5224
+ expandAsk: "Ask फैलाएं",
5203
5225
  collapseDashboards: "डैशबोर्ड समेटें",
5204
5226
  expandDashboards: "डैशबोर्ड फैलाएं",
5205
5227
  collapseAnalyses: "विश्लेषण समेटें",
@@ -5409,6 +5431,8 @@ export const messagesByLocale = {
5409
5431
  sidebar: {
5410
5432
  collapseSidebar: "طي الشريط الجانبي",
5411
5433
  expandSidebar: "توسيع الشريط الجانبي",
5434
+ collapseAsk: "طي Ask",
5435
+ expandAsk: "توسيع Ask",
5412
5436
  collapseDashboards: "طي لوحات المعلومات",
5413
5437
  expandDashboards: "توسيع لوحات المعلومات",
5414
5438
  collapseAnalyses: "طي التحليلات",
@@ -5701,6 +5725,7 @@ const translatedAnalyticsDebtTranslations = {
5701
5725
  dashboard: "仪表板 - Analytics",
5702
5726
  dataDictionary: "数据字典 - Analytics",
5703
5727
  dataSources: "数据源 - Analytics",
5728
+ monitoring: "监控 - Analytics",
5704
5729
  agents: "代理 - Analytics",
5705
5730
  extensions: "扩展 - Analytics",
5706
5731
  notFound: "未找到 - Analytics",
@@ -5910,6 +5935,7 @@ const translatedAnalyticsDebtTranslations = {
5910
5935
  dashboard: "Panel de control - Analytics",
5911
5936
  dataDictionary: "Diccionario de datos - Analytics",
5912
5937
  dataSources: "Fuentes de datos - Analytics",
5938
+ monitoring: "Monitorización - Analytics",
5913
5939
  agents: "Agentes - Analytics",
5914
5940
  extensions: "Extensiones - Analytics",
5915
5941
  notFound: "No encontrado - Analytics",
@@ -6124,6 +6150,7 @@ const translatedAnalyticsDebtTranslations = {
6124
6150
  dashboard: "Tableau de bord - Analytics",
6125
6151
  dataDictionary: "Dictionnaire de données - Analytics",
6126
6152
  dataSources: "Sources de données - Analytics",
6153
+ monitoring: "Surveillance - Analytics",
6127
6154
  agents: "Agents - Analytique",
6128
6155
  extensions: "Extensions-Analytics",
6129
6156
  notFound: "Introuvable - Analytics",
@@ -6339,6 +6366,7 @@ const translatedAnalyticsDebtTranslations = {
6339
6366
  dashboard: "Dashboard – Analytics",
6340
6367
  dataDictionary: "Datenwörterbuch – Analytics",
6341
6368
  dataSources: "Datenquellen – Analytics",
6369
+ monitoring: "Überwachung – Analytics",
6342
6370
  agents: "Agenten – Analytics",
6343
6371
  extensions: "Erweiterungen – Analytics",
6344
6372
  notFound: "Nicht gefunden – Analytics",
@@ -6549,6 +6577,7 @@ const translatedAnalyticsDebtTranslations = {
6549
6577
  dashboard: "ダッシュボード - Analytics",
6550
6578
  dataDictionary: "データディクショナリ - Analytics",
6551
6579
  dataSources: "データソース - Analytics",
6580
+ monitoring: "監視 - Analytics",
6552
6581
  agents: "エージェント - Analytics",
6553
6582
  extensions: "拡張機能 - Analytics",
6554
6583
  notFound: "見つかりません - Analytics",
@@ -6758,6 +6787,7 @@ const translatedAnalyticsDebtTranslations = {
6758
6787
  dashboard: "대시보드 - Analytics",
6759
6788
  dataDictionary: "데이터 사전 - Analytics",
6760
6789
  dataSources: "데이터 소스 - Analytics",
6790
+ monitoring: "모니터링 - Analytics",
6761
6791
  agents: "에이전트 - Analytics",
6762
6792
  extensions: "확장 - Analytics",
6763
6793
  notFound: "찾을 수 없음 - Analytics",
@@ -6971,6 +7001,7 @@ const translatedAnalyticsDebtTranslations = {
6971
7001
  dashboard: "Painel - Analytics",
6972
7002
  dataDictionary: "Dicionário de Dados - Analytics",
6973
7003
  dataSources: "Fontes de dados - Analytics",
7004
+ monitoring: "Monitoramento - Analytics",
6974
7005
  agents: "Agentes - Analytics",
6975
7006
  extensions: "Extensões - Analytics",
6976
7007
  notFound: "Não encontrado - Analytics",
@@ -7180,6 +7211,7 @@ const translatedAnalyticsDebtTranslations = {
7180
7211
  dashboard: "डैशबोर्ड - Analytics",
7181
7212
  dataDictionary: "डेटा डिक्शनरी - Analytics",
7182
7213
  dataSources: "डेटा स्रोत - Analytics",
7214
+ monitoring: "मॉनिटरिंग - Analytics",
7183
7215
  agents: "एजेंट - Analytics",
7184
7216
  extensions: "एक्सटेंशन - Analytics",
7185
7217
  notFound: "नहीं मिला - Analytics",
@@ -7388,6 +7420,7 @@ const translatedAnalyticsDebtTranslations = {
7388
7420
  dashboard: "لوحة القيادة - Analytics",
7389
7421
  dataDictionary: "قاموس البيانات - Analytics",
7390
7422
  dataSources: "مصادر البيانات - Analytics",
7423
+ monitoring: "المراقبة - Analytics",
7391
7424
  agents: "الوكلاء - Analytics",
7392
7425
  extensions: "Extensions - Analytics",
7393
7426
  notFound: "Not Found - Analytics",
@@ -1440,6 +1440,34 @@ function FirstPartyAnalyticsCard() {
1440
1440
  </div>
1441
1441
  </div>
1442
1442
 
1443
+ {/* Error capture note — the analytics SDK also captures uncaught
1444
+ exceptions and links them to session replays. Static English
1445
+ copy because shared i18n is owned elsewhere. */}
1446
+ <div className="rounded-md border border-border/50 bg-muted/20 p-3 text-xs">
1447
+ <div className="font-medium text-foreground">
1448
+ Error capture{/* i18n-ignore static SDK docs label */}
1449
+ </div>
1450
+ <p className="mt-1 text-muted-foreground">
1451
+ Once a public key is set, the browser SDK automatically captures
1452
+ uncaught exceptions and unhandled promise rejections, and
1453
+ exposes a Sentry-style{" "}
1454
+ <code className="font-mono">captureException()</code> /{" "}
1455
+ <code className="font-mono">captureMessage()</code> API. Errors
1456
+ {/* i18n-ignore static SDK docs copy */} are grouped into issues
1457
+ under Monitoring → Errors and linked to the session replay where
1458
+ each one happened.
1459
+ </p>
1460
+ <a
1461
+ href="https://www.agent-native.com/docs/tracking#error-capture"
1462
+ target="_blank"
1463
+ rel="noreferrer"
1464
+ className="mt-2 inline-flex items-center gap-1 font-medium text-primary hover:underline"
1465
+ >
1466
+ Error capture docs{/* i18n-ignore static SDK docs link */}
1467
+ <IconExternalLink className="h-3 w-3" />
1468
+ </a>
1469
+ </div>
1470
+
1443
1471
  <div className="data-source-inline-form">
1444
1472
  <input
1445
1473
  value={name}
@@ -7,9 +7,12 @@ import {
7
7
  useBuilderConnectFlow,
8
8
  useBuilderStatus,
9
9
  useT,
10
+ type SettingsSearchEntry,
11
+ type SettingsTabItem,
10
12
  } from "@agent-native/core/client";
11
13
  import { TeamPage } from "@agent-native/core/client/org";
12
14
  import {
15
+ IconBell,
13
16
  IconCheck,
14
17
  IconChevronDown,
15
18
  IconCloud,
@@ -18,7 +21,7 @@ import {
18
21
  IconLoader2,
19
22
  IconServer,
20
23
  } from "@tabler/icons-react";
21
- import { useState } from "react";
24
+ import { useMemo, useState } from "react";
22
25
  import { Link } from "react-router";
23
26
  import { toast } from "sonner";
24
27
 
@@ -188,14 +191,75 @@ export default function Settings() {
188
191
  }
189
192
  }
190
193
 
194
+ const extraTabs = useMemo<SettingsTabItem[]>(
195
+ () => [
196
+ {
197
+ id: "alerts",
198
+ label: t("settings.alertsTitle"),
199
+ icon: IconBell,
200
+ keywords: "alerts rules notifications thresholds triggers monitoring",
201
+ content: (
202
+ <div className="mx-auto w-full max-w-3xl">
203
+ <AlertRulesSettingsCard />
204
+ </div>
205
+ ),
206
+ },
207
+ ...agentSettingsTabs,
208
+ ],
209
+ [agentSettingsTabs, t],
210
+ );
211
+
212
+ const generalSearchEntries = useMemo<SettingsSearchEntry[]>(
213
+ () => [
214
+ {
215
+ id: "analytics-account",
216
+ label: t("settings.account"),
217
+ keywords: "profile email signed in identity",
218
+ hash: "account",
219
+ },
220
+ {
221
+ id: "analytics-credentials",
222
+ label: t("settings.credentials"),
223
+ keywords: "data sources api keys manage credentials",
224
+ hash: "credentials",
225
+ },
226
+ {
227
+ id: "analytics-replay-storage",
228
+ label: t("settings.replayStorage"),
229
+ keywords: "storage s3 builder replay bucket cloud",
230
+ hash: "replay-storage",
231
+ },
232
+ {
233
+ id: "analytics-dashboard-templates",
234
+ label: t("settings.dashboardTemplates"),
235
+ keywords: "templates catalog dashboards",
236
+ hash: "dashboard-templates",
237
+ },
238
+ {
239
+ id: "analytics-language",
240
+ label: t("settings.languageTitle"),
241
+ keywords: "language locale translation i18n",
242
+ hash: "language",
243
+ },
244
+ {
245
+ id: "analytics-about",
246
+ label: t("settings.about"),
247
+ keywords: "about version info usage",
248
+ hash: "about",
249
+ },
250
+ ],
251
+ [t],
252
+ );
253
+
191
254
  return (
192
255
  <SettingsTabsPage
193
256
  teamLabel={t("navigation.team")}
194
257
  whatsNewLabel={t("root.whatsNew")}
195
- extraTabs={agentSettingsTabs}
258
+ extraTabs={extraTabs}
259
+ generalSearchEntries={generalSearchEntries}
196
260
  general={
197
261
  <div className="mx-auto w-full max-w-2xl space-y-6">
198
- <Card className="bg-card border-border/50">
262
+ <Card id="account" className="bg-card border-border/50 scroll-mt-16">
199
263
  <CardHeader>
200
264
  <CardTitle className="text-base">
201
265
  {t("settings.account")}
@@ -213,7 +277,10 @@ export default function Settings() {
213
277
  </CardContent>
214
278
  </Card>
215
279
 
216
- <Card className="bg-card border-border/50">
280
+ <Card
281
+ id="credentials"
282
+ className="bg-card border-border/50 scroll-mt-16"
283
+ >
217
284
  <CardHeader>
218
285
  <CardTitle className="text-base">
219
286
  {t("settings.credentials")}
@@ -403,7 +470,10 @@ export default function Settings() {
403
470
  </CardContent>
404
471
  </Card>
405
472
 
406
- <Card className="bg-card border-border/50">
473
+ <Card
474
+ id="dashboard-templates"
475
+ className="bg-card border-border/50 scroll-mt-16"
476
+ >
407
477
  <CardHeader>
408
478
  <CardTitle className="text-base">
409
479
  {t("settings.dashboardTemplates")}
@@ -421,9 +491,7 @@ export default function Settings() {
421
491
  </CardContent>
422
492
  </Card>
423
493
 
424
- <AlertRulesSettingsCard />
425
-
426
- <Card className="bg-card border-border/50">
494
+ <Card id="language" className="bg-card border-border/50 scroll-mt-16">
427
495
  <CardHeader>
428
496
  <CardTitle className="text-base">
429
497
  {t("settings.languageTitle")}
@@ -435,7 +503,7 @@ export default function Settings() {
435
503
  </CardContent>
436
504
  </Card>
437
505
 
438
- <Card className="bg-card border-border/50">
506
+ <Card id="about" className="bg-card border-border/50 scroll-mt-16">
439
507
  <CardHeader>
440
508
  <CardTitle className="text-base">{t("settings.about")}</CardTitle>
441
509
  </CardHeader>
@@ -296,8 +296,8 @@ export function SqlChartCard({
296
296
 
297
297
  // Extension panels render their sandboxed iframe full-bleed with no card chrome
298
298
  // or title — the extension owns its own UI. All viewers get the read-only
299
- // actions (full screen, refresh, open extension); editable dashboards also get
300
- // delete and drag.
299
+ // actions (full screen, refresh, open embedded extension); editable
300
+ // dashboards also get delete and drag.
301
301
  if (panel.chartType === "extension") {
302
302
  const extensionId = (panel.config as Record<string, unknown> | undefined)
303
303
  ?.extensionId as string | undefined;
@@ -349,7 +349,7 @@ export function SqlChartCard({
349
349
  }
350
350
  >
351
351
  <IconExternalLink className="h-4 w-4 mr-2" />
352
- Open extension {/* i18n-ignore */}
352
+ Open embedded extension {/* i18n-ignore */}
353
353
  </DropdownMenuItem>
354
354
  ) : null}
355
355
  <DropdownMenuSeparator />
@@ -483,6 +483,13 @@ export function movePanelToDropSlot(
483
483
  ) {
484
484
  rowIndex -= 1;
485
485
  }
486
+ if (
487
+ sourceGroupKey === slot.groupKey &&
488
+ sourceRowWasSingle &&
489
+ sourceRowIndex === rowIndex
490
+ ) {
491
+ return panels;
492
+ }
486
493
  targetGroup.rows.splice(Math.max(0, rowIndex), 0, {
487
494
  key: movingPanel.id,
488
495
  panels: [movingPanel],
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Error capture panel — OWNED BY THE ERROR CAPTURE FEATURE.
3
+ *
4
+ * Sentry-style exception triage below the Monitoring tab bar. The issue list
5
+ * and per-issue detail are switched via the `?issue=<id>` query param (shareable
6
+ * + agent-deep-linkable) and the selection is mirrored into `application_state`
7
+ * so the agent knows which error the user is looking at. Data flows through the
8
+ * error-capture actions; `useChangeVersions(["error-issues"])` keeps the UI
9
+ * fresh as new captures and agent edits land.
10
+ */
11
+ import {
12
+ setClientAppState,
13
+ useActionMutation,
14
+ useActionQuery,
15
+ useChangeVersions,
16
+ } from "@agent-native/core/client";
17
+ import { useQueryClient } from "@tanstack/react-query";
18
+ import { useEffect, useMemo, useState } from "react";
19
+ import { useSearchParams } from "react-router";
20
+ import { toast } from "sonner";
21
+
22
+ import { fmt, useErrorsT } from "./errors/i18n";
23
+ import { IssueDetail } from "./errors/IssueDetail";
24
+ import { IssueList } from "./errors/IssueList";
25
+ import type {
26
+ ErrorIssueDetail,
27
+ ErrorIssueSummary,
28
+ IssueStatus,
29
+ StatusFilter,
30
+ } from "./errors/types";
31
+
32
+ function useDebouncedValue<T>(value: T, delayMs: number): T {
33
+ const [debounced, setDebounced] = useState(value);
34
+ useEffect(() => {
35
+ const timer = setTimeout(() => setDebounced(value), delayMs);
36
+ return () => clearTimeout(timer);
37
+ }, [value, delayMs]);
38
+ return debounced;
39
+ }
40
+
41
+ export function ErrorsPanel() {
42
+ const t = useErrorsT();
43
+ const queryClient = useQueryClient();
44
+ const [searchParams, setSearchParams] = useSearchParams();
45
+ const selectedId = searchParams.get("issue");
46
+
47
+ const [status, setStatus] = useState<StatusFilter>("unresolved");
48
+ const [search, setSearch] = useState("");
49
+ const debouncedSearch = useDebouncedValue(search, 250);
50
+
51
+ const sync = useChangeVersions(["error-issues", "action"]);
52
+
53
+ const queryArgs = useMemo(
54
+ () => ({
55
+ status,
56
+ query: debouncedSearch.trim() || undefined,
57
+ limit: 100,
58
+ }),
59
+ [status, debouncedSearch],
60
+ );
61
+
62
+ const { data, isLoading, isFetching, error, refetch } = useActionQuery<
63
+ ErrorIssueSummary[]
64
+ >("list-error-issues", queryArgs, { staleTime: 10_000 });
65
+
66
+ const resolveIssue = useActionMutation<
67
+ { id: string; status: IssueStatus; assignee: string | null },
68
+ { id: string; status: IssueStatus }
69
+ >("resolve-error-issue");
70
+ const sendTest = useActionMutation<{ issueId: string }, { message?: string }>(
71
+ "capture-test-error",
72
+ );
73
+
74
+ const issues = useMemo(() => (Array.isArray(data) ? data : []), [data]);
75
+
76
+ // Refresh list + detail when a capture or agent edit records an
77
+ // "error-issues" change (useDbSync bumps the version this hook reads).
78
+ useEffect(() => {
79
+ queryClient.invalidateQueries({
80
+ queryKey: ["action", "list-error-issues"],
81
+ });
82
+ queryClient.invalidateQueries({ queryKey: ["action", "get-error-issue"] });
83
+ // eslint-disable-next-line react-hooks/exhaustive-deps
84
+ }, [sync]);
85
+
86
+ const selectedIssue = useMemo(
87
+ () => issues.find((issue) => issue.id === selectedId) ?? null,
88
+ [issues, selectedId],
89
+ );
90
+
91
+ // Mirror the current selection into application_state for the agent.
92
+ useEffect(() => {
93
+ const value = selectedIssue
94
+ ? {
95
+ view: "errors",
96
+ issueId: selectedIssue.id,
97
+ title: selectedIssue.title,
98
+ status: selectedIssue.status,
99
+ }
100
+ : selectedId
101
+ ? { view: "errors", issueId: selectedId }
102
+ : { view: "errors" };
103
+ void setClientAppState("monitoring", value).catch(() => {});
104
+ }, [selectedIssue, selectedId]);
105
+
106
+ const selectIssue = (id: string | null) => {
107
+ setSearchParams(
108
+ (prev) => {
109
+ const params = new URLSearchParams(prev);
110
+ if (id) params.set("issue", id);
111
+ else params.delete("issue");
112
+ return params;
113
+ },
114
+ { replace: false },
115
+ );
116
+ };
117
+
118
+ const applyStatusToCaches = (id: string, nextStatus: IssueStatus) => {
119
+ queryClient.setQueriesData<ErrorIssueSummary[]>(
120
+ { queryKey: ["action", "list-error-issues"] },
121
+ (old) =>
122
+ Array.isArray(old)
123
+ ? old.map((issue) =>
124
+ issue.id === id ? { ...issue, status: nextStatus } : issue,
125
+ )
126
+ : old,
127
+ );
128
+ queryClient.setQueriesData<ErrorIssueDetail>(
129
+ { queryKey: ["action", "get-error-issue"] },
130
+ (old) =>
131
+ old && old.issue?.id === id
132
+ ? { ...old, issue: { ...old.issue, status: nextStatus } }
133
+ : old,
134
+ );
135
+ };
136
+
137
+ const handleSetStatus = async (id: string, nextStatus: IssueStatus) => {
138
+ applyStatusToCaches(id, nextStatus);
139
+ try {
140
+ await resolveIssue.mutateAsync({ id, status: nextStatus });
141
+ toast.success(
142
+ nextStatus === "resolved"
143
+ ? t.resolvedToast
144
+ : nextStatus === "ignored"
145
+ ? t.ignoredToast
146
+ : t.reopenedToast,
147
+ );
148
+ } catch (err) {
149
+ queryClient.invalidateQueries({
150
+ queryKey: ["action", "list-error-issues"],
151
+ });
152
+ queryClient.invalidateQueries({
153
+ queryKey: ["action", "get-error-issue"],
154
+ });
155
+ toast.error(
156
+ fmt(t.updateFailed, {
157
+ message: err instanceof Error ? err.message : String(err),
158
+ }),
159
+ );
160
+ }
161
+ };
162
+
163
+ const handleSendTestError = async () => {
164
+ try {
165
+ await sendTest.mutateAsync({});
166
+ toast.success(t.testSentToast);
167
+ await refetch();
168
+ } catch (err) {
169
+ toast.error(
170
+ fmt(t.testFailed, {
171
+ message: err instanceof Error ? err.message : String(err),
172
+ }),
173
+ );
174
+ }
175
+ };
176
+
177
+ if (selectedId) {
178
+ return (
179
+ <IssueDetail
180
+ issueId={selectedId}
181
+ fallback={selectedIssue ?? undefined}
182
+ onBack={() => selectIssue(null)}
183
+ onSetStatus={(next) => handleSetStatus(selectedId, next)}
184
+ pendingStatus={resolveIssue.isPending}
185
+ />
186
+ );
187
+ }
188
+
189
+ return (
190
+ <IssueList
191
+ issues={issues}
192
+ isLoading={isLoading}
193
+ status={status}
194
+ onStatusChange={setStatus}
195
+ search={search}
196
+ onSearchChange={setSearch}
197
+ onRefresh={() => void refetch()}
198
+ isFetching={isFetching}
199
+ onSelect={selectIssue}
200
+ onSendTestError={handleSendTestError}
201
+ sendingTest={sendTest.isPending}
202
+ error={error ? error.message : null}
203
+ />
204
+ );
205
+ }