@agent-native/core 0.122.4 → 0.123.0

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 (1340) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +538 -0
  3. package/corpus/core/docs/content/actions.mdx +33 -20
  4. package/corpus/core/docs/content/agent-mentions.mdx +30 -19
  5. package/corpus/core/docs/content/agent-native-toolkit.mdx +8 -6
  6. package/corpus/core/docs/content/agent-resources.mdx +11 -0
  7. package/corpus/core/docs/content/agent-surfaces.mdx +41 -30
  8. package/corpus/core/docs/content/audit-log.mdx +78 -0
  9. package/corpus/core/docs/content/authentication.mdx +7 -5
  10. package/corpus/core/docs/content/automations.mdx +15 -9
  11. package/corpus/core/docs/content/client.mdx +11 -11
  12. package/corpus/core/docs/content/cloneable-saas.mdx +7 -1
  13. package/corpus/core/docs/content/code-agents-ui.mdx +9 -1
  14. package/corpus/core/docs/content/components.mdx +7 -0
  15. package/corpus/core/docs/content/context-awareness.mdx +1 -0
  16. package/corpus/core/docs/content/creating-templates.mdx +9 -1
  17. package/corpus/core/docs/content/custom-design-system.mdx +8 -0
  18. package/corpus/core/docs/content/data-programs.mdx +6 -0
  19. package/corpus/core/docs/content/deployment.mdx +2 -0
  20. package/corpus/core/docs/content/doctor.mdx +5 -3
  21. package/corpus/core/docs/content/extensions.mdx +26 -0
  22. package/corpus/core/docs/content/external-agents-catalog.mdx +533 -0
  23. package/corpus/core/docs/content/external-agents.mdx +20 -514
  24. package/corpus/core/docs/content/faq.mdx +2 -2
  25. package/corpus/core/docs/content/file-uploads.mdx +44 -0
  26. package/corpus/core/docs/content/frames.mdx +2 -2
  27. package/corpus/core/docs/content/generative-ui.mdx +8 -0
  28. package/corpus/core/docs/content/getting-started.mdx +45 -17
  29. package/corpus/core/docs/content/human-approval.mdx +9 -0
  30. package/corpus/core/docs/content/integrations.mdx +4 -3
  31. package/corpus/core/docs/content/internationalization.mdx +4 -11
  32. package/corpus/core/docs/content/key-concepts.mdx +1 -1
  33. package/corpus/core/docs/content/local-file-mode.mdx +5 -0
  34. package/corpus/core/docs/content/mcp-apps.mdx +2 -1
  35. package/corpus/core/docs/content/mcp-clients.mdx +32 -1
  36. package/corpus/core/docs/content/mcp-protocol.mdx +4 -3
  37. package/corpus/core/docs/content/messaging-internals.mdx +328 -0
  38. package/corpus/core/docs/content/messaging-recipes.mdx +194 -0
  39. package/corpus/core/docs/content/messaging.mdx +9 -307
  40. package/corpus/core/docs/content/multi-app-workspace.mdx +1 -1
  41. package/corpus/core/docs/content/multi-tenancy.mdx +1 -0
  42. package/corpus/core/docs/content/native-chat-ui.mdx +8 -0
  43. package/corpus/core/docs/content/notifications.mdx +18 -20
  44. package/corpus/core/docs/content/observability.mdx +1 -0
  45. package/corpus/core/docs/content/onboarding.mdx +20 -6
  46. package/corpus/core/docs/content/organizations-teams-permissions.mdx +99 -124
  47. package/corpus/core/docs/content/package-lifecycle.mdx +19 -7
  48. package/corpus/core/docs/content/progress.mdx +11 -0
  49. package/corpus/core/docs/content/real-time-collaboration.mdx +44 -3
  50. package/corpus/core/docs/content/recurring-jobs.mdx +14 -1
  51. package/corpus/core/docs/content/security.mdx +5 -2
  52. package/corpus/core/docs/content/server.mdx +2 -1
  53. package/corpus/core/docs/content/sharing.mdx +22 -3
  54. package/corpus/core/docs/content/skills-guide.mdx +62 -19
  55. package/corpus/core/docs/content/syncing-template-changes.mdx +9 -0
  56. package/corpus/core/docs/content/template-analytics-connectors.mdx +75 -0
  57. package/corpus/core/docs/content/template-analytics-dashboards.mdx +106 -0
  58. package/corpus/core/docs/content/template-analytics-developers.mdx +287 -0
  59. package/corpus/core/docs/content/template-analytics-monitoring-and-sessions.mdx +109 -0
  60. package/corpus/core/docs/content/template-analytics.mdx +21 -263
  61. package/corpus/core/docs/content/template-assets-developers.mdx +456 -0
  62. package/corpus/core/docs/content/template-assets-generation.mdx +147 -0
  63. package/corpus/core/docs/content/template-assets-integrations.mdx +319 -0
  64. package/corpus/core/docs/content/template-assets-presets.mdx +185 -0
  65. package/corpus/core/docs/content/template-assets.mdx +12 -562
  66. package/corpus/core/docs/content/template-brain-agent.mdx +103 -0
  67. package/corpus/core/docs/content/template-brain-developers.mdx +379 -0
  68. package/corpus/core/docs/content/template-brain-knowledge.mdx +50 -0
  69. package/corpus/core/docs/content/template-brain-sources.mdx +163 -0
  70. package/corpus/core/docs/content/template-brain.mdx +30 -390
  71. package/corpus/core/docs/content/template-calendar-agent.mdx +133 -0
  72. package/corpus/core/docs/content/template-calendar-booking-links.mdx +73 -0
  73. package/corpus/core/docs/content/template-calendar-developers.mdx +366 -0
  74. package/corpus/core/docs/content/template-calendar-scheduling.mdx +128 -0
  75. package/corpus/core/docs/content/template-calendar.mdx +13 -260
  76. package/corpus/core/docs/content/template-chat-developers.mdx +88 -0
  77. package/corpus/core/docs/content/template-chat-first-edits.mdx +145 -0
  78. package/corpus/core/docs/content/template-chat.mdx +12 -77
  79. package/corpus/core/docs/content/template-clips-ai-and-editing.mdx +114 -0
  80. package/corpus/core/docs/content/template-clips-capture-everywhere.mdx +120 -0
  81. package/corpus/core/docs/content/template-clips-developers.mdx +373 -0
  82. package/corpus/core/docs/content/template-clips-sharing-and-teams.mdx +182 -0
  83. package/corpus/core/docs/content/template-clips.mdx +19 -508
  84. package/corpus/core/docs/content/template-content-databases.mdx +406 -0
  85. package/corpus/core/docs/content/template-content-developers.mdx +364 -0
  86. package/corpus/core/docs/content/template-content-editing.mdx +60 -0
  87. package/corpus/core/docs/content/template-content-sync.mdx +149 -0
  88. package/corpus/core/docs/content/template-content.mdx +21 -561
  89. package/corpus/core/docs/content/template-design-brand-and-figma.mdx +150 -0
  90. package/corpus/core/docs/content/template-design-collaboration-and-full-apps.mdx +125 -0
  91. package/corpus/core/docs/content/template-design-developers.mdx +358 -0
  92. package/corpus/core/docs/content/template-design-quality-and-components.mdx +95 -0
  93. package/corpus/core/docs/content/template-design.mdx +20 -344
  94. package/corpus/core/docs/content/template-dispatch-developers.mdx +121 -0
  95. package/corpus/core/docs/content/template-dispatch-messaging-routing.mdx +114 -0
  96. package/corpus/core/docs/content/template-dispatch-operations.mdx +160 -0
  97. package/corpus/core/docs/content/template-dispatch-vault-integrations.mdx +316 -0
  98. package/corpus/core/docs/content/template-dispatch.mdx +24 -283
  99. package/corpus/core/docs/content/template-forms-building-publishing.mdx +135 -0
  100. package/corpus/core/docs/content/template-forms-developers.mdx +195 -0
  101. package/corpus/core/docs/content/template-forms-responses.mdx +120 -0
  102. package/corpus/core/docs/content/template-forms.mdx +21 -230
  103. package/corpus/core/docs/content/template-mail-agent.mdx +114 -0
  104. package/corpus/core/docs/content/template-mail-developers.mdx +356 -0
  105. package/corpus/core/docs/content/template-mail-drafts-and-queue.mdx +103 -0
  106. package/corpus/core/docs/content/template-mail-inbox.mdx +118 -0
  107. package/corpus/core/docs/content/template-mail.mdx +23 -274
  108. package/corpus/core/docs/content/template-plan-automations.mdx +213 -0
  109. package/corpus/core/docs/content/template-plan-developers.mdx +703 -0
  110. package/corpus/core/docs/content/template-plan-local-and-desktop.mdx +236 -0
  111. package/corpus/core/docs/content/template-plan-review-workflow.mdx +180 -0
  112. package/corpus/core/docs/content/template-plan.mdx +60 -910
  113. package/corpus/core/docs/content/template-slides-agent.mdx +102 -0
  114. package/corpus/core/docs/content/template-slides-design-and-media.mdx +94 -0
  115. package/corpus/core/docs/content/template-slides-developers.mdx +488 -0
  116. package/corpus/core/docs/content/template-slides-editing.mdx +56 -0
  117. package/corpus/core/docs/content/template-slides.mdx +20 -362
  118. package/corpus/core/docs/content/toolkit-capability-packages.mdx +38 -13
  119. package/corpus/core/docs/content/toolkit-context-knowledge.mdx +49 -9
  120. package/corpus/core/docs/content/toolkit-editors-canvases.mdx +72 -10
  121. package/corpus/core/docs/content/toolkit-resources.mdx +16 -0
  122. package/corpus/core/docs/content/toolkit-settings.mdx +3 -3
  123. package/corpus/core/docs/content/toolkit-sharing.mdx +5 -7
  124. package/corpus/core/docs/content/using-your-agent.mdx +25 -2
  125. package/corpus/core/docs/content/voice-input.mdx +11 -7
  126. package/corpus/core/docs/content/what-is-agent-native.mdx +1 -0
  127. package/corpus/core/docs/content/workspace-connections.mdx +21 -11
  128. package/corpus/core/docs/content/workspace-management.mdx +1 -1
  129. package/corpus/core/package.json +1 -3
  130. package/corpus/core/src/a2a/client.ts +4 -2
  131. package/corpus/core/src/agent/action-warnings.ts +103 -0
  132. package/corpus/core/src/agent/durable-background.ts +42 -5
  133. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +58 -6
  134. package/corpus/core/src/agent/engine/anthropic-engine.ts +51 -8
  135. package/corpus/core/src/agent/engine/builder-engine.ts +56 -18
  136. package/corpus/core/src/agent/engine/continuation-dispatch-retry.ts +10 -9
  137. package/corpus/core/src/agent/engine/credential-errors.ts +11 -0
  138. package/corpus/core/src/agent/engine/error-detail.ts +39 -0
  139. package/corpus/core/src/agent/engine/prompt-cache.ts +44 -0
  140. package/corpus/core/src/agent/engine/registry.ts +22 -30
  141. package/corpus/core/src/agent/engine/tool-call-journal-seed.ts +2 -1
  142. package/corpus/core/src/agent/engine/translate-anthropic.ts +99 -0
  143. package/corpus/core/src/agent/loop-settings.ts +94 -7
  144. package/corpus/core/src/agent/production-agent.ts +667 -157
  145. package/corpus/core/src/agent/run-loop-with-resume.ts +27 -1
  146. package/corpus/core/src/agent/run-manager.ts +229 -39
  147. package/corpus/core/src/agent/run-store.ts +397 -64
  148. package/corpus/core/src/agent/thread-data-builder.ts +5 -1
  149. package/corpus/core/src/agent/types.ts +23 -6
  150. package/corpus/core/src/application-state/script-helpers.ts +5 -2
  151. package/corpus/core/src/cli/agents.ts +69 -1
  152. package/corpus/core/src/cli/app-skill.ts +1 -1
  153. package/corpus/core/src/cli/code-agent-executor.ts +7 -3
  154. package/corpus/core/src/cli/design-connect.ts +82 -8
  155. package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +169 -24
  156. package/corpus/core/src/client/AssistantChat.tsx +623 -607
  157. package/corpus/core/src/client/agent-chat-adapter.ts +176 -29
  158. package/corpus/core/src/client/chat/message-components.tsx +13 -0
  159. package/corpus/core/src/client/embed-auth.ts +3 -1
  160. package/corpus/core/src/client/integrations/IntegrationCard.tsx +41 -24
  161. package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +37 -21
  162. package/corpus/core/src/client/integrations/webhook-url.ts +29 -0
  163. package/corpus/core/src/client/org/OrgSwitcher.tsx +41 -27
  164. package/corpus/core/src/client/org/RequireActiveOrg.tsx +7 -0
  165. package/corpus/core/src/client/org/TeamPage.tsx +144 -14
  166. package/corpus/core/src/client/org/hooks.ts +27 -0
  167. package/corpus/core/src/client/org/index.ts +2 -0
  168. package/corpus/core/src/client/require-session.tsx +40 -29
  169. package/corpus/core/src/client/session-replay.ts +1 -1
  170. package/corpus/core/src/client/settings/DemoModeSection.tsx +0 -5
  171. package/corpus/core/src/client/settings/SecretsSection.tsx +47 -42
  172. package/corpus/core/src/client/settings/VoiceTranscriptionSection.tsx +0 -5
  173. package/corpus/core/src/client/sse-event-processor.ts +83 -8
  174. package/corpus/core/src/client/use-action.ts +22 -13
  175. package/corpus/core/src/client/use-agent-engine-configured.ts +36 -4
  176. package/corpus/core/src/client/use-db-sync.ts +21 -1
  177. package/corpus/core/src/credentials/index.ts +124 -2
  178. package/corpus/core/src/deploy/build.ts +93 -30
  179. package/corpus/core/src/deploy/workspace-deploy.ts +21 -16
  180. package/corpus/core/src/guards/no-localhost-fallback.ts +76 -14
  181. package/corpus/core/src/integrations/google-docs-poller.ts +19 -12
  182. package/corpus/core/src/integrations/webhook-handler.ts +56 -33
  183. package/corpus/core/src/jobs/scheduler.ts +57 -23
  184. package/corpus/core/src/localization/default-messages.ts +23 -1
  185. package/corpus/core/src/observability/evals.ts +7 -8
  186. package/corpus/core/src/observability/traces.ts +2 -0
  187. package/corpus/core/src/org/accept-pending.ts +2 -2
  188. package/corpus/core/src/org/active-org.ts +73 -0
  189. package/corpus/core/src/org/auto-join-domain.ts +7 -2
  190. package/corpus/core/src/org/context.ts +169 -66
  191. package/corpus/core/src/org/handlers.ts +148 -10
  192. package/corpus/core/src/org/plugin.ts +8 -1
  193. package/corpus/core/src/org/types.ts +6 -1
  194. package/corpus/core/src/provider-api/index.ts +6 -1
  195. package/corpus/core/src/resources/handlers.ts +2 -6
  196. package/corpus/core/src/resources/script-helpers.ts +2 -1
  197. package/corpus/core/src/scripts/chat/search-chats.ts +5 -2
  198. package/corpus/core/src/scripts/describe-workspace-apps.ts +59 -0
  199. package/corpus/core/src/scripts/resources/delete-memory.ts +5 -2
  200. package/corpus/core/src/scripts/resources/delete.ts +5 -2
  201. package/corpus/core/src/scripts/resources/effective.ts +5 -2
  202. package/corpus/core/src/scripts/resources/list.ts +5 -2
  203. package/corpus/core/src/scripts/resources/read.ts +5 -2
  204. package/corpus/core/src/scripts/resources/save-memory.ts +5 -2
  205. package/corpus/core/src/scripts/resources/write.ts +5 -2
  206. package/corpus/core/src/server/agent-capabilities.ts +147 -0
  207. package/corpus/core/src/server/agent-chat/framework-prompts.ts +11 -13
  208. package/corpus/core/src/server/agent-chat/prompt-resources.ts +183 -57
  209. package/corpus/core/src/server/agent-chat/script-entries.ts +20 -7
  210. package/corpus/core/src/server/agent-chat-plugin.ts +27 -0
  211. package/corpus/core/src/server/auth.ts +38 -32
  212. package/corpus/core/src/server/core-routes-plugin.ts +229 -179
  213. package/corpus/core/src/server/credential-provider.ts +196 -44
  214. package/corpus/core/src/server/embed-session.ts +10 -0
  215. package/corpus/core/src/server/framework-request-handler.ts +43 -0
  216. package/corpus/core/src/server/google-auth-plugin.ts +13 -450
  217. package/corpus/core/src/server/index.ts +4 -1
  218. package/corpus/core/src/server/onboarding-html.ts +20 -56
  219. package/corpus/core/src/server/open-route.ts +6 -1
  220. package/corpus/core/src/server/poll.ts +1 -1
  221. package/corpus/core/src/server/prompts/framework-core-compact.ts +5 -5
  222. package/corpus/core/src/server/prompts/framework-core.ts +7 -9
  223. package/corpus/core/src/server/prompts/shared-rules.ts +20 -9
  224. package/corpus/core/src/server/request-context.ts +58 -2
  225. package/corpus/core/src/server/scoped-key-storage.ts +1 -1
  226. package/corpus/core/src/settings/org-settings.ts +9 -0
  227. package/corpus/core/src/settings/store.ts +29 -0
  228. package/corpus/core/src/shared/index.ts +13 -0
  229. package/corpus/core/src/shared/sign-in-journey.ts +331 -0
  230. package/corpus/core/src/styles/agent-native.css +8 -0
  231. package/corpus/core/src/templates/chat/.agents/skills/actions/SKILL.md +19 -1
  232. package/corpus/core/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
  233. package/corpus/core/src/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
  234. package/corpus/core/src/templates/chat/.agents/skills/security/SKILL.md +2 -0
  235. package/corpus/core/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
  236. package/corpus/core/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
  237. package/corpus/core/src/templates/chat/AGENTS.md +8 -0
  238. package/corpus/core/src/templates/chat/app/entry.client.tsx +3 -0
  239. package/corpus/core/src/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  240. package/corpus/core/src/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  241. package/corpus/core/src/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  242. package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +19 -1
  243. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
  244. package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
  245. package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +2 -0
  246. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
  247. package/corpus/core/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
  248. package/corpus/core/src/templates/default/AGENTS.md +68 -195
  249. package/corpus/core/src/templates/default/app/entry.client.tsx +3 -0
  250. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +8 -0
  251. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +8 -0
  252. package/corpus/core/src/templates/default/app/i18n/en-US.ts +8 -0
  253. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +8 -0
  254. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +8 -0
  255. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +8 -0
  256. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +8 -0
  257. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +8 -0
  258. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +8 -0
  259. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +8 -0
  260. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +8 -0
  261. package/corpus/core/src/templates/headless/.agents/skills/actions/SKILL.md +19 -1
  262. package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
  263. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
  264. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
  265. package/corpus/core/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
  266. package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
  267. package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
  268. package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
  269. package/corpus/core/src/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
  270. package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
  271. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
  272. package/corpus/core/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
  273. package/corpus/core/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
  274. package/corpus/core/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
  275. package/corpus/core/src/templates/workspace-core/AGENTS.md +62 -124
  276. package/corpus/core/src/templates/workspace-root/AGENTS.md +6 -1
  277. package/corpus/core/src/triggers/dispatcher.ts +28 -17
  278. package/corpus/core/src/vite/client.ts +20 -8
  279. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +19 -1
  280. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +41 -1
  281. package/corpus/templates/analytics/.agents/skills/dashboard-ops/SKILL.md +50 -22
  282. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +1 -1
  283. package/corpus/templates/analytics/.agents/skills/data-querying/references/inline-chart-embeds.md +8 -0
  284. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +20 -6
  285. package/corpus/templates/analytics/.agents/skills/security/SKILL.md +2 -0
  286. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +4 -3
  287. package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +7 -3
  288. package/corpus/templates/analytics/.agents/skills/sharing/SKILL.md +228 -0
  289. package/corpus/templates/analytics/.builder/skills/charts/SKILL.md +2 -2
  290. package/corpus/templates/analytics/actions/delete-dashboard-view.ts +24 -0
  291. package/corpus/templates/analytics/actions/delete-user-pref.ts +22 -0
  292. package/corpus/templates/analytics/actions/generate-chart.ts +8 -245
  293. package/corpus/templates/analytics/actions/get-theme.ts +27 -0
  294. package/corpus/templates/analytics/actions/get-user-pref.ts +22 -0
  295. package/corpus/templates/analytics/actions/list-dashboard-views.ts +25 -0
  296. package/corpus/templates/analytics/actions/save-dashboard-view.ts +33 -0
  297. package/corpus/templates/analytics/actions/set-theme.ts +22 -0
  298. package/corpus/templates/analytics/actions/set-user-pref.ts +24 -0
  299. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +134 -27
  300. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -9
  301. package/corpus/templates/analytics/app/components/layout/Layout.tsx +0 -17
  302. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +10 -5
  303. package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +22 -52
  304. package/corpus/templates/analytics/app/hooks/use-user-pref.ts +21 -31
  305. package/corpus/templates/analytics/app/i18n-data.ts +10 -0
  306. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +2 -1
  307. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dual-axis.ts +73 -0
  308. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +8 -27
  309. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/report-panel-window.ts +0 -57
  310. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +8 -0
  311. package/corpus/templates/analytics/app/root.tsx +0 -28
  312. package/corpus/templates/analytics/changelog/2026-07-26-error-issues-now-group-by-message-as-well-as-stack-frame-and.md +6 -0
  313. package/corpus/templates/analytics/changelog/2026-07-26-line-area-and-bar-dashboard-panels-can-plot-series-on-a-seco.md +6 -0
  314. package/corpus/templates/analytics/changelog/2026-07-26-scheduled-dashboard-email-reports-now-arrive-complete-and-re.md +6 -0
  315. package/corpus/templates/analytics/changelog/2026-07-26-session-replays-now-detect-rage-clicks-so-the-rage-click-fil.md +6 -0
  316. package/corpus/templates/analytics/docs/error-capture.md +8 -4
  317. package/corpus/templates/analytics/package.json +1 -2
  318. package/corpus/templates/analytics/scripts/preview-dashboard-report.ts +221 -0
  319. package/corpus/templates/analytics/server/jobs/dashboard-report.ts +39 -32
  320. package/corpus/templates/analytics/server/lib/dashboard-report-render.ts +1168 -0
  321. package/corpus/templates/analytics/server/lib/dashboard-report.ts +111 -1358
  322. package/corpus/templates/analytics/server/lib/error-capture.ts +32 -15
  323. package/corpus/templates/analytics/server/lib/report-chart-svg.ts +901 -0
  324. package/corpus/templates/analytics/server/lib/session-replay.ts +77 -1
  325. package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +3 -4
  326. package/corpus/templates/assets/.agents/skills/a2a-assets/SKILL.md +28 -0
  327. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +19 -1
  328. package/corpus/templates/assets/.agents/skills/assets-navigation/SKILL.md +46 -0
  329. package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +12 -0
  330. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +20 -6
  331. package/corpus/templates/assets/.agents/skills/image-generation/SKILL.md +28 -0
  332. package/corpus/templates/assets/.agents/skills/library-management/SKILL.md +9 -0
  333. package/corpus/templates/assets/.agents/skills/logo-composite/SKILL.md +11 -0
  334. package/corpus/templates/assets/.agents/skills/security/SKILL.md +2 -0
  335. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +4 -3
  336. package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +7 -3
  337. package/corpus/templates/assets/.agents/skills/sharing/SKILL.md +228 -0
  338. package/corpus/templates/assets/AGENTS.md +58 -125
  339. package/corpus/templates/assets/actions/variant-slots.ts +8 -4
  340. package/corpus/templates/assets/app/entry.client.tsx +3 -0
  341. package/corpus/templates/assets/package.json +0 -2
  342. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +19 -1
  343. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +2 -0
  344. package/corpus/templates/brain/.agents/skills/brain/SKILL.md +78 -4
  345. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +20 -6
  346. package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +15 -3
  347. package/corpus/templates/brain/.agents/skills/security/SKILL.md +2 -0
  348. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +4 -3
  349. package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +7 -3
  350. package/corpus/templates/brain/.agents/skills/sharing/SKILL.md +228 -0
  351. package/corpus/templates/brain/.agents/skills/storing-data/SKILL.md +178 -0
  352. package/corpus/templates/brain/AGENTS.md +73 -119
  353. package/corpus/templates/brain/app/entry.client.tsx +3 -0
  354. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +19 -1
  355. package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +56 -3
  356. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +20 -6
  357. package/corpus/templates/calendar/.agents/skills/security/SKILL.md +2 -0
  358. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +4 -3
  359. package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +7 -3
  360. package/corpus/templates/calendar/.agents/skills/sharing/SKILL.md +228 -0
  361. package/corpus/templates/calendar/AGENTS.md +22 -45
  362. package/corpus/templates/calendar/app/entry.client.tsx +3 -0
  363. package/corpus/templates/calendar/server/handlers/events.ts +0 -364
  364. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +19 -1
  365. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
  366. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
  367. package/corpus/templates/chat/.agents/skills/security/SKILL.md +2 -0
  368. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
  369. package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
  370. package/corpus/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
  371. package/corpus/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
  372. package/corpus/templates/chat/AGENTS.md +8 -0
  373. package/corpus/templates/chat/app/entry.client.tsx +3 -0
  374. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +19 -1
  375. package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +42 -0
  376. package/corpus/templates/clips/.agents/skills/brain-export/SKILL.md +59 -0
  377. package/corpus/templates/clips/.agents/skills/bug-reports/SKILL.md +37 -0
  378. package/corpus/templates/clips/.agents/skills/crm-call-evidence/SKILL.md +41 -0
  379. package/corpus/templates/clips/.agents/skills/dictate/SKILL.md +4 -0
  380. package/corpus/templates/clips/.agents/skills/external-integrations/SKILL.md +45 -0
  381. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +20 -6
  382. package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +9 -0
  383. package/corpus/templates/clips/.agents/skills/recording/SKILL.md +45 -0
  384. package/corpus/templates/clips/.agents/skills/screen-memory/SKILL.md +43 -0
  385. package/corpus/templates/clips/.agents/skills/security/SKILL.md +2 -0
  386. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +4 -3
  387. package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +7 -3
  388. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +38 -1
  389. package/corpus/templates/clips/AGENTS.md +82 -224
  390. package/corpus/templates/clips/actions/create-recording.ts +4 -0
  391. package/corpus/templates/clips/app/components/player/sign-in-prompt-dialog.tsx +6 -10
  392. package/corpus/templates/clips/app/routes/invite.$token.tsx +6 -5
  393. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +4 -5
  394. package/corpus/templates/clips/app/routes/share.$shareId.tsx +8 -8
  395. package/corpus/templates/clips/changelog/2026-07-26-long-agent-chat-turns-now-finish-instead-of-stopping-partway.md +6 -0
  396. package/corpus/templates/clips/changelog/2026-07-26-recordings-no-longer-get-stuck-on-uploading-uploads-now-hold.md +6 -0
  397. package/corpus/templates/clips/server/db/schema.ts +3 -0
  398. package/corpus/templates/clips/server/jobs/brain-export.ts +4 -0
  399. package/corpus/templates/clips/server/lib/recording-upload-state.ts +0 -52
  400. package/corpus/templates/clips/server/lib/upload-lease.ts +241 -0
  401. package/corpus/templates/clips/server/plugins/agent-chat.ts +4 -0
  402. package/corpus/templates/clips/server/plugins/db.ts +18 -347
  403. package/corpus/templates/clips/server/routes/api/clips/brain-export/run.post.ts +7 -1
  404. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +123 -126
  405. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/reset-chunks.post.ts +4 -0
  406. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/resume.get.ts +118 -0
  407. package/corpus/templates/clips/server/routes/api/uploads/reap.post.ts +69 -0
  408. package/corpus/templates/content/.agents/skills/actions/SKILL.md +19 -1
  409. package/corpus/templates/content/.agents/skills/content/SKILL.md +4 -0
  410. package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +8 -0
  411. package/corpus/templates/content/.agents/skills/document-editing/SKILL.md +55 -0
  412. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +20 -6
  413. package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +12 -1
  414. package/corpus/templates/content/.agents/skills/security/SKILL.md +2 -0
  415. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +4 -3
  416. package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +7 -3
  417. package/corpus/templates/content/.agents/skills/sharing/SKILL.md +228 -0
  418. package/corpus/templates/content/AGENTS.md +63 -131
  419. package/corpus/templates/content/app/routes/_app.tsx +4 -4
  420. package/corpus/templates/content/server/routes/api/notion/callback.get.ts +6 -24
  421. package/corpus/templates/design/.agents/skills/actions/SKILL.md +19 -1
  422. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +16 -0
  423. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +15 -0
  424. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +20 -6
  425. package/corpus/templates/design/.agents/skills/full-app-build/SKILL.md +12 -0
  426. package/corpus/templates/design/.agents/skills/security/SKILL.md +2 -0
  427. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +4 -3
  428. package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +7 -3
  429. package/corpus/templates/design/.agents/skills/sharing/SKILL.md +228 -0
  430. package/corpus/templates/design/.agents/skills/storing-data/SKILL.md +178 -0
  431. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +201 -102
  432. package/corpus/templates/design/AGENTS.md +58 -71
  433. package/corpus/templates/design/actions/open-visual-edit.ts +111 -2
  434. package/corpus/templates/design/app/components/design/AddLocalhostScreenDialog.tsx +236 -0
  435. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +1 -1
  436. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +2 -2
  437. package/corpus/templates/design/app/entry.client.tsx +3 -0
  438. package/corpus/templates/design/app/i18n-data.ts +180 -0
  439. package/corpus/templates/design/app/pages/Present.tsx +6 -9
  440. package/corpus/templates/design/app/pages/VisualEdit.tsx +4 -7
  441. package/corpus/templates/design/app/pages/design-editor/design-data-geometry-utils.ts +20 -0
  442. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +19 -1
  443. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +20 -6
  444. package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +2 -0
  445. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +4 -3
  446. package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +7 -3
  447. package/corpus/templates/dispatch/.agents/skills/sharing/SKILL.md +228 -0
  448. package/corpus/templates/dispatch/.agents/skills/storing-data/SKILL.md +178 -0
  449. package/corpus/templates/dispatch/app/entry.client.tsx +3 -0
  450. package/corpus/templates/dispatch/server/plugins/identity-sso.ts +27 -16
  451. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +19 -1
  452. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +20 -6
  453. package/corpus/templates/forms/.agents/skills/security/SKILL.md +2 -0
  454. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +4 -3
  455. package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +7 -3
  456. package/corpus/templates/forms/.agents/skills/sharing/SKILL.md +228 -0
  457. package/corpus/templates/forms/DEVELOPING.md +1 -1
  458. package/corpus/templates/forms/app/entry.client.tsx +3 -0
  459. package/corpus/templates/forms/app/pages/FormsListPage.tsx +3 -5
  460. package/corpus/templates/forms/app/routes/_app.tsx +4 -4
  461. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +20 -6
  462. package/corpus/templates/macros/.agents/skills/security/SKILL.md +2 -0
  463. package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +7 -3
  464. package/corpus/templates/macros/.agents/skills/sharing/SKILL.md +228 -0
  465. package/corpus/templates/macros/.agents/skills/storing-data/SKILL.md +178 -0
  466. package/corpus/templates/macros/app/entry.client.tsx +3 -0
  467. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +19 -1
  468. package/corpus/templates/mail/.agents/skills/contacts-and-crm/SKILL.md +10 -0
  469. package/corpus/templates/mail/.agents/skills/draft-queue/SKILL.md +3 -0
  470. package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +26 -2
  471. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +20 -6
  472. package/corpus/templates/mail/.agents/skills/inbox-automations/SKILL.md +37 -0
  473. package/corpus/templates/mail/.agents/skills/inbox-reads-and-triage/SKILL.md +58 -0
  474. package/corpus/templates/mail/.agents/skills/mail-backends/SKILL.md +33 -0
  475. package/corpus/templates/mail/.agents/skills/provider-api-scans/SKILL.md +39 -0
  476. package/corpus/templates/mail/.agents/skills/security/SKILL.md +2 -0
  477. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +4 -3
  478. package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +7 -3
  479. package/corpus/templates/mail/.agents/skills/sharing/SKILL.md +228 -0
  480. package/corpus/templates/mail/AGENTS.md +74 -143
  481. package/corpus/templates/mail/actions/create-alias.ts +36 -0
  482. package/corpus/templates/mail/actions/create-automation.ts +28 -0
  483. package/corpus/templates/mail/actions/create-scheduled-job.ts +45 -0
  484. package/corpus/templates/mail/actions/delete-alias.ts +26 -0
  485. package/corpus/templates/mail/actions/delete-automation.ts +21 -0
  486. package/corpus/templates/mail/actions/get-automation-settings.ts +32 -0
  487. package/corpus/templates/mail/actions/get-mail-preferences.ts +18 -0
  488. package/corpus/templates/mail/actions/list-aliases.ts +17 -0
  489. package/corpus/templates/mail/actions/list-automations.ts +18 -0
  490. package/corpus/templates/mail/actions/list-scheduled-jobs.ts +18 -0
  491. package/corpus/templates/mail/actions/update-alias.ts +37 -0
  492. package/corpus/templates/mail/actions/update-automation-settings.ts +33 -0
  493. package/corpus/templates/mail/actions/update-automation.ts +33 -0
  494. package/corpus/templates/mail/actions/update-mail-preferences.ts +68 -0
  495. package/corpus/templates/mail/actions/update-scheduled-job.ts +25 -0
  496. package/corpus/templates/mail/app/entry.client.tsx +3 -0
  497. package/corpus/templates/mail/app/hooks/use-aliases.ts +6 -36
  498. package/corpus/templates/mail/app/hooks/use-automations.ts +9 -16
  499. package/corpus/templates/mail/app/hooks/use-emails.ts +6 -5
  500. package/corpus/templates/mail/app/hooks/use-scheduled-jobs.ts +12 -15
  501. package/corpus/templates/mail/app/pages/SettingsPage.tsx +15 -9
  502. package/corpus/templates/mail/server/handlers/automations.ts +5 -142
  503. package/corpus/templates/mail/server/handlers/emails.ts +1 -56
  504. package/corpus/templates/mail/server/handlers/scheduled-jobs.ts +0 -134
  505. package/corpus/templates/mail/server/lib/aliases.ts +18 -0
  506. package/corpus/templates/mail/server/lib/automations.ts +104 -0
  507. package/corpus/templates/mail/server/lib/jobs.ts +34 -0
  508. package/corpus/templates/mail/server/lib/mail-settings.ts +43 -0
  509. package/corpus/templates/mail/shared/automation-schema.ts +10 -0
  510. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +19 -1
  511. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +2 -0
  512. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +20 -6
  513. package/corpus/templates/plan/.agents/skills/plan-authoring-flow/SKILL.md +98 -0
  514. package/corpus/templates/plan/.agents/skills/plan-browser-editing/SKILL.md +42 -0
  515. package/corpus/templates/plan/.agents/skills/plan-comments-and-feedback/SKILL.md +68 -0
  516. package/corpus/templates/plan/.agents/skills/plan-events/SKILL.md +22 -0
  517. package/corpus/templates/plan/.agents/skills/plan-hosted-writes/SKILL.md +42 -0
  518. package/corpus/templates/plan/.agents/skills/plan-local-codebase-chat/SKILL.md +38 -0
  519. package/corpus/templates/plan/.agents/skills/plan-review-recaps/SKILL.md +25 -0
  520. package/corpus/templates/plan/.agents/skills/plan-source-sync/SKILL.md +68 -0
  521. package/corpus/templates/plan/.agents/skills/plan-version-history/SKILL.md +25 -0
  522. package/corpus/templates/plan/.agents/skills/security/SKILL.md +2 -0
  523. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +4 -3
  524. package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +7 -3
  525. package/corpus/templates/plan/.agents/skills/sharing/SKILL.md +228 -0
  526. package/corpus/templates/plan/.agents/skills/storing-data/SKILL.md +178 -0
  527. package/corpus/templates/plan/AGENTS.md +64 -296
  528. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +9 -8
  529. package/corpus/templates/plan/app/pages/PlansPage.tsx +5 -10
  530. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +19 -1
  531. package/corpus/templates/slides/.agents/skills/deck-management/SKILL.md +7 -7
  532. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +20 -6
  533. package/corpus/templates/slides/.agents/skills/security/SKILL.md +2 -0
  534. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +4 -3
  535. package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +7 -3
  536. package/corpus/templates/slides/.agents/skills/sharing/SKILL.md +228 -0
  537. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +3 -2
  538. package/corpus/templates/slides/.agents/skills/storing-data/SKILL.md +178 -0
  539. package/corpus/templates/slides/DEVELOPING.md +3 -3
  540. package/corpus/templates/slides/actions/_deck-write.ts +52 -0
  541. package/corpus/templates/slides/actions/add-deck.ts +73 -0
  542. package/corpus/templates/slides/actions/delete-deck.ts +60 -0
  543. package/corpus/templates/slides/actions/get-deck.ts +3 -1
  544. package/corpus/templates/slides/actions/save-deck.ts +144 -0
  545. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +27 -20
  546. package/corpus/templates/slides/app/context/DeckContext.tsx +173 -100
  547. package/corpus/templates/slides/app/pages/Index.tsx +3 -6
  548. package/corpus/templates/slides/app/routes/slide.tsx +16 -12
  549. package/corpus/templates/slides/changelog/2026-07-26-a-newly-created-deck-now-appears-in-the-deck-list-right-away.md +6 -0
  550. package/corpus/templates/slides/server/handlers/decks.ts +2 -378
  551. package/corpus/templates/tasks/.agents/skills/action-reference/SKILL.md +47 -0
  552. package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +19 -1
  553. package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +2 -0
  554. package/corpus/templates/tasks/.agents/skills/change-summary/SKILL.md +19 -1
  555. package/corpus/templates/tasks/.agents/skills/custom-fields/SKILL.md +63 -0
  556. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +20 -6
  557. package/corpus/templates/tasks/.agents/skills/security/SKILL.md +2 -0
  558. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +4 -3
  559. package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +7 -3
  560. package/corpus/templates/tasks/.agents/skills/sharing/SKILL.md +228 -0
  561. package/corpus/templates/tasks/.agents/skills/store-conventions/SKILL.md +45 -0
  562. package/corpus/templates/tasks/.agents/skills/storing-data/SKILL.md +178 -0
  563. package/corpus/templates/tasks/.agents/skills/task-inbox-workflow/SKILL.md +66 -0
  564. package/corpus/templates/tasks/AGENTS.md +48 -113
  565. package/corpus/templates/tasks/app/entry.client.tsx +3 -0
  566. package/corpus/toolkit/CHANGELOG.md +12 -0
  567. package/corpus/toolkit/package.json +1 -1
  568. package/corpus/toolkit/src/composer/PromptComposer.tsx +23 -20
  569. package/dist/a2a/client.d.ts +3 -1
  570. package/dist/a2a/client.d.ts.map +1 -1
  571. package/dist/a2a/client.js +4 -2
  572. package/dist/a2a/client.js.map +1 -1
  573. package/dist/agent/action-warnings.d.ts +27 -0
  574. package/dist/agent/action-warnings.d.ts.map +1 -0
  575. package/dist/agent/action-warnings.js +73 -0
  576. package/dist/agent/action-warnings.js.map +1 -0
  577. package/dist/agent/durable-background.d.ts +8 -0
  578. package/dist/agent/durable-background.d.ts.map +1 -1
  579. package/dist/agent/durable-background.js +37 -5
  580. package/dist/agent/durable-background.js.map +1 -1
  581. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  582. package/dist/agent/engine/ai-sdk-engine.js +47 -6
  583. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  584. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  585. package/dist/agent/engine/anthropic-engine.js +41 -9
  586. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  587. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  588. package/dist/agent/engine/builder-engine.js +46 -19
  589. package/dist/agent/engine/builder-engine.js.map +1 -1
  590. package/dist/agent/engine/continuation-dispatch-retry.d.ts.map +1 -1
  591. package/dist/agent/engine/continuation-dispatch-retry.js +11 -9
  592. package/dist/agent/engine/continuation-dispatch-retry.js.map +1 -1
  593. package/dist/agent/engine/credential-errors.d.ts +6 -0
  594. package/dist/agent/engine/credential-errors.d.ts.map +1 -1
  595. package/dist/agent/engine/credential-errors.js +10 -0
  596. package/dist/agent/engine/credential-errors.js.map +1 -1
  597. package/dist/agent/engine/error-detail.d.ts +2 -0
  598. package/dist/agent/engine/error-detail.d.ts.map +1 -0
  599. package/dist/agent/engine/error-detail.js +37 -0
  600. package/dist/agent/engine/error-detail.js.map +1 -0
  601. package/dist/agent/engine/prompt-cache.d.ts +34 -0
  602. package/dist/agent/engine/prompt-cache.d.ts.map +1 -0
  603. package/dist/agent/engine/prompt-cache.js +39 -0
  604. package/dist/agent/engine/prompt-cache.js.map +1 -0
  605. package/dist/agent/engine/registry.d.ts.map +1 -1
  606. package/dist/agent/engine/registry.js +23 -33
  607. package/dist/agent/engine/registry.js.map +1 -1
  608. package/dist/agent/engine/tool-call-journal-seed.d.ts +1 -1
  609. package/dist/agent/engine/tool-call-journal-seed.d.ts.map +1 -1
  610. package/dist/agent/engine/tool-call-journal-seed.js +2 -2
  611. package/dist/agent/engine/tool-call-journal-seed.js.map +1 -1
  612. package/dist/agent/engine/translate-anthropic.d.ts +28 -0
  613. package/dist/agent/engine/translate-anthropic.d.ts.map +1 -1
  614. package/dist/agent/engine/translate-anthropic.js +75 -0
  615. package/dist/agent/engine/translate-anthropic.js.map +1 -1
  616. package/dist/agent/loop-settings.d.ts +35 -2
  617. package/dist/agent/loop-settings.d.ts.map +1 -1
  618. package/dist/agent/loop-settings.js +71 -8
  619. package/dist/agent/loop-settings.js.map +1 -1
  620. package/dist/agent/production-agent.d.ts +105 -20
  621. package/dist/agent/production-agent.d.ts.map +1 -1
  622. package/dist/agent/production-agent.js +516 -123
  623. package/dist/agent/production-agent.js.map +1 -1
  624. package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
  625. package/dist/agent/run-loop-with-resume.js +24 -2
  626. package/dist/agent/run-loop-with-resume.js.map +1 -1
  627. package/dist/agent/run-manager.d.ts +52 -9
  628. package/dist/agent/run-manager.d.ts.map +1 -1
  629. package/dist/agent/run-manager.js +191 -36
  630. package/dist/agent/run-manager.js.map +1 -1
  631. package/dist/agent/run-store.d.ts +87 -14
  632. package/dist/agent/run-store.d.ts.map +1 -1
  633. package/dist/agent/run-store.js +331 -59
  634. package/dist/agent/run-store.js.map +1 -1
  635. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  636. package/dist/agent/thread-data-builder.js +6 -1
  637. package/dist/agent/thread-data-builder.js.map +1 -1
  638. package/dist/agent/types.d.ts +18 -6
  639. package/dist/agent/types.d.ts.map +1 -1
  640. package/dist/agent/types.js +9 -5
  641. package/dist/agent/types.js.map +1 -1
  642. package/dist/application-state/script-helpers.d.ts.map +1 -1
  643. package/dist/application-state/script-helpers.js +2 -2
  644. package/dist/application-state/script-helpers.js.map +1 -1
  645. package/dist/cli/agents.d.ts +2 -0
  646. package/dist/cli/agents.d.ts.map +1 -1
  647. package/dist/cli/agents.js +48 -1
  648. package/dist/cli/agents.js.map +1 -1
  649. package/dist/cli/app-skill.js +1 -1
  650. package/dist/cli/app-skill.js.map +1 -1
  651. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  652. package/dist/cli/code-agent-executor.js +3 -3
  653. package/dist/cli/code-agent-executor.js.map +1 -1
  654. package/dist/cli/design-connect.d.ts.map +1 -1
  655. package/dist/cli/design-connect.js +73 -8
  656. package/dist/cli/design-connect.js.map +1 -1
  657. package/dist/cli/skills-content/design-visual-edit-skill.d.ts +1 -1
  658. package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -1
  659. package/dist/cli/skills-content/design-visual-edit-skill.js +169 -24
  660. package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -1
  661. package/dist/client/AssistantChat.d.ts.map +1 -1
  662. package/dist/client/AssistantChat.js +135 -125
  663. package/dist/client/AssistantChat.js.map +1 -1
  664. package/dist/client/agent-chat-adapter.d.ts +17 -0
  665. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  666. package/dist/client/agent-chat-adapter.js +141 -31
  667. package/dist/client/agent-chat-adapter.js.map +1 -1
  668. package/dist/client/chat/message-components.d.ts +9 -1
  669. package/dist/client/chat/message-components.d.ts.map +1 -1
  670. package/dist/client/chat/message-components.js +12 -1
  671. package/dist/client/chat/message-components.js.map +1 -1
  672. package/dist/client/embed-auth.d.ts.map +1 -1
  673. package/dist/client/embed-auth.js +3 -1
  674. package/dist/client/embed-auth.js.map +1 -1
  675. package/dist/client/integrations/IntegrationCard.d.ts.map +1 -1
  676. package/dist/client/integrations/IntegrationCard.js +9 -4
  677. package/dist/client/integrations/IntegrationCard.js.map +1 -1
  678. package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
  679. package/dist/client/integrations/IntegrationsPanel.js +13 -7
  680. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  681. package/dist/client/integrations/webhook-url.d.ts +7 -0
  682. package/dist/client/integrations/webhook-url.d.ts.map +1 -0
  683. package/dist/client/integrations/webhook-url.js +32 -0
  684. package/dist/client/integrations/webhook-url.js.map +1 -0
  685. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  686. package/dist/client/org/OrgSwitcher.js +13 -11
  687. package/dist/client/org/OrgSwitcher.js.map +1 -1
  688. package/dist/client/org/RequireActiveOrg.d.ts.map +1 -1
  689. package/dist/client/org/RequireActiveOrg.js +2 -2
  690. package/dist/client/org/RequireActiveOrg.js.map +1 -1
  691. package/dist/client/org/TeamPage.d.ts.map +1 -1
  692. package/dist/client/org/TeamPage.js +52 -13
  693. package/dist/client/org/TeamPage.js.map +1 -1
  694. package/dist/client/org/hooks.d.ts +9 -0
  695. package/dist/client/org/hooks.d.ts.map +1 -1
  696. package/dist/client/org/hooks.js +24 -0
  697. package/dist/client/org/hooks.js.map +1 -1
  698. package/dist/client/org/index.d.ts +1 -1
  699. package/dist/client/org/index.d.ts.map +1 -1
  700. package/dist/client/org/index.js +1 -1
  701. package/dist/client/org/index.js.map +1 -1
  702. package/dist/client/require-session.d.ts +12 -17
  703. package/dist/client/require-session.d.ts.map +1 -1
  704. package/dist/client/require-session.js +36 -23
  705. package/dist/client/require-session.js.map +1 -1
  706. package/dist/client/session-replay.js +1 -1
  707. package/dist/client/session-replay.js.map +1 -1
  708. package/dist/client/settings/DemoModeSection.d.ts +0 -1
  709. package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
  710. package/dist/client/settings/DemoModeSection.js +0 -4
  711. package/dist/client/settings/DemoModeSection.js.map +1 -1
  712. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  713. package/dist/client/settings/SecretsSection.js +12 -8
  714. package/dist/client/settings/SecretsSection.js.map +1 -1
  715. package/dist/client/settings/VoiceTranscriptionSection.d.ts +0 -1
  716. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  717. package/dist/client/settings/VoiceTranscriptionSection.js +1 -4
  718. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  719. package/dist/client/sse-event-processor.d.ts +33 -1
  720. package/dist/client/sse-event-processor.d.ts.map +1 -1
  721. package/dist/client/sse-event-processor.js +83 -8
  722. package/dist/client/sse-event-processor.js.map +1 -1
  723. package/dist/client/use-action.d.ts.map +1 -1
  724. package/dist/client/use-action.js +23 -14
  725. package/dist/client/use-action.js.map +1 -1
  726. package/dist/client/use-agent-engine-configured.d.ts +9 -3
  727. package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
  728. package/dist/client/use-agent-engine-configured.js +30 -3
  729. package/dist/client/use-agent-engine-configured.js.map +1 -1
  730. package/dist/client/use-db-sync.d.ts +3 -0
  731. package/dist/client/use-db-sync.d.ts.map +1 -1
  732. package/dist/client/use-db-sync.js +18 -1
  733. package/dist/client/use-db-sync.js.map +1 -1
  734. package/dist/collab/awareness.d.ts +2 -2
  735. package/dist/collab/awareness.d.ts.map +1 -1
  736. package/dist/collab/routes.d.ts +1 -1
  737. package/dist/credentials/index.d.ts +29 -1
  738. package/dist/credentials/index.d.ts.map +1 -1
  739. package/dist/credentials/index.js +111 -2
  740. package/dist/credentials/index.js.map +1 -1
  741. package/dist/deploy/build.d.ts +14 -3
  742. package/dist/deploy/build.d.ts.map +1 -1
  743. package/dist/deploy/build.js +81 -24
  744. package/dist/deploy/build.js.map +1 -1
  745. package/dist/deploy/workspace-deploy.d.ts +15 -0
  746. package/dist/deploy/workspace-deploy.d.ts.map +1 -1
  747. package/dist/deploy/workspace-deploy.js +19 -18
  748. package/dist/deploy/workspace-deploy.js.map +1 -1
  749. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  750. package/dist/guards/no-localhost-fallback.d.ts +7 -0
  751. package/dist/guards/no-localhost-fallback.d.ts.map +1 -1
  752. package/dist/guards/no-localhost-fallback.js +75 -16
  753. package/dist/guards/no-localhost-fallback.js.map +1 -1
  754. package/dist/integrations/google-docs-poller.d.ts.map +1 -1
  755. package/dist/integrations/google-docs-poller.js +8 -3
  756. package/dist/integrations/google-docs-poller.js.map +1 -1
  757. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  758. package/dist/integrations/webhook-handler.js +22 -4
  759. package/dist/integrations/webhook-handler.js.map +1 -1
  760. package/dist/jobs/scheduler.d.ts +17 -0
  761. package/dist/jobs/scheduler.d.ts.map +1 -1
  762. package/dist/jobs/scheduler.js +60 -33
  763. package/dist/jobs/scheduler.js.map +1 -1
  764. package/dist/localization/default-messages.d.ts +17 -1
  765. package/dist/localization/default-messages.d.ts.map +1 -1
  766. package/dist/localization/default-messages.js +17 -1
  767. package/dist/localization/default-messages.js.map +1 -1
  768. package/dist/notifications/routes.d.ts +1 -1
  769. package/dist/observability/evals.d.ts.map +1 -1
  770. package/dist/observability/evals.js +7 -10
  771. package/dist/observability/evals.js.map +1 -1
  772. package/dist/observability/routes.d.ts +1 -1
  773. package/dist/observability/traces.d.ts +2 -0
  774. package/dist/observability/traces.d.ts.map +1 -1
  775. package/dist/observability/traces.js.map +1 -1
  776. package/dist/org/accept-pending.js +2 -2
  777. package/dist/org/accept-pending.js.map +1 -1
  778. package/dist/org/active-org.d.ts +16 -0
  779. package/dist/org/active-org.d.ts.map +1 -0
  780. package/dist/org/active-org.js +57 -0
  781. package/dist/org/active-org.js.map +1 -0
  782. package/dist/org/auto-join-domain.d.ts.map +1 -1
  783. package/dist/org/auto-join-domain.js +3 -2
  784. package/dist/org/auto-join-domain.js.map +1 -1
  785. package/dist/org/context.d.ts +19 -1
  786. package/dist/org/context.d.ts.map +1 -1
  787. package/dist/org/context.js +159 -71
  788. package/dist/org/context.js.map +1 -1
  789. package/dist/org/handlers.d.ts +24 -1
  790. package/dist/org/handlers.d.ts.map +1 -1
  791. package/dist/org/handlers.js +129 -10
  792. package/dist/org/handlers.js.map +1 -1
  793. package/dist/org/plugin.d.ts +2 -0
  794. package/dist/org/plugin.d.ts.map +1 -1
  795. package/dist/org/plugin.js +9 -2
  796. package/dist/org/plugin.js.map +1 -1
  797. package/dist/org/types.d.ts +6 -1
  798. package/dist/org/types.d.ts.map +1 -1
  799. package/dist/org/types.js.map +1 -1
  800. package/dist/progress/routes.d.ts +1 -1
  801. package/dist/provider-api/actions/custom-provider-registration.d.ts +9 -9
  802. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  803. package/dist/provider-api/index.d.ts.map +1 -1
  804. package/dist/provider-api/index.js +3 -2
  805. package/dist/provider-api/index.js.map +1 -1
  806. package/dist/resources/handlers.d.ts.map +1 -1
  807. package/dist/resources/handlers.js +2 -7
  808. package/dist/resources/handlers.js.map +1 -1
  809. package/dist/resources/script-helpers.d.ts.map +1 -1
  810. package/dist/resources/script-helpers.js +2 -2
  811. package/dist/resources/script-helpers.js.map +1 -1
  812. package/dist/scripts/chat/search-chats.d.ts.map +1 -1
  813. package/dist/scripts/chat/search-chats.js +2 -2
  814. package/dist/scripts/chat/search-chats.js.map +1 -1
  815. package/dist/scripts/describe-workspace-apps.d.ts +4 -0
  816. package/dist/scripts/describe-workspace-apps.d.ts.map +1 -0
  817. package/dist/scripts/describe-workspace-apps.js +34 -0
  818. package/dist/scripts/describe-workspace-apps.js.map +1 -0
  819. package/dist/scripts/resources/delete-memory.d.ts.map +1 -1
  820. package/dist/scripts/resources/delete-memory.js +2 -2
  821. package/dist/scripts/resources/delete-memory.js.map +1 -1
  822. package/dist/scripts/resources/delete.d.ts.map +1 -1
  823. package/dist/scripts/resources/delete.js +2 -2
  824. package/dist/scripts/resources/delete.js.map +1 -1
  825. package/dist/scripts/resources/effective.d.ts.map +1 -1
  826. package/dist/scripts/resources/effective.js +2 -2
  827. package/dist/scripts/resources/effective.js.map +1 -1
  828. package/dist/scripts/resources/list.d.ts.map +1 -1
  829. package/dist/scripts/resources/list.js +2 -2
  830. package/dist/scripts/resources/list.js.map +1 -1
  831. package/dist/scripts/resources/read.d.ts.map +1 -1
  832. package/dist/scripts/resources/read.js +2 -2
  833. package/dist/scripts/resources/read.js.map +1 -1
  834. package/dist/scripts/resources/save-memory.d.ts.map +1 -1
  835. package/dist/scripts/resources/save-memory.js +2 -2
  836. package/dist/scripts/resources/save-memory.js.map +1 -1
  837. package/dist/scripts/resources/write.d.ts.map +1 -1
  838. package/dist/scripts/resources/write.js +2 -2
  839. package/dist/scripts/resources/write.js.map +1 -1
  840. package/dist/secrets/routes.d.ts +9 -9
  841. package/dist/server/agent-capabilities.d.ts +21 -0
  842. package/dist/server/agent-capabilities.d.ts.map +1 -0
  843. package/dist/server/agent-capabilities.js +106 -0
  844. package/dist/server/agent-capabilities.js.map +1 -0
  845. package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
  846. package/dist/server/agent-chat/framework-prompts.js +11 -13
  847. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  848. package/dist/server/agent-chat/prompt-resources.d.ts +32 -0
  849. package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
  850. package/dist/server/agent-chat/prompt-resources.js +117 -56
  851. package/dist/server/agent-chat/prompt-resources.js.map +1 -1
  852. package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
  853. package/dist/server/agent-chat/script-entries.js +18 -8
  854. package/dist/server/agent-chat/script-entries.js.map +1 -1
  855. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  856. package/dist/server/agent-chat-plugin.js +27 -1
  857. package/dist/server/agent-chat-plugin.js.map +1 -1
  858. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  859. package/dist/server/auth.d.ts +9 -9
  860. package/dist/server/auth.d.ts.map +1 -1
  861. package/dist/server/auth.js +32 -33
  862. package/dist/server/auth.js.map +1 -1
  863. package/dist/server/core-routes-plugin.d.ts +45 -0
  864. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  865. package/dist/server/core-routes-plugin.js +162 -139
  866. package/dist/server/core-routes-plugin.js.map +1 -1
  867. package/dist/server/credential-provider.d.ts +35 -2
  868. package/dist/server/credential-provider.d.ts.map +1 -1
  869. package/dist/server/credential-provider.js +155 -40
  870. package/dist/server/credential-provider.js.map +1 -1
  871. package/dist/server/embed-session.d.ts.map +1 -1
  872. package/dist/server/embed-session.js +10 -0
  873. package/dist/server/embed-session.js.map +1 -1
  874. package/dist/server/framework-request-handler.d.ts.map +1 -1
  875. package/dist/server/framework-request-handler.js +38 -0
  876. package/dist/server/framework-request-handler.js.map +1 -1
  877. package/dist/server/google-auth-plugin.d.ts.map +1 -1
  878. package/dist/server/google-auth-plugin.js +12 -444
  879. package/dist/server/google-auth-plugin.js.map +1 -1
  880. package/dist/server/index.d.ts +2 -2
  881. package/dist/server/index.d.ts.map +1 -1
  882. package/dist/server/index.js +2 -2
  883. package/dist/server/index.js.map +1 -1
  884. package/dist/server/onboarding-html.d.ts.map +1 -1
  885. package/dist/server/onboarding-html.js +20 -56
  886. package/dist/server/onboarding-html.js.map +1 -1
  887. package/dist/server/open-route.d.ts.map +1 -1
  888. package/dist/server/open-route.js +6 -1
  889. package/dist/server/open-route.js.map +1 -1
  890. package/dist/server/poll.js +1 -1
  891. package/dist/server/poll.js.map +1 -1
  892. package/dist/server/prompts/framework-core-compact.d.ts.map +1 -1
  893. package/dist/server/prompts/framework-core-compact.js +5 -6
  894. package/dist/server/prompts/framework-core-compact.js.map +1 -1
  895. package/dist/server/prompts/framework-core.d.ts.map +1 -1
  896. package/dist/server/prompts/framework-core.js +7 -10
  897. package/dist/server/prompts/framework-core.js.map +1 -1
  898. package/dist/server/prompts/shared-rules.d.ts +20 -2
  899. package/dist/server/prompts/shared-rules.d.ts.map +1 -1
  900. package/dist/server/prompts/shared-rules.js +20 -10
  901. package/dist/server/prompts/shared-rules.js.map +1 -1
  902. package/dist/server/request-context.d.ts +26 -1
  903. package/dist/server/request-context.d.ts.map +1 -1
  904. package/dist/server/request-context.js +52 -2
  905. package/dist/server/request-context.js.map +1 -1
  906. package/dist/server/scoped-key-storage.js +1 -1
  907. package/dist/server/scoped-key-storage.js.map +1 -1
  908. package/dist/settings/org-settings.d.ts +2 -0
  909. package/dist/settings/org-settings.d.ts.map +1 -1
  910. package/dist/settings/org-settings.js +5 -1
  911. package/dist/settings/org-settings.js.map +1 -1
  912. package/dist/settings/store.d.ts +6 -0
  913. package/dist/settings/store.d.ts.map +1 -1
  914. package/dist/settings/store.js +25 -0
  915. package/dist/settings/store.js.map +1 -1
  916. package/dist/shared/index.d.ts +1 -0
  917. package/dist/shared/index.d.ts.map +1 -1
  918. package/dist/shared/index.js +1 -0
  919. package/dist/shared/index.js.map +1 -1
  920. package/dist/shared/sign-in-journey.d.ts +102 -0
  921. package/dist/shared/sign-in-journey.d.ts.map +1 -0
  922. package/dist/shared/sign-in-journey.js +269 -0
  923. package/dist/shared/sign-in-journey.js.map +1 -0
  924. package/dist/styles/agent-native.css +8 -0
  925. package/dist/templates/chat/.agents/skills/actions/SKILL.md +19 -1
  926. package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
  927. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
  928. package/dist/templates/chat/.agents/skills/security/SKILL.md +2 -0
  929. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
  930. package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
  931. package/dist/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
  932. package/dist/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
  933. package/dist/templates/chat/AGENTS.md +8 -0
  934. package/dist/templates/chat/app/entry.client.tsx +3 -0
  935. package/dist/templates/default/.agents/skills/actions/SKILL.md +19 -1
  936. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
  937. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
  938. package/dist/templates/default/.agents/skills/security/SKILL.md +2 -0
  939. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
  940. package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
  941. package/dist/templates/default/AGENTS.md +68 -195
  942. package/dist/templates/default/app/entry.client.tsx +3 -0
  943. package/dist/templates/default/app/i18n/ar-SA.ts +8 -0
  944. package/dist/templates/default/app/i18n/de-DE.ts +8 -0
  945. package/dist/templates/default/app/i18n/en-US.ts +8 -0
  946. package/dist/templates/default/app/i18n/es-ES.ts +8 -0
  947. package/dist/templates/default/app/i18n/fr-FR.ts +8 -0
  948. package/dist/templates/default/app/i18n/hi-IN.ts +8 -0
  949. package/dist/templates/default/app/i18n/ja-JP.ts +8 -0
  950. package/dist/templates/default/app/i18n/ko-KR.ts +8 -0
  951. package/dist/templates/default/app/i18n/pt-BR.ts +8 -0
  952. package/dist/templates/default/app/i18n/zh-CN.ts +8 -0
  953. package/dist/templates/default/app/i18n/zh-TW.ts +8 -0
  954. package/dist/templates/headless/.agents/skills/actions/SKILL.md +19 -1
  955. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
  956. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
  957. package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
  958. package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
  959. package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
  960. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
  961. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
  962. package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
  963. package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
  964. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
  965. package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
  966. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
  967. package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
  968. package/dist/templates/workspace-core/AGENTS.md +62 -124
  969. package/dist/templates/workspace-root/AGENTS.md +6 -1
  970. package/dist/triggers/dispatcher.d.ts.map +1 -1
  971. package/dist/triggers/dispatcher.js +10 -3
  972. package/dist/triggers/dispatcher.js.map +1 -1
  973. package/dist/vite/client.d.ts.map +1 -1
  974. package/dist/vite/client.js +18 -8
  975. package/dist/vite/client.js.map +1 -1
  976. package/docs/content/actions.mdx +33 -20
  977. package/docs/content/agent-mentions.mdx +30 -19
  978. package/docs/content/agent-native-toolkit.mdx +8 -6
  979. package/docs/content/agent-resources.mdx +11 -0
  980. package/docs/content/agent-surfaces.mdx +41 -30
  981. package/docs/content/audit-log.mdx +78 -0
  982. package/docs/content/authentication.mdx +7 -5
  983. package/docs/content/automations.mdx +15 -9
  984. package/docs/content/client.mdx +11 -11
  985. package/docs/content/cloneable-saas.mdx +7 -1
  986. package/docs/content/code-agents-ui.mdx +9 -1
  987. package/docs/content/components.mdx +7 -0
  988. package/docs/content/context-awareness.mdx +1 -0
  989. package/docs/content/creating-templates.mdx +9 -1
  990. package/docs/content/custom-design-system.mdx +8 -0
  991. package/docs/content/data-programs.mdx +6 -0
  992. package/docs/content/deployment.mdx +2 -0
  993. package/docs/content/doctor.mdx +5 -3
  994. package/docs/content/extensions.mdx +26 -0
  995. package/docs/content/external-agents-catalog.mdx +533 -0
  996. package/docs/content/external-agents.mdx +20 -514
  997. package/docs/content/faq.mdx +2 -2
  998. package/docs/content/file-uploads.mdx +44 -0
  999. package/docs/content/frames.mdx +2 -2
  1000. package/docs/content/generative-ui.mdx +8 -0
  1001. package/docs/content/getting-started.mdx +45 -17
  1002. package/docs/content/human-approval.mdx +9 -0
  1003. package/docs/content/integrations.mdx +4 -3
  1004. package/docs/content/internationalization.mdx +4 -11
  1005. package/docs/content/key-concepts.mdx +1 -1
  1006. package/docs/content/local-file-mode.mdx +5 -0
  1007. package/docs/content/mcp-apps.mdx +2 -1
  1008. package/docs/content/mcp-clients.mdx +32 -1
  1009. package/docs/content/mcp-protocol.mdx +4 -3
  1010. package/docs/content/messaging-internals.mdx +328 -0
  1011. package/docs/content/messaging-recipes.mdx +194 -0
  1012. package/docs/content/messaging.mdx +9 -307
  1013. package/docs/content/multi-app-workspace.mdx +1 -1
  1014. package/docs/content/multi-tenancy.mdx +1 -0
  1015. package/docs/content/native-chat-ui.mdx +8 -0
  1016. package/docs/content/notifications.mdx +18 -20
  1017. package/docs/content/observability.mdx +1 -0
  1018. package/docs/content/onboarding.mdx +20 -6
  1019. package/docs/content/organizations-teams-permissions.mdx +99 -124
  1020. package/docs/content/package-lifecycle.mdx +19 -7
  1021. package/docs/content/progress.mdx +11 -0
  1022. package/docs/content/real-time-collaboration.mdx +44 -3
  1023. package/docs/content/recurring-jobs.mdx +14 -1
  1024. package/docs/content/security.mdx +5 -2
  1025. package/docs/content/server.mdx +2 -1
  1026. package/docs/content/sharing.mdx +22 -3
  1027. package/docs/content/skills-guide.mdx +62 -19
  1028. package/docs/content/syncing-template-changes.mdx +9 -0
  1029. package/docs/content/template-analytics-connectors.mdx +75 -0
  1030. package/docs/content/template-analytics-dashboards.mdx +106 -0
  1031. package/docs/content/template-analytics-developers.mdx +287 -0
  1032. package/docs/content/template-analytics-monitoring-and-sessions.mdx +109 -0
  1033. package/docs/content/template-analytics.mdx +21 -263
  1034. package/docs/content/template-assets-developers.mdx +456 -0
  1035. package/docs/content/template-assets-generation.mdx +147 -0
  1036. package/docs/content/template-assets-integrations.mdx +319 -0
  1037. package/docs/content/template-assets-presets.mdx +185 -0
  1038. package/docs/content/template-assets.mdx +12 -562
  1039. package/docs/content/template-brain-agent.mdx +103 -0
  1040. package/docs/content/template-brain-developers.mdx +379 -0
  1041. package/docs/content/template-brain-knowledge.mdx +50 -0
  1042. package/docs/content/template-brain-sources.mdx +163 -0
  1043. package/docs/content/template-brain.mdx +30 -390
  1044. package/docs/content/template-calendar-agent.mdx +133 -0
  1045. package/docs/content/template-calendar-booking-links.mdx +73 -0
  1046. package/docs/content/template-calendar-developers.mdx +366 -0
  1047. package/docs/content/template-calendar-scheduling.mdx +128 -0
  1048. package/docs/content/template-calendar.mdx +13 -260
  1049. package/docs/content/template-chat-developers.mdx +88 -0
  1050. package/docs/content/template-chat-first-edits.mdx +145 -0
  1051. package/docs/content/template-chat.mdx +12 -77
  1052. package/docs/content/template-clips-ai-and-editing.mdx +114 -0
  1053. package/docs/content/template-clips-capture-everywhere.mdx +120 -0
  1054. package/docs/content/template-clips-developers.mdx +373 -0
  1055. package/docs/content/template-clips-sharing-and-teams.mdx +182 -0
  1056. package/docs/content/template-clips.mdx +19 -508
  1057. package/docs/content/template-content-databases.mdx +406 -0
  1058. package/docs/content/template-content-developers.mdx +364 -0
  1059. package/docs/content/template-content-editing.mdx +60 -0
  1060. package/docs/content/template-content-sync.mdx +149 -0
  1061. package/docs/content/template-content.mdx +21 -561
  1062. package/docs/content/template-design-brand-and-figma.mdx +150 -0
  1063. package/docs/content/template-design-collaboration-and-full-apps.mdx +125 -0
  1064. package/docs/content/template-design-developers.mdx +358 -0
  1065. package/docs/content/template-design-quality-and-components.mdx +95 -0
  1066. package/docs/content/template-design.mdx +20 -344
  1067. package/docs/content/template-dispatch-developers.mdx +121 -0
  1068. package/docs/content/template-dispatch-messaging-routing.mdx +114 -0
  1069. package/docs/content/template-dispatch-operations.mdx +160 -0
  1070. package/docs/content/template-dispatch-vault-integrations.mdx +316 -0
  1071. package/docs/content/template-dispatch.mdx +24 -283
  1072. package/docs/content/template-forms-building-publishing.mdx +135 -0
  1073. package/docs/content/template-forms-developers.mdx +195 -0
  1074. package/docs/content/template-forms-responses.mdx +120 -0
  1075. package/docs/content/template-forms.mdx +21 -230
  1076. package/docs/content/template-mail-agent.mdx +114 -0
  1077. package/docs/content/template-mail-developers.mdx +356 -0
  1078. package/docs/content/template-mail-drafts-and-queue.mdx +103 -0
  1079. package/docs/content/template-mail-inbox.mdx +118 -0
  1080. package/docs/content/template-mail.mdx +23 -274
  1081. package/docs/content/template-plan-automations.mdx +213 -0
  1082. package/docs/content/template-plan-developers.mdx +703 -0
  1083. package/docs/content/template-plan-local-and-desktop.mdx +236 -0
  1084. package/docs/content/template-plan-review-workflow.mdx +180 -0
  1085. package/docs/content/template-plan.mdx +60 -910
  1086. package/docs/content/template-slides-agent.mdx +102 -0
  1087. package/docs/content/template-slides-design-and-media.mdx +94 -0
  1088. package/docs/content/template-slides-developers.mdx +488 -0
  1089. package/docs/content/template-slides-editing.mdx +56 -0
  1090. package/docs/content/template-slides.mdx +20 -362
  1091. package/docs/content/toolkit-capability-packages.mdx +38 -13
  1092. package/docs/content/toolkit-context-knowledge.mdx +49 -9
  1093. package/docs/content/toolkit-editors-canvases.mdx +72 -10
  1094. package/docs/content/toolkit-resources.mdx +16 -0
  1095. package/docs/content/toolkit-settings.mdx +3 -3
  1096. package/docs/content/toolkit-sharing.mdx +5 -7
  1097. package/docs/content/using-your-agent.mdx +25 -2
  1098. package/docs/content/voice-input.mdx +11 -7
  1099. package/docs/content/what-is-agent-native.mdx +1 -0
  1100. package/docs/content/workspace-connections.mdx +21 -11
  1101. package/docs/content/workspace-management.mdx +1 -1
  1102. package/package.json +2 -4
  1103. package/src/a2a/client.ts +4 -2
  1104. package/src/agent/action-warnings.ts +103 -0
  1105. package/src/agent/durable-background.ts +42 -5
  1106. package/src/agent/engine/ai-sdk-engine.ts +58 -6
  1107. package/src/agent/engine/anthropic-engine.ts +51 -8
  1108. package/src/agent/engine/builder-engine.ts +56 -18
  1109. package/src/agent/engine/continuation-dispatch-retry.ts +10 -9
  1110. package/src/agent/engine/credential-errors.ts +11 -0
  1111. package/src/agent/engine/error-detail.ts +39 -0
  1112. package/src/agent/engine/prompt-cache.ts +44 -0
  1113. package/src/agent/engine/registry.ts +22 -30
  1114. package/src/agent/engine/tool-call-journal-seed.ts +2 -1
  1115. package/src/agent/engine/translate-anthropic.ts +99 -0
  1116. package/src/agent/loop-settings.ts +94 -7
  1117. package/src/agent/production-agent.ts +667 -157
  1118. package/src/agent/run-loop-with-resume.ts +27 -1
  1119. package/src/agent/run-manager.ts +229 -39
  1120. package/src/agent/run-store.ts +397 -64
  1121. package/src/agent/thread-data-builder.ts +5 -1
  1122. package/src/agent/types.ts +23 -6
  1123. package/src/application-state/script-helpers.ts +5 -2
  1124. package/src/cli/agents.ts +69 -1
  1125. package/src/cli/app-skill.ts +1 -1
  1126. package/src/cli/code-agent-executor.ts +7 -3
  1127. package/src/cli/design-connect.ts +82 -8
  1128. package/src/cli/skills-content/design-visual-edit-skill.ts +169 -24
  1129. package/src/client/AssistantChat.tsx +623 -607
  1130. package/src/client/agent-chat-adapter.ts +176 -29
  1131. package/src/client/chat/message-components.tsx +13 -0
  1132. package/src/client/embed-auth.ts +3 -1
  1133. package/src/client/integrations/IntegrationCard.tsx +41 -24
  1134. package/src/client/integrations/IntegrationsPanel.tsx +37 -21
  1135. package/src/client/integrations/webhook-url.ts +29 -0
  1136. package/src/client/org/OrgSwitcher.tsx +41 -27
  1137. package/src/client/org/RequireActiveOrg.tsx +7 -0
  1138. package/src/client/org/TeamPage.tsx +144 -14
  1139. package/src/client/org/hooks.ts +27 -0
  1140. package/src/client/org/index.ts +2 -0
  1141. package/src/client/require-session.tsx +40 -29
  1142. package/src/client/session-replay.ts +1 -1
  1143. package/src/client/settings/DemoModeSection.tsx +0 -5
  1144. package/src/client/settings/SecretsSection.tsx +47 -42
  1145. package/src/client/settings/VoiceTranscriptionSection.tsx +0 -5
  1146. package/src/client/sse-event-processor.ts +83 -8
  1147. package/src/client/use-action.ts +22 -13
  1148. package/src/client/use-agent-engine-configured.ts +36 -4
  1149. package/src/client/use-db-sync.ts +21 -1
  1150. package/src/credentials/index.ts +124 -2
  1151. package/src/deploy/build.ts +93 -30
  1152. package/src/deploy/workspace-deploy.ts +21 -16
  1153. package/src/guards/no-localhost-fallback.ts +76 -14
  1154. package/src/integrations/google-docs-poller.ts +19 -12
  1155. package/src/integrations/webhook-handler.ts +56 -33
  1156. package/src/jobs/scheduler.ts +57 -23
  1157. package/src/localization/default-messages.ts +23 -1
  1158. package/src/observability/evals.ts +7 -8
  1159. package/src/observability/traces.ts +2 -0
  1160. package/src/org/accept-pending.ts +2 -2
  1161. package/src/org/active-org.ts +73 -0
  1162. package/src/org/auto-join-domain.ts +7 -2
  1163. package/src/org/context.ts +169 -66
  1164. package/src/org/handlers.ts +148 -10
  1165. package/src/org/plugin.ts +8 -1
  1166. package/src/org/types.ts +6 -1
  1167. package/src/provider-api/index.ts +6 -1
  1168. package/src/resources/handlers.ts +2 -6
  1169. package/src/resources/script-helpers.ts +2 -1
  1170. package/src/scripts/chat/search-chats.ts +5 -2
  1171. package/src/scripts/describe-workspace-apps.ts +59 -0
  1172. package/src/scripts/resources/delete-memory.ts +5 -2
  1173. package/src/scripts/resources/delete.ts +5 -2
  1174. package/src/scripts/resources/effective.ts +5 -2
  1175. package/src/scripts/resources/list.ts +5 -2
  1176. package/src/scripts/resources/read.ts +5 -2
  1177. package/src/scripts/resources/save-memory.ts +5 -2
  1178. package/src/scripts/resources/write.ts +5 -2
  1179. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +11 -31
  1180. package/src/server/agent-capabilities.ts +147 -0
  1181. package/src/server/agent-chat/framework-prompts.ts +11 -13
  1182. package/src/server/agent-chat/prompt-resources.ts +183 -57
  1183. package/src/server/agent-chat/script-entries.ts +20 -7
  1184. package/src/server/agent-chat-plugin.ts +27 -0
  1185. package/src/server/auth.ts +38 -32
  1186. package/src/server/core-routes-plugin.ts +229 -179
  1187. package/src/server/credential-provider.ts +196 -44
  1188. package/src/server/embed-session.ts +10 -0
  1189. package/src/server/framework-request-handler.ts +43 -0
  1190. package/src/server/google-auth-plugin.ts +13 -450
  1191. package/src/server/index.ts +4 -1
  1192. package/src/server/onboarding-html.ts +20 -56
  1193. package/src/server/open-route.ts +6 -1
  1194. package/src/server/poll.ts +1 -1
  1195. package/src/server/prompts/framework-core-compact.ts +5 -5
  1196. package/src/server/prompts/framework-core.ts +7 -9
  1197. package/src/server/prompts/shared-rules.ts +20 -9
  1198. package/src/server/request-context.ts +58 -2
  1199. package/src/server/scoped-key-storage.ts +1 -1
  1200. package/src/settings/org-settings.ts +9 -0
  1201. package/src/settings/store.ts +29 -0
  1202. package/src/shared/index.ts +13 -0
  1203. package/src/shared/sign-in-journey.ts +331 -0
  1204. package/src/styles/agent-native.css +8 -0
  1205. package/src/templates/chat/.agents/skills/actions/SKILL.md +19 -1
  1206. package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1207. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
  1208. package/src/templates/chat/.agents/skills/security/SKILL.md +2 -0
  1209. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1210. package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1211. package/src/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
  1212. package/src/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
  1213. package/src/templates/chat/AGENTS.md +8 -0
  1214. package/src/templates/chat/app/entry.client.tsx +3 -0
  1215. package/src/templates/default/.agents/skills/actions/SKILL.md +19 -1
  1216. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1217. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
  1218. package/src/templates/default/.agents/skills/security/SKILL.md +2 -0
  1219. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1220. package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1221. package/src/templates/default/AGENTS.md +68 -195
  1222. package/src/templates/default/app/entry.client.tsx +3 -0
  1223. package/src/templates/default/app/i18n/ar-SA.ts +8 -0
  1224. package/src/templates/default/app/i18n/de-DE.ts +8 -0
  1225. package/src/templates/default/app/i18n/en-US.ts +8 -0
  1226. package/src/templates/default/app/i18n/es-ES.ts +8 -0
  1227. package/src/templates/default/app/i18n/fr-FR.ts +8 -0
  1228. package/src/templates/default/app/i18n/hi-IN.ts +8 -0
  1229. package/src/templates/default/app/i18n/ja-JP.ts +8 -0
  1230. package/src/templates/default/app/i18n/ko-KR.ts +8 -0
  1231. package/src/templates/default/app/i18n/pt-BR.ts +8 -0
  1232. package/src/templates/default/app/i18n/zh-CN.ts +8 -0
  1233. package/src/templates/default/app/i18n/zh-TW.ts +8 -0
  1234. package/src/templates/headless/.agents/skills/actions/SKILL.md +19 -1
  1235. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
  1236. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1237. package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
  1238. package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
  1239. package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
  1240. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
  1241. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
  1242. package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
  1243. package/src/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
  1244. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1245. package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1246. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
  1247. package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
  1248. package/src/templates/workspace-core/AGENTS.md +62 -124
  1249. package/src/templates/workspace-root/AGENTS.md +6 -1
  1250. package/src/triggers/dispatcher.ts +28 -17
  1251. package/src/vite/client.ts +20 -8
  1252. package/corpus/core/src/client/components/MissingKeyCard.tsx +0 -61
  1253. package/corpus/core/src/client/extensions/agent-native-extension-runtime.ts +0 -495
  1254. package/corpus/core/src/client/settings/BackgroundAgentSection.tsx +0 -193
  1255. package/corpus/core/src/client/settings/BrowserSection.tsx +0 -110
  1256. package/corpus/templates/analytics/app/components/InlineMetric.tsx +0 -31
  1257. package/corpus/templates/analytics/app/components/auth/LoginScreen.tsx +0 -4
  1258. package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +0 -128
  1259. package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +0 -264
  1260. package/corpus/templates/analytics/app/components/dashboard/RecentActivity.tsx +0 -84
  1261. package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +0 -92
  1262. package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +0 -154
  1263. package/corpus/templates/analytics/app/components/dashboard/StatsCard.tsx +0 -49
  1264. package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +0 -120
  1265. package/corpus/templates/analytics/server/handlers/dashboard-views.ts +0 -85
  1266. package/corpus/templates/analytics/server/handlers/user-prefs.ts +0 -58
  1267. package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId]/[viewId].delete.ts +0 -1
  1268. package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId].get.ts +0 -1
  1269. package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId].post.ts +0 -1
  1270. package/corpus/templates/analytics/server/routes/api/theme.get.ts +0 -17
  1271. package/corpus/templates/analytics/server/routes/api/theme.post.ts +0 -15
  1272. package/corpus/templates/analytics/server/routes/api/user-prefs/[key].delete.ts +0 -1
  1273. package/corpus/templates/analytics/server/routes/api/user-prefs/[key].get.ts +0 -1
  1274. package/corpus/templates/analytics/server/routes/api/user-prefs/[key].put.ts +0 -1
  1275. package/corpus/templates/assets/app/components/library/CreateLibraryDialog.tsx +0 -156
  1276. package/corpus/templates/assets/app/components/library/LibraryCard.tsx +0 -213
  1277. package/corpus/templates/calendar/app/components/calendar/GoogleSyncButton.tsx +0 -49
  1278. package/corpus/templates/calendar/server/routes/api/events/[id].delete.ts +0 -1
  1279. package/corpus/templates/calendar/server/routes/api/events/[id].get.ts +0 -1
  1280. package/corpus/templates/calendar/server/routes/api/events/[id].put.ts +0 -1
  1281. package/corpus/templates/content/app/components/layout/AppLayout.tsx +0 -9
  1282. package/corpus/templates/content/server/routes/api/comments/[id].delete.ts +0 -69
  1283. package/corpus/templates/content/server/routes/api/comments/[id].patch.ts +0 -109
  1284. package/corpus/templates/content/server/routes/api/documents/[id]/versions.get.ts +0 -53
  1285. package/corpus/templates/design/app/components/design/code-workbench/ActivityBar.tsx +0 -85
  1286. package/corpus/templates/design/app/components/design-system/DesignSystemCard.tsx +0 -129
  1287. package/corpus/templates/forms/app/components/layout/AppLayout.tsx +0 -9
  1288. package/corpus/templates/mail/app/components/email/SnoozePopover.tsx +0 -213
  1289. package/corpus/templates/mail/server/handlers/aliases.ts +0 -98
  1290. package/corpus/templates/mail/server/routes/api/aliases/[id].delete.ts +0 -1
  1291. package/corpus/templates/mail/server/routes/api/aliases/[id].patch.ts +0 -1
  1292. package/corpus/templates/mail/server/routes/api/aliases/index.get.ts +0 -1
  1293. package/corpus/templates/mail/server/routes/api/aliases/index.post.ts +0 -1
  1294. package/corpus/templates/mail/server/routes/api/automations/[id].delete.ts +0 -1
  1295. package/corpus/templates/mail/server/routes/api/automations/[id].patch.ts +0 -1
  1296. package/corpus/templates/mail/server/routes/api/automations/index.get.ts +0 -1
  1297. package/corpus/templates/mail/server/routes/api/automations/index.post.ts +0 -1
  1298. package/corpus/templates/mail/server/routes/api/automations/settings.get.ts +0 -22
  1299. package/corpus/templates/mail/server/routes/api/automations/settings.put.ts +0 -25
  1300. package/corpus/templates/mail/server/routes/api/scheduled-jobs/[id].delete.ts +0 -1
  1301. package/corpus/templates/mail/server/routes/api/scheduled-jobs/[id].patch.ts +0 -1
  1302. package/corpus/templates/mail/server/routes/api/scheduled-jobs/index.get.ts +0 -1
  1303. package/corpus/templates/mail/server/routes/api/scheduled-jobs/index.post.ts +0 -1
  1304. package/corpus/templates/mail/server/routes/api/settings.get.ts +0 -1
  1305. package/corpus/templates/mail/server/routes/api/settings.patch.ts +0 -1
  1306. package/corpus/templates/slides/app/components/deck/BuilderLogo.tsx +0 -22
  1307. package/corpus/templates/slides/app/components/design-system/DesignSystemPreview.tsx +0 -176
  1308. package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +0 -244
  1309. package/corpus/templates/slides/app/components/editor/ImportButton.tsx +0 -84
  1310. package/corpus/templates/slides/server/routes/api/comments/[id].delete.ts +0 -43
  1311. package/corpus/templates/slides/server/routes/api/comments/[id].patch.ts +0 -50
  1312. package/corpus/templates/slides/server/routes/api/decks/[id].delete.ts +0 -1
  1313. package/corpus/templates/slides/server/routes/api/decks/[id].get.ts +0 -1
  1314. package/corpus/templates/slides/server/routes/api/decks/[id].put.ts +0 -1
  1315. package/corpus/templates/slides/server/routes/api/decks/index.get.ts +0 -1
  1316. package/corpus/templates/slides/server/routes/api/decks/index.post.ts +0 -1
  1317. package/dist/client/components/MissingKeyCard.d.ts +0 -7
  1318. package/dist/client/components/MissingKeyCard.d.ts.map +0 -1
  1319. package/dist/client/components/MissingKeyCard.js +0 -32
  1320. package/dist/client/components/MissingKeyCard.js.map +0 -1
  1321. package/dist/client/extensions/agent-native-extension-runtime.d.ts +0 -69
  1322. package/dist/client/extensions/agent-native-extension-runtime.d.ts.map +0 -1
  1323. package/dist/client/extensions/agent-native-extension-runtime.js +0 -348
  1324. package/dist/client/extensions/agent-native-extension-runtime.js.map +0 -1
  1325. package/dist/client/settings/BackgroundAgentSection.d.ts +0 -2
  1326. package/dist/client/settings/BackgroundAgentSection.d.ts.map +0 -1
  1327. package/dist/client/settings/BackgroundAgentSection.js +0 -68
  1328. package/dist/client/settings/BackgroundAgentSection.js.map +0 -1
  1329. package/dist/client/settings/BrowserSection.d.ts +0 -2
  1330. package/dist/client/settings/BrowserSection.d.ts.map +0 -1
  1331. package/dist/client/settings/BrowserSection.js +0 -40
  1332. package/dist/client/settings/BrowserSection.js.map +0 -1
  1333. package/dist/templates/chat/.react-router/types/+server-build.d.ts +0 -18
  1334. package/dist/templates/chat/.react-router/types/app/+types/root.ts +0 -68
  1335. package/src/client/components/MissingKeyCard.tsx +0 -61
  1336. package/src/client/extensions/agent-native-extension-runtime.ts +0 -495
  1337. package/src/client/settings/BackgroundAgentSection.tsx +0 -193
  1338. package/src/client/settings/BrowserSection.tsx +0 -110
  1339. package/src/templates/chat/.react-router/types/+server-build.d.ts +0 -18
  1340. package/src/templates/chat/.react-router/types/app/+types/root.ts +0 -68
@@ -1 +1 @@
1
- {"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/client/session-replay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n SESSION_REPLAY_IFRAME_ATTRIBUTE,\n SESSION_REPLAY_IFRAME_PROBE,\n SESSION_REPLAY_IFRAME_START,\n SESSION_REPLAY_IFRAME_STOP,\n type SessionReplayIframePrivacyOptions,\n type SessionReplayIframeStartMessage,\n type SessionReplayIframeStopMessage,\n} from \"../session-replay-iframe-protocol.js\";\nimport {\n getOrCreateAnalyticsAnonymousId,\n getOrCreateAnalyticsSessionId,\n} from \"./analytics-session.js\";\nimport { scrubUrl } from \"./url-scrub.js\";\n\ntype ReplayEvent = Record<string, unknown>;\ntype QueuedReplayEvent = {\n json: string;\n byteLength: number;\n timestampMs: number;\n type: number | null;\n};\ntype ReplayStopFn = () => void;\ntype ReplayResourceNode = {\n tagName: string;\n rel: string;\n as: string;\n type: string;\n};\nexport type SessionReplayUrlMatcher =\n | string\n | RegExp\n | ((url: string) => boolean);\n\ninterface RrwebRecordOptions {\n emit: (event: ReplayEvent) => void;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n inlineStylesheet?: boolean;\n blockClass?: string | RegExp;\n blockSelector?: string;\n ignoreClass?: string | RegExp;\n ignoreSelector?: string;\n maskTextClass?: string | RegExp;\n maskTextSelector?: string;\n maskAllInputs?: boolean;\n maskInputOptions?: Record<string, boolean>;\n recordCanvas?: boolean;\n recordCrossOriginIframes?: boolean;\n collectFonts?: boolean;\n inlineImages?: boolean;\n sampling?: Record<string, unknown>;\n}\n\ntype RrwebRecordFn = ((\n options: RrwebRecordOptions,\n) => ReplayStopFn | undefined) & {\n addCustomEvent?: (tag: string, payload: unknown) => void;\n};\n\ninterface RrwebRecordModule {\n record: RrwebRecordFn;\n}\n\ninterface SessionReplayState {\n active: boolean;\n startPromise: Promise<SessionReplayStartResult> | null;\n /** Invalidates deferred recorder startup when stop is requested mid-start. */\n startGeneration: number;\n replayId: string | null;\n startedAtMs: number | null;\n replayLinkBaseUrl: string | null;\n sequence: number;\n /** Pre-serialized + scrubbed event JSON strings, ready to splice at flush. */\n queue: QueuedReplayEvent[];\n queuedBytes: number;\n retryBatches: QueuedReplayEvent[][];\n /** Consecutive retryable 4xx responses for the current recording episode. */\n transientClientErrorFailures: number;\n flushTimer: number | null;\n maxDurationTimer: number | null;\n flushing: boolean;\n /** Highest-priority flush requested while an upload was already in flight. */\n pendingFlushReason: string | null;\n /** Callers awaiting the coalesced flush tail. */\n pendingFlushWaiters: Array<() => void>;\n /** Drop incremental events until a new FullSnapshot can re-anchor the DOM. */\n awaitingFullSnapshot: boolean;\n stopRecorder: ReplayStopFn | null;\n restoreUrlMonitor: (() => void) | null;\n removeLifecycleListeners: (() => void) | null;\n /** Stops the cooperative child-iframe bridge and notifies active children. */\n restoreIframeBridge: (() => void) | null;\n /** rrweb's `record.addCustomEvent`, captured at start (null when absent). */\n addCustomEvent: ((tag: string, payload: unknown) => void) | null;\n /** Uninstalls console/network interceptors and flushes pending duplicates. */\n restoreCaptures: (() => void) | null;\n options: NormalizedSessionReplayOptions | null;\n lastAuthenticatedProperties: Record<string, unknown> | null;\n /** Resource tag metadata used to classify later rrweb attribute mutations. */\n resourceNodes: Map<number, ReplayResourceNode>;\n /**\n * Prevents a permanently misconfigured endpoint from causing an automatic\n * 409 -> restart -> 409 loop. A successful upload resets the allowance, so\n * a later, independent sequence conflict can still recover in-place.\n */\n automaticConflictRestartAttempted: boolean;\n /**\n * Cross-tab \"who is recording this replayId\" channel, open for the\n * lifetime of an active recording. See `getOrCreateReplaySession` for why\n * this exists (duplicated-tab guard against a shared `replayId`).\n */\n broadcastChannel: BroadcastChannel | null;\n}\n\ninterface StoredReplaySession {\n sessionId?: string;\n replayId?: string;\n startedAtMs?: number;\n sequence?: number;\n linkBaseUrl?: string;\n}\n\n/** Broadcast on `SESSION_REPLAY_BROADCAST_CHANNEL_NAME` by a tab resuming a\n * stored replay session, to check whether another tab is already recording\n * that same `replayId` (see the duplicated-tab guard in\n * `getOrCreateReplaySession`'s doc comment). */\ninterface ReplayClaimMessage {\n type: \"an-replay-claim\";\n replayId: string;\n instanceNonce: string;\n}\n\n/** Reply from a tab that is actively recording the claimed `replayId`. */\ninterface ReplayClaimTakenMessage {\n type: \"an-replay-claim-taken\";\n replayId: string;\n /** Only the claimant with this nonce should yield the stored replay id.\n * Optional while older recorder bundles can still be open during rollout. */\n claimantNonce?: string;\n}\n\ntype ReplayBroadcastMessage = ReplayClaimMessage | ReplayClaimTakenMessage;\n\n/** rrweb `sampling` shape (mousemove/scroll/media throttles, input strategy). */\nexport type ReplayEventSampling = Record<string, unknown>;\n\n/**\n * Console capture cap overrides. `maxEvents` bounds the number of\n * `agent-native.console` custom events emitted per recording session\n * (default 1000); once hit, capture stops for the rest of the session and one\n * final truncation-notice event is emitted.\n */\nexport interface SessionReplayConsoleOptions {\n maxEvents?: number;\n}\n\n/**\n * Network capture cap overrides. `maxEvents` bounds the number of\n * `agent-native.network` custom events emitted per recording session\n * (default 2000); once hit, capture stops for the rest of the session and one\n * final truncation-notice event is emitted.\n *\n * `captureErrorBodies` (default true) additionally captures a bounded,\n * redacted response-body snippet for 5xx responses only -- request bodies\n * and headers are never captured, and non-5xx/network-failure responses\n * never carry a body. `maxErrorBodyLength` (default 2048) caps that snippet.\n */\nexport interface SessionReplayNetworkOptions {\n maxEvents?: number;\n captureErrorBodies?: boolean;\n maxErrorBodyLength?: number;\n}\n\nexport interface SessionReplayUploadRejectedDetails {\n status: number;\n restartAttempted: boolean;\n restartSucceeded: boolean;\n restartReason?: SessionReplayStartResult[\"reason\"];\n}\n\nexport interface SessionReplayOptions {\n enabled?: boolean;\n /** Rechecked immediately before rrweb starts to cancel deferred startup. */\n shouldStart?: () => boolean;\n publicKey?: string;\n endpoint?: string;\n /** Analytics app origin used to build timestamped replay links. */\n linkBaseUrl?: string;\n requireSignedInUser?: boolean;\n sampleRate?: number;\n samplingSalt?: string;\n allowUrls?: SessionReplayUrlMatcher[];\n blockUrls?: SessionReplayUrlMatcher[];\n flushIntervalMs?: number;\n maxDurationMs?: number;\n maxEventsPerBatch?: number;\n maxBatchBytes?: number;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n inlineStylesheet?: boolean;\n blockSelector?: string;\n ignoreSelector?: string;\n maskTextClass?: string | RegExp;\n maskTextSelector?: string;\n maskAllInputs?: boolean;\n recordCanvas?: boolean;\n recordCrossOriginIframes?: boolean;\n collectFonts?: boolean;\n inlineImages?: boolean;\n /**\n * rrweb per-event throttling (distinct from `sampleRate`, which decides\n * whether a whole session records). Throttles high-frequency event types\n * (mousemove/scroll/input) to keep the recorded page responsive and the\n * payloads small. Passed straight through to `rrweb.record({ sampling })`.\n */\n eventSampling?: ReplayEventSampling;\n /**\n * Capture console.log/info/warn/error/debug plus window `error` and\n * `unhandledrejection` events as `agent-native.console` custom rrweb\n * events. Defaults to on whenever session replay is enabled. Pass `false`\n * to disable, or an options object to override caps.\n */\n console?: boolean | SessionReplayConsoleOptions;\n /**\n * Capture fetch/XHR requests as `agent-native.network` custom rrweb\n * events (method, URL, status, timing). Request bodies and headers are\n * never captured; response bodies are captured only as a bounded,\n * redacted snippet for 5xx responses (see `captureErrorBodies`).\n * Defaults to on whenever session replay is enabled. Pass `false` to\n * disable, or an options object to override caps.\n */\n network?: boolean | SessionReplayNetworkOptions;\n /** Rare recorder lifecycle signal; never includes replay content or URLs. */\n onUploadRejected?: (details: SessionReplayUploadRejectedDetails) => void;\n extraProperties?:\n | Record<string, unknown>\n | (() => Record<string, unknown> | undefined);\n}\n\nexport interface SessionReplayContext {\n replayId: string;\n sessionId: string;\n startedAtMs: number;\n startedAt: string;\n linkBaseUrl: string | null;\n active: boolean;\n}\n\nexport interface SessionReplayLinkOptions {\n /** Event time to seek to when the replay link opens. */\n at?: Date | number | string;\n /** Overrides the configured Analytics app origin for this link. */\n linkBaseUrl?: string;\n}\n\nexport interface SessionReplayStartResult {\n started: boolean;\n reason?:\n | \"disabled\"\n | \"not-browser\"\n | \"missing-public-key\"\n | \"missing-session-id\"\n | \"missing-user-id\"\n | \"sampled-out\"\n | \"url-blocked\"\n | \"already-active\"\n | \"import-failed\"\n | \"record-failed\";\n replayId?: string;\n sessionId?: string;\n sampled?: boolean;\n}\n\ninterface NormalizedSessionReplayOptions {\n publicKey: string;\n endpoint: string;\n linkBaseUrl: string | null;\n requireSignedInUser: boolean;\n sampleRate: number;\n samplingSalt: string;\n allowUrls: SessionReplayUrlMatcher[];\n blockUrls: SessionReplayUrlMatcher[];\n flushIntervalMs: number;\n maxDurationMs: number;\n maxEventsPerBatch: number;\n maxBatchBytes: number;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n inlineStylesheet: boolean;\n blockSelector: string;\n ignoreSelector: string;\n maskTextClass: string | RegExp;\n maskTextSelector: string;\n maskAllInputs: boolean;\n recordCanvas: boolean;\n recordCrossOriginIframes: boolean;\n collectFonts: boolean;\n inlineImages: boolean;\n eventSampling: ReplayEventSampling;\n /** Null disables console capture entirely. */\n console: NormalizedCaptureOptions | null;\n /** Null disables network capture entirely. */\n network: NormalizedCaptureOptions | null;\n onUploadRejected?: SessionReplayOptions[\"onUploadRejected\"];\n extraProperties?: SessionReplayOptions[\"extraProperties\"];\n shouldStart?: SessionReplayOptions[\"shouldStart\"];\n}\n\ninterface NormalizedCaptureOptions {\n maxEvents: number;\n /** Network-only: capture a bounded 5xx response-body snippet. Unused by console. */\n captureErrorBodies?: boolean;\n /** Network-only: cap (chars) for the captured error-body snippet. */\n maxErrorBodyLength?: number;\n}\n\nconst DEFAULT_REPLAY_PATH = \"/api/analytics/replay\";\nconst DEFAULT_SAMPLING_SALT = \"agent-native-session-replay\";\n\n/**\n * Default rrweb event throttling. Without this, rrweb captures every\n * mousemove/scroll which dominates event volume and main-thread cost on\n * interactive pages. These caps keep replays faithful while staying light.\n */\nconst DEFAULT_EVENT_SAMPLING: ReplayEventSampling = {\n mousemove: 50,\n mouseInteraction: true,\n scroll: 100,\n media: 800,\n input: \"last\",\n};\nconst SESSION_REPLAY_STATE_KEY = Symbol.for(\n \"agent-native.client.sessionReplay\",\n);\nconst SESSION_REPLAY_ID_STORAGE_KEY = \"agent-native.session_replay_id\";\nconst SESSION_REPLAY_IFRAME_BLOCK_SELECTOR = `iframe[${SESSION_REPLAY_IFRAME_ATTRIBUTE}]`;\nconst DEFAULT_BLOCK_SELECTOR = [\n SESSION_REPLAY_IFRAME_BLOCK_SELECTOR,\n \"[data-sensitive]\",\n \"[data-an-block]\",\n \"[data-an-private]\",\n \"[data-private]\",\n \".an-block\",\n \".an-replay-block\",\n \".an-private\",\n \".rr-block\",\n \"[autocomplete='cc-number']\",\n \"[autocomplete='cc-csc']\",\n \"[autocomplete='cc-exp']\",\n \"[name*='password' i]\",\n \"[name*='credit' i]\",\n \"[name*='card' i]\",\n \"[name*='ssn' i]\",\n].join(\", \");\nconst DEFAULT_IGNORE_SELECTOR = \".an-ignore, [data-an-ignore]\";\nconst DEFAULT_MASK_TEXT_CLASS = \"an-mask\";\nconst DEFAULT_MASK_TEXT_SELECTOR = \"[data-an-mask]\";\nconst DEFAULT_MASK_INPUT_OPTIONS: Record<string, boolean> = {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n password: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n};\nconst DEFAULT_FLUSH_INTERVAL_MS = 5000;\nconst DEFAULT_MAX_DURATION_MS = 30 * 60 * 1000;\nconst DEFAULT_MAX_EVENTS_PER_BATCH = 50;\nconst DEFAULT_MAX_BATCH_BYTES = 256 * 1024;\nconst MAX_KEEPALIVE_REPLAY_UPLOAD_BYTES = 60 * 1024;\nconst REPLAY_TEXT_ENCODER =\n typeof TextEncoder !== \"undefined\" ? new TextEncoder() : null;\nconst RRWEB_FULL_SNAPSHOT_EVENT_TYPE = 2;\n/** Cross-tab channel name used by the duplicated-tab claim guard. */\nconst SESSION_REPLAY_BROADCAST_CHANNEL_NAME = \"agent-native-session-replay\";\n/** How long a resuming tab waits for a \"someone else already owns this\n * replayId\" reply before proceeding to record with the resumed id. */\nconst SESSION_REPLAY_CLAIM_TIMEOUT_MS = 150;\n\n/** rrweb custom-event tag for captured console/window-error entries. */\nexport const SESSION_REPLAY_CONSOLE_EVENT_TAG = \"agent-native.console\";\n/** rrweb custom-event tag for captured fetch/XHR request summaries. */\nexport const SESSION_REPLAY_NETWORK_EVENT_TAG = \"agent-native.network\";\n/** Content-free agent-chat lifecycle markers for replay incident forensics. */\nexport const SESSION_REPLAY_AGENT_CHAT_EVENT_TAG = \"agent-native.chat\";\n\nconst DEFAULT_MAX_CONSOLE_EVENTS = 1000;\nconst DEFAULT_MAX_NETWORK_EVENTS = 2000;\nconst MAX_CONSOLE_MESSAGE_LENGTH = 500;\nconst MAX_CONSOLE_ARGS = 10;\nconst MAX_CONSOLE_STACK_LENGTH = 2000;\nconst MAX_CONSOLE_SERIALIZE_DEPTH = 4;\nconst MAX_CONSOLE_SERIALIZE_ENTRIES = 20;\n/** Default cap (chars) for a captured 5xx response-body snippet. */\nconst DEFAULT_MAX_ERROR_BODY_LENGTH = 2048;\n/** Hard timeout for the async response-body read; emit without body past this. */\nconst ERROR_BODY_READ_TIMEOUT_MS = 1500;\n\n/**\n * Re-entrancy guard: true while the recorder itself is emitting custom events\n * or flushing (synchronously) so the console/fetch/XHR wrappers never capture\n * the recorder's own work and feed it back into the replay stream.\n */\nlet replayCaptureInternal = false;\n\n// Credential-looking token redaction for captured console/network text,\n// adapted from the clips template's browser-diagnostics redaction helper.\nconst CAPTURE_SECRET_KEY_FRAGMENT =\n \"(?:authorization|cookie|set[-_]?cookie|token|secret|password|passwd|pwd|api[-_]?key|apikey|session|credential)\";\nconst CAPTURE_AUTHORIZATION_SCHEME_RE =\n /\\b(authorization)\\b(\\s*[:=]\\s*)(?:bearer|basic)\\s+[a-z0-9._~+/-]+=*/gi;\nconst CAPTURE_BEARER_RE = /\\b(bearer|basic)\\s+[a-z0-9._~+/-]+=*/gi;\nconst CAPTURE_DOUBLE_QUOTED_SECRET_RE = new RegExp(\n `([\"']?)([A-Za-z0-9_$.-]*${CAPTURE_SECRET_KEY_FRAGMENT}[A-Za-z0-9_$.-]*)\\\\1(\\\\s*[:=]\\\\s*)\"(?:[^\"\\\\\\\\]|\\\\\\\\.)*\"`,\n \"gi\",\n);\nconst CAPTURE_SINGLE_QUOTED_SECRET_RE = new RegExp(\n `([\"']?)([A-Za-z0-9_$.-]*${CAPTURE_SECRET_KEY_FRAGMENT}[A-Za-z0-9_$.-]*)\\\\1(\\\\s*[:=]\\\\s*)'(?:[^'\\\\\\\\]|\\\\\\\\.)*'`,\n \"gi\",\n);\nconst CAPTURE_UNQUOTED_SECRET_RE = new RegExp(\n `([\"']?)([A-Za-z0-9_$.-]*${CAPTURE_SECRET_KEY_FRAGMENT}[A-Za-z0-9_$.-]*)\\\\1(\\\\s*[:=]\\\\s*)([^\"',\\\\s;}\\\\]]+)`,\n \"gi\",\n);\n\nfunction redactCaptureText(value: string): string {\n return value\n .replace(CAPTURE_AUTHORIZATION_SCHEME_RE, \"$1$2<redacted>\")\n .replace(CAPTURE_BEARER_RE, \"$1 <redacted>\")\n .replace(CAPTURE_DOUBLE_QUOTED_SECRET_RE, '$1$2$1$3\"<redacted>\"')\n .replace(CAPTURE_SINGLE_QUOTED_SECRET_RE, \"$1$2$1$3'<redacted>'\")\n .replace(CAPTURE_UNQUOTED_SECRET_RE, \"$1$2$1$3<redacted>\");\n}\nconst URL_LIKE_KEYS = new Set([\n \"url\",\n \"uri\",\n \"href\",\n \"src\",\n \"currentUrl\",\n \"referrer\",\n \"from\",\n \"to\",\n]);\n\nfunction getState(): SessionReplayState {\n const g = globalThis as typeof globalThis & {\n [SESSION_REPLAY_STATE_KEY]?: SessionReplayState;\n };\n if (!g[SESSION_REPLAY_STATE_KEY]) {\n g[SESSION_REPLAY_STATE_KEY] = {\n active: false,\n startPromise: null,\n startGeneration: 0,\n replayId: null,\n startedAtMs: null,\n replayLinkBaseUrl: null,\n sequence: 0,\n queue: [],\n queuedBytes: 0,\n retryBatches: [],\n transientClientErrorFailures: 0,\n flushTimer: null,\n maxDurationTimer: null,\n flushing: false,\n pendingFlushReason: null,\n pendingFlushWaiters: [],\n awaitingFullSnapshot: false,\n stopRecorder: null,\n restoreUrlMonitor: null,\n removeLifecycleListeners: null,\n restoreIframeBridge: null,\n addCustomEvent: null,\n restoreCaptures: null,\n options: null,\n lastAuthenticatedProperties: null,\n resourceNodes: new Map(),\n automaticConflictRestartAttempted: false,\n broadcastChannel: null,\n };\n }\n const state = g[SESSION_REPLAY_STATE_KEY]!;\n // Keep Vite HMR safe when an older recorder state survives a module reload.\n state.resourceNodes ??= new Map();\n state.transientClientErrorFailures ??= 0;\n state.restoreIframeBridge ??= null;\n state.pendingFlushReason ??= null;\n state.pendingFlushWaiters ??= [];\n state.awaitingFullSnapshot ??= false;\n state.startGeneration ??= 0;\n state.replayLinkBaseUrl ??= null;\n return state;\n}\n\n// The replay session record (replayId + sequence counter) lives in\n// `sessionStorage`, not `localStorage`: `localStorage` is shared by every\n// open tab of the origin, which would hand every tab the same `replayId` and\n// the same sequence counter. See the guard comment above\n// `getOrCreateReplaySession` for the corruption that causes.\nfunction safeSessionStorageGet(key: string): string | null {\n try {\n return window.sessionStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction safeSessionStorageSet(key: string, value: string): void {\n try {\n window.sessionStorage.setItem(key, value);\n } catch {\n // private browsing / storage disabled -- replay still works for this page\n }\n}\n\nfunction safeSessionStorageRemove(key: string): void {\n try {\n window.sessionStorage.removeItem(key);\n } catch {\n // private browsing / storage disabled -- replay still works for this page\n }\n}\n\nlet legacyLocalStorageReplaySessionCleared = false;\n\n/**\n * Best-effort, one-time removal of the pre-fix replay session record that\n * used to live in `localStorage`. Never read from it -- adopting its\n * `replayId` would recreate the exact shared-identity bug this file now\n * avoids by using `sessionStorage` instead.\n */\nfunction clearLegacyLocalStorageReplaySession(): void {\n if (legacyLocalStorageReplaySessionCleared) return;\n legacyLocalStorageReplaySessionCleared = true;\n try {\n window.localStorage.removeItem(SESSION_REPLAY_ID_STORAGE_KEY);\n } catch {\n // best-effort only -- a stray legacy record is harmless once ignored\n }\n}\n\nfunction generateReplayId(): string {\n try {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return crypto.randomUUID();\n }\n } catch {\n // fall through\n }\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n}\n\nfunction readStoredReplaySession(): StoredReplaySession | null {\n const raw = safeSessionStorageGet(SESSION_REPLAY_ID_STORAGE_KEY);\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw) as StoredReplaySession;\n if (!parsed || typeof parsed !== \"object\") return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredReplaySession(value: StoredReplaySession): void {\n safeSessionStorageSet(SESSION_REPLAY_ID_STORAGE_KEY, JSON.stringify(value));\n}\n\nfunction removeStoredReplaySession(replayId: string): void {\n if (readStoredReplaySession()?.replayId !== replayId) return;\n safeSessionStorageRemove(SESSION_REPLAY_ID_STORAGE_KEY);\n}\n\n/**\n * Per-tab replay identity is deliberate -- do not \"fix\" this by reading or\n * writing the session record through `localStorage` again.\n *\n * `sessionStorage` is scoped to a single tab (and survives reloads/\n * navigations within that tab, which is exactly the lifetime a recording\n * needs). `localStorage` is shared by every open tab of the origin. If this\n * record lived there, two tabs open to the same app would read/write the\n * *same* `replayId` and the *same* sequence counter, so rrweb in each tab\n * would record independently but upload chunks under one shared identity.\n * The two interleaved DOM mutation streams get merged into a single\n * recording server-side: mutations reference the other tab's node ids\n * (broken CSS), the viewport/meta events reflect whichever tab resized last\n * (wrong or ultra-wide viewport), and lost mousemove batches from the\n * \"other\" tab's chunks read as a frozen cursor or a fake inactivity gap. A\n * chunk-sequence collision with a different checksum gets rejected\n * server-side (409) rather than merged, so one tab's batches are silently\n * dropped -- there is no way to reconstruct or repair this at playback time.\n * Keep this per-tab. A tab *duplicated* mid-session still shares a\n * `sessionStorage` snapshot, which is what the `BroadcastChannel` claim\n * check in `startSessionReplayRecorder` guards against.\n */\nfunction getOrCreateReplaySession(\n sessionId: string,\n linkBaseUrl?: string | null,\n): {\n replayId: string;\n startedAtMs: number;\n sequence: number;\n linkBaseUrl?: string;\n /** True when resuming a session found in this tab's `sessionStorage`\n * (e.g. a reload), as opposed to minting a brand-new id. Only the resumed\n * case needs the duplicated-tab claim check -- a fresh id can never\n * collide with anything already recording. */\n resumed: boolean;\n} {\n clearLegacyLocalStorageReplaySession();\n const parsed = readStoredReplaySession();\n if (parsed?.sessionId === sessionId && parsed.replayId) {\n const startedAtMs =\n typeof parsed.startedAtMs === \"number\" &&\n Number.isFinite(parsed.startedAtMs) &&\n parsed.startedAtMs > 0\n ? parsed.startedAtMs\n : Date.now();\n const sequence =\n typeof parsed.sequence === \"number\" &&\n Number.isFinite(parsed.sequence) &&\n parsed.sequence >= 0\n ? Math.floor(parsed.sequence)\n : 0;\n const resolvedLinkBaseUrl = linkBaseUrl ?? parsed.linkBaseUrl;\n if (linkBaseUrl && parsed.linkBaseUrl !== linkBaseUrl) {\n writeStoredReplaySession({ ...parsed, linkBaseUrl });\n }\n return {\n replayId: parsed.replayId,\n startedAtMs,\n sequence,\n ...(resolvedLinkBaseUrl ? { linkBaseUrl: resolvedLinkBaseUrl } : {}),\n resumed: true,\n };\n }\n const replayId = generateReplayId();\n const startedAtMs = Date.now();\n writeStoredReplaySession({\n sessionId,\n replayId,\n startedAtMs,\n sequence: 0,\n ...(linkBaseUrl ? { linkBaseUrl } : {}),\n });\n return {\n replayId,\n startedAtMs,\n sequence: 0,\n ...(linkBaseUrl ? { linkBaseUrl } : {}),\n resumed: false,\n };\n}\n\n/**\n * Open the cross-tab claim channel used to detect a *duplicated* tab (a\n * browser \"duplicate tab\" or same-origin `window.open` copies\n * `sessionStorage`, so two tabs can legitimately start with the same\n * resumed `replayId`). Returns `null` when `BroadcastChannel` is\n * unavailable -- callers must treat that as \"skip the guard\", never as an\n * error.\n */\nfunction openReplayBroadcastChannel(): BroadcastChannel | null {\n if (typeof BroadcastChannel === \"undefined\") return null;\n try {\n return new BroadcastChannel(SESSION_REPLAY_BROADCAST_CHANNEL_NAME);\n } catch {\n return null;\n }\n}\n\n/**\n * Wires up the duplicated-tab claim channel for one recorder lifetime.\n * `respond` keeps listening for the whole life of the channel (any tab may\n * later claim the `replayId` this tab is actively recording); `probeClaim`\n * is used once, only when resuming a stored session, to ask \"is anyone else\n * already recording this id?\" and wait up to\n * `SESSION_REPLAY_CLAIM_TIMEOUT_MS` for a reply.\n */\nfunction createReplayClaimChannel(\n state: SessionReplayState,\n instanceNonce: string,\n): {\n channel: BroadcastChannel | null;\n probeClaim: (replayId: string) => Promise<boolean>;\n} {\n const channel = openReplayBroadcastChannel();\n if (!channel) {\n return { channel: null, probeClaim: async () => false };\n }\n let pending: {\n replayId: string;\n resolve: (taken: boolean) => void;\n timer: number;\n } | null = null;\n channel.onmessage = (event: MessageEvent) => {\n const data = event?.data as ReplayBroadcastMessage | undefined | null;\n if (!data || typeof data !== \"object\") return;\n if (data.type === \"an-replay-claim\") {\n if (data.instanceNonce === instanceNonce) return;\n const ownsReplayId = state.active && state.replayId === data.replayId;\n const winsSimultaneousClaim =\n pending?.replayId === data.replayId &&\n instanceNonce.localeCompare(data.instanceNonce) < 0;\n if (!ownsReplayId && !winsSimultaneousClaim) {\n // If both duplicated tabs start simultaneously, deterministically\n // yield to the lower nonce rather than letting both probes time out\n // and record under the copied replay id.\n if (\n pending?.replayId === data.replayId &&\n data.instanceNonce.localeCompare(instanceNonce) < 0\n ) {\n window.clearTimeout(pending.timer);\n const resolve = pending.resolve;\n pending = null;\n resolve(true);\n }\n return;\n }\n try {\n const reply: ReplayClaimTakenMessage = {\n type: \"an-replay-claim-taken\",\n replayId: data.replayId,\n claimantNonce: data.instanceNonce,\n };\n channel.postMessage(reply);\n } catch {\n // best-effort -- a lost reply just means the duplicate tab resumes\n // recording under the shared id; later 409s still protect the\n // stream from getting corrupted merges.\n }\n return;\n }\n if (data.type === \"an-replay-claim-taken\") {\n if (\n pending &&\n data.replayId === pending.replayId &&\n (!data.claimantNonce || data.claimantNonce === instanceNonce)\n ) {\n window.clearTimeout(pending.timer);\n const resolve = pending.resolve;\n pending = null;\n resolve(true);\n }\n }\n };\n const probeClaim = (replayId: string): Promise<boolean> =>\n new Promise((resolve) => {\n const timer = window.setTimeout(() => {\n pending = null;\n resolve(false);\n }, SESSION_REPLAY_CLAIM_TIMEOUT_MS);\n pending = { replayId, resolve, timer };\n try {\n const claim: ReplayClaimMessage = {\n type: \"an-replay-claim\",\n replayId,\n instanceNonce,\n };\n channel.postMessage(claim);\n } catch {\n window.clearTimeout(timer);\n pending = null;\n resolve(false);\n }\n });\n return { channel, probeClaim };\n}\n\nfunction persistReplaySequence(\n sessionId: string,\n replayId: string,\n startedAtMs: number | null,\n sequence: number,\n linkBaseUrl?: string | null,\n): void {\n const existing = readStoredReplaySession();\n writeStoredReplaySession({\n sessionId,\n replayId,\n startedAtMs: startedAtMs ?? Date.now(),\n sequence,\n ...(linkBaseUrl || existing?.linkBaseUrl\n ? { linkBaseUrl: linkBaseUrl ?? existing?.linkBaseUrl }\n : {}),\n });\n}\n\nfunction clampSamplingRate(value: number | undefined): number {\n if (typeof value !== \"number\" || Number.isNaN(value)) return 1;\n return Math.min(1, Math.max(0, value));\n}\n\nfunction readEnvString(key: string): string | undefined {\n return (import.meta.env as Record<string, string | undefined>)?.[key]?.trim();\n}\n\nfunction readEnvNumber(key: string): number | undefined {\n const raw = readEnvString(key);\n if (!raw) return undefined;\n const value = Number(raw);\n return Number.isFinite(value) ? value : undefined;\n}\n\nfunction readEnvBoolean(key: string): boolean | undefined {\n const raw = readEnvString(key);\n if (!raw) return undefined;\n if (/^(1|true|yes|on)$/i.test(raw)) return true;\n if (/^(0|false|no|off)$/i.test(raw)) return false;\n return undefined;\n}\n\nfunction readFirstEnvString(keys: string[]): string | undefined {\n for (const key of keys) {\n const value = readEnvString(key);\n if (value) return value;\n }\n return undefined;\n}\n\nfunction readFirstEnvNumber(keys: string[]): number | undefined {\n for (const key of keys) {\n const value = readEnvNumber(key);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction replayEndpointFromAnalyticsEndpoint(value: string): string | null {\n try {\n const url = new URL(value);\n if (url.pathname.endsWith(\"/api/analytics/track\")) {\n url.pathname = url.pathname.replace(\n /\\/api\\/analytics\\/track$/,\n \"/api/analytics/replay\",\n );\n return url.toString();\n }\n if (url.pathname.endsWith(\"/track\")) {\n url.pathname = url.pathname.replace(/\\/track$/, \"/api/analytics/replay\");\n return url.toString();\n }\n } catch {\n // Fall through to the relative path cases below.\n }\n if (value.endsWith(\"/api/analytics/track\")) {\n return value.replace(/\\/api\\/analytics\\/track$/, \"/api/analytics/replay\");\n }\n if (value.endsWith(\"/track\")) {\n return value.replace(/\\/track$/, \"/api/analytics/replay\");\n }\n return null;\n}\n\nfunction defaultReplayEndpoint(): string {\n const analyticsEndpoint = readEnvString(\n \"VITE_AGENT_NATIVE_ANALYTICS_ENDPOINT\",\n );\n const derived = analyticsEndpoint\n ? replayEndpointFromAnalyticsEndpoint(analyticsEndpoint)\n : null;\n if (derived) return derived;\n return typeof window !== \"undefined\"\n ? `${window.location.origin}${DEFAULT_REPLAY_PATH}`\n : DEFAULT_REPLAY_PATH;\n}\n\nfunction normalizeReplayLinkBaseUrl(value?: string): string | null {\n const raw =\n value?.trim() ||\n readEnvString(\"VITE_AGENT_NATIVE_ANALYTICS_APP_URL\") ||\n (typeof window !== \"undefined\" ? window.location.origin : \"\");\n if (!raw) return null;\n try {\n return new URL(\n raw,\n typeof window !== \"undefined\" ? window.location.href : undefined,\n ).origin;\n } catch {\n return null;\n }\n}\n\nexport function getSessionReplaySamplingScore(\n sessionId: string,\n salt = DEFAULT_SAMPLING_SALT,\n): number {\n let hash = 2166136261;\n const input = `${salt}:${sessionId}`;\n for (let i = 0; i < input.length; i += 1) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return (hash >>> 0) / 4294967296;\n}\n\nexport function shouldSampleSessionReplay(\n sessionId: string,\n sampleRate = 1,\n salt = DEFAULT_SAMPLING_SALT,\n): boolean {\n const rate = clampSamplingRate(sampleRate);\n if (rate <= 0) return false;\n if (rate >= 1) return true;\n return getSessionReplaySamplingScore(sessionId, salt) < rate;\n}\n\nfunction matcherAllows(matcher: SessionReplayUrlMatcher, url: string): boolean {\n if (typeof matcher === \"string\") return url.includes(matcher);\n if (matcher instanceof RegExp) return matcher.test(url);\n return matcher(url);\n}\n\nfunction isUrlRecordable(\n url: string,\n options: Pick<NormalizedSessionReplayOptions, \"allowUrls\" | \"blockUrls\">,\n): boolean {\n if (options.allowUrls.length > 0) {\n const allowed = options.allowUrls.some((matcher) =>\n matcherAllows(matcher, url),\n );\n if (!allowed) return false;\n }\n return !options.blockUrls.some((matcher) => matcherAllows(matcher, url));\n}\n\nfunction normalizeOptions(\n options: SessionReplayOptions,\n): NormalizedSessionReplayOptions | null {\n const publicKey =\n options.publicKey ||\n readFirstEnvString([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_PUBLIC_KEY\",\n \"VITE_SESSION_REPLAY_PUBLIC_KEY\",\n ]) ||\n (import.meta.env as Record<string, string | undefined>)\n ?.VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY;\n if (!publicKey) return null;\n const endpoint =\n options.endpoint ||\n readFirstEnvString([\n \"VITE_AGENT_NATIVE_ANALYTICS_REPLAY_ENDPOINT\",\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_ENDPOINT\",\n \"VITE_SESSION_REPLAY_INGEST_URL\",\n ]) ||\n defaultReplayEndpoint();\n return {\n publicKey,\n endpoint,\n linkBaseUrl: normalizeReplayLinkBaseUrl(options.linkBaseUrl),\n requireSignedInUser:\n options.requireSignedInUser ??\n readEnvBoolean(\"VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH\") ??\n readEnvBoolean(\"VITE_SESSION_REPLAY_REQUIRE_AUTH\") ??\n false,\n sampleRate: clampSamplingRate(\n options.sampleRate ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE\",\n \"VITE_SESSION_REPLAY_SAMPLE_RATE\",\n ]),\n ),\n samplingSalt: options.samplingSalt || DEFAULT_SAMPLING_SALT,\n allowUrls: options.allowUrls ?? [],\n blockUrls: options.blockUrls ?? [],\n flushIntervalMs: Math.max(\n 250,\n options.flushIntervalMs ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_CHUNK_INTERVAL_MS\",\n \"VITE_SESSION_REPLAY_CHUNK_INTERVAL_MS\",\n ]) ??\n DEFAULT_FLUSH_INTERVAL_MS,\n ),\n maxDurationMs: Math.max(\n 1000,\n options.maxDurationMs ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_MAX_DURATION_MS\",\n \"VITE_SESSION_REPLAY_MAX_DURATION_MS\",\n ]) ??\n DEFAULT_MAX_DURATION_MS,\n ),\n maxEventsPerBatch: Math.max(\n 1,\n options.maxEventsPerBatch ?? DEFAULT_MAX_EVENTS_PER_BATCH,\n ),\n maxBatchBytes: Math.max(\n 1024,\n options.maxBatchBytes ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_CHUNK_MAX_BYTES\",\n \"VITE_SESSION_REPLAY_CHUNK_MAX_BYTES\",\n ]) ??\n DEFAULT_MAX_BATCH_BYTES,\n ),\n checkoutEveryNth: options.checkoutEveryNth,\n checkoutEveryNms: options.checkoutEveryNms,\n inlineStylesheet: options.inlineStylesheet ?? true,\n blockSelector: mergeReplayBlockSelector(\n options.blockSelector || DEFAULT_BLOCK_SELECTOR,\n ),\n ignoreSelector: options.ignoreSelector || DEFAULT_IGNORE_SELECTOR,\n maskTextClass: options.maskTextClass || DEFAULT_MASK_TEXT_CLASS,\n maskTextSelector: options.maskTextSelector || DEFAULT_MASK_TEXT_SELECTOR,\n maskAllInputs: options.maskAllInputs ?? true,\n recordCanvas: options.recordCanvas ?? false,\n // A top-level app can safely aggregate cooperative child recorders. An\n // app embedded by an unrelated cross-origin host must continue emitting\n // and uploading its own events, so it only forwards to a parent when the\n // caller explicitly opts in.\n recordCrossOriginIframes:\n options.recordCrossOriginIframes ?? window.parent === window,\n collectFonts: options.collectFonts ?? false,\n inlineImages: options.inlineImages ?? false,\n eventSampling: options.eventSampling ?? DEFAULT_EVENT_SAMPLING,\n console: normalizeCaptureToggle(\n options.console,\n DEFAULT_MAX_CONSOLE_EVENTS,\n ),\n network: normalizeCaptureToggle(\n options.network,\n DEFAULT_MAX_NETWORK_EVENTS,\n ),\n onUploadRejected: options.onUploadRejected,\n extraProperties: options.extraProperties,\n shouldStart: options.shouldStart,\n };\n}\n\nfunction mergeReplayBlockSelector(blockSelector: string): string {\n return blockSelector.includes(SESSION_REPLAY_IFRAME_BLOCK_SELECTOR)\n ? blockSelector\n : `${blockSelector}, ${SESSION_REPLAY_IFRAME_BLOCK_SELECTOR}`;\n}\n\n/**\n * Console/network capture default to ON whenever session replay records;\n * `false` disables a category, an object form overrides its caps. Network\n * options may additionally carry `captureErrorBodies`/`maxErrorBodyLength`;\n * console ignores those fields.\n */\nfunction normalizeCaptureToggle(\n value: boolean | SessionReplayNetworkOptions | undefined,\n defaultMaxEvents: number,\n): NormalizedCaptureOptions | null {\n if (value === false) return null;\n const overrides = typeof value === \"object\" && value !== null ? value : {};\n const maxEvents =\n typeof overrides.maxEvents === \"number\" &&\n Number.isFinite(overrides.maxEvents)\n ? Math.max(1, Math.floor(overrides.maxEvents))\n : defaultMaxEvents;\n const maxErrorBodyLength =\n typeof overrides.maxErrorBodyLength === \"number\" &&\n Number.isFinite(overrides.maxErrorBodyLength)\n ? Math.max(0, Math.floor(overrides.maxErrorBodyLength))\n : DEFAULT_MAX_ERROR_BODY_LENGTH;\n return {\n maxEvents,\n captureErrorBodies: overrides.captureErrorBodies !== false,\n maxErrorBodyLength,\n };\n}\n\nfunction scrubStringValue(key: string, value: string): string {\n const lowerKey = key.toLowerCase();\n const isUrlKey = URL_LIKE_KEYS.has(key) || URL_LIKE_KEYS.has(lowerKey);\n if (\n isUrlKey ||\n value.startsWith(\"http://\") ||\n value.startsWith(\"https://\") ||\n value.startsWith(\"/\")\n ) {\n return scrubUrl(value) ?? value;\n }\n return value;\n}\n\nfunction scrubReplayValue(\n value: unknown,\n key = \"\",\n depth = 0,\n seen = new WeakSet<object>(),\n): unknown {\n if (typeof value === \"string\") return scrubStringValue(key, value);\n if (!value || typeof value !== \"object\") return value;\n if (depth > 12) return value;\n if (seen.has(value)) return value;\n seen.add(value);\n if (Array.isArray(value)) {\n return value.map((item) => scrubReplayValue(item, key, depth + 1, seen));\n }\n const out: Record<string, unknown> = {};\n for (const [childKey, childValue] of Object.entries(value)) {\n out[childKey] = scrubReplayValue(childValue, childKey, depth + 1, seen);\n }\n return out;\n}\n\n/**\n * JSON.stringify replacer that scrubs URL-like string values inline. Folding\n * the scrub into the single serialization pass avoids a separate deep-clone of\n * every emitted event (FullSnapshots are large DOM trees) on the hot path.\n */\nconst REPLAY_RESOURCE_LINK_RELS = new Set([\n \"stylesheet\",\n \"icon\",\n \"apple-touch-icon\",\n \"mask-icon\",\n]);\nconst REPLAY_RESOURCE_PRELOAD_TYPES = new Set([\n \"style\",\n \"font\",\n \"image\",\n \"audio\",\n \"video\",\n \"track\",\n]);\nconst REPLAY_RESOURCE_TAGS = new Set([\n \"img\",\n \"source\",\n \"video\",\n \"audio\",\n \"track\",\n \"input\",\n \"link\",\n]);\nconst NO_REPLAY_RESOURCE_ATTRIBUTES = new Set<string>();\nconst REPLAY_SRC_ATTRIBUTES = new Set([\"src\"]);\nconst REPLAY_SRCSET_ATTRIBUTES = new Set([\"src\", \"srcset\"]);\nconst REPLAY_VIDEO_ATTRIBUTES = new Set([\"src\", \"poster\"]);\nconst REPLAY_HREF_ATTRIBUTES = new Set([\"href\"]);\n\nfunction replayAttributeString(\n attributes: Record<string, unknown>,\n key: string,\n): string {\n return typeof attributes[key] === \"string\"\n ? attributes[key].toLowerCase()\n : \"\";\n}\n\nfunction updateReplayResourceNode(\n current: ReplayResourceNode,\n attributes: Record<string, unknown>,\n): ReplayResourceNode {\n return {\n tagName: current.tagName,\n rel: Object.prototype.hasOwnProperty.call(attributes, \"rel\")\n ? replayAttributeString(attributes, \"rel\")\n : current.rel,\n as: Object.prototype.hasOwnProperty.call(attributes, \"as\")\n ? replayAttributeString(attributes, \"as\")\n : current.as,\n type: Object.prototype.hasOwnProperty.call(attributes, \"type\")\n ? replayAttributeString(attributes, \"type\")\n : current.type,\n };\n}\n\nfunction replayPreservedResourceAttributes(\n node: ReplayResourceNode,\n): ReadonlySet<string> {\n switch (node.tagName) {\n case \"img\":\n case \"source\":\n return REPLAY_SRCSET_ATTRIBUTES;\n case \"video\":\n return REPLAY_VIDEO_ATTRIBUTES;\n case \"audio\":\n case \"track\":\n return REPLAY_SRC_ATTRIBUTES;\n case \"input\":\n return node.type === \"image\"\n ? REPLAY_SRC_ATTRIBUTES\n : NO_REPLAY_RESOURCE_ATTRIBUTES;\n case \"link\": {\n const rels = node.rel.split(/\\s+/);\n const isLoadBearingResource =\n rels.some((rel) => REPLAY_RESOURCE_LINK_RELS.has(rel)) ||\n (rels.includes(\"preload\") &&\n REPLAY_RESOURCE_PRELOAD_TYPES.has(node.as));\n return isLoadBearingResource\n ? REPLAY_HREF_ATTRIBUTES\n : NO_REPLAY_RESOURCE_ATTRIBUTES;\n }\n default:\n return NO_REPLAY_RESOURCE_ATTRIBUTES;\n }\n}\n\n/**\n * Build a path-aware replay serializer without cloning the rrweb event.\n *\n * Privacy still wins for Meta/navigation URLs, executable/embed URLs, anchor\n * hrefs, and custom console/network diagnostics. The narrow exception is\n * load-bearing stylesheet, font, image, and media attributes: changing those\n * signed URLs makes rrweb rebuild a page that never existed. JSON.stringify\n * calls a replacer for an `attributes` object before its children, so the\n * WeakMap lets the child callback recognize only that bag.\n */\nfunction createReplayScrubReplacer(\n resourceNodes: Map<number, ReplayResourceNode>,\n): (this: unknown, key: string, value: unknown) => unknown {\n const preservedAttributes = new WeakMap<object, ReadonlySet<string>>();\n\n return function replayScrubReplacer(\n this: unknown,\n key: string,\n value: unknown,\n ): unknown {\n if (key === \"attributes\" && value && typeof value === \"object\") {\n const attributes = value as Record<string, unknown>;\n const holder =\n this && typeof this === \"object\"\n ? (this as Record<string, unknown>)\n : undefined;\n const tagName =\n typeof holder?.tagName === \"string\" ? holder.tagName.toLowerCase() : \"\";\n const nodeId =\n typeof holder?.id === \"number\" && Number.isFinite(holder.id)\n ? holder.id\n : undefined;\n let resourceNode: ReplayResourceNode | undefined;\n if (tagName && REPLAY_RESOURCE_TAGS.has(tagName)) {\n resourceNode = updateReplayResourceNode(\n { tagName, rel: \"\", as: \"\", type: \"\" },\n attributes,\n );\n } else if (nodeId !== undefined && !tagName) {\n const current = resourceNodes.get(nodeId);\n if (current) {\n resourceNode = updateReplayResourceNode(current, attributes);\n }\n }\n if (nodeId !== undefined && resourceNode) {\n resourceNodes.set(nodeId, resourceNode);\n }\n\n const resourceKeys = resourceNode\n ? replayPreservedResourceAttributes(resourceNode)\n : NO_REPLAY_RESOURCE_ATTRIBUTES;\n\n if (resourceKeys.size > 0) preservedAttributes.set(value, resourceKeys);\n return value;\n }\n\n if (\n typeof value === \"string\" &&\n this &&\n typeof this === \"object\" &&\n preservedAttributes.get(this)?.has(key.toLowerCase())\n ) {\n return value;\n }\n return typeof value === \"string\" ? scrubStringValue(key, value) : value;\n };\n}\n\n/**\n * Serialize + scrub one event in a single pass. The resulting string is stored\n * directly on the queue and reused verbatim at flush, so each event is\n * stringified exactly once (was: deep-clone + size-stringify + flush-stringify).\n */\nfunction serializeReplayEvent(\n event: ReplayEvent,\n resourceNodes: Map<number, ReplayResourceNode>,\n): string {\n try {\n if (event.type === 2) resourceNodes.clear();\n return JSON.stringify(event, createReplayScrubReplacer(resourceNodes));\n } catch {\n return \"\";\n }\n}\n\nfunction replayEventTimestampMs(event: ReplayEvent): number {\n const timestamp = event.timestamp;\n if (typeof timestamp === \"number\" && Number.isFinite(timestamp)) {\n return timestamp;\n }\n if (typeof timestamp === \"string\" && timestamp.trim()) {\n const parsed = Date.parse(timestamp);\n if (Number.isFinite(parsed)) return parsed;\n }\n return Date.now();\n}\n\nfunction enqueueReplayEvent(\n state: SessionReplayState,\n event: ReplayEvent,\n): void {\n if (!state.options) return;\n const eventType = typeof event.type === \"number\" ? event.type : null;\n if (state.awaitingFullSnapshot) {\n if (eventType !== RRWEB_FULL_SNAPSHOT_EVENT_TYPE) return;\n state.awaitingFullSnapshot = false;\n }\n const serialized = serializeReplayEvent(event, state.resourceNodes);\n if (!serialized) return;\n const estimatedBytes = replaySerializedBytes(serialized);\n if (\n state.queue.length > 0 &&\n state.queuedBytes + estimatedBytes > state.options.maxBatchBytes\n ) {\n void flushSessionReplay(\"max-bytes\");\n }\n state.queue.push({\n json: serialized,\n byteLength: estimatedBytes,\n timestampMs: replayEventTimestampMs(event),\n type: eventType,\n });\n state.queuedBytes += estimatedBytes;\n flushQueuedReplayIfNeeded(state);\n}\n\nfunction replayExtraProperties(\n options: NormalizedSessionReplayOptions,\n): Record<string, unknown> | undefined {\n const source = options.extraProperties;\n if (!source) return undefined;\n try {\n const props = typeof source === \"function\" ? source() : source;\n if (!props || typeof props !== \"object\") return undefined;\n return scrubReplayValue(props) as Record<string, unknown>;\n } catch {\n return undefined;\n }\n}\n\nfunction replayString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction replayEmail(value: unknown): string | undefined {\n const raw = replayString(value);\n return raw && raw.includes(\"@\") ? raw : undefined;\n}\n\nfunction replayUserEmail(\n properties: Record<string, unknown> | undefined,\n): string | undefined {\n return (\n replayEmail(properties?.userEmail ?? properties?.user_email) ||\n replayEmail(properties?.email) ||\n replayEmail(properties?.userId ?? properties?.user_id)\n );\n}\n\nfunction replayPropertiesForUpload(\n state: SessionReplayState,\n options: NormalizedSessionReplayOptions,\n): Record<string, unknown> | undefined {\n const properties = replayExtraProperties(options);\n if (replayUserEmail(properties)) {\n state.lastAuthenticatedProperties = properties ? { ...properties } : null;\n return properties;\n }\n if (options.requireSignedInUser && state.lastAuthenticatedProperties) {\n return state.lastAuthenticatedProperties;\n }\n return properties;\n}\n\ninterface ReplayUploadPayload {\n body: string;\n replayId: string;\n sessionId: string;\n sequence: number;\n}\n\nfunction buildReplayBody(\n state: SessionReplayState,\n reason: string,\n events: QueuedReplayEvent[],\n): ReplayUploadPayload | null {\n const options = state.options;\n if (!options || !state.replayId) return null;\n const sessionId = getOrCreateAnalyticsSessionId();\n if (!sessionId) return null;\n const properties = replayPropertiesForUpload(state, options);\n const userEmail = replayUserEmail(properties);\n if (options.requireSignedInUser && !userEmail) return null;\n const userId =\n userEmail || replayString(properties?.userId ?? properties?.user_id);\n const eventTimestamps = events.map((event) => event.timestampMs);\n const nowMs = Date.now();\n const startedAtMs =\n state.startedAtMs ??\n (eventTimestamps.length ? Math.min(...eventTimestamps) : nowMs);\n const endedAtMs = eventTimestamps.length\n ? Math.max(...eventTimestamps)\n : nowMs;\n const envelope = {\n publicKey: options.publicKey,\n type: \"session_replay\",\n replayId: state.replayId,\n sessionId,\n ...(userId ? { userId } : {}),\n ...(userEmail ? { userEmail } : {}),\n anonymousId: getOrCreateAnalyticsAnonymousId(),\n sequence: state.sequence,\n reason,\n status: isFinalFlushReason(reason) ? \"completed\" : \"active\",\n eventCount: events.length,\n startedAt: new Date(startedAtMs).toISOString(),\n endedAt: new Date(endedAtMs).toISOString(),\n durationMs: Math.max(0, endedAtMs - startedAtMs),\n privacyMode: \"mask-inputs-and-selected-text\",\n url:\n typeof window !== \"undefined\"\n ? scrubUrl(window.location.href)\n : undefined,\n timestamp: new Date().toISOString(),\n properties,\n };\n // Events are already serialized+scrubbed JSON strings; splice them into the\n // envelope without re-serializing the (potentially large) events array.\n const envelopeJson = JSON.stringify(envelope);\n return {\n body: `${envelopeJson.slice(0, -1)},\"events\":[${events\n .map((event) => event.json)\n .join(\",\")}]}`,\n replayId: state.replayId,\n sessionId,\n sequence: state.sequence,\n };\n}\n\ninterface ReplayUploadBody {\n body: BodyInit;\n headers: Record<string, string>;\n compressed: boolean;\n}\n\nfunction isCrossOriginReplayEndpoint(endpoint: string): boolean {\n if (typeof window === \"undefined\") return false;\n try {\n return (\n new URL(endpoint, window.location.href).origin !== window.location.origin\n );\n } catch {\n return false;\n }\n}\n\nasync function gzipReplayBody(body: string): Promise<Blob | null> {\n if (\n typeof CompressionStream === \"undefined\" ||\n typeof Blob === \"undefined\" ||\n typeof Response === \"undefined\"\n ) {\n return null;\n }\n try {\n const stream = new Blob([body], { type: \"application/json\" })\n .stream()\n .pipeThrough(new CompressionStream(\"gzip\"));\n const compressed = await new Response(stream).arrayBuffer();\n return new Blob([compressed], { type: \"application/octet-stream\" });\n } catch {\n return null;\n }\n}\n\nasync function buildReplayUploadBody(body: string): Promise<ReplayUploadBody> {\n const compressed = await gzipReplayBody(body);\n if (compressed) {\n return {\n body: compressed,\n compressed: true,\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n \"Content-Encoding\": \"gzip\",\n },\n };\n }\n return {\n body,\n compressed: false,\n headers: {\n \"Content-Type\": \"text/plain;charset=UTF-8\",\n },\n };\n}\n\nfunction replayUploadBodyBytes(body: BodyInit): number {\n if (typeof body === \"string\") {\n if (typeof TextEncoder !== \"undefined\") {\n return new TextEncoder().encode(body).byteLength;\n }\n return body.length;\n }\n if (typeof Blob !== \"undefined\" && body instanceof Blob) {\n return body.size;\n }\n if (body instanceof ArrayBuffer) {\n return body.byteLength;\n }\n if (ArrayBuffer.isView(body)) {\n return body.byteLength;\n }\n return MAX_KEEPALIVE_REPLAY_UPLOAD_BYTES + 1;\n}\n\nfunction canUseReplayKeepalive(body: BodyInit): boolean {\n return replayUploadBodyBytes(body) <= MAX_KEEPALIVE_REPLAY_UPLOAD_BYTES;\n}\n\n/** Thrown by `sendReplayUpload` on a non-ok HTTP response, carrying the\n * status so `flushSessionReplay` can tell a permanent client rejection\n * (e.g. a 409 checksum conflict, which can never succeed on retry) apart\n * from a transient failure worth retrying. */\nclass ReplayUploadHttpError extends Error {\n readonly status: number;\n constructor(status: number) {\n super(`Session replay upload failed with HTTP ${status}`);\n this.name = \"ReplayUploadHttpError\";\n this.status = status;\n }\n}\n\n/** 4xx statuses where retrying the exact same batch can never succeed.\n * Keep this deliberately narrow: 401/403/404 can be temporary during auth or\n * deploy transitions, so they get a small retry budget before the rejected\n * episode is stopped. The budget prevents a persistent configuration failure\n * from pinning retryBatches while rrweb events grow without bound. */\nfunction isDefinitiveReplayUploadClientError(status: number): boolean {\n return status === 400 || status === 409 || status === 413 || status === 422;\n}\n\nconst MAX_TRANSIENT_REPLAY_CLIENT_FAILURES = 3;\n\nfunction isTransientReplayUploadClientError(status: number): boolean {\n return status === 401 || status === 403 || status === 404;\n}\n\nasync function sendReplayUpload(\n options: NormalizedSessionReplayOptions,\n body: string,\n callbacks: { beforeKeepaliveUpload?: () => void } = {},\n): Promise<void> {\n if (isCrossOriginReplayEndpoint(options.endpoint)) {\n const canUseKeepalive = canUseReplayKeepalive(body);\n if (canUseKeepalive) callbacks.beforeKeepaliveUpload?.();\n const response = await fetch(options.endpoint, {\n method: \"POST\",\n body,\n keepalive: canUseKeepalive,\n headers: { \"Content-Type\": \"text/plain;charset=UTF-8\" },\n });\n if (!response.ok) {\n throw new ReplayUploadHttpError(response.status);\n }\n return;\n }\n\n const upload = await buildReplayUploadBody(body);\n const canUseKeepalive = canUseReplayKeepalive(upload.body);\n if (canUseKeepalive) callbacks.beforeKeepaliveUpload?.();\n const response = await fetch(options.endpoint, {\n method: \"POST\",\n body: upload.body,\n keepalive: canUseKeepalive,\n headers: {\n ...upload.headers,\n \"X-Agent-Native-Analytics-Key\": options.publicKey,\n },\n });\n if (!response.ok) {\n throw new ReplayUploadHttpError(response.status);\n }\n}\n\nfunction isFinalFlushReason(reason: string): boolean {\n return [\n \"auth-cleared\",\n \"manual\",\n \"pagehide\",\n \"beforeunload\",\n \"url-blocked\",\n \"max-duration\",\n ].includes(reason);\n}\n\nfunction flushReasonPriority(reason: string): number {\n // Unload reasons must retain their keepalive sequence reservation even when\n // another final request (for example, an explicit manual stop) is coalesced.\n if (reason === \"pagehide\" || reason === \"beforeunload\") return 3;\n if (isFinalFlushReason(reason)) return 2;\n if (reason === \"visibility-hidden\") return 1;\n return 0;\n}\n\nfunction mergePendingFlushReason(\n current: string | null,\n requested: string,\n): string {\n if (!current) return requested;\n return flushReasonPriority(requested) > flushReasonPriority(current)\n ? requested\n : current;\n}\n\nfunction shouldReserveSequenceBeforeKeepalive(reason: string): boolean {\n return (\n reason === \"pagehide\" ||\n reason === \"beforeunload\" ||\n reason === \"visibility-hidden\"\n );\n}\n\nfunction hasFullSnapshot(events: QueuedReplayEvent[]): boolean {\n return events.some((event) => event.type === RRWEB_FULL_SNAPSHOT_EVENT_TYPE);\n}\n\nfunction hasPendingReplayBatch(state: SessionReplayState): boolean {\n return state.retryBatches.length > 0 || state.queue.length > 0;\n}\n\nfunction shouldFlushQueuedReplay(state: SessionReplayState): boolean {\n if (!state.options || state.queue.length === 0) return false;\n return (\n hasFullSnapshot(state.queue) ||\n state.queue.length >= state.options.maxEventsPerBatch ||\n state.queuedBytes >= state.options.maxBatchBytes\n );\n}\n\nfunction flushQueuedReplayIfNeeded(state: SessionReplayState): void {\n const options = state.options;\n if (!options) return;\n if (state.retryBatches.length > 0) return;\n if (!shouldFlushQueuedReplay(state)) return;\n const reason = hasFullSnapshot(state.queue)\n ? \"full-snapshot\"\n : state.queue.length >= options.maxEventsPerBatch\n ? \"max-events\"\n : \"max-bytes\";\n void flushSessionReplay(reason);\n}\n\nfunction queuedReplayBytes(events: QueuedReplayEvent[]): number {\n return events.reduce(\n (total, event) => total + queuedReplayEventBytes(event),\n 0,\n );\n}\n\nfunction replaySerializedBytes(value: string): number {\n if (REPLAY_TEXT_ENCODER) return REPLAY_TEXT_ENCODER.encode(value).byteLength;\n if (typeof Blob !== \"undefined\") return new Blob([value]).size;\n return value.length;\n}\n\nfunction queuedReplayEventBytes(event: QueuedReplayEvent): number {\n return Number.isFinite(event.byteLength)\n ? event.byteLength\n : replaySerializedBytes(event.json);\n}\n\n/**\n * Remove one bounded FIFO prefix from the live queue.\n *\n * Threshold-triggered flushes may arrive while another upload is active. The\n * old `queue.splice(0)` drained that entire accumulated backlog on the next\n * flush, bypassing both byte and event caps. Keep FullSnapshots isolated and\n * always take at least one event so an individually large snapshot can still\n * make progress.\n */\nfunction takeQueuedReplayBatch(state: SessionReplayState): QueuedReplayEvent[] {\n const options = state.options;\n if (!options || state.queue.length === 0) return [];\n\n let count = 0;\n let bytes = 0;\n for (const event of state.queue) {\n if (count > 0 && event.type === RRWEB_FULL_SNAPSHOT_EVENT_TYPE) break;\n if (\n count > 0 &&\n (count >= options.maxEventsPerBatch ||\n bytes + queuedReplayEventBytes(event) > options.maxBatchBytes)\n ) {\n break;\n }\n count += 1;\n bytes += queuedReplayEventBytes(event);\n if (event.type === RRWEB_FULL_SNAPSHOT_EVENT_TYPE) break;\n }\n\n const events = state.queue.splice(0, Math.max(1, count));\n state.queuedBytes = queuedReplayBytes(state.queue);\n return events;\n}\n\nfunction splitReplayBatch(\n events: QueuedReplayEvent[],\n): [QueuedReplayEvent[], QueuedReplayEvent[]] | null {\n if (events.length < 2) return null;\n const targetBytes = queuedReplayBytes(events) / 2;\n let splitAt = 1;\n let bytes = events[0] ? queuedReplayEventBytes(events[0]) : 0;\n while (splitAt < events.length - 1 && bytes < targetBytes) {\n const event = events[splitAt];\n if (event) bytes += queuedReplayEventBytes(event);\n splitAt += 1;\n }\n return [events.slice(0, splitAt), events.slice(splitAt)];\n}\n\nfunction replayBatchNeedsDomReset(events: QueuedReplayEvent[]): boolean {\n return events.some((event) => {\n if (event.type === RRWEB_FULL_SNAPSHOT_EVENT_TYPE) return true;\n if (event.type !== 3) return false;\n try {\n const parsed = JSON.parse(event.json) as { data?: { source?: unknown } };\n // rrweb IncrementalSource.Mutation is zero. Dropping one may leave later\n // node references dangling until another FullSnapshot resets the mirror.\n return parsed.data?.source === 0;\n } catch {\n return true;\n }\n });\n}\n\nfunction quarantinePendingReplayUntilFullSnapshot(\n state: SessionReplayState,\n): void {\n const pending = [...state.retryBatches.flat(), ...state.queue];\n const resetAt = pending.findIndex(\n (event) => event.type === RRWEB_FULL_SNAPSHOT_EVENT_TYPE,\n );\n state.retryBatches = [];\n state.queue = resetAt >= 0 ? pending.slice(resetAt) : [];\n state.queuedBytes = queuedReplayBytes(state.queue);\n state.awaitingFullSnapshot = resetAt < 0;\n}\n\nfunction restoreReplayEvents(\n state: SessionReplayState,\n events: QueuedReplayEvent[],\n): void {\n state.retryBatches.unshift(events);\n}\n\nfunction advanceReplaySequence(\n state: SessionReplayState,\n payload: ReplayUploadPayload,\n): void {\n if (state.replayId !== payload.replayId) return;\n state.sequence = Math.max(state.sequence, payload.sequence + 1);\n persistReplaySequence(\n payload.sessionId,\n payload.replayId,\n state.startedAtMs,\n state.sequence,\n state.replayLinkBaseUrl,\n );\n}\n\nfunction rollbackReplaySequenceReservation(\n state: SessionReplayState,\n payload: ReplayUploadPayload,\n): void {\n if (state.replayId !== payload.replayId) return;\n if (state.sequence !== payload.sequence + 1) return;\n state.sequence = payload.sequence;\n persistReplaySequence(\n payload.sessionId,\n payload.replayId,\n state.startedAtMs,\n state.sequence,\n state.replayLinkBaseUrl,\n );\n}\n\nexport async function flushSessionReplay(reason = \"manual\"): Promise<void> {\n const state = getState();\n if (!state.options) return;\n if (state.flushing) {\n state.pendingFlushReason = mergePendingFlushReason(\n state.pendingFlushReason,\n reason,\n );\n return new Promise<void>((resolve) => {\n state.pendingFlushWaiters.push(resolve);\n });\n }\n if (!hasPendingReplayBatch(state)) return;\n const events = state.retryBatches.shift() ?? takeQueuedReplayBatch(state);\n const payload = buildReplayBody(state, reason, events);\n if (!payload || !state.options) {\n restoreReplayEvents(state, events);\n return;\n }\n state.flushing = true;\n let uploaded = false;\n let reservedSequence = false;\n let splitRejectedBatch = false;\n let droppedOversizedBatch = false;\n let definitiveClientErrorStatus: number | null = null;\n try {\n await sendReplayUpload(state.options, payload.body, {\n beforeKeepaliveUpload: shouldReserveSequenceBeforeKeepalive(reason)\n ? () => {\n advanceReplaySequence(state, payload);\n reservedSequence = true;\n }\n : undefined,\n });\n if (!reservedSequence) advanceReplaySequence(state, payload);\n state.automaticConflictRestartAttempted = false;\n state.transientClientErrorFailures = 0;\n uploaded = true;\n } catch (error) {\n if (reservedSequence) rollbackReplaySequenceReservation(state, payload);\n // A definitive 4xx (e.g. a 409 chunk-sequence/checksum conflict) can\n // never succeed by retrying the exact same batch -- requeuing it would\n // just spin forever, blocking every later batch behind it (flushes are\n // FIFO via `retryBatches`). Drop it and move on instead.\n const rejectedStatus =\n error instanceof ReplayUploadHttpError ? error.status : null;\n const splitBatch = rejectedStatus === 413 ? splitReplayBatch(events) : null;\n const isUnsplittableOversizedBatch =\n rejectedStatus === 413 && splitBatch === null;\n const isTransientClientError =\n rejectedStatus !== null &&\n isTransientReplayUploadClientError(rejectedStatus);\n if (isTransientClientError) {\n state.transientClientErrorFailures += 1;\n } else {\n state.transientClientErrorFailures = 0;\n }\n const exhaustedTransientClientRetries =\n isTransientClientError &&\n state.transientClientErrorFailures >=\n MAX_TRANSIENT_REPLAY_CLIENT_FAILURES;\n const isDefinitiveClientError =\n error instanceof ReplayUploadHttpError &&\n (isDefinitiveReplayUploadClientError(error.status) ||\n exhaustedTransientClientRetries) &&\n !splitBatch &&\n !isUnsplittableOversizedBatch;\n if (splitBatch) {\n // A server or platform can enforce a stricter decompressed-body limit\n // than the recorder's configured queue cap. Bisect in FIFO order and\n // retry both halves at the same sequence; only successful halves advance\n // it, so no event is duplicated or skipped.\n state.retryBatches.unshift(...splitBatch);\n splitRejectedBatch = true;\n } else if (isUnsplittableOversizedBatch) {\n // This one event cannot be made any smaller. Drop only the rejected\n // singleton and keep later retry halves/live batches in FIFO order. If\n // it carried DOM structure, quarantine dependent mutations until a new\n // FullSnapshot can safely re-anchor rrweb's node mirror.\n droppedOversizedBatch = true;\n if (replayBatchNeedsDomReset(events)) {\n quarantinePendingReplayUntilFullSnapshot(state);\n }\n } else if (isDefinitiveClientError) {\n // Continuing after a checksum/sequence conflict would reuse the same\n // rejected sequence forever. More importantly, advancing past it would\n // append mutations to a replay whose DOM stream may belong to another\n // tab. End this recorder and clear its persisted identity so the next\n // start creates a clean replay instead of producing corrupt playback.\n state.queue = [];\n state.queuedBytes = 0;\n state.retryBatches = [];\n removeStoredReplaySession(payload.replayId);\n definitiveClientErrorStatus = error.status;\n } else {\n restoreReplayEvents(state, events);\n }\n // Guard the recorder's own warning so console capture never records it\n // (a captured warning would enqueue an event and retrigger a flush).\n const previousInternal = replayCaptureInternal;\n replayCaptureInternal = true;\n try {\n if (splitRejectedBatch) {\n console.warn(\n \"[session-replay] splitting oversized upload (HTTP 413)\",\n error,\n );\n } else if (droppedOversizedBatch) {\n console.warn(\n \"[session-replay] dropping oversized replay event (HTTP 413)\",\n error,\n );\n } else if (isDefinitiveClientError) {\n console.warn(\n `[session-replay] dropping upload (HTTP ${(error as ReplayUploadHttpError).status})`,\n error,\n );\n } else {\n console.warn(\"[session-replay] upload failed\", error);\n }\n } finally {\n replayCaptureInternal = previousInternal;\n }\n } finally {\n state.flushing = false;\n }\n const coalescedReason = state.pendingFlushReason;\n const coalescedWaiters = coalescedReason\n ? state.pendingFlushWaiters.splice(0)\n : [];\n if (coalescedReason) state.pendingFlushReason = null;\n\n if (coalescedReason) {\n // A stop/unload request that arrived during this upload owns the tail.\n // Its higher-priority reason must replace threshold/internal reasons so a\n // small final batch is not stranded or mislabeled as active.\n await flushSessionReplay(coalescedReason);\n } else if (splitRejectedBatch || droppedOversizedBatch) {\n // Preserve final-status and unload semantics through every half. In\n // particular, pagehide/beforeunload retries must still reserve their\n // sequence before a keepalive fetch, and completed flushes must not be\n // rewritten to an internal recovery reason/status.\n await flushSessionReplay(reason);\n } else if (uploaded && hasPendingReplayBatch(state)) {\n const mustContinue =\n state.retryBatches.length > 0 ||\n isFinalFlushReason(reason) ||\n shouldFlushQueuedReplay(state);\n if (mustContinue) {\n if (isFinalFlushReason(reason)) {\n await flushSessionReplay(reason);\n } else void flushSessionReplay(reason);\n }\n }\n if (\n definitiveClientErrorStatus !== null &&\n state.replayId === payload.replayId\n ) {\n const rejectedOptions = state.options;\n const shouldRestartAfterConflict =\n definitiveClientErrorStatus === 409 &&\n state.active &&\n !isFinalFlushReason(reason) &&\n !state.automaticConflictRestartAttempted;\n if (shouldRestartAfterConflict) {\n state.automaticConflictRestartAttempted = true;\n }\n\n await stopSessionReplay(\"upload-rejected\");\n\n // A 409 means this replay identity can no longer append safely (usually a\n // duplicated tab that inherited sessionStorage, or an old shared identity\n // still open during rollout). Do not leave a long-lived SPA tab silently\n // unrecorded until its next page load: restart rrweb under a fresh per-tab\n // id so it emits a new Meta + FullSnapshot stream. Limit this to one retry\n // until an upload succeeds; other definitive 4xx responses usually reflect\n // configuration/input errors and must not create a restart loop.\n let restartResult: SessionReplayStartResult | null = null;\n if (shouldRestartAfterConflict && rejectedOptions) {\n restartResult = await restartSessionReplayAfterConflict(\n state,\n rejectedOptions,\n payload.sessionId,\n );\n }\n\n // Rare recovery-path telemetry lets Analytics owners quantify conflicts\n // without recording the rejected replay id, URL, or any captured content.\n try {\n rejectedOptions?.onUploadRejected?.({\n status: definitiveClientErrorStatus,\n restartAttempted: shouldRestartAfterConflict,\n restartSucceeded: restartResult?.started === true,\n ...(restartResult?.reason\n ? { restartReason: restartResult.reason }\n : {}),\n });\n } catch {\n // best-effort telemetry must never interfere with recording recovery\n }\n }\n for (const resolve of coalescedWaiters) resolve();\n}\n\n/**\n * Restart a recorder whose replay identity was rejected without routing the\n * already-normalized options back through the public start API.\n *\n * The original recording already passed whole-session sampling. Re-entering\n * `startSessionReplay` here would ask `getOrCreateAnalyticsSessionId` again;\n * if the analytics session rotated while the upload was in flight, recovery\n * could be sampled out and leave a long-lived SPA tab silently unrecorded.\n * Keeping the original session id and accepted sampling decision also lets us\n * reuse the exact normalized console/network capture caps instead of relying\n * on internal option shapes continuing to round-trip through the public API.\n */\nasync function restartSessionReplayAfterConflict(\n state: SessionReplayState,\n options: NormalizedSessionReplayOptions,\n sessionId: string,\n): Promise<SessionReplayStartResult> {\n // Share the public-start mutex. A consumer may call start in the await gap\n // after the rejected recorder stops; both paths must converge on one rrweb\n // instance rather than racing two fresh identities.\n if (state.startPromise) return state.startPromise;\n\n const startGeneration = ++state.startGeneration;\n let startPromise: Promise<SessionReplayStartResult>;\n startPromise = restartSessionReplayAfterConflictInternal(\n state,\n options,\n sessionId,\n startGeneration,\n ).finally(() => {\n if (state.startPromise === startPromise) state.startPromise = null;\n });\n state.startPromise = startPromise;\n return startPromise;\n}\n\nasync function restartSessionReplayAfterConflictInternal(\n state: SessionReplayState,\n options: NormalizedSessionReplayOptions,\n sessionId: string,\n startGeneration: number,\n): Promise<SessionReplayStartResult> {\n if (options.shouldStart && !options.shouldStart()) {\n return { started: false, reason: \"disabled\", sessionId, sampled: true };\n }\n\n const initialProperties = replayExtraProperties(options);\n if (options.requireSignedInUser && !replayUserEmail(initialProperties)) {\n return {\n started: false,\n reason: \"missing-user-id\",\n sessionId,\n sampled: true,\n };\n }\n if (!isUrlRecordable(window.location.href, options)) {\n return {\n started: false,\n reason: \"url-blocked\",\n sessionId,\n sampled: true,\n };\n }\n\n return startSessionReplayRecorder(\n state,\n options,\n sessionId,\n true,\n initialProperties,\n startGeneration,\n );\n}\n\nfunction installUrlMonitor(state: SessionReplayState): void {\n if (!state.options || state.restoreUrlMonitor) return;\n const options = state.options;\n const check = () => {\n if (!isUrlRecordable(window.location.href, options)) {\n stopSessionReplay(\"url-blocked\");\n }\n };\n const originalPushState = window.history.pushState;\n const originalReplaceState = window.history.replaceState;\n window.history.pushState = function pushState(...args) {\n const result = originalPushState.apply(this, args);\n queueMicrotask(check);\n return result;\n };\n window.history.replaceState = function replaceState(...args) {\n const result = originalReplaceState.apply(this, args);\n queueMicrotask(check);\n return result;\n };\n window.addEventListener(\"popstate\", check);\n state.restoreUrlMonitor = () => {\n window.history.pushState = originalPushState;\n window.history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", check);\n state.restoreUrlMonitor = null;\n };\n}\n\nfunction installLifecycleListeners(state: SessionReplayState): void {\n if (state.removeLifecycleListeners) return;\n const flushOnHidden = () => {\n if (document.visibilityState === \"hidden\") {\n void flushSessionReplay(\"visibility-hidden\");\n }\n };\n const flushOnUnload = () => {\n void flushSessionReplay(\"pagehide\");\n };\n document.addEventListener(\"visibilitychange\", flushOnHidden);\n window.addEventListener(\"pagehide\", flushOnUnload);\n state.removeLifecycleListeners = () => {\n document.removeEventListener(\"visibilitychange\", flushOnHidden);\n window.removeEventListener(\"pagehide\", flushOnUnload);\n state.removeLifecycleListeners = null;\n };\n}\n\nfunction markedSessionReplayIframes(): HTMLIFrameElement[] {\n if (typeof document.querySelectorAll !== \"function\") return [];\n return Array.from(\n document.querySelectorAll<HTMLIFrameElement>(\n `iframe[${SESSION_REPLAY_IFRAME_ATTRIBUTE}]`,\n ),\n );\n}\n\nfunction markedSessionReplayIframeForSource(\n source: MessageEventSource | null,\n): HTMLIFrameElement | null {\n if (!source) return null;\n return (\n markedSessionReplayIframes().find(\n (iframe) => iframe.contentWindow === source,\n ) ?? null\n );\n}\n\nfunction sessionReplayIframePrivacyOptions(\n options: NormalizedSessionReplayOptions,\n): SessionReplayIframePrivacyOptions {\n return {\n blockSelector: options.blockSelector,\n ignoreSelector: options.ignoreSelector,\n maskTextClass: options.maskTextClass,\n maskTextSelector: options.maskTextSelector,\n maskAllInputs: options.maskAllInputs,\n maskInputOptions: DEFAULT_MASK_INPUT_OPTIONS,\n recordCanvas: options.recordCanvas,\n collectFonts: options.collectFonts,\n inlineImages: options.inlineImages,\n sampling: options.eventSampling,\n };\n}\n\nfunction postSessionReplayIframeMessage(\n iframe: HTMLIFrameElement,\n message: SessionReplayIframeStartMessage | SessionReplayIframeStopMessage,\n): void {\n try {\n iframe.contentWindow?.postMessage(message, \"*\");\n } catch {\n // The frame may have navigated or detached between discovery and send.\n }\n}\n\n/**\n * Cooperative opaque/cross-origin iframe recording.\n *\n * rrweb cannot inspect these documents from the host. Framework-owned child\n * frames carry a marker and inject a tiny recorder that probes its direct\n * parent. Only an active host recorder responds, and only when the probe's\n * source is the contentWindow of a currently marked direct iframe.\n */\nfunction installSessionReplayIframeBridge(\n state: SessionReplayState,\n options: NormalizedSessionReplayOptions,\n): void {\n if (!options.recordCrossOriginIframes || state.restoreIframeBridge) return;\n\n const startMessage: SessionReplayIframeStartMessage = {\n type: SESSION_REPLAY_IFRAME_START,\n options: sessionReplayIframePrivacyOptions(options),\n };\n const stopMessage: SessionReplayIframeStopMessage = {\n type: SESSION_REPLAY_IFRAME_STOP,\n };\n const sendStart = (iframe: HTMLIFrameElement) =>\n postSessionReplayIframeMessage(iframe, startMessage);\n const onMessage = (event: MessageEvent) => {\n if (!state.active) return;\n if (\n !event.data ||\n typeof event.data !== \"object\" ||\n event.data.type !== SESSION_REPLAY_IFRAME_PROBE\n ) {\n return;\n }\n const iframe = markedSessionReplayIframeForSource(event.source);\n if (iframe) sendStart(iframe);\n };\n\n window.addEventListener(\"message\", onMessage);\n for (const iframe of markedSessionReplayIframes()) sendStart(iframe);\n state.restoreIframeBridge = () => {\n window.removeEventListener(\"message\", onMessage);\n for (const iframe of markedSessionReplayIframes()) {\n postSessionReplayIframeMessage(iframe, stopMessage);\n }\n state.restoreIframeBridge = null;\n };\n}\n\nfunction truncateCaptureText(value: string, maxLength: number): string {\n return value.length > maxLength ? value.slice(0, maxLength) : value;\n}\n\n/** Circular-safe, depth/length-limited plain value for JSON.stringify. */\nfunction toCaptureSerializable(\n value: unknown,\n depth: number,\n seen: WeakSet<object>,\n): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return value;\n if (typeof value === \"bigint\") return `${value}n`;\n if (typeof value === \"function\") return \"[function]\";\n if (typeof value === \"symbol\") return String(value);\n if (value instanceof Error) return `${value.name}: ${value.message}`;\n if (typeof value !== \"object\") return String(value);\n if (seen.has(value)) return \"[circular]\";\n if (depth >= MAX_CONSOLE_SERIALIZE_DEPTH) {\n return Array.isArray(value) ? \"[array]\" : \"[object]\";\n }\n seen.add(value);\n if (Array.isArray(value)) {\n const items = value\n .slice(0, MAX_CONSOLE_SERIALIZE_ENTRIES)\n .map((item) => toCaptureSerializable(item, depth + 1, seen));\n if (value.length > MAX_CONSOLE_SERIALIZE_ENTRIES) items.push(\"[truncated]\");\n return items;\n }\n const out: Record<string, unknown> = {};\n let count = 0;\n for (const [key, child] of Object.entries(value)) {\n if (count >= MAX_CONSOLE_SERIALIZE_ENTRIES) {\n out[\"[truncated]\"] = true;\n break;\n }\n out[key] = toCaptureSerializable(child, depth + 1, seen);\n count += 1;\n }\n return out;\n}\n\nfunction serializeConsoleArg(value: unknown): string {\n try {\n if (typeof value === \"string\") return value;\n if (value instanceof Error) return `${value.name}: ${value.message}`;\n if (\n value === null ||\n value === undefined ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n return (\n JSON.stringify(toCaptureSerializable(value, 0, new WeakSet())) ??\n String(value)\n );\n } catch {\n try {\n return Object.prototype.toString.call(value);\n } catch {\n return \"[unserializable]\";\n }\n }\n}\n\n/**\n * Emit an rrweb custom event while recording. Sets the re-entrancy guard so\n * synchronous work triggered by the emit (enqueue -> flush -> fetch of the\n * ingest endpoint) is never re-captured by the interceptors below.\n */\nfunction emitReplayCustomEvent(\n state: SessionReplayState,\n tag: string,\n payload: Record<string, unknown>,\n): void {\n const addCustomEvent = state.addCustomEvent;\n if (!state.active || !addCustomEvent) return;\n const previous = replayCaptureInternal;\n replayCaptureInternal = true;\n try {\n addCustomEvent(tag, payload);\n } catch {\n // recorder already stopped -- drop the event\n } finally {\n replayCaptureInternal = previous;\n }\n}\n\nfunction captureCurrentUrl(): string | undefined {\n try {\n return scrubUrl(window.location.href);\n } catch {\n return undefined;\n }\n}\n\ntype CaptureConsoleLevel = \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\ntype CaptureConsoleSource = \"console\" | \"window-error\" | \"unhandledrejection\";\n\nconst CAPTURE_CONSOLE_LEVELS: CaptureConsoleLevel[] = [\n \"log\",\n \"info\",\n \"warn\",\n \"error\",\n \"debug\",\n];\n\nfunction installConsoleCapture(\n state: SessionReplayState,\n captureOptions: NormalizedCaptureOptions,\n): () => void {\n let emitted = 0;\n let stopped = false;\n let pending: {\n key: string;\n payload: Record<string, unknown>;\n repeat: number;\n } | null = null;\n\n const emitPayload = (payload: Record<string, unknown>) => {\n if (stopped) return;\n if (emitted >= captureOptions.maxEvents) {\n stopped = true;\n emitReplayCustomEvent(state, SESSION_REPLAY_CONSOLE_EVENT_TAG, {\n level: \"warn\",\n source: \"console\",\n message: \"session replay console capture truncated\",\n truncated: true,\n });\n return;\n }\n emitted += 1;\n emitReplayCustomEvent(state, SESSION_REPLAY_CONSOLE_EVENT_TAG, payload);\n };\n\n /**\n * The first occurrence of a message is emitted immediately; consecutive\n * identical messages accumulate here and are flushed as one event whose\n * `repeat` is the number of collapsed duplicates.\n */\n const flushPending = () => {\n const entry = pending;\n pending = null;\n if (!entry || entry.repeat <= 0) return;\n emitPayload({ ...entry.payload, repeat: entry.repeat });\n };\n\n const capture = (\n level: CaptureConsoleLevel,\n source: CaptureConsoleSource,\n args: unknown[],\n stackOverride?: string,\n ) => {\n if (stopped || replayCaptureInternal) return;\n try {\n const message = truncateCaptureText(\n redactCaptureText(args.length ? serializeConsoleArg(args[0]) : \"\"),\n MAX_CONSOLE_MESSAGE_LENGTH,\n );\n const extraArgs = args\n .slice(1, 1 + MAX_CONSOLE_ARGS)\n .map((arg) =>\n truncateCaptureText(\n redactCaptureText(serializeConsoleArg(arg)),\n MAX_CONSOLE_MESSAGE_LENGTH,\n ),\n );\n const errorArg = args.find((arg): arg is Error => arg instanceof Error);\n const rawStack = stackOverride ?? errorArg?.stack;\n const stack =\n typeof rawStack === \"string\" && rawStack\n ? truncateCaptureText(\n redactCaptureText(rawStack),\n MAX_CONSOLE_STACK_LENGTH,\n )\n : undefined;\n const url = captureCurrentUrl();\n const payload: Record<string, unknown> = {\n level,\n source,\n message,\n ...(extraArgs.length ? { args: extraArgs } : {}),\n ...(stack ? { stack } : {}),\n ...(url ? { url } : {}),\n };\n const key = `${level}\u0000${source}\u0000${message}`;\n if (pending && pending.key === key) {\n pending.repeat += 1;\n return;\n }\n flushPending();\n emitPayload(payload);\n pending = { key, payload, repeat: 0 };\n } catch {\n // capture must never break the host page\n }\n };\n\n const originals: Partial<\n Record<CaptureConsoleLevel, (...args: unknown[]) => void>\n > = {};\n const wrappers: Partial<\n Record<CaptureConsoleLevel, (...args: unknown[]) => void>\n > = {};\n for (const level of CAPTURE_CONSOLE_LEVELS) {\n const original = console[level] as (...args: unknown[]) => void;\n if (typeof original !== \"function\") continue;\n originals[level] = original;\n const wrapper = (...args: unknown[]) => {\n original.apply(console, args);\n try {\n capture(level, \"console\", args);\n } catch {\n // never throw from the wrapper\n }\n };\n wrappers[level] = wrapper;\n console[level] = wrapper;\n }\n\n const onWindowError = (event: ErrorEvent) => {\n try {\n const error = event?.error;\n capture(\n \"error\",\n \"window-error\",\n [error instanceof Error ? error : (event?.message ?? \"Error\")],\n error instanceof Error ? error.stack : undefined,\n );\n } catch {\n // never throw from the listener\n }\n };\n const onUnhandledRejection = (event: PromiseRejectionEvent) => {\n try {\n const reason = event?.reason;\n capture(\n \"error\",\n \"unhandledrejection\",\n [reason instanceof Error ? reason : reason],\n reason instanceof Error ? reason.stack : undefined,\n );\n } catch {\n // never throw from the listener\n }\n };\n window.addEventListener(\"error\", onWindowError as EventListener);\n window.addEventListener(\n \"unhandledrejection\",\n onUnhandledRejection as EventListener,\n );\n\n return () => {\n try {\n flushPending();\n } catch {\n // best-effort duplicate flush\n }\n stopped = true;\n for (const level of CAPTURE_CONSOLE_LEVELS) {\n const original = originals[level];\n // Restore only what we installed: if another library patched on top of\n // our wrapper, leave the current function in place.\n if (original && console[level] === wrappers[level]) {\n console[level] = original;\n }\n }\n window.removeEventListener(\"error\", onWindowError as EventListener);\n window.removeEventListener(\n \"unhandledrejection\",\n onUnhandledRejection as EventListener,\n );\n };\n}\n\nfunction captureRequestUrl(input: unknown): string {\n if (typeof input === \"string\") return input;\n if (typeof URL !== \"undefined\" && input instanceof URL) {\n return input.toString();\n }\n if (input && typeof input === \"object\" && \"url\" in input) {\n const url = (input as { url?: unknown }).url;\n if (typeof url === \"string\") return url;\n }\n return \"\";\n}\n\nfunction captureRequestMethod(\n input: unknown,\n init?: { method?: unknown },\n): string {\n const initMethod = init?.method;\n if (typeof initMethod === \"string\" && initMethod) {\n return initMethod.toUpperCase();\n }\n if (input && typeof input === \"object\" && \"method\" in input) {\n const method = (input as { method?: unknown }).method;\n if (typeof method === \"string\" && method) return method.toUpperCase();\n }\n return \"GET\";\n}\n\n/**\n * Requests the recorder must never record: its own ingest endpoint and the\n * core analytics tracking endpoint (either would create a flush -> event ->\n * flush feedback loop), plus non-network schemes.\n */\nfunction isCaptureExcludedUrl(rawUrl: string, ingestEndpoint: string): boolean {\n const trimmed = rawUrl.trim();\n if (!trimmed) return true;\n const lower = trimmed.toLowerCase();\n if (\n lower.startsWith(\"data:\") ||\n lower.startsWith(\"blob:\") ||\n lower.startsWith(\"about:\")\n ) {\n return true;\n }\n try {\n const resolved = new URL(trimmed, window.location.href);\n const ingest = new URL(ingestEndpoint, window.location.href);\n if (\n resolved.origin === ingest.origin &&\n resolved.pathname === ingest.pathname\n ) {\n return true;\n }\n if (resolved.pathname.endsWith(\"/api/analytics/replay\")) return true;\n if (resolved.pathname.endsWith(\"/api/analytics/track\")) return true;\n } catch {\n // Unresolvable URL -- skip capture rather than risk recording junk.\n return true;\n }\n return false;\n}\n\n/**\n * Best-effort, synchronous read of a 5xx XHR response body, sliced to `cap`\n * before redaction runs (caller redacts). Only reads `responseText` when\n * `responseType` is \"\" or \"text\" -- other response types are read via\n * `JSON.stringify` (guarded) for `\"json\"`, and skipped entirely otherwise\n * since arbitrary binary/blob/arraybuffer bodies are not useful error text.\n */\nfunction readXhrErrorBody(\n xhr: XMLHttpRequest,\n cap: number,\n): string | undefined {\n try {\n const responseType = xhr.responseType;\n if (responseType === \"\" || responseType === \"text\") {\n const text = xhr.responseText;\n return typeof text === \"string\" ? text.slice(0, cap) : undefined;\n }\n if (responseType === \"json\") {\n try {\n return JSON.stringify(xhr.response)?.slice(0, cap);\n } catch {\n return undefined;\n }\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction installNetworkCapture(\n state: SessionReplayState,\n captureOptions: NormalizedCaptureOptions,\n): () => void {\n const options = state.options;\n if (!options) return () => {};\n const ingestEndpoint = options.endpoint;\n let emitted = 0;\n let stopped = false;\n\n const emitPayload = (payload: Record<string, unknown>) => {\n if (stopped) return;\n if (emitted >= captureOptions.maxEvents) {\n stopped = true;\n emitReplayCustomEvent(state, SESSION_REPLAY_NETWORK_EVENT_TAG, {\n message: \"session replay network capture truncated\",\n truncated: true,\n });\n return;\n }\n emitted += 1;\n emitReplayCustomEvent(state, SESSION_REPLAY_NETWORK_EVENT_TAG, payload);\n };\n\n const errorBodyCap =\n captureOptions.captureErrorBodies !== false\n ? (captureOptions.maxErrorBodyLength ?? DEFAULT_MAX_ERROR_BODY_LENGTH)\n : null;\n\n const recordRequest = (\n api: \"fetch\" | \"xhr\",\n method: string,\n rawUrl: string,\n status: number,\n ok: boolean,\n durationMs: number,\n error?: string,\n responseBody?: string,\n ) => {\n if (stopped) return;\n try {\n if (isCaptureExcludedUrl(rawUrl, ingestEndpoint)) return;\n const absolute = new URL(rawUrl, window.location.href).toString();\n const url = scrubUrl(absolute) ?? absolute;\n emitPayload({\n api,\n method: method.toUpperCase(),\n url,\n status,\n ok,\n durationMs: Math.max(0, Math.round(durationMs)),\n ...(error\n ? {\n error: truncateCaptureText(\n redactCaptureText(error),\n MAX_CONSOLE_MESSAGE_LENGTH,\n ),\n }\n : {}),\n ...(responseBody\n ? {\n responseBody: truncateCaptureText(\n redactCaptureText(responseBody),\n errorBodyCap ?? DEFAULT_MAX_ERROR_BODY_LENGTH,\n ),\n }\n : {}),\n });\n } catch {\n // capture must never break the host page\n }\n };\n\n /**\n * Best-effort bounded read of a 5xx response body. Reads a decoded stream\n * up to `cap` chars and cancels the reader, or falls back to `.text()`\n * sliced to `cap` when no readable stream is exposed. Never throws --\n * opaque/no-body responses (or any read failure) resolve to undefined.\n */\n const readBoundedErrorBody = async (\n response: Response,\n cap: number,\n ): Promise<string | undefined> => {\n try {\n const reader = response.body?.getReader?.();\n if (reader) {\n const decoder = new TextDecoder();\n let text = \"\";\n while (text.length < cap) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) text += decoder.decode(value, { stream: true });\n }\n // Fire-and-forget: cancelling an already-exhausted (or still-open but\n // no-longer-wanted) reader can hang indefinitely on some stream\n // implementations. We never need the result, so don't await it --\n // that would defeat the whole point of bounding this read.\n try {\n reader.cancel().catch(() => {});\n } catch {\n // best-effort; some readers throw synchronously instead\n }\n return text.slice(0, cap);\n }\n const text = await response.text();\n return text.slice(0, cap);\n } catch {\n return undefined;\n }\n };\n\n const restores: Array<() => void> = [];\n\n if (typeof window.fetch === \"function\") {\n const originalFetch = window.fetch;\n const wrappedFetch = function (\n this: unknown,\n input?: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n const self = this ?? window;\n if (stopped || replayCaptureInternal) {\n return originalFetch.call(self, input as RequestInfo | URL, init);\n }\n let method = \"GET\";\n let url = \"\";\n let skip = true;\n try {\n method = captureRequestMethod(input, init);\n url = captureRequestUrl(input);\n skip = isCaptureExcludedUrl(url, ingestEndpoint);\n } catch {\n skip = true;\n }\n if (skip) {\n return originalFetch.call(self, input as RequestInfo | URL, init);\n }\n const startedAt = performance.now();\n // Call the original exactly as the page did; never read the caller's\n // response before returning it, never replace the response, propagate\n // rejections untouched. A 5xx body snippet (if any) is read from a\n // clone and emitted from a detached promise chain afterward.\n const result = originalFetch.call(self, input as RequestInfo | URL, init);\n if (!result || typeof (result as Promise<Response>).then !== \"function\") {\n return result;\n }\n return result.then(\n (response) => {\n try {\n const durationMs = performance.now() - startedAt;\n if (errorBodyCap !== null && response.status >= 500) {\n // Clone immediately -- before any other code (including this\n // handler returning) can consume the original body -- so the\n // clone's stream is guaranteed unconsumed.\n let clone: Response | null = null;\n try {\n clone = response.clone();\n } catch {\n clone = null;\n }\n if (clone) {\n const bodyPromise = readBoundedErrorBody(clone, errorBodyCap);\n const timeoutPromise = new Promise<undefined>((resolve) => {\n setTimeout(\n () => resolve(undefined),\n ERROR_BODY_READ_TIMEOUT_MS,\n );\n });\n // Detached chain: never rejects, never awaited by the caller.\n Promise.race([bodyPromise, timeoutPromise])\n .then((responseBody) => {\n recordRequest(\n \"fetch\",\n method,\n url,\n response.status,\n response.ok,\n durationMs,\n undefined,\n responseBody,\n );\n })\n .catch(() => {\n // never affect the caller\n });\n } else {\n recordRequest(\n \"fetch\",\n method,\n url,\n response.status,\n response.ok,\n durationMs,\n );\n }\n } else {\n recordRequest(\n \"fetch\",\n method,\n url,\n response.status,\n response.ok,\n durationMs,\n );\n }\n } catch {\n // never affect the caller\n }\n return response;\n },\n (error) => {\n try {\n recordRequest(\n \"fetch\",\n method,\n url,\n 0,\n false,\n performance.now() - startedAt,\n error instanceof Error ? error.message : String(error),\n );\n } catch {\n // never affect the caller\n }\n throw error;\n },\n );\n };\n window.fetch = wrappedFetch as typeof window.fetch;\n restores.push(() => {\n // Restore only what we installed (another lib may have patched on top).\n if (window.fetch === (wrappedFetch as typeof window.fetch)) {\n window.fetch = originalFetch;\n }\n });\n }\n\n if (typeof XMLHttpRequest !== \"undefined\" && XMLHttpRequest.prototype) {\n const originalOpen = XMLHttpRequest.prototype.open;\n const originalSend = XMLHttpRequest.prototype.send;\n const xhrInfo = new WeakMap<\n XMLHttpRequest,\n { method: string; url: string }\n >();\n\n const wrappedOpen = function (\n this: XMLHttpRequest,\n method: string,\n url: string | URL,\n async?: boolean,\n username?: string | null,\n password?: string | null,\n ) {\n try {\n xhrInfo.set(this, { method: String(method), url: String(url) });\n } catch {\n // never throw from the wrapper\n }\n return originalOpen.call(\n this,\n method,\n url as string,\n async ?? true,\n username,\n password,\n );\n };\n\n const wrappedSend = function (\n this: XMLHttpRequest,\n body?: Document | XMLHttpRequestBodyInit | null,\n ) {\n try {\n const info = xhrInfo.get(this);\n if (info && !stopped && !replayCaptureInternal) {\n const startedAt = performance.now();\n let errorMessage: string | undefined;\n const markError = (message: string) => () => {\n errorMessage = message;\n };\n this.addEventListener(\"error\", markError(\"XMLHttpRequest failed\"), {\n once: true,\n });\n this.addEventListener(\"abort\", markError(\"XMLHttpRequest aborted\"), {\n once: true,\n });\n this.addEventListener(\n \"timeout\",\n markError(\"XMLHttpRequest timed out\"),\n { once: true },\n );\n this.addEventListener(\n \"loadend\",\n () => {\n const status = typeof this.status === \"number\" ? this.status : 0;\n const effectiveStatus = errorMessage ? 0 : status;\n let responseBody: string | undefined;\n if (errorBodyCap !== null && !errorMessage && status >= 500) {\n responseBody = readXhrErrorBody(this, errorBodyCap);\n }\n recordRequest(\n \"xhr\",\n info.method,\n info.url,\n effectiveStatus,\n !errorMessage && status >= 200 && status < 300,\n performance.now() - startedAt,\n errorMessage,\n responseBody,\n );\n xhrInfo.delete(this);\n },\n { once: true },\n );\n }\n } catch {\n // never throw from the wrapper\n }\n return originalSend.call(this, body ?? null);\n };\n\n XMLHttpRequest.prototype.open =\n wrappedOpen as typeof XMLHttpRequest.prototype.open;\n XMLHttpRequest.prototype.send =\n wrappedSend as typeof XMLHttpRequest.prototype.send;\n restores.push(() => {\n if (\n XMLHttpRequest.prototype.open ===\n (wrappedOpen as typeof XMLHttpRequest.prototype.open)\n ) {\n XMLHttpRequest.prototype.open = originalOpen;\n }\n if (\n XMLHttpRequest.prototype.send ===\n (wrappedSend as typeof XMLHttpRequest.prototype.send)\n ) {\n XMLHttpRequest.prototype.send = originalSend;\n }\n });\n }\n\n return () => {\n stopped = true;\n for (const restore of restores) {\n try {\n restore();\n } catch {\n // best-effort restore\n }\n }\n };\n}\n\nfunction installCaptureInterceptors(state: SessionReplayState): void {\n const options = state.options;\n if (!options || state.restoreCaptures || !state.addCustomEvent) return;\n if (!options.console && !options.network) return;\n const restores: Array<() => void> = [];\n try {\n if (options.console) {\n restores.push(installConsoleCapture(state, options.console));\n }\n if (options.network) {\n restores.push(installNetworkCapture(state, options.network));\n }\n } catch {\n // keep whatever installed cleanly; restores below still uninstall it\n }\n if (restores.length === 0) return;\n state.restoreCaptures = () => {\n state.restoreCaptures = null;\n for (const restore of restores) {\n try {\n restore();\n } catch {\n // best-effort restore\n }\n }\n };\n}\n\nexport async function startSessionReplay(\n options: SessionReplayOptions = {},\n): Promise<SessionReplayStartResult> {\n if (options.enabled === false) return { started: false, reason: \"disabled\" };\n if (options.shouldStart && !options.shouldStart()) {\n return { started: false, reason: \"disabled\" };\n }\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return { started: false, reason: \"not-browser\" };\n }\n const normalized = normalizeOptions(options);\n if (!normalized) return { started: false, reason: \"missing-public-key\" };\n\n const sessionId = getOrCreateAnalyticsSessionId();\n if (!sessionId) return { started: false, reason: \"missing-session-id\" };\n const sampled = shouldSampleSessionReplay(\n sessionId,\n normalized.sampleRate,\n normalized.samplingSalt,\n );\n if (!sampled) {\n return { started: false, reason: \"sampled-out\", sessionId, sampled };\n }\n const initialProperties = replayExtraProperties(normalized);\n if (normalized.requireSignedInUser) {\n if (!replayUserEmail(initialProperties)) {\n return {\n started: false,\n reason: \"missing-user-id\",\n sessionId,\n sampled,\n };\n }\n }\n if (!isUrlRecordable(window.location.href, normalized)) {\n return { started: false, reason: \"url-blocked\", sessionId, sampled };\n }\n\n const state = getState();\n if (state.active && state.replayId) {\n return {\n started: true,\n reason: \"already-active\",\n replayId: state.replayId,\n sessionId,\n sampled,\n };\n }\n if (state.startPromise) return state.startPromise;\n\n // This is a new caller-initiated recording episode. A prior episode's\n // conflict-loop guard must not prevent this one from recovering once.\n state.automaticConflictRestartAttempted = false;\n state.transientClientErrorFailures = 0;\n const startGeneration = ++state.startGeneration;\n\n let startPromise: Promise<SessionReplayStartResult>;\n startPromise = startSessionReplayRecorder(\n state,\n normalized,\n sessionId,\n sampled,\n initialProperties,\n startGeneration,\n ).finally(() => {\n if (state.startPromise === startPromise) {\n state.startPromise = null;\n }\n });\n state.startPromise = startPromise;\n return startPromise;\n}\n\nasync function startSessionReplayRecorder(\n state: SessionReplayState,\n normalized: NormalizedSessionReplayOptions,\n sessionId: string,\n sampled: boolean,\n initialProperties: Record<string, unknown> | undefined,\n startGeneration: number,\n): Promise<SessionReplayStartResult> {\n if (state.active && state.replayId) {\n return {\n started: true,\n reason: \"already-active\",\n replayId: state.replayId,\n sessionId,\n sampled,\n };\n }\n\n let rrweb: RrwebRecordModule;\n try {\n rrweb = (await import(\"@rrweb/record\")) as RrwebRecordModule;\n } catch {\n return { started: false, reason: \"import-failed\", sessionId, sampled };\n }\n if (state.startGeneration !== startGeneration) {\n return { started: false, reason: \"disabled\", sessionId, sampled };\n }\n if (normalized.shouldStart && !normalized.shouldStart()) {\n return { started: false, reason: \"disabled\", sessionId, sampled };\n }\n\n let replaySession = getOrCreateReplaySession(\n sessionId,\n normalized.linkBaseUrl,\n );\n const instanceNonce = generateReplayId();\n const { channel: replayChannel, probeClaim } = createReplayClaimChannel(\n state,\n instanceNonce,\n );\n // Only a *resumed* id needs the duplicated-tab check -- a freshly minted\n // id can never collide with a recorder that's already running, so this\n // never adds startup latency for the common \"new tab\" case.\n if (replaySession.resumed && replayChannel) {\n const taken = await probeClaim(replaySession.replayId);\n if (taken) {\n const freshReplayId = generateReplayId();\n const freshStartedAtMs = Date.now();\n writeStoredReplaySession({\n sessionId,\n replayId: freshReplayId,\n startedAtMs: freshStartedAtMs,\n sequence: 0,\n ...(normalized.linkBaseUrl\n ? { linkBaseUrl: normalized.linkBaseUrl }\n : {}),\n });\n replaySession = {\n replayId: freshReplayId,\n startedAtMs: freshStartedAtMs,\n sequence: 0,\n ...(normalized.linkBaseUrl\n ? { linkBaseUrl: normalized.linkBaseUrl }\n : {}),\n resumed: false,\n };\n }\n }\n // stopSessionReplay may be called while the duplicate-tab probe is waiting.\n // Recheck both cancellation and the caller's live eligibility before rrweb\n // is activated so a deferred start cannot escape a route/auth teardown.\n if (\n state.startGeneration !== startGeneration ||\n (normalized.shouldStart && !normalized.shouldStart())\n ) {\n try {\n replayChannel?.close();\n } catch {\n // best-effort cleanup\n }\n return { started: false, reason: \"disabled\", sessionId, sampled };\n }\n state.options = normalized;\n state.replayId = replaySession.replayId;\n state.startedAtMs = replaySession.startedAtMs;\n state.replayLinkBaseUrl =\n replaySession.linkBaseUrl ?? normalized.linkBaseUrl ?? null;\n state.sequence = replaySession.sequence;\n state.queue = [];\n state.queuedBytes = 0;\n state.retryBatches = [];\n state.pendingFlushReason = null;\n for (const resolve of state.pendingFlushWaiters.splice(0)) resolve();\n state.awaitingFullSnapshot = false;\n state.resourceNodes.clear();\n state.stopRecorder = null;\n state.broadcastChannel = replayChannel;\n state.lastAuthenticatedProperties = replayUserEmail(initialProperties)\n ? { ...initialProperties }\n : null;\n state.active = true;\n\n try {\n const stopRecorder = rrweb.record({\n emit: (event) => enqueueReplayEvent(state, event),\n sampling: normalized.eventSampling,\n checkoutEveryNth: normalized.checkoutEveryNth,\n checkoutEveryNms: normalized.checkoutEveryNms,\n inlineStylesheet: normalized.inlineStylesheet,\n blockSelector: normalized.blockSelector,\n ignoreSelector: normalized.ignoreSelector,\n maskTextClass: normalized.maskTextClass,\n maskTextSelector: normalized.maskTextSelector,\n maskAllInputs: normalized.maskAllInputs,\n recordCanvas: normalized.recordCanvas,\n recordCrossOriginIframes: normalized.recordCrossOriginIframes,\n collectFonts: normalized.collectFonts,\n inlineImages: normalized.inlineImages,\n maskInputOptions: DEFAULT_MASK_INPUT_OPTIONS,\n });\n if (typeof stopRecorder !== \"function\") {\n state.active = false;\n state.options = null;\n state.replayId = null;\n state.startedAtMs = null;\n state.lastAuthenticatedProperties = null;\n try {\n state.broadcastChannel?.close();\n } catch {\n // best-effort cleanup\n }\n state.broadcastChannel = null;\n return { started: false, reason: \"record-failed\", sessionId, sampled };\n }\n state.stopRecorder = stopRecorder;\n state.flushTimer = window.setInterval(\n () => void flushSessionReplay(\"interval\"),\n normalized.flushIntervalMs,\n );\n state.maxDurationTimer = window.setTimeout(\n () => stopSessionReplay(\"max-duration\"),\n normalized.maxDurationMs,\n );\n installUrlMonitor(state);\n installLifecycleListeners(state);\n installSessionReplayIframeBridge(state, normalized);\n state.addCustomEvent =\n typeof rrweb.record.addCustomEvent === \"function\"\n ? rrweb.record.addCustomEvent\n : null;\n installCaptureInterceptors(state);\n return {\n started: true,\n replayId: state.replayId,\n sessionId,\n sampled,\n };\n } catch {\n try {\n state.restoreCaptures?.();\n } catch {\n // best-effort interceptor teardown\n }\n state.restoreCaptures = null;\n state.restoreIframeBridge?.();\n state.addCustomEvent = null;\n state.active = false;\n state.options = null;\n state.replayId = null;\n state.startedAtMs = null;\n state.lastAuthenticatedProperties = null;\n try {\n state.broadcastChannel?.close();\n } catch {\n // best-effort cleanup\n }\n state.broadcastChannel = null;\n return { started: false, reason: \"record-failed\", sessionId, sampled };\n }\n}\n\nexport async function stopSessionReplay(reason = \"manual\"): Promise<void> {\n const state = getState();\n // Invalidate an import/probe that has not set `active` yet. Without this,\n // stop during the duplicated-tab claim window was a no-op and rrweb started\n // after the caller believed recording had been disabled.\n state.startGeneration += 1;\n if (!state.active) return;\n // Restore console/fetch/XHR before tearing down the recorder: the restore\n // flushes any pending collapsed console duplicate, which must still be able\n // to emit through rrweb while it is recording.\n try {\n state.restoreCaptures?.();\n } catch {\n // best-effort interceptor teardown\n }\n state.restoreCaptures = null;\n state.restoreIframeBridge?.();\n state.active = false;\n state.addCustomEvent = null;\n try {\n state.stopRecorder?.();\n } catch {\n // best-effort recorder shutdown\n }\n state.stopRecorder = null;\n if (state.flushTimer) {\n window.clearInterval(state.flushTimer);\n state.flushTimer = null;\n }\n if (state.maxDurationTimer) {\n window.clearTimeout(state.maxDurationTimer);\n state.maxDurationTimer = null;\n }\n state.restoreUrlMonitor?.();\n state.removeLifecycleListeners?.();\n try {\n state.broadcastChannel?.close();\n } catch {\n // best-effort cleanup\n }\n state.broadcastChannel = null;\n await flushSessionReplay(reason);\n}\n\nexport function maybeStartSessionReplay(\n options: SessionReplayOptions = {},\n): Promise<SessionReplayStartResult> {\n return startSessionReplay(options);\n}\n\nexport function isSessionReplayActive(): boolean {\n return getState().active;\n}\n\n/**\n * The active session replay id when a recording is running, or the last one\n * persisted for this analytics session in this tab's `sessionStorage`.\n * First-party error capture uses this to tie each captured exception to the\n * replay it happened in, so triage can jump straight to\n * `/sessions/<recordingId>`.\n */\nexport function getSessionReplayId(): string | null {\n const state = getState();\n if (state.active && state.replayId) return state.replayId;\n const stored = readStoredReplaySession();\n return stored?.replayId ?? null;\n}\n\n/**\n * Return the replay identity associated with this browser tab. The context is\n * intentionally small so it can be attached to analytics events without\n * exposing replay content or credentials.\n */\nexport function getSessionReplayContext(): SessionReplayContext | null {\n const state = getState();\n if (state.active && state.replayId && state.startedAtMs) {\n const sessionId = getOrCreateAnalyticsSessionId();\n if (!sessionId) return null;\n return {\n replayId: state.replayId,\n sessionId,\n startedAtMs: state.startedAtMs,\n startedAt: new Date(state.startedAtMs).toISOString(),\n linkBaseUrl: state.replayLinkBaseUrl,\n active: true,\n };\n }\n\n const stored = readStoredReplaySession();\n if (!stored?.replayId || !stored.sessionId || !stored.startedAtMs) {\n return null;\n }\n return {\n replayId: stored.replayId,\n sessionId: stored.sessionId,\n startedAtMs: stored.startedAtMs,\n startedAt: new Date(stored.startedAtMs).toISOString(),\n linkBaseUrl: stored.linkBaseUrl ?? null,\n active: false,\n };\n}\n\n/**\n * Build a scoped Analytics replay lookup link. The Analytics server resolves\n * the client replay id to its server recording id and converts the event time\n * into the replay player's offset before redirecting to the detail page.\n */\nexport function getSessionReplayUrl(\n options: SessionReplayLinkOptions = {},\n): string | null {\n const context = getSessionReplayContext();\n if (!context) return null;\n const base = normalizeReplayLinkBaseUrl(\n options.linkBaseUrl ?? context.linkBaseUrl ?? undefined,\n );\n if (!base) return null;\n\n try {\n const url = new URL(\"/sessions/lookup\", base);\n url.searchParams.set(\"sessionId\", context.sessionId);\n url.searchParams.set(\"replayId\", context.replayId);\n const at = options.at === undefined ? Date.now() : options.at;\n const timestamp =\n typeof at === \"number\"\n ? new Date(at)\n : typeof at === \"string\"\n ? new Date(at)\n : at;\n if (!Number.isNaN(timestamp.getTime())) {\n url.searchParams.set(\"at\", timestamp.toISOString());\n }\n return url.toString();\n } catch {\n return null;\n }\n}\n\n/**\n * Surface a manually captured exception on the active session replay timeline\n * as an `agent-native.console` custom event, reusing the diagnostics contract\n * (`level`, `source: \"console\"`, `message`, `stack`, `url`). No-op when no\n * recording is active. Auto-captured `window.onerror` / `unhandledrejection`\n * are intentionally NOT routed here — the recorder already logs those as\n * `window-error` / `unhandledrejection`, so re-emitting would double-count.\n */\nexport function emitSessionReplayException(input: {\n type: string;\n message: string;\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\";\n stack?: string;\n url?: string;\n}): void {\n const state = getState();\n if (!state.active || !state.addCustomEvent) return;\n const level =\n input.level === \"warning\"\n ? \"warn\"\n : input.level === \"info\" || input.level === \"debug\"\n ? input.level\n : \"error\";\n emitReplayCustomEvent(state, SESSION_REPLAY_CONSOLE_EVENT_TAG, {\n level,\n source: \"console\",\n message: `${input.type}: ${input.message}`.slice(\n 0,\n MAX_CONSOLE_MESSAGE_LENGTH,\n ),\n ...(input.stack\n ? { stack: input.stack.slice(0, MAX_CONSOLE_STACK_LENGTH) }\n : {}),\n ...(input.url ? { url: input.url } : {}),\n });\n}\n\nexport type SessionReplayAgentChatEvent = {\n phase: \"surface-mounted\" | \"run-observed\" | \"run-stopped\";\n surface: string;\n threadId?: string;\n runId?: string;\n tabId?: string;\n};\n\n/**\n * Add a content-free chat lifecycle marker to the active replay. The payload\n * deliberately accepts only ids and low-cardinality state; prompt/response\n * content must never enter replay diagnostics through this path.\n */\nexport function emitSessionReplayAgentChatEvent(\n input: SessionReplayAgentChatEvent,\n): void {\n const state = getState();\n if (!state.active || !state.addCustomEvent) return;\n const bounded = (value: string | undefined, max = 160) =>\n value?.trim().slice(0, max) || undefined;\n emitReplayCustomEvent(state, SESSION_REPLAY_AGENT_CHAT_EVENT_TAG, {\n phase: input.phase,\n surface: bounded(input.surface, 80) ?? \"app\",\n ...(bounded(input.threadId) ? { threadId: bounded(input.threadId) } : {}),\n ...(bounded(input.runId) ? { runId: bounded(input.runId) } : {}),\n ...(bounded(input.tabId) ? { tabId: bounded(input.tabId) } : {}),\n });\n}\n"]}
1
+ {"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/client/session-replay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n SESSION_REPLAY_IFRAME_ATTRIBUTE,\n SESSION_REPLAY_IFRAME_PROBE,\n SESSION_REPLAY_IFRAME_START,\n SESSION_REPLAY_IFRAME_STOP,\n type SessionReplayIframePrivacyOptions,\n type SessionReplayIframeStartMessage,\n type SessionReplayIframeStopMessage,\n} from \"../session-replay-iframe-protocol.js\";\nimport {\n getOrCreateAnalyticsAnonymousId,\n getOrCreateAnalyticsSessionId,\n} from \"./analytics-session.js\";\nimport { scrubUrl } from \"./url-scrub.js\";\n\ntype ReplayEvent = Record<string, unknown>;\ntype QueuedReplayEvent = {\n json: string;\n byteLength: number;\n timestampMs: number;\n type: number | null;\n};\ntype ReplayStopFn = () => void;\ntype ReplayResourceNode = {\n tagName: string;\n rel: string;\n as: string;\n type: string;\n};\nexport type SessionReplayUrlMatcher =\n | string\n | RegExp\n | ((url: string) => boolean);\n\ninterface RrwebRecordOptions {\n emit: (event: ReplayEvent) => void;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n inlineStylesheet?: boolean;\n blockClass?: string | RegExp;\n blockSelector?: string;\n ignoreClass?: string | RegExp;\n ignoreSelector?: string;\n maskTextClass?: string | RegExp;\n maskTextSelector?: string;\n maskAllInputs?: boolean;\n maskInputOptions?: Record<string, boolean>;\n recordCanvas?: boolean;\n recordCrossOriginIframes?: boolean;\n collectFonts?: boolean;\n inlineImages?: boolean;\n sampling?: Record<string, unknown>;\n}\n\ntype RrwebRecordFn = ((\n options: RrwebRecordOptions,\n) => ReplayStopFn | undefined) & {\n addCustomEvent?: (tag: string, payload: unknown) => void;\n};\n\ninterface RrwebRecordModule {\n record: RrwebRecordFn;\n}\n\ninterface SessionReplayState {\n active: boolean;\n startPromise: Promise<SessionReplayStartResult> | null;\n /** Invalidates deferred recorder startup when stop is requested mid-start. */\n startGeneration: number;\n replayId: string | null;\n startedAtMs: number | null;\n replayLinkBaseUrl: string | null;\n sequence: number;\n /** Pre-serialized + scrubbed event JSON strings, ready to splice at flush. */\n queue: QueuedReplayEvent[];\n queuedBytes: number;\n retryBatches: QueuedReplayEvent[][];\n /** Consecutive retryable 4xx responses for the current recording episode. */\n transientClientErrorFailures: number;\n flushTimer: number | null;\n maxDurationTimer: number | null;\n flushing: boolean;\n /** Highest-priority flush requested while an upload was already in flight. */\n pendingFlushReason: string | null;\n /** Callers awaiting the coalesced flush tail. */\n pendingFlushWaiters: Array<() => void>;\n /** Drop incremental events until a new FullSnapshot can re-anchor the DOM. */\n awaitingFullSnapshot: boolean;\n stopRecorder: ReplayStopFn | null;\n restoreUrlMonitor: (() => void) | null;\n removeLifecycleListeners: (() => void) | null;\n /** Stops the cooperative child-iframe bridge and notifies active children. */\n restoreIframeBridge: (() => void) | null;\n /** rrweb's `record.addCustomEvent`, captured at start (null when absent). */\n addCustomEvent: ((tag: string, payload: unknown) => void) | null;\n /** Uninstalls console/network interceptors and flushes pending duplicates. */\n restoreCaptures: (() => void) | null;\n options: NormalizedSessionReplayOptions | null;\n lastAuthenticatedProperties: Record<string, unknown> | null;\n /** Resource tag metadata used to classify later rrweb attribute mutations. */\n resourceNodes: Map<number, ReplayResourceNode>;\n /**\n * Prevents a permanently misconfigured endpoint from causing an automatic\n * 409 -> restart -> 409 loop. A successful upload resets the allowance, so\n * a later, independent sequence conflict can still recover in-place.\n */\n automaticConflictRestartAttempted: boolean;\n /**\n * Cross-tab \"who is recording this replayId\" channel, open for the\n * lifetime of an active recording. See `getOrCreateReplaySession` for why\n * this exists (duplicated-tab guard against a shared `replayId`).\n */\n broadcastChannel: BroadcastChannel | null;\n}\n\ninterface StoredReplaySession {\n sessionId?: string;\n replayId?: string;\n startedAtMs?: number;\n sequence?: number;\n linkBaseUrl?: string;\n}\n\n/** Broadcast on `SESSION_REPLAY_BROADCAST_CHANNEL_NAME` by a tab resuming a\n * stored replay session, to check whether another tab is already recording\n * that same `replayId` (see the duplicated-tab guard in\n * `getOrCreateReplaySession`'s doc comment). */\ninterface ReplayClaimMessage {\n type: \"an-replay-claim\";\n replayId: string;\n instanceNonce: string;\n}\n\n/** Reply from a tab that is actively recording the claimed `replayId`. */\ninterface ReplayClaimTakenMessage {\n type: \"an-replay-claim-taken\";\n replayId: string;\n /** Only the claimant with this nonce should yield the stored replay id.\n * Optional while older recorder bundles can still be open during rollout. */\n claimantNonce?: string;\n}\n\ntype ReplayBroadcastMessage = ReplayClaimMessage | ReplayClaimTakenMessage;\n\n/** rrweb `sampling` shape (mousemove/scroll/media throttles, input strategy). */\nexport type ReplayEventSampling = Record<string, unknown>;\n\n/**\n * Console capture cap overrides. `maxEvents` bounds the number of\n * `agent-native.console` custom events emitted per recording session\n * (default 1000); once hit, capture stops for the rest of the session and one\n * final truncation-notice event is emitted.\n */\nexport interface SessionReplayConsoleOptions {\n maxEvents?: number;\n}\n\n/**\n * Network capture cap overrides. `maxEvents` bounds the number of\n * `agent-native.network` custom events emitted per recording session\n * (default 2000); once hit, capture stops for the rest of the session and one\n * final truncation-notice event is emitted.\n *\n * `captureErrorBodies` (default true) additionally captures a bounded,\n * redacted response-body snippet for 5xx responses only -- request bodies\n * and headers are never captured, and non-5xx/network-failure responses\n * never carry a body. `maxErrorBodyLength` (default 2048) caps that snippet.\n */\nexport interface SessionReplayNetworkOptions {\n maxEvents?: number;\n captureErrorBodies?: boolean;\n maxErrorBodyLength?: number;\n}\n\nexport interface SessionReplayUploadRejectedDetails {\n status: number;\n restartAttempted: boolean;\n restartSucceeded: boolean;\n restartReason?: SessionReplayStartResult[\"reason\"];\n}\n\nexport interface SessionReplayOptions {\n enabled?: boolean;\n /** Rechecked immediately before rrweb starts to cancel deferred startup. */\n shouldStart?: () => boolean;\n publicKey?: string;\n endpoint?: string;\n /** Analytics app origin used to build timestamped replay links. */\n linkBaseUrl?: string;\n requireSignedInUser?: boolean;\n sampleRate?: number;\n samplingSalt?: string;\n allowUrls?: SessionReplayUrlMatcher[];\n blockUrls?: SessionReplayUrlMatcher[];\n flushIntervalMs?: number;\n maxDurationMs?: number;\n maxEventsPerBatch?: number;\n maxBatchBytes?: number;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n inlineStylesheet?: boolean;\n blockSelector?: string;\n ignoreSelector?: string;\n maskTextClass?: string | RegExp;\n maskTextSelector?: string;\n maskAllInputs?: boolean;\n recordCanvas?: boolean;\n recordCrossOriginIframes?: boolean;\n collectFonts?: boolean;\n inlineImages?: boolean;\n /**\n * rrweb per-event throttling (distinct from `sampleRate`, which decides\n * whether a whole session records). Throttles high-frequency event types\n * (mousemove/scroll/input) to keep the recorded page responsive and the\n * payloads small. Passed straight through to `rrweb.record({ sampling })`.\n */\n eventSampling?: ReplayEventSampling;\n /**\n * Capture console.log/info/warn/error/debug plus window `error` and\n * `unhandledrejection` events as `agent-native.console` custom rrweb\n * events. Defaults to on whenever session replay is enabled. Pass `false`\n * to disable, or an options object to override caps.\n */\n console?: boolean | SessionReplayConsoleOptions;\n /**\n * Capture fetch/XHR requests as `agent-native.network` custom rrweb\n * events (method, URL, status, timing). Request bodies and headers are\n * never captured; response bodies are captured only as a bounded,\n * redacted snippet for 5xx responses (see `captureErrorBodies`).\n * Defaults to on whenever session replay is enabled. Pass `false` to\n * disable, or an options object to override caps.\n */\n network?: boolean | SessionReplayNetworkOptions;\n /** Rare recorder lifecycle signal; never includes replay content or URLs. */\n onUploadRejected?: (details: SessionReplayUploadRejectedDetails) => void;\n extraProperties?:\n | Record<string, unknown>\n | (() => Record<string, unknown> | undefined);\n}\n\nexport interface SessionReplayContext {\n replayId: string;\n sessionId: string;\n startedAtMs: number;\n startedAt: string;\n linkBaseUrl: string | null;\n active: boolean;\n}\n\nexport interface SessionReplayLinkOptions {\n /** Event time to seek to when the replay link opens. */\n at?: Date | number | string;\n /** Overrides the configured Analytics app origin for this link. */\n linkBaseUrl?: string;\n}\n\nexport interface SessionReplayStartResult {\n started: boolean;\n reason?:\n | \"disabled\"\n | \"not-browser\"\n | \"missing-public-key\"\n | \"missing-session-id\"\n | \"missing-user-id\"\n | \"sampled-out\"\n | \"url-blocked\"\n | \"already-active\"\n | \"import-failed\"\n | \"record-failed\";\n replayId?: string;\n sessionId?: string;\n sampled?: boolean;\n}\n\ninterface NormalizedSessionReplayOptions {\n publicKey: string;\n endpoint: string;\n linkBaseUrl: string | null;\n requireSignedInUser: boolean;\n sampleRate: number;\n samplingSalt: string;\n allowUrls: SessionReplayUrlMatcher[];\n blockUrls: SessionReplayUrlMatcher[];\n flushIntervalMs: number;\n maxDurationMs: number;\n maxEventsPerBatch: number;\n maxBatchBytes: number;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n inlineStylesheet: boolean;\n blockSelector: string;\n ignoreSelector: string;\n maskTextClass: string | RegExp;\n maskTextSelector: string;\n maskAllInputs: boolean;\n recordCanvas: boolean;\n recordCrossOriginIframes: boolean;\n collectFonts: boolean;\n inlineImages: boolean;\n eventSampling: ReplayEventSampling;\n /** Null disables console capture entirely. */\n console: NormalizedCaptureOptions | null;\n /** Null disables network capture entirely. */\n network: NormalizedCaptureOptions | null;\n onUploadRejected?: SessionReplayOptions[\"onUploadRejected\"];\n extraProperties?: SessionReplayOptions[\"extraProperties\"];\n shouldStart?: SessionReplayOptions[\"shouldStart\"];\n}\n\ninterface NormalizedCaptureOptions {\n maxEvents: number;\n /** Network-only: capture a bounded 5xx response-body snippet. Unused by console. */\n captureErrorBodies?: boolean;\n /** Network-only: cap (chars) for the captured error-body snippet. */\n maxErrorBodyLength?: number;\n}\n\nconst DEFAULT_REPLAY_PATH = \"/api/analytics/replay\";\nconst DEFAULT_SAMPLING_SALT = \"agent-native-session-replay\";\n\n/**\n * Default rrweb event throttling. Without this, rrweb captures every\n * mousemove/scroll which dominates event volume and main-thread cost on\n * interactive pages. These caps keep replays faithful while staying light.\n */\nconst DEFAULT_EVENT_SAMPLING: ReplayEventSampling = {\n mousemove: 50,\n mouseInteraction: true,\n scroll: 100,\n media: 800,\n input: \"last\",\n};\nconst SESSION_REPLAY_STATE_KEY = Symbol.for(\n \"agent-native.client.sessionReplay\",\n);\nconst SESSION_REPLAY_ID_STORAGE_KEY = \"agent-native.session_replay_id\";\nconst SESSION_REPLAY_IFRAME_BLOCK_SELECTOR = `iframe[${SESSION_REPLAY_IFRAME_ATTRIBUTE}]`;\nconst DEFAULT_BLOCK_SELECTOR = [\n SESSION_REPLAY_IFRAME_BLOCK_SELECTOR,\n \"[data-sensitive]\",\n \"[data-an-block]\",\n \"[data-an-private]\",\n \"[data-private]\",\n \".an-block\",\n \".an-replay-block\",\n \".an-private\",\n \".rr-block\",\n \"[autocomplete='cc-number']\",\n \"[autocomplete='cc-csc']\",\n \"[autocomplete='cc-exp']\",\n \"[name*='password' i]\",\n \"[name*='credit' i]\",\n \"[name*='card' i]\",\n \"[name*='ssn' i]\",\n].join(\", \");\nconst DEFAULT_IGNORE_SELECTOR = \".an-ignore, [data-an-ignore]\";\nconst DEFAULT_MASK_TEXT_CLASS = \"an-mask\";\nconst DEFAULT_MASK_TEXT_SELECTOR = \"[data-an-mask]\";\nconst DEFAULT_MASK_INPUT_OPTIONS: Record<string, boolean> = {\n color: true,\n date: true,\n \"datetime-local\": true,\n email: true,\n month: true,\n number: true,\n password: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n};\nconst DEFAULT_FLUSH_INTERVAL_MS = 5000;\nconst DEFAULT_MAX_DURATION_MS = 30 * 60 * 1000;\nconst DEFAULT_MAX_EVENTS_PER_BATCH = 50;\nconst DEFAULT_MAX_BATCH_BYTES = 256 * 1024;\nconst MAX_KEEPALIVE_REPLAY_UPLOAD_BYTES = 60 * 1024;\nconst REPLAY_TEXT_ENCODER =\n typeof TextEncoder !== \"undefined\" ? new TextEncoder() : null;\nconst RRWEB_FULL_SNAPSHOT_EVENT_TYPE = 2;\n/** Cross-tab channel name used by the duplicated-tab claim guard. */\nconst SESSION_REPLAY_BROADCAST_CHANNEL_NAME = \"agent-native-session-replay\";\n/** How long a resuming tab waits for a \"someone else already owns this\n * replayId\" reply before proceeding to record with the resumed id. */\nconst SESSION_REPLAY_CLAIM_TIMEOUT_MS = 150;\n\n/** rrweb custom-event tag for captured console/window-error entries. */\nexport const SESSION_REPLAY_CONSOLE_EVENT_TAG = \"agent-native.console\";\n/** rrweb custom-event tag for captured fetch/XHR request summaries. */\nexport const SESSION_REPLAY_NETWORK_EVENT_TAG = \"agent-native.network\";\n/** Content-free agent-chat lifecycle markers for replay incident forensics. */\nexport const SESSION_REPLAY_AGENT_CHAT_EVENT_TAG = \"agent-native.chat\";\n\nconst DEFAULT_MAX_CONSOLE_EVENTS = 1000;\nconst DEFAULT_MAX_NETWORK_EVENTS = 2000;\nconst MAX_CONSOLE_MESSAGE_LENGTH = 500;\nconst MAX_CONSOLE_ARGS = 10;\nconst MAX_CONSOLE_STACK_LENGTH = 2000;\nconst MAX_CONSOLE_SERIALIZE_DEPTH = 4;\nconst MAX_CONSOLE_SERIALIZE_ENTRIES = 20;\n/** Default cap (chars) for a captured 5xx response-body snippet. */\nconst DEFAULT_MAX_ERROR_BODY_LENGTH = 2048;\n/** Hard timeout for the async response-body read; emit without body past this. */\nconst ERROR_BODY_READ_TIMEOUT_MS = 1500;\n\n/**\n * Re-entrancy guard: true while the recorder itself is emitting custom events\n * or flushing (synchronously) so the console/fetch/XHR wrappers never capture\n * the recorder's own work and feed it back into the replay stream.\n */\nlet replayCaptureInternal = false;\n\n// Credential-looking token redaction for captured console/network text,\n// adapted from the clips template's browser-diagnostics redaction helper.\nconst CAPTURE_SECRET_KEY_FRAGMENT =\n \"(?:authorization|cookie|set[-_]?cookie|token|secret|password|passwd|pwd|api[-_]?key|apikey|session|credential)\";\nconst CAPTURE_AUTHORIZATION_SCHEME_RE =\n /\\b(authorization)\\b(\\s*[:=]\\s*)(?:bearer|basic)\\s+[a-z0-9._~+/-]+=*/gi;\nconst CAPTURE_BEARER_RE = /\\b(bearer|basic)\\s+[a-z0-9._~+/-]+=*/gi;\nconst CAPTURE_DOUBLE_QUOTED_SECRET_RE = new RegExp(\n `([\"']?)([A-Za-z0-9_$.-]*${CAPTURE_SECRET_KEY_FRAGMENT}[A-Za-z0-9_$.-]*)\\\\1(\\\\s*[:=]\\\\s*)\"(?:[^\"\\\\\\\\]|\\\\\\\\.)*\"`,\n \"gi\",\n);\nconst CAPTURE_SINGLE_QUOTED_SECRET_RE = new RegExp(\n `([\"']?)([A-Za-z0-9_$.-]*${CAPTURE_SECRET_KEY_FRAGMENT}[A-Za-z0-9_$.-]*)\\\\1(\\\\s*[:=]\\\\s*)'(?:[^'\\\\\\\\]|\\\\\\\\.)*'`,\n \"gi\",\n);\nconst CAPTURE_UNQUOTED_SECRET_RE = new RegExp(\n `([\"']?)([A-Za-z0-9_$.-]*${CAPTURE_SECRET_KEY_FRAGMENT}[A-Za-z0-9_$.-]*)\\\\1(\\\\s*[:=]\\\\s*)([^\"',\\\\s;}\\\\]]+)`,\n \"gi\",\n);\n\nfunction redactCaptureText(value: string): string {\n return value\n .replace(CAPTURE_AUTHORIZATION_SCHEME_RE, \"$1$2<redacted>\")\n .replace(CAPTURE_BEARER_RE, \"$1 <redacted>\")\n .replace(CAPTURE_DOUBLE_QUOTED_SECRET_RE, '$1$2$1$3\"<redacted>\"')\n .replace(CAPTURE_SINGLE_QUOTED_SECRET_RE, \"$1$2$1$3'<redacted>'\")\n .replace(CAPTURE_UNQUOTED_SECRET_RE, \"$1$2$1$3<redacted>\");\n}\nconst URL_LIKE_KEYS = new Set([\n \"url\",\n \"uri\",\n \"href\",\n \"src\",\n \"currentUrl\",\n \"referrer\",\n \"from\",\n \"to\",\n]);\n\nfunction getState(): SessionReplayState {\n const g = globalThis as typeof globalThis & {\n [SESSION_REPLAY_STATE_KEY]?: SessionReplayState;\n };\n if (!g[SESSION_REPLAY_STATE_KEY]) {\n g[SESSION_REPLAY_STATE_KEY] = {\n active: false,\n startPromise: null,\n startGeneration: 0,\n replayId: null,\n startedAtMs: null,\n replayLinkBaseUrl: null,\n sequence: 0,\n queue: [],\n queuedBytes: 0,\n retryBatches: [],\n transientClientErrorFailures: 0,\n flushTimer: null,\n maxDurationTimer: null,\n flushing: false,\n pendingFlushReason: null,\n pendingFlushWaiters: [],\n awaitingFullSnapshot: false,\n stopRecorder: null,\n restoreUrlMonitor: null,\n removeLifecycleListeners: null,\n restoreIframeBridge: null,\n addCustomEvent: null,\n restoreCaptures: null,\n options: null,\n lastAuthenticatedProperties: null,\n resourceNodes: new Map(),\n automaticConflictRestartAttempted: false,\n broadcastChannel: null,\n };\n }\n const state = g[SESSION_REPLAY_STATE_KEY]!;\n // Keep Vite HMR safe when an older recorder state survives a module reload.\n state.resourceNodes ??= new Map();\n state.transientClientErrorFailures ??= 0;\n state.restoreIframeBridge ??= null;\n state.pendingFlushReason ??= null;\n state.pendingFlushWaiters ??= [];\n state.awaitingFullSnapshot ??= false;\n state.startGeneration ??= 0;\n state.replayLinkBaseUrl ??= null;\n return state;\n}\n\n// The replay session record (replayId + sequence counter) lives in\n// `sessionStorage`, not `localStorage`: `localStorage` is shared by every\n// open tab of the origin, which would hand every tab the same `replayId` and\n// the same sequence counter. See the guard comment above\n// `getOrCreateReplaySession` for the corruption that causes.\nfunction safeSessionStorageGet(key: string): string | null {\n try {\n return window.sessionStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction safeSessionStorageSet(key: string, value: string): void {\n try {\n window.sessionStorage.setItem(key, value);\n } catch {\n // private browsing / storage disabled -- replay still works for this page\n }\n}\n\nfunction safeSessionStorageRemove(key: string): void {\n try {\n window.sessionStorage.removeItem(key);\n } catch {\n // private browsing / storage disabled -- replay still works for this page\n }\n}\n\nlet legacyLocalStorageReplaySessionCleared = false;\n\n/**\n * Best-effort, one-time removal of the pre-fix replay session record that\n * used to live in `localStorage`. Never read from it -- adopting its\n * `replayId` would recreate the exact shared-identity bug this file now\n * avoids by using `sessionStorage` instead.\n */\nfunction clearLegacyLocalStorageReplaySession(): void {\n if (legacyLocalStorageReplaySessionCleared) return;\n legacyLocalStorageReplaySessionCleared = true;\n try {\n window.localStorage.removeItem(SESSION_REPLAY_ID_STORAGE_KEY);\n } catch {\n // best-effort only -- a stray legacy record is harmless once ignored\n }\n}\n\nfunction generateReplayId(): string {\n try {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return crypto.randomUUID();\n }\n } catch {\n // fall through\n }\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n}\n\nfunction readStoredReplaySession(): StoredReplaySession | null {\n const raw = safeSessionStorageGet(SESSION_REPLAY_ID_STORAGE_KEY);\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw) as StoredReplaySession;\n if (!parsed || typeof parsed !== \"object\") return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredReplaySession(value: StoredReplaySession): void {\n safeSessionStorageSet(SESSION_REPLAY_ID_STORAGE_KEY, JSON.stringify(value));\n}\n\nfunction removeStoredReplaySession(replayId: string): void {\n if (readStoredReplaySession()?.replayId !== replayId) return;\n safeSessionStorageRemove(SESSION_REPLAY_ID_STORAGE_KEY);\n}\n\n/**\n * Per-tab replay identity is deliberate -- do not \"fix\" this by reading or\n * writing the session record through `localStorage` again.\n *\n * `sessionStorage` is scoped to a single tab (and survives reloads/\n * navigations within that tab, which is exactly the lifetime a recording\n * needs). `localStorage` is shared by every open tab of the origin. If this\n * record lived there, two tabs open to the same app would read/write the\n * *same* `replayId` and the *same* sequence counter, so rrweb in each tab\n * would record independently but upload chunks under one shared identity.\n * The two interleaved DOM mutation streams get merged into a single\n * recording server-side: mutations reference the other tab's node ids\n * (broken CSS), the viewport/meta events reflect whichever tab resized last\n * (wrong or ultra-wide viewport), and lost mousemove batches from the\n * \"other\" tab's chunks read as a frozen cursor or a fake inactivity gap. A\n * chunk-sequence collision with a different checksum gets rejected\n * server-side (409) rather than merged, so one tab's batches are silently\n * dropped -- there is no way to reconstruct or repair this at playback time.\n * Keep this per-tab. A tab *duplicated* mid-session still shares a\n * `sessionStorage` snapshot, which is what the `BroadcastChannel` claim\n * check in `startSessionReplayRecorder` guards against.\n */\nfunction getOrCreateReplaySession(\n sessionId: string,\n linkBaseUrl?: string | null,\n): {\n replayId: string;\n startedAtMs: number;\n sequence: number;\n linkBaseUrl?: string;\n /** True when resuming a session found in this tab's `sessionStorage`\n * (e.g. a reload), as opposed to minting a brand-new id. Only the resumed\n * case needs the duplicated-tab claim check -- a fresh id can never\n * collide with anything already recording. */\n resumed: boolean;\n} {\n clearLegacyLocalStorageReplaySession();\n const parsed = readStoredReplaySession();\n if (parsed?.sessionId === sessionId && parsed.replayId) {\n const startedAtMs =\n typeof parsed.startedAtMs === \"number\" &&\n Number.isFinite(parsed.startedAtMs) &&\n parsed.startedAtMs > 0\n ? parsed.startedAtMs\n : Date.now();\n const sequence =\n typeof parsed.sequence === \"number\" &&\n Number.isFinite(parsed.sequence) &&\n parsed.sequence >= 0\n ? Math.floor(parsed.sequence)\n : 0;\n const resolvedLinkBaseUrl = linkBaseUrl ?? parsed.linkBaseUrl;\n if (linkBaseUrl && parsed.linkBaseUrl !== linkBaseUrl) {\n writeStoredReplaySession({ ...parsed, linkBaseUrl });\n }\n return {\n replayId: parsed.replayId,\n startedAtMs,\n sequence,\n ...(resolvedLinkBaseUrl ? { linkBaseUrl: resolvedLinkBaseUrl } : {}),\n resumed: true,\n };\n }\n const replayId = generateReplayId();\n const startedAtMs = Date.now();\n writeStoredReplaySession({\n sessionId,\n replayId,\n startedAtMs,\n sequence: 0,\n ...(linkBaseUrl ? { linkBaseUrl } : {}),\n });\n return {\n replayId,\n startedAtMs,\n sequence: 0,\n ...(linkBaseUrl ? { linkBaseUrl } : {}),\n resumed: false,\n };\n}\n\n/**\n * Open the cross-tab claim channel used to detect a *duplicated* tab (a\n * browser \"duplicate tab\" or same-origin `window.open` copies\n * `sessionStorage`, so two tabs can legitimately start with the same\n * resumed `replayId`). Returns `null` when `BroadcastChannel` is\n * unavailable -- callers must treat that as \"skip the guard\", never as an\n * error.\n */\nfunction openReplayBroadcastChannel(): BroadcastChannel | null {\n if (typeof BroadcastChannel === \"undefined\") return null;\n try {\n return new BroadcastChannel(SESSION_REPLAY_BROADCAST_CHANNEL_NAME);\n } catch {\n return null;\n }\n}\n\n/**\n * Wires up the duplicated-tab claim channel for one recorder lifetime.\n * `respond` keeps listening for the whole life of the channel (any tab may\n * later claim the `replayId` this tab is actively recording); `probeClaim`\n * is used once, only when resuming a stored session, to ask \"is anyone else\n * already recording this id?\" and wait up to\n * `SESSION_REPLAY_CLAIM_TIMEOUT_MS` for a reply.\n */\nfunction createReplayClaimChannel(\n state: SessionReplayState,\n instanceNonce: string,\n): {\n channel: BroadcastChannel | null;\n probeClaim: (replayId: string) => Promise<boolean>;\n} {\n const channel = openReplayBroadcastChannel();\n if (!channel) {\n return { channel: null, probeClaim: async () => false };\n }\n let pending: {\n replayId: string;\n resolve: (taken: boolean) => void;\n timer: number;\n } | null = null;\n channel.onmessage = (event: MessageEvent) => {\n const data = event?.data as ReplayBroadcastMessage | undefined | null;\n if (!data || typeof data !== \"object\") return;\n if (data.type === \"an-replay-claim\") {\n if (data.instanceNonce === instanceNonce) return;\n const ownsReplayId = state.active && state.replayId === data.replayId;\n const winsSimultaneousClaim =\n pending?.replayId === data.replayId &&\n instanceNonce.localeCompare(data.instanceNonce) < 0;\n if (!ownsReplayId && !winsSimultaneousClaim) {\n // If both duplicated tabs start simultaneously, deterministically\n // yield to the lower nonce rather than letting both probes time out\n // and record under the copied replay id.\n if (\n pending?.replayId === data.replayId &&\n data.instanceNonce.localeCompare(instanceNonce) < 0\n ) {\n window.clearTimeout(pending.timer);\n const resolve = pending.resolve;\n pending = null;\n resolve(true);\n }\n return;\n }\n try {\n const reply: ReplayClaimTakenMessage = {\n type: \"an-replay-claim-taken\",\n replayId: data.replayId,\n claimantNonce: data.instanceNonce,\n };\n channel.postMessage(reply);\n } catch {\n // best-effort -- a lost reply just means the duplicate tab resumes\n // recording under the shared id; later 409s still protect the\n // stream from getting corrupted merges.\n }\n return;\n }\n if (data.type === \"an-replay-claim-taken\") {\n if (\n pending &&\n data.replayId === pending.replayId &&\n (!data.claimantNonce || data.claimantNonce === instanceNonce)\n ) {\n window.clearTimeout(pending.timer);\n const resolve = pending.resolve;\n pending = null;\n resolve(true);\n }\n }\n };\n const probeClaim = (replayId: string): Promise<boolean> =>\n new Promise((resolve) => {\n const timer = window.setTimeout(() => {\n pending = null;\n resolve(false);\n }, SESSION_REPLAY_CLAIM_TIMEOUT_MS);\n pending = { replayId, resolve, timer };\n try {\n const claim: ReplayClaimMessage = {\n type: \"an-replay-claim\",\n replayId,\n instanceNonce,\n };\n channel.postMessage(claim);\n } catch {\n window.clearTimeout(timer);\n pending = null;\n resolve(false);\n }\n });\n return { channel, probeClaim };\n}\n\nfunction persistReplaySequence(\n sessionId: string,\n replayId: string,\n startedAtMs: number | null,\n sequence: number,\n linkBaseUrl?: string | null,\n): void {\n const existing = readStoredReplaySession();\n writeStoredReplaySession({\n sessionId,\n replayId,\n startedAtMs: startedAtMs ?? Date.now(),\n sequence,\n ...(linkBaseUrl || existing?.linkBaseUrl\n ? { linkBaseUrl: linkBaseUrl ?? existing?.linkBaseUrl }\n : {}),\n });\n}\n\nfunction clampSamplingRate(value: number | undefined): number {\n if (typeof value !== \"number\" || Number.isNaN(value)) return 1;\n return Math.min(1, Math.max(0, value));\n}\n\nfunction readEnvString(key: string): string | undefined {\n return (import.meta.env as Record<string, string | undefined>)?.[key]?.trim();\n}\n\nfunction readEnvNumber(key: string): number | undefined {\n const raw = readEnvString(key);\n if (!raw) return undefined;\n const value = Number(raw);\n return Number.isFinite(value) ? value : undefined;\n}\n\nfunction readEnvBoolean(key: string): boolean | undefined {\n const raw = readEnvString(key);\n if (!raw) return undefined;\n if (/^(1|true|yes|on)$/i.test(raw)) return true;\n if (/^(0|false|no|off)$/i.test(raw)) return false;\n return undefined;\n}\n\nfunction readFirstEnvString(keys: string[]): string | undefined {\n for (const key of keys) {\n const value = readEnvString(key);\n if (value) return value;\n }\n return undefined;\n}\n\nfunction readFirstEnvNumber(keys: string[]): number | undefined {\n for (const key of keys) {\n const value = readEnvNumber(key);\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction replayEndpointFromAnalyticsEndpoint(value: string): string | null {\n try {\n const url = new URL(value);\n if (url.pathname.endsWith(\"/api/analytics/track\")) {\n url.pathname = url.pathname.replace(\n /\\/api\\/analytics\\/track$/,\n \"/api/analytics/replay\",\n );\n return url.toString();\n }\n if (url.pathname.endsWith(\"/track\")) {\n url.pathname = url.pathname.replace(/\\/track$/, \"/api/analytics/replay\");\n return url.toString();\n }\n } catch {\n // Fall through to the relative path cases below.\n }\n if (value.endsWith(\"/api/analytics/track\")) {\n return value.replace(/\\/api\\/analytics\\/track$/, \"/api/analytics/replay\");\n }\n if (value.endsWith(\"/track\")) {\n return value.replace(/\\/track$/, \"/api/analytics/replay\");\n }\n return null;\n}\n\nfunction defaultReplayEndpoint(): string {\n const analyticsEndpoint = readEnvString(\n \"VITE_AGENT_NATIVE_ANALYTICS_ENDPOINT\",\n );\n const derived = analyticsEndpoint\n ? replayEndpointFromAnalyticsEndpoint(analyticsEndpoint)\n : null;\n if (derived) return derived;\n return typeof window !== \"undefined\"\n ? `${window.location.origin}${DEFAULT_REPLAY_PATH}`\n : DEFAULT_REPLAY_PATH;\n}\n\nfunction normalizeReplayLinkBaseUrl(value?: string): string | null {\n const raw =\n value?.trim() ||\n readEnvString(\"VITE_AGENT_NATIVE_ANALYTICS_APP_URL\") ||\n (typeof window !== \"undefined\" ? window.location.origin : \"\");\n if (!raw) return null;\n try {\n return new URL(\n raw,\n typeof window !== \"undefined\" ? window.location.href : undefined,\n ).origin;\n } catch {\n return null;\n }\n}\n\nexport function getSessionReplaySamplingScore(\n sessionId: string,\n salt = DEFAULT_SAMPLING_SALT,\n): number {\n let hash = 2166136261;\n const input = `${salt}:${sessionId}`;\n for (let i = 0; i < input.length; i += 1) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return (hash >>> 0) / 4294967296;\n}\n\nexport function shouldSampleSessionReplay(\n sessionId: string,\n sampleRate = 1,\n salt = DEFAULT_SAMPLING_SALT,\n): boolean {\n const rate = clampSamplingRate(sampleRate);\n if (rate <= 0) return false;\n if (rate >= 1) return true;\n return getSessionReplaySamplingScore(sessionId, salt) < rate;\n}\n\nfunction matcherAllows(matcher: SessionReplayUrlMatcher, url: string): boolean {\n if (typeof matcher === \"string\") return url.includes(matcher);\n if (matcher instanceof RegExp) return matcher.test(url);\n return matcher(url);\n}\n\nfunction isUrlRecordable(\n url: string,\n options: Pick<NormalizedSessionReplayOptions, \"allowUrls\" | \"blockUrls\">,\n): boolean {\n if (options.allowUrls.length > 0) {\n const allowed = options.allowUrls.some((matcher) =>\n matcherAllows(matcher, url),\n );\n if (!allowed) return false;\n }\n return !options.blockUrls.some((matcher) => matcherAllows(matcher, url));\n}\n\nfunction normalizeOptions(\n options: SessionReplayOptions,\n): NormalizedSessionReplayOptions | null {\n const publicKey =\n options.publicKey ||\n readFirstEnvString([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_PUBLIC_KEY\",\n \"VITE_SESSION_REPLAY_PUBLIC_KEY\",\n ]) ||\n (import.meta.env as Record<string, string | undefined>)\n ?.VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY;\n if (!publicKey) return null;\n const endpoint =\n options.endpoint ||\n readFirstEnvString([\n \"VITE_AGENT_NATIVE_ANALYTICS_REPLAY_ENDPOINT\",\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_ENDPOINT\",\n \"VITE_SESSION_REPLAY_INGEST_URL\",\n ]) ||\n defaultReplayEndpoint();\n return {\n publicKey,\n endpoint,\n linkBaseUrl: normalizeReplayLinkBaseUrl(options.linkBaseUrl),\n requireSignedInUser:\n options.requireSignedInUser ??\n readEnvBoolean(\"VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH\") ??\n readEnvBoolean(\"VITE_SESSION_REPLAY_REQUIRE_AUTH\") ??\n false,\n sampleRate: clampSamplingRate(\n options.sampleRate ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE\",\n \"VITE_SESSION_REPLAY_SAMPLE_RATE\",\n ]),\n ),\n samplingSalt: options.samplingSalt || DEFAULT_SAMPLING_SALT,\n allowUrls: options.allowUrls ?? [],\n blockUrls: options.blockUrls ?? [],\n flushIntervalMs: Math.max(\n 250,\n options.flushIntervalMs ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_CHUNK_INTERVAL_MS\",\n \"VITE_SESSION_REPLAY_CHUNK_INTERVAL_MS\",\n ]) ??\n DEFAULT_FLUSH_INTERVAL_MS,\n ),\n maxDurationMs: Math.max(\n 1000,\n options.maxDurationMs ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_MAX_DURATION_MS\",\n \"VITE_SESSION_REPLAY_MAX_DURATION_MS\",\n ]) ??\n DEFAULT_MAX_DURATION_MS,\n ),\n maxEventsPerBatch: Math.max(\n 1,\n options.maxEventsPerBatch ?? DEFAULT_MAX_EVENTS_PER_BATCH,\n ),\n maxBatchBytes: Math.max(\n 1024,\n options.maxBatchBytes ??\n readFirstEnvNumber([\n \"VITE_AGENT_NATIVE_SESSION_REPLAY_CHUNK_MAX_BYTES\",\n \"VITE_SESSION_REPLAY_CHUNK_MAX_BYTES\",\n ]) ??\n DEFAULT_MAX_BATCH_BYTES,\n ),\n checkoutEveryNth: options.checkoutEveryNth,\n checkoutEveryNms: options.checkoutEveryNms,\n inlineStylesheet: options.inlineStylesheet ?? true,\n blockSelector: mergeReplayBlockSelector(\n options.blockSelector || DEFAULT_BLOCK_SELECTOR,\n ),\n ignoreSelector: options.ignoreSelector || DEFAULT_IGNORE_SELECTOR,\n maskTextClass: options.maskTextClass || DEFAULT_MASK_TEXT_CLASS,\n maskTextSelector: options.maskTextSelector || DEFAULT_MASK_TEXT_SELECTOR,\n maskAllInputs: options.maskAllInputs ?? true,\n recordCanvas: options.recordCanvas ?? false,\n // A top-level app can safely aggregate cooperative child recorders. An\n // app embedded by an unrelated cross-origin host must continue emitting\n // and uploading its own events, so it only forwards to a parent when the\n // caller explicitly opts in.\n recordCrossOriginIframes:\n options.recordCrossOriginIframes ?? window.parent === window,\n collectFonts: options.collectFonts ?? false,\n inlineImages: options.inlineImages ?? false,\n eventSampling: options.eventSampling ?? DEFAULT_EVENT_SAMPLING,\n console: normalizeCaptureToggle(\n options.console,\n DEFAULT_MAX_CONSOLE_EVENTS,\n ),\n network: normalizeCaptureToggle(\n options.network,\n DEFAULT_MAX_NETWORK_EVENTS,\n ),\n onUploadRejected: options.onUploadRejected,\n extraProperties: options.extraProperties,\n shouldStart: options.shouldStart,\n };\n}\n\nfunction mergeReplayBlockSelector(blockSelector: string): string {\n return blockSelector.includes(SESSION_REPLAY_IFRAME_BLOCK_SELECTOR)\n ? blockSelector\n : `${blockSelector}, ${SESSION_REPLAY_IFRAME_BLOCK_SELECTOR}`;\n}\n\n/**\n * Console/network capture default to ON whenever session replay records;\n * `false` disables a category, an object form overrides its caps. Network\n * options may additionally carry `captureErrorBodies`/`maxErrorBodyLength`;\n * console ignores those fields.\n */\nfunction normalizeCaptureToggle(\n value: boolean | SessionReplayNetworkOptions | undefined,\n defaultMaxEvents: number,\n): NormalizedCaptureOptions | null {\n if (value === false) return null;\n const overrides = typeof value === \"object\" && value !== null ? value : {};\n const maxEvents =\n typeof overrides.maxEvents === \"number\" &&\n Number.isFinite(overrides.maxEvents)\n ? Math.max(1, Math.floor(overrides.maxEvents))\n : defaultMaxEvents;\n const maxErrorBodyLength =\n typeof overrides.maxErrorBodyLength === \"number\" &&\n Number.isFinite(overrides.maxErrorBodyLength)\n ? Math.max(0, Math.floor(overrides.maxErrorBodyLength))\n : DEFAULT_MAX_ERROR_BODY_LENGTH;\n return {\n maxEvents,\n captureErrorBodies: overrides.captureErrorBodies !== false,\n maxErrorBodyLength,\n };\n}\n\nfunction scrubStringValue(key: string, value: string): string {\n const lowerKey = key.toLowerCase();\n const isUrlKey = URL_LIKE_KEYS.has(key) || URL_LIKE_KEYS.has(lowerKey);\n if (\n isUrlKey ||\n value.startsWith(\"http://\") ||\n value.startsWith(\"https://\") ||\n value.startsWith(\"/\")\n ) {\n return scrubUrl(value) ?? value;\n }\n return value;\n}\n\nfunction scrubReplayValue(\n value: unknown,\n key = \"\",\n depth = 0,\n seen = new WeakSet<object>(),\n): unknown {\n if (typeof value === \"string\") return scrubStringValue(key, value);\n if (!value || typeof value !== \"object\") return value;\n if (depth > 12) return value;\n if (seen.has(value)) return value;\n seen.add(value);\n if (Array.isArray(value)) {\n return value.map((item) => scrubReplayValue(item, key, depth + 1, seen));\n }\n const out: Record<string, unknown> = {};\n for (const [childKey, childValue] of Object.entries(value)) {\n out[childKey] = scrubReplayValue(childValue, childKey, depth + 1, seen);\n }\n return out;\n}\n\n/**\n * JSON.stringify replacer that scrubs URL-like string values inline. Folding\n * the scrub into the single serialization pass avoids a separate deep-clone of\n * every emitted event (FullSnapshots are large DOM trees) on the hot path.\n */\nconst REPLAY_RESOURCE_LINK_RELS = new Set([\n \"stylesheet\",\n \"icon\",\n \"apple-touch-icon\",\n \"mask-icon\",\n]);\nconst REPLAY_RESOURCE_PRELOAD_TYPES = new Set([\n \"style\",\n \"font\",\n \"image\",\n \"audio\",\n \"video\",\n \"track\",\n]);\nconst REPLAY_RESOURCE_TAGS = new Set([\n \"img\",\n \"source\",\n \"video\",\n \"audio\",\n \"track\",\n \"input\",\n \"link\",\n]);\nconst NO_REPLAY_RESOURCE_ATTRIBUTES = new Set<string>();\nconst REPLAY_SRC_ATTRIBUTES = new Set([\"src\"]);\nconst REPLAY_SRCSET_ATTRIBUTES = new Set([\"src\", \"srcset\"]);\nconst REPLAY_VIDEO_ATTRIBUTES = new Set([\"src\", \"poster\"]);\nconst REPLAY_HREF_ATTRIBUTES = new Set([\"href\"]);\n\nfunction replayAttributeString(\n attributes: Record<string, unknown>,\n key: string,\n): string {\n return typeof attributes[key] === \"string\"\n ? attributes[key].toLowerCase()\n : \"\";\n}\n\nfunction updateReplayResourceNode(\n current: ReplayResourceNode,\n attributes: Record<string, unknown>,\n): ReplayResourceNode {\n return {\n tagName: current.tagName,\n rel: Object.prototype.hasOwnProperty.call(attributes, \"rel\")\n ? replayAttributeString(attributes, \"rel\")\n : current.rel,\n as: Object.prototype.hasOwnProperty.call(attributes, \"as\")\n ? replayAttributeString(attributes, \"as\")\n : current.as,\n type: Object.prototype.hasOwnProperty.call(attributes, \"type\")\n ? replayAttributeString(attributes, \"type\")\n : current.type,\n };\n}\n\nfunction replayPreservedResourceAttributes(\n node: ReplayResourceNode,\n): ReadonlySet<string> {\n switch (node.tagName) {\n case \"img\":\n case \"source\":\n return REPLAY_SRCSET_ATTRIBUTES;\n case \"video\":\n return REPLAY_VIDEO_ATTRIBUTES;\n case \"audio\":\n case \"track\":\n return REPLAY_SRC_ATTRIBUTES;\n case \"input\":\n return node.type === \"image\"\n ? REPLAY_SRC_ATTRIBUTES\n : NO_REPLAY_RESOURCE_ATTRIBUTES;\n case \"link\": {\n const rels = node.rel.split(/\\s+/);\n const isLoadBearingResource =\n rels.some((rel) => REPLAY_RESOURCE_LINK_RELS.has(rel)) ||\n (rels.includes(\"preload\") &&\n REPLAY_RESOURCE_PRELOAD_TYPES.has(node.as));\n return isLoadBearingResource\n ? REPLAY_HREF_ATTRIBUTES\n : NO_REPLAY_RESOURCE_ATTRIBUTES;\n }\n default:\n return NO_REPLAY_RESOURCE_ATTRIBUTES;\n }\n}\n\n/**\n * Build a path-aware replay serializer without cloning the rrweb event.\n *\n * Privacy still wins for Meta/navigation URLs, executable/embed URLs, anchor\n * hrefs, and custom console/network diagnostics. The narrow exception is\n * load-bearing stylesheet, font, image, and media attributes: changing those\n * signed URLs makes rrweb rebuild a page that never existed. JSON.stringify\n * calls a replacer for an `attributes` object before its children, so the\n * WeakMap lets the child callback recognize only that bag.\n */\nfunction createReplayScrubReplacer(\n resourceNodes: Map<number, ReplayResourceNode>,\n): (this: unknown, key: string, value: unknown) => unknown {\n const preservedAttributes = new WeakMap<object, ReadonlySet<string>>();\n\n return function replayScrubReplacer(\n this: unknown,\n key: string,\n value: unknown,\n ): unknown {\n if (key === \"attributes\" && value && typeof value === \"object\") {\n const attributes = value as Record<string, unknown>;\n const holder =\n this && typeof this === \"object\"\n ? (this as Record<string, unknown>)\n : undefined;\n const tagName =\n typeof holder?.tagName === \"string\" ? holder.tagName.toLowerCase() : \"\";\n const nodeId =\n typeof holder?.id === \"number\" && Number.isFinite(holder.id)\n ? holder.id\n : undefined;\n let resourceNode: ReplayResourceNode | undefined;\n if (tagName && REPLAY_RESOURCE_TAGS.has(tagName)) {\n resourceNode = updateReplayResourceNode(\n { tagName, rel: \"\", as: \"\", type: \"\" },\n attributes,\n );\n } else if (nodeId !== undefined && !tagName) {\n const current = resourceNodes.get(nodeId);\n if (current) {\n resourceNode = updateReplayResourceNode(current, attributes);\n }\n }\n if (nodeId !== undefined && resourceNode) {\n resourceNodes.set(nodeId, resourceNode);\n }\n\n const resourceKeys = resourceNode\n ? replayPreservedResourceAttributes(resourceNode)\n : NO_REPLAY_RESOURCE_ATTRIBUTES;\n\n if (resourceKeys.size > 0) preservedAttributes.set(value, resourceKeys);\n return value;\n }\n\n if (\n typeof value === \"string\" &&\n this &&\n typeof this === \"object\" &&\n preservedAttributes.get(this)?.has(key.toLowerCase())\n ) {\n return value;\n }\n return typeof value === \"string\" ? scrubStringValue(key, value) : value;\n };\n}\n\n/**\n * Serialize + scrub one event in a single pass. The resulting string is stored\n * directly on the queue and reused verbatim at flush, so each event is\n * stringified exactly once (was: deep-clone + size-stringify + flush-stringify).\n */\nfunction serializeReplayEvent(\n event: ReplayEvent,\n resourceNodes: Map<number, ReplayResourceNode>,\n): string {\n try {\n if (event.type === 2) resourceNodes.clear();\n return JSON.stringify(event, createReplayScrubReplacer(resourceNodes));\n } catch {\n return \"\";\n }\n}\n\nfunction replayEventTimestampMs(event: ReplayEvent): number {\n const timestamp = event.timestamp;\n if (typeof timestamp === \"number\" && Number.isFinite(timestamp)) {\n return timestamp;\n }\n if (typeof timestamp === \"string\" && timestamp.trim()) {\n const parsed = Date.parse(timestamp);\n if (Number.isFinite(parsed)) return parsed;\n }\n return Date.now();\n}\n\nfunction enqueueReplayEvent(\n state: SessionReplayState,\n event: ReplayEvent,\n): void {\n if (!state.options) return;\n const eventType = typeof event.type === \"number\" ? event.type : null;\n if (state.awaitingFullSnapshot) {\n if (eventType !== RRWEB_FULL_SNAPSHOT_EVENT_TYPE) return;\n state.awaitingFullSnapshot = false;\n }\n const serialized = serializeReplayEvent(event, state.resourceNodes);\n if (!serialized) return;\n const estimatedBytes = replaySerializedBytes(serialized);\n if (\n state.queue.length > 0 &&\n state.queuedBytes + estimatedBytes > state.options.maxBatchBytes\n ) {\n void flushSessionReplay(\"max-bytes\");\n }\n state.queue.push({\n json: serialized,\n byteLength: estimatedBytes,\n timestampMs: replayEventTimestampMs(event),\n type: eventType,\n });\n state.queuedBytes += estimatedBytes;\n flushQueuedReplayIfNeeded(state);\n}\n\nfunction replayExtraProperties(\n options: NormalizedSessionReplayOptions,\n): Record<string, unknown> | undefined {\n const source = options.extraProperties;\n if (!source) return undefined;\n try {\n const props = typeof source === \"function\" ? source() : source;\n if (!props || typeof props !== \"object\") return undefined;\n return scrubReplayValue(props) as Record<string, unknown>;\n } catch {\n return undefined;\n }\n}\n\nfunction replayString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction replayEmail(value: unknown): string | undefined {\n const raw = replayString(value);\n return raw && raw.includes(\"@\") ? raw : undefined;\n}\n\nfunction replayUserEmail(\n properties: Record<string, unknown> | undefined,\n): string | undefined {\n return (\n replayEmail(properties?.userEmail ?? properties?.user_email) ||\n replayEmail(properties?.email) ||\n replayEmail(properties?.userId ?? properties?.user_id)\n );\n}\n\nfunction replayPropertiesForUpload(\n state: SessionReplayState,\n options: NormalizedSessionReplayOptions,\n): Record<string, unknown> | undefined {\n const properties = replayExtraProperties(options);\n if (replayUserEmail(properties)) {\n state.lastAuthenticatedProperties = properties ? { ...properties } : null;\n return properties;\n }\n if (options.requireSignedInUser && state.lastAuthenticatedProperties) {\n return state.lastAuthenticatedProperties;\n }\n return properties;\n}\n\ninterface ReplayUploadPayload {\n body: string;\n replayId: string;\n sessionId: string;\n sequence: number;\n}\n\nfunction buildReplayBody(\n state: SessionReplayState,\n reason: string,\n events: QueuedReplayEvent[],\n): ReplayUploadPayload | null {\n const options = state.options;\n if (!options || !state.replayId) return null;\n const sessionId = getOrCreateAnalyticsSessionId();\n if (!sessionId) return null;\n const properties = replayPropertiesForUpload(state, options);\n const userEmail = replayUserEmail(properties);\n if (options.requireSignedInUser && !userEmail) return null;\n const userId =\n userEmail || replayString(properties?.userId ?? properties?.user_id);\n const eventTimestamps = events.map((event) => event.timestampMs);\n const nowMs = Date.now();\n const startedAtMs =\n state.startedAtMs ??\n (eventTimestamps.length ? Math.min(...eventTimestamps) : nowMs);\n const endedAtMs = eventTimestamps.length\n ? Math.max(...eventTimestamps)\n : nowMs;\n const envelope = {\n publicKey: options.publicKey,\n type: \"session_replay\",\n replayId: state.replayId,\n sessionId,\n ...(userId ? { userId } : {}),\n ...(userEmail ? { userEmail } : {}),\n anonymousId: getOrCreateAnalyticsAnonymousId(),\n sequence: state.sequence,\n reason,\n status: isFinalFlushReason(reason) ? \"completed\" : \"active\",\n eventCount: events.length,\n startedAt: new Date(startedAtMs).toISOString(),\n endedAt: new Date(endedAtMs).toISOString(),\n durationMs: Math.max(0, endedAtMs - startedAtMs),\n privacyMode: \"mask-inputs-and-selected-text\",\n url:\n typeof window !== \"undefined\"\n ? scrubUrl(window.location.href)\n : undefined,\n timestamp: new Date().toISOString(),\n properties,\n };\n // Events are already serialized+scrubbed JSON strings; splice them into the\n // envelope without re-serializing the (potentially large) events array.\n const envelopeJson = JSON.stringify(envelope);\n return {\n body: `${envelopeJson.slice(0, -1)},\"events\":[${events\n .map((event) => event.json)\n .join(\",\")}]}`,\n replayId: state.replayId,\n sessionId,\n sequence: state.sequence,\n };\n}\n\ninterface ReplayUploadBody {\n body: BodyInit;\n headers: Record<string, string>;\n compressed: boolean;\n}\n\nfunction isCrossOriginReplayEndpoint(endpoint: string): boolean {\n if (typeof window === \"undefined\") return false;\n try {\n return (\n new URL(endpoint, window.location.href).origin !== window.location.origin\n );\n } catch {\n return false;\n }\n}\n\nasync function gzipReplayBody(body: string): Promise<Blob | null> {\n if (\n typeof CompressionStream === \"undefined\" ||\n typeof Blob === \"undefined\" ||\n typeof Response === \"undefined\"\n ) {\n return null;\n }\n try {\n const stream = new Blob([body], { type: \"application/json\" })\n .stream()\n .pipeThrough(new CompressionStream(\"gzip\"));\n const compressed = await new Response(stream).arrayBuffer();\n return new Blob([compressed], { type: \"application/octet-stream\" });\n } catch {\n return null;\n }\n}\n\nasync function buildReplayUploadBody(body: string): Promise<ReplayUploadBody> {\n const compressed = await gzipReplayBody(body);\n if (compressed) {\n return {\n body: compressed,\n compressed: true,\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n \"Content-Encoding\": \"gzip\",\n },\n };\n }\n return {\n body,\n compressed: false,\n headers: {\n \"Content-Type\": \"text/plain;charset=UTF-8\",\n },\n };\n}\n\nfunction replayUploadBodyBytes(body: BodyInit): number {\n if (typeof body === \"string\") {\n if (typeof TextEncoder !== \"undefined\") {\n return new TextEncoder().encode(body).byteLength;\n }\n return body.length;\n }\n if (typeof Blob !== \"undefined\" && body instanceof Blob) {\n return body.size;\n }\n if (body instanceof ArrayBuffer) {\n return body.byteLength;\n }\n if (ArrayBuffer.isView(body)) {\n return body.byteLength;\n }\n return MAX_KEEPALIVE_REPLAY_UPLOAD_BYTES + 1;\n}\n\nfunction canUseReplayKeepalive(body: BodyInit): boolean {\n return replayUploadBodyBytes(body) <= MAX_KEEPALIVE_REPLAY_UPLOAD_BYTES;\n}\n\n/** Thrown by `sendReplayUpload` on a non-ok HTTP response, carrying the\n * status so `flushSessionReplay` can tell a permanent client rejection\n * (e.g. a 409 checksum conflict, which can never succeed on retry) apart\n * from a transient failure worth retrying. */\nclass ReplayUploadHttpError extends Error {\n readonly status: number;\n constructor(status: number) {\n super(`Session replay upload failed with HTTP ${status}`);\n this.name = \"ReplayUploadHttpError\";\n this.status = status;\n }\n}\n\n/** 4xx statuses where retrying the exact same batch can never succeed.\n * Keep this deliberately narrow: 401/403/404 can be temporary during auth or\n * deploy transitions, so they get a small retry budget before the rejected\n * episode is stopped. The budget prevents a persistent configuration failure\n * from pinning retryBatches while rrweb events grow without bound. */\nfunction isDefinitiveReplayUploadClientError(status: number): boolean {\n return status === 400 || status === 409 || status === 413 || status === 422;\n}\n\nconst MAX_TRANSIENT_REPLAY_CLIENT_FAILURES = 3;\n\nfunction isTransientReplayUploadClientError(status: number): boolean {\n return status === 401 || status === 403 || status === 404;\n}\n\nasync function sendReplayUpload(\n options: NormalizedSessionReplayOptions,\n body: string,\n callbacks: { beforeKeepaliveUpload?: () => void } = {},\n): Promise<void> {\n if (isCrossOriginReplayEndpoint(options.endpoint)) {\n const canUseKeepalive = canUseReplayKeepalive(body);\n if (canUseKeepalive) callbacks.beforeKeepaliveUpload?.();\n const response = await fetch(options.endpoint, {\n method: \"POST\",\n body,\n keepalive: canUseKeepalive,\n headers: { \"Content-Type\": \"text/plain;charset=UTF-8\" },\n });\n if (!response.ok) {\n throw new ReplayUploadHttpError(response.status);\n }\n return;\n }\n\n const upload = await buildReplayUploadBody(body);\n const canUseKeepalive = canUseReplayKeepalive(upload.body);\n if (canUseKeepalive) callbacks.beforeKeepaliveUpload?.();\n const response = await fetch(options.endpoint, {\n method: \"POST\",\n body: upload.body,\n keepalive: canUseKeepalive,\n headers: {\n ...upload.headers,\n \"X-Agent-Native-Analytics-Key\": options.publicKey,\n },\n });\n if (!response.ok) {\n throw new ReplayUploadHttpError(response.status);\n }\n}\n\nfunction isFinalFlushReason(reason: string): boolean {\n return [\n \"auth-cleared\",\n \"manual\",\n \"pagehide\",\n \"beforeunload\",\n \"url-blocked\",\n \"max-duration\",\n ].includes(reason);\n}\n\nfunction flushReasonPriority(reason: string): number {\n // Unload reasons must retain their keepalive sequence reservation even when\n // another final request (for example, an explicit manual stop) is coalesced.\n if (reason === \"pagehide\" || reason === \"beforeunload\") return 3;\n if (isFinalFlushReason(reason)) return 2;\n if (reason === \"visibility-hidden\") return 1;\n return 0;\n}\n\nfunction mergePendingFlushReason(\n current: string | null,\n requested: string,\n): string {\n if (!current) return requested;\n return flushReasonPriority(requested) > flushReasonPriority(current)\n ? requested\n : current;\n}\n\nfunction shouldReserveSequenceBeforeKeepalive(reason: string): boolean {\n return (\n reason === \"pagehide\" ||\n reason === \"beforeunload\" ||\n reason === \"visibility-hidden\"\n );\n}\n\nfunction hasFullSnapshot(events: QueuedReplayEvent[]): boolean {\n return events.some((event) => event.type === RRWEB_FULL_SNAPSHOT_EVENT_TYPE);\n}\n\nfunction hasPendingReplayBatch(state: SessionReplayState): boolean {\n return state.retryBatches.length > 0 || state.queue.length > 0;\n}\n\nfunction shouldFlushQueuedReplay(state: SessionReplayState): boolean {\n if (!state.options || state.queue.length === 0) return false;\n return (\n hasFullSnapshot(state.queue) ||\n state.queue.length >= state.options.maxEventsPerBatch ||\n state.queuedBytes >= state.options.maxBatchBytes\n );\n}\n\nfunction flushQueuedReplayIfNeeded(state: SessionReplayState): void {\n const options = state.options;\n if (!options) return;\n if (state.retryBatches.length > 0) return;\n if (!shouldFlushQueuedReplay(state)) return;\n const reason = hasFullSnapshot(state.queue)\n ? \"full-snapshot\"\n : state.queue.length >= options.maxEventsPerBatch\n ? \"max-events\"\n : \"max-bytes\";\n void flushSessionReplay(reason);\n}\n\nfunction queuedReplayBytes(events: QueuedReplayEvent[]): number {\n return events.reduce(\n (total, event) => total + queuedReplayEventBytes(event),\n 0,\n );\n}\n\nfunction replaySerializedBytes(value: string): number {\n if (REPLAY_TEXT_ENCODER) return REPLAY_TEXT_ENCODER.encode(value).byteLength;\n if (typeof Blob !== \"undefined\") return new Blob([value]).size;\n return value.length;\n}\n\nfunction queuedReplayEventBytes(event: QueuedReplayEvent): number {\n return Number.isFinite(event.byteLength)\n ? event.byteLength\n : replaySerializedBytes(event.json);\n}\n\n/**\n * Remove one bounded FIFO prefix from the live queue.\n *\n * Threshold-triggered flushes may arrive while another upload is active. The\n * old `queue.splice(0)` drained that entire accumulated backlog on the next\n * flush, bypassing both byte and event caps. Keep FullSnapshots isolated and\n * always take at least one event so an individually large snapshot can still\n * make progress.\n */\nfunction takeQueuedReplayBatch(state: SessionReplayState): QueuedReplayEvent[] {\n const options = state.options;\n if (!options || state.queue.length === 0) return [];\n\n let count = 0;\n let bytes = 0;\n for (const event of state.queue) {\n if (count > 0 && event.type === RRWEB_FULL_SNAPSHOT_EVENT_TYPE) break;\n if (\n count > 0 &&\n (count >= options.maxEventsPerBatch ||\n bytes + queuedReplayEventBytes(event) > options.maxBatchBytes)\n ) {\n break;\n }\n count += 1;\n bytes += queuedReplayEventBytes(event);\n if (event.type === RRWEB_FULL_SNAPSHOT_EVENT_TYPE) break;\n }\n\n const events = state.queue.splice(0, Math.max(1, count));\n state.queuedBytes = queuedReplayBytes(state.queue);\n return events;\n}\n\nfunction splitReplayBatch(\n events: QueuedReplayEvent[],\n): [QueuedReplayEvent[], QueuedReplayEvent[]] | null {\n if (events.length < 2) return null;\n const targetBytes = queuedReplayBytes(events) / 2;\n let splitAt = 1;\n let bytes = events[0] ? queuedReplayEventBytes(events[0]) : 0;\n while (splitAt < events.length - 1 && bytes < targetBytes) {\n const event = events[splitAt];\n if (event) bytes += queuedReplayEventBytes(event);\n splitAt += 1;\n }\n return [events.slice(0, splitAt), events.slice(splitAt)];\n}\n\nfunction replayBatchNeedsDomReset(events: QueuedReplayEvent[]): boolean {\n return events.some((event) => {\n if (event.type === RRWEB_FULL_SNAPSHOT_EVENT_TYPE) return true;\n if (event.type !== 3) return false;\n try {\n const parsed = JSON.parse(event.json) as { data?: { source?: unknown } };\n // rrweb IncrementalSource.Mutation is zero. Dropping one may leave later\n // node references dangling until another FullSnapshot resets the mirror.\n return parsed.data?.source === 0;\n } catch {\n return true;\n }\n });\n}\n\nfunction quarantinePendingReplayUntilFullSnapshot(\n state: SessionReplayState,\n): void {\n const pending = [...state.retryBatches.flat(), ...state.queue];\n const resetAt = pending.findIndex(\n (event) => event.type === RRWEB_FULL_SNAPSHOT_EVENT_TYPE,\n );\n state.retryBatches = [];\n state.queue = resetAt >= 0 ? pending.slice(resetAt) : [];\n state.queuedBytes = queuedReplayBytes(state.queue);\n state.awaitingFullSnapshot = resetAt < 0;\n}\n\nfunction restoreReplayEvents(\n state: SessionReplayState,\n events: QueuedReplayEvent[],\n): void {\n state.retryBatches.unshift(events);\n}\n\nfunction advanceReplaySequence(\n state: SessionReplayState,\n payload: ReplayUploadPayload,\n): void {\n if (state.replayId !== payload.replayId) return;\n state.sequence = Math.max(state.sequence, payload.sequence + 1);\n persistReplaySequence(\n payload.sessionId,\n payload.replayId,\n state.startedAtMs,\n state.sequence,\n state.replayLinkBaseUrl,\n );\n}\n\nfunction rollbackReplaySequenceReservation(\n state: SessionReplayState,\n payload: ReplayUploadPayload,\n): void {\n if (state.replayId !== payload.replayId) return;\n if (state.sequence !== payload.sequence + 1) return;\n state.sequence = payload.sequence;\n persistReplaySequence(\n payload.sessionId,\n payload.replayId,\n state.startedAtMs,\n state.sequence,\n state.replayLinkBaseUrl,\n );\n}\n\nexport async function flushSessionReplay(reason = \"manual\"): Promise<void> {\n const state = getState();\n if (!state.options) return;\n if (state.flushing) {\n state.pendingFlushReason = mergePendingFlushReason(\n state.pendingFlushReason,\n reason,\n );\n return new Promise<void>((resolve) => {\n state.pendingFlushWaiters.push(resolve);\n });\n }\n if (!hasPendingReplayBatch(state)) return;\n const events = state.retryBatches.shift() ?? takeQueuedReplayBatch(state);\n const payload = buildReplayBody(state, reason, events);\n if (!payload || !state.options) {\n restoreReplayEvents(state, events);\n return;\n }\n state.flushing = true;\n let uploaded = false;\n let reservedSequence = false;\n let splitRejectedBatch = false;\n let droppedOversizedBatch = false;\n let definitiveClientErrorStatus: number | null = null;\n try {\n await sendReplayUpload(state.options, payload.body, {\n beforeKeepaliveUpload: shouldReserveSequenceBeforeKeepalive(reason)\n ? () => {\n advanceReplaySequence(state, payload);\n reservedSequence = true;\n }\n : undefined,\n });\n if (!reservedSequence) advanceReplaySequence(state, payload);\n state.automaticConflictRestartAttempted = false;\n state.transientClientErrorFailures = 0;\n uploaded = true;\n } catch (error) {\n if (reservedSequence) rollbackReplaySequenceReservation(state, payload);\n // A definitive 4xx (e.g. a 409 chunk-sequence/checksum conflict) can\n // never succeed by retrying the exact same batch -- requeuing it would\n // just spin forever, blocking every later batch behind it (flushes are\n // FIFO via `retryBatches`). Drop it and move on instead.\n const rejectedStatus =\n error instanceof ReplayUploadHttpError ? error.status : null;\n const splitBatch = rejectedStatus === 413 ? splitReplayBatch(events) : null;\n const isUnsplittableOversizedBatch =\n rejectedStatus === 413 && splitBatch === null;\n const isTransientClientError =\n rejectedStatus !== null &&\n isTransientReplayUploadClientError(rejectedStatus);\n if (isTransientClientError) {\n state.transientClientErrorFailures += 1;\n } else {\n state.transientClientErrorFailures = 0;\n }\n const exhaustedTransientClientRetries =\n isTransientClientError &&\n state.transientClientErrorFailures >=\n MAX_TRANSIENT_REPLAY_CLIENT_FAILURES;\n const isDefinitiveClientError =\n error instanceof ReplayUploadHttpError &&\n (isDefinitiveReplayUploadClientError(error.status) ||\n exhaustedTransientClientRetries) &&\n !splitBatch &&\n !isUnsplittableOversizedBatch;\n if (splitBatch) {\n // A server or platform can enforce a stricter decompressed-body limit\n // than the recorder's configured queue cap. Bisect in FIFO order and\n // retry both halves at the same sequence; only successful halves advance\n // it, so no event is duplicated or skipped.\n state.retryBatches.unshift(...splitBatch);\n splitRejectedBatch = true;\n } else if (isUnsplittableOversizedBatch) {\n // This one event cannot be made any smaller. Drop only the rejected\n // singleton and keep later retry halves/live batches in FIFO order. If\n // it carried DOM structure, quarantine dependent mutations until a new\n // FullSnapshot can safely re-anchor rrweb's node mirror.\n droppedOversizedBatch = true;\n if (replayBatchNeedsDomReset(events)) {\n quarantinePendingReplayUntilFullSnapshot(state);\n }\n } else if (isDefinitiveClientError) {\n // Continuing after a checksum/sequence conflict would reuse the same\n // rejected sequence forever. More importantly, advancing past it would\n // append mutations to a replay whose DOM stream may belong to another\n // tab. End this recorder and clear its persisted identity so the next\n // start creates a clean replay instead of producing corrupt playback.\n state.queue = [];\n state.queuedBytes = 0;\n state.retryBatches = [];\n removeStoredReplaySession(payload.replayId);\n definitiveClientErrorStatus = error.status;\n } else {\n restoreReplayEvents(state, events);\n }\n // Guard the recorder's own warning so console capture never records it\n // (a captured warning would enqueue an event and retrigger a flush).\n const previousInternal = replayCaptureInternal;\n replayCaptureInternal = true;\n try {\n if (splitRejectedBatch) {\n console.warn(\n \"[session-replay] splitting oversized upload (HTTP 413)\",\n error,\n );\n } else if (droppedOversizedBatch) {\n console.warn(\n \"[session-replay] dropping oversized replay event (HTTP 413)\",\n error,\n );\n } else if (isDefinitiveClientError) {\n console.warn(\n `[session-replay] dropping upload (HTTP ${(error as ReplayUploadHttpError).status})`,\n error,\n );\n } else {\n console.warn(\"[session-replay] upload failed\", error);\n }\n } finally {\n replayCaptureInternal = previousInternal;\n }\n } finally {\n state.flushing = false;\n }\n const coalescedReason = state.pendingFlushReason;\n const coalescedWaiters = coalescedReason\n ? state.pendingFlushWaiters.splice(0)\n : [];\n if (coalescedReason) state.pendingFlushReason = null;\n\n if (coalescedReason) {\n // A stop/unload request that arrived during this upload owns the tail.\n // Its higher-priority reason must replace threshold/internal reasons so a\n // small final batch is not stranded or mislabeled as active.\n await flushSessionReplay(coalescedReason);\n } else if (splitRejectedBatch || droppedOversizedBatch) {\n // Preserve final-status and unload semantics through every half. In\n // particular, pagehide/beforeunload retries must still reserve their\n // sequence before a keepalive fetch, and completed flushes must not be\n // rewritten to an internal recovery reason/status.\n await flushSessionReplay(reason);\n } else if (uploaded && hasPendingReplayBatch(state)) {\n const mustContinue =\n state.retryBatches.length > 0 ||\n isFinalFlushReason(reason) ||\n shouldFlushQueuedReplay(state);\n if (mustContinue) {\n if (isFinalFlushReason(reason)) {\n await flushSessionReplay(reason);\n } else void flushSessionReplay(reason);\n }\n }\n if (\n definitiveClientErrorStatus !== null &&\n state.replayId === payload.replayId\n ) {\n const rejectedOptions = state.options;\n const shouldRestartAfterConflict =\n definitiveClientErrorStatus === 409 &&\n state.active &&\n !isFinalFlushReason(reason) &&\n !state.automaticConflictRestartAttempted;\n if (shouldRestartAfterConflict) {\n state.automaticConflictRestartAttempted = true;\n }\n\n await stopSessionReplay(\"upload-rejected\");\n\n // A 409 means this replay identity can no longer append safely (usually a\n // duplicated tab that inherited sessionStorage, or an old shared identity\n // still open during rollout). Do not leave a long-lived SPA tab silently\n // unrecorded until its next page load: restart rrweb under a fresh per-tab\n // id so it emits a new Meta + FullSnapshot stream. Limit this to one retry\n // until an upload succeeds; other definitive 4xx responses usually reflect\n // configuration/input errors and must not create a restart loop.\n let restartResult: SessionReplayStartResult | null = null;\n if (shouldRestartAfterConflict && rejectedOptions) {\n restartResult = await restartSessionReplayAfterConflict(\n state,\n rejectedOptions,\n payload.sessionId,\n );\n }\n\n // Rare recovery-path telemetry lets Analytics owners quantify conflicts\n // without recording the rejected replay id, URL, or any captured content.\n try {\n rejectedOptions?.onUploadRejected?.({\n status: definitiveClientErrorStatus,\n restartAttempted: shouldRestartAfterConflict,\n restartSucceeded: restartResult?.started === true,\n ...(restartResult?.reason\n ? { restartReason: restartResult.reason }\n : {}),\n });\n } catch {\n // best-effort telemetry must never interfere with recording recovery\n }\n }\n for (const resolve of coalescedWaiters) resolve();\n}\n\n/**\n * Restart a recorder whose replay identity was rejected without routing the\n * already-normalized options back through the public start API.\n *\n * The original recording already passed whole-session sampling. Re-entering\n * `startSessionReplay` here would ask `getOrCreateAnalyticsSessionId` again;\n * if the analytics session rotated while the upload was in flight, recovery\n * could be sampled out and leave a long-lived SPA tab silently unrecorded.\n * Keeping the original session id and accepted sampling decision also lets us\n * reuse the exact normalized console/network capture caps instead of relying\n * on internal option shapes continuing to round-trip through the public API.\n */\nasync function restartSessionReplayAfterConflict(\n state: SessionReplayState,\n options: NormalizedSessionReplayOptions,\n sessionId: string,\n): Promise<SessionReplayStartResult> {\n // Share the public-start mutex. A consumer may call start in the await gap\n // after the rejected recorder stops; both paths must converge on one rrweb\n // instance rather than racing two fresh identities.\n if (state.startPromise) return state.startPromise;\n\n const startGeneration = ++state.startGeneration;\n let startPromise: Promise<SessionReplayStartResult>;\n startPromise = restartSessionReplayAfterConflictInternal(\n state,\n options,\n sessionId,\n startGeneration,\n ).finally(() => {\n if (state.startPromise === startPromise) state.startPromise = null;\n });\n state.startPromise = startPromise;\n return startPromise;\n}\n\nasync function restartSessionReplayAfterConflictInternal(\n state: SessionReplayState,\n options: NormalizedSessionReplayOptions,\n sessionId: string,\n startGeneration: number,\n): Promise<SessionReplayStartResult> {\n if (options.shouldStart && !options.shouldStart()) {\n return { started: false, reason: \"disabled\", sessionId, sampled: true };\n }\n\n const initialProperties = replayExtraProperties(options);\n if (options.requireSignedInUser && !replayUserEmail(initialProperties)) {\n return {\n started: false,\n reason: \"missing-user-id\",\n sessionId,\n sampled: true,\n };\n }\n if (!isUrlRecordable(window.location.href, options)) {\n return {\n started: false,\n reason: \"url-blocked\",\n sessionId,\n sampled: true,\n };\n }\n\n return startSessionReplayRecorder(\n state,\n options,\n sessionId,\n true,\n initialProperties,\n startGeneration,\n );\n}\n\nfunction installUrlMonitor(state: SessionReplayState): void {\n if (!state.options || state.restoreUrlMonitor) return;\n const options = state.options;\n const check = () => {\n if (!isUrlRecordable(window.location.href, options)) {\n stopSessionReplay(\"url-blocked\");\n }\n };\n const originalPushState = window.history.pushState;\n const originalReplaceState = window.history.replaceState;\n window.history.pushState = function pushState(...args) {\n const result = originalPushState.apply(this, args);\n queueMicrotask(check);\n return result;\n };\n window.history.replaceState = function replaceState(...args) {\n const result = originalReplaceState.apply(this, args);\n queueMicrotask(check);\n return result;\n };\n window.addEventListener(\"popstate\", check);\n state.restoreUrlMonitor = () => {\n window.history.pushState = originalPushState;\n window.history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", check);\n state.restoreUrlMonitor = null;\n };\n}\n\nfunction installLifecycleListeners(state: SessionReplayState): void {\n if (state.removeLifecycleListeners) return;\n const flushOnHidden = () => {\n if (document.visibilityState === \"hidden\") {\n void flushSessionReplay(\"visibility-hidden\");\n }\n };\n const flushOnUnload = () => {\n void flushSessionReplay(\"pagehide\");\n };\n document.addEventListener(\"visibilitychange\", flushOnHidden);\n window.addEventListener(\"pagehide\", flushOnUnload);\n state.removeLifecycleListeners = () => {\n document.removeEventListener(\"visibilitychange\", flushOnHidden);\n window.removeEventListener(\"pagehide\", flushOnUnload);\n state.removeLifecycleListeners = null;\n };\n}\n\nfunction markedSessionReplayIframes(): HTMLIFrameElement[] {\n if (typeof document.querySelectorAll !== \"function\") return [];\n return Array.from(\n document.querySelectorAll<HTMLIFrameElement>(\n `iframe[${SESSION_REPLAY_IFRAME_ATTRIBUTE}]`,\n ),\n );\n}\n\nfunction markedSessionReplayIframeForSource(\n source: MessageEventSource | null,\n): HTMLIFrameElement | null {\n if (!source) return null;\n return (\n markedSessionReplayIframes().find(\n (iframe) => iframe.contentWindow === source,\n ) ?? null\n );\n}\n\nfunction sessionReplayIframePrivacyOptions(\n options: NormalizedSessionReplayOptions,\n): SessionReplayIframePrivacyOptions {\n return {\n blockSelector: options.blockSelector,\n ignoreSelector: options.ignoreSelector,\n maskTextClass: options.maskTextClass,\n maskTextSelector: options.maskTextSelector,\n maskAllInputs: options.maskAllInputs,\n maskInputOptions: DEFAULT_MASK_INPUT_OPTIONS,\n recordCanvas: options.recordCanvas,\n collectFonts: options.collectFonts,\n inlineImages: options.inlineImages,\n sampling: options.eventSampling,\n };\n}\n\nfunction postSessionReplayIframeMessage(\n iframe: HTMLIFrameElement,\n message: SessionReplayIframeStartMessage | SessionReplayIframeStopMessage,\n): void {\n try {\n iframe.contentWindow?.postMessage(message, \"*\");\n } catch {\n // The frame may have navigated or detached between discovery and send.\n }\n}\n\n/**\n * Cooperative opaque/cross-origin iframe recording.\n *\n * rrweb cannot inspect these documents from the host. Framework-owned child\n * frames carry a marker and inject a tiny recorder that probes its direct\n * parent. Only an active host recorder responds, and only when the probe's\n * source is the contentWindow of a currently marked direct iframe.\n */\nfunction installSessionReplayIframeBridge(\n state: SessionReplayState,\n options: NormalizedSessionReplayOptions,\n): void {\n if (!options.recordCrossOriginIframes || state.restoreIframeBridge) return;\n\n const startMessage: SessionReplayIframeStartMessage = {\n type: SESSION_REPLAY_IFRAME_START,\n options: sessionReplayIframePrivacyOptions(options),\n };\n const stopMessage: SessionReplayIframeStopMessage = {\n type: SESSION_REPLAY_IFRAME_STOP,\n };\n const sendStart = (iframe: HTMLIFrameElement) =>\n postSessionReplayIframeMessage(iframe, startMessage);\n const onMessage = (event: MessageEvent) => {\n if (!state.active) return;\n if (\n !event.data ||\n typeof event.data !== \"object\" ||\n event.data.type !== SESSION_REPLAY_IFRAME_PROBE\n ) {\n return;\n }\n const iframe = markedSessionReplayIframeForSource(event.source);\n if (iframe) sendStart(iframe);\n };\n\n window.addEventListener(\"message\", onMessage);\n for (const iframe of markedSessionReplayIframes()) sendStart(iframe);\n state.restoreIframeBridge = () => {\n window.removeEventListener(\"message\", onMessage);\n for (const iframe of markedSessionReplayIframes()) {\n postSessionReplayIframeMessage(iframe, stopMessage);\n }\n state.restoreIframeBridge = null;\n };\n}\n\nfunction truncateCaptureText(value: string, maxLength: number): string {\n return value.length > maxLength ? value.slice(0, maxLength) : value;\n}\n\n/** Circular-safe, depth/length-limited plain value for JSON.stringify. */\nfunction toCaptureSerializable(\n value: unknown,\n depth: number,\n seen: WeakSet<object>,\n): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return value;\n if (typeof value === \"bigint\") return `${value}n`;\n if (typeof value === \"function\") return \"[function]\";\n if (typeof value === \"symbol\") return String(value);\n if (value instanceof Error) return `${value.name}: ${value.message}`;\n if (typeof value !== \"object\") return String(value);\n if (seen.has(value)) return \"[circular]\";\n if (depth >= MAX_CONSOLE_SERIALIZE_DEPTH) {\n return Array.isArray(value) ? \"[array]\" : \"[object]\";\n }\n seen.add(value);\n if (Array.isArray(value)) {\n const items = value\n .slice(0, MAX_CONSOLE_SERIALIZE_ENTRIES)\n .map((item) => toCaptureSerializable(item, depth + 1, seen));\n if (value.length > MAX_CONSOLE_SERIALIZE_ENTRIES) items.push(\"[truncated]\");\n return items;\n }\n const out: Record<string, unknown> = {};\n let count = 0;\n for (const [key, child] of Object.entries(value)) {\n if (count >= MAX_CONSOLE_SERIALIZE_ENTRIES) {\n out[\"[truncated]\"] = true;\n break;\n }\n out[key] = toCaptureSerializable(child, depth + 1, seen);\n count += 1;\n }\n return out;\n}\n\nfunction serializeConsoleArg(value: unknown): string {\n try {\n if (typeof value === \"string\") return value;\n if (value instanceof Error) return `${value.name}: ${value.message}`;\n if (\n value === null ||\n value === undefined ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n return (\n JSON.stringify(toCaptureSerializable(value, 0, new WeakSet())) ??\n String(value)\n );\n } catch {\n try {\n return Object.prototype.toString.call(value);\n } catch {\n return \"[unserializable]\";\n }\n }\n}\n\n/**\n * Emit an rrweb custom event while recording. Sets the re-entrancy guard so\n * synchronous work triggered by the emit (enqueue -> flush -> fetch of the\n * ingest endpoint) is never re-captured by the interceptors below.\n */\nfunction emitReplayCustomEvent(\n state: SessionReplayState,\n tag: string,\n payload: Record<string, unknown>,\n): void {\n const addCustomEvent = state.addCustomEvent;\n if (!state.active || !addCustomEvent) return;\n const previous = replayCaptureInternal;\n replayCaptureInternal = true;\n try {\n addCustomEvent(tag, payload);\n } catch {\n // recorder already stopped -- drop the event\n } finally {\n replayCaptureInternal = previous;\n }\n}\n\nfunction captureCurrentUrl(): string | undefined {\n try {\n return scrubUrl(window.location.href);\n } catch {\n return undefined;\n }\n}\n\ntype CaptureConsoleLevel = \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\ntype CaptureConsoleSource = \"console\" | \"window-error\" | \"unhandledrejection\";\n\nconst CAPTURE_CONSOLE_LEVELS: CaptureConsoleLevel[] = [\n \"log\",\n \"info\",\n \"warn\",\n \"error\",\n \"debug\",\n];\n\nfunction installConsoleCapture(\n state: SessionReplayState,\n captureOptions: NormalizedCaptureOptions,\n): () => void {\n let emitted = 0;\n let stopped = false;\n let pending: {\n key: string;\n payload: Record<string, unknown>;\n repeat: number;\n } | null = null;\n\n const emitPayload = (payload: Record<string, unknown>) => {\n if (stopped) return;\n if (emitted >= captureOptions.maxEvents) {\n stopped = true;\n emitReplayCustomEvent(state, SESSION_REPLAY_CONSOLE_EVENT_TAG, {\n level: \"warn\",\n source: \"console\",\n message: \"session replay console capture truncated\",\n truncated: true,\n });\n return;\n }\n emitted += 1;\n emitReplayCustomEvent(state, SESSION_REPLAY_CONSOLE_EVENT_TAG, payload);\n };\n\n /**\n * The first occurrence of a message is emitted immediately; consecutive\n * identical messages accumulate here and are flushed as one event whose\n * `repeat` is the number of collapsed duplicates.\n */\n const flushPending = () => {\n const entry = pending;\n pending = null;\n if (!entry || entry.repeat <= 0) return;\n emitPayload({ ...entry.payload, repeat: entry.repeat });\n };\n\n const capture = (\n level: CaptureConsoleLevel,\n source: CaptureConsoleSource,\n args: unknown[],\n stackOverride?: string,\n ) => {\n if (stopped || replayCaptureInternal) return;\n try {\n const message = truncateCaptureText(\n redactCaptureText(args.length ? serializeConsoleArg(args[0]) : \"\"),\n MAX_CONSOLE_MESSAGE_LENGTH,\n );\n const extraArgs = args\n .slice(1, 1 + MAX_CONSOLE_ARGS)\n .map((arg) =>\n truncateCaptureText(\n redactCaptureText(serializeConsoleArg(arg)),\n MAX_CONSOLE_MESSAGE_LENGTH,\n ),\n );\n const errorArg = args.find((arg): arg is Error => arg instanceof Error);\n const rawStack = stackOverride ?? errorArg?.stack;\n const stack =\n typeof rawStack === \"string\" && rawStack\n ? truncateCaptureText(\n redactCaptureText(rawStack),\n MAX_CONSOLE_STACK_LENGTH,\n )\n : undefined;\n const url = captureCurrentUrl();\n const payload: Record<string, unknown> = {\n level,\n source,\n message,\n ...(extraArgs.length ? { args: extraArgs } : {}),\n ...(stack ? { stack } : {}),\n ...(url ? { url } : {}),\n };\n const key = `${level}\\u0000${source}\\u0000${message}`;\n if (pending && pending.key === key) {\n pending.repeat += 1;\n return;\n }\n flushPending();\n emitPayload(payload);\n pending = { key, payload, repeat: 0 };\n } catch {\n // capture must never break the host page\n }\n };\n\n const originals: Partial<\n Record<CaptureConsoleLevel, (...args: unknown[]) => void>\n > = {};\n const wrappers: Partial<\n Record<CaptureConsoleLevel, (...args: unknown[]) => void>\n > = {};\n for (const level of CAPTURE_CONSOLE_LEVELS) {\n const original = console[level] as (...args: unknown[]) => void;\n if (typeof original !== \"function\") continue;\n originals[level] = original;\n const wrapper = (...args: unknown[]) => {\n original.apply(console, args);\n try {\n capture(level, \"console\", args);\n } catch {\n // never throw from the wrapper\n }\n };\n wrappers[level] = wrapper;\n console[level] = wrapper;\n }\n\n const onWindowError = (event: ErrorEvent) => {\n try {\n const error = event?.error;\n capture(\n \"error\",\n \"window-error\",\n [error instanceof Error ? error : (event?.message ?? \"Error\")],\n error instanceof Error ? error.stack : undefined,\n );\n } catch {\n // never throw from the listener\n }\n };\n const onUnhandledRejection = (event: PromiseRejectionEvent) => {\n try {\n const reason = event?.reason;\n capture(\n \"error\",\n \"unhandledrejection\",\n [reason instanceof Error ? reason : reason],\n reason instanceof Error ? reason.stack : undefined,\n );\n } catch {\n // never throw from the listener\n }\n };\n window.addEventListener(\"error\", onWindowError as EventListener);\n window.addEventListener(\n \"unhandledrejection\",\n onUnhandledRejection as EventListener,\n );\n\n return () => {\n try {\n flushPending();\n } catch {\n // best-effort duplicate flush\n }\n stopped = true;\n for (const level of CAPTURE_CONSOLE_LEVELS) {\n const original = originals[level];\n // Restore only what we installed: if another library patched on top of\n // our wrapper, leave the current function in place.\n if (original && console[level] === wrappers[level]) {\n console[level] = original;\n }\n }\n window.removeEventListener(\"error\", onWindowError as EventListener);\n window.removeEventListener(\n \"unhandledrejection\",\n onUnhandledRejection as EventListener,\n );\n };\n}\n\nfunction captureRequestUrl(input: unknown): string {\n if (typeof input === \"string\") return input;\n if (typeof URL !== \"undefined\" && input instanceof URL) {\n return input.toString();\n }\n if (input && typeof input === \"object\" && \"url\" in input) {\n const url = (input as { url?: unknown }).url;\n if (typeof url === \"string\") return url;\n }\n return \"\";\n}\n\nfunction captureRequestMethod(\n input: unknown,\n init?: { method?: unknown },\n): string {\n const initMethod = init?.method;\n if (typeof initMethod === \"string\" && initMethod) {\n return initMethod.toUpperCase();\n }\n if (input && typeof input === \"object\" && \"method\" in input) {\n const method = (input as { method?: unknown }).method;\n if (typeof method === \"string\" && method) return method.toUpperCase();\n }\n return \"GET\";\n}\n\n/**\n * Requests the recorder must never record: its own ingest endpoint and the\n * core analytics tracking endpoint (either would create a flush -> event ->\n * flush feedback loop), plus non-network schemes.\n */\nfunction isCaptureExcludedUrl(rawUrl: string, ingestEndpoint: string): boolean {\n const trimmed = rawUrl.trim();\n if (!trimmed) return true;\n const lower = trimmed.toLowerCase();\n if (\n lower.startsWith(\"data:\") ||\n lower.startsWith(\"blob:\") ||\n lower.startsWith(\"about:\")\n ) {\n return true;\n }\n try {\n const resolved = new URL(trimmed, window.location.href);\n const ingest = new URL(ingestEndpoint, window.location.href);\n if (\n resolved.origin === ingest.origin &&\n resolved.pathname === ingest.pathname\n ) {\n return true;\n }\n if (resolved.pathname.endsWith(\"/api/analytics/replay\")) return true;\n if (resolved.pathname.endsWith(\"/api/analytics/track\")) return true;\n } catch {\n // Unresolvable URL -- skip capture rather than risk recording junk.\n return true;\n }\n return false;\n}\n\n/**\n * Best-effort, synchronous read of a 5xx XHR response body, sliced to `cap`\n * before redaction runs (caller redacts). Only reads `responseText` when\n * `responseType` is \"\" or \"text\" -- other response types are read via\n * `JSON.stringify` (guarded) for `\"json\"`, and skipped entirely otherwise\n * since arbitrary binary/blob/arraybuffer bodies are not useful error text.\n */\nfunction readXhrErrorBody(\n xhr: XMLHttpRequest,\n cap: number,\n): string | undefined {\n try {\n const responseType = xhr.responseType;\n if (responseType === \"\" || responseType === \"text\") {\n const text = xhr.responseText;\n return typeof text === \"string\" ? text.slice(0, cap) : undefined;\n }\n if (responseType === \"json\") {\n try {\n return JSON.stringify(xhr.response)?.slice(0, cap);\n } catch {\n return undefined;\n }\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction installNetworkCapture(\n state: SessionReplayState,\n captureOptions: NormalizedCaptureOptions,\n): () => void {\n const options = state.options;\n if (!options) return () => {};\n const ingestEndpoint = options.endpoint;\n let emitted = 0;\n let stopped = false;\n\n const emitPayload = (payload: Record<string, unknown>) => {\n if (stopped) return;\n if (emitted >= captureOptions.maxEvents) {\n stopped = true;\n emitReplayCustomEvent(state, SESSION_REPLAY_NETWORK_EVENT_TAG, {\n message: \"session replay network capture truncated\",\n truncated: true,\n });\n return;\n }\n emitted += 1;\n emitReplayCustomEvent(state, SESSION_REPLAY_NETWORK_EVENT_TAG, payload);\n };\n\n const errorBodyCap =\n captureOptions.captureErrorBodies !== false\n ? (captureOptions.maxErrorBodyLength ?? DEFAULT_MAX_ERROR_BODY_LENGTH)\n : null;\n\n const recordRequest = (\n api: \"fetch\" | \"xhr\",\n method: string,\n rawUrl: string,\n status: number,\n ok: boolean,\n durationMs: number,\n error?: string,\n responseBody?: string,\n ) => {\n if (stopped) return;\n try {\n if (isCaptureExcludedUrl(rawUrl, ingestEndpoint)) return;\n const absolute = new URL(rawUrl, window.location.href).toString();\n const url = scrubUrl(absolute) ?? absolute;\n emitPayload({\n api,\n method: method.toUpperCase(),\n url,\n status,\n ok,\n durationMs: Math.max(0, Math.round(durationMs)),\n ...(error\n ? {\n error: truncateCaptureText(\n redactCaptureText(error),\n MAX_CONSOLE_MESSAGE_LENGTH,\n ),\n }\n : {}),\n ...(responseBody\n ? {\n responseBody: truncateCaptureText(\n redactCaptureText(responseBody),\n errorBodyCap ?? DEFAULT_MAX_ERROR_BODY_LENGTH,\n ),\n }\n : {}),\n });\n } catch {\n // capture must never break the host page\n }\n };\n\n /**\n * Best-effort bounded read of a 5xx response body. Reads a decoded stream\n * up to `cap` chars and cancels the reader, or falls back to `.text()`\n * sliced to `cap` when no readable stream is exposed. Never throws --\n * opaque/no-body responses (or any read failure) resolve to undefined.\n */\n const readBoundedErrorBody = async (\n response: Response,\n cap: number,\n ): Promise<string | undefined> => {\n try {\n const reader = response.body?.getReader?.();\n if (reader) {\n const decoder = new TextDecoder();\n let text = \"\";\n while (text.length < cap) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) text += decoder.decode(value, { stream: true });\n }\n // Fire-and-forget: cancelling an already-exhausted (or still-open but\n // no-longer-wanted) reader can hang indefinitely on some stream\n // implementations. We never need the result, so don't await it --\n // that would defeat the whole point of bounding this read.\n try {\n reader.cancel().catch(() => {});\n } catch {\n // best-effort; some readers throw synchronously instead\n }\n return text.slice(0, cap);\n }\n const text = await response.text();\n return text.slice(0, cap);\n } catch {\n return undefined;\n }\n };\n\n const restores: Array<() => void> = [];\n\n if (typeof window.fetch === \"function\") {\n const originalFetch = window.fetch;\n const wrappedFetch = function (\n this: unknown,\n input?: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n const self = this ?? window;\n if (stopped || replayCaptureInternal) {\n return originalFetch.call(self, input as RequestInfo | URL, init);\n }\n let method = \"GET\";\n let url = \"\";\n let skip = true;\n try {\n method = captureRequestMethod(input, init);\n url = captureRequestUrl(input);\n skip = isCaptureExcludedUrl(url, ingestEndpoint);\n } catch {\n skip = true;\n }\n if (skip) {\n return originalFetch.call(self, input as RequestInfo | URL, init);\n }\n const startedAt = performance.now();\n // Call the original exactly as the page did; never read the caller's\n // response before returning it, never replace the response, propagate\n // rejections untouched. A 5xx body snippet (if any) is read from a\n // clone and emitted from a detached promise chain afterward.\n const result = originalFetch.call(self, input as RequestInfo | URL, init);\n if (!result || typeof (result as Promise<Response>).then !== \"function\") {\n return result;\n }\n return result.then(\n (response) => {\n try {\n const durationMs = performance.now() - startedAt;\n if (errorBodyCap !== null && response.status >= 500) {\n // Clone immediately -- before any other code (including this\n // handler returning) can consume the original body -- so the\n // clone's stream is guaranteed unconsumed.\n let clone: Response | null = null;\n try {\n clone = response.clone();\n } catch {\n clone = null;\n }\n if (clone) {\n const bodyPromise = readBoundedErrorBody(clone, errorBodyCap);\n const timeoutPromise = new Promise<undefined>((resolve) => {\n setTimeout(\n () => resolve(undefined),\n ERROR_BODY_READ_TIMEOUT_MS,\n );\n });\n // Detached chain: never rejects, never awaited by the caller.\n Promise.race([bodyPromise, timeoutPromise])\n .then((responseBody) => {\n recordRequest(\n \"fetch\",\n method,\n url,\n response.status,\n response.ok,\n durationMs,\n undefined,\n responseBody,\n );\n })\n .catch(() => {\n // never affect the caller\n });\n } else {\n recordRequest(\n \"fetch\",\n method,\n url,\n response.status,\n response.ok,\n durationMs,\n );\n }\n } else {\n recordRequest(\n \"fetch\",\n method,\n url,\n response.status,\n response.ok,\n durationMs,\n );\n }\n } catch {\n // never affect the caller\n }\n return response;\n },\n (error) => {\n try {\n recordRequest(\n \"fetch\",\n method,\n url,\n 0,\n false,\n performance.now() - startedAt,\n error instanceof Error ? error.message : String(error),\n );\n } catch {\n // never affect the caller\n }\n throw error;\n },\n );\n };\n window.fetch = wrappedFetch as typeof window.fetch;\n restores.push(() => {\n // Restore only what we installed (another lib may have patched on top).\n if (window.fetch === (wrappedFetch as typeof window.fetch)) {\n window.fetch = originalFetch;\n }\n });\n }\n\n if (typeof XMLHttpRequest !== \"undefined\" && XMLHttpRequest.prototype) {\n const originalOpen = XMLHttpRequest.prototype.open;\n const originalSend = XMLHttpRequest.prototype.send;\n const xhrInfo = new WeakMap<\n XMLHttpRequest,\n { method: string; url: string }\n >();\n\n const wrappedOpen = function (\n this: XMLHttpRequest,\n method: string,\n url: string | URL,\n async?: boolean,\n username?: string | null,\n password?: string | null,\n ) {\n try {\n xhrInfo.set(this, { method: String(method), url: String(url) });\n } catch {\n // never throw from the wrapper\n }\n return originalOpen.call(\n this,\n method,\n url as string,\n async ?? true,\n username,\n password,\n );\n };\n\n const wrappedSend = function (\n this: XMLHttpRequest,\n body?: Document | XMLHttpRequestBodyInit | null,\n ) {\n try {\n const info = xhrInfo.get(this);\n if (info && !stopped && !replayCaptureInternal) {\n const startedAt = performance.now();\n let errorMessage: string | undefined;\n const markError = (message: string) => () => {\n errorMessage = message;\n };\n this.addEventListener(\"error\", markError(\"XMLHttpRequest failed\"), {\n once: true,\n });\n this.addEventListener(\"abort\", markError(\"XMLHttpRequest aborted\"), {\n once: true,\n });\n this.addEventListener(\n \"timeout\",\n markError(\"XMLHttpRequest timed out\"),\n { once: true },\n );\n this.addEventListener(\n \"loadend\",\n () => {\n const status = typeof this.status === \"number\" ? this.status : 0;\n const effectiveStatus = errorMessage ? 0 : status;\n let responseBody: string | undefined;\n if (errorBodyCap !== null && !errorMessage && status >= 500) {\n responseBody = readXhrErrorBody(this, errorBodyCap);\n }\n recordRequest(\n \"xhr\",\n info.method,\n info.url,\n effectiveStatus,\n !errorMessage && status >= 200 && status < 300,\n performance.now() - startedAt,\n errorMessage,\n responseBody,\n );\n xhrInfo.delete(this);\n },\n { once: true },\n );\n }\n } catch {\n // never throw from the wrapper\n }\n return originalSend.call(this, body ?? null);\n };\n\n XMLHttpRequest.prototype.open =\n wrappedOpen as typeof XMLHttpRequest.prototype.open;\n XMLHttpRequest.prototype.send =\n wrappedSend as typeof XMLHttpRequest.prototype.send;\n restores.push(() => {\n if (\n XMLHttpRequest.prototype.open ===\n (wrappedOpen as typeof XMLHttpRequest.prototype.open)\n ) {\n XMLHttpRequest.prototype.open = originalOpen;\n }\n if (\n XMLHttpRequest.prototype.send ===\n (wrappedSend as typeof XMLHttpRequest.prototype.send)\n ) {\n XMLHttpRequest.prototype.send = originalSend;\n }\n });\n }\n\n return () => {\n stopped = true;\n for (const restore of restores) {\n try {\n restore();\n } catch {\n // best-effort restore\n }\n }\n };\n}\n\nfunction installCaptureInterceptors(state: SessionReplayState): void {\n const options = state.options;\n if (!options || state.restoreCaptures || !state.addCustomEvent) return;\n if (!options.console && !options.network) return;\n const restores: Array<() => void> = [];\n try {\n if (options.console) {\n restores.push(installConsoleCapture(state, options.console));\n }\n if (options.network) {\n restores.push(installNetworkCapture(state, options.network));\n }\n } catch {\n // keep whatever installed cleanly; restores below still uninstall it\n }\n if (restores.length === 0) return;\n state.restoreCaptures = () => {\n state.restoreCaptures = null;\n for (const restore of restores) {\n try {\n restore();\n } catch {\n // best-effort restore\n }\n }\n };\n}\n\nexport async function startSessionReplay(\n options: SessionReplayOptions = {},\n): Promise<SessionReplayStartResult> {\n if (options.enabled === false) return { started: false, reason: \"disabled\" };\n if (options.shouldStart && !options.shouldStart()) {\n return { started: false, reason: \"disabled\" };\n }\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return { started: false, reason: \"not-browser\" };\n }\n const normalized = normalizeOptions(options);\n if (!normalized) return { started: false, reason: \"missing-public-key\" };\n\n const sessionId = getOrCreateAnalyticsSessionId();\n if (!sessionId) return { started: false, reason: \"missing-session-id\" };\n const sampled = shouldSampleSessionReplay(\n sessionId,\n normalized.sampleRate,\n normalized.samplingSalt,\n );\n if (!sampled) {\n return { started: false, reason: \"sampled-out\", sessionId, sampled };\n }\n const initialProperties = replayExtraProperties(normalized);\n if (normalized.requireSignedInUser) {\n if (!replayUserEmail(initialProperties)) {\n return {\n started: false,\n reason: \"missing-user-id\",\n sessionId,\n sampled,\n };\n }\n }\n if (!isUrlRecordable(window.location.href, normalized)) {\n return { started: false, reason: \"url-blocked\", sessionId, sampled };\n }\n\n const state = getState();\n if (state.active && state.replayId) {\n return {\n started: true,\n reason: \"already-active\",\n replayId: state.replayId,\n sessionId,\n sampled,\n };\n }\n if (state.startPromise) return state.startPromise;\n\n // This is a new caller-initiated recording episode. A prior episode's\n // conflict-loop guard must not prevent this one from recovering once.\n state.automaticConflictRestartAttempted = false;\n state.transientClientErrorFailures = 0;\n const startGeneration = ++state.startGeneration;\n\n let startPromise: Promise<SessionReplayStartResult>;\n startPromise = startSessionReplayRecorder(\n state,\n normalized,\n sessionId,\n sampled,\n initialProperties,\n startGeneration,\n ).finally(() => {\n if (state.startPromise === startPromise) {\n state.startPromise = null;\n }\n });\n state.startPromise = startPromise;\n return startPromise;\n}\n\nasync function startSessionReplayRecorder(\n state: SessionReplayState,\n normalized: NormalizedSessionReplayOptions,\n sessionId: string,\n sampled: boolean,\n initialProperties: Record<string, unknown> | undefined,\n startGeneration: number,\n): Promise<SessionReplayStartResult> {\n if (state.active && state.replayId) {\n return {\n started: true,\n reason: \"already-active\",\n replayId: state.replayId,\n sessionId,\n sampled,\n };\n }\n\n let rrweb: RrwebRecordModule;\n try {\n rrweb = (await import(\"@rrweb/record\")) as RrwebRecordModule;\n } catch {\n return { started: false, reason: \"import-failed\", sessionId, sampled };\n }\n if (state.startGeneration !== startGeneration) {\n return { started: false, reason: \"disabled\", sessionId, sampled };\n }\n if (normalized.shouldStart && !normalized.shouldStart()) {\n return { started: false, reason: \"disabled\", sessionId, sampled };\n }\n\n let replaySession = getOrCreateReplaySession(\n sessionId,\n normalized.linkBaseUrl,\n );\n const instanceNonce = generateReplayId();\n const { channel: replayChannel, probeClaim } = createReplayClaimChannel(\n state,\n instanceNonce,\n );\n // Only a *resumed* id needs the duplicated-tab check -- a freshly minted\n // id can never collide with a recorder that's already running, so this\n // never adds startup latency for the common \"new tab\" case.\n if (replaySession.resumed && replayChannel) {\n const taken = await probeClaim(replaySession.replayId);\n if (taken) {\n const freshReplayId = generateReplayId();\n const freshStartedAtMs = Date.now();\n writeStoredReplaySession({\n sessionId,\n replayId: freshReplayId,\n startedAtMs: freshStartedAtMs,\n sequence: 0,\n ...(normalized.linkBaseUrl\n ? { linkBaseUrl: normalized.linkBaseUrl }\n : {}),\n });\n replaySession = {\n replayId: freshReplayId,\n startedAtMs: freshStartedAtMs,\n sequence: 0,\n ...(normalized.linkBaseUrl\n ? { linkBaseUrl: normalized.linkBaseUrl }\n : {}),\n resumed: false,\n };\n }\n }\n // stopSessionReplay may be called while the duplicate-tab probe is waiting.\n // Recheck both cancellation and the caller's live eligibility before rrweb\n // is activated so a deferred start cannot escape a route/auth teardown.\n if (\n state.startGeneration !== startGeneration ||\n (normalized.shouldStart && !normalized.shouldStart())\n ) {\n try {\n replayChannel?.close();\n } catch {\n // best-effort cleanup\n }\n return { started: false, reason: \"disabled\", sessionId, sampled };\n }\n state.options = normalized;\n state.replayId = replaySession.replayId;\n state.startedAtMs = replaySession.startedAtMs;\n state.replayLinkBaseUrl =\n replaySession.linkBaseUrl ?? normalized.linkBaseUrl ?? null;\n state.sequence = replaySession.sequence;\n state.queue = [];\n state.queuedBytes = 0;\n state.retryBatches = [];\n state.pendingFlushReason = null;\n for (const resolve of state.pendingFlushWaiters.splice(0)) resolve();\n state.awaitingFullSnapshot = false;\n state.resourceNodes.clear();\n state.stopRecorder = null;\n state.broadcastChannel = replayChannel;\n state.lastAuthenticatedProperties = replayUserEmail(initialProperties)\n ? { ...initialProperties }\n : null;\n state.active = true;\n\n try {\n const stopRecorder = rrweb.record({\n emit: (event) => enqueueReplayEvent(state, event),\n sampling: normalized.eventSampling,\n checkoutEveryNth: normalized.checkoutEveryNth,\n checkoutEveryNms: normalized.checkoutEveryNms,\n inlineStylesheet: normalized.inlineStylesheet,\n blockSelector: normalized.blockSelector,\n ignoreSelector: normalized.ignoreSelector,\n maskTextClass: normalized.maskTextClass,\n maskTextSelector: normalized.maskTextSelector,\n maskAllInputs: normalized.maskAllInputs,\n recordCanvas: normalized.recordCanvas,\n recordCrossOriginIframes: normalized.recordCrossOriginIframes,\n collectFonts: normalized.collectFonts,\n inlineImages: normalized.inlineImages,\n maskInputOptions: DEFAULT_MASK_INPUT_OPTIONS,\n });\n if (typeof stopRecorder !== \"function\") {\n state.active = false;\n state.options = null;\n state.replayId = null;\n state.startedAtMs = null;\n state.lastAuthenticatedProperties = null;\n try {\n state.broadcastChannel?.close();\n } catch {\n // best-effort cleanup\n }\n state.broadcastChannel = null;\n return { started: false, reason: \"record-failed\", sessionId, sampled };\n }\n state.stopRecorder = stopRecorder;\n state.flushTimer = window.setInterval(\n () => void flushSessionReplay(\"interval\"),\n normalized.flushIntervalMs,\n );\n state.maxDurationTimer = window.setTimeout(\n () => stopSessionReplay(\"max-duration\"),\n normalized.maxDurationMs,\n );\n installUrlMonitor(state);\n installLifecycleListeners(state);\n installSessionReplayIframeBridge(state, normalized);\n state.addCustomEvent =\n typeof rrweb.record.addCustomEvent === \"function\"\n ? rrweb.record.addCustomEvent\n : null;\n installCaptureInterceptors(state);\n return {\n started: true,\n replayId: state.replayId,\n sessionId,\n sampled,\n };\n } catch {\n try {\n state.restoreCaptures?.();\n } catch {\n // best-effort interceptor teardown\n }\n state.restoreCaptures = null;\n state.restoreIframeBridge?.();\n state.addCustomEvent = null;\n state.active = false;\n state.options = null;\n state.replayId = null;\n state.startedAtMs = null;\n state.lastAuthenticatedProperties = null;\n try {\n state.broadcastChannel?.close();\n } catch {\n // best-effort cleanup\n }\n state.broadcastChannel = null;\n return { started: false, reason: \"record-failed\", sessionId, sampled };\n }\n}\n\nexport async function stopSessionReplay(reason = \"manual\"): Promise<void> {\n const state = getState();\n // Invalidate an import/probe that has not set `active` yet. Without this,\n // stop during the duplicated-tab claim window was a no-op and rrweb started\n // after the caller believed recording had been disabled.\n state.startGeneration += 1;\n if (!state.active) return;\n // Restore console/fetch/XHR before tearing down the recorder: the restore\n // flushes any pending collapsed console duplicate, which must still be able\n // to emit through rrweb while it is recording.\n try {\n state.restoreCaptures?.();\n } catch {\n // best-effort interceptor teardown\n }\n state.restoreCaptures = null;\n state.restoreIframeBridge?.();\n state.active = false;\n state.addCustomEvent = null;\n try {\n state.stopRecorder?.();\n } catch {\n // best-effort recorder shutdown\n }\n state.stopRecorder = null;\n if (state.flushTimer) {\n window.clearInterval(state.flushTimer);\n state.flushTimer = null;\n }\n if (state.maxDurationTimer) {\n window.clearTimeout(state.maxDurationTimer);\n state.maxDurationTimer = null;\n }\n state.restoreUrlMonitor?.();\n state.removeLifecycleListeners?.();\n try {\n state.broadcastChannel?.close();\n } catch {\n // best-effort cleanup\n }\n state.broadcastChannel = null;\n await flushSessionReplay(reason);\n}\n\nexport function maybeStartSessionReplay(\n options: SessionReplayOptions = {},\n): Promise<SessionReplayStartResult> {\n return startSessionReplay(options);\n}\n\nexport function isSessionReplayActive(): boolean {\n return getState().active;\n}\n\n/**\n * The active session replay id when a recording is running, or the last one\n * persisted for this analytics session in this tab's `sessionStorage`.\n * First-party error capture uses this to tie each captured exception to the\n * replay it happened in, so triage can jump straight to\n * `/sessions/<recordingId>`.\n */\nexport function getSessionReplayId(): string | null {\n const state = getState();\n if (state.active && state.replayId) return state.replayId;\n const stored = readStoredReplaySession();\n return stored?.replayId ?? null;\n}\n\n/**\n * Return the replay identity associated with this browser tab. The context is\n * intentionally small so it can be attached to analytics events without\n * exposing replay content or credentials.\n */\nexport function getSessionReplayContext(): SessionReplayContext | null {\n const state = getState();\n if (state.active && state.replayId && state.startedAtMs) {\n const sessionId = getOrCreateAnalyticsSessionId();\n if (!sessionId) return null;\n return {\n replayId: state.replayId,\n sessionId,\n startedAtMs: state.startedAtMs,\n startedAt: new Date(state.startedAtMs).toISOString(),\n linkBaseUrl: state.replayLinkBaseUrl,\n active: true,\n };\n }\n\n const stored = readStoredReplaySession();\n if (!stored?.replayId || !stored.sessionId || !stored.startedAtMs) {\n return null;\n }\n return {\n replayId: stored.replayId,\n sessionId: stored.sessionId,\n startedAtMs: stored.startedAtMs,\n startedAt: new Date(stored.startedAtMs).toISOString(),\n linkBaseUrl: stored.linkBaseUrl ?? null,\n active: false,\n };\n}\n\n/**\n * Build a scoped Analytics replay lookup link. The Analytics server resolves\n * the client replay id to its server recording id and converts the event time\n * into the replay player's offset before redirecting to the detail page.\n */\nexport function getSessionReplayUrl(\n options: SessionReplayLinkOptions = {},\n): string | null {\n const context = getSessionReplayContext();\n if (!context) return null;\n const base = normalizeReplayLinkBaseUrl(\n options.linkBaseUrl ?? context.linkBaseUrl ?? undefined,\n );\n if (!base) return null;\n\n try {\n const url = new URL(\"/sessions/lookup\", base);\n url.searchParams.set(\"sessionId\", context.sessionId);\n url.searchParams.set(\"replayId\", context.replayId);\n const at = options.at === undefined ? Date.now() : options.at;\n const timestamp =\n typeof at === \"number\"\n ? new Date(at)\n : typeof at === \"string\"\n ? new Date(at)\n : at;\n if (!Number.isNaN(timestamp.getTime())) {\n url.searchParams.set(\"at\", timestamp.toISOString());\n }\n return url.toString();\n } catch {\n return null;\n }\n}\n\n/**\n * Surface a manually captured exception on the active session replay timeline\n * as an `agent-native.console` custom event, reusing the diagnostics contract\n * (`level`, `source: \"console\"`, `message`, `stack`, `url`). No-op when no\n * recording is active. Auto-captured `window.onerror` / `unhandledrejection`\n * are intentionally NOT routed here — the recorder already logs those as\n * `window-error` / `unhandledrejection`, so re-emitting would double-count.\n */\nexport function emitSessionReplayException(input: {\n type: string;\n message: string;\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\";\n stack?: string;\n url?: string;\n}): void {\n const state = getState();\n if (!state.active || !state.addCustomEvent) return;\n const level =\n input.level === \"warning\"\n ? \"warn\"\n : input.level === \"info\" || input.level === \"debug\"\n ? input.level\n : \"error\";\n emitReplayCustomEvent(state, SESSION_REPLAY_CONSOLE_EVENT_TAG, {\n level,\n source: \"console\",\n message: `${input.type}: ${input.message}`.slice(\n 0,\n MAX_CONSOLE_MESSAGE_LENGTH,\n ),\n ...(input.stack\n ? { stack: input.stack.slice(0, MAX_CONSOLE_STACK_LENGTH) }\n : {}),\n ...(input.url ? { url: input.url } : {}),\n });\n}\n\nexport type SessionReplayAgentChatEvent = {\n phase: \"surface-mounted\" | \"run-observed\" | \"run-stopped\";\n surface: string;\n threadId?: string;\n runId?: string;\n tabId?: string;\n};\n\n/**\n * Add a content-free chat lifecycle marker to the active replay. The payload\n * deliberately accepts only ids and low-cardinality state; prompt/response\n * content must never enter replay diagnostics through this path.\n */\nexport function emitSessionReplayAgentChatEvent(\n input: SessionReplayAgentChatEvent,\n): void {\n const state = getState();\n if (!state.active || !state.addCustomEvent) return;\n const bounded = (value: string | undefined, max = 160) =>\n value?.trim().slice(0, max) || undefined;\n emitReplayCustomEvent(state, SESSION_REPLAY_AGENT_CHAT_EVENT_TAG, {\n phase: input.phase,\n surface: bounded(input.surface, 80) ?? \"app\",\n ...(bounded(input.threadId) ? { threadId: bounded(input.threadId) } : {}),\n ...(bounded(input.runId) ? { runId: bounded(input.runId) } : {}),\n ...(bounded(input.tabId) ? { tabId: bounded(input.tabId) } : {}),\n });\n}\n"]}