@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,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the Claude Code session_id for the running MCP process.
|
|
3
|
+
*
|
|
4
|
+
* Two sources, in order:
|
|
5
|
+
* 1. `CLAUDE_JOB_DIR` env var → read `<dir>/state.json`, regex-extract the
|
|
6
|
+
* session UUID from the `linkScanPath` field's filename. Instant; used
|
|
7
|
+
* by background-job MCPs.
|
|
8
|
+
* 2. PPID breadcrumb at `<storage>/session-by-ppid/<process.ppid>.txt` —
|
|
9
|
+
* written by the hook collector on every tool call. Polled at exponential
|
|
10
|
+
* backoff: 100ms, 200ms, 500ms, 1s, 2s, then steady at 2s. No hard
|
|
11
|
+
* timeout; logs a single WARN at 60s if still unresolved.
|
|
12
|
+
*
|
|
13
|
+
* The MCP must never fabricate its own session_id. If neither path resolves,
|
|
14
|
+
* tool handlers should report "session_id not yet resolved" rather than make
|
|
15
|
+
* one up.
|
|
16
|
+
*/
|
|
17
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
18
|
+
import { resolve, basename } from 'node:path';
|
|
19
|
+
import { homedir } from 'node:os';
|
|
20
|
+
import { createLogger } from '../shared/index.js';
|
|
21
|
+
const logger = createLogger('session-resolver');
|
|
22
|
+
const SESSION_ID_RE = /^[a-zA-Z0-9_-]{1,128}$/;
|
|
23
|
+
const DEFAULT_STORAGE_DIR = resolve(homedir(), '.newrelic-preflight');
|
|
24
|
+
const POLL_SCHEDULE_MS = [100, 200, 500, 1000, 2000];
|
|
25
|
+
const STEADY_POLL_MS = 2000;
|
|
26
|
+
const WARN_AFTER_MS = 60_000;
|
|
27
|
+
/**
|
|
28
|
+
* Try to resolve the session_id synchronously from `CLAUDE_JOB_DIR/state.json`.
|
|
29
|
+
* Returns the validated session_id or null.
|
|
30
|
+
*/
|
|
31
|
+
export function resolveFromJobDir(claudeJobDir) {
|
|
32
|
+
if (!claudeJobDir || typeof claudeJobDir !== 'string')
|
|
33
|
+
return null;
|
|
34
|
+
const statePath = resolve(claudeJobDir, 'state.json');
|
|
35
|
+
if (!existsSync(statePath))
|
|
36
|
+
return null;
|
|
37
|
+
let raw;
|
|
38
|
+
try {
|
|
39
|
+
raw = readFileSync(statePath, 'utf-8');
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
logger.debug('CLAUDE_JOB_DIR/state.json unreadable', { error: String(err) });
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
let parsed;
|
|
46
|
+
try {
|
|
47
|
+
parsed = JSON.parse(raw);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
logger.debug('CLAUDE_JOB_DIR/state.json invalid JSON', { error: String(err) });
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
if (parsed === null || typeof parsed !== 'object')
|
|
54
|
+
return null;
|
|
55
|
+
const linkScanPath = parsed.linkScanPath;
|
|
56
|
+
if (typeof linkScanPath !== 'string' || linkScanPath.length === 0)
|
|
57
|
+
return null;
|
|
58
|
+
// The session UUID is the basename minus its extension. Validate against
|
|
59
|
+
// the same character class used everywhere else so we never accept a
|
|
60
|
+
// path-traversing value.
|
|
61
|
+
const file = basename(linkScanPath);
|
|
62
|
+
const dot = file.lastIndexOf('.');
|
|
63
|
+
const sid = dot > 0 ? file.slice(0, dot) : file;
|
|
64
|
+
if (!SESSION_ID_RE.test(sid))
|
|
65
|
+
return null;
|
|
66
|
+
return sid;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Try to resolve the session_id synchronously from the PPID breadcrumb file.
|
|
70
|
+
* Returns the validated session_id or null.
|
|
71
|
+
*/
|
|
72
|
+
export function resolveFromBreadcrumb(storagePath, ppid) {
|
|
73
|
+
if (typeof ppid !== 'number' || ppid <= 0)
|
|
74
|
+
return null;
|
|
75
|
+
const breadcrumbPath = resolve(storagePath, 'session-by-ppid', `${ppid}.txt`);
|
|
76
|
+
if (!existsSync(breadcrumbPath))
|
|
77
|
+
return null;
|
|
78
|
+
let raw;
|
|
79
|
+
try {
|
|
80
|
+
raw = readFileSync(breadcrumbPath, 'utf-8');
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
logger.debug('Breadcrumb file unreadable', { error: String(err) });
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const sid = raw.trim();
|
|
87
|
+
if (!SESSION_ID_RE.test(sid))
|
|
88
|
+
return null;
|
|
89
|
+
return sid;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Returns the next poll delay for attempt index `i` (0-based).
|
|
93
|
+
* Schedule: 100ms, 200ms, 500ms, 1s, 2s, then steady 2s.
|
|
94
|
+
*/
|
|
95
|
+
export function nextDelayMs(attempt) {
|
|
96
|
+
if (attempt < POLL_SCHEDULE_MS.length)
|
|
97
|
+
return POLL_SCHEDULE_MS[attempt];
|
|
98
|
+
return STEADY_POLL_MS;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Resolve the Claude Code session_id, polling forever if needed.
|
|
102
|
+
*
|
|
103
|
+
* - First tries `CLAUDE_JOB_DIR` (synchronous, free).
|
|
104
|
+
* - Falls back to the PPID breadcrumb with exponential backoff polling.
|
|
105
|
+
* - Resolves to a validated session_id string when found. Never resolves to
|
|
106
|
+
* null; the only way out is success, the optional `signal`, or the caller
|
|
107
|
+
* stopping the surrounding process.
|
|
108
|
+
* - Logs a single WARN at 60s if still unresolved.
|
|
109
|
+
*
|
|
110
|
+
* Pass an `AbortSignal` to allow shutdown to break the loop.
|
|
111
|
+
*/
|
|
112
|
+
export async function resolveSessionId(options = {}) {
|
|
113
|
+
const claudeJobDir = options.claudeJobDir !== undefined
|
|
114
|
+
? options.claudeJobDir
|
|
115
|
+
: (process.env.CLAUDE_JOB_DIR ?? null);
|
|
116
|
+
const ppid = options.ppid ?? process.ppid;
|
|
117
|
+
const storagePath = options.storagePath ?? DEFAULT_STORAGE_DIR;
|
|
118
|
+
// Fast path: CLAUDE_JOB_DIR is set and contains a usable state.json. Used
|
|
119
|
+
// by background-job MCPs where the parent doesn't fire hooks.
|
|
120
|
+
const fromJobDir = resolveFromJobDir(claudeJobDir);
|
|
121
|
+
if (fromJobDir) {
|
|
122
|
+
logger.info('Resolved session_id from CLAUDE_JOB_DIR', { sessionId: fromJobDir });
|
|
123
|
+
return fromJobDir;
|
|
124
|
+
}
|
|
125
|
+
// Synchronous attempt before we wait — common case is the breadcrumb is
|
|
126
|
+
// already on disk because the user already typed at least one message.
|
|
127
|
+
const immediate = resolveFromBreadcrumb(storagePath, ppid);
|
|
128
|
+
if (immediate) {
|
|
129
|
+
logger.info('Resolved session_id from breadcrumb (immediate)', { sessionId: immediate });
|
|
130
|
+
return immediate;
|
|
131
|
+
}
|
|
132
|
+
const startTime = Date.now();
|
|
133
|
+
let warnedAt60s = false;
|
|
134
|
+
let attempt = 0;
|
|
135
|
+
return new Promise((resolvePromise, rejectPromise) => {
|
|
136
|
+
const onAbort = () => {
|
|
137
|
+
rejectPromise(new Error('session resolution aborted'));
|
|
138
|
+
};
|
|
139
|
+
if (options.signal) {
|
|
140
|
+
if (options.signal.aborted) {
|
|
141
|
+
onAbort();
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
options.signal.addEventListener('abort', onAbort, { once: true });
|
|
145
|
+
// Re-check after registering in case the signal fired in the gap
|
|
146
|
+
// between the earlier aborted check and addEventListener.
|
|
147
|
+
if (options.signal.aborted) {
|
|
148
|
+
onAbort();
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const tick = () => {
|
|
153
|
+
if (options.signal?.aborted) {
|
|
154
|
+
options.signal.removeEventListener('abort', onAbort);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const sid = resolveFromBreadcrumb(storagePath, ppid);
|
|
158
|
+
if (sid) {
|
|
159
|
+
const elapsed = Date.now() - startTime;
|
|
160
|
+
logger.info('Resolved session_id from breadcrumb', { sessionId: sid, elapsedMs: elapsed });
|
|
161
|
+
if (options.signal)
|
|
162
|
+
options.signal.removeEventListener('abort', onAbort);
|
|
163
|
+
resolvePromise(sid);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const elapsed = Date.now() - startTime;
|
|
167
|
+
if (!warnedAt60s && elapsed >= WARN_AFTER_MS && !options.suppressWarn) {
|
|
168
|
+
warnedAt60s = true;
|
|
169
|
+
logger.warn('session_id unresolved after 60s — breadcrumb missing; check that hook collector is installed and writing.');
|
|
170
|
+
}
|
|
171
|
+
const delay = nextDelayMs(attempt++);
|
|
172
|
+
const handle = setTimeout(tick, delay);
|
|
173
|
+
// Don't keep the event loop alive on this timer alone — Ctrl+C / stdin
|
|
174
|
+
// close should be able to terminate the MCP without explicitly
|
|
175
|
+
// cancelling resolution.
|
|
176
|
+
handle.unref?.();
|
|
177
|
+
};
|
|
178
|
+
const delay = nextDelayMs(attempt++);
|
|
179
|
+
const handle = setTimeout(tick, delay);
|
|
180
|
+
handle.unref?.();
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Returns true for session IDs that are MCP-internal synthetic identifiers
|
|
185
|
+
* (not real Claude Code session IDs). These should be hidden from user-facing
|
|
186
|
+
* surfaces such as the dashboard session list and audit trail.
|
|
187
|
+
*
|
|
188
|
+
* Single source of truth: kept here alongside the other session-ID logic so
|
|
189
|
+
* that adding a new synthetic prefix only requires one change.
|
|
190
|
+
*/
|
|
191
|
+
export function isSyntheticSessionId(id) {
|
|
192
|
+
if (!id)
|
|
193
|
+
return false;
|
|
194
|
+
return id.startsWith('local-') || id.startsWith('proxy-');
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=session-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-resolver.js","sourceRoot":"","sources":["../../src/hooks/session-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool-specific field parsers for Claude Code hook events.
|
|
3
|
+
*
|
|
4
|
+
* Each parser extracts structured metadata from a tool's `tool_input` and
|
|
5
|
+
* `tool_response` objects. The dispatcher routes to the appropriate parser
|
|
6
|
+
* based on tool name. Unknown tools return an empty record.
|
|
7
|
+
*
|
|
8
|
+
* All parsers are defensive — null/undefined inputs return {}, and any
|
|
9
|
+
* parsing error is caught and returns {}.
|
|
10
|
+
*/
|
|
11
|
+
type ToolFields = Record<string, string | number | boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* Extract tool-specific structured fields from a tool's input and output.
|
|
14
|
+
* Returns a flat record of fields to spread into the ToolCallRecord.
|
|
15
|
+
* Unknown tools or parsing errors return {}.
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseToolSpecificFields(toolName: string, input: unknown, output: unknown): ToolFields;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=tool-parsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-parsers.d.ts","sourceRoot":"","sources":["../../src/hooks/tool-parsers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AA+M5D;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,GACd,UAAU,CA2BZ"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool-specific field parsers for Claude Code hook events.
|
|
3
|
+
*
|
|
4
|
+
* Each parser extracts structured metadata from a tool's `tool_input` and
|
|
5
|
+
* `tool_response` objects. The dispatcher routes to the appropriate parser
|
|
6
|
+
* based on tool name. Unknown tools return an empty record.
|
|
7
|
+
*
|
|
8
|
+
* All parsers are defensive — null/undefined inputs return {}, and any
|
|
9
|
+
* parsing error is caught and returns {}.
|
|
10
|
+
*/
|
|
11
|
+
import { classifyBash } from './bash-classifier.js';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Helpers
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
function countLines(text) {
|
|
16
|
+
if (text === '')
|
|
17
|
+
return 0;
|
|
18
|
+
return (text.match(/\n/g) || []).length + 1;
|
|
19
|
+
}
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Bash command classification heuristics
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
const TEST_COMMAND_RE = /\b(jest|vitest|mocha|pytest|go\s+test|npm\s+test|npm\s+run\s+test|npx\s+jest|npx\s+vitest|cargo\s+test|bun\s+test|bun\s+run\s+test|pnpm\s+test|pnpm\s+run\s+test|yarn\s+test)\b/i;
|
|
24
|
+
const BUILD_COMMAND_RE = /\b(tsc|npm\s+run\s+build|make\b|cargo\s+build|go\s+build|webpack|vite\s+build)\b/i;
|
|
25
|
+
const LINT_COMMAND_RE = /\b(eslint|prettier|pylint|golangci-lint|rubocop|clippy|biome\s+(check|lint))\b/i;
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Per-tool parsers
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
function parseRead(input) {
|
|
30
|
+
const fields = {};
|
|
31
|
+
if (typeof input.file_path === 'string')
|
|
32
|
+
fields.filePath = input.file_path;
|
|
33
|
+
if (typeof input.offset === 'number')
|
|
34
|
+
fields.lineOffset = input.offset;
|
|
35
|
+
if (typeof input.limit === 'number')
|
|
36
|
+
fields.lineLimit = input.limit;
|
|
37
|
+
return fields;
|
|
38
|
+
}
|
|
39
|
+
function parseWrite(input) {
|
|
40
|
+
const fields = {};
|
|
41
|
+
if (typeof input.file_path === 'string')
|
|
42
|
+
fields.filePath = input.file_path;
|
|
43
|
+
if (typeof input.contentLength === 'number') {
|
|
44
|
+
fields.contentLength = input.contentLength;
|
|
45
|
+
if (typeof input.lineCount === 'number')
|
|
46
|
+
fields.lineCount = input.lineCount;
|
|
47
|
+
}
|
|
48
|
+
else if (typeof input.content === 'string') {
|
|
49
|
+
fields.contentLength = input.content.length;
|
|
50
|
+
fields.lineCount = countLines(input.content);
|
|
51
|
+
}
|
|
52
|
+
return fields;
|
|
53
|
+
}
|
|
54
|
+
function parseEdit(input) {
|
|
55
|
+
const fields = {};
|
|
56
|
+
if (typeof input.file_path === 'string')
|
|
57
|
+
fields.filePath = input.file_path;
|
|
58
|
+
if (typeof input.oldStringLength === 'number') {
|
|
59
|
+
fields.oldStringLength = input.oldStringLength;
|
|
60
|
+
if (typeof input.oldLineCount === 'number')
|
|
61
|
+
fields.oldLineCount = input.oldLineCount;
|
|
62
|
+
}
|
|
63
|
+
else if (typeof input.old_string === 'string') {
|
|
64
|
+
fields.oldStringLength = input.old_string.length;
|
|
65
|
+
fields.oldLineCount = countLines(input.old_string);
|
|
66
|
+
}
|
|
67
|
+
if (typeof input.newStringLength === 'number') {
|
|
68
|
+
fields.newStringLength = input.newStringLength;
|
|
69
|
+
if (typeof input.newLineCount === 'number')
|
|
70
|
+
fields.newLineCount = input.newLineCount;
|
|
71
|
+
if (typeof input.isDelete === 'boolean')
|
|
72
|
+
fields.isDelete = input.isDelete;
|
|
73
|
+
}
|
|
74
|
+
else if (typeof input.new_string === 'string') {
|
|
75
|
+
fields.newStringLength = input.new_string.length;
|
|
76
|
+
fields.newLineCount = input.new_string.length > 0 ? countLines(input.new_string) : 0;
|
|
77
|
+
fields.isDelete = input.new_string.length === 0;
|
|
78
|
+
}
|
|
79
|
+
if (typeof input.replace_all === 'boolean')
|
|
80
|
+
fields.replaceAll = input.replace_all;
|
|
81
|
+
return fields;
|
|
82
|
+
}
|
|
83
|
+
function parseBash(input) {
|
|
84
|
+
const fields = {};
|
|
85
|
+
if (typeof input.command === 'string') {
|
|
86
|
+
fields.command = input.command;
|
|
87
|
+
fields.isTestCommand = TEST_COMMAND_RE.test(input.command);
|
|
88
|
+
fields.isBuildCommand = BUILD_COMMAND_RE.test(input.command);
|
|
89
|
+
fields.isLintCommand = LINT_COMMAND_RE.test(input.command);
|
|
90
|
+
// Coarse classification for downstream telemetry: turns the polymorphic
|
|
91
|
+
// command string into a fixed category (git / test-runner / build / ...)
|
|
92
|
+
// so dashboards and trackers can bucket Bash by shape, not just by name.
|
|
93
|
+
const classification = classifyBash(input.command);
|
|
94
|
+
fields.bashCategory = classification.category;
|
|
95
|
+
fields.bashLeading = classification.leading;
|
|
96
|
+
fields.bashDestructive = classification.isDestructive;
|
|
97
|
+
fields.bashNetwork = classification.isNetwork;
|
|
98
|
+
}
|
|
99
|
+
if (typeof input.description === 'string')
|
|
100
|
+
fields.commandDescription = input.description;
|
|
101
|
+
if (typeof input.timeout === 'number')
|
|
102
|
+
fields.commandTimeout = input.timeout;
|
|
103
|
+
if (typeof input.run_in_background === 'boolean')
|
|
104
|
+
fields.runInBackground = input.run_in_background;
|
|
105
|
+
return fields;
|
|
106
|
+
}
|
|
107
|
+
function parseGrep(input) {
|
|
108
|
+
const fields = {};
|
|
109
|
+
if (typeof input.pattern === 'string')
|
|
110
|
+
fields.pattern = input.pattern;
|
|
111
|
+
if (typeof input.path === 'string')
|
|
112
|
+
fields.grepPath = input.path;
|
|
113
|
+
if (typeof input.output_mode === 'string')
|
|
114
|
+
fields.outputMode = input.output_mode;
|
|
115
|
+
return fields;
|
|
116
|
+
}
|
|
117
|
+
function parseGlob(input) {
|
|
118
|
+
const fields = {};
|
|
119
|
+
if (typeof input.pattern === 'string')
|
|
120
|
+
fields.pattern = input.pattern;
|
|
121
|
+
if (typeof input.path === 'string')
|
|
122
|
+
fields.globPath = input.path;
|
|
123
|
+
return fields;
|
|
124
|
+
}
|
|
125
|
+
function parseAgent(input) {
|
|
126
|
+
const fields = {};
|
|
127
|
+
if (typeof input.description === 'string')
|
|
128
|
+
fields.agentDescription = input.description;
|
|
129
|
+
if (typeof input.subagent_type === 'string')
|
|
130
|
+
fields.subagentType = input.subagent_type;
|
|
131
|
+
if (typeof input.promptLength === 'number') {
|
|
132
|
+
fields.promptLength = input.promptLength;
|
|
133
|
+
}
|
|
134
|
+
else if (typeof input.prompt === 'string') {
|
|
135
|
+
fields.promptLength = input.prompt.length;
|
|
136
|
+
}
|
|
137
|
+
if (typeof input.run_in_background === 'boolean')
|
|
138
|
+
fields.runInBackground = input.run_in_background;
|
|
139
|
+
if (typeof input.name === 'string')
|
|
140
|
+
fields.agentName = input.name;
|
|
141
|
+
if (typeof input.team_name === 'string')
|
|
142
|
+
fields.agentTeamName = input.team_name;
|
|
143
|
+
if (typeof input.isolation === 'string')
|
|
144
|
+
fields.agentIsolation = input.isolation;
|
|
145
|
+
if (typeof input.model === 'string')
|
|
146
|
+
fields.agentModel = input.model;
|
|
147
|
+
return fields;
|
|
148
|
+
}
|
|
149
|
+
function parseAskUserQuestion(input) {
|
|
150
|
+
const fields = {};
|
|
151
|
+
if (Array.isArray(input.questions))
|
|
152
|
+
fields.questionCount = input.questions.length;
|
|
153
|
+
return fields;
|
|
154
|
+
}
|
|
155
|
+
function parseTaskCreate(input) {
|
|
156
|
+
const fields = {};
|
|
157
|
+
if (typeof input.subject === 'string')
|
|
158
|
+
fields.taskSubject = input.subject;
|
|
159
|
+
return fields;
|
|
160
|
+
}
|
|
161
|
+
function parseTaskUpdate(input) {
|
|
162
|
+
const fields = {};
|
|
163
|
+
if (typeof input.taskId === 'string')
|
|
164
|
+
fields.taskId = input.taskId;
|
|
165
|
+
if (typeof input.status === 'string')
|
|
166
|
+
fields.taskStatus = input.status;
|
|
167
|
+
if (typeof input.subject === 'string')
|
|
168
|
+
fields.taskSubject = input.subject;
|
|
169
|
+
return fields;
|
|
170
|
+
}
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
// Dispatcher
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
const INPUT_PARSERS = {
|
|
175
|
+
Read: parseRead,
|
|
176
|
+
Write: parseWrite,
|
|
177
|
+
Edit: parseEdit,
|
|
178
|
+
Bash: parseBash,
|
|
179
|
+
Grep: parseGrep,
|
|
180
|
+
Glob: parseGlob,
|
|
181
|
+
Agent: parseAgent,
|
|
182
|
+
AskUserQuestion: parseAskUserQuestion,
|
|
183
|
+
TaskCreate: parseTaskCreate,
|
|
184
|
+
TaskUpdate: parseTaskUpdate,
|
|
185
|
+
};
|
|
186
|
+
function parseEditOutput(output) {
|
|
187
|
+
const fields = {};
|
|
188
|
+
if (typeof output.editSuccess === 'boolean')
|
|
189
|
+
fields.editSuccess = output.editSuccess;
|
|
190
|
+
if (typeof output.editMatched === 'boolean')
|
|
191
|
+
fields.editMatched = output.editMatched;
|
|
192
|
+
if (typeof output.editError === 'string')
|
|
193
|
+
fields.editErrorReason = output.editError;
|
|
194
|
+
return fields;
|
|
195
|
+
}
|
|
196
|
+
function parseGrepOutput(output) {
|
|
197
|
+
const fields = {};
|
|
198
|
+
if (typeof output.grepMatchCount === 'number')
|
|
199
|
+
fields.grepMatchCount = output.grepMatchCount;
|
|
200
|
+
if (typeof output.grepResultLines === 'number')
|
|
201
|
+
fields.grepResultLines = output.grepResultLines;
|
|
202
|
+
return fields;
|
|
203
|
+
}
|
|
204
|
+
function parseAgentOutput(output) {
|
|
205
|
+
const fields = {};
|
|
206
|
+
if (typeof output.agentCompleted === 'boolean')
|
|
207
|
+
fields.agentCompleted = output.agentCompleted;
|
|
208
|
+
if (typeof output.agentInterrupted === 'boolean')
|
|
209
|
+
fields.agentInterrupted = output.agentInterrupted;
|
|
210
|
+
if (typeof output.agentResultLength === 'number')
|
|
211
|
+
fields.agentResultLength = output.agentResultLength;
|
|
212
|
+
return fields;
|
|
213
|
+
}
|
|
214
|
+
const OUTPUT_PARSERS = {
|
|
215
|
+
Bash: (output) => {
|
|
216
|
+
const fields = {};
|
|
217
|
+
if (typeof output.exitCode === 'number') {
|
|
218
|
+
fields.exitCode = output.exitCode;
|
|
219
|
+
}
|
|
220
|
+
else if (typeof output.exitCode === 'string') {
|
|
221
|
+
const parsed = Number(output.exitCode);
|
|
222
|
+
if (!Number.isNaN(parsed))
|
|
223
|
+
fields.exitCode = parsed;
|
|
224
|
+
}
|
|
225
|
+
return fields;
|
|
226
|
+
},
|
|
227
|
+
Edit: parseEditOutput,
|
|
228
|
+
Grep: parseGrepOutput,
|
|
229
|
+
Agent: parseAgentOutput,
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* Extract tool-specific structured fields from a tool's input and output.
|
|
233
|
+
* Returns a flat record of fields to spread into the ToolCallRecord.
|
|
234
|
+
* Unknown tools or parsing errors return {}.
|
|
235
|
+
*/
|
|
236
|
+
export function parseToolSpecificFields(toolName, input, output) {
|
|
237
|
+
try {
|
|
238
|
+
const fields = {};
|
|
239
|
+
// Normalize tool name: try exact match first, then capitalize first letter
|
|
240
|
+
// to handle variants like "read" → "Read" from non-Claude-Code platforms.
|
|
241
|
+
const normalizedName = INPUT_PARSERS[toolName] !== undefined
|
|
242
|
+
? toolName
|
|
243
|
+
: toolName.charAt(0).toUpperCase() + toolName.slice(1);
|
|
244
|
+
// Parse input fields
|
|
245
|
+
const inputParser = INPUT_PARSERS[normalizedName];
|
|
246
|
+
if (inputParser && input !== null && input !== undefined && typeof input === 'object') {
|
|
247
|
+
Object.assign(fields, inputParser(input));
|
|
248
|
+
}
|
|
249
|
+
// Parse output fields
|
|
250
|
+
const outputParser = OUTPUT_PARSERS[normalizedName];
|
|
251
|
+
if (outputParser && output !== null && output !== undefined && typeof output === 'object') {
|
|
252
|
+
Object.assign(fields, outputParser(output));
|
|
253
|
+
}
|
|
254
|
+
return fields;
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
return {};
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=tool-parsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-parsers.js","sourceRoot":"","sources":["../../src/hooks/tool-parsers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIpD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E,MAAM,eAAe,GACnB,kLAAkL,CAAC;AAErL,MAAM,gBAAgB,GACpB,mFAAmF,CAAC;AAEtF,MAAM,eAAe,GACnB,iFAAiF,CAAC;AAEpF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,SAAS,SAAS,CAAC,KAA8B;IAC/C,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC;IAC3E,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IACvE,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;IACpE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,KAA8B;IAChD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC;IAC3E,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QAC3C,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YAAE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAC9E,CAAC;SAAM,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5C,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,KAA8B;IAC/C,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC;IAC3E,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAC/C,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;YAAE,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACvF,CAAC;SAAM,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;QACjD,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAC/C,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;YAAE,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACrF,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC5E,CAAC;SAAM,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;QACjD,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC;IAClF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,KAA8B;IAC/C,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC/B,MAAM,CAAC,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,CAAC,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,CAAC,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE3D,wEAAwE;QACxE,yEAAyE;QACzE,yEAAyE;QACzE,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC;QAC9C,MAAM,CAAC,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC;QAC5C,MAAM,CAAC,eAAe,GAAG,cAAc,CAAC,aAAa,CAAC;QACtD,MAAM,CAAC,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QAAE,MAAM,CAAC,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC;IACzF,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC;IAC7E,IAAI,OAAO,KAAK,CAAC,iBAAiB,KAAK,SAAS;QAC9C,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,KAA8B;IAC/C,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACtE,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;IACjE,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC;IACjF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,KAA8B;IAC/C,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACtE,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,KAA8B;IAChD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QAAE,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC;IACvF,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;QAAE,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC;IACvF,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAC3C,CAAC;SAAM,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,iBAAiB,KAAK,SAAS;QAC9C,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC;IACnD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAClE,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QAAE,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC;IAChF,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QAAE,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC;IACjF,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IACrE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA8B;IAC1D,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;IAClF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,KAA8B;IACrD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,KAA8B;IACrD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACnE,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IACvE,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,aAAa,GAAmE;IACpF,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,UAAU;IACjB,eAAe,EAAE,oBAAoB;IACrC,UAAU,EAAE,eAAe;IAC3B,UAAU,EAAE,eAAe;CAC5B,CAAC;AAEF,SAAS,eAAe,CAAC,MAA+B;IACtD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,SAAS;QAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACrF,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,SAAS;QAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACrF,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;QAAE,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC;IACpF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,MAA+B;IACtD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ;QAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAC7F,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ;QAAE,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IAChG,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA+B;IACvD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,SAAS;QAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAC9F,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,SAAS;QAC9C,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACpD,IAAI,OAAO,MAAM,CAAC,iBAAiB,KAAK,QAAQ;QAC9C,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACtD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,cAAc,GAAoE;IACtF,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACpC,CAAC;aAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;QACtD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,eAAe;IACrB,KAAK,EAAE,gBAAgB;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,KAAc,EACd,MAAe;IAEf,IAAI,CAAC;QACH,MAAM,MAAM,GAAe,EAAE,CAAC;QAE9B,2EAA2E;QAC3E,0EAA0E;QAC1E,MAAM,cAAc,GAClB,aAAa,CAAC,QAAQ,CAAC,KAAK,SAAS;YACnC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE3D,qBAAqB;QACrB,MAAM,WAAW,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,WAAW,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtF,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,KAAgC,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,sBAAsB;QACtB,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;QACpD,IAAI,YAAY,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1F,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,MAAiC,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import 'dotenv/config';
|
|
3
|
+
import { VERSION } from './shared/index.js';
|
|
4
|
+
import { LocalStore } from './storage/index.js';
|
|
5
|
+
import { LiveSessionRegistry } from './metrics/live-session-registry.js';
|
|
6
|
+
import { DashboardServer } from './dashboard/dashboard-server.js';
|
|
7
|
+
import type { CliOptions } from './types.js';
|
|
8
|
+
export { VERSION };
|
|
9
|
+
export { NrMcpServer, createServer } from './server.js';
|
|
10
|
+
export { loadMcpConfig, redactSensitive } from './config.js';
|
|
11
|
+
export type { McpServerConfig } from './config.js';
|
|
12
|
+
export { LocalStore } from './storage/index.js';
|
|
13
|
+
export type { HookEvent, SessionSummary, AuditEntry } from './storage/index.js';
|
|
14
|
+
export type { CliOptions, ServerOptions } from './types.js';
|
|
15
|
+
export { ProxyManager } from './proxy/index.js';
|
|
16
|
+
export type { ProxyToolCallRecord, ProxyRequestRecord, UpstreamConfig } from './proxy/index.js';
|
|
17
|
+
export { ClaudeCodeAdapter, CursorAdapter, WindsurfAdapter, CopilotAdapter, ZedAdapter, ContinueAdapter, AmazonQAdapter, parseCopilotUsageResponse, GenericMcpAdapter, validateReportToolCallInput, REPORT_TOOL_CALL_TOOL, REPORT_SESSION_START_TOOL, REPORT_SESSION_END_TOOL, PlatformRegistry, createDefaultRegistry, } from './platforms/index.js';
|
|
18
|
+
export type { NormalizedToolCall, PlatformConfig, PlatformSessionMetadata, PlatformAdapter, ReportToolCallInput, ReportSessionStartInput, ReportSessionEndInput, } from './platforms/index.js';
|
|
19
|
+
export declare function maskCredential(key: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Result of evaluating a dashboard-server start error.
|
|
22
|
+
*
|
|
23
|
+
* - kind: 'skip' — EADDRINUSE was observed; caller should drop the dashboard
|
|
24
|
+
* server reference and continue without binding. The `message` field is a
|
|
25
|
+
* human-readable INFO-level log line explaining the situation.
|
|
26
|
+
* - kind: 'rethrow' — non-EADDRINUSE error (or non-error value); caller should
|
|
27
|
+
* re-throw `error` unchanged.
|
|
28
|
+
*/
|
|
29
|
+
export type DashboardStartFailure = {
|
|
30
|
+
kind: 'skip';
|
|
31
|
+
message: string;
|
|
32
|
+
} | {
|
|
33
|
+
kind: 'rethrow';
|
|
34
|
+
error: unknown;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Decide how to handle a failure returned from `DashboardServer.start()`.
|
|
38
|
+
*
|
|
39
|
+
* When N concurrent `preflight --stdio` instances launch (one per
|
|
40
|
+
* Claude Code session) only one can bind the dashboard port; the rest receive
|
|
41
|
+
* EADDRINUSE. Rather than fataling the whole MCP server (which would render
|
|
42
|
+
* the session's tools unusable in Claude Code's UI), we log an INFO line and
|
|
43
|
+
* continue without the dashboard. Other errors still propagate.
|
|
44
|
+
*/
|
|
45
|
+
export declare function classifyDashboardStartError(err: unknown, host: string, port: number): DashboardStartFailure;
|
|
46
|
+
/**
|
|
47
|
+
* Default interval (ms) between dashboard re-bind attempts when this MCP
|
|
48
|
+
* started in headless mode (Fix 1 EADDRINUSE skip path). Overridable via
|
|
49
|
+
* NR_AI_DASHBOARD_REPOLL_MS — kept simple to avoid threading a new config
|
|
50
|
+
* field through the loader for what is essentially a knob for tests.
|
|
51
|
+
*/
|
|
52
|
+
export declare const DEFAULT_DASHBOARD_REPOLL_MS = 30000;
|
|
53
|
+
export declare function getDashboardRepollIntervalMs(): number;
|
|
54
|
+
/**
|
|
55
|
+
* Side-effects wired up once the dashboard HTTP server has bound the port.
|
|
56
|
+
* Runs on the initial-bind success path and on the re-poll takeover path so
|
|
57
|
+
* a headless MCP that later seizes the dashboard performs the same setup
|
|
58
|
+
* (orphan GC, openOnStart warning) as one that bound on first try.
|
|
59
|
+
*
|
|
60
|
+
* Returns the orphan-GC interval handle so the shutdown path can clear it.
|
|
61
|
+
*/
|
|
62
|
+
export interface DashboardPostBindDeps {
|
|
63
|
+
readonly localStore: LocalStore;
|
|
64
|
+
readonly liveSessionRegistry: LiveSessionRegistry | undefined;
|
|
65
|
+
readonly openOnStart: boolean;
|
|
66
|
+
}
|
|
67
|
+
export declare function setupDashboardPostBind(addr: {
|
|
68
|
+
address: string;
|
|
69
|
+
port: number;
|
|
70
|
+
}, deps: DashboardPostBindDeps): NodeJS.Timeout;
|
|
71
|
+
/**
|
|
72
|
+
* Schedule periodic re-bind attempts after a headless start (Fix 1 path).
|
|
73
|
+
*
|
|
74
|
+
* After Fix 1 the first MCP to launch wins port 7777 and serves the
|
|
75
|
+
* dashboard; the rest run headless. If the owner exits while the headless
|
|
76
|
+
* MCPs are still alive, the port is freed and nobody picks it up — the
|
|
77
|
+
* dashboard goes dead. This re-poll closes that gap: every
|
|
78
|
+
* `intervalMs` (default 30s) the headless MCP retries `start()`, and the
|
|
79
|
+
* first one to succeed promotes itself to dashboard owner and runs the
|
|
80
|
+
* post-bind setup (GC interval, etc.).
|
|
81
|
+
*
|
|
82
|
+
* The interval is unref'd so a process whose only remaining handle is this
|
|
83
|
+
* timer can still exit cleanly when stdin closes (matters for stdio mode).
|
|
84
|
+
*/
|
|
85
|
+
export interface DashboardRepollOptions {
|
|
86
|
+
readonly dashboardServer: DashboardServer;
|
|
87
|
+
readonly host: string;
|
|
88
|
+
readonly port: number;
|
|
89
|
+
readonly intervalMs?: number;
|
|
90
|
+
readonly postBind: (addr: {
|
|
91
|
+
address: string;
|
|
92
|
+
port: number;
|
|
93
|
+
}) => NodeJS.Timeout;
|
|
94
|
+
readonly onTakeover?: (gcInterval: NodeJS.Timeout) => void;
|
|
95
|
+
readonly logger?: {
|
|
96
|
+
info: (msg: string, meta?: Record<string, unknown>) => void;
|
|
97
|
+
warn: (msg: string, meta?: Record<string, unknown>) => void;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export declare function startDashboardRepoll(opts: DashboardRepollOptions): NodeJS.Timeout;
|
|
101
|
+
/**
|
|
102
|
+
* If argv[2] is a known subcommand, run it and return its exit code.
|
|
103
|
+
* Otherwise return null so main() can continue with its flag-based dispatch.
|
|
104
|
+
*/
|
|
105
|
+
export declare function dispatchSubcommand(argv: string[]): Promise<number | null>;
|
|
106
|
+
export declare function parseArgs(argv: string[]): CliOptions;
|
|
107
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|