@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,381 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Scan Pipeline Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Coordinates the two-stage AI scan pipeline:
|
|
5
|
+
* - Stage 0: Structural detectors (always runs, passed in)
|
|
6
|
+
* - Stage 1: Embedding recall (L2+)
|
|
7
|
+
* - Stage 2: LLM deep scan (L3)
|
|
8
|
+
*
|
|
9
|
+
* @since 0.4.0
|
|
10
|
+
*/
|
|
11
|
+
import { LocalEmbeddingProvider, cosineSimilarity } from './embedding/index.js';
|
|
12
|
+
import { OpenAIEmbeddingProvider } from './embedding/index.js';
|
|
13
|
+
import { OllamaEmbeddingProvider } from './embedding/index.js';
|
|
14
|
+
import { OllamaLLMProvider } from './llm/index.js';
|
|
15
|
+
import { OpenAILLMProvider } from './llm/index.js';
|
|
16
|
+
import { AnthropicLLMProvider } from './llm/index.js';
|
|
17
|
+
import { DEFECT_PATTERNS, getPatternText, getPatternsForLanguage, } from './patterns/index.js';
|
|
18
|
+
/**
|
|
19
|
+
* Parse LLM JSON response into structured issues.
|
|
20
|
+
* Handles markdown code fences and malformed JSON gracefully.
|
|
21
|
+
*/
|
|
22
|
+
function parseLLMResponse(content) {
|
|
23
|
+
try {
|
|
24
|
+
// Strip markdown code fences if present
|
|
25
|
+
let jsonText = content.trim();
|
|
26
|
+
if (jsonText.startsWith('```')) {
|
|
27
|
+
const lines = jsonText.split('\n');
|
|
28
|
+
// Remove first and last line if they're code fence markers
|
|
29
|
+
if (lines[0].startsWith('```'))
|
|
30
|
+
lines.shift();
|
|
31
|
+
if (lines[lines.length - 1].trim() === '```')
|
|
32
|
+
lines.pop();
|
|
33
|
+
jsonText = lines.join('\n');
|
|
34
|
+
}
|
|
35
|
+
const parsed = JSON.parse(jsonText);
|
|
36
|
+
// Handle { issues: [...] } wrapper
|
|
37
|
+
const issues = Array.isArray(parsed.issues)
|
|
38
|
+
? parsed.issues
|
|
39
|
+
: Array.isArray(parsed)
|
|
40
|
+
? parsed
|
|
41
|
+
: [];
|
|
42
|
+
return issues
|
|
43
|
+
.filter((issue) => typeof issue === 'object' &&
|
|
44
|
+
issue !== null &&
|
|
45
|
+
'line' in issue &&
|
|
46
|
+
'message' in issue)
|
|
47
|
+
.map((issue) => ({
|
|
48
|
+
line: Math.max(1, Math.floor(Number(issue.line)) || 1),
|
|
49
|
+
severity: normalizeSeverity(issue.severity),
|
|
50
|
+
message: String(issue.message),
|
|
51
|
+
category: issue.category ?? 'implementation',
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function normalizeSeverity(severity) {
|
|
59
|
+
const s = (severity ?? 'info').toLowerCase();
|
|
60
|
+
if (s === 'error' || s === 'critical')
|
|
61
|
+
return 'error';
|
|
62
|
+
if (s === 'warning' || s === 'warn')
|
|
63
|
+
return 'warning';
|
|
64
|
+
return 'info';
|
|
65
|
+
}
|
|
66
|
+
function normalizeCategory(category) {
|
|
67
|
+
const c = category.toLowerCase();
|
|
68
|
+
if (c.includes('faithful') || c.includes('hallucin'))
|
|
69
|
+
return 'ai-faithfulness';
|
|
70
|
+
if (c.includes('fresh') || c.includes('stale') || c.includes('deprecat'))
|
|
71
|
+
return 'code-freshness';
|
|
72
|
+
if (c.includes('coher') || c.includes('context'))
|
|
73
|
+
return 'context-coherence';
|
|
74
|
+
return 'implementation';
|
|
75
|
+
}
|
|
76
|
+
// ─── AI Scan Pipeline ──────────────────────────────────────────────
|
|
77
|
+
/**
|
|
78
|
+
* AI Scan Pipeline orchestrator.
|
|
79
|
+
*
|
|
80
|
+
* Runs the two-stage AI analysis based on SLA level configuration.
|
|
81
|
+
*/
|
|
82
|
+
export class AIScanPipeline {
|
|
83
|
+
config;
|
|
84
|
+
maxLLMBlocks;
|
|
85
|
+
similarityThreshold;
|
|
86
|
+
constructor(config) {
|
|
87
|
+
this.config = config;
|
|
88
|
+
this.maxLLMBlocks = config.maxLLMBlocks ?? 20;
|
|
89
|
+
this.similarityThreshold = config.similarityThreshold ?? 0.7;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Run the full scan pipeline.
|
|
93
|
+
*
|
|
94
|
+
* @param units CodeUnits from parsing
|
|
95
|
+
* @param structuralResults Results from structural detectors (V4 detectors)
|
|
96
|
+
* @returns Combined results from all stages
|
|
97
|
+
*/
|
|
98
|
+
async scan(units, structuralResults) {
|
|
99
|
+
const stages = [];
|
|
100
|
+
const totalStartTime = Date.now();
|
|
101
|
+
// Stage 0: Structural (already done, just include)
|
|
102
|
+
stages.push({
|
|
103
|
+
stage: 'structural',
|
|
104
|
+
issues: structuralResults,
|
|
105
|
+
durationMs: 0,
|
|
106
|
+
});
|
|
107
|
+
// L1 stops here
|
|
108
|
+
if (this.config.sla === 'L1') {
|
|
109
|
+
return this.buildResult(stages, totalStartTime);
|
|
110
|
+
}
|
|
111
|
+
// Stage 1: Embedding recall (L2 and L3)
|
|
112
|
+
const embeddingResults = await this.runEmbeddingStage(units);
|
|
113
|
+
stages.push(embeddingResults);
|
|
114
|
+
// Stage 2: LLM deep scan (L3 only)
|
|
115
|
+
if (this.config.sla === 'L3') {
|
|
116
|
+
const suspiciousBlocks = this.getSuspiciousBlocks(units, embeddingResults);
|
|
117
|
+
const llmResults = await this.runLLMStage(suspiciousBlocks);
|
|
118
|
+
stages.push(llmResults);
|
|
119
|
+
}
|
|
120
|
+
return this.buildResult(stages, totalStartTime);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Build the final result object.
|
|
124
|
+
*/
|
|
125
|
+
buildResult(stages, startTime) {
|
|
126
|
+
const totalIssues = stages.reduce((sum, s) => sum + s.issues.length, 0);
|
|
127
|
+
const totalDurationMs = Date.now() - startTime;
|
|
128
|
+
return {
|
|
129
|
+
stages,
|
|
130
|
+
totalIssues,
|
|
131
|
+
totalDurationMs,
|
|
132
|
+
slaLevel: this.config.sla,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Stage 1: Run embedding-based recall to find suspicious code blocks.
|
|
137
|
+
*/
|
|
138
|
+
async runEmbeddingStage(units) {
|
|
139
|
+
const startTime = Date.now();
|
|
140
|
+
if (units.length === 0) {
|
|
141
|
+
return { stage: 'embedding', issues: [], durationMs: 0 };
|
|
142
|
+
}
|
|
143
|
+
// Create embedding provider
|
|
144
|
+
const embeddingProvider = this.createEmbeddingProvider();
|
|
145
|
+
// Build corpus: pattern descriptions + code unit sources
|
|
146
|
+
const patternTexts = DEFECT_PATTERNS.map(getPatternText);
|
|
147
|
+
const codeTexts = units.map(u => this.buildCodeText(u));
|
|
148
|
+
const allTexts = [...patternTexts, ...codeTexts];
|
|
149
|
+
// Build vocabulary and generate embeddings
|
|
150
|
+
if (embeddingProvider instanceof LocalEmbeddingProvider) {
|
|
151
|
+
embeddingProvider.buildVocabulary(allTexts);
|
|
152
|
+
}
|
|
153
|
+
const embeddings = await embeddingProvider.embed(allTexts);
|
|
154
|
+
// Split embeddings back into patterns and code
|
|
155
|
+
const patternEmbeddings = embeddings.slice(0, patternTexts.length);
|
|
156
|
+
const codeEmbeddings = embeddings.slice(patternTexts.length);
|
|
157
|
+
// Find suspicious blocks by comparing code embeddings to pattern embeddings
|
|
158
|
+
const issues = [];
|
|
159
|
+
for (let i = 0; i < units.length; i++) {
|
|
160
|
+
const unit = units[i];
|
|
161
|
+
const codeEmb = codeEmbeddings[i];
|
|
162
|
+
if (!codeEmb)
|
|
163
|
+
continue;
|
|
164
|
+
// Get patterns applicable to this language
|
|
165
|
+
const applicablePatterns = getPatternsForLanguage(unit.language);
|
|
166
|
+
// Find matching patterns
|
|
167
|
+
const matches = [];
|
|
168
|
+
for (const pattern of applicablePatterns) {
|
|
169
|
+
const patternIdx = DEFECT_PATTERNS.indexOf(pattern);
|
|
170
|
+
if (patternIdx === -1)
|
|
171
|
+
continue;
|
|
172
|
+
const patternEmb = patternEmbeddings[patternIdx];
|
|
173
|
+
if (!patternEmb)
|
|
174
|
+
continue;
|
|
175
|
+
const similarity = cosineSimilarity(codeEmb, patternEmb);
|
|
176
|
+
if (similarity >= this.similarityThreshold) {
|
|
177
|
+
matches.push({ patternIdx, similarity });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Create issues for top matches
|
|
181
|
+
for (const match of matches.slice(0, 3)) {
|
|
182
|
+
const pattern = DEFECT_PATTERNS[match.patternIdx];
|
|
183
|
+
if (!pattern)
|
|
184
|
+
continue;
|
|
185
|
+
issues.push({
|
|
186
|
+
detectorId: 'embedding-recall',
|
|
187
|
+
severity: pattern.severity,
|
|
188
|
+
category: pattern.category,
|
|
189
|
+
messageKey: `ai.embedding.${pattern.id}`,
|
|
190
|
+
message: pattern.description,
|
|
191
|
+
file: unit.file,
|
|
192
|
+
line: unit.location.startLine + 1, // Convert to 1-based
|
|
193
|
+
confidence: match.similarity,
|
|
194
|
+
metadata: {
|
|
195
|
+
patternId: pattern.id,
|
|
196
|
+
similarity: match.similarity,
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
stage: 'embedding',
|
|
203
|
+
issues,
|
|
204
|
+
durationMs: Date.now() - startTime,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Stage 2: Run LLM deep scan on suspicious blocks.
|
|
209
|
+
*/
|
|
210
|
+
async runLLMStage(suspiciousUnits) {
|
|
211
|
+
const startTime = Date.now();
|
|
212
|
+
let totalTokens = 0;
|
|
213
|
+
if (suspiciousUnits.length === 0) {
|
|
214
|
+
return { stage: 'llm', issues: [], durationMs: 0, tokensUsed: 0 };
|
|
215
|
+
}
|
|
216
|
+
// Create LLM provider (local first, fallback to remote)
|
|
217
|
+
const llmProvider = await this.createLLMProvider();
|
|
218
|
+
if (!llmProvider) {
|
|
219
|
+
return { stage: 'llm', issues: [], durationMs: Date.now() - startTime, tokensUsed: 0 };
|
|
220
|
+
}
|
|
221
|
+
const issues = [];
|
|
222
|
+
// Process suspicious blocks (limited by maxLLMBlocks)
|
|
223
|
+
const blocksToAnalyze = suspiciousUnits.slice(0, this.maxLLMBlocks);
|
|
224
|
+
for (const unit of blocksToAnalyze) {
|
|
225
|
+
try {
|
|
226
|
+
const prompt = this.buildPrompt(unit);
|
|
227
|
+
const response = await llmProvider.complete(prompt, {
|
|
228
|
+
maxTokens: 2000,
|
|
229
|
+
temperature: 0.1,
|
|
230
|
+
system: LLM_SYSTEM_PROMPT,
|
|
231
|
+
});
|
|
232
|
+
if (response.usage) {
|
|
233
|
+
totalTokens += response.usage.total;
|
|
234
|
+
}
|
|
235
|
+
// Parse LLM response
|
|
236
|
+
const llmIssues = parseLLMResponse(response.content);
|
|
237
|
+
// Convert to DetectorResults
|
|
238
|
+
for (const issue of llmIssues) {
|
|
239
|
+
issues.push({
|
|
240
|
+
detectorId: 'llm-deep-scan',
|
|
241
|
+
severity: issue.severity,
|
|
242
|
+
category: normalizeCategory(issue.category),
|
|
243
|
+
messageKey: 'ai.llm.detected',
|
|
244
|
+
message: issue.message,
|
|
245
|
+
file: unit.file,
|
|
246
|
+
line: issue.line,
|
|
247
|
+
confidence: 0.8, // LLM issues have high confidence
|
|
248
|
+
metadata: {
|
|
249
|
+
source: 'llm',
|
|
250
|
+
},
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
// Graceful degradation: skip this block on error
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return {
|
|
260
|
+
stage: 'llm',
|
|
261
|
+
issues,
|
|
262
|
+
durationMs: Date.now() - startTime,
|
|
263
|
+
tokensUsed: totalTokens,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get suspicious blocks from embedding results.
|
|
268
|
+
* Returns units that have embedding matches above threshold.
|
|
269
|
+
*/
|
|
270
|
+
getSuspiciousBlocks(units, embeddingResults) {
|
|
271
|
+
// Get unique file paths with embedding issues
|
|
272
|
+
const suspiciousFiles = new Set(embeddingResults.issues
|
|
273
|
+
.filter(i => i.confidence >= this.similarityThreshold)
|
|
274
|
+
.map(i => i.file));
|
|
275
|
+
// Return units from suspicious files
|
|
276
|
+
return units.filter(u => suspiciousFiles.has(u.file));
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Create embedding provider based on configuration.
|
|
280
|
+
*/
|
|
281
|
+
createEmbeddingProvider() {
|
|
282
|
+
const embeddingConfig = this.config.embedding;
|
|
283
|
+
if (embeddingConfig?.provider === 'ollama') {
|
|
284
|
+
return new OllamaEmbeddingProvider(embeddingConfig.model ?? 'nomic-embed-text', embeddingConfig.baseUrl ?? this.config.local?.baseUrl ?? 'http://localhost:11434');
|
|
285
|
+
}
|
|
286
|
+
if (embeddingConfig?.provider === 'openai' && this.config.remote?.apiKey) {
|
|
287
|
+
return new OpenAIEmbeddingProvider(this.config.remote.apiKey, embeddingConfig.model ?? 'text-embedding-3-small');
|
|
288
|
+
}
|
|
289
|
+
// Default to local TF-IDF
|
|
290
|
+
return new LocalEmbeddingProvider(512);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Create LLM provider based on configuration.
|
|
294
|
+
* Prefers local (Ollama), falls back to remote.
|
|
295
|
+
*/
|
|
296
|
+
async createLLMProvider() {
|
|
297
|
+
// Try local first (L2 and L3)
|
|
298
|
+
if (this.config.local) {
|
|
299
|
+
const ollama = new OllamaLLMProvider(this.config.local.model, this.config.local.baseUrl ?? 'http://localhost:11434');
|
|
300
|
+
if (await ollama.isAvailable()) {
|
|
301
|
+
return ollama;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// Fallback to remote (L3 only)
|
|
305
|
+
if (this.config.remote) {
|
|
306
|
+
if (this.config.remote.provider === 'anthropic') {
|
|
307
|
+
return new AnthropicLLMProvider(this.config.remote.apiKey, this.config.remote.model);
|
|
308
|
+
}
|
|
309
|
+
if (this.config.remote.provider === 'openai') {
|
|
310
|
+
return new OpenAILLMProvider(this.config.remote.apiKey, this.config.remote.model, this.config.remote.baseUrl);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Build text representation of a CodeUnit for embedding.
|
|
317
|
+
*/
|
|
318
|
+
buildCodeText(unit) {
|
|
319
|
+
const parts = [];
|
|
320
|
+
// Add imports for context
|
|
321
|
+
for (const imp of unit.imports) {
|
|
322
|
+
parts.push(`import ${imp.module}`);
|
|
323
|
+
}
|
|
324
|
+
// Add function/method definitions
|
|
325
|
+
for (const def of unit.definitions) {
|
|
326
|
+
parts.push(`${def.kind} ${def.name}`);
|
|
327
|
+
}
|
|
328
|
+
// Add call sites
|
|
329
|
+
for (const call of unit.calls) {
|
|
330
|
+
parts.push(call.callee);
|
|
331
|
+
}
|
|
332
|
+
// Add source snippet (truncated)
|
|
333
|
+
const sourceSnippet = unit.source.slice(0, 2000);
|
|
334
|
+
parts.push(sourceSnippet);
|
|
335
|
+
return parts.join('\n');
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Build a focused prompt for the LLM to analyze a code block.
|
|
339
|
+
*/
|
|
340
|
+
buildPrompt(unit) {
|
|
341
|
+
return `Analyze this code for AI-generated defects.
|
|
342
|
+
|
|
343
|
+
File: ${unit.file}
|
|
344
|
+
Language: ${unit.language}
|
|
345
|
+
|
|
346
|
+
Code:
|
|
347
|
+
\`\`\`
|
|
348
|
+
${unit.source.slice(0, 4000)}
|
|
349
|
+
\`\`\`
|
|
350
|
+
|
|
351
|
+
Check for:
|
|
352
|
+
- Hallucinated imports (packages that don't exist)
|
|
353
|
+
- Phantom APIs (methods/functions that don't exist on objects)
|
|
354
|
+
- Deprecated API usage
|
|
355
|
+
- Logic inconsistencies
|
|
356
|
+
- Security anti-patterns
|
|
357
|
+
- Incomplete implementations (TODOs, stubs)
|
|
358
|
+
|
|
359
|
+
Respond in JSON format:
|
|
360
|
+
{
|
|
361
|
+
"issues": [
|
|
362
|
+
{ "line": <line_number>, "severity": "error|warning|info", "message": "<description>", "category": "<category>" }
|
|
363
|
+
]
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
If no issues found, respond with: { "issues": [] }`;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// ─── Constants ─────────────────────────────────────────────────────
|
|
370
|
+
const LLM_SYSTEM_PROMPT = `You are a code quality analyzer specialized in detecting AI-generated code defects.
|
|
371
|
+
You analyze code and identify issues that are common in AI-generated code:
|
|
372
|
+
- Hallucinated packages and APIs
|
|
373
|
+
- Outdated/deprecated patterns
|
|
374
|
+
- Logic inconsistencies from context window boundaries
|
|
375
|
+
- Security vulnerabilities common in AI output
|
|
376
|
+
- Over-engineering and unnecessary complexity
|
|
377
|
+
|
|
378
|
+
Always respond with valid JSON matching the requested format.
|
|
379
|
+
Be precise about line numbers.
|
|
380
|
+
Only report issues you are confident about.`;
|
|
381
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/ai/v4/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SLA Router — Maps SLA levels to pipeline configuration.
|
|
3
|
+
*
|
|
4
|
+
* SLA (Service Level Agreement) levels control the depth and cost
|
|
5
|
+
* of the AI scan pipeline:
|
|
6
|
+
*
|
|
7
|
+
* - L1 Fast: Structural detectors only (no AI) — ~10s/100 files
|
|
8
|
+
* - L2 Standard: + Embedding recall + Local LLM — ~30s/100 files
|
|
9
|
+
* - L3 Deep: + Remote LLM — ~120s/100 files
|
|
10
|
+
*
|
|
11
|
+
* @since 0.4.0
|
|
12
|
+
*/
|
|
13
|
+
import type { AIConfig, SLALevel } from './types.js';
|
|
14
|
+
import { AIScanPipeline } from './pipeline.js';
|
|
15
|
+
/**
|
|
16
|
+
* Human-readable descriptions for each SLA level.
|
|
17
|
+
*/
|
|
18
|
+
export declare const SLA_DESCRIPTIONS: Record<SLALevel, {
|
|
19
|
+
name: string;
|
|
20
|
+
maxTime: string;
|
|
21
|
+
ai: string;
|
|
22
|
+
}>;
|
|
23
|
+
/**
|
|
24
|
+
* Default configurations for each SLA level.
|
|
25
|
+
* These can be overridden by user configuration.
|
|
26
|
+
*/
|
|
27
|
+
export declare const DEFAULT_SLA_CONFIGS: Record<SLALevel, Partial<AIConfig>>;
|
|
28
|
+
/**
|
|
29
|
+
* Create an AI scan pipeline for the specified SLA level.
|
|
30
|
+
*
|
|
31
|
+
* @param sla SLA level (L1, L2, or L3)
|
|
32
|
+
* @param configOverride Override configuration (merged with defaults)
|
|
33
|
+
* @returns Configured AIScanPipeline instance
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* const pipeline = createPipelineForSLA('L2', {
|
|
38
|
+
* local: { provider: 'ollama', model: 'deepseek-coder:6.7b' }
|
|
39
|
+
* });
|
|
40
|
+
* const result = await pipeline.scan(units, structuralResults);
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function createPipelineForSLA(sla: SLALevel, configOverride?: Partial<AIConfig>): AIScanPipeline;
|
|
44
|
+
/**
|
|
45
|
+
* Get recommended SLA level based on available resources.
|
|
46
|
+
*
|
|
47
|
+
* Returns:
|
|
48
|
+
* - L3 if remote API key is configured
|
|
49
|
+
* - L2 if Ollama is available
|
|
50
|
+
* - L1 otherwise
|
|
51
|
+
*/
|
|
52
|
+
export declare function getRecommendedSLA(config?: Partial<AIConfig>): SLALevel;
|
|
53
|
+
/**
|
|
54
|
+
* Validate that a configuration is valid for the specified SLA level.
|
|
55
|
+
*
|
|
56
|
+
* @returns Object with valid flag and any error messages
|
|
57
|
+
*/
|
|
58
|
+
export declare function validateSLAConfig(sla: SLALevel, config?: Partial<AIConfig>): {
|
|
59
|
+
valid: boolean;
|
|
60
|
+
errors: string[];
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=sla.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sla.d.ts","sourceRoot":"","sources":["../../../src/ai/v4/sla.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CACnC,QAAQ,EACR;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAiB9C,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAwBnE,CAAC;AAIF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,QAAQ,EACb,cAAc,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GACjC,cAAc,CAWhB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAatE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,QAAQ,EACb,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GACzB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAsBtC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SLA Router — Maps SLA levels to pipeline configuration.
|
|
3
|
+
*
|
|
4
|
+
* SLA (Service Level Agreement) levels control the depth and cost
|
|
5
|
+
* of the AI scan pipeline:
|
|
6
|
+
*
|
|
7
|
+
* - L1 Fast: Structural detectors only (no AI) — ~10s/100 files
|
|
8
|
+
* - L2 Standard: + Embedding recall + Local LLM — ~30s/100 files
|
|
9
|
+
* - L3 Deep: + Remote LLM — ~120s/100 files
|
|
10
|
+
*
|
|
11
|
+
* @since 0.4.0
|
|
12
|
+
*/
|
|
13
|
+
import { AIScanPipeline } from './pipeline.js';
|
|
14
|
+
// ─── SLA Descriptions ──────────────────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* Human-readable descriptions for each SLA level.
|
|
17
|
+
*/
|
|
18
|
+
export const SLA_DESCRIPTIONS = {
|
|
19
|
+
L1: {
|
|
20
|
+
name: 'Fast',
|
|
21
|
+
maxTime: '10s/100 files',
|
|
22
|
+
ai: 'None (structural only)',
|
|
23
|
+
},
|
|
24
|
+
L2: {
|
|
25
|
+
name: 'Standard',
|
|
26
|
+
maxTime: '30s/100 files',
|
|
27
|
+
ai: 'Embedding + Local LLM',
|
|
28
|
+
},
|
|
29
|
+
L3: {
|
|
30
|
+
name: 'Deep',
|
|
31
|
+
maxTime: '120s/100 files',
|
|
32
|
+
ai: 'Embedding + Remote LLM',
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
// ─── Default Configs by SLA ────────────────────────────────────────
|
|
36
|
+
/**
|
|
37
|
+
* Default configurations for each SLA level.
|
|
38
|
+
* These can be overridden by user configuration.
|
|
39
|
+
*/
|
|
40
|
+
export const DEFAULT_SLA_CONFIGS = {
|
|
41
|
+
L1: {
|
|
42
|
+
sla: 'L1',
|
|
43
|
+
maxLLMBlocks: 0,
|
|
44
|
+
similarityThreshold: 0,
|
|
45
|
+
},
|
|
46
|
+
L2: {
|
|
47
|
+
sla: 'L2',
|
|
48
|
+
embedding: { provider: 'local' },
|
|
49
|
+
local: { provider: 'ollama', model: 'codellama:13b' },
|
|
50
|
+
maxLLMBlocks: 20,
|
|
51
|
+
similarityThreshold: 0.7,
|
|
52
|
+
},
|
|
53
|
+
L3: {
|
|
54
|
+
sla: 'L3',
|
|
55
|
+
embedding: { provider: 'openai' },
|
|
56
|
+
remote: {
|
|
57
|
+
provider: 'openai',
|
|
58
|
+
model: 'gpt-4o-mini',
|
|
59
|
+
apiKey: '',
|
|
60
|
+
},
|
|
61
|
+
maxLLMBlocks: 30,
|
|
62
|
+
similarityThreshold: 0.65, // Lower threshold for L3 since LLM will verify
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
// ─── Factory Functions ─────────────────────────────────────────────
|
|
66
|
+
/**
|
|
67
|
+
* Create an AI scan pipeline for the specified SLA level.
|
|
68
|
+
*
|
|
69
|
+
* @param sla SLA level (L1, L2, or L3)
|
|
70
|
+
* @param configOverride Override configuration (merged with defaults)
|
|
71
|
+
* @returns Configured AIScanPipeline instance
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* const pipeline = createPipelineForSLA('L2', {
|
|
76
|
+
* local: { provider: 'ollama', model: 'deepseek-coder:6.7b' }
|
|
77
|
+
* });
|
|
78
|
+
* const result = await pipeline.scan(units, structuralResults);
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export function createPipelineForSLA(sla, configOverride) {
|
|
82
|
+
const defaultConfig = DEFAULT_SLA_CONFIGS[sla];
|
|
83
|
+
// Merge defaults with overrides
|
|
84
|
+
const config = {
|
|
85
|
+
...defaultConfig,
|
|
86
|
+
...configOverride,
|
|
87
|
+
sla, // Always use the specified SLA level
|
|
88
|
+
};
|
|
89
|
+
return new AIScanPipeline(config);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get recommended SLA level based on available resources.
|
|
93
|
+
*
|
|
94
|
+
* Returns:
|
|
95
|
+
* - L3 if remote API key is configured
|
|
96
|
+
* - L2 if Ollama is available
|
|
97
|
+
* - L1 otherwise
|
|
98
|
+
*/
|
|
99
|
+
export function getRecommendedSLA(config) {
|
|
100
|
+
// If remote API is configured, prefer L3
|
|
101
|
+
if (config?.remote?.apiKey) {
|
|
102
|
+
return 'L3';
|
|
103
|
+
}
|
|
104
|
+
// If local LLM is configured, use L2
|
|
105
|
+
if (config?.local) {
|
|
106
|
+
return 'L2';
|
|
107
|
+
}
|
|
108
|
+
// Default to L1 (fast, no AI required)
|
|
109
|
+
return 'L1';
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Validate that a configuration is valid for the specified SLA level.
|
|
113
|
+
*
|
|
114
|
+
* @returns Object with valid flag and any error messages
|
|
115
|
+
*/
|
|
116
|
+
export function validateSLAConfig(sla, config) {
|
|
117
|
+
const errors = [];
|
|
118
|
+
if (sla === 'L2') {
|
|
119
|
+
if (!config?.local?.model) {
|
|
120
|
+
errors.push('L2 requires local.model to be specified');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (sla === 'L3') {
|
|
124
|
+
if (!config?.remote?.apiKey) {
|
|
125
|
+
errors.push('L3 requires remote.apiKey to be specified');
|
|
126
|
+
}
|
|
127
|
+
if (!config?.remote?.model) {
|
|
128
|
+
errors.push('L3 requires remote.model to be specified');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
valid: errors.length === 0,
|
|
133
|
+
errors,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=sla.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sla.js","sourceRoot":"","sources":["../../../src/ai/v4/sla.ts"],"names":[],"mappings":"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"}
|