@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
package/corpus/README.md
CHANGED
package/corpus/core/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @agent-native/core
|
|
2
2
|
|
|
3
|
+
## 0.85.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- b68e4f7: Session replay now captures browser console logs and network request metadata while recording, emitted as tagged rrweb custom events (`agent-native.console` / `agent-native.network`). Capture is on by default when session replay is enabled and configurable via new `console` / `network` options (boolean or object) on the session replay config. Request/response bodies and headers are never captured, URLs are scrubbed, messages are truncated, recorder self-traffic is excluded, and per-session budgets (1000 console / 2000 network events) add a truncation notice.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- b68e4f7: Show a clearer chat recovery message when a model provider returns a bare 401 response.
|
|
12
|
+
- b68e4f7: Retry internal chat continuations when the server briefly reports the same completed run as active.
|
|
13
|
+
- b68e4f7: Make durable background chat runs reliable end-to-end: continuation handoffs are now transactional (the successor run row is inserted before dispatch, the dispatch response is fully awaited with retries instead of racing a 250ms settle timer from a finishing Lambda, and a lost handoff is reaped into a loud error by a new unclaimed-run sweep instead of hanging silently); background dispatch bodies stay under Netlify's 256KB background-function cap by persisting the chat payload on the run row and rehydrating it in the worker; a run-manager-level no-progress backstop covers stall segments the in-loop watchdogs never see; and a durable SQL per-turn run budget bounds pathological continuation loops across every recovery path.
|
|
14
|
+
- b68e4f7: Keep the Extensions sidebar create button hidden until the section is hovered or focused.
|
|
15
|
+
- b68e4f7: Add hosted runtime diagnostics, schema health probes, and server response status telemetry.
|
|
16
|
+
|
|
3
17
|
## 0.84.67
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -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` صادقًا (truthy)، يقوم العميل باستيراد `@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`، حيث يقبل كل منهما قيمة منطقية (boolean) أو كائن خيارات. لا يتم التقاط نصوص/رؤوس الطلبات والاستجابات مطلقًا، ويتم تنظيف عناوين URL، ويتم اقتطاع الرسائل، ويُستثنى حركة استيعاب/تتبع المسجِّل نفسه، وتضيف ميزانيات كل جلسة (1000 حدث وحدة تحكم / 2000 حدث شبكة) إشعار اقتطاع عند تجاوزها.
|
|
239
|
+
|
|
240
|
+
يخزّن قالب Analytics بيانات إعادة التشغيل الوصفية في SQL (`session_recordings`) ويخزّن الأجزاء عبر مراجع blob خاصة (`session_replay_chunks`). لا تتلقى المتصفحات والوكلاء أبدًا عناوين URL الخاصة بالموفر. تمر إعادة التشغيل عبر مسارات خادم محددة النطاق، وتُرجع أدوات الوكيل الافتراضية ملخصات أو أحداث إعادة تشغيل محدودة، وليس وصولاً خامًا إلى جدول الأجزاء.
|
|
241
|
+
|
|
242
|
+
عندما تحتاج إلى تسليم تسجيل خاص إلى وكيل خارجي، استخدم عنصر التحكم **نسخ للوكيل** في صفحة تفاصيل الجلسة. فهو يُنشئ رابط `agent_access` محدد النطاق بالتسجيل ومدته ساعتان، ويقوم بعرض SSR لحمولة اكتشاف صغيرة على `/sessions/:recordingId`، ولا يكشف إلا عن واجهات برمجة تطبيقات JSON الخاصة بسياق/أحداث الوكيل. لا تتغير رؤية التسجيل.
|
|
243
|
+
|
|
244
|
+
للتطوير المحلي فقط، يمكن لـ Analytics الرجوع إلى أجزاء SQL مضمّنة محدودة السعة عندما يكون تخزين blob الخاص غير متاح. يجب أن تُهيّئ عمليات النشر في الإنتاج تخزين blob خاصًا أو مشفّرًا بدلاً من الاعتماد على Postgres لحمولات إعادة التشغيل.
|
|
245
|
+
|
|
191
246
|
## متقدم: الموفرون المخصصون والداخليون {#advanced}
|
|
192
247
|
|
|
193
248
|
تحتاج معظم التطبيقات فقط إلى `track()` / `identify()` وموفر مدمج. بقية السطح - تسجيل موفري الخدمة المخصصين، واجهة `TrackingProvider`، الأجزاء الداخلية المجمعة، والقياس عن بعد للمتصفح الخاص بإطار العمل - موجود أدناه.
|
|
@@ -188,6 +188,61 @@ Hauptunterschiede zum [server `track()`](#track):
|
|
|
188
188
|
|
|
189
189
|
Dies unterscheidet sich von der internen Browser-Telemetrie des Frameworks (`trackEvent()` / automatische Seitenaufrufe – siehe [Browser defaults](#browser-defaults) unten), die die eigene Produktanalyse von Agent Native unterstützt. Verwenden Sie `track()` für die eigenen Analyseereignisse Ihrer App, die Ihre konfigurierten Anbieter erreichen sollen.
|
|
190
190
|
|
|
191
|
+
## Session Replay {#session-replay}
|
|
192
|
+
|
|
193
|
+
Agent-Native-Apps können sich für erstklassiges browserseitiges Session Replay entscheiden, ohne ein zweites Analytics-SDK hinzuzufügen. Rufen Sie `configureTracking()` einmal im Browser-Root auf und übergeben Sie den öffentlichen Analytics-Schlüssel sowie den Collector-Endpunkt:
|
|
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
|
+
Wenn `sessionReplay.enabled` einen truthy Wert hat, importiert der Client nach dem Start dynamisch `@rrweb/record` und sendet Replay-Chunks an den Replay-Endpunkt. Wenn `endpoint` auf `/api/analytics/track` oder `/track` endet, wird der Replay-Endpunkt automatisch als `/api/analytics/replay` abgeleitet. Überschreiben Sie ihn explizit mit `sessionReplay.endpoint`, wenn der Replay-Collector an anderer Stelle liegt.
|
|
214
|
+
|
|
215
|
+
Agent-Native-Template-Roots rufen `configureTracking()` bereits auf. Gehostete Template-Deployments können Replay über Vite-/Netlify-Umgebungsvariablen aktivieren, während Bibliotheks-Konsumenten die explizite Form `configureTracking({ key, endpoint, sessionReplay })` von oben bevorzugen sollten:
|
|
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
|
+
Der Browser-Helfer führt außerdem einen nach bestem Bemühen erfolgenden, nicht blockierenden Lesevorgang der aktuellen Agent-Native-Auth-Sitzung durch. Replay ist standardmäßig nur für angemeldete Benutzer verfügbar: Wenn `sessionReplay` aktiviert ist, startet die Aufzeichnung nur, wenn die Sitzung zu einer Benutzer-E-Mail-Adresse aufgelöst werden kann. Replays angemeldeter Benutzer enthalten E-Mail-basierte `userId`/`userEmail` sowie `orgId`.
|
|
225
|
+
|
|
226
|
+
Setzen Sie `sessionReplay.requireSignedInUser: false` oder `VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH=false` nur für ein absichtlich anonymes Replay-Deployment. Wenn die Auth-Prüfung deaktiviert ist, bleiben anonyme Aufzeichnungen nach anonymem Besucher, Sitzung, App/Template, Hostname und Pfad abfragbar.
|
|
227
|
+
|
|
228
|
+
Session Replay wird deterministisch pro Browser-Sitzung gesampelt. Eine `sampleRate` von `0.1` zeichnet etwa 10 % der infrage kommenden Sitzungen auf; verwenden Sie `1`, wenn die infrage kommende Population absichtlich klein ist, etwa beim Dogfooding nur für angemeldete Benutzer.
|
|
229
|
+
|
|
230
|
+
Die Datenschutz-Standardeinstellungen sind bewusst konservativ, aber für die Wiedergabe weiterhin nützlich:
|
|
231
|
+
|
|
232
|
+
- Eingaben werden standardmäßig maskiert (`maskAllInputs: true`).
|
|
233
|
+
- Seitentext bleibt sichtbar, sofern ein Element nicht mit `.an-mask` oder `data-an-mask` markiert ist.
|
|
234
|
+
- Sensible Bereiche werden mit Selektoren wie `[data-sensitive]`, `.an-block`, `.an-private`, `data-an-block`, `data-an-private` sowie kreditkarten-/passwort-/sozialversicherungsnummerähnlichen Feldern blockiert.
|
|
235
|
+
- URLs werden mit demselben `scrubUrl()`-Helfer bereinigt, der auch von der Browser-Analyse verwendet wird.
|
|
236
|
+
- Die Replay-Aufzeichnung ist ausschließlich webbasiert und opt-in; native Desktop-Bildschirme werden nicht aufgezeichnet.
|
|
237
|
+
|
|
238
|
+
Während der Aufzeichnung erfasst Session Replay außerdem die Browser-Konsolenausgabe (`log`, `info`, `warn`, `error`, `debug`, sowie die Fenster-Ereignisse `error` / `unhandledrejection`) und Netzwerkanfrage-Metadaten (`fetch` und XHR) als getaggte rrweb-Custom-Events, damit Agenten und der Replay-Viewer von Nutzern gemeldete Probleme debuggen können. Die Erfassung ist standardmäßig aktiviert, wenn Replay aktiviert ist; passen Sie sie mit den Optionen `sessionReplay.console` und `sessionReplay.network` an oder deaktivieren Sie sie, wobei jede Option entweder einen booleschen Wert oder ein Optionsobjekt akzeptiert. Request-/Response-Bodies und -Header werden nie erfasst, URLs werden bereinigt, Nachrichten werden gekürzt, der eigene Ingest-/Tracking-Traffic des Recorders wird ausgeschlossen, und sitzungsbezogene Budgets (1000 Konsolen- / 2000 Netzwerkereignisse) fügen bei Überschreitung einen Kürzungshinweis hinzu.
|
|
239
|
+
|
|
240
|
+
Das Analytics-Template speichert Replay-Metadaten in SQL (`session_recordings`) und Chunks über private Blob-Referenzen (`session_replay_chunks`). Browser und Agenten erhalten niemals Anbieter-URLs. Die Wiedergabe läuft über zugriffsbeschränkte Server-Routen, und die Standard-Agent-Tools liefern Zusammenfassungen oder begrenzte Replay-Ereignisse zurück, keinen Rohzugriff auf die Chunk-Tabelle.
|
|
241
|
+
|
|
242
|
+
Wenn Sie eine private Aufzeichnung an einen externen Agenten übergeben müssen, verwenden Sie auf der Sitzungsdetailseite die Funktion **Copy for agent**. Sie erzeugt einen zwei Stunden gültigen, aufzeichnungsgebundenen `agent_access`-Link, rendert eine kleine Discovery-Payload per SSR unter `/sessions/:recordingId` und stellt ausschließlich die JSON-APIs für Agent-Kontext/-Ereignisse bereit. Die Sichtbarkeit der Aufzeichnung ändert sich dadurch nicht.
|
|
243
|
+
|
|
244
|
+
Nur für die lokale Entwicklung kann Analytics auf begrenzte SQL-Inline-Chunks zurückgreifen, wenn kein privater Blob-Speicher verfügbar ist. Produktions-Deployments sollten privaten oder verschlüsselten Blob-Speicher konfigurieren, anstatt sich für Replay-Payloads auf Postgres zu verlassen.
|
|
245
|
+
|
|
191
246
|
## Erweitert: benutzerdefinierte Anbieter und Interna {#advanced}
|
|
192
247
|
|
|
193
248
|
Die meisten Apps benötigen nur `track()` / `identify()` und einen integrierten Anbieter. Der Rest der Oberfläche – Registrierung benutzerdefinierter Anbieter, die `TrackingProvider`-Schnittstelle, Batch-Interna und die eigene Browser-Telemetrie des Frameworks – finden Sie unten.
|
|
@@ -188,6 +188,61 @@ Diferencias clave con respecto al [server `track()`](#track):
|
|
|
188
188
|
|
|
189
189
|
Esto es distinto de la telemetría interna del navegador del marco (`trackEvent()` / vistas de página automáticas; consulte [Browser defaults](#browser-defaults) a continuación), que impulsa el propio análisis de productos de Agent Native. Utilice `track()` para los eventos de análisis propios de su aplicación que deberían llegar a sus proveedores configurados.
|
|
190
190
|
|
|
191
|
+
## Repetición de sesión {#session-replay}
|
|
192
|
+
|
|
193
|
+
Las aplicaciones de Agent Native pueden habilitar la repetición de sesión del navegador de origen sin agregar un segundo SDK de análisis. Llame a `configureTracking()` una vez en la raíz del navegador y pase la clave pública de Analytics más el endpoint del recolector:
|
|
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
|
+
Cuando `sessionReplay.enabled` es verdadero, el cliente importa dinámicamente `@rrweb/record` después del inicio y publica fragmentos de repetición en el endpoint de repetición. Si `endpoint` termina en `/api/analytics/track` o `/track`, el endpoint de repetición se deriva automáticamente como `/api/analytics/replay`. Anúlelo explícitamente con `sessionReplay.endpoint` cuando el recolector de repetición se encuentre en otro lugar.
|
|
214
|
+
|
|
215
|
+
Las raíces de las plantillas de Agent Native ya llaman a `configureTracking()`. Las implementaciones de plantillas alojadas pueden activar la repetición con variables de entorno de Vite/Netlify, mientras que los consumidores de la biblioteca deberían preferir la forma explícita `configureTracking({ key, endpoint, sessionReplay })` anterior:
|
|
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
|
+
El ayudante del navegador también realiza una lectura sin bloqueo y de mejor esfuerzo de la sesión de autenticación actual de Agent Native. La repetición es solo para usuarios con sesión iniciada de forma predeterminada: cuando `sessionReplay` está habilitado, la grabación no se inicia a menos que la sesión se resuelva en una dirección de correo electrónico de usuario. Las repeticiones de usuarios con sesión iniciada incluyen `userId`/`userEmail` respaldados por correo electrónico más `orgId`.
|
|
225
|
+
|
|
226
|
+
Configure `sessionReplay.requireSignedInUser: false` o `VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH=false` solo para una implementación de repetición anónima intencional. Cuando la restricción de autenticación está deshabilitada, las grabaciones anónimas siguen siendo consultables por visitante anónimo, sesión, aplicación/plantilla, nombre de host y ruta.
|
|
227
|
+
|
|
228
|
+
La repetición de sesión se muestrea de forma determinista por sesión de navegador. Un `sampleRate` de `0.1` graba aproximadamente el 10% de las sesiones elegibles; use `1` cuando la población elegible sea intencionalmente pequeña, como en pruebas internas solo para usuarios con sesión iniciada.
|
|
229
|
+
|
|
230
|
+
Los valores predeterminados de privacidad son intencionalmente conservadores pero siguen siendo útiles para la reproducción:
|
|
231
|
+
|
|
232
|
+
- Las entradas están enmascaradas de forma predeterminada (`maskAllInputs: true`).
|
|
233
|
+
- El texto de la página permanece visible a menos que un elemento esté marcado con `.an-mask` o `data-an-mask`.
|
|
234
|
+
- Las zonas sensibles están bloqueadas con selectores como `[data-sensitive]`, `.an-block`, `.an-private`, `data-an-block`, `data-an-private`, y campos similares a tarjetas de crédito/contraseñas/SSN.
|
|
235
|
+
- Las URL se depuran con el mismo ayudante `scrubUrl()` que utiliza el análisis del navegador.
|
|
236
|
+
- La captura de repetición es solo para web y opcional; no graba pantallas de escritorio nativas.
|
|
237
|
+
|
|
238
|
+
Durante la grabación, la repetición de sesión también captura la salida de la consola del navegador (`log`, `info`, `warn`, `error`, `debug`, además de `error`/`unhandledrejection` de la ventana) y los metadatos de solicitudes de red (`fetch` y XHR) como eventos personalizados de rrweb etiquetados, para que los agentes y el visor de repeticiones puedan depurar los problemas reportados por los usuarios. La captura está habilitada de forma predeterminada cuando la repetición está activada; ajuste o desactive con las opciones `sessionReplay.console` y `sessionReplay.network`, cada una acepta un booleano o un objeto de opciones. Los cuerpos y encabezados de solicitud/respuesta nunca se capturan, las URL se depuran, los mensajes se truncan, el propio tráfico de ingesta/seguimiento del grabador se excluye, y los presupuestos por sesión (1000 eventos de consola / 2000 eventos de red) agregan un aviso de truncamiento cuando se superan.
|
|
239
|
+
|
|
240
|
+
La plantilla de Analytics almacena los metadatos de repetición en SQL (`session_recordings`) y almacena los fragmentos mediante referencias de blob privadas (`session_replay_chunks`). Los navegadores y los agentes nunca reciben las URL del proveedor. La reproducción pasa por rutas del servidor con alcance limitado y las herramientas del agente predeterminadas devuelven resúmenes o eventos de repetición acotados, no acceso sin procesar a la tabla de fragmentos.
|
|
241
|
+
|
|
242
|
+
Cuando necesite entregar una grabación privada a un agente externo, use el control **Copiar para el agente** de la página de detalle de la sesión. Este genera un enlace `agent_access` de dos horas con alcance limitado a la grabación, renderiza en el servidor (SSR) una pequeña carga útil de descubrimiento en `/sessions/:recordingId`, y expone únicamente las API JSON de contexto/eventos del agente. La visibilidad de la grabación no cambia.
|
|
243
|
+
|
|
244
|
+
Solo para desarrollo local, Analytics puede recurrir a fragmentos en línea de SQL limitados cuando el almacenamiento de blob privado no está disponible. Las implementaciones de producción deberían configurar almacenamiento de blob privado o cifrado en lugar de depender de Postgres para las cargas útiles de repetición.
|
|
245
|
+
|
|
191
246
|
## Avanzado: proveedores personalizados e internos {#advanced}
|
|
192
247
|
|
|
193
248
|
La mayoría de las aplicaciones solo necesitan `track()` / `identify()` y un proveedor integrado. El resto de la superficie (registro de proveedores personalizados, la interfaz `TrackingProvider`, componentes internos de procesamiento por lotes y la propia telemetría del navegador del marco) se encuentra a continuación.
|
|
@@ -188,6 +188,61 @@ Principales différences par rapport au [server `track()`](#track) :
|
|
|
188
188
|
|
|
189
189
|
Ceci est distinct de la télémétrie interne du navigateur du framework (`trackEvent()` / pages vues automatiques – voir [Browser defaults](#browser-defaults) ci-dessous), qui alimente les propres analyses de produits de Agent Native. Utilisez `track()` pour les événements d'analyse de votre application qui doivent atteindre vos fournisseurs configurés.
|
|
190
190
|
|
|
191
|
+
## Relecture de session {#session-replay}
|
|
192
|
+
|
|
193
|
+
Les applications Agent Native peuvent activer la relecture de session (session replay) côté navigateur en mode propriétaire, sans ajouter un second SDK d'analyse. Appelez `configureTracking()` une fois à la racine du navigateur et transmettez la clé publique Analytics ainsi que le point de terminaison du collecteur :
|
|
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
|
+
Lorsque `sessionReplay.enabled` est vrai, le client importe dynamiquement `@rrweb/record` après le démarrage et transmet les blocs de relecture au point de terminaison de relecture. Si `endpoint` se termine par `/api/analytics/track` ou `/track`, le point de terminaison de relecture est dérivé automatiquement en `/api/analytics/replay`. Remplacez-le explicitement avec `sessionReplay.endpoint` lorsque le collecteur de relecture se trouve ailleurs.
|
|
214
|
+
|
|
215
|
+
Les racines des modèles Agent Native appellent déjà `configureTracking()`. Les déploiements de modèles hébergés peuvent activer la relecture avec des variables d'environnement Vite/Netlify, tandis que les consommateurs de bibliothèque devraient privilégier la forme explicite `configureTracking({ key, endpoint, sessionReplay })` ci-dessus :
|
|
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
|
+
L'assistant navigateur effectue également une lecture non bloquante et au mieux de la session d'authentification Agent Native actuelle. La relecture est réservée aux utilisateurs connectés par défaut : lorsque `sessionReplay` est activé, l'enregistrement ne démarre pas tant que la session ne se résout pas en une adresse e-mail utilisateur. Les relectures des utilisateurs connectés incluent un `userId`/`userEmail` basé sur l'e-mail ainsi que `orgId`.
|
|
225
|
+
|
|
226
|
+
Définissez `sessionReplay.requireSignedInUser: false` ou `VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH=false` uniquement pour un déploiement de relecture anonyme intentionnel. Lorsque le contrôle d'authentification est désactivé, les enregistrements anonymes restent interrogeables par visiteur anonyme, session, application/modèle, nom d'hôte et chemin.
|
|
227
|
+
|
|
228
|
+
La relecture de session est échantillonnée de manière déterministe par session de navigateur. Un `sampleRate` de `0.1` enregistre environ 10 % des sessions éligibles ; utilisez `1` lorsque la population éligible est intentionnellement restreinte, par exemple pour du dogfooding réservé aux utilisateurs connectés.
|
|
229
|
+
|
|
230
|
+
Les paramètres de confidentialité par défaut sont volontairement prudents tout en restant utiles pour la relecture :
|
|
231
|
+
|
|
232
|
+
- Les champs de saisie sont masqués par défaut (`maskAllInputs: true`).
|
|
233
|
+
- Le texte de la page reste visible sauf si un élément est marqué avec `.an-mask` ou `data-an-mask`.
|
|
234
|
+
- Les zones sensibles sont bloquées avec des sélecteurs tels que `[data-sensitive]`, `.an-block`, `.an-private`, `data-an-block`, `data-an-private`, ainsi que les champs de type carte bancaire/mot de passe/numéro de sécurité sociale.
|
|
235
|
+
- Les URL sont nettoyées avec le même assistant `scrubUrl()` utilisé par les analyses du navigateur.
|
|
236
|
+
- La capture de relecture est réservée au web et opt-in ; elle n'enregistre pas les écrans natifs du bureau.
|
|
237
|
+
|
|
238
|
+
Pendant l'enregistrement, la relecture de session capture également la sortie de la console du navigateur (`log`, `info`, `warn`, `error`, `debug`, ainsi que les événements globaux `error` / `unhandledrejection`) et les métadonnées des requêtes réseau (`fetch` et XHR) sous forme d'événements personnalisés rrweb balisés, afin que les agents et la visionneuse de relecture puissent déboguer les problèmes signalés par les utilisateurs. La capture est activée par défaut lorsque la relecture est activée ; ajustez-la ou désactivez-la avec les options `sessionReplay.console` et `sessionReplay.network`, chacune acceptant un booléen ou un objet d'options. Les corps et en-têtes des requêtes/réponses ne sont jamais capturés, les URL sont nettoyées, les messages sont tronqués, le trafic d'ingestion/de suivi propre à l'enregistreur est exclu, et des budgets par session (1000 événements console / 2000 événements réseau) ajoutent une notice de troncature en cas de dépassement.
|
|
239
|
+
|
|
240
|
+
Le modèle Analytics stocke les métadonnées de relecture en SQL (`session_recordings`) et stocke les blocs via des références blob privées (`session_replay_chunks`). Les navigateurs et les agents ne reçoivent jamais les URL du fournisseur. La lecture passe par des routes serveur à portée limitée, et les outils d'agent par défaut renvoient des résumés ou des événements de relecture bornés, et non un accès brut à la table des blocs.
|
|
241
|
+
|
|
242
|
+
Lorsque vous devez transmettre un enregistrement privé à un agent externe, utilisez le contrôle **Copy for agent** de la page de détail de session. Il génère un lien `agent_access` limité à l'enregistrement, valide deux heures, effectue le rendu SSR d'une petite charge utile de découverte sur `/sessions/:recordingId`, et n'expose que les API JSON de contexte/événements de l'agent. La visibilité de l'enregistrement ne change pas.
|
|
243
|
+
|
|
244
|
+
Pour le développement local uniquement, Analytics peut se replier sur des blocs SQL en ligne plafonnés lorsque le stockage blob privé n'est pas disponible. Les déploiements en production doivent configurer un stockage blob privé ou chiffré plutôt que de s'appuyer sur Postgres pour les charges utiles de relecture.
|
|
245
|
+
|
|
191
246
|
## Avancé : fournisseurs personnalisés et éléments internes {#advanced}
|
|
192
247
|
|
|
193
248
|
La plupart des applications n'ont besoin que de `track()` / `identify()` et d'un fournisseur intégré. Le reste de la surface (enregistrement des fournisseurs personnalisés, de l'interface `TrackingProvider`, des éléments internes de traitement par lots et de la propre télémétrie du navigateur du framework) se trouve ci-dessous.
|
|
@@ -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.
|