@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,35 @@
|
|
|
1
|
+
import type { ToolProfile } from '../interview/types.js';
|
|
2
|
+
import type { PerformanceConfidence } from '../baseline/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Performance metrics for a single tool.
|
|
5
|
+
*/
|
|
6
|
+
export interface ToolPerformanceMetrics {
|
|
7
|
+
toolName: string;
|
|
8
|
+
callCount: number;
|
|
9
|
+
avgMs: number;
|
|
10
|
+
minMs: number;
|
|
11
|
+
maxMs: number;
|
|
12
|
+
p50Ms: number;
|
|
13
|
+
p95Ms: number;
|
|
14
|
+
stdDevMs: number;
|
|
15
|
+
errorRate: number;
|
|
16
|
+
/** Average time for tool execution only (MCP transport) */
|
|
17
|
+
avgToolMs?: number;
|
|
18
|
+
/** Average time for LLM analysis only */
|
|
19
|
+
avgAnalysisMs?: number;
|
|
20
|
+
/** Statistical confidence metrics */
|
|
21
|
+
confidence?: PerformanceConfidence;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Extract parameter list from schema.
|
|
25
|
+
*/
|
|
26
|
+
export declare function extractParameters(schema: Record<string, unknown> | undefined): string;
|
|
27
|
+
/**
|
|
28
|
+
* Heuristic detection of error responses for summarization.
|
|
29
|
+
*/
|
|
30
|
+
export declare function looksLikeError(text: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Calculate performance metrics for all tools.
|
|
33
|
+
*/
|
|
34
|
+
export declare function calculatePerformanceMetrics(profiles: ToolProfile[]): ToolPerformanceMetrics[];
|
|
35
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { PERFORMANCE_CONFIDENCE } from '../constants.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extract parameter list from schema.
|
|
4
|
+
*/
|
|
5
|
+
export function extractParameters(schema) {
|
|
6
|
+
if (!schema || typeof schema !== 'object') {
|
|
7
|
+
return '*none*';
|
|
8
|
+
}
|
|
9
|
+
const properties = schema.properties;
|
|
10
|
+
if (!properties || Object.keys(properties).length === 0) {
|
|
11
|
+
return '*none*';
|
|
12
|
+
}
|
|
13
|
+
const required = schema.required || [];
|
|
14
|
+
const params = Object.entries(properties).map(([name, prop]) => {
|
|
15
|
+
const propObj = prop;
|
|
16
|
+
const type = propObj.type || 'any';
|
|
17
|
+
const isRequired = required.includes(name);
|
|
18
|
+
return `\`${name}\`${isRequired ? '*' : ''}: ${type}`;
|
|
19
|
+
});
|
|
20
|
+
return params.slice(0, 3).join(', ') + (params.length > 3 ? ', ...' : '');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Heuristic detection of error responses for summarization.
|
|
24
|
+
*/
|
|
25
|
+
export function looksLikeError(text) {
|
|
26
|
+
const errorPatterns = [
|
|
27
|
+
/^error\s*[-:]/i,
|
|
28
|
+
/:\s*error\s*-/i,
|
|
29
|
+
/access denied/i,
|
|
30
|
+
/permission denied/i,
|
|
31
|
+
/not allowed/i,
|
|
32
|
+
/outside allowed/i,
|
|
33
|
+
/outside.*(predefined|allowed)/i,
|
|
34
|
+
/path outside/i,
|
|
35
|
+
/invalid path/i,
|
|
36
|
+
/failed to/i,
|
|
37
|
+
/could not/i,
|
|
38
|
+
/unable to/i,
|
|
39
|
+
/cannot\s+(access|read|write|create)/i,
|
|
40
|
+
/restricted to/i,
|
|
41
|
+
];
|
|
42
|
+
return errorPatterns.some((pattern) => pattern.test(text));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Calculate performance metrics for all tools.
|
|
46
|
+
*/
|
|
47
|
+
export function calculatePerformanceMetrics(profiles) {
|
|
48
|
+
const metrics = [];
|
|
49
|
+
for (const profile of profiles) {
|
|
50
|
+
const interactions = profile.interactions.filter(i => !i.mocked);
|
|
51
|
+
if (interactions.length === 0) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const durations = interactions.map(i => i.durationMs);
|
|
55
|
+
const errorCount = interactions.filter(i => i.error || i.response?.isError).length;
|
|
56
|
+
// Sort durations for percentile calculations
|
|
57
|
+
const sortedDurations = [...durations].sort((a, b) => a - b);
|
|
58
|
+
const p50Index = Math.floor(sortedDurations.length * 0.5);
|
|
59
|
+
const p95Index = Math.floor(sortedDurations.length * 0.95);
|
|
60
|
+
// Calculate separate averages for tool execution and LLM analysis
|
|
61
|
+
const toolDurations = interactions
|
|
62
|
+
.map(i => i.toolExecutionMs)
|
|
63
|
+
.filter((d) => d !== undefined && d > 0);
|
|
64
|
+
const analysisDurations = interactions
|
|
65
|
+
.map(i => i.llmAnalysisMs)
|
|
66
|
+
.filter((d) => d !== undefined && d > 0);
|
|
67
|
+
const avgToolMs = toolDurations.length > 0
|
|
68
|
+
? Math.round(toolDurations.reduce((a, b) => a + b, 0) / toolDurations.length)
|
|
69
|
+
: undefined;
|
|
70
|
+
const avgAnalysisMs = analysisDurations.length > 0
|
|
71
|
+
? Math.round(analysisDurations.reduce((a, b) => a + b, 0) / analysisDurations.length)
|
|
72
|
+
: undefined;
|
|
73
|
+
// Calculate average and standard deviation
|
|
74
|
+
const avgMs = durations.reduce((a, b) => a + b, 0) / durations.length;
|
|
75
|
+
const squaredDiffs = durations.map(d => Math.pow(d - avgMs, 2));
|
|
76
|
+
const variance = squaredDiffs.reduce((a, b) => a + b, 0) / durations.length;
|
|
77
|
+
const stdDevMs = Math.sqrt(variance);
|
|
78
|
+
// Calculate coefficient of variation and confidence using successful tool executions only
|
|
79
|
+
const successfulToolDurations = interactions
|
|
80
|
+
.filter(i => i.toolExecutionMs !== undefined && !i.error && !i.response?.isError)
|
|
81
|
+
.map(i => i.toolExecutionMs);
|
|
82
|
+
let confidenceCV;
|
|
83
|
+
let confidenceStdDev;
|
|
84
|
+
let confidenceSampleCount;
|
|
85
|
+
if (successfulToolDurations.length === 0) {
|
|
86
|
+
// All calls failed - low confidence
|
|
87
|
+
confidenceCV = 0;
|
|
88
|
+
confidenceStdDev = 0;
|
|
89
|
+
confidenceSampleCount = 0;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
const successMean = successfulToolDurations.reduce((a, b) => a + b, 0) / successfulToolDurations.length;
|
|
93
|
+
const successVariance = successfulToolDurations.reduce((sum, d) => sum + Math.pow(d - successMean, 2), 0) / successfulToolDurations.length;
|
|
94
|
+
confidenceStdDev = Math.sqrt(successVariance);
|
|
95
|
+
confidenceCV = successMean > 0 ? confidenceStdDev / successMean : 0;
|
|
96
|
+
confidenceSampleCount = successfulToolDurations.length;
|
|
97
|
+
}
|
|
98
|
+
const confidence = calculateConfidenceFromMetrics(confidenceSampleCount, confidenceCV, confidenceStdDev);
|
|
99
|
+
metrics.push({
|
|
100
|
+
toolName: profile.name,
|
|
101
|
+
callCount: interactions.length,
|
|
102
|
+
avgMs: Math.round(avgMs),
|
|
103
|
+
minMs: Math.min(...durations),
|
|
104
|
+
maxMs: Math.max(...durations),
|
|
105
|
+
p50Ms: sortedDurations[p50Index] ?? 0,
|
|
106
|
+
p95Ms: sortedDurations[Math.min(p95Index, sortedDurations.length - 1)] ?? 0,
|
|
107
|
+
stdDevMs: Math.round(stdDevMs),
|
|
108
|
+
errorRate: errorCount / interactions.length,
|
|
109
|
+
avgToolMs,
|
|
110
|
+
avgAnalysisMs,
|
|
111
|
+
confidence,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// Sort by avg response time (slowest first)
|
|
115
|
+
return metrics.sort((a, b) => b.avgMs - a.avgMs);
|
|
116
|
+
}
|
|
117
|
+
function calculateConfidenceFromMetrics(sampleCount, coefficientOfVariation, standardDeviation, totalTests) {
|
|
118
|
+
// Handle no samples case
|
|
119
|
+
if (sampleCount === 0) {
|
|
120
|
+
return {
|
|
121
|
+
sampleCount: 0,
|
|
122
|
+
successfulSamples: 0,
|
|
123
|
+
validationSamples: 0,
|
|
124
|
+
totalTests: totalTests ?? 0,
|
|
125
|
+
standardDeviation: 0,
|
|
126
|
+
coefficientOfVariation: 0,
|
|
127
|
+
confidenceLevel: 'low',
|
|
128
|
+
recommendation: PERFORMANCE_CONFIDENCE.RECOMMENDATIONS.NO_SAMPLES,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// Determine confidence level
|
|
132
|
+
let confidenceLevel;
|
|
133
|
+
let recommendation;
|
|
134
|
+
if (sampleCount >= PERFORMANCE_CONFIDENCE.HIGH.MIN_SAMPLES &&
|
|
135
|
+
coefficientOfVariation <= PERFORMANCE_CONFIDENCE.HIGH.MAX_CV) {
|
|
136
|
+
confidenceLevel = 'high';
|
|
137
|
+
}
|
|
138
|
+
else if (sampleCount >= PERFORMANCE_CONFIDENCE.MEDIUM.MIN_SAMPLES &&
|
|
139
|
+
coefficientOfVariation <= PERFORMANCE_CONFIDENCE.MEDIUM.MAX_CV) {
|
|
140
|
+
confidenceLevel = 'medium';
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
confidenceLevel = 'low';
|
|
144
|
+
if (sampleCount < PERFORMANCE_CONFIDENCE.HIGH.MIN_SAMPLES) {
|
|
145
|
+
recommendation = PERFORMANCE_CONFIDENCE.RECOMMENDATIONS.LOW_SAMPLES(sampleCount, PERFORMANCE_CONFIDENCE.HIGH.MIN_SAMPLES);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
recommendation = PERFORMANCE_CONFIDENCE.RECOMMENDATIONS.HIGH_VARIABILITY;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
sampleCount,
|
|
153
|
+
successfulSamples: sampleCount, // Assumes passed in count is successful samples
|
|
154
|
+
validationSamples: 0, // Not tracked at this level, set to 0
|
|
155
|
+
totalTests: totalTests ?? sampleCount,
|
|
156
|
+
standardDeviation,
|
|
157
|
+
coefficientOfVariation,
|
|
158
|
+
confidenceLevel,
|
|
159
|
+
recommendation,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documentation templates for AGENTS.md generation.
|
|
3
|
+
*/
|
|
4
|
+
export declare const AGENTS_MD_HEADER = "# {{serverName}}\n\n> Generated by [Bellwether](https://github.com/dotsetlabs/bellwether) on {{date}}\n\n";
|
|
5
|
+
export declare const OVERVIEW_SECTION = "## Overview\n\n{{summary}}\n\n**Server Version:** {{version}}\n**Protocol Version:** {{protocolVersion}}\n\n";
|
|
6
|
+
export declare const CAPABILITIES_SECTION = "## Capabilities\n\n{{#each capabilities}}\n- **{{name}}**: {{count}} available\n{{/each}}\n\n";
|
|
7
|
+
export declare const TOOL_SECTION_HEADER = "## Tools\n\n";
|
|
8
|
+
export declare const TOOL_ENTRY = "### {{name}}\n\n{{description}}\n\n**Input Schema:**\n```json\n{{inputSchema}}\n```\n\n{{#if behavioralNotes}}\n**Observed Behavior:**\n{{#each behavioralNotes}}\n- {{this}}\n{{/each}}\n{{/if}}\n\n{{#if limitations}}\n**Limitations:**\n{{#each limitations}}\n- {{this}}\n{{/each}}\n{{/if}}\n\n{{#if securityNotes}}\n**Security Considerations:**\n{{#each securityNotes}}\n- {{this}}\n{{/each}}\n{{/if}}\n\n";
|
|
9
|
+
export declare const LIMITATIONS_SECTION = "## Known Limitations\n\n{{#each limitations}}\n- {{this}}\n{{/each}}\n\n";
|
|
10
|
+
export declare const RECOMMENDATIONS_SECTION = "## Recommendations\n\n{{#each recommendations}}\n- {{this}}\n{{/each}}\n\n";
|
|
11
|
+
export declare const INTERVIEW_METADATA = "---\n\n*Interview completed in {{duration}}ms with {{toolCalls}} tool calls.*\n";
|
|
12
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documentation templates for AGENTS.md generation.
|
|
3
|
+
*/
|
|
4
|
+
export const AGENTS_MD_HEADER = `# {{serverName}}
|
|
5
|
+
|
|
6
|
+
> Generated by [Bellwether](https://github.com/dotsetlabs/bellwether) on {{date}}
|
|
7
|
+
|
|
8
|
+
`;
|
|
9
|
+
export const OVERVIEW_SECTION = `## Overview
|
|
10
|
+
|
|
11
|
+
{{summary}}
|
|
12
|
+
|
|
13
|
+
**Server Version:** {{version}}
|
|
14
|
+
**Protocol Version:** {{protocolVersion}}
|
|
15
|
+
|
|
16
|
+
`;
|
|
17
|
+
export const CAPABILITIES_SECTION = `## Capabilities
|
|
18
|
+
|
|
19
|
+
{{#each capabilities}}
|
|
20
|
+
- **{{name}}**: {{count}} available
|
|
21
|
+
{{/each}}
|
|
22
|
+
|
|
23
|
+
`;
|
|
24
|
+
export const TOOL_SECTION_HEADER = `## Tools
|
|
25
|
+
|
|
26
|
+
`;
|
|
27
|
+
export const TOOL_ENTRY = `### {{name}}
|
|
28
|
+
|
|
29
|
+
{{description}}
|
|
30
|
+
|
|
31
|
+
**Input Schema:**
|
|
32
|
+
\`\`\`json
|
|
33
|
+
{{inputSchema}}
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
{{#if behavioralNotes}}
|
|
37
|
+
**Observed Behavior:**
|
|
38
|
+
{{#each behavioralNotes}}
|
|
39
|
+
- {{this}}
|
|
40
|
+
{{/each}}
|
|
41
|
+
{{/if}}
|
|
42
|
+
|
|
43
|
+
{{#if limitations}}
|
|
44
|
+
**Limitations:**
|
|
45
|
+
{{#each limitations}}
|
|
46
|
+
- {{this}}
|
|
47
|
+
{{/each}}
|
|
48
|
+
{{/if}}
|
|
49
|
+
|
|
50
|
+
{{#if securityNotes}}
|
|
51
|
+
**Security Considerations:**
|
|
52
|
+
{{#each securityNotes}}
|
|
53
|
+
- {{this}}
|
|
54
|
+
{{/each}}
|
|
55
|
+
{{/if}}
|
|
56
|
+
|
|
57
|
+
`;
|
|
58
|
+
export const LIMITATIONS_SECTION = `## Known Limitations
|
|
59
|
+
|
|
60
|
+
{{#each limitations}}
|
|
61
|
+
- {{this}}
|
|
62
|
+
{{/each}}
|
|
63
|
+
|
|
64
|
+
`;
|
|
65
|
+
export const RECOMMENDATIONS_SECTION = `## Recommendations
|
|
66
|
+
|
|
67
|
+
{{#each recommendations}}
|
|
68
|
+
- {{this}}
|
|
69
|
+
{{/each}}
|
|
70
|
+
|
|
71
|
+
`;
|
|
72
|
+
export const INTERVIEW_METADATA = `---
|
|
73
|
+
|
|
74
|
+
*Interview completed in {{duration}}ms with {{toolCalls}} tool calls.*
|
|
75
|
+
`;
|
|
76
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry logic with exponential backoff.
|
|
3
|
+
*/
|
|
4
|
+
import { type ErrorContext } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Retry options.
|
|
7
|
+
*/
|
|
8
|
+
export interface RetryOptions {
|
|
9
|
+
/** Maximum number of retry attempts (default: 3) */
|
|
10
|
+
maxAttempts?: number;
|
|
11
|
+
/** Initial delay in milliseconds (default: 1000) */
|
|
12
|
+
initialDelayMs?: number;
|
|
13
|
+
/** Maximum delay in milliseconds (default: 30000) */
|
|
14
|
+
maxDelayMs?: number;
|
|
15
|
+
/** Backoff multiplier (default: 2) */
|
|
16
|
+
backoffMultiplier?: number;
|
|
17
|
+
/** Add jitter to delays (default: true) */
|
|
18
|
+
jitter?: boolean;
|
|
19
|
+
/** Custom retry condition (default: isRetryable) */
|
|
20
|
+
shouldRetry?: (error: unknown, attempt: number) => boolean;
|
|
21
|
+
/** Callback on retry (for logging) */
|
|
22
|
+
onRetry?: (error: unknown, attempt: number, delayMs: number) => void;
|
|
23
|
+
/** Operation name for logging */
|
|
24
|
+
operation?: string;
|
|
25
|
+
/** Additional context for errors */
|
|
26
|
+
context?: ErrorContext;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Execute a function with retry logic.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const result = await withRetry(
|
|
34
|
+
* async () => await llmClient.complete(prompt),
|
|
35
|
+
* { maxAttempts: 3, operation: 'LLM completion' }
|
|
36
|
+
* );
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
|
|
40
|
+
/**
|
|
41
|
+
* Create a retry wrapper for a specific operation.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const retryableFetch = createRetryWrapper({
|
|
46
|
+
* maxAttempts: 5,
|
|
47
|
+
* operation: 'API fetch'
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
* const data = await retryableFetch(() => fetchData());
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare function createRetryWrapper(defaultOptions: RetryOptions): <T>(fn: () => Promise<T>, overrides?: RetryOptions) => Promise<T>;
|
|
54
|
+
/**
|
|
55
|
+
* Retry options specifically tuned for LLM calls.
|
|
56
|
+
*/
|
|
57
|
+
export declare const LLM_RETRY_OPTIONS: RetryOptions;
|
|
58
|
+
/**
|
|
59
|
+
* Retry options for MCP transport operations.
|
|
60
|
+
*/
|
|
61
|
+
export declare const TRANSPORT_RETRY_OPTIONS: RetryOptions;
|
|
62
|
+
/**
|
|
63
|
+
* Retry options for tool calls during interviews.
|
|
64
|
+
*/
|
|
65
|
+
export declare const TOOL_CALL_RETRY_OPTIONS: RetryOptions;
|
|
66
|
+
/**
|
|
67
|
+
* Circuit breaker options.
|
|
68
|
+
*/
|
|
69
|
+
export interface CircuitBreakerOptions {
|
|
70
|
+
/** Number of failures before opening circuit (default: 5) */
|
|
71
|
+
failureThreshold?: number;
|
|
72
|
+
/** Time in ms before attempting to close circuit (default: 30000) */
|
|
73
|
+
resetTimeMs?: number;
|
|
74
|
+
/** Time window for counting failures in ms (default: 60000) */
|
|
75
|
+
failureWindowMs?: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create a circuit breaker for an operation.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const protectedCall = createCircuitBreaker('llm-api');
|
|
83
|
+
*
|
|
84
|
+
* try {
|
|
85
|
+
* const result = await protectedCall(() => llmClient.complete(prompt));
|
|
86
|
+
* } catch (error) {
|
|
87
|
+
* // Either operation error or circuit open error
|
|
88
|
+
* }
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
export declare function createCircuitBreaker(name: string, options?: CircuitBreakerOptions): <T>(fn: () => Promise<T>) => Promise<T>;
|
|
92
|
+
//# sourceMappingURL=retry.d.ts.map
|