oh-my-agent-commandcode 0.0.0-stage → 20.38.4
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/README.md +35 -2
- package/filter-test-output.sh +52 -0
- package/mods/oma.ts +347 -0
- package/package.json +30 -4
- package/skills/_shared/conditional/experiment-ledger.md +28 -0
- package/skills/_shared/conditional/exploration-loop.md +22 -0
- package/skills/_shared/conditional/quality-score.md +33 -0
- package/skills/_shared/core/anti-ai-prose.md +191 -0
- package/skills/_shared/core/api-contracts/README.md +28 -0
- package/skills/_shared/core/api-contracts/template.md +90 -0
- package/skills/_shared/core/clarification-protocol.md +23 -0
- package/skills/_shared/core/code-intelligence.md +46 -0
- package/skills/_shared/core/collaboration-policy.md +28 -0
- package/skills/_shared/core/common-checklist.md +28 -0
- package/skills/_shared/core/context-budget.md +22 -0
- package/skills/_shared/core/context-loading.md +34 -0
- package/skills/_shared/core/difficulty-guide.md +26 -0
- package/skills/_shared/core/execution-policy.md +31 -0
- package/skills/_shared/core/lessons-learned.md +33 -0
- package/skills/_shared/core/prompt-structure.md +18 -0
- package/skills/_shared/core/quality-principles.md +11 -0
- package/skills/_shared/core/session-metrics.md +35 -0
- package/skills/_shared/core/skill-routing.md +39 -0
- package/skills/_shared/core/test-approach.md +54 -0
- package/skills/_shared/core/vendor-detection.md +52 -0
- package/skills/_shared/runtime/memory-protocol.md +118 -0
- package/skills/_shared/runtime/result-contract.md +64 -0
- package/skills/_shared/ui-interaction-quality.md +133 -0
- package/skills/oma-academic-writing/SKILL.md +181 -0
- package/skills/oma-academic-writing/resources/abstract-guide.md +51 -0
- package/skills/oma-academic-writing/resources/academic-verb-tiers.md +42 -0
- package/skills/oma-academic-writing/resources/anti-ai-checklist.md +52 -0
- package/skills/oma-academic-writing/resources/hedging-guide.md +132 -0
- package/skills/oma-academic-writing/resources/sentence-structure-reference.md +151 -0
- package/skills/oma-architecture/SKILL.md +203 -0
- package/skills/oma-architecture/resources/api-evolution.md +41 -0
- package/skills/oma-architecture/resources/checklist.md +42 -0
- package/skills/oma-architecture/resources/execution-protocol.md +115 -0
- package/skills/oma-architecture/resources/methodology-selection.md +92 -0
- package/skills/oma-architecture/resources/migration-patterns.md +28 -0
- package/skills/oma-architecture/resources/output-templates.md +111 -0
- package/skills/oma-architecture/resources/stakeholder-synthesis.md +80 -0
- package/skills/oma-backend/SKILL.md +202 -0
- package/skills/oma-backend/resources/checklist.md +45 -0
- package/skills/oma-backend/resources/error-playbook.md +97 -0
- package/skills/oma-backend/resources/execution-protocol.md +39 -0
- package/skills/oma-backend/resources/orm-reference.md +61 -0
- package/skills/oma-backend/variants/node/api-template.ts +315 -0
- package/skills/oma-backend/variants/node/snippets.md +475 -0
- package/skills/oma-backend/variants/node/stack.yaml +21 -0
- package/skills/oma-backend/variants/node/tech-stack.md +33 -0
- package/skills/oma-backend/variants/python/api-template.py +378 -0
- package/skills/oma-backend/variants/python/snippets.md +199 -0
- package/skills/oma-backend/variants/python/stack.yaml +18 -0
- package/skills/oma-backend/variants/python/tech-stack.md +45 -0
- package/skills/oma-backend/variants/rust/api-template.rs +635 -0
- package/skills/oma-backend/variants/rust/snippets.md +471 -0
- package/skills/oma-backend/variants/rust/stack.yaml +20 -0
- package/skills/oma-backend/variants/rust/tech-stack.md +36 -0
- package/skills/oma-backend/variants/stack.schema.json +73 -0
- package/skills/oma-brainstorm/SKILL.md +166 -0
- package/skills/oma-brainstorm/resources/triz-lite.md +117 -0
- package/skills/oma-coordination/SKILL.md +171 -0
- package/skills/oma-db/SKILL.md +201 -0
- package/skills/oma-db/resources/anti-patterns.md +177 -0
- package/skills/oma-db/resources/checklist.md +67 -0
- package/skills/oma-db/resources/document-templates.md +107 -0
- package/skills/oma-db/resources/error-playbook.md +50 -0
- package/skills/oma-db/resources/examples.md +170 -0
- package/skills/oma-db/resources/execution-protocol.md +127 -0
- package/skills/oma-db/resources/iso-controls.md +98 -0
- package/skills/oma-db/resources/migration-playbook.md +93 -0
- package/skills/oma-db/resources/query-tuning.md +57 -0
- package/skills/oma-db/resources/vector-db.md +159 -0
- package/skills/oma-debug/SKILL.md +146 -0
- package/skills/oma-debug/resources/bug-report-template.md +327 -0
- package/skills/oma-debug/resources/checklist.md +31 -0
- package/skills/oma-debug/resources/common-patterns.md +734 -0
- package/skills/oma-debug/resources/debugging-checklist.md +364 -0
- package/skills/oma-debug/resources/error-playbook.md +94 -0
- package/skills/oma-debug/resources/execution-protocol.md +40 -0
- package/skills/oma-design/SKILL.md +135 -0
- package/skills/oma-design/resources/asset-strategy.md +34 -0
- package/skills/oma-design/resources/checklist.md +63 -0
- package/skills/oma-design/resources/data-grid.md +48 -0
- package/skills/oma-design/resources/design-md-spec.md +107 -0
- package/skills/oma-design/resources/design-tokens.md +53 -0
- package/skills/oma-design/resources/error-playbook.md +18 -0
- package/skills/oma-design/resources/execution-protocol.md +95 -0
- package/skills/oma-design/resources/external-design-skills.md +130 -0
- package/skills/oma-design/resources/getdesign-fetcher.md +104 -0
- package/skills/oma-design/resources/product-interface-review.md +59 -0
- package/skills/oma-design/resources/redesign-protocol.md +52 -0
- package/skills/oma-design/resources/stitch-integration.md +244 -0
- package/skills/oma-dev-workflow/SKILL.md +375 -0
- package/skills/oma-dev-workflow/resources/affected-checks.py +58 -0
- package/skills/oma-dev-workflow/resources/api-workflows.md +58 -0
- package/skills/oma-dev-workflow/resources/database-patterns.md +107 -0
- package/skills/oma-dev-workflow/resources/i18n-patterns.md +63 -0
- package/skills/oma-dev-workflow/resources/release-coordination.md +240 -0
- package/skills/oma-dev-workflow/resources/tooling-profiles.md +217 -0
- package/skills/oma-dev-workflow/resources/troubleshooting.md +78 -0
- package/skills/oma-dev-workflow/resources/validation-pipeline.md +246 -0
- package/skills/oma-docs/SKILL.md +77 -0
- package/skills/oma-docs/resources/commands.md +76 -0
- package/skills/oma-explanation/SKILL.md +212 -0
- package/skills/oma-explanation/resources/document-structure.md +115 -0
- package/skills/oma-explanation/resources/draft-format.md +199 -0
- package/skills/oma-explanation/resources/html-contract.md +102 -0
- package/skills/oma-frontend/SKILL.md +227 -0
- package/skills/oma-frontend/resources/angular-rules.md +110 -0
- package/skills/oma-frontend/resources/checklist.md +76 -0
- package/skills/oma-frontend/resources/error-playbook.md +125 -0
- package/skills/oma-frontend/resources/execution-protocol.md +46 -0
- package/skills/oma-frontend/resources/snippets.md +354 -0
- package/skills/oma-frontend/resources/specialized-visual-implementation.md +193 -0
- package/skills/oma-frontend/resources/tailwind-rules.md +83 -0
- package/skills/oma-frontend/resources/tech-stack.md +156 -0
- package/skills/oma-hwp/SKILL.md +166 -0
- package/skills/oma-hwp/config/hwp-config.yaml +35 -0
- package/skills/oma-hwp/resources/balanced-tables.ts +39 -0
- package/skills/oma-hwp/resources/execution-protocol.md +145 -0
- package/skills/oma-hwp/resources/flatten-tables.ts +101 -0
- package/skills/oma-hwp/resources/package.json +13 -0
- package/skills/oma-hwp/resources/troubleshooting.md +70 -0
- package/skills/oma-hwp/resources/tsconfig.json +10 -0
- package/skills/oma-hwp/resources/turndown-plugin-gfm.d.ts +9 -0
- package/skills/oma-image/SKILL.md +142 -0
- package/skills/oma-image/config/image-config.yaml +70 -0
- package/skills/oma-image/resources/checklist.md +18 -0
- package/skills/oma-image/resources/execution-protocol.md +117 -0
- package/skills/oma-image/resources/invocation.md +105 -0
- package/skills/oma-image/resources/prompt-tips.md +71 -0
- package/skills/oma-image/resources/vendor-matrix.md +90 -0
- package/skills/oma-market/SKILL.md +142 -0
- package/skills/oma-market/resources/checklist.md +12 -0
- package/skills/oma-market/resources/error-playbook.md +12 -0
- package/skills/oma-market/resources/execution-protocol.md +60 -0
- package/skills/oma-market/resources/frameworks/pestel.md +101 -0
- package/skills/oma-market/resources/frameworks/porters-5f.md +90 -0
- package/skills/oma-market/resources/frameworks/swot.md +61 -0
- package/skills/oma-market/resources/intent-rules.md +35 -0
- package/skills/oma-market/resources/output-laws.md +53 -0
- package/skills/oma-mobile/SKILL.md +168 -0
- package/skills/oma-mobile/resources/checklist.md +77 -0
- package/skills/oma-mobile/resources/error-playbook.md +198 -0
- package/skills/oma-mobile/resources/execution-protocol.md +47 -0
- package/skills/oma-mobile/resources/screen-template.dart +331 -0
- package/skills/oma-mobile/resources/screen-template.swift +239 -0
- package/skills/oma-mobile/resources/screen-template.tsx +179 -0
- package/skills/oma-mobile/resources/tech-stack.md +69 -0
- package/skills/oma-mobile/variants/README.md +45 -0
- package/skills/oma-mobile/variants/flutter/api-template.dart +461 -0
- package/skills/oma-mobile/variants/flutter/snippets.md +1353 -0
- package/skills/oma-mobile/variants/flutter/stack.yaml +21 -0
- package/skills/oma-mobile/variants/flutter/tech-stack.md +201 -0
- package/skills/oma-mobile/variants/kotlin-android/api-template.kt +182 -0
- package/skills/oma-mobile/variants/kotlin-android/snippets.md +871 -0
- package/skills/oma-mobile/variants/kotlin-android/stack.yaml +32 -0
- package/skills/oma-mobile/variants/kotlin-android/tech-stack.md +159 -0
- package/skills/oma-mobile/variants/react-native/api-template.ts +531 -0
- package/skills/oma-mobile/variants/react-native/snippets.md +1014 -0
- package/skills/oma-mobile/variants/react-native/stack.yaml +22 -0
- package/skills/oma-mobile/variants/react-native/tech-stack.md +192 -0
- package/skills/oma-mobile/variants/stack.schema.json +68 -0
- package/skills/oma-mobile/variants/swift-ios/api-template.swift +165 -0
- package/skills/oma-mobile/variants/swift-ios/snippets.md +1028 -0
- package/skills/oma-mobile/variants/swift-ios/stack.yaml +25 -0
- package/skills/oma-mobile/variants/swift-ios/tech-stack.md +174 -0
- package/skills/oma-observability/SKILL.md +225 -0
- package/skills/oma-observability/resources/anti-patterns.md +555 -0
- package/skills/oma-observability/resources/boundaries/cross-application.md +348 -0
- package/skills/oma-observability/resources/boundaries/multi-tenant.md +290 -0
- package/skills/oma-observability/resources/boundaries/release.md +372 -0
- package/skills/oma-observability/resources/boundaries/slo.md +225 -0
- package/skills/oma-observability/resources/checklist.md +123 -0
- package/skills/oma-observability/resources/examples.md +448 -0
- package/skills/oma-observability/resources/execution-protocol.md +166 -0
- package/skills/oma-observability/resources/incident-forensics.md +348 -0
- package/skills/oma-observability/resources/intent-rules.md +307 -0
- package/skills/oma-observability/resources/layers/L3-network.md +281 -0
- package/skills/oma-observability/resources/layers/L4-transport.md +299 -0
- package/skills/oma-observability/resources/layers/L7-application/crash-analytics.md +359 -0
- package/skills/oma-observability/resources/layers/L7-application/mobile-rum.md +278 -0
- package/skills/oma-observability/resources/layers/L7-application/waf.md +246 -0
- package/skills/oma-observability/resources/layers/L7-application/web-rum.md +350 -0
- package/skills/oma-observability/resources/layers/mesh.md +368 -0
- package/skills/oma-observability/resources/matrix.md +177 -0
- package/skills/oma-observability/resources/meta-observability.md +605 -0
- package/skills/oma-observability/resources/observability-as-code.md +666 -0
- package/skills/oma-observability/resources/signals/audit.md +310 -0
- package/skills/oma-observability/resources/signals/cost.md +303 -0
- package/skills/oma-observability/resources/signals/logs.md +263 -0
- package/skills/oma-observability/resources/signals/metrics.md +478 -0
- package/skills/oma-observability/resources/signals/privacy.md +351 -0
- package/skills/oma-observability/resources/signals/profiles.md +245 -0
- package/skills/oma-observability/resources/signals/traces.md +360 -0
- package/skills/oma-observability/resources/standards.md +214 -0
- package/skills/oma-observability/resources/transport/collector-topology.md +308 -0
- package/skills/oma-observability/resources/transport/otlp-grpc-vs-http.md +256 -0
- package/skills/oma-observability/resources/transport/sampling-recipes.md +297 -0
- package/skills/oma-observability/resources/transport/udp-statsd-mtu.md +167 -0
- package/skills/oma-observability/resources/vendor-categories.md +352 -0
- package/skills/oma-orchestration/SKILL.md +302 -0
- package/skills/oma-orchestration/config/cli-config.yaml +92 -0
- package/skills/oma-orchestration/resources/memory-schema.md +232 -0
- package/skills/oma-orchestration/resources/subagent-prompt-template.md +30 -0
- package/skills/oma-orchestration/scripts/parallel-run.sh +6 -0
- package/skills/oma-orchestration/scripts/spawn-agent.sh +5 -0
- package/skills/oma-orchestration/scripts/verify.sh +20 -0
- package/skills/oma-orchestration/templates/backend-task.md +19 -0
- package/skills/oma-orchestration/templates/debug-task.md +16 -0
- package/skills/oma-orchestration/templates/frontend-task.md +18 -0
- package/skills/oma-orchestration/templates/mobile-task.md +18 -0
- package/skills/oma-orchestration/templates/qa-task.md +16 -0
- package/skills/oma-orchestration/templates/tasks-example.yaml +15 -0
- package/skills/oma-pdf/SKILL.md +162 -0
- package/skills/oma-pdf/config/pdf-config.yaml +27 -0
- package/skills/oma-pdf/resources/execution-protocol.md +127 -0
- package/skills/oma-pm/SKILL.md +157 -0
- package/skills/oma-pm/resources/error-playbook.md +75 -0
- package/skills/oma-pm/resources/examples.md +439 -0
- package/skills/oma-pm/resources/execution-protocol.md +62 -0
- package/skills/oma-pm/resources/iso-planning.md +110 -0
- package/skills/oma-pm/resources/plan-phase-protocol.md +66 -0
- package/skills/oma-pm/resources/task-template.json +86 -0
- package/skills/oma-qa/SKILL.md +141 -0
- package/skills/oma-qa/resources/checklist.md +339 -0
- package/skills/oma-qa/resources/error-playbook.md +98 -0
- package/skills/oma-qa/resources/execution-protocol.md +169 -0
- package/skills/oma-qa/resources/iso-quality.md +82 -0
- package/skills/oma-qa/resources/verify-ship-protocol.md +116 -0
- package/skills/oma-recap/SKILL.md +245 -0
- package/skills/oma-recap/resources/output-formats.md +83 -0
- package/skills/oma-refactor/SKILL.md +184 -0
- package/skills/oma-refactor/resources/definition.md +108 -0
- package/skills/oma-refactor/resources/governance.md +33 -0
- package/skills/oma-refactor/resources/hotspots.py +44 -0
- package/skills/oma-refactor/resources/measurement.md +93 -0
- package/skills/oma-scholar/SKILL.md +276 -0
- package/skills/oma-scholar/config/scholar-config.yaml +79 -0
- package/skills/oma-scholar/resources/api-endpoints.md +174 -0
- package/skills/oma-scholar/resources/checklist.md +92 -0
- package/skills/oma-scholar/resources/execution-protocol.md +224 -0
- package/skills/oma-scholar/resources/fallback-providers.md +143 -0
- package/skills/oma-scholar/resources/setup-openalex.md +85 -0
- package/skills/oma-scholar/resources/sidecar-spec.md +341 -0
- package/skills/oma-scholar/resources/upstream-spec-cache.md +972 -0
- package/skills/oma-scm/SKILL.md +103 -0
- package/skills/oma-scm/resources/cm-operations.md +56 -0
- package/skills/oma-scm/resources/codeowners-playbook.md +45 -0
- package/skills/oma-scm/resources/conventional-commits.md +108 -0
- package/skills/oma-scm/resources/merge-risk.md +76 -0
- package/skills/oma-scm/resources/onboarding-risk-signals.md +71 -0
- package/skills/oma-search/SKILL.md +125 -0
- package/skills/oma-search/resources/checklist.md +36 -0
- package/skills/oma-search/resources/error-playbook.md +66 -0
- package/skills/oma-search/resources/examples.md +80 -0
- package/skills/oma-search/resources/execution-protocol.md +86 -0
- package/skills/oma-search/resources/intent-rules.md +47 -0
- package/skills/oma-search/resources/trust-registry.md +53 -0
- package/skills/oma-security/SKILL.md +172 -0
- package/skills/oma-security/resources/artex.md +108 -0
- package/skills/oma-security/resources/ci.md +134 -0
- package/skills/oma-security/resources/cisco-source.md +108 -0
- package/skills/oma-security/resources/deepsec-config.md +45 -0
- package/skills/oma-security/resources/deepsec-matchers.md +35 -0
- package/skills/oma-security/resources/deepsec-scanning.md +45 -0
- package/skills/oma-security/resources/deepsec-setup.md +41 -0
- package/skills/oma-security/resources/findings-contract.md +408 -0
- package/skills/oma-security/resources/mcp-scanning.md +122 -0
- package/skills/oma-security/resources/skill-scanning.md +106 -0
- package/skills/oma-security/resources/validation.md +71 -0
- package/skills/oma-skill-creation/SKILL.md +84 -0
- package/skills/oma-skill-creation/resources/prompt-evaluation.md +36 -0
- package/skills/oma-skill-creation/resources/ssl-lite-template.md +108 -0
- package/skills/oma-skill-creation/resources/validation-checklist.md +101 -0
- package/skills/oma-slide/SKILL.md +277 -0
- package/skills/oma-slide/resources/animation-patterns.md +245 -0
- package/skills/oma-slide/resources/assets/deck-stage.js +514 -0
- package/skills/oma-slide/resources/assets/viewport-base.css +257 -0
- package/skills/oma-slide/resources/canva-integration.md +203 -0
- package/skills/oma-slide/resources/checklist.md +46 -0
- package/skills/oma-slide/resources/design-doctrine.md +260 -0
- package/skills/oma-slide/resources/fixed-stage.md +232 -0
- package/skills/oma-slide/resources/generation-protocol.md +393 -0
- package/skills/oma-slide/resources/native-pptx.md +84 -0
- package/skills/oma-slide/resources/selection-index.json +461 -0
- package/skills/oma-slide/resources/style-presets.LICENSE +10 -0
- package/skills/oma-slide/resources/style-presets.md +520 -0
- package/skills/oma-tf-infra/SKILL.md +201 -0
- package/skills/oma-tf-infra/resources/checklist.md +53 -0
- package/skills/oma-tf-infra/resources/cost-optimization.md +574 -0
- package/skills/oma-tf-infra/resources/error-playbook.md +68 -0
- package/skills/oma-tf-infra/resources/examples.md +38 -0
- package/skills/oma-tf-infra/resources/execution-protocol.md +129 -0
- package/skills/oma-tf-infra/resources/iso-42001-infra.md +229 -0
- package/skills/oma-tf-infra/resources/multi-cloud-examples.md +241 -0
- package/skills/oma-tf-infra/resources/policy-testing-examples.md +332 -0
- package/skills/oma-translation/SKILL.md +229 -0
- package/skills/oma-translation/resources/anti-ai-patterns.md +104 -0
- package/skills/oma-translation/resources/lang/_template.md +73 -0
- package/skills/oma-translation/resources/lang/en.md +123 -0
- package/skills/oma-translation/resources/lang/ja.md +274 -0
- package/skills/oma-translation/resources/lang/ko.md +228 -0
- package/skills/oma-translation/resources/lang/zh.md +285 -0
- package/skills/oma-translation/resources/style-skills.md +104 -0
- package/skills/oma-translation/resources/translation-rubric.md +126 -0
- package/skills/oma-video/SKILL.md +229 -0
- package/skills/oma-video/config/video-config.yaml +60 -0
- package/skills/oma-video/resources/checklist.md +26 -0
- package/skills/oma-video/resources/execution-protocol.md +122 -0
- package/skills/oma-video/resources/existing-media.md +185 -0
- package/skills/oma-video/resources/hyperframes-authoring/README.md +44 -0
- package/skills/oma-video/resources/hyperframes-authoring/demo.md +31 -0
- package/skills/oma-video/resources/hyperframes-authoring/explainer.md +10 -0
- package/skills/oma-video/resources/hyperframes-authoring/shorts.md +10 -0
- package/skills/oma-video/resources/motion-principles.md +81 -0
- package/skills/oma-video/resources/mpt/driver.py +301 -0
- package/skills/oma-video/resources/prompt-tips.md +75 -0
- package/skills/oma-video/resources/script-schema.md +81 -0
- package/skills/oma-video/resources/sound-design.md +127 -0
- package/skills/oma-video/resources/strudel/package.json +11 -0
- package/skills/oma-video/resources/strudel/page.html +87 -0
- package/skills/oma-video/resources/strudel/render.mjs +295 -0
- package/skills/oma-video/resources/vendor-matrix.md +124 -0
- package/skills/oma-voice/SKILL.md +249 -0
- package/skills/oma-voice/config/voice-config.yaml +30 -0
- package/skills/oma-voice/resources/audio-processing.md +119 -0
- package/skills/oma-voice/resources/checklist.md +47 -0
- package/skills/oma-voice/resources/execution-protocol.md +215 -0
- package/skills/oma-voice/resources/prompt-tips.md +43 -0
- package/skills/oma-voice/resources/voice-matrix.md +51 -0
- package/skills/oma-voice/resources/voicestudio.md +87 -0
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
---
|
|
2
|
+
otel_spec: "1.x (stable API/SDK)"
|
|
3
|
+
otel_semconv: "1.43.0 (2026-07)"
|
|
4
|
+
tools:
|
|
5
|
+
- "@opentelemetry/sdk-trace-web: 1.x (stable); browser instrumentations: some experimental"
|
|
6
|
+
notes:
|
|
7
|
+
- "web-vitals JS library: 4.x (2024); INP replaced FID: March 2024"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Web RUM: Real User Monitoring
|
|
11
|
+
|
|
12
|
+
## 1. Scope
|
|
13
|
+
|
|
14
|
+
This file covers browser-side Real User Monitoring (RUM) for web applications.
|
|
15
|
+
|
|
16
|
+
**In scope:** performance signals (Core Web Vitals, Navigation Timing, custom marks), error tracking (`window.onerror`, unhandled promise rejections, source map correlation), user interaction (click, navigation, long tasks), 3rd-party script impact and CSP violation reporting, synthetic monitoring (scheduled browser/API probes), client-to-server trace correlation via W3C `traceparent`, session replay (vendor overview).
|
|
17
|
+
|
|
18
|
+
**Out of scope:** mobile RUM (see `mobile-rum.md`); native app crash analytics (see `crash-analytics.md`).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 2. Core Web Vitals (2024 Update)
|
|
23
|
+
|
|
24
|
+
Google updated the Core Web Vitals (CWV) set in March 2024. **INP (Interaction to Next Paint) replaced FID (First Input Delay)** as the official responsiveness metric. FID is deprecated; do not report it in new dashboards or SLOs.
|
|
25
|
+
|
|
26
|
+
Reference implementation: `web-vitals` JS library (`google/web-vitals`, v4.x).
|
|
27
|
+
|
|
28
|
+
### Official CWV Targets
|
|
29
|
+
|
|
30
|
+
| Metric | Full name | Dimension | Good | Needs improvement | Poor |
|
|
31
|
+
|--------|-----------|-----------|------|-------------------|------|
|
|
32
|
+
| **LCP** | Largest Contentful Paint | Loading performance | ≤ 2.5 s | 2.5 s – 4.0 s | > 4.0 s |
|
|
33
|
+
| **INP** | Interaction to Next Paint | Responsiveness (replaces FID) | ≤ 200 ms | 200 ms – 500 ms | > 500 ms |
|
|
34
|
+
| **CLS** | Cumulative Layout Shift | Visual stability | ≤ 0.1 | 0.1 – 0.25 | > 0.25 |
|
|
35
|
+
|
|
36
|
+
### Additional Operational Signals (not official CWV)
|
|
37
|
+
|
|
38
|
+
| Metric | Meaning | Typical target |
|
|
39
|
+
|--------|---------|---------------|
|
|
40
|
+
| TTFB | Time to First Byte; server + network latency | ≤ 800 ms |
|
|
41
|
+
| FCP | First Contentful Paint; when first content is painted | ≤ 1.8 s |
|
|
42
|
+
| TTI | Time to Interactive; main thread unblocked | ≤ 3.8 s (3G) |
|
|
43
|
+
|
|
44
|
+
Use `web-vitals` to collect all signals with a uniform API:
|
|
45
|
+
|
|
46
|
+
```js
|
|
47
|
+
import { onLCP, onINP, onCLS, onFCP, onTTFB } from 'web-vitals';
|
|
48
|
+
|
|
49
|
+
function sendToAnalytics({ name, value, rating, id }) {
|
|
50
|
+
// forward to your RUM backend or OTel OTLP endpoint
|
|
51
|
+
navigator.sendBeacon('/rum', JSON.stringify({ name, value, rating, id }));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
onLCP(sendToAnalytics);
|
|
55
|
+
onINP(sendToAnalytics);
|
|
56
|
+
onCLS(sendToAnalytics);
|
|
57
|
+
onFCP(sendToAnalytics);
|
|
58
|
+
onTTFB(sendToAnalytics);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
SLI recommendation: use **p75** for each CWV metric as the SLI value (aligns with Google Search Console scoring). Cross-reference: `../../boundaries/slo.md` for SLO burn-rate alert configuration.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 3. Browser OpenTelemetry SDK
|
|
66
|
+
|
|
67
|
+
The OTel JavaScript SDK provides browser instrumentation for traces and metrics. Logs from the browser are currently in progress (no stable browser LogRecord exporter as of 2026-Q2).
|
|
68
|
+
|
|
69
|
+
**Stability note:** `@opentelemetry/sdk-trace-web` and `@opentelemetry/sdk-metrics` are stable. Some browser instrumentation packages (e.g., Core Web Vitals plugin for OTel) remain experimental. Do not build production SLOs on experimental instrumentations without a fallback to `web-vitals` directly.
|
|
70
|
+
|
|
71
|
+
### Typical Instrumentations
|
|
72
|
+
|
|
73
|
+
| Package | What it instruments | Status |
|
|
74
|
+
|---------|-------------------|--------|
|
|
75
|
+
| `@opentelemetry/instrumentation-document-load` | Navigation timing, resource timing | Stable |
|
|
76
|
+
| `@opentelemetry/instrumentation-user-interaction` | Click events → spans | Stable |
|
|
77
|
+
| `@opentelemetry/instrumentation-fetch` | `fetch()` calls + `traceparent` injection | Stable |
|
|
78
|
+
| `@opentelemetry/instrumentation-xml-http-request` | `XMLHttpRequest` + header injection | Stable |
|
|
79
|
+
|
|
80
|
+
### Minimal SDK Initialization
|
|
81
|
+
|
|
82
|
+
```js
|
|
83
|
+
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
|
84
|
+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
|
85
|
+
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
86
|
+
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
|
87
|
+
import { DocumentLoadInstrumentation } from '@opentelemetry/instrumentation-document-load';
|
|
88
|
+
import { UserInteractionInstrumentation } from '@opentelemetry/instrumentation-user-interaction';
|
|
89
|
+
import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
|
|
90
|
+
import { W3CTraceContextPropagator } from '@opentelemetry/core';
|
|
91
|
+
import { CompositePropagator } from '@opentelemetry/core';
|
|
92
|
+
import { Resource } from '@opentelemetry/resources';
|
|
93
|
+
|
|
94
|
+
const provider = new WebTracerProvider({
|
|
95
|
+
resource: new Resource({
|
|
96
|
+
'service.name': 'my-web-app',
|
|
97
|
+
'service.version': import.meta.env.VITE_RELEASE_VERSION, // CI-injected
|
|
98
|
+
'deployment.environment': import.meta.env.MODE,
|
|
99
|
+
}),
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
provider.addSpanProcessor(
|
|
103
|
+
new BatchSpanProcessor(
|
|
104
|
+
new OTLPTraceExporter({ url: 'https://otel-collector.example.com/v1/traces' })
|
|
105
|
+
)
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
provider.register({
|
|
109
|
+
propagator: new CompositePropagator({
|
|
110
|
+
propagators: [new W3CTraceContextPropagator()],
|
|
111
|
+
}),
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
registerInstrumentations({
|
|
115
|
+
instrumentations: [
|
|
116
|
+
new DocumentLoadInstrumentation(),
|
|
117
|
+
new UserInteractionInstrumentation(),
|
|
118
|
+
new FetchInstrumentation({
|
|
119
|
+
// Allow traceparent injection only to trusted origins (see §5)
|
|
120
|
+
propagateTraceHeaderCorsUrls: [/^https:\/\/api\.example\.com(?:\/|$)/],
|
|
121
|
+
}),
|
|
122
|
+
],
|
|
123
|
+
});
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Session and view identifier strategy:** Generate a `session.id` UUID on tab open (stored in `sessionStorage`) and a `view.id` UUID on each route change. Attach both as span attributes. This enables session-level RUM aggregation without a vendor SDK.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 4. Vendor Options
|
|
131
|
+
|
|
132
|
+
Vendors below are examples as of 2026-Q2. This is not a registry; verify currency at `https://landscape.cncf.io` and `../../vendor-categories.md §RUM category`.
|
|
133
|
+
|
|
134
|
+
| Vendor | Bundle size | Session replay | OTel-based | Full-stack correlation | Notes |
|
|
135
|
+
|--------|------------|---------------|-----------|----------------------|-------|
|
|
136
|
+
| **Sentry Browser** | Medium | Yes (opt-in) | Partial | Strong | Error-first; release tracking; delegation: `getsentry/sentry-sdk-setup` |
|
|
137
|
+
| **Grafana Faro** | Lightweight | No | Yes | Grafana stack | OSS; emits OTel-compatible signals; pairs with LGTM+ |
|
|
138
|
+
| **Datadog RUM** | Heavy | Yes | Partial | APM link | Strongest APM-to-RUM pivot; `allowedTracingUrls` CORS config |
|
|
139
|
+
| **Bugsnag** | Light | No | No | Partial | Stability-focused; good grouping; SmartBear owned |
|
|
140
|
+
|
|
141
|
+
For vendor-specific setup, delegate to the vendor skill listed or use `oma-search --docs "{vendor} browser RUM setup"`.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 5. Client-to-Server Error Correlation
|
|
146
|
+
|
|
147
|
+
**Problem:** A server-side 5xx error causes the browser to retry. Without shared trace context, each retry appears as an independent request in backend traces. The root cause (one bad deploy) generates a cascade that looks like independent failures.
|
|
148
|
+
|
|
149
|
+
**Solution:** emit the same `trace_id` on both sides using W3C `traceparent`.
|
|
150
|
+
|
|
151
|
+
The `FetchInstrumentation` (OTel JS) and Datadog RUM inject `traceparent` automatically into outbound requests; but only for origins listed in the CORS allowlist configuration.
|
|
152
|
+
|
|
153
|
+
```js
|
|
154
|
+
// OTel JS SDK — propagateTraceHeaderCorsUrls
|
|
155
|
+
new FetchInstrumentation({
|
|
156
|
+
propagateTraceHeaderCorsUrls: [
|
|
157
|
+
/^https:\/\/api\.example\.com(?:\/|$)/,
|
|
158
|
+
/^https:\/\/gateway\.example\.com(?:\/|$)/,
|
|
159
|
+
],
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
// Datadog RUM — allowedTracingUrls
|
|
163
|
+
datadogRum.init({
|
|
164
|
+
allowedTracingUrls: [
|
|
165
|
+
{ match: /^https:\/\/api\.example\.com(?:\/|$)/, propagatorTypes: ['tracecontext'] },
|
|
166
|
+
],
|
|
167
|
+
});
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
The SDK tracing allowlist controls injection, not server CORS permission. For cross-origin requests, configure the API's OPTIONS/preflight response and `Access-Control-Allow-Headers` for the headers actually sent (`traceparent`, `tracestate`, and `baggage` when used), and `Access-Control-Allow-Origin` for the trusted frontend origin. Credentialed requests require an explicit allowed origin and `Access-Control-Allow-Credentials: true`. Verify browser preflight behavior. The server must extract the propagated context and emit the same `trace_id` in its own spans. When the browser console shows an error, the `trace_id` links directly to the backend trace in Sentry Performance, Datadog APM, or any OTel-compatible backend.
|
|
171
|
+
|
|
172
|
+
**Anti-pattern to avoid:** client retry loop on 5xx without a circuit breaker. Retrying immediately amplifies server load. Implement exponential backoff + circuit breaker in the fetch layer before enabling distributed tracing; otherwise the correlation data documents a cascading failure, not a single event. Cross-reference: anti-patterns §Section G below and `../../signals/traces.md` for retry trace patterns.
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 6. Third-Party Scripts and CSP
|
|
177
|
+
|
|
178
|
+
3rd-party scripts are the dominant cause of LCP regression and a primary XSS / supply-chain attack vector. Observability of 3rd-party scripts requires both performance attribution and security violation reporting.
|
|
179
|
+
|
|
180
|
+
### Content Security Policy Violation Reporting
|
|
181
|
+
|
|
182
|
+
```http
|
|
183
|
+
Content-Security-Policy: default-src 'self';
|
|
184
|
+
script-src 'self' https://cdn.trusted-vendor.com;
|
|
185
|
+
report-to csp-violations;
|
|
186
|
+
report-uri https://csp-reports.example.com/collect
|
|
187
|
+
|
|
188
|
+
Reporting-Endpoints: csp-violations="https://csp-reports.example.com/collect"
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
> `report-uri` is the legacy fallback directive for browsers that do not yet support the Reporting API Level 1 (`report-to`). Firefox gained full `Reporting-Endpoints` support in 2023; keeping both ensures older stable channels still deliver violation reports.
|
|
192
|
+
|
|
193
|
+
CSP violations are reported to your server endpoint as JSON. Pipe them to your log backend and alert on new `blocked-uri` origins; these indicate either a new 3rd-party load attempt or a supply-chain injection.
|
|
194
|
+
|
|
195
|
+
### Subresource Integrity (SRI)
|
|
196
|
+
|
|
197
|
+
Pin the exact hash of any 3rd-party CDN script to detect tampered deliveries:
|
|
198
|
+
|
|
199
|
+
```html
|
|
200
|
+
<script
|
|
201
|
+
src="https://cdn.trusted-vendor.com/lib.min.js"
|
|
202
|
+
integrity="sha384-<base64-hash>"
|
|
203
|
+
crossorigin="anonymous"
|
|
204
|
+
></script>
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Performance Attribution
|
|
208
|
+
|
|
209
|
+
Use the Resource Timing API (`PerformanceObserver` type `resource`, `buffered: true`) to attribute LCP and INP delays to specific 3rd-party origins by comparing `new URL(entry.name).origin` against `window.location.origin`. Report per-origin `entry.duration` to your RUM backend.
|
|
210
|
+
|
|
211
|
+
Cross-reference: `../../signals/privacy.md` for 3rd-party cookie and tracking signal rules; `../../anti-patterns.md §Section G` for the "unmonitored 3rd-party script" anti-pattern.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## 7. Synthetic Monitoring
|
|
216
|
+
|
|
217
|
+
Synthetic monitoring provides an "outside-in" view that complements RUM. RUM shows what real users experience; synthetic shows what a deterministic probe experiences from a specific region, at any time; including before any real user visits.
|
|
218
|
+
|
|
219
|
+
| Tool | Type | Best for |
|
|
220
|
+
|------|------|---------|
|
|
221
|
+
| **Checkly** | Browser checks | Full user-journey verification; integrates with CI/CD |
|
|
222
|
+
| **Grafana k6** | Script-based load + synthetic | Load testing + baseline synthetic probes in one tool |
|
|
223
|
+
| **Prometheus Blackbox Exporter** | HTTP/TCP/ICMP probe | Lightweight availability checks; PromQL-native alerting |
|
|
224
|
+
| **Datadog Synthetics** | Browser + API | Unified with Datadog RUM; managed SaaS |
|
|
225
|
+
| **Pingdom** | Managed HTTP probe | Simple uptime monitoring; low operational overhead |
|
|
226
|
+
|
|
227
|
+
### When to Use RUM vs Synthetic
|
|
228
|
+
|
|
229
|
+
| Scenario | Use |
|
|
230
|
+
|----------|-----|
|
|
231
|
+
| Understand real user performance distribution | RUM |
|
|
232
|
+
| Detect issues before users notice | Synthetic |
|
|
233
|
+
| Low-traffic page that may have issues | Synthetic (RUM has too few samples) |
|
|
234
|
+
| Geo-distribution of performance | Both (synthetic per region + RUM aggregated) |
|
|
235
|
+
| SLO availability measurement | Synthetic (deterministic; not subject to sampling) |
|
|
236
|
+
| Investigating a real user complaint | RUM session + trace correlation |
|
|
237
|
+
|
|
238
|
+
Recommendation: run synthetic probes from at least 3 regions. Alert on synthetic probe failures with a tighter SLA than RUM-based alerts (synthetic = canary; RUM = ground truth).
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 8. Session Replay
|
|
243
|
+
|
|
244
|
+
Session replay records DOM mutations to reconstruct a visual playback. Vendors include Sentry Session Replay, Datadog Session Replay (both mask all inputs by default), FullStory, Hotjar, and LogRocket.
|
|
245
|
+
|
|
246
|
+
**Privacy requirements:**
|
|
247
|
+
- Email addresses, credit card fields, and `input[type=password]` MUST be masked client-side before the payload is sent. Do not rely on server-side masking alone.
|
|
248
|
+
- Session replay consent must be tied to the cookie consent flow (GDPR Article 6(1)(a)).
|
|
249
|
+
- Cross-reference: `../../signals/privacy.md` for replay sanitization rules and PII classification.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 9. Error Tracking
|
|
254
|
+
|
|
255
|
+
```js
|
|
256
|
+
// Global error handler
|
|
257
|
+
window.addEventListener('error', (event) => {
|
|
258
|
+
myRumSdk.captureException(event.error, {
|
|
259
|
+
'span.id': currentSpan?.spanContext().spanId,
|
|
260
|
+
'trace.id': currentSpan?.spanContext().traceId,
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
// Unhandled promise rejections
|
|
265
|
+
window.addEventListener('unhandledrejection', (event) => {
|
|
266
|
+
myRumSdk.captureException(event.reason);
|
|
267
|
+
});
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Source map uploads:** Minified production bundles produce unreadable stack traces. Upload source maps to your error tracking vendor on every release.
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
# Example: Sentry CLI source map upload (run in CI after build)
|
|
274
|
+
sentry-cli sourcemaps inject ./dist
|
|
275
|
+
sentry-cli sourcemaps upload --org my-org --project my-web ./dist
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Cross-reference: `../../boundaries/release.md` for CI integration patterns; source map upload should be gated on the same pipeline step as container image push.
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## 10. Browser-Specific Observability APIs
|
|
283
|
+
|
|
284
|
+
| API | Purpose |
|
|
285
|
+
|-----|---------|
|
|
286
|
+
| `performance.mark()` / `performance.measure()` | Custom timing for business-critical flows (e.g., checkout duration as CWV supplement) |
|
|
287
|
+
| Long Task API (`PerformanceObserver` type `longtask`) | Detect main-thread blocking events > 50 ms; correlate with INP failures |
|
|
288
|
+
| Navigation Timing API (`performance.getEntriesByType('navigation')`) | Full page load breakdown: DNS, TCP, TLS, TTFB, DOMContentLoaded, load |
|
|
289
|
+
|
|
290
|
+
Use `performance.mark('flow-start')` / `performance.measure('flow-duration', 'flow-start', 'flow-end')` to emit named timing spans that complement automated CWV collection.
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## 11. Matrix Coverage (L7 Row, Web Slice)
|
|
295
|
+
|
|
296
|
+
These cells from `../../matrix.md` are the primary drivers for this file:
|
|
297
|
+
|
|
298
|
+
| Matrix cell | Symbol | Artifact |
|
|
299
|
+
|------------|--------|---------|
|
|
300
|
+
| L7 × multi-tenant × metrics | PASS | Per-tenant CWV distribution (LCP p75, INP p75, CLS p75 segmented by `tenant.id`) |
|
|
301
|
+
| L7 × cross-application × traces | PASS | Primary: `traceparent` propagated via `propagateTraceHeaderCorsUrls` / `allowedTracingUrls` |
|
|
302
|
+
| L7 × SLO × metrics | PASS | CWV as SLI; LCP p75 ≤ 2.5s, INP p75 ≤ 200ms, CLS p75 ≤ 0.1 (see `../../boundaries/slo.md`) |
|
|
303
|
+
| L7 × release × traces | PASS | `service.version` on spans carries frontend build SHA + backend version for correlated release analysis |
|
|
304
|
+
| L7 × privacy × logs | PASS | PII masking in error stack traces and session replay; no `user.email` in metric labels |
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## 12. Anti-Patterns (Section G: Frontend/Mobile Candidates)
|
|
309
|
+
|
|
310
|
+
These are candidates for `../../anti-patterns.md §Section G Frontend/Mobile`:
|
|
311
|
+
|
|
312
|
+
| # | Anti-pattern | Impact | Remedy |
|
|
313
|
+
|---|-------------|--------|--------|
|
|
314
|
+
| G1 | 3rd-party script loaded without CSP monitoring | Silent XSS or supply-chain injection; no alert | Add `Content-Security-Policy` with `report-to`; pipe violations to log backend |
|
|
315
|
+
| G2 | Source maps not uploaded to error vendor | Stack traces are unreadable minified symbols in production | Upload source maps on every CI release pipeline step |
|
|
316
|
+
| G3 | Client retry loop on 5xx without circuit breaker | Backend saturation cascade from amplified retry storm | Implement exponential backoff + client-side circuit breaker before enabling trace correlation |
|
|
317
|
+
| G4 | `user.email` as metric label | Cardinality explosion + PII violation (GDPR Article 5(1)(c)) | Remove the per-user metric dimension or use a bounded, approved cohort/tier; hashing does not reduce unique-user cardinality or by itself anonymize data |
|
|
318
|
+
| G5 | FID still reported in dashboards after March 2024 | Stale metric; no longer part of CWV; misleads SLO reviews | Replace FID with INP in all dashboards and SLO definitions |
|
|
319
|
+
| G6 | SDK tracing allowlist or server CORS policy incomplete | Injection can be skipped, or browser preflight can reject tracing headers | Configure an origin-anchored SDK allowlist and the server OPTIONS/allowed-origin/allowed-header policy; verify preflight |
|
|
320
|
+
| G7 | Session replay without client-side PII masking | PII (email, card numbers) captured in replay payload before masking | Enable input masking in SDK config; do not rely on server-side redaction alone |
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 13. References
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
Internal cross-references:
|
|
328
|
+
- `../../standards.md`: normative semconv stability tiers and W3C Trace Context requirements
|
|
329
|
+
- `../../matrix.md`: full 112-cell coverage map (L7 row)
|
|
330
|
+
- `../../vendor-categories.md`: RUM vendor category taxonomy and delegation targets
|
|
331
|
+
- `../../anti-patterns.md`: full anti-pattern registry (Section G: Frontend/Mobile)
|
|
332
|
+
- `../../boundaries/slo.md`: OpenSLO definitions for CWV SLIs and burn-rate alerts
|
|
333
|
+
- `../../boundaries/release.md`: source map upload CI integration and `service.version` tagging
|
|
334
|
+
- `../../boundaries/cross-application.md`: full propagator compatibility matrix (for `traceparent` CORS allowlist guidance)
|
|
335
|
+
- `../../signals/privacy.md`: PII masking rules, 3rd-party tracking signals, replay sanitization
|
|
336
|
+
- `../../signals/traces.md`: server-side trace patterns for backend correlation
|
|
337
|
+
- `../mesh.md`: mesh propagator headers (cross-reference for `traceparent` propagation chain)
|
|
338
|
+
- `mobile-rum.md`: mobile RUM (offline-first queuing, battery, app lifecycle)
|
|
339
|
+
- `crash-analytics.md`: native crash symbolication and CFR tracking
|
|
340
|
+
|
|
341
|
+
## References
|
|
342
|
+
|
|
343
|
+
- Core Web Vitals (2024): <https://web.dev/articles/vitals>
|
|
344
|
+
- INP replaces FID: <https://web.dev/blog/inp-cwv>
|
|
345
|
+
- `web-vitals` JS library: <https://github.com/GoogleChrome/web-vitals>
|
|
346
|
+
- OTel JS browser instrumentation: <https://opentelemetry.io/docs/languages/js/getting-started/browser/>
|
|
347
|
+
- OTel frontend instrumentation guide: <https://elastic.co/observability-labs/blog/web-frontend-instrumentation-with-opentelemetry>
|
|
348
|
+
- Datadog RUM browser SDK: <https://docs.datadoghq.com/real_user_monitoring/browser/>
|
|
349
|
+
- Sentry Browser SDK: <https://docs.sentry.io/platforms/javascript/>
|
|
350
|
+
- Grafana Faro: <https://grafana.com/oss/faro/>
|