@oculum/scanner 1.0.12 → 1.0.13
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/detect/ai-code/agent-tools.d.ts +22 -0
- package/dist/detect/ai-code/agent-tools.d.ts.map +1 -0
- package/dist/detect/ai-code/agent-tools.js +1509 -0
- package/dist/detect/ai-code/agent-tools.js.map +1 -0
- package/dist/detect/ai-code/byok-patterns.d.ts +15 -0
- package/dist/detect/ai-code/byok-patterns.d.ts.map +1 -0
- package/dist/detect/ai-code/byok-patterns.js +313 -0
- package/dist/detect/ai-code/byok-patterns.js.map +1 -0
- package/dist/detect/ai-code/endpoint-protection.d.ts +38 -0
- package/dist/detect/ai-code/endpoint-protection.d.ts.map +1 -0
- package/dist/detect/ai-code/endpoint-protection.js +349 -0
- package/dist/detect/ai-code/endpoint-protection.js.map +1 -0
- package/dist/detect/ai-code/execution-sinks.d.ts +21 -0
- package/dist/detect/ai-code/execution-sinks.d.ts.map +1 -0
- package/dist/detect/ai-code/execution-sinks.js +1158 -0
- package/dist/detect/ai-code/execution-sinks.js.map +1 -0
- package/dist/detect/ai-code/fingerprinting.d.ts +10 -0
- package/dist/detect/ai-code/fingerprinting.d.ts.map +1 -0
- package/dist/detect/ai-code/fingerprinting.js +665 -0
- package/dist/detect/ai-code/fingerprinting.js.map +1 -0
- package/dist/detect/ai-code/index.d.ts +12 -0
- package/dist/detect/ai-code/index.d.ts.map +1 -0
- package/dist/detect/ai-code/index.js +26 -0
- package/dist/detect/ai-code/index.js.map +1 -0
- package/dist/detect/ai-code/mcp-security.d.ts +20 -0
- package/dist/detect/ai-code/mcp-security.d.ts.map +1 -0
- package/dist/detect/ai-code/mcp-security.js +880 -0
- package/dist/detect/ai-code/mcp-security.js.map +1 -0
- package/dist/detect/ai-code/model-supply-chain.d.ts +23 -0
- package/dist/detect/ai-code/model-supply-chain.d.ts.map +1 -0
- package/dist/detect/ai-code/model-supply-chain.js +447 -0
- package/dist/detect/ai-code/model-supply-chain.js.map +1 -0
- package/dist/detect/ai-code/package-hallucination.d.ts +22 -0
- package/dist/detect/ai-code/package-hallucination.d.ts.map +1 -0
- package/dist/detect/ai-code/package-hallucination.js +841 -0
- package/dist/detect/ai-code/package-hallucination.js.map +1 -0
- package/dist/detect/ai-code/prompt-hygiene.d.ts +22 -0
- package/dist/detect/ai-code/prompt-hygiene.d.ts.map +1 -0
- package/dist/detect/ai-code/prompt-hygiene.js +1177 -0
- package/dist/detect/ai-code/prompt-hygiene.js.map +1 -0
- package/dist/detect/ai-code/rag-safety.d.ts +24 -0
- package/dist/detect/ai-code/rag-safety.d.ts.map +1 -0
- package/dist/detect/ai-code/rag-safety.js +913 -0
- package/dist/detect/ai-code/rag-safety.js.map +1 -0
- package/dist/detect/ai-code/schema-validation.d.ts +28 -0
- package/dist/detect/ai-code/schema-validation.d.ts.map +1 -0
- package/dist/detect/ai-code/schema-validation.js +378 -0
- package/dist/detect/ai-code/schema-validation.js.map +1 -0
- package/dist/detect/config/agent-skill-injection.d.ts +27 -0
- package/dist/detect/config/agent-skill-injection.d.ts.map +1 -0
- package/dist/detect/config/agent-skill-injection.js +472 -0
- package/dist/detect/config/agent-skill-injection.js.map +1 -0
- package/dist/detect/config/comments.d.ts +11 -0
- package/dist/detect/config/comments.d.ts.map +1 -0
- package/dist/detect/config/comments.js +206 -0
- package/dist/detect/config/comments.js.map +1 -0
- package/dist/detect/config/file-flags.d.ts +10 -0
- package/dist/detect/config/file-flags.d.ts.map +1 -0
- package/dist/detect/config/file-flags.js +124 -0
- package/dist/detect/config/file-flags.js.map +1 -0
- package/dist/detect/config/index.d.ts +7 -0
- package/dist/detect/config/index.d.ts.map +1 -0
- package/dist/detect/config/index.js +17 -0
- package/dist/detect/config/index.js.map +1 -0
- package/dist/detect/config/osv-check.d.ts +75 -0
- package/dist/detect/config/osv-check.d.ts.map +1 -0
- package/dist/detect/config/osv-check.js +309 -0
- package/dist/detect/config/osv-check.js.map +1 -0
- package/dist/detect/config/package-check.d.ts +63 -0
- package/dist/detect/config/package-check.d.ts.map +1 -0
- package/dist/detect/config/package-check.js +509 -0
- package/dist/detect/config/package-check.js.map +1 -0
- package/dist/detect/config/urls.d.ts +11 -0
- package/dist/detect/config/urls.d.ts.map +1 -0
- package/dist/detect/config/urls.js +450 -0
- package/dist/detect/config/urls.js.map +1 -0
- package/dist/detect/index.d.ts +37 -0
- package/dist/detect/index.d.ts.map +1 -0
- package/dist/detect/index.js +77 -0
- package/dist/detect/index.js.map +1 -0
- package/dist/detect/secrets/config-audit.d.ts +11 -0
- package/dist/detect/secrets/config-audit.d.ts.map +1 -0
- package/dist/detect/secrets/config-audit.js +315 -0
- package/dist/detect/secrets/config-audit.js.map +1 -0
- package/dist/detect/secrets/config-mcp-audit.d.ts +23 -0
- package/dist/detect/secrets/config-mcp-audit.d.ts.map +1 -0
- package/dist/detect/secrets/config-mcp-audit.js +243 -0
- package/dist/detect/secrets/config-mcp-audit.js.map +1 -0
- package/dist/detect/secrets/entropy.d.ts +11 -0
- package/dist/detect/secrets/entropy.d.ts.map +1 -0
- package/dist/detect/secrets/entropy.js +751 -0
- package/dist/detect/secrets/entropy.js.map +1 -0
- package/dist/detect/secrets/index.d.ts +36 -0
- package/dist/detect/secrets/index.d.ts.map +1 -0
- package/dist/detect/secrets/index.js +174 -0
- package/dist/detect/secrets/index.js.map +1 -0
- package/dist/detect/secrets/patterns.d.ts +11 -0
- package/dist/detect/secrets/patterns.d.ts.map +1 -0
- package/dist/detect/secrets/patterns.js +518 -0
- package/dist/detect/secrets/patterns.js.map +1 -0
- package/dist/detect/secrets/weak-crypto.d.ts +10 -0
- package/dist/detect/secrets/weak-crypto.d.ts.map +1 -0
- package/dist/detect/secrets/weak-crypto.js +432 -0
- package/dist/detect/secrets/weak-crypto.js.map +1 -0
- package/dist/detect/structural/auth-patterns.d.ts +22 -0
- package/dist/detect/structural/auth-patterns.d.ts.map +1 -0
- package/dist/detect/structural/auth-patterns.js +533 -0
- package/dist/detect/structural/auth-patterns.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/child-process.d.ts +16 -0
- package/dist/detect/structural/dangerous-functions/child-process.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/child-process.js +74 -0
- package/dist/detect/structural/dangerous-functions/child-process.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/dom-xss.d.ts +34 -0
- package/dist/detect/structural/dangerous-functions/dom-xss.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/dom-xss.js +230 -0
- package/dist/detect/structural/dangerous-functions/dom-xss.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/index.d.ts +16 -0
- package/dist/detect/structural/dangerous-functions/index.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/index.js +1193 -0
- package/dist/detect/structural/dangerous-functions/index.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/json-parse.d.ts +31 -0
- package/dist/detect/structural/dangerous-functions/json-parse.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/json-parse.js +326 -0
- package/dist/detect/structural/dangerous-functions/json-parse.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/math-random.d.ts +111 -0
- package/dist/detect/structural/dangerous-functions/math-random.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/math-random.js +684 -0
- package/dist/detect/structural/dangerous-functions/math-random.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/patterns.d.ts +21 -0
- package/dist/detect/structural/dangerous-functions/patterns.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/patterns.js +163 -0
- package/dist/detect/structural/dangerous-functions/patterns.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/request-validation.d.ts +13 -0
- package/dist/detect/structural/dangerous-functions/request-validation.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/request-validation.js +126 -0
- package/dist/detect/structural/dangerous-functions/request-validation.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/control-flow.d.ts +24 -0
- package/dist/detect/structural/dangerous-functions/utils/control-flow.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/control-flow.js +70 -0
- package/dist/detect/structural/dangerous-functions/utils/control-flow.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/helpers.d.ts +31 -0
- package/dist/detect/structural/dangerous-functions/utils/helpers.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/helpers.js +147 -0
- package/dist/detect/structural/dangerous-functions/utils/helpers.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/index.d.ts +9 -0
- package/dist/detect/structural/dangerous-functions/utils/index.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/index.js +23 -0
- package/dist/detect/structural/dangerous-functions/utils/index.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/schema-validation.d.ts +22 -0
- package/dist/detect/structural/dangerous-functions/utils/schema-validation.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/schema-validation.js +102 -0
- package/dist/detect/structural/dangerous-functions/utils/schema-validation.js.map +1 -0
- package/dist/detect/structural/data-exposure.d.ts +19 -0
- package/dist/detect/structural/data-exposure.d.ts.map +1 -0
- package/dist/detect/structural/data-exposure.js +262 -0
- package/dist/detect/structural/data-exposure.js.map +1 -0
- package/dist/detect/structural/framework-checks.d.ts +10 -0
- package/dist/detect/structural/framework-checks.d.ts.map +1 -0
- package/dist/detect/structural/framework-checks.js +389 -0
- package/dist/detect/structural/framework-checks.js.map +1 -0
- package/dist/detect/structural/index.d.ts +71 -0
- package/dist/detect/structural/index.d.ts.map +1 -0
- package/dist/detect/structural/index.js +510 -0
- package/dist/detect/structural/index.js.map +1 -0
- package/dist/detect/structural/log-injection.d.ts +18 -0
- package/dist/detect/structural/log-injection.d.ts.map +1 -0
- package/dist/detect/structural/log-injection.js +217 -0
- package/dist/detect/structural/log-injection.js.map +1 -0
- package/dist/detect/structural/logic-gates.d.ts +10 -0
- package/dist/detect/structural/logic-gates.d.ts.map +1 -0
- package/dist/detect/structural/logic-gates.js +227 -0
- package/dist/detect/structural/logic-gates.js.map +1 -0
- package/dist/detect/structural/risky-imports.d.ts +10 -0
- package/dist/detect/structural/risky-imports.d.ts.map +1 -0
- package/dist/detect/structural/risky-imports.js +168 -0
- package/dist/detect/structural/risky-imports.js.map +1 -0
- package/dist/detect/structural/security-headers.d.ts +18 -0
- package/dist/detect/structural/security-headers.d.ts.map +1 -0
- package/dist/detect/structural/security-headers.js +196 -0
- package/dist/detect/structural/security-headers.js.map +1 -0
- package/dist/detect/structural/ssrf-detection.d.ts +18 -0
- package/dist/detect/structural/ssrf-detection.d.ts.map +1 -0
- package/dist/detect/structural/ssrf-detection.js +263 -0
- package/dist/detect/structural/ssrf-detection.js.map +1 -0
- package/dist/detect/structural/variables.d.ts +11 -0
- package/dist/detect/structural/variables.d.ts.map +1 -0
- package/dist/detect/structural/variables.js +159 -0
- package/dist/detect/structural/variables.js.map +1 -0
- package/dist/detect/structural/xxe-detection.d.ts +18 -0
- package/dist/detect/structural/xxe-detection.d.ts.map +1 -0
- package/dist/detect/structural/xxe-detection.js +245 -0
- package/dist/detect/structural/xxe-detection.js.map +1 -0
- package/dist/index.d.ts +17 -64
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -1034
- package/dist/index.js.map +1 -1
- package/dist/layer2/framework-checks.d.ts.map +1 -1
- package/dist/layer2/framework-checks.js +1 -8
- package/dist/layer2/framework-checks.js.map +1 -1
- package/dist/layer2/index.d.ts +4 -0
- package/dist/layer2/index.d.ts.map +1 -1
- package/dist/layer2/index.js +50 -1
- package/dist/layer2/index.js.map +1 -1
- package/dist/layer2/log-injection.d.ts +18 -0
- package/dist/layer2/log-injection.d.ts.map +1 -0
- package/dist/layer2/log-injection.js +214 -0
- package/dist/layer2/log-injection.js.map +1 -0
- package/dist/layer2/security-headers.d.ts +18 -0
- package/dist/layer2/security-headers.d.ts.map +1 -0
- package/dist/layer2/security-headers.js +187 -0
- package/dist/layer2/security-headers.js.map +1 -0
- package/dist/layer2/ssrf-detection.d.ts +18 -0
- package/dist/layer2/ssrf-detection.d.ts.map +1 -0
- package/dist/layer2/ssrf-detection.js +252 -0
- package/dist/layer2/ssrf-detection.js.map +1 -0
- package/dist/layer2/xxe-detection.d.ts +18 -0
- package/dist/layer2/xxe-detection.d.ts.map +1 -0
- package/dist/layer2/xxe-detection.js +242 -0
- package/dist/layer2/xxe-detection.js.map +1 -0
- package/dist/layer3/anthropic/prompts/index.d.ts +1 -1
- package/dist/layer3/anthropic/prompts/index.d.ts.map +1 -1
- package/dist/layer3/anthropic/prompts/index.js +3 -1
- package/dist/layer3/anthropic/prompts/index.js.map +1 -1
- package/dist/layer3/anthropic/prompts/modules/ai-patterns.d.ts +19 -0
- package/dist/layer3/anthropic/prompts/modules/ai-patterns.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/ai-patterns.js +156 -0
- package/dist/layer3/anthropic/prompts/modules/ai-patterns.js.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/auth-access.d.ts +9 -0
- package/dist/layer3/anthropic/prompts/modules/auth-access.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/auth-access.js +25 -0
- package/dist/layer3/anthropic/prompts/modules/auth-access.js.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/common.d.ts +11 -0
- package/dist/layer3/anthropic/prompts/modules/common.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/common.js +152 -0
- package/dist/layer3/anthropic/prompts/modules/common.js.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/index.d.ts +54 -0
- package/dist/layer3/anthropic/prompts/modules/index.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/index.js +185 -0
- package/dist/layer3/anthropic/prompts/modules/index.js.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/owasp-classic.d.ts +8 -0
- package/dist/layer3/anthropic/prompts/modules/owasp-classic.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/owasp-classic.js +84 -0
- package/dist/layer3/anthropic/prompts/modules/owasp-classic.js.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/secrets-crypto.d.ts +8 -0
- package/dist/layer3/anthropic/prompts/modules/secrets-crypto.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/secrets-crypto.js +68 -0
- package/dist/layer3/anthropic/prompts/modules/secrets-crypto.js.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/xss-prompt.d.ts +8 -0
- package/dist/layer3/anthropic/prompts/modules/xss-prompt.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/xss-prompt.js +22 -0
- package/dist/layer3/anthropic/prompts/modules/xss-prompt.js.map +1 -0
- package/dist/layer3/anthropic/prompts/validation.d.ts +9 -3
- package/dist/layer3/anthropic/prompts/validation.d.ts.map +1 -1
- package/dist/layer3/anthropic/prompts/validation.js +14 -410
- package/dist/layer3/anthropic/prompts/validation.js.map +1 -1
- package/dist/layer3/anthropic/providers/anthropic.d.ts.map +1 -1
- package/dist/layer3/anthropic/providers/anthropic.js +6 -3
- package/dist/layer3/anthropic/providers/anthropic.js.map +1 -1
- package/dist/layer3/anthropic/providers/openai.d.ts.map +1 -1
- package/dist/layer3/anthropic/providers/openai.js +6 -3
- package/dist/layer3/anthropic/providers/openai.js.map +1 -1
- package/dist/layer3/anthropic/request-builder.d.ts +11 -4
- package/dist/layer3/anthropic/request-builder.d.ts.map +1 -1
- package/dist/layer3/anthropic/request-builder.js +32 -16
- package/dist/layer3/anthropic/request-builder.js.map +1 -1
- package/dist/layer3/anthropic/utils/context-extractor.d.ts +55 -0
- package/dist/layer3/anthropic/utils/context-extractor.d.ts.map +1 -0
- package/dist/layer3/anthropic/utils/context-extractor.js +161 -0
- package/dist/layer3/anthropic/utils/context-extractor.js.map +1 -0
- package/dist/layer3/anthropic/utils/index.d.ts +2 -0
- package/dist/layer3/anthropic/utils/index.d.ts.map +1 -1
- package/dist/layer3/anthropic/utils/index.js +4 -1
- package/dist/layer3/anthropic/utils/index.js.map +1 -1
- package/dist/model/auth-helper-detector.d.ts +56 -0
- package/dist/model/auth-helper-detector.d.ts.map +1 -0
- package/dist/model/auth-helper-detector.js +360 -0
- package/dist/model/auth-helper-detector.js.map +1 -0
- package/dist/model/cross-file-taint.d.ts +40 -0
- package/dist/model/cross-file-taint.d.ts.map +1 -0
- package/dist/model/cross-file-taint.js +290 -0
- package/dist/model/cross-file-taint.js.map +1 -0
- package/dist/model/framework-models/django.d.ts +9 -0
- package/dist/model/framework-models/django.d.ts.map +1 -0
- package/dist/model/framework-models/django.js +82 -0
- package/dist/model/framework-models/django.js.map +1 -0
- package/dist/model/framework-models/express.d.ts +9 -0
- package/dist/model/framework-models/express.d.ts.map +1 -0
- package/dist/model/framework-models/express.js +52 -0
- package/dist/model/framework-models/express.js.map +1 -0
- package/dist/model/framework-models/index.d.ts +20 -0
- package/dist/model/framework-models/index.d.ts.map +1 -0
- package/dist/model/framework-models/index.js +102 -0
- package/dist/model/framework-models/index.js.map +1 -0
- package/dist/model/framework-models/nextjs.d.ts +9 -0
- package/dist/model/framework-models/nextjs.d.ts.map +1 -0
- package/dist/model/framework-models/nextjs.js +71 -0
- package/dist/model/framework-models/nextjs.js.map +1 -0
- package/dist/model/framework-models/prisma.d.ts +10 -0
- package/dist/model/framework-models/prisma.d.ts.map +1 -0
- package/dist/model/framework-models/prisma.js +54 -0
- package/dist/model/framework-models/prisma.js.map +1 -0
- package/dist/model/framework-models/react.d.ts +9 -0
- package/dist/model/framework-models/react.d.ts.map +1 -0
- package/dist/model/framework-models/react.js +67 -0
- package/dist/model/framework-models/react.js.map +1 -0
- package/dist/model/framework-models/sequelize.d.ts +9 -0
- package/dist/model/framework-models/sequelize.d.ts.map +1 -0
- package/dist/model/framework-models/sequelize.js +62 -0
- package/dist/model/framework-models/sequelize.js.map +1 -0
- package/dist/model/framework-models/types.d.ts +43 -0
- package/dist/model/framework-models/types.d.ts.map +1 -0
- package/dist/model/framework-models/types.js +10 -0
- package/dist/model/framework-models/types.js.map +1 -0
- package/dist/model/function-classifier.d.ts +32 -0
- package/dist/model/function-classifier.d.ts.map +1 -0
- package/dist/model/function-classifier.js +143 -0
- package/dist/model/function-classifier.js.map +1 -0
- package/dist/model/import-resolver.d.ts +45 -0
- package/dist/model/import-resolver.d.ts.map +1 -0
- package/dist/model/import-resolver.js +410 -0
- package/dist/model/import-resolver.js.map +1 -0
- package/dist/model/imported-auth-detector.d.ts +38 -0
- package/dist/model/imported-auth-detector.d.ts.map +1 -0
- package/dist/model/imported-auth-detector.js +199 -0
- package/dist/model/imported-auth-detector.js.map +1 -0
- package/dist/model/index.d.ts +63 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +272 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/middleware-detector.d.ts +55 -0
- package/dist/model/middleware-detector.d.ts.map +1 -0
- package/dist/model/middleware-detector.js +382 -0
- package/dist/model/middleware-detector.js.map +1 -0
- package/dist/model/module-graph.d.ts +46 -0
- package/dist/model/module-graph.d.ts.map +1 -0
- package/dist/model/module-graph.js +187 -0
- package/dist/model/module-graph.js.map +1 -0
- package/dist/model/oauth-flow-detector.d.ts +41 -0
- package/dist/model/oauth-flow-detector.d.ts.map +1 -0
- package/dist/model/oauth-flow-detector.js +202 -0
- package/dist/model/oauth-flow-detector.js.map +1 -0
- package/dist/model/project-context.d.ts +119 -0
- package/dist/model/project-context.d.ts.map +1 -0
- package/dist/model/project-context.js +534 -0
- package/dist/model/project-context.js.map +1 -0
- package/dist/model/route-auth-resolver.d.ts +27 -0
- package/dist/model/route-auth-resolver.d.ts.map +1 -0
- package/dist/model/route-auth-resolver.js +182 -0
- package/dist/model/route-auth-resolver.js.map +1 -0
- package/dist/model/route-discovery/express.d.ts +25 -0
- package/dist/model/route-discovery/express.d.ts.map +1 -0
- package/dist/model/route-discovery/express.js +225 -0
- package/dist/model/route-discovery/express.js.map +1 -0
- package/dist/model/route-discovery/index.d.ts +21 -0
- package/dist/model/route-discovery/index.d.ts.map +1 -0
- package/dist/model/route-discovery/index.js +67 -0
- package/dist/model/route-discovery/index.js.map +1 -0
- package/dist/model/route-discovery/nextjs.d.ts +16 -0
- package/dist/model/route-discovery/nextjs.d.ts.map +1 -0
- package/dist/model/route-discovery/nextjs.js +179 -0
- package/dist/model/route-discovery/nextjs.js.map +1 -0
- package/dist/model/route-discovery/python.d.ts +16 -0
- package/dist/model/route-discovery/python.d.ts.map +1 -0
- package/dist/model/route-discovery/python.js +181 -0
- package/dist/model/route-discovery/python.js.map +1 -0
- package/dist/model/route-discovery/types.d.ts +36 -0
- package/dist/model/route-discovery/types.d.ts.map +1 -0
- package/dist/model/route-discovery/types.js +16 -0
- package/dist/model/route-discovery/types.js.map +1 -0
- package/dist/model/route-discovery/utils.d.ts +18 -0
- package/dist/model/route-discovery/utils.d.ts.map +1 -0
- package/dist/model/route-discovery/utils.js +55 -0
- package/dist/model/route-discovery/utils.js.map +1 -0
- package/dist/model/route-hierarchy.d.ts +50 -0
- package/dist/model/route-hierarchy.d.ts.map +1 -0
- package/dist/model/route-hierarchy.js +226 -0
- package/dist/model/route-hierarchy.js.map +1 -0
- package/dist/model/sanitiser-detection.d.ts +27 -0
- package/dist/model/sanitiser-detection.d.ts.map +1 -0
- package/dist/model/sanitiser-detection.js +224 -0
- package/dist/model/sanitiser-detection.js.map +1 -0
- package/dist/model/sink-matcher.d.ts +17 -0
- package/dist/model/sink-matcher.d.ts.map +1 -0
- package/dist/model/sink-matcher.js +141 -0
- package/dist/model/sink-matcher.js.map +1 -0
- package/dist/model/sink-patterns.d.ts +19 -0
- package/dist/model/sink-patterns.d.ts.map +1 -0
- package/dist/model/sink-patterns.js +88 -0
- package/dist/model/sink-patterns.js.map +1 -0
- package/dist/model/source-discovery.d.ts +15 -0
- package/dist/model/source-discovery.d.ts.map +1 -0
- package/dist/model/source-discovery.js +170 -0
- package/dist/model/source-discovery.js.map +1 -0
- package/dist/model/taint-tracker.d.ts +21 -0
- package/dist/model/taint-tracker.d.ts.map +1 -0
- package/dist/model/taint-tracker.js +281 -0
- package/dist/model/taint-tracker.js.map +1 -0
- package/dist/model/taint-types.d.ts +74 -0
- package/dist/model/taint-types.d.ts.map +1 -0
- package/dist/model/taint-types.js +9 -0
- package/dist/model/taint-types.js.map +1 -0
- package/dist/model/trpc-analyzer.d.ts +78 -0
- package/dist/model/trpc-analyzer.d.ts.map +1 -0
- package/dist/model/trpc-analyzer.js +297 -0
- package/dist/model/trpc-analyzer.js.map +1 -0
- package/dist/parse/file-classifier.d.ts +228 -0
- package/dist/parse/file-classifier.d.ts.map +1 -0
- package/dist/parse/file-classifier.js +933 -0
- package/dist/parse/file-classifier.js.map +1 -0
- package/dist/parse/path-exclusions.d.ts +55 -0
- package/dist/parse/path-exclusions.d.ts.map +1 -0
- package/dist/parse/path-exclusions.js +224 -0
- package/dist/parse/path-exclusions.js.map +1 -0
- package/dist/pipeline/config.d.ts +39 -0
- package/dist/pipeline/config.d.ts.map +1 -0
- package/dist/pipeline/config.js +46 -0
- package/dist/pipeline/config.js.map +1 -0
- package/dist/pipeline/index.d.ts +34 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +377 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/modes/incremental.d.ts +66 -0
- package/dist/pipeline/modes/incremental.d.ts.map +1 -0
- package/dist/pipeline/modes/incremental.js +200 -0
- package/dist/pipeline/modes/incremental.js.map +1 -0
- package/dist/postprocess/aggregation.d.ts +14 -0
- package/dist/postprocess/aggregation.d.ts.map +1 -0
- package/dist/postprocess/aggregation.js +63 -0
- package/dist/postprocess/aggregation.js.map +1 -0
- package/dist/postprocess/contradictions.d.ts +18 -0
- package/dist/postprocess/contradictions.d.ts.map +1 -0
- package/dist/postprocess/contradictions.js +99 -0
- package/dist/postprocess/contradictions.js.map +1 -0
- package/dist/postprocess/dedup.d.ts +13 -0
- package/dist/postprocess/dedup.d.ts.map +1 -0
- package/dist/postprocess/dedup.js +58 -0
- package/dist/postprocess/dedup.js.map +1 -0
- package/dist/postprocess/filtering/context-adjustments.d.ts +23 -0
- package/dist/postprocess/filtering/context-adjustments.d.ts.map +1 -0
- package/dist/postprocess/filtering/context-adjustments.js +100 -0
- package/dist/postprocess/filtering/context-adjustments.js.map +1 -0
- package/dist/postprocess/filtering/index.d.ts +3 -0
- package/dist/postprocess/filtering/index.d.ts.map +1 -0
- package/dist/postprocess/filtering/index.js +8 -0
- package/dist/postprocess/filtering/index.js.map +1 -0
- package/dist/postprocess/filtering/pipeline.d.ts +48 -0
- package/dist/postprocess/filtering/pipeline.d.ts.map +1 -0
- package/dist/postprocess/filtering/pipeline.js +76 -0
- package/dist/postprocess/filtering/pipeline.js.map +1 -0
- package/dist/postprocess/index.d.ts +41 -0
- package/dist/postprocess/index.d.ts.map +1 -0
- package/dist/postprocess/index.js +85 -0
- package/dist/postprocess/index.js.map +1 -0
- package/dist/postprocess/suppression/config-loader.d.ts +74 -0
- package/dist/postprocess/suppression/config-loader.d.ts.map +1 -0
- package/dist/postprocess/suppression/config-loader.js +424 -0
- package/dist/postprocess/suppression/config-loader.js.map +1 -0
- package/dist/postprocess/suppression/hash.d.ts +48 -0
- package/dist/postprocess/suppression/hash.d.ts.map +1 -0
- package/dist/postprocess/suppression/hash.js +88 -0
- package/dist/postprocess/suppression/hash.js.map +1 -0
- package/dist/postprocess/suppression/index.d.ts +11 -0
- package/dist/postprocess/suppression/index.d.ts.map +1 -0
- package/dist/postprocess/suppression/index.js +39 -0
- package/dist/postprocess/suppression/index.js.map +1 -0
- package/dist/postprocess/suppression/inline-parser.d.ts +39 -0
- package/dist/postprocess/suppression/inline-parser.d.ts.map +1 -0
- package/dist/postprocess/suppression/inline-parser.js +218 -0
- package/dist/postprocess/suppression/inline-parser.js.map +1 -0
- package/dist/postprocess/suppression/manager.d.ts +94 -0
- package/dist/postprocess/suppression/manager.d.ts.map +1 -0
- package/dist/postprocess/suppression/manager.js +292 -0
- package/dist/postprocess/suppression/manager.js.map +1 -0
- package/dist/postprocess/suppression/types.d.ts +151 -0
- package/dist/postprocess/suppression/types.d.ts.map +1 -0
- package/dist/postprocess/suppression/types.js +28 -0
- package/dist/postprocess/suppression/types.js.map +1 -0
- package/dist/postprocess/validation-cap.d.ts +17 -0
- package/dist/postprocess/validation-cap.d.ts.map +1 -0
- package/dist/postprocess/validation-cap.js +64 -0
- package/dist/postprocess/validation-cap.js.map +1 -0
- package/dist/report/build-result.d.ts +33 -0
- package/dist/report/build-result.d.ts.map +1 -0
- package/dist/report/build-result.js +59 -0
- package/dist/report/build-result.js.map +1 -0
- package/dist/report/enrichment.d.ts +19 -0
- package/dist/report/enrichment.d.ts.map +1 -0
- package/dist/report/enrichment.js +44 -0
- package/dist/report/enrichment.js.map +1 -0
- package/dist/report/formatters/ai-context.d.ts +23 -0
- package/dist/report/formatters/ai-context.d.ts.map +1 -0
- package/dist/report/formatters/ai-context.js +238 -0
- package/dist/report/formatters/ai-context.js.map +1 -0
- package/dist/report/formatters/cli-terminal.d.ts +65 -0
- package/dist/report/formatters/cli-terminal.d.ts.map +1 -0
- package/dist/report/formatters/cli-terminal.js +735 -0
- package/dist/report/formatters/cli-terminal.js.map +1 -0
- package/dist/report/formatters/github-comment.d.ts +41 -0
- package/dist/report/formatters/github-comment.d.ts.map +1 -0
- package/dist/report/formatters/github-comment.js +370 -0
- package/dist/report/formatters/github-comment.js.map +1 -0
- package/dist/report/formatters/grouping.d.ts +52 -0
- package/dist/report/formatters/grouping.d.ts.map +1 -0
- package/dist/report/formatters/grouping.js +152 -0
- package/dist/report/formatters/grouping.js.map +1 -0
- package/dist/report/formatters/ide/claude-code.d.ts +17 -0
- package/dist/report/formatters/ide/claude-code.d.ts.map +1 -0
- package/dist/report/formatters/ide/claude-code.js +94 -0
- package/dist/report/formatters/ide/claude-code.js.map +1 -0
- package/dist/report/formatters/ide/cursor.d.ts +13 -0
- package/dist/report/formatters/ide/cursor.d.ts.map +1 -0
- package/dist/report/formatters/ide/cursor.js +125 -0
- package/dist/report/formatters/ide/cursor.js.map +1 -0
- package/dist/report/formatters/ide/index.d.ts +62 -0
- package/dist/report/formatters/ide/index.d.ts.map +1 -0
- package/dist/report/formatters/ide/index.js +184 -0
- package/dist/report/formatters/ide/index.js.map +1 -0
- package/dist/report/formatters/ide/windsurf.d.ts +13 -0
- package/dist/report/formatters/ide/windsurf.d.ts.map +1 -0
- package/dist/report/formatters/ide/windsurf.js +117 -0
- package/dist/report/formatters/ide/windsurf.js.map +1 -0
- package/dist/report/formatters/index.d.ts +11 -0
- package/dist/report/formatters/index.d.ts.map +1 -0
- package/dist/report/formatters/index.js +54 -0
- package/dist/report/formatters/index.js.map +1 -0
- package/dist/report/formatters/vscode-diagnostic.d.ts +103 -0
- package/dist/report/formatters/vscode-diagnostic.d.ts.map +1 -0
- package/dist/report/formatters/vscode-diagnostic.js +151 -0
- package/dist/report/formatters/vscode-diagnostic.js.map +1 -0
- package/dist/report/summary.d.ts +27 -0
- package/dist/report/summary.d.ts.map +1 -0
- package/dist/report/summary.js +57 -0
- package/dist/report/summary.js.map +1 -0
- package/dist/rules/metadata.d.ts.map +1 -1
- package/dist/rules/metadata.js +66 -0
- package/dist/rules/metadata.js.map +1 -1
- package/dist/score/adjustments.d.ts +22 -0
- package/dist/score/adjustments.d.ts.map +1 -0
- package/dist/score/adjustments.js +373 -0
- package/dist/score/adjustments.js.map +1 -0
- package/dist/score/auto-dismiss.d.ts +28 -0
- package/dist/score/auto-dismiss.d.ts.map +1 -0
- package/dist/score/auto-dismiss.js +200 -0
- package/dist/score/auto-dismiss.js.map +1 -0
- package/dist/score/confidence.d.ts +19 -0
- package/dist/score/confidence.d.ts.map +1 -0
- package/dist/score/confidence.js +52 -0
- package/dist/score/confidence.js.map +1 -0
- package/dist/score/index.d.ts +61 -0
- package/dist/score/index.d.ts.map +1 -0
- package/dist/score/index.js +250 -0
- package/dist/score/index.js.map +1 -0
- package/dist/score/types.d.ts +160 -0
- package/dist/score/types.d.ts.map +1 -0
- package/dist/score/types.js +14 -0
- package/dist/score/types.js.map +1 -0
- package/dist/shared/ai-context/index.d.ts +6 -0
- package/dist/shared/ai-context/index.d.ts.map +1 -0
- package/dist/shared/ai-context/index.js +13 -0
- package/dist/shared/ai-context/index.js.map +1 -0
- package/dist/shared/ai-context/manager.d.ts +67 -0
- package/dist/shared/ai-context/manager.d.ts.map +1 -0
- package/dist/shared/ai-context/manager.js +104 -0
- package/dist/shared/ai-context/manager.js.map +1 -0
- package/dist/shared/baseline/diff.d.ts +32 -0
- package/dist/shared/baseline/diff.d.ts.map +1 -0
- package/dist/shared/baseline/diff.js +119 -0
- package/dist/shared/baseline/diff.js.map +1 -0
- package/dist/shared/baseline/index.d.ts +9 -0
- package/dist/shared/baseline/index.d.ts.map +1 -0
- package/dist/shared/baseline/index.js +19 -0
- package/dist/shared/baseline/index.js.map +1 -0
- package/dist/shared/baseline/manager.d.ts +67 -0
- package/dist/shared/baseline/manager.d.ts.map +1 -0
- package/dist/shared/baseline/manager.js +180 -0
- package/dist/shared/baseline/manager.js.map +1 -0
- package/dist/shared/baseline/types.d.ts +91 -0
- package/dist/shared/baseline/types.d.ts.map +1 -0
- package/dist/shared/baseline/types.js +12 -0
- package/dist/shared/baseline/types.js.map +1 -0
- package/dist/shared/category-filter.d.ts +125 -0
- package/dist/shared/category-filter.d.ts.map +1 -0
- package/dist/shared/category-filter.js +360 -0
- package/dist/shared/category-filter.js.map +1 -0
- package/dist/shared/code-analysis.d.ts +39 -0
- package/dist/shared/code-analysis.d.ts.map +1 -0
- package/dist/shared/code-analysis.js +159 -0
- package/dist/shared/code-analysis.js.map +1 -0
- package/dist/shared/comment-analyzer.d.ts +38 -0
- package/dist/shared/comment-analyzer.d.ts.map +1 -0
- package/dist/shared/comment-analyzer.js +218 -0
- package/dist/shared/comment-analyzer.js.map +1 -0
- package/dist/shared/diff-detector.d.ts +53 -0
- package/dist/shared/diff-detector.d.ts.map +1 -0
- package/dist/shared/diff-detector.js +104 -0
- package/dist/shared/diff-detector.js.map +1 -0
- package/dist/shared/diff-parser.d.ts +80 -0
- package/dist/shared/diff-parser.d.ts.map +1 -0
- package/dist/shared/diff-parser.js +202 -0
- package/dist/shared/diff-parser.js.map +1 -0
- package/dist/shared/environment-context.d.ts +76 -0
- package/dist/shared/environment-context.d.ts.map +1 -0
- package/dist/shared/environment-context.js +271 -0
- package/dist/shared/environment-context.js.map +1 -0
- package/dist/shared/intent-detector.d.ts +66 -0
- package/dist/shared/intent-detector.d.ts.map +1 -0
- package/dist/shared/intent-detector.js +282 -0
- package/dist/shared/intent-detector.js.map +1 -0
- package/dist/shared/parsed-file.d.ts +51 -0
- package/dist/shared/parsed-file.d.ts.map +1 -0
- package/dist/shared/parsed-file.js +95 -0
- package/dist/shared/parsed-file.js.map +1 -0
- package/dist/shared/registry-clients.d.ts +93 -0
- package/dist/shared/registry-clients.d.ts.map +1 -0
- package/dist/shared/registry-clients.js +273 -0
- package/dist/shared/registry-clients.js.map +1 -0
- package/dist/shared/rules/framework-fixes.d.ts +48 -0
- package/dist/shared/rules/framework-fixes.d.ts.map +1 -0
- package/dist/shared/rules/framework-fixes.js +439 -0
- package/dist/shared/rules/framework-fixes.js.map +1 -0
- package/dist/shared/rules/index.d.ts +8 -0
- package/dist/shared/rules/index.d.ts.map +1 -0
- package/dist/shared/rules/index.js +18 -0
- package/dist/shared/rules/index.js.map +1 -0
- package/dist/shared/rules/metadata.d.ts +43 -0
- package/dist/shared/rules/metadata.d.ts.map +1 -0
- package/dist/shared/rules/metadata.js +819 -0
- package/dist/shared/rules/metadata.js.map +1 -0
- package/dist/shared/schema-semantics.d.ts +45 -0
- package/dist/shared/schema-semantics.d.ts.map +1 -0
- package/dist/shared/schema-semantics.js +193 -0
- package/dist/shared/schema-semantics.js.map +1 -0
- package/dist/shared/types.d.ts +337 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +126 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/tiers.d.ts +2 -2
- package/dist/tiers.d.ts.map +1 -1
- package/dist/tiers.js +10 -0
- package/dist/tiers.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/validate/clients.d.ts +44 -0
- package/dist/validate/clients.d.ts.map +1 -0
- package/dist/validate/clients.js +81 -0
- package/dist/validate/clients.js.map +1 -0
- package/dist/validate/index.d.ts +41 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +141 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/prompts/index.d.ts +8 -0
- package/dist/validate/prompts/index.d.ts.map +1 -0
- package/dist/validate/prompts/index.js +16 -0
- package/dist/validate/prompts/index.js.map +1 -0
- package/dist/validate/prompts/modules/ai-patterns.d.ts +19 -0
- package/dist/validate/prompts/modules/ai-patterns.d.ts.map +1 -0
- package/dist/validate/prompts/modules/ai-patterns.js +156 -0
- package/dist/validate/prompts/modules/ai-patterns.js.map +1 -0
- package/dist/validate/prompts/modules/auth-access.d.ts +9 -0
- package/dist/validate/prompts/modules/auth-access.d.ts.map +1 -0
- package/dist/validate/prompts/modules/auth-access.js +25 -0
- package/dist/validate/prompts/modules/auth-access.js.map +1 -0
- package/dist/validate/prompts/modules/common.d.ts +11 -0
- package/dist/validate/prompts/modules/common.d.ts.map +1 -0
- package/dist/validate/prompts/modules/common.js +186 -0
- package/dist/validate/prompts/modules/common.js.map +1 -0
- package/dist/validate/prompts/modules/index.d.ts +54 -0
- package/dist/validate/prompts/modules/index.d.ts.map +1 -0
- package/dist/validate/prompts/modules/index.js +186 -0
- package/dist/validate/prompts/modules/index.js.map +1 -0
- package/dist/validate/prompts/modules/owasp-classic.d.ts +8 -0
- package/dist/validate/prompts/modules/owasp-classic.d.ts.map +1 -0
- package/dist/validate/prompts/modules/owasp-classic.js +84 -0
- package/dist/validate/prompts/modules/owasp-classic.js.map +1 -0
- package/dist/validate/prompts/modules/secrets-crypto.d.ts +8 -0
- package/dist/validate/prompts/modules/secrets-crypto.d.ts.map +1 -0
- package/dist/validate/prompts/modules/secrets-crypto.js +68 -0
- package/dist/validate/prompts/modules/secrets-crypto.js.map +1 -0
- package/dist/validate/prompts/modules/xss-prompt.d.ts +8 -0
- package/dist/validate/prompts/modules/xss-prompt.d.ts.map +1 -0
- package/dist/validate/prompts/modules/xss-prompt.js +22 -0
- package/dist/validate/prompts/modules/xss-prompt.js.map +1 -0
- package/dist/validate/prompts/semantic-analysis.d.ts +15 -0
- package/dist/validate/prompts/semantic-analysis.d.ts.map +1 -0
- package/dist/validate/prompts/semantic-analysis.js +169 -0
- package/dist/validate/prompts/semantic-analysis.js.map +1 -0
- package/dist/validate/prompts/validation.d.ts +18 -0
- package/dist/validate/prompts/validation.d.ts.map +1 -0
- package/dist/validate/prompts/validation.js +25 -0
- package/dist/validate/prompts/validation.js.map +1 -0
- package/dist/validate/providers/anthropic.d.ts +17 -0
- package/dist/validate/providers/anthropic.d.ts.map +1 -0
- package/dist/validate/providers/anthropic.js +260 -0
- package/dist/validate/providers/anthropic.js.map +1 -0
- package/dist/validate/providers/index.d.ts +8 -0
- package/dist/validate/providers/index.d.ts.map +1 -0
- package/dist/validate/providers/index.js +13 -0
- package/dist/validate/providers/index.js.map +1 -0
- package/dist/validate/providers/openai.d.ts +14 -0
- package/dist/validate/providers/openai.d.ts.map +1 -0
- package/dist/validate/providers/openai.js +336 -0
- package/dist/validate/providers/openai.js.map +1 -0
- package/dist/validate/request-builder.d.ts +61 -0
- package/dist/validate/request-builder.d.ts.map +1 -0
- package/dist/validate/request-builder.js +346 -0
- package/dist/validate/request-builder.js.map +1 -0
- package/dist/validate/types.d.ts +88 -0
- package/dist/validate/types.d.ts.map +1 -0
- package/dist/validate/types.js +38 -0
- package/dist/validate/types.js.map +1 -0
- package/dist/validate/utils/context-extractor.d.ts +55 -0
- package/dist/validate/utils/context-extractor.d.ts.map +1 -0
- package/dist/validate/utils/context-extractor.js +161 -0
- package/dist/validate/utils/context-extractor.js.map +1 -0
- package/dist/validate/utils/index.d.ts +11 -0
- package/dist/validate/utils/index.d.ts.map +1 -0
- package/dist/validate/utils/index.js +27 -0
- package/dist/validate/utils/index.js.map +1 -0
- package/dist/validate/utils/path-helpers.d.ts +21 -0
- package/dist/validate/utils/path-helpers.d.ts.map +1 -0
- package/dist/validate/utils/path-helpers.js +69 -0
- package/dist/validate/utils/path-helpers.js.map +1 -0
- package/dist/validate/utils/response-parser.d.ts +40 -0
- package/dist/validate/utils/response-parser.d.ts.map +1 -0
- package/dist/validate/utils/response-parser.js +286 -0
- package/dist/validate/utils/response-parser.js.map +1 -0
- package/dist/validate/utils/retry.d.ts +15 -0
- package/dist/validate/utils/retry.d.ts.map +1 -0
- package/dist/validate/utils/retry.js +62 -0
- package/dist/validate/utils/retry.js.map +1 -0
- package/package.json +8 -7
- package/src/__tests__/benchmark/fixtures/layer1/agent-skill-injection.ts +204 -0
- package/src/__tests__/benchmark/fixtures/layer1/index.ts +3 -0
- package/src/__tests__/benchmark/fixtures/layer2/index.ts +15 -0
- package/src/__tests__/benchmark/fixtures/layer2/log-injection.ts +147 -0
- package/src/__tests__/benchmark/fixtures/layer2/security-headers.ts +197 -0
- package/src/__tests__/benchmark/fixtures/layer2/ssrf-detection.ts +210 -0
- package/src/__tests__/benchmark/fixtures/layer2/xxe-detection.ts +195 -0
- package/src/__tests__/benchmark/run-depth-validation.ts +3 -3
- package/src/__tests__/benchmark/run-real-world-test.ts +4 -4
- package/src/__tests__/benchmark/types.ts +1 -1
- package/src/__tests__/benchmark/utils/test-runner.ts +3 -3
- package/src/__tests__/category-filter.test.ts +2 -2
- package/src/__tests__/context-engine/cross-file-taint.test.ts +284 -0
- package/src/__tests__/context-engine/framework-models.test.ts +457 -0
- package/src/__tests__/context-engine/function-classifier.test.ts +146 -0
- package/src/__tests__/context-engine/import-resolver.test.ts +328 -0
- package/src/__tests__/context-engine/integration.test.ts +320 -0
- package/src/__tests__/context-engine/module-graph.test.ts +159 -0
- package/src/__tests__/context-engine/route-discovery/auth-resolver.test.ts +353 -0
- package/src/__tests__/context-engine/route-discovery/express.test.ts +150 -0
- package/src/__tests__/context-engine/route-discovery/nextjs.test.ts +138 -0
- package/src/__tests__/context-engine/route-discovery/python.test.ts +95 -0
- package/src/__tests__/context-engine/sanitiser-detection.test.ts +187 -0
- package/src/__tests__/context-engine/sink-matcher.test.ts +251 -0
- package/src/__tests__/context-engine/source-discovery.test.ts +186 -0
- package/src/__tests__/context-engine/taint-tracker.test.ts +182 -0
- package/src/__tests__/regression/agent-skill-benign.test.ts +174 -0
- package/src/__tests__/regression/known-false-positives.test.ts +312 -4
- package/src/__tests__/score/adjustments.test.ts +385 -0
- package/src/__tests__/score/confidence.test.ts +283 -0
- package/src/__tests__/score/framework-scoring.test.ts +275 -0
- package/src/__tests__/score/route-scoring.test.ts +156 -0
- package/src/__tests__/score/scoring-integration.test.ts +165 -0
- package/src/__tests__/score/taint-adjustments.test.ts +244 -0
- package/src/__tests__/snapshots/__snapshots__/anthropic-validation-refactor.test.ts.snap +37 -49
- package/src/__tests__/snapshots/__snapshots__/dangerous-functions-refactor.test.ts.snap +52 -0
- package/src/__tests__/snapshots/__snapshots__/scan-depth.test.ts.snap +3 -3
- package/src/__tests__/snapshots/anthropic-validation-refactor.test.ts +2 -2
- package/src/__tests__/snapshots/dangerous-functions-refactor.test.ts +1 -1
- package/src/__tests__/snapshots/scan-depth.test.ts +3 -3
- package/src/__tests__/validate/route-annotations.test.ts +138 -0
- package/src/__tests__/validation/analyze-results.ts +1 -1
- package/src/__tests__/validation/extract-for-triage.ts +1 -1
- package/src/__tests__/validation/fp-deep-analysis.ts +1 -1
- package/src/{layer2/ai-agent-tools.ts → detect/ai-code/agent-tools.ts} +23 -3
- package/src/{layer2 → detect/ai-code}/byok-patterns.ts +17 -5
- package/src/{layer2/ai-endpoint-protection.ts → detect/ai-code/endpoint-protection.ts} +8 -4
- package/src/{layer2/ai-execution-sinks.ts → detect/ai-code/execution-sinks.ts} +8 -4
- package/src/{layer2/ai-fingerprinting.ts → detect/ai-code/fingerprinting.ts} +20 -4
- package/src/detect/ai-code/index.ts +11 -0
- package/src/{layer2/ai-mcp-security.ts → detect/ai-code/mcp-security.ts} +7 -3
- package/src/{layer2 → detect/ai-code}/model-supply-chain.ts +7 -3
- package/src/{layer2/ai-package-hallucination.ts → detect/ai-code/package-hallucination.ts} +18 -3
- package/src/{layer2/ai-prompt-hygiene.ts → detect/ai-code/prompt-hygiene.ts} +25 -3
- package/src/{layer2/ai-rag-safety.ts → detect/ai-code/rag-safety.ts} +7 -3
- package/src/{layer2/ai-schema-validation.ts → detect/ai-code/schema-validation.ts} +7 -3
- package/src/detect/config/agent-skill-injection.ts +551 -0
- package/src/{layer1 → detect/config}/comments.ts +6 -2
- package/src/{layer1 → detect/config}/file-flags.ts +9 -3
- package/src/detect/config/index.ts +6 -0
- package/src/{layer3 → detect/config}/osv-check.ts +3 -2
- package/src/{layer3 → detect/config}/package-check.ts +3 -2
- package/src/{layer1 → detect/config}/urls.ts +12 -5
- package/src/detect/index.ts +131 -0
- package/src/{layer1 → detect/secrets}/config-audit.ts +7 -2
- package/src/{layer1 → detect/secrets}/config-mcp-audit.ts +8 -3
- package/src/{layer1 → detect/secrets}/entropy.ts +23 -11
- package/src/{layer1 → detect/secrets}/index.ts +31 -30
- package/src/{layer1 → detect/secrets}/patterns.ts +10 -3
- package/src/{layer1 → detect/secrets}/weak-crypto.ts +7 -2
- package/src/{layer2/auth-antipatterns.ts → detect/structural/auth-patterns.ts} +23 -11
- package/src/{layer2 → detect/structural}/dangerous-functions/dom-xss.ts +1 -1
- package/src/{layer2 → detect/structural}/dangerous-functions/index.ts +47 -24
- package/src/{layer2 → detect/structural}/dangerous-functions/json-parse.ts +10 -2
- package/src/{layer2 → detect/structural}/dangerous-functions/math-random.ts +2 -2
- package/src/{layer2 → detect/structural}/dangerous-functions/patterns.ts +1 -1
- package/src/{layer2 → detect/structural}/dangerous-functions/request-validation.ts +10 -2
- package/src/{layer2 → detect/structural}/dangerous-functions/utils/control-flow.ts +2 -2
- package/src/{layer2 → detect/structural}/data-exposure.ts +11 -3
- package/src/{layer2 → detect/structural}/framework-checks.ts +10 -11
- package/src/{layer2 → detect/structural}/index.ts +80 -77
- package/src/detect/structural/log-injection.ts +254 -0
- package/src/{layer2 → detect/structural}/logic-gates.ts +13 -5
- package/src/{layer2 → detect/structural}/risky-imports.ts +7 -3
- package/src/detect/structural/security-headers.ts +231 -0
- package/src/detect/structural/ssrf-detection.ts +300 -0
- package/src/{layer2 → detect/structural}/variables.ts +7 -3
- package/src/detect/structural/xxe-detection.ts +295 -0
- package/src/index.ts +39 -1291
- package/src/{utils → model}/auth-helper-detector.ts +1 -1
- package/src/model/cross-file-taint.ts +374 -0
- package/src/model/framework-models/django.ts +82 -0
- package/src/model/framework-models/express.ts +54 -0
- package/src/model/framework-models/index.ts +116 -0
- package/src/model/framework-models/nextjs.ts +69 -0
- package/src/model/framework-models/prisma.ts +57 -0
- package/src/model/framework-models/react.ts +63 -0
- package/src/model/framework-models/sequelize.ts +63 -0
- package/src/model/framework-models/types.ts +46 -0
- package/src/model/function-classifier.ts +184 -0
- package/src/model/import-resolver.ts +453 -0
- package/src/{utils → model}/imported-auth-detector.ts +21 -85
- package/src/model/index.ts +353 -0
- package/src/{utils → model}/middleware-detector.ts +156 -17
- package/src/model/module-graph.ts +254 -0
- package/src/{utils → model}/oauth-flow-detector.ts +1 -1
- package/src/{utils/project-context-builder.ts → model/project-context.ts} +1 -1
- package/src/model/route-auth-resolver.ts +216 -0
- package/src/model/route-discovery/express.ts +251 -0
- package/src/model/route-discovery/index.ts +83 -0
- package/src/model/route-discovery/nextjs.ts +216 -0
- package/src/model/route-discovery/python.ts +214 -0
- package/src/model/route-discovery/types.ts +48 -0
- package/src/model/route-discovery/utils.ts +54 -0
- package/src/model/sanitiser-detection.ts +268 -0
- package/src/model/sink-matcher.ts +178 -0
- package/src/model/sink-patterns.ts +109 -0
- package/src/model/source-discovery.ts +209 -0
- package/src/model/taint-tracker.ts +333 -0
- package/src/model/taint-types.ts +149 -0
- package/src/{utils → model}/trpc-analyzer.ts +1 -1
- package/src/{utils/context-helpers.ts → parse/file-classifier.ts} +54 -0
- package/src/{utils → parse}/path-exclusions.ts +1 -1
- package/src/pipeline/config.ts +81 -0
- package/src/pipeline/index.ts +437 -0
- package/src/{modes → pipeline/modes}/incremental.ts +5 -5
- package/src/postprocess/aggregation.ts +74 -0
- package/src/postprocess/contradictions.ts +128 -0
- package/src/postprocess/dedup.ts +62 -0
- package/src/{filtering → postprocess/filtering}/__tests__/pipeline.test.ts +1 -1
- package/src/{filtering → postprocess/filtering}/context-adjustments.ts +2 -2
- package/src/{filtering → postprocess/filtering}/pipeline.ts +2 -2
- package/src/postprocess/index.ts +118 -0
- package/src/{suppression → postprocess/suppression}/config-loader.ts +1 -1
- package/src/{suppression → postprocess/suppression}/hash.ts +1 -1
- package/src/{suppression → postprocess/suppression}/inline-parser.ts +1 -1
- package/src/{suppression → postprocess/suppression}/manager.ts +1 -1
- package/src/{suppression → postprocess/suppression}/types.ts +2 -2
- package/src/postprocess/validation-cap.ts +66 -0
- package/src/report/build-result.ts +94 -0
- package/src/report/enrichment.ts +52 -0
- package/src/{formatters → report/formatters}/ai-context.ts +1 -1
- package/src/{formatters → report/formatters}/cli-terminal.ts +11 -11
- package/src/{formatters → report/formatters}/github-comment.ts +1 -1
- package/src/{formatters → report/formatters}/grouping.ts +8 -8
- package/src/{formatters → report/formatters}/ide/claude-code.ts +1 -1
- package/src/{formatters → report/formatters}/ide/cursor.ts +1 -1
- package/src/{formatters → report/formatters}/ide/windsurf.ts +1 -1
- package/src/{formatters → report/formatters}/vscode-diagnostic.ts +1 -1
- package/src/report/summary.ts +70 -0
- package/src/score/adjustments.ts +387 -0
- package/src/{layer3/anthropic → score}/auto-dismiss.ts +15 -14
- package/src/score/confidence.ts +66 -0
- package/src/score/index.ts +316 -0
- package/src/score/types.ts +187 -0
- package/src/{baseline → shared/baseline}/__tests__/diff.test.ts +2 -2
- package/src/{baseline → shared/baseline}/diff.ts +1 -1
- package/src/{baseline → shared/baseline}/manager.ts +1 -1
- package/src/{category-filter.ts → shared/category-filter.ts} +1 -1
- package/src/{utils → shared}/code-analysis.ts +1 -1
- package/src/{rules → shared/rules}/__tests__/metadata.test.ts +7 -0
- package/src/{rules → shared/rules}/framework-fixes.ts +1 -1
- package/src/{rules → shared/rules}/metadata.ts +94 -0
- package/src/{types.ts → shared/types.ts} +22 -5
- package/src/tiers.ts +18 -1
- package/src/validate/__tests__/context-extractor.test.ts +191 -0
- package/src/validate/__tests__/prompt-assembly.test.ts +233 -0
- package/src/validate/__tests__/request-builder.test.ts +347 -0
- package/src/{layer3/anthropic → validate}/index.ts +8 -7
- package/src/{layer3/anthropic → validate}/prompts/index.ts +2 -0
- package/src/validate/prompts/modules/ai-patterns.ts +153 -0
- package/src/validate/prompts/modules/auth-access.ts +22 -0
- package/src/validate/prompts/modules/common.ts +183 -0
- package/src/validate/prompts/modules/index.ts +204 -0
- package/src/validate/prompts/modules/owasp-classic.ts +81 -0
- package/src/validate/prompts/modules/secrets-crypto.ts +65 -0
- package/src/validate/prompts/modules/xss-prompt.ts +19 -0
- package/src/validate/prompts/validation.ts +20 -0
- package/src/{layer3/anthropic → validate}/providers/anthropic.ts +28 -27
- package/src/validate/providers/index.ts +8 -0
- package/src/{layer3/anthropic → validate}/providers/openai.ts +30 -25
- package/src/validate/request-builder.ts +448 -0
- package/src/{layer3/anthropic → validate}/types.ts +1 -1
- package/src/validate/utils/context-extractor.ts +220 -0
- package/src/{layer3/anthropic → validate}/utils/index.ts +10 -0
- package/src/{layer3/anthropic → validate}/utils/response-parser.ts +2 -1
- package/src/layer3/anthropic/prompts/validation.ts +0 -419
- package/src/layer3/anthropic/providers/index.ts +0 -8
- package/src/layer3/anthropic/request-builder.ts +0 -150
- package/src/layer3/index.ts +0 -168
- /package/src/{layer3 → detect/config}/__tests__/osv-check.test.ts +0 -0
- /package/src/{layer2 → detect/structural}/__tests__/math-random-enhanced.test.ts +0 -0
- /package/src/{layer2 → detect/structural}/dangerous-functions/child-process.ts +0 -0
- /package/src/{layer2 → detect/structural}/dangerous-functions/utils/helpers.ts +0 -0
- /package/src/{layer2 → detect/structural}/dangerous-functions/utils/index.ts +0 -0
- /package/src/{layer2 → detect/structural}/dangerous-functions/utils/schema-validation.ts +0 -0
- /package/src/{utils → model}/route-hierarchy.ts +0 -0
- /package/src/{filtering → postprocess/filtering}/index.ts +0 -0
- /package/src/{suppression → postprocess/suppression}/__tests__/config-loader.test.ts +0 -0
- /package/src/{suppression → postprocess/suppression}/__tests__/hash.test.ts +0 -0
- /package/src/{suppression → postprocess/suppression}/__tests__/inline-parser.test.ts +0 -0
- /package/src/{suppression → postprocess/suppression}/__tests__/manager.test.ts +0 -0
- /package/src/{suppression → postprocess/suppression}/index.ts +0 -0
- /package/src/{formatters → report/formatters}/__tests__/ai-context.test.ts +0 -0
- /package/src/{formatters → report/formatters}/ide/__tests__/ide.test.ts +0 -0
- /package/src/{formatters → report/formatters}/ide/index.ts +0 -0
- /package/src/{formatters → report/formatters}/index.ts +0 -0
- /package/src/{utils → shared}/__tests__/code-analysis.test.ts +0 -0
- /package/src/{utils → shared}/__tests__/parsed-file.test.ts +0 -0
- /package/src/{ai-context → shared/ai-context}/__tests__/manager.test.ts +0 -0
- /package/src/{ai-context → shared/ai-context}/index.ts +0 -0
- /package/src/{ai-context → shared/ai-context}/manager.ts +0 -0
- /package/src/{baseline → shared/baseline}/__tests__/manager.test.ts +0 -0
- /package/src/{baseline → shared/baseline}/index.ts +0 -0
- /package/src/{baseline → shared/baseline}/types.ts +0 -0
- /package/src/{utils → shared}/comment-analyzer.ts +0 -0
- /package/src/{utils → shared}/diff-detector.ts +0 -0
- /package/src/{utils → shared}/diff-parser.ts +0 -0
- /package/src/{utils → shared}/environment-context.ts +0 -0
- /package/src/{utils → shared}/intent-detector.ts +0 -0
- /package/src/{utils → shared}/parsed-file.ts +0 -0
- /package/src/{utils → shared}/registry-clients.ts +0 -0
- /package/src/{rules → shared/rules}/__tests__/framework-fixes.test.ts +0 -0
- /package/src/{rules → shared/rules}/index.ts +0 -0
- /package/src/{utils → shared}/schema-semantics.ts +0 -0
- /package/src/{layer3/anthropic → validate}/clients.ts +0 -0
- /package/src/{layer3/anthropic → validate}/prompts/semantic-analysis.ts +0 -0
- /package/src/{layer3/anthropic → validate}/utils/path-helpers.ts +0 -0
- /package/src/{layer3/anthropic → validate}/utils/retry.ts +0 -0
|
@@ -12,15 +12,17 @@
|
|
|
12
12
|
* - Database tools without proper scoping
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import type { Vulnerability, VulnerabilitySeverity } from '
|
|
16
|
-
import type { ParsedFile } from '
|
|
15
|
+
import type { Vulnerability, VulnerabilitySeverity } from '../../shared/types'
|
|
16
|
+
import type { ParsedFile } from '../../shared/parsed-file'
|
|
17
17
|
import {
|
|
18
18
|
isComment,
|
|
19
19
|
isTestOrMockFile,
|
|
20
20
|
isScannerOrFixtureFile,
|
|
21
21
|
isExampleDirectory,
|
|
22
22
|
isLibraryCode,
|
|
23
|
-
} from '
|
|
23
|
+
} from '../../parse/file-classifier'
|
|
24
|
+
|
|
25
|
+
const BASE_CONFIDENCE = 0.50
|
|
24
26
|
|
|
25
27
|
// ============================================================================
|
|
26
28
|
// Agent/Tool Context Detection
|
|
@@ -1102,7 +1104,9 @@ export function detectAIAgentTools(
|
|
|
1102
1104
|
suggestedFix: pattern.suggestedFix,
|
|
1103
1105
|
confidence: 'medium',
|
|
1104
1106
|
layer: 2,
|
|
1107
|
+
source: 'ai_code' as const,
|
|
1105
1108
|
requiresAIValidation: true, // Always validate - context dependent
|
|
1109
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1106
1110
|
})
|
|
1107
1111
|
}
|
|
1108
1112
|
}
|
|
@@ -1148,7 +1152,9 @@ export function detectAIAgentTools(
|
|
|
1148
1152
|
suggestedFix: pattern.suggestedFix,
|
|
1149
1153
|
confidence: 'low', // Lower confidence - needs context
|
|
1150
1154
|
layer: 2,
|
|
1155
|
+
source: 'ai_code' as const,
|
|
1151
1156
|
requiresAIValidation: true,
|
|
1157
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1152
1158
|
})
|
|
1153
1159
|
}
|
|
1154
1160
|
}
|
|
@@ -1242,7 +1248,9 @@ export function detectAIAgentTools(
|
|
|
1242
1248
|
suggestedFix: pattern.suggestedFix,
|
|
1243
1249
|
confidence: severity === 'info' ? 'low' : 'medium',
|
|
1244
1250
|
layer: 2,
|
|
1251
|
+
source: 'ai_code' as const,
|
|
1245
1252
|
requiresAIValidation: severity !== 'info' && severity !== 'low',
|
|
1253
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1246
1254
|
})
|
|
1247
1255
|
}
|
|
1248
1256
|
}
|
|
@@ -1297,7 +1305,9 @@ export function detectAIAgentTools(
|
|
|
1297
1305
|
suggestedFix: pattern.suggestedFix,
|
|
1298
1306
|
confidence: severity === 'critical' ? 'high' : 'medium',
|
|
1299
1307
|
layer: 2,
|
|
1308
|
+
source: 'ai_code' as const,
|
|
1300
1309
|
requiresAIValidation: severity !== 'info',
|
|
1310
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1301
1311
|
})
|
|
1302
1312
|
}
|
|
1303
1313
|
}
|
|
@@ -1375,7 +1385,9 @@ export function detectAIAgentTools(
|
|
|
1375
1385
|
suggestedFix: pattern.suggestedFix,
|
|
1376
1386
|
confidence: 'medium',
|
|
1377
1387
|
layer: 2,
|
|
1388
|
+
source: 'ai_code' as const,
|
|
1378
1389
|
requiresAIValidation: severity !== 'info' && severity !== 'low',
|
|
1390
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1379
1391
|
})
|
|
1380
1392
|
}
|
|
1381
1393
|
}
|
|
@@ -1433,7 +1445,9 @@ export function detectAIAgentTools(
|
|
|
1433
1445
|
suggestedFix: pattern.suggestedFix,
|
|
1434
1446
|
confidence: 'medium',
|
|
1435
1447
|
layer: 2,
|
|
1448
|
+
source: 'ai_code' as const,
|
|
1436
1449
|
requiresAIValidation: severity !== 'info',
|
|
1450
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1437
1451
|
})
|
|
1438
1452
|
}
|
|
1439
1453
|
}
|
|
@@ -1517,7 +1531,9 @@ export function detectAIAgentTools(
|
|
|
1517
1531
|
suggestedFix: pattern.suggestedFix,
|
|
1518
1532
|
confidence: 'medium',
|
|
1519
1533
|
layer: 2,
|
|
1534
|
+
source: 'ai_code' as const,
|
|
1520
1535
|
requiresAIValidation: severity !== 'info' && severity !== 'low',
|
|
1536
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1521
1537
|
})
|
|
1522
1538
|
}
|
|
1523
1539
|
}
|
|
@@ -1575,7 +1591,9 @@ export function detectAIAgentTools(
|
|
|
1575
1591
|
suggestedFix: pattern.suggestedFix,
|
|
1576
1592
|
confidence: severity === 'critical' ? 'high' : 'medium',
|
|
1577
1593
|
layer: 2,
|
|
1594
|
+
source: 'ai_code' as const,
|
|
1578
1595
|
requiresAIValidation: severity !== 'info' && severity !== 'low',
|
|
1596
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1579
1597
|
})
|
|
1580
1598
|
}
|
|
1581
1599
|
}
|
|
@@ -1633,7 +1651,9 @@ export function detectAIAgentTools(
|
|
|
1633
1651
|
suggestedFix: pattern.suggestedFix,
|
|
1634
1652
|
confidence: 'medium',
|
|
1635
1653
|
layer: 2,
|
|
1654
|
+
source: 'ai_code' as const,
|
|
1636
1655
|
requiresAIValidation: severity !== 'info' && severity !== 'low',
|
|
1656
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1637
1657
|
})
|
|
1638
1658
|
}
|
|
1639
1659
|
}
|
|
@@ -4,11 +4,14 @@
|
|
|
4
4
|
* BYOK is often a feature, not a vulnerability - severity depends on context
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import type { Vulnerability, VulnerabilitySeverity } from '
|
|
8
|
-
import type { ParsedFile } from '
|
|
9
|
-
import type { MiddlewareAuthConfig } from '
|
|
10
|
-
import { isComment, isTestOrMockFile, isExampleFile, isPlaceholderValue, isScannerOrFixtureFile } from '
|
|
11
|
-
import { isRouteProtectedByMiddleware, getRoutePathFromFile, detectUserScopingPatterns } from '
|
|
7
|
+
import type { Vulnerability, VulnerabilitySeverity } from '../../shared/types'
|
|
8
|
+
import type { ParsedFile } from '../../shared/parsed-file'
|
|
9
|
+
import type { MiddlewareAuthConfig } from '../../model/middleware-detector'
|
|
10
|
+
import { isComment, isTestOrMockFile, isExampleFile, isPlaceholderValue, isScannerOrFixtureFile } from '../../parse/file-classifier'
|
|
11
|
+
import { isRouteProtectedByMiddleware, getRoutePathFromFile, detectUserScopingPatterns } from '../../model/middleware-detector'
|
|
12
|
+
|
|
13
|
+
const BASE_CONFIDENCE_STORAGE = 0.50
|
|
14
|
+
const BASE_CONFIDENCE_TRANSIENT = 0.25
|
|
12
15
|
|
|
13
16
|
/**
|
|
14
17
|
* Check if line contains example/placeholder API key patterns
|
|
@@ -272,6 +275,7 @@ export function detectBYOKPatterns(
|
|
|
272
275
|
let severity: VulnerabilitySeverity
|
|
273
276
|
let description: string
|
|
274
277
|
let suggestedFix: string
|
|
278
|
+
let baseConfidence: number
|
|
275
279
|
|
|
276
280
|
if (isAuthenticated && isTransient) {
|
|
277
281
|
// Authenticated and transient - this is the IDEAL BYOK pattern
|
|
@@ -281,6 +285,7 @@ export function detectBYOKPatterns(
|
|
|
281
285
|
severity = 'low'
|
|
282
286
|
description = `BYOK feature detected: ${pattern.description}. Keys are used transiently (good!) but appear to be logged (avoid logging API keys, even in debug).`
|
|
283
287
|
suggestedFix = 'Remove logging of API keys. Best practices: (1) Validate API key format, (2) Add per-user rate limiting.'
|
|
288
|
+
baseConfidence = BASE_CONFIDENCE_STORAGE
|
|
284
289
|
} else {
|
|
285
290
|
// IDEAL PATTERN: Authenticated + transient + no logging = no issue
|
|
286
291
|
// Skip emitting a finding entirely for the ideal case
|
|
@@ -291,26 +296,31 @@ export function detectBYOKPatterns(
|
|
|
291
296
|
severity = 'low'
|
|
292
297
|
description = `BYOK feature detected: ${pattern.description}. Keys are used transiently (not stored). Consider adding authentication or rate limiting.`
|
|
293
298
|
suggestedFix = 'Consider adding authentication. If intentionally public: add rate limiting, key format validation, and usage tracking.'
|
|
299
|
+
baseConfidence = BASE_CONFIDENCE_TRANSIENT
|
|
294
300
|
} else if (!isAuthenticated && isStoredCentrally) {
|
|
295
301
|
// Unauthenticated AND storing keys - this is the real risk
|
|
296
302
|
severity = 'medium'
|
|
297
303
|
description = `${pattern.description}. This endpoint appears to lack authentication AND stores keys. This could allow unauthorized key storage.`
|
|
298
304
|
suggestedFix = 'Add authentication. Ensure stored keys are scoped by user_id with proper access controls.'
|
|
305
|
+
baseConfidence = BASE_CONFIDENCE_STORAGE
|
|
299
306
|
} else if (isStoredCentrally && !isUserScoped) {
|
|
300
307
|
// Authenticated but keys stored without user scoping - medium risk
|
|
301
308
|
severity = 'medium'
|
|
302
309
|
description = `${pattern.description}. Keys appear to be stored centrally without user-scoping, which could lead to cross-tenant key access.`
|
|
303
310
|
suggestedFix = 'Ensure stored keys are scoped by user_id. Add proper access controls to prevent users from accessing other users\' keys.'
|
|
311
|
+
baseConfidence = BASE_CONFIDENCE_STORAGE
|
|
304
312
|
} else if (isAuthenticated && isUserScoped) {
|
|
305
313
|
// Authenticated and user-scoped with storage - generally okay
|
|
306
314
|
severity = 'info'
|
|
307
315
|
description = `${pattern.description}. Route is authenticated and operations appear user-scoped. If keys are stored, consider encryption at rest.`
|
|
308
316
|
suggestedFix = 'If storing keys: consider encryption at rest. Add rate limiting to prevent cost abuse.'
|
|
317
|
+
baseConfidence = BASE_CONFIDENCE_STORAGE
|
|
309
318
|
} else {
|
|
310
319
|
// Authenticated but unclear scoping - needs review, but low priority
|
|
311
320
|
severity = 'info'
|
|
312
321
|
description = `${pattern.description}. Route is authenticated. This appears to be a BYOK feature.`
|
|
313
322
|
suggestedFix = 'Verify user-scoping for stored keys. Add rate limiting for cost control.'
|
|
323
|
+
baseConfidence = BASE_CONFIDENCE_TRANSIENT
|
|
314
324
|
}
|
|
315
325
|
|
|
316
326
|
// Downgrade test files
|
|
@@ -331,6 +341,8 @@ export function detectBYOKPatterns(
|
|
|
331
341
|
suggestedFix,
|
|
332
342
|
confidence: isTestFile ? 'low' : 'medium',
|
|
333
343
|
layer: 2,
|
|
344
|
+
source: 'ai_code' as const,
|
|
345
|
+
baseConfidence,
|
|
334
346
|
})
|
|
335
347
|
|
|
336
348
|
break // One finding per line
|
|
@@ -8,16 +8,18 @@
|
|
|
8
8
|
* - Missing rate limiting on AI routes
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import type { Vulnerability, VulnerabilitySeverity } from '
|
|
12
|
-
import type { ParsedFile } from '
|
|
13
|
-
import type { MiddlewareAuthConfig } from '
|
|
11
|
+
import type { Vulnerability, VulnerabilitySeverity } from '../../shared/types'
|
|
12
|
+
import type { ParsedFile } from '../../shared/parsed-file'
|
|
13
|
+
import type { MiddlewareAuthConfig } from '../../model/middleware-detector'
|
|
14
14
|
import {
|
|
15
15
|
isComment,
|
|
16
16
|
isTestOrMockFile,
|
|
17
17
|
isDocumentationFile,
|
|
18
18
|
isScannerOrFixtureFile,
|
|
19
19
|
isExampleDirectory,
|
|
20
|
-
} from '
|
|
20
|
+
} from '../../parse/file-classifier'
|
|
21
|
+
|
|
22
|
+
const BASE_CONFIDENCE = 0.50
|
|
21
23
|
|
|
22
24
|
// ============================================================================
|
|
23
25
|
// Context Detection
|
|
@@ -384,7 +386,9 @@ export function detectAIEndpointProtection(
|
|
|
384
386
|
suggestedFix,
|
|
385
387
|
confidence: severity === 'info' ? 'low' : 'medium',
|
|
386
388
|
layer: 2,
|
|
389
|
+
source: 'ai_code' as const,
|
|
387
390
|
requiresAIValidation: severity !== 'info',
|
|
391
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
388
392
|
})
|
|
389
393
|
|
|
390
394
|
// Only report one finding per file (file-level issue)
|
|
@@ -11,16 +11,18 @@
|
|
|
11
11
|
* - Template rendering: innerHTML, dangerouslySetInnerHTML
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import type { Vulnerability, VulnerabilitySeverity } from '
|
|
15
|
-
import type { ParsedFile } from '
|
|
14
|
+
import type { Vulnerability, VulnerabilitySeverity } from '../../shared/types'
|
|
15
|
+
import type { ParsedFile } from '../../shared/parsed-file'
|
|
16
16
|
import {
|
|
17
17
|
isComment,
|
|
18
18
|
isTestOrMockFile,
|
|
19
19
|
isScannerOrFixtureFile,
|
|
20
20
|
isExampleDirectory,
|
|
21
21
|
isLibraryCode,
|
|
22
|
-
} from '
|
|
23
|
-
import { isLLMContextFile } from './
|
|
22
|
+
} from '../../parse/file-classifier'
|
|
23
|
+
import { isLLMContextFile } from './prompt-hygiene'
|
|
24
|
+
|
|
25
|
+
const BASE_CONFIDENCE = 0.55
|
|
24
26
|
|
|
25
27
|
// ============================================================================
|
|
26
28
|
// LLM Output Variable Detection
|
|
@@ -1297,7 +1299,9 @@ export function detectAIExecutionSinks(
|
|
|
1297
1299
|
suggestedFix: pattern.suggestedFix,
|
|
1298
1300
|
confidence: hasLLMContext ? 'high' : 'medium',
|
|
1299
1301
|
layer: 2,
|
|
1302
|
+
source: 'ai_code' as const,
|
|
1300
1303
|
requiresAIValidation: severity !== 'info' && severity !== 'low',
|
|
1304
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1301
1305
|
})
|
|
1302
1306
|
}
|
|
1303
1307
|
}
|
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
* Detects patterns commonly found in AI-generated code that may indicate security risks
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { Vulnerability, VulnerabilitySeverity } from '
|
|
7
|
-
import type { ParsedFile } from '
|
|
8
|
-
import { isExampleFile, isTestOrMockFile, isPlaceholderValue, isScannerOrFixtureFile } from '
|
|
9
|
-
import { getEnvironmentContext, isInPlaceholderAttribute, isDefaultParameterValue } from '
|
|
6
|
+
import type { Vulnerability, VulnerabilitySeverity } from '../../shared/types'
|
|
7
|
+
import type { ParsedFile } from '../../shared/parsed-file'
|
|
8
|
+
import { isExampleFile, isTestOrMockFile, isPlaceholderValue, isScannerOrFixtureFile } from '../../parse/file-classifier'
|
|
9
|
+
import { getEnvironmentContext, isInPlaceholderAttribute, isDefaultParameterValue } from '../../shared/environment-context'
|
|
10
|
+
|
|
11
|
+
const BASE_CONFIDENCE = 0.30
|
|
10
12
|
|
|
11
13
|
interface AIFingerprint {
|
|
12
14
|
name: string
|
|
@@ -413,6 +415,8 @@ function detectSmartAnyUsage(
|
|
|
413
415
|
suggestedFix: 'Replace "any" with explicit types. For request handlers use typed schemas (Zod, Yup). For database queries use typed ORM models.',
|
|
414
416
|
confidence: 'medium',
|
|
415
417
|
layer: 2,
|
|
418
|
+
source: 'ai_code' as const,
|
|
419
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
416
420
|
})
|
|
417
421
|
} else {
|
|
418
422
|
// Report individual findings for 1-2 high-priority 'any' usages
|
|
@@ -436,6 +440,8 @@ function detectSmartAnyUsage(
|
|
|
436
440
|
suggestedFix: 'Replace "any" with an explicit type. Use typed request schemas, ORM models, or interface definitions.',
|
|
437
441
|
confidence: 'medium',
|
|
438
442
|
layer: 2,
|
|
443
|
+
source: 'ai_code' as const,
|
|
444
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
439
445
|
})
|
|
440
446
|
}
|
|
441
447
|
}
|
|
@@ -561,6 +567,8 @@ function detectManagedAICostAbuse(
|
|
|
561
567
|
suggestedFix: 'Consider adding per-user rate limiting (e.g., @upstash/ratelimit) to prevent cost abuse by authenticated users.',
|
|
562
568
|
confidence: 'low',
|
|
563
569
|
layer: 2,
|
|
570
|
+
source: 'ai_code' as const,
|
|
571
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
564
572
|
})
|
|
565
573
|
} else {
|
|
566
574
|
// Unauthenticated route - higher risk
|
|
@@ -576,6 +584,8 @@ function detectManagedAICostAbuse(
|
|
|
576
584
|
suggestedFix: 'Add authentication or rate limiting (e.g., @upstash/ratelimit, rate-limiter-flexible) to prevent cost abuse.',
|
|
577
585
|
confidence: 'medium',
|
|
578
586
|
layer: 2,
|
|
587
|
+
source: 'ai_code' as const,
|
|
588
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
579
589
|
})
|
|
580
590
|
}
|
|
581
591
|
}
|
|
@@ -681,6 +691,8 @@ export function detectAIFingerprints(
|
|
|
681
691
|
suggestedFix: fingerprint.suggestedFix,
|
|
682
692
|
confidence,
|
|
683
693
|
layer: 2,
|
|
694
|
+
source: 'ai_code' as const,
|
|
695
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
684
696
|
})
|
|
685
697
|
break // Only report once per line
|
|
686
698
|
}
|
|
@@ -727,6 +739,8 @@ export function detectAIFingerprints(
|
|
|
727
739
|
suggestedFix: 'Replace with actual production URL from environment variable',
|
|
728
740
|
confidence: 'high',
|
|
729
741
|
layer: 2,
|
|
742
|
+
source: 'ai_code' as const,
|
|
743
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
730
744
|
})
|
|
731
745
|
aiPatternCount++
|
|
732
746
|
}
|
|
@@ -751,6 +765,8 @@ export function detectAIFingerprints(
|
|
|
751
765
|
suggestedFix: 'Review this file carefully for security issues, incomplete implementations, and placeholder code',
|
|
752
766
|
confidence: 'medium',
|
|
753
767
|
layer: 2,
|
|
768
|
+
source: 'ai_code' as const,
|
|
769
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
754
770
|
})
|
|
755
771
|
}
|
|
756
772
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { detectAIAgentTools } from './agent-tools'
|
|
2
|
+
export { detectBYOKPatterns } from './byok-patterns'
|
|
3
|
+
export { detectAIEndpointProtection } from './endpoint-protection'
|
|
4
|
+
export { detectAIExecutionSinks } from './execution-sinks'
|
|
5
|
+
export { detectAIFingerprints } from './fingerprinting'
|
|
6
|
+
export { detectMCPSecurity } from './mcp-security'
|
|
7
|
+
export { detectModelSupplyChain } from './model-supply-chain'
|
|
8
|
+
export { detectAIPackageHallucination } from './package-hallucination'
|
|
9
|
+
export { detectAIPromptHygiene } from './prompt-hygiene'
|
|
10
|
+
export { detectRAGSafetyIssues } from './rag-safety'
|
|
11
|
+
export { detectAISchemaValidation } from './schema-validation'
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* Reference: https://modelcontextprotocol.io, 13,000+ MCP servers deployed
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import type { Vulnerability, VulnerabilitySeverity, VulnerabilityCategory } from '
|
|
14
|
-
import type { ParsedFile } from '
|
|
13
|
+
import type { Vulnerability, VulnerabilitySeverity, VulnerabilityCategory } from '../../shared/types'
|
|
14
|
+
import type { ParsedFile } from '../../shared/parsed-file'
|
|
15
15
|
import {
|
|
16
16
|
isComment,
|
|
17
17
|
isTestOrMockFile,
|
|
@@ -19,7 +19,9 @@ import {
|
|
|
19
19
|
isScannerOrFixtureFile,
|
|
20
20
|
isExampleDirectory,
|
|
21
21
|
isLibraryCode,
|
|
22
|
-
} from '
|
|
22
|
+
} from '../../parse/file-classifier'
|
|
23
|
+
|
|
24
|
+
const BASE_CONFIDENCE = 0.50
|
|
23
25
|
|
|
24
26
|
// ============================================================================
|
|
25
27
|
// Context Detection
|
|
@@ -924,7 +926,9 @@ export function detectMCPSecurity(
|
|
|
924
926
|
suggestedFix: pattern.suggestedFix,
|
|
925
927
|
confidence: severity === 'info' ? 'low' : 'medium',
|
|
926
928
|
layer: 2,
|
|
929
|
+
source: 'ai_code' as const,
|
|
927
930
|
requiresAIValidation: severity !== 'info' && severity !== 'low',
|
|
931
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
928
932
|
})
|
|
929
933
|
}
|
|
930
934
|
}
|
|
@@ -13,15 +13,17 @@
|
|
|
13
13
|
* - CWE-502: Deserialization of Untrusted Data
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
import type { Vulnerability, VulnerabilitySeverity, VulnerabilityCategory } from '
|
|
17
|
-
import type { ParsedFile } from '
|
|
16
|
+
import type { Vulnerability, VulnerabilitySeverity, VulnerabilityCategory } from '../../shared/types'
|
|
17
|
+
import type { ParsedFile } from '../../shared/parsed-file'
|
|
18
18
|
import {
|
|
19
19
|
isComment,
|
|
20
20
|
isTestOrMockFile,
|
|
21
21
|
isScannerOrFixtureFile,
|
|
22
22
|
isExampleDirectory,
|
|
23
23
|
isLibraryCode,
|
|
24
|
-
} from '
|
|
24
|
+
} from '../../parse/file-classifier'
|
|
25
|
+
|
|
26
|
+
const BASE_CONFIDENCE = 0.50
|
|
25
27
|
|
|
26
28
|
// ============================================================================
|
|
27
29
|
// Context Detection
|
|
@@ -522,7 +524,9 @@ export function detectModelSupplyChain(
|
|
|
522
524
|
suggestedFix: pattern.suggestedFix,
|
|
523
525
|
confidence: severity === 'info' ? 'low' : 'high',
|
|
524
526
|
layer: 2,
|
|
527
|
+
source: 'ai_code' as const,
|
|
525
528
|
requiresAIValidation: severity !== 'info' && severity !== 'low',
|
|
529
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
526
530
|
})
|
|
527
531
|
}
|
|
528
532
|
}
|
|
@@ -12,15 +12,17 @@
|
|
|
12
12
|
* 3. Generic unscoped names that are too vague to be real
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import type { Vulnerability, VulnerabilitySeverity } from '
|
|
16
|
-
import type { ParsedFile } from '
|
|
15
|
+
import type { Vulnerability, VulnerabilitySeverity } from '../../shared/types'
|
|
16
|
+
import type { ParsedFile } from '../../shared/parsed-file'
|
|
17
17
|
import {
|
|
18
18
|
isComment,
|
|
19
19
|
isTestOrMockFile,
|
|
20
20
|
isDocumentationFile,
|
|
21
21
|
isScannerOrFixtureFile,
|
|
22
22
|
isExampleDirectory,
|
|
23
|
-
} from '
|
|
23
|
+
} from '../../parse/file-classifier'
|
|
24
|
+
|
|
25
|
+
const BASE_CONFIDENCE = 0.55
|
|
24
26
|
|
|
25
27
|
// ============================================================================
|
|
26
28
|
// Known Hallucinated Package Database
|
|
@@ -659,6 +661,15 @@ function extractPackageName(importPath: string): string | null {
|
|
|
659
661
|
return null
|
|
660
662
|
}
|
|
661
663
|
|
|
664
|
+
// Skip bare path aliases — unscoped generic names with sub-paths
|
|
665
|
+
// e.g., 'models/challenge', 'data/types', 'lib/auth' are tsconfig path aliases
|
|
666
|
+
if (!importPath.startsWith('@') && importPath.includes('/')) {
|
|
667
|
+
const baseName = importPath.split('/')[0]
|
|
668
|
+
if (GENERIC_UNSCOPED_NAMES.has(baseName)) {
|
|
669
|
+
return null // Local path alias, not an npm package
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
|
|
662
673
|
// Handle scoped packages (@org/package)
|
|
663
674
|
if (importPath.startsWith('@')) {
|
|
664
675
|
const parts = importPath.split('/')
|
|
@@ -882,7 +893,9 @@ export function detectAIPackageHallucination(
|
|
|
882
893
|
suggestedFix,
|
|
883
894
|
confidence: 'high',
|
|
884
895
|
layer: 2,
|
|
896
|
+
source: 'ai_code' as const,
|
|
885
897
|
requiresAIValidation: false, // Typosquats don't need AI validation - pattern is clear
|
|
898
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
886
899
|
})
|
|
887
900
|
continue // Don't also flag as hallucination
|
|
888
901
|
}
|
|
@@ -931,7 +944,9 @@ export function detectAIPackageHallucination(
|
|
|
931
944
|
suggestedFix,
|
|
932
945
|
confidence: KNOWN_HALLUCINATED_PACKAGES.has(imp.packageName) ? 'high' : 'medium',
|
|
933
946
|
layer: 2,
|
|
947
|
+
source: 'ai_code' as const,
|
|
934
948
|
requiresAIValidation: severity !== 'info' && !KNOWN_HALLUCINATED_PACKAGES.has(imp.packageName),
|
|
949
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
935
950
|
})
|
|
936
951
|
}
|
|
937
952
|
}
|
|
@@ -7,14 +7,16 @@
|
|
|
7
7
|
* - B3: Secrets & sensitive data in prompts (LLM06)
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type { Vulnerability, VulnerabilitySeverity } from '
|
|
11
|
-
import type { ParsedFile } from '
|
|
10
|
+
import type { Vulnerability, VulnerabilitySeverity } from '../../shared/types'
|
|
11
|
+
import type { ParsedFile } from '../../shared/parsed-file'
|
|
12
12
|
import {
|
|
13
13
|
isComment,
|
|
14
14
|
isTestOrMockFile,
|
|
15
15
|
isDocumentationFile,
|
|
16
16
|
isScannerOrFixtureFile,
|
|
17
|
-
} from '
|
|
17
|
+
} from '../../parse/file-classifier'
|
|
18
|
+
|
|
19
|
+
const BASE_CONFIDENCE = 0.40
|
|
18
20
|
|
|
19
21
|
/**
|
|
20
22
|
* Check if a file is in an LLM/AI context based on path and content
|
|
@@ -397,7 +399,9 @@ function detectSecretVariableFlow(
|
|
|
397
399
|
suggestedFix: `Remove the secret from the prompt. If the AI needs to use an API, make the call server-side instead of passing credentials to the model.`,
|
|
398
400
|
confidence: 'medium',
|
|
399
401
|
layer: 2,
|
|
402
|
+
source: 'ai_code' as const,
|
|
400
403
|
requiresAIValidation: true,
|
|
404
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
401
405
|
})
|
|
402
406
|
}
|
|
403
407
|
}
|
|
@@ -426,7 +430,9 @@ function detectSecretVariableFlow(
|
|
|
426
430
|
suggestedFix: `Remove the secret from the prompt. If the AI needs to use an API, make the call server-side.`,
|
|
427
431
|
confidence: 'medium',
|
|
428
432
|
layer: 2,
|
|
433
|
+
source: 'ai_code' as const,
|
|
429
434
|
requiresAIValidation: true,
|
|
435
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
430
436
|
})
|
|
431
437
|
}
|
|
432
438
|
}
|
|
@@ -920,7 +926,9 @@ export function detectAIPromptHygiene(
|
|
|
920
926
|
suggestedFix: pattern.suggestedFix,
|
|
921
927
|
confidence: severity === 'info' ? 'low' : 'medium',
|
|
922
928
|
layer: 2,
|
|
929
|
+
source: 'ai_code' as const,
|
|
923
930
|
requiresAIValidation: severity !== 'info',
|
|
931
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
924
932
|
})
|
|
925
933
|
}
|
|
926
934
|
}
|
|
@@ -969,7 +977,9 @@ export function detectAIPromptHygiene(
|
|
|
969
977
|
suggestedFix: pattern.suggestedFix,
|
|
970
978
|
confidence: 'high',
|
|
971
979
|
layer: 2,
|
|
980
|
+
source: 'ai_code' as const,
|
|
972
981
|
requiresAIValidation: false, // Secrets don't need AI validation - they're definitive
|
|
982
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
973
983
|
})
|
|
974
984
|
}
|
|
975
985
|
}
|
|
@@ -1034,7 +1044,9 @@ export function detectAIPromptHygiene(
|
|
|
1034
1044
|
suggestedFix: 'Remove the hardcoded secret. Use environment variables server-side. Never expose secrets to LLM prompts.',
|
|
1035
1045
|
confidence: 'high',
|
|
1036
1046
|
layer: 2,
|
|
1047
|
+
source: 'ai_code' as const,
|
|
1037
1048
|
requiresAIValidation: false,
|
|
1049
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1038
1050
|
})
|
|
1039
1051
|
}
|
|
1040
1052
|
}
|
|
@@ -1081,7 +1093,9 @@ export function detectAIPromptHygiene(
|
|
|
1081
1093
|
suggestedFix: pattern.suggestedFix,
|
|
1082
1094
|
confidence: 'medium',
|
|
1083
1095
|
layer: 2,
|
|
1096
|
+
source: 'ai_code' as const,
|
|
1084
1097
|
requiresAIValidation: true,
|
|
1098
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1085
1099
|
})
|
|
1086
1100
|
}
|
|
1087
1101
|
}
|
|
@@ -1137,7 +1151,9 @@ export function detectAIPromptHygiene(
|
|
|
1137
1151
|
suggestedFix: pattern.suggestedFix,
|
|
1138
1152
|
confidence: severity === 'info' ? 'low' : 'medium',
|
|
1139
1153
|
layer: 2,
|
|
1154
|
+
source: 'ai_code' as const,
|
|
1140
1155
|
requiresAIValidation: severity !== 'info',
|
|
1156
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1141
1157
|
})
|
|
1142
1158
|
}
|
|
1143
1159
|
}
|
|
@@ -1187,7 +1203,9 @@ export function detectAIPromptHygiene(
|
|
|
1187
1203
|
suggestedFix: pattern.suggestedFix,
|
|
1188
1204
|
confidence: severity === 'info' ? 'low' : 'medium',
|
|
1189
1205
|
layer: 2,
|
|
1206
|
+
source: 'ai_code' as const,
|
|
1190
1207
|
requiresAIValidation: severity !== 'info' && severity !== 'low',
|
|
1208
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1191
1209
|
})
|
|
1192
1210
|
}
|
|
1193
1211
|
}
|
|
@@ -1237,7 +1255,9 @@ export function detectAIPromptHygiene(
|
|
|
1237
1255
|
suggestedFix: pattern.suggestedFix,
|
|
1238
1256
|
confidence: 'medium',
|
|
1239
1257
|
layer: 2,
|
|
1258
|
+
source: 'ai_code' as const,
|
|
1240
1259
|
requiresAIValidation: severity !== 'info',
|
|
1260
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1241
1261
|
})
|
|
1242
1262
|
}
|
|
1243
1263
|
}
|
|
@@ -1280,7 +1300,9 @@ export function detectAIPromptHygiene(
|
|
|
1280
1300
|
suggestedFix: pattern.suggestedFix,
|
|
1281
1301
|
confidence: severity === 'info' ? 'low' : 'medium',
|
|
1282
1302
|
layer: 2,
|
|
1303
|
+
source: 'ai_code' as const,
|
|
1283
1304
|
requiresAIValidation: severity !== 'info' && severity !== 'low',
|
|
1305
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
1284
1306
|
})
|
|
1285
1307
|
}
|
|
1286
1308
|
}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* - Context logging risks
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import type { Vulnerability, VulnerabilitySeverity, VulnerabilityCategory } from '
|
|
13
|
-
import type { ParsedFile } from '
|
|
12
|
+
import type { Vulnerability, VulnerabilitySeverity, VulnerabilityCategory } from '../../shared/types'
|
|
13
|
+
import type { ParsedFile } from '../../shared/parsed-file'
|
|
14
14
|
import {
|
|
15
15
|
isComment,
|
|
16
16
|
isTestOrMockFile,
|
|
@@ -18,7 +18,9 @@ import {
|
|
|
18
18
|
isScannerOrFixtureFile,
|
|
19
19
|
isExampleDirectory,
|
|
20
20
|
isLibraryCode,
|
|
21
|
-
} from '
|
|
21
|
+
} from '../../parse/file-classifier'
|
|
22
|
+
|
|
23
|
+
const BASE_CONFIDENCE = 0.45
|
|
22
24
|
|
|
23
25
|
// ============================================================================
|
|
24
26
|
// Context Detection
|
|
@@ -961,7 +963,9 @@ export function detectRAGSafetyIssues(
|
|
|
961
963
|
suggestedFix: pattern.suggestedFix,
|
|
962
964
|
confidence: severity === 'info' ? 'low' : 'medium',
|
|
963
965
|
layer: 2,
|
|
966
|
+
source: 'ai_code' as const,
|
|
964
967
|
requiresAIValidation: severity !== 'info' && pattern.riskType !== 'context_logging',
|
|
968
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
965
969
|
})
|
|
966
970
|
}
|
|
967
971
|
}
|
|
@@ -9,14 +9,16 @@
|
|
|
9
9
|
* - Tool invocation parameters not validated
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import type { Vulnerability, VulnerabilitySeverity } from '
|
|
13
|
-
import type { ParsedFile } from '
|
|
12
|
+
import type { Vulnerability, VulnerabilitySeverity } from '../../shared/types'
|
|
13
|
+
import type { ParsedFile } from '../../shared/parsed-file'
|
|
14
14
|
import {
|
|
15
15
|
isComment,
|
|
16
16
|
isTestOrMockFile,
|
|
17
17
|
isDocumentationFile,
|
|
18
18
|
isScannerOrFixtureFile,
|
|
19
|
-
} from '
|
|
19
|
+
} from '../../parse/file-classifier'
|
|
20
|
+
|
|
21
|
+
const BASE_CONFIDENCE = 0.40
|
|
20
22
|
|
|
21
23
|
// ============================================================================
|
|
22
24
|
// Context Detection
|
|
@@ -411,7 +413,9 @@ export function detectAISchemaValidation(
|
|
|
411
413
|
suggestedFix: pattern.suggestedFix,
|
|
412
414
|
confidence: severity === 'info' ? 'low' : 'medium',
|
|
413
415
|
layer: 2,
|
|
416
|
+
source: 'ai_code' as const,
|
|
414
417
|
requiresAIValidation: true, // Tier B - always validate with AI
|
|
418
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
415
419
|
})
|
|
416
420
|
}
|
|
417
421
|
}
|