@agent-native/core 0.84.67 → 0.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +14 -0
- package/corpus/core/docs/content/locales/ar-SA/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/de-DE/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/es-ES/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/fr-FR/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/hi-IN/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/ja-JP/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/ko-KR/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/pt-BR/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/zh-CN/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/zh-TW/tracking.mdx +55 -0
- package/corpus/core/docs/content/tracking.mdx +2 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/production-agent.ts +199 -38
- package/corpus/core/src/agent/run-manager.ts +79 -0
- package/corpus/core/src/agent/run-store.ts +117 -5
- package/corpus/core/src/agent/types.ts +13 -0
- package/corpus/core/src/client/RunStuckBanner.tsx +14 -0
- package/corpus/core/src/client/agent-chat-adapter.ts +475 -0
- package/corpus/core/src/client/analytics.ts +2 -0
- package/corpus/core/src/client/error-format.ts +4 -0
- package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +1 -1
- package/corpus/core/src/client/session-replay.ts +774 -2
- package/corpus/core/src/client/sse-event-processor.ts +65 -9
- package/corpus/core/src/client/use-run-stuck-detection.ts +31 -7
- package/corpus/core/src/db/runtime-diagnostics.ts +331 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +115 -2
- package/corpus/core/src/server/core-routes-plugin.ts +91 -4
- package/corpus/core/src/server/http-response-telemetry.ts +189 -0
- package/corpus/core/src/server/self-dispatch.ts +29 -0
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +53 -1
- package/corpus/templates/analytics/AGENTS.md +13 -0
- package/corpus/templates/analytics/actions/view-screen.ts +25 -0
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +20 -0
- package/corpus/templates/analytics/app/global.css +55 -0
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +100 -1
- package/corpus/templates/analytics/app/i18n-data.ts +1226 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +3 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/EmailReportDialog.tsx +182 -144
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +11 -18
- package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +11 -18
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +49 -1
- package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +557 -0
- package/corpus/templates/analytics/app/pages/sessions/session-replay-devtools.ts +274 -0
- package/corpus/templates/analytics/app/pages/settings/AlertRulesSettingsCard.tsx +974 -0
- package/corpus/templates/analytics/changelog/2026-07-02-alert-rules-can-now-be-viewed-and-managed-from-settings.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-02-recent-ask-chats-show-a-loading-placeholder-while-your-chat-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-02-session-replays-now-capture-console-logs-and-network-request.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-02-sharing-status-labels-use-neutral-icons-instead-of-colored-d.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-02-the-session-replay-viewer-has-a-dev-tools-panel-with-console.md +6 -0
- package/corpus/templates/analytics/server/db/schema.ts +3 -0
- package/corpus/templates/analytics/server/jobs/analytics-alerts.ts +4 -0
- package/corpus/templates/analytics/server/lib/analytics-alerts.ts +142 -1
- package/corpus/templates/analytics/server/lib/session-replay-agent-context.ts +369 -8
- package/corpus/templates/analytics/server/lib/session-replay.ts +76 -2
- package/corpus/templates/analytics/server/routes/api/session-replay/agent-diagnostics.json.get.ts +101 -0
- package/corpus/templates/analytics/shared/session-replay-diagnostics.ts +78 -0
- package/corpus/templates/design/app/pages/DesignEditor.tsx +24 -12
- package/corpus/templates/design/changelog/2026-07-02-the-temporary-code-tab-is-hidden-from-the-design-editor-side.md +6 -0
- package/corpus/templates/plan/actions/create-visual-recap.ts +1 -1
- package/corpus/templates/plan/actions/update-local-plan-folder.ts +3 -1
- package/corpus/templates/plan/actions/update-visual-plan.ts +1 -1
- package/corpus/templates/plan/changelog/2026-07-02-trying-to-edit-a-recap-or-plan-you-can-only-view-now-explain.md +6 -0
- package/corpus/templates/plan/server/plans.ts +26 -9
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +155 -34
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +29 -0
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +73 -0
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +41 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +100 -4
- package/dist/agent/run-store.js.map +1 -1
- package/dist/agent/types.d.ts +13 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/client/RunStuckBanner.d.ts.map +1 -1
- package/dist/client/RunStuckBanner.js +13 -0
- package/dist/client/RunStuckBanner.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +410 -0
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/analytics.d.ts +1 -1
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/error-format.d.ts.map +1 -1
- package/dist/client/error-format.js +2 -0
- package/dist/client/error-format.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/session-replay.d.ts +36 -0
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +579 -1
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +20 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +42 -11
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/use-run-stuck-detection.d.ts +14 -4
- package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
- package/dist/client/use-run-stuck-detection.js +18 -4
- package/dist/client/use-run-stuck-detection.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +2 -2
- package/dist/db/runtime-diagnostics.d.ts +52 -0
- package/dist/db/runtime-diagnostics.d.ts.map +1 -0
- package/dist/db/runtime-diagnostics.js +250 -0
- package/dist/db/runtime-diagnostics.js.map +1 -0
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/observability/routes.d.ts +3 -3
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/routes.d.ts +3 -3
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +101 -2
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +17 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +65 -5
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/http-response-telemetry.d.ts +4 -0
- package/dist/server/http-response-telemetry.d.ts.map +1 -0
- package/dist/server/http-response-telemetry.js +174 -0
- package/dist/server/http-response-telemetry.js.map +1 -0
- package/dist/server/self-dispatch.d.ts +17 -0
- package/dist/server/self-dispatch.d.ts.map +1 -1
- package/dist/server/self-dispatch.js +11 -0
- package/dist/server/self-dispatch.js.map +1 -1
- package/docs/content/locales/ar-SA/tracking.mdx +55 -0
- package/docs/content/locales/de-DE/tracking.mdx +55 -0
- package/docs/content/locales/es-ES/tracking.mdx +55 -0
- package/docs/content/locales/fr-FR/tracking.mdx +55 -0
- package/docs/content/locales/hi-IN/tracking.mdx +55 -0
- package/docs/content/locales/ja-JP/tracking.mdx +55 -0
- package/docs/content/locales/ko-KR/tracking.mdx +55 -0
- package/docs/content/locales/pt-BR/tracking.mdx +55 -0
- package/docs/content/locales/zh-CN/tracking.mdx +55 -0
- package/docs/content/locales/zh-TW/tracking.mdx +55 -0
- package/docs/content/tracking.mdx +2 -0
- package/package.json +1 -1
|
@@ -188,6 +188,61 @@ track("checkout.completed", { total: 49.99, items: 3 });
|
|
|
188
188
|
|
|
189
189
|
यह फ्रेमवर्क के आंतरिक ब्राउज़र टेलीमेट्री (`trackEvent()` / स्वचालित पेजव्यू - नीचे [Browser defaults](#browser-defaults) देखें) से अलग है, जो Agent Native के स्वयं के उत्पाद विश्लेषण को शक्ति प्रदान करता है। अपने ऐप के स्वयं के एनालिटिक्स इवेंट के लिए `track()` का उपयोग करें जो आपके कॉन्फ़िगर किए गए प्रदाताओं तक पहुंचना चाहिए।
|
|
190
190
|
|
|
191
|
+
## Session replay {#session-replay}
|
|
192
|
+
|
|
193
|
+
Agent Native ऐप्स दूसरा एनालिटिक्स SDK जोड़े बिना फर्स्ट-पार्टी ब्राउज़र session replay को ऑप्ट इन कर सकते हैं। ब्राउज़र रूट में एक बार `configureTracking()` को कॉल करें और Analytics पब्लिक की के साथ collector endpoint पास करें:
|
|
194
|
+
|
|
195
|
+
```ts
|
|
196
|
+
import { configureTracking } from "@agent-native/core/client";
|
|
197
|
+
|
|
198
|
+
configureTracking({
|
|
199
|
+
key: "anpk_...",
|
|
200
|
+
endpoint: "https://analytics.example.com/api/analytics/track",
|
|
201
|
+
sessionReplay: {
|
|
202
|
+
enabled: true,
|
|
203
|
+
sampleRate: 0.1,
|
|
204
|
+
},
|
|
205
|
+
getDefaultProps: (_event, props) => ({
|
|
206
|
+
...props,
|
|
207
|
+
app: "my-app",
|
|
208
|
+
template: "my-template",
|
|
209
|
+
}),
|
|
210
|
+
});
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
जब `sessionReplay.enabled` truthy होता है, तो क्लाइंट स्टार्टअप के बाद `@rrweb/record` को डायनेमिक रूप से इंपोर्ट करता है और replay chunks को replay endpoint पर पोस्ट करता है। यदि `endpoint`, `/api/analytics/track` या `/track` पर समाप्त होता है, तो replay endpoint स्वचालित रूप से `/api/analytics/replay` के रूप में व्युत्पन्न होता है। जब replay collector कहीं और हो, तो इसे `sessionReplay.endpoint` के साथ स्पष्ट रूप से ओवरराइड करें।
|
|
214
|
+
|
|
215
|
+
Agent Native टेम्पलेट रूट पहले से ही `configureTracking()` को कॉल करते हैं। होस्टेड टेम्पलेट डिप्लॉयमेंट Vite/Netlify एनवायरनमेंट वेरिएबल्स के साथ replay चालू कर सकते हैं, जबकि लाइब्रेरी उपभोक्ताओं को ऊपर दिए गए स्पष्ट `configureTracking({ key, endpoint, sessionReplay })` फॉर्म को प्राथमिकता देनी चाहिए:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY=anpk_...
|
|
219
|
+
VITE_AGENT_NATIVE_ANALYTICS_ENDPOINT=https://analytics.example.com/api/analytics/track
|
|
220
|
+
VITE_AGENT_NATIVE_SESSION_REPLAY_ENABLED=true
|
|
221
|
+
VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE=0.1
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
ब्राउज़र हेल्पर वर्तमान Agent Native auth session का एक बेस्ट-एफर्ट, नॉन-ब्लॉकिंग रीड भी करता है। Replay डिफ़ॉल्ट रूप से केवल साइन-इन उपयोगकर्ताओं के लिए है: जब `sessionReplay` सक्षम होता है, तो जब तक session किसी उपयोगकर्ता के ईमेल पते पर रिज़ॉल्व नहीं होता, तब तक रिकॉर्डिंग शुरू नहीं होती। साइन-इन replays में ईमेल-बैक्ड `userId`/`userEmail` के साथ `orgId` शामिल होता है।
|
|
225
|
+
|
|
226
|
+
`sessionReplay.requireSignedInUser: false` या `VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH=false` को केवल एक जानबूझकर किए गए एनोनिमस replay डिप्लॉयमेंट के लिए सेट करें। जब auth gating अक्षम होती है, तो एनोनिमस रिकॉर्डिंग्स एनोनिमस विज़िटर, session, app/template, hostname, और path के अनुसार क्वेरी करने योग्य बनी रहती हैं।
|
|
227
|
+
|
|
228
|
+
Session replay प्रत्येक ब्राउज़र session के लिए निर्धारक रूप से सैंपल किया जाता है। `0.1` का `sampleRate` लगभग 10% योग्य sessions को रिकॉर्ड करता है; जब योग्य आबादी जानबूझकर छोटी हो, जैसे कि केवल-साइन-इन डॉगफूडिंग, तो `1` का उपयोग करें।
|
|
229
|
+
|
|
230
|
+
प्राइवेसी डिफ़ॉल्ट जानबूझकर रूढ़िवादी हैं लेकिन फिर भी प्लेबैक के लिए उपयोगी हैं:
|
|
231
|
+
|
|
232
|
+
- Inputs डिफ़ॉल्ट रूप से मास्क किए जाते हैं (`maskAllInputs: true`)।
|
|
233
|
+
- पेज टेक्स्ट तब तक दिखाई देता रहता है जब तक कि किसी एलिमेंट को `.an-mask` या `data-an-mask` से चिह्नित न किया जाए।
|
|
234
|
+
- संवेदनशील ज़ोन को `[data-sensitive]`, `.an-block`, `.an-private`, `data-an-block`, `data-an-private`, और क्रेडिट-कार्ड/पासवर्ड/SSN-जैसे फ़ील्ड्स जैसे सेलेक्टर्स के साथ ब्लॉक किया जाता है।
|
|
235
|
+
- URLs को ब्राउज़र एनालिटिक्स द्वारा उपयोग किए जाने वाले समान `scrubUrl()` हेल्पर के साथ स्क्रब किया जाता है।
|
|
236
|
+
- Replay capture केवल-वेब और ऑप्ट-इन है; यह नेटिव डेस्कटॉप स्क्रीन को रिकॉर्ड नहीं करता।
|
|
237
|
+
|
|
238
|
+
रिकॉर्डिंग के दौरान, session replay ब्राउज़र कंसोल आउटपुट (`log`, `info`, `warn`, `error`, `debug`, साथ ही window `error` / `unhandledrejection`) और नेटवर्क रिक्वेस्ट मेटाडेटा (`fetch` और XHR) को टैग किए गए rrweb कस्टम इवेंट्स के रूप में भी कैप्चर करता है, ताकि एजेंट और replay viewer उपयोगकर्ता-रिपोर्ट की गई समस्याओं को डीबग कर सकें। जब replay सक्षम होता है तो capture डिफ़ॉल्ट रूप से चालू होता है; इसे `sessionReplay.console` और `sessionReplay.network` विकल्पों के साथ ट्यून या अक्षम करें, प्रत्येक एक बूलियन या एक विकल्प ऑब्जेक्ट स्वीकार करता है। Request/response bodies और headers कभी कैप्चर नहीं किए जाते, URLs स्क्रब किए जाते हैं, संदेश छोटे किए जाते हैं, रिकॉर्डर का अपना ingest/tracking ट्रैफ़िक बाहर रखा जाता है, और प्रति-session बजट (1000 console / 2000 network events) से अधिक होने पर एक truncation नोटिस जोड़ते हैं।
|
|
239
|
+
|
|
240
|
+
Analytics टेम्पलेट replay मेटाडेटा को SQL (`session_recordings`) में संग्रहीत करता है और chunks को प्राइवेट blob refs (`session_replay_chunks`) के माध्यम से संग्रहीत करता है। ब्राउज़र और एजेंट को कभी भी प्रदाता URLs प्राप्त नहीं होते। Playback स्कोप्ड सर्वर रूट्स के माध्यम से जाता है और डिफ़ॉल्ट एजेंट टूल्स सारांश या बाउंडेड replay events लौटाते हैं, कच्ची chunk table एक्सेस नहीं।
|
|
241
|
+
|
|
242
|
+
जब आपको किसी बाहरी एजेंट को एक प्राइवेट रिकॉर्डिंग सौंपने की आवश्यकता हो, तो session डिटेल पेज के **Copy for agent** नियंत्रण का उपयोग करें। यह एक दो-घंटे का, रिकॉर्डिंग-स्कोप्ड `agent_access` लिंक बनाता है, `/sessions/:recordingId` पर एक छोटा डिस्कवरी पेलोड SSR करता है, और केवल एजेंट context/events JSON APIs को एक्सपोज़ करता है। रिकॉर्डिंग की visibility नहीं बदलती।
|
|
243
|
+
|
|
244
|
+
केवल स्थानीय विकास के लिए, Analytics प्राइवेट blob storage उपलब्ध न होने पर capped SQL inline chunks पर फ़ॉलबैक कर सकता है। प्रोडक्शन डिप्लॉयमेंट्स को replay payloads के लिए Postgres पर निर्भर रहने के बजाय प्राइवेट या एन्क्रिप्टेड blob storage कॉन्फ़िगर करना चाहिए।
|
|
245
|
+
|
|
191
246
|
## उन्नत: कस्टम प्रदाता और आंतरिक {#advanced}
|
|
192
247
|
|
|
193
248
|
अधिकांश ऐप्स को केवल `track()` / `identify()` और एक अंतर्निहित प्रदाता की आवश्यकता होती है। शेष सतह - कस्टम प्रदाताओं का पंजीकरण, `TrackingProvider` इंटरफ़ेस, बैचिंग आंतरिक, और फ्रेमवर्क का अपना ब्राउज़र टेलीमेट्री - नीचे है।
|
|
@@ -188,6 +188,61 @@ track("checkout.completed", { total: 49.99, items: 3 });
|
|
|
188
188
|
|
|
189
189
|
これは、Agent Native 独自の製品分析を強化するフレームワークの内部ブラウザー テレメトリ (`trackEvent()` / 自動ページビュー — 以下の [Browser defaults](#browser-defaults) を参照) とは異なります。設定されたプロバイダーに到達する必要があるアプリ独自の分析イベントには、`track()` を使用します。
|
|
190
190
|
|
|
191
|
+
## セッション リプレイ {#session-replay}
|
|
192
|
+
|
|
193
|
+
Agent Native アプリは、2 つ目の分析 SDK を追加することなく、ファーストパーティのブラウザー セッション リプレイを利用できます。ブラウザー ルートで一度 `configureTracking()` を呼び出し、Analytics の公開キーとコレクター エンドポイントを渡します。
|
|
194
|
+
|
|
195
|
+
```ts
|
|
196
|
+
import { configureTracking } from "@agent-native/core/client";
|
|
197
|
+
|
|
198
|
+
configureTracking({
|
|
199
|
+
key: "anpk_...",
|
|
200
|
+
endpoint: "https://analytics.example.com/api/analytics/track",
|
|
201
|
+
sessionReplay: {
|
|
202
|
+
enabled: true,
|
|
203
|
+
sampleRate: 0.1,
|
|
204
|
+
},
|
|
205
|
+
getDefaultProps: (_event, props) => ({
|
|
206
|
+
...props,
|
|
207
|
+
app: "my-app",
|
|
208
|
+
template: "my-template",
|
|
209
|
+
}),
|
|
210
|
+
});
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
`sessionReplay.enabled` が truthy の場合、クライアントは起動後に `@rrweb/record` を動的にインポートし、リプレイ チャンクをリプレイ エンドポイントに POST します。`endpoint` が `/api/analytics/track` または `/track` で終わる場合、リプレイ エンドポイントは `/api/analytics/replay` として自動的に導出されます。リプレイ コレクターが別の場所にある場合は、`sessionReplay.endpoint` で明示的にオーバーライドしてください。
|
|
214
|
+
|
|
215
|
+
Agent Native のテンプレート ルートはすでに `configureTracking()` を呼び出しています。ホストされたテンプレート デプロイでは Vite/Netlify の環境変数でリプレイを有効化でき、ライブラリとして利用する場合は上記の明示的な `configureTracking({ key, endpoint, sessionReplay })` の形式を推奨します。
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY=anpk_...
|
|
219
|
+
VITE_AGENT_NATIVE_ANALYTICS_ENDPOINT=https://analytics.example.com/api/analytics/track
|
|
220
|
+
VITE_AGENT_NATIVE_SESSION_REPLAY_ENABLED=true
|
|
221
|
+
VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE=0.1
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
ブラウザー ヘルパーは、現在の Agent Native 認証セッションのベストエフォートかつノンブロッキングな読み取りも行います。リプレイはデフォルトでサインイン済みユーザー限定です。`sessionReplay` が有効な場合、セッションがユーザーのメール アドレスに解決されない限り、記録は開始されません。サインイン済みのリプレイには、メールに紐づく `userId`/`userEmail` と `orgId` が含まれます。
|
|
225
|
+
|
|
226
|
+
意図的に匿名リプレイをデプロイする場合にのみ、`sessionReplay.requireSignedInUser: false` または `VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH=false` を設定してください。認証ゲーティングを無効にすると、匿名の記録は匿名訪問者、セッション、アプリ/テンプレート、ホスト名、パスで引き続きクエリ可能です。
|
|
227
|
+
|
|
228
|
+
セッション リプレイは、ブラウザー セッションごとに決定論的にサンプリングされます。`sampleRate` を `0.1` に設定すると、対象セッションの約 10% が記録されます。ログイン済みユーザーのみの動作確認など、対象母集団が意図的に小さい場合は `1` を使用してください。
|
|
229
|
+
|
|
230
|
+
プライバシーのデフォルト設定は意図的に控えめですが、再生には十分役立ちます。
|
|
231
|
+
|
|
232
|
+
- 入力はデフォルトでマスクされます (`maskAllInputs: true`)。
|
|
233
|
+
- ページ テキストは、要素に `.an-mask` または `data-an-mask` が付いていない限り表示されたままです。
|
|
234
|
+
- 機密ゾーンは、`[data-sensitive]`、`.an-block`、`.an-private`、`data-an-block`、`data-an-private`、およびクレジット カード/パスワード/SSN のようなフィールドなどのセレクターでブロックされます。
|
|
235
|
+
- URL は、ブラウザー分析で使用されるものと同じ `scrubUrl()` ヘルパーでスクラブされます。
|
|
236
|
+
- リプレイ キャプチャは Web 専用でオプトインです。ネイティブ デスクトップ画面は記録しません。
|
|
237
|
+
|
|
238
|
+
記録中、セッション リプレイはブラウザーのコンソール出力 (`log`、`info`、`warn`、`error`、`debug`、およびウィンドウの `error`/`unhandledrejection`) とネットワーク リクエストのメタデータ (`fetch` および XHR) もタグ付けされた rrweb カスタム イベントとしてキャプチャするため、エージェントとリプレイ ビューアーがユーザー報告の問題をデバッグできます。キャプチャは、リプレイが有効な場合デフォルトでオンになっています。`sessionReplay.console` と `sessionReplay.network` オプション (それぞれ真偽値またはオプション オブジェクトを受け取ります) で調整または無効化できます。リクエスト/レスポンスの本文とヘッダーは記録されず、URL はスクラブされ、メッセージは切り詰められ、レコーダー自身の取り込み/追跡トラフィックは除外されます。セッションごとの上限 (コンソール 1000 件/ネットワーク 2000 件) を超えると切り詰めの通知が追加されます。
|
|
239
|
+
|
|
240
|
+
Analytics テンプレートは、リプレイ メタデータを SQL (`session_recordings`) に保存し、チャンクはプライベートな blob 参照 (`session_replay_chunks`) を通じて保存します。ブラウザーとエージェントはプロバイダーの URL を受け取ることはありません。再生はスコープ付きのサーバー ルートを経由し、デフォルトのエージェント ツールは要約または範囲を限定したリプレイ イベントを返すのみで、生のチャンク テーブルへのアクセスはできません。
|
|
241
|
+
|
|
242
|
+
プライベートな記録を外部エージェントに渡す必要がある場合は、セッション詳細ページの **Copy for agent** コントロールを使用します。これにより、2 時間有効で記録にスコープされた `agent_access` リンクが発行され、`/sessions/:recordingId` で小さなディスカバリー ペイロードが SSR され、エージェント コンテキスト/イベントの JSON API のみが公開されます。記録の可視性は変更されません。
|
|
243
|
+
|
|
244
|
+
ローカル開発でのみ、Analytics はプライベートな blob ストレージが利用できない場合に、上限付きの SQL インライン チャンクにフォールバックできます。本番デプロイでは、リプレイ ペイロードを Postgres に依存するのではなく、プライベートまたは暗号化された blob ストレージを設定する必要があります。
|
|
245
|
+
|
|
191
246
|
## 上級: カスタムプロバイダーと内部 {#advanced}
|
|
192
247
|
|
|
193
248
|
ほとんどのアプリでは、`track()` / `identify()` と組み込みプロバイダーのみが必要です。表面の残りの部分 (カスタム プロバイダーの登録、`TrackingProvider` インターフェイス、内部処理のバッチ処理、フレームワーク独自のブラウザ テレメトリ) は以下のとおりです。
|
|
@@ -188,6 +188,61 @@ track("checkout.completed", { total: 49.99, items: 3 });
|
|
|
188
188
|
|
|
189
189
|
이는 Agent Native의 자체 제품 분석을 지원하는 프레임워크의 내부 브라우저 원격 측정(`trackEvent()` / 자동 페이지뷰 - 아래 [Browser defaults](#browser-defaults) 참조)과 다릅니다. 구성된 제공업체에 도달해야 하는 앱 자체 분석 이벤트에 `track()`를 사용하세요.
|
|
190
190
|
|
|
191
|
+
## 세션 리플레이 {#session-replay}
|
|
192
|
+
|
|
193
|
+
Agent Native 앱은 두 번째 분석 SDK를 추가하지 않고도 퍼스트파티 브라우저 세션 리플레이를 사용하도록 설정할 수 있습니다. 브라우저 루트에서 `configureTracking()`을 한 번 호출하고 Analytics 공개 키와 수집기 엔드포인트를 전달하세요.
|
|
194
|
+
|
|
195
|
+
```ts
|
|
196
|
+
import { configureTracking } from "@agent-native/core/client";
|
|
197
|
+
|
|
198
|
+
configureTracking({
|
|
199
|
+
key: "anpk_...",
|
|
200
|
+
endpoint: "https://analytics.example.com/api/analytics/track",
|
|
201
|
+
sessionReplay: {
|
|
202
|
+
enabled: true,
|
|
203
|
+
sampleRate: 0.1,
|
|
204
|
+
},
|
|
205
|
+
getDefaultProps: (_event, props) => ({
|
|
206
|
+
...props,
|
|
207
|
+
app: "my-app",
|
|
208
|
+
template: "my-template",
|
|
209
|
+
}),
|
|
210
|
+
});
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
`sessionReplay.enabled`가 참 값이면 클라이언트는 시작 후 `@rrweb/record`를 동적으로 가져와 리플레이 청크를 리플레이 엔드포인트로 전송합니다. `endpoint`가 `/api/analytics/track` 또는 `/track`로 끝나면 리플레이 엔드포인트는 `/api/analytics/replay`로 자동 유도됩니다. 리플레이 수집기가 다른 곳에 있다면 `sessionReplay.endpoint`로 명시적으로 재정의하세요.
|
|
214
|
+
|
|
215
|
+
Agent Native 템플릿 루트는 이미 `configureTracking()`을 호출합니다. 호스팅된 템플릿 배포는 Vite/Netlify 환경 변수로 리플레이를 켤 수 있으며, 라이브러리 소비자는 위의 명시적인 `configureTracking({ key, endpoint, sessionReplay })` 형태를 사용하는 것이 좋습니다.
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY=anpk_...
|
|
219
|
+
VITE_AGENT_NATIVE_ANALYTICS_ENDPOINT=https://analytics.example.com/api/analytics/track
|
|
220
|
+
VITE_AGENT_NATIVE_SESSION_REPLAY_ENABLED=true
|
|
221
|
+
VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE=0.1
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
브라우저 도우미는 또한 현재 Agent Native 인증 세션에 대해 최선을 다하는 논블로킹 읽기를 수행합니다. 리플레이는 기본적으로 로그인한 사용자에게만 적용됩니다. `sessionReplay`가 활성화되어 있어도 세션이 사용자 이메일 주소로 확인되지 않으면 녹화가 시작되지 않습니다. 로그인한 사용자의 리플레이에는 이메일 기반 `userId`/`userEmail`과 `orgId`가 포함됩니다.
|
|
225
|
+
|
|
226
|
+
의도적으로 익명 리플레이를 배포하려는 경우에만 `sessionReplay.requireSignedInUser: false` 또는 `VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH=false`를 설정하세요. 인증 게이팅을 비활성화하면 익명 녹화는 익명 방문자, 세션, 앱/템플릿, 호스트명, 경로별로 계속 쿼리할 수 있습니다.
|
|
227
|
+
|
|
228
|
+
세션 리플레이는 브라우저 세션별로 결정적으로 샘플링됩니다. `sampleRate`가 `0.1`이면 대상이 되는 세션의 약 10%가 기록됩니다. 로그인 전용 도그푸딩처럼 대상 모집단이 의도적으로 작을 때는 `1`을 사용하세요.
|
|
229
|
+
|
|
230
|
+
개인정보 보호 기본값은 의도적으로 보수적이지만 재생에는 여전히 유용합니다.
|
|
231
|
+
|
|
232
|
+
- 입력값은 기본적으로 마스킹됩니다 (`maskAllInputs: true`).
|
|
233
|
+
- 페이지 텍스트는 `.an-mask` 또는 `data-an-mask`로 표시된 요소가 아닌 한 계속 표시됩니다.
|
|
234
|
+
- 민감한 영역은 `[data-sensitive]`, `.an-block`, `.an-private`, `data-an-block`, `data-an-private`와 같은 선택자, 그리고 신용카드/비밀번호/주민등록번호와 유사한 필드로 차단됩니다.
|
|
235
|
+
- URL은 브라우저 분석에서 사용하는 것과 동일한 `scrubUrl()` 도우미로 정제됩니다.
|
|
236
|
+
- 리플레이 캡처는 웹 전용이며 옵트인 방식입니다. 네이티브 데스크톱 화면은 기록하지 않습니다.
|
|
237
|
+
|
|
238
|
+
기록하는 동안 세션 리플레이는 브라우저 콘솔 출력(`log`, `info`, `warn`, `error`, `debug` 및 window `error` / `unhandledrejection`)과 네트워크 요청 메타데이터(`fetch` 및 XHR)를 태그가 지정된 rrweb 커스텀 이벤트로 캡처하므로, 에이전트와 리플레이 뷰어가 사용자가 보고한 문제를 디버그할 수 있습니다. 리플레이가 활성화되면 캡처는 기본적으로 켜져 있으며, `sessionReplay.console` 및 `sessionReplay.network` 옵션으로 조정하거나 비활성화할 수 있습니다. 각 옵션은 불리언 또는 옵션 객체를 받습니다. 요청/응답 본문과 헤더는 절대 캡처되지 않고, URL은 정제되며, 메시지는 잘리고, 레코더 자체의 수집/추적 트래픽은 제외되며, 세션당 한도(콘솔 1000개 / 네트워크 2000개 이벤트)를 초과하면 잘림 안내가 추가됩니다.
|
|
239
|
+
|
|
240
|
+
Analytics 템플릿은 리플레이 메타데이터를 SQL(`session_recordings`)에 저장하고 청크는 프라이빗 blob 참조(`session_replay_chunks`)를 통해 저장합니다. 브라우저와 에이전트는 공급자 URL을 절대 받지 않습니다. 재생은 범위가 지정된 서버 경로를 거치며, 기본 에이전트 도구는 원시 청크 테이블 접근이 아닌 요약 또는 범위가 지정된 리플레이 이벤트를 반환합니다.
|
|
241
|
+
|
|
242
|
+
프라이빗 녹화를 외부 에이전트에게 전달해야 할 때는 세션 상세 페이지의 **Copy for agent** 컨트롤을 사용하세요. 이는 두 시간 동안 유효한 녹화 범위의 `agent_access` 링크를 발급하고, `/sessions/:recordingId`에서 작은 디스커버리 페이로드를 SSR하며, 에이전트 컨텍스트/이벤트 JSON API만 노출합니다. 녹화의 공개 범위는 변경되지 않습니다.
|
|
243
|
+
|
|
244
|
+
로컬 개발 환경에서만 Analytics는 프라이빗 blob 스토리지를 사용할 수 없을 때 용량이 제한된 SQL 인라인 청크로 대체할 수 있습니다. 프로덕션 배포에서는 리플레이 페이로드를 Postgres에 의존하기보다 프라이빗 또는 암호화된 blob 스토리지를 구성해야 합니다.
|
|
245
|
+
|
|
191
246
|
## 고급: 맞춤형 공급자 및 내부 {#advanced}
|
|
192
247
|
|
|
193
248
|
대부분의 앱에는 `track()` / `identify()` 및 내장 공급자만 필요합니다. 사용자 지정 공급자 등록, `TrackingProvider` 인터페이스, 내부 일괄 처리 및 프레임워크의 자체 브라우저 원격 측정 등 나머지 표면은 다음과 같습니다.
|
|
@@ -188,6 +188,61 @@ Principais diferenças em relação ao [server `track()`](#track):
|
|
|
188
188
|
|
|
189
189
|
Isso é diferente da telemetria interna do navegador da estrutura (`trackEvent()`/visualizações automáticas de página — veja [Browser defaults](#browser-defaults) abaixo), que alimenta a análise de produto do próprio Agent Native. Use `track()` para os eventos de análise do seu aplicativo que devem chegar aos provedores configurados.
|
|
190
190
|
|
|
191
|
+
## Replay de sessão {#session-replay}
|
|
192
|
+
|
|
193
|
+
Aplicativos Agent Native podem optar por um replay de sessão do navegador nativo sem adicionar um segundo SDK de análise. Chame `configureTracking()` uma vez na raiz do navegador e passe a chave pública do Analytics mais o endpoint do coletor:
|
|
194
|
+
|
|
195
|
+
```ts
|
|
196
|
+
import { configureTracking } from "@agent-native/core/client";
|
|
197
|
+
|
|
198
|
+
configureTracking({
|
|
199
|
+
key: "anpk_...",
|
|
200
|
+
endpoint: "https://analytics.example.com/api/analytics/track",
|
|
201
|
+
sessionReplay: {
|
|
202
|
+
enabled: true,
|
|
203
|
+
sampleRate: 0.1,
|
|
204
|
+
},
|
|
205
|
+
getDefaultProps: (_event, props) => ({
|
|
206
|
+
...props,
|
|
207
|
+
app: "my-app",
|
|
208
|
+
template: "my-template",
|
|
209
|
+
}),
|
|
210
|
+
});
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Quando `sessionReplay.enabled` é verdadeiro, o cliente importa dinamicamente `@rrweb/record` após a inicialização e envia os blocos de replay para o endpoint de replay. Se `endpoint` terminar em `/api/analytics/track` ou `/track`, o endpoint de replay é derivado automaticamente como `/api/analytics/replay`. Substitua-o explicitamente com `sessionReplay.endpoint` quando o coletor de replay estiver em outro lugar.
|
|
214
|
+
|
|
215
|
+
As raízes dos modelos do Agent Native já chamam `configureTracking()`. As implantações hospedadas de modelos podem ativar o replay com variáveis de ambiente do Vite/Netlify, enquanto os consumidores de biblioteca devem preferir a forma explícita `configureTracking({ key, endpoint, sessionReplay })` acima:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY=anpk_...
|
|
219
|
+
VITE_AGENT_NATIVE_ANALYTICS_ENDPOINT=https://analytics.example.com/api/analytics/track
|
|
220
|
+
VITE_AGENT_NATIVE_SESSION_REPLAY_ENABLED=true
|
|
221
|
+
VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE=0.1
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
O auxiliar do navegador também realiza uma leitura best-effort e não bloqueante da sessão de autenticação atual do Agent Native. O replay é, por padrão, exclusivo para usuários conectados: quando `sessionReplay` está habilitado, a gravação não começa a menos que a sessão seja resolvida para um endereço de e-mail de usuário. Replays de usuários conectados incluem `userId`/`userEmail` baseados em e-mail, além de `orgId`.
|
|
225
|
+
|
|
226
|
+
Defina `sessionReplay.requireSignedInUser: false` ou `VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH=false` apenas para uma implantação de replay anônimo intencional. Quando o controle de autenticação está desabilitado, as gravações anônimas permanecem consultáveis por visitante anônimo, sessão, aplicativo/modelo, hostname e caminho.
|
|
227
|
+
|
|
228
|
+
O replay de sessão é amostrado de forma determinística por sessão do navegador. Um `sampleRate` de `0.1` registra cerca de 10% das sessões elegíveis; use `1` quando a população elegível for intencionalmente pequena, como em dogfooding somente para usuários conectados.
|
|
229
|
+
|
|
230
|
+
Os padrões de privacidade são intencionalmente conservadores, mas ainda úteis para a reprodução:
|
|
231
|
+
|
|
232
|
+
- As entradas são mascaradas por padrão (`maskAllInputs: true`).
|
|
233
|
+
- O texto da página permanece visível, a menos que um elemento seja marcado com `.an-mask` ou `data-an-mask`.
|
|
234
|
+
- Zonas sensíveis são bloqueadas com seletores como `[data-sensitive]`, `.an-block`, `.an-private`, `data-an-block`, `data-an-private`, e campos do tipo cartão de crédito/senha/CPF.
|
|
235
|
+
- As URLs são higienizadas com o mesmo auxiliar `scrubUrl()` usado pela análise do navegador.
|
|
236
|
+
- A captura de replay é somente para web e opcional; ela não grava telas de desktop nativas.
|
|
237
|
+
|
|
238
|
+
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. Corpos e cabeçalhos de solicitação/resposta nunca são capturados, 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.
|
|
239
|
+
|
|
240
|
+
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.
|
|
241
|
+
|
|
242
|
+
Quando você precisar entregar uma gravação privada a um agente externo, use o controle **Copy for agent** da página de detalhes da sessão. Ele emite um link `agent_access` com escopo de gravação e validade de duas horas, renderiza via SSR um pequeno payload de descoberta em `/sessions/:recordingId`, e expõe apenas as APIs JSON de contexto/eventos do agente. A visibilidade da gravação não muda.
|
|
243
|
+
|
|
244
|
+
Apenas para desenvolvimento local, o Analytics pode recorrer a blocos embutidos em SQL com limite de tamanho quando o armazenamento privado de blob não estiver disponível. As implantações de produção devem configurar armazenamento de blob privado ou criptografado, em vez de depender do Postgres para os payloads de replay.
|
|
245
|
+
|
|
191
246
|
## Avançado: provedores personalizados e internos {#advanced}
|
|
192
247
|
|
|
193
248
|
A maioria dos aplicativos só precisa de `track()`/`identify()` e de um provedor integrado. O resto da superfície – registro de provedores personalizados, a interface `TrackingProvider`, processamento interno de lotes e a telemetria do navegador da própria estrutura – está abaixo.
|
|
@@ -188,6 +188,61 @@ track("checkout.completed", { total: 49.99, items: 3 });
|
|
|
188
188
|
|
|
189
189
|
这与框架的内部浏览器遥测(`trackEvent()` /自动页面浏览量 - 请参阅下面的 [Browser defaults](#browser-defaults))不同,后者为 Agent Native 自己的产品分析提供支持。将 `track()` 用于您的应用自己的分析事件,这些事件应到达您配置的提供商。
|
|
190
190
|
|
|
191
|
+
## 会话重放 {#session-replay}
|
|
192
|
+
|
|
193
|
+
Agent Native 应用无需添加第二个分析 SDK,即可接入第一方浏览器会话重放功能。在浏览器根部调用一次 `configureTracking()`,并传入 Analytics 公钥和采集端点:
|
|
194
|
+
|
|
195
|
+
```ts
|
|
196
|
+
import { configureTracking } from "@agent-native/core/client";
|
|
197
|
+
|
|
198
|
+
configureTracking({
|
|
199
|
+
key: "anpk_...",
|
|
200
|
+
endpoint: "https://analytics.example.com/api/analytics/track",
|
|
201
|
+
sessionReplay: {
|
|
202
|
+
enabled: true,
|
|
203
|
+
sampleRate: 0.1,
|
|
204
|
+
},
|
|
205
|
+
getDefaultProps: (_event, props) => ({
|
|
206
|
+
...props,
|
|
207
|
+
app: "my-app",
|
|
208
|
+
template: "my-template",
|
|
209
|
+
}),
|
|
210
|
+
});
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
当 `sessionReplay.enabled` 为真值时,客户端会在启动后动态导入 `@rrweb/record`,并将重放数据块发送到重放端点。如果 `endpoint` 以 `/api/analytics/track` 或 `/track` 结尾,重放端点会自动推导为 `/api/analytics/replay`。当重放采集器位于其他位置时,可通过 `sessionReplay.endpoint` 显式覆盖。
|
|
214
|
+
|
|
215
|
+
Agent Native 模板根已经调用了 `configureTracking()`。托管模板部署可以通过 Vite/Netlify 环境变量开启重放,而库使用者则应优先使用上面显式的 `configureTracking({ key, endpoint, sessionReplay })` 形式:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY=anpk_...
|
|
219
|
+
VITE_AGENT_NATIVE_ANALYTICS_ENDPOINT=https://analytics.example.com/api/analytics/track
|
|
220
|
+
VITE_AGENT_NATIVE_SESSION_REPLAY_ENABLED=true
|
|
221
|
+
VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE=0.1
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
浏览器端辅助函数还会尽力地、非阻塞地读取当前 Agent Native 认证会话。默认情况下,重放仅限已登录用户:启用 `sessionReplay` 后,除非会话解析出用户邮箱地址,否则不会开始录制。已登录用户的重放会包含基于邮箱的 `userId`/`userEmail` 以及 `orgId`。
|
|
225
|
+
|
|
226
|
+
仅在有意进行匿名重放部署时,才设置 `sessionReplay.requireSignedInUser: false` 或 `VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH=false`。禁用认证门控后,匿名录制仍可按匿名访客、会话、应用/模板、主机名和路径进行查询。
|
|
227
|
+
|
|
228
|
+
会话重放按浏览器会话确定性采样。`sampleRate` 为 `0.1` 时,会记录约 10% 的符合条件的会话;当符合条件的用户群体本就很小时(例如仅限登录用户的内部测试),可使用 `1`。
|
|
229
|
+
|
|
230
|
+
隐私默认设置刻意保持保守,但仍能满足回放的可用性:
|
|
231
|
+
|
|
232
|
+
- 默认屏蔽输入内容(`maskAllInputs: true`)。
|
|
233
|
+
- 页面文本默认保持可见,除非元素被标记为 `.an-mask` 或 `data-an-mask`。
|
|
234
|
+
- 敏感区域会通过诸如 `[data-sensitive]`、`.an-block`、`.an-private`、`data-an-block`、`data-an-private` 等选择器以及类似信用卡/密码/社会安全号码的字段进行屏蔽。
|
|
235
|
+
- URL 会使用与浏览器分析相同的 `scrubUrl()` 辅助函数进行清理。
|
|
236
|
+
- 重放采集仅限 Web 端且为选择性加入(opt-in);不会录制原生桌面屏幕。
|
|
237
|
+
|
|
238
|
+
录制期间,会话重放还会捕获浏览器控制台输出(`log`、`info`、`warn`、`error`、`debug`,以及 window 的 `error` / `unhandledrejection`)和网络请求元数据(`fetch` 和 XHR),并将其作为带标签的 rrweb 自定义事件记录下来,以便代理和重放查看器调试用户报告的问题。启用重放后,此项捕获默认开启;可通过 `sessionReplay.console` 和 `sessionReplay.network` 选项进行调整或禁用,两者均可接受布尔值或选项对象。请求/响应的正文和请求头永远不会被捕获,URL 会被清理,消息会被截断,录制器自身的上报/跟踪流量会被排除,并且每个会话的配额(1000 条控制台事件 / 2000 条网络事件)在超出时会附加截断提示。
|
|
239
|
+
|
|
240
|
+
Analytics 模板将重放元数据存储在 SQL(`session_recordings`)中,并通过私有 blob 引用(`session_replay_chunks`)存储数据块。浏览器和代理永远不会收到提供商的 URL。回放通过受限的服务器路由进行,默认的代理工具返回的是摘要或有限范围的重放事件,而非原始数据块表的直接访问权限。
|
|
241
|
+
|
|
242
|
+
当需要将私有录制内容提供给外部代理时,可使用会话详情页面的**复制给代理**控件。它会生成一个两小时有效期、仅限该录制的 `agent_access` 链接,在 `/sessions/:recordingId` 上以服务器端渲染方式生成一个小型发现载荷,并只暴露代理上下文/事件的 JSON API。该录制本身的可见性不会改变。
|
|
243
|
+
|
|
244
|
+
仅在本地开发环境下,当私有 blob 存储不可用时,Analytics 可以回退为使用有上限的 SQL 内联数据块。生产部署应配置私有或加密的 blob 存储,而不是依赖 Postgres 来存放重放数据。
|
|
245
|
+
|
|
191
246
|
## 高级:自定义提供程序和内部结构 {#advanced}
|
|
192
247
|
|
|
193
248
|
大多数应用程序只需要 `track()` / `identify()` 和内置提供程序。表面的其余部分 - 注册自定义提供程序、`TrackingProvider` 接口、批处理内部结构以及框架自己的浏览器遥测 - 如下。
|
|
@@ -188,6 +188,61 @@ track("checkout.completed", { total: 49.99, items: 3 });
|
|
|
188
188
|
|
|
189
189
|
這與框架的內部瀏覽器遙測(`trackEvent()` /自動頁面瀏覽量 - 請參閱下面的 [Browser defaults](#browser-defaults))不同,後者為 Agent Native 自己的產品分析提供支援。將 `track()` 用於您的應用自己的分析事件,這些事件應到達您設定的提供者。
|
|
190
190
|
|
|
191
|
+
## 工作階段重播 {#session-replay}
|
|
192
|
+
|
|
193
|
+
Agent Native 應用程式可以選擇加入第一方瀏覽器工作階段重播,而無需新增第二個分析 SDK。在瀏覽器根目錄中呼叫一次 `configureTracking()`,並傳入 Analytics 公開金鑰以及收集器端點:
|
|
194
|
+
|
|
195
|
+
```ts
|
|
196
|
+
import { configureTracking } from "@agent-native/core/client";
|
|
197
|
+
|
|
198
|
+
configureTracking({
|
|
199
|
+
key: "anpk_...",
|
|
200
|
+
endpoint: "https://analytics.example.com/api/analytics/track",
|
|
201
|
+
sessionReplay: {
|
|
202
|
+
enabled: true,
|
|
203
|
+
sampleRate: 0.1,
|
|
204
|
+
},
|
|
205
|
+
getDefaultProps: (_event, props) => ({
|
|
206
|
+
...props,
|
|
207
|
+
app: "my-app",
|
|
208
|
+
template: "my-template",
|
|
209
|
+
}),
|
|
210
|
+
});
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
當 `sessionReplay.enabled` 為真值時,用戶端會在啟動後動態匯入 `@rrweb/record`,並將重播區塊發佈到重播端點。如果 `endpoint` 以 `/api/analytics/track` 或 `/track` 結尾,重播端點會自動衍生為 `/api/analytics/replay`。當重播收集器位於其他位置時,請使用 `sessionReplay.endpoint` 明確覆寫它。
|
|
214
|
+
|
|
215
|
+
Agent Native 範本根目錄已經呼叫了 `configureTracking()`。託管範本部署可以透過 Vite/Netlify 環境變數開啟重播,而函式庫使用者則應優先使用上面明確的 `configureTracking({ key, endpoint, sessionReplay })` 形式:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY=anpk_...
|
|
219
|
+
VITE_AGENT_NATIVE_ANALYTICS_ENDPOINT=https://analytics.example.com/api/analytics/track
|
|
220
|
+
VITE_AGENT_NATIVE_SESSION_REPLAY_ENABLED=true
|
|
221
|
+
VITE_AGENT_NATIVE_SESSION_REPLAY_SAMPLE_RATE=0.1
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
瀏覽器輔助程式也會盡力執行、非阻塞式讀取目前的 Agent Native 驗證工作階段。重播預設僅限已登入使用者:當 `sessionReplay` 啟用時,除非工作階段解析出使用者電子郵件地址,否則不會開始錄製。已登入使用者的重播包含以電子郵件為基礎的 `userId`/`userEmail` 以及 `orgId`。
|
|
225
|
+
|
|
226
|
+
僅在刻意進行匿名重播部署時,才設定 `sessionReplay.requireSignedInUser: false` 或 `VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH=false`。停用驗證閘控後,匿名錄製仍可依匿名訪客、工作階段、應用程式/範本、主機名稱與路徑進行查詢。
|
|
227
|
+
|
|
228
|
+
工作階段重播是依瀏覽器工作階段進行確定性取樣的。`sampleRate` 為 `0.1` 表示大約記錄 10% 符合條件的工作階段;當符合條件的母體刻意較小時(例如僅限已登入使用者的內部試用),可使用 `1`。
|
|
229
|
+
|
|
230
|
+
隱私預設值刻意設計得保守,但仍足以支援播放:
|
|
231
|
+
|
|
232
|
+
- 輸入欄位預設會被遮罩(`maskAllInputs: true`)。
|
|
233
|
+
- 頁面文字保持可見,除非元素被標記為 `.an-mask` 或 `data-an-mask`。
|
|
234
|
+
- 敏感區域會透過選擇器(例如 `[data-sensitive]`、`.an-block`、`.an-private`、`data-an-block`、`data-an-private`,以及類似信用卡/密碼/社會安全號碼的欄位)進行封鎖。
|
|
235
|
+
- URL 會使用瀏覽器分析所用的同一個 `scrubUrl()` 輔助函式進行清理。
|
|
236
|
+
- 重播擷取僅限於網頁,且為選擇加入;它不會錄製原生桌面畫面。
|
|
237
|
+
|
|
238
|
+
在錄製期間,工作階段重播還會擷取瀏覽器主控台輸出(`log`、`info`、`warn`、`error`、`debug`,以及視窗的 `error`/`unhandledrejection`)與網路請求元資料(`fetch` 與 XHR),並以帶標籤的 rrweb 自訂事件形式儲存,讓代理與重播檢視器能夠偵錯使用者回報的問題。啟用重播後,擷取功能預設為開啟;可透過 `sessionReplay.console` 與 `sessionReplay.network` 選項進行調整或停用,這兩個選項都接受布林值或選項物件。請求/回應主體與標頭永遠不會被擷取,URL 會被清理,訊息會被截斷,記錄器自身的擷取/追蹤流量會被排除,且每個工作階段的預算(1000 個主控台事件/2000 個網路事件)在超過時會加上截斷提示。
|
|
239
|
+
|
|
240
|
+
Analytics 範本將重播中繼資料儲存在 SQL(`session_recordings`)中,並透過私有 blob 參照(`session_replay_chunks`)儲存區塊。瀏覽器與代理永遠不會收到提供者 URL。播放透過範圍受限的伺服器路由進行,且預設代理工具傳回摘要或範圍受限的重播事件,而非原始區塊資料表存取權。
|
|
241
|
+
|
|
242
|
+
當您需要將私人錄製內容交給外部代理時,請使用工作階段詳細資料頁面的**複製給代理**控制項。它會產生一個兩小時、僅限該筆錄製的 `agent_access` 連結,在 `/sessions/:recordingId` 上以伺服器端轉譯(SSR)一個小型探索酬載,並僅公開代理內容/事件 JSON API。該筆錄製的可見性不會改變。
|
|
243
|
+
|
|
244
|
+
僅在本機開發時,Analytics 可以在私有 blob 儲存體無法使用時,回退到有上限的 SQL 內嵌區塊。正式環境部署應設定私有或加密的 blob 儲存體,而不是依賴 Postgres 來儲存重播酬載。
|
|
245
|
+
|
|
191
246
|
## 進階:自訂提供者和內部結構 {#advanced}
|
|
192
247
|
|
|
193
248
|
大多數應用程式只需要 `track()` / `identify()` 和內建提供者。表面的其餘部分 - 註冊自訂提供者、`TrackingProvider` 介面、批處理內部結構以及框架自己的瀏覽器遙測 - 如下。
|
|
@@ -235,6 +235,8 @@ Privacy defaults are intentionally conservative but still useful for playback:
|
|
|
235
235
|
- URLs are scrubbed with the same `scrubUrl()` helper used by browser analytics.
|
|
236
236
|
- Replay capture is web-only and opt-in; it does not record native desktop screens.
|
|
237
237
|
|
|
238
|
+
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. Request/response bodies and headers are never captured, 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.
|
|
239
|
+
|
|
238
240
|
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.
|
|
239
241
|
|
|
240
242
|
When you need to hand a private recording to an external agent, use the session detail page's **Copy for agent** control. It mints a two-hour, recording-scoped `agent_access` link, SSRs a small discovery payload on `/sessions/:recordingId`, and exposes only the agent context/events JSON APIs. The recording's visibility does not change.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.85.0",
|
|
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": {
|