@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,647 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration templates for bellwether init.
|
|
3
|
+
*
|
|
4
|
+
* These templates include ALL possible options with comments,
|
|
5
|
+
* making the config file self-documenting.
|
|
6
|
+
*/
|
|
7
|
+
import { CONFIG_DEFAULTS } from './defaults.js';
|
|
8
|
+
function formatYamlList(values, indent = 4) {
|
|
9
|
+
const pad = ' '.repeat(indent);
|
|
10
|
+
return values.map((value) => `${pad}- ${value}`).join('\n');
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Generate a comprehensive bellwether.yaml configuration file.
|
|
14
|
+
*
|
|
15
|
+
* The generated file includes ALL possible options with explanatory comments,
|
|
16
|
+
* so users can customize without consulting documentation.
|
|
17
|
+
*
|
|
18
|
+
* This config is used by both 'bellwether check' and 'bellwether explore' commands.
|
|
19
|
+
*/
|
|
20
|
+
export function generateConfigTemplate(options = {}) {
|
|
21
|
+
const { serverCommand = '', serverArgs = [], provider = 'ollama', preset, envVars = [], ciOptimized = false, } = options;
|
|
22
|
+
const defaults = CONFIG_DEFAULTS;
|
|
23
|
+
const serverArgsYaml = serverArgs.length > 0
|
|
24
|
+
? `\n args:\n${serverArgs.map(arg => ` - "${arg}"`).join('\n')}`
|
|
25
|
+
: '\n args: []';
|
|
26
|
+
const presetComment = preset ? `# Generated with: bellwether init --preset ${preset}\n` : '';
|
|
27
|
+
// Generate env section if env vars were detected
|
|
28
|
+
const envVarsYaml = envVars.length > 0
|
|
29
|
+
? `\n env:\n${envVars.map(v => ` ${v}: "\${${v}}"`).join('\n')}`
|
|
30
|
+
: '';
|
|
31
|
+
return `# Bellwether Configuration
|
|
32
|
+
# Generated by: bellwether init
|
|
33
|
+
# Docs: https://docs.bellwether.sh/guides/configuration
|
|
34
|
+
${presetComment}
|
|
35
|
+
# This config is used by both commands:
|
|
36
|
+
# bellwether check - Schema validation and drift detection (free, fast)
|
|
37
|
+
# bellwether explore - LLM-powered behavioral exploration
|
|
38
|
+
|
|
39
|
+
# =============================================================================
|
|
40
|
+
# SERVER (used by both commands)
|
|
41
|
+
# =============================================================================
|
|
42
|
+
# The MCP server to validate/explore.
|
|
43
|
+
|
|
44
|
+
server:
|
|
45
|
+
# Command to start the MCP server
|
|
46
|
+
command: "${serverCommand}"
|
|
47
|
+
# Arguments to pass to the server command${serverArgsYaml}
|
|
48
|
+
|
|
49
|
+
# Timeout for server startup and tool calls (milliseconds, default: ${defaults.server.timeout})
|
|
50
|
+
timeout: ${defaults.server.timeout}
|
|
51
|
+
|
|
52
|
+
# Additional environment variables for the server process
|
|
53
|
+
# Use \${VAR} syntax to reference environment variables${envVarsYaml}${envVars.length === 0 ? `
|
|
54
|
+
# env:
|
|
55
|
+
# NODE_ENV: production
|
|
56
|
+
# API_KEY: "\${API_KEY}"` : ''}
|
|
57
|
+
|
|
58
|
+
# =============================================================================
|
|
59
|
+
# SCENARIOS (used by both commands)
|
|
60
|
+
# =============================================================================
|
|
61
|
+
# Custom deterministic test scenarios for reproducible testing.
|
|
62
|
+
|
|
63
|
+
scenarios:
|
|
64
|
+
# Path to scenarios YAML file
|
|
65
|
+
# path: "./bellwether-tests.yaml"
|
|
66
|
+
|
|
67
|
+
# Run ONLY scenarios (skip generated tests)
|
|
68
|
+
only: ${defaults.scenarios.only}
|
|
69
|
+
|
|
70
|
+
# =============================================================================
|
|
71
|
+
# OUTPUT (used by both commands)
|
|
72
|
+
# =============================================================================
|
|
73
|
+
# bellwether outputs: documentation + JSON reports (configurable via output.files)
|
|
74
|
+
|
|
75
|
+
output:
|
|
76
|
+
# Directory for JSON output files (see output.files)
|
|
77
|
+
dir: "${defaults.output.dir}"
|
|
78
|
+
|
|
79
|
+
# Directory for documentation files (CONTRACT.md, AGENTS.md)
|
|
80
|
+
# These are kept in root by default for visibility
|
|
81
|
+
docsDir: "${defaults.output.docsDir}"
|
|
82
|
+
|
|
83
|
+
# Output format: agents.md (markdown only), json (JSON only), or both
|
|
84
|
+
format: ${defaults.output.format}
|
|
85
|
+
|
|
86
|
+
# Example output settings (for CONTRACT.md and AGENTS.md)
|
|
87
|
+
examples:
|
|
88
|
+
# Include full (non-truncated) examples in documentation
|
|
89
|
+
full: ${defaults.output.examples.full}
|
|
90
|
+
|
|
91
|
+
# Maximum example length in characters (100-50000)
|
|
92
|
+
maxLength: ${defaults.output.examples.maxLength}
|
|
93
|
+
|
|
94
|
+
# Maximum examples per tool (1-20)
|
|
95
|
+
maxPerTool: ${defaults.output.examples.maxPerTool}
|
|
96
|
+
|
|
97
|
+
# Output file names (relative to output dirs above)
|
|
98
|
+
files:
|
|
99
|
+
checkReport: ${defaults.output.files.checkReport}
|
|
100
|
+
exploreReport: ${defaults.output.files.exploreReport}
|
|
101
|
+
contractDoc: ${defaults.output.files.contractDoc}
|
|
102
|
+
agentsDoc: ${defaults.output.files.agentsDoc}
|
|
103
|
+
verificationReport: ${defaults.output.files.verificationReport}
|
|
104
|
+
|
|
105
|
+
# =============================================================================
|
|
106
|
+
# CHECK COMMAND SETTINGS
|
|
107
|
+
# =============================================================================
|
|
108
|
+
# Settings for 'bellwether check' - schema validation and drift detection.
|
|
109
|
+
# Free, fast, deterministic. No LLM required.
|
|
110
|
+
|
|
111
|
+
baseline:
|
|
112
|
+
# Default baseline file path (relative to output.dir or absolute)
|
|
113
|
+
path: ${defaults.baseline.path}
|
|
114
|
+
|
|
115
|
+
# Auto-save baseline after each check (set path to enable)
|
|
116
|
+
# savePath: "./bellwether-baseline.json"
|
|
117
|
+
|
|
118
|
+
# Path to baseline for drift comparison (enables drift detection)
|
|
119
|
+
# comparePath: "./bellwether-baseline.json"
|
|
120
|
+
|
|
121
|
+
# Fail if drift is detected (useful for CI)
|
|
122
|
+
failOnDrift: ${ciOptimized ? 'true' : 'false'}
|
|
123
|
+
|
|
124
|
+
# Default output format for baseline compare/diff: text, json, markdown, compact
|
|
125
|
+
outputFormat: ${defaults.baseline.outputFormat}
|
|
126
|
+
|
|
127
|
+
# Severity thresholds for filtering and CI failure
|
|
128
|
+
severity:
|
|
129
|
+
# Minimum severity to include in reports: none, info, warning, breaking
|
|
130
|
+
minimumSeverity: ${defaults.baseline.severity.minimumSeverity}
|
|
131
|
+
|
|
132
|
+
# Severity at which to fail CI checks: none, info, warning, breaking
|
|
133
|
+
failOnSeverity: ${defaults.baseline.severity.failOnSeverity}
|
|
134
|
+
|
|
135
|
+
# Suppress warning-level changes from output
|
|
136
|
+
suppressWarnings: ${defaults.baseline.severity.suppressWarnings}
|
|
137
|
+
|
|
138
|
+
# Custom severity overrides per aspect (uncomment to use)
|
|
139
|
+
# aspectOverrides:
|
|
140
|
+
# description: none # Ignore description-only changes
|
|
141
|
+
# response_structure: info # Downgrade response structure to info
|
|
142
|
+
|
|
143
|
+
check:
|
|
144
|
+
# Enable incremental checking (only test tools with changed schemas)
|
|
145
|
+
# Requires an existing baseline for comparison
|
|
146
|
+
incremental: ${defaults.check.incremental}
|
|
147
|
+
|
|
148
|
+
# Maximum age of cached results in hours (for incremental checking)
|
|
149
|
+
# Default: 168 (1 week), Range: 1-720 (30 days)
|
|
150
|
+
incrementalCacheHours: ${defaults.check.incrementalCacheHours}
|
|
151
|
+
|
|
152
|
+
# Enable parallel tool testing for faster checks
|
|
153
|
+
# Recommended for servers with multiple tools
|
|
154
|
+
parallel: ${defaults.check.parallel}
|
|
155
|
+
|
|
156
|
+
# Number of concurrent tool workers (1-10)
|
|
157
|
+
# Higher values = faster but more server load
|
|
158
|
+
parallelWorkers: ${defaults.check.parallelWorkers}
|
|
159
|
+
|
|
160
|
+
# Performance regression threshold percentage (0-100)
|
|
161
|
+
# Tool is flagged if p50 latency increases by more than this percentage
|
|
162
|
+
performanceThreshold: ${defaults.check.performanceThreshold}
|
|
163
|
+
|
|
164
|
+
# Diff output format: text, json, compact, github, markdown, junit, sarif
|
|
165
|
+
diffFormat: ${defaults.check.diffFormat}
|
|
166
|
+
|
|
167
|
+
# Number of warmup runs before timing samples (0-5)
|
|
168
|
+
# First sample(s) are excluded from variance calculation to reduce cold-start noise
|
|
169
|
+
warmupRuns: ${defaults.check.warmupRuns}
|
|
170
|
+
|
|
171
|
+
# Enable smart test value generation from schema descriptions
|
|
172
|
+
# Parses descriptions for format hints (e.g., "YYYY-MM-DD" generates valid dates)
|
|
173
|
+
smartTestValues: ${defaults.check.smartTestValues}
|
|
174
|
+
|
|
175
|
+
# Stateful testing (create -> use -> delete) for tool dependencies
|
|
176
|
+
statefulTesting:
|
|
177
|
+
enabled: ${defaults.check.statefulTesting.enabled}
|
|
178
|
+
maxChainLength: ${defaults.check.statefulTesting.maxChainLength}
|
|
179
|
+
shareOutputsBetweenTools: ${defaults.check.statefulTesting.shareOutputsBetweenTools}
|
|
180
|
+
|
|
181
|
+
# External service handling for tools that need credentials
|
|
182
|
+
externalServices:
|
|
183
|
+
# Mode for unconfigured services: skip | mock | fail
|
|
184
|
+
mode: ${defaults.check.externalServices.mode}
|
|
185
|
+
# Per-service overrides (optional)
|
|
186
|
+
# services:
|
|
187
|
+
# plaid:
|
|
188
|
+
# enabled: false
|
|
189
|
+
# sandboxCredentials:
|
|
190
|
+
# clientId: "\${PLAID_CLIENT_ID}"
|
|
191
|
+
# secret: "\${PLAID_SECRET}"
|
|
192
|
+
|
|
193
|
+
# Response assertions (semantic validation of responses)
|
|
194
|
+
assertions:
|
|
195
|
+
enabled: ${defaults.check.assertions.enabled}
|
|
196
|
+
strict: ${defaults.check.assertions.strict}
|
|
197
|
+
infer: ${defaults.check.assertions.infer}
|
|
198
|
+
|
|
199
|
+
# Rate limiting controls
|
|
200
|
+
rateLimit:
|
|
201
|
+
enabled: ${defaults.check.rateLimit.enabled}
|
|
202
|
+
requestsPerSecond: ${defaults.check.rateLimit.requestsPerSecond}
|
|
203
|
+
burstLimit: ${defaults.check.rateLimit.burstLimit}
|
|
204
|
+
backoffStrategy: ${defaults.check.rateLimit.backoffStrategy}
|
|
205
|
+
maxRetries: ${defaults.check.rateLimit.maxRetries}
|
|
206
|
+
|
|
207
|
+
# Security testing settings
|
|
208
|
+
security:
|
|
209
|
+
# Enable security vulnerability testing
|
|
210
|
+
# Tests for SQL injection, XSS, path traversal, command injection, SSRF
|
|
211
|
+
enabled: ${defaults.check.security.enabled}
|
|
212
|
+
|
|
213
|
+
# Security categories to test (when enabled)
|
|
214
|
+
categories:
|
|
215
|
+
${formatYamlList(defaults.check.security.categories, 6)}
|
|
216
|
+
|
|
217
|
+
# Statistical sampling settings for performance baselines
|
|
218
|
+
sampling:
|
|
219
|
+
# Minimum samples per tool (1-50, default: 10)
|
|
220
|
+
# Higher values = more reliable baselines but longer test runs
|
|
221
|
+
minSamples: ${defaults.check.sampling.minSamples}
|
|
222
|
+
|
|
223
|
+
# Target confidence level: low (1+ samples), medium (5+), high (10+)
|
|
224
|
+
targetConfidence: ${defaults.check.sampling.targetConfidence}
|
|
225
|
+
|
|
226
|
+
# Fail if confidence is below target (useful for CI)
|
|
227
|
+
failOnLowConfidence: ${defaults.check.sampling.failOnLowConfidence}
|
|
228
|
+
|
|
229
|
+
# Metrics configuration
|
|
230
|
+
metrics:
|
|
231
|
+
# Count validation rejections as successes in reliability metrics
|
|
232
|
+
countValidationAsSuccess: ${defaults.check.metrics.countValidationAsSuccess}
|
|
233
|
+
# Separate validation metrics from happy-path reliability
|
|
234
|
+
separateValidationMetrics: ${defaults.check.metrics.separateValidationMetrics}
|
|
235
|
+
|
|
236
|
+
# =============================================================================
|
|
237
|
+
# EXPLORE COMMAND SETTINGS
|
|
238
|
+
# =============================================================================
|
|
239
|
+
# Settings for 'bellwether explore' - LLM-powered behavioral exploration.
|
|
240
|
+
# Requires LLM provider (Ollama is free and local).
|
|
241
|
+
|
|
242
|
+
llm:
|
|
243
|
+
# Provider: ollama (local, free), openai, or anthropic
|
|
244
|
+
provider: ${provider}
|
|
245
|
+
|
|
246
|
+
# Model to use. Leave empty for provider default.
|
|
247
|
+
# Defaults: ollama=qwen3:8b, openai=gpt-4.1-nano, anthropic=claude-haiku-4-5
|
|
248
|
+
model: "${defaults.llm.model}"
|
|
249
|
+
|
|
250
|
+
# Ollama settings (for local LLM)
|
|
251
|
+
ollama:
|
|
252
|
+
baseUrl: "${defaults.llm.ollama.baseUrl}"
|
|
253
|
+
|
|
254
|
+
# API keys are loaded from environment variables or 'bellwether auth'.
|
|
255
|
+
# SECURITY: Never put API keys directly in this file!
|
|
256
|
+
|
|
257
|
+
explore:
|
|
258
|
+
# Personas provide different testing perspectives:
|
|
259
|
+
# - technical_writer: Documentation quality, clarity, completeness
|
|
260
|
+
# - security_tester: Security vulnerabilities, input validation
|
|
261
|
+
# - qa_engineer: Edge cases, error handling, reliability
|
|
262
|
+
# - novice_user: Usability, confusing behavior, missing guidance
|
|
263
|
+
personas:
|
|
264
|
+
${formatYamlList(defaults.explore.personas, 4)}
|
|
265
|
+
|
|
266
|
+
# Maximum questions to ask per tool (1-10)
|
|
267
|
+
maxQuestionsPerTool: ${defaults.explore.maxQuestionsPerTool}
|
|
268
|
+
|
|
269
|
+
# Run personas in parallel for faster execution
|
|
270
|
+
parallelPersonas: ${defaults.explore.parallelPersonas}
|
|
271
|
+
|
|
272
|
+
# Maximum concurrent persona interviews (1-10)
|
|
273
|
+
personaConcurrency: ${defaults.explore.personaConcurrency}
|
|
274
|
+
|
|
275
|
+
# Skip error/edge case testing
|
|
276
|
+
skipErrorTests: ${defaults.explore.skipErrorTests}
|
|
277
|
+
|
|
278
|
+
workflows:
|
|
279
|
+
# Path to workflow definitions YAML file
|
|
280
|
+
# path: "./bellwether-workflows.yaml"
|
|
281
|
+
|
|
282
|
+
# Enable LLM-based workflow discovery
|
|
283
|
+
discover: ${defaults.workflows.discover}
|
|
284
|
+
|
|
285
|
+
# Track state changes between workflow steps
|
|
286
|
+
trackState: ${defaults.workflows.trackState}
|
|
287
|
+
|
|
288
|
+
# Auto-generate workflows from discovered tools
|
|
289
|
+
autoGenerate: ${defaults.workflows.autoGenerate}
|
|
290
|
+
|
|
291
|
+
# Skip steps whose dependencies (previous steps providing data) have failed
|
|
292
|
+
# When true, a step that depends on data from a failed step will be skipped
|
|
293
|
+
requireSuccessfulDependencies: ${defaults.workflows.requireSuccessfulDependencies}
|
|
294
|
+
|
|
295
|
+
# Timeout per workflow step in milliseconds (1000-300000)
|
|
296
|
+
stepTimeout: ${defaults.workflows.stepTimeout}
|
|
297
|
+
|
|
298
|
+
# Timeout configuration for workflow operations (ms)
|
|
299
|
+
timeouts:
|
|
300
|
+
toolCall: ${defaults.workflows.timeouts.toolCall}
|
|
301
|
+
stateSnapshot: ${defaults.workflows.timeouts.stateSnapshot}
|
|
302
|
+
probeTool: ${defaults.workflows.timeouts.probeTool}
|
|
303
|
+
llmAnalysis: ${defaults.workflows.timeouts.llmAnalysis}
|
|
304
|
+
llmSummary: ${defaults.workflows.timeouts.llmSummary}
|
|
305
|
+
|
|
306
|
+
# =============================================================================
|
|
307
|
+
# WATCH MODE SETTINGS
|
|
308
|
+
# =============================================================================
|
|
309
|
+
# Settings for 'bellwether watch' - continuous drift monitoring.
|
|
310
|
+
|
|
311
|
+
watch:
|
|
312
|
+
# Path to watch for file changes
|
|
313
|
+
path: "${defaults.watch.path}"
|
|
314
|
+
|
|
315
|
+
# Polling interval in milliseconds (1000-60000)
|
|
316
|
+
interval: ${defaults.watch.interval}
|
|
317
|
+
|
|
318
|
+
# File extensions to watch for changes
|
|
319
|
+
extensions:
|
|
320
|
+
${formatYamlList(defaults.watch.extensions, 4)}
|
|
321
|
+
|
|
322
|
+
# Command to run when drift is detected (optional)
|
|
323
|
+
# onDrift: "npm test"
|
|
324
|
+
|
|
325
|
+
# =============================================================================
|
|
326
|
+
# COMMON SETTINGS
|
|
327
|
+
# =============================================================================
|
|
328
|
+
|
|
329
|
+
cache:
|
|
330
|
+
# Enable response caching (recommended)
|
|
331
|
+
enabled: ${defaults.cache.enabled}
|
|
332
|
+
|
|
333
|
+
# Cache directory
|
|
334
|
+
dir: "${defaults.cache.dir}"
|
|
335
|
+
|
|
336
|
+
logging:
|
|
337
|
+
# Log level: debug, info, warn, error, silent
|
|
338
|
+
level: ${defaults.logging.level}
|
|
339
|
+
|
|
340
|
+
# Show verbose output
|
|
341
|
+
verbose: ${defaults.logging.verbose}
|
|
342
|
+
|
|
343
|
+
# =============================================================================
|
|
344
|
+
# DISCOVER COMMAND SETTINGS
|
|
345
|
+
# =============================================================================
|
|
346
|
+
# Settings for 'bellwether discover' - capability discovery.
|
|
347
|
+
|
|
348
|
+
discovery:
|
|
349
|
+
# Output as JSON
|
|
350
|
+
json: ${defaults.discovery.json}
|
|
351
|
+
|
|
352
|
+
# Connection timeout in milliseconds
|
|
353
|
+
timeout: ${defaults.discovery.timeout}
|
|
354
|
+
|
|
355
|
+
# Transport type: stdio, sse, streamable-http
|
|
356
|
+
transport: ${defaults.discovery.transport}
|
|
357
|
+
|
|
358
|
+
# Remote MCP server URL (required for sse/streamable-http)
|
|
359
|
+
# url: "https://example.com/mcp"
|
|
360
|
+
|
|
361
|
+
# Session ID for remote server authentication
|
|
362
|
+
# sessionId: "session-id"
|
|
363
|
+
|
|
364
|
+
# =============================================================================
|
|
365
|
+
# REGISTRY COMMAND SETTINGS
|
|
366
|
+
# =============================================================================
|
|
367
|
+
# Settings for 'bellwether registry' - server lookup.
|
|
368
|
+
|
|
369
|
+
registry:
|
|
370
|
+
# Maximum results to show
|
|
371
|
+
limit: ${defaults.registry.limit}
|
|
372
|
+
|
|
373
|
+
# Output as JSON
|
|
374
|
+
json: ${defaults.registry.json}
|
|
375
|
+
|
|
376
|
+
# =============================================================================
|
|
377
|
+
# HISTORY COMMAND SETTINGS
|
|
378
|
+
# =============================================================================
|
|
379
|
+
# Settings for 'bellwether history' and 'bellwether diff' (cloud history).
|
|
380
|
+
|
|
381
|
+
history:
|
|
382
|
+
# Number of versions to show
|
|
383
|
+
limit: ${defaults.history.limit}
|
|
384
|
+
|
|
385
|
+
# Output as JSON
|
|
386
|
+
json: ${defaults.history.json}
|
|
387
|
+
|
|
388
|
+
# =============================================================================
|
|
389
|
+
# LINK COMMAND SETTINGS
|
|
390
|
+
# =============================================================================
|
|
391
|
+
# Settings for 'bellwether link' (cloud project linking).
|
|
392
|
+
|
|
393
|
+
link:
|
|
394
|
+
# Default server command when creating new projects
|
|
395
|
+
defaultServerCommand: "${defaults.link.defaultServerCommand}"
|
|
396
|
+
|
|
397
|
+
# =============================================================================
|
|
398
|
+
# GOLDEN COMMAND SETTINGS
|
|
399
|
+
# =============================================================================
|
|
400
|
+
# Settings for 'bellwether golden' output validation.
|
|
401
|
+
|
|
402
|
+
golden:
|
|
403
|
+
# Default JSON args for golden save
|
|
404
|
+
defaultArgs: '${defaults.golden.defaultArgs}'
|
|
405
|
+
|
|
406
|
+
# Default comparison mode: exact, structural, semantic
|
|
407
|
+
mode: ${defaults.golden.mode}
|
|
408
|
+
|
|
409
|
+
# Output format for compare: text, json, markdown
|
|
410
|
+
compareFormat: ${defaults.golden.compareFormat}
|
|
411
|
+
|
|
412
|
+
# Output format for list: text, json
|
|
413
|
+
listFormat: ${defaults.golden.listFormat}
|
|
414
|
+
|
|
415
|
+
# Normalize timestamps by default
|
|
416
|
+
normalizeTimestamps: ${defaults.golden.normalizeTimestamps}
|
|
417
|
+
|
|
418
|
+
# Normalize UUIDs by default
|
|
419
|
+
normalizeUuids: ${defaults.golden.normalizeUuids}
|
|
420
|
+
|
|
421
|
+
# =============================================================================
|
|
422
|
+
# VERIFY COMMAND SETTINGS
|
|
423
|
+
# =============================================================================
|
|
424
|
+
# Settings for 'bellwether verify' verification reports.
|
|
425
|
+
|
|
426
|
+
verify:
|
|
427
|
+
# Default verification tier: bronze, silver, gold, platinum
|
|
428
|
+
tier: ${defaults.verify.tier}
|
|
429
|
+
|
|
430
|
+
# Include security testing by default
|
|
431
|
+
security: ${defaults.verify.security}
|
|
432
|
+
|
|
433
|
+
# Output as JSON by default
|
|
434
|
+
json: ${defaults.verify.json}
|
|
435
|
+
|
|
436
|
+
# Output badge URL only by default
|
|
437
|
+
badgeOnly: ${defaults.verify.badgeOnly}
|
|
438
|
+
|
|
439
|
+
# =============================================================================
|
|
440
|
+
# CONTRACT COMMAND SETTINGS
|
|
441
|
+
# =============================================================================
|
|
442
|
+
# Settings for 'bellwether contract' - contract validation/generation.
|
|
443
|
+
|
|
444
|
+
contract:
|
|
445
|
+
# Default contract file path
|
|
446
|
+
# path: "./contract.bellwether.yaml"
|
|
447
|
+
|
|
448
|
+
# Validation mode: strict, lenient, report
|
|
449
|
+
mode: ${defaults.contract.mode}
|
|
450
|
+
|
|
451
|
+
# Output format: text, json, markdown
|
|
452
|
+
format: ${defaults.contract.format}
|
|
453
|
+
|
|
454
|
+
# Server startup timeout in milliseconds
|
|
455
|
+
timeout: ${defaults.contract.timeout}
|
|
456
|
+
|
|
457
|
+
# Exit with error when violations are found
|
|
458
|
+
failOnViolation: ${defaults.contract.failOnViolation}
|
|
459
|
+
`;
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Preset configurations for common use cases.
|
|
463
|
+
*/
|
|
464
|
+
export const PRESETS = {
|
|
465
|
+
/**
|
|
466
|
+
* CI preset: Optimized for 'bellwether check' in CI/CD pipelines.
|
|
467
|
+
* Fast, free, deterministic with failOnDrift enabled.
|
|
468
|
+
*/
|
|
469
|
+
ci: {
|
|
470
|
+
ciOptimized: true,
|
|
471
|
+
provider: 'ollama', // Not used by check, but sensible default
|
|
472
|
+
},
|
|
473
|
+
/**
|
|
474
|
+
* Security preset: Optimized for 'bellwether explore' with security focus.
|
|
475
|
+
*/
|
|
476
|
+
security: {
|
|
477
|
+
provider: 'anthropic',
|
|
478
|
+
},
|
|
479
|
+
/**
|
|
480
|
+
* Thorough preset: Optimized for 'bellwether explore' with all personas.
|
|
481
|
+
*/
|
|
482
|
+
thorough: {
|
|
483
|
+
provider: 'anthropic',
|
|
484
|
+
},
|
|
485
|
+
/**
|
|
486
|
+
* Local preset: Optimized for 'bellwether explore' with local Ollama.
|
|
487
|
+
* Free, private, no API keys needed.
|
|
488
|
+
*/
|
|
489
|
+
local: {
|
|
490
|
+
provider: 'ollama',
|
|
491
|
+
},
|
|
492
|
+
};
|
|
493
|
+
/**
|
|
494
|
+
* Get preset-specific YAML overrides for documentation purposes.
|
|
495
|
+
*
|
|
496
|
+
* @param presetName - Name of the preset (ci, security, thorough, local)
|
|
497
|
+
* @returns YAML string with preset-specific settings or null if preset not found
|
|
498
|
+
*/
|
|
499
|
+
export function getPresetOverrides(presetName) {
|
|
500
|
+
const preset = PRESETS[presetName];
|
|
501
|
+
if (!preset)
|
|
502
|
+
return null;
|
|
503
|
+
// Return additional YAML to append/override based on preset
|
|
504
|
+
switch (presetName) {
|
|
505
|
+
case 'ci':
|
|
506
|
+
return `
|
|
507
|
+
# CI Preset Overrides
|
|
508
|
+
# Optimized for 'bellwether check' in CI/CD pipelines
|
|
509
|
+
|
|
510
|
+
baseline:
|
|
511
|
+
failOnDrift: true
|
|
512
|
+
severity:
|
|
513
|
+
failOnSeverity: breaking
|
|
514
|
+
|
|
515
|
+
check:
|
|
516
|
+
parallel: true
|
|
517
|
+
parallelWorkers: 4
|
|
518
|
+
performanceThreshold: 10
|
|
519
|
+
sampling:
|
|
520
|
+
minSamples: 5
|
|
521
|
+
targetConfidence: medium
|
|
522
|
+
failOnLowConfidence: true
|
|
523
|
+
|
|
524
|
+
output:
|
|
525
|
+
examples:
|
|
526
|
+
full: false
|
|
527
|
+
maxLength: 1000
|
|
528
|
+
|
|
529
|
+
logging:
|
|
530
|
+
level: warn
|
|
531
|
+
`;
|
|
532
|
+
case 'security':
|
|
533
|
+
return `
|
|
534
|
+
# Security Preset Overrides
|
|
535
|
+
# Optimized for security-focused testing
|
|
536
|
+
|
|
537
|
+
check:
|
|
538
|
+
security:
|
|
539
|
+
enabled: true
|
|
540
|
+
categories:
|
|
541
|
+
- sql_injection
|
|
542
|
+
- xss
|
|
543
|
+
- path_traversal
|
|
544
|
+
- command_injection
|
|
545
|
+
- ssrf
|
|
546
|
+
sampling:
|
|
547
|
+
minSamples: 5
|
|
548
|
+
targetConfidence: high
|
|
549
|
+
|
|
550
|
+
llm:
|
|
551
|
+
provider: anthropic
|
|
552
|
+
model: claude-sonnet-4-5 # Better reasoning for security analysis
|
|
553
|
+
|
|
554
|
+
explore:
|
|
555
|
+
personas:
|
|
556
|
+
- technical_writer
|
|
557
|
+
- security_tester
|
|
558
|
+
- qa_engineer
|
|
559
|
+
maxQuestionsPerTool: 5
|
|
560
|
+
skipErrorTests: false
|
|
561
|
+
|
|
562
|
+
output:
|
|
563
|
+
examples:
|
|
564
|
+
full: true
|
|
565
|
+
maxLength: 5000
|
|
566
|
+
`;
|
|
567
|
+
case 'thorough':
|
|
568
|
+
return `
|
|
569
|
+
# Thorough Preset Overrides
|
|
570
|
+
# Comprehensive testing with all features enabled
|
|
571
|
+
|
|
572
|
+
check:
|
|
573
|
+
parallel: true
|
|
574
|
+
parallelWorkers: 6
|
|
575
|
+
security:
|
|
576
|
+
enabled: true
|
|
577
|
+
categories:
|
|
578
|
+
- sql_injection
|
|
579
|
+
- xss
|
|
580
|
+
- path_traversal
|
|
581
|
+
- command_injection
|
|
582
|
+
- ssrf
|
|
583
|
+
sampling:
|
|
584
|
+
minSamples: 10
|
|
585
|
+
targetConfidence: high
|
|
586
|
+
failOnLowConfidence: true
|
|
587
|
+
|
|
588
|
+
llm:
|
|
589
|
+
provider: anthropic
|
|
590
|
+
model: claude-sonnet-4-5
|
|
591
|
+
|
|
592
|
+
explore:
|
|
593
|
+
personas:
|
|
594
|
+
- technical_writer
|
|
595
|
+
- security_tester
|
|
596
|
+
- qa_engineer
|
|
597
|
+
- novice_user
|
|
598
|
+
maxQuestionsPerTool: 5
|
|
599
|
+
parallelPersonas: true
|
|
600
|
+
skipErrorTests: false
|
|
601
|
+
|
|
602
|
+
workflows:
|
|
603
|
+
discover: true
|
|
604
|
+
trackState: true
|
|
605
|
+
autoGenerate: true
|
|
606
|
+
|
|
607
|
+
output:
|
|
608
|
+
examples:
|
|
609
|
+
full: true
|
|
610
|
+
maxLength: 10000
|
|
611
|
+
maxPerTool: 10
|
|
612
|
+
`;
|
|
613
|
+
case 'local':
|
|
614
|
+
return `
|
|
615
|
+
# Local Preset Overrides
|
|
616
|
+
# Exploration using local Ollama (free, private)
|
|
617
|
+
|
|
618
|
+
llm:
|
|
619
|
+
provider: ollama
|
|
620
|
+
model: qwen3:8b
|
|
621
|
+
ollama:
|
|
622
|
+
baseUrl: "http://localhost:11434"
|
|
623
|
+
|
|
624
|
+
explore:
|
|
625
|
+
personas:
|
|
626
|
+
- technical_writer
|
|
627
|
+
maxQuestionsPerTool: 3
|
|
628
|
+
`;
|
|
629
|
+
default:
|
|
630
|
+
return null;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
/**
|
|
634
|
+
* Generate a preset-specific configuration.
|
|
635
|
+
*/
|
|
636
|
+
export function generatePresetConfig(presetName, options = {}) {
|
|
637
|
+
const preset = PRESETS[presetName];
|
|
638
|
+
if (!preset) {
|
|
639
|
+
throw new Error(`Unknown preset: ${presetName}. Available: ${Object.keys(PRESETS).join(', ')}`);
|
|
640
|
+
}
|
|
641
|
+
return generateConfigTemplate({
|
|
642
|
+
...preset,
|
|
643
|
+
...options,
|
|
644
|
+
preset: presetName,
|
|
645
|
+
});
|
|
646
|
+
}
|
|
647
|
+
//# sourceMappingURL=template.js.map
|