@agent-native/core 0.91.2 → 0.92.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +31 -0
  3. package/corpus/core/docs/content/faq.mdx +17 -0
  4. package/corpus/core/docs/content/notifications.mdx +12 -6
  5. package/corpus/core/package.json +1 -1
  6. package/corpus/core/src/agent/production-agent.ts +140 -46
  7. package/corpus/core/src/agent/tool-search.ts +71 -4
  8. package/corpus/core/src/application-state/store.ts +12 -1
  9. package/corpus/core/src/cli/index.ts +20 -0
  10. package/corpus/core/src/cli/upgrade.ts +798 -0
  11. package/corpus/core/src/client/AssistantChat.tsx +28 -15
  12. package/corpus/core/src/client/HighlightedCodeBlock.tsx +20 -3
  13. package/corpus/core/src/client/PoweredByBadge.tsx +1 -8
  14. package/corpus/core/src/client/agent-chat-adapter.ts +68 -16
  15. package/corpus/core/src/client/chat/message-components.tsx +85 -8
  16. package/corpus/core/src/client/chat/tool-call-display.tsx +355 -144
  17. package/corpus/core/src/client/chat/widgets/DataTableWidget.tsx +52 -1
  18. package/corpus/core/src/client/code-agent-chat-adapter.ts +2 -9
  19. package/corpus/core/src/client/db-admin/TableEditor.tsx +49 -0
  20. package/corpus/core/src/client/db-admin/export-utils.ts +13 -4
  21. package/corpus/core/src/client/db-admin/useAgentSync.ts +72 -0
  22. package/corpus/core/src/client/error-capture.ts +69 -7
  23. package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +5 -1
  24. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +53 -8
  25. package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +5 -1
  26. package/corpus/core/src/client/extensions/portable-extension.ts +1 -0
  27. package/corpus/core/src/client/org/OrgSwitcher.tsx +12 -9
  28. package/corpus/core/src/client/org/TeamPage.tsx +77 -71
  29. package/corpus/core/src/client/session-replay.ts +3 -97
  30. package/corpus/core/src/client/settings/SettingsPanel.tsx +738 -441
  31. package/corpus/core/src/client/settings/SettingsSection.tsx +161 -17
  32. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +25 -9
  33. package/corpus/core/src/client/sse-event-processor.ts +29 -2
  34. package/corpus/core/src/db-admin/agent-tools.ts +8 -2
  35. package/corpus/core/src/db-admin/operations.ts +116 -4
  36. package/corpus/core/src/db-admin/routes.ts +1 -0
  37. package/corpus/core/src/db-admin/types.ts +4 -0
  38. package/corpus/core/src/extensions/actions.ts +113 -5
  39. package/corpus/core/src/extensions/html-shell.ts +5 -4
  40. package/corpus/core/src/extensions/routes.ts +10 -0
  41. package/corpus/core/src/navigation/index.ts +1 -1
  42. package/corpus/core/src/notifications/channels.ts +88 -25
  43. package/corpus/core/src/notifications/registry.ts +17 -3
  44. package/corpus/core/src/notifications/types.ts +4 -1
  45. package/corpus/core/src/resources/handlers.ts +10 -8
  46. package/corpus/core/src/server/agent-chat-plugin.ts +7 -3
  47. package/corpus/core/src/server/poll.ts +293 -8
  48. package/corpus/core/src/server/request-context.ts +7 -0
  49. package/corpus/core/src/styles/agent-conversation.css +1 -1
  50. package/corpus/core/src/styles/agent-native.css +27 -0
  51. package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
  52. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  53. package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  54. package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +7 -0
  55. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  56. package/corpus/core/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  57. package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  58. package/corpus/core/src/templates/default/AGENTS.md +14 -5
  59. package/corpus/core/src/templates/default/package.json +2 -1
  60. package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  61. package/corpus/core/src/templates/headless/AGENTS.md +13 -3
  62. package/corpus/core/src/templates/headless/package.json +1 -0
  63. package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  64. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  65. package/corpus/core/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  66. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  67. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  68. package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  69. package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  70. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  71. package/corpus/core/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  72. package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  73. package/corpus/core/src/templates/workspace-core/AGENTS.md +7 -1
  74. package/corpus/core/src/templates/workspace-root/AGENTS.md +17 -5
  75. package/corpus/core/src/templates/workspace-root/package.json +1 -0
  76. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +5 -0
  77. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +10 -0
  78. package/corpus/templates/analytics/.agents/skills/real-time-sync/SKILL.md +1 -1
  79. package/corpus/templates/analytics/.agents/skills/security/SKILL.md +7 -0
  80. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +20 -2
  81. package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +5 -6
  82. package/corpus/templates/analytics/.agents/skills/storing-data/SKILL.md +5 -1
  83. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  84. package/corpus/templates/analytics/AGENTS.md +39 -18
  85. package/corpus/templates/analytics/actions/capture-test-error.ts +4 -0
  86. package/corpus/templates/analytics/actions/get-analytics-alert-rule-defaults.ts +23 -0
  87. package/corpus/templates/analytics/actions/get-error-issue.ts +1 -1
  88. package/corpus/templates/analytics/actions/list-analysis-revisions.ts +40 -0
  89. package/corpus/templates/analytics/actions/list-dashboard-revisions.ts +40 -0
  90. package/corpus/templates/analytics/actions/list-dashboard-usage-stats.ts +299 -0
  91. package/corpus/templates/analytics/actions/navigate.ts +4 -2
  92. package/corpus/templates/analytics/actions/restore-analysis-revision.ts +43 -0
  93. package/corpus/templates/analytics/actions/restore-dashboard-revision.ts +68 -0
  94. package/corpus/templates/analytics/actions/save-analytics-alert-rule.ts +14 -0
  95. package/corpus/templates/analytics/actions/save-monitor.ts +15 -1
  96. package/corpus/templates/analytics/actions/view-screen.ts +24 -0
  97. package/corpus/templates/analytics/app/components/analysis/AnalysisHistoryPanel.tsx +181 -0
  98. package/corpus/templates/analytics/app/components/dashboard/DashboardHistoryPanel.tsx +184 -0
  99. package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +41 -6
  100. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +122 -11
  101. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +22 -16
  102. package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -1
  103. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +27 -21
  104. package/corpus/templates/analytics/app/hooks/use-analysis-revisions.ts +43 -0
  105. package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +110 -0
  106. package/corpus/templates/analytics/app/hooks/use-dashboard-revisions.ts +43 -0
  107. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +8 -3
  108. package/corpus/templates/analytics/app/i18n/zh-TW.ts +64 -2
  109. package/corpus/templates/analytics/app/i18n-data.ts +783 -3
  110. package/corpus/templates/analytics/app/pages/Agents.tsx +359 -19
  111. package/corpus/templates/analytics/app/pages/Settings.tsx +3 -2
  112. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +34 -1
  113. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +28 -0
  114. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +18 -1
  115. package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +7 -10
  116. package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +8 -2
  117. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +479 -23
  118. package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +0 -9
  119. package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +11 -0
  120. package/corpus/templates/analytics/app/pages/monitoring/errors/types.ts +9 -1
  121. package/corpus/templates/analytics/app/pages/monitoring/uptime/MonitorFormPage.tsx +157 -35
  122. package/corpus/templates/analytics/app/pages/monitoring/uptime/i18n.ts +17 -2
  123. package/corpus/templates/analytics/app/pages/monitoring/uptime/types.ts +4 -0
  124. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +80 -220
  125. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +9 -99
  126. package/corpus/templates/analytics/app/pages/settings/AlertRulesSettingsCard.tsx +262 -104
  127. package/corpus/templates/analytics/app/routes/team.tsx +1 -1
  128. package/corpus/templates/analytics/changelog/2026-07-08-admins-can-audit-dashboard-usage-ownership-and-cleanup-signa.md +6 -0
  129. package/corpus/templates/analytics/changelog/2026-07-08-agent-monitoring-stays-available-to-non-admins.md +6 -0
  130. package/corpus/templates/analytics/changelog/2026-07-08-alert-rules-are-easier-to-scan-expand-and-edit-from-settings.md +6 -0
  131. package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-forms-remember-last-email-recipients.md +6 -0
  132. package/corpus/templates/analytics/changelog/2026-07-08-analytics-alert-rules-can-now-use-per-rule-slack-and-webhook.md +6 -0
  133. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-history-and-chat-context.md +5 -0
  134. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-tables-keep-their-size-while-loading.md +6 -0
  135. package/corpus/templates/analytics/changelog/2026-07-08-dashboard-usage-now-counts-explorer-dashboard-traffic.md +6 -0
  136. package/corpus/templates/analytics/changelog/2026-07-08-demo-mode-session-emails-are-filtered-and-anonymized.md +6 -0
  137. package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-adds-stack-traces-and-frequency-bars.md +6 -0
  138. package/corpus/templates/analytics/changelog/2026-07-08-error-issue-detail-now-shows-the-latest-occurrence-message-a.md +6 -0
  139. package/corpus/templates/analytics/changelog/2026-07-08-monitoring-errors-only-show-test-action-when-empty.md +6 -0
  140. package/corpus/templates/analytics/changelog/2026-07-08-monitoring-uptime-and-errors-tabs-now-clearly-show-which-view-is-active.md +6 -0
  141. package/corpus/templates/analytics/changelog/2026-07-08-production-session-replay-now-requires-private-blob-storage-.md +6 -0
  142. package/corpus/templates/analytics/changelog/2026-07-08-session-replay-uses-stock-rrweb-sizing-again-so-recorded.md +6 -0
  143. package/corpus/templates/analytics/changelog/2026-07-08-shared-extension-links-now-show-a-clear-message-when-you-do-.md +6 -0
  144. package/corpus/templates/analytics/changelog/2026-07-08-sidebar-dashboard-menus-now-open-above-the-dashboard-canvas.md +6 -0
  145. package/corpus/templates/analytics/changelog/2026-07-08-team-settings-show-access-controls-next-to-member-lists.md +6 -0
  146. package/corpus/templates/analytics/changelog/2026-07-08-uptime-alerting-clarifies-in-app-inbox-vs-email-and-lets-you-paste-slack-or-webhook-urls-per-monitor.md +6 -0
  147. package/corpus/templates/analytics/changelog/2026-07-08-uptime-monitors-now-use-a-10-second-request-timeout-by-defau.md +6 -0
  148. package/corpus/templates/analytics/docs/uptime-monitoring.md +13 -11
  149. package/corpus/templates/analytics/server/db/schema-monitoring.ts +5 -1
  150. package/corpus/templates/analytics/server/db/schema.ts +56 -0
  151. package/corpus/templates/analytics/server/lib/analytics-alerts.ts +92 -0
  152. package/corpus/templates/analytics/server/lib/dashboards-store.ts +334 -5
  153. package/corpus/templates/analytics/server/lib/error-capture.ts +231 -36
  154. package/corpus/templates/analytics/server/lib/session-replay.ts +114 -8
  155. package/corpus/templates/analytics/server/lib/uptime-monitors.ts +65 -16
  156. package/corpus/templates/analytics/server/plugins/db.ts +122 -2
  157. package/corpus/templates/analytics/server/routes/api/dashboard-agent-context.json.get.ts +1 -0
  158. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +5 -0
  159. package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +1 -1
  160. package/corpus/templates/assets/.agents/skills/security/SKILL.md +7 -0
  161. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +20 -2
  162. package/corpus/templates/assets/.agents/skills/storing-data/SKILL.md +5 -1
  163. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  164. package/corpus/templates/assets/AGENTS.md +4 -0
  165. package/corpus/templates/assets/app/routes/settings.tsx +1 -1
  166. package/corpus/templates/assets/app/routes/team.tsx +1 -1
  167. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +5 -0
  168. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
  169. package/corpus/templates/brain/.agents/skills/real-time-sync/SKILL.md +1 -1
  170. package/corpus/templates/brain/.agents/skills/security/SKILL.md +7 -0
  171. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +20 -2
  172. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  173. package/corpus/templates/brain/AGENTS.md +4 -0
  174. package/corpus/templates/brain/app/routes/team.tsx +1 -1
  175. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +5 -0
  176. package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +1 -1
  177. package/corpus/templates/calendar/.agents/skills/security/SKILL.md +7 -0
  178. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +20 -2
  179. package/corpus/templates/calendar/.agents/skills/storing-data/SKILL.md +5 -1
  180. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  181. package/corpus/templates/calendar/AGENTS.md +4 -0
  182. package/corpus/templates/calendar/app/components/calendar/DayView.tsx +11 -2
  183. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +21 -8
  184. package/corpus/templates/calendar/app/components/calendar/MonthView.tsx +7 -1
  185. package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +11 -2
  186. package/corpus/templates/calendar/app/lib/popover-click-guard.ts +48 -4
  187. package/corpus/templates/calendar/app/pages/Settings.tsx +1 -1
  188. package/corpus/templates/calendar/app/routes/_app.team.tsx +1 -1
  189. package/corpus/templates/calendar/changelog/2026-07-08-clicking-empty-calendar-space-closes-an-open-event-popover-b.md +6 -0
  190. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +5 -0
  191. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
  192. package/corpus/templates/chat/.agents/skills/real-time-sync/SKILL.md +1 -1
  193. package/corpus/templates/chat/.agents/skills/security/SKILL.md +7 -0
  194. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +20 -2
  195. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  196. package/corpus/templates/chat/AGENTS.md +4 -0
  197. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +1 -1
  198. package/corpus/templates/chat/app/routes/settings.tsx +2 -2
  199. package/corpus/templates/chat/app/routes/team.tsx +1 -1
  200. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +5 -0
  201. package/corpus/templates/clips/.agents/skills/security/SKILL.md +7 -0
  202. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +20 -2
  203. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  204. package/corpus/templates/clips/AGENTS.md +4 -0
  205. package/corpus/templates/clips/actions/finalize-recording.ts +9 -3
  206. package/corpus/templates/clips/actions/set-thumbnail.ts +11 -2
  207. package/corpus/templates/clips/app/components/meetings/canvas-editor.tsx +1 -7
  208. package/corpus/templates/clips/app/components/player/player-controls.tsx +21 -13
  209. package/corpus/templates/clips/app/components/player/video-player.tsx +30 -75
  210. package/corpus/templates/clips/app/i18n/ar-SA.ts +6 -5
  211. package/corpus/templates/clips/app/i18n/de-DE.ts +6 -6
  212. package/corpus/templates/clips/app/i18n/en-US.ts +6 -5
  213. package/corpus/templates/clips/app/i18n/es-ES.ts +6 -5
  214. package/corpus/templates/clips/app/i18n/fr-FR.ts +6 -6
  215. package/corpus/templates/clips/app/i18n/hi-IN.ts +6 -5
  216. package/corpus/templates/clips/app/i18n/ja-JP.ts +6 -5
  217. package/corpus/templates/clips/app/i18n/ko-KR.ts +6 -5
  218. package/corpus/templates/clips/app/i18n/pt-BR.ts +6 -5
  219. package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -5
  220. package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -5
  221. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +51 -118
  222. package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-notes-stay-active-from-tray-and-shortcut-controls.md +6 -0
  223. package/corpus/templates/clips/changelog/2026-07-08-desktop-meeting-popovers-can-start-notes-and-join-the-meetin.md +6 -0
  224. package/corpus/templates/clips/changelog/2026-07-08-hosted-clip-uploads-now-clear-failed-buffered-chunks.md +6 -0
  225. package/corpus/templates/clips/changelog/2026-07-08-hosted-recording-uploads-now-avoid-sql-chunk-storage.md +6 -0
  226. package/corpus/templates/clips/changelog/2026-07-08-meeting-notes-keep-their-recording-state-when-the-desktop.md +6 -0
  227. package/corpus/templates/clips/changelog/2026-07-08-meeting-recaps-now-keep-summaries-action-items-and-transcrip.md +6 -0
  228. package/corpus/templates/clips/changelog/2026-07-08-meeting-reminder-dropdowns-now-expand-fully-instead-of-being.md +6 -0
  229. package/corpus/templates/clips/changelog/2026-07-08-video-playback-controls-now-match-loom-style-5-second-skips-.md +6 -0
  230. package/corpus/templates/clips/desktop/src/app.tsx +123 -3
  231. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +15 -1
  232. package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +23 -0
  233. package/corpus/templates/clips/desktop/src/styles.css +23 -1
  234. package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +1 -3
  235. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +40 -6
  236. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +4 -2
  237. package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +3 -5
  238. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +23 -19
  239. package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +3 -3
  240. package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +0 -1
  241. package/corpus/templates/clips/desktop/src-tauri/src/state.rs +5 -0
  242. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -6
  243. package/corpus/templates/clips/server/lib/recording-upload-state.ts +63 -0
  244. package/corpus/templates/clips/server/lib/video-storage.ts +4 -0
  245. package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +19 -13
  246. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +40 -1
  247. package/corpus/templates/content/.agents/skills/actions/SKILL.md +5 -0
  248. package/corpus/templates/content/.agents/skills/real-time-sync/SKILL.md +1 -1
  249. package/corpus/templates/content/.agents/skills/security/SKILL.md +7 -0
  250. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +20 -2
  251. package/corpus/templates/content/.agents/skills/storing-data/SKILL.md +5 -1
  252. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  253. package/corpus/templates/content/AGENTS.md +4 -0
  254. package/corpus/templates/content/actions/_batch-utils.ts +8 -0
  255. package/corpus/templates/content/actions/_builder-cms-read-client.ts +7 -5
  256. package/corpus/templates/content/actions/_database-source-utils.ts +776 -319
  257. package/corpus/templates/content/actions/_database-utils.ts +6 -1
  258. package/corpus/templates/content/actions/_property-utils.ts +168 -0
  259. package/corpus/templates/content/actions/add-content-database-source-field-property.ts +19 -12
  260. package/corpus/templates/content/actions/bind-content-database-source-field.ts +19 -12
  261. package/corpus/templates/content/actions/delete-document.ts +9 -13
  262. package/corpus/templates/content/actions/refresh-content-database-source.ts +5 -5
  263. package/corpus/templates/content/app/components/editor/body-hydration.ts +35 -11
  264. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +47 -5
  265. package/corpus/templates/content/app/hooks/use-documents.ts +8 -2
  266. package/corpus/templates/content/app/routes/_app.settings.tsx +2 -2
  267. package/corpus/templates/content/app/routes/_app.team.tsx +1 -1
  268. package/corpus/templates/content/changelog/2026-07-08-builder-source-sync-now-completes-reliably-on-hosted-databases.md +6 -0
  269. package/corpus/templates/content/changelog/2026-07-08-fixed-builder-database-sync-so-large-sources-continue-past-t.md +6 -0
  270. package/corpus/templates/content/server/plugins/db.ts +19 -0
  271. package/corpus/templates/design/.agents/skills/actions/SKILL.md +5 -0
  272. package/corpus/templates/design/.agents/skills/security/SKILL.md +7 -0
  273. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +20 -2
  274. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  275. package/corpus/templates/design/AGENTS.md +4 -0
  276. package/corpus/templates/design/actions/take-design-screenshot.ts +12 -9
  277. package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +57 -13
  278. package/corpus/templates/design/app/routes/team.tsx +1 -1
  279. package/corpus/templates/design/changelog/2026-07-08-local-images-added-to-designs-now-upload-to-file-storage-ins.md +6 -0
  280. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +5 -0
  281. package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +7 -0
  282. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +20 -2
  283. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  284. package/corpus/templates/dispatch/AGENTS.md +4 -0
  285. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +1 -1
  286. package/corpus/templates/dispatch/app/routes/settings.tsx +2 -2
  287. package/corpus/templates/dispatch/app/routes/team.tsx +1 -1
  288. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +5 -0
  289. package/corpus/templates/forms/.agents/skills/real-time-sync/SKILL.md +1 -1
  290. package/corpus/templates/forms/.agents/skills/security/SKILL.md +7 -0
  291. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +20 -2
  292. package/corpus/templates/forms/.agents/skills/storing-data/SKILL.md +5 -1
  293. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  294. package/corpus/templates/forms/AGENTS.md +4 -0
  295. package/corpus/templates/forms/app/routes/_app.settings.tsx +2 -2
  296. package/corpus/templates/forms/app/routes/_app.team.tsx +1 -1
  297. package/corpus/templates/forms/shared/navigation.ts +1 -1
  298. package/corpus/templates/macros/.agents/skills/security/SKILL.md +7 -0
  299. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  300. package/corpus/templates/macros/AGENTS.md +4 -0
  301. package/corpus/templates/macros/app/routes/settings.tsx +2 -2
  302. package/corpus/templates/macros/app/routes/team.tsx +1 -1
  303. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +5 -0
  304. package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +1 -1
  305. package/corpus/templates/mail/.agents/skills/real-time-sync/SKILL.md +1 -1
  306. package/corpus/templates/mail/.agents/skills/security/SKILL.md +7 -0
  307. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +20 -2
  308. package/corpus/templates/mail/.agents/skills/storing-data/SKILL.md +5 -1
  309. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  310. package/corpus/templates/mail/AGENTS.md +4 -0
  311. package/corpus/templates/mail/changelog/2026-07-08-mail-attachments-in-hosted-environments-now-require-file-sto.md +6 -0
  312. package/corpus/templates/mail/server/handlers/media.ts +26 -1
  313. package/corpus/templates/mail/server/lib/outgoing-email.ts +24 -1
  314. package/corpus/templates/mail/server/lib/upload-store.ts +2 -1
  315. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +5 -0
  316. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
  317. package/corpus/templates/plan/.agents/skills/real-time-sync/SKILL.md +1 -1
  318. package/corpus/templates/plan/.agents/skills/security/SKILL.md +7 -0
  319. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +20 -2
  320. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  321. package/corpus/templates/plan/AGENTS.md +4 -0
  322. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +1 -1
  323. package/corpus/templates/plan/app/routes/settings.tsx +2 -2
  324. package/corpus/templates/plan/app/routes/team.tsx +1 -1
  325. package/corpus/templates/plan/changelog/2026-07-08-hosted-plan-images-now-require-connected-storage.md +6 -0
  326. package/corpus/templates/plan/server/lib/plan-assets.ts +33 -4
  327. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +5 -0
  328. package/corpus/templates/slides/.agents/skills/security/SKILL.md +7 -0
  329. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +20 -2
  330. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  331. package/corpus/templates/slides/AGENTS.md +4 -0
  332. package/corpus/templates/slides/actions/generate-image-api.ts +15 -3
  333. package/corpus/templates/slides/app/routes/settings.tsx +2 -2
  334. package/corpus/templates/slides/app/routes/team.tsx +1 -1
  335. package/corpus/templates/slides/changelog/2026-07-08-generated-slide-images-now-return-hosted-file-storage-urls-i.md +6 -0
  336. package/corpus/templates/slides/shared/api.ts +1 -1
  337. package/corpus/templates/videos/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  338. package/corpus/templates/voice/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  339. package/dist/agent/production-agent.d.ts +5 -1
  340. package/dist/agent/production-agent.d.ts.map +1 -1
  341. package/dist/agent/production-agent.js +112 -42
  342. package/dist/agent/production-agent.js.map +1 -1
  343. package/dist/agent/tool-search.d.ts +2 -0
  344. package/dist/agent/tool-search.d.ts.map +1 -1
  345. package/dist/agent/tool-search.js +60 -4
  346. package/dist/agent/tool-search.js.map +1 -1
  347. package/dist/application-state/store.d.ts.map +1 -1
  348. package/dist/application-state/store.js +8 -2
  349. package/dist/application-state/store.js.map +1 -1
  350. package/dist/cli/index.js +19 -0
  351. package/dist/cli/index.js.map +1 -1
  352. package/dist/cli/upgrade.d.ts +100 -0
  353. package/dist/cli/upgrade.d.ts.map +1 -0
  354. package/dist/cli/upgrade.js +678 -0
  355. package/dist/cli/upgrade.js.map +1 -0
  356. package/dist/client/AssistantChat.d.ts.map +1 -1
  357. package/dist/client/AssistantChat.js +25 -14
  358. package/dist/client/AssistantChat.js.map +1 -1
  359. package/dist/client/HighlightedCodeBlock.d.ts +2 -0
  360. package/dist/client/HighlightedCodeBlock.d.ts.map +1 -1
  361. package/dist/client/HighlightedCodeBlock.js +10 -1
  362. package/dist/client/HighlightedCodeBlock.js.map +1 -1
  363. package/dist/client/PoweredByBadge.d.ts +1 -1
  364. package/dist/client/PoweredByBadge.d.ts.map +1 -1
  365. package/dist/client/PoweredByBadge.js +3 -9
  366. package/dist/client/PoweredByBadge.js.map +1 -1
  367. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  368. package/dist/client/agent-chat-adapter.js +60 -13
  369. package/dist/client/agent-chat-adapter.js.map +1 -1
  370. package/dist/client/chat/message-components.d.ts.map +1 -1
  371. package/dist/client/chat/message-components.js +61 -8
  372. package/dist/client/chat/message-components.js.map +1 -1
  373. package/dist/client/chat/tool-call-display.d.ts +12 -0
  374. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  375. package/dist/client/chat/tool-call-display.js +136 -42
  376. package/dist/client/chat/tool-call-display.js.map +1 -1
  377. package/dist/client/chat/widgets/DataTableWidget.d.ts.map +1 -1
  378. package/dist/client/chat/widgets/DataTableWidget.js +19 -2
  379. package/dist/client/chat/widgets/DataTableWidget.js.map +1 -1
  380. package/dist/client/code-agent-chat-adapter.js +2 -9
  381. package/dist/client/code-agent-chat-adapter.js.map +1 -1
  382. package/dist/client/db-admin/TableEditor.d.ts.map +1 -1
  383. package/dist/client/db-admin/TableEditor.js +19 -2
  384. package/dist/client/db-admin/TableEditor.js.map +1 -1
  385. package/dist/client/db-admin/export-utils.d.ts +2 -0
  386. package/dist/client/db-admin/export-utils.d.ts.map +1 -1
  387. package/dist/client/db-admin/export-utils.js +11 -3
  388. package/dist/client/db-admin/export-utils.js.map +1 -1
  389. package/dist/client/db-admin/useAgentSync.d.ts.map +1 -1
  390. package/dist/client/db-admin/useAgentSync.js +63 -0
  391. package/dist/client/db-admin/useAgentSync.js.map +1 -1
  392. package/dist/client/error-capture.d.ts.map +1 -1
  393. package/dist/client/error-capture.js +41 -7
  394. package/dist/client/error-capture.js.map +1 -1
  395. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  396. package/dist/client/extensions/EmbeddedExtension.js +3 -1
  397. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  398. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  399. package/dist/client/extensions/ExtensionViewer.js +32 -5
  400. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  401. package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
  402. package/dist/client/extensions/InlineExtensionFrame.js +3 -1
  403. package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
  404. package/dist/client/extensions/portable-extension.d.ts.map +1 -1
  405. package/dist/client/extensions/portable-extension.js +1 -0
  406. package/dist/client/extensions/portable-extension.js.map +1 -1
  407. package/dist/client/org/OrgSwitcher.d.ts +1 -1
  408. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  409. package/dist/client/org/OrgSwitcher.js +11 -6
  410. package/dist/client/org/OrgSwitcher.js.map +1 -1
  411. package/dist/client/org/TeamPage.d.ts.map +1 -1
  412. package/dist/client/org/TeamPage.js +5 -5
  413. package/dist/client/org/TeamPage.js.map +1 -1
  414. package/dist/client/session-replay.d.ts +0 -8
  415. package/dist/client/session-replay.d.ts.map +1 -1
  416. package/dist/client/session-replay.js +3 -80
  417. package/dist/client/session-replay.js.map +1 -1
  418. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  419. package/dist/client/settings/SettingsPanel.js +89 -33
  420. package/dist/client/settings/SettingsPanel.js.map +1 -1
  421. package/dist/client/settings/SettingsSection.d.ts +19 -4
  422. package/dist/client/settings/SettingsSection.d.ts.map +1 -1
  423. package/dist/client/settings/SettingsSection.js +33 -4
  424. package/dist/client/settings/SettingsSection.js.map +1 -1
  425. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  426. package/dist/client/settings/SettingsTabsPage.js +21 -10
  427. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  428. package/dist/client/sse-event-processor.d.ts +9 -0
  429. package/dist/client/sse-event-processor.d.ts.map +1 -1
  430. package/dist/client/sse-event-processor.js +20 -2
  431. package/dist/client/sse-event-processor.js.map +1 -1
  432. package/dist/db-admin/agent-tools.d.ts.map +1 -1
  433. package/dist/db-admin/agent-tools.js +7 -2
  434. package/dist/db-admin/agent-tools.js.map +1 -1
  435. package/dist/db-admin/operations.d.ts.map +1 -1
  436. package/dist/db-admin/operations.js +90 -4
  437. package/dist/db-admin/operations.js.map +1 -1
  438. package/dist/db-admin/routes.d.ts.map +1 -1
  439. package/dist/db-admin/routes.js +1 -0
  440. package/dist/db-admin/routes.js.map +1 -1
  441. package/dist/db-admin/types.d.ts +4 -0
  442. package/dist/db-admin/types.d.ts.map +1 -1
  443. package/dist/db-admin/types.js.map +1 -1
  444. package/dist/extensions/actions.d.ts.map +1 -1
  445. package/dist/extensions/actions.js +85 -5
  446. package/dist/extensions/actions.js.map +1 -1
  447. package/dist/extensions/html-shell.d.ts +5 -4
  448. package/dist/extensions/html-shell.d.ts.map +1 -1
  449. package/dist/extensions/html-shell.js.map +1 -1
  450. package/dist/extensions/routes.d.ts.map +1 -1
  451. package/dist/extensions/routes.js +8 -0
  452. package/dist/extensions/routes.js.map +1 -1
  453. package/dist/navigation/index.d.ts +1 -1
  454. package/dist/navigation/index.d.ts.map +1 -1
  455. package/dist/navigation/index.js +1 -1
  456. package/dist/navigation/index.js.map +1 -1
  457. package/dist/notifications/channels.d.ts +8 -3
  458. package/dist/notifications/channels.d.ts.map +1 -1
  459. package/dist/notifications/channels.js +61 -22
  460. package/dist/notifications/channels.js.map +1 -1
  461. package/dist/notifications/registry.d.ts.map +1 -1
  462. package/dist/notifications/registry.js +14 -3
  463. package/dist/notifications/registry.js.map +1 -1
  464. package/dist/notifications/types.d.ts +4 -1
  465. package/dist/notifications/types.d.ts.map +1 -1
  466. package/dist/notifications/types.js.map +1 -1
  467. package/dist/resources/handlers.d.ts +5 -0
  468. package/dist/resources/handlers.d.ts.map +1 -1
  469. package/dist/resources/handlers.js +9 -8
  470. package/dist/resources/handlers.js.map +1 -1
  471. package/dist/server/agent-chat-plugin.d.ts +5 -1
  472. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  473. package/dist/server/agent-chat-plugin.js +2 -2
  474. package/dist/server/agent-chat-plugin.js.map +1 -1
  475. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  476. package/dist/server/poll.d.ts +12 -4
  477. package/dist/server/poll.d.ts.map +1 -1
  478. package/dist/server/poll.js +236 -9
  479. package/dist/server/poll.js.map +1 -1
  480. package/dist/server/request-context.d.ts +7 -0
  481. package/dist/server/request-context.d.ts.map +1 -1
  482. package/dist/server/request-context.js.map +1 -1
  483. package/dist/styles/agent-conversation.css +1 -1
  484. package/dist/styles/agent-native.css +27 -0
  485. package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -0
  486. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  487. package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  488. package/dist/templates/default/.agents/skills/security/SKILL.md +7 -0
  489. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  490. package/dist/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  491. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  492. package/dist/templates/default/AGENTS.md +14 -5
  493. package/dist/templates/default/package.json +2 -1
  494. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  495. package/dist/templates/headless/AGENTS.md +13 -3
  496. package/dist/templates/headless/package.json +1 -0
  497. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  498. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  499. package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  500. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  501. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  502. package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  503. package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  504. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  505. package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  506. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  507. package/dist/templates/workspace-core/AGENTS.md +7 -1
  508. package/dist/templates/workspace-root/AGENTS.md +17 -5
  509. package/dist/templates/workspace-root/package.json +1 -0
  510. package/docs/content/faq.mdx +17 -0
  511. package/docs/content/notifications.mdx +12 -6
  512. package/package.json +2 -2
  513. package/src/templates/default/.agents/skills/actions/SKILL.md +5 -0
  514. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
  515. package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +1 -1
  516. package/src/templates/default/.agents/skills/security/SKILL.md +7 -0
  517. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +20 -2
  518. package/src/templates/default/.agents/skills/storing-data/SKILL.md +5 -1
  519. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  520. package/src/templates/default/AGENTS.md +14 -5
  521. package/src/templates/default/package.json +2 -1
  522. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  523. package/src/templates/headless/AGENTS.md +13 -3
  524. package/src/templates/headless/package.json +1 -0
  525. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -0
  526. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
  527. package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +4 -0
  528. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +6 -0
  529. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +4 -0
  530. package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +1 -1
  531. package/src/templates/workspace-core/.agents/skills/security/SKILL.md +7 -0
  532. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +20 -2
  533. package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +5 -1
  534. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +87 -0
  535. package/src/templates/workspace-core/AGENTS.md +7 -1
  536. package/src/templates/workspace-root/AGENTS.md +17 -5
  537. package/src/templates/workspace-root/package.json +1 -0
  538. package/corpus/templates/analytics/changelog/2026-07-08-session-replay-clamps-ultra-wide-viewports-while-keeping-the.md +0 -6
@@ -156,6 +156,8 @@ type ReplayViewportDimensions = {
156
156
 
157
157
  const DEFAULT_PLAYER_WIDTH = 1024;
158
158
  const DEFAULT_PLAYER_HEIGHT = 640;
159
+ const MIN_REPLAY_DISPLAY_ASPECT_RATIO = 0.45;
160
+ const MAX_REPLAY_DISPLAY_ASPECT_RATIO = 3;
159
161
  const DEFAULT_SPEED = 2;
160
162
  const SPEED_OPTIONS = [0.5, 1, 2, 4, 8];
161
163
  const SKIP_STEP_MS = 5000;
@@ -166,15 +168,12 @@ const REPLAY_CHUNK_UNAVAILABLE_MESSAGE = "Session replay chunk is unavailable";
166
168
  const DEFAULT_DEVTOOLS_HEIGHT = 220;
167
169
  const MIN_STAGE_HEIGHT_PX = 240;
168
170
  const SCRUBBER_MARKER_LIMIT = 500;
169
- /** Reject Meta/resize frames that produce the ultra-wide ribbon letterbox.
170
- * True 21:9 ultrawide is ~2.33; multi-monitor spans and corrupt frames are
171
- * usually well above that and collapse the stage after fit-to-scale. */
172
- const MIN_REPLAY_VIEWPORT_WIDTH = 320;
173
- const MIN_REPLAY_VIEWPORT_HEIGHT = 240;
174
- const MAX_REPLAY_ASPECT_RATIO = 2.45;
175
- const MIN_REPLAY_ASPECT_RATIO = 0.5;
176
171
  const TIMELINE_MARKER_LIMIT = 300;
177
172
  const TIMELINE_FOLLOW_PAUSE_MS = 4000;
173
+ /** Toast/snackbar noise only — keep insertStyleRules minimal like builder-internal. */
174
+ const SUPPRESS_OVERLAYS_CSS = [
175
+ "[data-radix-popper-content-wrapper], .Toastify, [class*='toast'], [class*='Toast'], [class*='Snackbar'] { display: none !important; }",
176
+ ];
178
177
  const SESSION_REPLAY_CONSOLE_EVENT_TAG = "agent-native.console";
179
178
  const SESSION_REPLAY_NETWORK_EVENT_TAG = "agent-native.network";
180
179
 
@@ -451,6 +450,7 @@ function ReplayWorkbench({
451
450
  />
452
451
  <ReplayTimeline
453
452
  markers={markers}
453
+ isLoading={!response.isComplete}
454
454
  activeMarkerId={activeMarkerId}
455
455
  onSeek={(ms) => seekRef.current(ms, true)}
456
456
  />
@@ -506,10 +506,9 @@ function ReplayPlayer({
506
506
  const scrubbingRef = useRef(false);
507
507
  const scrubResumePlayingRef = useRef(false);
508
508
 
509
- const playerWidth =
510
- streamedDims?.width ?? initialDims?.width ?? DEFAULT_PLAYER_WIDTH;
511
- const playerHeight =
512
- streamedDims?.height ?? initialDims?.height ?? DEFAULT_PLAYER_HEIGHT;
509
+ const displayDims = clampReplayDisplayDimensions(streamedDims ?? initialDims);
510
+ const playerWidth = displayDims?.width ?? DEFAULT_PLAYER_WIDTH;
511
+ const playerHeight = displayDims?.height ?? DEFAULT_PLAYER_HEIGHT;
513
512
  const skipRanges = useMemo(() => buildIdleSkipRanges(events), [events]);
514
513
  const skipRangesRef = useLiveRef(skipRanges);
515
514
  const skipInactiveRef = useLiveRef(skipInactive);
@@ -695,33 +694,21 @@ function ReplayPlayer({
695
694
  if (cancelled || !stageRootRef.current) return;
696
695
 
697
696
  stageRootRef.current.innerHTML = "";
698
- const frameDims = replayViewportDimensions(replayEvents);
699
- const playbackEvents = sanitizeReplayViewportEvents(
700
- replayEvents,
701
- frameDims ?? {
702
- width: DEFAULT_PLAYER_WIDTH,
703
- height: DEFAULT_PLAYER_HEIGHT,
704
- },
705
- );
706
- setStreamedDims(frameDims);
707
- localReplayer = new Replayer(playbackEvents as any[], {
697
+ // Match builder-internal: pass events through untouched and let rrweb own
698
+ // iframe sizing via Meta / ViewportResize. Only use dimensions for CSS
699
+ // fit-to-stage scaling of the outer wrapper — never rewrite Meta or force
700
+ // iframe width/height (that mismatches the FullSnapshot DOM and blanks
701
+ // the stage).
702
+ setStreamedDims(replayViewportDimensions(replayEvents));
703
+ localReplayer = new Replayer(replayEvents as any[], {
708
704
  root: stageRootRef.current,
709
705
  speed: speedRef.current,
710
706
  skipInactive: false,
711
707
  showWarning: false,
712
708
  showDebug: false,
713
709
  triggerFocus: false,
714
- // Subtle FullStory-style trail behind the visitor cursor. The canvas
715
- // is resized alongside the iframe in applyReplayFrameDimensions.
716
- mouseTail: {
717
- strokeStyle: "rgba(59, 130, 246, 0.35)",
718
- lineWidth: 2,
719
- duration: 600,
720
- lineCap: "round",
721
- },
722
- insertStyleRules: [
723
- "[data-radix-popper-content-wrapper], .Toastify, [class*='toast'], [class*='Toast'] { display: none !important; }",
724
- ],
710
+ mouseTail: false,
711
+ insertStyleRules: SUPPRESS_OVERLAYS_CSS,
725
712
  });
726
713
  replayerRef.current = localReplayer;
727
714
  const meta = localReplayer.getMetaData?.();
@@ -732,7 +719,6 @@ function ReplayPlayer({
732
719
  0,
733
720
  Number.isFinite(total) ? total : 0,
734
721
  );
735
- applyReplayFrameDimensions(localReplayer, frameDims);
736
722
  localReplayer.on?.("finish", () => {
737
723
  setPlaying(false);
738
724
  const finalTime = Number(localReplayer.getCurrentTime?.() ?? total);
@@ -740,21 +726,20 @@ function ReplayPlayer({
740
726
  });
741
727
  localReplayer.on?.("resize", (payload: unknown) => {
742
728
  const dims = payload as { width?: unknown; height?: unknown };
743
- const nextDims = normalizeReplayDimensions(dims.width, dims.height);
744
- if (nextDims) {
745
- applyReplayFrameDimensions(localReplayer, nextDims);
746
- revealReplayFrame(localReplayer);
747
- setStreamedDims(nextDims);
729
+ if (
730
+ typeof dims.width === "number" &&
731
+ typeof dims.height === "number" &&
732
+ Number.isFinite(dims.width) &&
733
+ Number.isFinite(dims.height) &&
734
+ dims.width > 0 &&
735
+ dims.height > 0
736
+ ) {
737
+ setStreamedDims({
738
+ width: Math.round(dims.width),
739
+ height: Math.round(dims.height),
740
+ });
748
741
  }
749
742
  });
750
- localReplayer.on?.("fullsnapshot-rebuilded", () => {
751
- applyReplayFrameDimensions(
752
- localReplayer,
753
- replayViewportAt(eventsRef.current, currentTimeRef.current) ??
754
- frameDims,
755
- );
756
- revealReplayFrame(localReplayer);
757
- });
758
743
  updateTime(startAt);
759
744
  setStatus("ready");
760
745
  try {
@@ -769,14 +754,6 @@ function ReplayPlayer({
769
754
  }
770
755
  setPlaying(false);
771
756
  }
772
- window.requestAnimationFrame(() => {
773
- applyReplayFrameDimensions(
774
- localReplayer,
775
- replayViewportAt(eventsRef.current, currentTimeRef.current) ??
776
- frameDims,
777
- );
778
- revealReplayFrame(localReplayer);
779
- });
780
757
  }
781
758
 
782
759
  void loadReplay().catch((loadError: any) => {
@@ -1250,10 +1227,12 @@ function ReplayIconButton({
1250
1227
 
1251
1228
  function ReplayTimeline({
1252
1229
  markers,
1230
+ isLoading,
1253
1231
  activeMarkerId,
1254
1232
  onSeek,
1255
1233
  }: {
1256
1234
  markers: ReplayMarker[];
1235
+ isLoading: boolean;
1257
1236
  activeMarkerId: string | null;
1258
1237
  onSeek: (ms: number) => void;
1259
1238
  }) {
@@ -1292,35 +1271,28 @@ function ReplayTimeline({
1292
1271
  }, [activeMarkerId, filteredMarkers]);
1293
1272
 
1294
1273
  return (
1295
- <Card className="analytics-session-detail-timeline min-h-0 overflow-hidden">
1296
- <CardContent className="flex min-h-0 flex-1 flex-col p-0">
1297
- <div className="shrink-0 space-y-2 border-b px-3 py-2">
1298
- <div className="flex items-center gap-2 text-sm font-semibold">
1299
- <IconTimelineEvent className="h-4 w-4" />
1274
+ <Card className="analytics-session-detail-timeline min-h-0 min-w-0 overflow-hidden">
1275
+ <CardContent className="flex min-h-0 min-w-0 flex-1 flex-col p-0">
1276
+ <div className="min-w-0 shrink-0 space-y-2 border-b px-3 py-2">
1277
+ <div className="truncate text-sm font-semibold">
1300
1278
  {t("sessions.timeline")}
1301
1279
  </div>
1302
- <p className="text-xs text-muted-foreground">
1303
- {filteredMarkers.length
1304
- ? t("sessions.timelineDescription", {
1305
- count: String(filteredMarkers.length),
1306
- total: String(markers.length),
1307
- })
1308
- : t("sessions.noTimelineEvents")}
1309
- </p>
1310
- <div className="relative">
1311
- <IconSearch className="pointer-events-none absolute start-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" />
1312
- <Input
1313
- type="search"
1314
- className="h-7 ps-7 text-xs"
1315
- value={query}
1316
- placeholder={t("sessions.timelineSearch")}
1317
- onChange={(event) => setQuery(event.target.value)}
1318
- />
1319
- </div>
1280
+ {!isLoading || markers.length ? (
1281
+ <div className="relative">
1282
+ <IconSearch className="pointer-events-none absolute start-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" />
1283
+ <Input
1284
+ type="search"
1285
+ className="h-7 ps-7 text-xs"
1286
+ value={query}
1287
+ placeholder={t("sessions.timelineSearch")}
1288
+ onChange={(event) => setQuery(event.target.value)}
1289
+ />
1290
+ </div>
1291
+ ) : null}
1320
1292
  </div>
1321
1293
  <div
1322
1294
  ref={listRef}
1323
- className="min-h-0 flex-1 overflow-auto"
1295
+ className="min-h-0 min-w-0 flex-1 overflow-y-auto overflow-x-hidden"
1324
1296
  onWheel={() => {
1325
1297
  lastManualScrollAtRef.current = Date.now();
1326
1298
  }}
@@ -1329,7 +1301,7 @@ function ReplayTimeline({
1329
1301
  }}
1330
1302
  >
1331
1303
  {filteredMarkers.length ? (
1332
- <div className="divide-y">
1304
+ <div className="min-w-0 divide-y">
1333
1305
  {filteredMarkers.map((marker) => {
1334
1306
  const expanded = marker.id === expandedMarkerId;
1335
1307
  const active = marker.id === activeMarkerId;
@@ -1344,7 +1316,7 @@ function ReplayTimeline({
1344
1316
  >
1345
1317
  <button
1346
1318
  type="button"
1347
- className="flex w-full gap-2.5 px-3 py-2.5 text-left transition-colors hover:bg-muted/50"
1319
+ className="flex w-full min-w-0 gap-2.5 px-3 py-2.5 text-left transition-colors hover:bg-muted/50"
1348
1320
  aria-expanded={expanded}
1349
1321
  aria-current={active ? "true" : undefined}
1350
1322
  onClick={() => {
@@ -1375,12 +1347,12 @@ function ReplayTimeline({
1375
1347
  >
1376
1348
  <MarkerIcon kind={marker.kind} />
1377
1349
  </span>
1378
- <span className="min-w-0 flex-1">
1379
- <span className="flex items-center justify-between gap-3">
1350
+ <span className="min-w-0 flex-1 overflow-hidden">
1351
+ <span className="flex min-w-0 items-center justify-between gap-3">
1380
1352
  <span className="truncate text-sm font-medium">
1381
1353
  {marker.label}
1382
1354
  </span>
1383
- <span className="font-mono text-xs text-muted-foreground">
1355
+ <span className="shrink-0 font-mono text-xs text-muted-foreground">
1384
1356
  {formatClock(marker.offsetMs)}
1385
1357
  </span>
1386
1358
  </span>
@@ -1402,7 +1374,7 @@ function ReplayTimeline({
1402
1374
  );
1403
1375
  })}
1404
1376
  </div>
1405
- ) : (
1377
+ ) : isLoading ? null : (
1406
1378
  <div className="p-4 text-sm text-muted-foreground">
1407
1379
  {query.trim()
1408
1380
  ? t("sessions.timelineNoMatches")
@@ -2177,9 +2149,8 @@ function hasPlayableReplayEvents(events: unknown[]): boolean {
2177
2149
  export function replayViewportDimensions(
2178
2150
  events: AnyReplayEvent[],
2179
2151
  ): ReplayViewportDimensions | null {
2180
- // Prefer the most recent sane Meta/ViewportResize frame. Early Meta events
2181
- // (or corrupt resize payloads) can report absurd aspect ratios that collapse
2182
- // the stage into an ultra-wide ribbon after fit-to-stage scaling.
2152
+ // Latest Meta / ViewportResize for CSS fit-to-stage only. Never rewrite these
2153
+ // into the event stream rrweb must keep Meta in sync with the FullSnapshot.
2183
2154
  let best: ReplayViewportDimensions | null = null;
2184
2155
  for (const event of events) {
2185
2156
  const dims = dimensionsFromReplayEvent(event);
@@ -2188,22 +2159,6 @@ export function replayViewportDimensions(
2188
2159
  return best;
2189
2160
  }
2190
2161
 
2191
- export function replayViewportAt(
2192
- events: AnyReplayEvent[],
2193
- currentTime: number,
2194
- ): ReplayViewportDimensions | null {
2195
- const startedAt = replayStartedAt(events);
2196
- let current: ReplayViewportDimensions | null = null;
2197
- for (const event of events) {
2198
- const dims = dimensionsFromReplayEvent(event);
2199
- if (!dims) continue;
2200
- const offset = Number(event.timestamp ?? 0) - startedAt;
2201
- if (offset <= currentTime + 50) current = dims;
2202
- else break;
2203
- }
2204
- return current ?? replayViewportDimensions(events);
2205
- }
2206
-
2207
2162
  function dimensionsFromReplayEvent(
2208
2163
  event: AnyReplayEvent,
2209
2164
  ): ReplayViewportDimensions | null {
@@ -2219,12 +2174,7 @@ function dimensionsFromReplayEvent(
2219
2174
  return null;
2220
2175
  }
2221
2176
 
2222
- /**
2223
- * Prefer a sane viewport for the stage. Returns null only when width/height
2224
- * are missing or non-positive. Out-of-range aspect ratios are clamped rather
2225
- * than rejected so genuine wide windows keep their height (and most of their
2226
- * width) instead of collapsing to the default 1024×640 fallback.
2227
- */
2177
+ /** Read raw positive finite dimensions; no aspect clamping. */
2228
2178
  export function normalizeReplayDimensions(
2229
2179
  width: unknown,
2230
2180
  height: unknown,
@@ -2239,28 +2189,30 @@ export function normalizeReplayDimensions(
2239
2189
  ) {
2240
2190
  return null;
2241
2191
  }
2242
- return clampReplayViewport(width, height);
2192
+ return {
2193
+ width: Math.round(width),
2194
+ height: Math.round(height),
2195
+ };
2243
2196
  }
2244
2197
 
2245
- /**
2246
- * Clamp Meta / ViewportResize dimensions into a displayable aspect range.
2247
- * Multi-monitor spans and corrupt frames often report absurd widths; keep the
2248
- * captured height and shrink width (or vice versa) so the DOM still roughly
2249
- * matches the recorded layout.
2250
- */
2251
- export function clampReplayViewport(
2252
- width: number,
2253
- height: number,
2254
- ): ReplayViewportDimensions {
2255
- let nextWidth = Math.max(MIN_REPLAY_VIEWPORT_WIDTH, Math.round(width));
2256
- let nextHeight = Math.max(MIN_REPLAY_VIEWPORT_HEIGHT, Math.round(height));
2257
- const aspect = nextWidth / nextHeight;
2258
- if (aspect > MAX_REPLAY_ASPECT_RATIO) {
2259
- nextWidth = Math.round(nextHeight * MAX_REPLAY_ASPECT_RATIO);
2260
- } else if (aspect < MIN_REPLAY_ASPECT_RATIO) {
2261
- nextHeight = Math.round(nextWidth / MIN_REPLAY_ASPECT_RATIO);
2198
+ export function clampReplayDisplayDimensions(
2199
+ dims: ReplayViewportDimensions | null,
2200
+ ): ReplayViewportDimensions | null {
2201
+ if (!dims) return null;
2202
+ const aspect = dims.width / dims.height;
2203
+ if (aspect > MAX_REPLAY_DISPLAY_ASPECT_RATIO) {
2204
+ return {
2205
+ width: Math.round(dims.height * MAX_REPLAY_DISPLAY_ASPECT_RATIO),
2206
+ height: dims.height,
2207
+ };
2208
+ }
2209
+ if (aspect < MIN_REPLAY_DISPLAY_ASPECT_RATIO) {
2210
+ return {
2211
+ width: dims.width,
2212
+ height: Math.round(dims.width / MIN_REPLAY_DISPLAY_ASPECT_RATIO),
2213
+ };
2262
2214
  }
2263
- return { width: nextWidth, height: nextHeight };
2215
+ return dims;
2264
2216
  }
2265
2217
 
2266
2218
  export function filterReplayMarkers(
@@ -2284,98 +2236,6 @@ export function filterReplayMarkers(
2284
2236
  });
2285
2237
  }
2286
2238
 
2287
- /**
2288
- * Rewrite Meta / ViewportResize frames so rrweb never applies absurd aspect
2289
- * ratios that collapse the stage into an ultra-wide ribbon. Prefer clamping
2290
- * the captured dimensions (preserve height, shrink width) over replacing them
2291
- * with the default fallback, which would misalign the recorded DOM.
2292
- */
2293
- export function sanitizeReplayViewportEvents(
2294
- events: AnyReplayEvent[],
2295
- fallback: ReplayViewportDimensions,
2296
- ): AnyReplayEvent[] {
2297
- return events.map((event) => {
2298
- if (event.type === RRWEB_EVENT_TYPE.Meta && isRecord(event.data)) {
2299
- return rewriteViewportEventData(event, event.data, fallback);
2300
- }
2301
- if (
2302
- event.type === RRWEB_EVENT_TYPE.IncrementalSnapshot &&
2303
- event.data?.source === INCREMENTAL_SOURCE.ViewportResize &&
2304
- isRecord(event.data)
2305
- ) {
2306
- return rewriteViewportEventData(event, event.data, fallback);
2307
- }
2308
- return event;
2309
- });
2310
- }
2311
-
2312
- function rewriteViewportEventData(
2313
- event: AnyReplayEvent,
2314
- data: AnyRecord,
2315
- fallback: ReplayViewportDimensions,
2316
- ): AnyReplayEvent {
2317
- const width = data.width;
2318
- const height = data.height;
2319
- if (
2320
- typeof width === "number" &&
2321
- typeof height === "number" &&
2322
- Number.isFinite(width) &&
2323
- Number.isFinite(height) &&
2324
- width > 0 &&
2325
- height > 0
2326
- ) {
2327
- const clamped = clampReplayViewport(width, height);
2328
- if (
2329
- clamped.width === Math.round(width) &&
2330
- clamped.height === Math.round(height)
2331
- ) {
2332
- return event;
2333
- }
2334
- return {
2335
- ...event,
2336
- data: {
2337
- ...data,
2338
- width: clamped.width,
2339
- height: clamped.height,
2340
- },
2341
- };
2342
- }
2343
- return {
2344
- ...event,
2345
- data: {
2346
- ...data,
2347
- width: fallback.width,
2348
- height: fallback.height,
2349
- },
2350
- };
2351
- }
2352
-
2353
- function applyReplayFrameDimensions(
2354
- replayer: any,
2355
- dims: ReplayViewportDimensions | null,
2356
- ) {
2357
- const width = dims?.width ?? DEFAULT_PLAYER_WIDTH;
2358
- const height = dims?.height ?? DEFAULT_PLAYER_HEIGHT;
2359
- const wrapper = replayer?.wrapper as HTMLElement | undefined;
2360
- const iframe = replayer?.iframe as HTMLIFrameElement | undefined;
2361
- const mouseTail = replayer?.mouseTail as HTMLCanvasElement | undefined;
2362
- for (const element of [wrapper, iframe]) {
2363
- if (!element) continue;
2364
- element.style.width = `${width}px`;
2365
- element.style.height = `${height}px`;
2366
- }
2367
- for (const element of [iframe, mouseTail]) {
2368
- if (!element) continue;
2369
- element.setAttribute("width", String(width));
2370
- element.setAttribute("height", String(height));
2371
- }
2372
- }
2373
-
2374
- function revealReplayFrame(replayer: any) {
2375
- const iframe = replayer?.iframe as HTMLIFrameElement | undefined;
2376
- if (iframe) iframe.style.display = "inherit";
2377
- }
2378
-
2379
2239
  function replayStartedAt(events: AnyReplayEvent[]): number {
2380
2240
  const first = events.find((event) =>
2381
2241
  Number.isFinite(Number(event.timestamp)),
@@ -1,6 +1,5 @@
1
1
  import { CodeSurface } from "@agent-native/core/blocks";
2
2
  import {
3
- agentNativePath,
4
3
  useActionQuery,
5
4
  useBuilderConnectFlow,
6
5
  useBuilderStatus,
@@ -80,13 +79,7 @@ type SessionRecordingIdentity = Pick<
80
79
 
81
80
  type SessionRecordingDevice = Pick<SessionRecordingSummary, "metadata">;
82
81
 
83
- type DemoStatus = {
84
- enabled?: boolean;
85
- forced?: boolean;
86
- };
87
-
88
82
  const RANGE_OPTIONS: ReplayRange[] = ["24h", "7d", "30d", "90d", "all"];
89
- const DEMO_STATUS_URL = agentNativePath("/_agent-native/demo/status");
90
83
 
91
84
  export default function SessionsPage() {
92
85
  const t = useT();
@@ -111,7 +104,6 @@ export default function SessionsPage() {
111
104
  { staleTime: 30_000 },
112
105
  );
113
106
 
114
- const demoModeEnabled = useDemoModeEnabled();
115
107
  const recordings = data ?? [];
116
108
 
117
109
  function updateFilter(key: string, value: string) {
@@ -256,7 +248,7 @@ export default function SessionsPage() {
256
248
  </span>
257
249
  <span className="min-w-0">
258
250
  <span className="block truncate text-sm font-medium text-foreground">
259
- {visitorLabel(recording, t, demoModeEnabled)}
251
+ {visitorLabel(recording, t)}
260
252
  </span>
261
253
  <span className="mt-0.5 block truncate text-xs text-muted-foreground">
262
254
  {formatDateTime(lastSeen)} ·{" "}
@@ -278,11 +270,7 @@ export default function SessionsPage() {
278
270
  </span>
279
271
  <span className="analytics-session-app-meta min-w-0 text-left">
280
272
  <span className="analytics-session-badges flex flex-wrap gap-1.5 text-xs text-muted-foreground">
281
- <span>
282
- {t("sessions.pageCountCompact", {
283
- count: formatNumber(recording.pageCount),
284
- })}
285
- </span>
273
+ <span>{formatPageCount(recording.pageCount, t)}</span>
286
274
  {recording.errorCount > 0 ? (
287
275
  <span className="font-medium text-destructive">
288
276
  {t("sessions.errorCount", {
@@ -316,22 +304,6 @@ export default function SessionsPage() {
316
304
  );
317
305
  }
318
306
 
319
- function useDemoModeEnabled(): boolean {
320
- const { data } = useQuery({
321
- queryKey: ["agent-native", "demo-mode"],
322
- queryFn: async () => {
323
- const res = await fetch(DEMO_STATUS_URL, {
324
- credentials: "same-origin",
325
- });
326
- if (!res.ok) return null;
327
- return (await res.json()) as DemoStatus | null;
328
- },
329
- refetchInterval: 4_000,
330
- staleTime: 2_000,
331
- });
332
- return data?.enabled === true || data?.forced === true;
333
- }
334
-
335
307
  function EmptySessionsState() {
336
308
  const t = useT();
337
309
  const storageStatus = useReplayStorageStatus();
@@ -504,9 +476,7 @@ function rangeLabel(value: ReplayRange, t: ReturnType<typeof useT>): string {
504
476
  function visitorLabel(
505
477
  recording: SessionRecordingIdentity,
506
478
  t: ReturnType<typeof useT>,
507
- demoModeEnabled: boolean,
508
479
  ): string {
509
- if (demoModeEnabled) return demoVisitorLabel(recording);
510
480
  const email = emailLike(recording.userId) || emailLike(recording.userKey);
511
481
  if (email) return email;
512
482
  return (
@@ -517,29 +487,6 @@ function visitorLabel(
517
487
  );
518
488
  }
519
489
 
520
- export function demoVisitorLabel(recording: SessionRecordingIdentity): string {
521
- const source =
522
- emailLike(recording.userId) ||
523
- emailLike(recording.userKey) ||
524
- recording.userId ||
525
- recording.userKey ||
526
- recording.anonymousId ||
527
- recording.sessionId ||
528
- recording.id;
529
- const hash = stableHash(source);
530
- const first = DEMO_FIRST_NAMES[hash % DEMO_FIRST_NAMES.length];
531
- const last =
532
- DEMO_LAST_NAMES[
533
- Math.floor(hash / DEMO_FIRST_NAMES.length) % DEMO_LAST_NAMES.length
534
- ];
535
- const domain =
536
- DEMO_DOMAINS[
537
- Math.floor(hash / (DEMO_FIRST_NAMES.length * DEMO_LAST_NAMES.length)) %
538
- DEMO_DOMAINS.length
539
- ];
540
- return `${first}.${last}@${domain}`.toLowerCase();
541
- }
542
-
543
490
  function emailLike(value: string | null): string | null {
544
491
  if (!value?.includes("@")) return null;
545
492
  return value;
@@ -667,53 +614,16 @@ function formatNumber(value: number): string {
667
614
  return new Intl.NumberFormat().format(value);
668
615
  }
669
616
 
670
- function stableHash(value: string): number {
671
- let hash = 2166136261;
672
- for (let i = 0; i < value.length; i += 1) {
673
- hash ^= value.charCodeAt(i);
674
- hash = Math.imul(hash, 16777619);
617
+ function formatPageCount(value: number, t: ReturnType<typeof useT>): string {
618
+ const count = Math.max(0, Math.round(value || 0));
619
+ if (count === 1) {
620
+ return t("sessions.pageCountCompactSingular", {
621
+ count: formatNumber(count),
622
+ });
675
623
  }
676
- return hash >>> 0;
624
+ return t("sessions.pageCountCompact", { count: formatNumber(count) });
677
625
  }
678
626
 
679
- const DEMO_FIRST_NAMES = [
680
- "Avery",
681
- "Blake",
682
- "Cameron",
683
- "Devon",
684
- "Emerson",
685
- "Finley",
686
- "Harper",
687
- "Jordan",
688
- "Morgan",
689
- "Quinn",
690
- "Riley",
691
- "Taylor",
692
- ];
693
-
694
- const DEMO_LAST_NAMES = [
695
- "Bennett",
696
- "Carter",
697
- "Ellis",
698
- "Hayes",
699
- "Keller",
700
- "Monroe",
701
- "Parker",
702
- "Reed",
703
- "Sullivan",
704
- "Walker",
705
- "Young",
706
- "Zimmer",
707
- ];
708
-
709
- const DEMO_DOMAINS = [
710
- "acme.test",
711
- "northstar.test",
712
- "orbit.test",
713
- "riverbank.test",
714
- "summit.test",
715
- ];
716
-
717
627
  const SESSION_REPLAY_SNIPPET = `// Agent Native templates already call configureTracking().
718
628
  import { configureTracking } from "@agent-native/core/client";
719
629