@agent-native/core 0.120.1 → 0.120.3

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 (396) hide show
  1. package/corpus/README.md +3 -3
  2. package/corpus/core/CHANGELOG.md +29 -0
  3. package/corpus/core/docs/content/extensions.mdx +23 -4
  4. package/corpus/core/package.json +1 -1
  5. package/corpus/core/src/agent/production-agent.ts +4 -0
  6. package/corpus/core/src/agent/run-manager.ts +36 -10
  7. package/corpus/core/src/agent/types.ts +2 -0
  8. package/corpus/core/src/cli/context-xray-local.ts +1 -1
  9. package/corpus/core/src/cli/index.ts +63 -18
  10. package/corpus/core/src/cli/skills.ts +5 -0
  11. package/corpus/core/src/cli/telemetry.ts +118 -1
  12. package/corpus/core/src/client/AgentPanel.tsx +10 -0
  13. package/corpus/core/src/client/CommandMenu.tsx +13 -1
  14. package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +39 -4
  15. package/corpus/core/src/client/analytics.ts +13 -0
  16. package/corpus/core/src/client/error-capture.ts +6 -1
  17. package/corpus/core/src/client/extensions/ExtensionsListPage.tsx +28 -8
  18. package/corpus/core/src/client/extensions/agent-native-extension-runtime.ts +1 -1
  19. package/corpus/core/src/client/navigation/index.ts +2 -0
  20. package/corpus/core/src/client/org/OrgSwitcher.tsx +14 -32
  21. package/corpus/core/src/client/settings/ExtensionsSettingsContent.tsx +24 -0
  22. package/corpus/core/src/client/settings/SettingsPanel.tsx +10 -0
  23. package/corpus/core/src/deploy/build.ts +3 -0
  24. package/corpus/core/src/extensions/theme.ts +1 -1
  25. package/corpus/core/src/localization/default-messages.ts +2 -0
  26. package/corpus/core/src/server/analytics.ts +154 -25
  27. package/corpus/core/src/server/core-routes-plugin.ts +10 -1
  28. package/corpus/core/src/server/framework-request-handler.ts +17 -26
  29. package/corpus/core/src/styles/agent-native.css +13 -0
  30. package/corpus/core/src/templates/chat/app/components/layout/Layout.tsx +3 -0
  31. package/corpus/core/src/templates/chat/app/components/layout/Sidebar.tsx +113 -51
  32. package/corpus/core/src/templates/chat/app/global.css +1 -1
  33. package/corpus/core/src/templates/chat/app/routes/extensions._index.tsx +2 -2
  34. package/corpus/core/src/templates/chat/netlify.toml +1 -0
  35. package/corpus/core/src/templates/default/app/global.css +1 -1
  36. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +16 -0
  37. package/corpus/core/src/tracking/error-capture.ts +151 -0
  38. package/corpus/core/src/tracking/index.ts +5 -0
  39. package/corpus/core/src/vite/client.ts +6 -0
  40. package/corpus/templates/analytics/.agents/skills/adhoc-analysis/SKILL.md +27 -43
  41. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +19 -8
  42. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +2 -2
  43. package/corpus/templates/analytics/AGENTS.md +20 -8
  44. package/corpus/templates/analytics/actions/get-explorer-dashboard.ts +3 -0
  45. package/corpus/templates/analytics/actions/list-dashboard-usage-stats.ts +140 -46
  46. package/corpus/templates/analytics/actions/migrate-analytics-artifacts.ts +48 -0
  47. package/corpus/templates/analytics/actions/save-analysis.ts +2 -3
  48. package/corpus/templates/analytics/actions/view-screen.ts +1 -1
  49. package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +1 -1
  50. package/corpus/templates/analytics/app/components/dashboard/DashboardHistoryPanel.tsx +1 -4
  51. package/corpus/templates/analytics/app/components/dashboard/DashboardMetadata.tsx +77 -0
  52. package/corpus/templates/analytics/app/components/dashboard/DashboardPanelSkeleton.tsx +7 -1
  53. package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +1 -1
  54. package/corpus/templates/analytics/app/components/dashboard/DateRangePicker.tsx +2 -2
  55. package/corpus/templates/analytics/app/components/dashboard/MetricCard.tsx +1 -1
  56. package/corpus/templates/analytics/app/components/dashboard/RecentActivity.tsx +1 -1
  57. package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +1 -1
  58. package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +1 -1
  59. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +41 -9
  60. package/corpus/templates/analytics/app/components/dashboard/StatsCard.tsx +1 -1
  61. package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +1 -1
  62. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -0
  63. package/corpus/templates/analytics/app/components/layout/Layout.tsx +28 -14
  64. package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +1 -0
  65. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +255 -626
  66. package/corpus/templates/analytics/app/global.css +31 -1
  67. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +2 -2
  68. package/corpus/templates/analytics/app/i18n-data.ts +80 -0
  69. package/corpus/templates/analytics/app/lib/dashboard-report-capture.ts +42 -0
  70. package/corpus/templates/analytics/app/pages/Agents.tsx +49 -2
  71. package/corpus/templates/analytics/app/pages/adhoc/_shared/KpiChart.tsx +1 -1
  72. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/ChartTypePicker.tsx +1 -1
  73. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/DateRangePicker.tsx +1 -1
  74. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/EventRow.tsx +1 -1
  75. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/SqlPreview.tsx +2 -2
  76. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +54 -11
  77. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +3 -3
  78. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/EmailReportDialog.tsx +2 -2
  79. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +1 -1
  80. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +4 -54
  81. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +178 -69
  82. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +2 -2
  83. package/corpus/templates/analytics/app/root.tsx +28 -0
  84. package/corpus/templates/analytics/app/routes/analyses._index.tsx +3 -2
  85. package/corpus/templates/analytics/app/routes/extensions._index.tsx +2 -2
  86. package/corpus/templates/analytics/changelog/2026-07-23-analytics-now-groups-saved-analyses-and-embedded-extensions-.md +6 -0
  87. package/corpus/templates/analytics/changelog/2026-07-23-dashboard-menus-show-who-created-and-last-updated-each-dashb.md +6 -0
  88. package/corpus/templates/analytics/changelog/2026-07-23-dashboard-usage-now-loads-reliably-for-organizations-with-ma.md +6 -0
  89. package/corpus/templates/analytics/changelog/2026-07-23-long-dashboard-building-requests-now-continue-without-stoppi.md +6 -0
  90. package/corpus/templates/analytics/changelog/2026-07-24-analytics-charts-now-explain-slow-loads-and-offer-a-direct-r.md +6 -0
  91. package/corpus/templates/analytics/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  92. package/corpus/templates/analytics/changelog/2026-07-24-daily-dashboard-emails-now-load-signed-reports-more-reliably.md +6 -0
  93. package/corpus/templates/analytics/changelog/2026-07-24-manage-agent-is-clearly-marked-as-a-link-to-its-dedicated-pa.md +6 -0
  94. package/corpus/templates/analytics/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  95. package/corpus/templates/analytics/netlify.toml +4 -0
  96. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +1 -1
  97. package/corpus/templates/analytics/server/db/schema.ts +9 -0
  98. package/corpus/templates/analytics/server/jobs/dashboard-report.ts +21 -0
  99. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +0 -1
  100. package/corpus/templates/analytics/server/lib/agent-readable-resource-context.ts +1 -0
  101. package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +11 -0
  102. package/corpus/templates/analytics/server/lib/dashboard-report-subscriptions.ts +54 -0
  103. package/corpus/templates/analytics/server/lib/dashboard-report.ts +235 -26
  104. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +4 -1
  105. package/corpus/templates/analytics/server/lib/migrate-analytics-artifacts.ts +1062 -0
  106. package/corpus/templates/analytics/server/plugins/agent-chat.ts +6 -52
  107. package/corpus/templates/analytics/server/plugins/core-routes.ts +1 -1
  108. package/corpus/templates/analytics/server/plugins/db.ts +19 -0
  109. package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +1 -1
  110. package/corpus/templates/assets/actions/generate-image-batch.ts +36 -1
  111. package/corpus/templates/assets/actions/generate-image.ts +28 -1
  112. package/corpus/templates/assets/app/components/asset/AssetPreviewDialog.tsx +376 -0
  113. package/corpus/templates/assets/app/components/create/RecentDraftsSection.tsx +14 -4
  114. package/corpus/templates/assets/app/components/layout/Layout.tsx +5 -0
  115. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +164 -82
  116. package/corpus/templates/assets/app/global.css +1 -1
  117. package/corpus/templates/assets/app/i18n-data.ts +10 -0
  118. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +99 -10
  119. package/corpus/templates/assets/app/routes/extensions._index.tsx +2 -2
  120. package/corpus/templates/assets/app/routes/library.tsx +21 -198
  121. package/corpus/templates/assets/changelog/2026-07-21-unified-asset-preview-click-any-asset-to-open-one-preview-wi.md +6 -0
  122. package/corpus/templates/assets/changelog/2026-07-23-assets-image-generation-now-recovers-after-a-completed-tool-.md +6 -0
  123. package/corpus/templates/assets/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  124. package/corpus/templates/assets/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  125. package/corpus/templates/assets/netlify.toml +1 -0
  126. package/corpus/templates/brain/app/components/layout/Layout.tsx +3 -0
  127. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +114 -51
  128. package/corpus/templates/brain/app/global.css +1 -1
  129. package/corpus/templates/brain/app/routes/extensions._index.tsx +2 -2
  130. package/corpus/templates/brain/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  131. package/corpus/templates/brain/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  132. package/corpus/templates/brain/netlify.toml +1 -0
  133. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +110 -57
  134. package/corpus/templates/calendar/app/global.css +1 -1
  135. package/corpus/templates/calendar/app/routes/_app.extensions._index.tsx +2 -16
  136. package/corpus/templates/calendar/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  137. package/corpus/templates/calendar/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  138. package/corpus/templates/calendar/netlify.toml +1 -0
  139. package/corpus/templates/chat/app/components/layout/Layout.tsx +3 -0
  140. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +113 -51
  141. package/corpus/templates/chat/app/global.css +1 -1
  142. package/corpus/templates/chat/app/routes/extensions._index.tsx +2 -2
  143. package/corpus/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  144. package/corpus/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  145. package/corpus/templates/chat/netlify.toml +1 -0
  146. package/corpus/templates/clips/app/components/library/library-layout.tsx +117 -37
  147. package/corpus/templates/clips/app/components/library/organization-switcher.tsx +2 -2
  148. package/corpus/templates/clips/app/components/player/video-player.tsx +16 -1
  149. package/corpus/templates/clips/app/global.css +1 -1
  150. package/corpus/templates/clips/app/hooks/use-view-tracking.ts +55 -12
  151. package/corpus/templates/clips/app/routes/_app.extensions._index.tsx +2 -16
  152. package/corpus/templates/clips/app/routes/embed.$shareId.tsx +6 -5
  153. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +7 -7
  154. package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -5
  155. package/corpus/templates/clips/changelog/2026-07-23-agent-settings-are-clearly-labeled-manage-agent-in-the-sideb.md +6 -0
  156. package/corpus/templates/clips/changelog/2026-07-23-meeting-recording-meters-and-dismissed-prompts.md +6 -0
  157. package/corpus/templates/clips/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  158. package/corpus/templates/clips/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  159. package/corpus/templates/clips/desktop/src/hooks/useMicMeter.ts +1 -1
  160. package/corpus/templates/clips/desktop/src/lib/meeting-notification-dismissal.ts +2 -0
  161. package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +1 -3
  162. package/corpus/templates/clips/desktop/src/overlays/live-audio-bars.tsx +86 -0
  163. package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +24 -0
  164. package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +5 -69
  165. package/corpus/templates/clips/desktop/src/styles.css +35 -3
  166. package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +13 -44
  167. package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +119 -17
  168. package/corpus/templates/clips/netlify.toml +1 -0
  169. package/corpus/templates/clips/server/plugins/db.ts +113 -68
  170. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +69 -49
  171. package/corpus/templates/content/app/global.css +1 -1
  172. package/corpus/templates/content/app/routes/_app.extensions._index.tsx +2 -2
  173. package/corpus/templates/content/changelog/2026-07-23-agent-settings-are-clearly-labeled-manage-agent-in-the-sideb.md +6 -0
  174. package/corpus/templates/content/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  175. package/corpus/templates/content/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  176. package/corpus/templates/content/netlify.toml +1 -0
  177. package/corpus/templates/design/app/components/layout/Sidebar.tsx +115 -42
  178. package/corpus/templates/design/app/entry.client.tsx +14 -1
  179. package/corpus/templates/design/app/global.css +1 -1
  180. package/corpus/templates/design/app/routes/extensions._index.tsx +2 -2
  181. package/corpus/templates/design/changelog/2026-07-23-agent-settings-are-clearly-labeled-manage-agent-in-the-sideb.md +6 -0
  182. package/corpus/templates/design/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  183. package/corpus/templates/design/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  184. package/corpus/templates/design/netlify.toml +1 -0
  185. package/corpus/templates/dispatch/app/dispatch-extensions.tsx +1 -1
  186. package/corpus/templates/dispatch/app/global.css +1 -1
  187. package/corpus/templates/dispatch/changelog/2026-07-23-agent-settings-are-clearly-labeled-manage-agent-in-the-sideb.md +6 -0
  188. package/corpus/templates/dispatch/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  189. package/corpus/templates/dispatch/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  190. package/corpus/templates/dispatch/netlify.toml +1 -0
  191. package/corpus/templates/forms/app/components/layout/Layout.tsx +3 -0
  192. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +113 -82
  193. package/corpus/templates/forms/app/global.css +1 -1
  194. package/corpus/templates/forms/app/routes/_app.extensions._index.tsx +2 -2
  195. package/corpus/templates/forms/changelog/2026-07-23-agent-settings-are-clearly-labeled-manage-agent-in-the-sideb.md +6 -0
  196. package/corpus/templates/forms/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  197. package/corpus/templates/forms/changelog/2026-07-24-forms-sidebar-actions-now-keep-search-language-feedback-and-.md +6 -0
  198. package/corpus/templates/forms/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  199. package/corpus/templates/forms/netlify.toml +1 -0
  200. package/corpus/templates/macros/app/components/DailyProgress.tsx +5 -5
  201. package/corpus/templates/macros/app/components/ExerciseCard.tsx +2 -2
  202. package/corpus/templates/macros/app/components/MealCard.tsx +2 -2
  203. package/corpus/templates/macros/app/components/WeightCard.tsx +2 -2
  204. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +92 -34
  205. package/corpus/templates/macros/app/components/ui/button.tsx +1 -2
  206. package/corpus/templates/macros/app/components/ui/card.tsx +1 -1
  207. package/corpus/templates/macros/app/global.css +1 -1
  208. package/corpus/templates/macros/app/routes/_index.tsx +1 -1
  209. package/corpus/templates/macros/app/routes/analytics.tsx +4 -7
  210. package/corpus/templates/macros/app/routes/extensions._index.tsx +2 -2
  211. package/corpus/templates/macros/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  212. package/corpus/templates/macros/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  213. package/corpus/templates/macros/netlify.toml +1 -0
  214. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +125 -46
  215. package/corpus/templates/mail/app/global.css +1 -1
  216. package/corpus/templates/mail/app/routes/extensions._index.tsx +2 -2
  217. package/corpus/templates/mail/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  218. package/corpus/templates/mail/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  219. package/corpus/templates/mail/netlify.toml +1 -0
  220. package/corpus/templates/plan/app/components/layout/Layout.tsx +3 -0
  221. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +128 -65
  222. package/corpus/templates/plan/app/global.css +1 -1
  223. package/corpus/templates/plan/app/routes/extensions._index.tsx +2 -2
  224. package/corpus/templates/plan/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  225. package/corpus/templates/plan/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  226. package/corpus/templates/plan/netlify.toml +1 -0
  227. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +116 -36
  228. package/corpus/templates/slides/app/global.css +1 -1
  229. package/corpus/templates/slides/app/routes/extensions._index.tsx +2 -2
  230. package/corpus/templates/slides/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  231. package/corpus/templates/slides/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  232. package/corpus/templates/slides/netlify.toml +1 -0
  233. package/corpus/templates/tasks/app/components/layout/Sidebar.tsx +37 -6
  234. package/corpus/templates/tasks/app/global.css +1 -1
  235. package/corpus/templates/tasks/app/routes/extensions._index.tsx +2 -2
  236. package/corpus/templates/tasks/app/routes/settings.tsx +31 -0
  237. package/corpus/templates/tasks/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  238. package/corpus/templates/tasks/netlify.toml +1 -0
  239. package/corpus/toolkit/CHANGELOG.md +8 -0
  240. package/corpus/toolkit/README.md +8 -1
  241. package/corpus/toolkit/agent-native.eject.json +1 -1
  242. package/corpus/toolkit/package.json +1 -1
  243. package/corpus/toolkit/src/app-shell/index.ts +1 -0
  244. package/corpus/toolkit/src/app-shell/sidebar-footer-actions.tsx +48 -0
  245. package/corpus/toolkit/src/chat-history.css +52 -1
  246. package/corpus/toolkit/src/design-system/default-adapter.tsx +1 -1
  247. package/corpus/toolkit/src/ui/button.tsx +1 -2
  248. package/corpus/toolkit/src/ui/card.tsx +1 -1
  249. package/corpus/toolkit/src/ui/table.tsx +4 -11
  250. package/dist/agent/production-agent.d.ts.map +1 -1
  251. package/dist/agent/production-agent.js +4 -0
  252. package/dist/agent/production-agent.js.map +1 -1
  253. package/dist/agent/run-manager.d.ts +9 -0
  254. package/dist/agent/run-manager.d.ts.map +1 -1
  255. package/dist/agent/run-manager.js +25 -10
  256. package/dist/agent/run-manager.js.map +1 -1
  257. package/dist/agent/types.d.ts +2 -2
  258. package/dist/agent/types.d.ts.map +1 -1
  259. package/dist/agent/types.js.map +1 -1
  260. package/dist/cli/context-xray-local.js +1 -1
  261. package/dist/cli/context-xray-local.js.map +1 -1
  262. package/dist/cli/index.js +56 -17
  263. package/dist/cli/index.js.map +1 -1
  264. package/dist/cli/skills.d.ts.map +1 -1
  265. package/dist/cli/skills.js +5 -0
  266. package/dist/cli/skills.js.map +1 -1
  267. package/dist/cli/telemetry.d.ts +7 -0
  268. package/dist/cli/telemetry.d.ts.map +1 -1
  269. package/dist/cli/telemetry.js +91 -1
  270. package/dist/cli/telemetry.js.map +1 -1
  271. package/dist/client/AgentPanel.d.ts +7 -1
  272. package/dist/client/AgentPanel.d.ts.map +1 -1
  273. package/dist/client/AgentPanel.js +2 -2
  274. package/dist/client/AgentPanel.js.map +1 -1
  275. package/dist/client/CommandMenu.d.ts +2 -0
  276. package/dist/client/CommandMenu.d.ts.map +1 -1
  277. package/dist/client/CommandMenu.js +12 -1
  278. package/dist/client/CommandMenu.js.map +1 -1
  279. package/dist/client/agent-page/AgentTabsPage.d.ts +4 -0
  280. package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
  281. package/dist/client/agent-page/AgentTabsPage.js +8 -4
  282. package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
  283. package/dist/client/analytics.d.ts.map +1 -1
  284. package/dist/client/analytics.js +7 -0
  285. package/dist/client/analytics.js.map +1 -1
  286. package/dist/client/error-capture.d.ts.map +1 -1
  287. package/dist/client/error-capture.js +8 -1
  288. package/dist/client/error-capture.js.map +1 -1
  289. package/dist/client/extensions/ExtensionsListPage.d.ts +5 -1
  290. package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
  291. package/dist/client/extensions/ExtensionsListPage.js +6 -4
  292. package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
  293. package/dist/client/extensions/agent-native-extension-runtime.js +1 -1
  294. package/dist/client/extensions/agent-native-extension-runtime.js.map +1 -1
  295. package/dist/client/navigation/index.d.ts +1 -1
  296. package/dist/client/navigation/index.d.ts.map +1 -1
  297. package/dist/client/navigation/index.js +1 -1
  298. package/dist/client/navigation/index.js.map +1 -1
  299. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  300. package/dist/client/org/OrgSwitcher.js +9 -13
  301. package/dist/client/org/OrgSwitcher.js.map +1 -1
  302. package/dist/client/settings/ExtensionsSettingsContent.d.ts +2 -0
  303. package/dist/client/settings/ExtensionsSettingsContent.d.ts.map +1 -0
  304. package/dist/client/settings/ExtensionsSettingsContent.js +10 -0
  305. package/dist/client/settings/ExtensionsSettingsContent.js.map +1 -0
  306. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  307. package/dist/client/settings/SettingsPanel.js +10 -1
  308. package/dist/client/settings/SettingsPanel.js.map +1 -1
  309. package/dist/deploy/build.js +1 -0
  310. package/dist/deploy/build.js.map +1 -1
  311. package/dist/extensions/theme.js +1 -1
  312. package/dist/extensions/theme.js.map +1 -1
  313. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  314. package/dist/localization/default-messages.d.ts +2 -0
  315. package/dist/localization/default-messages.d.ts.map +1 -1
  316. package/dist/localization/default-messages.js +2 -0
  317. package/dist/localization/default-messages.js.map +1 -1
  318. package/dist/observability/routes.d.ts +3 -3
  319. package/dist/progress/routes.d.ts +1 -1
  320. package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
  321. package/dist/provider-api/actions/provider-api.d.ts +9 -9
  322. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  323. package/dist/resources/handlers.d.ts +1 -1
  324. package/dist/server/analytics.d.ts +9 -4
  325. package/dist/server/analytics.d.ts.map +1 -1
  326. package/dist/server/analytics.js +111 -22
  327. package/dist/server/analytics.js.map +1 -1
  328. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  329. package/dist/server/core-routes-plugin.js +8 -1
  330. package/dist/server/core-routes-plugin.js.map +1 -1
  331. package/dist/server/framework-request-handler.d.ts.map +1 -1
  332. package/dist/server/framework-request-handler.js +17 -27
  333. package/dist/server/framework-request-handler.js.map +1 -1
  334. package/dist/server/realtime-token.d.ts +1 -1
  335. package/dist/styles/agent-native.css +13 -0
  336. package/dist/templates/chat/app/components/layout/Layout.tsx +3 -0
  337. package/dist/templates/chat/app/components/layout/Sidebar.tsx +113 -51
  338. package/dist/templates/chat/app/global.css +1 -1
  339. package/dist/templates/chat/app/routes/extensions._index.tsx +2 -2
  340. package/dist/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  341. package/dist/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  342. package/dist/templates/chat/netlify.toml +1 -0
  343. package/dist/templates/default/app/global.css +1 -1
  344. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +16 -0
  345. package/dist/tracking/error-capture.d.ts +14 -0
  346. package/dist/tracking/error-capture.d.ts.map +1 -0
  347. package/dist/tracking/error-capture.js +113 -0
  348. package/dist/tracking/error-capture.js.map +1 -0
  349. package/dist/tracking/index.d.ts +1 -0
  350. package/dist/tracking/index.d.ts.map +1 -1
  351. package/dist/tracking/index.js +1 -0
  352. package/dist/tracking/index.js.map +1 -1
  353. package/dist/vite/client.d.ts.map +1 -1
  354. package/dist/vite/client.js +2 -0
  355. package/dist/vite/client.js.map +1 -1
  356. package/docs/content/extensions.mdx +23 -4
  357. package/package.json +2 -2
  358. package/src/agent/production-agent.ts +4 -0
  359. package/src/agent/run-manager.ts +36 -10
  360. package/src/agent/types.ts +2 -0
  361. package/src/cli/context-xray-local.ts +1 -1
  362. package/src/cli/index.ts +63 -18
  363. package/src/cli/skills.ts +5 -0
  364. package/src/cli/telemetry.ts +118 -1
  365. package/src/client/AgentPanel.tsx +10 -0
  366. package/src/client/CommandMenu.tsx +13 -1
  367. package/src/client/agent-page/AgentTabsPage.tsx +39 -4
  368. package/src/client/analytics.ts +13 -0
  369. package/src/client/error-capture.ts +6 -1
  370. package/src/client/extensions/ExtensionsListPage.tsx +28 -8
  371. package/src/client/extensions/agent-native-extension-runtime.ts +1 -1
  372. package/src/client/navigation/index.ts +2 -0
  373. package/src/client/org/OrgSwitcher.tsx +14 -32
  374. package/src/client/settings/ExtensionsSettingsContent.tsx +24 -0
  375. package/src/client/settings/SettingsPanel.tsx +10 -0
  376. package/src/deploy/build.ts +3 -0
  377. package/src/extensions/theme.ts +1 -1
  378. package/src/localization/default-messages.ts +2 -0
  379. package/src/server/analytics.ts +154 -25
  380. package/src/server/core-routes-plugin.ts +10 -1
  381. package/src/server/framework-request-handler.ts +17 -26
  382. package/src/styles/agent-native.css +13 -0
  383. package/src/templates/chat/app/components/layout/Layout.tsx +3 -0
  384. package/src/templates/chat/app/components/layout/Sidebar.tsx +113 -51
  385. package/src/templates/chat/app/global.css +1 -1
  386. package/src/templates/chat/app/routes/extensions._index.tsx +2 -2
  387. package/src/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  388. package/src/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  389. package/src/templates/chat/netlify.toml +1 -0
  390. package/src/templates/default/app/global.css +1 -1
  391. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +16 -0
  392. package/src/tracking/error-capture.ts +151 -0
  393. package/src/tracking/index.ts +5 -0
  394. package/src/vite/client.ts +6 -0
  395. package/corpus/templates/analytics/app/components/layout/NewAnalysisDialog.tsx +0 -165
  396. package/corpus/templates/analytics/app/pages/analyses/AnalysesList.tsx +0 -175
@@ -1 +1 @@
1
- {"version":3,"file":"AgentTabsPage.js","sourceRoot":"","sources":["../../../src/client/agent-page/AgentTabsPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n IconBook2,\n IconChecklist,\n IconClock,\n IconExternalLink,\n IconFolder,\n IconHistory,\n IconHierarchy2,\n IconNotes,\n IconPlugConnected,\n IconTopologyRing2,\n IconSearch,\n IconSettings,\n IconShieldLock,\n IconX,\n} from \"@tabler/icons-react\";\nimport {\n lazy,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentType,\n type ReactNode,\n} from \"react\";\n\nimport {\n MCP_CONNECT_GUIDES,\n MCP_CONNECT_MCP_URL_TEMPLATE,\n MCP_STATIC_TOKEN_FALLBACK,\n interpolateMcpConnectTemplate,\n type McpConnectTemplateValues,\n} from \"../../shared/mcp-connect-content.js\";\nimport { appPath } from \"../api-path.js\";\nimport { useT } from \"../i18n.js\";\nimport { useOrg } from \"../org/hooks.js\";\nimport {\n McpIntegrationDialog,\n // The dialog is intentionally reused here so the Agent page remains a thin\n // host for the existing MCP management flow.\n} from \"../resources/McpIntegrationDialog.js\";\nimport { McpServerDetail } from \"../resources/McpServerDetail.js\";\nimport type { ResourceView } from \"../resources/ResourcesPanel.js\";\nimport {\n useCreateMcpServer,\n useDeleteMcpServer,\n useMcpServers,\n type McpServer,\n type McpServerScope,\n} from \"../resources/use-mcp-servers.js\";\nimport {\n AGENT_SETTINGS_SECTIONS,\n buildSectionSearchEntries,\n} from \"../settings/agent-settings-search.js\";\nimport { AgentSettingsContent } from \"../settings/SettingsPanel.js\";\nimport type {\n SettingsSearchEntry,\n SettingsTabItem,\n} from \"../settings/SettingsTabsPage.js\";\nimport { cn } from \"../utils.js\";\nimport { AgentEmptyState } from \"./AgentEmptyState.js\";\nimport { AgentTabFrame } from \"./AgentTabFrame.js\";\nimport type { AgentPageScope, AgentPageTabProps } from \"./types.js\";\n\nconst AgentContextTab = lazy(() =>\n import(\"./AgentContextTab.js\").then((module) => ({\n default: module.AgentContextTab,\n })),\n);\nconst AgentJobsTab = lazy(() =>\n import(\"./AgentJobsTab.js\").then((module) => ({\n default: module.AgentJobsTab,\n })),\n);\nconst ResourcesPanel = lazy(() =>\n import(\"../resources/ResourcesPanel.js\").then((module) => ({\n default: module.ResourcesPanel,\n })),\n);\n\ntype SettingsTabIcon = ComponentType<{ className?: string }>;\n\nfunction normalizeTabId(value?: string | null): string | null {\n const normalized = value\n ?.replace(/^#/, \"\")\n .trim()\n .toLowerCase()\n .replace(/[\"']/g, \"\")\n .replace(/[\\s_]+/g, \"-\");\n return normalized || null;\n}\n\nfunction resolveTabId(\n tabs: SettingsTabItem[],\n value?: string | null,\n): string | null {\n const normalized = normalizeTabId(value);\n if (!normalized) return null;\n if (normalized === \"context\" && tabs.some((tab) => tab.id === \"snapshots\")) {\n return \"snapshots\";\n }\n if (tabs.some((tab) => tab.id === normalized)) return normalized;\n const section = normalized.split(\":\", 1)[0];\n const owner = tabs.find((tab) =>\n tab.searchEntries?.some(\n (entry) => normalizeTabId(entry.hash ?? entry.id) === section,\n ),\n );\n return owner?.id ?? null;\n}\n\nfunction updateTabHash(tabId: string) {\n if (typeof window === \"undefined\") return;\n const hash = tabId === \"files\" ? \"\" : `#${encodeURIComponent(tabId)}`;\n window.history.pushState(\n null,\n \"\",\n `${window.location.pathname}${window.location.search}${hash}`,\n );\n}\n\nfunction TabLoading() {\n return (\n <div className=\"space-y-3\" aria-busy=\"true\">\n <div className=\"h-5 w-36 animate-pulse rounded bg-muted\" />\n <div className=\"h-20 animate-pulse rounded-lg border border-border bg-muted/30\" />\n <div className=\"h-20 animate-pulse rounded-lg border border-border bg-muted/30\" />\n </div>\n );\n}\n\nfunction EmptySlot({ label }: { label: string }) {\n return (\n <div className=\"flex min-h-[220px] items-center justify-center rounded-lg border border-dashed border-border/70 bg-muted/10\">\n <span className=\"sr-only\">{label}</span>\n </div>\n );\n}\n\nexport const AGENT_RESOURCE_DOCS_HREF: Record<ResourceView, string> = {\n files: \"https://agent-native.com/docs/agent-resources#resources-tab\",\n instructions: \"https://agent-native.com/docs/agent-resources#agents-md\",\n agents: \"https://agent-native.com/docs/agent-resources#custom-agents\",\n memory: \"https://agent-native.com/docs/agent-resources#memory\",\n skills: \"https://agent-native.com/docs/skills-guide\",\n learnings: \"https://agent-native.com/docs/agent-resources#memory\",\n \"remote-agents\":\n \"https://agent-native.com/docs/agent-resources#remote-vs-custom-agents\",\n};\n\nconst RESOURCE_TAB_COPY: Record<\n ResourceView,\n { titleKey: string; descriptionKey: string }\n> = {\n files: {\n titleKey: \"agentResources.files.title\",\n descriptionKey: \"agentResources.files.description\",\n },\n instructions: {\n titleKey: \"agentResources.instructions.title\",\n descriptionKey: \"agentResources.instructions.description\",\n },\n agents: {\n titleKey: \"agentResources.agents.title\",\n descriptionKey: \"agentResources.agents.description\",\n },\n memory: {\n titleKey: \"agentResources.memory.title\",\n descriptionKey: \"agentResources.memory.description\",\n },\n skills: {\n titleKey: \"agentResources.skills.title\",\n descriptionKey: \"agentResources.skills.description\",\n },\n learnings: {\n titleKey: \"agentResources.learnings.title\",\n descriptionKey: \"agentResources.learnings.description\",\n },\n \"remote-agents\": {\n titleKey: \"agentResources.remoteAgents.title\",\n descriptionKey: \"agentResources.remoteAgents.description\",\n },\n};\n\nfunction AgentResourceTab({\n scope,\n view,\n}: AgentPageTabProps & { view: ResourceView }) {\n const t = useT();\n const copy = RESOURCE_TAB_COPY[view];\n const title = t(copy.titleKey);\n return (\n <AgentTabFrame\n title={title}\n description={t(copy.descriptionKey)}\n helpHref={AGENT_RESOURCE_DOCS_HREF[view]}\n helpLabel={t(\"agentResources.openDocs\", { section: title })}\n >\n <div className=\"min-h-[480px]\">\n <ResourcesPanel\n key={`${scope}-${view}`}\n showMcpServers={false}\n resourceFilter={view}\n resourceTreeVariant={view === \"files\" ? \"tree\" : \"collection\"}\n scope=\"personal\"\n />\n </div>\n </AgentTabFrame>\n );\n}\n\nfunction ServerStatus({ server }: { server: McpServer }) {\n if (server.status.state === \"connected\") {\n return (\n <span className=\"text-[11px] text-emerald-600 dark:text-emerald-400\">\n Connected · {server.status.toolCount} tools\n </span>\n );\n }\n if (server.status.state === \"error\") {\n return (\n <span className=\"truncate text-[11px] text-destructive\">\n Connection error\n </span>\n );\n }\n return (\n <span className=\"text-[11px] text-muted-foreground\">Status unknown</span>\n );\n}\n\nfunction ConnectionsTab({ canManageOrg = false }: AgentPageTabProps) {\n const t = useT();\n const serversQuery = useMcpServers();\n const createServer = useCreateMcpServer();\n const deleteServer = useDeleteMcpServer();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [selectedServer, setSelectedServer] = useState<McpServer | null>(null);\n const [deleteTarget, setDeleteTarget] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const data = serversQuery.data;\n const hasOrg = Boolean(data?.orgId);\n const canCreateOrgMcp = hasOrg && canManageOrg;\n\n const onCreateMcpServer = useCallback(\n async (args: {\n scope: McpServerScope;\n name: string;\n url: string;\n headers?: Record<string, string>;\n description?: string;\n }) => {\n if (args.scope === \"org\" && !canCreateOrgMcp) {\n throw new Error(\n \"Only organization admins can add organization MCP servers.\",\n );\n }\n return createServer.mutateAsync(args);\n },\n [canCreateOrgMcp, createServer],\n );\n\n const removeServer = async (server: McpServer) => {\n const key = `${server.scope}:${server.id}`;\n if (deleteTarget !== key) {\n setDeleteTarget(key);\n return;\n }\n setError(null);\n try {\n await deleteServer.mutateAsync({ id: server.id, scope: server.scope });\n if (\n selectedServer?.id === server.id &&\n selectedServer.scope === server.scope\n ) {\n setSelectedServer(null);\n }\n setDeleteTarget(null);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n }\n };\n\n const renderServer = (server: McpServer) => {\n const key = `${server.scope}:${server.id}`;\n const canDelete = server.scope === \"user\" || canManageOrg;\n const selected =\n selectedServer?.id === server.id && selectedServer.scope === server.scope;\n return (\n <div\n key={key}\n className={cn(\n \"group/connection-row py-4 transition-colors first:pt-5 last:pb-5\",\n selected && \"bg-accent/20\",\n )}\n >\n <div className=\"flex items-start gap-3\">\n <button\n type=\"button\"\n onClick={() => setSelectedServer(selected ? null : server)}\n className=\"min-w-0 flex-1 cursor-pointer text-start\"\n >\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n {server.name}\n </span>\n </div>\n <code className=\"mt-1 block truncate text-[11px] text-muted-foreground\">\n {server.url}\n </code>\n <div className=\"mt-2 flex items-center gap-2\">\n <ServerStatus server={server} />\n {server.description && (\n <span className=\"truncate text-[11px] text-muted-foreground/70\">\n {server.description}\n </span>\n )}\n </div>\n </button>\n {canDelete && (\n <button\n type=\"button\"\n onClick={() => void removeServer(server)}\n disabled={deleteServer.isPending}\n className={cn(\n \"cursor-pointer rounded-md px-2 py-1 text-[11px] font-medium text-muted-foreground hover:bg-destructive/10 hover:text-destructive\",\n deleteTarget === key && \"bg-destructive/10 text-destructive\",\n )}\n >\n {deleteTarget === key ? \"Confirm\" : \"Delete\"}\n </button>\n )}\n </div>\n {selected && (\n <div className=\"mt-3 border-t border-border/70 pt-3\">\n <McpServerDetail server={server} />\n </div>\n )}\n </div>\n );\n };\n\n return (\n <AgentTabFrame\n title=\"Connections\"\n description=\"Tools and services this agent can reach, grouped by where they are configured.\"\n actions={\n <button\n type=\"button\"\n onClick={() => {\n setError(null);\n setDialogOpen(true);\n }}\n className=\"cursor-pointer rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90\"\n >\n {t(\"mcpIntegrations.connect\")}\n </button>\n }\n >\n <section className=\"space-y-4\">\n {error && (\n <p className=\"rounded-md border border-destructive/20 bg-destructive/5 px-3 py-2 text-xs text-destructive\">\n {error}\n </p>\n )}\n {serversQuery.isLoading ? (\n <TabLoading />\n ) : serversQuery.isError ? (\n <p className=\"rounded-md border border-destructive/20 bg-destructive/5 px-3 py-2 text-xs text-destructive\">\n Could not load MCP servers.\n </p>\n ) : (\n <div className=\"space-y-6\">\n {[\n { label: \"Personal\", servers: data?.user ?? [] },\n { label: \"Organization\", servers: data?.org ?? [] },\n ].map((section) => (\n <section key={section.label} className=\"space-y-2\">\n <h2 className=\"text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground/70\">\n {section.label}\n </h2>\n {section.servers.length > 0 ? (\n <div className=\"divide-y divide-border/60 border-y border-border/60\">\n {section.servers.map(renderServer)}\n </div>\n ) : (\n <AgentEmptyState\n icon={IconPlugConnected}\n title={`No ${section.label.toLowerCase()} connections yet`}\n description={\n section.label === \"Personal\"\n ? \"Connect a service to give the agent access to it.\"\n : \"Organization connections shared with this workspace will appear here.\"\n }\n />\n )}\n </section>\n ))}\n </div>\n )}\n <McpIntegrationDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n defaultScope=\"user\"\n canCreateOrgMcp={canCreateOrgMcp}\n hasOrg={hasOrg}\n onCreateMcpServer={onCreateMcpServer}\n />\n </section>\n </AgentTabFrame>\n );\n}\n\ninterface AccessUrls {\n appName: string;\n appUrl: string;\n mcpUrl: string;\n connectUrl: string;\n agentCardUrl: string;\n}\n\nfunction CopyField({ label, value }: { label: string; value: string }) {\n const [copied, setCopied] = useState(false);\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1600);\n } catch {\n setCopied(false);\n }\n };\n return (\n <div className=\"flex min-w-0 items-center gap-2 rounded-md border border-border bg-muted/20 p-2\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-[10px] font-semibold uppercase tracking-wide text-muted-foreground/70\">\n {label}\n </div>\n <code className=\"mt-1 block truncate text-xs text-foreground\">\n {value}\n </code>\n </div>\n <button\n type=\"button\"\n onClick={() => void copy()}\n className=\"shrink-0 cursor-pointer rounded-md border border-border bg-background px-2.5 py-1.5 text-[11px] font-medium text-foreground hover:bg-accent\"\n >\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n </div>\n );\n}\n\nfunction AccessTab({\n appName: appNameProp,\n}: AgentPageTabProps & { appName?: string }) {\n const [urls, setUrls] = useState<AccessUrls | null>(null);\n const [agentCardAvailable, setAgentCardAvailable] = useState(false);\n const [activeGuide, setActiveGuide] = useState(MCP_CONNECT_GUIDES[0]?.id);\n\n useEffect(() => {\n const origin = window.location.origin;\n const baseUrl = new URL(appPath(\"/\"), origin).toString().replace(/\\/$/, \"\");\n const hostname = window.location.hostname || \"app\";\n const metaSiteName = document\n .querySelector('meta[property=\"og:site_name\"]')\n ?.getAttribute(\"content\")\n ?.trim();\n const hostnameGuess =\n hostname !== \"localhost\" && hostname !== \"127.0.0.1\"\n ? hostname.split(\".\")[0]\n : \"\";\n const appName =\n appNameProp?.trim() || metaSiteName || hostnameGuess || \"this app\";\n const templateValues = {\n appName,\n appUrl: baseUrl,\n mcpUrl: \"\",\n serverId: `agent-native-${hostname}`,\n } satisfies McpConnectTemplateValues;\n setUrls({\n appName,\n appUrl: baseUrl,\n mcpUrl: interpolateMcpConnectTemplate(\n MCP_CONNECT_MCP_URL_TEMPLATE,\n templateValues,\n ),\n connectUrl: new URL(appPath(\"/mcp/connect\"), origin).toString(),\n agentCardUrl: new URL(\n appPath(\"/.well-known/agent-card.json\"),\n origin,\n ).toString(),\n });\n }, [appNameProp]);\n\n useEffect(() => {\n if (!urls) return;\n let cancelled = false;\n fetch(urls.agentCardUrl)\n .then((response) => {\n if (!cancelled) setAgentCardAvailable(response.ok);\n })\n .catch(() => {\n if (!cancelled) setAgentCardAvailable(false);\n });\n return () => {\n cancelled = true;\n };\n }, [urls]);\n\n const templateValues: McpConnectTemplateValues | null = urls\n ? {\n appName: urls.appName,\n appUrl: urls.appUrl,\n mcpUrl: urls.mcpUrl,\n serverId: `agent-native-${window.location.hostname || \"app\"}`,\n }\n : null;\n const guide =\n MCP_CONNECT_GUIDES.find((item) => item.id === activeGuide) ??\n MCP_CONNECT_GUIDES[0];\n\n return (\n <AgentTabFrame\n title=\"Access\"\n description=\"Choose which external clients can talk to this app's agent.\"\n >\n <div className=\"space-y-6\">\n {urls ? (\n <>\n <CopyField label=\"MCP URL\" value={urls.mcpUrl} />\n {agentCardAvailable && (\n <CopyField label=\"A2A agent card\" value={urls.agentCardUrl} />\n )}\n <section className=\"space-y-3 border-t border-border/70 pt-6\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">\n Client setup\n </h3>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n These instructions are also available on the full connect\n page.\n </p>\n </div>\n <div\n className=\"flex gap-1 overflow-x-auto border-b border-border pb-2\"\n role=\"tablist\"\n aria-label=\"Choose your AI assistant\"\n >\n {MCP_CONNECT_GUIDES.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={item.id === guide?.id}\n onClick={() => setActiveGuide(item.id)}\n className={cn(\n \"shrink-0 cursor-pointer rounded-md px-2.5 py-1.5 text-xs font-medium\",\n item.id === guide?.id\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n {guide && templateValues && (\n <div className=\"space-y-3 pt-1\" role=\"tabpanel\">\n {guide.steps?.length ? (\n <ol className=\"list-decimal space-y-2 ps-5 text-xs leading-relaxed text-muted-foreground\">\n {guide.steps.map((step) => (\n <li key={step}>\n {interpolateMcpConnectTemplate(step, templateValues)}\n </li>\n ))}\n </ol>\n ) : null}\n {guide.intro && (\n <p className=\"text-xs text-muted-foreground\">\n {interpolateMcpConnectTemplate(\n guide.intro,\n templateValues,\n )}\n </p>\n )}\n {guide.commandTemplate && (\n <CopyField\n label=\"Command\"\n value={interpolateMcpConnectTemplate(\n guide.commandTemplate,\n templateValues,\n )}\n />\n )}\n {guide.configTemplate && (\n <CopyField\n label=\"MCP config\"\n value={interpolateMcpConnectTemplate(\n guide.configTemplate,\n templateValues,\n )}\n />\n )}\n {guide.action?.kind === \"link\" && guide.action.href && (\n <a\n href={guide.action.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex cursor-pointer items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent\"\n >\n {guide.action.label}\n <IconExternalLink className=\"size-3.5\" />\n </a>\n )}\n {guide.note && (\n <p className=\"text-xs leading-relaxed text-muted-foreground\">\n {interpolateMcpConnectTemplate(\n guide.note,\n templateValues,\n )}\n </p>\n )}\n </div>\n )}\n </section>\n <section className=\"border-t border-border/70 pt-6\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n {MCP_STATIC_TOKEN_FALLBACK.title}\n </h3>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n {MCP_STATIC_TOKEN_FALLBACK.state}. Open the connect page to\n create a token for clients that cannot complete OAuth.\n </p>\n <a\n href={urls.connectUrl}\n className=\"mt-3 inline-flex cursor-pointer items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent\"\n >\n Open full connect page\n <IconExternalLink className=\"size-3.5\" />\n </a>\n </section>\n </>\n ) : (\n <TabLoading />\n )}\n </div>\n </AgentTabFrame>\n );\n}\n\nexport interface AgentPageExtraTabContext extends AgentPageTabProps {\n scopeControl: ReactNode;\n}\n\nexport type AgentPageExtraTabFactory = (\n context: AgentPageExtraTabContext,\n) => SettingsTabItem;\n\nexport interface AgentTabsPageProps {\n /**\n * Human-readable app name used in the Access tab's connect instructions\n * (e.g. \"name it Mail\"). Falls back to the `og:site_name` meta tag, then a\n * hostname-derived guess — never `document.title`, which this page owns.\n */\n appName?: string;\n extraTabs?: SettingsTabItem[];\n /** Scoped app-specific tabs that receive the current Manage agent page scope. */\n extraTabFactories?: AgentPageExtraTabFactory[];\n defaultTab?: string;\n className?: string;\n /** Whether to render the Agent page search box. Defaults to true. */\n enableSearch?: boolean;\n searchPlaceholder?: string;\n hiddenTabs?: string[];\n value?: string;\n onValueChange?: (tabId: string) => void;\n}\n\nexport function AgentTabsPage({\n appName,\n extraTabs = [],\n extraTabFactories = [],\n defaultTab = \"files\",\n className,\n enableSearch = true,\n searchPlaceholder = \"Search\",\n hiddenTabs = [],\n value,\n onValueChange,\n}: AgentTabsPageProps) {\n const t = useT();\n const { data: org } = useOrg();\n const canManageOrg =\n !org?.orgId || org.role === \"owner\" || org.role === \"admin\";\n const scope: AgentPageScope = \"user\";\n const rootRef = useRef<HTMLDivElement | null>(null);\n const searchRef = useRef<HTMLInputElement | null>(null);\n const [query, setQuery] = useState(\"\");\n const normalizedHiddenTabs = useMemo(\n () => new Set(hiddenTabs.map((tab) => normalizeTabId(tab)).filter(Boolean)),\n [hiddenTabs],\n );\n const scopeControl: ReactNode = null;\n const scopedExtraTabs = useMemo(\n () =>\n extraTabFactories.map((factory) =>\n factory({ scope, canManageOrg, scopeControl }),\n ),\n [canManageOrg, extraTabFactories, scope, scopeControl],\n );\n\n const tabs = useMemo<SettingsTabItem[]>(\n () => [\n {\n id: \"files\",\n label: \"Files\",\n icon: IconFolder,\n group: \"resources\",\n keywords: \"workspace plain files documents uploads\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"files\" />\n </Suspense>\n ),\n },\n {\n id: \"instructions\",\n label: \"Instructions\",\n icon: IconChecklist,\n group: \"resources\",\n keywords: \"agents md rules preferences guidance\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"instructions\" />\n </Suspense>\n ),\n },\n {\n id: \"agents\",\n label: \"Agents\",\n icon: IconHierarchy2,\n group: \"resources\",\n keywords: \"custom sub agents delegate profiles\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"agents\" />\n </Suspense>\n ),\n },\n {\n id: \"memory\",\n label: \"Memory\",\n icon: IconNotes,\n group: \"resources\",\n keywords: \"long term notes memory index recall\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"memory\" />\n </Suspense>\n ),\n },\n {\n id: \"skills\",\n label: \"Skills\",\n icon: IconBook2,\n group: \"resources\",\n keywords: \"abilities reusable instructions workflows\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"skills\" />\n </Suspense>\n ),\n },\n {\n id: \"learnings\",\n label: \"Learnings\",\n icon: IconHistory,\n group: \"resources\",\n keywords: \"corrections patterns knowledge feedback\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"learnings\" />\n </Suspense>\n ),\n },\n {\n id: \"remote-agents\",\n label: \"Remote agents\",\n icon: IconTopologyRing2,\n group: \"resources\",\n keywords: \"a2a connected remote agents delegation\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"remote-agents\" />\n </Suspense>\n ),\n },\n {\n id: \"snapshots\",\n label: \"Snapshots\",\n icon: IconHistory,\n group: \"agent\",\n keywords: \"context recent loads provenance tokens\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentContextTab scope={scope} canManageOrg={canManageOrg} />\n </Suspense>\n ),\n },\n {\n id: \"connections\",\n label: \"Connections\",\n icon: IconPlugConnected,\n group: \"agent\",\n keywords: \"mcp servers tools integrations\",\n searchEntries: [\n { id: \"mcp-servers\", label: \"MCP servers\", keywords: \"tools\" },\n ],\n content: <ConnectionsTab scope={scope} canManageOrg={canManageOrg} />,\n },\n {\n id: \"jobs\",\n label: \"Jobs\",\n icon: IconClock,\n group: \"agent\",\n keywords: \"scheduled automations recurring\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentJobsTab scope={scope} canManageOrg={canManageOrg} />\n </Suspense>\n ),\n },\n {\n id: \"settings\",\n label: t(\"settings.agentTitle\"),\n icon: IconSettings,\n group: \"agent\",\n keywords: \"agent settings model llm api keys limits voice automations\",\n searchEntries: buildSectionSearchEntries(AGENT_SETTINGS_SECTIONS),\n content: (\n <AgentTabFrame\n title={t(\"settings.agentTitle\")}\n description={t(\"settings.agentDescription\")}\n >\n <AgentSettingsContent />\n </AgentTabFrame>\n ),\n },\n {\n id: \"access\",\n label: \"Access\",\n icon: IconShieldLock,\n group: \"agent\",\n keywords: \"external clients oauth a2a exposure\",\n searchEntries: [\n {\n id: \"mcp-connect\",\n label: \"External client setup\",\n keywords: \"oauth connect\",\n },\n {\n id: \"a2a-agent-card\",\n label: \"A2A agent card\",\n keywords: \"agent card\",\n },\n ],\n content: (\n <AccessTab\n scope={scope}\n canManageOrg={canManageOrg}\n appName={appName}\n />\n ),\n },\n ...extraTabs,\n ...scopedExtraTabs,\n ],\n [appName, canManageOrg, extraTabs, scope, scopedExtraTabs],\n );\n const visibleTabs = useMemo(\n () => tabs.filter((tab) => !normalizedHiddenTabs.has(tab.id)),\n [normalizedHiddenTabs, tabs],\n );\n const fallbackTab = visibleTabs.some((tab) => tab.id === defaultTab)\n ? defaultTab\n : (visibleTabs[0]?.id ?? \"context\");\n const [internalTab, setInternalTab] = useState(() => {\n if (typeof window === \"undefined\") return fallbackTab;\n return resolveTabId(visibleTabs, window.location.hash) ?? fallbackTab;\n });\n const isControlled = value !== undefined;\n const activeTab = isControlled ? value : internalTab;\n const selectedTab =\n visibleTabs.find((tab) => tab.id === activeTab) ?? visibleTabs[0];\n const tabGroups = useMemo(() => {\n const groups: Array<{ id: string; tabs: SettingsTabItem[] }> = [];\n for (const tab of visibleTabs) {\n const groupId = tab.group ?? \"agent\";\n const previous = groups.at(-1);\n if (previous?.id === groupId) previous.tabs.push(tab);\n else groups.push({ id: groupId, tabs: [tab] });\n }\n return groups;\n }, [visibleTabs]);\n\n useEffect(() => {\n if (!isControlled && !visibleTabs.some((tab) => tab.id === internalTab)) {\n setInternalTab(fallbackTab);\n }\n }, [fallbackTab, internalTab, isControlled, visibleTabs]);\n\n useEffect(() => {\n if (isControlled) return;\n const onHashChange = () => {\n const next = resolveTabId(visibleTabs, window.location.hash);\n if (next) setInternalTab(next);\n };\n window.addEventListener(\"hashchange\", onHashChange);\n return () => window.removeEventListener(\"hashchange\", onHashChange);\n }, [isControlled, visibleTabs]);\n\n const changeTab = useCallback(\n (tabId: string) => {\n if (!isControlled) setInternalTab(tabId);\n onValueChange?.(tabId);\n },\n [isControlled, onValueChange],\n );\n\n const searchIndex = useMemo(() => {\n const entries: Array<\n SettingsSearchEntry & { tabId: string; haystack: string }\n > = [];\n for (const tab of visibleTabs) {\n entries.push({\n id: `tab:${tab.id}`,\n label: tab.label,\n keywords: tab.keywords,\n tabId: tab.id,\n haystack: `${tab.label} ${tab.keywords ?? \"\"}`.toLowerCase(),\n });\n for (const entry of tab.searchEntries ?? []) {\n entries.push({\n ...entry,\n tabId: entry.tabId ?? tab.id,\n haystack:\n `${entry.label} ${entry.keywords ?? \"\"} ${entry.description ?? \"\"} ${tab.label}`.toLowerCase(),\n });\n }\n }\n return entries;\n }, [visibleTabs]);\n const results = useMemo(() => {\n const terms = query.trim().toLowerCase().split(/\\s+/).filter(Boolean);\n if (!terms.length) return [];\n return searchIndex\n .filter((entry) => terms.every((term) => entry.haystack.includes(term)))\n .sort((a, b) => a.label.localeCompare(b.label));\n }, [query, searchIndex]);\n\n const selectSearchResult = useCallback(\n (entry: (typeof searchIndex)[number]) => {\n changeTab(entry.tabId);\n setQuery(\"\");\n if (isControlled || typeof window === \"undefined\") return;\n if (entry.hash) {\n window.history.pushState(\n null,\n \"\",\n `${window.location.pathname}${window.location.search}#${entry.hash.replace(/^#/, \"\")}`,\n );\n window.dispatchEvent(new Event(\"hashchange\"));\n } else {\n updateTabHash(entry.tabId);\n }\n },\n [changeTab, isControlled],\n );\n\n return (\n <div\n ref={rootRef}\n className={cn(\n \"flex h-full min-h-0 w-full flex-col overflow-hidden bg-background\",\n className,\n )}\n >\n <div className=\"flex min-h-0 flex-1 flex-col sm:flex-row\">\n <div className=\"flex shrink-0 flex-col gap-2 bg-background p-2 sm:min-h-0 sm:w-56 sm:overflow-y-auto sm:p-3\">\n {enableSearch ? (\n <div className=\"relative sm:mb-1\">\n <IconSearch className=\"pointer-events-none absolute start-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground\" />\n <input\n ref={searchRef}\n type=\"search\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") setQuery(\"\");\n if (event.key === \"Enter\" && results[0]) {\n event.preventDefault();\n selectSearchResult(results[0]);\n }\n }}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n className=\"h-8 w-full rounded-md border border-border bg-background ps-8 pe-7 text-[13px] text-foreground outline-none transition-colors placeholder:text-muted-foreground focus:border-foreground/30 focus:ring-2 focus:ring-accent/40\"\n />\n {query && (\n <button\n type=\"button\"\n onClick={() => setQuery(\"\")}\n aria-label=\"Clear search\"\n className=\"absolute end-1.5 top-1/2 flex size-5 -translate-y-1/2 cursor-pointer items-center justify-center rounded text-muted-foreground hover:bg-accent/60 hover:text-foreground\"\n >\n <IconX className=\"size-3.5\" />\n </button>\n )}\n </div>\n ) : null}\n {query.trim() ? (\n <div\n role=\"listbox\"\n aria-label=\"Agent search results\"\n className=\"flex flex-col gap-0.5\"\n >\n {results.length === 0 ? (\n <p className=\"px-2 py-6 text-center text-xs text-muted-foreground\">\n No matching items\n </p>\n ) : (\n results.map((entry) => (\n <button\n key={entry.id}\n type=\"button\"\n role=\"option\"\n onClick={() => selectSearchResult(entry)}\n className=\"flex cursor-pointer items-start gap-2 rounded-md px-2.5 py-2 text-start text-sm text-foreground hover:bg-accent/60\"\n >\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"truncate font-medium\">\n {entry.label}\n </span>\n <span className=\"truncate text-[11px] text-muted-foreground\">\n {entry.description ?? entry.tabId}\n </span>\n </span>\n </button>\n ))\n )}\n </div>\n ) : (\n <nav\n aria-label=\"Agent sections\"\n role=\"tablist\"\n className=\"flex gap-1 overflow-x-auto sm:flex-col sm:overflow-x-visible\"\n >\n {tabGroups.map((group, groupIndex) => (\n <div\n key={group.id}\n className={cn(\n \"contents sm:block\",\n groupIndex > 0 &&\n \"sm:mt-2 sm:border-t sm:border-border/60 sm:pt-2\",\n )}\n >\n {group.id === \"resources\" && (\n <div className=\"hidden px-2.5 pb-1 pt-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground/50 sm:block\">\n Agent resources\n </div>\n )}\n {group.id === \"agent\" && (\n <div className=\"hidden px-2.5 pb-1 pt-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground/50 sm:block\">\n Agent operations\n </div>\n )}\n <div className=\"contents sm:flex sm:flex-col sm:gap-1\">\n {group.tabs.map((tab) => {\n const Icon = tab.icon as SettingsTabIcon | undefined;\n const selected = tab.id === selectedTab?.id;\n return (\n <button\n key={tab.id}\n type=\"button\"\n id={`agent-tab-${tab.id}`}\n role=\"tab\"\n aria-selected={selected}\n aria-controls={`agent-tabpanel-${tab.id}`}\n onClick={() => {\n changeTab(tab.id);\n if (!isControlled) updateTabHash(tab.id);\n }}\n className={cn(\n \"flex min-h-9 shrink-0 cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-start text-sm font-medium transition-colors sm:w-full\",\n selected\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n >\n {Icon ? (\n <Icon\n className={cn(\n \"size-4 shrink-0\",\n selected\n ? \"text-foreground\"\n : \"text-muted-foreground\",\n )}\n />\n ) : null}\n <span className=\"truncate\">{tab.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </nav>\n )}\n </div>\n <div\n id={`agent-tabpanel-${selectedTab?.id ?? \"context\"}`}\n role=\"tabpanel\"\n aria-labelledby={`agent-tab-${selectedTab?.id ?? \"context\"}`}\n className=\"min-h-0 min-w-0 flex-1 overflow-y-auto p-4 sm:p-6\"\n >\n {selectedTab?.content ?? <EmptySlot label=\"Agent section\" />}\n </div>\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"AgentTabsPage.js","sourceRoot":"","sources":["../../../src/client/agent-page/AgentTabsPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n IconBook2,\n IconChecklist,\n IconClock,\n IconExternalLink,\n IconFolder,\n IconHistory,\n IconHelpCircle,\n IconHierarchy2,\n IconNotes,\n IconPlugConnected,\n IconTopologyRing2,\n IconSearch,\n IconSettings,\n IconShieldLock,\n IconX,\n} from \"@tabler/icons-react\";\nimport {\n lazy,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentType,\n type ReactNode,\n} from \"react\";\n\nimport {\n MCP_CONNECT_GUIDES,\n MCP_CONNECT_MCP_URL_TEMPLATE,\n MCP_STATIC_TOKEN_FALLBACK,\n interpolateMcpConnectTemplate,\n type McpConnectTemplateValues,\n} from \"../../shared/mcp-connect-content.js\";\nimport { appPath } from \"../api-path.js\";\nimport { useT } from \"../i18n.js\";\nimport { useOrg } from \"../org/hooks.js\";\nimport {\n McpIntegrationDialog,\n // The dialog is intentionally reused here so the Agent page remains a thin\n // host for the existing MCP management flow.\n} from \"../resources/McpIntegrationDialog.js\";\nimport { McpServerDetail } from \"../resources/McpServerDetail.js\";\nimport type { ResourceView } from \"../resources/ResourcesPanel.js\";\nimport {\n useCreateMcpServer,\n useDeleteMcpServer,\n useMcpServers,\n type McpServer,\n type McpServerScope,\n} from \"../resources/use-mcp-servers.js\";\nimport {\n AGENT_SETTINGS_SECTIONS,\n buildSectionSearchEntries,\n} from \"../settings/agent-settings-search.js\";\nimport { AgentSettingsContent } from \"../settings/SettingsPanel.js\";\nimport type {\n SettingsSearchEntry,\n SettingsTabItem,\n} from \"../settings/SettingsTabsPage.js\";\nimport { cn } from \"../utils.js\";\nimport { AgentEmptyState } from \"./AgentEmptyState.js\";\nimport { AgentTabFrame } from \"./AgentTabFrame.js\";\nimport type { AgentPageScope, AgentPageTabProps } from \"./types.js\";\n\nconst AgentContextTab = lazy(() =>\n import(\"./AgentContextTab.js\").then((module) => ({\n default: module.AgentContextTab,\n })),\n);\nconst AgentJobsTab = lazy(() =>\n import(\"./AgentJobsTab.js\").then((module) => ({\n default: module.AgentJobsTab,\n })),\n);\nconst ResourcesPanel = lazy(() =>\n import(\"../resources/ResourcesPanel.js\").then((module) => ({\n default: module.ResourcesPanel,\n })),\n);\n\ntype SettingsTabIcon = ComponentType<{ className?: string }>;\n\nfunction normalizeTabId(value?: string | null): string | null {\n const normalized = value\n ?.replace(/^#/, \"\")\n .trim()\n .toLowerCase()\n .replace(/[\"']/g, \"\")\n .replace(/[\\s_]+/g, \"-\");\n return normalized || null;\n}\n\nfunction resolveTabId(\n tabs: SettingsTabItem[],\n value?: string | null,\n): string | null {\n const normalized = normalizeTabId(value);\n if (!normalized) return null;\n if (normalized === \"context\" && tabs.some((tab) => tab.id === \"snapshots\")) {\n return \"snapshots\";\n }\n if (tabs.some((tab) => tab.id === normalized)) return normalized;\n const section = normalized.split(\":\", 1)[0];\n const owner = tabs.find((tab) =>\n tab.searchEntries?.some(\n (entry) => normalizeTabId(entry.hash ?? entry.id) === section,\n ),\n );\n return owner?.id ?? null;\n}\n\nfunction updateTabHash(tabId: string) {\n if (typeof window === \"undefined\") return;\n const hash = tabId === \"files\" ? \"\" : `#${encodeURIComponent(tabId)}`;\n window.history.pushState(\n null,\n \"\",\n `${window.location.pathname}${window.location.search}${hash}`,\n );\n}\n\nfunction TabLoading() {\n return (\n <div className=\"space-y-3\" aria-busy=\"true\">\n <div className=\"h-5 w-36 animate-pulse rounded bg-muted\" />\n <div className=\"h-20 animate-pulse rounded-lg border border-border bg-muted/30\" />\n <div className=\"h-20 animate-pulse rounded-lg border border-border bg-muted/30\" />\n </div>\n );\n}\n\nfunction EmptySlot({ label }: { label: string }) {\n return (\n <div className=\"flex min-h-[220px] items-center justify-center rounded-lg border border-dashed border-border/70 bg-muted/10\">\n <span className=\"sr-only\">{label}</span>\n </div>\n );\n}\n\nexport const AGENT_RESOURCE_DOCS_HREF: Record<ResourceView, string> = {\n files: \"https://agent-native.com/docs/agent-resources#resources-tab\",\n instructions: \"https://agent-native.com/docs/agent-resources#agents-md\",\n agents: \"https://agent-native.com/docs/agent-resources#custom-agents\",\n memory: \"https://agent-native.com/docs/agent-resources#memory\",\n skills: \"https://agent-native.com/docs/skills-guide\",\n learnings: \"https://agent-native.com/docs/agent-resources#memory\",\n \"remote-agents\":\n \"https://agent-native.com/docs/agent-resources#remote-vs-custom-agents\",\n};\n\nconst RESOURCE_TAB_COPY: Record<\n ResourceView,\n { titleKey: string; descriptionKey: string }\n> = {\n files: {\n titleKey: \"agentResources.files.title\",\n descriptionKey: \"agentResources.files.description\",\n },\n instructions: {\n titleKey: \"agentResources.instructions.title\",\n descriptionKey: \"agentResources.instructions.description\",\n },\n agents: {\n titleKey: \"agentResources.agents.title\",\n descriptionKey: \"agentResources.agents.description\",\n },\n memory: {\n titleKey: \"agentResources.memory.title\",\n descriptionKey: \"agentResources.memory.description\",\n },\n skills: {\n titleKey: \"agentResources.skills.title\",\n descriptionKey: \"agentResources.skills.description\",\n },\n learnings: {\n titleKey: \"agentResources.learnings.title\",\n descriptionKey: \"agentResources.learnings.description\",\n },\n \"remote-agents\": {\n titleKey: \"agentResources.remoteAgents.title\",\n descriptionKey: \"agentResources.remoteAgents.description\",\n },\n};\n\nfunction AgentResourceTab({\n scope,\n view,\n}: AgentPageTabProps & { view: ResourceView }) {\n const t = useT();\n const copy = RESOURCE_TAB_COPY[view];\n const title = t(copy.titleKey);\n return (\n <AgentTabFrame\n title={title}\n description={t(copy.descriptionKey)}\n helpHref={AGENT_RESOURCE_DOCS_HREF[view]}\n helpLabel={t(\"agentResources.openDocs\", { section: title })}\n >\n <div className=\"min-h-[480px]\">\n <ResourcesPanel\n key={`${scope}-${view}`}\n showMcpServers={false}\n resourceFilter={view}\n resourceTreeVariant={view === \"files\" ? \"tree\" : \"collection\"}\n scope=\"personal\"\n />\n </div>\n </AgentTabFrame>\n );\n}\n\nfunction ServerStatus({ server }: { server: McpServer }) {\n if (server.status.state === \"connected\") {\n return (\n <span className=\"text-[11px] text-emerald-600 dark:text-emerald-400\">\n Connected · {server.status.toolCount} tools\n </span>\n );\n }\n if (server.status.state === \"error\") {\n return (\n <span className=\"truncate text-[11px] text-destructive\">\n Connection error\n </span>\n );\n }\n return (\n <span className=\"text-[11px] text-muted-foreground\">Status unknown</span>\n );\n}\n\nfunction ConnectionsTab({ canManageOrg = false }: AgentPageTabProps) {\n const t = useT();\n const serversQuery = useMcpServers();\n const createServer = useCreateMcpServer();\n const deleteServer = useDeleteMcpServer();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [selectedServer, setSelectedServer] = useState<McpServer | null>(null);\n const [deleteTarget, setDeleteTarget] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const data = serversQuery.data;\n const hasOrg = Boolean(data?.orgId);\n const canCreateOrgMcp = hasOrg && canManageOrg;\n\n const onCreateMcpServer = useCallback(\n async (args: {\n scope: McpServerScope;\n name: string;\n url: string;\n headers?: Record<string, string>;\n description?: string;\n }) => {\n if (args.scope === \"org\" && !canCreateOrgMcp) {\n throw new Error(\n \"Only organization admins can add organization MCP servers.\",\n );\n }\n return createServer.mutateAsync(args);\n },\n [canCreateOrgMcp, createServer],\n );\n\n const removeServer = async (server: McpServer) => {\n const key = `${server.scope}:${server.id}`;\n if (deleteTarget !== key) {\n setDeleteTarget(key);\n return;\n }\n setError(null);\n try {\n await deleteServer.mutateAsync({ id: server.id, scope: server.scope });\n if (\n selectedServer?.id === server.id &&\n selectedServer.scope === server.scope\n ) {\n setSelectedServer(null);\n }\n setDeleteTarget(null);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n }\n };\n\n const renderServer = (server: McpServer) => {\n const key = `${server.scope}:${server.id}`;\n const canDelete = server.scope === \"user\" || canManageOrg;\n const selected =\n selectedServer?.id === server.id && selectedServer.scope === server.scope;\n return (\n <div\n key={key}\n className={cn(\n \"group/connection-row py-4 transition-colors first:pt-5 last:pb-5\",\n selected && \"bg-accent/20\",\n )}\n >\n <div className=\"flex items-start gap-3\">\n <button\n type=\"button\"\n onClick={() => setSelectedServer(selected ? null : server)}\n className=\"min-w-0 flex-1 cursor-pointer text-start\"\n >\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n {server.name}\n </span>\n </div>\n <code className=\"mt-1 block truncate text-[11px] text-muted-foreground\">\n {server.url}\n </code>\n <div className=\"mt-2 flex items-center gap-2\">\n <ServerStatus server={server} />\n {server.description && (\n <span className=\"truncate text-[11px] text-muted-foreground/70\">\n {server.description}\n </span>\n )}\n </div>\n </button>\n {canDelete && (\n <button\n type=\"button\"\n onClick={() => void removeServer(server)}\n disabled={deleteServer.isPending}\n className={cn(\n \"cursor-pointer rounded-md px-2 py-1 text-[11px] font-medium text-muted-foreground hover:bg-destructive/10 hover:text-destructive\",\n deleteTarget === key && \"bg-destructive/10 text-destructive\",\n )}\n >\n {deleteTarget === key ? \"Confirm\" : \"Delete\"}\n </button>\n )}\n </div>\n {selected && (\n <div className=\"mt-3 border-t border-border/70 pt-3\">\n <McpServerDetail server={server} />\n </div>\n )}\n </div>\n );\n };\n\n return (\n <AgentTabFrame\n title=\"Connections\"\n description=\"Tools and services this agent can reach, grouped by where they are configured.\"\n actions={\n <button\n type=\"button\"\n onClick={() => {\n setError(null);\n setDialogOpen(true);\n }}\n className=\"cursor-pointer rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90\"\n >\n {t(\"mcpIntegrations.connect\")}\n </button>\n }\n >\n <section className=\"space-y-4\">\n {error && (\n <p className=\"rounded-md border border-destructive/20 bg-destructive/5 px-3 py-2 text-xs text-destructive\">\n {error}\n </p>\n )}\n {serversQuery.isLoading ? (\n <TabLoading />\n ) : serversQuery.isError ? (\n <p className=\"rounded-md border border-destructive/20 bg-destructive/5 px-3 py-2 text-xs text-destructive\">\n Could not load MCP servers.\n </p>\n ) : (\n <div className=\"space-y-6\">\n {[\n { label: \"Personal\", servers: data?.user ?? [] },\n { label: \"Organization\", servers: data?.org ?? [] },\n ].map((section) => (\n <section key={section.label} className=\"space-y-2\">\n <h2 className=\"text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground/70\">\n {section.label}\n </h2>\n {section.servers.length > 0 ? (\n <div className=\"divide-y divide-border/60 border-y border-border/60\">\n {section.servers.map(renderServer)}\n </div>\n ) : (\n <AgentEmptyState\n icon={IconPlugConnected}\n title={`No ${section.label.toLowerCase()} connections yet`}\n description={\n section.label === \"Personal\"\n ? \"Connect a service to give the agent access to it.\"\n : \"Organization connections shared with this workspace will appear here.\"\n }\n />\n )}\n </section>\n ))}\n </div>\n )}\n <McpIntegrationDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n defaultScope=\"user\"\n canCreateOrgMcp={canCreateOrgMcp}\n hasOrg={hasOrg}\n onCreateMcpServer={onCreateMcpServer}\n />\n </section>\n </AgentTabFrame>\n );\n}\n\ninterface AccessUrls {\n appName: string;\n appUrl: string;\n mcpUrl: string;\n connectUrl: string;\n agentCardUrl: string;\n}\n\nexport const AGENT_ACCESS_DOCS_HREF = {\n mcp: \"https://agent-native.com/docs/mcp-protocol\",\n a2a: \"https://agent-native.com/docs/a2a-protocol\",\n} as const;\n\ninterface CopyFieldProps {\n label: string;\n value: string;\n docsHref?: string;\n docsLabel?: string;\n}\n\nfunction CopyField({ label, value, docsHref, docsLabel }: CopyFieldProps) {\n const [copied, setCopied] = useState(false);\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1600);\n } catch {\n setCopied(false);\n }\n };\n return (\n <div className=\"flex min-w-0 items-center gap-2 rounded-md border border-border bg-muted/20 p-2\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground/70\">\n {label}\n {docsHref && (\n <a\n href={docsHref}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={docsLabel ?? `Open ${label} documentation`}\n title={docsLabel ?? `Open ${label} documentation`}\n className=\"inline-flex size-4 shrink-0 items-center justify-center rounded text-muted-foreground transition-colors hover:text-foreground\"\n >\n <IconHelpCircle className=\"size-3\" />\n </a>\n )}\n </div>\n <code className=\"mt-1 block truncate text-xs text-foreground\">\n {value}\n </code>\n </div>\n <button\n type=\"button\"\n onClick={() => void copy()}\n className=\"shrink-0 cursor-pointer rounded-md border border-border bg-background px-2.5 py-1.5 text-[11px] font-medium text-foreground hover:bg-accent\"\n >\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n </div>\n );\n}\n\nfunction AccessTab({\n appName: appNameProp,\n}: AgentPageTabProps & { appName?: string }) {\n const [urls, setUrls] = useState<AccessUrls | null>(null);\n const [agentCardAvailable, setAgentCardAvailable] = useState(false);\n const [activeGuide, setActiveGuide] = useState(MCP_CONNECT_GUIDES[0]?.id);\n\n useEffect(() => {\n const origin = window.location.origin;\n const baseUrl = new URL(appPath(\"/\"), origin).toString().replace(/\\/$/, \"\");\n const hostname = window.location.hostname || \"app\";\n const metaSiteName = document\n .querySelector('meta[property=\"og:site_name\"]')\n ?.getAttribute(\"content\")\n ?.trim();\n const hostnameGuess =\n hostname !== \"localhost\" && hostname !== \"127.0.0.1\"\n ? hostname.split(\".\")[0]\n : \"\";\n const appName =\n appNameProp?.trim() || metaSiteName || hostnameGuess || \"this app\";\n const templateValues = {\n appName,\n appUrl: baseUrl,\n mcpUrl: \"\",\n serverId: `agent-native-${hostname}`,\n } satisfies McpConnectTemplateValues;\n setUrls({\n appName,\n appUrl: baseUrl,\n mcpUrl: interpolateMcpConnectTemplate(\n MCP_CONNECT_MCP_URL_TEMPLATE,\n templateValues,\n ),\n connectUrl: new URL(appPath(\"/mcp/connect\"), origin).toString(),\n agentCardUrl: new URL(\n appPath(\"/.well-known/agent-card.json\"),\n origin,\n ).toString(),\n });\n }, [appNameProp]);\n\n useEffect(() => {\n if (!urls) return;\n let cancelled = false;\n fetch(urls.agentCardUrl)\n .then((response) => {\n if (!cancelled) setAgentCardAvailable(response.ok);\n })\n .catch(() => {\n if (!cancelled) setAgentCardAvailable(false);\n });\n return () => {\n cancelled = true;\n };\n }, [urls]);\n\n const templateValues: McpConnectTemplateValues | null = urls\n ? {\n appName: urls.appName,\n appUrl: urls.appUrl,\n mcpUrl: urls.mcpUrl,\n serverId: `agent-native-${window.location.hostname || \"app\"}`,\n }\n : null;\n const guide =\n MCP_CONNECT_GUIDES.find((item) => item.id === activeGuide) ??\n MCP_CONNECT_GUIDES[0];\n\n return (\n <AgentTabFrame\n title=\"Access\"\n description=\"Choose which external clients can talk to this app's agent.\"\n >\n <div className=\"space-y-6\">\n {urls ? (\n <>\n <CopyField\n label=\"MCP URL\"\n value={urls.mcpUrl}\n docsHref={AGENT_ACCESS_DOCS_HREF.mcp}\n docsLabel=\"Open MCP documentation\"\n />\n {agentCardAvailable && (\n <CopyField\n label=\"A2A agent card\"\n value={urls.agentCardUrl}\n docsHref={AGENT_ACCESS_DOCS_HREF.a2a}\n docsLabel=\"Open A2A documentation\"\n />\n )}\n <section className=\"space-y-3 border-t border-border/70 pt-6\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">\n Client setup\n </h3>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n These instructions are also available on the full connect\n page.\n </p>\n </div>\n <div\n className=\"flex gap-1 overflow-x-auto border-b border-border pb-2\"\n role=\"tablist\"\n aria-label=\"Choose your AI assistant\"\n >\n {MCP_CONNECT_GUIDES.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={item.id === guide?.id}\n onClick={() => setActiveGuide(item.id)}\n className={cn(\n \"shrink-0 cursor-pointer rounded-md px-2.5 py-1.5 text-xs font-medium\",\n item.id === guide?.id\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n {guide && templateValues && (\n <div className=\"space-y-3 pt-1\" role=\"tabpanel\">\n {guide.steps?.length ? (\n <ol className=\"list-decimal space-y-2 ps-5 text-xs leading-relaxed text-muted-foreground\">\n {guide.steps.map((step) => (\n <li key={step}>\n {interpolateMcpConnectTemplate(step, templateValues)}\n </li>\n ))}\n </ol>\n ) : null}\n {guide.intro && (\n <p className=\"text-xs text-muted-foreground\">\n {interpolateMcpConnectTemplate(\n guide.intro,\n templateValues,\n )}\n </p>\n )}\n {guide.commandTemplate && (\n <CopyField\n label=\"Command\"\n value={interpolateMcpConnectTemplate(\n guide.commandTemplate,\n templateValues,\n )}\n />\n )}\n {guide.configTemplate && (\n <CopyField\n label=\"MCP config\"\n value={interpolateMcpConnectTemplate(\n guide.configTemplate,\n templateValues,\n )}\n />\n )}\n {guide.action?.kind === \"link\" && guide.action.href && (\n <a\n href={guide.action.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex cursor-pointer items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent\"\n >\n {guide.action.label}\n <IconExternalLink className=\"size-3.5\" />\n </a>\n )}\n {guide.note && (\n <p className=\"text-xs leading-relaxed text-muted-foreground\">\n {interpolateMcpConnectTemplate(\n guide.note,\n templateValues,\n )}\n </p>\n )}\n </div>\n )}\n </section>\n <section className=\"border-t border-border/70 pt-6\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n {MCP_STATIC_TOKEN_FALLBACK.title}\n </h3>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n {MCP_STATIC_TOKEN_FALLBACK.state}. Open the connect page to\n create a token for clients that cannot complete OAuth.\n </p>\n <a\n href={urls.connectUrl}\n className=\"mt-3 inline-flex cursor-pointer items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent\"\n >\n Open full connect page\n <IconExternalLink className=\"size-3.5\" />\n </a>\n </section>\n </>\n ) : (\n <TabLoading />\n )}\n </div>\n </AgentTabFrame>\n );\n}\n\nexport interface AgentPageExtraTabContext extends AgentPageTabProps {\n scopeControl: ReactNode;\n}\n\nexport type AgentPageExtraTabFactory = (\n context: AgentPageExtraTabContext,\n) => SettingsTabItem;\n\nexport interface AgentTabsPageProps {\n /**\n * Human-readable app name used in the Access tab's connect instructions\n * (e.g. \"name it Mail\"). Falls back to the `og:site_name` meta tag, then a\n * hostname-derived guess — never `document.title`, which this page owns.\n */\n appName?: string;\n extraTabs?: SettingsTabItem[];\n /** Scoped app-specific tabs that receive the current Manage agent page scope. */\n extraTabFactories?: AgentPageExtraTabFactory[];\n defaultTab?: string;\n className?: string;\n /** Whether to render the Agent page search box. Defaults to true. */\n enableSearch?: boolean;\n searchPlaceholder?: string;\n hiddenTabs?: string[];\n value?: string;\n onValueChange?: (tabId: string) => void;\n}\n\nexport function AgentTabsPage({\n appName,\n extraTabs = [],\n extraTabFactories = [],\n defaultTab = \"files\",\n className,\n enableSearch = true,\n searchPlaceholder = \"Search\",\n hiddenTabs = [],\n value,\n onValueChange,\n}: AgentTabsPageProps) {\n const t = useT();\n const { data: org } = useOrg();\n const canManageOrg =\n !org?.orgId || org.role === \"owner\" || org.role === \"admin\";\n const scope: AgentPageScope = \"user\";\n const rootRef = useRef<HTMLDivElement | null>(null);\n const searchRef = useRef<HTMLInputElement | null>(null);\n const [query, setQuery] = useState(\"\");\n const normalizedHiddenTabs = useMemo(\n () => new Set(hiddenTabs.map((tab) => normalizeTabId(tab)).filter(Boolean)),\n [hiddenTabs],\n );\n const scopeControl: ReactNode = null;\n const scopedExtraTabs = useMemo(\n () =>\n extraTabFactories.map((factory) =>\n factory({ scope, canManageOrg, scopeControl }),\n ),\n [canManageOrg, extraTabFactories, scope, scopeControl],\n );\n\n const tabs = useMemo<SettingsTabItem[]>(\n () => [\n {\n id: \"files\",\n label: \"Files\",\n icon: IconFolder,\n group: \"resources\",\n keywords: \"workspace plain files documents uploads\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"files\" />\n </Suspense>\n ),\n },\n {\n id: \"instructions\",\n label: \"Instructions\",\n icon: IconChecklist,\n group: \"resources\",\n keywords: \"agents md rules preferences guidance\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"instructions\" />\n </Suspense>\n ),\n },\n {\n id: \"agents\",\n label: \"Agents\",\n icon: IconHierarchy2,\n group: \"resources\",\n keywords: \"custom sub agents delegate profiles\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"agents\" />\n </Suspense>\n ),\n },\n {\n id: \"memory\",\n label: \"Memory\",\n icon: IconNotes,\n group: \"resources\",\n keywords: \"long term notes memory index recall\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"memory\" />\n </Suspense>\n ),\n },\n {\n id: \"skills\",\n label: \"Skills\",\n icon: IconBook2,\n group: \"resources\",\n keywords: \"abilities reusable instructions workflows\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"skills\" />\n </Suspense>\n ),\n },\n {\n id: \"learnings\",\n label: \"Learnings\",\n icon: IconHistory,\n group: \"resources\",\n keywords: \"corrections patterns knowledge feedback\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"learnings\" />\n </Suspense>\n ),\n },\n {\n id: \"remote-agents\",\n label: \"Remote agents\",\n icon: IconTopologyRing2,\n group: \"resources\",\n keywords: \"a2a connected remote agents delegation\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentResourceTab scope={scope} view=\"remote-agents\" />\n </Suspense>\n ),\n },\n {\n id: \"snapshots\",\n label: \"Snapshots\",\n icon: IconHistory,\n group: \"agent\",\n keywords: \"context recent loads provenance tokens\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentContextTab scope={scope} canManageOrg={canManageOrg} />\n </Suspense>\n ),\n },\n {\n id: \"connections\",\n label: \"Connections\",\n icon: IconPlugConnected,\n group: \"agent\",\n keywords: \"mcp servers tools integrations\",\n searchEntries: [\n { id: \"mcp-servers\", label: \"MCP servers\", keywords: \"tools\" },\n ],\n content: <ConnectionsTab scope={scope} canManageOrg={canManageOrg} />,\n },\n {\n id: \"jobs\",\n label: \"Jobs\",\n icon: IconClock,\n group: \"agent\",\n keywords: \"scheduled automations recurring\",\n content: (\n <Suspense fallback={<TabLoading />}>\n <AgentJobsTab scope={scope} canManageOrg={canManageOrg} />\n </Suspense>\n ),\n },\n {\n id: \"settings\",\n label: t(\"settings.agentTitle\"),\n icon: IconSettings,\n group: \"agent\",\n keywords: \"agent settings model llm api keys limits voice automations\",\n searchEntries: buildSectionSearchEntries(AGENT_SETTINGS_SECTIONS),\n content: (\n <AgentTabFrame\n title={t(\"settings.agentTitle\")}\n description={t(\"settings.agentDescription\")}\n >\n <AgentSettingsContent />\n </AgentTabFrame>\n ),\n },\n {\n id: \"access\",\n label: \"Access\",\n icon: IconShieldLock,\n group: \"agent\",\n keywords: \"external clients oauth a2a exposure\",\n searchEntries: [\n {\n id: \"mcp-connect\",\n label: \"External client setup\",\n keywords: \"oauth connect\",\n },\n {\n id: \"a2a-agent-card\",\n label: \"A2A agent card\",\n keywords: \"agent card\",\n },\n ],\n content: (\n <AccessTab\n scope={scope}\n canManageOrg={canManageOrg}\n appName={appName}\n />\n ),\n },\n ...extraTabs,\n ...scopedExtraTabs,\n ],\n [appName, canManageOrg, extraTabs, scope, scopedExtraTabs],\n );\n const visibleTabs = useMemo(\n () => tabs.filter((tab) => !normalizedHiddenTabs.has(tab.id)),\n [normalizedHiddenTabs, tabs],\n );\n const fallbackTab = visibleTabs.some((tab) => tab.id === defaultTab)\n ? defaultTab\n : (visibleTabs[0]?.id ?? \"context\");\n const [internalTab, setInternalTab] = useState(() => {\n if (typeof window === \"undefined\") return fallbackTab;\n return resolveTabId(visibleTabs, window.location.hash) ?? fallbackTab;\n });\n const isControlled = value !== undefined;\n const activeTab = isControlled ? value : internalTab;\n const selectedTab =\n visibleTabs.find((tab) => tab.id === activeTab) ?? visibleTabs[0];\n const tabGroups = useMemo(() => {\n const groups: Array<{ id: string; tabs: SettingsTabItem[] }> = [];\n for (const tab of visibleTabs) {\n const groupId = tab.group ?? \"agent\";\n const previous = groups.at(-1);\n if (previous?.id === groupId) previous.tabs.push(tab);\n else groups.push({ id: groupId, tabs: [tab] });\n }\n return groups;\n }, [visibleTabs]);\n\n useEffect(() => {\n if (!isControlled && !visibleTabs.some((tab) => tab.id === internalTab)) {\n setInternalTab(fallbackTab);\n }\n }, [fallbackTab, internalTab, isControlled, visibleTabs]);\n\n useEffect(() => {\n if (isControlled) return;\n const onHashChange = () => {\n const next = resolveTabId(visibleTabs, window.location.hash);\n if (next) setInternalTab(next);\n };\n window.addEventListener(\"hashchange\", onHashChange);\n return () => window.removeEventListener(\"hashchange\", onHashChange);\n }, [isControlled, visibleTabs]);\n\n const changeTab = useCallback(\n (tabId: string) => {\n if (!isControlled) setInternalTab(tabId);\n onValueChange?.(tabId);\n },\n [isControlled, onValueChange],\n );\n\n const searchIndex = useMemo(() => {\n const entries: Array<\n SettingsSearchEntry & { tabId: string; haystack: string }\n > = [];\n for (const tab of visibleTabs) {\n entries.push({\n id: `tab:${tab.id}`,\n label: tab.label,\n keywords: tab.keywords,\n tabId: tab.id,\n haystack: `${tab.label} ${tab.keywords ?? \"\"}`.toLowerCase(),\n });\n for (const entry of tab.searchEntries ?? []) {\n entries.push({\n ...entry,\n tabId: entry.tabId ?? tab.id,\n haystack:\n `${entry.label} ${entry.keywords ?? \"\"} ${entry.description ?? \"\"} ${tab.label}`.toLowerCase(),\n });\n }\n }\n return entries;\n }, [visibleTabs]);\n const results = useMemo(() => {\n const terms = query.trim().toLowerCase().split(/\\s+/).filter(Boolean);\n if (!terms.length) return [];\n return searchIndex\n .filter((entry) => terms.every((term) => entry.haystack.includes(term)))\n .sort((a, b) => a.label.localeCompare(b.label));\n }, [query, searchIndex]);\n\n const selectSearchResult = useCallback(\n (entry: (typeof searchIndex)[number]) => {\n changeTab(entry.tabId);\n setQuery(\"\");\n if (isControlled || typeof window === \"undefined\") return;\n if (entry.hash) {\n window.history.pushState(\n null,\n \"\",\n `${window.location.pathname}${window.location.search}#${entry.hash.replace(/^#/, \"\")}`,\n );\n window.dispatchEvent(new Event(\"hashchange\"));\n } else {\n updateTabHash(entry.tabId);\n }\n },\n [changeTab, isControlled],\n );\n\n return (\n <div\n ref={rootRef}\n className={cn(\n \"flex h-full min-h-0 w-full flex-col overflow-hidden bg-background\",\n className,\n )}\n >\n <div className=\"flex min-h-0 flex-1 flex-col sm:flex-row\">\n <div className=\"flex shrink-0 flex-col gap-2 bg-background p-2 sm:min-h-0 sm:w-56 sm:overflow-y-auto sm:p-3\">\n {enableSearch ? (\n <div className=\"relative sm:mb-1\">\n <IconSearch className=\"pointer-events-none absolute start-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground\" />\n <input\n ref={searchRef}\n type=\"search\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") setQuery(\"\");\n if (event.key === \"Enter\" && results[0]) {\n event.preventDefault();\n selectSearchResult(results[0]);\n }\n }}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n className=\"h-8 w-full rounded-md border border-border bg-background ps-8 pe-7 text-[13px] text-foreground outline-none transition-colors placeholder:text-muted-foreground focus:border-foreground/30 focus:ring-2 focus:ring-accent/40\"\n />\n {query && (\n <button\n type=\"button\"\n onClick={() => setQuery(\"\")}\n aria-label=\"Clear search\"\n className=\"absolute end-1.5 top-1/2 flex size-5 -translate-y-1/2 cursor-pointer items-center justify-center rounded text-muted-foreground hover:bg-accent/60 hover:text-foreground\"\n >\n <IconX className=\"size-3.5\" />\n </button>\n )}\n </div>\n ) : null}\n {query.trim() ? (\n <div\n role=\"listbox\"\n aria-label=\"Agent search results\"\n className=\"flex flex-col gap-0.5\"\n >\n {results.length === 0 ? (\n <p className=\"px-2 py-6 text-center text-xs text-muted-foreground\">\n No matching items\n </p>\n ) : (\n results.map((entry) => (\n <button\n key={entry.id}\n type=\"button\"\n role=\"option\"\n onClick={() => selectSearchResult(entry)}\n className=\"flex cursor-pointer items-start gap-2 rounded-md px-2.5 py-2 text-start text-sm text-foreground hover:bg-accent/60\"\n >\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"truncate font-medium\">\n {entry.label}\n </span>\n <span className=\"truncate text-[11px] text-muted-foreground\">\n {entry.description ?? entry.tabId}\n </span>\n </span>\n </button>\n ))\n )}\n </div>\n ) : (\n <nav\n aria-label=\"Agent sections\"\n role=\"tablist\"\n className=\"flex gap-1 overflow-x-auto sm:flex-col sm:overflow-x-visible\"\n >\n {tabGroups.map((group, groupIndex) => (\n <div\n key={group.id}\n className={cn(\n \"contents sm:block\",\n groupIndex > 0 &&\n \"sm:mt-2 sm:border-t sm:border-border/60 sm:pt-2\",\n )}\n >\n {group.id === \"resources\" && (\n <div className=\"hidden px-2.5 pb-1 pt-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground/50 sm:block\">\n Agent resources\n </div>\n )}\n {group.id === \"agent\" && (\n <div className=\"hidden px-2.5 pb-1 pt-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground/50 sm:block\">\n Agent operations\n </div>\n )}\n <div className=\"contents sm:flex sm:flex-col sm:gap-1\">\n {group.tabs.map((tab) => {\n const Icon = tab.icon as SettingsTabIcon | undefined;\n const selected = tab.id === selectedTab?.id;\n return (\n <button\n key={tab.id}\n type=\"button\"\n id={`agent-tab-${tab.id}`}\n role=\"tab\"\n aria-selected={selected}\n aria-controls={`agent-tabpanel-${tab.id}`}\n onClick={() => {\n changeTab(tab.id);\n if (!isControlled) updateTabHash(tab.id);\n }}\n className={cn(\n \"flex min-h-9 shrink-0 cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-start text-sm font-medium transition-colors sm:w-full\",\n selected\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n >\n {Icon ? (\n <Icon\n className={cn(\n \"size-4 shrink-0\",\n selected\n ? \"text-foreground\"\n : \"text-muted-foreground\",\n )}\n />\n ) : null}\n <span className=\"truncate\">{tab.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </nav>\n )}\n </div>\n <div\n id={`agent-tabpanel-${selectedTab?.id ?? \"context\"}`}\n role=\"tabpanel\"\n aria-labelledby={`agent-tab-${selectedTab?.id ?? \"context\"}`}\n className=\"min-h-0 min-w-0 flex-1 overflow-y-auto p-4 sm:p-6\"\n >\n {selectedTab?.content ?? <EmptySlot label=\"Agent section\" />}\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/client/analytics.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QAChC,uBAAuB,CAAC,EAAE;YACxB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAC3B;;;;;eAKG;YACH,QAAQ,CAAC,EAAE;gBAAE,SAAS,CAAC,EAAE,MAAM,CAAC;gBAAC,cAAc,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SAC5D,CAAC;KACH;CACF;AAED,KAAK,eAAe,GAAG,CACrB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAW7B;;;;;GAKG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,2DAA2D;IAC3D,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uEAAuE;IACvE,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACtD;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;IAC/C;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,yBAAyB,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAuCF;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,eAAe,CAAC;AAsC9D,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuND,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,SAAS,CAE5D;AAMD,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAE1D;AA4HD;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,qBAAqB,GAAG,IAAI,CAavE;AAsUD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,oBAAoB,GAAG,IAAI,EACjC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,IAAI,CAqCN;AAED,gEAAgE;AAChE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,oBAAoB,GAAG,IAAI,EACjC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,IAAI,CAEN;AAED,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1C;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,oBAAyB,GACjC,MAAM,GAAG,SAAS,CAyBpB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,oBAAyB,GACjC,MAAM,GAAG,SAAS,CAEpB;AAyBD,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,iBAAiB,GAAG,cAAc,GAAG,aAAa,CAAC;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI,CAiD5E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAuCzE;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUvE;AA0TD,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAenC;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAcnC;AAED,wBAAsB,iBAAiB,CAAC,MAAM,SAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AA4MD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CASN;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAE1D"}
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/client/analytics.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { llmConnectionTrackingProperties, } from "../shared/llm-connection.js";
4
4
  import { getOrCreateAnalyticsAnonymousId, getOrCreateAnalyticsSessionId, } from "./analytics-session.js";
5
5
  import { agentNativePath } from "./api-path.js";
6
6
  import { installErrorCapture, } from "./error-capture.js";
7
+ import { isDynamicImportFailureMessage } from "./route-chunk-recovery.js";
7
8
  import { scrubUrl } from "./url-scrub.js";
8
9
  export { scrubUrl } from "./url-scrub.js";
9
10
  export { addErrorBreadcrumb, captureException, captureMessage, isErrorCaptureInstalled, } from "./error-capture.js";
@@ -492,6 +493,12 @@ function shouldDropBrowserSentryNoise(event) {
492
493
  const taggedUrl = typeof event.tags?.url === "string" ? event.tags.url : undefined;
493
494
  const requestUrl = (event.request?.url ?? taggedUrl ?? "").toLowerCase();
494
495
  const isDocsPage = isAgentNativeDocsUrl(requestUrl);
496
+ // React Router's stale-chunk recovery handles these failures by reloading
497
+ // the page. Keep the external Sentry stream aligned with first-party
498
+ // capture, which already drops the prevented browser event.
499
+ if (exceptionValues.some((value) => isDynamicImportFailureMessage(`${value.type ?? ""}: ${value.value ?? ""}`))) {
500
+ return true;
501
+ }
495
502
  // A server-owned run can emit an expected run_timeout while handing off to
496
503
  // its continuation. AssistantChat retries these transitions automatically;
497
504
  // only locally timed-out or ultimately unrecoverable runs should create a