@agent-native/core 0.98.4 → 0.98.6

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 (314) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +28 -0
  3. package/corpus/core/docs/content/durable-background-runs.mdx +37 -0
  4. package/corpus/core/docs/content/external-agents.mdx +62 -7
  5. package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +38 -7
  6. package/corpus/core/docs/content/locales/ar-SA/tracking.mdx +2 -0
  7. package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +39 -7
  8. package/corpus/core/docs/content/locales/de-DE/tracking.mdx +2 -0
  9. package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +39 -7
  10. package/corpus/core/docs/content/locales/es-ES/tracking.mdx +2 -0
  11. package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +39 -7
  12. package/corpus/core/docs/content/locales/fr-FR/tracking.mdx +4 -2
  13. package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +38 -7
  14. package/corpus/core/docs/content/locales/hi-IN/tracking.mdx +2 -0
  15. package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +38 -7
  16. package/corpus/core/docs/content/locales/ja-JP/tracking.mdx +2 -0
  17. package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +38 -7
  18. package/corpus/core/docs/content/locales/ko-KR/tracking.mdx +2 -0
  19. package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +39 -7
  20. package/corpus/core/docs/content/locales/pt-BR/tracking.mdx +2 -0
  21. package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +37 -7
  22. package/corpus/core/docs/content/locales/zh-CN/tracking.mdx +2 -0
  23. package/corpus/core/docs/content/locales/zh-TW/durable-background-runs.mdx +14 -0
  24. package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +37 -7
  25. package/corpus/core/docs/content/locales/zh-TW/tracking.mdx +2 -0
  26. package/corpus/core/docs/content/tracking.mdx +2 -0
  27. package/corpus/core/package.json +1 -1
  28. package/corpus/core/src/a2a/handlers.ts +95 -21
  29. package/corpus/core/src/a2a/task-store.ts +65 -3
  30. package/corpus/core/src/agent/durable-background.ts +16 -16
  31. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +25 -8
  32. package/corpus/core/src/agent/engine/anthropic-engine.ts +17 -3
  33. package/corpus/core/src/agent/engine/output-tokens.ts +6 -6
  34. package/corpus/core/src/agent/production-agent.ts +200 -27
  35. package/corpus/core/src/agent/run-manager.ts +81 -1
  36. package/corpus/core/src/agent/run-store.ts +301 -41
  37. package/corpus/core/src/client/AgentPanel.tsx +6 -2
  38. package/corpus/core/src/client/AssistantChat.tsx +364 -69
  39. package/corpus/core/src/client/agent-chat-adapter.ts +169 -1
  40. package/corpus/core/src/client/chat/message-components.tsx +3 -0
  41. package/corpus/core/src/client/chat/tool-call-display.tsx +20 -36
  42. package/corpus/core/src/client/conversation/use-near-bottom-autoscroll.ts +7 -0
  43. package/corpus/core/src/client/extensions/AgentNativeExtensionFrame.tsx +2 -0
  44. package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +2 -0
  45. package/corpus/core/src/client/extensions/ExtensionEditor.tsx +9 -2
  46. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +2 -0
  47. package/corpus/core/src/client/extensions/InlineExtensionFrame.tsx +2 -0
  48. package/corpus/core/src/client/extensions/portable-extension.ts +2 -0
  49. package/corpus/core/src/client/session-replay.ts +361 -29
  50. package/corpus/core/src/client/sse-event-processor.ts +43 -1
  51. package/corpus/core/src/demo/actions/toggle-demo-mode.ts +1 -1
  52. package/corpus/core/src/demo/config.ts +6 -6
  53. package/corpus/core/src/demo/fetch-interceptor.ts +13 -4
  54. package/corpus/core/src/demo/redact.ts +13 -149
  55. package/corpus/core/src/extensions/html-shell.ts +3 -0
  56. package/corpus/core/src/extensions/session-replay-iframe.ts +131 -0
  57. package/corpus/core/src/integrations/adapters/slack.ts +123 -13
  58. package/corpus/core/src/integrations/identity-links-store.ts +210 -0
  59. package/corpus/core/src/integrations/identity.ts +132 -0
  60. package/corpus/core/src/integrations/index.ts +6 -0
  61. package/corpus/core/src/integrations/plugin.ts +58 -1
  62. package/corpus/core/src/integrations/types.ts +7 -0
  63. package/corpus/core/src/mcp/build-server.ts +127 -22
  64. package/corpus/core/src/mcp/external-agent-policy.ts +18 -0
  65. package/corpus/core/src/mcp/index.ts +1 -0
  66. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +1 -20
  67. package/corpus/core/src/server/agent-chat/plugin-options.ts +12 -1
  68. package/corpus/core/src/server/agent-chat/script-entries.ts +20 -3
  69. package/corpus/core/src/server/agent-chat-plugin.ts +3 -0
  70. package/corpus/core/src/session-replay-iframe-protocol.ts +58 -0
  71. package/corpus/core/src/shared/reasoning-effort.ts +35 -0
  72. package/corpus/core/src/styles/agent-conversation.css +26 -0
  73. package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +34 -5
  74. package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
  75. package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +30 -21
  76. package/corpus/templates/analytics/AGENTS.md +27 -0
  77. package/corpus/templates/analytics/actions/create-session-replay-agent-link.ts +0 -1
  78. package/corpus/templates/analytics/actions/get-error-issue.ts +1 -0
  79. package/corpus/templates/analytics/actions/get-session-replay-summary.ts +1 -0
  80. package/corpus/templates/analytics/actions/get-session-replay-timeline.ts +40 -0
  81. package/corpus/templates/analytics/actions/list-error-issues.ts +13 -0
  82. package/corpus/templates/analytics/actions/list-session-recordings.ts +1 -0
  83. package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +4 -0
  84. package/corpus/templates/analytics/app/global.css +2 -2
  85. package/corpus/templates/analytics/app/hooks/use-dashboard-chat-context.ts +41 -4
  86. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +52 -203
  87. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +69 -16
  88. package/corpus/templates/analytics/changelog/2026-07-12-analytics-chat-retries-before-showing-a-generic-no-data-mess.md +6 -0
  89. package/corpus/templates/analytics/changelog/2026-07-12-analytics-sessions-search-no-longer-loses-fast-keystrokes-an.md +6 -0
  90. package/corpus/templates/analytics/changelog/2026-07-12-chart-selection-respects-chat-state.md +6 -0
  91. package/corpus/templates/analytics/changelog/2026-07-12-connected-external-agents-can-now-look-up-sessions-error-iss.md +6 -0
  92. package/corpus/templates/analytics/changelog/2026-07-12-demo-mode-anonymizes-error-reporting-emails.md +6 -0
  93. package/corpus/templates/analytics/changelog/2026-07-12-session-identities-stay-visible-when-demo-mode-is-off.md +6 -0
  94. package/corpus/templates/analytics/changelog/2026-07-12-session-replays-show-iframe-content.md +6 -0
  95. package/corpus/templates/analytics/netlify.toml +0 -3
  96. package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +14 -0
  97. package/corpus/templates/analytics/server/lib/error-capture.ts +101 -2
  98. package/corpus/templates/analytics/server/lib/real-data-actions.ts +24 -0
  99. package/corpus/templates/analytics/server/lib/session-replay-agent-context.ts +49 -17
  100. package/corpus/templates/analytics/server/lib/session-replay.ts +18 -16
  101. package/corpus/templates/analytics/server/plugins/agent-chat.ts +43 -6
  102. package/corpus/templates/analytics/server/plugins/db.ts +15 -0
  103. package/corpus/templates/assets/app/global.css +1 -1
  104. package/corpus/templates/brain/app/global.css +2 -2
  105. package/corpus/templates/brain/changelog/2026-07-12-fix-long-response-progress.md +6 -0
  106. package/corpus/templates/forms/app/components/CloudUpgrade.tsx +1 -1
  107. package/corpus/templates/forms/app/components/ThemeToggle.tsx +22 -6
  108. package/corpus/templates/forms/app/components/builder/FieldPropertiesPanel.tsx +5 -5
  109. package/corpus/templates/forms/app/components/builder/FieldRenderer.tsx +3 -3
  110. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +16 -16
  111. package/corpus/templates/forms/app/global.css +164 -13
  112. package/corpus/templates/forms/app/pages/AskPage.tsx +35 -13
  113. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +143 -67
  114. package/corpus/templates/forms/app/pages/FormFillPage.tsx +44 -11
  115. package/corpus/templates/forms/app/pages/FormsListPage.tsx +42 -24
  116. package/corpus/templates/forms/app/pages/ResponseInsightsPage.tsx +28 -15
  117. package/corpus/templates/forms/app/pages/ResponsesPage.tsx +46 -20
  118. package/corpus/templates/forms/app/routes/_app.settings.tsx +1 -1
  119. package/corpus/templates/forms/changelog/2026-07-12-ask-forms-suggestions-now-sit-beneath-the-composer-for-a-tig.md +6 -0
  120. package/corpus/templates/forms/changelog/2026-07-12-builder-response-tables-now-fill-the-view-without-a-redundan.md +6 -0
  121. package/corpus/templates/forms/changelog/2026-07-12-form-builder-surfaces-are-calmer-fields-stay-stable-on-hover.md +6 -0
  122. package/corpus/templates/forms/changelog/2026-07-12-response-tables-now-fill-the-available-pane-with-a-flexible-.md +6 -0
  123. package/corpus/templates/forms/changelog/2026-07-12-smoother-more-tactile-controls-throughout-animated-icon-and-.md +6 -0
  124. package/corpus/templates/mail/AGENTS.md +3 -1
  125. package/corpus/templates/mail/app/components/email/EmailThread.tsx +21 -13
  126. package/corpus/templates/mail/app/components/email/email-iframe-document.ts +18 -0
  127. package/corpus/templates/mail/server/lib/mail-integrations.ts +3 -0
  128. package/dist/a2a/handlers.d.ts.map +1 -1
  129. package/dist/a2a/handlers.js +84 -15
  130. package/dist/a2a/handlers.js.map +1 -1
  131. package/dist/a2a/task-store.d.ts +20 -1
  132. package/dist/a2a/task-store.d.ts.map +1 -1
  133. package/dist/a2a/task-store.js +57 -4
  134. package/dist/a2a/task-store.js.map +1 -1
  135. package/dist/agent/durable-background.d.ts +10 -10
  136. package/dist/agent/durable-background.d.ts.map +1 -1
  137. package/dist/agent/durable-background.js +16 -16
  138. package/dist/agent/durable-background.js.map +1 -1
  139. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  140. package/dist/agent/engine/ai-sdk-engine.js +19 -8
  141. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  142. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  143. package/dist/agent/engine/anthropic-engine.js +11 -3
  144. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  145. package/dist/agent/engine/output-tokens.js +6 -6
  146. package/dist/agent/engine/output-tokens.js.map +1 -1
  147. package/dist/agent/production-agent.d.ts +52 -0
  148. package/dist/agent/production-agent.d.ts.map +1 -1
  149. package/dist/agent/production-agent.js +154 -26
  150. package/dist/agent/production-agent.js.map +1 -1
  151. package/dist/agent/run-manager.d.ts +9 -0
  152. package/dist/agent/run-manager.d.ts.map +1 -1
  153. package/dist/agent/run-manager.js +71 -1
  154. package/dist/agent/run-manager.js.map +1 -1
  155. package/dist/agent/run-store.d.ts +9 -0
  156. package/dist/agent/run-store.d.ts.map +1 -1
  157. package/dist/agent/run-store.js +243 -48
  158. package/dist/agent/run-store.js.map +1 -1
  159. package/dist/client/AgentPanel.d.ts.map +1 -1
  160. package/dist/client/AgentPanel.js +6 -2
  161. package/dist/client/AgentPanel.js.map +1 -1
  162. package/dist/client/AssistantChat.d.ts +21 -0
  163. package/dist/client/AssistantChat.d.ts.map +1 -1
  164. package/dist/client/AssistantChat.js +298 -67
  165. package/dist/client/AssistantChat.js.map +1 -1
  166. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  167. package/dist/client/agent-chat-adapter.js +146 -1
  168. package/dist/client/agent-chat-adapter.js.map +1 -1
  169. package/dist/client/chat/message-components.d.ts.map +1 -1
  170. package/dist/client/chat/message-components.js +2 -1
  171. package/dist/client/chat/message-components.js.map +1 -1
  172. package/dist/client/chat/tool-call-display.d.ts +3 -1
  173. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  174. package/dist/client/chat/tool-call-display.js +13 -37
  175. package/dist/client/chat/tool-call-display.js.map +1 -1
  176. package/dist/client/conversation/use-near-bottom-autoscroll.d.ts +1 -0
  177. package/dist/client/conversation/use-near-bottom-autoscroll.d.ts.map +1 -1
  178. package/dist/client/conversation/use-near-bottom-autoscroll.js +6 -0
  179. package/dist/client/conversation/use-near-bottom-autoscroll.js.map +1 -1
  180. package/dist/client/extensions/AgentNativeExtensionFrame.d.ts.map +1 -1
  181. package/dist/client/extensions/AgentNativeExtensionFrame.js +2 -1
  182. package/dist/client/extensions/AgentNativeExtensionFrame.js.map +1 -1
  183. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  184. package/dist/client/extensions/EmbeddedExtension.js +2 -1
  185. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  186. package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
  187. package/dist/client/extensions/ExtensionEditor.js +5 -2
  188. package/dist/client/extensions/ExtensionEditor.js.map +1 -1
  189. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  190. package/dist/client/extensions/ExtensionViewer.js +2 -1
  191. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  192. package/dist/client/extensions/InlineExtensionFrame.d.ts.map +1 -1
  193. package/dist/client/extensions/InlineExtensionFrame.js +2 -1
  194. package/dist/client/extensions/InlineExtensionFrame.js.map +1 -1
  195. package/dist/client/extensions/portable-extension.d.ts.map +1 -1
  196. package/dist/client/extensions/portable-extension.js +2 -0
  197. package/dist/client/extensions/portable-extension.js.map +1 -1
  198. package/dist/client/session-replay.d.ts.map +1 -1
  199. package/dist/client/session-replay.js +308 -29
  200. package/dist/client/session-replay.js.map +1 -1
  201. package/dist/client/sse-event-processor.d.ts +5 -0
  202. package/dist/client/sse-event-processor.d.ts.map +1 -1
  203. package/dist/client/sse-event-processor.js +37 -1
  204. package/dist/client/sse-event-processor.js.map +1 -1
  205. package/dist/collab/routes.d.ts +1 -1
  206. package/dist/demo/actions/toggle-demo-mode.js +1 -1
  207. package/dist/demo/actions/toggle-demo-mode.js.map +1 -1
  208. package/dist/demo/config.js +6 -6
  209. package/dist/demo/config.js.map +1 -1
  210. package/dist/demo/fetch-interceptor.d.ts.map +1 -1
  211. package/dist/demo/fetch-interceptor.js +13 -4
  212. package/dist/demo/fetch-interceptor.js.map +1 -1
  213. package/dist/demo/redact.d.ts +7 -7
  214. package/dist/demo/redact.d.ts.map +1 -1
  215. package/dist/demo/redact.js +8 -145
  216. package/dist/demo/redact.js.map +1 -1
  217. package/dist/extensions/html-shell.d.ts.map +1 -1
  218. package/dist/extensions/html-shell.js +2 -0
  219. package/dist/extensions/html-shell.js.map +1 -1
  220. package/dist/extensions/session-replay-iframe.d.ts +10 -0
  221. package/dist/extensions/session-replay-iframe.d.ts.map +1 -0
  222. package/dist/extensions/session-replay-iframe.js +121 -0
  223. package/dist/extensions/session-replay-iframe.js.map +1 -0
  224. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  225. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  226. package/dist/integrations/adapters/slack.js +98 -13
  227. package/dist/integrations/adapters/slack.js.map +1 -1
  228. package/dist/integrations/identity-links-store.d.ts +23 -0
  229. package/dist/integrations/identity-links-store.d.ts.map +1 -0
  230. package/dist/integrations/identity-links-store.js +158 -0
  231. package/dist/integrations/identity-links-store.js.map +1 -0
  232. package/dist/integrations/identity.d.ts +11 -0
  233. package/dist/integrations/identity.d.ts.map +1 -0
  234. package/dist/integrations/identity.js +100 -0
  235. package/dist/integrations/identity.js.map +1 -0
  236. package/dist/integrations/index.d.ts +2 -0
  237. package/dist/integrations/index.d.ts.map +1 -1
  238. package/dist/integrations/index.js +2 -0
  239. package/dist/integrations/index.js.map +1 -1
  240. package/dist/integrations/plugin.d.ts.map +1 -1
  241. package/dist/integrations/plugin.js +43 -1
  242. package/dist/integrations/plugin.js.map +1 -1
  243. package/dist/integrations/types.d.ts +6 -0
  244. package/dist/integrations/types.d.ts.map +1 -1
  245. package/dist/integrations/types.js.map +1 -1
  246. package/dist/mcp/build-server.d.ts +9 -2
  247. package/dist/mcp/build-server.d.ts.map +1 -1
  248. package/dist/mcp/build-server.js +97 -20
  249. package/dist/mcp/build-server.js.map +1 -1
  250. package/dist/mcp/external-agent-policy.d.ts +19 -0
  251. package/dist/mcp/external-agent-policy.d.ts.map +1 -0
  252. package/dist/mcp/external-agent-policy.js +2 -0
  253. package/dist/mcp/external-agent-policy.js.map +1 -0
  254. package/dist/mcp/index.d.ts +1 -0
  255. package/dist/mcp/index.d.ts.map +1 -1
  256. package/dist/mcp/index.js.map +1 -1
  257. package/dist/notifications/routes.d.ts +1 -1
  258. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  259. package/dist/scripts/agent-engines/list-agent-engines.js +1 -19
  260. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  261. package/dist/server/agent-chat/plugin-options.d.ts +11 -1
  262. package/dist/server/agent-chat/plugin-options.d.ts.map +1 -1
  263. package/dist/server/agent-chat/plugin-options.js.map +1 -1
  264. package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
  265. package/dist/server/agent-chat/script-entries.js +16 -2
  266. package/dist/server/agent-chat/script-entries.js.map +1 -1
  267. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  268. package/dist/server/agent-chat-plugin.js +3 -0
  269. package/dist/server/agent-chat-plugin.js.map +1 -1
  270. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  271. package/dist/server/transcribe-voice.d.ts +1 -1
  272. package/dist/session-replay-iframe-protocol.d.ts +36 -0
  273. package/dist/session-replay-iframe-protocol.d.ts.map +1 -0
  274. package/dist/session-replay-iframe-protocol.js +24 -0
  275. package/dist/session-replay-iframe-protocol.js.map +1 -0
  276. package/dist/shared/reasoning-effort.d.ts +11 -0
  277. package/dist/shared/reasoning-effort.d.ts.map +1 -1
  278. package/dist/shared/reasoning-effort.js +36 -0
  279. package/dist/shared/reasoning-effort.js.map +1 -1
  280. package/dist/styles/agent-conversation.css +26 -0
  281. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +34 -5
  282. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
  283. package/docs/content/durable-background-runs.mdx +37 -0
  284. package/docs/content/external-agents.mdx +62 -7
  285. package/docs/content/locales/ar-SA/external-agents.mdx +38 -7
  286. package/docs/content/locales/ar-SA/tracking.mdx +2 -0
  287. package/docs/content/locales/de-DE/external-agents.mdx +39 -7
  288. package/docs/content/locales/de-DE/tracking.mdx +2 -0
  289. package/docs/content/locales/es-ES/external-agents.mdx +39 -7
  290. package/docs/content/locales/es-ES/tracking.mdx +2 -0
  291. package/docs/content/locales/fr-FR/external-agents.mdx +39 -7
  292. package/docs/content/locales/fr-FR/tracking.mdx +4 -2
  293. package/docs/content/locales/hi-IN/external-agents.mdx +38 -7
  294. package/docs/content/locales/hi-IN/tracking.mdx +2 -0
  295. package/docs/content/locales/ja-JP/external-agents.mdx +38 -7
  296. package/docs/content/locales/ja-JP/tracking.mdx +2 -0
  297. package/docs/content/locales/ko-KR/external-agents.mdx +38 -7
  298. package/docs/content/locales/ko-KR/tracking.mdx +2 -0
  299. package/docs/content/locales/pt-BR/external-agents.mdx +39 -7
  300. package/docs/content/locales/pt-BR/tracking.mdx +2 -0
  301. package/docs/content/locales/zh-CN/external-agents.mdx +37 -7
  302. package/docs/content/locales/zh-CN/tracking.mdx +2 -0
  303. package/docs/content/locales/zh-TW/durable-background-runs.mdx +14 -0
  304. package/docs/content/locales/zh-TW/external-agents.mdx +37 -7
  305. package/docs/content/locales/zh-TW/tracking.mdx +2 -0
  306. package/docs/content/tracking.mdx +2 -0
  307. package/package.json +2 -2
  308. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +34 -5
  309. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +0 -15
  310. package/corpus/core/src/observability/hosted-model-experiment.ts +0 -118
  311. package/dist/observability/hosted-model-experiment.d.ts +0 -39
  312. package/dist/observability/hosted-model-experiment.d.ts.map +0 -1
  313. package/dist/observability/hosted-model-experiment.js +0 -90
  314. package/dist/observability/hosted-model-experiment.js.map +0 -1
@@ -324,8 +324,9 @@ MCP सर्वर प्रत्येक कॉलर को डिफ़ॉ
324
324
  </div>
325
325
  </div>
326
326
  <p class="diagram-muted note">
327
- <code>tool-search</code> reaches any full-tier tool on demand &mdash; so the
328
- compact default keeps context small without hiding capability.
327
+ <code>tool-search</code> मांग पर पूर्ण-स्तरीय टूल खोजता है; निष्पादन के लिए
328
+ कनेक्टर कैटलॉग या प्रमाणित-पठन नीति की अनुमति अब भी आवश्यक है, जब तक कॉलर
329
+ स्पष्ट रूप से पूर्ण स्तर नहीं चुनता।
329
330
  </p>
330
331
  ```
331
332
 
@@ -363,15 +364,45 @@ MCP सर्वर प्रत्येक कॉलर को डिफ़ॉ
363
364
 
364
365
  ### कॉम्पैक्ट / कनेक्टर टियर (डिफ़ॉल्ट) {#connector-tier}
365
366
 
366
- डिफ़ॉल्ट रूप से प्रत्येक कनेक्टेड एजेंट एक छोटा, क्यूरेटेड कैटलॉग देखता है (~20-30 टूल बनाम पूर्ण सतह में ~105):
367
+ डिफ़ॉल्ट रूप से प्रत्येक कनेक्टेड एजेंट एक छोटा, क्यूरेटेड कैटलॉग देखता है (~20-30 टूल बनाम पूर्ण सतह में ~105)। ऐप या तो स्पष्ट `connectorCatalog` बनाए रख सकते हैं, या प्रमाणित-पठन नीति चुन सकते हैं:
367
368
 
368
369
  - **टेम्पलेट-घोषित ऐप actions** — सुरक्षित ऐप-स्तरीय अनुमति-सूची। योजना के लिए जो `create-visual-plan`, `get-visual-plan`, `share-resource`, `navigate`, `tool-search`, और समान है।
369
370
  - **अंतर्निहित क्रॉस-ऐप टूल** - `list_apps`, `open_app`, `ask_app`, `create_embed_session`।
370
- - **`tool-search`** हमेशा मौजूद रहता है, इसलिए सूची के बाहर की कोई भी चीज़ मांग पर उपलब्ध रहती है (नीचे देखें)।
371
+ - **`tool-search`** खोज के लिए हमेशा मौजूद रहता है। खोजे गए action को `tools/call` से चलाने से पहले कनेक्टर कैटलॉग में होना, प्रमाणित-पठन नीति में शामिल होना, या स्पष्ट पूर्ण-कैटलॉग ऑप्ट-इन से सक्षम होना आवश्यक है।
371
372
 
372
- सूची से बाहर के उपकरण - उदाहरण के लिए `db-exec`, `seed-*`, एक्सटेंशन सूट, ब्राउज़र-सत्र उपकरण और संदर्भ-एक्सरे उपकरण - विज्ञापित नहीं किए जाते हैं, और जब तक कॉल करने वाले ने पूरी सूची में शामिल नहीं किया है, तब तक उन पर कॉल को "अज्ञात टूल" के साथ अस्वीकार कर दिया जाता है। यह प्रत्येक कनेक्टेड एजेंट की संदर्भ विंडो को छोटा रखता है और फ़ुटगन को हटा देता है जो केवल एकल-किरायेदार स्थानीय विकास के लिए सुरक्षित हैं। कनेक्टर टियर सक्रिय है **जब भी कोई टेम्प्लेट `connectorCatalog` घोषित करता है** - यह किसी पर्यावरण चर के पीछे गेट नहीं किया जाता है।
373
+ सूची से बाहर के उपकरण - उदाहरण के लिए `db-exec`, `seed-*`, एक्सटेंशन सूट, ब्राउज़र-सत्र उपकरण और संदर्भ-एक्सरे उपकरण - विज्ञापित नहीं किए जाते हैं, और जब तक कॉल करने वाले ने पूरी सूची में शामिल नहीं किया है, तब तक उन पर कॉल को "अज्ञात टूल" के साथ अस्वीकार कर दिया जाता है। यह प्रत्येक कनेक्टेड एजेंट की संदर्भ विंडो को छोटा रखता है और फ़ुटगन को हटा देता है जो केवल एकल-किरायेदार स्थानीय विकास के लिए सुरक्षित हैं।
373
374
 
374
- `tool-search` दो तरीकों से काम करता है: इसे टूल नामों के पूर्ण मेनू और एक-पंक्ति विवरण (सस्ता, कोई स्कीमा नहीं) के लिए **कोई क्वेरी नहीं** के साथ कॉल करें, या पैरामीटर सारांश के साथ रैंक किए गए मिलान के लिए एक क्वेरी के साथ। इस प्रकार एक कॉम्पैक्ट क्लाइंट किसी भी पूर्ण-सतह टूल को खोजता है और लोड करता है जब उसे इसकी आवश्यकता होती है।
375
+ `tool-search` दो तरीकों से काम करता है: इसे टूल नामों के पूर्ण मेनू और एक-पंक्ति विवरण (सस्ता, कोई स्कीमा नहीं) के लिए **कोई क्वेरी नहीं** के साथ कॉल करें, या पैरामीटर सारांश के साथ रैंक किए गए मिलान के लिए एक क्वेरी के साथ। यह कॉम्पैक्ट क्लाइंट को क्षमताएँ खोजने में मदद करता है; ऐप एजेंट के व्यापक तर्क या किसी लिखने की क्रिया के लिए `ask_app` का उपयोग करें।
376
+
377
+ #### डिफ़ॉल्ट रूप से प्रमाणित पठन
378
+
379
+ जो ऐप लंबी अनुमति-सूची बनाए बिना सीधे पठन टूल चलाना चाहते हैं, वे स्वचालित प्रमाणित पठन चुन सकते हैं:
380
+
381
+ ```ts
382
+ export default createAgentChatPlugin({
383
+ appId: "analytics",
384
+ externalAgents: {
385
+ authenticatedReads: "auto",
386
+ writes: "ask_app_only",
387
+ // विशेष रूप से संवेदनशील पठन के लिए वैकल्पिक रक्षा-गहन निषेध।
388
+ denyActions: ["get-sensitive-export"],
389
+ },
390
+ });
391
+ ```
392
+
393
+ `authenticatedReads: "auto"` केवल उन actions को जोड़ता है जो स्पष्ट रूप से ये सभी घोषित करते हैं:
394
+
395
+ - `http: { method: "GET" }`
396
+ - `readOnly: true`
397
+ - `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`
398
+
399
+ नीति इन actions को स्पष्ट `connectorCatalog` प्रविष्टियों के साथ जोड़ती है, फिर `denyActions` लागू करती है। `writes: "ask_app_only"` (स्वचालित पठन चालू होने पर डिफ़ॉल्ट) के साथ बदलने वाले टूल सीधे कॉल नहीं किए जा सकते; बहु-चरणीय काम और बदलाव `ask_app` के माध्यम से भेजें। `writes: "allowlisted"` केवल उन ऐप के लिए है जो जानबूझकर स्पष्ट लिखने की अनुमति-सूची रखते हैं।
400
+
401
+ यह नीति प्रमाणित है, अनाम नहीं। MCP OAuth/connect पहचान `runWithRequestContext` से आगे जाती है, इसलिए action-स्तरीय पहुँच जाँच, मालिक/संगठन स्कोप और OAuth पठन स्कोप लागू रहते हैं। सार्वजनिक या अप्रमाणित actions स्वचालित पठन में शामिल नहीं होते।
402
+
403
+ Core के `db-schema` और `db-query` को स्वचालित बाहरी रीड के रूप में प्रकाशित नहीं किया जाता। वे सामान्य स्कोप किए गए SQL पथ के माध्यम से ऐप एजेंट के लिए उपलब्ध रहते हैं, लेकिन व्यापक स्कीमा/SQL पहुँच केवल read-only मेटाडेटा से अनुमान लगाने के लिए बहुत शक्तिशाली है। सीधे बाहरी क्वेरी की आवश्यकता होने पर ऐप को अपने access checks और सीमाओं वाला GET action, या rows, bytes, timeout और audit limits वाली स्पष्ट table/column allow-list देनी चाहिए। `db-exec` और `db-patch` स्वचालित सतह से बाहर रहते हैं।
404
+
405
+ Slack DM में उपयोगकर्ता की पहचान तभी इस्तेमाल होती है जब ईमेल सत्यापित हो और वह Agent Native संगठन का सदस्य हो। साझा चैनल service principal का उपयोग करते हैं और किसी प्रतिभागी की निजी permissions नहीं लेते। Managed OAuth और generated Slack manifest दोनों `users:read.email` मांगते हैं; मौजूदा installations को scope जोड़ने के बाद reconnect करना होगा और पुराने bot tokens को Slack में manually update करना होगा।
375
406
 
376
407
  ### पूर्ण स्तरीय (केवल स्पष्ट ऑप्ट-इन) {#full-tier}
377
408
 
@@ -473,7 +504,7 @@ ChatGPT/Claude-शैली OAuth ऐप होस्ट के लिए, ख
473
504
 
474
505
  `create_workspace_app` किसी भी गैर-अनुमति-सूचीबद्ध टेम्पलेट को अस्वीकार करता है - `packages/shared-app-config/templates.ts` में सार्वजनिक टेम्पलेट अनुमति-सूची आधिकारिक और सीआई-संरक्षित है; कोई बाहरी एजेंट इसे चौड़ा नहीं कर सकता. एक समान-नामित टेम्पलेट क्रिया एक बिल्टिन (टेम्पलेट-ओवर-कोर प्राथमिकता) को ओवरराइड करती है। `MCPConfig.builtinCrossAppTools: false` के साथ पूरे सेट को अक्षम करें।
475
506
 
476
- ऐप होस्ट के लिए टूल और संसाधन कैटलॉग डिफ़ॉल्ट रूप से कॉम्पैक्ट होते हैं - [Catalog tiers](#catalog-tiers) देखें। `publicAgent.expose` उस कॉम्पैक्ट कैटलॉग के बाहर सुरक्षित पढ़ने/निगलने वाले टूल के लिए ऑप्ट-इन बना हुआ है; `mcpApp.compactCatalog: true` को केवल actions के लिए एक दुर्लभ अपवाद के रूप में सेट करें जिसे चैट-होस्ट डिस्कवरी में प्रदर्शित होना चाहिए।
507
+ ऐप होस्ट के लिए टूल और संसाधन कैटलॉग डिफ़ॉल्ट रूप से कॉम्पैक्ट होते हैं - [Catalog tiers](#catalog-tiers) देखें। `publicAgent.expose` उस कॉम्पैक्ट कैटलॉग के बाहर सुरक्षित पढ़ने/निगलने वाले टूल के लिए action-स्तरीय ऑप्ट-इन बना रहता है; ऐप हाथ से लिखे कैटलॉग के बिना प्रमाणित पठन विज्ञापित करने के लिए `externalAgents.authenticatedReads: "auto"` सेट कर सकते हैं। `mcpApp.compactCatalog: true` को केवल actions के लिए दुर्लभ अपवाद के रूप में सेट करें जिन्हें चैट-होस्ट डिस्कवरी में प्रदर्शित होना चाहिए।
477
508
 
478
509
  तेज़ ChatGPT/Claude हैंडऑफ़ के लिए, आदर्श पथ सीधा है: उस क्रिया को कॉल करें जो आर्टिफैक्ट बनाता है या खोलता है, फिर MCP ऐप को रूट लॉन्च करने दें। एक मेल अनुरोध को `manage_draft` पर कॉल करना चाहिए और वास्तविक कंपोज़ रूट प्रस्तुत करना चाहिए। डैशबोर्ड अनुरोध को `open_app({ path, embed: true })` या `mcpApp` के साथ डैशबोर्ड कार्रवाई को कॉल करना चाहिए और संपूर्ण एनालिटिक्स रूट प्रस्तुत करना चाहिए। कैलेंडर, फॉर्म, सामग्री, स्लाइड, डिज़ाइन और क्लिप्स को अपने ड्राफ्ट/निर्माण/खोज actions के साथ समान पैटर्न का पालन करना चाहिए। `list_apps` तब उपयोगी होता है जब मॉडल को स्वीकृत ऐप्स में से चयन करना होता है; व्यापक `resources/list`, पूर्ण-कैटलॉग खोज, या `ask_app` प्रतिनिधिमंडल स्पष्ट UI हैंडऑफ़ के लिए सामान्य मार्ग नहीं होना चाहिए।
479
510
 
@@ -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 एक्सेस नहीं।
@@ -324,8 +324,9 @@ MCP サーバーは、ホスト型コネクタ (ChatGPT、Claude)、コード
324
324
  </div>
325
325
  </div>
326
326
  <p class="diagram-muted note">
327
- <code>tool-search</code> reaches any full-tier tool on demand &mdash; so the
328
- compact default keeps context small without hiding capability.
327
+ <code>tool-search</code> はオンデマンドでフル階層のツールを検出しますが、
328
+ 明示的にフル階層を選択しない限り、実行にはコネクタ カタログまたは
329
+ 認証済み読み取りポリシーによる許可が必要です。
329
330
  </p>
330
331
  ```
331
332
 
@@ -363,15 +364,45 @@ MCP サーバーは、ホスト型コネクタ (ChatGPT、Claude)、コード
363
364
 
364
365
  ### コンパクト / コネクタ層 (デフォルト) {#connector-tier}
365
366
 
366
- デフォルトでは、接続されているすべてのエージェントに、厳選された小規模なカタログが表示されます (ツールが最大 20 ~ 30 個であるのに対し、全画面では最大 105 個)
367
+ デフォルトでは、接続されているすべてのエージェントに、厳選された小規模なカタログが表示されます ( 20 ~ 30 個に対し、フル サーフェスでは約 105 個)。アプリは明示的な `connectorCatalog` を管理するか、認証済み読み取りポリシーを有効にできます。
367
368
 
368
369
  - **テンプレートで宣言されたアプリ actions** — 安全なアプリレベルの許可リスト。プランの場合は、`create-visual-plan`、`get-visual-plan`、`share-resource`、`navigate`、`tool-search` などです。
369
370
  - **組み込みクロスアプリ ツール** — `list_apps`、`open_app`、`ask_app`、`create_embed_session`。
370
- - **`tool-search`** は常に存在するため、リストの外にあるものはすべてオンデマンドでアクセス可能です (以下を参照)。
371
+ - **`tool-search`** は検出用として常に存在します。検出されたアクションを `tools/call` で実行するには、コネクタ カタログ、認証済み読み取りポリシー、または明示的なフル カタログのオプトインによる許可が必要です。
371
372
 
372
- リスト外のツール (`db-exec`、`seed-*`、拡張スイート、ブラウザ セッション ツール、コンテキスト Xray ツールなど) はアドバタイズされず、呼び出し元が完全なカタログを選択していない限り、それらへの呼び出しは「不明なツール」として拒否されます。これにより、接続されている各エージェントのコンテキスト ウィンドウが小さく保たれ、シングル テナントのローカル開発でのみ安全なフットガンが削除されます。コネクタ層は、**テンプレートが `connectorCatalog` を宣言するときは常に**、環境変数の背後でゲートされません。
373
+ リスト外のツール (`db-exec`、`seed-*`、拡張スイート、ブラウザ セッション ツール、コンテキスト Xray ツールなど) はアドバタイズされず、呼び出し元が完全なカタログを選択していない限り、それらへの呼び出しは「不明なツール」として拒否されます。これにより、接続されている各エージェントのコンテキスト ウィンドウが小さく保たれ、シングル テナントのローカル開発でのみ安全なフットガンが削除されます。
373
374
 
374
- `tool-search` は 2 つの方法で動作します。ツール名の完全なメニューと 1 行の説明 (安価、スキーマなし) を取得する **クエリなし** で呼び出すか、パラメータの概要を使用したランク付けされた一致のクエリを使用して呼び出します。このようにして、圧縮されたクライアントは、必要なときにフルサーフェス ツールを検出してロードします。
375
+ `tool-search` は 2 つの方法で動作します。ツール名の完全なメニューと 1 行の説明 (安価、スキーマなし) を取得する **クエリなし** で呼び出すか、パラメータの概要を使用したランク付けされた一致のクエリを使用して呼び出します。コンパクト化されたクライアントが機能を検出するためのものであり、アプリ エージェントのより広い推論や書き込みが必要な処理には `ask_app` を使用します。
376
+
377
+ #### 認証済み読み取りをデフォルトで有効にする
378
+
379
+ 長い許可リストを管理せずに直接ツールを利用したいアプリは、認証済み読み取りの自動公開を有効にできます。
380
+
381
+ ```ts
382
+ export default createAgentChatPlugin({
383
+ appId: "analytics",
384
+ externalAgents: {
385
+ authenticatedReads: "auto",
386
+ writes: "ask_app_only",
387
+ // 特に機密性の高い読み取りを拒否する、任意の多層防御。
388
+ denyActions: ["get-sensitive-export"],
389
+ },
390
+ });
391
+ ```
392
+
393
+ `authenticatedReads: "auto"` が追加するのは、次のすべてを明示的に宣言したアクションだけです。
394
+
395
+ - `http: { method: "GET" }`
396
+ - `readOnly: true`
397
+ - `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`
398
+
399
+ このポリシーは、それらのアクションを明示的な `connectorCatalog` エントリと結合してから `denyActions` を適用します。`writes: "ask_app_only"` (自動読み取りが有効な場合のデフォルト) では、変更を伴うツールを直接呼び出せません。複数ステップの処理や変更は `ask_app` 経由で行います。`writes: "allowlisted"` は、明示的な書き込み許可リストを意図的に管理するアプリ専用です。
400
+
401
+ このポリシーは認証済みアクセス向けであり、匿名アクセス向けではありません。MCP OAuth/接続の ID は引き続き `runWithRequestContext` を通じて伝播するため、アクション レベルのアクセス チェック、所有者/組織のスコープ、OAuth の読み取りスコープが適用されます。公開/未認証アクションは自動読み取りに含まれません。
402
+
403
+ Core の `db-schema` と `db-query` は外部の自動読み取りとして公開されません。通常のスコープ付き SQL パスを通じてアプリ内エージェントからは利用できますが、広範なスキーマ/SQL アクセスは read-only メタデータだけから推測するには強力すぎます。外部クエリを直接許可する場合は、アクセスチェックと上限を持つアプリ所有の GET action、または行数・バイト数・タイムアウト・監査の制限を備えた明示的なテーブル/カラム許可リストを追加してください。`db-exec` と `db-patch` は自動公開の対象外です。
404
+
405
+ Slack の DM は、メールアドレスを検証し Agent Native 組織のメンバーであることを確認した後にだけユーザー ID を使用します。共有チャンネルはサービスプリンシパルを使い、参加者の個人的な権限を借用しません。管理対象 OAuth と生成される Slack マニフェストは `users:read.email` を要求します。既存のインストールはスコープ追加後に再接続し、古い bot トークンは Slack で手動更新してください。
375
406
 
376
407
  ### フルティア (明示的なオプトインのみ) {#full-tier}
377
408
 
@@ -473,7 +504,7 @@ ChatGPT/Claude スタイルの OAuth アプリ ホストの場合、検出サー
473
504
 
474
505
  `create_workspace_app` は、許可リストに登録されていないテンプレートを拒否します。`packages/shared-app-config/templates.ts` のパブリック テンプレートの許可リストは権限があり、CI で保護されています。外部エージェントがそれを広げることはできません。同じ名前のテンプレート アクションは、組み込みをオーバーライドします (コアよりテンプレートが優先されます)。 `MCPConfig.builtinCrossAppTools: false` でセット全体を無効にします。
475
506
 
476
- アプリ ホストのツール カタログとリソース カタログは、デフォルトではコンパクトです。[Catalog tiers](#catalog-tiers) を参照してください。 `publicAgent.expose` は、コンパクト カタログ外の安全な読み取り/取り込みツールのオプトインのままです。チャットホスト検出に表示する必要がある actions のまれな例外としてのみ、`mcpApp.compactCatalog: true` を設定します。
507
+ アプリ ホストのツールおよびリソース カタログはデフォルトでコンパクトです。[カタログ階層](#catalog-tiers) を参照してください。`publicAgent.expose` は、コンパクト カタログ外の安全な読み取り/取り込みツールをアクション単位で有効にする設定です。アプリは `externalAgents.authenticatedReads: "auto"` を設定することで、手書きのカタログなしに認証済み読み取りを公開できます。`mcpApp.compactCatalog: true` は、チャット ホストの検出に必ず表示する必要があるアクションのまれな例外としてのみ設定してください。
477
508
 
478
509
  高速 ChatGPT/Claude ハンドオフの場合、理想的なパスは直接パスです。アーティファクトを作成または開くアクションを呼び出してから、MCP アプリにルートを起動させます。 Mail リクエストは `manage_draft` を呼び出し、実際の作成ルートをレンダリングする必要があります。ダッシュボード リクエストでは、`open_app({ path, embed: true })` を呼び出すか、`mcpApp` を使用してダッシュボード アクションを呼び出し、完全な Analytics ルートをレンダリングする必要があります。カレンダー、フォーム、コンテンツ、スライド、デザイン、クリップは、下書き/作成/検索 actions と同じパターンに従う必要があります。 `list_apps` は、モデルが許可されたアプリの中から選択する必要がある場合に便利です。広範な `resources/list`、フルカタログ検出、または `ask_app` 委任は、明らかな UI ハンドオフの通常のルートであってはなりません。
479
510
 
@@ -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 を受け取ることはありません。再生はスコープ付きのサーバー ルートを経由し、デフォルトのエージェント ツールは要約または範囲を限定したリプレイ イベントを返すのみで、生のチャンク テーブルへのアクセスはできません。
@@ -324,8 +324,9 @@ MCP 서버는 호스팅된 커넥터(ChatGPT, Claude), 코드 클라이언트(Cl
324
324
  </div>
325
325
  </div>
326
326
  <p class="diagram-muted note">
327
- <code>tool-search</code> reaches any full-tier tool on demand &mdash; so the
328
- compact default keeps context small without hiding capability.
327
+ <code>tool-search</code>는 필요할 전체 계층 도구를 검색하지만, 명시적으로
328
+ 전체 계층을 선택하지 않는 실행에는 커넥터 카탈로그 또는 인증된 읽기 정책의
329
+ 허용이 필요합니다.
329
330
  </p>
330
331
  ```
331
332
 
@@ -363,15 +364,45 @@ MCP 서버는 호스팅된 커넥터(ChatGPT, Claude), 코드 클라이언트(Cl
363
364
 
364
365
  ### 컴팩트/커넥터 계층(기본값) {#connector-tier}
365
366
 
366
- 기본적으로 연결된 모든 에이전트는 작고 선별된 카탈로그를 봅니다(최대 20~30개의 도구 대 전체 표면의 경우 최대 105개).
367
+ 기본적으로 연결된 모든 에이전트는 작고 선별된 카탈로그를 봅니다( 20~30개의 도구 대 전체 표면의 105개). 앱은 명시적인 `connectorCatalog`를 관리하거나 인증된 읽기 정책을 선택할 수 있습니다.
367
368
 
368
369
  - **템플릿에서 선언된 앱 actions** — 안전한 앱 수준 허용 목록입니다. `create-visual-plan`, `get-visual-plan`, `share-resource`, `navigate`, `tool-search` 및 유사한 계획의 경우
369
370
  - **내장된 교차 앱 도구** — `list_apps`, `open_app`, `ask_app`, `create_embed_session`.
370
- - **`tool-search`**는 항상 존재하므로 목록 외부의 항목은 요청 계속 연결할 있습니다(아래 참조).
371
+ - **`tool-search`**는 검색을 위해 항상 제공됩니다. 검색된 action을 `tools/call`로 실행하려면 커넥터 카탈로그, 인증된 읽기 정책 또는 명시적인 전체 카탈로그 선택에서 허용되어야 합니다.
371
372
 
372
- 목록 외부의 도구(예: `db-exec`, `seed-*`, 확장 제품군, 브라우저 세션 도구 및 context-xray 도구)는 광고되지 않으며 호출자가 전체 카탈로그를 선택하지 않는 한 "알 수 없는 도구"와 함께 해당 호출이 거부됩니다. 이렇게 하면 연결된 각 에이전트의 컨텍스트 창을 작게 유지하고 단일 테넌트 로컬 개발에만 안전한 풋건을 제거합니다. 커넥터 계층은 **템플릿이 `connectorCatalog`를 선언할 때마다** 활성화되며 환경 변수 뒤에 제어되지 않습니다.
373
+ 목록 외부의 도구(예: `db-exec`, `seed-*`, 확장 제품군, 브라우저 세션 도구 및 context-xray 도구)는 광고되지 않으며 호출자가 전체 카탈로그를 선택하지 않는 한 "알 수 없는 도구"와 함께 해당 호출이 거부됩니다. 이렇게 하면 연결된 각 에이전트의 컨텍스트 창을 작게 유지하고 단일 테넌트 로컬 개발에만 안전한 위험한 도구를 제거합니다.
373
374
 
374
- `tool-search`는 두 가지 방식으로 작동합니다. 도구 이름의 전체 메뉴와 한 줄 설명(저렴함, 스키마 없음) 대한 **쿼리 없음**을 사용하여 호출하거나 매개변수 요약이 있는 순위 일치에 대한 쿼리를 사용하여 호출합니다. 이것이 압축된 클라이언트가 필요할 전체 표면 도구를 검색하고 로드하는 방법입니다.
375
+ `tool-search`는 두 가지 방식으로 작동합니다. 도구 이름의 전체 메뉴와 한 줄 설명(저렴함, 스키마 없음) **쿼리 없이** 호출하고, 매개변수 요약이 포함된 순위 결과는 쿼리와 함께 호출합니다. 이는 압축된 클라이언트가 기능을 찾도록 돕습니다. 에이전트의 폭넓은 추론이나 쓰기가 필요한 작업에는 `ask_app`을 사용하세요.
376
+
377
+ #### 인증된 읽기를 기본으로 활성화
378
+
379
+ 긴 허용 목록을 관리하지 않고 직접 도구가 바로 작동하도록 하려는 앱은 자동 인증 읽기를 선택할 수 있습니다.
380
+
381
+ ```ts
382
+ export default createAgentChatPlugin({
383
+ appId: "analytics",
384
+ externalAgents: {
385
+ authenticatedReads: "auto",
386
+ writes: "ask_app_only",
387
+ // 특히 민감한 읽기를 거부하기 위한 선택적 심층 방어입니다.
388
+ denyActions: ["get-sensitive-export"],
389
+ },
390
+ });
391
+ ```
392
+
393
+ `authenticatedReads: "auto"`는 다음을 모두 명시적으로 선언한 action만 추가합니다.
394
+
395
+ - `http: { method: "GET" }`
396
+ - `readOnly: true`
397
+ - `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`
398
+
399
+ 정책은 이러한 action을 명시적인 `connectorCatalog` 항목과 결합한 다음 `denyActions`를 적용합니다. `writes: "ask_app_only"`(자동 읽기가 활성화된 경우 기본값)를 사용하면 변경 도구를 직접 호출할 수 없습니다. 여러 단계의 작업과 변경은 `ask_app`을 통해 처리하세요. `writes: "allowlisted"`는 명시적인 쓰기 허용 목록을 의도적으로 관리하는 앱에만 사용합니다.
400
+
401
+ 이 정책은 인증된 액세스를 위한 것이며 익명 액세스를 위한 것이 아닙니다. MCP OAuth/연결 ID는 계속 `runWithRequestContext`를 통해 전달되므로 action 수준 액세스 검사, 소유자/조직 범위 지정 및 OAuth 읽기 범위가 그대로 적용됩니다. 공개/미인증 action은 자동 읽기에 포함되지 않습니다.
402
+
403
+ Core `db-schema`와 `db-query`는 자동 외부 읽기로 공개되지 않습니다. 일반적인 범위 지정 SQL 경로를 통해 앱 내부 에이전트에서는 사용할 수 있지만, 광범위한 스키마/SQL 접근은 읽기 전용 메타데이터만으로 추론하기에는 너무 강력합니다. 외부 쿼리가 필요하면 접근 검사와 제한을 갖춘 앱 소유 GET action 또는 행·바이트·시간 제한과 감사를 포함한 명시적 테이블/열 허용 목록을 제공하세요. `db-exec`와 `db-patch`는 자동 표면에 포함되지 않습니다.
404
+
405
+ Slack DM은 이메일을 검증하고 Agent Native 조직의 구성원임을 확인한 뒤에만 사용자 ID로 실행됩니다. 공유 채널은 서비스 주체를 사용하며 참여자의 개인 권한을 빌리지 않습니다. 관리형 OAuth와 생성된 Slack 매니페스트는 모두 `users:read.email`을 요청합니다. 기존 설치는 범위를 추가한 후 다시 연결해야 하며, 이전 봇 토큰은 Slack에서 수동으로 업데이트해야 합니다.
375
406
 
376
407
  ### 전체 등급(명시적 선택만 해당) {#full-tier}
377
408
 
@@ -475,7 +506,7 @@ ChatGPT/Claude 스타일 OAuth 앱 호스트의 경우 검색 표면은 기본
475
506
 
476
507
  `create_workspace_app`는 허용 목록에 없는 템플릿을 거부합니다. `packages/shared-app-config/templates.ts`의 공개 템플릿 허용 목록은 신뢰할 수 있고 CI로 보호됩니다. 외부 에이전트는 이를 확장할 수 없습니다. 동일한 이름의 템플릿 작업은 기본 제공(코어보다 템플릿 우선 순위)을 재정의합니다. `MCPConfig.builtinCrossAppTools: false`로 전체 세트를 비활성화하세요.
477
508
 
478
- 호스트용 도구 및 리소스 카탈로그는 기본적으로 컴팩트합니다. [Catalog tiers](#catalog-tiers) 참조하세요. `publicAgent.expose`는 컴팩트 카탈로그 외부의 안전한 읽기/수집 도구에 대한 선택 사항으로 남아 있습니다. `mcpApp.compactCatalog: true`를 채팅 호스트 검색에 나타나야 하는 actions에 대한 드문 예외로만 설정하세요.
509
+ 호스트의 도구 및 리소스 카탈로그는 기본적으로 컴팩트합니다. [카탈로그 계층](#catalog-tiers) 참조하세요. `publicAgent.expose`는 컴팩트 카탈로그 외부의 안전한 읽기/수집 도구를 action 단위로 선택하는 설정입니다. 앱은 `externalAgents.authenticatedReads: "auto"`를 설정하여 수동 카탈로그 없이 인증된 읽기를 노출할 수 있습니다. `mcpApp.compactCatalog: true`는 채팅 호스트 검색에 반드시 표시되어야 하는 action의 드문 예외에만 설정하세요.
479
510
 
480
511
  빠른 ChatGPT/Claude 핸드오프를 위해 이상적인 경로는 직접입니다. 아티팩트를 생성하거나 여는 작업을 호출한 다음 MCP 앱이 경로를 시작하도록 합니다. 메일 요청은 `manage_draft`를 호출하고 실제 작성 경로를 렌더링해야 합니다. 대시보드 요청은 `open_app({ path, embed: true })` 또는 `mcpApp`를 사용한 대시보드 작업을 호출하고 전체 Analytics 경로를 렌더링해야 합니다. 달력, 양식, 콘텐츠, 슬라이드, 디자인 및 클립은 초안/생성/검색 actions와 동일한 패턴을 따라야 합니다. `list_apps`는 모델이 부여된 앱 중에서 선택해야 할 때 유용합니다. 광범위한 `resources/list`, 전체 카탈로그 검색 또는 `ask_app` 위임은 명백한 UI 핸드오프를 위한 일반적인 경로가 되어서는 안 됩니다.
481
512
 
@@ -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을 절대 받지 않습니다. 재생은 범위가 지정된 서버 경로를 거치며, 기본 에이전트 도구는 원시 청크 테이블 접근이 아닌 요약 또는 범위가 지정된 리플레이 이벤트를 반환합니다.
@@ -325,8 +325,10 @@ O servidor MCP fornece um **catálogo compacto por padrão para cada chamador**
325
325
  </div>
326
326
  </div>
327
327
  <p class="diagram-muted note">
328
- <code>tool-search</code> reaches any full-tier tool on demand &mdash; so the
329
- compact default keeps context small without hiding capability.
328
+ <code>tool-search</code> descobre ferramentas da camada completa sob demanda;
329
+ o catálogo do conector ou a política de leituras autenticadas ainda precisa
330
+ permitir a execução, salvo quando o chamador opta explicitamente pela camada
331
+ completa.
330
332
  </p>
331
333
  ```
332
334
 
@@ -364,15 +366,45 @@ O servidor MCP fornece um **catálogo compacto por padrão para cada chamador**
364
366
 
365
367
  ### Camada compacta/conector (padrão) {#connector-tier}
366
368
 
367
- Por padrão, cada agente conectado vê um catálogo pequeno e selecionado (cerca de 20 a 30 ferramentas versus cerca de 105 na superfície completa):
369
+ Por padrão, cada agente conectado vê um catálogo pequeno e selecionado (cerca de 20 a 30 ferramentas versus cerca de 105 na superfície completa). Os aplicativos podem manter um `connectorCatalog` explícito ou optar pela política de leituras autenticadas:
368
370
 
369
371
  - **Aplicativo declarado por modelo actions** — a lista de permissões segura no nível do aplicativo. Para planos `create-visual-plan`, `get-visual-plan`, `share-resource`, `navigate`, `tool-search` e similares.
370
372
  - **Ferramentas integradas para vários aplicativos** — `list_apps`, `open_app`, `ask_app`, `create_embed_session`.
371
- - **`tool-search`** está sempre presente, então qualquer coisa fora da lista permanece acessível sob demanda (veja abaixo).
373
+ - **`tool-search`** está sempre presente para descoberta. Uma action descoberta ainda precisa estar no catálogo do conector, ser incluída pela política de leituras autenticadas ou ser habilitada pela opção explícita de catálogo completo antes que `tools/call` possa executá-la.
372
374
 
373
- Ferramentas fora da lista — por exemplo `db-exec`, `seed-*`, o conjunto de extensões, ferramentas de sessão de navegador e ferramentas de raio X de contexto — não são anunciadas e as chamadas para elas são rejeitadas com "Ferramenta desconhecida", a menos que o chamador tenha optado pelo catálogo completo. Isso mantém pequena a janela de contexto de cada agente conectado e remove armas de fogo que são seguras apenas para desenvolvimento local de locatário único. A camada do conector fica ativa **sempre que um modelo declara um `connectorCatalog`** — ele não está protegido por uma variável de ambiente.
375
+ Ferramentas fora da lista — por exemplo `db-exec`, `seed-*`, o conjunto de extensões, ferramentas de sessão de navegador e ferramentas de raio X de contexto — não são anunciadas e as chamadas para elas são rejeitadas com "Ferramenta desconhecida", a menos que o chamador tenha optado pelo catálogo completo. Isso mantém pequena a janela de contexto de cada agente conectado e remove armas de fogo que são seguras apenas para desenvolvimento local de locatário único.
374
376
 
375
- `tool-search` funciona de duas maneiras: chame-o com **sem consulta** para obter o menu completo de nomes de ferramentas mais descrições de uma linha (barato, sem esquemas) ou com uma consulta para correspondências classificadas com resumos de parâmetros. É assim que um cliente compactado descobre e carrega qualquer ferramenta de superfície completa quando precisa.
377
+ `tool-search` funciona de duas maneiras: chame-o **sem consulta** para obter o menu completo de nomes de ferramentas mais descrições de uma linha (barato, sem esquemas) ou com uma consulta para correspondências classificadas com resumos de parâmetros. Ele ajuda um cliente compacto a descobrir recursos; use `ask_app` para qualquer tarefa que exija o raciocínio mais amplo do agente do aplicativo ou uma gravação.
378
+
379
+ #### Leituras autenticadas por padrão
380
+
381
+ Aplicativos que desejam que as ferramentas de leitura direta funcionem sem manter uma lista longa podem optar por leituras autenticadas automáticas:
382
+
383
+ ```ts
384
+ export default createAgentChatPlugin({
385
+ appId: "analytics",
386
+ externalAgents: {
387
+ authenticatedReads: "auto",
388
+ writes: "ask_app_only",
389
+ // Veto opcional de defesa em profundidade para leituras especialmente sensíveis.
390
+ denyActions: ["get-sensitive-export"],
391
+ },
392
+ });
393
+ ```
394
+
395
+ `authenticatedReads: "auto"` adiciona somente actions que declaram explicitamente todos os itens a seguir:
396
+
397
+ - `http: { method: "GET" }`
398
+ - `readOnly: true`
399
+ - `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`
400
+
401
+ A política combina essas actions com entradas explícitas de `connectorCatalog` e depois aplica `denyActions`. Com `writes: "ask_app_only"` (o padrão quando as leituras automáticas estão habilitadas), ferramentas que alteram dados não podem ser chamadas diretamente; encaminhe trabalhos de várias etapas e mutações por `ask_app`. `writes: "allowlisted"` existe apenas para aplicativos que mantêm intencionalmente uma lista explícita de gravações permitidas.
402
+
403
+ A política é autenticada, não anônima. A identidade MCP OAuth/connect é transmitida por `runWithRequestContext`, portanto as verificações de acesso das actions, os escopos de proprietário/organização e os escopos de leitura OAuth continuam valendo. Actions públicas ou não autenticadas não são incluídas automaticamente.
404
+
405
+ Os `db-schema` e `db-query` do Core não são expostos automaticamente como leituras externas. Eles continuam disponíveis ao agente interno do aplicativo pelo caminho SQL com escopo normal, mas o acesso amplo ao esquema/SQL é poderoso demais para ser inferido apenas de metadados de leitura. Se o aplicativo precisar de consultas externas diretas, exponha uma action GET própria com controles e limites de acesso, ou uma lista explícita de tabelas/colunas com limites de linhas, bytes, tempo e auditoria. `db-exec` e `db-patch` permanecem fora da superfície automática.
406
+
407
+ DMs do Slack usam a identidade do usuário somente após verificar o e-mail e confirmar a associação à organização Agent Native. Canais compartilhados usam um principal de serviço e não herdam as permissões privadas de um participante. O OAuth gerenciado e o manifesto gerado do Slack solicitam `users:read.email`; instalações existentes precisam ser reconectadas após adicionar o escopo e tokens antigos de bot precisam ser atualizados manualmente no Slack.
376
408
 
377
409
  ### Nível completo (somente aceitação explícita) {#full-tier}
378
410
 
@@ -474,7 +506,7 @@ Além das ferramentas por ação, o servidor MCP expõe um conjunto de verbos es
474
506
 
475
507
  `create_workspace_app` rejeita qualquer modelo não listado na lista de permissões — a lista de permissões de modelos públicos no `packages/shared-app-config/templates.ts` é oficial e protegida por CI; um agente externo não pode ampliá-lo. Uma ação de modelo com o mesmo nome substitui uma ação interna (precedência de modelo sobre núcleo). Desative todo o conjunto com `MCPConfig.builtinCrossAppTools: false`.
476
508
 
477
- Os catálogos de ferramentas e recursos para hosts de aplicativos são compactos por padrão — consulte [Catalog tiers](#catalog-tiers). `publicAgent.expose` continua sendo a opção para ferramentas seguras de leitura/ingestão fora desse catálogo compacto; defina `mcpApp.compactCatalog: true` apenas como uma rara exceção para actions que deve aparecer na descoberta do host do chat.
509
+ Os catálogos de ferramentas e recursos para hosts de aplicativos são compactos por padrão — consulte [Catalog tiers](#catalog-tiers). `publicAgent.expose` continua sendo a opção no nível da action para ferramentas seguras de leitura/ingestão fora desse catálogo compacto; os aplicativos podem definir `externalAgents.authenticatedReads: "auto"` para anunciar essas leituras autenticadas sem um catálogo escrito à mão. Defina `mcpApp.compactCatalog: true` apenas como uma rara exceção para actions que precisam aparecer na descoberta do host do chat.
478
510
 
479
511
  Para transferências rápidas de ChatGPT/Claude, o caminho ideal é direto: chame a ação que cria ou abre o artefato e deixe o aplicativo MCP iniciar a rota. Uma solicitação de correio deve chamar `manage_draft` e renderizar a rota de composição real. Uma solicitação de painel deve chamar `open_app({ path, embed: true })` ou uma ação de painel com `mcpApp` e renderizar a rota completa do Analytics. Calendário, Formulários, Conteúdo, Slides, Design e Clipes devem seguir o mesmo padrão com seu rascunho/criação/pesquisa actions. `list_apps` é útil quando o modelo precisa escolher entre aplicativos concedidos; `resources/list` amplo, descoberta de catálogo completo ou delegação `ask_app` não devem ser o caminho normal para uma transferência óbvia de UI.
480
512
 
@@ -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.
@@ -324,8 +324,8 @@ MCP 服务器默认为每个调用者提供一个**紧凑的目录** — 托管
324
324
  </div>
325
325
  </div>
326
326
  <p class="diagram-muted note">
327
- <code>tool-search</code> reaches any full-tier tool on demand &mdash; so the
328
- compact default keeps context small without hiding capability.
327
+ <code>tool-search</code> 可按需发现完整层工具;除非调用方明确选择完整层,
328
+ 否则连接器目录或已认证读取策略仍须允许执行。
329
329
  </p>
330
330
  ```
331
331
 
@@ -363,15 +363,45 @@ MCP 服务器默认为每个调用者提供一个**紧凑的目录** — 托管
363
363
 
364
364
  ### 紧凑/连接器层(默认) {#connector-tier}
365
365
 
366
- 默认情况下,每个连接的代理都会看到一个小型的、精心策划的目录(约 20–30 个工具,而整个表面上约 105 个工具):
366
+ 默认情况下,每个连接的代理都会看到一个小型的、精心策划的目录(约 20–30 个工具,而完整界面约有 105 个工具)。应用可以维护明确的 `connectorCatalog`,也可以选择已认证读取策略:
367
367
 
368
368
  - **模板声明的应用程序 actions** — 安全应用程序级别允许列表。对于 `create-visual-plan`、`get-visual-plan`、`share-resource`、`navigate`、`tool-search` 等类似计划。
369
369
  - **内置跨应用工具** - `list_apps`、`open_app`、`ask_app`、`create_embed_session`。
370
- - **`tool-search`** 始终存在,因此列表之外的任何内容都可以按需访问(见下文)。
370
+ - **`tool-search`** 始终用于发现。发现的 action 必须获得连接器目录、已认证读取策略或明确的完整目录选择允许,`tools/call` 才能执行它。
371
371
 
372
- 列表之外的工具(例如 `db-exec`、`seed-*`、扩展套件、浏览器会话工具和上下文 X 射线工具)不会公布,并且对它们的调用将被拒绝并显示“未知工具”,除非调用者选择加入完整目录。这使每个连接的代理的上下文窗口保持较小,并消除了仅对单租户本地开发安全的脚枪。 **每当模板声明 `connectorCatalog`** 时,连接器层就会处于活动状态 - 它不会受到环境变量的限制。
372
+ 列表之外的工具(例如 `db-exec`、`seed-*`、扩展套件、浏览器会话工具和上下文 X 射线工具)不会公布,并且对它们的调用将被拒绝并显示“未知工具”,除非调用者选择加入完整目录。这使每个连接的代理的上下文窗口保持较小,并消除了仅对单租户本地开发安全的危险工具。
373
373
 
374
- `tool-search` 有两种工作方式:使用**无查询**来调用它,以获取工具名称的完整菜单加上一行描述(便宜,无模式),或者使用参数摘要来查询排名匹配。这就是压缩客户端在需要时发现并加载任何全表面工具的方式。
374
+ `tool-search` 有两种工作方式:使用**无查询**调用它,以获取工具名称的完整菜单及单行描述(开销低、无 schema),或使用查询获取带参数摘要的排序匹配项。它帮助精简客户端发现功能;需要应用代理进行更广泛推理或写入时,请使用 `ask_app`。
375
+
376
+ #### 默认启用已认证读取
377
+
378
+ 希望直接工具无需维护长允许列表即可使用的应用,可以选择自动已认证读取:
379
+
380
+ ```ts
381
+ export default createAgentChatPlugin({
382
+ appId: "analytics",
383
+ externalAgents: {
384
+ authenticatedReads: "auto",
385
+ writes: "ask_app_only",
386
+ // 可选的纵深防御:拒绝特别敏感的读取。
387
+ denyActions: ["get-sensitive-export"],
388
+ },
389
+ });
390
+ ```
391
+
392
+ `authenticatedReads: "auto"` 只会添加明确声明了以下全部内容的 action:
393
+
394
+ - `http: { method: "GET" }`
395
+ - `readOnly: true`
396
+ - `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`
397
+
398
+ 该策略会将这些 action 与任何明确的 `connectorCatalog` 条目合并,然后应用 `denyActions`。使用 `writes: "ask_app_only"`(启用自动读取时的默认值)时,变更类工具不能直接调用;多步骤工作和变更应通过 `ask_app` 完成。`writes: "allowlisted"` 仅适用于有意维护明确写入允许列表的应用。
399
+
400
+ 该策略面向已认证访问,而非匿名访问。MCP OAuth/连接身份仍通过 `runWithRequestContext` 传递,因此 action 级访问检查、所有者/组织作用域和 OAuth 读取作用域继续生效。公开/未认证 action 不会包含在自动读取中。
401
+
402
+ Core `db-schema` 和 `db-query` 不会自动作为外部读取公开。它们仍可通过正常的作用域 SQL 路径供应用内代理使用,但广泛的架构/SQL 访问过于强大,不能仅凭只读元数据推断。如果应用需要直接外部查询,应提供带访问检查和边界的应用自有 GET action,或明确的表/列允许列表,并限制行数、字节数、超时和审计。`db-exec` 和 `db-patch` 仍不属于自动公开范围。
403
+
404
+ Slack 私信只有在验证电子邮件并确认用户属于 Agent Native 组织后,才会使用用户身份运行。共享频道使用服务主体,不会借用参与者的私人权限。托管 OAuth 和生成的 Slack manifest 都会请求 `users:read.email`;已有安装在添加该 scope 后必须重新连接,旧 bot token 则必须在 Slack 中手动更新。
375
405
 
376
406
  ### 完整层(仅限明确选择加入) {#full-tier}
377
407
 
@@ -473,7 +503,7 @@ CSP 和沙箱权限等安全元数据存在于资源中
473
503
 
474
504
  `create_workspace_app` 拒绝任何非允许列表模板 - `packages/shared-app-config/templates.ts` 中的公共模板允许列表是权威且受 CI 保护的;外部代理无法扩大它。同名的模板操作会覆盖内置操作(模板优先于核心优先级)。使用 `MCPConfig.builtinCrossAppTools: false` 禁用整个设置。
475
505
 
476
- 应用程序主机的工具和资源目录默认是紧凑的 - 请参阅 [Catalog tiers](#catalog-tiers)。 `publicAgent.expose` 仍然是该紧凑目录之外安全读取/摄取工具的选择;仅将 `mcpApp.compactCatalog: true` 设置为 actions 的罕见例外,必须出现在聊天主机发现中。
506
+ 应用程序主机的工具和资源目录默认是紧凑的,请参阅[目录层级](#catalog-tiers)。`publicAgent.expose` 仍是紧凑目录之外安全读取/摄取工具的 action 级选择。应用可以设置 `externalAgents.authenticatedReads: "auto"`,无需手写目录即可公布这些已认证读取。仅将 `mcpApp.compactCatalog: true` 用作必须出现在聊天主机发现中的 action 的罕见例外。
477
507
 
478
508
  对于快速 ChatGPT/Claude 切换,理想的路径是直接的:调用创建或打开工件的操作,然后让 MCP 应用程序启动路线。邮件请求应调用 `manage_draft` 并呈现真实的撰写路由。仪表板请求应调用 `open_app({ path, embed: true })` 或使用 `mcpApp` 的仪表板操作并呈现完整的 Analytics 路径。日历、表单、内容、幻灯片、设计和剪辑的草稿/创建/搜索 actions 应遵循相同的模式。当模型必须在授予的应用程序中进行选择时,`list_apps` 非常有用;广泛的 `resources/list`、全目录发现或 `ask_app` 委派不应该是明显的 UI 切换的正常途径。
479
509
 
@@ -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 如何恢復而不重複已完成的副作用(另一個永遠啟用的保護)。
@@ -324,8 +324,8 @@ MCP 伺服器預設為每個呼叫者提供一個**緊湊的目錄** — 託管
324
324
  </div>
325
325
  </div>
326
326
  <p class="diagram-muted note">
327
- <code>tool-search</code> reaches any full-tier tool on demand &mdash; so the
328
- compact default keeps context small without hiding capability.
327
+ <code>tool-search</code> 可按需探索完整層工具;除非呼叫端明確選擇完整層,
328
+ 否則連線器目錄或已驗證讀取政策仍須允許執行。
329
329
  </p>
330
330
  ```
331
331
 
@@ -363,15 +363,45 @@ MCP 伺服器預設為每個呼叫者提供一個**緊湊的目錄** — 託管
363
363
 
364
364
  ### 緊湊/連線器層(預設) {#connector-tier}
365
365
 
366
- 預設情況下,每個連線的代理都會看到一個小型的、精心策劃的目錄(約 20–30 個工具,而整個表面上約 105 個工具):
366
+ 預設情況下,每個連線的代理都會看到一個小型、精心規劃的目錄(約 20–30 個工具,而完整介面約有 105 個工具)。應用程式可以維護明確的 `connectorCatalog`,也可以選擇已驗證讀取政策:
367
367
 
368
368
  - **範本聲明的應用程式 actions** — 安全應用程式層級允許清單。對於 `create-visual-plan`、`get-visual-plan`、`share-resource`、`navigate`、`tool-search` 等類似計畫。
369
369
  - **內建跨應用工具** - `list_apps`、`open_app`、`ask_app`、`create_embed_session`。
370
- - **`tool-search`** 始終存在,因此清單之外的任何內容都可以按需存取(見下文)。
370
+ - **`tool-search`** 始終用於探索。探索到的 action 必須獲得連線器目錄、已驗證讀取政策或明確的完整目錄選擇允許,`tools/call` 才能執行它。
371
371
 
372
- 清單之外的工具(例如 `db-exec`、`seed-*`、擴充功能套件、瀏覽器工作階段工具和脈絡 X 射線工具)不會公布,並且對它們的呼叫將被拒絕並顯示“未知工具”,除非呼叫者選取加入完整目錄。這使每個連線的代理的脈絡視窗保持較小,並消除了僅對單租戶本機開發安全的腳槍。 **每當範本聲明 `connectorCatalog`** 時,連線器層就會處於活動狀態 - 它不會受到環境變數的限制。
372
+ 清單之外的工具(例如 `db-exec`、`seed-*`、擴充功能套件、瀏覽器工作階段工具和 context-xray 工具)不會公布,除非呼叫端選擇完整目錄,否則呼叫會以「未知工具」遭拒。這能縮小每個連線代理的脈絡視窗,並移除僅適合單一租戶本機開發的危險工具。
373
373
 
374
- `tool-search` 有兩種工作方式:使用**無查詢**來呼叫它,以取得工具名稱的完整選單加上一行描述(便宜,無模式),或者使用參數摘要來查詢排名匹配。這就是壓縮用戶端在需要時發現並載入任何全表面工具的方式。
374
+ `tool-search` 有兩種運作方式:以**無查詢**呼叫來取得工具名稱的完整選單與單行說明(成本低、無 schema),或使用查詢取得附參數摘要的排序結果。它協助精簡用戶端探索功能;需要應用程式代理進行更廣泛推理或寫入時,請使用 `ask_app`。
375
+
376
+ #### 預設啟用已驗證讀取
377
+
378
+ 希望直接工具不必維護冗長允許清單即可使用的應用程式,可以選擇自動已驗證讀取:
379
+
380
+ ```ts
381
+ export default createAgentChatPlugin({
382
+ appId: "analytics",
383
+ externalAgents: {
384
+ authenticatedReads: "auto",
385
+ writes: "ask_app_only",
386
+ // 選用的縱深防禦:拒絕特別敏感的讀取。
387
+ denyActions: ["get-sensitive-export"],
388
+ },
389
+ });
390
+ ```
391
+
392
+ `authenticatedReads: "auto"` 只會加入明確宣告以下全部內容的 action:
393
+
394
+ - `http: { method: "GET" }`
395
+ - `readOnly: true`
396
+ - `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`
397
+
398
+ 此政策會將這些 action 與任何明確的 `connectorCatalog` 項目合併,然後套用 `denyActions`。使用 `writes: "ask_app_only"`(啟用自動讀取時的預設值)時,變更類工具無法直接呼叫;多步驟工作與變更應透過 `ask_app` 完成。`writes: "allowlisted"` 僅適用於刻意維護明確寫入允許清單的應用程式。
399
+
400
+ 此政策用於已驗證存取,而非匿名存取。MCP OAuth/連線身分仍透過 `runWithRequestContext` 傳遞,因此 action 層級存取檢查、擁有者/組織範圍及 OAuth 讀取範圍仍會生效。公開/未驗證 action 不會包含在自動讀取中。
401
+
402
+ Core `db-schema` 與 `db-query` 不會自動公開為外部讀取。它們仍可透過一般的範圍 SQL 路徑供應用程式內代理使用,但廣泛的結構描述/SQL 存取過於強大,不能只從唯讀中繼資料推斷。若應用程式需要直接外部查詢,請提供具有存取檢查與限制的應用程式自有 GET action,或明確的資料表/欄位允許清單,並限制資料列、位元組、逾時與稽核。`db-exec` 與 `db-patch` 仍不屬於自動公開範圍。
403
+
404
+ Slack 私訊只有在驗證電子郵件並確認使用者屬於 Agent Native 組織後,才會使用使用者身分執行。共用頻道使用服務主體,不會借用參與者的私人權限。託管 OAuth 與產生的 Slack manifest 都會要求 `users:read.email`;現有安裝在新增 scope 後必須重新連線,舊 bot token 則必須在 Slack 中手動更新。
375
405
 
376
406
  ### 完整層(僅限明確選取加入) {#full-tier}
377
407
 
@@ -473,7 +503,7 @@ CSP 和沙箱權限等安全中繼資料存在於資源中
473
503
 
474
504
  `create_workspace_app` 拒絕任何非允許清單範本 - `packages/shared-app-config/templates.ts` 中的公開範本允許清單是權威且受 CI 保護的;外部代理無法擴大它。同名的範本操作會覆蓋內建操作(範本優先於核心優先級)。使用 `MCPConfig.builtinCrossAppTools: false` 停用整個設定。
475
505
 
476
- 應用程式主機的工具和資源目錄預設是緊湊的 - 請參閱 [Catalog tiers](#catalog-tiers)。 `publicAgent.expose` 仍然是該緊湊目錄之外安全讀取/攝取工具的選取;僅將 `mcpApp.compactCatalog: true` 設定為 actions 的罕見例外,必須出現在聊天主機發現中。
506
+ 應用程式主機的工具和資源目錄預設為精簡,請參閱[目錄層級](#catalog-tiers)。`publicAgent.expose` 仍是精簡目錄之外安全讀取/擷取工具的 action 層級選項。應用程式可設定 `externalAgents.authenticatedReads: "auto"`,不必手寫目錄即可公佈這些已驗證讀取。僅將 `mcpApp.compactCatalog: true` 用於必須出現在聊天主機探索中的 action 之罕見例外。
477
507
 
478
508
  對於快速 ChatGPT/Claude 切換,理想的路徑是直接的:呼叫建立或開啟工件的操作,然後讓 MCP 應用程式啟動路由。郵件請求應呼叫 `manage_draft` 並呈現真實的撰寫路由。儀表板請求應呼叫 `open_app({ path, embed: true })` 或使用 `mcpApp` 的儀表板操作並呈現完整的 Analytics 路徑。行事曆、表單、內容、幻燈片、設計和剪輯的草稿/建立/搜尋 actions 應遵循相同的模式。當模型必須在授予的應用程式中進行選取時,`list_apps` 非常有用;廣泛的 `resources/list`、全目錄發現或 `ask_app` 委派不應該是明顯的 UI 切換的正常途徑。
479
509
 
@@ -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。播放透過範圍受限的伺服器路由進行,且預設代理工具傳回摘要或範圍受限的重播事件,而非原始區塊資料表存取權。