@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,169 @@
|
|
|
1
|
+
import { TIMEOUTS, INTERVIEW, WORKFLOW, PATHS, LLM_DEFAULTS } from '../constants.js';
|
|
2
|
+
const WORKFLOW_STEP_TIMEOUT_MS = 5000;
|
|
3
|
+
export const CONFIG_DEFAULTS = {
|
|
4
|
+
server: {
|
|
5
|
+
command: '',
|
|
6
|
+
args: [],
|
|
7
|
+
timeout: TIMEOUTS.DEFAULT,
|
|
8
|
+
},
|
|
9
|
+
llm: {
|
|
10
|
+
provider: 'ollama',
|
|
11
|
+
model: '',
|
|
12
|
+
ollama: {
|
|
13
|
+
baseUrl: LLM_DEFAULTS.OLLAMA_BASE_URL,
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
explore: {
|
|
17
|
+
personas: ['technical_writer'],
|
|
18
|
+
maxQuestionsPerTool: INTERVIEW.MAX_QUESTIONS_PER_TOOL,
|
|
19
|
+
parallelPersonas: false,
|
|
20
|
+
personaConcurrency: INTERVIEW.DEFAULT_PERSONA_CONCURRENCY,
|
|
21
|
+
skipErrorTests: false,
|
|
22
|
+
},
|
|
23
|
+
scenarios: {
|
|
24
|
+
only: false,
|
|
25
|
+
},
|
|
26
|
+
workflows: {
|
|
27
|
+
discover: false,
|
|
28
|
+
trackState: false,
|
|
29
|
+
autoGenerate: false,
|
|
30
|
+
stepTimeout: WORKFLOW_STEP_TIMEOUT_MS,
|
|
31
|
+
requireSuccessfulDependencies: true,
|
|
32
|
+
timeouts: {
|
|
33
|
+
toolCall: WORKFLOW_STEP_TIMEOUT_MS,
|
|
34
|
+
stateSnapshot: WORKFLOW.STATE_SNAPSHOT_TIMEOUT,
|
|
35
|
+
probeTool: WORKFLOW.PROBE_TOOL_TIMEOUT,
|
|
36
|
+
llmAnalysis: WORKFLOW.LLM_ANALYSIS_TIMEOUT,
|
|
37
|
+
llmSummary: WORKFLOW.LLM_SUMMARY_TIMEOUT,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
output: {
|
|
41
|
+
dir: '.bellwether',
|
|
42
|
+
docsDir: '.',
|
|
43
|
+
format: 'both',
|
|
44
|
+
examples: {
|
|
45
|
+
full: true,
|
|
46
|
+
maxLength: 5000,
|
|
47
|
+
maxPerTool: 5,
|
|
48
|
+
},
|
|
49
|
+
files: {
|
|
50
|
+
checkReport: PATHS.DEFAULT_CHECK_REPORT_FILE,
|
|
51
|
+
exploreReport: PATHS.DEFAULT_EXPLORE_REPORT_FILE,
|
|
52
|
+
contractDoc: PATHS.DEFAULT_CONTRACT_FILE,
|
|
53
|
+
agentsDoc: PATHS.DEFAULT_AGENTS_FILE,
|
|
54
|
+
verificationReport: PATHS.DEFAULT_VERIFICATION_REPORT_FILE,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
check: {
|
|
58
|
+
incremental: false,
|
|
59
|
+
incrementalCacheHours: 168,
|
|
60
|
+
parallel: true,
|
|
61
|
+
parallelWorkers: INTERVIEW.DEFAULT_TOOL_CONCURRENCY,
|
|
62
|
+
performanceThreshold: 10,
|
|
63
|
+
diffFormat: 'text',
|
|
64
|
+
warmupRuns: 0,
|
|
65
|
+
smartTestValues: true,
|
|
66
|
+
statefulTesting: {
|
|
67
|
+
enabled: true,
|
|
68
|
+
maxChainLength: 5,
|
|
69
|
+
shareOutputsBetweenTools: true,
|
|
70
|
+
},
|
|
71
|
+
externalServices: {
|
|
72
|
+
mode: 'skip',
|
|
73
|
+
services: {},
|
|
74
|
+
},
|
|
75
|
+
assertions: {
|
|
76
|
+
enabled: true,
|
|
77
|
+
strict: false,
|
|
78
|
+
infer: true,
|
|
79
|
+
},
|
|
80
|
+
rateLimit: {
|
|
81
|
+
enabled: false,
|
|
82
|
+
requestsPerSecond: 10,
|
|
83
|
+
burstLimit: 20,
|
|
84
|
+
backoffStrategy: 'exponential',
|
|
85
|
+
maxRetries: 3,
|
|
86
|
+
},
|
|
87
|
+
security: {
|
|
88
|
+
enabled: false,
|
|
89
|
+
categories: [
|
|
90
|
+
'sql_injection',
|
|
91
|
+
'xss',
|
|
92
|
+
'path_traversal',
|
|
93
|
+
'command_injection',
|
|
94
|
+
'ssrf',
|
|
95
|
+
'error_disclosure',
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
sampling: {
|
|
99
|
+
minSamples: 10,
|
|
100
|
+
targetConfidence: 'low',
|
|
101
|
+
failOnLowConfidence: false,
|
|
102
|
+
},
|
|
103
|
+
metrics: {
|
|
104
|
+
countValidationAsSuccess: true,
|
|
105
|
+
separateValidationMetrics: true,
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
baseline: {
|
|
109
|
+
path: PATHS.DEFAULT_BASELINE_FILE,
|
|
110
|
+
savePath: '.bellwether/bellwether-baseline.json',
|
|
111
|
+
failOnDrift: false,
|
|
112
|
+
outputFormat: 'text',
|
|
113
|
+
severity: {
|
|
114
|
+
minimumSeverity: 'none',
|
|
115
|
+
failOnSeverity: 'breaking',
|
|
116
|
+
suppressWarnings: false,
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
watch: {
|
|
120
|
+
path: '.',
|
|
121
|
+
interval: TIMEOUTS.WATCH_INTERVAL,
|
|
122
|
+
extensions: ['.ts', '.js', '.json', '.py', '.go'],
|
|
123
|
+
},
|
|
124
|
+
cache: {
|
|
125
|
+
enabled: true,
|
|
126
|
+
dir: PATHS.DEFAULT_CACHE_DIR,
|
|
127
|
+
},
|
|
128
|
+
logging: {
|
|
129
|
+
level: 'info',
|
|
130
|
+
verbose: false,
|
|
131
|
+
},
|
|
132
|
+
discovery: {
|
|
133
|
+
json: false,
|
|
134
|
+
timeout: TIMEOUTS.DEFAULT,
|
|
135
|
+
transport: 'stdio',
|
|
136
|
+
},
|
|
137
|
+
registry: {
|
|
138
|
+
limit: 10,
|
|
139
|
+
json: false,
|
|
140
|
+
},
|
|
141
|
+
history: {
|
|
142
|
+
limit: 10,
|
|
143
|
+
json: false,
|
|
144
|
+
},
|
|
145
|
+
link: {
|
|
146
|
+
defaultServerCommand: 'node dist/server.js',
|
|
147
|
+
},
|
|
148
|
+
golden: {
|
|
149
|
+
defaultArgs: '{}',
|
|
150
|
+
mode: 'structural',
|
|
151
|
+
compareFormat: 'text',
|
|
152
|
+
listFormat: 'text',
|
|
153
|
+
normalizeTimestamps: true,
|
|
154
|
+
normalizeUuids: true,
|
|
155
|
+
},
|
|
156
|
+
verify: {
|
|
157
|
+
tier: 'silver',
|
|
158
|
+
security: false,
|
|
159
|
+
json: false,
|
|
160
|
+
badgeOnly: false,
|
|
161
|
+
},
|
|
162
|
+
contract: {
|
|
163
|
+
mode: 'strict',
|
|
164
|
+
format: 'text',
|
|
165
|
+
timeout: TIMEOUTS.DEFAULT,
|
|
166
|
+
failOnViolation: false,
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loader.
|
|
3
|
+
*
|
|
4
|
+
* Loads bellwether.yaml configuration. Config file is REQUIRED for running tests.
|
|
5
|
+
* Use `bellwether init` to create a config file with all options documented.
|
|
6
|
+
*/
|
|
7
|
+
import { type BellwetherConfig } from './validator.js';
|
|
8
|
+
export type { BellwetherConfig };
|
|
9
|
+
/**
|
|
10
|
+
* Error thrown when no config file is found.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ConfigNotFoundError extends Error {
|
|
13
|
+
constructor(searchedPaths?: string[]);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Load configuration from file. Config file is REQUIRED.
|
|
17
|
+
*
|
|
18
|
+
* @param explicitPath - Optional explicit path to config file
|
|
19
|
+
* @returns Validated configuration
|
|
20
|
+
* @throws ConfigNotFoundError if no config file is found
|
|
21
|
+
* @throws Error if config file is invalid
|
|
22
|
+
*/
|
|
23
|
+
export declare function loadConfig(explicitPath?: string): BellwetherConfig;
|
|
24
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loader.
|
|
3
|
+
*
|
|
4
|
+
* Loads bellwether.yaml configuration. Config file is REQUIRED for running tests.
|
|
5
|
+
* Use `bellwether init` to create a config file with all options documented.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync } from 'fs';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { parseYamlSecure } from '../utils/yaml-parser.js';
|
|
10
|
+
import { validateConfig, findConfigFile, } from './validator.js';
|
|
11
|
+
import { PATHS } from '../constants.js';
|
|
12
|
+
/**
|
|
13
|
+
* Interpolate environment variables in a string.
|
|
14
|
+
* Supports ${VAR} and $VAR syntax.
|
|
15
|
+
*
|
|
16
|
+
* @param value - String that may contain env var references
|
|
17
|
+
* @returns String with env vars replaced with their values
|
|
18
|
+
*/
|
|
19
|
+
function interpolateEnvVars(value) {
|
|
20
|
+
// Match ${VAR} or ${VAR:-default} syntax
|
|
21
|
+
return value.replace(/\$\{([^}]+)\}/g, (match, expr) => {
|
|
22
|
+
// Check for default value syntax: ${VAR:-default}
|
|
23
|
+
const [varName, defaultValue] = expr.split(':-');
|
|
24
|
+
const envValue = process.env[varName.trim()];
|
|
25
|
+
if (envValue !== undefined) {
|
|
26
|
+
return envValue;
|
|
27
|
+
}
|
|
28
|
+
if (defaultValue !== undefined) {
|
|
29
|
+
return defaultValue;
|
|
30
|
+
}
|
|
31
|
+
// Return original if no value and no default
|
|
32
|
+
return match;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Recursively interpolate environment variables in a config object.
|
|
37
|
+
* Only interpolates string values.
|
|
38
|
+
*
|
|
39
|
+
* @param obj - Object to interpolate
|
|
40
|
+
* @returns New object with env vars interpolated
|
|
41
|
+
*/
|
|
42
|
+
function interpolateConfig(obj) {
|
|
43
|
+
if (obj === null || obj === undefined) {
|
|
44
|
+
return obj;
|
|
45
|
+
}
|
|
46
|
+
if (typeof obj === 'string') {
|
|
47
|
+
return interpolateEnvVars(obj);
|
|
48
|
+
}
|
|
49
|
+
if (Array.isArray(obj)) {
|
|
50
|
+
return obj.map((item) => interpolateConfig(item));
|
|
51
|
+
}
|
|
52
|
+
if (typeof obj === 'object') {
|
|
53
|
+
const result = {};
|
|
54
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
55
|
+
result[key] = interpolateConfig(value);
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
return obj;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Error thrown when no config file is found.
|
|
63
|
+
*/
|
|
64
|
+
export class ConfigNotFoundError extends Error {
|
|
65
|
+
constructor(searchedPaths) {
|
|
66
|
+
const message = searchedPaths
|
|
67
|
+
? `No bellwether config file found.\n\nSearched:\n${searchedPaths.map((p) => ` - ${p}`).join('\n')}\n\nRun \`bellwether init\` to create a config file.`
|
|
68
|
+
: 'No bellwether config file found.\n\nRun `bellwether init` to create a config file.';
|
|
69
|
+
super(message);
|
|
70
|
+
this.name = 'ConfigNotFoundError';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Load configuration from file. Config file is REQUIRED.
|
|
75
|
+
*
|
|
76
|
+
* @param explicitPath - Optional explicit path to config file
|
|
77
|
+
* @returns Validated configuration
|
|
78
|
+
* @throws ConfigNotFoundError if no config file is found
|
|
79
|
+
* @throws Error if config file is invalid
|
|
80
|
+
*/
|
|
81
|
+
export function loadConfig(explicitPath) {
|
|
82
|
+
// Find config file
|
|
83
|
+
const configPath = findConfigFile(explicitPath);
|
|
84
|
+
if (!configPath) {
|
|
85
|
+
// Build list of searched paths for helpful error message
|
|
86
|
+
const searchedPaths = explicitPath
|
|
87
|
+
? [explicitPath]
|
|
88
|
+
: PATHS.CONFIG_FILENAMES.map((name) => join(process.cwd(), name));
|
|
89
|
+
throw new ConfigNotFoundError(searchedPaths);
|
|
90
|
+
}
|
|
91
|
+
// Load and parse the file
|
|
92
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
93
|
+
let parsed;
|
|
94
|
+
try {
|
|
95
|
+
parsed = parseYamlSecure(content);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
throw new Error(`Invalid YAML in config file ${configPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
99
|
+
}
|
|
100
|
+
// Handle empty config files - treat as minimal valid config
|
|
101
|
+
if (parsed === null || parsed === undefined) {
|
|
102
|
+
parsed = {};
|
|
103
|
+
}
|
|
104
|
+
// Interpolate environment variables (e.g., ${PLEX_TOKEN})
|
|
105
|
+
parsed = interpolateConfig(parsed);
|
|
106
|
+
// SECURITY: Reject API keys stored directly in config files
|
|
107
|
+
const rawConfig = parsed;
|
|
108
|
+
const llmConfig = rawConfig.llm;
|
|
109
|
+
if (llmConfig?.apiKey || llmConfig?.openaiApiKey || llmConfig?.anthropicApiKey) {
|
|
110
|
+
throw new Error(`Security Error: API key found in config file "${configPath}".\n` +
|
|
111
|
+
`Storing API keys in config files is a security risk.\n\n` +
|
|
112
|
+
`Use environment variables instead:\n` +
|
|
113
|
+
` export OPENAI_API_KEY=sk-xxx\n` +
|
|
114
|
+
` export ANTHROPIC_API_KEY=sk-ant-xxx\n\n` +
|
|
115
|
+
`Or use the secure credential store:\n` +
|
|
116
|
+
` bellwether auth\n\n` +
|
|
117
|
+
`Remove any API key fields from your config file.`);
|
|
118
|
+
}
|
|
119
|
+
// Validate and apply defaults using the new schema
|
|
120
|
+
return validateConfig(parsed, configPath);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration template options.
|
|
3
|
+
*/
|
|
4
|
+
export interface ConfigTemplateOptions {
|
|
5
|
+
/** Server command (optional, can be set later) */
|
|
6
|
+
serverCommand?: string;
|
|
7
|
+
/** Server arguments */
|
|
8
|
+
serverArgs?: string[];
|
|
9
|
+
/** LLM provider for explore command */
|
|
10
|
+
provider?: 'ollama' | 'openai' | 'anthropic';
|
|
11
|
+
/** Preset name used to generate this config */
|
|
12
|
+
preset?: string;
|
|
13
|
+
/** Environment variables detected from .env.example */
|
|
14
|
+
envVars?: string[];
|
|
15
|
+
/** Whether to optimize for CI (affects baseline.failOnDrift default) */
|
|
16
|
+
ciOptimized?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate a comprehensive bellwether.yaml configuration file.
|
|
20
|
+
*
|
|
21
|
+
* The generated file includes ALL possible options with explanatory comments,
|
|
22
|
+
* so users can customize without consulting documentation.
|
|
23
|
+
*
|
|
24
|
+
* This config is used by both 'bellwether check' and 'bellwether explore' commands.
|
|
25
|
+
*/
|
|
26
|
+
export declare function generateConfigTemplate(options?: ConfigTemplateOptions): string;
|
|
27
|
+
/**
|
|
28
|
+
* Preset configurations for common use cases.
|
|
29
|
+
*/
|
|
30
|
+
export declare const PRESETS: Record<string, ConfigTemplateOptions>;
|
|
31
|
+
/**
|
|
32
|
+
* Get preset-specific YAML overrides for documentation purposes.
|
|
33
|
+
*
|
|
34
|
+
* @param presetName - Name of the preset (ci, security, thorough, local)
|
|
35
|
+
* @returns YAML string with preset-specific settings or null if preset not found
|
|
36
|
+
*/
|
|
37
|
+
export declare function getPresetOverrides(presetName: string): string | null;
|
|
38
|
+
/**
|
|
39
|
+
* Generate a preset-specific configuration.
|
|
40
|
+
*/
|
|
41
|
+
export declare function generatePresetConfig(presetName: string, options?: ConfigTemplateOptions): string;
|
|
42
|
+
//# sourceMappingURL=template.d.ts.map
|