@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,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type Safety Detector (V3)
|
|
3
|
+
*
|
|
4
|
+
* TypeScript-specific type safety analysis:
|
|
5
|
+
* 1. Excessive `any` usage (`: any`, `as any`, `<any>`)
|
|
6
|
+
* 2. Missing return types on exported functions
|
|
7
|
+
* 3. Unsafe type assertions (`as unknown as X`)
|
|
8
|
+
* 4. Non-null assertion operator abuse (`!.`)
|
|
9
|
+
*
|
|
10
|
+
* AI models frequently generate TypeScript code with excessive `any` usage,
|
|
11
|
+
* unsafe assertions, and missing type annotations.
|
|
12
|
+
*
|
|
13
|
+
* Only operates on .ts/.tsx files.
|
|
14
|
+
*
|
|
15
|
+
* Implements the unified Detector interface.
|
|
16
|
+
*
|
|
17
|
+
* @since 0.3.0
|
|
18
|
+
*/
|
|
19
|
+
import { AIDefectCategory } from '../types.js';
|
|
20
|
+
// ─── Helpers ───
|
|
21
|
+
function isTypeScriptFile(filePath) {
|
|
22
|
+
return /\.(ts|tsx)$/.test(filePath);
|
|
23
|
+
}
|
|
24
|
+
// ─── Main Detector ───
|
|
25
|
+
/**
|
|
26
|
+
* TypeSafetyDetector — detects type safety issues in AI-generated TypeScript code.
|
|
27
|
+
*
|
|
28
|
+
* Analyzes:
|
|
29
|
+
* - `any` abuse (: any, as any, <any>)
|
|
30
|
+
* - Missing return type annotations on exported functions
|
|
31
|
+
* - Unsafe type assertions (as unknown as X)
|
|
32
|
+
* - Excessive non-null assertion (!) usage
|
|
33
|
+
*/
|
|
34
|
+
export class TypeSafetyDetector {
|
|
35
|
+
name = 'type-safety';
|
|
36
|
+
version = '1.0.0';
|
|
37
|
+
tier = 1;
|
|
38
|
+
// ─── V3 Unified Interface ───
|
|
39
|
+
async detect(files) {
|
|
40
|
+
const allIssues = [];
|
|
41
|
+
let globalIndex = 0;
|
|
42
|
+
for (const file of files) {
|
|
43
|
+
// Only analyze TypeScript files
|
|
44
|
+
if (!isTypeScriptFile(file.path))
|
|
45
|
+
continue;
|
|
46
|
+
const issues = this.analyzeFile(file.path, file.content);
|
|
47
|
+
for (const issue of issues) {
|
|
48
|
+
issue.id = `type-safety:${globalIndex++}`;
|
|
49
|
+
allIssues.push(issue);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return allIssues;
|
|
53
|
+
}
|
|
54
|
+
// ─── Internal Analysis ───
|
|
55
|
+
analyzeFile(filePath, source) {
|
|
56
|
+
const issues = [];
|
|
57
|
+
const lines = source.split('\n');
|
|
58
|
+
// 1. Detect `any` usage
|
|
59
|
+
this.detectAnyUsage(filePath, lines, issues);
|
|
60
|
+
// 2. Detect missing return types on exported functions
|
|
61
|
+
this.detectMissingReturnTypes(filePath, lines, issues);
|
|
62
|
+
// 3. Detect unsafe type assertions
|
|
63
|
+
this.detectUnsafeAssertions(filePath, lines, issues);
|
|
64
|
+
// 4. Detect non-null assertion abuse
|
|
65
|
+
this.detectNonNullAssertions(filePath, lines, issues);
|
|
66
|
+
return issues;
|
|
67
|
+
}
|
|
68
|
+
// ─── 1. Any Usage Detection ───
|
|
69
|
+
detectAnyUsage(filePath, lines, issues) {
|
|
70
|
+
const anyLocations = [];
|
|
71
|
+
for (let i = 0; i < lines.length; i++) {
|
|
72
|
+
const line = lines[i];
|
|
73
|
+
const trimmed = line.trim();
|
|
74
|
+
// Skip comments
|
|
75
|
+
if (trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*'))
|
|
76
|
+
continue;
|
|
77
|
+
// Skip suppressed lines
|
|
78
|
+
const prevLine = i > 0 ? lines[i - 1] : '';
|
|
79
|
+
if (prevLine.includes('// ai-validator-ignore') || prevLine.includes('// ai-validator-disable'))
|
|
80
|
+
continue;
|
|
81
|
+
// Detect `: any` (type annotation)
|
|
82
|
+
const colonAny = line.match(/:\s*any\b/g);
|
|
83
|
+
if (colonAny) {
|
|
84
|
+
for (const _m of colonAny) {
|
|
85
|
+
anyLocations.push({ line: i + 1, kind: ': any' });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Detect `as any` (type assertion)
|
|
89
|
+
const asAny = line.match(/\bas\s+any\b/g);
|
|
90
|
+
if (asAny) {
|
|
91
|
+
for (const _m of asAny) {
|
|
92
|
+
anyLocations.push({ line: i + 1, kind: 'as any' });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Detect `<any>` (type parameter / old-style assertion)
|
|
96
|
+
const angleBracketAny = line.match(/<any>/g);
|
|
97
|
+
if (angleBracketAny) {
|
|
98
|
+
for (const _m of angleBracketAny) {
|
|
99
|
+
anyLocations.push({ line: i + 1, kind: '<any>' });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const anyCount = anyLocations.length;
|
|
104
|
+
if (anyCount === 0)
|
|
105
|
+
return;
|
|
106
|
+
// Determine severity based on count
|
|
107
|
+
let severity;
|
|
108
|
+
if (anyCount > 8) {
|
|
109
|
+
severity = 'medium';
|
|
110
|
+
}
|
|
111
|
+
else if (anyCount >= 4) {
|
|
112
|
+
severity = 'low';
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
severity = 'info';
|
|
116
|
+
}
|
|
117
|
+
// Report per-location for the first few, then summary
|
|
118
|
+
if (anyCount <= 5) {
|
|
119
|
+
for (const loc of anyLocations) {
|
|
120
|
+
issues.push({
|
|
121
|
+
id: '',
|
|
122
|
+
detector: this.name,
|
|
123
|
+
type: 'any-usage',
|
|
124
|
+
category: AIDefectCategory.TYPE_SAFETY,
|
|
125
|
+
severity,
|
|
126
|
+
message: `Unsafe '${loc.kind}' usage — weakens TypeScript type checking`,
|
|
127
|
+
file: filePath,
|
|
128
|
+
line: loc.line,
|
|
129
|
+
suggestion: 'Replace `any` with a specific type, `unknown`, or a generic type parameter.',
|
|
130
|
+
fix: {
|
|
131
|
+
description: 'Replace `any` with proper type annotation',
|
|
132
|
+
autoFixable: false,
|
|
133
|
+
},
|
|
134
|
+
confidence: 0.9,
|
|
135
|
+
detectionSource: 'static',
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Report first 3 locations individually
|
|
141
|
+
for (const loc of anyLocations.slice(0, 3)) {
|
|
142
|
+
issues.push({
|
|
143
|
+
id: '',
|
|
144
|
+
detector: this.name,
|
|
145
|
+
type: 'any-usage',
|
|
146
|
+
category: AIDefectCategory.TYPE_SAFETY,
|
|
147
|
+
severity,
|
|
148
|
+
message: `Unsafe '${loc.kind}' usage — weakens TypeScript type checking`,
|
|
149
|
+
file: filePath,
|
|
150
|
+
line: loc.line,
|
|
151
|
+
suggestion: 'Replace `any` with a specific type, `unknown`, or a generic type parameter.',
|
|
152
|
+
fix: {
|
|
153
|
+
description: 'Replace `any` with proper type annotation',
|
|
154
|
+
autoFixable: false,
|
|
155
|
+
},
|
|
156
|
+
confidence: 0.9,
|
|
157
|
+
detectionSource: 'static',
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
// Summary issue
|
|
161
|
+
issues.push({
|
|
162
|
+
id: '',
|
|
163
|
+
detector: this.name,
|
|
164
|
+
type: 'any-abuse',
|
|
165
|
+
category: AIDefectCategory.TYPE_SAFETY,
|
|
166
|
+
severity,
|
|
167
|
+
message: `Excessive 'any' usage: ${anyCount} occurrences found in file. AI-generated code often over-uses 'any' to bypass type errors.`,
|
|
168
|
+
file: filePath,
|
|
169
|
+
line: 1,
|
|
170
|
+
suggestion: `Review and replace 'any' types with proper type annotations. Consider using \`unknown\` with type guards.`,
|
|
171
|
+
fix: {
|
|
172
|
+
description: `Replace ${anyCount} 'any' usages with proper types`,
|
|
173
|
+
autoFixable: false,
|
|
174
|
+
},
|
|
175
|
+
confidence: 0.9,
|
|
176
|
+
detectionSource: 'static',
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// ─── 2. Missing Return Types ───
|
|
181
|
+
detectMissingReturnTypes(filePath, lines, issues) {
|
|
182
|
+
for (let i = 0; i < lines.length; i++) {
|
|
183
|
+
const line = lines[i];
|
|
184
|
+
const trimmed = line.trim();
|
|
185
|
+
// Skip comments
|
|
186
|
+
if (trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*'))
|
|
187
|
+
continue;
|
|
188
|
+
// Skip suppressed lines
|
|
189
|
+
const prevLine = i > 0 ? lines[i - 1] : '';
|
|
190
|
+
if (prevLine.includes('// ai-validator-ignore') || prevLine.includes('// ai-validator-disable'))
|
|
191
|
+
continue;
|
|
192
|
+
// Match exported function declarations
|
|
193
|
+
const exportFuncMatch = trimmed.match(/^export\s+(?:default\s+)?(?:async\s+)?function\s+(\w+)\s*\(([^)]*)\)\s*\{/);
|
|
194
|
+
if (exportFuncMatch) {
|
|
195
|
+
const funcName = exportFuncMatch[1];
|
|
196
|
+
// Check if there's a return type annotation between ) and {
|
|
197
|
+
const fullLine = line;
|
|
198
|
+
const closeParen = fullLine.lastIndexOf(')');
|
|
199
|
+
const openBrace = fullLine.indexOf('{', closeParen);
|
|
200
|
+
if (closeParen >= 0 && openBrace >= 0) {
|
|
201
|
+
const between = fullLine.substring(closeParen + 1, openBrace).trim();
|
|
202
|
+
// Should have `: SomeType` between ) and {
|
|
203
|
+
if (!between.startsWith(':')) {
|
|
204
|
+
issues.push({
|
|
205
|
+
id: '',
|
|
206
|
+
detector: this.name,
|
|
207
|
+
type: 'missing-return-type',
|
|
208
|
+
category: AIDefectCategory.TYPE_SAFETY,
|
|
209
|
+
severity: 'low',
|
|
210
|
+
message: `Exported function '${funcName}' is missing a return type annotation`,
|
|
211
|
+
file: filePath,
|
|
212
|
+
line: i + 1,
|
|
213
|
+
suggestion: `Add an explicit return type: function ${funcName}(...): ReturnType { ... }`,
|
|
214
|
+
fix: {
|
|
215
|
+
description: `Add return type annotation to '${funcName}'`,
|
|
216
|
+
autoFixable: false,
|
|
217
|
+
},
|
|
218
|
+
confidence: 0.85,
|
|
219
|
+
detectionSource: 'static',
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// ─── 3. Unsafe Type Assertions ───
|
|
227
|
+
detectUnsafeAssertions(filePath, lines, issues) {
|
|
228
|
+
for (let i = 0; i < lines.length; i++) {
|
|
229
|
+
const line = lines[i];
|
|
230
|
+
const trimmed = line.trim();
|
|
231
|
+
// Skip comments
|
|
232
|
+
if (trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*'))
|
|
233
|
+
continue;
|
|
234
|
+
// Skip suppressed lines
|
|
235
|
+
const prevLine = i > 0 ? lines[i - 1] : '';
|
|
236
|
+
if (prevLine.includes('// ai-validator-ignore') || prevLine.includes('// ai-validator-disable'))
|
|
237
|
+
continue;
|
|
238
|
+
// Detect `as unknown as X` pattern
|
|
239
|
+
if (/\bas\s+unknown\s+as\s+\w/.test(line)) {
|
|
240
|
+
issues.push({
|
|
241
|
+
id: '',
|
|
242
|
+
detector: this.name,
|
|
243
|
+
type: 'unsafe-assertion',
|
|
244
|
+
category: AIDefectCategory.TYPE_SAFETY,
|
|
245
|
+
severity: 'medium',
|
|
246
|
+
message: `Unsafe double assertion 'as unknown as X' bypasses type checking entirely`,
|
|
247
|
+
file: filePath,
|
|
248
|
+
line: i + 1,
|
|
249
|
+
suggestion: 'Avoid double assertions. Use proper type narrowing (type guards) or fix the underlying type mismatch.',
|
|
250
|
+
fix: {
|
|
251
|
+
description: 'Replace double assertion with proper type narrowing',
|
|
252
|
+
autoFixable: false,
|
|
253
|
+
},
|
|
254
|
+
confidence: 0.95,
|
|
255
|
+
detectionSource: 'static',
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// ─── 4. Non-null Assertion Abuse ───
|
|
261
|
+
detectNonNullAssertions(filePath, lines, issues) {
|
|
262
|
+
const nonNullLocations = [];
|
|
263
|
+
for (let i = 0; i < lines.length; i++) {
|
|
264
|
+
const line = lines[i];
|
|
265
|
+
const trimmed = line.trim();
|
|
266
|
+
// Skip comments
|
|
267
|
+
if (trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*'))
|
|
268
|
+
continue;
|
|
269
|
+
// Skip suppressed lines
|
|
270
|
+
const prevLine = i > 0 ? lines[i - 1] : '';
|
|
271
|
+
if (prevLine.includes('// ai-validator-ignore') || prevLine.includes('// ai-validator-disable'))
|
|
272
|
+
continue;
|
|
273
|
+
// Detect `!.` and `!;` and `!)` — non-null assertion operator
|
|
274
|
+
// Be careful not to match !== or != or regular !boolean
|
|
275
|
+
const nonNullMatches = line.match(/\w+!\./g) || [];
|
|
276
|
+
const nonNullEnd = line.match(/\w+!(?:[;,)\]\s]|$)/g) || [];
|
|
277
|
+
// Filter out != and !==
|
|
278
|
+
const filtered = [...nonNullMatches, ...nonNullEnd].filter(m => !m.includes('!='));
|
|
279
|
+
if (filtered.length > 0) {
|
|
280
|
+
nonNullLocations.push(i + 1);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Only flag if there are many non-null assertions (>3 per file = noteworthy)
|
|
284
|
+
if (nonNullLocations.length > 5) {
|
|
285
|
+
issues.push({
|
|
286
|
+
id: '',
|
|
287
|
+
detector: this.name,
|
|
288
|
+
type: 'non-null-assertion-abuse',
|
|
289
|
+
category: AIDefectCategory.TYPE_SAFETY,
|
|
290
|
+
severity: 'low',
|
|
291
|
+
message: `Excessive non-null assertion (!) usage: ${nonNullLocations.length} occurrences. AI often uses '!' to suppress null checks instead of proper handling.`,
|
|
292
|
+
file: filePath,
|
|
293
|
+
line: nonNullLocations[0],
|
|
294
|
+
suggestion: 'Use optional chaining (?.), nullish coalescing (??), or proper null checks instead of non-null assertions.',
|
|
295
|
+
fix: {
|
|
296
|
+
description: 'Replace non-null assertions with safe null handling',
|
|
297
|
+
autoFixable: false,
|
|
298
|
+
},
|
|
299
|
+
confidence: 0.75,
|
|
300
|
+
detectionSource: 'static',
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
export default TypeSafetyDetector;
|
|
306
|
+
//# sourceMappingURL=type-safety.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-safety.js","sourceRoot":"","sources":["../../src/detectors/type-safety.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContextCoherenceDetector — V4 detector for AI context window issues.
|
|
3
|
+
*
|
|
4
|
+
* Detects logic inconsistencies that arise from AI context window limitations.
|
|
5
|
+
* When AI models generate long code, they lose track of what they've already
|
|
6
|
+
* defined, used, or imported — leading to coherence issues.
|
|
7
|
+
*
|
|
8
|
+
* V4 improvements over V3:
|
|
9
|
+
* - Operates on CodeUnit IR (definitions, references, imports) instead of regex
|
|
10
|
+
* - Cross-unit analysis for referenced-but-undefined symbols
|
|
11
|
+
* - Structural analysis using definitions/references instead of source text
|
|
12
|
+
* - Dramatically reduced false positives
|
|
13
|
+
*
|
|
14
|
+
* @since 0.4.0
|
|
15
|
+
*/
|
|
16
|
+
import type { CodeUnit, SupportedLanguage } from '../../ir/types.js';
|
|
17
|
+
import type { V4Detector, DetectorResult, DetectorCategory, DetectorContext } from './types.js';
|
|
18
|
+
export declare class ContextCoherenceDetector implements V4Detector {
|
|
19
|
+
readonly id = "context-coherence";
|
|
20
|
+
readonly name = "Context Coherence Detector";
|
|
21
|
+
readonly category: DetectorCategory;
|
|
22
|
+
readonly supportedLanguages: SupportedLanguage[];
|
|
23
|
+
detect(units: CodeUnit[], context: DetectorContext): Promise<DetectorResult[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Analysis 1: Detect functions/classes/types defined but never used and not exported.
|
|
26
|
+
*
|
|
27
|
+
* AI models sometimes define helper functions that are never called,
|
|
28
|
+
* or define types/interfaces that are never used — a sign of context loss.
|
|
29
|
+
*/
|
|
30
|
+
private detectUnusedDefinitions;
|
|
31
|
+
/**
|
|
32
|
+
* Analysis 2: Detect inconsistent import patterns within the same file.
|
|
33
|
+
*
|
|
34
|
+
* When AI loses context mid-generation, it may import the same functionality
|
|
35
|
+
* from different modules in different parts of the file. For example:
|
|
36
|
+
* - import { readFile } from 'fs' AND import { readFile } from 'fs/promises'
|
|
37
|
+
* - import lodash AND import underscore (same purpose)
|
|
38
|
+
*/
|
|
39
|
+
private detectInconsistentImports;
|
|
40
|
+
/**
|
|
41
|
+
* Analysis 3: Detect duplicate function names in the same scope.
|
|
42
|
+
*
|
|
43
|
+
* AI may re-define the same function name multiple times in a file
|
|
44
|
+
* when it loses track of what it has already generated.
|
|
45
|
+
*/
|
|
46
|
+
private detectDuplicateFunctionNames;
|
|
47
|
+
/** Group code units by their function/method definition names. */
|
|
48
|
+
private groupByFunctionName;
|
|
49
|
+
/** Report duplicate function definitions within the same scope. */
|
|
50
|
+
private reportDuplicates;
|
|
51
|
+
/**
|
|
52
|
+
* Analysis 4: Detect referenced but undefined symbols across units within a file.
|
|
53
|
+
*
|
|
54
|
+
* If a symbol is referenced but never defined (and not imported),
|
|
55
|
+
* the AI may have "forgotten" to include the definition.
|
|
56
|
+
*/
|
|
57
|
+
private detectUndefinedReferences;
|
|
58
|
+
/**
|
|
59
|
+
* Check if a name is a well-known global (e.g., console, window, process).
|
|
60
|
+
*/
|
|
61
|
+
private isWellKnownGlobal;
|
|
62
|
+
/**
|
|
63
|
+
* Capitalize a symbol kind for display.
|
|
64
|
+
*/
|
|
65
|
+
private capitalizeKind;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=context-coherence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-coherence.d.ts","sourceRoot":"","sources":["../../../src/detectors/v4/context-coherence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIhG,qBAAa,wBAAyB,YAAW,UAAU;IACzD,QAAQ,CAAC,EAAE,uBAAuB;IAClC,QAAQ,CAAC,IAAI,gCAAgC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAuB;IAC1D,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAEhD,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAkBpF;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAwD/B;;;;;;;OAOG;IACH,OAAO,CAAC,yBAAyB;IAyCjC;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;IAqBpC,kEAAkE;IAClE,OAAO,CAAC,mBAAmB;IAY3B,mEAAmE;IACnE,OAAO,CAAC,gBAAgB;IA2BxB;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IA6DjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4CzB;;OAEG;IACH,OAAO,CAAC,cAAc;CAGvB"}
|