@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,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StaleAPIDetector — V4 detector for deprecated APIs and packages.
|
|
3
|
+
*
|
|
4
|
+
* AI models are trained on historical data and frequently generate code using
|
|
5
|
+
* APIs that have since been deprecated. This detector catches them through:
|
|
6
|
+
* 1. Dynamic registry deprecation checks (npm deprecated field, etc.)
|
|
7
|
+
* 2. Well-known per-language deprecated API patterns
|
|
8
|
+
*
|
|
9
|
+
* V4 improvements over V3:
|
|
10
|
+
* - Registry-based deprecation checks instead of hardcoded data
|
|
11
|
+
* - Operates on CodeUnit IR (calls + imports)
|
|
12
|
+
* - Per-language deprecation pattern database
|
|
13
|
+
* - Confidence scoring based on deprecation source
|
|
14
|
+
*
|
|
15
|
+
* @since 0.4.0
|
|
16
|
+
*/
|
|
17
|
+
import type { CodeUnit, SupportedLanguage } from '../../ir/types.js';
|
|
18
|
+
import type { V4Detector, DetectorResult, DetectorCategory, DetectorContext } from './types.js';
|
|
19
|
+
/** Definition of a deprecated API pattern for detection. */
|
|
20
|
+
export interface DeprecatedPattern {
|
|
21
|
+
/** Pattern to match in call expressions (callee string) */
|
|
22
|
+
pattern: string | RegExp;
|
|
23
|
+
/** What replaces it */
|
|
24
|
+
replacement: string;
|
|
25
|
+
/** Since when deprecated */
|
|
26
|
+
since?: string;
|
|
27
|
+
/** Confidence level */
|
|
28
|
+
confidence: number;
|
|
29
|
+
/** Human-readable description */
|
|
30
|
+
description?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare class StaleAPIDetector implements V4Detector {
|
|
33
|
+
readonly id = "stale-api";
|
|
34
|
+
readonly name = "Stale API Detector";
|
|
35
|
+
readonly category: DetectorCategory;
|
|
36
|
+
readonly supportedLanguages: SupportedLanguage[];
|
|
37
|
+
detect(units: CodeUnit[], context: DetectorContext): Promise<DetectorResult[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Check package deprecation status via the registry manager.
|
|
40
|
+
*/
|
|
41
|
+
private checkRegistryDeprecations;
|
|
42
|
+
/**
|
|
43
|
+
* Check well-known deprecated API patterns in source code.
|
|
44
|
+
*/
|
|
45
|
+
private checkPatternDeprecations;
|
|
46
|
+
/**
|
|
47
|
+
* Check deprecated import modules (entire modules that are deprecated).
|
|
48
|
+
*/
|
|
49
|
+
private checkDeprecatedImports;
|
|
50
|
+
/**
|
|
51
|
+
* Extract top-level package name from a module path.
|
|
52
|
+
*/
|
|
53
|
+
private extractPackageName;
|
|
54
|
+
/**
|
|
55
|
+
* Escape a string for use in a regular expression.
|
|
56
|
+
*/
|
|
57
|
+
private escapeRegex;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=stale-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stale-api.d.ts","sourceRoot":"","sources":["../../../src/detectors/v4/stale-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;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,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgRD,qBAAa,gBAAiB,YAAW,UAAU;IACjD,QAAQ,CAAC,EAAE,eAAe;IAC1B,QAAQ,CAAC,IAAI,wBAAwB;IACrC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAoB;IACvD,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAEhD,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAepF;;OAEG;YACW,yBAAyB;IAiEvC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgDhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoC9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IACH,OAAO,CAAC,WAAW;CAGpB"}
|
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StaleAPIDetector — V4 detector for deprecated APIs and packages.
|
|
3
|
+
*
|
|
4
|
+
* AI models are trained on historical data and frequently generate code using
|
|
5
|
+
* APIs that have since been deprecated. This detector catches them through:
|
|
6
|
+
* 1. Dynamic registry deprecation checks (npm deprecated field, etc.)
|
|
7
|
+
* 2. Well-known per-language deprecated API patterns
|
|
8
|
+
*
|
|
9
|
+
* V4 improvements over V3:
|
|
10
|
+
* - Registry-based deprecation checks instead of hardcoded data
|
|
11
|
+
* - Operates on CodeUnit IR (calls + imports)
|
|
12
|
+
* - Per-language deprecation pattern database
|
|
13
|
+
* - Confidence scoring based on deprecation source
|
|
14
|
+
*
|
|
15
|
+
* @since 0.4.0
|
|
16
|
+
*/
|
|
17
|
+
// ─── Well-known deprecation patterns per language ──────────────────
|
|
18
|
+
const TYPESCRIPT_DEPRECATIONS = [
|
|
19
|
+
{
|
|
20
|
+
pattern: /\bnew\s+Buffer\b/,
|
|
21
|
+
replacement: 'Buffer.from() / Buffer.alloc()',
|
|
22
|
+
since: 'Node.js 6',
|
|
23
|
+
confidence: 0.95,
|
|
24
|
+
description: 'Buffer constructor is deprecated due to security and usability issues',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
pattern: /\burl\.parse\b/,
|
|
28
|
+
replacement: 'new URL()',
|
|
29
|
+
since: 'Node.js 11',
|
|
30
|
+
confidence: 0.85,
|
|
31
|
+
description: 'url.parse() is deprecated in favor of the WHATWG URL API',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
pattern: /\bfs\.exists\b/,
|
|
35
|
+
replacement: 'fs.existsSync() or fs.access()',
|
|
36
|
+
since: 'Node.js 1.0',
|
|
37
|
+
confidence: 0.9,
|
|
38
|
+
description: 'fs.exists() is deprecated; use fs.existsSync() or fs.access()',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
pattern: /\brequire\s*\(\s*['"]querystring['"]\s*\)/,
|
|
42
|
+
replacement: 'URLSearchParams',
|
|
43
|
+
since: 'Node.js 12',
|
|
44
|
+
confidence: 0.8,
|
|
45
|
+
description: 'querystring module is deprecated in favor of URLSearchParams',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
pattern: /\brequire\s*\(\s*['"]domain['"]\s*\)/,
|
|
49
|
+
replacement: 'async_hooks or structured error handling',
|
|
50
|
+
since: 'Node.js 4',
|
|
51
|
+
confidence: 0.9,
|
|
52
|
+
description: 'domain module is deprecated and pending removal',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
pattern: /\brequire\s*\(\s*['"]punycode['"]\s*\)/,
|
|
56
|
+
replacement: 'Use a userland alternative or URL API',
|
|
57
|
+
since: 'Node.js 7',
|
|
58
|
+
confidence: 0.8,
|
|
59
|
+
description: 'punycode module is deprecated',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
pattern: /\bSlowBuffer\b/,
|
|
63
|
+
replacement: 'Buffer.allocUnsafeSlow()',
|
|
64
|
+
since: 'Node.js 6',
|
|
65
|
+
confidence: 0.9,
|
|
66
|
+
description: 'SlowBuffer is deprecated in favor of Buffer.allocUnsafeSlow()',
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
const PYTHON_DEPRECATIONS = [
|
|
70
|
+
{
|
|
71
|
+
pattern: /\bimport\s+optparse\b/,
|
|
72
|
+
replacement: 'argparse',
|
|
73
|
+
since: 'Python 3.2',
|
|
74
|
+
confidence: 0.95,
|
|
75
|
+
description: 'optparse is deprecated in favor of argparse',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
pattern: /\bimport\s+imp\b/,
|
|
79
|
+
replacement: 'importlib',
|
|
80
|
+
since: 'Python 3.4',
|
|
81
|
+
confidence: 0.95,
|
|
82
|
+
description: 'imp module is deprecated in favor of importlib',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
pattern: /\bcollections\.MutableMapping\b/,
|
|
86
|
+
replacement: 'collections.abc.MutableMapping',
|
|
87
|
+
since: 'Python 3.3',
|
|
88
|
+
confidence: 0.9,
|
|
89
|
+
description: 'Direct access to abstract base classes from collections is deprecated',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
pattern: /\bcollections\.MutableSequence\b/,
|
|
93
|
+
replacement: 'collections.abc.MutableSequence',
|
|
94
|
+
since: 'Python 3.3',
|
|
95
|
+
confidence: 0.9,
|
|
96
|
+
description: 'Direct access to abstract base classes from collections is deprecated',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
pattern: /\bcollections\.MutableSet\b/,
|
|
100
|
+
replacement: 'collections.abc.MutableSet',
|
|
101
|
+
since: 'Python 3.3',
|
|
102
|
+
confidence: 0.9,
|
|
103
|
+
description: 'Direct access to abstract base classes from collections is deprecated',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
pattern: /\basyncio\.coroutine\b/,
|
|
107
|
+
replacement: 'async def',
|
|
108
|
+
since: 'Python 3.8',
|
|
109
|
+
confidence: 0.95,
|
|
110
|
+
description: '@asyncio.coroutine decorator is deprecated in favor of async def',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
pattern: /\bimport\s+distutils\b/,
|
|
114
|
+
replacement: 'setuptools',
|
|
115
|
+
since: 'Python 3.10',
|
|
116
|
+
confidence: 0.9,
|
|
117
|
+
description: 'distutils is deprecated and removed in Python 3.12',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
pattern: /\bimport\s+cgi\b/,
|
|
121
|
+
replacement: 'urllib.parse or email.message',
|
|
122
|
+
since: 'Python 3.11',
|
|
123
|
+
confidence: 0.85,
|
|
124
|
+
description: 'cgi module is deprecated',
|
|
125
|
+
},
|
|
126
|
+
];
|
|
127
|
+
const JAVA_DEPRECATIONS = [
|
|
128
|
+
{
|
|
129
|
+
pattern: /\bnew\s+Date\(\)/,
|
|
130
|
+
replacement: 'LocalDateTime.now() / Instant.now()',
|
|
131
|
+
since: 'Java 8',
|
|
132
|
+
confidence: 0.7,
|
|
133
|
+
description: 'java.util.Date is largely deprecated in favor of java.time API',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
pattern: /\bVector\b/,
|
|
137
|
+
replacement: 'ArrayList (or Collections.synchronizedList)',
|
|
138
|
+
since: 'Java 1.2',
|
|
139
|
+
confidence: 0.85,
|
|
140
|
+
description: 'Vector is legacy; use ArrayList or CopyOnWriteArrayList',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
pattern: /\bStringBuffer\b/,
|
|
144
|
+
replacement: 'StringBuilder',
|
|
145
|
+
since: 'Java 1.5',
|
|
146
|
+
confidence: 0.8,
|
|
147
|
+
description: 'StringBuffer is slower than StringBuilder; use StringBuilder unless thread-safety needed',
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
pattern: /\bThread\.stop\b/,
|
|
151
|
+
replacement: 'Thread interruption pattern',
|
|
152
|
+
since: 'Java 1.2',
|
|
153
|
+
confidence: 0.95,
|
|
154
|
+
description: 'Thread.stop() is deprecated because it is inherently unsafe',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
pattern: /\bThread\.suspend\b/,
|
|
158
|
+
replacement: 'Use wait/notify or LockSupport',
|
|
159
|
+
since: 'Java 1.2',
|
|
160
|
+
confidence: 0.95,
|
|
161
|
+
description: 'Thread.suspend() is deprecated due to deadlock risks',
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
pattern: /\bThread\.resume\b/,
|
|
165
|
+
replacement: 'Use wait/notify or LockSupport',
|
|
166
|
+
since: 'Java 1.2',
|
|
167
|
+
confidence: 0.95,
|
|
168
|
+
description: 'Thread.resume() is deprecated due to deadlock risks',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
pattern: /\bHashtable\b/,
|
|
172
|
+
replacement: 'HashMap or ConcurrentHashMap',
|
|
173
|
+
since: 'Java 1.2',
|
|
174
|
+
confidence: 0.8,
|
|
175
|
+
description: 'Hashtable is legacy; use HashMap or ConcurrentHashMap',
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
pattern: /\bRuntime\.getRuntime\(\)\.exec\b/,
|
|
179
|
+
replacement: 'ProcessBuilder',
|
|
180
|
+
since: 'Java 9',
|
|
181
|
+
confidence: 0.7,
|
|
182
|
+
description: 'Runtime.exec() has known issues; prefer ProcessBuilder',
|
|
183
|
+
},
|
|
184
|
+
];
|
|
185
|
+
const GO_DEPRECATIONS = [
|
|
186
|
+
{
|
|
187
|
+
pattern: /\bioutil\.ReadFile\b/,
|
|
188
|
+
replacement: 'os.ReadFile',
|
|
189
|
+
since: 'Go 1.16',
|
|
190
|
+
confidence: 0.95,
|
|
191
|
+
description: 'io/ioutil is deprecated; use os.ReadFile',
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
pattern: /\bioutil\.WriteFile\b/,
|
|
195
|
+
replacement: 'os.WriteFile',
|
|
196
|
+
since: 'Go 1.16',
|
|
197
|
+
confidence: 0.95,
|
|
198
|
+
description: 'io/ioutil is deprecated; use os.WriteFile',
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
pattern: /\bioutil\.ReadAll\b/,
|
|
202
|
+
replacement: 'io.ReadAll',
|
|
203
|
+
since: 'Go 1.16',
|
|
204
|
+
confidence: 0.95,
|
|
205
|
+
description: 'io/ioutil is deprecated; use io.ReadAll',
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
pattern: /\bioutil\.TempDir\b/,
|
|
209
|
+
replacement: 'os.MkdirTemp',
|
|
210
|
+
since: 'Go 1.16',
|
|
211
|
+
confidence: 0.95,
|
|
212
|
+
description: 'io/ioutil is deprecated; use os.MkdirTemp',
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
pattern: /\bioutil\.TempFile\b/,
|
|
216
|
+
replacement: 'os.CreateTemp',
|
|
217
|
+
since: 'Go 1.16',
|
|
218
|
+
confidence: 0.95,
|
|
219
|
+
description: 'io/ioutil is deprecated; use os.CreateTemp',
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
pattern: /\bioutil\.ReadDir\b/,
|
|
223
|
+
replacement: 'os.ReadDir',
|
|
224
|
+
since: 'Go 1.16',
|
|
225
|
+
confidence: 0.95,
|
|
226
|
+
description: 'io/ioutil is deprecated; use os.ReadDir',
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
pattern: /\bioutil\.NopCloser\b/,
|
|
230
|
+
replacement: 'io.NopCloser',
|
|
231
|
+
since: 'Go 1.16',
|
|
232
|
+
confidence: 0.95,
|
|
233
|
+
description: 'io/ioutil is deprecated; use io.NopCloser',
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
pattern: /\bimport\s+["']io\/ioutil["']/,
|
|
237
|
+
replacement: 'io and os packages',
|
|
238
|
+
since: 'Go 1.16',
|
|
239
|
+
confidence: 0.95,
|
|
240
|
+
description: 'The entire io/ioutil package is deprecated since Go 1.16',
|
|
241
|
+
},
|
|
242
|
+
];
|
|
243
|
+
const KOTLIN_DEPRECATIONS = [
|
|
244
|
+
{
|
|
245
|
+
pattern: /\bkotlin\.coroutines\.experimental\b/,
|
|
246
|
+
replacement: 'kotlin.coroutines',
|
|
247
|
+
since: 'Kotlin 1.3',
|
|
248
|
+
confidence: 0.95,
|
|
249
|
+
description: 'Experimental coroutines API is deprecated; use stable kotlin.coroutines',
|
|
250
|
+
},
|
|
251
|
+
// Kotlin inherits Java deprecations
|
|
252
|
+
...JAVA_DEPRECATIONS,
|
|
253
|
+
];
|
|
254
|
+
// ─── Deprecation patterns map ──────────────────────────────────────
|
|
255
|
+
const DEPRECATION_PATTERNS = new Map([
|
|
256
|
+
['typescript', TYPESCRIPT_DEPRECATIONS],
|
|
257
|
+
['javascript', TYPESCRIPT_DEPRECATIONS],
|
|
258
|
+
['python', PYTHON_DEPRECATIONS],
|
|
259
|
+
['java', JAVA_DEPRECATIONS],
|
|
260
|
+
['go', GO_DEPRECATIONS],
|
|
261
|
+
['kotlin', KOTLIN_DEPRECATIONS],
|
|
262
|
+
]);
|
|
263
|
+
// ─── Deprecated import modules (package-level deprecation) ─────────
|
|
264
|
+
const DEPRECATED_IMPORT_MODULES = new Map([
|
|
265
|
+
['python', new Map([
|
|
266
|
+
['optparse', { replacement: 'argparse', since: 'Python 3.2' }],
|
|
267
|
+
['imp', { replacement: 'importlib', since: 'Python 3.4' }],
|
|
268
|
+
['distutils', { replacement: 'setuptools', since: 'Python 3.10' }],
|
|
269
|
+
['cgi', { replacement: 'urllib.parse or email.message', since: 'Python 3.11' }],
|
|
270
|
+
])],
|
|
271
|
+
['go', new Map([
|
|
272
|
+
['io/ioutil', { replacement: 'io and os packages', since: 'Go 1.16' }],
|
|
273
|
+
])],
|
|
274
|
+
]);
|
|
275
|
+
// ─── Detector ──────────────────────────────────────────────────────
|
|
276
|
+
export class StaleAPIDetector {
|
|
277
|
+
id = 'stale-api';
|
|
278
|
+
name = 'Stale API Detector';
|
|
279
|
+
category = 'code-freshness';
|
|
280
|
+
supportedLanguages = [];
|
|
281
|
+
async detect(units, context) {
|
|
282
|
+
const results = [];
|
|
283
|
+
// Phase 1: Check package-level deprecation via registry
|
|
284
|
+
await this.checkRegistryDeprecations(units, context, results);
|
|
285
|
+
// Phase 2: Check well-known deprecated API patterns in source code
|
|
286
|
+
this.checkPatternDeprecations(units, results);
|
|
287
|
+
// Phase 3: Check deprecated import modules
|
|
288
|
+
this.checkDeprecatedImports(units, results);
|
|
289
|
+
return results;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Check package deprecation status via the registry manager.
|
|
293
|
+
*/
|
|
294
|
+
async checkRegistryDeprecations(units, context, results) {
|
|
295
|
+
if (!context.registryManager)
|
|
296
|
+
return;
|
|
297
|
+
// Collect unique import packages by language
|
|
298
|
+
const importsByLanguage = new Map();
|
|
299
|
+
for (const unit of units) {
|
|
300
|
+
if (unit.kind !== 'file')
|
|
301
|
+
continue;
|
|
302
|
+
for (const imp of unit.imports) {
|
|
303
|
+
if (imp.isRelative)
|
|
304
|
+
continue;
|
|
305
|
+
const packageName = this.extractPackageName(imp.module, unit.language);
|
|
306
|
+
if (!importsByLanguage.has(unit.language)) {
|
|
307
|
+
importsByLanguage.set(unit.language, new Map());
|
|
308
|
+
}
|
|
309
|
+
const langMap = importsByLanguage.get(unit.language);
|
|
310
|
+
if (!langMap.has(packageName)) {
|
|
311
|
+
langMap.set(packageName, []);
|
|
312
|
+
}
|
|
313
|
+
langMap.get(packageName).push({ file: unit.file, line: imp.line });
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// Check each package for deprecation
|
|
317
|
+
for (const [language, packageMap] of importsByLanguage.entries()) {
|
|
318
|
+
const registry = context.registryManager.getRegistry(language);
|
|
319
|
+
if (!registry)
|
|
320
|
+
continue;
|
|
321
|
+
for (const [packageName, occurrences] of packageMap.entries()) {
|
|
322
|
+
try {
|
|
323
|
+
const deprecation = await registry.checkDeprecated(packageName);
|
|
324
|
+
if (deprecation?.deprecated) {
|
|
325
|
+
for (const occurrence of occurrences) {
|
|
326
|
+
results.push({
|
|
327
|
+
detectorId: this.id,
|
|
328
|
+
severity: 'warning',
|
|
329
|
+
category: this.category,
|
|
330
|
+
messageKey: 'stale-api.registry-deprecated',
|
|
331
|
+
message: `Package "${packageName}" is deprecated${deprecation.message ? ': ' + deprecation.message : ''}${deprecation.replacement ? '. Use ' + deprecation.replacement + ' instead' : ''}.`,
|
|
332
|
+
file: occurrence.file,
|
|
333
|
+
line: occurrence.line + 1, // 0-based to 1-based
|
|
334
|
+
confidence: 0.95,
|
|
335
|
+
metadata: {
|
|
336
|
+
packageName,
|
|
337
|
+
language,
|
|
338
|
+
source: 'registry',
|
|
339
|
+
deprecationMessage: deprecation.message,
|
|
340
|
+
replacement: deprecation.replacement,
|
|
341
|
+
since: deprecation.since,
|
|
342
|
+
},
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
catch {
|
|
348
|
+
// Registry check failed; skip silently (conservative)
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Check well-known deprecated API patterns in source code.
|
|
355
|
+
*/
|
|
356
|
+
checkPatternDeprecations(units, results) {
|
|
357
|
+
for (const unit of units) {
|
|
358
|
+
const patterns = DEPRECATION_PATTERNS.get(unit.language);
|
|
359
|
+
if (!patterns)
|
|
360
|
+
continue;
|
|
361
|
+
// Check source text against known deprecated patterns
|
|
362
|
+
const lines = unit.source.split('\n');
|
|
363
|
+
for (let i = 0; i < lines.length; i++) {
|
|
364
|
+
const line = lines[i];
|
|
365
|
+
for (const pattern of patterns) {
|
|
366
|
+
const regex = pattern.pattern instanceof RegExp
|
|
367
|
+
? pattern.pattern
|
|
368
|
+
: new RegExp(this.escapeRegex(pattern.pattern), 'g');
|
|
369
|
+
if (regex.test(line)) {
|
|
370
|
+
const absoluteLine = unit.location.startLine + i;
|
|
371
|
+
results.push({
|
|
372
|
+
detectorId: this.id,
|
|
373
|
+
severity: 'warning',
|
|
374
|
+
category: this.category,
|
|
375
|
+
messageKey: 'stale-api.deprecated-pattern',
|
|
376
|
+
message: pattern.description || `Deprecated API usage detected. Use ${pattern.replacement} instead${pattern.since ? ' (deprecated since ' + pattern.since + ')' : ''}.`,
|
|
377
|
+
file: unit.file,
|
|
378
|
+
line: absoluteLine + 1, // 0-based to 1-based
|
|
379
|
+
confidence: pattern.confidence,
|
|
380
|
+
metadata: {
|
|
381
|
+
language: unit.language,
|
|
382
|
+
source: 'pattern',
|
|
383
|
+
replacement: pattern.replacement,
|
|
384
|
+
since: pattern.since,
|
|
385
|
+
matchedPattern: pattern.pattern instanceof RegExp
|
|
386
|
+
? pattern.pattern.source
|
|
387
|
+
: pattern.pattern,
|
|
388
|
+
},
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
// Reset regex lastIndex for global patterns
|
|
392
|
+
if (pattern.pattern instanceof RegExp) {
|
|
393
|
+
pattern.pattern.lastIndex = 0;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Check deprecated import modules (entire modules that are deprecated).
|
|
401
|
+
*/
|
|
402
|
+
checkDeprecatedImports(units, results) {
|
|
403
|
+
for (const unit of units) {
|
|
404
|
+
if (unit.kind !== 'file')
|
|
405
|
+
continue;
|
|
406
|
+
const deprecatedModules = DEPRECATED_IMPORT_MODULES.get(unit.language);
|
|
407
|
+
if (!deprecatedModules)
|
|
408
|
+
continue;
|
|
409
|
+
for (const imp of unit.imports) {
|
|
410
|
+
const topModule = imp.module.split(/[./]/)[0];
|
|
411
|
+
const deprecation = deprecatedModules.get(imp.module) || deprecatedModules.get(topModule);
|
|
412
|
+
if (deprecation) {
|
|
413
|
+
results.push({
|
|
414
|
+
detectorId: this.id,
|
|
415
|
+
severity: 'warning',
|
|
416
|
+
category: this.category,
|
|
417
|
+
messageKey: 'stale-api.deprecated-module',
|
|
418
|
+
message: `Module "${imp.module}" is deprecated${deprecation.since ? ' since ' + deprecation.since : ''}. Use ${deprecation.replacement} instead.`,
|
|
419
|
+
file: unit.file,
|
|
420
|
+
line: imp.line + 1, // 0-based to 1-based
|
|
421
|
+
confidence: 0.9,
|
|
422
|
+
metadata: {
|
|
423
|
+
module: imp.module,
|
|
424
|
+
language: unit.language,
|
|
425
|
+
source: 'known-deprecation',
|
|
426
|
+
replacement: deprecation.replacement,
|
|
427
|
+
since: deprecation.since,
|
|
428
|
+
},
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Extract top-level package name from a module path.
|
|
436
|
+
*/
|
|
437
|
+
extractPackageName(module, language) {
|
|
438
|
+
switch (language) {
|
|
439
|
+
case 'typescript':
|
|
440
|
+
case 'javascript': {
|
|
441
|
+
if (module.startsWith('@')) {
|
|
442
|
+
const parts = module.split('/');
|
|
443
|
+
return parts.length >= 2 ? `${parts[0]}/${parts[1]}` : module;
|
|
444
|
+
}
|
|
445
|
+
return module.split('/')[0];
|
|
446
|
+
}
|
|
447
|
+
case 'python':
|
|
448
|
+
return module.split('.')[0];
|
|
449
|
+
case 'java':
|
|
450
|
+
case 'kotlin':
|
|
451
|
+
return module;
|
|
452
|
+
case 'go': {
|
|
453
|
+
const parts = module.split('/');
|
|
454
|
+
if (parts.length >= 3 && module.includes('.')) {
|
|
455
|
+
return parts.slice(0, 3).join('/');
|
|
456
|
+
}
|
|
457
|
+
return module;
|
|
458
|
+
}
|
|
459
|
+
default:
|
|
460
|
+
return module;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Escape a string for use in a regular expression.
|
|
465
|
+
*/
|
|
466
|
+
escapeRegex(str) {
|
|
467
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
//# sourceMappingURL=stale-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stale-api.js","sourceRoot":"","sources":["../../../src/detectors/v4/stale-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V4 Detector Types — Base interfaces for all V4 detectors.
|
|
3
|
+
*
|
|
4
|
+
* V4 detectors operate on the unified CodeUnit IR instead of raw source.
|
|
5
|
+
* Only AI-unique detectors are included; traditional lint concerns are removed.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.4.0
|
|
8
|
+
*/
|
|
9
|
+
import type { CodeUnit, SupportedLanguage } from '../../ir/types.js';
|
|
10
|
+
import type { RegistryManager } from '../../registry/registry-manager.js';
|
|
11
|
+
/**
|
|
12
|
+
* Result from a V4 detector. Each result represents a single detected issue.
|
|
13
|
+
*/
|
|
14
|
+
export interface DetectorResult {
|
|
15
|
+
/** Detector identifier */
|
|
16
|
+
detectorId: string;
|
|
17
|
+
/** Severity: error > warning > info */
|
|
18
|
+
severity: 'error' | 'warning' | 'info';
|
|
19
|
+
/** Issue category for scoring */
|
|
20
|
+
category: DetectorCategory;
|
|
21
|
+
/** Human-readable message (i18n key) */
|
|
22
|
+
messageKey: string;
|
|
23
|
+
/** Fallback message (English) */
|
|
24
|
+
message: string;
|
|
25
|
+
/** Affected file */
|
|
26
|
+
file: string;
|
|
27
|
+
/** Line number (1-based for output) */
|
|
28
|
+
line: number;
|
|
29
|
+
/** End line (optional) */
|
|
30
|
+
endLine?: number;
|
|
31
|
+
/** Confidence score 0-1 */
|
|
32
|
+
confidence: number;
|
|
33
|
+
/** Additional metadata */
|
|
34
|
+
metadata?: Record<string, unknown>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* V4 detector categories aligned with V3 scoring dimensions.
|
|
38
|
+
*/
|
|
39
|
+
export type DetectorCategory = 'ai-faithfulness' | 'code-freshness' | 'context-coherence' | 'implementation';
|
|
40
|
+
/**
|
|
41
|
+
* Context provided to detectors during analysis.
|
|
42
|
+
*/
|
|
43
|
+
export interface DetectorContext {
|
|
44
|
+
/** Project root directory */
|
|
45
|
+
projectRoot: string;
|
|
46
|
+
/** All file paths in the project */
|
|
47
|
+
allFiles: string[];
|
|
48
|
+
/** Registry manager for package verification */
|
|
49
|
+
registryManager?: RegistryManager;
|
|
50
|
+
/** Configuration overrides */
|
|
51
|
+
config?: Record<string, unknown>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* V4 Detector — the unified detector interface for V4.
|
|
55
|
+
*
|
|
56
|
+
* All V4 detectors operate on CodeUnit[] (the unified IR),
|
|
57
|
+
* never on raw source code or CST nodes.
|
|
58
|
+
*/
|
|
59
|
+
export interface V4Detector {
|
|
60
|
+
/** Unique detector ID */
|
|
61
|
+
readonly id: string;
|
|
62
|
+
/** Human-readable name */
|
|
63
|
+
readonly name: string;
|
|
64
|
+
/** Which category this contributes to */
|
|
65
|
+
readonly category: DetectorCategory;
|
|
66
|
+
/** Which languages this detector supports (empty = all) */
|
|
67
|
+
readonly supportedLanguages: SupportedLanguage[];
|
|
68
|
+
/**
|
|
69
|
+
* Analyze CodeUnits and return issues.
|
|
70
|
+
* Detectors receive already-parsed, language-neutral CodeUnits.
|
|
71
|
+
*/
|
|
72
|
+
detect(units: CodeUnit[], context: DetectorContext): Promise<DetectorResult[]>;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/detectors/v4/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAI1E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,iCAAiC;IACjC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAID;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,gBAAgB,GAChB,mBAAmB,GACnB,gBAAgB,CAAC;AAIrB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gDAAgD;IAChD,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAID;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,2DAA2D;IAC3D,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IAEjD;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAChF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V4 Detector Types — Base interfaces for all V4 detectors.
|
|
3
|
+
*
|
|
4
|
+
* V4 detectors operate on the unified CodeUnit IR instead of raw source.
|
|
5
|
+
* Only AI-unique detectors are included; traditional lint concerns are removed.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.4.0
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/detectors/v4/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|