@newrelic/preflight 0.0.1-pre.1 → 1.0.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/LICENSE +183 -0
- package/README.md +498 -0
- package/dist/alerts/alert-log.d.ts +24 -0
- package/dist/alerts/alert-log.d.ts.map +1 -0
- package/dist/alerts/alert-log.js +159 -0
- package/dist/alerts/alert-log.js.map +1 -0
- package/dist/alerts/alert-snapshot-collector.d.ts +168 -0
- package/dist/alerts/alert-snapshot-collector.d.ts.map +1 -0
- package/dist/alerts/alert-snapshot-collector.js +243 -0
- package/dist/alerts/alert-snapshot-collector.js.map +1 -0
- package/dist/alerts/local-alert-engine.d.ts +86 -0
- package/dist/alerts/local-alert-engine.d.ts.map +1 -0
- package/dist/alerts/local-alert-engine.js +466 -0
- package/dist/alerts/local-alert-engine.js.map +1 -0
- package/dist/alerts/local-alert-rule.d.ts +439 -0
- package/dist/alerts/local-alert-rule.d.ts.map +1 -0
- package/dist/alerts/local-alert-rule.js +139 -0
- package/dist/alerts/local-alert-rule.js.map +1 -0
- package/dist/alerts/os-notifier.d.ts +39 -0
- package/dist/alerts/os-notifier.d.ts.map +1 -0
- package/dist/alerts/os-notifier.js +170 -0
- package/dist/alerts/os-notifier.js.map +1 -0
- package/dist/alerts/types.d.ts +35 -0
- package/dist/alerts/types.d.ts.map +1 -0
- package/dist/alerts/types.js +8 -0
- package/dist/alerts/types.js.map +1 -0
- package/dist/config.d.ts +169 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +860 -0
- package/dist/config.js.map +1 -0
- package/dist/dashboard/dashboard-server.d.ts +38 -0
- package/dist/dashboard/dashboard-server.d.ts.map +1 -0
- package/dist/dashboard/dashboard-server.js +207 -0
- package/dist/dashboard/dashboard-server.js.map +1 -0
- package/dist/dashboard/index.d.ts +3 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +2 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/live-event-bus.d.ts +99 -0
- package/dist/dashboard/live-event-bus.d.ts.map +1 -0
- package/dist/dashboard/live-event-bus.js +56 -0
- package/dist/dashboard/live-event-bus.js.map +1 -0
- package/dist/dashboard/routes/api-handler.d.ts +122 -0
- package/dist/dashboard/routes/api-handler.d.ts.map +1 -0
- package/dist/dashboard/routes/api-handler.js +1414 -0
- package/dist/dashboard/routes/api-handler.js.map +1 -0
- package/dist/dashboard/routes/replay-analyzer.d.ts +15 -0
- package/dist/dashboard/routes/replay-analyzer.d.ts.map +1 -0
- package/dist/dashboard/routes/replay-analyzer.js +227 -0
- package/dist/dashboard/routes/replay-analyzer.js.map +1 -0
- package/dist/dashboard/routes/sse-handler.d.ts +4 -0
- package/dist/dashboard/routes/sse-handler.d.ts.map +1 -0
- package/dist/dashboard/routes/sse-handler.js +122 -0
- package/dist/dashboard/routes/sse-handler.js.map +1 -0
- package/dist/dashboard/routes/static-handler.d.ts +3 -0
- package/dist/dashboard/routes/static-handler.d.ts.map +1 -0
- package/dist/dashboard/routes/static-handler.js +103 -0
- package/dist/dashboard/routes/static-handler.js.map +1 -0
- package/dist/data/alerts/conditions/01-daily-cost-spike.json +16 -0
- package/dist/data/alerts/conditions/02-low-efficiency-score.json +16 -0
- package/dist/data/alerts/conditions/03-stuck-loop-rate.json +16 -0
- package/dist/data/alerts/conditions/04-anti-pattern-rate.json +16 -0
- package/dist/data/alerts/conditions/05-session-cost-budget.json +16 -0
- package/dist/data/alerts/conditions-personal/01-personal-daily-cost.json +16 -0
- package/dist/data/alerts/conditions-personal/02-personal-session-cost.json +16 -0
- package/dist/data/alerts/conditions-personal/03-personal-low-efficiency.json +16 -0
- package/dist/data/alerts/conditions-personal/04-personal-anti-pattern-rate.json +16 -0
- package/dist/data/alerts/conditions-personal/05-personal-stuck-loop.json +16 -0
- package/dist/data/alerts/policy.json +4 -0
- package/dist/data/dashboards/ai-coding-assistant-manager-view.json +103 -0
- package/dist/data/dashboards/ai-coding-assistant-overview.json +239 -0
- package/dist/data/dashboards/ai-coding-assistant-personal.json +442 -0
- package/dist/data/dashboards/ai-coding-assistant-platform-comparison.json +320 -0
- package/dist/data/dashboards/ai-coding-assistant-security.json +275 -0
- package/dist/data/dashboards/ai-coding-assistant-session-detail.json +296 -0
- package/dist/data/dashboards/ai-coding-assistant-team-view.json +345 -0
- package/dist/deploy/data-paths.d.ts +22 -0
- package/dist/deploy/data-paths.d.ts.map +1 -0
- package/dist/deploy/data-paths.js +69 -0
- package/dist/deploy/data-paths.js.map +1 -0
- package/dist/deploy/deploy-alerts.d.ts +58 -0
- package/dist/deploy/deploy-alerts.d.ts.map +1 -0
- package/dist/deploy/deploy-alerts.js +371 -0
- package/dist/deploy/deploy-alerts.js.map +1 -0
- package/dist/deploy/deploy-dashboards.d.ts +92 -0
- package/dist/deploy/deploy-dashboards.d.ts.map +1 -0
- package/dist/deploy/deploy-dashboards.js +282 -0
- package/dist/deploy/deploy-dashboards.js.map +1 -0
- package/dist/digest/digest-formatter.d.ts +3 -0
- package/dist/digest/digest-formatter.d.ts.map +1 -0
- package/dist/digest/digest-formatter.js +37 -0
- package/dist/digest/digest-formatter.js.map +1 -0
- package/dist/digest/digest-sender.d.ts +2 -0
- package/dist/digest/digest-sender.d.ts.map +1 -0
- package/dist/digest/digest-sender.js +29 -0
- package/dist/digest/digest-sender.js.map +1 -0
- package/dist/hooks/bash-classifier.d.ts +26 -0
- package/dist/hooks/bash-classifier.d.ts.map +1 -0
- package/dist/hooks/bash-classifier.js +409 -0
- package/dist/hooks/bash-classifier.js.map +1 -0
- package/dist/hooks/collector-script.d.ts +47 -0
- package/dist/hooks/collector-script.d.ts.map +1 -0
- package/dist/hooks/collector-script.js +662 -0
- package/dist/hooks/collector-script.js.map +1 -0
- package/dist/hooks/event-processor.d.ts +65 -0
- package/dist/hooks/event-processor.d.ts.map +1 -0
- package/dist/hooks/event-processor.js +342 -0
- package/dist/hooks/event-processor.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/session-resolver.d.ts +66 -0
- package/dist/hooks/session-resolver.d.ts.map +1 -0
- package/dist/hooks/session-resolver.js +196 -0
- package/dist/hooks/session-resolver.js.map +1 -0
- package/dist/hooks/tool-parsers.d.ts +19 -0
- package/dist/hooks/tool-parsers.d.ts.map +1 -0
- package/dist/hooks/tool-parsers.js +260 -0
- package/dist/hooks/tool-parsers.js.map +1 -0
- package/dist/index.d.ts +107 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1505 -0
- package/dist/index.js.map +1 -0
- package/dist/install/cli.d.ts +11 -0
- package/dist/install/cli.d.ts.map +1 -0
- package/dist/install/cli.js +365 -0
- package/dist/install/cli.js.map +1 -0
- package/dist/install/index.d.ts +4 -0
- package/dist/install/index.d.ts.map +1 -0
- package/dist/install/index.js +3 -0
- package/dist/install/index.js.map +1 -0
- package/dist/install/install-helper.d.ts +35 -0
- package/dist/install/install-helper.d.ts.map +1 -0
- package/dist/install/install-helper.js +227 -0
- package/dist/install/install-helper.js.map +1 -0
- package/dist/install/key-validator.d.ts +19 -0
- package/dist/install/key-validator.d.ts.map +1 -0
- package/dist/install/key-validator.js +122 -0
- package/dist/install/key-validator.js.map +1 -0
- package/dist/install/migrate.d.ts +12 -0
- package/dist/install/migrate.d.ts.map +1 -0
- package/dist/install/migrate.js +115 -0
- package/dist/install/migrate.js.map +1 -0
- package/dist/install/schedule.d.ts +11 -0
- package/dist/install/schedule.d.ts.map +1 -0
- package/dist/install/schedule.js +114 -0
- package/dist/install/schedule.js.map +1 -0
- package/dist/install/setup-wizard.d.ts +40 -0
- package/dist/install/setup-wizard.d.ts.map +1 -0
- package/dist/install/setup-wizard.js +489 -0
- package/dist/install/setup-wizard.js.map +1 -0
- package/dist/lib/date.d.ts +54 -0
- package/dist/lib/date.d.ts.map +1 -0
- package/dist/lib/date.js +85 -0
- package/dist/lib/date.js.map +1 -0
- package/dist/metrics/anti-patterns.d.ts +62 -0
- package/dist/metrics/anti-patterns.d.ts.map +1 -0
- package/dist/metrics/anti-patterns.js +301 -0
- package/dist/metrics/anti-patterns.js.map +1 -0
- package/dist/metrics/api-failure-tracker.d.ts +82 -0
- package/dist/metrics/api-failure-tracker.d.ts.map +1 -0
- package/dist/metrics/api-failure-tracker.js +202 -0
- package/dist/metrics/api-failure-tracker.js.map +1 -0
- package/dist/metrics/budget-tracker.d.ts +60 -0
- package/dist/metrics/budget-tracker.d.ts.map +1 -0
- package/dist/metrics/budget-tracker.js +130 -0
- package/dist/metrics/budget-tracker.js.map +1 -0
- package/dist/metrics/claudemd-tracker.d.ts +108 -0
- package/dist/metrics/claudemd-tracker.d.ts.map +1 -0
- package/dist/metrics/claudemd-tracker.js +337 -0
- package/dist/metrics/claudemd-tracker.js.map +1 -0
- package/dist/metrics/collaboration-profile.d.ts +65 -0
- package/dist/metrics/collaboration-profile.d.ts.map +1 -0
- package/dist/metrics/collaboration-profile.js +231 -0
- package/dist/metrics/collaboration-profile.js.map +1 -0
- package/dist/metrics/context-composition-tracker.d.ts +74 -0
- package/dist/metrics/context-composition-tracker.d.ts.map +1 -0
- package/dist/metrics/context-composition-tracker.js +202 -0
- package/dist/metrics/context-composition-tracker.js.map +1 -0
- package/dist/metrics/context-tracker.d.ts +78 -0
- package/dist/metrics/context-tracker.d.ts.map +1 -0
- package/dist/metrics/context-tracker.js +222 -0
- package/dist/metrics/context-tracker.js.map +1 -0
- package/dist/metrics/context-window-tracker.d.ts +18 -0
- package/dist/metrics/context-window-tracker.d.ts.map +1 -0
- package/dist/metrics/context-window-tracker.js +35 -0
- package/dist/metrics/context-window-tracker.js.map +1 -0
- package/dist/metrics/cost-forecast.d.ts +36 -0
- package/dist/metrics/cost-forecast.d.ts.map +1 -0
- package/dist/metrics/cost-forecast.js +91 -0
- package/dist/metrics/cost-forecast.js.map +1 -0
- package/dist/metrics/cost-per-outcome.d.ts +102 -0
- package/dist/metrics/cost-per-outcome.d.ts.map +1 -0
- package/dist/metrics/cost-per-outcome.js +266 -0
- package/dist/metrics/cost-per-outcome.js.map +1 -0
- package/dist/metrics/cost-tracker.d.ts +78 -0
- package/dist/metrics/cost-tracker.d.ts.map +1 -0
- package/dist/metrics/cost-tracker.js +169 -0
- package/dist/metrics/cost-tracker.js.map +1 -0
- package/dist/metrics/decision-tracker.d.ts +49 -0
- package/dist/metrics/decision-tracker.d.ts.map +1 -0
- package/dist/metrics/decision-tracker.js +161 -0
- package/dist/metrics/decision-tracker.js.map +1 -0
- package/dist/metrics/efficiency-score.d.ts +80 -0
- package/dist/metrics/efficiency-score.d.ts.map +1 -0
- package/dist/metrics/efficiency-score.js +219 -0
- package/dist/metrics/efficiency-score.js.map +1 -0
- package/dist/metrics/git-efficiency-tracker.d.ts +165 -0
- package/dist/metrics/git-efficiency-tracker.d.ts.map +1 -0
- package/dist/metrics/git-efficiency-tracker.js +1056 -0
- package/dist/metrics/git-efficiency-tracker.js.map +1 -0
- package/dist/metrics/index.d.ts +26 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +14 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/instruction-drift-tracker.d.ts +69 -0
- package/dist/metrics/instruction-drift-tracker.d.ts.map +1 -0
- package/dist/metrics/instruction-drift-tracker.js +213 -0
- package/dist/metrics/instruction-drift-tracker.js.map +1 -0
- package/dist/metrics/latency-decomposition.d.ts +50 -0
- package/dist/metrics/latency-decomposition.d.ts.map +1 -0
- package/dist/metrics/latency-decomposition.js +112 -0
- package/dist/metrics/latency-decomposition.js.map +1 -0
- package/dist/metrics/latency-tracker.d.ts +33 -0
- package/dist/metrics/latency-tracker.d.ts.map +1 -0
- package/dist/metrics/latency-tracker.js +93 -0
- package/dist/metrics/latency-tracker.js.map +1 -0
- package/dist/metrics/live-session-registry.d.ts +29 -0
- package/dist/metrics/live-session-registry.d.ts.map +1 -0
- package/dist/metrics/live-session-registry.js +103 -0
- package/dist/metrics/live-session-registry.js.map +1 -0
- package/dist/metrics/model-usage-tracker.d.ts +21 -0
- package/dist/metrics/model-usage-tracker.d.ts.map +1 -0
- package/dist/metrics/model-usage-tracker.js +53 -0
- package/dist/metrics/model-usage-tracker.js.map +1 -0
- package/dist/metrics/percentile.d.ts +5 -0
- package/dist/metrics/percentile.d.ts.map +1 -0
- package/dist/metrics/percentile.js +10 -0
- package/dist/metrics/percentile.js.map +1 -0
- package/dist/metrics/personal-coach.d.ts +47 -0
- package/dist/metrics/personal-coach.d.ts.map +1 -0
- package/dist/metrics/personal-coach.js +241 -0
- package/dist/metrics/personal-coach.js.map +1 -0
- package/dist/metrics/prompt-feedback.d.ts +75 -0
- package/dist/metrics/prompt-feedback.d.ts.map +1 -0
- package/dist/metrics/prompt-feedback.js +286 -0
- package/dist/metrics/prompt-feedback.js.map +1 -0
- package/dist/metrics/proxy-metrics.d.ts +54 -0
- package/dist/metrics/proxy-metrics.d.ts.map +1 -0
- package/dist/metrics/proxy-metrics.js +228 -0
- package/dist/metrics/proxy-metrics.js.map +1 -0
- package/dist/metrics/quality-proxy-tracker.d.ts +51 -0
- package/dist/metrics/quality-proxy-tracker.d.ts.map +1 -0
- package/dist/metrics/quality-proxy-tracker.js +162 -0
- package/dist/metrics/quality-proxy-tracker.js.map +1 -0
- package/dist/metrics/recommendation-engine.d.ts +72 -0
- package/dist/metrics/recommendation-engine.d.ts.map +1 -0
- package/dist/metrics/recommendation-engine.js +207 -0
- package/dist/metrics/recommendation-engine.js.map +1 -0
- package/dist/metrics/retry-detector.d.ts +43 -0
- package/dist/metrics/retry-detector.d.ts.map +1 -0
- package/dist/metrics/retry-detector.js +179 -0
- package/dist/metrics/retry-detector.js.map +1 -0
- package/dist/metrics/session-tracker.d.ts +75 -0
- package/dist/metrics/session-tracker.d.ts.map +1 -0
- package/dist/metrics/session-tracker.js +249 -0
- package/dist/metrics/session-tracker.js.map +1 -0
- package/dist/metrics/task-completion-tracker.d.ts +15 -0
- package/dist/metrics/task-completion-tracker.d.ts.map +1 -0
- package/dist/metrics/task-completion-tracker.js +27 -0
- package/dist/metrics/task-completion-tracker.js.map +1 -0
- package/dist/metrics/task-detector.d.ts +84 -0
- package/dist/metrics/task-detector.d.ts.map +1 -0
- package/dist/metrics/task-detector.js +302 -0
- package/dist/metrics/task-detector.js.map +1 -0
- package/dist/metrics/tool-selection-scorer.d.ts +39 -0
- package/dist/metrics/tool-selection-scorer.d.ts.map +1 -0
- package/dist/metrics/tool-selection-scorer.js +193 -0
- package/dist/metrics/tool-selection-scorer.js.map +1 -0
- package/dist/metrics/trend-analyzer.d.ts +92 -0
- package/dist/metrics/trend-analyzer.d.ts.map +1 -0
- package/dist/metrics/trend-analyzer.js +293 -0
- package/dist/metrics/trend-analyzer.js.map +1 -0
- package/dist/metrics/turn-cost-attributor.d.ts +41 -0
- package/dist/metrics/turn-cost-attributor.d.ts.map +1 -0
- package/dist/metrics/turn-cost-attributor.js +118 -0
- package/dist/metrics/turn-cost-attributor.js.map +1 -0
- package/dist/metrics/turn-tracker.d.ts +49 -0
- package/dist/metrics/turn-tracker.d.ts.map +1 -0
- package/dist/metrics/turn-tracker.js +192 -0
- package/dist/metrics/turn-tracker.js.map +1 -0
- package/dist/platforms/amazon-q-adapter.d.ts +10 -0
- package/dist/platforms/amazon-q-adapter.d.ts.map +1 -0
- package/dist/platforms/amazon-q-adapter.js +75 -0
- package/dist/platforms/amazon-q-adapter.js.map +1 -0
- package/dist/platforms/claude-code-adapter.d.ts +10 -0
- package/dist/platforms/claude-code-adapter.d.ts.map +1 -0
- package/dist/platforms/claude-code-adapter.js +48 -0
- package/dist/platforms/claude-code-adapter.js.map +1 -0
- package/dist/platforms/continue-adapter.d.ts +10 -0
- package/dist/platforms/continue-adapter.d.ts.map +1 -0
- package/dist/platforms/continue-adapter.js +73 -0
- package/dist/platforms/continue-adapter.js.map +1 -0
- package/dist/platforms/copilot-adapter.d.ts +37 -0
- package/dist/platforms/copilot-adapter.d.ts.map +1 -0
- package/dist/platforms/copilot-adapter.js +66 -0
- package/dist/platforms/copilot-adapter.js.map +1 -0
- package/dist/platforms/cursor-adapter.d.ts +10 -0
- package/dist/platforms/cursor-adapter.d.ts.map +1 -0
- package/dist/platforms/cursor-adapter.js +60 -0
- package/dist/platforms/cursor-adapter.js.map +1 -0
- package/dist/platforms/generic-mcp-adapter.d.ts +113 -0
- package/dist/platforms/generic-mcp-adapter.d.ts.map +1 -0
- package/dist/platforms/generic-mcp-adapter.js +139 -0
- package/dist/platforms/generic-mcp-adapter.js.map +1 -0
- package/dist/platforms/index.d.ts +15 -0
- package/dist/platforms/index.d.ts.map +1 -0
- package/dist/platforms/index.js +12 -0
- package/dist/platforms/index.js.map +1 -0
- package/dist/platforms/platform-registry.d.ts +11 -0
- package/dist/platforms/platform-registry.d.ts.map +1 -0
- package/dist/platforms/platform-registry.js +54 -0
- package/dist/platforms/platform-registry.js.map +1 -0
- package/dist/platforms/types.d.ts +36 -0
- package/dist/platforms/types.d.ts.map +1 -0
- package/dist/platforms/types.js +2 -0
- package/dist/platforms/types.js.map +1 -0
- package/dist/platforms/windsurf-adapter.d.ts +10 -0
- package/dist/platforms/windsurf-adapter.d.ts.map +1 -0
- package/dist/platforms/windsurf-adapter.js +63 -0
- package/dist/platforms/windsurf-adapter.js.map +1 -0
- package/dist/platforms/zed-adapter.d.ts +10 -0
- package/dist/platforms/zed-adapter.d.ts.map +1 -0
- package/dist/platforms/zed-adapter.js +72 -0
- package/dist/platforms/zed-adapter.js.map +1 -0
- package/dist/proxy/index.d.ts +7 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +5 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/otlp-receiver.d.ts +28 -0
- package/dist/proxy/otlp-receiver.d.ts.map +1 -0
- package/dist/proxy/otlp-receiver.js +319 -0
- package/dist/proxy/otlp-receiver.js.map +1 -0
- package/dist/proxy/proxy-manager.d.ts +47 -0
- package/dist/proxy/proxy-manager.d.ts.map +1 -0
- package/dist/proxy/proxy-manager.js +338 -0
- package/dist/proxy/proxy-manager.js.map +1 -0
- package/dist/proxy/types.d.ts +72 -0
- package/dist/proxy/types.d.ts.map +1 -0
- package/dist/proxy/types.js +33 -0
- package/dist/proxy/types.js.map +1 -0
- package/dist/proxy/upstream-http.d.ts +26 -0
- package/dist/proxy/upstream-http.d.ts.map +1 -0
- package/dist/proxy/upstream-http.js +209 -0
- package/dist/proxy/upstream-http.js.map +1 -0
- package/dist/proxy/upstream-stdio.d.ts +25 -0
- package/dist/proxy/upstream-stdio.d.ts.map +1 -0
- package/dist/proxy/upstream-stdio.js +256 -0
- package/dist/proxy/upstream-stdio.js.map +1 -0
- package/dist/security/audit-trail.d.ts +74 -0
- package/dist/security/audit-trail.d.ts.map +1 -0
- package/dist/security/audit-trail.js +338 -0
- package/dist/security/audit-trail.js.map +1 -0
- package/dist/security/index.d.ts +5 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +4 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/ssrf.d.ts +2 -0
- package/dist/security/ssrf.d.ts.map +1 -0
- package/dist/security/ssrf.js +126 -0
- package/dist/security/ssrf.js.map +1 -0
- package/dist/server.d.ts +14 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +117 -0
- package/dist/server.js.map +1 -0
- package/dist/shared/__test-utils__/log-output.d.ts +49 -0
- package/dist/shared/__test-utils__/log-output.d.ts.map +1 -0
- package/dist/shared/__test-utils__/log-output.js +38 -0
- package/dist/shared/__test-utils__/log-output.js.map +1 -0
- package/dist/shared/config.d.ts +56 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +290 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/errors.d.ts +139 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +406 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/events/factory.d.ts +143 -0
- package/dist/shared/events/factory.d.ts.map +1 -0
- package/dist/shared/events/factory.js +351 -0
- package/dist/shared/events/factory.js.map +1 -0
- package/dist/shared/events/index.d.ts +6 -0
- package/dist/shared/events/index.d.ts.map +1 -0
- package/dist/shared/events/index.js +3 -0
- package/dist/shared/events/index.js.map +1 -0
- package/dist/shared/events/serialize.d.ts +87 -0
- package/dist/shared/events/serialize.d.ts.map +1 -0
- package/dist/shared/events/serialize.js +510 -0
- package/dist/shared/events/serialize.js.map +1 -0
- package/dist/shared/events/types.d.ts +139 -0
- package/dist/shared/events/types.d.ts.map +1 -0
- package/dist/shared/events/types.js +2 -0
- package/dist/shared/events/types.js.map +1 -0
- package/dist/shared/harvest/event-buffer.d.ts +59 -0
- package/dist/shared/harvest/event-buffer.d.ts.map +1 -0
- package/dist/shared/harvest/event-buffer.js +100 -0
- package/dist/shared/harvest/event-buffer.js.map +1 -0
- package/dist/shared/harvest/harvest-scheduler.d.ts +200 -0
- package/dist/shared/harvest/harvest-scheduler.d.ts.map +1 -0
- package/dist/shared/harvest/harvest-scheduler.js +647 -0
- package/dist/shared/harvest/harvest-scheduler.js.map +1 -0
- package/dist/shared/harvest/index.d.ts +7 -0
- package/dist/shared/harvest/index.d.ts.map +1 -0
- package/dist/shared/harvest/index.js +4 -0
- package/dist/shared/harvest/index.js.map +1 -0
- package/dist/shared/harvest/metric-aggregator.d.ts +115 -0
- package/dist/shared/harvest/metric-aggregator.d.ts.map +1 -0
- package/dist/shared/harvest/metric-aggregator.js +247 -0
- package/dist/shared/harvest/metric-aggregator.js.map +1 -0
- package/dist/shared/index.d.ts +22 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +13 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/logger.d.ts +57 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +166 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/pricing-data.d.ts +4 -0
- package/dist/shared/pricing-data.d.ts.map +1 -0
- package/dist/shared/pricing-data.js +473 -0
- package/dist/shared/pricing-data.js.map +1 -0
- package/dist/shared/pricing.d.ts +148 -0
- package/dist/shared/pricing.d.ts.map +1 -0
- package/dist/shared/pricing.js +528 -0
- package/dist/shared/pricing.js.map +1 -0
- package/dist/shared/redact.d.ts +33 -0
- package/dist/shared/redact.d.ts.map +1 -0
- package/dist/shared/redact.js +110 -0
- package/dist/shared/redact.js.map +1 -0
- package/dist/shared/timing.d.ts +96 -0
- package/dist/shared/timing.d.ts.map +1 -0
- package/dist/shared/timing.js +173 -0
- package/dist/shared/timing.js.map +1 -0
- package/dist/shared/tokens.d.ts +145 -0
- package/dist/shared/tokens.d.ts.map +1 -0
- package/dist/shared/tokens.js +492 -0
- package/dist/shared/tokens.js.map +1 -0
- package/dist/shared/transport/events-api.d.ts +14 -0
- package/dist/shared/transport/events-api.d.ts.map +1 -0
- package/dist/shared/transport/events-api.js +29 -0
- package/dist/shared/transport/events-api.js.map +1 -0
- package/dist/shared/transport/http-client.d.ts +49 -0
- package/dist/shared/transport/http-client.d.ts.map +1 -0
- package/dist/shared/transport/http-client.js +381 -0
- package/dist/shared/transport/http-client.js.map +1 -0
- package/dist/shared/transport/index.d.ts +10 -0
- package/dist/shared/transport/index.d.ts.map +1 -0
- package/dist/shared/transport/index.js +6 -0
- package/dist/shared/transport/index.js.map +1 -0
- package/dist/shared/transport/logs-api.d.ts +29 -0
- package/dist/shared/transport/logs-api.d.ts.map +1 -0
- package/dist/shared/transport/logs-api.js +40 -0
- package/dist/shared/transport/logs-api.js.map +1 -0
- package/dist/shared/transport/metric-api.d.ts +9 -0
- package/dist/shared/transport/metric-api.d.ts.map +1 -0
- package/dist/shared/transport/metric-api.js +39 -0
- package/dist/shared/transport/metric-api.js.map +1 -0
- package/dist/shared/transport/otlp-event-bridge.d.ts +22 -0
- package/dist/shared/transport/otlp-event-bridge.d.ts.map +1 -0
- package/dist/shared/transport/otlp-event-bridge.js +50 -0
- package/dist/shared/transport/otlp-event-bridge.js.map +1 -0
- package/dist/shared/transport/otlp-shared.d.ts +14 -0
- package/dist/shared/transport/otlp-shared.d.ts.map +1 -0
- package/dist/shared/transport/otlp-shared.js +49 -0
- package/dist/shared/transport/otlp-shared.js.map +1 -0
- package/dist/shared/transport/otlp-transport.d.ts +58 -0
- package/dist/shared/transport/otlp-transport.d.ts.map +1 -0
- package/dist/shared/transport/otlp-transport.js +236 -0
- package/dist/shared/transport/otlp-transport.js.map +1 -0
- package/dist/shared/transport/types.d.ts +129 -0
- package/dist/shared/transport/types.d.ts.map +1 -0
- package/dist/shared/transport/types.js +2 -0
- package/dist/shared/transport/types.js.map +1 -0
- package/dist/shared/version.d.ts +2 -0
- package/dist/shared/version.d.ts.map +1 -0
- package/dist/shared/version.js +2 -0
- package/dist/shared/version.js.map +1 -0
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +4 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/local-store.d.ts +153 -0
- package/dist/storage/local-store.d.ts.map +1 -0
- package/dist/storage/local-store.js +719 -0
- package/dist/storage/local-store.js.map +1 -0
- package/dist/storage/retention.d.ts +2 -0
- package/dist/storage/retention.d.ts.map +1 -0
- package/dist/storage/retention.js +53 -0
- package/dist/storage/retention.js.map +1 -0
- package/dist/storage/session-store.d.ts +97 -0
- package/dist/storage/session-store.d.ts.map +1 -0
- package/dist/storage/session-store.js +391 -0
- package/dist/storage/session-store.js.map +1 -0
- package/dist/storage/types.d.ts +64 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/storage/weekly-summary.d.ts +61 -0
- package/dist/storage/weekly-summary.d.ts.map +1 -0
- package/dist/storage/weekly-summary.js +243 -0
- package/dist/storage/weekly-summary.js.map +1 -0
- package/dist/tools/analytics-tools.d.ts +101 -0
- package/dist/tools/analytics-tools.d.ts.map +1 -0
- package/dist/tools/analytics-tools.js +71 -0
- package/dist/tools/analytics-tools.js.map +1 -0
- package/dist/tools/cost-tools.d.ts +121 -0
- package/dist/tools/cost-tools.d.ts.map +1 -0
- package/dist/tools/cost-tools.js +174 -0
- package/dist/tools/cost-tools.js.map +1 -0
- package/dist/tools/cross-session-tools.d.ts +376 -0
- package/dist/tools/cross-session-tools.d.ts.map +1 -0
- package/dist/tools/cross-session-tools.js +820 -0
- package/dist/tools/cross-session-tools.js.map +1 -0
- package/dist/tools/extended-analytics-tools.d.ts +164 -0
- package/dist/tools/extended-analytics-tools.d.ts.map +1 -0
- package/dist/tools/extended-analytics-tools.js +121 -0
- package/dist/tools/extended-analytics-tools.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/session-stats.d.ts +162 -0
- package/dist/tools/session-stats.d.ts.map +1 -0
- package/dist/tools/session-stats.js +1054 -0
- package/dist/tools/session-stats.js.map +1 -0
- package/dist/tools/workflow-tools.d.ts +126 -0
- package/dist/tools/workflow-tools.d.ts.map +1 -0
- package/dist/tools/workflow-tools.js +274 -0
- package/dist/tools/workflow-tools.js.map +1 -0
- package/dist/tracing/mcp-tracer.d.ts +4 -0
- package/dist/tracing/mcp-tracer.d.ts.map +1 -0
- package/dist/tracing/mcp-tracer.js +14 -0
- package/dist/tracing/mcp-tracer.js.map +1 -0
- package/dist/tracing/session-span.d.ts +14 -0
- package/dist/tracing/session-span.d.ts.map +1 -0
- package/dist/tracing/session-span.js +53 -0
- package/dist/tracing/session-span.js.map +1 -0
- package/dist/tracing/task-span-tracker.d.ts +11 -0
- package/dist/tracing/task-span-tracker.d.ts.map +1 -0
- package/dist/tracing/task-span-tracker.js +59 -0
- package/dist/tracing/task-span-tracker.js.map +1 -0
- package/dist/tracing/tool-call-span.d.ts +4 -0
- package/dist/tracing/tool-call-span.d.ts.map +1 -0
- package/dist/tracing/tool-call-span.js +60 -0
- package/dist/tracing/tool-call-span.js.map +1 -0
- package/dist/transport/index.d.ts +3 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +2 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/log-ingest.d.ts +42 -0
- package/dist/transport/log-ingest.d.ts.map +1 -0
- package/dist/transport/log-ingest.js +151 -0
- package/dist/transport/log-ingest.js.map +1 -0
- package/dist/transport/nr-ingest.d.ts +171 -0
- package/dist/transport/nr-ingest.d.ts.map +1 -0
- package/dist/transport/nr-ingest.js +659 -0
- package/dist/transport/nr-ingest.js.map +1 -0
- package/dist/types.d.ts +45 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/web/assets/index-BrL281N-.css +2 -0
- package/dist/web/assets/index-CcaYZzXm.js +42 -0
- package/dist/web/favicon.svg +15 -0
- package/dist/web/index.html +15 -0
- package/examples/local-alert-rules.json +106 -0
- package/package.json +125 -1
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
import { createLogger } from '../logger.js';
|
|
2
|
+
const serializeLogger = createLogger('events-serialize');
|
|
3
|
+
/**
|
|
4
|
+
* NR-reserved attribute names + library-internal namespaces a custom
|
|
5
|
+
* attribute key must NOT collide with. The `custom.`
|
|
6
|
+
* prefix already scopes most user-supplied keys safely, but we enforce a
|
|
7
|
+
* deny-list against the bare key (pre-prefix) so callers can't smuggle a
|
|
8
|
+
* reserved attribute name in via `customAttributes` and confuse NRQL
|
|
9
|
+
* dashboards downstream.
|
|
10
|
+
*
|
|
11
|
+
* Membership rules:
|
|
12
|
+
* - NR Events API reserved attributes: `eventType`, `timestamp`,
|
|
13
|
+
* `accountId`, `entity.guid`, `appId`. NR rejects events that try to
|
|
14
|
+
* overwrite these via attribute payload, but the rejection is silent
|
|
15
|
+
* at ingest — better to fail-fast with a debug log here.
|
|
16
|
+
* - Library-internal namespaces: any key starting with `nr.` or
|
|
17
|
+
* `gen_ai.` would land at `custom.nr.<x>` / `custom.gen_ai.<x>`
|
|
18
|
+
* after prefixing — which doesn't collide, but is misleading because
|
|
19
|
+
* the bare `nr.<x>` and `gen_ai.<x>` namespaces ARE reserved at the
|
|
20
|
+
* top level. Reject the bare-key form to avoid the cognitive trap.
|
|
21
|
+
* - `schemaVersion` (§6.10) — reserved for the library's own use.
|
|
22
|
+
* - `type` — easy to confuse with NR's `eventType`; many dashboards
|
|
23
|
+
* use `type` for log/event categorization (2 history).
|
|
24
|
+
*/
|
|
25
|
+
const RESERVED_CUSTOM_KEYS = new Set([
|
|
26
|
+
'eventType',
|
|
27
|
+
'timestamp',
|
|
28
|
+
'accountId',
|
|
29
|
+
'entity.guid',
|
|
30
|
+
'appId',
|
|
31
|
+
'schemaVersion',
|
|
32
|
+
'type',
|
|
33
|
+
]);
|
|
34
|
+
function isReservedCustomKey(key) {
|
|
35
|
+
if (RESERVED_CUSTOM_KEYS.has(key))
|
|
36
|
+
return true;
|
|
37
|
+
if (key.startsWith('nr.'))
|
|
38
|
+
return true;
|
|
39
|
+
if (key.startsWith('gen_ai.'))
|
|
40
|
+
return true;
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Apply customAttribute clipping (§3.3.5, §6.3) and reject keys that
|
|
45
|
+
* would collide with reserved/internal namespaces (§6.12). Drop +
|
|
46
|
+
* debug-log on rejection so misuse is discoverable but doesn't fail
|
|
47
|
+
* the entire event.
|
|
48
|
+
*/
|
|
49
|
+
function applyCustomAttributes(data, custom, options, eventType) {
|
|
50
|
+
for (const [key, value] of Object.entries(custom)) {
|
|
51
|
+
if (isReservedCustomKey(key)) {
|
|
52
|
+
serializeLogger.debug(`${eventType}: customAttributes key "${key}" is reserved — dropping`, {
|
|
53
|
+
eventType,
|
|
54
|
+
key,
|
|
55
|
+
});
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
data[`custom.${key}`] = clipCustomAttribute(value, options);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// NR Events API caps attribute values at 4096 UTF-8 bytes (§S2).
|
|
62
|
+
// Truncating by character count can still exceed the byte cap for multi-byte
|
|
63
|
+
// scripts (CJK = 3 bytes/char, emoji = 4 bytes/char). Truncate by byte count.
|
|
64
|
+
const NR_VALUE_MAX_BYTES = 4096;
|
|
65
|
+
const NR_VALUE_SUFFIX = '...'; // 3 bytes (ASCII)
|
|
66
|
+
// §11.7: shared helper used by both truncate() and clipCustomAttribute().
|
|
67
|
+
// Finds the longest code-point prefix of `s` whose UTF-8 byte length fits
|
|
68
|
+
// within `maxBytes`, then appends '...'. Called only when the string is
|
|
69
|
+
// already known to exceed `maxBytes`.
|
|
70
|
+
//
|
|
71
|
+
// Uses binary search (O(log n) Buffer.byteLength calls) instead of the
|
|
72
|
+
// previous linear-decrement loop (O(n) calls). For a worst-case string of
|
|
73
|
+
// all 4-byte emoji at the 4096-byte cap, this reduces ~1024 Buffer.byteLength
|
|
74
|
+
// calls to ~12.
|
|
75
|
+
const SUFFIX_BYTES = Buffer.byteLength(NR_VALUE_SUFFIX, 'utf8'); // 3 (ASCII)
|
|
76
|
+
function truncateToBytes(s, maxBytes) {
|
|
77
|
+
const target = maxBytes - SUFFIX_BYTES;
|
|
78
|
+
const codePoints = Array.from(s);
|
|
79
|
+
// Binary search for the largest cut that fits within target bytes.
|
|
80
|
+
let lo = 0;
|
|
81
|
+
let hi = codePoints.length;
|
|
82
|
+
while (lo < hi) {
|
|
83
|
+
const mid = (lo + hi + 1) >> 1;
|
|
84
|
+
if (Buffer.byteLength(codePoints.slice(0, mid).join(''), 'utf8') <= target) {
|
|
85
|
+
lo = mid;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
hi = mid - 1;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return codePoints.slice(0, lo).join('') + NR_VALUE_SUFFIX;
|
|
92
|
+
}
|
|
93
|
+
function truncate(s) {
|
|
94
|
+
// Fast path: ASCII-only strings — byte length == char length.
|
|
95
|
+
if (s.length <= NR_VALUE_MAX_BYTES / 4)
|
|
96
|
+
return s;
|
|
97
|
+
if (Buffer.byteLength(s, 'utf8') <= NR_VALUE_MAX_BYTES)
|
|
98
|
+
return s;
|
|
99
|
+
return truncateToBytes(s, NR_VALUE_MAX_BYTES);
|
|
100
|
+
}
|
|
101
|
+
// `customAttributes` is the one channel that lets a
|
|
102
|
+
// caller smuggle arbitrary string content into telemetry. In high-security
|
|
103
|
+
// mode we clip every string custom attribute to 256 chars so a misuse like
|
|
104
|
+
// `customAttributes: { lastUserMessage: <whole prompt> }` cannot exfiltrate
|
|
105
|
+
// content. Numbers pass through unchanged. Structural fields like
|
|
106
|
+
// `toolNames`, `contentBlockTypes`, and `description` are NOT clipped —
|
|
107
|
+
// they are bounded enum/identifier metadata, not free-form user input.
|
|
108
|
+
//
|
|
109
|
+
// Even in normal mode, a string custom attribute that
|
|
110
|
+
// exceeds NR's per-attribute byte cap (4096) gets the entire event rejected
|
|
111
|
+
// or silently truncated by the Events API. Apply NR_VALUE_MAX as a floor on
|
|
112
|
+
// every string custom attribute so callers cannot accidentally drop their
|
|
113
|
+
// own events by passing a long field. The high-security 256-char clip runs
|
|
114
|
+
// on top of that.
|
|
115
|
+
const CUSTOM_ATTR_MAX_HS_BYTES = 256;
|
|
116
|
+
function clipCustomAttribute(value, options) {
|
|
117
|
+
// booleans pass through alongside strings and numbers.
|
|
118
|
+
if (typeof value !== 'string')
|
|
119
|
+
return value;
|
|
120
|
+
const maxBytes = options?.highSecurity === true ? CUSTOM_ATTR_MAX_HS_BYTES : NR_VALUE_MAX_BYTES;
|
|
121
|
+
if (Buffer.byteLength(value, 'utf8') <= maxBytes)
|
|
122
|
+
return value;
|
|
123
|
+
return truncateToBytes(value, maxBytes);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Maps the library's internal `AiProvider` literal to the canonical
|
|
127
|
+
* `gen_ai.provider.name` value defined by the OpenTelemetry GenAI semantic
|
|
128
|
+
* conventions. The wire field is still emitted as
|
|
129
|
+
* `gen_ai.system` for backward-compat with existing NR dashboards — that
|
|
130
|
+
* was the previous OTel attribute name (the spec renamed `gen_ai.system`
|
|
131
|
+
* to `gen_ai.provider.name` but the value enum is the same registry).
|
|
132
|
+
*
|
|
133
|
+
* The OTel spec mixes dot-case (`aws.bedrock`, `gcp.gemini`,
|
|
134
|
+
* `azure.ai.openai`, `ibm.watsonx.ai`) and underscore-case (`mistral_ai`,
|
|
135
|
+
* `x_ai`, `moonshot_ai`, `deepseek`, `groq`). The visual inconsistency
|
|
136
|
+
* looks typo-prone but is faithful to the registry — *not* something to
|
|
137
|
+
* "normalize" by hand. When adding a new provider, look up its value at
|
|
138
|
+
* https://github.com/open-telemetry/semantic-conventions-genai (model/
|
|
139
|
+
* gen-ai/registry.yaml, `gen_ai.provider.name` members).
|
|
140
|
+
*
|
|
141
|
+
* `google` maps to `gcp.gemini` (the Gemini API at
|
|
142
|
+
* `generativelanguage.googleapis.com`) rather than the more generic
|
|
143
|
+
* `gcp.gen_ai` because the codebase's token-extraction path is
|
|
144
|
+
* Gemini-shape. Consumers calling Google's Vertex AI endpoint would
|
|
145
|
+
* see this stamp as well, but Vertex-specific telemetry would be
|
|
146
|
+
* better captured by widening `AiProvider` (out of scope for this
|
|
147
|
+
* spelling fix).
|
|
148
|
+
*/
|
|
149
|
+
// Typed as Record<AiProvider, string> so a new AiProvider value causes a
|
|
150
|
+
// compile error until a gen_ai.system mapping is added here (§SER3).
|
|
151
|
+
const PROVIDER_TO_GENAI_SYSTEM = {
|
|
152
|
+
anthropic: 'anthropic',
|
|
153
|
+
google: 'gcp.gemini',
|
|
154
|
+
openai: 'openai',
|
|
155
|
+
bedrock: 'aws.bedrock',
|
|
156
|
+
mistral: 'mistral_ai',
|
|
157
|
+
cohere: 'cohere',
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Maps the library's `AiRequestMethod` literal onto the canonical
|
|
161
|
+
* `gen_ai.operation.name` value. Predefined OTel
|
|
162
|
+
* values today are `chat`, `generate_content`, `embeddings`, plus
|
|
163
|
+
* `text_completion`. Method names that don't match any entry fall
|
|
164
|
+
* through and the `gen_ai.operation.name` attribute is omitted from
|
|
165
|
+
* the wire payload — this is the OTel-recommended behavior for
|
|
166
|
+
* unrecognized operations.
|
|
167
|
+
*/
|
|
168
|
+
// Partial<Record<...>> so unrecognized methods fall through cleanly (§EV7).
|
|
169
|
+
// Unlike PROVIDER_TO_GENAI_SYSTEM (which uses non-Partial Record to enforce exhaustiveness),
|
|
170
|
+
// coverage here is intentionally partial — adding a new AiRequestMethod without an
|
|
171
|
+
// entry produces no compile error; the attribute is simply omitted per the OTel fallthrough
|
|
172
|
+
// described in the JSDoc above.
|
|
173
|
+
const METHOD_TO_GENAI_OPERATION = {
|
|
174
|
+
'messages.create': 'chat',
|
|
175
|
+
'messages.stream': 'chat',
|
|
176
|
+
'models.generateContent': 'generate_content',
|
|
177
|
+
'models.generateContentStream': 'generate_content',
|
|
178
|
+
'models.embedContent': 'embeddings',
|
|
179
|
+
'chat.completions.create': 'chat',
|
|
180
|
+
// §6.17 — OpenAI Node SDK: `client.embeddings.create({...})`.
|
|
181
|
+
'embeddings.create': 'embeddings',
|
|
182
|
+
converse: 'chat',
|
|
183
|
+
'converse-stream': 'chat',
|
|
184
|
+
'chat.complete': 'chat',
|
|
185
|
+
'chat.stream': 'chat',
|
|
186
|
+
chat: 'chat',
|
|
187
|
+
chatStream: 'chat',
|
|
188
|
+
// §6.17 — Cohere Node SDK: `client.embed(...)`.
|
|
189
|
+
embed: 'embeddings',
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* Event schema version. Bump whenever the wire-format
|
|
193
|
+
* shape of any serializer changes in a way that downstream NR dashboards
|
|
194
|
+
* built on the previous shape would silently mis-render. The current value
|
|
195
|
+
* is stamped on every emitted event (`schemaVersion: 1`) so dashboards can
|
|
196
|
+
* filter on `WHERE schemaVersion = 1` and catch a future migration before
|
|
197
|
+
* the data renders incorrectly.
|
|
198
|
+
*
|
|
199
|
+
* Bumping policy:
|
|
200
|
+
* - Add a field: NO bump required (new field is null/missing on old events).
|
|
201
|
+
* - Remove or rename a field: bump.
|
|
202
|
+
* - Change a field's type or unit: bump.
|
|
203
|
+
* - Change a field's semantic meaning: bump.
|
|
204
|
+
*
|
|
205
|
+
* The §4.9 metric-API summary migration is an analogous (separate) wire
|
|
206
|
+
* change and is covered by NR's metric `type` field, not this schema version.
|
|
207
|
+
*/
|
|
208
|
+
export const EVENT_SCHEMA_VERSION = 1;
|
|
209
|
+
export function aiRequestToNrEvent(event, options) {
|
|
210
|
+
const data = {
|
|
211
|
+
eventType: 'AiRequest',
|
|
212
|
+
schemaVersion: EVENT_SCHEMA_VERSION,
|
|
213
|
+
id: event.id,
|
|
214
|
+
timestamp: event.timestamp,
|
|
215
|
+
provider: event.provider,
|
|
216
|
+
model: event.model,
|
|
217
|
+
requestMethod: event.requestMethod,
|
|
218
|
+
messageCount: event.messageCount,
|
|
219
|
+
toolCount: event.toolCount,
|
|
220
|
+
thinkingEnabled: event.thinkingEnabled,
|
|
221
|
+
streamingEnabled: event.streamingEnabled,
|
|
222
|
+
'nr.appName': event['nr.appName'],
|
|
223
|
+
};
|
|
224
|
+
if (event.maxTokens !== null)
|
|
225
|
+
data.maxTokens = event.maxTokens;
|
|
226
|
+
if (event.temperature !== null)
|
|
227
|
+
data.temperature = event.temperature;
|
|
228
|
+
if (event.topP !== null)
|
|
229
|
+
data.topP = event.topP;
|
|
230
|
+
if (event.systemPromptLength !== null)
|
|
231
|
+
data.systemPromptLength = event.systemPromptLength;
|
|
232
|
+
if (event.toolNames.length > 0)
|
|
233
|
+
data.toolNames = truncate(JSON.stringify(event.toolNames));
|
|
234
|
+
if (event.thinkingBudgetTokens !== null)
|
|
235
|
+
data.thinkingBudgetTokens = event.thinkingBudgetTokens;
|
|
236
|
+
if (event['nr.entityGuid'] !== null)
|
|
237
|
+
data['nr.entityGuid'] = event['nr.entityGuid'];
|
|
238
|
+
// GenAI semantic convention attributes (OTel spec, experimental)
|
|
239
|
+
const genAiSystem = PROVIDER_TO_GENAI_SYSTEM[event.provider] ?? event.provider;
|
|
240
|
+
data['gen_ai.system'] = genAiSystem;
|
|
241
|
+
data['gen_ai.request.model'] = event.model;
|
|
242
|
+
const genAiOperation = METHOD_TO_GENAI_OPERATION[event.requestMethod];
|
|
243
|
+
if (genAiOperation)
|
|
244
|
+
data['gen_ai.operation.name'] = genAiOperation;
|
|
245
|
+
if (event.maxTokens !== null)
|
|
246
|
+
data['gen_ai.request.max_tokens'] = event.maxTokens;
|
|
247
|
+
if (event.temperature !== null)
|
|
248
|
+
data['gen_ai.request.temperature'] = event.temperature;
|
|
249
|
+
if (event.topP !== null)
|
|
250
|
+
data['gen_ai.request.top_p'] = event.topP;
|
|
251
|
+
data['gen_ai.request.stream'] = event.streamingEnabled;
|
|
252
|
+
applyCustomAttributes(data, event.customAttributes, options, String(data.eventType));
|
|
253
|
+
return data;
|
|
254
|
+
}
|
|
255
|
+
export function aiResponseToNrEvent(event, options) {
|
|
256
|
+
const data = {
|
|
257
|
+
eventType: 'AiResponse',
|
|
258
|
+
schemaVersion: EVENT_SCHEMA_VERSION,
|
|
259
|
+
id: event.id,
|
|
260
|
+
timestamp: event.timestamp,
|
|
261
|
+
provider: event.provider,
|
|
262
|
+
model: event.model,
|
|
263
|
+
durationMs: event.durationMs,
|
|
264
|
+
inputTokens: event.inputTokens,
|
|
265
|
+
outputTokens: event.outputTokens,
|
|
266
|
+
thinkingTokens: event.thinkingTokens,
|
|
267
|
+
cacheReadTokens: event.cacheReadTokens,
|
|
268
|
+
cacheCreationTokens: event.cacheCreationTokens,
|
|
269
|
+
totalTokens: event.totalTokens,
|
|
270
|
+
'nr.appName': event['nr.appName'],
|
|
271
|
+
};
|
|
272
|
+
// emit `nr.entityGuid` so AiResponse events route to the
|
|
273
|
+
// owning NR entity surface, matching `aiRequestToNrEvent`. Without this the
|
|
274
|
+
// factory's entityGuid input was silently dropped at serialization time
|
|
275
|
+
// even though the AiResponse interface declared the field.
|
|
276
|
+
if (event['nr.entityGuid'] !== null)
|
|
277
|
+
data['nr.entityGuid'] = event['nr.entityGuid'];
|
|
278
|
+
if (event.timeToFirstTokenMs !== null)
|
|
279
|
+
data.timeToFirstTokenMs = event.timeToFirstTokenMs;
|
|
280
|
+
if (event.tokensPerSecond !== null)
|
|
281
|
+
data.tokensPerSecond = event.tokensPerSecond;
|
|
282
|
+
if (event.stopReason !== null)
|
|
283
|
+
data.stopReason = event.stopReason;
|
|
284
|
+
if (event.contentBlockTypes.length > 0) {
|
|
285
|
+
data.contentBlockTypes = truncate(JSON.stringify(event.contentBlockTypes));
|
|
286
|
+
}
|
|
287
|
+
if (event.costInputUsd !== null)
|
|
288
|
+
data['cost.inputUsd'] = event.costInputUsd;
|
|
289
|
+
if (event.costOutputUsd !== null)
|
|
290
|
+
data['cost.outputUsd'] = event.costOutputUsd;
|
|
291
|
+
if (event.costThinkingUsd !== null)
|
|
292
|
+
data['cost.thinkingUsd'] = event.costThinkingUsd;
|
|
293
|
+
if (event.costCacheReadUsd !== null)
|
|
294
|
+
data['cost.cacheReadUsd'] = event.costCacheReadUsd;
|
|
295
|
+
if (event.costCacheCreationUsd !== null) {
|
|
296
|
+
data['cost.cacheCreationUsd'] = event.costCacheCreationUsd;
|
|
297
|
+
}
|
|
298
|
+
if (event.costTotalUsd !== null)
|
|
299
|
+
data['cost.totalUsd'] = event.costTotalUsd;
|
|
300
|
+
if (event.error !== null) {
|
|
301
|
+
data['error.type'] = truncate(event.error.type);
|
|
302
|
+
// §6.4 — In high-security mode, drop error.message (may contain verbatim
|
|
303
|
+
// prompt fragments). error.type + error.statusCode still surface enough
|
|
304
|
+
// signal for triage without leaking user content via the error path.
|
|
305
|
+
if (options?.highSecurity !== true) {
|
|
306
|
+
data['error.message'] = truncate(event.error.message);
|
|
307
|
+
}
|
|
308
|
+
if (event.error.statusCode !== null)
|
|
309
|
+
data['error.statusCode'] = event.error.statusCode;
|
|
310
|
+
}
|
|
311
|
+
// GenAI semantic convention attributes (OTel spec, experimental)
|
|
312
|
+
const genAiSystem = PROVIDER_TO_GENAI_SYSTEM[event.provider] ?? event.provider;
|
|
313
|
+
data['gen_ai.system'] = genAiSystem;
|
|
314
|
+
data['gen_ai.response.model'] = event.model;
|
|
315
|
+
// Per OTel GenAI SemConv, gen_ai.usage.input_tokens MUST include ALL input
|
|
316
|
+
// tokens (cached + fresh). Provider semantics differ:
|
|
317
|
+
//
|
|
318
|
+
// Anthropic: inputTokens = fresh only; cache tokens are disjoint → sum all.
|
|
319
|
+
// Gemini / OpenAI: inputTokens already includes cached content (the cache
|
|
320
|
+
// tokens are a SUBSET of inputTokens, not separate) → using inputTokens
|
|
321
|
+
// alone is correct; adding cacheReadTokens would double-count (§S1).
|
|
322
|
+
// Bedrock, Mistral, Cohere: no cache token overlap → same as Anthropic.
|
|
323
|
+
const otelInputTokens = event.provider === 'google' || event.provider === 'openai'
|
|
324
|
+
? event.inputTokens
|
|
325
|
+
: event.inputTokens + event.cacheReadTokens + event.cacheCreationTokens;
|
|
326
|
+
data['gen_ai.usage.input_tokens'] = otelInputTokens;
|
|
327
|
+
// §11.2: gen_ai.usage.output_tokens semantics differ by provider.
|
|
328
|
+
//
|
|
329
|
+
// Anthropic / Google: thinkingTokens is DISJOINT from outputTokens
|
|
330
|
+
// (extended-thinking and thought-summary tokens are separate) → add both.
|
|
331
|
+
// OpenAI: reasoning_tokens (→ thinkingTokens) is a SUBSET of
|
|
332
|
+
// completion_tokens (→ outputTokens) — adding it again double-counts.
|
|
333
|
+
// outputTokens alone equals completion_tokens which is what OTel
|
|
334
|
+
// gen_ai.usage.output_tokens should reflect for OpenAI.
|
|
335
|
+
// Bedrock / Mistral / Cohere: thinkingTokens is always 0, so both
|
|
336
|
+
// formulas produce the same result; disjoint form is correct.
|
|
337
|
+
data['gen_ai.usage.output_tokens'] =
|
|
338
|
+
event.provider === 'openai' ? event.outputTokens : event.outputTokens + event.thinkingTokens;
|
|
339
|
+
if (event.thinkingTokens > 0)
|
|
340
|
+
data['gen_ai.usage.reasoning.output_tokens'] = event.thinkingTokens;
|
|
341
|
+
if (event.cacheReadTokens > 0)
|
|
342
|
+
data['gen_ai.usage.cache_read.input_tokens'] = event.cacheReadTokens;
|
|
343
|
+
if (event.cacheCreationTokens > 0)
|
|
344
|
+
data['gen_ai.usage.cache_creation.input_tokens'] = event.cacheCreationTokens;
|
|
345
|
+
if (event.stopReason !== null)
|
|
346
|
+
data['gen_ai.response.finish_reason'] = event.stopReason;
|
|
347
|
+
applyCustomAttributes(data, event.customAttributes, options, String(data.eventType));
|
|
348
|
+
return data;
|
|
349
|
+
}
|
|
350
|
+
export function aiMessageToNrEvent(event, options) {
|
|
351
|
+
const data = {
|
|
352
|
+
eventType: 'AiMessage',
|
|
353
|
+
schemaVersion: EVENT_SCHEMA_VERSION,
|
|
354
|
+
id: event.id,
|
|
355
|
+
timestamp: event.timestamp,
|
|
356
|
+
role: event.role,
|
|
357
|
+
content: truncate(event.content),
|
|
358
|
+
contentLength: event.contentLength, // original (pre-truncation) length
|
|
359
|
+
sequence: event.sequence,
|
|
360
|
+
'nr.appName': event['nr.appName'],
|
|
361
|
+
};
|
|
362
|
+
// emit `nr.entityGuid` so AiMessage events route to the
|
|
363
|
+
// owning NR entity surface, matching `aiRequestToNrEvent` / `aiResponseToNrEvent`.
|
|
364
|
+
if (event['nr.entityGuid'] !== null)
|
|
365
|
+
data['nr.entityGuid'] = event['nr.entityGuid'];
|
|
366
|
+
applyCustomAttributes(data, event.customAttributes, options, String(data.eventType));
|
|
367
|
+
return data;
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* dotted-key naming convention for the four newer
|
|
371
|
+
* agent-shaped event types (`AiAgentTaskSummary`, `AiAntiPattern`,
|
|
372
|
+
* `AiAgentMessage`, `AiContextReset`). These serializers emit attributes
|
|
373
|
+
* with a `<namespace>.<field>` shape (e.g. `ai.agent.task_duration_ms`,
|
|
374
|
+
* `ai.antipattern.severity`) alongside top-level non-namespaced fields
|
|
375
|
+
* (e.g. `id`, `timestamp`, `taskName`).
|
|
376
|
+
*
|
|
377
|
+
* The dotted form is the OTel-style and aligns with `gen_ai.*` already in
|
|
378
|
+
* use on AiRequest/AiResponse — operators querying these in NRQL must
|
|
379
|
+
* backtick-quote: `SELECT \`ai.agent.task_duration_ms\` FROM AiAgentTaskSummary`.
|
|
380
|
+
*
|
|
381
|
+
* The mixed top-level + namespaced shape (`taskName` flat, `ai.agent.*`
|
|
382
|
+
* dotted) is intentional: the top-level fields carry record identity that
|
|
383
|
+
* the eventType bucket already groups by (you query `FROM AiAgentTaskSummary`
|
|
384
|
+
* so `eventType` provides the namespace), while the `ai.<area>.*` fields
|
|
385
|
+
* cluster metric-shaped attributes by source area so dashboards can
|
|
386
|
+
* `SELECT keyset() WHERE attribute LIKE 'ai.agent.%'`.
|
|
387
|
+
*
|
|
388
|
+
* This convention is documented here rather than enforced — adding new
|
|
389
|
+
* fields to these event types should follow it for consistency, but the
|
|
390
|
+
* library does not validate the shape at runtime.
|
|
391
|
+
*/
|
|
392
|
+
// NOTE (§EV6): The four agent-shaped event types below do not emit gen_ai.*
|
|
393
|
+
// OTel SemConv attributes (e.g. gen_ai.system) because they lack a `provider`
|
|
394
|
+
// field. Adding provider to these types is a post-0.1.0 task; until then,
|
|
395
|
+
// NRQL queries on gen_ai.* will not return these event types.
|
|
396
|
+
export function aiAgentTaskSummaryToNrEvent(event, options) {
|
|
397
|
+
const data = {
|
|
398
|
+
eventType: 'AiAgentTaskSummary',
|
|
399
|
+
schemaVersion: EVENT_SCHEMA_VERSION,
|
|
400
|
+
id: event.id,
|
|
401
|
+
timestamp: event.timestamp,
|
|
402
|
+
traceId: event.traceId,
|
|
403
|
+
spanId: event.spanId,
|
|
404
|
+
taskName: truncate(event.taskName),
|
|
405
|
+
'ai.agent.task_duration_ms': event.durationMs,
|
|
406
|
+
'ai.agent.total_steps': event.stepCount,
|
|
407
|
+
'ai.agent.llm_calls_per_task': event.totalLlmCalls,
|
|
408
|
+
'ai.agent.tool_calls_per_task': event.totalToolCalls,
|
|
409
|
+
'ai.agent.tokens_per_task': event.totalTokens,
|
|
410
|
+
'ai.agent.task_success': event.success,
|
|
411
|
+
'nr.appName': event['nr.appName'],
|
|
412
|
+
};
|
|
413
|
+
if (event['nr.entityGuid'] !== null)
|
|
414
|
+
data['nr.entityGuid'] = event['nr.entityGuid'];
|
|
415
|
+
if (event.provider)
|
|
416
|
+
data['gen_ai.system'] = PROVIDER_TO_GENAI_SYSTEM[event.provider];
|
|
417
|
+
if (event.totalCostUsd !== null)
|
|
418
|
+
data['ai.agent.cost_per_task_usd'] = event.totalCostUsd;
|
|
419
|
+
if (event.delegationCount !== undefined)
|
|
420
|
+
data['ai.agent.delegation_count'] = event.delegationCount;
|
|
421
|
+
if (event.spawnCount !== undefined)
|
|
422
|
+
data['ai.agent.spawn_count'] = event.spawnCount;
|
|
423
|
+
if (event.delegationDepth !== undefined)
|
|
424
|
+
data['ai.agent.delegation_depth'] = event.delegationDepth;
|
|
425
|
+
if (event.interAgentMessages !== undefined)
|
|
426
|
+
data['ai.agent.inter_agent_messages'] = event.interAgentMessages;
|
|
427
|
+
if (event.delegationOverheadMs !== undefined)
|
|
428
|
+
data['ai.agent.delegation_overhead_ms'] = event.delegationOverheadMs;
|
|
429
|
+
applyCustomAttributes(data, event.customAttributes, options, String(data.eventType));
|
|
430
|
+
return data;
|
|
431
|
+
}
|
|
432
|
+
export function aiAntiPatternToNrEvent(event, options) {
|
|
433
|
+
const data = {
|
|
434
|
+
eventType: 'AiAntiPattern',
|
|
435
|
+
schemaVersion: EVENT_SCHEMA_VERSION,
|
|
436
|
+
id: event.id,
|
|
437
|
+
timestamp: event.timestamp,
|
|
438
|
+
traceId: event.traceId,
|
|
439
|
+
patternType: event.patternType,
|
|
440
|
+
severity: event.severity,
|
|
441
|
+
description: truncate(event.description),
|
|
442
|
+
'nr.appName': event['nr.appName'],
|
|
443
|
+
};
|
|
444
|
+
if (event['nr.entityGuid'] !== null)
|
|
445
|
+
data['nr.entityGuid'] = event['nr.entityGuid'];
|
|
446
|
+
if (event.provider)
|
|
447
|
+
data['gen_ai.system'] = PROVIDER_TO_GENAI_SYSTEM[event.provider];
|
|
448
|
+
if (event.toolName !== undefined)
|
|
449
|
+
data.toolName = event.toolName;
|
|
450
|
+
if (event.repeatCount !== undefined)
|
|
451
|
+
data.repeatCount = event.repeatCount;
|
|
452
|
+
if (event.depthIndex !== undefined)
|
|
453
|
+
data.depthIndex = event.depthIndex;
|
|
454
|
+
if (event.taskComplexity !== undefined)
|
|
455
|
+
data.taskComplexity = event.taskComplexity;
|
|
456
|
+
if (event.contextPressure != null)
|
|
457
|
+
data.contextPressure = event.contextPressure;
|
|
458
|
+
if (event.tokenShare != null)
|
|
459
|
+
data.tokenShare = event.tokenShare;
|
|
460
|
+
if (event.attemptCount !== undefined)
|
|
461
|
+
data.attemptCount = event.attemptCount;
|
|
462
|
+
applyCustomAttributes(data, event.customAttributes, options, String(data.eventType));
|
|
463
|
+
return data;
|
|
464
|
+
}
|
|
465
|
+
export function aiAgentMessageToNrEvent(event, options) {
|
|
466
|
+
const data = {
|
|
467
|
+
eventType: 'AiAgentMessage',
|
|
468
|
+
schemaVersion: EVENT_SCHEMA_VERSION,
|
|
469
|
+
id: event.id,
|
|
470
|
+
timestamp: event.timestamp,
|
|
471
|
+
traceId: event.traceId,
|
|
472
|
+
fromAgent: truncate(event.fromAgent),
|
|
473
|
+
toAgent: truncate(event.toAgent),
|
|
474
|
+
messageType: truncate(event.messageType),
|
|
475
|
+
'nr.appName': event['nr.appName'],
|
|
476
|
+
};
|
|
477
|
+
if (event['nr.entityGuid'] !== null)
|
|
478
|
+
data['nr.entityGuid'] = event['nr.entityGuid'];
|
|
479
|
+
if (event.provider)
|
|
480
|
+
data['gen_ai.system'] = PROVIDER_TO_GENAI_SYSTEM[event.provider];
|
|
481
|
+
if (event.tokenCount !== undefined)
|
|
482
|
+
data.tokenCount = event.tokenCount;
|
|
483
|
+
applyCustomAttributes(data, event.customAttributes, options, String(data.eventType));
|
|
484
|
+
return data;
|
|
485
|
+
}
|
|
486
|
+
export function aiContextResetToNrEvent(event, options) {
|
|
487
|
+
const data = {
|
|
488
|
+
eventType: 'AiContextReset',
|
|
489
|
+
schemaVersion: EVENT_SCHEMA_VERSION,
|
|
490
|
+
id: event.id,
|
|
491
|
+
timestamp: event.timestamp,
|
|
492
|
+
traceId: event.traceId,
|
|
493
|
+
conversationId: truncate(event.conversationId),
|
|
494
|
+
tokensBefore: event.tokensBefore,
|
|
495
|
+
tokensAfter: event.tokensAfter,
|
|
496
|
+
tokensRemoved: event.tokensRemoved,
|
|
497
|
+
compressionRatio: event.compressionRatio,
|
|
498
|
+
reason: event.reason,
|
|
499
|
+
'nr.appName': event['nr.appName'],
|
|
500
|
+
};
|
|
501
|
+
if (event['nr.entityGuid'] !== null)
|
|
502
|
+
data['nr.entityGuid'] = event['nr.entityGuid'];
|
|
503
|
+
if (event.provider)
|
|
504
|
+
data['gen_ai.system'] = PROVIDER_TO_GENAI_SYSTEM[event.provider];
|
|
505
|
+
if (event.turnsRemoved !== undefined)
|
|
506
|
+
data.turnsRemoved = event.turnsRemoved;
|
|
507
|
+
applyCustomAttributes(data, event.customAttributes, options, String(data.eventType));
|
|
508
|
+
return data;
|
|
509
|
+
}
|
|
510
|
+
//# sourceMappingURL=serialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../src/shared/events/serialize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
export type AiProvider = 'anthropic' | 'google' | 'openai' | 'bedrock' | 'mistral' | 'cohere';
|
|
2
|
+
export type AiRequestMethod = 'messages.create' | 'messages.stream' | 'models.generateContent' | 'models.generateContentStream' | 'models.embedContent' | 'chat.completions.create' | 'embeddings.create' | 'converse' | 'converse-stream' | 'chat.complete' | 'chat.stream' | 'chat' | 'chatStream' | 'embed';
|
|
3
|
+
export interface AiRequest {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly timestamp: number;
|
|
6
|
+
readonly provider: AiProvider;
|
|
7
|
+
readonly model: string;
|
|
8
|
+
readonly requestMethod: AiRequestMethod;
|
|
9
|
+
readonly maxTokens: number | null;
|
|
10
|
+
readonly temperature: number | null;
|
|
11
|
+
readonly topP: number | null;
|
|
12
|
+
readonly systemPromptLength: number | null;
|
|
13
|
+
readonly messageCount: number;
|
|
14
|
+
readonly toolCount: number;
|
|
15
|
+
readonly toolNames: string[];
|
|
16
|
+
readonly thinkingEnabled: boolean;
|
|
17
|
+
readonly thinkingBudgetTokens: number | null;
|
|
18
|
+
readonly streamingEnabled: boolean;
|
|
19
|
+
readonly 'nr.appName': string;
|
|
20
|
+
readonly 'nr.entityGuid': string | null;
|
|
21
|
+
readonly customAttributes: Record<string, string | number | boolean>;
|
|
22
|
+
}
|
|
23
|
+
export interface AiResponse {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly timestamp: number;
|
|
26
|
+
readonly provider: AiProvider;
|
|
27
|
+
readonly model: string;
|
|
28
|
+
readonly durationMs: number;
|
|
29
|
+
readonly timeToFirstTokenMs: number | null;
|
|
30
|
+
readonly tokensPerSecond: number | null;
|
|
31
|
+
readonly inputTokens: number;
|
|
32
|
+
readonly outputTokens: number;
|
|
33
|
+
readonly thinkingTokens: number;
|
|
34
|
+
readonly cacheReadTokens: number;
|
|
35
|
+
readonly cacheCreationTokens: number;
|
|
36
|
+
readonly totalTokens: number;
|
|
37
|
+
readonly costInputUsd: number | null;
|
|
38
|
+
readonly costOutputUsd: number | null;
|
|
39
|
+
readonly costThinkingUsd: number | null;
|
|
40
|
+
readonly costCacheReadUsd: number | null;
|
|
41
|
+
readonly costCacheCreationUsd: number | null;
|
|
42
|
+
readonly costTotalUsd: number | null;
|
|
43
|
+
readonly stopReason: string | null;
|
|
44
|
+
readonly contentBlockTypes: string[];
|
|
45
|
+
readonly error: {
|
|
46
|
+
type: string;
|
|
47
|
+
message: string;
|
|
48
|
+
statusCode: number | null;
|
|
49
|
+
} | null;
|
|
50
|
+
readonly 'nr.appName': string;
|
|
51
|
+
readonly 'nr.entityGuid': string | null;
|
|
52
|
+
readonly customAttributes: Record<string, string | number | boolean>;
|
|
53
|
+
}
|
|
54
|
+
export type AiMessageRole = 'system' | 'user' | 'assistant';
|
|
55
|
+
export interface AiMessage {
|
|
56
|
+
readonly id: string;
|
|
57
|
+
readonly timestamp: number;
|
|
58
|
+
readonly role: AiMessageRole;
|
|
59
|
+
readonly content: string;
|
|
60
|
+
readonly contentLength: number;
|
|
61
|
+
readonly sequence: number;
|
|
62
|
+
readonly 'nr.appName': string;
|
|
63
|
+
readonly 'nr.entityGuid': string | null;
|
|
64
|
+
readonly customAttributes: Record<string, string | number | boolean>;
|
|
65
|
+
}
|
|
66
|
+
export type NrEventData = Record<string, string | number | boolean>;
|
|
67
|
+
export interface AiAgentTaskSummary {
|
|
68
|
+
readonly id: string;
|
|
69
|
+
readonly timestamp: number;
|
|
70
|
+
readonly traceId: string;
|
|
71
|
+
readonly spanId: string;
|
|
72
|
+
readonly taskName: string;
|
|
73
|
+
readonly durationMs: number;
|
|
74
|
+
readonly totalLlmCalls: number;
|
|
75
|
+
readonly totalToolCalls: number;
|
|
76
|
+
readonly totalTokens: number;
|
|
77
|
+
readonly totalCostUsd: number | null;
|
|
78
|
+
readonly stepCount: number;
|
|
79
|
+
readonly success: boolean;
|
|
80
|
+
readonly provider?: AiProvider;
|
|
81
|
+
readonly delegationCount?: number;
|
|
82
|
+
readonly spawnCount?: number;
|
|
83
|
+
readonly delegationDepth?: number;
|
|
84
|
+
readonly interAgentMessages?: number;
|
|
85
|
+
readonly delegationOverheadMs?: number;
|
|
86
|
+
readonly 'nr.appName': string;
|
|
87
|
+
readonly 'nr.entityGuid': string | null;
|
|
88
|
+
readonly customAttributes: Record<string, string | number | boolean>;
|
|
89
|
+
}
|
|
90
|
+
export type AntiPatternType = 'spinning_wheels' | 'overthinking' | 'underthinking' | 'context_stuffing' | 'token_explosion' | 'bail_out';
|
|
91
|
+
export interface AiAntiPattern {
|
|
92
|
+
readonly id: string;
|
|
93
|
+
readonly timestamp: number;
|
|
94
|
+
readonly traceId: string;
|
|
95
|
+
readonly patternType: AntiPatternType;
|
|
96
|
+
readonly severity: 'low' | 'medium' | 'high';
|
|
97
|
+
readonly description: string;
|
|
98
|
+
readonly provider?: AiProvider;
|
|
99
|
+
readonly toolName?: string;
|
|
100
|
+
readonly repeatCount?: number;
|
|
101
|
+
readonly depthIndex?: number;
|
|
102
|
+
readonly taskComplexity?: 'simple' | 'moderate' | 'complex';
|
|
103
|
+
readonly contextPressure?: number | null;
|
|
104
|
+
readonly tokenShare?: number | null;
|
|
105
|
+
readonly attemptCount?: number;
|
|
106
|
+
readonly 'nr.appName': string;
|
|
107
|
+
readonly 'nr.entityGuid': string | null;
|
|
108
|
+
readonly customAttributes: Record<string, string | number | boolean>;
|
|
109
|
+
}
|
|
110
|
+
export interface AiAgentMessage {
|
|
111
|
+
readonly id: string;
|
|
112
|
+
readonly timestamp: number;
|
|
113
|
+
readonly traceId: string;
|
|
114
|
+
readonly fromAgent: string;
|
|
115
|
+
readonly toAgent: string;
|
|
116
|
+
readonly messageType: string;
|
|
117
|
+
readonly provider?: AiProvider;
|
|
118
|
+
readonly tokenCount?: number;
|
|
119
|
+
readonly 'nr.appName': string;
|
|
120
|
+
readonly 'nr.entityGuid': string | null;
|
|
121
|
+
readonly customAttributes: Record<string, string | number | boolean>;
|
|
122
|
+
}
|
|
123
|
+
export interface AiContextReset {
|
|
124
|
+
readonly id: string;
|
|
125
|
+
readonly timestamp: number;
|
|
126
|
+
readonly traceId: string;
|
|
127
|
+
readonly conversationId: string;
|
|
128
|
+
readonly tokensBefore: number;
|
|
129
|
+
readonly tokensAfter: number;
|
|
130
|
+
readonly tokensRemoved: number;
|
|
131
|
+
readonly compressionRatio: number;
|
|
132
|
+
readonly reason: 'summarization' | 'truncation' | 'sliding_window' | 'manual';
|
|
133
|
+
readonly provider?: AiProvider;
|
|
134
|
+
readonly turnsRemoved?: number;
|
|
135
|
+
readonly 'nr.appName': string;
|
|
136
|
+
readonly 'nr.entityGuid': string | null;
|
|
137
|
+
readonly customAttributes: Record<string, string | number | boolean>;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=types.d.ts.map
|