@dotsetlabs/bellwether 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +291 -0
- package/LICENSE +21 -0
- package/README.md +739 -0
- package/dist/auth/credentials.d.ts +64 -0
- package/dist/auth/credentials.js +218 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.js +6 -0
- package/dist/auth/keychain.d.ts +64 -0
- package/dist/auth/keychain.js +268 -0
- package/dist/baseline/ab-testing.d.ts +80 -0
- package/dist/baseline/ab-testing.js +236 -0
- package/dist/baseline/ai-compatibility-scorer.d.ts +95 -0
- package/dist/baseline/ai-compatibility-scorer.js +606 -0
- package/dist/baseline/calibration.d.ts +77 -0
- package/dist/baseline/calibration.js +136 -0
- package/dist/baseline/category-matching.d.ts +85 -0
- package/dist/baseline/category-matching.js +289 -0
- package/dist/baseline/change-impact-analyzer.d.ts +98 -0
- package/dist/baseline/change-impact-analyzer.js +592 -0
- package/dist/baseline/comparator.d.ts +64 -0
- package/dist/baseline/comparator.js +916 -0
- package/dist/baseline/confidence.d.ts +55 -0
- package/dist/baseline/confidence.js +122 -0
- package/dist/baseline/converter.d.ts +61 -0
- package/dist/baseline/converter.js +585 -0
- package/dist/baseline/dependency-analyzer.d.ts +89 -0
- package/dist/baseline/dependency-analyzer.js +567 -0
- package/dist/baseline/deprecation-tracker.d.ts +133 -0
- package/dist/baseline/deprecation-tracker.js +322 -0
- package/dist/baseline/diff.d.ts +55 -0
- package/dist/baseline/diff.js +1584 -0
- package/dist/baseline/documentation-scorer.d.ts +205 -0
- package/dist/baseline/documentation-scorer.js +466 -0
- package/dist/baseline/embeddings.d.ts +118 -0
- package/dist/baseline/embeddings.js +251 -0
- package/dist/baseline/error-analyzer.d.ts +198 -0
- package/dist/baseline/error-analyzer.js +721 -0
- package/dist/baseline/evaluation/evaluator.d.ts +42 -0
- package/dist/baseline/evaluation/evaluator.js +323 -0
- package/dist/baseline/evaluation/expanded-dataset.d.ts +45 -0
- package/dist/baseline/evaluation/expanded-dataset.js +1164 -0
- package/dist/baseline/evaluation/golden-dataset.d.ts +58 -0
- package/dist/baseline/evaluation/golden-dataset.js +717 -0
- package/dist/baseline/evaluation/index.d.ts +15 -0
- package/dist/baseline/evaluation/index.js +15 -0
- package/dist/baseline/evaluation/types.d.ts +186 -0
- package/dist/baseline/evaluation/types.js +8 -0
- package/dist/baseline/external-dependency-detector.d.ts +181 -0
- package/dist/baseline/external-dependency-detector.js +524 -0
- package/dist/baseline/golden-output.d.ts +162 -0
- package/dist/baseline/golden-output.js +636 -0
- package/dist/baseline/health-scorer.d.ts +174 -0
- package/dist/baseline/health-scorer.js +451 -0
- package/dist/baseline/incremental-checker.d.ts +97 -0
- package/dist/baseline/incremental-checker.js +174 -0
- package/dist/baseline/index.d.ts +31 -0
- package/dist/baseline/index.js +42 -0
- package/dist/baseline/migration-generator.d.ts +137 -0
- package/dist/baseline/migration-generator.js +554 -0
- package/dist/baseline/migrations.d.ts +60 -0
- package/dist/baseline/migrations.js +197 -0
- package/dist/baseline/performance-tracker.d.ts +214 -0
- package/dist/baseline/performance-tracker.js +577 -0
- package/dist/baseline/pr-comment-generator.d.ts +117 -0
- package/dist/baseline/pr-comment-generator.js +546 -0
- package/dist/baseline/response-fingerprint.d.ts +127 -0
- package/dist/baseline/response-fingerprint.js +728 -0
- package/dist/baseline/response-schema-tracker.d.ts +129 -0
- package/dist/baseline/response-schema-tracker.js +420 -0
- package/dist/baseline/risk-scorer.d.ts +54 -0
- package/dist/baseline/risk-scorer.js +434 -0
- package/dist/baseline/saver.d.ts +89 -0
- package/dist/baseline/saver.js +554 -0
- package/dist/baseline/scenario-generator.d.ts +151 -0
- package/dist/baseline/scenario-generator.js +905 -0
- package/dist/baseline/schema-compare.d.ts +86 -0
- package/dist/baseline/schema-compare.js +557 -0
- package/dist/baseline/schema-evolution.d.ts +189 -0
- package/dist/baseline/schema-evolution.js +467 -0
- package/dist/baseline/semantic.d.ts +203 -0
- package/dist/baseline/semantic.js +908 -0
- package/dist/baseline/synonyms.d.ts +60 -0
- package/dist/baseline/synonyms.js +386 -0
- package/dist/baseline/telemetry.d.ts +165 -0
- package/dist/baseline/telemetry.js +294 -0
- package/dist/baseline/test-pruner.d.ts +120 -0
- package/dist/baseline/test-pruner.js +387 -0
- package/dist/baseline/types.d.ts +449 -0
- package/dist/baseline/types.js +5 -0
- package/dist/baseline/version.d.ts +138 -0
- package/dist/baseline/version.js +206 -0
- package/dist/cache/index.d.ts +5 -0
- package/dist/cache/index.js +5 -0
- package/dist/cache/response-cache.d.ts +151 -0
- package/dist/cache/response-cache.js +287 -0
- package/dist/ci/index.d.ts +60 -0
- package/dist/ci/index.js +342 -0
- package/dist/cli/commands/auth.d.ts +12 -0
- package/dist/cli/commands/auth.js +352 -0
- package/dist/cli/commands/badge.d.ts +3 -0
- package/dist/cli/commands/badge.js +74 -0
- package/dist/cli/commands/baseline-accept.d.ts +15 -0
- package/dist/cli/commands/baseline-accept.js +178 -0
- package/dist/cli/commands/baseline-migrate.d.ts +12 -0
- package/dist/cli/commands/baseline-migrate.js +164 -0
- package/dist/cli/commands/baseline.d.ts +14 -0
- package/dist/cli/commands/baseline.js +449 -0
- package/dist/cli/commands/beta.d.ts +10 -0
- package/dist/cli/commands/beta.js +231 -0
- package/dist/cli/commands/check.d.ts +11 -0
- package/dist/cli/commands/check.js +820 -0
- package/dist/cli/commands/cloud/badge.d.ts +3 -0
- package/dist/cli/commands/cloud/badge.js +74 -0
- package/dist/cli/commands/cloud/diff.d.ts +6 -0
- package/dist/cli/commands/cloud/diff.js +79 -0
- package/dist/cli/commands/cloud/history.d.ts +6 -0
- package/dist/cli/commands/cloud/history.js +102 -0
- package/dist/cli/commands/cloud/link.d.ts +9 -0
- package/dist/cli/commands/cloud/link.js +119 -0
- package/dist/cli/commands/cloud/login.d.ts +7 -0
- package/dist/cli/commands/cloud/login.js +499 -0
- package/dist/cli/commands/cloud/projects.d.ts +6 -0
- package/dist/cli/commands/cloud/projects.js +44 -0
- package/dist/cli/commands/cloud/shared.d.ts +7 -0
- package/dist/cli/commands/cloud/shared.js +42 -0
- package/dist/cli/commands/cloud/teams.d.ts +8 -0
- package/dist/cli/commands/cloud/teams.js +169 -0
- package/dist/cli/commands/cloud/upload.d.ts +8 -0
- package/dist/cli/commands/cloud/upload.js +181 -0
- package/dist/cli/commands/contract.d.ts +11 -0
- package/dist/cli/commands/contract.js +280 -0
- package/dist/cli/commands/discover.d.ts +3 -0
- package/dist/cli/commands/discover.js +82 -0
- package/dist/cli/commands/eval.d.ts +9 -0
- package/dist/cli/commands/eval.js +187 -0
- package/dist/cli/commands/explore.d.ts +11 -0
- package/dist/cli/commands/explore.js +437 -0
- package/dist/cli/commands/feedback.d.ts +9 -0
- package/dist/cli/commands/feedback.js +174 -0
- package/dist/cli/commands/golden.d.ts +12 -0
- package/dist/cli/commands/golden.js +407 -0
- package/dist/cli/commands/history.d.ts +10 -0
- package/dist/cli/commands/history.js +202 -0
- package/dist/cli/commands/init.d.ts +9 -0
- package/dist/cli/commands/init.js +219 -0
- package/dist/cli/commands/interview.d.ts +3 -0
- package/dist/cli/commands/interview.js +903 -0
- package/dist/cli/commands/link.d.ts +10 -0
- package/dist/cli/commands/link.js +169 -0
- package/dist/cli/commands/login.d.ts +7 -0
- package/dist/cli/commands/login.js +499 -0
- package/dist/cli/commands/preset.d.ts +33 -0
- package/dist/cli/commands/preset.js +297 -0
- package/dist/cli/commands/profile.d.ts +33 -0
- package/dist/cli/commands/profile.js +286 -0
- package/dist/cli/commands/registry.d.ts +11 -0
- package/dist/cli/commands/registry.js +146 -0
- package/dist/cli/commands/shared.d.ts +79 -0
- package/dist/cli/commands/shared.js +196 -0
- package/dist/cli/commands/teams.d.ts +8 -0
- package/dist/cli/commands/teams.js +169 -0
- package/dist/cli/commands/test.d.ts +9 -0
- package/dist/cli/commands/test.js +500 -0
- package/dist/cli/commands/upload.d.ts +8 -0
- package/dist/cli/commands/upload.js +223 -0
- package/dist/cli/commands/validate-config.d.ts +6 -0
- package/dist/cli/commands/validate-config.js +35 -0
- package/dist/cli/commands/verify.d.ts +11 -0
- package/dist/cli/commands/verify.js +283 -0
- package/dist/cli/commands/watch.d.ts +12 -0
- package/dist/cli/commands/watch.js +253 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.js +178 -0
- package/dist/cli/interactive.d.ts +47 -0
- package/dist/cli/interactive.js +216 -0
- package/dist/cli/output/terminal-reporter.d.ts +19 -0
- package/dist/cli/output/terminal-reporter.js +104 -0
- package/dist/cli/output.d.ts +226 -0
- package/dist/cli/output.js +438 -0
- package/dist/cli/utils/env.d.ts +5 -0
- package/dist/cli/utils/env.js +14 -0
- package/dist/cli/utils/progress.d.ts +59 -0
- package/dist/cli/utils/progress.js +206 -0
- package/dist/cli/utils/server-context.d.ts +10 -0
- package/dist/cli/utils/server-context.js +36 -0
- package/dist/cloud/auth.d.ts +144 -0
- package/dist/cloud/auth.js +374 -0
- package/dist/cloud/client.d.ts +24 -0
- package/dist/cloud/client.js +65 -0
- package/dist/cloud/http-client.d.ts +38 -0
- package/dist/cloud/http-client.js +215 -0
- package/dist/cloud/index.d.ts +23 -0
- package/dist/cloud/index.js +25 -0
- package/dist/cloud/mock-client.d.ts +107 -0
- package/dist/cloud/mock-client.js +545 -0
- package/dist/cloud/types.d.ts +515 -0
- package/dist/cloud/types.js +15 -0
- package/dist/config/defaults.d.ts +160 -0
- package/dist/config/defaults.js +169 -0
- package/dist/config/loader.d.ts +24 -0
- package/dist/config/loader.js +122 -0
- package/dist/config/template.d.ts +42 -0
- package/dist/config/template.js +647 -0
- package/dist/config/validator.d.ts +2112 -0
- package/dist/config/validator.js +658 -0
- package/dist/constants/cloud.d.ts +107 -0
- package/dist/constants/cloud.js +110 -0
- package/dist/constants/core.d.ts +521 -0
- package/dist/constants/core.js +556 -0
- package/dist/constants/testing.d.ts +1283 -0
- package/dist/constants/testing.js +1568 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.js +10 -0
- package/dist/contract/index.d.ts +6 -0
- package/dist/contract/index.js +5 -0
- package/dist/contract/validator.d.ts +177 -0
- package/dist/contract/validator.js +574 -0
- package/dist/cost/index.d.ts +6 -0
- package/dist/cost/index.js +5 -0
- package/dist/cost/tracker.d.ts +134 -0
- package/dist/cost/tracker.js +313 -0
- package/dist/discovery/discovery.d.ts +16 -0
- package/dist/discovery/discovery.js +173 -0
- package/dist/discovery/types.d.ts +51 -0
- package/dist/discovery/types.js +2 -0
- package/dist/docs/agents.d.ts +3 -0
- package/dist/docs/agents.js +995 -0
- package/dist/docs/contract.d.ts +51 -0
- package/dist/docs/contract.js +1681 -0
- package/dist/docs/generator.d.ts +4 -0
- package/dist/docs/generator.js +4 -0
- package/dist/docs/html-reporter.d.ts +9 -0
- package/dist/docs/html-reporter.js +757 -0
- package/dist/docs/index.d.ts +10 -0
- package/dist/docs/index.js +11 -0
- package/dist/docs/junit-reporter.d.ts +18 -0
- package/dist/docs/junit-reporter.js +210 -0
- package/dist/docs/report.d.ts +14 -0
- package/dist/docs/report.js +44 -0
- package/dist/docs/sarif-reporter.d.ts +19 -0
- package/dist/docs/sarif-reporter.js +335 -0
- package/dist/docs/shared.d.ts +35 -0
- package/dist/docs/shared.js +162 -0
- package/dist/docs/templates.d.ts +12 -0
- package/dist/docs/templates.js +76 -0
- package/dist/errors/index.d.ts +6 -0
- package/dist/errors/index.js +6 -0
- package/dist/errors/retry.d.ts +92 -0
- package/dist/errors/retry.js +323 -0
- package/dist/errors/types.d.ts +321 -0
- package/dist/errors/types.js +584 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.js +32 -0
- package/dist/interview/dependency-resolver.d.ts +11 -0
- package/dist/interview/dependency-resolver.js +32 -0
- package/dist/interview/interviewer.d.ts +232 -0
- package/dist/interview/interviewer.js +1939 -0
- package/dist/interview/mock-response-generator.d.ts +7 -0
- package/dist/interview/mock-response-generator.js +102 -0
- package/dist/interview/orchestrator.d.ts +237 -0
- package/dist/interview/orchestrator.js +1296 -0
- package/dist/interview/rate-limiter.d.ts +15 -0
- package/dist/interview/rate-limiter.js +55 -0
- package/dist/interview/response-validator.d.ts +10 -0
- package/dist/interview/response-validator.js +132 -0
- package/dist/interview/schema-inferrer.d.ts +8 -0
- package/dist/interview/schema-inferrer.js +71 -0
- package/dist/interview/schema-test-generator.d.ts +71 -0
- package/dist/interview/schema-test-generator.js +834 -0
- package/dist/interview/smart-value-generator.d.ts +155 -0
- package/dist/interview/smart-value-generator.js +554 -0
- package/dist/interview/stateful-test-runner.d.ts +19 -0
- package/dist/interview/stateful-test-runner.js +106 -0
- package/dist/interview/types.d.ts +561 -0
- package/dist/interview/types.js +2 -0
- package/dist/llm/anthropic.d.ts +41 -0
- package/dist/llm/anthropic.js +355 -0
- package/dist/llm/client.d.ts +123 -0
- package/dist/llm/client.js +42 -0
- package/dist/llm/factory.d.ts +38 -0
- package/dist/llm/factory.js +145 -0
- package/dist/llm/fallback.d.ts +140 -0
- package/dist/llm/fallback.js +379 -0
- package/dist/llm/index.d.ts +18 -0
- package/dist/llm/index.js +15 -0
- package/dist/llm/ollama.d.ts +37 -0
- package/dist/llm/ollama.js +330 -0
- package/dist/llm/openai.d.ts +25 -0
- package/dist/llm/openai.js +320 -0
- package/dist/llm/token-budget.d.ts +161 -0
- package/dist/llm/token-budget.js +395 -0
- package/dist/logging/logger.d.ts +70 -0
- package/dist/logging/logger.js +130 -0
- package/dist/metrics/collector.d.ts +106 -0
- package/dist/metrics/collector.js +547 -0
- package/dist/metrics/index.d.ts +7 -0
- package/dist/metrics/index.js +7 -0
- package/dist/metrics/prometheus.d.ts +20 -0
- package/dist/metrics/prometheus.js +241 -0
- package/dist/metrics/types.d.ts +209 -0
- package/dist/metrics/types.js +5 -0
- package/dist/persona/builtins.d.ts +54 -0
- package/dist/persona/builtins.js +219 -0
- package/dist/persona/index.d.ts +8 -0
- package/dist/persona/index.js +8 -0
- package/dist/persona/loader.d.ts +30 -0
- package/dist/persona/loader.js +190 -0
- package/dist/persona/types.d.ts +144 -0
- package/dist/persona/types.js +5 -0
- package/dist/persona/validation.d.ts +94 -0
- package/dist/persona/validation.js +332 -0
- package/dist/prompts/index.d.ts +5 -0
- package/dist/prompts/index.js +5 -0
- package/dist/prompts/templates.d.ts +180 -0
- package/dist/prompts/templates.js +431 -0
- package/dist/registry/client.d.ts +49 -0
- package/dist/registry/client.js +191 -0
- package/dist/registry/index.d.ts +7 -0
- package/dist/registry/index.js +6 -0
- package/dist/registry/types.d.ts +140 -0
- package/dist/registry/types.js +6 -0
- package/dist/scenarios/evaluator.d.ts +43 -0
- package/dist/scenarios/evaluator.js +206 -0
- package/dist/scenarios/index.d.ts +10 -0
- package/dist/scenarios/index.js +9 -0
- package/dist/scenarios/loader.d.ts +20 -0
- package/dist/scenarios/loader.js +285 -0
- package/dist/scenarios/types.d.ts +153 -0
- package/dist/scenarios/types.js +8 -0
- package/dist/security/index.d.ts +17 -0
- package/dist/security/index.js +18 -0
- package/dist/security/payloads.d.ts +61 -0
- package/dist/security/payloads.js +268 -0
- package/dist/security/security-tester.d.ts +42 -0
- package/dist/security/security-tester.js +582 -0
- package/dist/security/types.d.ts +166 -0
- package/dist/security/types.js +8 -0
- package/dist/transport/base-transport.d.ts +59 -0
- package/dist/transport/base-transport.js +38 -0
- package/dist/transport/http-transport.d.ts +67 -0
- package/dist/transport/http-transport.js +238 -0
- package/dist/transport/mcp-client.d.ts +141 -0
- package/dist/transport/mcp-client.js +496 -0
- package/dist/transport/sse-transport.d.ts +88 -0
- package/dist/transport/sse-transport.js +316 -0
- package/dist/transport/stdio-transport.d.ts +43 -0
- package/dist/transport/stdio-transport.js +238 -0
- package/dist/transport/types.d.ts +125 -0
- package/dist/transport/types.js +16 -0
- package/dist/utils/concurrency.d.ts +123 -0
- package/dist/utils/concurrency.js +213 -0
- package/dist/utils/formatters.d.ts +16 -0
- package/dist/utils/formatters.js +37 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/jsonpath.d.ts +87 -0
- package/dist/utils/jsonpath.js +326 -0
- package/dist/utils/markdown.d.ts +113 -0
- package/dist/utils/markdown.js +265 -0
- package/dist/utils/network.d.ts +14 -0
- package/dist/utils/network.js +17 -0
- package/dist/utils/sanitize.d.ts +92 -0
- package/dist/utils/sanitize.js +191 -0
- package/dist/utils/semantic.d.ts +194 -0
- package/dist/utils/semantic.js +1051 -0
- package/dist/utils/smart-truncate.d.ts +94 -0
- package/dist/utils/smart-truncate.js +361 -0
- package/dist/utils/timeout.d.ts +153 -0
- package/dist/utils/timeout.js +205 -0
- package/dist/utils/yaml-parser.d.ts +58 -0
- package/dist/utils/yaml-parser.js +86 -0
- package/dist/validation/index.d.ts +32 -0
- package/dist/validation/index.js +32 -0
- package/dist/validation/semantic-test-generator.d.ts +50 -0
- package/dist/validation/semantic-test-generator.js +176 -0
- package/dist/validation/semantic-types.d.ts +66 -0
- package/dist/validation/semantic-types.js +94 -0
- package/dist/validation/semantic-validator.d.ts +38 -0
- package/dist/validation/semantic-validator.js +340 -0
- package/dist/verification/index.d.ts +6 -0
- package/dist/verification/index.js +5 -0
- package/dist/verification/types.d.ts +133 -0
- package/dist/verification/types.js +5 -0
- package/dist/verification/verifier.d.ts +30 -0
- package/dist/verification/verifier.js +309 -0
- package/dist/version.d.ts +19 -0
- package/dist/version.js +48 -0
- package/dist/workflow/auto-generator.d.ts +27 -0
- package/dist/workflow/auto-generator.js +513 -0
- package/dist/workflow/discovery.d.ts +40 -0
- package/dist/workflow/discovery.js +195 -0
- package/dist/workflow/executor.d.ts +82 -0
- package/dist/workflow/executor.js +611 -0
- package/dist/workflow/index.d.ts +10 -0
- package/dist/workflow/index.js +10 -0
- package/dist/workflow/loader.d.ts +24 -0
- package/dist/workflow/loader.js +194 -0
- package/dist/workflow/state-tracker.d.ts +98 -0
- package/dist/workflow/state-tracker.js +424 -0
- package/dist/workflow/types.d.ts +337 -0
- package/dist/workflow/types.js +5 -0
- package/package.json +94 -0
- package/schemas/bellwether-check.schema.json +651 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deprecation Lifecycle Management
|
|
3
|
+
*
|
|
4
|
+
* Tracks tool deprecation status and warns consumers about deprecated tools.
|
|
5
|
+
* Supports grace periods, replacement suggestions, and removal date enforcement.
|
|
6
|
+
*/
|
|
7
|
+
import { DEPRECATION } from '../constants.js';
|
|
8
|
+
// Re-export centralized constant for backwards compatibility
|
|
9
|
+
export { DEPRECATION } from '../constants.js';
|
|
10
|
+
/**
|
|
11
|
+
* Default deprecation configuration.
|
|
12
|
+
* Uses values from centralized constants.
|
|
13
|
+
*/
|
|
14
|
+
export const DEPRECATION_DEFAULTS = {
|
|
15
|
+
warnOnUsage: DEPRECATION.DEFAULTS.warnOnUsage,
|
|
16
|
+
failOnExpired: DEPRECATION.DEFAULTS.failOnExpired,
|
|
17
|
+
gracePeriodDays: DEPRECATION.DEFAULTS.gracePeriodDays,
|
|
18
|
+
deprecatedSeverity: 'warning',
|
|
19
|
+
expiredSeverity: 'breaking',
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Days thresholds for warning levels.
|
|
23
|
+
* Uses values from centralized constants.
|
|
24
|
+
*/
|
|
25
|
+
export const DEPRECATION_THRESHOLDS = {
|
|
26
|
+
/** Warn about upcoming removal within this many days */
|
|
27
|
+
UPCOMING_REMOVAL_DAYS: DEPRECATION.THRESHOLDS.upcomingRemovalDays,
|
|
28
|
+
/** Critical warning within this many days */
|
|
29
|
+
CRITICAL_REMOVAL_DAYS: DEPRECATION.THRESHOLDS.criticalRemovalDays,
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Check all tools in a baseline for deprecation issues.
|
|
33
|
+
*/
|
|
34
|
+
export function checkDeprecations(baseline, config = {}) {
|
|
35
|
+
const fullConfig = { ...DEPRECATION_DEFAULTS, ...config };
|
|
36
|
+
const warnings = [];
|
|
37
|
+
let deprecatedCount = 0;
|
|
38
|
+
let expiredCount = 0;
|
|
39
|
+
let gracePeriodCount = 0;
|
|
40
|
+
const now = new Date();
|
|
41
|
+
for (const tool of baseline.tools) {
|
|
42
|
+
const warning = checkToolDeprecation(tool, now, fullConfig);
|
|
43
|
+
if (warning) {
|
|
44
|
+
warnings.push(warning);
|
|
45
|
+
if (warning.status === 'removed' || warning.isPastRemoval) {
|
|
46
|
+
expiredCount++;
|
|
47
|
+
}
|
|
48
|
+
else if (warning.status === 'deprecated') {
|
|
49
|
+
deprecatedCount++;
|
|
50
|
+
}
|
|
51
|
+
if (warning.isInGracePeriod) {
|
|
52
|
+
gracePeriodCount++;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Determine overall severity
|
|
57
|
+
const overallSeverity = determineOverallSeverity(warnings);
|
|
58
|
+
// Generate summary
|
|
59
|
+
const summary = generateDeprecationSummary(warnings, deprecatedCount, expiredCount, gracePeriodCount);
|
|
60
|
+
return {
|
|
61
|
+
warnings,
|
|
62
|
+
deprecatedCount,
|
|
63
|
+
expiredCount,
|
|
64
|
+
gracePeriodCount,
|
|
65
|
+
overallSeverity,
|
|
66
|
+
summary,
|
|
67
|
+
hasCriticalIssues: expiredCount > 0,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check a single tool for deprecation issues.
|
|
72
|
+
*/
|
|
73
|
+
export function checkToolDeprecation(tool, now = new Date(), config = DEPRECATION_DEFAULTS) {
|
|
74
|
+
// Not deprecated - no warning
|
|
75
|
+
if (!tool.deprecated) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
// Calculate days until removal (if removal date is set)
|
|
79
|
+
let daysUntilRemoval;
|
|
80
|
+
let isPastRemoval = false;
|
|
81
|
+
let isInGracePeriod = false;
|
|
82
|
+
if (tool.removalDate) {
|
|
83
|
+
const removalDate = new Date(tool.removalDate);
|
|
84
|
+
const diffMs = removalDate.getTime() - now.getTime();
|
|
85
|
+
daysUntilRemoval = Math.ceil(diffMs / (1000 * 60 * 60 * 24));
|
|
86
|
+
isPastRemoval = daysUntilRemoval < 0;
|
|
87
|
+
// Check grace period
|
|
88
|
+
if (isPastRemoval) {
|
|
89
|
+
const daysPastRemoval = Math.abs(daysUntilRemoval);
|
|
90
|
+
isInGracePeriod = daysPastRemoval <= config.gracePeriodDays;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Determine status
|
|
94
|
+
let status = 'deprecated';
|
|
95
|
+
if (isPastRemoval && !isInGracePeriod) {
|
|
96
|
+
status = 'removed';
|
|
97
|
+
}
|
|
98
|
+
else if (isPastRemoval && isInGracePeriod) {
|
|
99
|
+
status = 'sunset';
|
|
100
|
+
}
|
|
101
|
+
// Determine severity
|
|
102
|
+
let severity = config.deprecatedSeverity;
|
|
103
|
+
if (status === 'removed') {
|
|
104
|
+
severity = config.expiredSeverity;
|
|
105
|
+
}
|
|
106
|
+
else if (status === 'sunset') {
|
|
107
|
+
severity = 'warning';
|
|
108
|
+
}
|
|
109
|
+
else if (daysUntilRemoval !== undefined && daysUntilRemoval <= DEPRECATION_THRESHOLDS.CRITICAL_REMOVAL_DAYS) {
|
|
110
|
+
severity = 'breaking';
|
|
111
|
+
}
|
|
112
|
+
// Generate message
|
|
113
|
+
const message = generateDeprecationMessage(tool, status, daysUntilRemoval);
|
|
114
|
+
return {
|
|
115
|
+
toolName: tool.name,
|
|
116
|
+
status,
|
|
117
|
+
severity,
|
|
118
|
+
message,
|
|
119
|
+
deprecatedAt: tool.deprecatedAt ? new Date(tool.deprecatedAt) : undefined,
|
|
120
|
+
removalDate: tool.removalDate ? new Date(tool.removalDate) : undefined,
|
|
121
|
+
daysUntilRemoval,
|
|
122
|
+
replacementTool: tool.replacementTool,
|
|
123
|
+
deprecationNotice: tool.deprecationNotice,
|
|
124
|
+
isPastRemoval,
|
|
125
|
+
isInGracePeriod,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Mark a tool as deprecated.
|
|
130
|
+
*/
|
|
131
|
+
export function markAsDeprecated(tool, options = {}) {
|
|
132
|
+
return {
|
|
133
|
+
...tool,
|
|
134
|
+
deprecated: true,
|
|
135
|
+
deprecatedAt: new Date(),
|
|
136
|
+
deprecationNotice: options.notice,
|
|
137
|
+
removalDate: options.removalDate,
|
|
138
|
+
replacementTool: options.replacementTool,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Clear deprecation status from a tool.
|
|
143
|
+
*/
|
|
144
|
+
export function clearDeprecation(tool) {
|
|
145
|
+
const { deprecated: _, deprecatedAt: _1, deprecationNotice: _2, removalDate: _3, replacementTool: _4, ...rest } = tool;
|
|
146
|
+
void [_, _1, _2, _3, _4]; // Explicitly discard unused variables
|
|
147
|
+
return rest;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Generate deprecation message for a tool.
|
|
151
|
+
*/
|
|
152
|
+
function generateDeprecationMessage(tool, status, daysUntilRemoval) {
|
|
153
|
+
const parts = [];
|
|
154
|
+
switch (status) {
|
|
155
|
+
case 'removed':
|
|
156
|
+
parts.push(`Tool "${tool.name}" has been REMOVED and is past its removal date.`);
|
|
157
|
+
break;
|
|
158
|
+
case 'sunset':
|
|
159
|
+
parts.push(`Tool "${tool.name}" is in SUNSET phase (grace period).`);
|
|
160
|
+
if (daysUntilRemoval !== undefined) {
|
|
161
|
+
parts.push(`Removal date was ${Math.abs(daysUntilRemoval)} day(s) ago.`);
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
case 'deprecated':
|
|
165
|
+
parts.push(`Tool "${tool.name}" is DEPRECATED.`);
|
|
166
|
+
if (daysUntilRemoval !== undefined) {
|
|
167
|
+
if (daysUntilRemoval <= DEPRECATION_THRESHOLDS.CRITICAL_REMOVAL_DAYS) {
|
|
168
|
+
parts.push(`CRITICAL: Will be removed in ${daysUntilRemoval} day(s)!`);
|
|
169
|
+
}
|
|
170
|
+
else if (daysUntilRemoval <= DEPRECATION_THRESHOLDS.UPCOMING_REMOVAL_DAYS) {
|
|
171
|
+
parts.push(`Will be removed in ${daysUntilRemoval} day(s).`);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
parts.push(`Scheduled for removal on ${tool.removalDate}.`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
// Add notice if available
|
|
180
|
+
if (tool.deprecationNotice) {
|
|
181
|
+
parts.push(`Notice: ${tool.deprecationNotice}`);
|
|
182
|
+
}
|
|
183
|
+
// Add replacement suggestion
|
|
184
|
+
if (tool.replacementTool) {
|
|
185
|
+
parts.push(`Use "${tool.replacementTool}" instead.`);
|
|
186
|
+
}
|
|
187
|
+
return parts.join(' ');
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Determine overall severity from warnings.
|
|
191
|
+
*/
|
|
192
|
+
function determineOverallSeverity(warnings) {
|
|
193
|
+
if (warnings.length === 0) {
|
|
194
|
+
return 'none';
|
|
195
|
+
}
|
|
196
|
+
// Check for any critical issues (removed tools)
|
|
197
|
+
if (warnings.some(w => w.status === 'removed')) {
|
|
198
|
+
return 'breaking';
|
|
199
|
+
}
|
|
200
|
+
// Check for sunset tools
|
|
201
|
+
if (warnings.some(w => w.status === 'sunset')) {
|
|
202
|
+
return 'warning';
|
|
203
|
+
}
|
|
204
|
+
// Check for upcoming critical removals
|
|
205
|
+
if (warnings.some(w => w.daysUntilRemoval !== undefined && w.daysUntilRemoval <= DEPRECATION_THRESHOLDS.CRITICAL_REMOVAL_DAYS)) {
|
|
206
|
+
return 'breaking';
|
|
207
|
+
}
|
|
208
|
+
// All deprecated tools
|
|
209
|
+
return 'warning';
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Generate summary message for deprecation report.
|
|
213
|
+
*/
|
|
214
|
+
function generateDeprecationSummary(warnings, deprecatedCount, expiredCount, gracePeriodCount) {
|
|
215
|
+
if (warnings.length === 0) {
|
|
216
|
+
return 'No deprecated tools found.';
|
|
217
|
+
}
|
|
218
|
+
const parts = [];
|
|
219
|
+
if (expiredCount > 0) {
|
|
220
|
+
parts.push(`${expiredCount} tool(s) past removal date`);
|
|
221
|
+
}
|
|
222
|
+
if (gracePeriodCount > 0) {
|
|
223
|
+
parts.push(`${gracePeriodCount} tool(s) in grace period`);
|
|
224
|
+
}
|
|
225
|
+
if (deprecatedCount > 0) {
|
|
226
|
+
parts.push(`${deprecatedCount} deprecated tool(s)`);
|
|
227
|
+
}
|
|
228
|
+
// Add critical warnings
|
|
229
|
+
const criticalTools = warnings.filter(w => w.daysUntilRemoval !== undefined && w.daysUntilRemoval <= DEPRECATION_THRESHOLDS.CRITICAL_REMOVAL_DAYS && w.daysUntilRemoval >= 0);
|
|
230
|
+
if (criticalTools.length > 0) {
|
|
231
|
+
parts.push(`${criticalTools.length} tool(s) will be removed within ${DEPRECATION_THRESHOLDS.CRITICAL_REMOVAL_DAYS} days`);
|
|
232
|
+
}
|
|
233
|
+
return parts.join(', ') + '.';
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Get all deprecated tools from a baseline.
|
|
237
|
+
*/
|
|
238
|
+
export function getDeprecatedTools(baseline) {
|
|
239
|
+
return baseline.tools.filter(t => t.deprecated);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get tools that are past their removal date.
|
|
243
|
+
*/
|
|
244
|
+
export function getExpiredTools(baseline, now = new Date()) {
|
|
245
|
+
return baseline.tools.filter(t => {
|
|
246
|
+
if (!t.deprecated || !t.removalDate) {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
const removalDate = new Date(t.removalDate);
|
|
250
|
+
return now > removalDate;
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Get tools that will be removed within a specified number of days.
|
|
255
|
+
*/
|
|
256
|
+
export function getUpcomingRemovals(baseline, withinDays = DEPRECATION_THRESHOLDS.UPCOMING_REMOVAL_DAYS, now = new Date()) {
|
|
257
|
+
return baseline.tools.filter(t => {
|
|
258
|
+
if (!t.deprecated || !t.removalDate) {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
const removalDate = new Date(t.removalDate);
|
|
262
|
+
const diffMs = removalDate.getTime() - now.getTime();
|
|
263
|
+
const daysUntil = Math.ceil(diffMs / (1000 * 60 * 60 * 24));
|
|
264
|
+
return daysUntil >= 0 && daysUntil <= withinDays;
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Format deprecation warning for display.
|
|
269
|
+
*/
|
|
270
|
+
export function formatDeprecationWarning(warning) {
|
|
271
|
+
const lines = [];
|
|
272
|
+
const icon = warning.isPastRemoval ? '❌' : warning.isInGracePeriod ? '⚠️' : '🕐';
|
|
273
|
+
lines.push(`${icon} ${warning.toolName} [${warning.status.toUpperCase()}]`);
|
|
274
|
+
lines.push(` ${warning.message}`);
|
|
275
|
+
if (warning.replacementTool) {
|
|
276
|
+
lines.push(` Replacement: ${warning.replacementTool}`);
|
|
277
|
+
}
|
|
278
|
+
return lines.join('\n');
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Format deprecation report for console output.
|
|
282
|
+
*/
|
|
283
|
+
export function formatDeprecationReport(report) {
|
|
284
|
+
const lines = ['Deprecation Report', '═'.repeat(50), ''];
|
|
285
|
+
if (report.warnings.length === 0) {
|
|
286
|
+
lines.push('✓ No deprecated tools found.');
|
|
287
|
+
return lines.join('\n');
|
|
288
|
+
}
|
|
289
|
+
lines.push(report.summary);
|
|
290
|
+
lines.push('');
|
|
291
|
+
// Group by status
|
|
292
|
+
const byStatus = new Map();
|
|
293
|
+
for (const warning of report.warnings) {
|
|
294
|
+
const existing = byStatus.get(warning.status) || [];
|
|
295
|
+
existing.push(warning);
|
|
296
|
+
byStatus.set(warning.status, existing);
|
|
297
|
+
}
|
|
298
|
+
// Show removed first
|
|
299
|
+
const statusOrder = ['removed', 'sunset', 'deprecated'];
|
|
300
|
+
for (const status of statusOrder) {
|
|
301
|
+
const warnings = byStatus.get(status);
|
|
302
|
+
if (warnings && warnings.length > 0) {
|
|
303
|
+
lines.push(`─── ${status.toUpperCase()} ───`);
|
|
304
|
+
for (const warning of warnings) {
|
|
305
|
+
lines.push(formatDeprecationWarning(warning));
|
|
306
|
+
lines.push('');
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return lines.join('\n');
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Check if deprecation report should cause failure.
|
|
314
|
+
*/
|
|
315
|
+
export function shouldFailOnDeprecation(report, config = {}) {
|
|
316
|
+
const fullConfig = { ...DEPRECATION_DEFAULTS, ...config };
|
|
317
|
+
if (!fullConfig.failOnExpired) {
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
return report.expiredCount > 0;
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=deprecation-tracker.js.map
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff output formatting for human and machine consumption.
|
|
3
|
+
*/
|
|
4
|
+
import type { BehavioralDiff } from './types.js';
|
|
5
|
+
import type { SecurityDiff } from '../security/types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Format diff for human-readable console output.
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatDiffText(diff: BehavioralDiff, useColors?: boolean): string;
|
|
10
|
+
/**
|
|
11
|
+
* Format diff as JSON.
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatDiffJson(diff: BehavioralDiff): string;
|
|
14
|
+
/**
|
|
15
|
+
* Format diff in a compact single-line format for CI logs.
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatDiffCompact(diff: BehavioralDiff): string;
|
|
18
|
+
/**
|
|
19
|
+
* Format diff for GitHub Actions annotations.
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatDiffGitHubActions(diff: BehavioralDiff): string;
|
|
22
|
+
/**
|
|
23
|
+
* Format diff as markdown.
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatDiffMarkdown(diff: BehavioralDiff): string;
|
|
26
|
+
/**
|
|
27
|
+
* Format diff as JUnit XML for CI dashboard integration.
|
|
28
|
+
*
|
|
29
|
+
* JUnit XML is widely supported by CI/CD systems (Jenkins, GitLab CI,
|
|
30
|
+
* CircleCI, Azure DevOps, etc.) for test result visualization.
|
|
31
|
+
*
|
|
32
|
+
* @param diff - The behavioral diff to format
|
|
33
|
+
* @param suiteName - Name for the test suite (default: 'bellwether')
|
|
34
|
+
* @returns JUnit XML string
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatDiffJUnit(diff: BehavioralDiff, suiteName?: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Format diff as SARIF (Static Analysis Results Interchange Format) for GitHub Code Scanning.
|
|
39
|
+
*
|
|
40
|
+
* SARIF is the standard format for GitHub's code scanning feature and can be
|
|
41
|
+
* uploaded to show drift detection results in pull request reviews.
|
|
42
|
+
*
|
|
43
|
+
* @see https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html
|
|
44
|
+
*
|
|
45
|
+
* @param diff - The behavioral diff to format
|
|
46
|
+
* @param baselinePath - Path to the baseline file (for location references)
|
|
47
|
+
* @returns SARIF JSON string
|
|
48
|
+
*/
|
|
49
|
+
export declare function formatDiffSarif(diff: BehavioralDiff, baselinePath?: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Format a standalone security report for display.
|
|
52
|
+
* Used when only security data is available (not a full diff).
|
|
53
|
+
*/
|
|
54
|
+
export declare function formatSecurityReport(report: SecurityDiff, useColors?: boolean): string;
|
|
55
|
+
//# sourceMappingURL=diff.d.ts.map
|