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
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.1.0] - 2026-03-05
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **AI Skills Analysis**: Complete security analysis framework for AI agent skills (OpenClaw, MCP servers)
|
|
13
|
+
- `analyze-skill` CLI command for skill directory analysis
|
|
14
|
+
- Multi-artifact analysis: SKILL.md (natural language) + code files + MCP config
|
|
15
|
+
- LLM-based capability mismatch detection using semantic comparison
|
|
16
|
+
- Trust score calculation (0-100%) based on severity-weighted findings
|
|
17
|
+
- Test file exclusion to eliminate false positives (74% FP reduction overall)
|
|
18
|
+
- Validation utility recognition (normalizePath, isPathWithin, etc.)
|
|
19
|
+
- Safe utility methods whitelist for external_taint_escape detection
|
|
20
|
+
- JSON and markdown output formats
|
|
21
|
+
- Real-world validated on official MCP servers (fetch: 84% trust score)
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- **LLM Timeout Configuration**: Increased enrichment phase timeout from 15s to 60s to support large SKILL.md files (10KB+)
|
|
26
|
+
- **Sanitizer Patterns**: Added path validation and normalization methods (normalizePath, isPathWithinAllowedDirectories, relative, join)
|
|
27
|
+
- **Bundle Loader**: Added comprehensive test file exclusion (\__tests__/, *.test.ts, *.spec.js, vitest.config.ts, etc.)
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **external_taint_escape False Positives**: Eliminated 10 false positives by excluding validation utilities (tailFile, headFile, readFileContent, minimatch, etc.)
|
|
32
|
+
- **SKILL.md Extraction Timeouts**: Large documentation files now extract successfully without timing out
|
|
33
|
+
- **Test Contamination**: Test files no longer analyzed as production code (61% FP reduction on filesystem server)
|
|
34
|
+
|
|
35
|
+
### Performance
|
|
36
|
+
|
|
37
|
+
- **Analysis Speed**: 50% faster on typical skills due to timeout fixes (50.44s → 25.20s on filesystem server)
|
|
38
|
+
- **False Positive Reduction**: 74% overall (91 → 24 findings on filesystem server)
|
|
39
|
+
|
|
40
|
+
## [3.4.0] - 2026-02-23
|
|
41
|
+
|
|
42
|
+
### Changed
|
|
43
|
+
|
|
44
|
+
- **Discovery Mode Validated**: Tested 8 LLM models in discovery mode - 7 of 8 improved 31-92% over static baseline
|
|
45
|
+
- **Default Model Updated**: Changed default from `gemini-pro-latest` to `gpt-oss-120b` (FREE, 73/120, beats CodeQL and IRIS+GPT-4)
|
|
46
|
+
- **Documentation Consolidated**: Comprehensive discovery mode guide added to MODEL_SCORECARD.md with usage examples and troubleshooting
|
|
47
|
+
|
|
48
|
+
### Removed
|
|
49
|
+
|
|
50
|
+
- **Verification Mode Removed**: ALL models failed in verification mode (≤51/120, at or below static baseline)
|
|
51
|
+
- Removed `--llm` flag from benchmark runner
|
|
52
|
+
- Removed `verifyWithLLM()` function and all verification code paths
|
|
53
|
+
- Verification mode asked LLMs to judge sanitizer effectiveness (requires deep security expertise) - models pattern-matched instead
|
|
54
|
+
|
|
55
|
+
### Added
|
|
56
|
+
|
|
57
|
+
- **Research Documentation**: "Why Discovery Works" section explaining task difficulty differences
|
|
58
|
+
- **Model Rankings**: Complete performance comparison of 8 models across 120 real-world CVEs
|
|
59
|
+
|
|
60
|
+
### Discovery Mode Results
|
|
61
|
+
|
|
62
|
+
| Model | Score | vs Static | Tier |
|
|
63
|
+
|-------|-------|-----------|------|
|
|
64
|
+
| Claude Opus 4.6 | 98/120 (81.7%) | +92% | Premium |
|
|
65
|
+
| Grok-Code | 94/120 (78.3%) | +84% | Budget |
|
|
66
|
+
| DeepSeek V3.2 | 91/120 (75.8%) | +78% | Budget |
|
|
67
|
+
| Claude Haiku 4.5 | 85/120 (70.8%) | +67% | Budget |
|
|
68
|
+
| GPT-5.2 | 82/120 (68.3%) | +61% | Premium |
|
|
69
|
+
| **gpt-oss-120b (FREE)** | **73/120 (60.8%)** | **+43%** | **FREE** |
|
|
70
|
+
| Gemini Pro | 67/120 (55.8%) | +31% | Premium |
|
|
71
|
+
|
|
72
|
+
**Key Finding**: Discovery mode (trace taint flows) works universally better than verification mode (judge sanitizers) because it matches LLM strengths (code flow analysis) rather than weaknesses (security domain expertise).
|
|
73
|
+
|
|
74
|
+
### Breaking Changes
|
|
75
|
+
|
|
76
|
+
- `--llm` flag removed (use `--llm-discovery` instead)
|
|
77
|
+
- Verification mode API removed from codebase
|
|
78
|
+
|
|
79
|
+
## [1.0.0] - 2025-02-19
|
|
80
|
+
|
|
81
|
+
### Added
|
|
82
|
+
|
|
83
|
+
- **LLM Integration**: ax-llm client with DSPy-style typed signatures for enrichment, verification, and discovery
|
|
84
|
+
- **Mastra Agents**: AI agent orchestration (enrichment, verification, cross-file, orchestrator)
|
|
85
|
+
- **Swarm Analysis**: Parallel multi-file analysis with configurable concurrency
|
|
86
|
+
- **Security Scan**: Continuous scanning with OWASP Top 10 mapping and trend tracking
|
|
87
|
+
- **Dead Code Detection**: Entry point analysis, call graph construction, reachability checks
|
|
88
|
+
- **Secret Scanning**: Pattern-based detection (AWS, GitHub, Stripe, etc.) in code and Git history
|
|
89
|
+
- **Health Score**: Weighted codebase health scoring (security, maintainability, quality, performance)
|
|
90
|
+
- **Action Queue**: Aggregate findings into prioritized action items with sprint planning and export (CSV, Jira, Markdown)
|
|
91
|
+
- **CLI**: Command-line interface for file/directory analysis, benchmarks, scanning, and reporting
|
|
92
|
+
- **Two-Phase Project Analyzer**: Per-file LLM enrichment + cross-file LLM analysis
|
|
93
|
+
- **File Cache**: Caching layer for analysis results
|
|
94
|
+
|
|
95
|
+
### Benchmark Results
|
|
96
|
+
|
|
97
|
+
- **OWASP Benchmark**: +100% (1415/1415 test cases)
|
|
98
|
+
- **Juliet Test Suite**: +100% (156/156 test cases)
|
|
99
|
+
- **SecuriBench Micro**: 97.7% TPR, 6.7% FPR (105/108 vulns detected)
|
|
100
|
+
- **CWE-Bench-Java**: 42.5% static, 80.8% with Claude hybrid (vs CodeQL 22.5%, IRIS+GPT-4 45.8%)
|
|
101
|
+
- **NodeJS Synthetic**: 100% TPR, 94.1% Precision (25 test cases)
|
|
102
|
+
- **OWASP NodeGoat**: +100% (14 tests)
|
|
103
|
+
- **CWE-Bench-Rust**: +100% (30 test cases)
|
|
104
|
+
|
|
105
|
+
[1.0.0]: https://github.com/cogniumhq/circle-ir/releases/tag/circle-ir-ai-v1.0.0
|
package/LICENSE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Cognium Labs
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
copyright notice and this permission notice appear in all copies.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
+
PERFORMANCE OF THIS SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
# circle-ir-ai
|
|
2
|
+
|
|
3
|
+
LLM-enhanced static analysis built on [circle-ir](https://github.com/cognitim/circle-ir). Provides CLI tools, AI-powered vulnerability verification, and comprehensive security analysis.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Multi-Language Support**: Java, JavaScript/TypeScript, Python, Rust
|
|
8
|
+
- **LLM Verification**: Verify exploitability of detected vulnerabilities
|
|
9
|
+
- **Pattern Discovery**: Discover sources/sinks beyond YAML patterns
|
|
10
|
+
- **Cross-File Analysis**: Track taint across file boundaries
|
|
11
|
+
- **AI Skills Analysis**: Security analysis for AI agent skills (OpenClaw, MCP servers)
|
|
12
|
+
- **Security Scanning**: OWASP Top 10 mapping with trend tracking
|
|
13
|
+
- **Dead Code Detection**: Find unreachable code via call graph analysis
|
|
14
|
+
- **Secret Scanning**: Detect secrets in code and Git history
|
|
15
|
+
- **Health Scoring**: Calculate overall codebase health
|
|
16
|
+
- **Benchmark Suite**: OWASP, Juliet, SecuriBench, CWE-Bench test runners
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install circle-ir-ai circle-ir
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Quick Start
|
|
25
|
+
|
|
26
|
+
### CLI
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Analyze a single file
|
|
30
|
+
circle-ir-ai src/App.java
|
|
31
|
+
|
|
32
|
+
# Analyze with LLM verification
|
|
33
|
+
circle-ir-ai src/App.java --llm
|
|
34
|
+
|
|
35
|
+
# Analyze a directory (auto-parallelized)
|
|
36
|
+
circle-ir-ai ./src --threads 20
|
|
37
|
+
|
|
38
|
+
# Security scan with OWASP Top 10 mapping
|
|
39
|
+
circle-ir-ai scan ./src
|
|
40
|
+
|
|
41
|
+
# Detect dead/unreachable code
|
|
42
|
+
circle-ir-ai dead-code ./src
|
|
43
|
+
|
|
44
|
+
# Scan for secrets
|
|
45
|
+
circle-ir-ai secrets ./src
|
|
46
|
+
|
|
47
|
+
# Calculate codebase health score
|
|
48
|
+
circle-ir-ai health ./src
|
|
49
|
+
|
|
50
|
+
# Run OWASP Benchmark
|
|
51
|
+
circle-ir-ai benchmark ./testcode --expected ./expected.csv
|
|
52
|
+
|
|
53
|
+
# Analyze AI Skills (OpenClaw, MCP servers)
|
|
54
|
+
circle-ir-ai analyze-skill ./my-skill
|
|
55
|
+
circle-ir-ai analyze-skill ./my-skill --format json -o report.json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### AI Skills Analysis
|
|
59
|
+
|
|
60
|
+
Analyze AI agent skills for security issues and capability mismatches. Supports OpenClaw skills and MCP servers.
|
|
61
|
+
|
|
62
|
+
**CLI Usage:**
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Analyze a skill directory
|
|
66
|
+
circle-ir-ai analyze-skill ./my-skill
|
|
67
|
+
|
|
68
|
+
# With JSON output
|
|
69
|
+
circle-ir-ai analyze-skill ./my-skill --format json -o report.json
|
|
70
|
+
|
|
71
|
+
# With markdown report
|
|
72
|
+
circle-ir-ai analyze-skill ./my-skill --format markdown -o SECURITY.md
|
|
73
|
+
|
|
74
|
+
# Filter by severity and confidence
|
|
75
|
+
circle-ir-ai analyze-skill ./my-skill --min-severity high --min-confidence 0.8
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**What it analyzes:**
|
|
79
|
+
|
|
80
|
+
- `SKILL.md` - Natural language instructions (extracts declared capabilities)
|
|
81
|
+
- Code files (`.ts`, `.js`, `.py`, `.java`, `.rs`) - Actual implementation
|
|
82
|
+
- `mcp-server.json` - MCP server configuration (if present)
|
|
83
|
+
- Cross-artifact analysis - Detects capability mismatches between documentation and code
|
|
84
|
+
|
|
85
|
+
**Output:**
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
================================================================================
|
|
89
|
+
SKILL ANALYSIS REPORT: github-reader
|
|
90
|
+
================================================================================
|
|
91
|
+
|
|
92
|
+
Skill ID: github-reader-001
|
|
93
|
+
Version: 1.0.0
|
|
94
|
+
Trust Score: 22.0% 🚨
|
|
95
|
+
Findings: 13
|
|
96
|
+
Analysis Time: 21.84s
|
|
97
|
+
|
|
98
|
+
CRITICAL FINDINGS (1)
|
|
99
|
+
────────────────────────────────────────────────────────────────────────────────
|
|
100
|
+
|
|
101
|
+
1. Server-Side Request Forgery (CWE-918) not declared
|
|
102
|
+
Type: capability_mismatch
|
|
103
|
+
Artifact: src/index.ts
|
|
104
|
+
Confidence: 90%
|
|
105
|
+
Description: The code performs outbound HTTP requests via `https.request()`
|
|
106
|
+
but SKILL.md does not list any such sink.
|
|
107
|
+
|
|
108
|
+
RECOMMENDATIONS
|
|
109
|
+
────────────────────────────────────────────────────────────────────────────────
|
|
110
|
+
|
|
111
|
+
1. Update SKILL.md to accurately describe all capabilities
|
|
112
|
+
2. Add input validation and sanitization
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Trust Score Interpretation:**
|
|
116
|
+
|
|
117
|
+
- `90-100%` ✅ - High trust, minimal issues
|
|
118
|
+
- `70-89%` ⚠️ - Medium trust, some concerns
|
|
119
|
+
- `50-69%` ❌ - Low trust, significant issues
|
|
120
|
+
- `<50%` 🚨 - Critical issues, do not deploy
|
|
121
|
+
|
|
122
|
+
**Programmatic API:**
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
import { analyzeSkillBundle } from 'circle-ir-ai/skills';
|
|
126
|
+
|
|
127
|
+
const result = await analyzeSkillBundle('./my-skill', {
|
|
128
|
+
enableCrossArtifact: true, // Detect capability mismatches
|
|
129
|
+
enableVerification: true, // LLM verification
|
|
130
|
+
minConfidence: 0.7,
|
|
131
|
+
minSeverity: 'medium',
|
|
132
|
+
onProgress: (status) => console.log(status.message),
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
console.log(`Trust Score: ${result.score}`);
|
|
136
|
+
console.log(`Findings: ${result.findings.length}`);
|
|
137
|
+
console.log(`Recommendations: ${result.recommendations.join('\n')}`);
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Key Features:**
|
|
141
|
+
|
|
142
|
+
- **Multi-Artifact Analysis**: Analyzes SKILL.md + code + MCP config together
|
|
143
|
+
- **Capability Mismatch Detection**: LLM-based semantic comparison between declared and actual behavior
|
|
144
|
+
- **Vulnerability Detection**: Standard taint analysis on code files
|
|
145
|
+
- **Trust Score**: 0.0-1.0 score based on severity-weighted findings
|
|
146
|
+
- **Actionable Recommendations**: Specific guidance for remediation
|
|
147
|
+
|
|
148
|
+
**Production Quality:**
|
|
149
|
+
|
|
150
|
+
- ✅ **74% false positive reduction** through test file exclusion, validation utility recognition, and timeout fixes
|
|
151
|
+
- ✅ **Real-world validated** on official MCP servers (fetch: 84% trust, filesystem: accurate findings)
|
|
152
|
+
- ✅ **Fast analysis** (~25s for typical skills)
|
|
153
|
+
- ⚠️ Large SKILL.md files (>10KB) may take longer to extract
|
|
154
|
+
|
|
155
|
+
**Known Limitations:**
|
|
156
|
+
|
|
157
|
+
- Capability mismatch detection quality depends on LLM model used
|
|
158
|
+
- Trust score may be conservative for complex codebases with many filesystem operations
|
|
159
|
+
|
|
160
|
+
### Programmatic API
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
import { analyze, initAnalyzer } from 'circle-ir';
|
|
164
|
+
import { runHybridAnalysis, applyLLMAnalysis } from 'circle-ir-ai';
|
|
165
|
+
|
|
166
|
+
// Initialize
|
|
167
|
+
await initAnalyzer();
|
|
168
|
+
|
|
169
|
+
// Run hybrid analysis with LLM
|
|
170
|
+
const result = await runHybridAnalysis(
|
|
171
|
+
'MyClass.java',
|
|
172
|
+
code,
|
|
173
|
+
sources,
|
|
174
|
+
sinks,
|
|
175
|
+
types,
|
|
176
|
+
imports,
|
|
177
|
+
{
|
|
178
|
+
enableEnrichment: true,
|
|
179
|
+
enableVerification: true,
|
|
180
|
+
}
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
console.log('Verified vulnerabilities:', result.vulnerabilities);
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Project-Level Analysis
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
import { analyzeProjectTwoPhase } from 'circle-ir-ai';
|
|
190
|
+
|
|
191
|
+
const files = [
|
|
192
|
+
{ path: 'src/Controller.java', content: controllerCode },
|
|
193
|
+
{ path: 'src/Service.java', content: serviceCode },
|
|
194
|
+
];
|
|
195
|
+
|
|
196
|
+
const result = await analyzeProjectTwoPhase(files, 'java', {
|
|
197
|
+
enableEnrichment: true,
|
|
198
|
+
parallelPhase1: true,
|
|
199
|
+
maxConcurrency: 10,
|
|
200
|
+
enablePhase2: true,
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
console.log('Cross-file taint flows:', result.crossFileFlows);
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Security Scanning
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
import { scanDirectory, formatScanReport } from 'circle-ir-ai';
|
|
210
|
+
|
|
211
|
+
const result = await scanDirectory('/path/to/project');
|
|
212
|
+
console.log(formatScanReport(result));
|
|
213
|
+
// Shows vulnerabilities mapped to OWASP Top 10 categories
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Dead Code Detection
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
import { detectDeadCode, formatDeadCodeReport } from 'circle-ir-ai';
|
|
220
|
+
|
|
221
|
+
const result = await detectDeadCode({
|
|
222
|
+
target: '/path/to/project',
|
|
223
|
+
languages: ['javascript', 'typescript'],
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
console.log(formatDeadCodeReport(result));
|
|
227
|
+
// Shows: dead methods, entry points, and LOC with reachability info
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Secret Scanning
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
import { scanForSecrets, formatSecretReport } from 'circle-ir-ai';
|
|
234
|
+
|
|
235
|
+
const result = await scanForSecrets('/path/to/project', {
|
|
236
|
+
scanHistory: true, // Scan Git history
|
|
237
|
+
maxCommits: 100,
|
|
238
|
+
minSeverity: 'medium',
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
console.log(formatSecretReport(result));
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Health Scoring
|
|
245
|
+
|
|
246
|
+
```typescript
|
|
247
|
+
import { calculateHealthScore, formatHealthReport } from 'circle-ir-ai';
|
|
248
|
+
|
|
249
|
+
const result = await calculateHealthScore('/path/to/project', {
|
|
250
|
+
includeSecurity: true,
|
|
251
|
+
includeSecrets: true,
|
|
252
|
+
includeDeadCode: true,
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
console.log(formatHealthReport(result));
|
|
256
|
+
// Scores: Security 35%, Maintainability 25%, Quality 25%, Performance 15%
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## LLM Configuration
|
|
260
|
+
|
|
261
|
+
Set environment variables or pass options:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
export LLM_API_KEY=your-api-key
|
|
265
|
+
export LLM_BASE_URL=http://localhost:4000/v1
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
Or in code:
|
|
269
|
+
|
|
270
|
+
```typescript
|
|
271
|
+
import { createLLMConfig } from 'circle-ir-ai';
|
|
272
|
+
|
|
273
|
+
const config = createLLMConfig({
|
|
274
|
+
baseUrl: 'http://localhost:4000/v1',
|
|
275
|
+
apiKey: 'your-api-key',
|
|
276
|
+
});
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## CLI Options
|
|
280
|
+
|
|
281
|
+
```
|
|
282
|
+
circle-ir-ai <file|dir> [options]
|
|
283
|
+
|
|
284
|
+
Commands:
|
|
285
|
+
<file|dir> Analyze file or directory
|
|
286
|
+
scan <dir> Security scan with OWASP mapping
|
|
287
|
+
dead-code <dir> Detect unreachable code
|
|
288
|
+
secrets <dir> Scan for secrets
|
|
289
|
+
health <dir> Calculate health score
|
|
290
|
+
benchmark <dir> Run benchmark suite
|
|
291
|
+
|
|
292
|
+
Options:
|
|
293
|
+
-f, --format <fmt> Output format: json, summary, sarif
|
|
294
|
+
-o, --output <file> Write output to file
|
|
295
|
+
--llm Enable LLM enrichment and verification
|
|
296
|
+
--llm-enrich Enable LLM enrichment only
|
|
297
|
+
--llm-verify Enable LLM verification only
|
|
298
|
+
--llm-base-url <url> LLM proxy URL
|
|
299
|
+
--llm-api-key <key> LLM API key
|
|
300
|
+
--threads <n> Parallel analysis threads (default: 10)
|
|
301
|
+
-d, --discover-patterns Enable dynamic pattern discovery
|
|
302
|
+
-q, --quiet Suppress progress messages
|
|
303
|
+
-h, --help Show help
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## Benchmark Results
|
|
307
|
+
|
|
308
|
+
| Benchmark | Score | Details |
|
|
309
|
+
|-----------|-------|---------|
|
|
310
|
+
| **OWASP Benchmark** (Java) | +100% | 1415/1415 perfect |
|
|
311
|
+
| **OWASP BenchmarkPython** | 25.2% | 1230 test cases |
|
|
312
|
+
| **Juliet Test Suite** | +100% | 156/156 perfect |
|
|
313
|
+
| **SecuriBench Micro** | 97.7% TPR | 105/108 vulns, 6.7% FPR |
|
|
314
|
+
| **CWE-Bench-Java** | 81.7% (with LLM) | 98/120 projects (vs CodeQL 22.5%, IRIS+GPT-4 45.8%) |
|
|
315
|
+
| **NodeJS Synthetic** | 100% TPR | 25 test cases, 94.1% Precision |
|
|
316
|
+
| **OWASP NodeGoat** | +100% | 14 tests, 5 vulns detected |
|
|
317
|
+
| **CWE-Bench-Rust** | +100% | 30 test cases (6 CWEs) |
|
|
318
|
+
|
|
319
|
+
## Supported Languages
|
|
320
|
+
|
|
321
|
+
| Language | Extensions | Frameworks |
|
|
322
|
+
|----------|-----------|------------|
|
|
323
|
+
| **Java** | .java | Spring, JAX-RS, Servlet API |
|
|
324
|
+
| **JavaScript** | .js, .jsx, .mjs, .cjs | Express, Fastify, Node.js |
|
|
325
|
+
| **TypeScript** | .ts, .tsx, .mts, .cts | Express, Fastify, Node.js |
|
|
326
|
+
| **Python** | .py | Flask, Django, FastAPI |
|
|
327
|
+
| **Rust** | .rs | Actix-web, Rocket, Axum |
|
|
328
|
+
|
|
329
|
+
## Related Packages
|
|
330
|
+
|
|
331
|
+
- **[circle-ir](https://github.com/cognitim/circle-ir)**: Core SAST library
|
|
332
|
+
- **[circle-pack](https://github.com/cognitim/circle-pack)**: Cloudflare Workers API deployment
|
|
333
|
+
|
|
334
|
+
## License
|
|
335
|
+
|
|
336
|
+
ISC
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Aggregator
|
|
3
|
+
*
|
|
4
|
+
* Collects findings from all analysis dimensions and converts them
|
|
5
|
+
* to unified action items.
|
|
6
|
+
*/
|
|
7
|
+
import type { ScanResult } from '../security-scan/scanner.js';
|
|
8
|
+
import type { DeadCodeResult } from '../dead-code/detector.js';
|
|
9
|
+
import type { SecretScanResult } from '../secret-scan/scanner.js';
|
|
10
|
+
import type { HealthScoreResult } from '../health-score/calculator.js';
|
|
11
|
+
import { type ActionItem, type PriorityWeights } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Aggregation input - results from various scans
|
|
14
|
+
*/
|
|
15
|
+
export interface AggregationInput {
|
|
16
|
+
/** Security scan result */
|
|
17
|
+
securityScan?: ScanResult;
|
|
18
|
+
/** Dead code detection result */
|
|
19
|
+
deadCode?: DeadCodeResult;
|
|
20
|
+
/** Secret scan result */
|
|
21
|
+
secretScan?: SecretScanResult;
|
|
22
|
+
/** Health score result */
|
|
23
|
+
healthScore?: HealthScoreResult;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Aggregator options
|
|
27
|
+
*/
|
|
28
|
+
export interface AggregatorOptions {
|
|
29
|
+
/** Priority weights */
|
|
30
|
+
weights?: PriorityWeights;
|
|
31
|
+
/** Include info-level items */
|
|
32
|
+
includeInfo?: boolean;
|
|
33
|
+
/** Base path to strip from file paths */
|
|
34
|
+
basePath?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Aggregate findings from all sources into unified action items
|
|
38
|
+
*/
|
|
39
|
+
export declare function aggregateFindings(input: AggregationInput, options?: AggregatorOptions): ActionItem[];
|
|
40
|
+
//# sourceMappingURL=aggregator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregator.d.ts","sourceRoot":"","sources":["../../src/action-queue/aggregator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,2BAA2B,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EACL,KAAK,UAAU,EAQf,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,iCAAiC;IACjC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,yBAAyB;IACzB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,0BAA0B;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uBAAuB;IACvB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,+BAA+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EACvB,OAAO,GAAE,iBAAsB,GAC9B,UAAU,EAAE,CAqDd"}
|