@agent-native/core 0.118.0 → 0.119.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 (480) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +32 -0
  3. package/corpus/core/docs/content/a2a-protocol.mdx +15 -0
  4. package/corpus/core/docs/content/template-chat.mdx +1 -1
  5. package/corpus/core/docs/content/template-plan.mdx +3 -3
  6. package/corpus/core/package.json +1 -1
  7. package/corpus/core/src/a2a/activity.ts +371 -0
  8. package/corpus/core/src/a2a/client.ts +35 -11
  9. package/corpus/core/src/a2a/index.ts +21 -0
  10. package/corpus/core/src/a2a/types.ts +8 -0
  11. package/corpus/core/src/agent/model-config.ts +19 -23
  12. package/corpus/core/src/agent/production-agent.ts +167 -100
  13. package/corpus/core/src/agent/types.ts +16 -1
  14. package/corpus/core/src/cli/index.ts +18 -10
  15. package/corpus/core/src/cli/multi-frontier-runs.ts +5 -3
  16. package/corpus/core/src/cli/templates-meta.ts +0 -12
  17. package/corpus/core/src/cli/workspace-dev.ts +1 -1
  18. package/corpus/core/src/client/AgentPanel.tsx +9 -1
  19. package/corpus/core/src/client/RunStuckBanner.tsx +39 -47
  20. package/corpus/core/src/client/chat/action-chat-ui-surface.tsx +32 -0
  21. package/corpus/core/src/client/chat/message-components.tsx +53 -8
  22. package/corpus/core/src/client/chat/tool-call-display.tsx +214 -44
  23. package/corpus/core/src/client/chat/widgets/InlineExtensionWidget.tsx +0 -1
  24. package/corpus/core/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
  25. package/corpus/core/src/client/chat-model-groups.ts +67 -27
  26. package/corpus/core/src/client/conversation/AgentConversation.tsx +12 -1
  27. package/corpus/core/src/client/error-capture.ts +2 -6
  28. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +20 -14
  29. package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
  30. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +7 -17
  31. package/corpus/core/src/client/resources/mcp-integration-logos.ts +2 -2
  32. package/corpus/core/src/client/route-chunk-recovery.ts +5 -3
  33. package/corpus/core/src/client/session-replay.ts +3 -3
  34. package/corpus/core/src/client/settings/SettingsPanel.tsx +15 -6
  35. package/corpus/core/src/client/sharing/ShareButton.tsx +1 -27
  36. package/corpus/core/src/client/sharing/ShareDialog.tsx +0 -16
  37. package/corpus/core/src/client/sharing/useShareButtonController.ts +0 -7
  38. package/corpus/core/src/client/sharing/useShareDialogController.ts +0 -2
  39. package/corpus/core/src/client/sse-event-processor.ts +85 -1
  40. package/corpus/core/src/client/transcription/use-live-transcription.ts +64 -45
  41. package/corpus/core/src/deploy/build.ts +2 -1
  42. package/corpus/core/src/guards/db-tool-scoping.ts +1 -1
  43. package/corpus/core/src/integrations/adapters/slack.ts +84 -5
  44. package/corpus/core/src/integrations/index.ts +5 -1
  45. package/corpus/core/src/localization/default-messages.ts +7 -1
  46. package/corpus/core/src/mcp-client/oauth-routes.ts +45 -12
  47. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +1 -18
  48. package/corpus/core/src/scripts/call-agent.ts +49 -6
  49. package/corpus/core/src/server/agent-chat-plugin.ts +50 -10
  50. package/corpus/core/src/server/realtime-voice.ts +4 -1
  51. package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
  52. package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  53. package/corpus/core/src/terminal/cli-registry.ts +1 -1
  54. package/corpus/core/src/vite/client.ts +166 -1
  55. package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +13 -1
  56. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +10 -0
  57. package/corpus/templates/analytics/changelog/2026-07-22-show-a-useful-error-when-saving-a-dashboard-view-fails.md +6 -0
  58. package/corpus/templates/brain/app/routes/sources.tsx +181 -114
  59. package/corpus/templates/clips/AGENTS.md +8 -6
  60. package/corpus/templates/clips/actions/request-transcript.ts +90 -420
  61. package/corpus/templates/clips/actions/save-browser-transcript.ts +11 -28
  62. package/corpus/templates/clips/app/components/capture-install-options.tsx +5 -3
  63. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +3 -136
  64. package/corpus/templates/clips/app/lib/capture-install-options.ts +15 -4
  65. package/corpus/templates/clips/app/routes/download.tsx +3 -2
  66. package/corpus/templates/clips/changelog/2026-07-22-fixed-an-intermittent-hydration-error-on-the-download-page.md +6 -0
  67. package/corpus/templates/clips/changelog/2026-07-22-fixed-transcript-generation-when-native-speech-capture-retur.md +6 -0
  68. package/corpus/templates/clips/changelog/2026-07-22-transcript-generation-now-retries-with-backup-speech-recogni.md +6 -0
  69. package/corpus/templates/clips/changelog/2026-07-23-fixed-recordings-failing-to-save-with-a-cancelled-or-cleanup.md +6 -0
  70. package/corpus/templates/clips/server/lib/public-agent-context.ts +2 -2
  71. package/corpus/templates/clips/server/plugins/db.ts +9 -1
  72. package/corpus/templates/clips/server/register-secrets.ts +7 -6
  73. package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +16 -84
  74. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +13 -7
  75. package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +2 -2
  76. package/corpus/templates/content/app/i18n-data.ts +10 -0
  77. package/corpus/templates/design/server/lib/fig-file-decoder.ts +1 -0
  78. package/corpus/templates/plan/app/entry.client.tsx +3 -0
  79. package/corpus/templates/plan/changelog/2026-07-22-recover-stale-pages-after-a-deployment-refresh-automatically.md +6 -0
  80. package/corpus/templates/slides/app/hooks/use-agent-generating.ts +10 -3
  81. package/corpus/templates/slides/app/pages/Index.tsx +1 -0
  82. package/corpus/templates/slides/changelog/2026-07-22-new-deck-prompts-now-open-in-their-own-visible-chat-thread.md +6 -0
  83. package/corpus/toolkit/CHANGELOG.md +9 -0
  84. package/corpus/toolkit/package.json +1 -1
  85. package/corpus/toolkit/src/composer/PromptComposer.tsx +5 -1
  86. package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +119 -31
  87. package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +30 -0
  88. package/corpus/toolkit/src/conformance/runner.tsx +153 -1
  89. package/corpus/toolkit/src/editor/SharedRichEditor.tsx +13 -2
  90. package/corpus/toolkit/src/editor/SlashCommandMenu.tsx +20 -0
  91. package/corpus/toolkit/src/editor/index.ts +2 -0
  92. package/corpus/toolkit/src/styles.css +52 -23
  93. package/dist/a2a/activity.d.ts +50 -0
  94. package/dist/a2a/activity.d.ts.map +1 -0
  95. package/dist/a2a/activity.js +236 -0
  96. package/dist/a2a/activity.js.map +1 -0
  97. package/dist/a2a/client.d.ts +5 -1
  98. package/dist/a2a/client.d.ts.map +1 -1
  99. package/dist/a2a/client.js +18 -13
  100. package/dist/a2a/client.js.map +1 -1
  101. package/dist/a2a/index.d.ts +2 -1
  102. package/dist/a2a/index.d.ts.map +1 -1
  103. package/dist/a2a/index.js +1 -0
  104. package/dist/a2a/index.js.map +1 -1
  105. package/dist/a2a/types.d.ts +1 -0
  106. package/dist/a2a/types.d.ts.map +1 -1
  107. package/dist/a2a/types.js.map +1 -1
  108. package/dist/agent/engine/anthropic-engine.d.ts +1 -1
  109. package/dist/agent/engine/builder-engine.d.ts +2 -2
  110. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  111. package/dist/agent/model-config.d.ts +16 -16
  112. package/dist/agent/model-config.d.ts.map +1 -1
  113. package/dist/agent/model-config.js +19 -23
  114. package/dist/agent/model-config.js.map +1 -1
  115. package/dist/agent/production-agent.d.ts +26 -0
  116. package/dist/agent/production-agent.d.ts.map +1 -1
  117. package/dist/agent/production-agent.js +137 -80
  118. package/dist/agent/production-agent.js.map +1 -1
  119. package/dist/agent/types.d.ts +10 -0
  120. package/dist/agent/types.d.ts.map +1 -1
  121. package/dist/agent/types.js.map +1 -1
  122. package/dist/cli/index.js +18 -8
  123. package/dist/cli/index.js.map +1 -1
  124. package/dist/cli/multi-frontier-runs.js +3 -3
  125. package/dist/cli/multi-frontier-runs.js.map +1 -1
  126. package/dist/cli/templates-meta.d.ts.map +1 -1
  127. package/dist/cli/templates-meta.js +0 -12
  128. package/dist/cli/templates-meta.js.map +1 -1
  129. package/dist/cli/workspace-dev.js +1 -1
  130. package/dist/cli/workspace-dev.js.map +1 -1
  131. package/dist/client/AgentPanel.d.ts.map +1 -1
  132. package/dist/client/AgentPanel.js +4 -1
  133. package/dist/client/AgentPanel.js.map +1 -1
  134. package/dist/client/RunStuckBanner.d.ts +3 -5
  135. package/dist/client/RunStuckBanner.d.ts.map +1 -1
  136. package/dist/client/RunStuckBanner.js +17 -18
  137. package/dist/client/RunStuckBanner.js.map +1 -1
  138. package/dist/client/chat/action-chat-ui-surface.d.ts +8 -0
  139. package/dist/client/chat/action-chat-ui-surface.d.ts.map +1 -0
  140. package/dist/client/chat/action-chat-ui-surface.js +10 -0
  141. package/dist/client/chat/action-chat-ui-surface.js.map +1 -0
  142. package/dist/client/chat/message-components.d.ts +3 -0
  143. package/dist/client/chat/message-components.d.ts.map +1 -1
  144. package/dist/client/chat/message-components.js +40 -7
  145. package/dist/client/chat/message-components.js.map +1 -1
  146. package/dist/client/chat/tool-call-display.d.ts +3 -1
  147. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  148. package/dist/client/chat/tool-call-display.js +76 -23
  149. package/dist/client/chat/tool-call-display.js.map +1 -1
  150. package/dist/client/chat/widgets/InlineExtensionWidget.d.ts.map +1 -1
  151. package/dist/client/chat/widgets/InlineExtensionWidget.js +1 -1
  152. package/dist/client/chat/widgets/InlineExtensionWidget.js.map +1 -1
  153. package/dist/client/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
  154. package/dist/client/chat/widgets/builtin-tool-renderers.js +5 -3
  155. package/dist/client/chat/widgets/builtin-tool-renderers.js.map +1 -1
  156. package/dist/client/chat-model-groups.d.ts.map +1 -1
  157. package/dist/client/chat-model-groups.js +44 -21
  158. package/dist/client/chat-model-groups.js.map +1 -1
  159. package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
  160. package/dist/client/conversation/AgentConversation.js +3 -2
  161. package/dist/client/conversation/AgentConversation.js.map +1 -1
  162. package/dist/client/error-capture.d.ts.map +1 -1
  163. package/dist/client/error-capture.js +2 -2
  164. package/dist/client/error-capture.js.map +1 -1
  165. package/dist/client/resources/McpConnectionSuggestion.d.ts +1 -0
  166. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
  167. package/dist/client/resources/McpConnectionSuggestion.js +9 -8
  168. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
  169. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  170. package/dist/client/resources/ResourcesPanel.js +3 -1
  171. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  172. package/dist/client/resources/mcp-integration-catalog.d.ts +1 -0
  173. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  174. package/dist/client/resources/mcp-integration-catalog.js +4 -17
  175. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  176. package/dist/client/resources/mcp-integration-logos.js +2 -2
  177. package/dist/client/resources/mcp-integration-logos.js.map +1 -1
  178. package/dist/client/route-chunk-recovery.d.ts.map +1 -1
  179. package/dist/client/route-chunk-recovery.js +5 -3
  180. package/dist/client/route-chunk-recovery.js.map +1 -1
  181. package/dist/client/session-replay.js +3 -3
  182. package/dist/client/session-replay.js.map +1 -1
  183. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  184. package/dist/client/settings/SettingsPanel.js +2 -2
  185. package/dist/client/settings/SettingsPanel.js.map +1 -1
  186. package/dist/client/sharing/ShareButton.d.ts +1 -1
  187. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  188. package/dist/client/sharing/ShareButton.js +3 -4
  189. package/dist/client/sharing/ShareButton.js.map +1 -1
  190. package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
  191. package/dist/client/sharing/ShareDialog.js +1 -2
  192. package/dist/client/sharing/ShareDialog.js.map +1 -1
  193. package/dist/client/sharing/useShareButtonController.d.ts +0 -1
  194. package/dist/client/sharing/useShareButtonController.d.ts.map +1 -1
  195. package/dist/client/sharing/useShareButtonController.js +0 -6
  196. package/dist/client/sharing/useShareButtonController.js.map +1 -1
  197. package/dist/client/sharing/useShareDialogController.d.ts +0 -1
  198. package/dist/client/sharing/useShareDialogController.d.ts.map +1 -1
  199. package/dist/client/sharing/useShareDialogController.js +0 -1
  200. package/dist/client/sharing/useShareDialogController.js.map +1 -1
  201. package/dist/client/sse-event-processor.d.ts +12 -0
  202. package/dist/client/sse-event-processor.d.ts.map +1 -1
  203. package/dist/client/sse-event-processor.js +63 -1
  204. package/dist/client/sse-event-processor.js.map +1 -1
  205. package/dist/client/transcription/use-live-transcription.d.ts +3 -3
  206. package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
  207. package/dist/client/transcription/use-live-transcription.js +22 -11
  208. package/dist/client/transcription/use-live-transcription.js.map +1 -1
  209. package/dist/collab/awareness.d.ts +2 -2
  210. package/dist/collab/awareness.d.ts.map +1 -1
  211. package/dist/deploy/build.d.ts.map +1 -1
  212. package/dist/deploy/build.js +1 -1
  213. package/dist/deploy/build.js.map +1 -1
  214. package/dist/guards/db-tool-scoping.js +1 -1
  215. package/dist/guards/db-tool-scoping.js.map +1 -1
  216. package/dist/integrations/adapters/slack.d.ts +1 -0
  217. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  218. package/dist/integrations/adapters/slack.js +61 -5
  219. package/dist/integrations/adapters/slack.js.map +1 -1
  220. package/dist/integrations/index.d.ts +1 -1
  221. package/dist/integrations/index.d.ts.map +1 -1
  222. package/dist/integrations/index.js +1 -1
  223. package/dist/integrations/index.js.map +1 -1
  224. package/dist/localization/default-messages.d.ts +6 -0
  225. package/dist/localization/default-messages.d.ts.map +1 -1
  226. package/dist/localization/default-messages.js +7 -1
  227. package/dist/localization/default-messages.js.map +1 -1
  228. package/dist/mcp-client/oauth-routes.d.ts +3 -0
  229. package/dist/mcp-client/oauth-routes.d.ts.map +1 -1
  230. package/dist/mcp-client/oauth-routes.js +41 -12
  231. package/dist/mcp-client/oauth-routes.js.map +1 -1
  232. package/dist/observability/routes.d.ts +3 -3
  233. package/dist/provider-api/actions/custom-provider-registration.d.ts +8 -8
  234. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  235. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  236. package/dist/scripts/agent-engines/list-agent-engines.js +1 -18
  237. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  238. package/dist/scripts/call-agent.d.ts.map +1 -1
  239. package/dist/scripts/call-agent.js +49 -6
  240. package/dist/scripts/call-agent.js.map +1 -1
  241. package/dist/secrets/routes.d.ts +6 -6
  242. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  243. package/dist/server/agent-chat-plugin.js +38 -10
  244. package/dist/server/agent-chat-plugin.js.map +1 -1
  245. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  246. package/dist/server/realtime-voice.d.ts.map +1 -1
  247. package/dist/server/realtime-voice.js +1 -1
  248. package/dist/server/realtime-voice.js.map +1 -1
  249. package/dist/server/transcribe-voice.d.ts +1 -1
  250. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
  251. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  252. package/dist/terminal/cli-registry.js +1 -1
  253. package/dist/terminal/cli-registry.js.map +1 -1
  254. package/dist/vite/client.d.ts +8 -1
  255. package/dist/vite/client.d.ts.map +1 -1
  256. package/dist/vite/client.js +113 -2
  257. package/dist/vite/client.js.map +1 -1
  258. package/docs/content/a2a-protocol.mdx +15 -0
  259. package/docs/content/template-chat.mdx +1 -1
  260. package/docs/content/template-plan.mdx +3 -3
  261. package/package.json +2 -2
  262. package/src/a2a/activity.ts +371 -0
  263. package/src/a2a/client.ts +35 -11
  264. package/src/a2a/index.ts +21 -0
  265. package/src/a2a/types.ts +8 -0
  266. package/src/agent/model-config.ts +19 -23
  267. package/src/agent/production-agent.ts +167 -100
  268. package/src/agent/types.ts +16 -1
  269. package/src/cli/index.ts +18 -10
  270. package/src/cli/multi-frontier-runs.ts +5 -3
  271. package/src/cli/templates-meta.ts +0 -12
  272. package/src/cli/workspace-dev.ts +1 -1
  273. package/src/client/AgentPanel.tsx +9 -1
  274. package/src/client/RunStuckBanner.tsx +39 -47
  275. package/src/client/chat/action-chat-ui-surface.tsx +32 -0
  276. package/src/client/chat/message-components.tsx +53 -8
  277. package/src/client/chat/tool-call-display.tsx +214 -44
  278. package/src/client/chat/widgets/InlineExtensionWidget.tsx +0 -1
  279. package/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
  280. package/src/client/chat-model-groups.ts +67 -27
  281. package/src/client/conversation/AgentConversation.tsx +12 -1
  282. package/src/client/error-capture.ts +2 -6
  283. package/src/client/resources/McpConnectionSuggestion.tsx +20 -14
  284. package/src/client/resources/ResourcesPanel.tsx +5 -1
  285. package/src/client/resources/mcp-integration-catalog.ts +7 -17
  286. package/src/client/resources/mcp-integration-logos.ts +2 -2
  287. package/src/client/route-chunk-recovery.ts +5 -3
  288. package/src/client/session-replay.ts +3 -3
  289. package/src/client/settings/SettingsPanel.tsx +15 -6
  290. package/src/client/sharing/ShareButton.tsx +1 -27
  291. package/src/client/sharing/ShareDialog.tsx +0 -16
  292. package/src/client/sharing/useShareButtonController.ts +0 -7
  293. package/src/client/sharing/useShareDialogController.ts +0 -2
  294. package/src/client/sse-event-processor.ts +85 -1
  295. package/src/client/transcription/use-live-transcription.ts +64 -45
  296. package/src/deploy/build.ts +2 -1
  297. package/src/guards/db-tool-scoping.ts +1 -1
  298. package/src/integrations/adapters/slack.ts +84 -5
  299. package/src/integrations/index.ts +5 -1
  300. package/src/localization/default-messages.ts +7 -1
  301. package/src/mcp-client/oauth-routes.ts +45 -12
  302. package/src/scripts/agent-engines/list-agent-engines.ts +1 -18
  303. package/src/scripts/call-agent.ts +49 -6
  304. package/src/server/agent-chat-plugin.ts +50 -10
  305. package/src/server/realtime-voice.ts +4 -1
  306. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
  307. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  308. package/src/terminal/cli-registry.ts +1 -1
  309. package/src/vite/client.ts +166 -1
  310. package/corpus/core/src/observability/hosted-model-experiment.ts +0 -118
  311. package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +0 -115
  312. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +0 -177
  313. package/corpus/templates/crm/.agents/skills/crm/SKILL.md +0 -128
  314. package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +0 -220
  315. package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +0 -169
  316. package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +0 -100
  317. package/corpus/templates/crm/.env.example +0 -5
  318. package/corpus/templates/crm/AGENTS.md +0 -120
  319. package/corpus/templates/crm/CHANGELOG.md +0 -1
  320. package/corpus/templates/crm/DEVELOPING.md +0 -66
  321. package/corpus/templates/crm/README.md +0 -106
  322. package/corpus/templates/crm/_gitignore +0 -12
  323. package/corpus/templates/crm/actions/_crm-action-utils.ts +0 -87
  324. package/corpus/templates/crm/actions/_crm-dashboard.ts +0 -69
  325. package/corpus/templates/crm/actions/_crm-data-program-actions.ts +0 -15
  326. package/corpus/templates/crm/actions/_crm-signal-utils.ts +0 -79
  327. package/corpus/templates/crm/actions/apply-crm-proposals.ts +0 -203
  328. package/corpus/templates/crm/actions/attach-call-evidence.ts +0 -170
  329. package/corpus/templates/crm/actions/configure-crm-connection.ts +0 -126
  330. package/corpus/templates/crm/actions/configure-native-crm.ts +0 -44
  331. package/corpus/templates/crm/actions/create-crm-record.ts +0 -148
  332. package/corpus/templates/crm/actions/create-crm-signal-tracker.ts +0 -58
  333. package/corpus/templates/crm/actions/delete-staged-dataset.ts +0 -14
  334. package/corpus/templates/crm/actions/get-crm-automation-recipe.ts +0 -36
  335. package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +0 -35
  336. package/corpus/templates/crm/actions/get-crm-dashboard.ts +0 -14
  337. package/corpus/templates/crm/actions/get-crm-overview.ts +0 -13
  338. package/corpus/templates/crm/actions/get-crm-pipeline-data.ts +0 -61
  339. package/corpus/templates/crm/actions/get-crm-record.ts +0 -75
  340. package/corpus/templates/crm/actions/install-crm-pipeline-dashboard.ts +0 -81
  341. package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +0 -15
  342. package/corpus/templates/crm/actions/list-crm-dashboards.ts +0 -15
  343. package/corpus/templates/crm/actions/list-crm-proposals.ts +0 -31
  344. package/corpus/templates/crm/actions/list-crm-records.ts +0 -79
  345. package/corpus/templates/crm/actions/list-crm-saved-views.ts +0 -15
  346. package/corpus/templates/crm/actions/list-crm-signal-hits.ts +0 -43
  347. package/corpus/templates/crm/actions/list-crm-signal-trackers.ts +0 -32
  348. package/corpus/templates/crm/actions/list-crm-tasks.ts +0 -22
  349. package/corpus/templates/crm/actions/list-staged-datasets.ts +0 -14
  350. package/corpus/templates/crm/actions/list-workspace-connections.ts +0 -47
  351. package/corpus/templates/crm/actions/manage-crm-signal-tracker.ts +0 -87
  352. package/corpus/templates/crm/actions/manage-crm-task.ts +0 -132
  353. package/corpus/templates/crm/actions/navigate.ts +0 -63
  354. package/corpus/templates/crm/actions/provider-api-catalog.ts +0 -22
  355. package/corpus/templates/crm/actions/provider-api-docs.ts +0 -54
  356. package/corpus/templates/crm/actions/provider-api-request.ts +0 -92
  357. package/corpus/templates/crm/actions/query-staged-dataset.ts +0 -44
  358. package/corpus/templates/crm/actions/record-crm-call-insight.ts +0 -160
  359. package/corpus/templates/crm/actions/record-crm-smart-signal.ts +0 -150
  360. package/corpus/templates/crm/actions/restore-crm-dashboard-revision.ts +0 -23
  361. package/corpus/templates/crm/actions/review-crm-signal.ts +0 -31
  362. package/corpus/templates/crm/actions/run-crm-saved-view-program.ts +0 -103
  363. package/corpus/templates/crm/actions/run-crm-signal-trackers.ts +0 -275
  364. package/corpus/templates/crm/actions/run.ts +0 -7
  365. package/corpus/templates/crm/actions/save-crm-dashboard.ts +0 -51
  366. package/corpus/templates/crm/actions/save-crm-saved-view.ts +0 -119
  367. package/corpus/templates/crm/actions/sync-crm.ts +0 -146
  368. package/corpus/templates/crm/actions/update-crm-record.ts +0 -510
  369. package/corpus/templates/crm/actions/view-screen.ts +0 -218
  370. package/corpus/templates/crm/agent-native.app-skill.json +0 -58
  371. package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +0 -158
  372. package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +0 -78
  373. package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +0 -226
  374. package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +0 -414
  375. package/corpus/templates/crm/app/components/crm/RecordActions.tsx +0 -510
  376. package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +0 -134
  377. package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +0 -362
  378. package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +0 -93
  379. package/corpus/templates/crm/app/components/crm/Surface.tsx +0 -97
  380. package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +0 -180
  381. package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +0 -112
  382. package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +0 -84
  383. package/corpus/templates/crm/app/components/ui/alert-dialog.tsx +0 -1
  384. package/corpus/templates/crm/app/components/ui/badge.tsx +0 -1
  385. package/corpus/templates/crm/app/components/ui/button.tsx +0 -1
  386. package/corpus/templates/crm/app/components/ui/card.tsx +0 -1
  387. package/corpus/templates/crm/app/components/ui/dialog.tsx +0 -1
  388. package/corpus/templates/crm/app/components/ui/input.tsx +0 -1
  389. package/corpus/templates/crm/app/components/ui/label.tsx +0 -1
  390. package/corpus/templates/crm/app/components/ui/select.tsx +0 -1
  391. package/corpus/templates/crm/app/components/ui/sheet.tsx +0 -1
  392. package/corpus/templates/crm/app/components/ui/skeleton.tsx +0 -1
  393. package/corpus/templates/crm/app/components/ui/switch.tsx +0 -1
  394. package/corpus/templates/crm/app/components/ui/table.tsx +0 -1
  395. package/corpus/templates/crm/app/components/ui/tabs.tsx +0 -1
  396. package/corpus/templates/crm/app/components/ui/textarea.tsx +0 -1
  397. package/corpus/templates/crm/app/components/ui/toolkit-provider.tsx +0 -17
  398. package/corpus/templates/crm/app/design-system.ts +0 -3
  399. package/corpus/templates/crm/app/entry.client.tsx +0 -16
  400. package/corpus/templates/crm/app/entry.server.tsx +0 -10
  401. package/corpus/templates/crm/app/global.css +0 -167
  402. package/corpus/templates/crm/app/hooks/use-navigation-state.ts +0 -60
  403. package/corpus/templates/crm/app/i18n/en-US.ts +0 -89
  404. package/corpus/templates/crm/app/i18n/index.ts +0 -34
  405. package/corpus/templates/crm/app/lib/dashboard.ts +0 -13
  406. package/corpus/templates/crm/app/lib/navigation.ts +0 -54
  407. package/corpus/templates/crm/app/lib/tab-id.ts +0 -1
  408. package/corpus/templates/crm/app/lib/types.ts +0 -172
  409. package/corpus/templates/crm/app/lib/utils.ts +0 -1
  410. package/corpus/templates/crm/app/root.tsx +0 -91
  411. package/corpus/templates/crm/app/routes/_index.tsx +0 -26
  412. package/corpus/templates/crm/app/routes/accounts.tsx +0 -41
  413. package/corpus/templates/crm/app/routes/agent.tsx +0 -5
  414. package/corpus/templates/crm/app/routes/ask.tsx +0 -53
  415. package/corpus/templates/crm/app/routes/dashboard.tsx +0 -118
  416. package/corpus/templates/crm/app/routes/opportunities.tsx +0 -41
  417. package/corpus/templates/crm/app/routes/people.tsx +0 -41
  418. package/corpus/templates/crm/app/routes/proposals.tsx +0 -266
  419. package/corpus/templates/crm/app/routes/records.$recordId.tsx +0 -35
  420. package/corpus/templates/crm/app/routes/settings.tsx +0 -63
  421. package/corpus/templates/crm/app/routes/setup.tsx +0 -308
  422. package/corpus/templates/crm/app/routes/tasks.tsx +0 -252
  423. package/corpus/templates/crm/app/routes/views.tsx +0 -333
  424. package/corpus/templates/crm/app/routes.ts +0 -17
  425. package/corpus/templates/crm/app/vite-env.d.ts +0 -6
  426. package/corpus/templates/crm/changelog/2026-07-21-agent-native-crm.md +0 -6
  427. package/corpus/templates/crm/changelog/2026-07-21-clips-call-evidence-review-recipe.md +0 -6
  428. package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-find-and-review-evidence-grounded-call-signals-w.md +0 -6
  429. package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-manage-keyword-and-smart-call-signal-trackers-fr.md +0 -6
  430. package/corpus/templates/crm/changelog/2026-07-21-delegated-local-crm-automation.md +0 -6
  431. package/corpus/templates/crm/changelog/2026-07-21-native-sql.md +0 -6
  432. package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboard.md +0 -6
  433. package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboards-now-install-correctly-from-the-crm-actio.md +0 -6
  434. package/corpus/templates/crm/changelog/2026-07-21-salesforce-connection.md +0 -6
  435. package/corpus/templates/crm/changelog/2026-07-22-crm-field-validation-now-explains-which-fields-cannot-be-edi.md +0 -6
  436. package/corpus/templates/crm/changelog/2026-07-22-fixed-hubspot-contact-syncs-missing-records-updated-after-th.md +0 -6
  437. package/corpus/templates/crm/changelog/2026-07-22-fixed-pipeline-dashboard-panels-so-their-opportunity-data-lo.md +0 -6
  438. package/corpus/templates/crm/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +0 -6
  439. package/corpus/templates/crm/components.json +0 -20
  440. package/corpus/templates/crm/docs/architecture/crm-contract.md +0 -180
  441. package/corpus/templates/crm/learnings.defaults.md +0 -5
  442. package/corpus/templates/crm/package.json +0 -59
  443. package/corpus/templates/crm/public/favicon.svg +0 -1
  444. package/corpus/templates/crm/public/icon-180.svg +0 -1
  445. package/corpus/templates/crm/public/manifest.json +0 -11
  446. package/corpus/templates/crm/react-router.config.ts +0 -7
  447. package/corpus/templates/crm/server/crm/adapter.ts +0 -32
  448. package/corpus/templates/crm/server/crm/crm-field-firewall.ts +0 -64
  449. package/corpus/templates/crm/server/crm/crm-mirror.ts +0 -711
  450. package/corpus/templates/crm/server/crm/hubspot-adapter.ts +0 -1146
  451. package/corpus/templates/crm/server/crm/native-adapter.ts +0 -1715
  452. package/corpus/templates/crm/server/crm/read-through.ts +0 -207
  453. package/corpus/templates/crm/server/crm/salesforce-adapter.ts +0 -1255
  454. package/corpus/templates/crm/server/db/crm-store.ts +0 -1170
  455. package/corpus/templates/crm/server/db/index.ts +0 -169
  456. package/corpus/templates/crm/server/db/schema.ts +0 -441
  457. package/corpus/templates/crm/server/lib/intelligence/default-detectors.ts +0 -65
  458. package/corpus/templates/crm/server/lib/intelligence/evidence.ts +0 -105
  459. package/corpus/templates/crm/server/lib/intelligence/keyword-detector.ts +0 -100
  460. package/corpus/templates/crm/server/lib/intelligence/smart-detector.ts +0 -144
  461. package/corpus/templates/crm/server/lib/intelligence/summary.ts +0 -141
  462. package/corpus/templates/crm/server/lib/provider-api.ts +0 -64
  463. package/corpus/templates/crm/server/middleware/auth.ts +0 -4
  464. package/corpus/templates/crm/server/plugins/agent-chat.ts +0 -68
  465. package/corpus/templates/crm/server/plugins/auth.ts +0 -14
  466. package/corpus/templates/crm/server/plugins/core-routes.ts +0 -17
  467. package/corpus/templates/crm/server/plugins/db.ts +0 -454
  468. package/corpus/templates/crm/server/routes/[...page].get.ts +0 -5
  469. package/corpus/templates/crm/shared/crm-automation-recipes.ts +0 -132
  470. package/corpus/templates/crm/shared/crm-contract.ts +0 -254
  471. package/corpus/templates/crm/shared/crm-sales-config.ts +0 -63
  472. package/corpus/templates/crm/ssr-entry.ts +0 -11
  473. package/corpus/templates/crm/tsconfig.json +0 -24
  474. package/corpus/templates/crm/vite.config.ts +0 -15
  475. package/corpus/templates/crm/vitest.config.ts +0 -5
  476. package/dist/observability/hosted-model-experiment.d.ts +0 -39
  477. package/dist/observability/hosted-model-experiment.d.ts.map +0 -1
  478. package/dist/observability/hosted-model-experiment.js +0 -90
  479. package/dist/observability/hosted-model-experiment.js.map +0 -1
  480. package/src/observability/hosted-model-experiment.ts +0 -118
@@ -1 +1 @@
1
- {"version":3,"file":"route-chunk-recovery.js","sourceRoot":"","sources":["../../src/client/route-chunk-recovery.ts"],"names":[],"mappings":"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","sourcesContent":["const INSTALL_KEY = \"__agentNativeRouteChunkRecoveryInstalled\";\nconst INTENDED_NAV_MAX_AGE_MS = 15_000;\n// Last-resort reload bookkeeping. Persisted in sessionStorage so the cooldown\n// survives the reload it triggers (the in-memory closure is destroyed), with a\n// window-scoped fallback for environments where sessionStorage throws.\nconst STALE_CHUNK_RELOAD_AT_KEY = \"__agentNativeStaleChunkReloadAt\";\nconst STALE_CHUNK_RELOAD_COOLDOWN_MS = 10_000;\n\nexport interface RouteChunkRecoveryState {\n intendedHref: string | null;\n intendedAt: number;\n routeModuleFailureAt: number;\n recoveryHref: string | null;\n recovering: boolean;\n}\n\nexport function createRouteChunkRecoveryState(): RouteChunkRecoveryState {\n return {\n intendedHref: null,\n intendedAt: 0,\n routeModuleFailureAt: 0,\n recoveryHref: null,\n recovering: false,\n };\n}\n\nexport function isRouteModuleReloadMessage(value: unknown): boolean {\n return (\n typeof value === \"string\" &&\n /Error loading route module `[^`]+`, reloading page\\.\\.\\./.test(value)\n );\n}\n\nexport function isDynamicImportFailureMessage(value: unknown): boolean {\n if (typeof value !== \"string\") return false;\n return (\n value.includes(\"Failed to fetch dynamically imported module\") ||\n value.includes(\"error loading dynamically imported module\") ||\n value.includes(\"Importing a module script failed\")\n );\n}\n\nexport function rememberIntendedNavigation(\n state: RouteChunkRecoveryState,\n href: string,\n now = Date.now(),\n): void {\n state.intendedHref = href;\n state.intendedAt = now;\n}\n\nexport function getFreshIntendedNavigation(\n state: RouteChunkRecoveryState,\n currentHref: string,\n now = Date.now(),\n): string | null {\n if (!state.intendedHref) return null;\n if (now - state.intendedAt > INTENDED_NAV_MAX_AGE_MS) return null;\n if (state.intendedHref === currentHref) return null;\n return state.intendedHref;\n}\n\nfunction anchorFromTarget(\n target: EventTarget | null,\n): HTMLAnchorElement | null {\n let node = target as HTMLElement | null;\n while (node) {\n if (\n node.tagName?.toUpperCase() === \"A\" &&\n typeof (node as HTMLAnchorElement).href === \"string\"\n ) {\n return node as HTMLAnchorElement;\n }\n node = node.parentElement;\n }\n return null;\n}\n\nfunction sameOriginHref(win: Window, href: string): string | null {\n try {\n const url = new URL(href, win.location.href);\n return url.origin === win.location.origin ? url.href : null;\n } catch {\n return null;\n }\n}\n\nexport function intendedHrefFromClick(\n win: Window,\n event: MouseEvent,\n): string | null {\n if (event.defaultPrevented) return null;\n if (event.button !== 0) return null;\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n return null;\n }\n\n const anchor = anchorFromTarget(event.target);\n if (!anchor) return null;\n if (anchor.hasAttribute(\"download\")) return null;\n const target = anchor.getAttribute(\"target\");\n if (target && target !== \"_self\") return null;\n return sameOriginHref(win, anchor.href);\n}\n\nfunction hardNavigate(win: Window, href: string): void {\n try {\n win.location.assign(href);\n } catch {\n win.location.href = href;\n }\n}\n\nfunction isAgentNativeDesktop(win: Window): boolean {\n return /AgentNativeDesktop/i.test(win.navigator?.userAgent || \"\");\n}\n\nfunction readStaleChunkReloadAt(win: Window): number {\n try {\n const raw = (\n win as unknown as { sessionStorage?: Storage }\n ).sessionStorage?.getItem(STALE_CHUNK_RELOAD_AT_KEY);\n const parsed = raw == null ? NaN : Number(raw);\n if (Number.isFinite(parsed)) return parsed;\n } catch {}\n const mem = (win as unknown as Record<string, unknown>)[\n STALE_CHUNK_RELOAD_AT_KEY\n ];\n return typeof mem === \"number\" ? mem : 0;\n}\n\nfunction markStaleChunkReload(win: Window, now: number): void {\n (win as unknown as Record<string, unknown>)[STALE_CHUNK_RELOAD_AT_KEY] = now;\n try {\n (win as unknown as { sessionStorage?: Storage }).sessionStorage?.setItem(\n STALE_CHUNK_RELOAD_AT_KEY,\n String(now),\n );\n } catch {}\n}\n\n/**\n * Last resort when a stale lazy chunk fails to load for the *current* route —\n * an old tab whose hashed chunk filenames no longer exist after a deploy — and\n * there is no fresh cross-route navigation to recover to. A single guarded\n * reload pulls a fresh index.html plus chunk manifest. A sessionStorage cooldown\n * prevents a reload loop when the chunk is genuinely unreachable (e.g. offline),\n * letting the error surface to Sentry as before in that case.\n *\n * Returns true when a reload was triggered.\n */\nexport function reloadForStaleChunk(\n win: Window | undefined = typeof window === \"undefined\" ? undefined : window,\n now = Date.now(),\n): boolean {\n if (!win?.location) return false;\n // Desktop webviews intentionally stay open across deploys; a forced reload\n // reads as a random tab refresh, matching recoverToIntendedNavigation().\n if (isAgentNativeDesktop(win)) return false;\n const lastReloadAt = readStaleChunkReloadAt(win);\n if (\n lastReloadAt > 0 &&\n now - lastReloadAt <= STALE_CHUNK_RELOAD_COOLDOWN_MS\n ) {\n return false;\n }\n markStaleChunkReload(win, now);\n hardNavigate(win, win.location.href);\n return true;\n}\n\n/**\n * Recover when a caught error (e.g. a `React.lazy` rejection surfaced to an\n * error boundary) is a stale dynamic-import failure. No-op and returns false\n * for any other error so callers can fall through to their normal handling.\n */\nexport function recoverFromStaleChunkError(\n error: unknown,\n win: Window | undefined = typeof window === \"undefined\" ? undefined : window,\n): boolean {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n if (!isDynamicImportFailureMessage(message)) return false;\n return reloadForStaleChunk(win);\n}\n\nfunction recoverToIntendedNavigation(\n win: Window,\n state: RouteChunkRecoveryState,\n): boolean {\n const target = getFreshIntendedNavigation(state, win.location.href);\n if (!target) return false;\n state.recovering = true;\n state.recoveryHref = target;\n // Desktop webviews stay open across many deploys; a forced navigation here\n // reads as a random tab reload. Leave the current view alive instead.\n if (isAgentNativeDesktop(win)) return true;\n try {\n win.history.replaceState(win.history.state, \"\", target);\n } catch {}\n hardNavigate(win, target);\n return true;\n}\n\nfunction recoverFromDynamicImportFailure(\n win: Window,\n state: RouteChunkRecoveryState,\n message: string,\n): boolean {\n if (!isDynamicImportFailureMessage(message)) return false;\n state.routeModuleFailureAt = Date.now();\n if (recoverToIntendedNavigation(win, state)) return true;\n return reloadForStaleChunk(win);\n}\n\nfunction patchHistoryMethod(\n win: Window,\n state: RouteChunkRecoveryState,\n method: \"pushState\" | \"replaceState\",\n): void {\n const original = win.history[method];\n win.history[method] = function patchedHistoryMethod(...args) {\n if (typeof args[2] === \"string\" || args[2] instanceof URL) {\n const href = sameOriginHref(win, String(args[2]));\n if (href) rememberIntendedNavigation(state, href);\n }\n return original.apply(this, args);\n };\n}\n\nfunction patchReload(win: Window, state: RouteChunkRecoveryState): void {\n const originalReload = win.location.reload.bind(win.location);\n const patchedReload = function patchedReload() {\n if (\n isAgentNativeDesktop(win) &&\n Date.now() - state.routeModuleFailureAt <= 1_000\n ) {\n return;\n }\n if (\n state.recoveryHref &&\n Date.now() - state.routeModuleFailureAt <= 1_000\n ) {\n hardNavigate(win, state.recoveryHref);\n return;\n }\n if (\n Date.now() - state.routeModuleFailureAt <= 1_000 &&\n recoverToIntendedNavigation(win, state)\n ) {\n return;\n }\n originalReload();\n };\n\n try {\n Object.defineProperty(win.location, \"reload\", {\n configurable: true,\n value: patchedReload,\n });\n } catch {\n try {\n win.location.reload = patchedReload;\n } catch {}\n }\n}\n\nexport function installRouteChunkRecovery(\n win: Window | undefined = typeof window === \"undefined\" ? undefined : window,\n) {\n const consoleRef = (win as unknown as { console?: Console } | undefined)\n ?.console;\n if (\n !win?.document ||\n !win.location ||\n !win.history ||\n typeof win.addEventListener !== \"function\" ||\n !consoleRef\n ) {\n return;\n }\n\n const installedTarget = win as unknown as Record<string, boolean>;\n if (installedTarget[INSTALL_KEY]) return;\n installedTarget[INSTALL_KEY] = true;\n\n const state = createRouteChunkRecoveryState();\n\n win.document.addEventListener(\n \"click\",\n (event) => {\n const href = intendedHrefFromClick(win, event);\n if (href) rememberIntendedNavigation(state, href);\n },\n true,\n );\n\n patchHistoryMethod(win, state, \"pushState\");\n patchHistoryMethod(win, state, \"replaceState\");\n patchReload(win, state);\n\n win.addEventListener(\"unhandledrejection\", (event) => {\n const reason = (event as PromiseRejectionEvent).reason;\n const message = String(reason?.message || reason || \"\");\n if (recoverFromDynamicImportFailure(win, state, message)) {\n event.preventDefault();\n }\n });\n\n win.addEventListener(\"error\", (event) => {\n const errorEvent = event as ErrorEvent;\n const message = String(\n errorEvent.error?.message || errorEvent.message || \"\",\n );\n if (recoverFromDynamicImportFailure(win, state, message)) {\n event.preventDefault();\n }\n });\n\n // React Router catches stale route-module import failures and reloads the\n // current URL. Its console message is the only signal exposed before reload.\n const originalError = consoleRef.error.bind(consoleRef);\n try {\n consoleRef.error = (...args: unknown[]) => {\n if (args.some(isRouteModuleReloadMessage)) {\n state.routeModuleFailureAt = Date.now();\n recoverToIntendedNavigation(win, state);\n }\n originalError(...args);\n };\n } catch {}\n}\n"]}
1
+ {"version":3,"file":"route-chunk-recovery.js","sourceRoot":"","sources":["../../src/client/route-chunk-recovery.ts"],"names":[],"mappings":"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","sourcesContent":["const INSTALL_KEY = \"__agentNativeRouteChunkRecoveryInstalled\";\nconst INTENDED_NAV_MAX_AGE_MS = 15_000;\n// Last-resort reload bookkeeping. Persisted in sessionStorage so the cooldown\n// survives the reload it triggers (the in-memory closure is destroyed), with a\n// window-scoped fallback for environments where sessionStorage throws.\nconst STALE_CHUNK_RELOAD_AT_KEY = \"__agentNativeStaleChunkReloadAt\";\nconst STALE_CHUNK_RELOAD_COOLDOWN_MS = 10_000;\n\nexport interface RouteChunkRecoveryState {\n intendedHref: string | null;\n intendedAt: number;\n routeModuleFailureAt: number;\n recoveryHref: string | null;\n recovering: boolean;\n}\n\nexport function createRouteChunkRecoveryState(): RouteChunkRecoveryState {\n return {\n intendedHref: null,\n intendedAt: 0,\n routeModuleFailureAt: 0,\n recoveryHref: null,\n recovering: false,\n };\n}\n\nexport function isRouteModuleReloadMessage(value: unknown): boolean {\n return (\n typeof value === \"string\" &&\n /Error loading route module `[^`]+`, reloading page\\.\\.\\./.test(value)\n );\n}\n\nexport function isDynamicImportFailureMessage(value: unknown): boolean {\n if (typeof value !== \"string\") return false;\n const message = value.toLowerCase();\n return (\n message.includes(\"failed to fetch dynamically imported module\") ||\n message.includes(\"error loading dynamically imported module\") ||\n message.includes(\"importing a module script failed\") ||\n message.includes(\"failed to fetch dynamically imported\")\n );\n}\n\nexport function rememberIntendedNavigation(\n state: RouteChunkRecoveryState,\n href: string,\n now = Date.now(),\n): void {\n state.intendedHref = href;\n state.intendedAt = now;\n}\n\nexport function getFreshIntendedNavigation(\n state: RouteChunkRecoveryState,\n currentHref: string,\n now = Date.now(),\n): string | null {\n if (!state.intendedHref) return null;\n if (now - state.intendedAt > INTENDED_NAV_MAX_AGE_MS) return null;\n if (state.intendedHref === currentHref) return null;\n return state.intendedHref;\n}\n\nfunction anchorFromTarget(\n target: EventTarget | null,\n): HTMLAnchorElement | null {\n let node = target as HTMLElement | null;\n while (node) {\n if (\n node.tagName?.toUpperCase() === \"A\" &&\n typeof (node as HTMLAnchorElement).href === \"string\"\n ) {\n return node as HTMLAnchorElement;\n }\n node = node.parentElement;\n }\n return null;\n}\n\nfunction sameOriginHref(win: Window, href: string): string | null {\n try {\n const url = new URL(href, win.location.href);\n return url.origin === win.location.origin ? url.href : null;\n } catch {\n return null;\n }\n}\n\nexport function intendedHrefFromClick(\n win: Window,\n event: MouseEvent,\n): string | null {\n if (event.defaultPrevented) return null;\n if (event.button !== 0) return null;\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n return null;\n }\n\n const anchor = anchorFromTarget(event.target);\n if (!anchor) return null;\n if (anchor.hasAttribute(\"download\")) return null;\n const target = anchor.getAttribute(\"target\");\n if (target && target !== \"_self\") return null;\n return sameOriginHref(win, anchor.href);\n}\n\nfunction hardNavigate(win: Window, href: string): void {\n try {\n win.location.assign(href);\n } catch {\n win.location.href = href;\n }\n}\n\nfunction isAgentNativeDesktop(win: Window): boolean {\n return /AgentNativeDesktop/i.test(win.navigator?.userAgent || \"\");\n}\n\nfunction readStaleChunkReloadAt(win: Window): number {\n try {\n const raw = (\n win as unknown as { sessionStorage?: Storage }\n ).sessionStorage?.getItem(STALE_CHUNK_RELOAD_AT_KEY);\n const parsed = raw == null ? NaN : Number(raw);\n if (Number.isFinite(parsed)) return parsed;\n } catch {}\n const mem = (win as unknown as Record<string, unknown>)[\n STALE_CHUNK_RELOAD_AT_KEY\n ];\n return typeof mem === \"number\" ? mem : 0;\n}\n\nfunction markStaleChunkReload(win: Window, now: number): void {\n (win as unknown as Record<string, unknown>)[STALE_CHUNK_RELOAD_AT_KEY] = now;\n try {\n (win as unknown as { sessionStorage?: Storage }).sessionStorage?.setItem(\n STALE_CHUNK_RELOAD_AT_KEY,\n String(now),\n );\n } catch {}\n}\n\n/**\n * Last resort when a stale lazy chunk fails to load for the *current* route —\n * an old tab whose hashed chunk filenames no longer exist after a deploy — and\n * there is no fresh cross-route navigation to recover to. A single guarded\n * reload pulls a fresh index.html plus chunk manifest. A sessionStorage cooldown\n * prevents a reload loop when the chunk is genuinely unreachable (e.g. offline),\n * letting the error surface to Sentry as before in that case.\n *\n * Returns true when a reload was triggered.\n */\nexport function reloadForStaleChunk(\n win: Window | undefined = typeof window === \"undefined\" ? undefined : window,\n now = Date.now(),\n): boolean {\n if (!win?.location) return false;\n // Desktop webviews intentionally stay open across deploys; a forced reload\n // reads as a random tab refresh, matching recoverToIntendedNavigation().\n if (isAgentNativeDesktop(win)) return false;\n const lastReloadAt = readStaleChunkReloadAt(win);\n if (\n lastReloadAt > 0 &&\n now - lastReloadAt <= STALE_CHUNK_RELOAD_COOLDOWN_MS\n ) {\n return false;\n }\n markStaleChunkReload(win, now);\n hardNavigate(win, win.location.href);\n return true;\n}\n\n/**\n * Recover when a caught error (e.g. a `React.lazy` rejection surfaced to an\n * error boundary) is a stale dynamic-import failure. No-op and returns false\n * for any other error so callers can fall through to their normal handling.\n */\nexport function recoverFromStaleChunkError(\n error: unknown,\n win: Window | undefined = typeof window === \"undefined\" ? undefined : window,\n): boolean {\n const message = error instanceof Error ? error.message : String(error ?? \"\");\n if (!isDynamicImportFailureMessage(message)) return false;\n return reloadForStaleChunk(win);\n}\n\nfunction recoverToIntendedNavigation(\n win: Window,\n state: RouteChunkRecoveryState,\n): boolean {\n const target = getFreshIntendedNavigation(state, win.location.href);\n if (!target) return false;\n state.recovering = true;\n state.recoveryHref = target;\n // Desktop webviews stay open across many deploys; a forced navigation here\n // reads as a random tab reload. Leave the current view alive instead.\n if (isAgentNativeDesktop(win)) return true;\n try {\n win.history.replaceState(win.history.state, \"\", target);\n } catch {}\n hardNavigate(win, target);\n return true;\n}\n\nfunction recoverFromDynamicImportFailure(\n win: Window,\n state: RouteChunkRecoveryState,\n message: string,\n): boolean {\n if (!isDynamicImportFailureMessage(message)) return false;\n state.routeModuleFailureAt = Date.now();\n if (recoverToIntendedNavigation(win, state)) return true;\n return reloadForStaleChunk(win);\n}\n\nfunction patchHistoryMethod(\n win: Window,\n state: RouteChunkRecoveryState,\n method: \"pushState\" | \"replaceState\",\n): void {\n const original = win.history[method];\n win.history[method] = function patchedHistoryMethod(...args) {\n if (typeof args[2] === \"string\" || args[2] instanceof URL) {\n const href = sameOriginHref(win, String(args[2]));\n if (href) rememberIntendedNavigation(state, href);\n }\n return original.apply(this, args);\n };\n}\n\nfunction patchReload(win: Window, state: RouteChunkRecoveryState): void {\n const originalReload = win.location.reload.bind(win.location);\n const patchedReload = function patchedReload() {\n if (\n isAgentNativeDesktop(win) &&\n Date.now() - state.routeModuleFailureAt <= 1_000\n ) {\n return;\n }\n if (\n state.recoveryHref &&\n Date.now() - state.routeModuleFailureAt <= 1_000\n ) {\n hardNavigate(win, state.recoveryHref);\n return;\n }\n if (\n Date.now() - state.routeModuleFailureAt <= 1_000 &&\n recoverToIntendedNavigation(win, state)\n ) {\n return;\n }\n originalReload();\n };\n\n try {\n Object.defineProperty(win.location, \"reload\", {\n configurable: true,\n value: patchedReload,\n });\n } catch {\n try {\n win.location.reload = patchedReload;\n } catch {}\n }\n}\n\nexport function installRouteChunkRecovery(\n win: Window | undefined = typeof window === \"undefined\" ? undefined : window,\n) {\n const consoleRef = (win as unknown as { console?: Console } | undefined)\n ?.console;\n if (\n !win?.document ||\n !win.location ||\n !win.history ||\n typeof win.addEventListener !== \"function\" ||\n !consoleRef\n ) {\n return;\n }\n\n const installedTarget = win as unknown as Record<string, boolean>;\n if (installedTarget[INSTALL_KEY]) return;\n installedTarget[INSTALL_KEY] = true;\n\n const state = createRouteChunkRecoveryState();\n\n win.document.addEventListener(\n \"click\",\n (event) => {\n const href = intendedHrefFromClick(win, event);\n if (href) rememberIntendedNavigation(state, href);\n },\n true,\n );\n\n patchHistoryMethod(win, state, \"pushState\");\n patchHistoryMethod(win, state, \"replaceState\");\n patchReload(win, state);\n\n win.addEventListener(\"unhandledrejection\", (event) => {\n const reason = (event as PromiseRejectionEvent).reason;\n const message = String(reason?.message || reason || \"\");\n if (recoverFromDynamicImportFailure(win, state, message)) {\n event.preventDefault();\n }\n });\n\n win.addEventListener(\"error\", (event) => {\n const errorEvent = event as ErrorEvent;\n const message = String(\n errorEvent.error?.message || errorEvent.message || \"\",\n );\n if (recoverFromDynamicImportFailure(win, state, message)) {\n event.preventDefault();\n }\n });\n\n // React Router catches stale route-module import failures and reloads the\n // current URL. Its console message is the only signal exposed before reload.\n const originalError = consoleRef.error.bind(consoleRef);\n try {\n consoleRef.error = (...args: unknown[]) => {\n if (args.some(isRouteModuleReloadMessage)) {\n state.routeModuleFailureAt = Date.now();\n recoverToIntendedNavigation(win, state);\n }\n originalError(...args);\n };\n } catch {}\n}\n"]}
@@ -719,13 +719,13 @@ function replayAttributeString(attributes, key) {
719
719
  function updateReplayResourceNode(current, attributes) {
720
720
  return {
721
721
  tagName: current.tagName,
722
- rel: Object.hasOwn(attributes, "rel")
722
+ rel: Object.prototype.hasOwnProperty.call(attributes, "rel")
723
723
  ? replayAttributeString(attributes, "rel")
724
724
  : current.rel,
725
- as: Object.hasOwn(attributes, "as")
725
+ as: Object.prototype.hasOwnProperty.call(attributes, "as")
726
726
  ? replayAttributeString(attributes, "as")
727
727
  : current.as,
728
- type: Object.hasOwn(attributes, "type")
728
+ type: Object.prototype.hasOwnProperty.call(attributes, "type")
729
729
  ? replayAttributeString(attributes, "type")
730
730
  : current.type,
731
731
  };