@newrelic/preflight 0.0.1-pre.1 → 1.0.1
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 +868 -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 +123 -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 +129 -1
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical error classifications produced by {@link classifyError} and
|
|
3
|
+
* {@link classifyErrorDetailed}.
|
|
4
|
+
*
|
|
5
|
+
* Implemented as a `const` object plus derived string-literal union
|
|
6
|
+
* rather than a TypeScript `enum`, so that:
|
|
7
|
+
* - runtime usage (`AiErrorClassification.RATE_LIMIT`) keeps working
|
|
8
|
+
* identically for existing call sites;
|
|
9
|
+
* - the type is a string-literal union, matching every other
|
|
10
|
+
* enum-like type in this package (`AiProvider`, `AiRequestMethod`,
|
|
11
|
+
* `LogLevel`, `TransportMode`, etc.) — one consistent style;
|
|
12
|
+
* - bundlers can tree-shake unused members (TS enums emit a runtime
|
|
13
|
+
* object even when none of its members are referenced);
|
|
14
|
+
* - the wire-format strings (`'RATE_LIMIT'`, `'OVERLOADED'`, …) are
|
|
15
|
+
* usable directly as values without going through an enum lookup,
|
|
16
|
+
* which simplifies serialization paths.
|
|
17
|
+
*/
|
|
18
|
+
export const AiErrorClassification = {
|
|
19
|
+
RATE_LIMIT: 'RATE_LIMIT',
|
|
20
|
+
OVERLOADED: 'OVERLOADED',
|
|
21
|
+
CONTENT_POLICY: 'CONTENT_POLICY',
|
|
22
|
+
CONTEXT_LENGTH_EXCEEDED: 'CONTEXT_LENGTH_EXCEEDED',
|
|
23
|
+
AUTHENTICATION: 'AUTHENTICATION',
|
|
24
|
+
NOT_FOUND: 'NOT_FOUND',
|
|
25
|
+
TIMEOUT: 'TIMEOUT',
|
|
26
|
+
SERVER_ERROR: 'SERVER_ERROR',
|
|
27
|
+
NETWORK_ERROR: 'NETWORK_ERROR',
|
|
28
|
+
UNKNOWN: 'UNKNOWN',
|
|
29
|
+
};
|
|
30
|
+
const NETWORK_CODES = new Set([
|
|
31
|
+
'ECONNREFUSED',
|
|
32
|
+
'ECONNRESET',
|
|
33
|
+
'ECONNABORTED',
|
|
34
|
+
'ENOTFOUND',
|
|
35
|
+
'EPIPE',
|
|
36
|
+
'EHOSTUNREACH',
|
|
37
|
+
'ENETUNREACH',
|
|
38
|
+
]);
|
|
39
|
+
const TIMEOUT_CODES = new Set([
|
|
40
|
+
'ETIMEDOUT',
|
|
41
|
+
'UND_ERR_CONNECT_TIMEOUT',
|
|
42
|
+
'UND_ERR_HEADERS_TIMEOUT',
|
|
43
|
+
'UND_ERR_BODY_TIMEOUT',
|
|
44
|
+
]);
|
|
45
|
+
/**
|
|
46
|
+
* Classifications that `isRetryable()` reports as retryable. Exported as a
|
|
47
|
+
* `ReadonlySet` so consumers can build their own retry policy on top of the
|
|
48
|
+
* canonical list (e.g. layered backoff per category, custom routing) without
|
|
49
|
+
* having to re-derive it. Mutation is rejected at the type level.
|
|
50
|
+
*/
|
|
51
|
+
export const RETRYABLE = new Set([
|
|
52
|
+
AiErrorClassification.RATE_LIMIT,
|
|
53
|
+
AiErrorClassification.OVERLOADED,
|
|
54
|
+
AiErrorClassification.TIMEOUT,
|
|
55
|
+
AiErrorClassification.SERVER_ERROR,
|
|
56
|
+
AiErrorClassification.NETWORK_ERROR,
|
|
57
|
+
]);
|
|
58
|
+
// Walk the error.cause chain to find a classifiable `code` string.
|
|
59
|
+
// Returns the first code that is in NETWORK_CODES or TIMEOUT_CODES; if none
|
|
60
|
+
// is classified, falls back to the first string code found anywhere in the
|
|
61
|
+
// chain. This prevents a spurious top-level SDK code (e.g. 'UNKNOWN_ERROR')
|
|
62
|
+
// from blocking a classified cause-chain code (e.g. 'ECONNREFUSED') (§ER1).
|
|
63
|
+
// Bounded to 5 hops to guard against pathological chains.
|
|
64
|
+
function extractCode(error) {
|
|
65
|
+
let firstFound;
|
|
66
|
+
let cur = error;
|
|
67
|
+
for (let i = 0; i < 5 && cur != null && typeof cur === 'object'; i++) {
|
|
68
|
+
const code = cur.code;
|
|
69
|
+
if (typeof code === 'string') {
|
|
70
|
+
if (NETWORK_CODES.has(code) || TIMEOUT_CODES.has(code))
|
|
71
|
+
return code;
|
|
72
|
+
if (firstFound === undefined)
|
|
73
|
+
firstFound = code;
|
|
74
|
+
}
|
|
75
|
+
cur = cur.cause;
|
|
76
|
+
}
|
|
77
|
+
return firstFound;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Classify an arbitrary `unknown` error from a provider SDK or `fetch` into
|
|
81
|
+
* one of the canonical {@link AiErrorClassification} categories. The
|
|
82
|
+
* decision routes through HTTP status (when present), Node `code` for
|
|
83
|
+
* network/timeout cases, and provider-specific 400 disambiguation
|
|
84
|
+
* — content policy vs. context length vs. generic.
|
|
85
|
+
*
|
|
86
|
+
* Designed for retry-loop consumption — see {@link isRetryable} and
|
|
87
|
+
* {@link RETRYABLE} for the policy applied downstream. For UI / logging
|
|
88
|
+
* surfaces that need the original message + status alongside the
|
|
89
|
+
* classification, use {@link classifyErrorDetailed} instead.
|
|
90
|
+
*
|
|
91
|
+
* @param error The thrown value (Error, plain object, or anything else).
|
|
92
|
+
* @param provider The provider that produced the error — affects 400
|
|
93
|
+
* disambiguation and Anthropic-specific 529 (OVERLOADED) handling.
|
|
94
|
+
*/
|
|
95
|
+
export function classifyError(error, provider) {
|
|
96
|
+
const err = error;
|
|
97
|
+
// Modern Node fetch (undici) wraps the underlying syscall code in
|
|
98
|
+
// error.cause.code rather than error.code directly. Walk the cause chain
|
|
99
|
+
// (bounded to 5 hops) to find the first code string (§E1).
|
|
100
|
+
const code = extractCode(err);
|
|
101
|
+
// 1. Network errors (no HTTP status, connection-level failure)
|
|
102
|
+
if (code && NETWORK_CODES.has(code)) {
|
|
103
|
+
return AiErrorClassification.NETWORK_ERROR;
|
|
104
|
+
}
|
|
105
|
+
// 2. Timeout errors
|
|
106
|
+
if (code && TIMEOUT_CODES.has(code)) {
|
|
107
|
+
return AiErrorClassification.TIMEOUT;
|
|
108
|
+
}
|
|
109
|
+
const nameOrMessage = `${err.name ?? ''} ${err.message ?? ''}`;
|
|
110
|
+
// Only apply the message-based timeout check when there is no HTTP status —
|
|
111
|
+
// for HTTP responses the switch below handles classified codes; the default
|
|
112
|
+
// case handles unknown statuses and will also check the message (§ER2).
|
|
113
|
+
// Use typeof check (not falsiness) so status:0 doesn't spuriously trigger
|
|
114
|
+
// message-based timeout detection (§ER1).
|
|
115
|
+
if (typeof err.status !== 'number' && /timeout/i.test(nameOrMessage)) {
|
|
116
|
+
return AiErrorClassification.TIMEOUT;
|
|
117
|
+
}
|
|
118
|
+
// 3. HTTP status-based classification
|
|
119
|
+
const status = err.status;
|
|
120
|
+
if (typeof status !== 'number') {
|
|
121
|
+
return AiErrorClassification.UNKNOWN;
|
|
122
|
+
}
|
|
123
|
+
switch (status) {
|
|
124
|
+
case 429:
|
|
125
|
+
return AiErrorClassification.RATE_LIMIT;
|
|
126
|
+
case 529:
|
|
127
|
+
// 529 is documented by Anthropic as "overloaded". Other providers
|
|
128
|
+
// either don't use it or use it ambiguously — gate by provider.
|
|
129
|
+
return provider === 'anthropic'
|
|
130
|
+
? AiErrorClassification.OVERLOADED
|
|
131
|
+
: AiErrorClassification.UNKNOWN;
|
|
132
|
+
case 503:
|
|
133
|
+
// Google, OpenAI, and Bedrock all use 503 to indicate upstream overload.
|
|
134
|
+
// Anthropic uses 529 for overload (handled above); their 503 is a true
|
|
135
|
+
// server error. Mistral and Cohere are undocumented — default to
|
|
136
|
+
// SERVER_ERROR (still retryable, just categorised differently).
|
|
137
|
+
if (provider === 'google' || provider === 'openai' || provider === 'bedrock') {
|
|
138
|
+
return AiErrorClassification.OVERLOADED;
|
|
139
|
+
}
|
|
140
|
+
return AiErrorClassification.SERVER_ERROR;
|
|
141
|
+
case 401:
|
|
142
|
+
case 403:
|
|
143
|
+
return AiErrorClassification.AUTHENTICATION;
|
|
144
|
+
case 402:
|
|
145
|
+
// Payment Required — used by some providers for billing/quota exhaustion.
|
|
146
|
+
// Classified as UNKNOWN (non-retryable) because a payment issue cannot
|
|
147
|
+
// be resolved by retrying the same request (§ER4).
|
|
148
|
+
return AiErrorClassification.UNKNOWN;
|
|
149
|
+
case 404:
|
|
150
|
+
return AiErrorClassification.NOT_FOUND;
|
|
151
|
+
case 408: // Request Timeout (rare from LLM providers but standard HTTP)
|
|
152
|
+
case 504: // Gateway Timeout
|
|
153
|
+
return AiErrorClassification.TIMEOUT;
|
|
154
|
+
case 500:
|
|
155
|
+
case 502:
|
|
156
|
+
case 520: // Cloudflare unknown
|
|
157
|
+
case 521: // Cloudflare web server is down
|
|
158
|
+
case 522: // Cloudflare connection timed out
|
|
159
|
+
case 523: // Cloudflare origin unreachable
|
|
160
|
+
case 524: // Cloudflare a timeout occurred
|
|
161
|
+
return AiErrorClassification.SERVER_ERROR;
|
|
162
|
+
case 400:
|
|
163
|
+
return classify400(err, provider);
|
|
164
|
+
default:
|
|
165
|
+
// For unclassified numeric statuses (e.g. 425 "Too Early"), fall back to
|
|
166
|
+
// message-based timeout detection before returning UNKNOWN (§ER2).
|
|
167
|
+
if (/timeout/i.test(nameOrMessage))
|
|
168
|
+
return AiErrorClassification.TIMEOUT;
|
|
169
|
+
return AiErrorClassification.UNKNOWN;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Provider-typed error codes (body-level `error.code` or `error.type`). Prefer
|
|
173
|
+
// these over message substring matching — SDKs expose stable typed codes that
|
|
174
|
+
// don't drift with version-to-version wording changes.
|
|
175
|
+
const CONTENT_POLICY_TYPED_CODES = new Set([
|
|
176
|
+
// OpenAI
|
|
177
|
+
'content_filter',
|
|
178
|
+
'content_policy_violation',
|
|
179
|
+
// Anthropic (specific names seen across SDK versions)
|
|
180
|
+
'content_moderation_error',
|
|
181
|
+
]);
|
|
182
|
+
const CONTEXT_LENGTH_TYPED_CODES = new Set([
|
|
183
|
+
// OpenAI
|
|
184
|
+
'context_length_exceeded',
|
|
185
|
+
'string_above_max_length',
|
|
186
|
+
// Anthropic
|
|
187
|
+
'request_too_large',
|
|
188
|
+
]);
|
|
189
|
+
// Narrowed message-matching fallbacks. The previous `/token|context/i` was
|
|
190
|
+
// over-broad — "invalid token in JSON body" matched as CONTEXT_LENGTH. These
|
|
191
|
+
// patterns require a context-related qualifier alongside "token"/"context".
|
|
192
|
+
const CONTEXT_LENGTH_MESSAGE_RE = /context.?(window|length|limit|size)|max.?tokens?\b|too.?long|exceeds? .*context/i;
|
|
193
|
+
const CONTENT_POLICY_MESSAGE_RE = /content.?polic|content.?filter|content.?moderation/i;
|
|
194
|
+
function classify400(err, provider) {
|
|
195
|
+
// 1. Typed body-level codes first (most reliable — survive SDK message drift).
|
|
196
|
+
const typedCode = err.error?.code ?? err.error?.type ?? '';
|
|
197
|
+
if (typedCode) {
|
|
198
|
+
if (CONTENT_POLICY_TYPED_CODES.has(typedCode))
|
|
199
|
+
return AiErrorClassification.CONTENT_POLICY;
|
|
200
|
+
if (CONTEXT_LENGTH_TYPED_CODES.has(typedCode)) {
|
|
201
|
+
return AiErrorClassification.CONTEXT_LENGTH_EXCEEDED;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// 2. Anthropic-specific typed-prefix pattern: SDK uses several `content_*`
|
|
205
|
+
// type variants (`content_policy_violation`, `content_validation_error`,
|
|
206
|
+
// etc.). Match by prefix instead of enumerating every variant.
|
|
207
|
+
if (provider === 'anthropic' && err.error?.type && /^content[_-]/i.test(err.error.type)) {
|
|
208
|
+
return AiErrorClassification.CONTENT_POLICY;
|
|
209
|
+
}
|
|
210
|
+
// 3. Message-substring fallback (narrowed to avoid false positives like
|
|
211
|
+
// "invalid token in JSON body"). Used both when no typed code is present
|
|
212
|
+
// (e.g. some Anthropic 400s carry only `message`) and when typed code is
|
|
213
|
+
// a generic catch-all (`invalid_request_error`).
|
|
214
|
+
const msg = err.message ?? '';
|
|
215
|
+
if (CONTENT_POLICY_MESSAGE_RE.test(msg))
|
|
216
|
+
return AiErrorClassification.CONTENT_POLICY;
|
|
217
|
+
if (CONTEXT_LENGTH_MESSAGE_RE.test(msg))
|
|
218
|
+
return AiErrorClassification.CONTEXT_LENGTH_EXCEEDED;
|
|
219
|
+
return AiErrorClassification.UNKNOWN;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Whether `classification` is one of the categories the library's retry
|
|
223
|
+
* loop will re-attempt: `RATE_LIMIT`, `OVERLOADED`, `TIMEOUT`,
|
|
224
|
+
* `SERVER_ERROR`, `NETWORK_ERROR`. Backed by the {@link RETRYABLE} set.
|
|
225
|
+
* Use this when implementing a custom retry policy on top of
|
|
226
|
+
* {@link classifyError}.
|
|
227
|
+
*/
|
|
228
|
+
export function isRetryable(classification) {
|
|
229
|
+
return RETRYABLE.has(classification);
|
|
230
|
+
}
|
|
231
|
+
// Header names verified June 2026.
|
|
232
|
+
// - Anthropic: anthropic-ratelimit-* prefix
|
|
233
|
+
// - OpenAI: x-ratelimit-* prefix
|
|
234
|
+
// - Gemini: x-goog-quota-* for token/request counts; x-ratelimit-reset for reset
|
|
235
|
+
// - Mistral: x-ratelimit-*-tokens-minute / x-ratelimit-*-requests-minute
|
|
236
|
+
// - Bedrock: no standard rate-limit headers; throttling reflected in body (ThrottlingException) — intentional null
|
|
237
|
+
// - Cohere: no documented rate-limit headers for Chat v2 API — intentional null
|
|
238
|
+
const HEADER_MAP = new Map([
|
|
239
|
+
[
|
|
240
|
+
'tokensRemaining',
|
|
241
|
+
[
|
|
242
|
+
'anthropic-ratelimit-tokens-remaining',
|
|
243
|
+
'x-ratelimit-remaining-tokens',
|
|
244
|
+
'x-goog-quota-tokens-remaining',
|
|
245
|
+
'x-ratelimit-remaining-tokens-minute',
|
|
246
|
+
],
|
|
247
|
+
],
|
|
248
|
+
[
|
|
249
|
+
'requestsRemaining',
|
|
250
|
+
[
|
|
251
|
+
'anthropic-ratelimit-requests-remaining',
|
|
252
|
+
'x-ratelimit-remaining-requests',
|
|
253
|
+
'x-goog-quota-requests-remaining',
|
|
254
|
+
'x-ratelimit-remaining-requests-minute',
|
|
255
|
+
],
|
|
256
|
+
],
|
|
257
|
+
[
|
|
258
|
+
'tokensReset',
|
|
259
|
+
[
|
|
260
|
+
'anthropic-ratelimit-tokens-reset',
|
|
261
|
+
'x-ratelimit-reset-tokens',
|
|
262
|
+
'x-ratelimit-reset-tokens-minute',
|
|
263
|
+
],
|
|
264
|
+
],
|
|
265
|
+
[
|
|
266
|
+
'requestsReset',
|
|
267
|
+
[
|
|
268
|
+
'anthropic-ratelimit-requests-reset',
|
|
269
|
+
'x-ratelimit-reset-requests',
|
|
270
|
+
'x-ratelimit-reset',
|
|
271
|
+
'x-ratelimit-reset-requests-minute',
|
|
272
|
+
],
|
|
273
|
+
],
|
|
274
|
+
]);
|
|
275
|
+
function readHeader(headers, names) {
|
|
276
|
+
if (headers == null || typeof headers !== 'object')
|
|
277
|
+
return null;
|
|
278
|
+
const hdr = headers;
|
|
279
|
+
if (typeof hdr.get === 'function') {
|
|
280
|
+
// Headers API path: use .get() exclusively. A null return from .get()
|
|
281
|
+
// means the header is absent — do NOT fall through to property access,
|
|
282
|
+
// which would read unrelated inherited properties (§E5).
|
|
283
|
+
const getter = hdr.get;
|
|
284
|
+
for (const name of names) {
|
|
285
|
+
const val = getter.call(hdr, name);
|
|
286
|
+
if (typeof val === 'string')
|
|
287
|
+
return val;
|
|
288
|
+
if (typeof val === 'number')
|
|
289
|
+
return String(val);
|
|
290
|
+
}
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
// Plain object headers — property access.
|
|
294
|
+
// Only accept primitive header values to avoid '[object Object]' bleed.
|
|
295
|
+
for (const name of names) {
|
|
296
|
+
const val = hdr[name];
|
|
297
|
+
if (typeof val === 'string')
|
|
298
|
+
return val;
|
|
299
|
+
if (typeof val === 'number')
|
|
300
|
+
return String(val);
|
|
301
|
+
}
|
|
302
|
+
return null;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Extract rate-limit metadata from a provider error's `headers` field.
|
|
306
|
+
*
|
|
307
|
+
* Returns `null` when the error carries no `headers` at all,
|
|
308
|
+
* letting callers distinguish "no headers in the response" from "headers
|
|
309
|
+
* present but no rate-limit headers parsed". When `headers` is present but
|
|
310
|
+
* none of the recognized rate-limit headers parse, returns a `RateLimitInfo`
|
|
311
|
+
* with all four fields null.
|
|
312
|
+
*
|
|
313
|
+
* Provider coverage: Anthropic, OpenAI, Gemini, Mistral. Bedrock and Cohere
|
|
314
|
+
* intentionally return all-null — Bedrock exposes throttling in the
|
|
315
|
+
* ThrottlingException body rather than response headers; Cohere has no
|
|
316
|
+
* documented rate-limit headers for their Chat v2 API.
|
|
317
|
+
*/
|
|
318
|
+
export function extractRateLimitHeaders(error) {
|
|
319
|
+
const headers = error?.headers;
|
|
320
|
+
if (headers == null)
|
|
321
|
+
return null;
|
|
322
|
+
const result = {
|
|
323
|
+
tokensRemaining: null,
|
|
324
|
+
requestsRemaining: null,
|
|
325
|
+
tokensReset: null,
|
|
326
|
+
requestsReset: null,
|
|
327
|
+
};
|
|
328
|
+
for (const [field, headerNames] of HEADER_MAP) {
|
|
329
|
+
const raw = readHeader(headers, headerNames);
|
|
330
|
+
if (raw === null)
|
|
331
|
+
continue;
|
|
332
|
+
if (field === 'tokensRemaining' || field === 'requestsRemaining') {
|
|
333
|
+
// Guard against empty string: Number('') === 0, which is valid but
|
|
334
|
+
// indistinguishable from a genuine "0 remaining" (§ER3).
|
|
335
|
+
const trimmed = raw.trim();
|
|
336
|
+
const parsed = Number(trimmed);
|
|
337
|
+
if (trimmed !== '' && !Number.isNaN(parsed)) {
|
|
338
|
+
result[field] = parsed;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
result[field] = raw;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return result;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Truncate `message` to `maxLength` chars (default 1024), suffixing `...`
|
|
349
|
+
* when truncation occurs. Useful for keeping provider error messages within
|
|
350
|
+
* NR's per-attribute 4096-byte limit before they're logged or attached to
|
|
351
|
+
* events.
|
|
352
|
+
*
|
|
353
|
+
* The minimum effective `maxLength` is 4 — a shorter cap is silently
|
|
354
|
+
* clamped to 4 so the result is always at least `'X...'` for some single
|
|
355
|
+
* character of the original message.
|
|
356
|
+
*
|
|
357
|
+
* Examples:
|
|
358
|
+
* ```
|
|
359
|
+
* truncateErrorMessage('hello world', 8) // => 'hello...'
|
|
360
|
+
* truncateErrorMessage('hi', 8) // => 'hi' (already short)
|
|
361
|
+
* truncateErrorMessage('hello', 3) // => 'h...' (clamp to 4)
|
|
362
|
+
* truncateErrorMessage('hello', 0) // => 'h...' (clamp to 4)
|
|
363
|
+
* ```
|
|
364
|
+
*
|
|
365
|
+
* @param message The message to truncate.
|
|
366
|
+
* @param maxLength Maximum length of the returned string. Values < 4 are
|
|
367
|
+
* clamped to 4. Default is 1024.
|
|
368
|
+
*/
|
|
369
|
+
export function truncateErrorMessage(message, maxLength = 1024) {
|
|
370
|
+
const safeMax = Math.max(4, maxLength);
|
|
371
|
+
if (message.length <= safeMax)
|
|
372
|
+
return message;
|
|
373
|
+
// Slice by code units but step back if we land on a high surrogate to avoid
|
|
374
|
+
// emitting a lone surrogate that produces malformed UTF-16 / UTF-8 (§E4).
|
|
375
|
+
let cut = safeMax - 3;
|
|
376
|
+
const charCode = message.charCodeAt(cut - 1);
|
|
377
|
+
if (charCode >= 0xd800 && charCode <= 0xdbff)
|
|
378
|
+
cut -= 1;
|
|
379
|
+
return message.slice(0, cut) + '...';
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Same classification logic as {@link classifyError}, but returns a
|
|
383
|
+
* {@link ClassifiedError} carrying the original message, HTTP status, and
|
|
384
|
+
* provider error code alongside the enum value. Useful when the caller
|
|
385
|
+
* wants to log a richer line ("Rate limit hit: ...message...") or
|
|
386
|
+
* propagate the original message to a UI surface.
|
|
387
|
+
*
|
|
388
|
+
* The retry path in `http-client.ts` does not currently consume this —
|
|
389
|
+
* its decision is purely "is this retryable?". This is exposed as a
|
|
390
|
+
* separate function so existing callers of `classifyError` continue to
|
|
391
|
+
* work unchanged.
|
|
392
|
+
*/
|
|
393
|
+
export function classifyErrorDetailed(error, provider) {
|
|
394
|
+
const err = error;
|
|
395
|
+
const status = typeof err?.status === 'number' ? err.status : null;
|
|
396
|
+
// Use extractCode() to walk the cause chain, matching classifyError() (§E1/§E6).
|
|
397
|
+
const code = extractCode(error) ?? null;
|
|
398
|
+
const originalMessage = typeof err?.message === 'string' && err.message.length > 0 ? err.message : null;
|
|
399
|
+
return {
|
|
400
|
+
classification: classifyError(error, provider),
|
|
401
|
+
originalMessage,
|
|
402
|
+
status,
|
|
403
|
+
code,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/shared/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import type { AiRequest, AiResponse, AiMessage, AiProvider, AiRequestMethod, AiMessageRole, AiAgentTaskSummary, AiAntiPattern, AntiPatternType, AiAgentMessage, AiContextReset } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Reset the warn-once set. Test-only — production code never resets.
|
|
4
|
+
* Exported behind a `__` prefix so it's clearly internal.
|
|
5
|
+
*/
|
|
6
|
+
export declare function __resetEntityGuidWarning(): void;
|
|
7
|
+
export interface CreateAiRequestParams {
|
|
8
|
+
provider: AiProvider;
|
|
9
|
+
model: string;
|
|
10
|
+
requestMethod: AiRequestMethod;
|
|
11
|
+
maxTokens?: number | null;
|
|
12
|
+
temperature?: number | null;
|
|
13
|
+
topP?: number | null;
|
|
14
|
+
systemPromptLength?: number | null;
|
|
15
|
+
messageCount: number;
|
|
16
|
+
toolCount?: number;
|
|
17
|
+
toolNames?: string[];
|
|
18
|
+
thinkingEnabled?: boolean;
|
|
19
|
+
thinkingBudgetTokens?: number | null;
|
|
20
|
+
streamingEnabled: boolean;
|
|
21
|
+
appName: string;
|
|
22
|
+
entityGuid?: string | null;
|
|
23
|
+
customAttributes?: Record<string, string | number | boolean>;
|
|
24
|
+
id?: string;
|
|
25
|
+
timestamp?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function createAiRequest(params: CreateAiRequestParams): AiRequest;
|
|
28
|
+
export interface CreateAiResponseParams {
|
|
29
|
+
provider: AiProvider;
|
|
30
|
+
model: string;
|
|
31
|
+
durationMs: number;
|
|
32
|
+
timeToFirstTokenMs?: number | null;
|
|
33
|
+
inputTokens: number;
|
|
34
|
+
outputTokens: number;
|
|
35
|
+
thinkingTokens?: number;
|
|
36
|
+
cacheReadTokens?: number;
|
|
37
|
+
cacheCreationTokens?: number;
|
|
38
|
+
costInputUsd?: number | null;
|
|
39
|
+
costOutputUsd?: number | null;
|
|
40
|
+
costThinkingUsd?: number | null;
|
|
41
|
+
costCacheReadUsd?: number | null;
|
|
42
|
+
costCacheCreationUsd?: number | null;
|
|
43
|
+
costTotalUsd?: number | null;
|
|
44
|
+
stopReason?: string | null;
|
|
45
|
+
contentBlockTypes?: string[];
|
|
46
|
+
error?: {
|
|
47
|
+
type: string;
|
|
48
|
+
message: string;
|
|
49
|
+
statusCode: number | null;
|
|
50
|
+
} | null;
|
|
51
|
+
appName: string;
|
|
52
|
+
entityGuid?: string | null;
|
|
53
|
+
customAttributes?: Record<string, string | number | boolean>;
|
|
54
|
+
id?: string;
|
|
55
|
+
timestamp?: number;
|
|
56
|
+
}
|
|
57
|
+
export declare function createAiResponse(params: CreateAiResponseParams): AiResponse;
|
|
58
|
+
export interface CreateAiMessageParams {
|
|
59
|
+
role: AiMessageRole;
|
|
60
|
+
content: string;
|
|
61
|
+
contentLength: number;
|
|
62
|
+
sequence: number;
|
|
63
|
+
appName: string;
|
|
64
|
+
entityGuid?: string | null;
|
|
65
|
+
customAttributes?: Record<string, string | number | boolean>;
|
|
66
|
+
id?: string;
|
|
67
|
+
timestamp?: number;
|
|
68
|
+
}
|
|
69
|
+
export declare function createAiMessage(params: CreateAiMessageParams): AiMessage;
|
|
70
|
+
export interface CreateAiAgentTaskSummaryParams {
|
|
71
|
+
traceId: string;
|
|
72
|
+
spanId: string;
|
|
73
|
+
taskName: string;
|
|
74
|
+
durationMs: number;
|
|
75
|
+
totalLlmCalls: number;
|
|
76
|
+
totalToolCalls: number;
|
|
77
|
+
totalTokens: number;
|
|
78
|
+
totalCostUsd?: number | null;
|
|
79
|
+
stepCount: number;
|
|
80
|
+
success: boolean;
|
|
81
|
+
provider?: AiProvider;
|
|
82
|
+
delegationCount?: number;
|
|
83
|
+
spawnCount?: number;
|
|
84
|
+
delegationDepth?: number;
|
|
85
|
+
interAgentMessages?: number;
|
|
86
|
+
delegationOverheadMs?: number;
|
|
87
|
+
appName: string;
|
|
88
|
+
entityGuid?: string | null;
|
|
89
|
+
customAttributes?: Record<string, string | number | boolean>;
|
|
90
|
+
id?: string;
|
|
91
|
+
timestamp?: number;
|
|
92
|
+
}
|
|
93
|
+
export declare function createAiAgentTaskSummary(params: CreateAiAgentTaskSummaryParams): AiAgentTaskSummary;
|
|
94
|
+
export interface CreateAiAntiPatternParams {
|
|
95
|
+
traceId: string;
|
|
96
|
+
patternType: AntiPatternType;
|
|
97
|
+
severity: 'low' | 'medium' | 'high';
|
|
98
|
+
description: string;
|
|
99
|
+
provider?: AiProvider;
|
|
100
|
+
toolName?: string;
|
|
101
|
+
repeatCount?: number;
|
|
102
|
+
depthIndex?: number;
|
|
103
|
+
taskComplexity?: 'simple' | 'moderate' | 'complex';
|
|
104
|
+
contextPressure?: number | null;
|
|
105
|
+
tokenShare?: number | null;
|
|
106
|
+
attemptCount?: number;
|
|
107
|
+
appName: string;
|
|
108
|
+
entityGuid?: string | null;
|
|
109
|
+
customAttributes?: Record<string, string | number | boolean>;
|
|
110
|
+
id?: string;
|
|
111
|
+
timestamp?: number;
|
|
112
|
+
}
|
|
113
|
+
export declare function createAiAntiPattern(params: CreateAiAntiPatternParams): AiAntiPattern;
|
|
114
|
+
export interface CreateAiAgentMessageParams {
|
|
115
|
+
traceId: string;
|
|
116
|
+
fromAgent: string;
|
|
117
|
+
toAgent: string;
|
|
118
|
+
messageType: string;
|
|
119
|
+
provider?: AiProvider;
|
|
120
|
+
tokenCount?: number;
|
|
121
|
+
appName: string;
|
|
122
|
+
entityGuid?: string | null;
|
|
123
|
+
customAttributes?: Record<string, string | number | boolean>;
|
|
124
|
+
id?: string;
|
|
125
|
+
timestamp?: number;
|
|
126
|
+
}
|
|
127
|
+
export declare function createAiAgentMessage(params: CreateAiAgentMessageParams): AiAgentMessage;
|
|
128
|
+
export interface CreateAiContextResetParams {
|
|
129
|
+
traceId: string;
|
|
130
|
+
conversationId: string;
|
|
131
|
+
tokensBefore: number;
|
|
132
|
+
tokensAfter: number;
|
|
133
|
+
reason: 'summarization' | 'truncation' | 'sliding_window' | 'manual';
|
|
134
|
+
provider?: AiProvider;
|
|
135
|
+
turnsRemoved?: number;
|
|
136
|
+
appName: string;
|
|
137
|
+
entityGuid?: string | null;
|
|
138
|
+
customAttributes?: Record<string, string | number | boolean>;
|
|
139
|
+
id?: string;
|
|
140
|
+
timestamp?: number;
|
|
141
|
+
}
|
|
142
|
+
export declare function createAiContextReset(params: CreateAiContextResetParams): AiContextReset;
|
|
143
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/shared/events/factory.ts"],"names":[],"mappings":"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"}
|