@agent-native/core 0.98.4 → 0.98.5

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 (217) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +16 -0
  3. package/corpus/core/docs/content/durable-background-runs.mdx +37 -0
  4. package/corpus/core/docs/content/locales/ar-SA/tracking.mdx +2 -0
  5. package/corpus/core/docs/content/locales/de-DE/tracking.mdx +2 -0
  6. package/corpus/core/docs/content/locales/es-ES/tracking.mdx +2 -0
  7. package/corpus/core/docs/content/locales/fr-FR/tracking.mdx +4 -2
  8. package/corpus/core/docs/content/locales/hi-IN/tracking.mdx +2 -0
  9. package/corpus/core/docs/content/locales/ja-JP/tracking.mdx +2 -0
  10. package/corpus/core/docs/content/locales/ko-KR/tracking.mdx +2 -0
  11. package/corpus/core/docs/content/locales/pt-BR/tracking.mdx +2 -0
  12. package/corpus/core/docs/content/locales/zh-CN/tracking.mdx +2 -0
  13. package/corpus/core/docs/content/locales/zh-TW/durable-background-runs.mdx +14 -0
  14. package/corpus/core/docs/content/locales/zh-TW/tracking.mdx +2 -0
  15. package/corpus/core/docs/content/tracking.mdx +2 -0
  16. package/corpus/core/package.json +1 -1
  17. package/corpus/core/src/agent/durable-background.ts +16 -16
  18. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +25 -8
  19. package/corpus/core/src/agent/engine/anthropic-engine.ts +17 -3
  20. package/corpus/core/src/agent/engine/output-tokens.ts +6 -6
  21. package/corpus/core/src/agent/production-agent.ts +200 -27
  22. package/corpus/core/src/agent/run-manager.ts +81 -1
  23. package/corpus/core/src/agent/run-store.ts +301 -41
  24. package/corpus/core/src/client/AgentPanel.tsx +6 -2
  25. package/corpus/core/src/client/AssistantChat.tsx +364 -69
  26. package/corpus/core/src/client/agent-chat-adapter.ts +169 -1
  27. package/corpus/core/src/client/chat/message-components.tsx +3 -0
  28. package/corpus/core/src/client/chat/tool-call-display.tsx +20 -36
  29. package/corpus/core/src/client/conversation/use-near-bottom-autoscroll.ts +7 -0
  30. package/corpus/core/src/client/extensions/AgentNativeExtensionFrame.tsx +2 -0
  31. package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +2 -0
  32. package/corpus/core/src/client/extensions/ExtensionEditor.tsx +9 -2
  33. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +2 -0
  34. package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +2 -0
  35. package/corpus/core/src/client/extensions/portable-extension.ts +2 -0
  36. package/corpus/core/src/client/session-replay.ts +361 -29
  37. package/corpus/core/src/client/sse-event-processor.ts +43 -1
  38. package/corpus/core/src/demo/actions/toggle-demo-mode.ts +1 -1
  39. package/corpus/core/src/demo/config.ts +6 -6
  40. package/corpus/core/src/demo/fetch-interceptor.ts +13 -4
  41. package/corpus/core/src/demo/redact.ts +13 -149
  42. package/corpus/core/src/extensions/html-shell.ts +3 -0
  43. package/corpus/core/src/extensions/session-replay-iframe.ts +131 -0
  44. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +1 -20
  45. package/corpus/core/src/session-replay-iframe-protocol.ts +58 -0
  46. package/corpus/core/src/shared/reasoning-effort.ts +35 -0
  47. package/corpus/core/src/styles/agent-conversation.css +26 -0
  48. package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
  49. package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +30 -21
  50. package/corpus/templates/analytics/AGENTS.md +12 -0
  51. package/corpus/templates/analytics/actions/get-error-issue.ts +1 -0
  52. package/corpus/templates/analytics/actions/get-session-replay-events.ts +1 -0
  53. package/corpus/templates/analytics/actions/get-session-replay-summary.ts +1 -0
  54. package/corpus/templates/analytics/actions/list-error-issues.ts +1 -0
  55. package/corpus/templates/analytics/actions/list-session-recordings.ts +1 -0
  56. package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +2 -1
  57. package/corpus/templates/analytics/app/global.css +2 -2
  58. package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +41 -4
  59. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +52 -203
  60. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +34 -12
  61. package/corpus/templates/analytics/changelog/2026-07-12-analytics-chat-retries-before-showing-a-generic-no-data-mess.md +6 -0
  62. package/corpus/templates/analytics/changelog/2026-07-12-analytics-sessions-search-no-longer-loses-fast-keystrokes-an.md +6 -0
  63. package/corpus/templates/analytics/changelog/2026-07-12-chart-selection-respects-chat-state.md +6 -0
  64. package/corpus/templates/analytics/changelog/2026-07-12-demo-mode-anonymizes-error-reporting-emails.md +6 -0
  65. package/corpus/templates/analytics/changelog/2026-07-12-session-replays-show-iframe-content.md +6 -0
  66. package/corpus/templates/analytics/netlify.toml +0 -3
  67. package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +14 -0
  68. package/corpus/templates/analytics/server/lib/error-capture.ts +59 -2
  69. package/corpus/templates/analytics/server/lib/real-data-actions.ts +24 -0
  70. package/corpus/templates/analytics/server/lib/session-replay.ts +2 -9
  71. package/corpus/templates/analytics/server/plugins/agent-chat.ts +39 -6
  72. package/corpus/templates/assets/app/global.css +1 -1
  73. package/corpus/templates/brain/app/global.css +2 -2
  74. package/corpus/templates/brain/changelog/2026-07-12-fix-long-response-progress.md +6 -0
  75. package/corpus/templates/forms/app/components/CloudUpgrade.tsx +1 -1
  76. package/corpus/templates/forms/app/components/ThemeToggle.tsx +22 -6
  77. package/corpus/templates/forms/app/components/builder/FieldPropertiesPanel.tsx +5 -5
  78. package/corpus/templates/forms/app/components/builder/FieldRenderer.tsx +3 -3
  79. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +16 -16
  80. package/corpus/templates/forms/app/global.css +110 -5
  81. package/corpus/templates/forms/app/pages/AskPage.tsx +3 -3
  82. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +134 -52
  83. package/corpus/templates/forms/app/pages/FormFillPage.tsx +44 -11
  84. package/corpus/templates/forms/app/pages/FormsListPage.tsx +42 -24
  85. package/corpus/templates/forms/app/pages/ResponseInsightsPage.tsx +28 -15
  86. package/corpus/templates/forms/app/pages/ResponsesPage.tsx +38 -15
  87. package/corpus/templates/forms/app/routes/_app.settings.tsx +1 -1
  88. package/corpus/templates/forms/changelog/2026-07-12-form-builder-surfaces-are-calmer-fields-stay-stable-on-hover.md +6 -0
  89. package/corpus/templates/forms/changelog/2026-07-12-smoother-more-tactile-controls-throughout-animated-icon-and-.md +6 -0
  90. package/corpus/templates/mail/app/components/email/EmailThread.tsx +21 -13
  91. package/corpus/templates/mail/app/components/email/email-iframe-document.ts +18 -0
  92. package/dist/agent/durable-background.d.ts +10 -10
  93. package/dist/agent/durable-background.d.ts.map +1 -1
  94. package/dist/agent/durable-background.js +16 -16
  95. package/dist/agent/durable-background.js.map +1 -1
  96. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  97. package/dist/agent/engine/ai-sdk-engine.js +19 -8
  98. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  99. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  100. package/dist/agent/engine/anthropic-engine.js +11 -3
  101. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  102. package/dist/agent/engine/output-tokens.js +6 -6
  103. package/dist/agent/engine/output-tokens.js.map +1 -1
  104. package/dist/agent/production-agent.d.ts +52 -0
  105. package/dist/agent/production-agent.d.ts.map +1 -1
  106. package/dist/agent/production-agent.js +154 -26
  107. package/dist/agent/production-agent.js.map +1 -1
  108. package/dist/agent/run-manager.d.ts +9 -0
  109. package/dist/agent/run-manager.d.ts.map +1 -1
  110. package/dist/agent/run-manager.js +71 -1
  111. package/dist/agent/run-manager.js.map +1 -1
  112. package/dist/agent/run-store.d.ts +9 -0
  113. package/dist/agent/run-store.d.ts.map +1 -1
  114. package/dist/agent/run-store.js +243 -48
  115. package/dist/agent/run-store.js.map +1 -1
  116. package/dist/client/AgentPanel.d.ts.map +1 -1
  117. package/dist/client/AgentPanel.js +6 -2
  118. package/dist/client/AgentPanel.js.map +1 -1
  119. package/dist/client/AssistantChat.d.ts +21 -0
  120. package/dist/client/AssistantChat.d.ts.map +1 -1
  121. package/dist/client/AssistantChat.js +298 -67
  122. package/dist/client/AssistantChat.js.map +1 -1
  123. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  124. package/dist/client/agent-chat-adapter.js +146 -1
  125. package/dist/client/agent-chat-adapter.js.map +1 -1
  126. package/dist/client/chat/message-components.d.ts.map +1 -1
  127. package/dist/client/chat/message-components.js +2 -1
  128. package/dist/client/chat/message-components.js.map +1 -1
  129. package/dist/client/chat/tool-call-display.d.ts +3 -1
  130. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  131. package/dist/client/chat/tool-call-display.js +13 -37
  132. package/dist/client/chat/tool-call-display.js.map +1 -1
  133. package/dist/client/conversation/use-near-bottom-autoscroll.d.ts +1 -0
  134. package/dist/client/conversation/use-near-bottom-autoscroll.d.ts.map +1 -1
  135. package/dist/client/conversation/use-near-bottom-autoscroll.js +6 -0
  136. package/dist/client/conversation/use-near-bottom-autoscroll.js.map +1 -1
  137. package/dist/client/extensions/AgentNativeExtensionFrame.d.ts.map +1 -1
  138. package/dist/client/extensions/AgentNativeExtensionFrame.js +2 -1
  139. package/dist/client/extensions/AgentNativeExtensionFrame.js.map +1 -1
  140. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  141. package/dist/client/extensions/EmbeddedExtension.js +2 -1
  142. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  143. package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
  144. package/dist/client/extensions/ExtensionEditor.js +5 -2
  145. package/dist/client/extensions/ExtensionEditor.js.map +1 -1
  146. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  147. package/dist/client/extensions/ExtensionViewer.js +2 -1
  148. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  149. package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
  150. package/dist/client/extensions/InlineExtensionFrame.js +2 -1
  151. package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
  152. package/dist/client/extensions/portable-extension.d.ts.map +1 -1
  153. package/dist/client/extensions/portable-extension.js +2 -0
  154. package/dist/client/extensions/portable-extension.js.map +1 -1
  155. package/dist/client/session-replay.d.ts.map +1 -1
  156. package/dist/client/session-replay.js +308 -29
  157. package/dist/client/session-replay.js.map +1 -1
  158. package/dist/client/sse-event-processor.d.ts +5 -0
  159. package/dist/client/sse-event-processor.d.ts.map +1 -1
  160. package/dist/client/sse-event-processor.js +37 -1
  161. package/dist/client/sse-event-processor.js.map +1 -1
  162. package/dist/collab/routes.d.ts +1 -1
  163. package/dist/collab/struct-routes.d.ts +1 -1
  164. package/dist/demo/actions/toggle-demo-mode.js +1 -1
  165. package/dist/demo/actions/toggle-demo-mode.js.map +1 -1
  166. package/dist/demo/config.js +6 -6
  167. package/dist/demo/config.js.map +1 -1
  168. package/dist/demo/fetch-interceptor.d.ts.map +1 -1
  169. package/dist/demo/fetch-interceptor.js +13 -4
  170. package/dist/demo/fetch-interceptor.js.map +1 -1
  171. package/dist/demo/redact.d.ts +7 -7
  172. package/dist/demo/redact.d.ts.map +1 -1
  173. package/dist/demo/redact.js +8 -145
  174. package/dist/demo/redact.js.map +1 -1
  175. package/dist/extensions/html-shell.d.ts.map +1 -1
  176. package/dist/extensions/html-shell.js +2 -0
  177. package/dist/extensions/html-shell.js.map +1 -1
  178. package/dist/extensions/session-replay-iframe.d.ts +10 -0
  179. package/dist/extensions/session-replay-iframe.d.ts.map +1 -0
  180. package/dist/extensions/session-replay-iframe.js +121 -0
  181. package/dist/extensions/session-replay-iframe.js.map +1 -0
  182. package/dist/progress/routes.d.ts +1 -1
  183. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  184. package/dist/resources/handlers.d.ts +3 -3
  185. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  186. package/dist/scripts/agent-engines/list-agent-engines.js +1 -19
  187. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  188. package/dist/session-replay-iframe-protocol.d.ts +36 -0
  189. package/dist/session-replay-iframe-protocol.d.ts.map +1 -0
  190. package/dist/session-replay-iframe-protocol.js +24 -0
  191. package/dist/session-replay-iframe-protocol.js.map +1 -0
  192. package/dist/shared/reasoning-effort.d.ts +11 -0
  193. package/dist/shared/reasoning-effort.d.ts.map +1 -1
  194. package/dist/shared/reasoning-effort.js +36 -0
  195. package/dist/shared/reasoning-effort.js.map +1 -1
  196. package/dist/styles/agent-conversation.css +26 -0
  197. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
  198. package/docs/content/durable-background-runs.mdx +37 -0
  199. package/docs/content/locales/ar-SA/tracking.mdx +2 -0
  200. package/docs/content/locales/de-DE/tracking.mdx +2 -0
  201. package/docs/content/locales/es-ES/tracking.mdx +2 -0
  202. package/docs/content/locales/fr-FR/tracking.mdx +4 -2
  203. package/docs/content/locales/hi-IN/tracking.mdx +2 -0
  204. package/docs/content/locales/ja-JP/tracking.mdx +2 -0
  205. package/docs/content/locales/ko-KR/tracking.mdx +2 -0
  206. package/docs/content/locales/pt-BR/tracking.mdx +2 -0
  207. package/docs/content/locales/zh-CN/tracking.mdx +2 -0
  208. package/docs/content/locales/zh-TW/durable-background-runs.mdx +14 -0
  209. package/docs/content/locales/zh-TW/tracking.mdx +2 -0
  210. package/docs/content/tracking.mdx +2 -0
  211. package/package.json +2 -2
  212. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
  213. package/corpus/core/src/observability/hosted-model-experiment.ts +0 -118
  214. package/dist/observability/hosted-model-experiment.d.ts +0 -39
  215. package/dist/observability/hosted-model-experiment.d.ts.map +0 -1
  216. package/dist/observability/hosted-model-experiment.js +0 -90
  217. package/dist/observability/hosted-model-experiment.js.map +0 -1
package/corpus/README.md CHANGED
@@ -27,5 +27,5 @@ rg -n "defineAction|useActionQuery" node_modules/@agent-native/core/corpus
27
27
 
28
28
  ## Generated Counts
29
29
 
30
- - core files: 2235
31
- - template files: 5491
30
+ - core files: 2236
31
+ - template files: 5501
@@ -1,5 +1,21 @@
1
1
  # @agent-native/core
2
2
 
3
+ ## 0.98.5
4
+
5
+ ### Patch Changes
6
+
7
+ - 10dc602: Keep session replay upload backlogs within byte and event caps, and safely split server-rejected oversized batches without losing or duplicating events.
8
+ - 10dc602: Collapse completed reasoning segments into timed thought disclosures while keeping the active thought expanded.
9
+ - 10dc602: Use `anonymous@builder.io` for every email address anonymized by Demo mode.
10
+ - 10dc602: Keep long agent responses visibly active across automatic continuations, reliably follow streamed output until the user scrolls away, and default unsafe regular-function self-chaining off on hosted deployments (opt back in with `AGENT_CHAT_FOREGROUND_SELF_CHAIN`).
11
+ - 10dc602: Use Claude Haiku 4.5's supported manual thinking budget instead of sending the unsupported adaptive-thinking request.
12
+ - 10dc602: Capture framework-owned iframe content and interactions in browser session replays.
13
+ - 10dc602: Fix a durable-background chat turn dying mid-sentence with no recovery: `/runs/active` now prefers a live successor over a stale in-memory terminal run, a hung first model-stream event checkpoints within 25s instead of riding the full 90s watchdog past the foreground platform kill, and the stale-run reapers now insert a claimable recovery successor (instead of leaving the turn dead) when a background worker dies silently.
14
+ - 10dc602: Stop assigning first-party hosted app users between Sonnet and Luna so default model selection follows the normal engine configuration.
15
+ - 10dc602: Also skip demo-mode number redaction on session replay manifest requests, alongside the existing chunk/event payload skip, so replay geometry and pointer data can never be faked at view time.
16
+ - 10dc602: Fixed a bug where a long-running background agent turn could flip the chat to a finished state mid-turn: if the client re-polled a chunk's terminal run row before its server-chained successor became visible, it now keeps following instead of prematurely completing the message. Background runs that die between chunks now get a short grace window to recover onto a claimable successor before surfacing an error, and the "Resuming…" indicator stays warm while the client waits, so the UI never drops into a false-idle state during the handoff.
17
+ - 10dc602: Widen centered full-page Ask and Chat composers by 20% while keeping their responsive viewport cap.
18
+
3
19
  ## 0.98.4
4
20
 
5
21
  ### Patch Changes
@@ -194,6 +194,43 @@ Durable runs are opt-in per app and default OFF. Enable with AGENT_CHAT_DURABLE_
194
194
 
195
195
  </Callout>
196
196
 
197
+ ## The foreground self-chain: a narrower, opt-in escape hatch {#foreground-self-chain}
198
+
199
+ A second, independent flag governs a different continuation mechanism:
200
+ `AGENT_CHAT_FOREGROUND_SELF_CHAIN`. Where durable background runs move a whole
201
+ long turn onto the 15-minute background function above, the foreground
202
+ self-chain lets a normal (non-durable-background) turn that hits its
203
+ soft-timeout chunk boundary continue via a server-side self-dispatch on the
204
+ **regular** request function, instead of depending on the client to re-POST
205
+ `auto_continue`.
206
+
207
+ It composes the same way as `AGENT_CHAT_DURABLE_BACKGROUND`: true only when
208
+ the env flag is explicitly truthy (`true` / `1` / `yes` / `on`), the runtime
209
+ is hosted, and `A2A_SECRET` is configured. The two flags are independent and
210
+ never need to agree — an app can enable this narrower capability without
211
+ opting into the full background-function worker path. When a run already
212
+ qualifies for durable background dispatch, that decision is evaluated first
213
+ and takes precedence; the run chains through the background worker instead of
214
+ this path.
215
+
216
+ <Callout id="doc-block-fgschn1" tone="warning">
217
+
218
+ This flag is **opt-in and default OFF**. A regular Netlify function has a
219
+ fixed **60-second** wall — far shorter than the 15-minute background-function
220
+ budget above — so a self-dispatched successor can be killed mid-run before it
221
+ persists its next continuation, cutting a long response off mid-sentence.
222
+ With the flag off, hosted apps use the existing client-driven `auto_continue`
223
+ re-POST path instead, which is slower to resume but cannot be killed by a
224
+ server-side timeout.
225
+
226
+ </Callout>
227
+
228
+ Only enable this once you've verified the hosted deployment's regular
229
+ function reliably completes self-dispatched continuations inside that
230
+ 60-second wall. For long, multi-step turns, prefer
231
+ `AGENT_CHAT_DURABLE_BACKGROUND` above — its background function has a much
232
+ larger budget and is the recommended path.
233
+
197
234
  ## What's next
198
235
 
199
236
  - [**Durable Resume**](/docs/durable-resume) — how an interrupted run resumes
@@ -238,6 +238,8 @@ VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE=1
238
238
  - يتم تنظيف عناوين URL باستخدام نفس مساعد `scrubUrl()` المستخدم بواسطة تحليلات المتصفح.
239
239
  - التقاط إعادة التشغيل مخصص للويب فقط وباختيار المستخدم؛ فهو لا يسجل شاشات سطح المكتب الأصلية.
240
240
 
241
+ تُضمَّن إطارات iframe التي يديرها إطار العمل، بما في ذلك الامتدادات ومحتوى البريد الإلكتروني المعروض، في التقاط إعادة التشغيل. تنطبق محددات الإخفاء والحظر نفسها داخل الإطارات المسجلة. يظل iframe تابع لجهة خارجية ومن أصل مختلف غير مرئي ما لم تُشغِّل وثيقته مسجِّل rrweb متوافقًا مع تمكين تسجيل إطارات iframe من أصول مختلفة؛ ولا يمكن للصفحة الأم تجاوز حدود الأصل التي يفرضها المتصفح.
242
+
241
243
  أثناء التسجيل، تلتقط إعادة تشغيل الجلسة أيضًا مخرجات وحدة تحكم المتصفح (`log`، و`info`، و`warn`، و`error`، و`debug`، بالإضافة إلى `error` / `unhandledrejection` الخاصة بالنافذة) وبيانات وصفية لطلبات الشبكة (`fetch` و XHR) كأحداث rrweb مخصصة موسومة، بحيث يمكن للوكلاء وعارض إعادة التشغيل تصحيح المشكلات التي يبلغ عنها المستخدمون. الالتقاط مفعّل افتراضيًا عند تفعيل إعادة التشغيل؛ اضبطه أو عطّله باستخدام خياري `sessionReplay.console` و`sessionReplay.network`، حيث يقبل كل منهما قيمة منطقية (boolean) أو كائن خيارات (`{ maxEvents?: number }`، مع قبول `network` إضافيًا لـ `captureErrorBodies` و`maxErrorBodyLength`). لا يتم التقاط نصوص/رؤوس الطلبات مطلقًا؛ أما نصوص الاستجابات فلا تُلتقط إلا كمقتطف محدود ومُنقّح لاستجابات 5xx (أخطاء الخادم) فقط (`captureErrorBodies`، الافتراضي true، بحد أقصى `maxErrorBodyLength` حرفًا، الافتراضي 2048) — استجابات غير 5xx وحالات فشل الشبكة لا تحمل أي نص استجابة أبدًا. يتم تنظيف عناوين URL، ويتم اقتطاع الرسائل، ويُستثنى حركة استيعاب/تتبع المسجِّل نفسه، وتضيف ميزانيات كل جلسة (1000 حدث وحدة تحكم / 2000 حدث شبكة) إشعار اقتطاع عند تجاوزها.
242
244
 
243
245
  يخزّن قالب Analytics بيانات إعادة التشغيل الوصفية في SQL (`session_recordings`) ويخزّن الأجزاء عبر مراجع blob خاصة (`session_replay_chunks`). لا تتلقى المتصفحات والوكلاء أبدًا عناوين URL الخاصة بالموفر. تمر إعادة التشغيل عبر مسارات خادم محددة النطاق، وتُرجع أدوات الوكيل الافتراضية ملخصات أو أحداث إعادة تشغيل محدودة، وليس وصولاً خامًا إلى جدول الأجزاء.
@@ -238,6 +238,8 @@ Die Datenschutz-Standardeinstellungen sind bewusst konservativ, aber für die Wi
238
238
  - URLs werden mit demselben `scrubUrl()`-Helfer bereinigt, der auch von der Browser-Analyse verwendet wird.
239
239
  - Die Replay-Aufzeichnung ist ausschließlich webbasiert und opt-in; native Desktop-Bildschirme werden nicht aufgezeichnet.
240
240
 
241
+ Framework-eigene iframes, einschließlich Erweiterungen und gerenderten E-Mail-Inhalten, werden in der Replay-Aufzeichnung erfasst. Innerhalb aufgezeichneter Frames gelten dieselben Maskierungs- und Blockierungsselektoren. Ein fremdes Cross-Origin-iframe bleibt undurchsichtig, sofern sein eigenes Dokument nicht einen kompatiblen rrweb-Recorder mit aktivierter Cross-Origin-iframe-Aufzeichnung ausführt; die Ursprungsgrenzen des Browsers können von der übergeordneten Seite nicht umgangen werden.
242
+
241
243
  Während der Aufzeichnung erfasst Session Replay außerdem die Browser-Konsolenausgabe (`log`, `info`, `warn`, `error`, `debug`, sowie die Fenster-Ereignisse `error` / `unhandledrejection`) und Netzwerkanfrage-Metadaten (`fetch` und XHR) als getaggte rrweb-Custom-Events, damit Agenten und der Replay-Viewer von Nutzern gemeldete Probleme debuggen können. Die Erfassung ist standardmäßig aktiviert, wenn Replay aktiviert ist; passen Sie sie mit den Optionen `sessionReplay.console` und `sessionReplay.network` an oder deaktivieren Sie sie, wobei jede Option entweder einen booleschen Wert oder ein Optionsobjekt akzeptiert (`{ maxEvents?: number }`, wobei `network` zusätzlich `captureErrorBodies` und `maxErrorBodyLength` akzeptiert). Request-Bodies und -Header sowie Response-Header werden nie erfasst; Response-Bodies werden nur als begrenzter, redigierter Ausschnitt für 5xx-Antworten (Serverfehler) erfasst (`captureErrorBodies`, Standard true, begrenzt auf `maxErrorBodyLength` Zeichen, Standard 2048) — bei Antworten außerhalb des 5xx-Bereichs sowie bei Netzwerkfehlern wird nie ein Body mitgeführt. URLs werden bereinigt, Nachrichten werden gekürzt, der eigene Ingest-/Tracking-Traffic des Recorders wird ausgeschlossen, und sitzungsbezogene Budgets (1000 Konsolen- / 2000 Netzwerkereignisse) fügen bei Überschreitung einen Kürzungshinweis hinzu.
242
244
 
243
245
  Das Analytics-Template speichert Replay-Metadaten in SQL (`session_recordings`) und Chunks über private Blob-Referenzen (`session_replay_chunks`). Browser und Agenten erhalten niemals Anbieter-URLs. Die Wiedergabe läuft über zugriffsbeschränkte Server-Routen, und die Standard-Agent-Tools liefern Zusammenfassungen oder begrenzte Replay-Ereignisse zurück, keinen Rohzugriff auf die Chunk-Tabelle.
@@ -238,6 +238,8 @@ Los valores predeterminados de privacidad son intencionalmente conservadores per
238
238
  - Las URL se depuran con el mismo ayudante `scrubUrl()` que utiliza el análisis del navegador.
239
239
  - La captura de repetición es solo para web y opcional; no graba pantallas de escritorio nativas.
240
240
 
241
+ Los iframes administrados por el framework, incluidas las extensiones y el contenido de correo electrónico renderizado, se incluyen en la captura de repetición. Los mismos selectores de enmascaramiento y bloqueo se aplican dentro de los frames grabados. Un iframe de terceros con origen distinto permanece opaco a menos que su propio documento ejecute un grabador rrweb compatible con la grabación de iframes de origen cruzado habilitada; la página principal no puede eludir los límites de origen del navegador.
242
+
241
243
  Durante la grabación, la repetición de sesión también captura la salida de la consola del navegador (`log`, `info`, `warn`, `error`, `debug`, además de `error`/`unhandledrejection` de la ventana) y los metadatos de solicitudes de red (`fetch` y XHR) como eventos personalizados de rrweb etiquetados, para que los agentes y el visor de repeticiones puedan depurar los problemas reportados por los usuarios. La captura está habilitada de forma predeterminada cuando la repetición está activada; ajuste o desactive con las opciones `sessionReplay.console` y `sessionReplay.network`, cada una acepta un booleano o un objeto de opciones (`{ maxEvents?: number }`, y `network` acepta además `captureErrorBodies` y `maxErrorBodyLength`). Los cuerpos y encabezados de solicitud nunca se capturan; los cuerpos de respuesta solo se capturan como un fragmento acotado y redactado para respuestas 5xx (error del servidor) (`captureErrorBodies`, predeterminado true, limitado a `maxErrorBodyLength` caracteres, predeterminado 2048) — las respuestas que no son 5xx y los fallos de red nunca incluyen un cuerpo. Las URL se depuran, los mensajes se truncan, el propio tráfico de ingesta/seguimiento del grabador se excluye, y los presupuestos por sesión (1000 eventos de consola / 2000 eventos de red) agregan un aviso de truncamiento cuando se superan.
242
244
 
243
245
  La plantilla de Analytics almacena los metadatos de repetición en SQL (`session_recordings`) y almacena los fragmentos mediante referencias de blob privadas (`session_replay_chunks`). Los navegadores y los agentes nunca reciben las URL del proveedor. La reproducción pasa por rutas del servidor con alcance limitado y las herramientas del agente predeterminadas devuelven resúmenes o eventos de repetición acotados, no acceso sin procesar a la tabla de fragmentos.
@@ -236,9 +236,11 @@ Les paramètres de confidentialité par défaut sont volontairement prudents tou
236
236
  - Le texte de la page reste visible sauf si un élément est marqué avec `.an-mask` ou `data-an-mask`.
237
237
  - Les zones sensibles sont bloquées avec des sélecteurs tels que `[data-sensitive]`, `.an-block`, `.an-private`, `data-an-block`, `data-an-private`, ainsi que les champs de type carte bancaire/mot de passe/numéro de sécurité sociale.
238
238
  - Les URL sont nettoyées avec le même assistant `scrubUrl()` utilisé par les analyses du navigateur.
239
- - La capture de relecture est réservée au web et opt-in ; elle n'enregistre pas les écrans natifs du bureau.
239
+ - La capture de relecture est réservée au web et opt-in ; elle n'enregistre pas les écrans natifs du bureau.
240
240
 
241
- Pendant l'enregistrement, la relecture de session capture également la sortie de la console du navigateur (`log`, `info`, `warn`, `error`, `debug`, ainsi que les événements globaux `error` / `unhandledrejection`) et les métadonnées des requêtes réseau (`fetch` et XHR) sous forme d'événements personnalisés rrweb balisés, afin que les agents et la visionneuse de relecture puissent déboguer les problèmes signalés par les utilisateurs. La capture est activée par défaut lorsque la relecture est activée ; ajustez-la ou désactivez-la avec les options `sessionReplay.console` et `sessionReplay.network`, chacune acceptant un booléen ou un objet d'options (`{ maxEvents?: number }`, `network` acceptant en plus `captureErrorBodies` et `maxErrorBodyLength`). Les corps et en-têtes des requêtes ne sont jamais capturés ; les corps des réponses ne sont capturés que sous forme d'extrait borné et expurgé pour les réponses 5xx (erreur serveur) (`captureErrorBodies`, activé par défaut, plafonné à `maxErrorBodyLength` caractères, 2048 par défaut) — les réponses hors 5xx et les échecs réseau ne comportent jamais de corps. Les URL sont nettoyées, les messages sont tronqués, le trafic d'ingestion/de suivi propre à l'enregistreur est exclu, et des budgets par session (1000 événements console / 2000 événements réseau) ajoutent une notice de troncature en cas de dépassement.
241
+ Les iframes gérées par le framework, notamment les extensions et le contenu d'e-mail rendu, sont incluses dans la capture de relecture. Les mêmes sélecteurs de masquage et de blocage s'appliquent dans les frames enregistrées. Une iframe tierce d'origine différente reste opaque, sauf si son propre document exécute un enregistreur rrweb compatible avec l'enregistrement des iframes inter-origines activé ; la page parente ne peut pas contourner les limites d'origine imposées par le navigateur.
242
+
243
+ Pendant l'enregistrement, la relecture de session capture également la sortie de la console du navigateur (`log`, `info`, `warn`, `error`, `debug`, ainsi que les événements globaux `error` / `unhandledrejection`) et les métadonnées des requêtes réseau (`fetch` et XHR) sous forme d'événements personnalisés rrweb balisés, afin que les agents et la visionneuse de relecture puissent déboguer les problèmes signalés par les utilisateurs. La capture est activée par défaut lorsque la relecture est activée ; ajustez-la ou désactivez-la avec les options `sessionReplay.console` et `sessionReplay.network`, chacune acceptant un booléen ou un objet d'options (`{ maxEvents?: number }`, `network` acceptant en plus `captureErrorBodies` et `maxErrorBodyLength`). Les corps et en-têtes des requêtes ne sont jamais capturés ; les corps des réponses ne sont capturés que sous forme d'extrait borné et expurgé pour les réponses 5xx (erreur serveur) (`captureErrorBodies`, activé par défaut, plafonné à `maxErrorBodyLength` caractères, 2048 par défaut) — les réponses hors 5xx et les échecs réseau ne comportent jamais de corps. Les URL sont nettoyées, les messages sont tronqués, le trafic d'ingestion/de suivi propre à l'enregistreur est exclu, et des budgets par session (1000 événements console / 2000 événements réseau) ajoutent une notice de troncature en cas de dépassement.
242
244
 
243
245
  Le modèle Analytics stocke les métadonnées de relecture en SQL (`session_recordings`) et stocke les blocs via des références blob privées (`session_replay_chunks`). Les navigateurs et les agents ne reçoivent jamais les URL du fournisseur. La lecture passe par des routes serveur à portée limitée, et les outils d'agent par défaut renvoient des résumés ou des événements de relecture bornés, et non un accès brut à la table des blocs.
244
246
 
@@ -238,6 +238,8 @@ Session replay प्रत्येक ब्राउज़र session के
238
238
  - URLs को ब्राउज़र एनालिटिक्स द्वारा उपयोग किए जाने वाले समान `scrubUrl()` हेल्पर के साथ स्क्रब किया जाता है।
239
239
  - Replay capture केवल-वेब और ऑप्ट-इन है; यह नेटिव डेस्कटॉप स्क्रीन को रिकॉर्ड नहीं करता।
240
240
 
241
+ Framework के स्वामित्व वाले iframes, जिनमें extensions और render किया गया email content शामिल है, replay capture में शामिल किए जाते हैं। रिकॉर्ड किए गए frames के अंदर भी वही masking और blocking selectors लागू होते हैं। कोई third-party cross-origin iframe तब तक opaque रहता है जब तक उसका अपना document cross-origin iframe recording सक्षम किए हुए compatible rrweb recorder को न चलाए; parent page ब्राउज़र की origin boundaries को bypass नहीं कर सकता।
242
+
241
243
  रिकॉर्डिंग के दौरान, session replay ब्राउज़र कंसोल आउटपुट (`log`, `info`, `warn`, `error`, `debug`, साथ ही window `error` / `unhandledrejection`) और नेटवर्क रिक्वेस्ट मेटाडेटा (`fetch` और XHR) को टैग किए गए rrweb कस्टम इवेंट्स के रूप में भी कैप्चर करता है, ताकि एजेंट और replay viewer उपयोगकर्ता-रिपोर्ट की गई समस्याओं को डीबग कर सकें। जब replay सक्षम होता है तो capture डिफ़ॉल्ट रूप से चालू होता है; इसे `sessionReplay.console` और `sessionReplay.network` विकल्पों के साथ ट्यून या अक्षम करें, प्रत्येक एक बूलियन या एक विकल्प ऑब्जेक्ट स्वीकार करता है (`{ maxEvents?: number }`, जिसमें `network` अतिरिक्त रूप से `captureErrorBodies` और `maxErrorBodyLength` भी स्वीकार करता है)। Request bodies और headers कभी कैप्चर नहीं किए जाते; response bodies केवल 5xx (सर्वर एरर) रिस्पॉन्स के लिए एक बाउंडेड, रिडैक्टेड स्निपेट के रूप में कैप्चर किए जाते हैं (`captureErrorBodies`, डिफ़ॉल्ट true, `maxErrorBodyLength` वर्णों तक सीमित, डिफ़ॉल्ट 2048) — non-5xx और नेटवर्क-फेलियर (status 0) रिस्पॉन्स में कभी कोई body नहीं होती। URLs स्क्रब किए जाते हैं, संदेश छोटे किए जाते हैं, रिकॉर्डर का अपना ingest/tracking ट्रैफ़िक बाहर रखा जाता है, और प्रति-session बजट (1000 console / 2000 network events) से अधिक होने पर एक truncation नोटिस जोड़ते हैं।
242
244
 
243
245
  Analytics टेम्पलेट replay मेटाडेटा को SQL (`session_recordings`) में संग्रहीत करता है और chunks को प्राइवेट blob refs (`session_replay_chunks`) के माध्यम से संग्रहीत करता है। ब्राउज़र और एजेंट को कभी भी प्रदाता URLs प्राप्त नहीं होते। Playback स्कोप्ड सर्वर रूट्स के माध्यम से जाता है और डिफ़ॉल्ट एजेंट टूल्स सारांश या बाउंडेड replay events लौटाते हैं, कच्ची chunk table एक्सेस नहीं।
@@ -238,6 +238,8 @@ VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE=1
238
238
  - URL は、ブラウザー分析で使用されるものと同じ `scrubUrl()` ヘルパーでスクラブされます。
239
239
  - リプレイ キャプチャは Web 専用でオプトインです。ネイティブ デスクトップ画面は記録しません。
240
240
 
241
+ 拡張機能やレンダリングされたメール コンテンツなど、フレームワークが管理する iframe はリプレイ キャプチャに含まれます。記録されたフレーム内でも、同じマスキングおよびブロック用セレクターが適用されます。サードパーティのクロスオリジン iframe は、そのドキュメント自体がクロスオリジン iframe 記録を有効にした互換性のある rrweb レコーダーを実行しない限り不透明なままです。親ページからブラウザーのオリジン境界を回避することはできません。
242
+
241
243
  記録中、セッション リプレイはブラウザーのコンソール出力 (`log`、`info`、`warn`、`error`、`debug`、およびウィンドウの `error`/`unhandledrejection`) とネットワーク リクエストのメタデータ (`fetch` および XHR) もタグ付けされた rrweb カスタム イベントとしてキャプチャするため、エージェントとリプレイ ビューアーがユーザー報告の問題をデバッグできます。キャプチャは、リプレイが有効な場合デフォルトでオンになっています。`sessionReplay.console` と `sessionReplay.network` オプション (それぞれ真偽値またはオプション オブジェクト `{ maxEvents?: number }` を受け取り、`network` はさらに `captureErrorBodies` と `maxErrorBodyLength` を受け取ります) で調整または無効化できます。リクエストの本文とヘッダーは記録されませんが、レスポンスの本文は 5xx (サーバー エラー) レスポンスに限り、境界付きでレダクト済みのスニペットとしてキャプチャされます (`captureErrorBodies`、デフォルトは `true`、上限は `maxErrorBodyLength` 文字、デフォルト 2048) — 5xx 以外およびネットワーク障害 (ステータス 0) のレスポンスに本文が含まれることはありません。URL はスクラブされ、メッセージは切り詰められ、レコーダー自身の取り込み/追跡トラフィックは除外されます。セッションごとの上限 (コンソール 1000 件/ネットワーク 2000 件) を超えると切り詰めの通知が追加されます。
242
244
 
243
245
  Analytics テンプレートは、リプレイ メタデータを SQL (`session_recordings`) に保存し、チャンクはプライベートな blob 参照 (`session_replay_chunks`) を通じて保存します。ブラウザーとエージェントはプロバイダーの URL を受け取ることはありません。再生はスコープ付きのサーバー ルートを経由し、デフォルトのエージェント ツールは要約または範囲を限定したリプレイ イベントを返すのみで、生のチャンク テーブルへのアクセスはできません。
@@ -238,6 +238,8 @@ VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE=1
238
238
  - URL은 브라우저 분석에서 사용하는 것과 동일한 `scrubUrl()` 도우미로 정제됩니다.
239
239
  - 리플레이 캡처는 웹 전용이며 옵트인 방식입니다. 네이티브 데스크톱 화면은 기록하지 않습니다.
240
240
 
241
+ 확장 프로그램과 렌더링된 이메일 콘텐츠를 포함하여 프레임워크가 관리하는 iframe은 리플레이 캡처에 포함됩니다. 기록된 프레임 내부에도 동일한 마스킹 및 차단 선택자가 적용됩니다. 타사 교차 출처 iframe은 자체 문서가 교차 출처 iframe 기록을 활성화한 호환 rrweb 레코더를 실행하지 않는 한 불투명하게 유지되며, 부모 페이지에서 브라우저의 출처 경계를 우회할 수 없습니다.
242
+
241
243
  기록하는 동안 세션 리플레이는 브라우저 콘솔 출력(`log`, `info`, `warn`, `error`, `debug` 및 window `error` / `unhandledrejection`)과 네트워크 요청 메타데이터(`fetch` 및 XHR)를 태그가 지정된 rrweb 커스텀 이벤트로 캡처하므로, 에이전트와 리플레이 뷰어가 사용자가 보고한 문제를 디버그할 수 있습니다. 리플레이가 활성화되면 캡처는 기본적으로 켜져 있으며, `sessionReplay.console` 및 `sessionReplay.network` 옵션으로 조정하거나 비활성화할 수 있습니다. 각 옵션은 불리언 또는 옵션 객체(`{ maxEvents?: number }`)를 받으며, `network`는 추가로 `captureErrorBodies`와 `maxErrorBodyLength`를 받습니다. 요청 본문과 헤더는 절대 캡처되지 않으며, 응답 본문은 5xx(서버 오류) 응답에 한해서만 경계가 지정된 정제된 스니펫으로 캡처됩니다(`captureErrorBodies`, 기본값 `true`, `maxErrorBodyLength` 문자 수로 상한 설정, 기본값 2048) — 5xx가 아닌 응답과 네트워크 실패(상태 0) 응답에는 본문이 포함되지 않습니다. URL은 정제되며, 메시지는 잘리고, 레코더 자체의 수집/추적 트래픽은 제외되며, 세션당 한도(콘솔 1000개 / 네트워크 2000개 이벤트)를 초과하면 잘림 안내가 추가됩니다.
242
244
 
243
245
  Analytics 템플릿은 리플레이 메타데이터를 SQL(`session_recordings`)에 저장하고 청크는 프라이빗 blob 참조(`session_replay_chunks`)를 통해 저장합니다. 브라우저와 에이전트는 공급자 URL을 절대 받지 않습니다. 재생은 범위가 지정된 서버 경로를 거치며, 기본 에이전트 도구는 원시 청크 테이블 접근이 아닌 요약 또는 범위가 지정된 리플레이 이벤트를 반환합니다.
@@ -238,6 +238,8 @@ Os padrões de privacidade são intencionalmente conservadores, mas ainda úteis
238
238
  - As URLs são higienizadas com o mesmo auxiliar `scrubUrl()` usado pela análise do navegador.
239
239
  - A captura de replay é somente para web e opcional; ela não grava telas de desktop nativas.
240
240
 
241
+ Os iframes gerenciados pelo framework, incluindo extensões e conteúdo de e-mail renderizado, são incluídos na captura de replay. Os mesmos seletores de mascaramento e bloqueio se aplicam dentro dos frames gravados. Um iframe de terceiros com origem diferente permanece opaco, a menos que seu próprio documento execute um gravador rrweb compatível com a gravação de iframes entre origens habilitada; a página principal não pode contornar os limites de origem do navegador.
242
+
241
243
  Durante a gravação, o replay de sessão também captura a saída do console do navegador (`log`, `info`, `warn`, `error`, `debug`, além dos eventos `error`/`unhandledrejection` da janela) e metadados de solicitações de rede (`fetch` e XHR) como eventos personalizados do rrweb marcados, para que agentes e o visualizador de replay possam depurar problemas relatados por usuários. A captura é ativada por padrão quando o replay está habilitado; ajuste ou desabilite-a com as opções `sessionReplay.console` e `sessionReplay.network`, cada uma aceitando um booleano ou um objeto de opções (`{ maxEvents?: number }`, sendo que `network` também aceita `captureErrorBodies` e `maxErrorBodyLength`). Corpos e cabeçalhos de solicitação nunca são capturados; corpos de resposta são capturados apenas como um trecho limitado e higienizado para respostas 5xx (erro de servidor) (`captureErrorBodies`, padrão `true`, limitado a `maxErrorBodyLength` caracteres, padrão 2048) — respostas que não sejam 5xx e falhas de rede (status 0) nunca carregam um corpo. As URLs são higienizadas, as mensagens são truncadas, o próprio tráfego de ingestão/rastreamento do gravador é excluído, e os orçamentos por sessão (1000 eventos de console / 2000 eventos de rede) adicionam um aviso de truncamento quando excedidos.
242
244
 
243
245
  O modelo Analytics armazena os metadados de replay em SQL (`session_recordings`) e armazena os blocos por meio de referências privadas de blob (`session_replay_chunks`). Navegadores e agentes nunca recebem URLs de provedores. A reprodução passa por rotas de servidor com escopo definido, e as ferramentas padrão do agente retornam resumos ou eventos de replay limitados, não acesso bruto à tabela de blocos.
@@ -238,6 +238,8 @@ VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE=1
238
238
  - URL 会使用与浏览器分析相同的 `scrubUrl()` 辅助函数进行清理。
239
239
  - 重放采集仅限 Web 端且为选择性加入(opt-in);不会录制原生桌面屏幕。
240
240
 
241
+ 框架管理的 iframe(包括扩展和渲染后的电子邮件内容)会纳入重放采集。录制的 frame 内同样适用遮罩和屏蔽选择器。第三方跨源 iframe 会保持不可见,除非其自身文档运行兼容的 rrweb 录制器并启用跨源 iframe 录制;父页面无法绕过浏览器的源边界。
242
+
241
243
  录制期间,会话重放还会捕获浏览器控制台输出(`log`、`info`、`warn`、`error`、`debug`,以及 window 的 `error` / `unhandledrejection`)和网络请求元数据(`fetch` 和 XHR),并将其作为带标签的 rrweb 自定义事件记录下来,以便代理和重放查看器调试用户报告的问题。启用重放后,此项捕获默认开启;可通过 `sessionReplay.console` 和 `sessionReplay.network` 选项进行调整或禁用,两者均可接受布尔值或选项对象(`{ maxEvents?: number }`,其中 `network` 还可接受 `captureErrorBodies` 和 `maxErrorBodyLength`)。请求正文和请求头永远不会被捕获;响应正文仅在 5xx(服务器错误)响应下才会被捕获,且只捕获一段有边界、经过脱敏处理的片段(`captureErrorBodies`,默认值为 `true`,长度上限为 `maxErrorBodyLength` 个字符,默认 2048)——非 5xx 响应以及网络失败(状态码 0)的响应永远不会携带正文。URL 会被清理,消息会被截断,录制器自身的上报/跟踪流量会被排除,并且每个会话的配额(1000 条控制台事件 / 2000 条网络事件)在超出时会附加截断提示。
242
244
 
243
245
  Analytics 模板将重放元数据存储在 SQL(`session_recordings`)中,并通过私有 blob 引用(`session_replay_chunks`)存储数据块。浏览器和代理永远不会收到提供商的 URL。回放通过受限的服务器路由进行,默认的代理工具返回的是摘要或有限范围的重放事件,而非原始数据块表的直接访问权限。
@@ -145,6 +145,20 @@ Netlify 背景函式是**付費方案**功能(Personal / Pro,不含免費方
145
145
 
146
146
  </Callout>
147
147
 
148
+ ## 前景自我續跑鏈:一個範圍較小、選用的退路 {#foreground-self-chain}
149
+
150
+ 還有第二個獨立旗標控制另一種續跑機制:`AGENT_CHAT_FOREGROUND_SELF_CHAIN`。持久背景執行會把整個長回合移到上面提到的 15 分鐘背景函式;相較之下,前景自我續跑鏈是讓一般(非持久背景)回合在遇到軟逾時的區塊邊界時,透過**一般**請求函式上的伺服器端自我分派來繼續,而不是依賴用戶端重新送出 `auto_continue`。
151
+
152
+ 它的組合條件與 `AGENT_CHAT_DURABLE_BACKGROUND` 相同:只有在旗標明確為真值(`true` / `1` / `yes` / `on`)、應用在託管環境中執行,且已設定 `A2A_SECRET` 時才會成立。這兩個旗標彼此獨立,不需要一致——應用可以只啟用這個範圍較小的功能,而不需要選用完整的背景函式 worker 路徑。當某個 run 已符合持久背景分派條件時,該決定會優先評估並生效;該 run 會透過背景 worker 續跑,而不會走這條路徑。
153
+
154
+ <Callout id="doc-block-fgschn1" tone="warning">
155
+
156
+ 這個旗標**預設為關閉,屬於選用功能**。一般 Netlify 函式有固定的 **60 秒**上限——遠短於上面背景函式的 15 分鐘預算——因此自我分派的後續呼叫可能會在完成前就被中止,導致還沒儲存下一段續跑內容,讓長回覆在句子中間被截斷。旗標關閉時,託管應用會改用既有的用戶端驅動 `auto_continue` 重新送出路徑,該路徑續跑速度較慢,但不會被伺服器端逾時中止。
157
+
158
+ </Callout>
159
+
160
+ 只有在確認託管環境的一般函式能在 60 秒上限內可靠完成自我分派的續跑之後,才建議啟用這個旗標。對於長時間、多步驟的回合,請優先使用上面的 `AGENT_CHAT_DURABLE_BACKGROUND`——它的背景函式預算大得多,是建議採用的路徑。
161
+
148
162
  ## 相關
149
163
 
150
164
  - [**持久恢復**](/docs/durable-resume) — 中斷的 run 如何恢復而不重複已完成的副作用(另一個永遠啟用的保護)。
@@ -238,6 +238,8 @@ VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE=1
238
238
  - URL 會使用瀏覽器分析所用的同一個 `scrubUrl()` 輔助函式進行清理。
239
239
  - 重播擷取僅限於網頁,且為選擇加入;它不會錄製原生桌面畫面。
240
240
 
241
+ 由框架管理的 iframe(包括擴充功能與轉譯後的電子郵件內容)會納入重播擷取。錄製的 frame 內同樣套用遮罩與封鎖選擇器。第三方跨來源 iframe 會維持不透明,除非其本身的文件執行相容的 rrweb 記錄器並啟用跨來源 iframe 錄製;父頁面無法繞過瀏覽器的來源界線。
242
+
241
243
  在錄製期間,工作階段重播還會擷取瀏覽器主控台輸出(`log`、`info`、`warn`、`error`、`debug`,以及視窗的 `error`/`unhandledrejection`)與網路請求元資料(`fetch` 與 XHR),並以帶標籤的 rrweb 自訂事件形式儲存,讓代理與重播檢視器能夠偵錯使用者回報的問題。啟用重播後,擷取功能預設為開啟;可透過 `sessionReplay.console` 與 `sessionReplay.network` 選項進行調整或停用,這兩個選項都接受布林值或選項物件(`{ maxEvents?: number }`,其中 `network` 另外還可接受 `captureErrorBodies` 與 `maxErrorBodyLength`)。請求主體與標頭永遠不會被擷取;回應主體僅在 5xx(伺服器錯誤)回應時才會被擷取,且僅擷取一段有邊界、經過遮蔽處理的片段(`captureErrorBodies`,預設為 `true`,上限為 `maxErrorBodyLength` 個字元,預設 2048)——非 5xx 及網路失敗(狀態碼 0)的回應永遠不會帶有主體。URL 會被清理,訊息會被截斷,記錄器自身的擷取/追蹤流量會被排除,且每個工作階段的預算(1000 個主控台事件/2000 個網路事件)在超過時會加上截斷提示。
242
244
 
243
245
  Analytics 範本將重播中繼資料儲存在 SQL(`session_recordings`)中,並透過私有 blob 參照(`session_replay_chunks`)儲存區塊。瀏覽器與代理永遠不會收到提供者 URL。播放透過範圍受限的伺服器路由進行,且預設代理工具傳回摘要或範圍受限的重播事件,而非原始區塊資料表存取權。
@@ -237,6 +237,8 @@ Privacy defaults are intentionally conservative but still useful for playback:
237
237
  - URLs are scrubbed with the same `scrubUrl()` helper used by browser analytics.
238
238
  - Replay capture is web-only and opt-in; it does not record native desktop screens.
239
239
 
240
+ Framework-owned iframes, including extensions and rendered email content, are included in replay capture. The same masking and blocking selectors apply inside recorded frames. A third-party cross-origin iframe remains opaque unless its own document runs a compatible rrweb recorder with cross-origin iframe recording enabled; browser origin boundaries cannot be bypassed from the parent page.
241
+
240
242
  While recording, session replay also captures browser console output (`log`, `info`, `warn`, `error`, `debug`, plus window `error` / `unhandledrejection`) and network request metadata (`fetch` and XHR) as tagged rrweb custom events, so agents and the replay viewer can debug user-reported issues. Capture is on by default when replay is enabled; tune or disable it with the `sessionReplay.console` and `sessionReplay.network` options, each accepting a boolean or an options object (`{ maxEvents?: number }`, with `network` additionally accepting `captureErrorBodies` and `maxErrorBodyLength`). Request bodies and headers are never captured; response bodies are captured only as a bounded, redacted snippet for 5xx (server error) responses (`captureErrorBodies`, default true, capped at `maxErrorBodyLength` chars, default 2048) — non-5xx and network-failure responses never carry a body. URLs are scrubbed, messages are truncated, the recorder's own ingest/tracking traffic is excluded, and per-session budgets (1000 console / 2000 network events) add a truncation notice when exceeded.
241
243
 
242
244
  The Analytics template stores replay metadata in SQL (`session_recordings`) and stores chunks through private blob refs (`session_replay_chunks`). Browsers and agents never receive provider URLs. Playback goes through scoped server routes and the default agent tools return summaries or bounded replay events, not raw chunk table access.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.98.4",
3
+ "version": "0.98.5",
4
4
  "description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -364,17 +364,18 @@ export function isAgentChatDurableBackgroundEnabled(options?: {
364
364
  }
365
365
 
366
366
  /**
367
- * Env flag for the FOREGROUND server-driven self-chain. DEFAULT-ON for hosted
368
- * deployments with `A2A_SECRET`: unset/empty/unknown means enabled, and an app
369
- * opts OUT with an explicit falsy value (`false`/`0`/`no`/`off`). Deliberately
370
- * kept separate from `AGENT_CHAT_DURABLE_BACKGROUND` so this narrower
371
- * capability can be disabled independently of the full durable-background
372
- * worker path.
367
+ * Env flag for the FOREGROUND server-driven self-chain. DEFAULT-OFF: a hosted
368
+ * app must explicitly opt in with a truthy value (`true`/`1`/`yes`/`on`). A
369
+ * regular Netlify function has a fixed 60-second wall, and a self-dispatched
370
+ * successor can otherwise be killed before it persists its next continuation.
371
+ * Keep this separate from `AGENT_CHAT_DURABLE_BACKGROUND` so the experimental
372
+ * regular-function chain can be enabled independently after its deployment is
373
+ * proven safe.
373
374
  */
374
375
  export const AGENT_CHAT_FOREGROUND_SELF_CHAIN_ENV =
375
376
  "AGENT_CHAT_FOREGROUND_SELF_CHAIN";
376
377
 
377
- function isForegroundSelfChainExplicitlyDisabled(): boolean {
378
+ function isForegroundSelfChainExplicitlyEnabled(): boolean {
378
379
  // Read the literal key (not `process.env[CONST]`) so guard:no-env-credentials
379
380
  // can statically verify it against the allowlisted `AGENT_*` prefix. Keep this
380
381
  // in sync with AGENT_CHAT_FOREGROUND_SELF_CHAIN_ENV.
@@ -382,10 +383,10 @@ function isForegroundSelfChainExplicitlyDisabled(): boolean {
382
383
  if (raw == null) return false;
383
384
  const normalized = raw.trim().toLowerCase();
384
385
  return (
385
- normalized === "0" ||
386
- normalized === "false" ||
387
- normalized === "no" ||
388
- normalized === "off"
386
+ normalized === "1" ||
387
+ normalized === "true" ||
388
+ normalized === "yes" ||
389
+ normalized === "on"
389
390
  );
390
391
  }
391
392
 
@@ -395,10 +396,9 @@ function isForegroundSelfChainExplicitlyDisabled(): boolean {
395
396
  * server-side self-dispatch on the REGULAR function (not a Netlify
396
397
  * `-background` function) instead of depending on the client to re-POST
397
398
  * `auto_continue`. Composes exactly like `isAgentChatDurableBackgroundEnabled`:
398
- * true when the runtime is hosted AND `A2A_SECRET` is configured (the HMAC
399
- * handoff authenticates the self-dispatch), unless the env flag is explicitly
400
- * falsy. False otherwise — and false means the existing client-driven
401
- * `auto_continue` re-POST path is used unchanged, byte-for-byte.
399
+ * true only when the env flag is explicitly truthy, the runtime is hosted, and
400
+ * `A2A_SECRET` is configured (the HMAC handoff authenticates the dispatch).
401
+ * False means the existing client-driven `auto_continue` re-POST path is used.
402
402
  *
403
403
  * Deliberately independent of `isAgentChatDurableBackgroundEnabled`: an app can
404
404
  * use this narrower capability without opting into the full 15-min
@@ -410,7 +410,7 @@ function isForegroundSelfChainExplicitlyDisabled(): boolean {
410
410
  */
411
411
  export function isAgentChatForegroundSelfChainEnabled(): boolean {
412
412
  return (
413
- !isForegroundSelfChainExplicitlyDisabled() &&
413
+ isForegroundSelfChainExplicitlyEnabled() &&
414
414
  isHostedRuntimeForDurableBackground() &&
415
415
  hasConfiguredA2ASecret()
416
416
  );
@@ -17,7 +17,11 @@ import {
17
17
  readDeployCredentialEnv,
18
18
  recordProviderCredentialAuthFailure,
19
19
  } from "../../server/credential-provider.js";
20
- import { normalizeReasoningEffortForModel } from "../../shared/reasoning-effort.js";
20
+ import {
21
+ anthropicManualThinkingBudget,
22
+ normalizeReasoningEffortForModel,
23
+ supportsClaudeAdaptiveThinking,
24
+ } from "../../shared/reasoning-effort.js";
21
25
  import { AI_SDK_MODEL_CONFIG, type AISDKProvider } from "../model-config.js";
22
26
  import {
23
27
  clampThinkingBudgetTokens,
@@ -316,13 +320,26 @@ class AISDKEngine implements AgentEngine {
316
320
  const explicitThinking = (
317
321
  providerOpts.anthropic as { thinking?: unknown } | undefined
318
322
  )?.thinking;
319
- providerOpts.anthropic = {
320
- ...((providerOpts.anthropic as object) ?? {}),
321
- thinking: explicitThinking ?? { type: "adaptive" },
322
- ...(explicitThinking
323
- ? {}
324
- : { outputConfig: { effort: reasoningEffort } }),
325
- };
323
+ if (explicitThinking || supportsClaudeAdaptiveThinking(opts.model)) {
324
+ providerOpts.anthropic = {
325
+ ...((providerOpts.anthropic as object) ?? {}),
326
+ thinking: explicitThinking ?? { type: "adaptive" },
327
+ ...(explicitThinking
328
+ ? {}
329
+ : { outputConfig: { effort: reasoningEffort } }),
330
+ };
331
+ } else {
332
+ const budgetTokens = clampThinkingBudgetTokens(
333
+ anthropicManualThinkingBudget(reasoningEffort),
334
+ resolvedMaxOutputTokens,
335
+ );
336
+ providerOpts.anthropic = {
337
+ ...((providerOpts.anthropic as object) ?? {}),
338
+ ...(budgetTokens === undefined
339
+ ? {}
340
+ : { thinking: { type: "enabled", budgetTokens } }),
341
+ };
342
+ }
326
343
  } else if (this.provider === "openai") {
327
344
  providerOpts.openai = {
328
345
  ...((providerOpts.openai as object) ?? {}),
@@ -13,7 +13,11 @@ import {
13
13
  readDeployCredentialEnv,
14
14
  recordProviderCredentialAuthFailure,
15
15
  } from "../../server/credential-provider.js";
16
- import { normalizeReasoningEffortForModel } from "../../shared/reasoning-effort.js";
16
+ import {
17
+ anthropicManualThinkingBudget,
18
+ normalizeReasoningEffortForModel,
19
+ supportsClaudeAdaptiveThinking,
20
+ } from "../../shared/reasoning-effort.js";
17
21
  import { ANTHROPIC_MODEL_CONFIG } from "../model-config.js";
18
22
  import {
19
23
  LLM_MISSING_CREDENTIALS_ERROR_CODE,
@@ -105,8 +109,18 @@ class AnthropicEngine implements AgentEngine {
105
109
  opts.reasoningEffort,
106
110
  );
107
111
  if (reasoningEffort && !extra.thinking) {
108
- extra.thinking = { type: "adaptive" };
109
- extra.output_config = { effort: reasoningEffort };
112
+ if (supportsClaudeAdaptiveThinking(opts.model)) {
113
+ extra.thinking = { type: "adaptive" };
114
+ extra.output_config = { effort: reasoningEffort };
115
+ } else {
116
+ const budgetTokens = clampThinkingBudgetTokens(
117
+ anthropicManualThinkingBudget(reasoningEffort),
118
+ resolvedMaxOutputTokens,
119
+ );
120
+ if (budgetTokens !== undefined) {
121
+ extra.thinking = { type: "enabled", budget_tokens: budgetTokens };
122
+ }
123
+ }
110
124
  }
111
125
 
112
126
  // Apply prompt caching to the system prompt and tools by default.
@@ -71,12 +71,12 @@ export function resolveEmptyResponseRetryMaxOutputTokens(
71
71
  // room for the actual visible completion. This clamp guarantees at least
72
72
  // max(8000, 40% of maxOutputTokens) tokens of non-thinking headroom.
73
73
  //
74
- // Note: this only applies to the explicit numeric-budget "enabled" config.
75
- // Anthropic's `type: "adaptive"` thinking config (used by the
76
- // reasoningEffort -> output_config.effort mapping in anthropic-engine.ts /
77
- // ai-sdk-engine.ts) has NO budget_tokens field at all per the SDK types, so
78
- // there is nothing to clamp there those callers rely on the raised
79
- // maxOutputTokens ceiling above instead.
74
+ // Note: this applies to every numeric-budget "enabled" config, including the
75
+ // compatibility fallback for Claude models that do not support adaptive
76
+ // thinking. Anthropic's `type: "adaptive"` config (used by the
77
+ // reasoningEffort -> output_config.effort mapping for supported models) has
78
+ // NO budget_tokens field at all per the SDK types, so there is nothing to
79
+ // clamp there — those callers rely on the raised maxOutputTokens ceiling.
80
80
  // ---------------------------------------------------------------------------
81
81
 
82
82
  /** Anthropic's documented minimum extended-thinking budget. */