@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,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic type inference and validation.
|
|
3
|
+
*
|
|
4
|
+
* This module defines semantic types that can be inferred from parameter
|
|
5
|
+
* names and descriptions, enabling more intelligent validation testing.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Semantic types that can be inferred from parameter descriptions.
|
|
9
|
+
* Used to generate targeted validation tests.
|
|
10
|
+
*/
|
|
11
|
+
export type SemanticType = 'date_iso8601' | 'date_month' | 'datetime' | 'timestamp' | 'amount_currency' | 'percentage' | 'identifier' | 'email' | 'url' | 'phone' | 'ip_address' | 'file_path' | 'json' | 'base64' | 'regex' | 'unknown';
|
|
12
|
+
/**
|
|
13
|
+
* Inference result for a parameter.
|
|
14
|
+
* Contains the inferred semantic type and confidence level.
|
|
15
|
+
*/
|
|
16
|
+
export interface SemanticInference {
|
|
17
|
+
/** Parameter name that was analyzed */
|
|
18
|
+
paramName: string;
|
|
19
|
+
/** The inferred semantic type */
|
|
20
|
+
inferredType: SemanticType;
|
|
21
|
+
/** Confidence level (0-1) */
|
|
22
|
+
confidence: number;
|
|
23
|
+
/** Evidence supporting the inference */
|
|
24
|
+
evidence: string[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Result of validating a value against an expected semantic type.
|
|
28
|
+
*/
|
|
29
|
+
export interface SemanticValidationResult {
|
|
30
|
+
/** Parameter name that was validated */
|
|
31
|
+
paramName: string;
|
|
32
|
+
/** The expected semantic type */
|
|
33
|
+
expectedType: SemanticType;
|
|
34
|
+
/** The value that was validated */
|
|
35
|
+
providedValue: unknown;
|
|
36
|
+
/** Whether the value is valid for the expected type */
|
|
37
|
+
isValid: boolean;
|
|
38
|
+
/** Description of the validation issue (if invalid) */
|
|
39
|
+
issue?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Pattern definition for semantic type inference.
|
|
43
|
+
* Contains patterns to match against parameter names and descriptions.
|
|
44
|
+
*/
|
|
45
|
+
export interface SemanticPatternDefinition {
|
|
46
|
+
/** Patterns to match against parameter names */
|
|
47
|
+
namePatterns: RegExp[];
|
|
48
|
+
/** Patterns to match against parameter descriptions */
|
|
49
|
+
descriptionPatterns: RegExp[];
|
|
50
|
+
/** Optional patterns to validate actual values */
|
|
51
|
+
formatPatterns?: RegExp[];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Patterns for semantic type inference.
|
|
55
|
+
* Maps each semantic type to patterns that indicate that type.
|
|
56
|
+
*/
|
|
57
|
+
export declare const SEMANTIC_PATTERNS: Record<SemanticType, SemanticPatternDefinition>;
|
|
58
|
+
/**
|
|
59
|
+
* Get all known semantic types (excluding 'unknown').
|
|
60
|
+
*/
|
|
61
|
+
export declare function getAllSemanticTypes(): SemanticType[];
|
|
62
|
+
/**
|
|
63
|
+
* Check if a value is a valid SemanticType.
|
|
64
|
+
*/
|
|
65
|
+
export declare function isSemanticType(value: string): value is SemanticType;
|
|
66
|
+
//# sourceMappingURL=semantic-types.d.ts.map
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic type inference and validation.
|
|
3
|
+
*
|
|
4
|
+
* This module defines semantic types that can be inferred from parameter
|
|
5
|
+
* names and descriptions, enabling more intelligent validation testing.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Patterns for semantic type inference.
|
|
9
|
+
* Maps each semantic type to patterns that indicate that type.
|
|
10
|
+
*/
|
|
11
|
+
export const SEMANTIC_PATTERNS = {
|
|
12
|
+
date_iso8601: {
|
|
13
|
+
namePatterns: [/date/i, /day/i, /_at$/i, /created/i, /updated/i, /birth/i, /expir/i],
|
|
14
|
+
descriptionPatterns: [/YYYY-MM-DD/i, /ISO.?8601/i, /date format/i, /date string/i],
|
|
15
|
+
formatPatterns: [/^\d{4}-\d{2}-\d{2}$/],
|
|
16
|
+
},
|
|
17
|
+
date_month: {
|
|
18
|
+
namePatterns: [/month/i, /period/i, /billing_?month/i],
|
|
19
|
+
descriptionPatterns: [/YYYY-MM/i, /month format/i, /year-month/i],
|
|
20
|
+
formatPatterns: [/^\d{4}-\d{2}$/],
|
|
21
|
+
},
|
|
22
|
+
datetime: {
|
|
23
|
+
namePatterns: [/datetime/i, /timestamp/i, /time$/i, /created_?at/i, /updated_?at/i],
|
|
24
|
+
descriptionPatterns: [/ISO.?8601/i, /datetime/i, /\d{4}-\d{2}-\d{2}T/, /RFC.?3339/i],
|
|
25
|
+
formatPatterns: [/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/],
|
|
26
|
+
},
|
|
27
|
+
timestamp: {
|
|
28
|
+
namePatterns: [/timestamp/i, /unix/i, /epoch/i, /time_?ms/i, /millis/i],
|
|
29
|
+
descriptionPatterns: [/unix/i, /epoch/i, /milliseconds/i, /seconds since/i, /timestamp/i],
|
|
30
|
+
},
|
|
31
|
+
amount_currency: {
|
|
32
|
+
namePatterns: [/amount/i, /price/i, /cost/i, /fee/i, /total/i, /balance/i, /payment/i, /charge/i],
|
|
33
|
+
descriptionPatterns: [/currency/i, /dollar/i, /USD/i, /EUR/i, /amount/i, /monetary/i, /cents/i],
|
|
34
|
+
},
|
|
35
|
+
percentage: {
|
|
36
|
+
namePatterns: [/percent/i, /rate/i, /ratio/i, /progress/i, /completion/i],
|
|
37
|
+
descriptionPatterns: [/percent/i, /0-100/i, /0-1/i, /proportion/i, /percentage/i],
|
|
38
|
+
},
|
|
39
|
+
identifier: {
|
|
40
|
+
namePatterns: [/id$/i, /_id/i, /uuid/i, /guid/i, /sku/i, /code$/i],
|
|
41
|
+
descriptionPatterns: [/identifier/i, /UUID/i, /unique/i, /GUID/i],
|
|
42
|
+
},
|
|
43
|
+
email: {
|
|
44
|
+
namePatterns: [/email/i, /mail/i, /e_?mail/i],
|
|
45
|
+
descriptionPatterns: [/email/i, /@/, /e-mail/i],
|
|
46
|
+
formatPatterns: [/^[\w.-]+@[\w.-]+\.\w+$/],
|
|
47
|
+
},
|
|
48
|
+
url: {
|
|
49
|
+
namePatterns: [/url/i, /uri/i, /link/i, /href/i, /endpoint/i, /website/i],
|
|
50
|
+
descriptionPatterns: [/URL/i, /URI/i, /http/i, /link/i, /web address/i],
|
|
51
|
+
formatPatterns: [/^https?:\/\//i],
|
|
52
|
+
},
|
|
53
|
+
phone: {
|
|
54
|
+
namePatterns: [/phone/i, /tel/i, /mobile/i, /cell/i, /fax/i],
|
|
55
|
+
descriptionPatterns: [/phone/i, /telephone/i, /mobile/i, /number/i],
|
|
56
|
+
},
|
|
57
|
+
ip_address: {
|
|
58
|
+
namePatterns: [/ip/i, /ip_?address/i, /host/i, /server_?ip/i],
|
|
59
|
+
descriptionPatterns: [/IP address/i, /IPv4/i, /IPv6/i, /internet protocol/i],
|
|
60
|
+
},
|
|
61
|
+
file_path: {
|
|
62
|
+
namePatterns: [/path/i, /file/i, /directory/i, /dir/i, /folder/i, /filename/i],
|
|
63
|
+
descriptionPatterns: [/path/i, /file/i, /directory/i, /folder/i],
|
|
64
|
+
},
|
|
65
|
+
json: {
|
|
66
|
+
namePatterns: [/json/i, /data/i, /payload/i, /body/i, /config/i],
|
|
67
|
+
descriptionPatterns: [/JSON/i, /object/i, /serialized/i],
|
|
68
|
+
},
|
|
69
|
+
base64: {
|
|
70
|
+
namePatterns: [/base64/i, /encoded/i, /b64/i],
|
|
71
|
+
descriptionPatterns: [/base64/i, /encoded/i, /binary/i],
|
|
72
|
+
},
|
|
73
|
+
regex: {
|
|
74
|
+
namePatterns: [/regex/i, /pattern/i, /expression/i, /regexp/i],
|
|
75
|
+
descriptionPatterns: [/regex/i, /regular expression/i, /pattern/i, /regexp/i],
|
|
76
|
+
},
|
|
77
|
+
unknown: {
|
|
78
|
+
namePatterns: [],
|
|
79
|
+
descriptionPatterns: [],
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Get all known semantic types (excluding 'unknown').
|
|
84
|
+
*/
|
|
85
|
+
export function getAllSemanticTypes() {
|
|
86
|
+
return Object.keys(SEMANTIC_PATTERNS).filter((t) => t !== 'unknown');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Check if a value is a valid SemanticType.
|
|
90
|
+
*/
|
|
91
|
+
export function isSemanticType(value) {
|
|
92
|
+
return value in SEMANTIC_PATTERNS;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=semantic-types.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic validator for inferring and validating semantic types.
|
|
3
|
+
*
|
|
4
|
+
* This module provides functions to:
|
|
5
|
+
* 1. Infer semantic types from parameter names and descriptions
|
|
6
|
+
* 2. Validate values against expected semantic types
|
|
7
|
+
*/
|
|
8
|
+
import type { SemanticType, SemanticInference, SemanticValidationResult } from './semantic-types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Infer semantic type from parameter name and description.
|
|
11
|
+
*
|
|
12
|
+
* Uses pattern matching against known semantic type patterns to determine
|
|
13
|
+
* the most likely semantic type for a parameter.
|
|
14
|
+
*
|
|
15
|
+
* @param paramName - The name of the parameter
|
|
16
|
+
* @param description - Optional description of the parameter
|
|
17
|
+
* @param schemaFormat - Optional JSON Schema format hint
|
|
18
|
+
* @returns Inference result with type, confidence, and evidence
|
|
19
|
+
*/
|
|
20
|
+
export declare function inferSemanticType(paramName: string, description?: string, schemaFormat?: string): SemanticInference;
|
|
21
|
+
/**
|
|
22
|
+
* Validate a value against an expected semantic type.
|
|
23
|
+
*
|
|
24
|
+
* @param paramName - The name of the parameter being validated
|
|
25
|
+
* @param value - The value to validate
|
|
26
|
+
* @param expectedType - The expected semantic type
|
|
27
|
+
* @returns Validation result with validity and any issues
|
|
28
|
+
*/
|
|
29
|
+
export declare function validateSemanticValue(paramName: string, value: unknown, expectedType: SemanticType): SemanticValidationResult;
|
|
30
|
+
/**
|
|
31
|
+
* Validate all parameters in a tool call against inferred types.
|
|
32
|
+
*
|
|
33
|
+
* @param args - The arguments to validate
|
|
34
|
+
* @param inferences - The semantic inferences for each parameter
|
|
35
|
+
* @returns Array of validation results
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateAllParameters(args: Record<string, unknown>, inferences: SemanticInference[]): SemanticValidationResult[];
|
|
38
|
+
//# sourceMappingURL=semantic-validator.d.ts.map
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic validator for inferring and validating semantic types.
|
|
3
|
+
*
|
|
4
|
+
* This module provides functions to:
|
|
5
|
+
* 1. Infer semantic types from parameter names and descriptions
|
|
6
|
+
* 2. Validate values against expected semantic types
|
|
7
|
+
*/
|
|
8
|
+
import { SEMANTIC_PATTERNS } from './semantic-types.js';
|
|
9
|
+
import { SEMANTIC_VALIDATION } from '../constants.js';
|
|
10
|
+
/**
|
|
11
|
+
* Infer semantic type from parameter name and description.
|
|
12
|
+
*
|
|
13
|
+
* Uses pattern matching against known semantic type patterns to determine
|
|
14
|
+
* the most likely semantic type for a parameter.
|
|
15
|
+
*
|
|
16
|
+
* @param paramName - The name of the parameter
|
|
17
|
+
* @param description - Optional description of the parameter
|
|
18
|
+
* @param schemaFormat - Optional JSON Schema format hint
|
|
19
|
+
* @returns Inference result with type, confidence, and evidence
|
|
20
|
+
*/
|
|
21
|
+
export function inferSemanticType(paramName, description, schemaFormat) {
|
|
22
|
+
const evidence = [];
|
|
23
|
+
let bestMatch = 'unknown';
|
|
24
|
+
let bestConfidence = 0;
|
|
25
|
+
// Check schema format first (highest confidence)
|
|
26
|
+
if (schemaFormat) {
|
|
27
|
+
const formatType = mapFormatToSemanticType(schemaFormat);
|
|
28
|
+
if (formatType !== 'unknown') {
|
|
29
|
+
return {
|
|
30
|
+
paramName,
|
|
31
|
+
inferredType: formatType,
|
|
32
|
+
confidence: SEMANTIC_VALIDATION.CONFIDENCE.SCHEMA_FORMAT,
|
|
33
|
+
evidence: [`Schema format: ${schemaFormat}`],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Check each semantic type
|
|
38
|
+
for (const [type, patterns] of Object.entries(SEMANTIC_PATTERNS)) {
|
|
39
|
+
if (type === 'unknown')
|
|
40
|
+
continue;
|
|
41
|
+
let confidence = 0;
|
|
42
|
+
const typeEvidence = [];
|
|
43
|
+
// Check name patterns
|
|
44
|
+
for (const pattern of patterns.namePatterns) {
|
|
45
|
+
if (pattern.test(paramName)) {
|
|
46
|
+
confidence += SEMANTIC_VALIDATION.CONFIDENCE.NAME_PATTERN_MATCH;
|
|
47
|
+
typeEvidence.push(`Name matches pattern: ${pattern.source}`);
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Check description patterns
|
|
52
|
+
if (description) {
|
|
53
|
+
for (const pattern of patterns.descriptionPatterns) {
|
|
54
|
+
if (pattern.test(description)) {
|
|
55
|
+
confidence += SEMANTIC_VALIDATION.CONFIDENCE.DESCRIPTION_PATTERN_MATCH;
|
|
56
|
+
typeEvidence.push(`Description matches: ${pattern.source}`);
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (confidence > bestConfidence) {
|
|
62
|
+
bestConfidence = confidence;
|
|
63
|
+
bestMatch = type;
|
|
64
|
+
evidence.length = 0;
|
|
65
|
+
evidence.push(...typeEvidence);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
paramName,
|
|
70
|
+
inferredType: bestMatch,
|
|
71
|
+
confidence: Math.min(1, bestConfidence),
|
|
72
|
+
evidence,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Map JSON Schema format to semantic type.
|
|
77
|
+
*
|
|
78
|
+
* @param format - JSON Schema format string
|
|
79
|
+
* @returns Corresponding semantic type or 'unknown'
|
|
80
|
+
*/
|
|
81
|
+
function mapFormatToSemanticType(format) {
|
|
82
|
+
const formatLower = format.toLowerCase();
|
|
83
|
+
const formatMap = {
|
|
84
|
+
'date': 'date_iso8601',
|
|
85
|
+
'date-time': 'datetime',
|
|
86
|
+
'email': 'email',
|
|
87
|
+
'uri': 'url',
|
|
88
|
+
'url': 'url',
|
|
89
|
+
'uuid': 'identifier',
|
|
90
|
+
'ipv4': 'ip_address',
|
|
91
|
+
'ipv6': 'ip_address',
|
|
92
|
+
'ip-address': 'ip_address',
|
|
93
|
+
'hostname': 'url',
|
|
94
|
+
};
|
|
95
|
+
return formatMap[formatLower] ?? 'unknown';
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Validate a value against an expected semantic type.
|
|
99
|
+
*
|
|
100
|
+
* @param paramName - The name of the parameter being validated
|
|
101
|
+
* @param value - The value to validate
|
|
102
|
+
* @param expectedType - The expected semantic type
|
|
103
|
+
* @returns Validation result with validity and any issues
|
|
104
|
+
*/
|
|
105
|
+
export function validateSemanticValue(paramName, value, expectedType) {
|
|
106
|
+
if (expectedType === 'unknown') {
|
|
107
|
+
return { paramName, expectedType, providedValue: value, isValid: true };
|
|
108
|
+
}
|
|
109
|
+
if (typeof value !== 'string') {
|
|
110
|
+
// Non-string values can't be validated semantically
|
|
111
|
+
return { paramName, expectedType, providedValue: value, isValid: true };
|
|
112
|
+
}
|
|
113
|
+
const validators = {
|
|
114
|
+
date_iso8601: validateDate,
|
|
115
|
+
date_month: validateMonth,
|
|
116
|
+
datetime: validateDateTime,
|
|
117
|
+
timestamp: validateTimestamp,
|
|
118
|
+
amount_currency: validateAmount,
|
|
119
|
+
percentage: validatePercentage,
|
|
120
|
+
identifier: validateIdentifier,
|
|
121
|
+
email: validateEmail,
|
|
122
|
+
url: validateUrl,
|
|
123
|
+
phone: validatePhone,
|
|
124
|
+
ip_address: validateIpAddress,
|
|
125
|
+
file_path: () => null, // Paths are hard to validate generically
|
|
126
|
+
json: validateJson,
|
|
127
|
+
base64: validateBase64,
|
|
128
|
+
regex: validateRegex,
|
|
129
|
+
unknown: () => null,
|
|
130
|
+
};
|
|
131
|
+
const issue = validators[expectedType](value);
|
|
132
|
+
return {
|
|
133
|
+
paramName,
|
|
134
|
+
expectedType,
|
|
135
|
+
providedValue: value,
|
|
136
|
+
isValid: issue === null,
|
|
137
|
+
issue: issue ?? undefined,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Validate all parameters in a tool call against inferred types.
|
|
142
|
+
*
|
|
143
|
+
* @param args - The arguments to validate
|
|
144
|
+
* @param inferences - The semantic inferences for each parameter
|
|
145
|
+
* @returns Array of validation results
|
|
146
|
+
*/
|
|
147
|
+
export function validateAllParameters(args, inferences) {
|
|
148
|
+
const results = [];
|
|
149
|
+
for (const inference of inferences) {
|
|
150
|
+
const value = args[inference.paramName];
|
|
151
|
+
if (value !== undefined) {
|
|
152
|
+
results.push(validateSemanticValue(inference.paramName, value, inference.inferredType));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return results;
|
|
156
|
+
}
|
|
157
|
+
// ==================== Validation Functions ====================
|
|
158
|
+
/**
|
|
159
|
+
* Validate ISO 8601 date format (YYYY-MM-DD).
|
|
160
|
+
*/
|
|
161
|
+
function validateDate(value) {
|
|
162
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) {
|
|
163
|
+
return `Expected date format YYYY-MM-DD, got: ${value}`;
|
|
164
|
+
}
|
|
165
|
+
const date = new Date(value);
|
|
166
|
+
if (isNaN(date.getTime())) {
|
|
167
|
+
return `Invalid date: ${value}`;
|
|
168
|
+
}
|
|
169
|
+
// Validate the date components are valid
|
|
170
|
+
const [, month, day] = value.split('-').map(Number);
|
|
171
|
+
if (month < 1 || month > 12) {
|
|
172
|
+
return `Invalid month: ${month}`;
|
|
173
|
+
}
|
|
174
|
+
if (day < 1 || day > 31) {
|
|
175
|
+
return `Invalid day: ${day}`;
|
|
176
|
+
}
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Validate month format (YYYY-MM).
|
|
181
|
+
*/
|
|
182
|
+
function validateMonth(value) {
|
|
183
|
+
if (!/^\d{4}-\d{2}$/.test(value)) {
|
|
184
|
+
return `Expected month format YYYY-MM, got: ${value}`;
|
|
185
|
+
}
|
|
186
|
+
const [, month] = value.split('-').map(Number);
|
|
187
|
+
if (month < 1 || month > 12) {
|
|
188
|
+
return `Invalid month: ${month}`;
|
|
189
|
+
}
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Validate ISO 8601 datetime.
|
|
194
|
+
*/
|
|
195
|
+
function validateDateTime(value) {
|
|
196
|
+
const date = new Date(value);
|
|
197
|
+
if (isNaN(date.getTime())) {
|
|
198
|
+
return `Invalid datetime: ${value}`;
|
|
199
|
+
}
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Validate Unix timestamp.
|
|
204
|
+
*/
|
|
205
|
+
function validateTimestamp(value) {
|
|
206
|
+
const num = Number(value);
|
|
207
|
+
if (isNaN(num) || num < 0) {
|
|
208
|
+
return `Expected positive number for timestamp, got: ${value}`;
|
|
209
|
+
}
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Validate monetary amount.
|
|
214
|
+
*/
|
|
215
|
+
function validateAmount(value) {
|
|
216
|
+
// Remove currency symbols and commas
|
|
217
|
+
const cleaned = value.replace(/[$,\u20AC\u00A3]/g, '');
|
|
218
|
+
const num = Number(cleaned);
|
|
219
|
+
if (isNaN(num)) {
|
|
220
|
+
return `Expected numeric amount, got: ${value}`;
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Validate percentage.
|
|
226
|
+
*/
|
|
227
|
+
function validatePercentage(value) {
|
|
228
|
+
// Remove % symbol if present
|
|
229
|
+
const cleaned = value.replace(/%$/, '');
|
|
230
|
+
const num = Number(cleaned);
|
|
231
|
+
if (isNaN(num)) {
|
|
232
|
+
return `Expected numeric percentage, got: ${value}`;
|
|
233
|
+
}
|
|
234
|
+
// Don't enforce range - could be 0-1 or 0-100
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Validate identifier (non-empty string).
|
|
239
|
+
*/
|
|
240
|
+
function validateIdentifier(value) {
|
|
241
|
+
if (value.trim().length === 0) {
|
|
242
|
+
return 'Identifier cannot be empty';
|
|
243
|
+
}
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Validate email format.
|
|
248
|
+
*/
|
|
249
|
+
function validateEmail(value) {
|
|
250
|
+
// Basic email validation - requires @ and at least one dot after @
|
|
251
|
+
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
|
|
252
|
+
return `Invalid email format: ${value}`;
|
|
253
|
+
}
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Validate URL format.
|
|
258
|
+
*/
|
|
259
|
+
function validateUrl(value) {
|
|
260
|
+
try {
|
|
261
|
+
new URL(value);
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
return `Invalid URL: ${value}`;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Validate phone number (loose validation - at least 7 digits).
|
|
270
|
+
*/
|
|
271
|
+
function validatePhone(value) {
|
|
272
|
+
const digitsOnly = value.replace(/\D/g, '');
|
|
273
|
+
if (digitsOnly.length < 7) {
|
|
274
|
+
return `Invalid phone number (too few digits): ${value}`;
|
|
275
|
+
}
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Validate IP address (IPv4 or IPv6).
|
|
280
|
+
*/
|
|
281
|
+
function validateIpAddress(value) {
|
|
282
|
+
// IPv4 validation
|
|
283
|
+
if (/^(\d{1,3}\.){3}\d{1,3}$/.test(value)) {
|
|
284
|
+
const parts = value.split('.').map(Number);
|
|
285
|
+
if (parts.every((p) => p >= 0 && p <= 255)) {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
return `Invalid IPv4 address (octets must be 0-255): ${value}`;
|
|
289
|
+
}
|
|
290
|
+
// IPv6 validation (simplified - just check for valid hex groups with colons)
|
|
291
|
+
if (/^([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}$/.test(value)) {
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
294
|
+
// IPv6 with :: shorthand
|
|
295
|
+
if (value.includes('::') && /^[0-9a-fA-F:]+$/.test(value)) {
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
return `Invalid IP address: ${value}`;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Validate JSON string.
|
|
302
|
+
*/
|
|
303
|
+
function validateJson(value) {
|
|
304
|
+
try {
|
|
305
|
+
JSON.parse(value);
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
const preview = value.length > 50 ? `${value.slice(0, 50)}...` : value;
|
|
310
|
+
return `Invalid JSON: ${preview}`;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Validate Base64 encoded string.
|
|
315
|
+
*/
|
|
316
|
+
function validateBase64(value) {
|
|
317
|
+
// Standard base64 characters plus optional padding
|
|
318
|
+
if (!/^[A-Za-z0-9+/]*={0,2}$/.test(value)) {
|
|
319
|
+
const preview = value.length > 50 ? `${value.slice(0, 50)}...` : value;
|
|
320
|
+
return `Invalid base64: ${preview}`;
|
|
321
|
+
}
|
|
322
|
+
// Check length is valid (must be multiple of 4 when padded)
|
|
323
|
+
if (value.length % 4 !== 0) {
|
|
324
|
+
return `Invalid base64 length (must be multiple of 4): ${value.length}`;
|
|
325
|
+
}
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Validate regular expression.
|
|
330
|
+
*/
|
|
331
|
+
function validateRegex(value) {
|
|
332
|
+
try {
|
|
333
|
+
new RegExp(value);
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
return `Invalid regex: ${value}`;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=semantic-validator.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verified by Bellwether program module.
|
|
3
|
+
*/
|
|
4
|
+
export { generateVerificationResult, generateVerificationReport, generateVerificationBadge, generateBadgeUrl, generateBadgeMarkdown, isVerificationValid, } from './verifier.js';
|
|
5
|
+
export type { VerificationStatus, VerificationTier, VerificationResult, VerificationBadge, VerificationConfig, VerificationReport, VerificationSubmission, } from './types.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the Verified by Bellwether program.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Verification status for a server.
|
|
6
|
+
*/
|
|
7
|
+
export type VerificationStatus = 'verified' | 'pending' | 'failed' | 'expired' | 'not_verified';
|
|
8
|
+
/**
|
|
9
|
+
* Verification tier based on test coverage.
|
|
10
|
+
*/
|
|
11
|
+
export type VerificationTier = 'bronze' | 'silver' | 'gold' | 'platinum';
|
|
12
|
+
/**
|
|
13
|
+
* Verification result from a verification run.
|
|
14
|
+
*/
|
|
15
|
+
export interface VerificationResult {
|
|
16
|
+
/** Server identifier (namespace/name) */
|
|
17
|
+
serverId: string;
|
|
18
|
+
/** Server version */
|
|
19
|
+
version: string;
|
|
20
|
+
/** Verification status */
|
|
21
|
+
status: VerificationStatus;
|
|
22
|
+
/** Verification tier achieved */
|
|
23
|
+
tier?: VerificationTier;
|
|
24
|
+
/** ISO timestamp when verified */
|
|
25
|
+
verifiedAt: string;
|
|
26
|
+
/** ISO timestamp when verification expires */
|
|
27
|
+
expiresAt: string;
|
|
28
|
+
/** Number of tools verified */
|
|
29
|
+
toolsVerified: number;
|
|
30
|
+
/** Number of tests passed */
|
|
31
|
+
testsPassed: number;
|
|
32
|
+
/** Total number of tests run */
|
|
33
|
+
testsTotal: number;
|
|
34
|
+
/** Pass rate (0-100) */
|
|
35
|
+
passRate: number;
|
|
36
|
+
/** Checksum of the verification report */
|
|
37
|
+
reportHash: string;
|
|
38
|
+
/** Bellwether version used */
|
|
39
|
+
bellwetherVersion: string;
|
|
40
|
+
/** Additional metadata */
|
|
41
|
+
metadata?: Record<string, unknown>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Verification badge data for embedding.
|
|
45
|
+
*/
|
|
46
|
+
export interface VerificationBadge {
|
|
47
|
+
/** Badge label */
|
|
48
|
+
label: string;
|
|
49
|
+
/** Badge message */
|
|
50
|
+
message: string;
|
|
51
|
+
/** Badge color */
|
|
52
|
+
color: string;
|
|
53
|
+
/** Verification tier icon */
|
|
54
|
+
icon?: string;
|
|
55
|
+
/** Link to verification report */
|
|
56
|
+
reportUrl?: string;
|
|
57
|
+
/** ISO timestamp of verification */
|
|
58
|
+
verifiedAt?: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Configuration for verification.
|
|
62
|
+
*/
|
|
63
|
+
export interface VerificationConfig {
|
|
64
|
+
/** Server identifier */
|
|
65
|
+
serverId: string;
|
|
66
|
+
/** Server version */
|
|
67
|
+
version?: string;
|
|
68
|
+
/** Tier to target */
|
|
69
|
+
targetTier?: VerificationTier;
|
|
70
|
+
/** Include security testing */
|
|
71
|
+
includeSecurity?: boolean;
|
|
72
|
+
/** Custom scenarios to include */
|
|
73
|
+
scenariosPath?: string;
|
|
74
|
+
/** Output directory for reports */
|
|
75
|
+
outputDir?: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Verification report (full detailed report).
|
|
79
|
+
*/
|
|
80
|
+
export interface VerificationReport {
|
|
81
|
+
/** Verification result summary */
|
|
82
|
+
result: VerificationResult;
|
|
83
|
+
/** Server information */
|
|
84
|
+
serverInfo: {
|
|
85
|
+
name: string;
|
|
86
|
+
version: string;
|
|
87
|
+
description?: string;
|
|
88
|
+
repository?: string;
|
|
89
|
+
};
|
|
90
|
+
/** Tool verification details */
|
|
91
|
+
tools: Array<{
|
|
92
|
+
name: string;
|
|
93
|
+
testsRun: number;
|
|
94
|
+
testsPassed: number;
|
|
95
|
+
errors: string[];
|
|
96
|
+
}>;
|
|
97
|
+
/** Prompt verification details */
|
|
98
|
+
prompts?: Array<{
|
|
99
|
+
name: string;
|
|
100
|
+
testsRun: number;
|
|
101
|
+
testsPassed: number;
|
|
102
|
+
errors: string[];
|
|
103
|
+
}>;
|
|
104
|
+
/** Resource verification details */
|
|
105
|
+
resources?: Array<{
|
|
106
|
+
uri: string;
|
|
107
|
+
name: string;
|
|
108
|
+
testsRun: number;
|
|
109
|
+
testsPassed: number;
|
|
110
|
+
errors: string[];
|
|
111
|
+
}>;
|
|
112
|
+
/** Environment information */
|
|
113
|
+
environment: {
|
|
114
|
+
os: string;
|
|
115
|
+
nodeVersion: string;
|
|
116
|
+
bellwetherVersion: string;
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Verification submission for the registry.
|
|
121
|
+
*/
|
|
122
|
+
export interface VerificationSubmission {
|
|
123
|
+
/** Verification result */
|
|
124
|
+
result: VerificationResult;
|
|
125
|
+
/** Signed verification token */
|
|
126
|
+
signature?: string;
|
|
127
|
+
/** Submitter information */
|
|
128
|
+
submitter?: {
|
|
129
|
+
email?: string;
|
|
130
|
+
organization?: string;
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=types.d.ts.map
|