circle-ir-ai 1.1.0
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/CHANGELOG.md +105 -0
- package/LICENSE +15 -0
- package/README.md +336 -0
- package/dist/action-queue/aggregator.d.ts +40 -0
- package/dist/action-queue/aggregator.d.ts.map +1 -0
- package/dist/action-queue/aggregator.js +375 -0
- package/dist/action-queue/aggregator.js.map +1 -0
- package/dist/action-queue/index.d.ts +14 -0
- package/dist/action-queue/index.d.ts.map +1 -0
- package/dist/action-queue/index.js +17 -0
- package/dist/action-queue/index.js.map +1 -0
- package/dist/action-queue/queue.d.ts +74 -0
- package/dist/action-queue/queue.d.ts.map +1 -0
- package/dist/action-queue/queue.js +433 -0
- package/dist/action-queue/queue.js.map +1 -0
- package/dist/action-queue/types.d.ts +162 -0
- package/dist/action-queue/types.d.ts.map +1 -0
- package/dist/action-queue/types.js +44 -0
- package/dist/action-queue/types.js.map +1 -0
- package/dist/agents/enrichment-agent.d.ts +16 -0
- package/dist/agents/enrichment-agent.d.ts.map +1 -0
- package/dist/agents/enrichment-agent.js +102 -0
- package/dist/agents/enrichment-agent.js.map +1 -0
- package/dist/agents/index.d.ts +12 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +15 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/mastra/agents.d.ts +373 -0
- package/dist/agents/mastra/agents.d.ts.map +1 -0
- package/dist/agents/mastra/agents.js +347 -0
- package/dist/agents/mastra/agents.js.map +1 -0
- package/dist/agents/mastra/index.d.ts +12 -0
- package/dist/agents/mastra/index.d.ts.map +1 -0
- package/dist/agents/mastra/index.js +17 -0
- package/dist/agents/mastra/index.js.map +1 -0
- package/dist/agents/mastra/instance.d.ts +383 -0
- package/dist/agents/mastra/instance.d.ts.map +1 -0
- package/dist/agents/mastra/instance.js +37 -0
- package/dist/agents/mastra/instance.js.map +1 -0
- package/dist/agents/mastra/steps.d.ts +300 -0
- package/dist/agents/mastra/steps.d.ts.map +1 -0
- package/dist/agents/mastra/steps.js +468 -0
- package/dist/agents/mastra/steps.js.map +1 -0
- package/dist/agents/mastra/swarm.d.ts +106 -0
- package/dist/agents/mastra/swarm.d.ts.map +1 -0
- package/dist/agents/mastra/swarm.js +501 -0
- package/dist/agents/mastra/swarm.js.map +1 -0
- package/dist/agents/mastra/workflow.d.ts +81 -0
- package/dist/agents/mastra/workflow.d.ts.map +1 -0
- package/dist/agents/mastra/workflow.js +460 -0
- package/dist/agents/mastra/workflow.js.map +1 -0
- package/dist/agents/multi/agents/security.d.ts +29 -0
- package/dist/agents/multi/agents/security.d.ts.map +1 -0
- package/dist/agents/multi/agents/security.js +830 -0
- package/dist/agents/multi/agents/security.js.map +1 -0
- package/dist/agents/multi/extractor.d.ts +21 -0
- package/dist/agents/multi/extractor.d.ts.map +1 -0
- package/dist/agents/multi/extractor.js +483 -0
- package/dist/agents/multi/extractor.js.map +1 -0
- package/dist/agents/multi/index.d.ts +32 -0
- package/dist/agents/multi/index.d.ts.map +1 -0
- package/dist/agents/multi/index.js +34 -0
- package/dist/agents/multi/index.js.map +1 -0
- package/dist/agents/multi/runner.d.ts +79 -0
- package/dist/agents/multi/runner.d.ts.map +1 -0
- package/dist/agents/multi/runner.js +323 -0
- package/dist/agents/multi/runner.js.map +1 -0
- package/dist/agents/security-agent.d.ts +16 -0
- package/dist/agents/security-agent.d.ts.map +1 -0
- package/dist/agents/security-agent.js +299 -0
- package/dist/agents/security-agent.js.map +1 -0
- package/dist/agents/types.d.ts +373 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +14 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/agents/verification-agent.d.ts +23 -0
- package/dist/agents/verification-agent.d.ts.map +1 -0
- package/dist/agents/verification-agent.js +217 -0
- package/dist/agents/verification-agent.js.map +1 -0
- package/dist/agents/workflow.d.ts +30 -0
- package/dist/agents/workflow.d.ts.map +1 -0
- package/dist/agents/workflow.js +79 -0
- package/dist/agents/workflow.js.map +1 -0
- package/dist/analysis/enriched.d.ts +16 -0
- package/dist/analysis/enriched.d.ts.map +1 -0
- package/dist/analysis/enriched.js +297 -0
- package/dist/analysis/enriched.js.map +1 -0
- package/dist/analysis/llm-correlated-predicates.d.ts +80 -0
- package/dist/analysis/llm-correlated-predicates.d.ts.map +1 -0
- package/dist/analysis/llm-correlated-predicates.js +255 -0
- package/dist/analysis/llm-correlated-predicates.js.map +1 -0
- package/dist/analysis/llm-cross-file-taint.d.ts +86 -0
- package/dist/analysis/llm-cross-file-taint.d.ts.map +1 -0
- package/dist/analysis/llm-cross-file-taint.js +264 -0
- package/dist/analysis/llm-cross-file-taint.js.map +1 -0
- package/dist/analysis/pattern-discovery.d.ts +79 -0
- package/dist/analysis/pattern-discovery.d.ts.map +1 -0
- package/dist/analysis/pattern-discovery.js +447 -0
- package/dist/analysis/pattern-discovery.js.map +1 -0
- package/dist/cache/file-cache.d.ts +89 -0
- package/dist/cache/file-cache.d.ts.map +1 -0
- package/dist/cache/file-cache.js +208 -0
- package/dist/cache/file-cache.js.map +1 -0
- package/dist/cache/index.d.ts +6 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +5 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cli/args.d.ts +52 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +422 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/colors.d.ts +31 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/colors.js +80 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/commands/analyze-skill.d.ts +33 -0
- package/dist/cli/commands/analyze-skill.d.ts.map +1 -0
- package/dist/cli/commands/analyze-skill.js +217 -0
- package/dist/cli/commands/analyze-skill.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +18 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +30 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/benchmark-runner.d.ts +42 -0
- package/dist/cli/commands/benchmark-runner.d.ts.map +1 -0
- package/dist/cli/commands/benchmark-runner.js +18 -0
- package/dist/cli/commands/benchmark-runner.js.map +1 -0
- package/dist/cli/commands/benchmark.d.ts +11 -0
- package/dist/cli/commands/benchmark.d.ts.map +1 -0
- package/dist/cli/commands/benchmark.js +90 -0
- package/dist/cli/commands/benchmark.js.map +1 -0
- package/dist/cli/commands/dead-code.d.ts +11 -0
- package/dist/cli/commands/dead-code.d.ts.map +1 -0
- package/dist/cli/commands/dead-code.js +65 -0
- package/dist/cli/commands/dead-code.js.map +1 -0
- package/dist/cli/commands/generate-spec.d.ts +11 -0
- package/dist/cli/commands/generate-spec.d.ts.map +1 -0
- package/dist/cli/commands/generate-spec.js +67 -0
- package/dist/cli/commands/generate-spec.js.map +1 -0
- package/dist/cli/commands/health.d.ts +11 -0
- package/dist/cli/commands/health.d.ts.map +1 -0
- package/dist/cli/commands/health.js +67 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/project.d.ts +21 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +92 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +11 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +68 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/secrets.d.ts +11 -0
- package/dist/cli/commands/secrets.d.ts.map +1 -0
- package/dist/cli/commands/secrets.js +71 -0
- package/dist/cli/commands/secrets.js.map +1 -0
- package/dist/cli/commands/swarm.d.ts +20 -0
- package/dist/cli/commands/swarm.d.ts.map +1 -0
- package/dist/cli/commands/swarm.js +174 -0
- package/dist/cli/commands/swarm.js.map +1 -0
- package/dist/cli/config.d.ts +103 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +307 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/discovery.d.ts +31 -0
- package/dist/cli/discovery.d.ts.map +1 -0
- package/dist/cli/discovery.js +212 -0
- package/dist/cli/discovery.js.map +1 -0
- package/dist/cli/formatters/index.d.ts +15 -0
- package/dist/cli/formatters/index.d.ts.map +1 -0
- package/dist/cli/formatters/index.js +51 -0
- package/dist/cli/formatters/index.js.map +1 -0
- package/dist/cli/formatters/json.d.ts +11 -0
- package/dist/cli/formatters/json.d.ts.map +1 -0
- package/dist/cli/formatters/json.js +12 -0
- package/dist/cli/formatters/json.js.map +1 -0
- package/dist/cli/formatters/project-json.d.ts +11 -0
- package/dist/cli/formatters/project-json.d.ts.map +1 -0
- package/dist/cli/formatters/project-json.js +12 -0
- package/dist/cli/formatters/project-json.js.map +1 -0
- package/dist/cli/formatters/project-sarif.d.ts +11 -0
- package/dist/cli/formatters/project-sarif.d.ts.map +1 -0
- package/dist/cli/formatters/project-sarif.js +127 -0
- package/dist/cli/formatters/project-sarif.js.map +1 -0
- package/dist/cli/formatters/project-summary.d.ts +11 -0
- package/dist/cli/formatters/project-summary.d.ts.map +1 -0
- package/dist/cli/formatters/project-summary.js +202 -0
- package/dist/cli/formatters/project-summary.js.map +1 -0
- package/dist/cli/formatters/sarif-shared.d.ts +101 -0
- package/dist/cli/formatters/sarif-shared.d.ts.map +1 -0
- package/dist/cli/formatters/sarif-shared.js +57 -0
- package/dist/cli/formatters/sarif-shared.js.map +1 -0
- package/dist/cli/formatters/sarif.d.ts +12 -0
- package/dist/cli/formatters/sarif.d.ts.map +1 -0
- package/dist/cli/formatters/sarif.js +92 -0
- package/dist/cli/formatters/sarif.js.map +1 -0
- package/dist/cli/formatters/summary.d.ts +11 -0
- package/dist/cli/formatters/summary.d.ts.map +1 -0
- package/dist/cli/formatters/summary.js +240 -0
- package/dist/cli/formatters/summary.js.map +1 -0
- package/dist/cli/formatters/two-phase-summary.d.ts +11 -0
- package/dist/cli/formatters/two-phase-summary.d.ts.map +1 -0
- package/dist/cli/formatters/two-phase-summary.js +188 -0
- package/dist/cli/formatters/two-phase-summary.js.map +1 -0
- package/dist/cli/index.d.ts +15 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +555 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/components/clustering.d.ts +60 -0
- package/dist/components/clustering.d.ts.map +1 -0
- package/dist/components/clustering.js +129 -0
- package/dist/components/clustering.js.map +1 -0
- package/dist/components/enrichment.d.ts +45 -0
- package/dist/components/enrichment.d.ts.map +1 -0
- package/dist/components/enrichment.js +193 -0
- package/dist/components/enrichment.js.map +1 -0
- package/dist/components/index.d.ts +29 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +56 -0
- package/dist/components/index.js.map +1 -0
- package/dist/dead-code/detector.d.ts +200 -0
- package/dist/dead-code/detector.d.ts.map +1 -0
- package/dist/dead-code/detector.js +1003 -0
- package/dist/dead-code/detector.js.map +1 -0
- package/dist/dead-code/index.d.ts +7 -0
- package/dist/dead-code/index.d.ts.map +1 -0
- package/dist/dead-code/index.js +7 -0
- package/dist/dead-code/index.js.map +1 -0
- package/dist/extractors/index.d.ts +15 -0
- package/dist/extractors/index.d.ts.map +1 -0
- package/dist/extractors/index.js +14 -0
- package/dist/extractors/index.js.map +1 -0
- package/dist/extractors/natural-language.d.ts +46 -0
- package/dist/extractors/natural-language.d.ts.map +1 -0
- package/dist/extractors/natural-language.js +228 -0
- package/dist/extractors/natural-language.js.map +1 -0
- package/dist/extractors/tree-sitter.d.ts +33 -0
- package/dist/extractors/tree-sitter.d.ts.map +1 -0
- package/dist/extractors/tree-sitter.js +69 -0
- package/dist/extractors/tree-sitter.js.map +1 -0
- package/dist/extractors/types.d.ts +62 -0
- package/dist/extractors/types.d.ts.map +1 -0
- package/dist/extractors/types.js +54 -0
- package/dist/extractors/types.js.map +1 -0
- package/dist/health-score/calculator.d.ts +123 -0
- package/dist/health-score/calculator.d.ts.map +1 -0
- package/dist/health-score/calculator.js +444 -0
- package/dist/health-score/calculator.js.map +1 -0
- package/dist/health-score/index.d.ts +12 -0
- package/dist/health-score/index.d.ts.map +1 -0
- package/dist/health-score/index.js +14 -0
- package/dist/health-score/index.js.map +1 -0
- package/dist/health-score/metrics.d.ts +142 -0
- package/dist/health-score/metrics.d.ts.map +1 -0
- package/dist/health-score/metrics.js +332 -0
- package/dist/health-score/metrics.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/ax-client.d.ts +477 -0
- package/dist/llm/ax-client.d.ts.map +1 -0
- package/dist/llm/ax-client.js +1641 -0
- package/dist/llm/ax-client.js.map +1 -0
- package/dist/llm/config.d.ts +58 -0
- package/dist/llm/config.d.ts.map +1 -0
- package/dist/llm/config.js +97 -0
- package/dist/llm/config.js.map +1 -0
- package/dist/llm/discovery.d.ts +123 -0
- package/dist/llm/discovery.d.ts.map +1 -0
- package/dist/llm/discovery.js +505 -0
- package/dist/llm/discovery.js.map +1 -0
- package/dist/llm/enrichment.d.ts +108 -0
- package/dist/llm/enrichment.d.ts.map +1 -0
- package/dist/llm/enrichment.js +312 -0
- package/dist/llm/enrichment.js.map +1 -0
- package/dist/llm/index.d.ts +13 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +22 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/language-context.d.ts +64 -0
- package/dist/llm/language-context.d.ts.map +1 -0
- package/dist/llm/language-context.js +492 -0
- package/dist/llm/language-context.js.map +1 -0
- package/dist/llm/pattern-verification.d.ts +39 -0
- package/dist/llm/pattern-verification.d.ts.map +1 -0
- package/dist/llm/pattern-verification.js +127 -0
- package/dist/llm/pattern-verification.js.map +1 -0
- package/dist/llm/prompt-security.d.ts +120 -0
- package/dist/llm/prompt-security.d.ts.map +1 -0
- package/dist/llm/prompt-security.js +301 -0
- package/dist/llm/prompt-security.js.map +1 -0
- package/dist/llm/prompts/index.d.ts +31 -0
- package/dist/llm/prompts/index.d.ts.map +1 -0
- package/dist/llm/prompts/index.js +92 -0
- package/dist/llm/prompts/index.js.map +1 -0
- package/dist/llm/prompts/rust.d.ts +30 -0
- package/dist/llm/prompts/rust.d.ts.map +1 -0
- package/dist/llm/prompts/rust.js +121 -0
- package/dist/llm/prompts/rust.js.map +1 -0
- package/dist/llm/schemas.d.ts +892 -0
- package/dist/llm/schemas.d.ts.map +1 -0
- package/dist/llm/schemas.js +258 -0
- package/dist/llm/schemas.js.map +1 -0
- package/dist/llm/verification.d.ts +127 -0
- package/dist/llm/verification.d.ts.map +1 -0
- package/dist/llm/verification.js +394 -0
- package/dist/llm/verification.js.map +1 -0
- package/dist/project/analyzer.d.ts +30 -0
- package/dist/project/analyzer.d.ts.map +1 -0
- package/dist/project/analyzer.js +358 -0
- package/dist/project/analyzer.js.map +1 -0
- package/dist/project/call-graph.d.ts +22 -0
- package/dist/project/call-graph.d.ts.map +1 -0
- package/dist/project/call-graph.js +246 -0
- package/dist/project/call-graph.js.map +1 -0
- package/dist/project/index.d.ts +18 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +20 -0
- package/dist/project/index.js.map +1 -0
- package/dist/project/taint-paths.d.ts +22 -0
- package/dist/project/taint-paths.d.ts.map +1 -0
- package/dist/project/taint-paths.js +265 -0
- package/dist/project/taint-paths.js.map +1 -0
- package/dist/project/two-phase-analyzer.d.ts +143 -0
- package/dist/project/two-phase-analyzer.d.ts.map +1 -0
- package/dist/project/two-phase-analyzer.js +646 -0
- package/dist/project/two-phase-analyzer.js.map +1 -0
- package/dist/project/type-hierarchy.d.ts +28 -0
- package/dist/project/type-hierarchy.d.ts.map +1 -0
- package/dist/project/type-hierarchy.js +218 -0
- package/dist/project/type-hierarchy.js.map +1 -0
- package/dist/secret-scan/index.d.ts +12 -0
- package/dist/secret-scan/index.d.ts.map +1 -0
- package/dist/secret-scan/index.js +14 -0
- package/dist/secret-scan/index.js.map +1 -0
- package/dist/secret-scan/patterns.d.ts +38 -0
- package/dist/secret-scan/patterns.d.ts.map +1 -0
- package/dist/secret-scan/patterns.js +473 -0
- package/dist/secret-scan/patterns.js.map +1 -0
- package/dist/secret-scan/scanner.d.ts +162 -0
- package/dist/secret-scan/scanner.d.ts.map +1 -0
- package/dist/secret-scan/scanner.js +511 -0
- package/dist/secret-scan/scanner.js.map +1 -0
- package/dist/security-scan/index.d.ts +12 -0
- package/dist/security-scan/index.d.ts.map +1 -0
- package/dist/security-scan/index.js +15 -0
- package/dist/security-scan/index.js.map +1 -0
- package/dist/security-scan/owasp-mapping.d.ts +29 -0
- package/dist/security-scan/owasp-mapping.d.ts.map +1 -0
- package/dist/security-scan/owasp-mapping.js +246 -0
- package/dist/security-scan/owasp-mapping.js.map +1 -0
- package/dist/security-scan/scanner.d.ts +204 -0
- package/dist/security-scan/scanner.d.ts.map +1 -0
- package/dist/security-scan/scanner.js +693 -0
- package/dist/security-scan/scanner.js.map +1 -0
- package/dist/security-scan/trend-tracker.d.ts +150 -0
- package/dist/security-scan/trend-tracker.d.ts.map +1 -0
- package/dist/security-scan/trend-tracker.js +299 -0
- package/dist/security-scan/trend-tracker.js.map +1 -0
- package/dist/skills/bundle-loader.d.ts +26 -0
- package/dist/skills/bundle-loader.d.ts.map +1 -0
- package/dist/skills/bundle-loader.js +284 -0
- package/dist/skills/bundle-loader.js.map +1 -0
- package/dist/skills/capability-mismatch.d.ts +21 -0
- package/dist/skills/capability-mismatch.d.ts.map +1 -0
- package/dist/skills/capability-mismatch.js +188 -0
- package/dist/skills/capability-mismatch.js.map +1 -0
- package/dist/skills/index.d.ts +10 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +9 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-analyzer.d.ts +16 -0
- package/dist/skills/skill-analyzer.d.ts.map +1 -0
- package/dist/skills/skill-analyzer.js +361 -0
- package/dist/skills/skill-analyzer.js.map +1 -0
- package/dist/skills/types.d.ts +195 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +7 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/specifica/conflict-resolver.d.ts +23 -0
- package/dist/specifica/conflict-resolver.d.ts.map +1 -0
- package/dist/specifica/conflict-resolver.js +129 -0
- package/dist/specifica/conflict-resolver.js.map +1 -0
- package/dist/specifica/evidence-aggregator.d.ts +33 -0
- package/dist/specifica/evidence-aggregator.d.ts.map +1 -0
- package/dist/specifica/evidence-aggregator.js +236 -0
- package/dist/specifica/evidence-aggregator.js.map +1 -0
- package/dist/specifica/evidence-extractor.d.ts +13 -0
- package/dist/specifica/evidence-extractor.d.ts.map +1 -0
- package/dist/specifica/evidence-extractor.js +431 -0
- package/dist/specifica/evidence-extractor.js.map +1 -0
- package/dist/specifica/feature-clustering.d.ts +19 -0
- package/dist/specifica/feature-clustering.d.ts.map +1 -0
- package/dist/specifica/feature-clustering.js +231 -0
- package/dist/specifica/feature-clustering.js.map +1 -0
- package/dist/specifica/generator.d.ts +16 -0
- package/dist/specifica/generator.d.ts.map +1 -0
- package/dist/specifica/generator.js +277 -0
- package/dist/specifica/generator.js.map +1 -0
- package/dist/specifica/index.d.ts +15 -0
- package/dist/specifica/index.d.ts.map +1 -0
- package/dist/specifica/index.js +18 -0
- package/dist/specifica/index.js.map +1 -0
- package/dist/specifica/prompts.d.ts +21 -0
- package/dist/specifica/prompts.d.ts.map +1 -0
- package/dist/specifica/prompts.js +196 -0
- package/dist/specifica/prompts.js.map +1 -0
- package/dist/specifica/spec-generator.d.ts +22 -0
- package/dist/specifica/spec-generator.d.ts.map +1 -0
- package/dist/specifica/spec-generator.js +229 -0
- package/dist/specifica/spec-generator.js.map +1 -0
- package/dist/specifica/types.d.ts +213 -0
- package/dist/specifica/types.d.ts.map +1 -0
- package/dist/specifica/types.js +7 -0
- package/dist/specifica/types.js.map +1 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +51 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Enrichment Engine (Phase 1)
|
|
3
|
+
*
|
|
4
|
+
* Uses LLM to discover:
|
|
5
|
+
* - Taint sources beyond YAML patterns
|
|
6
|
+
* - Taint sinks beyond YAML patterns
|
|
7
|
+
* - Class/method roles (controller, service, repository)
|
|
8
|
+
* - Virtual call resolution
|
|
9
|
+
*
|
|
10
|
+
* Supports language-aware prompts for Java, Python, JavaScript/TypeScript, and Rust.
|
|
11
|
+
*/
|
|
12
|
+
import { getAxLLMClient } from './ax-client.js';
|
|
13
|
+
import { getLanguageContext, generateSourceDiscoveryPrompt, generateSinkDiscoveryPrompt, generateRoleClassificationPrompt, } from './language-context.js';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Prompt Templates
|
|
16
|
+
// ============================================================================
|
|
17
|
+
const ROLE_CLASSIFICATION_PROMPT = `You are a security expert analyzing Java code.
|
|
18
|
+
Classify the role of this class based on its name, methods, and annotations.
|
|
19
|
+
|
|
20
|
+
Class: {className}
|
|
21
|
+
Methods: {methodNames}
|
|
22
|
+
Annotations: {annotations}
|
|
23
|
+
Imports: {imports}
|
|
24
|
+
|
|
25
|
+
Respond in JSON format:
|
|
26
|
+
{
|
|
27
|
+
"role": "controller" | "service" | "repository" | "utility" | "entity" | "unknown",
|
|
28
|
+
"confidence": 0.0-1.0,
|
|
29
|
+
"reasoning": "explanation",
|
|
30
|
+
"indicators": ["list", "of", "indicators"]
|
|
31
|
+
}`;
|
|
32
|
+
// Note: This prompt is a fallback. The engine uses generateSourceDiscoveryPrompt() from language-context.ts
|
|
33
|
+
const SOURCE_DISCOVERY_PROMPT = `You are a security expert analyzing code for taint sources.
|
|
34
|
+
Find user-controlled input sources NOT already identified.
|
|
35
|
+
|
|
36
|
+
Method code:
|
|
37
|
+
\`\`\`
|
|
38
|
+
{methodCode}
|
|
39
|
+
\`\`\`
|
|
40
|
+
|
|
41
|
+
Method: {methodName}
|
|
42
|
+
Class role: {classRole}
|
|
43
|
+
Already identified sources: {existingSources}
|
|
44
|
+
|
|
45
|
+
## SEMANTIC CATEGORIES OF SOURCES (reason about data origin, not method names):
|
|
46
|
+
|
|
47
|
+
**1. Network Input** - Data from HTTP/network requests
|
|
48
|
+
**2. File/Stream Input** - Data read from external sources
|
|
49
|
+
**3. Database Input** - Query results that may contain user data
|
|
50
|
+
**4. Environment Input** - Config that could be attacker-controlled
|
|
51
|
+
**5. Inter-Process Input** - Data from other processes/services
|
|
52
|
+
|
|
53
|
+
KEY QUESTION: Does this data originate from OUTSIDE the application's trust boundary?
|
|
54
|
+
|
|
55
|
+
## WHAT TO IGNORE:
|
|
56
|
+
- Constants, literals, hardcoded strings
|
|
57
|
+
- Internal configuration values
|
|
58
|
+
- Data constructed entirely within the application
|
|
59
|
+
|
|
60
|
+
Respond in JSON format:
|
|
61
|
+
{
|
|
62
|
+
"additionalSources": [
|
|
63
|
+
{
|
|
64
|
+
"line": number,
|
|
65
|
+
"variable": "variable name",
|
|
66
|
+
"type": "http_param | http_body | http_header | http_cookie | http_path | io_input | env_input | db_input",
|
|
67
|
+
"confidence": 0.0-1.0,
|
|
68
|
+
"reasoning": "explanation"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}`;
|
|
72
|
+
// Note: This prompt is a fallback. The engine uses generateSinkDiscoveryPrompt() from language-context.ts
|
|
73
|
+
const SINK_DISCOVERY_PROMPT = `You are a security expert analyzing code for security sinks.
|
|
74
|
+
Find dangerous operations NOT already identified.
|
|
75
|
+
|
|
76
|
+
Method code:
|
|
77
|
+
\`\`\`
|
|
78
|
+
{methodCode}
|
|
79
|
+
\`\`\`
|
|
80
|
+
|
|
81
|
+
Method: {methodName}
|
|
82
|
+
Method calls: {methodCalls}
|
|
83
|
+
Already identified sinks: {existingSinks}
|
|
84
|
+
|
|
85
|
+
## SEMANTIC CATEGORIES OF SINKS (reason about EFFECT, not method names):
|
|
86
|
+
|
|
87
|
+
**1. Data Query Execution** (CWE-89, CWE-943) - Operations that execute queries
|
|
88
|
+
**2. System Command Execution** (CWE-78) - Operations that run system commands
|
|
89
|
+
**3. Output Rendering** (CWE-79) - Operations that render content to users
|
|
90
|
+
**4. File System Operations** (CWE-22) - Operations that access file paths
|
|
91
|
+
**5. Code Evaluation** (CWE-94) - Operations that interpret data as code
|
|
92
|
+
**6. Deserialization** (CWE-502) - Operations that reconstruct objects from data
|
|
93
|
+
**7. Directory/Query Injection** (CWE-90, CWE-643) - LDAP/XPath queries
|
|
94
|
+
**8. Network Requests** (CWE-918) - Operations with user-controlled URLs
|
|
95
|
+
|
|
96
|
+
KEY REASONING:
|
|
97
|
+
1. What EFFECT does this operation have?
|
|
98
|
+
2. Can EXTERNAL DATA influence that effect?
|
|
99
|
+
3. Is there SANITIZATION that makes it safe?
|
|
100
|
+
|
|
101
|
+
## WHAT TO IGNORE:
|
|
102
|
+
- Logging operations
|
|
103
|
+
- Parameterized/bound operations (data separate from structure)
|
|
104
|
+
- Internal method calls with no dangerous effects
|
|
105
|
+
|
|
106
|
+
Respond in JSON format:
|
|
107
|
+
{
|
|
108
|
+
"additionalSinks": [
|
|
109
|
+
{
|
|
110
|
+
"line": number,
|
|
111
|
+
"method": "operation description",
|
|
112
|
+
"type": "sql_injection | command_injection | xss | path_traversal | code_injection | deserialization | ldap_injection | xpath_injection | ssrf",
|
|
113
|
+
"cwe": "CWE-XX",
|
|
114
|
+
"argPositions": [0],
|
|
115
|
+
"confidence": 0.0-1.0,
|
|
116
|
+
"reasoning": "explanation"
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
}`;
|
|
120
|
+
// ============================================================================
|
|
121
|
+
// Enrichment Engine
|
|
122
|
+
// ============================================================================
|
|
123
|
+
export class EnrichmentEngine {
|
|
124
|
+
client;
|
|
125
|
+
config;
|
|
126
|
+
language;
|
|
127
|
+
constructor(client, language = 'java') {
|
|
128
|
+
this.client = client || getAxLLMClient();
|
|
129
|
+
this.config = this.client.getEnrichmentConfig();
|
|
130
|
+
this.language = language;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Set the language for enrichment (affects prompts)
|
|
134
|
+
*/
|
|
135
|
+
setLanguage(language) {
|
|
136
|
+
this.language = language;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get the current language context
|
|
140
|
+
*/
|
|
141
|
+
getLanguageContext() {
|
|
142
|
+
return getLanguageContext(this.language);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Classify the role of a class
|
|
146
|
+
*/
|
|
147
|
+
async classifyRole(className, methods, annotations, imports) {
|
|
148
|
+
if (!this.config.enableRoleClassification) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
// Use language-aware prompt
|
|
153
|
+
const prompt = generateRoleClassificationPrompt(this.language);
|
|
154
|
+
const result = await this.client.classifyRoleWithPrompt(prompt, {
|
|
155
|
+
className,
|
|
156
|
+
methodNames: methods.map(m => m.name).join(', '),
|
|
157
|
+
annotations: annotations.join(', ') || 'none',
|
|
158
|
+
imports: imports.slice(0, 20).join(', '),
|
|
159
|
+
});
|
|
160
|
+
if (result && result.confidence >= this.config.confidenceThreshold) {
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
console.error('Role classification failed:', error);
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Discover additional taint sources in a method
|
|
171
|
+
*/
|
|
172
|
+
async discoverSources(methodCode, methodName, classRole, existingSources) {
|
|
173
|
+
try {
|
|
174
|
+
// Use language-aware prompt
|
|
175
|
+
const prompt = generateSourceDiscoveryPrompt(this.language);
|
|
176
|
+
const result = await this.client.discoverSourcesWithPrompt(prompt, {
|
|
177
|
+
methodCode,
|
|
178
|
+
methodName,
|
|
179
|
+
classRole,
|
|
180
|
+
existingSources: existingSources.map(s => `${s.type}:${s.line}`).join(', ') || 'none',
|
|
181
|
+
});
|
|
182
|
+
if (result) {
|
|
183
|
+
return result.filter((s) => s.confidence >= this.config.confidenceThreshold);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
console.error('Source discovery failed:', error);
|
|
188
|
+
}
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Discover additional taint sinks in a method
|
|
193
|
+
*/
|
|
194
|
+
async discoverSinks(methodCode, methodName, methodCalls, existingSinks) {
|
|
195
|
+
try {
|
|
196
|
+
// Use language-aware prompt
|
|
197
|
+
const prompt = generateSinkDiscoveryPrompt(this.language);
|
|
198
|
+
const result = await this.client.discoverSinksWithPrompt(prompt, {
|
|
199
|
+
methodCode,
|
|
200
|
+
methodName,
|
|
201
|
+
methodCalls: methodCalls.map(c => `${c.receiver || ''}.${c.method_name}()`).join(', '),
|
|
202
|
+
existingSinks: existingSinks.map(s => `${s.type}:${s.line}`).join(', ') || 'none',
|
|
203
|
+
});
|
|
204
|
+
if (result) {
|
|
205
|
+
return result.filter((s) => s.confidence >= this.config.confidenceThreshold);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
console.error('Sink discovery failed:', error);
|
|
210
|
+
}
|
|
211
|
+
return [];
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Resolve virtual/interface method calls to implementations
|
|
215
|
+
*/
|
|
216
|
+
async resolveVirtualCall(callExpression, interfaceType, availableImplementations, context) {
|
|
217
|
+
if (!this.config.enableVirtualDispatch) {
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
try {
|
|
221
|
+
const result = await this.client.resolveVirtualCall({
|
|
222
|
+
callExpression,
|
|
223
|
+
interfaceType,
|
|
224
|
+
availableImplementations: availableImplementations.join(', '),
|
|
225
|
+
context,
|
|
226
|
+
});
|
|
227
|
+
if (result && result.confidence >= this.config.confidenceThreshold) {
|
|
228
|
+
return {
|
|
229
|
+
callLine: 0,
|
|
230
|
+
interfaceType,
|
|
231
|
+
resolvedImplementation: result.resolvedImplementation,
|
|
232
|
+
confidence: result.confidence,
|
|
233
|
+
reasoning: result.reasoning,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
console.error('Virtual call resolution failed:', error);
|
|
239
|
+
}
|
|
240
|
+
return undefined;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Enrich a complete type (class/interface)
|
|
244
|
+
*/
|
|
245
|
+
async enrichType(type, sourceCode, imports, existingSources, existingSinks) {
|
|
246
|
+
const result = {
|
|
247
|
+
additionalSources: [],
|
|
248
|
+
additionalSinks: [],
|
|
249
|
+
virtualCallResolutions: [],
|
|
250
|
+
enrichedAt: new Date().toISOString(),
|
|
251
|
+
modelUsed: this.client.getPhaseConfig('enrichment').model,
|
|
252
|
+
};
|
|
253
|
+
// Classify role
|
|
254
|
+
result.role = await this.classifyRole(type.name, type.methods, type.annotations, imports);
|
|
255
|
+
// Process methods in batches
|
|
256
|
+
const methodBatches = this.batchMethods(type.methods);
|
|
257
|
+
for (const batch of methodBatches) {
|
|
258
|
+
for (const method of batch) {
|
|
259
|
+
// Extract method code from source
|
|
260
|
+
const methodCode = this.extractMethodCode(sourceCode, method);
|
|
261
|
+
if (!methodCode)
|
|
262
|
+
continue;
|
|
263
|
+
// Discover sources and sinks in parallel for each method
|
|
264
|
+
const [sources, sinks] = await Promise.all([
|
|
265
|
+
this.discoverSources(methodCode, method.name, result.role?.role || 'unknown', existingSources),
|
|
266
|
+
this.discoverSinks(methodCode, method.name, [], // No call info available at this level
|
|
267
|
+
existingSinks),
|
|
268
|
+
]);
|
|
269
|
+
result.additionalSources.push(...sources);
|
|
270
|
+
result.additionalSinks.push(...sinks);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return result;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Batch methods for efficient LLM calls
|
|
277
|
+
*/
|
|
278
|
+
batchMethods(methods) {
|
|
279
|
+
const batches = [];
|
|
280
|
+
for (let i = 0; i < methods.length; i += this.config.maxMethodsPerRequest) {
|
|
281
|
+
batches.push(methods.slice(i, i + this.config.maxMethodsPerRequest));
|
|
282
|
+
}
|
|
283
|
+
return batches;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Extract method code from source
|
|
287
|
+
*/
|
|
288
|
+
extractMethodCode(sourceCode, method) {
|
|
289
|
+
const lines = sourceCode.split('\n');
|
|
290
|
+
if (method.start_line <= 0 || method.end_line > lines.length) {
|
|
291
|
+
return undefined;
|
|
292
|
+
}
|
|
293
|
+
return lines.slice(method.start_line - 1, method.end_line).join('\n');
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// ============================================================================
|
|
297
|
+
// Convenience Functions
|
|
298
|
+
// ============================================================================
|
|
299
|
+
/**
|
|
300
|
+
* Get a new enrichment engine instance for a specific language
|
|
301
|
+
* Always creates a fresh instance for per-request isolation
|
|
302
|
+
*/
|
|
303
|
+
export function getEnrichmentEngine(language = 'java', client) {
|
|
304
|
+
return new EnrichmentEngine(client, language);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Enrich a type with LLM-discovered sources/sinks
|
|
308
|
+
*/
|
|
309
|
+
export async function enrichType(type, sourceCode, imports, existingSources, existingSinks, language = 'java') {
|
|
310
|
+
return getEnrichmentEngine(language).enrichType(type, sourceCode, imports, existingSources, existingSinks);
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=enrichment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrichment.js","sourceRoot":"","sources":["../../src/llm/enrichment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Integration Module
|
|
3
|
+
*
|
|
4
|
+
* Provides LLM-based enrichment and verification capabilities.
|
|
5
|
+
*/
|
|
6
|
+
export { defaultLLMConfig, createLLMConfig, validateLLMConfig, type LLMConfig, type PhaseConfig } from './config.js';
|
|
7
|
+
export { AxLLMClient, getAxLLMClient, enrichmentSignature, verificationSignature, listIndexSignature, correlatedPredicateSignature, crossFileTaintSignature, roleClassificationSignature, sourceDiscoverySignature, sinkDiscoverySignature, virtualCallResolutionSignature, patternVerificationSignature, } from './ax-client.js';
|
|
8
|
+
export { EnrichmentEngine, getEnrichmentEngine, enrichType, type EnrichmentResult, type RoleClassificationResult, type DiscoveredSource, type DiscoveredSink, type VirtualCallResolution, } from './enrichment.js';
|
|
9
|
+
export { VerificationEngine, getVerificationEngine, verifyTaintPath, verifyTaintPathsBatch, verifyVulnerability, type VerificationResult, type VerificationInput, type VerificationVerdict, type Exploitability, type BatchVerificationInput, type BatchVerificationResult, } from './verification.js';
|
|
10
|
+
export { DiscoveryEngine, getDiscoveryEngine, discoverVulnerabilities, discoveryResultsToFindings, type DiscoveryResult, type DiscoveredVulnerability, type DiscoveryOptions, } from './discovery.js';
|
|
11
|
+
export { getLanguageContext, generateSourceDiscoveryPrompt, generateSinkDiscoveryPrompt, generateRoleClassificationPrompt, getCWEGuidance, type LanguageContext, type SourcePattern, type SinkPattern, } from './language-context.js';
|
|
12
|
+
export { sanitizeCodeForPrompt, sanitizeListForPrompt, sanitizeObjectForPrompt, wrapUserCode, formatSystemPrompt, formatCodeBlock, getModelPromptConfig, detectModelFamily, isInputSafe, logInjectionAttempt, type ModelFamily, type ModelPromptConfig, } from './prompt-security.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAGrH,OAAO,EACL,WAAW,EACX,cAAc,EAEd,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,EACtB,8BAA8B,EAC9B,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,EAChC,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Integration Module
|
|
3
|
+
*
|
|
4
|
+
* Provides LLM-based enrichment and verification capabilities.
|
|
5
|
+
*/
|
|
6
|
+
// Configuration
|
|
7
|
+
export { defaultLLMConfig, createLLMConfig, validateLLMConfig } from './config.js';
|
|
8
|
+
// New Ax-LLM client (DSPy-style with typed signatures)
|
|
9
|
+
export { AxLLMClient, getAxLLMClient,
|
|
10
|
+
// Signatures
|
|
11
|
+
enrichmentSignature, verificationSignature, listIndexSignature, correlatedPredicateSignature, crossFileTaintSignature, roleClassificationSignature, sourceDiscoverySignature, sinkDiscoverySignature, virtualCallResolutionSignature, patternVerificationSignature, } from './ax-client.js';
|
|
12
|
+
// Enrichment (Phase 1)
|
|
13
|
+
export { EnrichmentEngine, getEnrichmentEngine, enrichType, } from './enrichment.js';
|
|
14
|
+
// Verification (Phase 2)
|
|
15
|
+
export { VerificationEngine, getVerificationEngine, verifyTaintPath, verifyTaintPathsBatch, verifyVulnerability, } from './verification.js';
|
|
16
|
+
// Discovery Mode (for methods with no static findings)
|
|
17
|
+
export { DiscoveryEngine, getDiscoveryEngine, discoverVulnerabilities, discoveryResultsToFindings, } from './discovery.js';
|
|
18
|
+
// Language-Aware Prompts (for multi-language support)
|
|
19
|
+
export { getLanguageContext, generateSourceDiscoveryPrompt, generateSinkDiscoveryPrompt, generateRoleClassificationPrompt, getCWEGuidance, } from './language-context.js';
|
|
20
|
+
// Prompt Security (for robustness against prompt injection)
|
|
21
|
+
export { sanitizeCodeForPrompt, sanitizeListForPrompt, sanitizeObjectForPrompt, wrapUserCode, formatSystemPrompt, formatCodeBlock, getModelPromptConfig, detectModelFamily, isInputSafe, logInjectionAttempt, } from './prompt-security.js';
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAoC,MAAM,aAAa,CAAC;AAErH,uDAAuD;AACvD,OAAO,EACL,WAAW,EACX,cAAc;AACd,aAAa;AACb,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,EACtB,8BAA8B,EAC9B,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AAExB,uBAAuB;AACvB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,GAMX,MAAM,iBAAiB,CAAC;AAEzB,yBAAyB;AACzB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,GAOpB,MAAM,mBAAmB,CAAC;AAE3B,uDAAuD;AACvD,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,GAI3B,MAAM,gBAAgB,CAAC;AAExB,sDAAsD;AACtD,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,EAChC,cAAc,GAIf,MAAM,uBAAuB,CAAC;AAE/B,4DAA4D;AAC5D,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,mBAAmB,GAGpB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language-Specific Context for LLM Prompts
|
|
3
|
+
*
|
|
4
|
+
* Provides language-aware examples, patterns, and guidance for
|
|
5
|
+
* enrichment and verification across Java, Python, JavaScript/TypeScript, and Rust.
|
|
6
|
+
*/
|
|
7
|
+
import type { SupportedLanguage } from 'circle-ir';
|
|
8
|
+
export interface LanguageContext {
|
|
9
|
+
/** Display name for prompts */
|
|
10
|
+
name: string;
|
|
11
|
+
/** Code fence language identifier */
|
|
12
|
+
codeFence: string;
|
|
13
|
+
/** Common web frameworks */
|
|
14
|
+
frameworks: string[];
|
|
15
|
+
/** HTTP source patterns */
|
|
16
|
+
httpSources: SourcePattern[];
|
|
17
|
+
/** Common sanitizers by CWE */
|
|
18
|
+
sanitizers: Record<string, string[]>;
|
|
19
|
+
/** Sink patterns by CWE */
|
|
20
|
+
sinkPatterns: Record<string, SinkPattern[]>;
|
|
21
|
+
/** Example source discovery code */
|
|
22
|
+
sourceExamples: string;
|
|
23
|
+
/** Example sink discovery code */
|
|
24
|
+
sinkExamples: string;
|
|
25
|
+
}
|
|
26
|
+
export interface SourcePattern {
|
|
27
|
+
pattern: string;
|
|
28
|
+
type: string;
|
|
29
|
+
description: string;
|
|
30
|
+
}
|
|
31
|
+
export interface SinkPattern {
|
|
32
|
+
pattern: string;
|
|
33
|
+
safe: string;
|
|
34
|
+
description: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the language context for a supported language
|
|
38
|
+
*/
|
|
39
|
+
export declare function getLanguageContext(language: SupportedLanguage): LanguageContext;
|
|
40
|
+
/**
|
|
41
|
+
* Generate source discovery prompt for a specific language
|
|
42
|
+
*
|
|
43
|
+
* Uses semantic-guided prompts that focus on security concepts rather than
|
|
44
|
+
* specific API patterns. This allows the LLM to reason about data flow
|
|
45
|
+
* semantics and discover sources in unfamiliar frameworks or custom code.
|
|
46
|
+
*/
|
|
47
|
+
export declare function generateSourceDiscoveryPrompt(language: SupportedLanguage): string;
|
|
48
|
+
/**
|
|
49
|
+
* Generate sink discovery prompt for a specific language
|
|
50
|
+
*
|
|
51
|
+
* Uses semantic-guided prompts that focus on what operations DO
|
|
52
|
+
* rather than specific API names. This allows the LLM to discover
|
|
53
|
+
* dangerous operations in unfamiliar frameworks or custom code.
|
|
54
|
+
*/
|
|
55
|
+
export declare function generateSinkDiscoveryPrompt(language: SupportedLanguage): string;
|
|
56
|
+
/**
|
|
57
|
+
* Generate role classification prompt for a specific language
|
|
58
|
+
*/
|
|
59
|
+
export declare function generateRoleClassificationPrompt(language: SupportedLanguage): string;
|
|
60
|
+
/**
|
|
61
|
+
* Get CWE-specific verification guidance for a language
|
|
62
|
+
*/
|
|
63
|
+
export declare function getCWEGuidance(language: SupportedLanguage, cwe: string): string;
|
|
64
|
+
//# sourceMappingURL=language-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-context.d.ts","sourceRoot":"","sources":["../../src/llm/language-context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAMnD,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,2BAA2B;IAC3B,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACrC,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5C,oCAAoC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AA8QD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe,CAE/E;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAiEjF;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CA4F/E;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CA6BpF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAkB/E"}
|