@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 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/shared/pricing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AgentConfig } from './config.js';
|
|
2
|
+
/**
|
|
3
|
+
* Returns a redacted deep copy of `value`. Walks objects and arrays up to
|
|
4
|
+
* MAX_DEPTH; replaces any string/number/boolean value whose KEY (in the
|
|
5
|
+
* containing object) matches the secret-key denylist with the literal '***'.
|
|
6
|
+
*
|
|
7
|
+
* - Strings outside the denylist are returned as-is (no value-pattern matching;
|
|
8
|
+
* that would risk false positives on legitimate values like model names).
|
|
9
|
+
* - Cycles are detected via per-path ancestor tracking and returned as `'[circular]'`.
|
|
10
|
+
* DAG-shaped objects (same reference at sibling positions) are walked in full.
|
|
11
|
+
* - Functions, symbols, undefined are returned as-is (they don't serialize anyway).
|
|
12
|
+
* - **`Map` and `Set` values are NOT walked for secrets** — they are summarized
|
|
13
|
+
* as `'[Map(N)]'` / `'[Set(N)]'` because `Object.entries` does not enumerate
|
|
14
|
+
* their contents (§RE2). If credentials are stored as Map entries under a
|
|
15
|
+
* non-secret key (e.g. `{ headers: new Map([['Authorization', 'Bearer x']]) }`),
|
|
16
|
+
* they will NOT be redacted. Convert to plain objects before passing to `redact()`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function redact<T>(value: T): T;
|
|
19
|
+
/**
|
|
20
|
+
* Returns a redacted copy of the given `AgentConfig`, suitable for diagnostic
|
|
21
|
+
* dumps to logs, support tickets, or operator UIs. `licenseKey` becomes
|
|
22
|
+
* `'***'`; values inside `otlpHeaders` whose key matches the secret denylist
|
|
23
|
+
* (`Authorization`, `api-key`, etc.) are also replaced. All other fields
|
|
24
|
+
* (`appName`, `collectorHost`, `accountId`, `transport`, `recordContent`,
|
|
25
|
+
* `highSecurity`, etc.) pass through unchanged so the output stays useful.
|
|
26
|
+
*
|
|
27
|
+
* Keep `redact()` for arbitrary objects; reach for `safeForLog()` when you
|
|
28
|
+
* specifically have an `AgentConfig` and want a typed return.
|
|
29
|
+
*
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
export declare function safeForLog(config: AgentConfig): Readonly<AgentConfig>;
|
|
33
|
+
//# sourceMappingURL=redact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/shared/redact.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAoB/C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAErC;AA4CD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CAErE"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// redact() — defensively strip secret-shaped fields before logging or
|
|
3
|
+
// serialization. Matches keys (case-insensitive) against a denylist of
|
|
4
|
+
// secret-bearing names; replaces matching values with the literal string
|
|
5
|
+
// '***'.
|
|
6
|
+
//
|
|
7
|
+
// The library handles credentials (license keys, OTLP auth headers, provider
|
|
8
|
+
// API keys) and provider responses that may contain user prompt fragments.
|
|
9
|
+
// Callers should pass any object containing config or response data through
|
|
10
|
+
// redact() before handing it to a logger or external sink.
|
|
11
|
+
//
|
|
12
|
+
// safeForLog(config) — convenience wrapper that returns a redacted copy of an
|
|
13
|
+
// AgentConfig, suitable for diagnostic dumps. See
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Pattern notes:
|
|
16
|
+
// - `key(?!s)` matches `apiKey`, `licenseKey`, bare `key`, but NOT `keys` (plural, §RE1).
|
|
17
|
+
// The `\b` word-boundary upgrade that was applied to `token\b` (§LR1) and
|
|
18
|
+
// `credentials?\b` (§LR2) cannot be applied here: CamelCase names like `licenseKey`
|
|
19
|
+
// and `apiKey` do NOT have a word boundary before the `K` (both sides are word chars),
|
|
20
|
+
// so `\bkey` would FAIL to match them (§11.6, deliberate false-positive trade-off).
|
|
21
|
+
// Mid-word false positives (`monkey`, `jockey`) are accepted in exchange for reliably
|
|
22
|
+
// redacting all camelCase key properties. A regex-only fix is not feasible without
|
|
23
|
+
// enumerating every legitimate CamelCase prefix, which would miss future additions.
|
|
24
|
+
// - `token\b` matches `apiToken`, `accessToken`, bare `token`, but NOT `tokenCount`,
|
|
25
|
+
// `tokenize`, `tokenAmount`, etc. (§LR1). The `\b` works here because `token` almost
|
|
26
|
+
// never appears mid-word in legitimate property names.
|
|
27
|
+
// - `credentials?\b` matches `credential` and `credentials`, but NOT `credentialType`,
|
|
28
|
+
// `credentialProvider`, etc. (§LR2). Same fix applied to `passwords?\b`.
|
|
29
|
+
const SECRET_KEY_RE = /key(?!s)|token\b|secret|passwords?\b|authorization|credentials?\b|bearer/i;
|
|
30
|
+
const REDACTED = '***';
|
|
31
|
+
const MAX_DEPTH = 8;
|
|
32
|
+
/**
|
|
33
|
+
* Returns a redacted deep copy of `value`. Walks objects and arrays up to
|
|
34
|
+
* MAX_DEPTH; replaces any string/number/boolean value whose KEY (in the
|
|
35
|
+
* containing object) matches the secret-key denylist with the literal '***'.
|
|
36
|
+
*
|
|
37
|
+
* - Strings outside the denylist are returned as-is (no value-pattern matching;
|
|
38
|
+
* that would risk false positives on legitimate values like model names).
|
|
39
|
+
* - Cycles are detected via per-path ancestor tracking and returned as `'[circular]'`.
|
|
40
|
+
* DAG-shaped objects (same reference at sibling positions) are walked in full.
|
|
41
|
+
* - Functions, symbols, undefined are returned as-is (they don't serialize anyway).
|
|
42
|
+
* - **`Map` and `Set` values are NOT walked for secrets** — they are summarized
|
|
43
|
+
* as `'[Map(N)]'` / `'[Set(N)]'` because `Object.entries` does not enumerate
|
|
44
|
+
* their contents (§RE2). If credentials are stored as Map entries under a
|
|
45
|
+
* non-secret key (e.g. `{ headers: new Map([['Authorization', 'Bearer x']]) }`),
|
|
46
|
+
* they will NOT be redacted. Convert to plain objects before passing to `redact()`.
|
|
47
|
+
*/
|
|
48
|
+
export function redact(value) {
|
|
49
|
+
return redactInner(value, 0, new WeakSet());
|
|
50
|
+
}
|
|
51
|
+
function redactInner(value, depth, ancestors) {
|
|
52
|
+
if (depth > MAX_DEPTH)
|
|
53
|
+
return '[max-depth]';
|
|
54
|
+
if (value === null || typeof value !== 'object')
|
|
55
|
+
return value;
|
|
56
|
+
// Use per-path ancestor tracking so DAG-shaped objects (the same reference
|
|
57
|
+
// appearing at two sibling positions) are walked in full; only true cycles
|
|
58
|
+
// (an ancestor of the current node) are collapsed to '[circular]'.
|
|
59
|
+
if (ancestors.has(value))
|
|
60
|
+
return '[circular]';
|
|
61
|
+
ancestors.add(value);
|
|
62
|
+
try {
|
|
63
|
+
if (Array.isArray(value)) {
|
|
64
|
+
return value.map((v) => redactInner(v, depth + 1, ancestors));
|
|
65
|
+
}
|
|
66
|
+
// Host objects that store their data in internal slots, not enumerable
|
|
67
|
+
// properties — walking via Object.entries produces {} or garbled output.
|
|
68
|
+
if (value instanceof Date ||
|
|
69
|
+
value instanceof RegExp ||
|
|
70
|
+
value instanceof URL ||
|
|
71
|
+
(typeof Buffer !== 'undefined' && value instanceof Buffer) ||
|
|
72
|
+
value instanceof Uint8Array) {
|
|
73
|
+
return value;
|
|
74
|
+
}
|
|
75
|
+
if (value instanceof Map)
|
|
76
|
+
return `[Map(${value.size})]`;
|
|
77
|
+
if (value instanceof Set)
|
|
78
|
+
return `[Set(${value.size})]`;
|
|
79
|
+
const result = {};
|
|
80
|
+
for (const [key, v] of Object.entries(value)) {
|
|
81
|
+
if (SECRET_KEY_RE.test(key)) {
|
|
82
|
+
result[key] = v == null ? v : REDACTED;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
result[key] = redactInner(v, depth + 1, ancestors);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
ancestors.delete(value);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Returns a redacted copy of the given `AgentConfig`, suitable for diagnostic
|
|
96
|
+
* dumps to logs, support tickets, or operator UIs. `licenseKey` becomes
|
|
97
|
+
* `'***'`; values inside `otlpHeaders` whose key matches the secret denylist
|
|
98
|
+
* (`Authorization`, `api-key`, etc.) are also replaced. All other fields
|
|
99
|
+
* (`appName`, `collectorHost`, `accountId`, `transport`, `recordContent`,
|
|
100
|
+
* `highSecurity`, etc.) pass through unchanged so the output stays useful.
|
|
101
|
+
*
|
|
102
|
+
* Keep `redact()` for arbitrary objects; reach for `safeForLog()` when you
|
|
103
|
+
* specifically have an `AgentConfig` and want a typed return.
|
|
104
|
+
*
|
|
105
|
+
*
|
|
106
|
+
*/
|
|
107
|
+
export function safeForLog(config) {
|
|
108
|
+
return Object.freeze(redact(config));
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/shared/redact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
export interface ThinkingPhase {
|
|
2
|
+
/** Wall-clock millisecond timestamp the phase began (from `performance.now()`). */
|
|
3
|
+
readonly startAt: number;
|
|
4
|
+
/** Wall-clock millisecond timestamp the phase ended (from `performance.now()`). */
|
|
5
|
+
readonly endAt: number;
|
|
6
|
+
/** `endAt - startAt`. */
|
|
7
|
+
readonly durationMs: number;
|
|
8
|
+
}
|
|
9
|
+
export interface RequestTimerMetrics {
|
|
10
|
+
/** Wall-clock total duration (ms). */
|
|
11
|
+
readonly durationMs: number;
|
|
12
|
+
/** Time to first NON-thinking content token; null if non-streaming. */
|
|
13
|
+
readonly timeToFirstTokenMs: number | null;
|
|
14
|
+
/**
|
|
15
|
+
* Sum of all closed thinking phase durations (ms); null if no phases were
|
|
16
|
+
* recorded. With a single phase this matches the legacy semantics.
|
|
17
|
+
*/
|
|
18
|
+
readonly thinkingDurationMs: number | null;
|
|
19
|
+
/**
|
|
20
|
+
* Closed thinking phases as recorded, in start-order. Empty when no phases
|
|
21
|
+
* were marked. Useful for OTel span emission where each phase becomes its
|
|
22
|
+
* own child span.
|
|
23
|
+
*/
|
|
24
|
+
readonly thinkingPhases: readonly ThinkingPhase[];
|
|
25
|
+
/**
|
|
26
|
+
* Duration spent generating output (i.e. wall-clock minus thinking time).
|
|
27
|
+
* Assumes thinking does not overlap with content generation; see file header.
|
|
28
|
+
*/
|
|
29
|
+
readonly generationDurationMs: number;
|
|
30
|
+
/** Output tokens / (durationMs / 1000); null if outputTokens not provided. */
|
|
31
|
+
readonly tokensPerSecond: number | null;
|
|
32
|
+
/**
|
|
33
|
+
* Estimated SDK/network overhead — the wall-clock time the request spent
|
|
34
|
+
* outside both thinking and content generation. Algebraically:
|
|
35
|
+
*
|
|
36
|
+
* overheadMs = TTFT − thinkingDuration
|
|
37
|
+
* = (firstTokenAt − startAt) − Σ(phase.endAt − phase.startAt)
|
|
38
|
+
*
|
|
39
|
+
* Clamped to ≥ 0. Relies on the non-overlap invariant documented in the
|
|
40
|
+
* file header.
|
|
41
|
+
*/
|
|
42
|
+
readonly overheadMs: number;
|
|
43
|
+
}
|
|
44
|
+
export declare class RequestTimer {
|
|
45
|
+
private startAt;
|
|
46
|
+
private stopAt;
|
|
47
|
+
private firstTokenAt;
|
|
48
|
+
/** Phase that has been started but not yet ended. */
|
|
49
|
+
private openPhase;
|
|
50
|
+
/** Closed phases in start-order. */
|
|
51
|
+
private closedPhases;
|
|
52
|
+
/** Record the request start time. Idempotent — only the first call takes effect (§TM2). */
|
|
53
|
+
start(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Record when the first NON-thinking content token arrives. Idempotent —
|
|
56
|
+
* only the first call takes effect. Must be called after `markThinkingEnd()`
|
|
57
|
+
* if a thinking phase is being tracked; see the file header for the full
|
|
58
|
+
* lifecycle invariant.
|
|
59
|
+
*/
|
|
60
|
+
markFirstToken(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Mark the beginning of a thinking phase.
|
|
63
|
+
*
|
|
64
|
+
* - First call (or first call after `markThinkingEnd`): opens a new phase.
|
|
65
|
+
* - Subsequent call WITHOUT a matching `markThinkingEnd` first: debug log
|
|
66
|
+
* and ignored — first-write-wins within the open phase.
|
|
67
|
+
*
|
|
68
|
+
* Multiple phases per request are supported; each
|
|
69
|
+
* (start, end) pair appears in `metrics.thinkingPhases`.
|
|
70
|
+
*/
|
|
71
|
+
markThinkingStart(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Mark the end of the currently open thinking phase.
|
|
74
|
+
*
|
|
75
|
+
* - With an open phase: closes it and appends to the closed-phase list.
|
|
76
|
+
* - With no open phase: debug log and ignored.
|
|
77
|
+
*/
|
|
78
|
+
markThinkingEnd(): void;
|
|
79
|
+
/** Record the request end time. Idempotent — only the first call takes effect (§TM2). */
|
|
80
|
+
stop(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Compute derived timing metrics.
|
|
83
|
+
*
|
|
84
|
+
* **Side effects:** if a thinking phase was started but never ended (e.g. the
|
|
85
|
+
* stream disconnected before `markThinkingEnd()` was called), this method
|
|
86
|
+
* auto-closes the open phase at `stopAt` and writes back `this.closedPhases`
|
|
87
|
+
* and `this.openPhase = null` so subsequent calls see a consistent state
|
|
88
|
+
* (§TIM1). This mutation is intentional — it means `getMetrics()` is safe to
|
|
89
|
+
* call multiple times and will return consistent results after the first call.
|
|
90
|
+
*
|
|
91
|
+
* @param outputTokens — If provided, `tokensPerSecond` is calculated.
|
|
92
|
+
* @throws if `start()` or `stop()` has not been called.
|
|
93
|
+
*/
|
|
94
|
+
getMetrics(outputTokens?: number): RequestTimerMetrics;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=timing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/shared/timing.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,aAAa;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;;;;;;;OASG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAWD,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAuB;IAC3C,qDAAqD;IACrD,OAAO,CAAC,SAAS,CAA0B;IAC3C,oCAAoC;IACpC,OAAO,CAAC,YAAY,CAAqB;IAEzC,2FAA2F;IAC3F,KAAK,IAAI,IAAI;IAQb;;;;;OAKG;IACH,cAAc,IAAI,IAAI;IAQtB;;;;;;;;;OASG;IACH,iBAAiB,IAAI,IAAI;IAQzB;;;;;OAKG;IACH,eAAe,IAAI,IAAI;IASvB,yFAAyF;IACzF,IAAI,IAAI,IAAI;IAQZ;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,mBAAmB;CA6EvD"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// RequestTimer — high-precision latency measurement for AI SDK calls
|
|
3
|
+
//
|
|
4
|
+
// Lifecycle invariant:
|
|
5
|
+
// start()
|
|
6
|
+
// → [optional] markThinkingStart() → markThinkingEnd() (one or more pairs)
|
|
7
|
+
// → markFirstToken() ← first NON-thinking content token
|
|
8
|
+
// → stop()
|
|
9
|
+
//
|
|
10
|
+
// The timer assumes thinking phases do NOT overlap with content generation.
|
|
11
|
+
// All providers we currently wrap (Anthropic extended thinking, Gemini thought
|
|
12
|
+
// summaries) emit thinking as one or more discrete blocks before any content
|
|
13
|
+
// tokens. Multiple thinking phases are supported via
|
|
14
|
+
// repeated markThinkingStart/markThinkingEnd pairs; thinkingDurationMs is the
|
|
15
|
+
// sum of the closed phase durations.
|
|
16
|
+
//
|
|
17
|
+
// Idempotency policy: all event-marking methods are
|
|
18
|
+
// first-write-wins. For markThinkingStart/markThinkingEnd "first-write-wins"
|
|
19
|
+
// applies WITHIN an open-phase state — once a phase is closed (markThinkingEnd
|
|
20
|
+
// has been called), a subsequent markThinkingStart opens a NEW phase rather
|
|
21
|
+
// than being treated as a duplicate.
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
import { createLogger } from './logger.js';
|
|
24
|
+
const timerLogger = createLogger('timing');
|
|
25
|
+
export class RequestTimer {
|
|
26
|
+
startAt = null;
|
|
27
|
+
stopAt = null;
|
|
28
|
+
firstTokenAt = null;
|
|
29
|
+
/** Phase that has been started but not yet ended. */
|
|
30
|
+
openPhase = null;
|
|
31
|
+
/** Closed phases in start-order. */
|
|
32
|
+
closedPhases = [];
|
|
33
|
+
/** Record the request start time. Idempotent — only the first call takes effect (§TM2). */
|
|
34
|
+
start() {
|
|
35
|
+
if (this.startAt !== null) {
|
|
36
|
+
timerLogger.debug('start() called more than once — ignoring duplicate');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this.startAt = performance.now();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Record when the first NON-thinking content token arrives. Idempotent —
|
|
43
|
+
* only the first call takes effect. Must be called after `markThinkingEnd()`
|
|
44
|
+
* if a thinking phase is being tracked; see the file header for the full
|
|
45
|
+
* lifecycle invariant.
|
|
46
|
+
*/
|
|
47
|
+
markFirstToken() {
|
|
48
|
+
if (this.firstTokenAt === null) {
|
|
49
|
+
this.firstTokenAt = performance.now();
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
timerLogger.debug('markFirstToken called more than once — ignoring duplicate');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Mark the beginning of a thinking phase.
|
|
57
|
+
*
|
|
58
|
+
* - First call (or first call after `markThinkingEnd`): opens a new phase.
|
|
59
|
+
* - Subsequent call WITHOUT a matching `markThinkingEnd` first: debug log
|
|
60
|
+
* and ignored — first-write-wins within the open phase.
|
|
61
|
+
*
|
|
62
|
+
* Multiple phases per request are supported; each
|
|
63
|
+
* (start, end) pair appears in `metrics.thinkingPhases`.
|
|
64
|
+
*/
|
|
65
|
+
markThinkingStart() {
|
|
66
|
+
if (this.openPhase !== null) {
|
|
67
|
+
timerLogger.debug('markThinkingStart called while a phase is open — ignoring duplicate');
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
this.openPhase = { startAt: performance.now() };
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Mark the end of the currently open thinking phase.
|
|
74
|
+
*
|
|
75
|
+
* - With an open phase: closes it and appends to the closed-phase list.
|
|
76
|
+
* - With no open phase: debug log and ignored.
|
|
77
|
+
*/
|
|
78
|
+
markThinkingEnd() {
|
|
79
|
+
if (this.openPhase === null) {
|
|
80
|
+
timerLogger.debug('markThinkingEnd called with no open phase — ignoring');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
this.closedPhases.push({ startAt: this.openPhase.startAt, endAt: performance.now() });
|
|
84
|
+
this.openPhase = null;
|
|
85
|
+
}
|
|
86
|
+
/** Record the request end time. Idempotent — only the first call takes effect (§TM2). */
|
|
87
|
+
stop() {
|
|
88
|
+
if (this.stopAt !== null) {
|
|
89
|
+
timerLogger.debug('stop() called more than once — ignoring duplicate');
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
this.stopAt = performance.now();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Compute derived timing metrics.
|
|
96
|
+
*
|
|
97
|
+
* **Side effects:** if a thinking phase was started but never ended (e.g. the
|
|
98
|
+
* stream disconnected before `markThinkingEnd()` was called), this method
|
|
99
|
+
* auto-closes the open phase at `stopAt` and writes back `this.closedPhases`
|
|
100
|
+
* and `this.openPhase = null` so subsequent calls see a consistent state
|
|
101
|
+
* (§TIM1). This mutation is intentional — it means `getMetrics()` is safe to
|
|
102
|
+
* call multiple times and will return consistent results after the first call.
|
|
103
|
+
*
|
|
104
|
+
* @param outputTokens — If provided, `tokensPerSecond` is calculated.
|
|
105
|
+
* @throws if `start()` or `stop()` has not been called.
|
|
106
|
+
*/
|
|
107
|
+
getMetrics(outputTokens) {
|
|
108
|
+
if (this.startAt === null) {
|
|
109
|
+
throw new Error('RequestTimer: start() must be called before getMetrics()');
|
|
110
|
+
}
|
|
111
|
+
if (this.stopAt === null) {
|
|
112
|
+
throw new Error('RequestTimer: stop() must be called before getMetrics()');
|
|
113
|
+
}
|
|
114
|
+
const durationMs = this.stopAt - this.startAt;
|
|
115
|
+
// Clamp to 0 so a markFirstToken() call that happens before start() (out of
|
|
116
|
+
// order usage) produces 0 rather than a negative latency (§TM1).
|
|
117
|
+
const timeToFirstTokenMs = this.firstTokenAt !== null ? Math.max(0, this.firstTokenAt - this.startAt) : null;
|
|
118
|
+
// Auto-close any phase that was started but never ended (e.g. stream
|
|
119
|
+
// disconnected during thinking, so markThinkingEnd was never called).
|
|
120
|
+
// Without this, the open phase's wall-clock time is counted inside
|
|
121
|
+
// generationDurationMs instead of thinkingDurationMs (§TM1).
|
|
122
|
+
let effectiveClosedPhases = this.closedPhases;
|
|
123
|
+
if (this.openPhase !== null) {
|
|
124
|
+
timerLogger.debug('thinking phase still open at getMetrics() — auto-closed at stopAt', {
|
|
125
|
+
openStart: this.openPhase.startAt,
|
|
126
|
+
stopAt: this.stopAt,
|
|
127
|
+
});
|
|
128
|
+
effectiveClosedPhases = [
|
|
129
|
+
...this.closedPhases,
|
|
130
|
+
{ startAt: this.openPhase.startAt, endAt: this.stopAt },
|
|
131
|
+
];
|
|
132
|
+
// Move the auto-closed phase into closedPhases so subsequent
|
|
133
|
+
// markThinkingEnd() or getMetrics() calls see a consistent state (§TM1).
|
|
134
|
+
this.closedPhases = effectiveClosedPhases;
|
|
135
|
+
this.openPhase = null;
|
|
136
|
+
}
|
|
137
|
+
const thinkingPhases = effectiveClosedPhases.map((p) => ({
|
|
138
|
+
startAt: p.startAt,
|
|
139
|
+
endAt: p.endAt,
|
|
140
|
+
durationMs: p.endAt - p.startAt,
|
|
141
|
+
}));
|
|
142
|
+
const thinkingDurationMs = thinkingPhases.length > 0 ? thinkingPhases.reduce((sum, p) => sum + p.durationMs, 0) : null;
|
|
143
|
+
const generationDurationMs = Math.max(0, durationMs - (thinkingDurationMs ?? 0));
|
|
144
|
+
// 6: align tokensPerSecond semantics with `factory.ts` —
|
|
145
|
+
// return `null` when either the duration is zero or no output tokens were
|
|
146
|
+
// produced, treating both as "no meaningful rate to report". The previous
|
|
147
|
+
// path returned 0 when `outputTokens === 0`, which read downstream as a
|
|
148
|
+
// measured-zero rate rather than a missing measurement.
|
|
149
|
+
//
|
|
150
|
+
// 6: compute as `(outputTokens / durationMs) * 1000`
|
|
151
|
+
// rather than `outputTokens / (durationMs / 1000)`. The two are
|
|
152
|
+
// mathematically equivalent for non-degenerate inputs but the multiply
|
|
153
|
+
// form preserves precision better when `durationMs` is small (e.g.
|
|
154
|
+
// sub-millisecond synthetic test inputs) — `durationMs / 1000` rounds to
|
|
155
|
+
// a tiny float before the division. Aligns with the formula in
|
|
156
|
+
// `events/factory.ts:tokensPerSecond` so the two paths agree bit-for-bit
|
|
157
|
+
// on identical inputs.
|
|
158
|
+
const tokensPerSecond = outputTokens !== undefined && outputTokens > 0 && durationMs > 0
|
|
159
|
+
? (outputTokens / durationMs) * 1000
|
|
160
|
+
: null;
|
|
161
|
+
const overheadMs = Math.max(0, (timeToFirstTokenMs ?? 0) - (thinkingDurationMs ?? 0));
|
|
162
|
+
return {
|
|
163
|
+
durationMs,
|
|
164
|
+
timeToFirstTokenMs,
|
|
165
|
+
thinkingDurationMs,
|
|
166
|
+
thinkingPhases,
|
|
167
|
+
generationDurationMs,
|
|
168
|
+
tokensPerSecond,
|
|
169
|
+
overheadMs,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=timing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.js","sourceRoot":"","sources":["../../src/shared/timing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { AiProvider } from './events/types.js';
|
|
2
|
+
export type { AiProvider };
|
|
3
|
+
export interface TokenUsage {
|
|
4
|
+
readonly inputTokens: number;
|
|
5
|
+
readonly outputTokens: number;
|
|
6
|
+
readonly thinkingTokens: number;
|
|
7
|
+
readonly cacheReadTokens: number;
|
|
8
|
+
readonly cacheCreationTokens: number;
|
|
9
|
+
readonly totalTokens: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Coerce a value to a non-negative integer. Returns 0 if the value is not a
|
|
13
|
+
* finite non-negative number. Useful for tolerating provider responses with
|
|
14
|
+
* missing, null, undefined, NaN, Infinity, negative, or float token counts.
|
|
15
|
+
*
|
|
16
|
+
* Floors fractional values (e.g. `safeInt(10.7) === 10`). When truncation
|
|
17
|
+
* actually drops a fractional part, emits a debug-level log so operators can
|
|
18
|
+
* diagnose buggy provider stubs that return non-integer token counts
|
|
19
|
+
*. The log is debug, not warn — token counts are
|
|
20
|
+
* provider-controlled and a single fractional value is not a library bug.
|
|
21
|
+
*/
|
|
22
|
+
export declare function safeInt(value: unknown): number;
|
|
23
|
+
interface AnthropicUsage {
|
|
24
|
+
input_tokens?: number;
|
|
25
|
+
output_tokens?: number;
|
|
26
|
+
cache_creation_input_tokens?: number;
|
|
27
|
+
cache_read_input_tokens?: number;
|
|
28
|
+
thinking_tokens?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface AnthropicResponse {
|
|
31
|
+
usage?: AnthropicUsage;
|
|
32
|
+
content?: {
|
|
33
|
+
type?: string;
|
|
34
|
+
}[];
|
|
35
|
+
}
|
|
36
|
+
export declare function extractAnthropicTokens(response: AnthropicResponse): TokenUsage;
|
|
37
|
+
interface GeminiUsageMetadata {
|
|
38
|
+
promptTokenCount?: number;
|
|
39
|
+
candidatesTokenCount?: number;
|
|
40
|
+
thoughtsTokenCount?: number;
|
|
41
|
+
cachedContentTokenCount?: number;
|
|
42
|
+
totalTokenCount?: number;
|
|
43
|
+
}
|
|
44
|
+
export interface GeminiResponse {
|
|
45
|
+
usageMetadata?: GeminiUsageMetadata;
|
|
46
|
+
}
|
|
47
|
+
export declare function extractGeminiTokens(response: GeminiResponse): TokenUsage;
|
|
48
|
+
interface OpenAIPromptTokensDetails {
|
|
49
|
+
cached_tokens?: number;
|
|
50
|
+
}
|
|
51
|
+
interface OpenAICompletionTokensDetails {
|
|
52
|
+
reasoning_tokens?: number;
|
|
53
|
+
}
|
|
54
|
+
interface OpenAIUsage {
|
|
55
|
+
prompt_tokens?: number;
|
|
56
|
+
completion_tokens?: number;
|
|
57
|
+
total_tokens?: number;
|
|
58
|
+
prompt_tokens_details?: OpenAIPromptTokensDetails;
|
|
59
|
+
completion_tokens_details?: OpenAICompletionTokensDetails;
|
|
60
|
+
}
|
|
61
|
+
export interface OpenAIResponse {
|
|
62
|
+
usage?: OpenAIUsage;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Extract `TokenUsage` from an OpenAI Chat Completions response (or the final
|
|
66
|
+
* stream chunk when `stream_options: { include_usage: true }` is set — the
|
|
67
|
+
* shape is identical).
|
|
68
|
+
*
|
|
69
|
+
* Mapping:
|
|
70
|
+
* - `prompt_tokens` → `inputTokens`
|
|
71
|
+
* - `completion_tokens` → `outputTokens`
|
|
72
|
+
* - `prompt_tokens_details.cached_tokens` → `cacheReadTokens`
|
|
73
|
+
* - `completion_tokens_details.reasoning_tokens` → `thinkingTokens`
|
|
74
|
+
*
|
|
75
|
+
* `total_tokens` (if present) is authoritative and used as `totalTokens`,
|
|
76
|
+
* matching the Gemini extractor's behavior. OpenAI does not expose
|
|
77
|
+
* cache-creation tokens — they're set to 0.
|
|
78
|
+
*/
|
|
79
|
+
export declare function extractOpenAITokens(response: OpenAIResponse): TokenUsage;
|
|
80
|
+
interface CohereTokenCounts {
|
|
81
|
+
input_tokens?: number;
|
|
82
|
+
output_tokens?: number;
|
|
83
|
+
}
|
|
84
|
+
interface CohereUsage {
|
|
85
|
+
tokens?: CohereTokenCounts;
|
|
86
|
+
billed_units?: CohereTokenCounts;
|
|
87
|
+
}
|
|
88
|
+
export interface CohereResponse {
|
|
89
|
+
usage?: CohereUsage;
|
|
90
|
+
meta?: CohereUsage;
|
|
91
|
+
}
|
|
92
|
+
export declare function extractCohereTokens(response: CohereResponse): TokenUsage;
|
|
93
|
+
interface MistralUsage {
|
|
94
|
+
prompt_tokens?: number;
|
|
95
|
+
completion_tokens?: number;
|
|
96
|
+
total_tokens?: number;
|
|
97
|
+
}
|
|
98
|
+
export interface MistralResponse {
|
|
99
|
+
usage?: MistralUsage;
|
|
100
|
+
}
|
|
101
|
+
export declare function extractMistralTokens(response: MistralResponse): TokenUsage;
|
|
102
|
+
interface BedrockUsage {
|
|
103
|
+
inputTokens?: number;
|
|
104
|
+
outputTokens?: number;
|
|
105
|
+
totalTokens?: number;
|
|
106
|
+
cacheReadInputTokens?: number;
|
|
107
|
+
cacheWriteInputTokens?: number;
|
|
108
|
+
}
|
|
109
|
+
export interface BedrockResponse {
|
|
110
|
+
usage?: BedrockUsage;
|
|
111
|
+
}
|
|
112
|
+
export declare function extractBedrockTokens(response: BedrockResponse): TokenUsage;
|
|
113
|
+
/**
|
|
114
|
+
* Test-only — reset the warn-once set so per-test assertions can re-trigger.
|
|
115
|
+
*/
|
|
116
|
+
export declare function __resetUnsupportedProvidersWarned(): void;
|
|
117
|
+
export declare function extractStreamTokens(finalChunk: unknown, provider: AiProvider): TokenUsage;
|
|
118
|
+
export declare class TokenAccumulator {
|
|
119
|
+
private provider;
|
|
120
|
+
private latestUsage;
|
|
121
|
+
private finalized;
|
|
122
|
+
constructor(provider: AiProvider);
|
|
123
|
+
addChunk(chunk: unknown): void;
|
|
124
|
+
finalize(): TokenUsage;
|
|
125
|
+
/**
|
|
126
|
+
* Reset the accumulator so it can be reused for a new stream
|
|
127
|
+
*. Zeroes the latest usage snapshot and clears the
|
|
128
|
+
* `finalized` flag. The provider binding is preserved — to track a
|
|
129
|
+
* different provider, construct a new `TokenAccumulator`.
|
|
130
|
+
*
|
|
131
|
+
* Useful when a streaming operation retries mid-stream (provider-side
|
|
132
|
+
* disconnect, client-side reconnect): instead of allocating a fresh
|
|
133
|
+
* instance for each attempt, the caller can `reset()` the existing one.
|
|
134
|
+
* Without this method `addChunk()` is a no-op after `finalize()` and
|
|
135
|
+
* subsequent `finalize()` calls return the stale snapshot.
|
|
136
|
+
*/
|
|
137
|
+
reset(): void;
|
|
138
|
+
private addAnthropicChunk;
|
|
139
|
+
private addGeminiChunk;
|
|
140
|
+
private addOpenAIChunk;
|
|
141
|
+
private addCohereChunk;
|
|
142
|
+
private addMistralChunk;
|
|
143
|
+
private addBedrockChunk;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/shared/tokens.ts"],"names":[],"mappings":"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"}
|