@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,438 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Output Module
|
|
3
|
+
*
|
|
4
|
+
* Provides structured output for CLI commands with support for:
|
|
5
|
+
* - Different message types (info, success, error, warning)
|
|
6
|
+
* - Quiet mode to suppress non-essential output
|
|
7
|
+
* - Consistent formatting across all commands
|
|
8
|
+
*
|
|
9
|
+
* This module is for USER-FACING output only. For diagnostic/debug logging,
|
|
10
|
+
* use the logging module (src/logging/logger.ts).
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Global output configuration.
|
|
14
|
+
*/
|
|
15
|
+
let globalConfig = {
|
|
16
|
+
quiet: false,
|
|
17
|
+
noColor: false,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Configure global output settings.
|
|
21
|
+
*/
|
|
22
|
+
export function configureOutput(config) {
|
|
23
|
+
globalConfig = { ...globalConfig, ...config };
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get current output configuration.
|
|
27
|
+
*/
|
|
28
|
+
export function getOutputConfig() {
|
|
29
|
+
return { ...globalConfig };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Reset output configuration to defaults.
|
|
33
|
+
*/
|
|
34
|
+
export function resetOutput() {
|
|
35
|
+
globalConfig = { quiet: false, noColor: false };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if output is in quiet mode.
|
|
39
|
+
*/
|
|
40
|
+
export function isQuiet() {
|
|
41
|
+
return globalConfig.quiet ?? false;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Standard information output.
|
|
45
|
+
* Use for progress messages, status updates, and general information.
|
|
46
|
+
*/
|
|
47
|
+
export function info(message) {
|
|
48
|
+
if (!globalConfig.quiet) {
|
|
49
|
+
console.log(message);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Success message output.
|
|
54
|
+
* Use for completion messages and positive confirmations.
|
|
55
|
+
*/
|
|
56
|
+
export function success(message) {
|
|
57
|
+
if (!globalConfig.quiet) {
|
|
58
|
+
console.log(message);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Warning message output.
|
|
63
|
+
* Always shown (not suppressed by quiet mode) as warnings are important.
|
|
64
|
+
*/
|
|
65
|
+
export function warn(message) {
|
|
66
|
+
console.warn(message);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Error message output.
|
|
70
|
+
* Always shown (not suppressed by quiet mode) as errors are critical.
|
|
71
|
+
*/
|
|
72
|
+
export function error(message) {
|
|
73
|
+
console.error(message);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Debug output (only shown in verbose mode).
|
|
77
|
+
* For detailed information during development/troubleshooting.
|
|
78
|
+
*/
|
|
79
|
+
export function debug(message, verbose = false) {
|
|
80
|
+
if (verbose && !globalConfig.quiet) {
|
|
81
|
+
console.log(message);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Print a blank line for formatting.
|
|
86
|
+
*/
|
|
87
|
+
export function newline() {
|
|
88
|
+
if (!globalConfig.quiet) {
|
|
89
|
+
console.log('');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Print multiple lines.
|
|
94
|
+
*/
|
|
95
|
+
export function lines(...messages) {
|
|
96
|
+
if (!globalConfig.quiet) {
|
|
97
|
+
for (const msg of messages) {
|
|
98
|
+
console.log(msg);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Print formatted JSON output.
|
|
104
|
+
* Always shown as this is typically requested data output.
|
|
105
|
+
*/
|
|
106
|
+
export function json(data) {
|
|
107
|
+
console.log(JSON.stringify(data, null, 2));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Print a section header.
|
|
111
|
+
*/
|
|
112
|
+
export function section(title) {
|
|
113
|
+
if (!globalConfig.quiet) {
|
|
114
|
+
console.log(`\n--- ${title} ---`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Print a key-value pair.
|
|
119
|
+
*/
|
|
120
|
+
export function keyValue(key, value) {
|
|
121
|
+
if (!globalConfig.quiet && value !== undefined) {
|
|
122
|
+
console.log(`${key}: ${value}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Print a list item.
|
|
127
|
+
*/
|
|
128
|
+
export function listItem(item, indent = 0) {
|
|
129
|
+
if (!globalConfig.quiet) {
|
|
130
|
+
const prefix = ' '.repeat(indent) + '- ';
|
|
131
|
+
console.log(`${prefix}${item}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Print numbered list items.
|
|
136
|
+
*/
|
|
137
|
+
export function numberedList(items, startIndex = 1) {
|
|
138
|
+
if (!globalConfig.quiet) {
|
|
139
|
+
items.forEach((item, i) => {
|
|
140
|
+
console.log(` ${startIndex + i}) ${item}`);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Create a scoped output instance for a specific command.
|
|
146
|
+
* Useful for commands that need to track their own quiet state.
|
|
147
|
+
*/
|
|
148
|
+
export function createOutput(config = {}) {
|
|
149
|
+
return new Output({ ...globalConfig, ...config });
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Output class for scoped output with its own configuration.
|
|
153
|
+
*/
|
|
154
|
+
export class Output {
|
|
155
|
+
config;
|
|
156
|
+
constructor(config = {}) {
|
|
157
|
+
this.config = config;
|
|
158
|
+
}
|
|
159
|
+
info(message) {
|
|
160
|
+
if (!this.config.quiet) {
|
|
161
|
+
console.log(message);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
success(message) {
|
|
165
|
+
if (!this.config.quiet) {
|
|
166
|
+
console.log(message);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
warn(message) {
|
|
170
|
+
console.warn(message);
|
|
171
|
+
}
|
|
172
|
+
error(message) {
|
|
173
|
+
console.error(message);
|
|
174
|
+
}
|
|
175
|
+
debug(message, verbose = false) {
|
|
176
|
+
if (verbose && !this.config.quiet) {
|
|
177
|
+
console.log(message);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
newline() {
|
|
181
|
+
if (!this.config.quiet) {
|
|
182
|
+
console.log('');
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
lines(...messages) {
|
|
186
|
+
if (!this.config.quiet) {
|
|
187
|
+
for (const msg of messages) {
|
|
188
|
+
console.log(msg);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
json(data) {
|
|
193
|
+
console.log(JSON.stringify(data, null, 2));
|
|
194
|
+
}
|
|
195
|
+
section(title) {
|
|
196
|
+
if (!this.config.quiet) {
|
|
197
|
+
console.log(`\n--- ${title} ---`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
keyValue(key, value) {
|
|
201
|
+
if (!this.config.quiet && value !== undefined) {
|
|
202
|
+
console.log(`${key}: ${value}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
listItem(item, indent = 0) {
|
|
206
|
+
if (!this.config.quiet) {
|
|
207
|
+
const prefix = ' '.repeat(indent) + '- ';
|
|
208
|
+
console.log(`${prefix}${item}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
numberedList(items, startIndex = 1) {
|
|
212
|
+
if (!this.config.quiet) {
|
|
213
|
+
items.forEach((item, i) => {
|
|
214
|
+
console.log(` ${startIndex + i}) ${item}`);
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Streaming display controller for real-time LLM output.
|
|
221
|
+
* Provides clean, formatted output during streaming operations.
|
|
222
|
+
*/
|
|
223
|
+
export class StreamingDisplay {
|
|
224
|
+
config;
|
|
225
|
+
stream;
|
|
226
|
+
buffer = '';
|
|
227
|
+
lineLength = 0;
|
|
228
|
+
isActive = false;
|
|
229
|
+
quietMode;
|
|
230
|
+
constructor(config = {}) {
|
|
231
|
+
this.config = config;
|
|
232
|
+
this.stream = config.stream ?? process.stdout;
|
|
233
|
+
this.quietMode = globalConfig.quiet ?? false;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Start streaming display with optional prefix.
|
|
237
|
+
*/
|
|
238
|
+
start(prefix) {
|
|
239
|
+
if (this.quietMode)
|
|
240
|
+
return;
|
|
241
|
+
this.isActive = true;
|
|
242
|
+
this.buffer = '';
|
|
243
|
+
this.lineLength = 0;
|
|
244
|
+
const displayPrefix = prefix ?? this.config.prefix;
|
|
245
|
+
if (displayPrefix) {
|
|
246
|
+
this.stream.write(displayPrefix);
|
|
247
|
+
this.lineLength = displayPrefix.length;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Write a chunk of streaming text.
|
|
252
|
+
*/
|
|
253
|
+
write(chunk) {
|
|
254
|
+
if (this.quietMode || !this.isActive)
|
|
255
|
+
return;
|
|
256
|
+
this.buffer += chunk;
|
|
257
|
+
// Apply styling if configured
|
|
258
|
+
let styledChunk = chunk;
|
|
259
|
+
if (this.config.style === 'dim') {
|
|
260
|
+
styledChunk = `\x1b[2m${chunk}\x1b[0m`;
|
|
261
|
+
}
|
|
262
|
+
else if (this.config.style === 'bright') {
|
|
263
|
+
styledChunk = `\x1b[1m${chunk}\x1b[0m`;
|
|
264
|
+
}
|
|
265
|
+
// Handle line wrapping if maxWidth is set
|
|
266
|
+
if (this.config.maxWidth) {
|
|
267
|
+
const maxWidth = this.config.maxWidth;
|
|
268
|
+
for (const char of chunk) {
|
|
269
|
+
if (char === '\n') {
|
|
270
|
+
this.stream.write('\n');
|
|
271
|
+
this.lineLength = 0;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
if (this.lineLength >= maxWidth) {
|
|
275
|
+
this.stream.write('\n');
|
|
276
|
+
this.lineLength = 0;
|
|
277
|
+
}
|
|
278
|
+
this.stream.write(this.config.style === 'dim' ? `\x1b[2m${char}\x1b[0m` : char);
|
|
279
|
+
this.lineLength++;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
this.stream.write(styledChunk);
|
|
285
|
+
// Track line length for potential future use
|
|
286
|
+
const lastNewline = chunk.lastIndexOf('\n');
|
|
287
|
+
if (lastNewline >= 0) {
|
|
288
|
+
this.lineLength = chunk.length - lastNewline - 1;
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
this.lineLength += chunk.length;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Complete the streaming display.
|
|
297
|
+
*/
|
|
298
|
+
finish(suffix) {
|
|
299
|
+
if (this.quietMode)
|
|
300
|
+
return this.buffer;
|
|
301
|
+
this.isActive = false;
|
|
302
|
+
const displaySuffix = suffix ?? this.config.suffix;
|
|
303
|
+
if (displaySuffix) {
|
|
304
|
+
this.stream.write(displaySuffix);
|
|
305
|
+
}
|
|
306
|
+
// Ensure we end on a newline
|
|
307
|
+
if (this.lineLength > 0) {
|
|
308
|
+
this.stream.write('\n');
|
|
309
|
+
}
|
|
310
|
+
return this.buffer;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Abort the streaming display (e.g., on error).
|
|
314
|
+
*/
|
|
315
|
+
abort(message) {
|
|
316
|
+
if (this.quietMode)
|
|
317
|
+
return;
|
|
318
|
+
this.isActive = false;
|
|
319
|
+
if (message) {
|
|
320
|
+
this.stream.write(`\n${message}\n`);
|
|
321
|
+
}
|
|
322
|
+
else if (this.lineLength > 0) {
|
|
323
|
+
this.stream.write('\n');
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Get the complete buffer content.
|
|
328
|
+
*/
|
|
329
|
+
getBuffer() {
|
|
330
|
+
return this.buffer;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Check if streaming is currently active.
|
|
334
|
+
*/
|
|
335
|
+
isStreaming() {
|
|
336
|
+
return this.isActive;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Create a streaming display for interview operations.
|
|
341
|
+
* Provides context-appropriate prefixes and styling.
|
|
342
|
+
*/
|
|
343
|
+
export function createStreamingDisplay(operation, context) {
|
|
344
|
+
const prefixes = {
|
|
345
|
+
generating: context ? `Generating questions for ${context}... ` : 'Generating... ',
|
|
346
|
+
analyzing: context ? `Analyzing ${context}... ` : 'Analyzing... ',
|
|
347
|
+
synthesizing: context ? `Synthesizing ${context}... ` : 'Synthesizing... ',
|
|
348
|
+
};
|
|
349
|
+
return new StreamingDisplay({
|
|
350
|
+
prefix: prefixes[operation] ?? '',
|
|
351
|
+
style: 'dim',
|
|
352
|
+
maxWidth: 80,
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Simple streaming callback that writes to stdout.
|
|
357
|
+
* Use this for basic streaming output without the full StreamingDisplay.
|
|
358
|
+
*/
|
|
359
|
+
export function createStreamingCallback(prefix) {
|
|
360
|
+
let started = false;
|
|
361
|
+
const quiet = globalConfig.quiet ?? false;
|
|
362
|
+
return {
|
|
363
|
+
onStart: (_operation, _context) => {
|
|
364
|
+
if (quiet)
|
|
365
|
+
return;
|
|
366
|
+
if (prefix) {
|
|
367
|
+
process.stdout.write(prefix);
|
|
368
|
+
started = true;
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
onChunk: (chunk, _operation) => {
|
|
372
|
+
if (quiet)
|
|
373
|
+
return;
|
|
374
|
+
if (!started && prefix) {
|
|
375
|
+
process.stdout.write(prefix);
|
|
376
|
+
started = true;
|
|
377
|
+
}
|
|
378
|
+
process.stdout.write(chunk);
|
|
379
|
+
},
|
|
380
|
+
onComplete: (_text, _operation) => {
|
|
381
|
+
if (quiet)
|
|
382
|
+
return;
|
|
383
|
+
if (started) {
|
|
384
|
+
process.stdout.write('\n');
|
|
385
|
+
}
|
|
386
|
+
},
|
|
387
|
+
onError: (error, _operation) => {
|
|
388
|
+
if (quiet)
|
|
389
|
+
return;
|
|
390
|
+
if (started) {
|
|
391
|
+
process.stdout.write(`\n[Error: ${error.message}]\n`);
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Icon mapping for diff severity levels.
|
|
398
|
+
*/
|
|
399
|
+
const SEVERITY_ICONS = {
|
|
400
|
+
none: '✓',
|
|
401
|
+
info: 'ℹ',
|
|
402
|
+
warning: '⚠',
|
|
403
|
+
breaking: '✗',
|
|
404
|
+
};
|
|
405
|
+
/**
|
|
406
|
+
* Get the icon for a severity level.
|
|
407
|
+
*/
|
|
408
|
+
export function getSeverityIcon(severity) {
|
|
409
|
+
return SEVERITY_ICONS[severity] ?? '?';
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Default export for convenient importing.
|
|
413
|
+
*/
|
|
414
|
+
export default {
|
|
415
|
+
configureOutput,
|
|
416
|
+
getOutputConfig,
|
|
417
|
+
resetOutput,
|
|
418
|
+
isQuiet,
|
|
419
|
+
info,
|
|
420
|
+
success,
|
|
421
|
+
warn,
|
|
422
|
+
error,
|
|
423
|
+
debug,
|
|
424
|
+
newline,
|
|
425
|
+
lines,
|
|
426
|
+
json,
|
|
427
|
+
section,
|
|
428
|
+
keyValue,
|
|
429
|
+
listItem,
|
|
430
|
+
numberedList,
|
|
431
|
+
createOutput,
|
|
432
|
+
Output,
|
|
433
|
+
StreamingDisplay,
|
|
434
|
+
createStreamingDisplay,
|
|
435
|
+
createStreamingCallback,
|
|
436
|
+
getSeverityIcon,
|
|
437
|
+
};
|
|
438
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect if running in a CI environment.
|
|
3
|
+
*/
|
|
4
|
+
export function isCI() {
|
|
5
|
+
return !!(process.env.CI ||
|
|
6
|
+
process.env.CONTINUOUS_INTEGRATION ||
|
|
7
|
+
process.env.GITHUB_ACTIONS ||
|
|
8
|
+
process.env.GITLAB_CI ||
|
|
9
|
+
process.env.CIRCLECI ||
|
|
10
|
+
process.env.JENKINS_URL ||
|
|
11
|
+
process.env.TRAVIS ||
|
|
12
|
+
process.env.BUILDKITE);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress bar utilities for CLI test display.
|
|
3
|
+
*/
|
|
4
|
+
import type { InterviewProgress } from '../../interview/interviewer.js';
|
|
5
|
+
export interface ProgressBarOptions {
|
|
6
|
+
/** Whether to show the progress bar (false for verbose mode) */
|
|
7
|
+
enabled?: boolean;
|
|
8
|
+
/** Stream to write to (defaults to stdout) */
|
|
9
|
+
stream?: NodeJS.WriteStream;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Creates and manages a progress bar for test progress.
|
|
13
|
+
*/
|
|
14
|
+
export declare class InterviewProgressBar {
|
|
15
|
+
private bar;
|
|
16
|
+
private enabled;
|
|
17
|
+
private started;
|
|
18
|
+
private totalWork;
|
|
19
|
+
private toolWork;
|
|
20
|
+
private currentValue;
|
|
21
|
+
private currentPayload;
|
|
22
|
+
constructor(options?: ProgressBarOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Start the progress bar with initial values.
|
|
25
|
+
*/
|
|
26
|
+
start(totalTools: number, totalPersonas: number, totalPrompts?: number, totalResources?: number): void;
|
|
27
|
+
/**
|
|
28
|
+
* Update the progress bar with current progress.
|
|
29
|
+
*/
|
|
30
|
+
update(progress: InterviewProgress): void;
|
|
31
|
+
/**
|
|
32
|
+
* Stop and clear the progress bar.
|
|
33
|
+
*/
|
|
34
|
+
stop(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Log a message while the progress bar is active.
|
|
37
|
+
* Uses the same stream as the progress bar to avoid terminal overlap issues.
|
|
38
|
+
*/
|
|
39
|
+
log(message: string): void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Format a startup banner for the check command.
|
|
43
|
+
*/
|
|
44
|
+
export declare function formatCheckBanner(options: {
|
|
45
|
+
serverCommand: string;
|
|
46
|
+
toolCount?: number;
|
|
47
|
+
}): string;
|
|
48
|
+
/**
|
|
49
|
+
* Format a startup banner for the explore command.
|
|
50
|
+
*/
|
|
51
|
+
export declare function formatExploreBanner(options: {
|
|
52
|
+
serverCommand: string;
|
|
53
|
+
provider: string;
|
|
54
|
+
model: string;
|
|
55
|
+
personas: string[];
|
|
56
|
+
questionsPerTool: number;
|
|
57
|
+
toolCount?: number;
|
|
58
|
+
}): string;
|
|
59
|
+
//# sourceMappingURL=progress.d.ts.map
|