@opencodereview/core 1.9.1
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/dist/ai/anthropic-provider.d.ts +41 -0
- package/dist/ai/anthropic-provider.d.ts.map +1 -0
- package/dist/ai/anthropic-provider.js +139 -0
- package/dist/ai/anthropic-provider.js.map +1 -0
- package/dist/ai/index.d.ts +39 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +41 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/ollama-provider.d.ts +46 -0
- package/dist/ai/ollama-provider.d.ts.map +1 -0
- package/dist/ai/ollama-provider.js +149 -0
- package/dist/ai/ollama-provider.js.map +1 -0
- package/dist/ai/openai-provider.d.ts +44 -0
- package/dist/ai/openai-provider.d.ts.map +1 -0
- package/dist/ai/openai-provider.js +137 -0
- package/dist/ai/openai-provider.js.map +1 -0
- package/dist/ai/orchestrator.d.ts +60 -0
- package/dist/ai/orchestrator.d.ts.map +1 -0
- package/dist/ai/orchestrator.js +188 -0
- package/dist/ai/orchestrator.js.map +1 -0
- package/dist/ai/prompts.d.ts +27 -0
- package/dist/ai/prompts.d.ts.map +1 -0
- package/dist/ai/prompts.js +112 -0
- package/dist/ai/prompts.js.map +1 -0
- package/dist/ai/types.d.ts +75 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +10 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/ai/v4/embedding/index.d.ts +10 -0
- package/dist/ai/v4/embedding/index.d.ts.map +1 -0
- package/dist/ai/v4/embedding/index.js +10 -0
- package/dist/ai/v4/embedding/index.js.map +1 -0
- package/dist/ai/v4/embedding/local.d.ts +68 -0
- package/dist/ai/v4/embedding/local.d.ts.map +1 -0
- package/dist/ai/v4/embedding/local.js +167 -0
- package/dist/ai/v4/embedding/local.js.map +1 -0
- package/dist/ai/v4/embedding/ollama.d.ts +58 -0
- package/dist/ai/v4/embedding/ollama.d.ts.map +1 -0
- package/dist/ai/v4/embedding/ollama.js +101 -0
- package/dist/ai/v4/embedding/ollama.js.map +1 -0
- package/dist/ai/v4/embedding/openai.d.ts +36 -0
- package/dist/ai/v4/embedding/openai.d.ts.map +1 -0
- package/dist/ai/v4/embedding/openai.js +76 -0
- package/dist/ai/v4/embedding/openai.js.map +1 -0
- package/dist/ai/v4/embedding/similarity.d.ts +36 -0
- package/dist/ai/v4/embedding/similarity.d.ts.map +1 -0
- package/dist/ai/v4/embedding/similarity.js +60 -0
- package/dist/ai/v4/embedding/similarity.js.map +1 -0
- package/dist/ai/v4/index.d.ts +51 -0
- package/dist/ai/v4/index.d.ts.map +1 -0
- package/dist/ai/v4/index.js +54 -0
- package/dist/ai/v4/index.js.map +1 -0
- package/dist/ai/v4/llm/anthropic.d.ts +38 -0
- package/dist/ai/v4/llm/anthropic.d.ts.map +1 -0
- package/dist/ai/v4/llm/anthropic.js +86 -0
- package/dist/ai/v4/llm/anthropic.js.map +1 -0
- package/dist/ai/v4/llm/index.d.ts +9 -0
- package/dist/ai/v4/llm/index.d.ts.map +1 -0
- package/dist/ai/v4/llm/index.js +9 -0
- package/dist/ai/v4/llm/index.js.map +1 -0
- package/dist/ai/v4/llm/ollama.d.ts +39 -0
- package/dist/ai/v4/llm/ollama.d.ts.map +1 -0
- package/dist/ai/v4/llm/ollama.js +95 -0
- package/dist/ai/v4/llm/ollama.js.map +1 -0
- package/dist/ai/v4/llm/openai.d.ts +38 -0
- package/dist/ai/v4/llm/openai.d.ts.map +1 -0
- package/dist/ai/v4/llm/openai.js +88 -0
- package/dist/ai/v4/llm/openai.js.map +1 -0
- package/dist/ai/v4/patterns/defect-patterns.d.ts +57 -0
- package/dist/ai/v4/patterns/defect-patterns.d.ts.map +1 -0
- package/dist/ai/v4/patterns/defect-patterns.js +331 -0
- package/dist/ai/v4/patterns/defect-patterns.js.map +1 -0
- package/dist/ai/v4/patterns/index.d.ts +8 -0
- package/dist/ai/v4/patterns/index.d.ts.map +1 -0
- package/dist/ai/v4/patterns/index.js +7 -0
- package/dist/ai/v4/patterns/index.js.map +1 -0
- package/dist/ai/v4/pipeline.d.ts +74 -0
- package/dist/ai/v4/pipeline.d.ts.map +1 -0
- package/dist/ai/v4/pipeline.js +381 -0
- package/dist/ai/v4/pipeline.js.map +1 -0
- package/dist/ai/v4/sla.d.ts +62 -0
- package/dist/ai/v4/sla.d.ts.map +1 -0
- package/dist/ai/v4/sla.js +136 -0
- package/dist/ai/v4/sla.js.map +1 -0
- package/dist/ai/v4/types.d.ts +117 -0
- package/dist/ai/v4/types.d.ts.map +1 -0
- package/dist/ai/v4/types.js +16 -0
- package/dist/ai/v4/types.js.map +1 -0
- package/dist/ai-healer/prompt-builder.d.ts +33 -0
- package/dist/ai-healer/prompt-builder.d.ts.map +1 -0
- package/dist/ai-healer/prompt-builder.js +89 -0
- package/dist/ai-healer/prompt-builder.js.map +1 -0
- package/dist/config/defaults.d.ts +14 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +57 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +8 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +33 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +245 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +58 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +7 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/v4-config.d.ts +77 -0
- package/dist/config/v4-config.d.ts.map +1 -0
- package/dist/config/v4-config.js +336 -0
- package/dist/config/v4-config.js.map +1 -0
- package/dist/detectors/ai-detector.d.ts +38 -0
- package/dist/detectors/ai-detector.d.ts.map +1 -0
- package/dist/detectors/ai-detector.js +62 -0
- package/dist/detectors/ai-detector.js.map +1 -0
- package/dist/detectors/context-break.d.ts +57 -0
- package/dist/detectors/context-break.d.ts.map +1 -0
- package/dist/detectors/context-break.js +199 -0
- package/dist/detectors/context-break.js.map +1 -0
- package/dist/detectors/deep-hallucination.d.ts +42 -0
- package/dist/detectors/deep-hallucination.d.ts.map +1 -0
- package/dist/detectors/deep-hallucination.js +297 -0
- package/dist/detectors/deep-hallucination.js.map +1 -0
- package/dist/detectors/duplication.d.ts +61 -0
- package/dist/detectors/duplication.d.ts.map +1 -0
- package/dist/detectors/duplication.js +204 -0
- package/dist/detectors/duplication.js.map +1 -0
- package/dist/detectors/hallucination.d.ts +80 -0
- package/dist/detectors/hallucination.d.ts.map +1 -0
- package/dist/detectors/hallucination.js +350 -0
- package/dist/detectors/hallucination.js.map +1 -0
- package/dist/detectors/index.d.ts +35 -0
- package/dist/detectors/index.d.ts.map +1 -0
- package/dist/detectors/index.js +33 -0
- package/dist/detectors/index.js.map +1 -0
- package/dist/detectors/logic-gap.d.ts +58 -0
- package/dist/detectors/logic-gap.d.ts.map +1 -0
- package/dist/detectors/logic-gap.js +284 -0
- package/dist/detectors/logic-gap.js.map +1 -0
- package/dist/detectors/over-engineering.d.ts +44 -0
- package/dist/detectors/over-engineering.d.ts.map +1 -0
- package/dist/detectors/over-engineering.js +257 -0
- package/dist/detectors/over-engineering.js.map +1 -0
- package/dist/detectors/security-pattern.d.ts +43 -0
- package/dist/detectors/security-pattern.d.ts.map +1 -0
- package/dist/detectors/security-pattern.js +235 -0
- package/dist/detectors/security-pattern.js.map +1 -0
- package/dist/detectors/stale-api.d.ts +44 -0
- package/dist/detectors/stale-api.d.ts.map +1 -0
- package/dist/detectors/stale-api.js +160 -0
- package/dist/detectors/stale-api.js.map +1 -0
- package/dist/detectors/type-safety.d.ts +41 -0
- package/dist/detectors/type-safety.d.ts.map +1 -0
- package/dist/detectors/type-safety.js +306 -0
- package/dist/detectors/type-safety.js.map +1 -0
- package/dist/detectors/v4/context-coherence.d.ts +67 -0
- package/dist/detectors/v4/context-coherence.d.ts.map +1 -0
- package/dist/detectors/v4/context-coherence.js +319 -0
- package/dist/detectors/v4/context-coherence.js.map +1 -0
- package/dist/detectors/v4/hallucinated-import.d.ts +52 -0
- package/dist/detectors/v4/hallucinated-import.d.ts.map +1 -0
- package/dist/detectors/v4/hallucinated-import.js +206 -0
- package/dist/detectors/v4/hallucinated-import.js.map +1 -0
- package/dist/detectors/v4/index.d.ts +28 -0
- package/dist/detectors/v4/index.d.ts.map +1 -0
- package/dist/detectors/v4/index.js +40 -0
- package/dist/detectors/v4/index.js.map +1 -0
- package/dist/detectors/v4/over-engineering.d.ts +69 -0
- package/dist/detectors/v4/over-engineering.d.ts.map +1 -0
- package/dist/detectors/v4/over-engineering.js +234 -0
- package/dist/detectors/v4/over-engineering.js.map +1 -0
- package/dist/detectors/v4/security-pattern.d.ts +46 -0
- package/dist/detectors/v4/security-pattern.d.ts.map +1 -0
- package/dist/detectors/v4/security-pattern.js +233 -0
- package/dist/detectors/v4/security-pattern.js.map +1 -0
- package/dist/detectors/v4/stale-api.d.ts +59 -0
- package/dist/detectors/v4/stale-api.d.ts.map +1 -0
- package/dist/detectors/v4/stale-api.js +470 -0
- package/dist/detectors/v4/stale-api.js.map +1 -0
- package/dist/detectors/v4/types.d.ts +74 -0
- package/dist/detectors/v4/types.d.ts.map +1 -0
- package/dist/detectors/v4/types.js +10 -0
- package/dist/detectors/v4/types.js.map +1 -0
- package/dist/diff/filter.d.ts +35 -0
- package/dist/diff/filter.d.ts.map +1 -0
- package/dist/diff/filter.js +65 -0
- package/dist/diff/filter.js.map +1 -0
- package/dist/diff/index.d.ts +9 -0
- package/dist/diff/index.d.ts.map +1 -0
- package/dist/diff/index.js +8 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/diff/parser.d.ts +61 -0
- package/dist/diff/parser.d.ts.map +1 -0
- package/dist/diff/parser.js +203 -0
- package/dist/diff/parser.js.map +1 -0
- package/dist/i18n/en.d.ts +18 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +83 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +13 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +14 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/provider.d.ts +54 -0
- package/dist/i18n/provider.d.ts.map +1 -0
- package/dist/i18n/provider.js +88 -0
- package/dist/i18n/provider.js.map +1 -0
- package/dist/i18n/types.d.ts +37 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +10 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/i18n/zh.d.ts +14 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +83 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/index.d.ts +113 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +106 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/index.d.ts +10 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +9 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/types.d.ts +126 -0
- package/dist/ir/types.d.ts.map +1 -0
- package/dist/ir/types.js +33 -0
- package/dist/ir/types.js.map +1 -0
- package/dist/languages/go/index.d.ts +7 -0
- package/dist/languages/go/index.d.ts.map +1 -0
- package/dist/languages/go/index.js +7 -0
- package/dist/languages/go/index.js.map +1 -0
- package/dist/languages/go/parser.d.ts +89 -0
- package/dist/languages/go/parser.d.ts.map +1 -0
- package/dist/languages/go/parser.js +509 -0
- package/dist/languages/go/parser.js.map +1 -0
- package/dist/languages/index.d.ts +13 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +14 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/java/index.d.ts +7 -0
- package/dist/languages/java/index.d.ts.map +1 -0
- package/dist/languages/java/index.js +7 -0
- package/dist/languages/java/index.js.map +1 -0
- package/dist/languages/java/parser.d.ts +82 -0
- package/dist/languages/java/parser.d.ts.map +1 -0
- package/dist/languages/java/parser.js +492 -0
- package/dist/languages/java/parser.js.map +1 -0
- package/dist/languages/kotlin/index.d.ts +7 -0
- package/dist/languages/kotlin/index.d.ts.map +1 -0
- package/dist/languages/kotlin/index.js +7 -0
- package/dist/languages/kotlin/index.js.map +1 -0
- package/dist/languages/kotlin/parser.d.ts +84 -0
- package/dist/languages/kotlin/parser.d.ts.map +1 -0
- package/dist/languages/kotlin/parser.js +507 -0
- package/dist/languages/kotlin/parser.js.map +1 -0
- package/dist/languages/python/index.d.ts +7 -0
- package/dist/languages/python/index.d.ts.map +1 -0
- package/dist/languages/python/index.js +7 -0
- package/dist/languages/python/index.js.map +1 -0
- package/dist/languages/python/parser.d.ts +91 -0
- package/dist/languages/python/parser.d.ts.map +1 -0
- package/dist/languages/python/parser.js +375 -0
- package/dist/languages/python/parser.js.map +1 -0
- package/dist/languages/registry.d.ts +81 -0
- package/dist/languages/registry.d.ts.map +1 -0
- package/dist/languages/registry.js +150 -0
- package/dist/languages/registry.js.map +1 -0
- package/dist/languages/types.d.ts +137 -0
- package/dist/languages/types.d.ts.map +1 -0
- package/dist/languages/types.js +10 -0
- package/dist/languages/types.js.map +1 -0
- package/dist/languages/typescript/index.d.ts +7 -0
- package/dist/languages/typescript/index.d.ts.map +1 -0
- package/dist/languages/typescript/index.js +7 -0
- package/dist/languages/typescript/index.js.map +1 -0
- package/dist/languages/typescript/parser.d.ts +51 -0
- package/dist/languages/typescript/parser.d.ts.map +1 -0
- package/dist/languages/typescript/parser.js +286 -0
- package/dist/languages/typescript/parser.js.map +1 -0
- package/dist/license/generator.d.ts +43 -0
- package/dist/license/generator.d.ts.map +1 -0
- package/dist/license/generator.js +72 -0
- package/dist/license/generator.js.map +1 -0
- package/dist/license/index.d.ts +11 -0
- package/dist/license/index.d.ts.map +1 -0
- package/dist/license/index.js +12 -0
- package/dist/license/index.js.map +1 -0
- package/dist/license/types.d.ts +85 -0
- package/dist/license/types.d.ts.map +1 -0
- package/dist/license/types.js +10 -0
- package/dist/license/types.js.map +1 -0
- package/dist/license/validator.d.ts +77 -0
- package/dist/license/validator.d.ts.map +1 -0
- package/dist/license/validator.js +275 -0
- package/dist/license/validator.js.map +1 -0
- package/dist/parser/extractor.d.ts +31 -0
- package/dist/parser/extractor.d.ts.map +1 -0
- package/dist/parser/extractor.js +10 -0
- package/dist/parser/extractor.js.map +1 -0
- package/dist/parser/extractors/go.d.ts +21 -0
- package/dist/parser/extractors/go.d.ts.map +1 -0
- package/dist/parser/extractors/go.js +569 -0
- package/dist/parser/extractors/go.js.map +1 -0
- package/dist/parser/extractors/index.d.ts +13 -0
- package/dist/parser/extractors/index.d.ts.map +1 -0
- package/dist/parser/extractors/index.js +13 -0
- package/dist/parser/extractors/index.js.map +1 -0
- package/dist/parser/extractors/java.d.ts +24 -0
- package/dist/parser/extractors/java.d.ts.map +1 -0
- package/dist/parser/extractors/java.js +611 -0
- package/dist/parser/extractors/java.js.map +1 -0
- package/dist/parser/extractors/kotlin.d.ts +25 -0
- package/dist/parser/extractors/kotlin.d.ts.map +1 -0
- package/dist/parser/extractors/kotlin.js +665 -0
- package/dist/parser/extractors/kotlin.js.map +1 -0
- package/dist/parser/extractors/python.d.ts +21 -0
- package/dist/parser/extractors/python.d.ts.map +1 -0
- package/dist/parser/extractors/python.js +514 -0
- package/dist/parser/extractors/python.js.map +1 -0
- package/dist/parser/extractors/typescript.d.ts +23 -0
- package/dist/parser/extractors/typescript.d.ts.map +1 -0
- package/dist/parser/extractors/typescript.js +664 -0
- package/dist/parser/extractors/typescript.js.map +1 -0
- package/dist/parser/index.d.ts +15 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +14 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/manager.d.ts +50 -0
- package/dist/parser/manager.d.ts.map +1 -0
- package/dist/parser/manager.js +159 -0
- package/dist/parser/manager.js.map +1 -0
- package/dist/registry/builtins/go-builtins.d.ts +13 -0
- package/dist/registry/builtins/go-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/go-builtins.js +63 -0
- package/dist/registry/builtins/go-builtins.js.map +1 -0
- package/dist/registry/builtins/java-builtins.d.ts +10 -0
- package/dist/registry/builtins/java-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/java-builtins.js +59 -0
- package/dist/registry/builtins/java-builtins.js.map +1 -0
- package/dist/registry/builtins/kotlin-builtins.d.ts +10 -0
- package/dist/registry/builtins/kotlin-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/kotlin-builtins.js +38 -0
- package/dist/registry/builtins/kotlin-builtins.js.map +1 -0
- package/dist/registry/builtins/node-builtins.d.ts +10 -0
- package/dist/registry/builtins/node-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/node-builtins.js +36 -0
- package/dist/registry/builtins/node-builtins.js.map +1 -0
- package/dist/registry/builtins/python-builtins.d.ts +10 -0
- package/dist/registry/builtins/python-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/python-builtins.js +43 -0
- package/dist/registry/builtins/python-builtins.js.map +1 -0
- package/dist/registry/cache.d.ts +53 -0
- package/dist/registry/cache.d.ts.map +1 -0
- package/dist/registry/cache.js +147 -0
- package/dist/registry/cache.js.map +1 -0
- package/dist/registry/go-registry.d.ts +52 -0
- package/dist/registry/go-registry.d.ts.map +1 -0
- package/dist/registry/go-registry.js +148 -0
- package/dist/registry/go-registry.js.map +1 -0
- package/dist/registry/index.d.ts +18 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +21 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/maven-registry.d.ts +57 -0
- package/dist/registry/maven-registry.d.ts.map +1 -0
- package/dist/registry/maven-registry.js +155 -0
- package/dist/registry/maven-registry.js.map +1 -0
- package/dist/registry/npm-registry.d.ts +40 -0
- package/dist/registry/npm-registry.d.ts.map +1 -0
- package/dist/registry/npm-registry.js +155 -0
- package/dist/registry/npm-registry.js.map +1 -0
- package/dist/registry/pypi-registry.d.ts +49 -0
- package/dist/registry/pypi-registry.d.ts.map +1 -0
- package/dist/registry/pypi-registry.js +175 -0
- package/dist/registry/pypi-registry.js.map +1 -0
- package/dist/registry/registry-manager.d.ts +45 -0
- package/dist/registry/registry-manager.d.ts.map +1 -0
- package/dist/registry/registry-manager.js +107 -0
- package/dist/registry/registry-manager.js.map +1 -0
- package/dist/registry/types.d.ts +83 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +12 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/reporter/html-reporter.d.ts +20 -0
- package/dist/reporter/html-reporter.d.ts.map +1 -0
- package/dist/reporter/html-reporter.js +612 -0
- package/dist/reporter/html-reporter.js.map +1 -0
- package/dist/reporter/index.d.ts +28 -0
- package/dist/reporter/index.d.ts.map +1 -0
- package/dist/reporter/index.js +48 -0
- package/dist/reporter/index.js.map +1 -0
- package/dist/reporter/markdown-reporter.d.ts +16 -0
- package/dist/reporter/markdown-reporter.d.ts.map +1 -0
- package/dist/reporter/markdown-reporter.js +182 -0
- package/dist/reporter/markdown-reporter.js.map +1 -0
- package/dist/reporter/sarif-reporter.d.ts +67 -0
- package/dist/reporter/sarif-reporter.d.ts.map +1 -0
- package/dist/reporter/sarif-reporter.js +73 -0
- package/dist/reporter/sarif-reporter.js.map +1 -0
- package/dist/reporter/terminal-reporter.d.ts +14 -0
- package/dist/reporter/terminal-reporter.d.ts.map +1 -0
- package/dist/reporter/terminal-reporter.js +126 -0
- package/dist/reporter/terminal-reporter.js.map +1 -0
- package/dist/reporter/types.d.ts +43 -0
- package/dist/reporter/types.d.ts.map +1 -0
- package/dist/reporter/types.js +10 -0
- package/dist/reporter/types.js.map +1 -0
- package/dist/reporter/v4-html.d.ts +24 -0
- package/dist/reporter/v4-html.d.ts.map +1 -0
- package/dist/reporter/v4-html.js +359 -0
- package/dist/reporter/v4-html.js.map +1 -0
- package/dist/reporter/v4-terminal.d.ts +55 -0
- package/dist/reporter/v4-terminal.d.ts.map +1 -0
- package/dist/reporter/v4-terminal.js +199 -0
- package/dist/reporter/v4-terminal.js.map +1 -0
- package/dist/scanner/index.d.ts +9 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +9 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/v4-scanner.d.ts +162 -0
- package/dist/scanner/v4-scanner.d.ts.map +1 -0
- package/dist/scanner/v4-scanner.js +327 -0
- package/dist/scanner/v4-scanner.js.map +1 -0
- package/dist/scorer/report.d.ts +52 -0
- package/dist/scorer/report.d.ts.map +1 -0
- package/dist/scorer/report.js +347 -0
- package/dist/scorer/report.js.map +1 -0
- package/dist/scorer/scoring-engine.d.ts +170 -0
- package/dist/scorer/scoring-engine.d.ts.map +1 -0
- package/dist/scorer/scoring-engine.js +308 -0
- package/dist/scorer/scoring-engine.js.map +1 -0
- package/dist/scorer/v4-adapter.d.ts +87 -0
- package/dist/scorer/v4-adapter.d.ts.map +1 -0
- package/dist/scorer/v4-adapter.js +145 -0
- package/dist/scorer/v4-adapter.js.map +1 -0
- package/dist/sla/index.d.ts +7 -0
- package/dist/sla/index.d.ts.map +1 -0
- package/dist/sla/index.js +6 -0
- package/dist/sla/index.js.map +1 -0
- package/dist/sla/tracker.d.ts +70 -0
- package/dist/sla/tracker.d.ts.map +1 -0
- package/dist/sla/tracker.js +151 -0
- package/dist/sla/tracker.js.map +1 -0
- package/dist/sla/types.d.ts +67 -0
- package/dist/sla/types.d.ts.map +1 -0
- package/dist/sla/types.js +42 -0
- package/dist/sla/types.js.map +1 -0
- package/dist/types.d.ts +172 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +69 -0
- package/dist/types.js.map +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scoring Engine V3
|
|
3
|
+
*
|
|
4
|
+
* Multi-dimensional scoring engine for AI-generated code quality.
|
|
5
|
+
*
|
|
6
|
+
* V3 scoring dimensions (total: 100):
|
|
7
|
+
* - AI Faithfulness (35): Hallucination — packages/APIs/methods existence
|
|
8
|
+
* - Code Freshness (25): Timeliness — deprecated APIs and methods
|
|
9
|
+
* - Context Coherence (20): Consistency across long files and functions
|
|
10
|
+
* - Implementation Quality (20): Completeness, error handling, complexity
|
|
11
|
+
*
|
|
12
|
+
* Grade scale: A+ (95-100), A (90-94), B (80-89), C (70-79), D (60-69), F (0-59)
|
|
13
|
+
*
|
|
14
|
+
* Backward compatible: legacy scoreFile() is preserved (deprecated).
|
|
15
|
+
*/
|
|
16
|
+
import { AIDefectCategory } from '../types.js';
|
|
17
|
+
// ─── V3 Scoring Dimensions ─────────────────────────────────────────
|
|
18
|
+
export const DIMENSIONS = {
|
|
19
|
+
aiFaithfulness: { weight: 35, name: 'AI Faithfulness' },
|
|
20
|
+
codeFreshness: { weight: 25, name: 'Code Freshness' },
|
|
21
|
+
contextCoherence: { weight: 20, name: 'Context Coherence' },
|
|
22
|
+
implementationQuality: { weight: 20, name: 'Implementation Quality' },
|
|
23
|
+
};
|
|
24
|
+
// ─── Severity Deductions ───────────────────────────────────────────
|
|
25
|
+
export const SEVERITY_DEDUCTIONS = {
|
|
26
|
+
critical: 15,
|
|
27
|
+
high: 10,
|
|
28
|
+
medium: 5,
|
|
29
|
+
low: 2,
|
|
30
|
+
info: 0,
|
|
31
|
+
};
|
|
32
|
+
// ─── Category → Dimension Mapping ──────────────────────────────────
|
|
33
|
+
/**
|
|
34
|
+
* Maps each AIDefectCategory to a scoring dimension.
|
|
35
|
+
*/
|
|
36
|
+
export const CATEGORY_DIMENSION_MAP = {
|
|
37
|
+
[AIDefectCategory.HALLUCINATION]: 'aiFaithfulness',
|
|
38
|
+
[AIDefectCategory.SECURITY_ANTIPATTERN]: 'aiFaithfulness',
|
|
39
|
+
[AIDefectCategory.TRAINING_LEAK]: 'aiFaithfulness',
|
|
40
|
+
[AIDefectCategory.STALE_KNOWLEDGE]: 'codeFreshness',
|
|
41
|
+
[AIDefectCategory.CONTEXT_LOSS]: 'contextCoherence',
|
|
42
|
+
[AIDefectCategory.INCOMPLETE_IMPL]: 'implementationQuality',
|
|
43
|
+
[AIDefectCategory.OVER_ENGINEERING]: 'implementationQuality',
|
|
44
|
+
[AIDefectCategory.DUPLICATION]: 'implementationQuality',
|
|
45
|
+
[AIDefectCategory.TYPE_SAFETY]: 'implementationQuality',
|
|
46
|
+
[AIDefectCategory.ERROR_HANDLING]: 'implementationQuality',
|
|
47
|
+
};
|
|
48
|
+
// ─── Grade Computation ─────────────────────────────────────────────
|
|
49
|
+
export function computeGrade(score) {
|
|
50
|
+
if (score >= 95)
|
|
51
|
+
return 'A+';
|
|
52
|
+
if (score >= 90)
|
|
53
|
+
return 'A';
|
|
54
|
+
if (score >= 80)
|
|
55
|
+
return 'B';
|
|
56
|
+
if (score >= 70)
|
|
57
|
+
return 'C';
|
|
58
|
+
if (score >= 60)
|
|
59
|
+
return 'D';
|
|
60
|
+
return 'F';
|
|
61
|
+
}
|
|
62
|
+
/** Legacy grade (without A+) for backward compatibility */
|
|
63
|
+
function computeLegacyGrade(score) {
|
|
64
|
+
if (score >= 90)
|
|
65
|
+
return 'A';
|
|
66
|
+
if (score >= 80)
|
|
67
|
+
return 'B';
|
|
68
|
+
if (score >= 70)
|
|
69
|
+
return 'C';
|
|
70
|
+
if (score >= 60)
|
|
71
|
+
return 'D';
|
|
72
|
+
return 'F';
|
|
73
|
+
}
|
|
74
|
+
// ─── Scoring Engine ────────────────────────────────────────────────
|
|
75
|
+
export class ScoringEngine {
|
|
76
|
+
threshold;
|
|
77
|
+
constructor(threshold = 70) {
|
|
78
|
+
this.threshold = threshold;
|
|
79
|
+
}
|
|
80
|
+
// ─── V3 API ────────────────────────────────────────────────────
|
|
81
|
+
/**
|
|
82
|
+
* Score a set of UnifiedIssues.
|
|
83
|
+
* Can be used for file-level or project-level scoring.
|
|
84
|
+
*/
|
|
85
|
+
score(issues) {
|
|
86
|
+
const dimensionIssues = this.groupByDimension(issues);
|
|
87
|
+
const dimensions = this.scoreDimensions(dimensionIssues);
|
|
88
|
+
const totalScore = Math.round(Object.values(dimensions).reduce((sum, d) => sum + d.score, 0));
|
|
89
|
+
return {
|
|
90
|
+
totalScore,
|
|
91
|
+
grade: computeGrade(totalScore),
|
|
92
|
+
dimensions,
|
|
93
|
+
issueCount: issues.length,
|
|
94
|
+
passed: totalScore >= this.threshold,
|
|
95
|
+
threshold: this.threshold,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Score issues grouped by file, returning per-file scores.
|
|
100
|
+
*/
|
|
101
|
+
scoreByFile(issues) {
|
|
102
|
+
const fileMap = new Map();
|
|
103
|
+
for (const issue of issues) {
|
|
104
|
+
const existing = fileMap.get(issue.file);
|
|
105
|
+
if (existing) {
|
|
106
|
+
existing.push(issue);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
fileMap.set(issue.file, [issue]);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return Array.from(fileMap.entries()).map(([file, fileIssues]) => {
|
|
113
|
+
const result = this.score(fileIssues);
|
|
114
|
+
return { ...result, file };
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Aggregate scores across multiple files into a project-level report.
|
|
119
|
+
*/
|
|
120
|
+
aggregateV3(issues) {
|
|
121
|
+
const fileScores = this.scoreByFile(issues);
|
|
122
|
+
if (fileScores.length === 0) {
|
|
123
|
+
return {
|
|
124
|
+
overallScore: 100,
|
|
125
|
+
grade: 'A+',
|
|
126
|
+
totalFiles: 0,
|
|
127
|
+
passedFiles: 0,
|
|
128
|
+
failedFiles: 0,
|
|
129
|
+
files: [],
|
|
130
|
+
dimensions: this.emptyDimensions(),
|
|
131
|
+
issueCount: 0,
|
|
132
|
+
passed: true,
|
|
133
|
+
threshold: this.threshold,
|
|
134
|
+
timestamp: new Date().toISOString(),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
// Project-level score: score ALL issues together (not average of file scores)
|
|
138
|
+
const projectScore = this.score(issues);
|
|
139
|
+
const passedFiles = fileScores.filter(f => f.passed).length;
|
|
140
|
+
return {
|
|
141
|
+
overallScore: projectScore.totalScore,
|
|
142
|
+
grade: projectScore.grade,
|
|
143
|
+
totalFiles: fileScores.length,
|
|
144
|
+
passedFiles,
|
|
145
|
+
failedFiles: fileScores.length - passedFiles,
|
|
146
|
+
files: fileScores,
|
|
147
|
+
dimensions: projectScore.dimensions,
|
|
148
|
+
issueCount: issues.length,
|
|
149
|
+
passed: projectScore.passed,
|
|
150
|
+
threshold: this.threshold,
|
|
151
|
+
timestamp: new Date().toISOString(),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// ─── Legacy API (backward compatibility) ───────────────────────
|
|
155
|
+
/**
|
|
156
|
+
* @deprecated Use `score(issues)` instead.
|
|
157
|
+
* Score a single file based on legacy detector results.
|
|
158
|
+
*/
|
|
159
|
+
scoreFile(filePath, hallucination, logicGap, duplication, contextBreak) {
|
|
160
|
+
const completeness = this.scoreLegacyDimension('Code Completeness', 30, hallucination?.issues ?? []);
|
|
161
|
+
const coherence = this.scoreLegacyDimension('Logic Coherence', 25, logicGap?.issues ?? []);
|
|
162
|
+
const consistency = this.scoreLegacyDimension('Architecture Consistency', 25, contextBreak?.issues ?? []);
|
|
163
|
+
const conciseness = this.scoreLegacyDimension('Code Conciseness', 20, duplication?.issues ?? []);
|
|
164
|
+
const totalScore = Math.round(completeness.score + coherence.score + consistency.score + conciseness.score);
|
|
165
|
+
return {
|
|
166
|
+
file: filePath,
|
|
167
|
+
totalScore,
|
|
168
|
+
grade: computeLegacyGrade(totalScore),
|
|
169
|
+
dimensions: { completeness, coherence, consistency, conciseness },
|
|
170
|
+
passed: totalScore >= this.threshold,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* @deprecated Use `aggregateV3(issues)` instead.
|
|
175
|
+
* Aggregate scores across multiple files (legacy format).
|
|
176
|
+
*/
|
|
177
|
+
aggregate(fileScores) {
|
|
178
|
+
if (fileScores.length === 0) {
|
|
179
|
+
return {
|
|
180
|
+
overallScore: 100,
|
|
181
|
+
grade: 'A',
|
|
182
|
+
totalFiles: 0,
|
|
183
|
+
passedFiles: 0,
|
|
184
|
+
failedFiles: 0,
|
|
185
|
+
files: [],
|
|
186
|
+
passed: true,
|
|
187
|
+
timestamp: new Date().toISOString(),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
const overallScore = Math.round(fileScores.reduce((sum, f) => sum + f.totalScore, 0) / fileScores.length);
|
|
191
|
+
const passedFiles = fileScores.filter(f => f.passed).length;
|
|
192
|
+
return {
|
|
193
|
+
overallScore,
|
|
194
|
+
grade: computeLegacyGrade(overallScore),
|
|
195
|
+
totalFiles: fileScores.length,
|
|
196
|
+
passedFiles,
|
|
197
|
+
failedFiles: fileScores.length - passedFiles,
|
|
198
|
+
files: fileScores,
|
|
199
|
+
passed: overallScore >= this.threshold,
|
|
200
|
+
timestamp: new Date().toISOString(),
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
// ─── Internal Scoring Logic ────────────────────────────────────
|
|
204
|
+
/**
|
|
205
|
+
* Group issues by scoring dimension based on their category.
|
|
206
|
+
*/
|
|
207
|
+
groupByDimension(issues) {
|
|
208
|
+
const groups = {
|
|
209
|
+
aiFaithfulness: [],
|
|
210
|
+
codeFreshness: [],
|
|
211
|
+
contextCoherence: [],
|
|
212
|
+
implementationQuality: [],
|
|
213
|
+
};
|
|
214
|
+
for (const issue of issues) {
|
|
215
|
+
const dimensionId = CATEGORY_DIMENSION_MAP[issue.category];
|
|
216
|
+
if (dimensionId) {
|
|
217
|
+
groups[dimensionId].push(issue);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
// Default unmapped categories to implementationQuality
|
|
221
|
+
groups.implementationQuality.push(issue);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return groups;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Score all dimensions from grouped issues.
|
|
228
|
+
*/
|
|
229
|
+
scoreDimensions(grouped) {
|
|
230
|
+
const result = {};
|
|
231
|
+
for (const [id, config] of Object.entries(DIMENSIONS)) {
|
|
232
|
+
const issues = grouped[id] ?? [];
|
|
233
|
+
result[id] = this.scoreSingleDimension(id, config, issues);
|
|
234
|
+
}
|
|
235
|
+
return result;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Score a single dimension.
|
|
239
|
+
*
|
|
240
|
+
* Deduction calculation:
|
|
241
|
+
* 1. Sum raw deductions: Σ SEVERITY_DEDUCTIONS[issue.severity]
|
|
242
|
+
* 2. Normalize to dimension weight range:
|
|
243
|
+
* normalizedDeduction = min(maxScore, (rawDeduction / 100) * maxScore)
|
|
244
|
+
* 3. Dimension score = maxScore - normalizedDeduction (clamped to [0, maxScore])
|
|
245
|
+
*/
|
|
246
|
+
scoreSingleDimension(id, config, issues) {
|
|
247
|
+
const maxScore = config.weight;
|
|
248
|
+
let rawDeduction = 0;
|
|
249
|
+
for (const issue of issues) {
|
|
250
|
+
rawDeduction += SEVERITY_DEDUCTIONS[issue.severity] ?? 0;
|
|
251
|
+
}
|
|
252
|
+
const normalizedDeduction = Math.min(maxScore, (rawDeduction / 100) * maxScore);
|
|
253
|
+
const score = Math.max(0, Math.round((maxScore - normalizedDeduction) * 100) / 100);
|
|
254
|
+
return {
|
|
255
|
+
id,
|
|
256
|
+
name: config.name,
|
|
257
|
+
maxScore,
|
|
258
|
+
score,
|
|
259
|
+
issueCount: issues.length,
|
|
260
|
+
rawDeduction,
|
|
261
|
+
normalizedDeduction: Math.round(normalizedDeduction * 100) / 100,
|
|
262
|
+
issues,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Create empty dimension scores (for zero-issue projects).
|
|
267
|
+
*/
|
|
268
|
+
emptyDimensions() {
|
|
269
|
+
const result = {};
|
|
270
|
+
for (const [id, config] of Object.entries(DIMENSIONS)) {
|
|
271
|
+
result[id] = {
|
|
272
|
+
id,
|
|
273
|
+
name: config.name,
|
|
274
|
+
maxScore: config.weight,
|
|
275
|
+
score: config.weight,
|
|
276
|
+
issueCount: 0,
|
|
277
|
+
rawDeduction: 0,
|
|
278
|
+
normalizedDeduction: 0,
|
|
279
|
+
issues: [],
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
return result;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Legacy dimension scoring for backward compatibility.
|
|
286
|
+
*/
|
|
287
|
+
scoreLegacyDimension(name, maxScore, issues) {
|
|
288
|
+
const LEGACY_DEDUCTIONS = { error: 10, warning: 3 };
|
|
289
|
+
let deduction = 0;
|
|
290
|
+
const details = [];
|
|
291
|
+
for (const issue of issues) {
|
|
292
|
+
const amount = LEGACY_DEDUCTIONS[issue.severity] ?? LEGACY_DEDUCTIONS.warning;
|
|
293
|
+
deduction += amount;
|
|
294
|
+
details.push(issue.message);
|
|
295
|
+
}
|
|
296
|
+
const normalizedDeduction = Math.min(maxScore, (deduction / 100) * maxScore);
|
|
297
|
+
const score = Math.round((maxScore - normalizedDeduction) * 100) / 100;
|
|
298
|
+
return {
|
|
299
|
+
name,
|
|
300
|
+
maxScore,
|
|
301
|
+
score: Math.max(0, score),
|
|
302
|
+
issueCount: issues.length,
|
|
303
|
+
details: details.slice(0, 10),
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
export default ScoringEngine;
|
|
308
|
+
//# sourceMappingURL=scoring-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring-engine.js","sourceRoot":"","sources":["../../src/scorer/scoring-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V4 Score Adapter
|
|
3
|
+
*
|
|
4
|
+
* Bridges V4 DetectorResults to V3 scoring engine.
|
|
5
|
+
* Reuses V3 scoring logic (4 dimensions, 5 grades).
|
|
6
|
+
*
|
|
7
|
+
* @since 0.4.0
|
|
8
|
+
*/
|
|
9
|
+
import type { DetectorResult, DetectorCategory } from '../detectors/v4/types.js';
|
|
10
|
+
import type { UnifiedIssue } from '../types.js';
|
|
11
|
+
import { computeGrade } from '../scorer/scoring-engine.js';
|
|
12
|
+
/**
|
|
13
|
+
* Convert a V4 DetectorResult to V3 UnifiedIssue format.
|
|
14
|
+
*/
|
|
15
|
+
export declare function v4ResultToV3Issue(result: DetectorResult): UnifiedIssue;
|
|
16
|
+
/**
|
|
17
|
+
* Convert an array of V4 DetectorResults to V3 UnifiedIssues.
|
|
18
|
+
*/
|
|
19
|
+
export declare function v4ResultsToV3Issues(results: DetectorResult[]): UnifiedIssue[];
|
|
20
|
+
/**
|
|
21
|
+
* Score result for V4 scan.
|
|
22
|
+
*/
|
|
23
|
+
export interface V4ScoreResult {
|
|
24
|
+
/** Total score (0-100) */
|
|
25
|
+
totalScore: number;
|
|
26
|
+
/** Letter grade */
|
|
27
|
+
grade: string;
|
|
28
|
+
/** Per-dimension scores */
|
|
29
|
+
dimensions: {
|
|
30
|
+
faithfulness: DimensionInfo;
|
|
31
|
+
freshness: DimensionInfo;
|
|
32
|
+
coherence: DimensionInfo;
|
|
33
|
+
quality: DimensionInfo;
|
|
34
|
+
};
|
|
35
|
+
/** Total issue count */
|
|
36
|
+
issueCount: number;
|
|
37
|
+
/** Whether the score passes the threshold */
|
|
38
|
+
passed: boolean;
|
|
39
|
+
/** The threshold used */
|
|
40
|
+
threshold: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Score info for a single dimension.
|
|
44
|
+
*/
|
|
45
|
+
export interface DimensionInfo {
|
|
46
|
+
/** Dimension name */
|
|
47
|
+
name: string;
|
|
48
|
+
/** Maximum possible score */
|
|
49
|
+
maxScore: number;
|
|
50
|
+
/** Actual score */
|
|
51
|
+
score: number;
|
|
52
|
+
/** Number of issues in this dimension */
|
|
53
|
+
issueCount: number;
|
|
54
|
+
/** Score as percentage */
|
|
55
|
+
percentage: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Score V4 results using the V3 scoring engine.
|
|
59
|
+
*
|
|
60
|
+
* @param results - V4 DetectorResults
|
|
61
|
+
* @param fileCount - Number of files scanned
|
|
62
|
+
* @param threshold - Passing threshold (default: 70)
|
|
63
|
+
* @returns V4ScoreResult
|
|
64
|
+
*/
|
|
65
|
+
export declare function scoreV4Results(results: DetectorResult[], fileCount: number, threshold?: number): V4ScoreResult;
|
|
66
|
+
/**
|
|
67
|
+
* Compute grade from score.
|
|
68
|
+
*/
|
|
69
|
+
export { computeGrade };
|
|
70
|
+
/**
|
|
71
|
+
* Count issues by category.
|
|
72
|
+
*/
|
|
73
|
+
export declare function countByCategory(results: DetectorResult[]): Record<DetectorCategory, number>;
|
|
74
|
+
/**
|
|
75
|
+
* Count issues by severity.
|
|
76
|
+
*/
|
|
77
|
+
export declare function countBySeverity(results: DetectorResult[]): Record<string, number>;
|
|
78
|
+
/**
|
|
79
|
+
* Get summary statistics for V4 results.
|
|
80
|
+
*/
|
|
81
|
+
export declare function getV4ResultStats(results: DetectorResult[]): {
|
|
82
|
+
total: number;
|
|
83
|
+
byCategory: Record<DetectorCategory, number>;
|
|
84
|
+
bySeverity: Record<string, number>;
|
|
85
|
+
filesWithIssues: number;
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=v4-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v4-adapter.d.ts","sourceRoot":"","sources":["../../src/scorer/v4-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAiB,YAAY,EAA2C,MAAM,6BAA6B,CAAC;AAyBnH;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CActE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,CAE7E;AAID;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,UAAU,EAAE;QACV,YAAY,EAAE,aAAa,CAAC;QAC5B,SAAS,EAAE,aAAa,CAAC;QACzB,SAAS,EAAE,aAAa,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;KACxB,CAAC;IACF,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAW,GACrB,aAAa,CAwBf;AAeD;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,CAAC;AAIxB;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAa3F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYjF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;CACzB,CAWA"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V4 Score Adapter
|
|
3
|
+
*
|
|
4
|
+
* Bridges V4 DetectorResults to V3 scoring engine.
|
|
5
|
+
* Reuses V3 scoring logic (4 dimensions, 5 grades).
|
|
6
|
+
*
|
|
7
|
+
* @since 0.4.0
|
|
8
|
+
*/
|
|
9
|
+
import { AIDefectCategory } from '../types.js';
|
|
10
|
+
import { ScoringEngine, computeGrade } from '../scorer/scoring-engine.js';
|
|
11
|
+
// ─── Category Mapping ───────────────────────────────────────────────
|
|
12
|
+
/**
|
|
13
|
+
* Maps V4 DetectorCategory to V3 AIDefectCategory.
|
|
14
|
+
*/
|
|
15
|
+
const CATEGORY_MAP = {
|
|
16
|
+
'ai-faithfulness': AIDefectCategory.HALLUCINATION,
|
|
17
|
+
'code-freshness': AIDefectCategory.STALE_KNOWLEDGE,
|
|
18
|
+
'context-coherence': AIDefectCategory.CONTEXT_LOSS,
|
|
19
|
+
'implementation': AIDefectCategory.OVER_ENGINEERING,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Maps V4 detector severity to V3 Severity.
|
|
23
|
+
*/
|
|
24
|
+
const SEVERITY_MAP = {
|
|
25
|
+
'error': 'critical',
|
|
26
|
+
'warning': 'medium',
|
|
27
|
+
'info': 'info',
|
|
28
|
+
};
|
|
29
|
+
// ─── Adapter Functions ──────────────────────────────────────────────
|
|
30
|
+
/**
|
|
31
|
+
* Convert a V4 DetectorResult to V3 UnifiedIssue format.
|
|
32
|
+
*/
|
|
33
|
+
export function v4ResultToV3Issue(result) {
|
|
34
|
+
return {
|
|
35
|
+
id: `${result.detectorId}:${result.file}:${result.line}`,
|
|
36
|
+
detector: result.detectorId,
|
|
37
|
+
category: CATEGORY_MAP[result.category] ?? AIDefectCategory.OVER_ENGINEERING,
|
|
38
|
+
severity: SEVERITY_MAP[result.severity] ?? 'medium',
|
|
39
|
+
message: result.message,
|
|
40
|
+
file: result.file,
|
|
41
|
+
line: result.line,
|
|
42
|
+
endLine: result.endLine,
|
|
43
|
+
confidence: result.confidence,
|
|
44
|
+
autoFixable: false,
|
|
45
|
+
detectionSource: 'static',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Convert an array of V4 DetectorResults to V3 UnifiedIssues.
|
|
50
|
+
*/
|
|
51
|
+
export function v4ResultsToV3Issues(results) {
|
|
52
|
+
return results.map(v4ResultToV3Issue);
|
|
53
|
+
}
|
|
54
|
+
// ─── V4 Score Adapter ────────────────────────────────────────────────
|
|
55
|
+
/**
|
|
56
|
+
* Score V4 results using the V3 scoring engine.
|
|
57
|
+
*
|
|
58
|
+
* @param results - V4 DetectorResults
|
|
59
|
+
* @param fileCount - Number of files scanned
|
|
60
|
+
* @param threshold - Passing threshold (default: 70)
|
|
61
|
+
* @returns V4ScoreResult
|
|
62
|
+
*/
|
|
63
|
+
export function scoreV4Results(results, fileCount, threshold = 70) {
|
|
64
|
+
// Convert V4 results to V3 issues
|
|
65
|
+
const issues = v4ResultsToV3Issues(results);
|
|
66
|
+
// Use V3 scoring engine
|
|
67
|
+
const engine = new ScoringEngine(threshold);
|
|
68
|
+
const scoreResult = engine.score(issues);
|
|
69
|
+
// Map V3 dimension scores to V4 format
|
|
70
|
+
const dimensions = {
|
|
71
|
+
faithfulness: mapDimension(scoreResult.dimensions.aiFaithfulness, 'AI Faithfulness'),
|
|
72
|
+
freshness: mapDimension(scoreResult.dimensions.codeFreshness, 'Code Freshness'),
|
|
73
|
+
coherence: mapDimension(scoreResult.dimensions.contextCoherence, 'Context Coherence'),
|
|
74
|
+
quality: mapDimension(scoreResult.dimensions.implementationQuality, 'Implementation Quality'),
|
|
75
|
+
};
|
|
76
|
+
return {
|
|
77
|
+
totalScore: scoreResult.totalScore,
|
|
78
|
+
grade: scoreResult.grade,
|
|
79
|
+
dimensions,
|
|
80
|
+
issueCount: scoreResult.issueCount,
|
|
81
|
+
passed: scoreResult.passed,
|
|
82
|
+
threshold,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Map a V3 DimensionScoreV3 to V4 DimensionInfo.
|
|
87
|
+
*/
|
|
88
|
+
function mapDimension(dim, name) {
|
|
89
|
+
return {
|
|
90
|
+
name,
|
|
91
|
+
maxScore: dim.maxScore,
|
|
92
|
+
score: dim.score,
|
|
93
|
+
issueCount: dim.issueCount,
|
|
94
|
+
percentage: Math.round((dim.score / dim.maxScore) * 100),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Compute grade from score.
|
|
99
|
+
*/
|
|
100
|
+
export { computeGrade };
|
|
101
|
+
// ─── Issue Counting Helpers ──────────────────────────────────────────
|
|
102
|
+
/**
|
|
103
|
+
* Count issues by category.
|
|
104
|
+
*/
|
|
105
|
+
export function countByCategory(results) {
|
|
106
|
+
const counts = {
|
|
107
|
+
'ai-faithfulness': 0,
|
|
108
|
+
'code-freshness': 0,
|
|
109
|
+
'context-coherence': 0,
|
|
110
|
+
'implementation': 0,
|
|
111
|
+
};
|
|
112
|
+
for (const result of results) {
|
|
113
|
+
counts[result.category]++;
|
|
114
|
+
}
|
|
115
|
+
return counts;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Count issues by severity.
|
|
119
|
+
*/
|
|
120
|
+
export function countBySeverity(results) {
|
|
121
|
+
const counts = {
|
|
122
|
+
error: 0,
|
|
123
|
+
warning: 0,
|
|
124
|
+
info: 0,
|
|
125
|
+
};
|
|
126
|
+
for (const result of results) {
|
|
127
|
+
counts[result.severity]++;
|
|
128
|
+
}
|
|
129
|
+
return counts;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get summary statistics for V4 results.
|
|
133
|
+
*/
|
|
134
|
+
export function getV4ResultStats(results) {
|
|
135
|
+
const byCategory = countByCategory(results);
|
|
136
|
+
const bySeverity = countBySeverity(results);
|
|
137
|
+
const filesWithIssues = new Set(results.map(r => r.file)).size;
|
|
138
|
+
return {
|
|
139
|
+
total: results.length,
|
|
140
|
+
byCategory,
|
|
141
|
+
bySeverity,
|
|
142
|
+
filesWithIssues,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=v4-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v4-adapter.js","sourceRoot":"","sources":["../../src/scorer/v4-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SLA Module — Public API
|
|
3
|
+
*/
|
|
4
|
+
export { SLALevel, SLA_TARGET_DURATIONS, SLA_AI_ANALYSIS, SLA_ACCURACY_TARGETS, } from './types.js';
|
|
5
|
+
export type { SLAMetrics, SLATimeoutCheck, } from './types.js';
|
|
6
|
+
export { SLATracker, parseSLALevel } from './tracker.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sla/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,eAAe,EACf,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,UAAU,EACV,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sla/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,eAAe,EACf,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAOpB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SLA Tracker
|
|
3
|
+
*
|
|
4
|
+
* Tracks scan performance against SLA targets.
|
|
5
|
+
* Provides timeout checking and metric collection.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```ts
|
|
9
|
+
* const tracker = new SLATracker(SLALevel.L2_STANDARD, 47);
|
|
10
|
+
* tracker.start();
|
|
11
|
+
*
|
|
12
|
+
* // During scan — check if we should degrade
|
|
13
|
+
* const check = tracker.checkTimeout();
|
|
14
|
+
* if (check.shouldDegrade) {
|
|
15
|
+
* // Skip remaining Tier 2/3 detectors
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* // After scan — collect final metrics
|
|
19
|
+
* const metrics = tracker.finalize(issues, detectorsUsed, detectorsTotal);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import type { UnifiedIssue } from '../types.js';
|
|
23
|
+
import { SLALevel, type SLAMetrics, type SLATimeoutCheck } from './types.js';
|
|
24
|
+
export declare class SLATracker {
|
|
25
|
+
private startTime;
|
|
26
|
+
private level;
|
|
27
|
+
private fileCount;
|
|
28
|
+
private _degraded;
|
|
29
|
+
private _degradeReason?;
|
|
30
|
+
/**
|
|
31
|
+
* @param level - SLA level for this scan
|
|
32
|
+
* @param fileCount - Number of files to scan (used for scaling target duration)
|
|
33
|
+
*/
|
|
34
|
+
constructor(level: SLALevel, fileCount?: number);
|
|
35
|
+
/**
|
|
36
|
+
* Start the SLA timer.
|
|
37
|
+
*/
|
|
38
|
+
start(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Get elapsed time since start (ms).
|
|
41
|
+
*/
|
|
42
|
+
get elapsedMs(): number;
|
|
43
|
+
/**
|
|
44
|
+
* Calculate the target duration for the actual file count.
|
|
45
|
+
* Scales linearly from the per-100-files target.
|
|
46
|
+
* Minimum target is 1 second regardless of file count.
|
|
47
|
+
*/
|
|
48
|
+
get targetDurationMs(): number;
|
|
49
|
+
/**
|
|
50
|
+
* Check if the scan is exceeding the SLA target.
|
|
51
|
+
* Returns whether degradation should occur.
|
|
52
|
+
*
|
|
53
|
+
* Degradation threshold: 80% of target time consumed → recommend degrading.
|
|
54
|
+
* This gives detectors remaining 20% to wrap up.
|
|
55
|
+
*/
|
|
56
|
+
checkTimeout(): SLATimeoutCheck;
|
|
57
|
+
/**
|
|
58
|
+
* Mark this scan as degraded.
|
|
59
|
+
*/
|
|
60
|
+
markDegraded(reason: string): void;
|
|
61
|
+
/**
|
|
62
|
+
* Collect final SLA metrics after the scan completes.
|
|
63
|
+
*/
|
|
64
|
+
finalize(issues: UnifiedIssue[], detectorsUsed: number, detectorsTotal: number): SLAMetrics;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Parse an SLA level string to enum value.
|
|
68
|
+
*/
|
|
69
|
+
export declare function parseSLALevel(value: string): SLALevel;
|
|
70
|
+
//# sourceMappingURL=tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/sla/tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,QAAQ,EAGR,KAAK,UAAU,EACf,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAEpB,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,cAAc,CAAC,CAAS;IAEhC;;;OAGG;gBACS,KAAK,EAAE,QAAQ,EAAE,SAAS,GAAE,MAAY;IAKpD;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAGtB;IAED;;;;OAIG;IACH,IAAI,gBAAgB,IAAI,MAAM,CAG7B;IAED;;;;;;OAMG;IACH,YAAY,IAAI,eAAe;IAuB/B;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKlC;;OAEG;IACH,QAAQ,CACN,MAAM,EAAE,YAAY,EAAE,EACtB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,UAAU;CA0Bd;AAsBD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAQrD"}
|