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,501 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mastra Swarm Workflow
|
|
3
|
+
*
|
|
4
|
+
* Provides parallel multi-file analysis capabilities using p-queue
|
|
5
|
+
* for distributed SAST analysis with true concurrent processing.
|
|
6
|
+
*/
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
import PQueue from 'p-queue';
|
|
10
|
+
import { analyzeFile } from './workflow.js';
|
|
11
|
+
/**
|
|
12
|
+
* Detect language from file extension
|
|
13
|
+
*/
|
|
14
|
+
function detectLanguageFromPath(filePath) {
|
|
15
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
16
|
+
switch (ext) {
|
|
17
|
+
case '.java':
|
|
18
|
+
return 'java';
|
|
19
|
+
case '.js':
|
|
20
|
+
case '.jsx':
|
|
21
|
+
case '.mjs':
|
|
22
|
+
case '.cjs':
|
|
23
|
+
return 'javascript';
|
|
24
|
+
case '.ts':
|
|
25
|
+
case '.tsx':
|
|
26
|
+
case '.mts':
|
|
27
|
+
case '.cts':
|
|
28
|
+
return 'typescript';
|
|
29
|
+
case '.py':
|
|
30
|
+
return 'python';
|
|
31
|
+
case '.rs':
|
|
32
|
+
return 'rust';
|
|
33
|
+
case '.c':
|
|
34
|
+
case '.h':
|
|
35
|
+
return 'c';
|
|
36
|
+
case '.cpp':
|
|
37
|
+
case '.cc':
|
|
38
|
+
case '.cxx':
|
|
39
|
+
case '.hpp':
|
|
40
|
+
case '.hxx':
|
|
41
|
+
return 'cpp';
|
|
42
|
+
default:
|
|
43
|
+
return 'java'; // Default fallback
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// Timeout Configuration
|
|
48
|
+
// ============================================================================
|
|
49
|
+
/**
|
|
50
|
+
* Adaptive timeout configuration
|
|
51
|
+
* Base: 10s minimum
|
|
52
|
+
* Scale: +50ms per line of code
|
|
53
|
+
* Max: 60s cap (down from 300s)
|
|
54
|
+
* LLM mode adds extra time for LLM calls
|
|
55
|
+
*/
|
|
56
|
+
const TIMEOUT_CONFIG = {
|
|
57
|
+
baseMs: 10_000, // 10 seconds minimum
|
|
58
|
+
perLineMs: 50, // 50ms per line of code
|
|
59
|
+
maxMs: 60_000, // 60 seconds maximum (static analysis only)
|
|
60
|
+
llmEnrichmentMs: 60_000, // +60s for LLM enrichment (3 parallel calls @ 30s)
|
|
61
|
+
llmVerificationMs: 60_000, // +60s for LLM verification
|
|
62
|
+
llmMaxMs: 180_000, // 180s max for LLM mode
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Calculate adaptive timeout based on file size and LLM mode
|
|
66
|
+
* Larger files get more time, LLM mode adds significant extra time
|
|
67
|
+
*/
|
|
68
|
+
function calculateTimeout(fileContent, options) {
|
|
69
|
+
const lines = fileContent.split('\n').length;
|
|
70
|
+
let calculatedTimeout = TIMEOUT_CONFIG.baseMs + (lines * TIMEOUT_CONFIG.perLineMs);
|
|
71
|
+
// Add extra time for LLM operations
|
|
72
|
+
if (options?.enableEnrichment) {
|
|
73
|
+
calculatedTimeout += TIMEOUT_CONFIG.llmEnrichmentMs;
|
|
74
|
+
}
|
|
75
|
+
if (options?.enableVerification) {
|
|
76
|
+
calculatedTimeout += TIMEOUT_CONFIG.llmVerificationMs;
|
|
77
|
+
}
|
|
78
|
+
// Use higher max for LLM mode
|
|
79
|
+
const maxTimeout = (options?.enableEnrichment || options?.enableVerification)
|
|
80
|
+
? TIMEOUT_CONFIG.llmMaxMs
|
|
81
|
+
: TIMEOUT_CONFIG.maxMs;
|
|
82
|
+
return Math.min(calculatedTimeout, maxTimeout);
|
|
83
|
+
}
|
|
84
|
+
// ============================================================================
|
|
85
|
+
// Swarm Analysis Functions
|
|
86
|
+
// ============================================================================
|
|
87
|
+
/**
|
|
88
|
+
* Resolve file content - supports both eager and lazy loading
|
|
89
|
+
*/
|
|
90
|
+
async function resolveFileContent(file) {
|
|
91
|
+
if (file.content !== undefined) {
|
|
92
|
+
return file.content;
|
|
93
|
+
}
|
|
94
|
+
if (file.getContent) {
|
|
95
|
+
return await file.getContent();
|
|
96
|
+
}
|
|
97
|
+
throw new Error(`No content or getContent function provided for ${file.path}`);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Analyze a single file with error handling and timeout
|
|
101
|
+
* Supports lazy content loading to reduce peak memory usage
|
|
102
|
+
*/
|
|
103
|
+
async function analyzeFileWithErrorHandling(file, options) {
|
|
104
|
+
// Detect language from file extension, or use provided option
|
|
105
|
+
const language = options.language || detectLanguageFromPath(file.path);
|
|
106
|
+
try {
|
|
107
|
+
// Load content (lazy or eager)
|
|
108
|
+
const content = await resolveFileContent(file);
|
|
109
|
+
// Use adaptive timeout based on file size and LLM mode, or explicit override if provided
|
|
110
|
+
const timeoutMs = options.fileTimeoutMs || calculateTimeout(content, {
|
|
111
|
+
enableEnrichment: options.enableEnrichment,
|
|
112
|
+
enableVerification: options.enableVerification,
|
|
113
|
+
});
|
|
114
|
+
// Create timeout with cleanup capability
|
|
115
|
+
let timeoutId = null;
|
|
116
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
117
|
+
timeoutId = setTimeout(() => {
|
|
118
|
+
reject(new Error(`Analysis timeout after ${timeoutMs / 1000}s for ${file.path}`));
|
|
119
|
+
}, timeoutMs);
|
|
120
|
+
});
|
|
121
|
+
const analysisPromise = analyzeFile(file.path, content, {
|
|
122
|
+
language,
|
|
123
|
+
enableEnrichment: options.enableEnrichment,
|
|
124
|
+
enableVerification: options.enableVerification,
|
|
125
|
+
maxVerificationTargets: options.maxVerificationTargets,
|
|
126
|
+
verificationStrategy: options.verificationStrategy,
|
|
127
|
+
});
|
|
128
|
+
try {
|
|
129
|
+
// Race between analysis and timeout
|
|
130
|
+
const result = await Promise.race([
|
|
131
|
+
analysisPromise,
|
|
132
|
+
timeoutPromise,
|
|
133
|
+
]);
|
|
134
|
+
return {
|
|
135
|
+
file: file.path,
|
|
136
|
+
vulnerabilities: result.vulnerabilities,
|
|
137
|
+
stats: result.stats,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
// Always clear the timeout to prevent process from hanging
|
|
142
|
+
if (timeoutId)
|
|
143
|
+
clearTimeout(timeoutId);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
148
|
+
console.warn(`File analysis error for ${file.path}: ${errorMessage}`);
|
|
149
|
+
return {
|
|
150
|
+
file: file.path,
|
|
151
|
+
vulnerabilities: [],
|
|
152
|
+
stats: {
|
|
153
|
+
totalSources: 0,
|
|
154
|
+
totalSinks: 0,
|
|
155
|
+
verifiedVulnerabilities: 0,
|
|
156
|
+
truePositives: 0,
|
|
157
|
+
falsePositives: 0,
|
|
158
|
+
uncertain: 0,
|
|
159
|
+
totalTimeMs: 0,
|
|
160
|
+
},
|
|
161
|
+
error: errorMessage,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Run swarm analysis on multiple files with controlled concurrency
|
|
167
|
+
* Uses p-queue for true concurrent processing without batch blocking
|
|
168
|
+
* Supports persistent caching to skip unchanged files
|
|
169
|
+
* Supports streaming results to disk for memory efficiency
|
|
170
|
+
*/
|
|
171
|
+
export async function analyzeFilesSwarm(files, options) {
|
|
172
|
+
const startTime = Date.now();
|
|
173
|
+
const opts = {
|
|
174
|
+
language: options?.language ?? 'java',
|
|
175
|
+
enableEnrichment: options?.enableEnrichment ?? false, // Disabled by default for swarm (faster)
|
|
176
|
+
enableVerification: options?.enableVerification ?? false,
|
|
177
|
+
maxConcurrency: options?.maxConcurrency ?? 10,
|
|
178
|
+
cacheEnabled: options?.cacheEnabled ?? true,
|
|
179
|
+
memoryEfficient: options?.memoryEfficient ?? false,
|
|
180
|
+
...options,
|
|
181
|
+
};
|
|
182
|
+
// Memory-efficient mode requires streamToFile
|
|
183
|
+
const memoryEfficient = opts.memoryEfficient && opts.streamToFile;
|
|
184
|
+
const results = memoryEfficient ? [] : new Array(files.length);
|
|
185
|
+
const concurrency = opts.maxConcurrency || 10;
|
|
186
|
+
const cache = opts.cache;
|
|
187
|
+
const cacheEnabled = opts.cacheEnabled && cache?.isEnabled();
|
|
188
|
+
let cacheHits = 0;
|
|
189
|
+
let cacheMisses = 0;
|
|
190
|
+
// Streaming stats (tracked even in memory-efficient mode)
|
|
191
|
+
let totalVulnerabilities = 0;
|
|
192
|
+
let totalSources = 0;
|
|
193
|
+
let totalSinks = 0;
|
|
194
|
+
let filesWithVulnerabilities = 0;
|
|
195
|
+
// Setup file streaming if enabled
|
|
196
|
+
let writeStream = null;
|
|
197
|
+
let writeQueue = Promise.resolve();
|
|
198
|
+
if (opts.streamToFile) {
|
|
199
|
+
// Ensure directory exists
|
|
200
|
+
const dir = path.dirname(opts.streamToFile);
|
|
201
|
+
if (dir && dir !== '.') {
|
|
202
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
203
|
+
}
|
|
204
|
+
writeStream = fs.createWriteStream(opts.streamToFile, { flags: 'w' });
|
|
205
|
+
}
|
|
206
|
+
// Helper to write result to stream (serialized to avoid interleaving)
|
|
207
|
+
const writeResult = (result, index) => {
|
|
208
|
+
if (!writeStream)
|
|
209
|
+
return;
|
|
210
|
+
writeQueue = writeQueue.then(() => {
|
|
211
|
+
return new Promise((resolve, reject) => {
|
|
212
|
+
const line = JSON.stringify(result) + '\n';
|
|
213
|
+
const canContinue = writeStream.write(line);
|
|
214
|
+
if (canContinue) {
|
|
215
|
+
opts.onResultWritten?.(result.file, index);
|
|
216
|
+
resolve();
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
writeStream.once('drain', () => {
|
|
220
|
+
opts.onResultWritten?.(result.file, index);
|
|
221
|
+
resolve();
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
};
|
|
227
|
+
// Use p-queue for true concurrent processing with backpressure
|
|
228
|
+
const queue = new PQueue({ concurrency });
|
|
229
|
+
// Add all files to queue - they start immediately as slots become available
|
|
230
|
+
const promises = files.map((file, index) => queue.add(async () => {
|
|
231
|
+
opts.onFileStart?.(file.path, index, files.length);
|
|
232
|
+
let result;
|
|
233
|
+
// Load content for cache check (lazy or eager)
|
|
234
|
+
// Note: We load content here for cache key, but memory is still bounded
|
|
235
|
+
// by concurrency since only 'concurrency' files are in-flight at once
|
|
236
|
+
const content = await resolveFileContent(file);
|
|
237
|
+
// Check cache first
|
|
238
|
+
if (cacheEnabled && cache) {
|
|
239
|
+
const cached = cache.get(file.path, content);
|
|
240
|
+
if (cached) {
|
|
241
|
+
cacheHits++;
|
|
242
|
+
result = cached;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
cacheMisses++;
|
|
246
|
+
// Pass file with resolved content to avoid double-loading
|
|
247
|
+
result = await analyzeFileWithErrorHandling({ path: file.path, content }, opts);
|
|
248
|
+
// Store in cache (only if no error)
|
|
249
|
+
if (!result.error) {
|
|
250
|
+
cache.set(file.path, content, result);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
// Pass file with resolved content to avoid double-loading
|
|
256
|
+
result = await analyzeFileWithErrorHandling({ path: file.path, content }, opts);
|
|
257
|
+
}
|
|
258
|
+
// Update streaming stats
|
|
259
|
+
totalVulnerabilities += result.vulnerabilities.length;
|
|
260
|
+
totalSources += result.stats.totalSources;
|
|
261
|
+
totalSinks += result.stats.totalSinks;
|
|
262
|
+
if (result.vulnerabilities.length > 0)
|
|
263
|
+
filesWithVulnerabilities++;
|
|
264
|
+
// Write to stream if enabled
|
|
265
|
+
if (writeStream) {
|
|
266
|
+
writeResult(result, index);
|
|
267
|
+
}
|
|
268
|
+
opts.onFileComplete?.(file.path, index, files.length);
|
|
269
|
+
// Store result in memory only if not in memory-efficient mode
|
|
270
|
+
if (!memoryEfficient) {
|
|
271
|
+
results[index] = result;
|
|
272
|
+
}
|
|
273
|
+
return result;
|
|
274
|
+
}));
|
|
275
|
+
// Wait for all analysis to complete
|
|
276
|
+
await Promise.all(promises);
|
|
277
|
+
// Wait for all writes to complete
|
|
278
|
+
await writeQueue;
|
|
279
|
+
// Close write stream
|
|
280
|
+
if (writeStream) {
|
|
281
|
+
await new Promise((resolve, reject) => {
|
|
282
|
+
writeStream.end(() => resolve());
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
const totalTimeMs = Date.now() - startTime;
|
|
286
|
+
return {
|
|
287
|
+
results,
|
|
288
|
+
summary: {
|
|
289
|
+
totalFiles: files.length,
|
|
290
|
+
totalVulnerabilities,
|
|
291
|
+
totalSources,
|
|
292
|
+
totalSinks,
|
|
293
|
+
filesWithVulnerabilities,
|
|
294
|
+
totalTimeMs,
|
|
295
|
+
avgTimePerFile: files.length > 0 ? totalTimeMs / files.length : 0,
|
|
296
|
+
cacheHits: cacheEnabled ? cacheHits : undefined,
|
|
297
|
+
cacheMisses: cacheEnabled ? cacheMisses : undefined,
|
|
298
|
+
},
|
|
299
|
+
streamFile: opts.streamToFile,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Stream swarm analysis with progress updates
|
|
304
|
+
* Uses p-queue for true concurrent processing without batch blocking
|
|
305
|
+
*/
|
|
306
|
+
export async function* analyzeFilesSwarmStream(files, options) {
|
|
307
|
+
const startTime = Date.now();
|
|
308
|
+
const opts = {
|
|
309
|
+
language: options?.language ?? 'java',
|
|
310
|
+
enableEnrichment: options?.enableEnrichment ?? false,
|
|
311
|
+
enableVerification: options?.enableVerification ?? false,
|
|
312
|
+
maxConcurrency: options?.maxConcurrency ?? 10,
|
|
313
|
+
...options,
|
|
314
|
+
};
|
|
315
|
+
const results = new Array(files.length);
|
|
316
|
+
const concurrency = opts.maxConcurrency || 10;
|
|
317
|
+
const total = files.length;
|
|
318
|
+
const eventQueue = [];
|
|
319
|
+
let completedCount = 0;
|
|
320
|
+
let resolveWaiting = null;
|
|
321
|
+
const notifyWaiting = () => {
|
|
322
|
+
if (resolveWaiting) {
|
|
323
|
+
const resolve = resolveWaiting;
|
|
324
|
+
resolveWaiting = null;
|
|
325
|
+
resolve();
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
const queue = new PQueue({ concurrency });
|
|
329
|
+
// Add all files to queue
|
|
330
|
+
const promises = files.map((file, index) => queue.add(async () => {
|
|
331
|
+
// Push start event
|
|
332
|
+
eventQueue.push({
|
|
333
|
+
type: 'file-start',
|
|
334
|
+
file: file.path,
|
|
335
|
+
index,
|
|
336
|
+
total,
|
|
337
|
+
});
|
|
338
|
+
notifyWaiting();
|
|
339
|
+
const result = await analyzeFileWithErrorHandling(file, opts);
|
|
340
|
+
results[index] = result;
|
|
341
|
+
completedCount++;
|
|
342
|
+
// Push completion event
|
|
343
|
+
eventQueue.push({
|
|
344
|
+
type: 'file-complete',
|
|
345
|
+
file: result.file,
|
|
346
|
+
index,
|
|
347
|
+
total,
|
|
348
|
+
result,
|
|
349
|
+
});
|
|
350
|
+
// Push progress event
|
|
351
|
+
eventQueue.push({
|
|
352
|
+
type: 'progress',
|
|
353
|
+
index: completedCount,
|
|
354
|
+
total,
|
|
355
|
+
});
|
|
356
|
+
notifyWaiting();
|
|
357
|
+
return result;
|
|
358
|
+
}));
|
|
359
|
+
// Yield events as they come in
|
|
360
|
+
const allDone = Promise.all(promises);
|
|
361
|
+
while (completedCount < files.length) {
|
|
362
|
+
// Drain event queue
|
|
363
|
+
while (eventQueue.length > 0) {
|
|
364
|
+
yield eventQueue.shift();
|
|
365
|
+
}
|
|
366
|
+
// Wait for more events or completion
|
|
367
|
+
if (completedCount < files.length) {
|
|
368
|
+
await Promise.race([
|
|
369
|
+
allDone,
|
|
370
|
+
new Promise(resolve => {
|
|
371
|
+
resolveWaiting = resolve;
|
|
372
|
+
}),
|
|
373
|
+
]);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// Drain remaining events
|
|
377
|
+
while (eventQueue.length > 0) {
|
|
378
|
+
yield eventQueue.shift();
|
|
379
|
+
}
|
|
380
|
+
await allDone;
|
|
381
|
+
const totalTimeMs = Date.now() - startTime;
|
|
382
|
+
yield {
|
|
383
|
+
type: 'done',
|
|
384
|
+
result: {
|
|
385
|
+
results,
|
|
386
|
+
summary: {
|
|
387
|
+
totalFiles: results.length,
|
|
388
|
+
totalVulnerabilities: results.reduce((sum, r) => sum + r.vulnerabilities.length, 0),
|
|
389
|
+
totalSources: results.reduce((sum, r) => sum + r.stats.totalSources, 0),
|
|
390
|
+
totalSinks: results.reduce((sum, r) => sum + r.stats.totalSinks, 0),
|
|
391
|
+
filesWithVulnerabilities: results.filter(r => r.vulnerabilities.length > 0).length,
|
|
392
|
+
totalTimeMs,
|
|
393
|
+
avgTimePerFile: results.length > 0 ? totalTimeMs / results.length : 0,
|
|
394
|
+
},
|
|
395
|
+
},
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Process files in batches with controlled concurrency
|
|
400
|
+
* (Alternative function for direct batch control)
|
|
401
|
+
*/
|
|
402
|
+
export async function analyzeFilesInBatches(files, options) {
|
|
403
|
+
const batchSize = options?.batchSize ?? options?.maxConcurrency ?? 10;
|
|
404
|
+
const results = [];
|
|
405
|
+
const startTime = Date.now();
|
|
406
|
+
const opts = {
|
|
407
|
+
language: options?.language ?? 'java',
|
|
408
|
+
enableEnrichment: options?.enableEnrichment ?? false,
|
|
409
|
+
enableVerification: options?.enableVerification ?? false,
|
|
410
|
+
...options,
|
|
411
|
+
};
|
|
412
|
+
for (let i = 0; i < files.length; i += batchSize) {
|
|
413
|
+
const batch = files.slice(i, i + batchSize);
|
|
414
|
+
// Process batch in parallel
|
|
415
|
+
const batchResults = await Promise.all(batch.map(async (file, batchIndex) => {
|
|
416
|
+
const globalIndex = i + batchIndex;
|
|
417
|
+
opts.onFileStart?.(file.path, globalIndex, files.length);
|
|
418
|
+
const result = await analyzeFileWithErrorHandling(file, opts);
|
|
419
|
+
opts.onFileComplete?.(file.path, globalIndex, files.length);
|
|
420
|
+
return result;
|
|
421
|
+
}));
|
|
422
|
+
results.push(...batchResults);
|
|
423
|
+
}
|
|
424
|
+
const totalTimeMs = Date.now() - startTime;
|
|
425
|
+
return {
|
|
426
|
+
results,
|
|
427
|
+
summary: {
|
|
428
|
+
totalFiles: results.length,
|
|
429
|
+
totalVulnerabilities: results.reduce((sum, r) => sum + r.vulnerabilities.length, 0),
|
|
430
|
+
totalSources: results.reduce((sum, r) => sum + r.stats.totalSources, 0),
|
|
431
|
+
totalSinks: results.reduce((sum, r) => sum + r.stats.totalSinks, 0),
|
|
432
|
+
filesWithVulnerabilities: results.filter(r => r.vulnerabilities.length > 0).length,
|
|
433
|
+
totalTimeMs,
|
|
434
|
+
avgTimePerFile: results.length > 0 ? totalTimeMs / results.length : 0,
|
|
435
|
+
},
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
// Legacy export for compatibility
|
|
439
|
+
export const swarmAnalysisWorkflow = {
|
|
440
|
+
id: 'swarm-analysis',
|
|
441
|
+
run: analyzeFilesSwarm,
|
|
442
|
+
stream: analyzeFilesSwarmStream,
|
|
443
|
+
runInBatches: analyzeFilesInBatches,
|
|
444
|
+
};
|
|
445
|
+
// ============================================================================
|
|
446
|
+
// Utility Functions for Streamed Results
|
|
447
|
+
// ============================================================================
|
|
448
|
+
/**
|
|
449
|
+
* Read streamed results from a JSON Lines file
|
|
450
|
+
* Yields results one at a time for memory efficiency
|
|
451
|
+
*/
|
|
452
|
+
export async function* readStreamedResults(filePath) {
|
|
453
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
454
|
+
const lines = content.split('\n').filter(line => line.trim());
|
|
455
|
+
for (const line of lines) {
|
|
456
|
+
try {
|
|
457
|
+
yield JSON.parse(line);
|
|
458
|
+
}
|
|
459
|
+
catch {
|
|
460
|
+
// Skip invalid lines
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Load all streamed results into memory (for smaller result sets)
|
|
466
|
+
*/
|
|
467
|
+
export async function loadStreamedResults(filePath) {
|
|
468
|
+
const results = [];
|
|
469
|
+
for await (const result of readStreamedResults(filePath)) {
|
|
470
|
+
results.push(result);
|
|
471
|
+
}
|
|
472
|
+
return results;
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Get summary statistics from a streamed results file
|
|
476
|
+
*/
|
|
477
|
+
export async function getStreamedResultsSummary(filePath) {
|
|
478
|
+
let totalFiles = 0;
|
|
479
|
+
let totalVulnerabilities = 0;
|
|
480
|
+
let totalSources = 0;
|
|
481
|
+
let totalSinks = 0;
|
|
482
|
+
let filesWithVulnerabilities = 0;
|
|
483
|
+
for await (const result of readStreamedResults(filePath)) {
|
|
484
|
+
totalFiles++;
|
|
485
|
+
totalVulnerabilities += result.vulnerabilities.length;
|
|
486
|
+
totalSources += result.stats.totalSources;
|
|
487
|
+
totalSinks += result.stats.totalSinks;
|
|
488
|
+
if (result.vulnerabilities.length > 0)
|
|
489
|
+
filesWithVulnerabilities++;
|
|
490
|
+
}
|
|
491
|
+
return {
|
|
492
|
+
totalFiles,
|
|
493
|
+
totalVulnerabilities,
|
|
494
|
+
totalSources,
|
|
495
|
+
totalSinks,
|
|
496
|
+
filesWithVulnerabilities,
|
|
497
|
+
totalTimeMs: 0, // Not available from streamed results
|
|
498
|
+
avgTimePerFile: 0,
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
//# sourceMappingURL=swarm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../../src/agents/mastra/swarm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mastra Security Analysis Workflow
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the security analysis pipeline.
|
|
5
|
+
* Pipeline: Pattern Match → Enrich → Merge → Verify → Report
|
|
6
|
+
*
|
|
7
|
+
* This module provides convenience functions for running the complete
|
|
8
|
+
* analysis pipeline using the core analysis logic.
|
|
9
|
+
*/
|
|
10
|
+
export { patternMatchStep, enrichStep, mergeStep, verifyStep, reportStep, } from './steps.js';
|
|
11
|
+
export type VerificationStrategy = 'complete' | 'sampled' | 'prioritized';
|
|
12
|
+
export interface WorkflowInput {
|
|
13
|
+
filePath: string;
|
|
14
|
+
sourceCode: string;
|
|
15
|
+
language?: string;
|
|
16
|
+
options?: {
|
|
17
|
+
enableEnrichment?: boolean;
|
|
18
|
+
enableVerification?: boolean;
|
|
19
|
+
confidenceThreshold?: number;
|
|
20
|
+
maxVerificationTargets?: number;
|
|
21
|
+
verificationStrategy?: VerificationStrategy;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface WorkflowOutput {
|
|
25
|
+
vulnerabilities: any[];
|
|
26
|
+
stats: {
|
|
27
|
+
totalSources: number;
|
|
28
|
+
totalSinks: number;
|
|
29
|
+
verifiedVulnerabilities: number;
|
|
30
|
+
truePositives: number;
|
|
31
|
+
falsePositives: number;
|
|
32
|
+
uncertain: number;
|
|
33
|
+
totalTimeMs: number;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Run security analysis on a single file
|
|
38
|
+
*
|
|
39
|
+
* This function orchestrates the complete analysis pipeline:
|
|
40
|
+
* 1. Pattern matching (static analysis)
|
|
41
|
+
* 2. LLM enrichment (discover additional sources/sinks)
|
|
42
|
+
* 3. Merge results
|
|
43
|
+
* 4. LLM verification (confirm exploitability)
|
|
44
|
+
* 5. Generate report
|
|
45
|
+
*
|
|
46
|
+
* NOTE: Verification strategies:
|
|
47
|
+
* - 'prioritized' (default): Smart sampling with critical vulnerabilities first (sqrt(200) = 15×15 = 225 pairs)
|
|
48
|
+
* - 'complete': Verify ALL source-sink pairs (thorough but expensive, may be 100s-1000s of LLM calls)
|
|
49
|
+
* - 'sampled': Legacy random sampling (not recommended, non-deterministic)
|
|
50
|
+
*
|
|
51
|
+
* For production security audits, use verificationStrategy: 'complete'
|
|
52
|
+
* For CI/CD fast scans, use verificationStrategy: 'prioritized' (default)
|
|
53
|
+
*/
|
|
54
|
+
export declare function analyzeFile(filePath: string, sourceCode: string, options?: {
|
|
55
|
+
language?: string;
|
|
56
|
+
enableEnrichment?: boolean;
|
|
57
|
+
enableVerification?: boolean;
|
|
58
|
+
confidenceThreshold?: number;
|
|
59
|
+
maxVerificationTargets?: number;
|
|
60
|
+
verificationStrategy?: VerificationStrategy;
|
|
61
|
+
}): Promise<WorkflowOutput>;
|
|
62
|
+
/**
|
|
63
|
+
* Stream security analysis with progress updates
|
|
64
|
+
*/
|
|
65
|
+
export declare function analyzeFileStream(filePath: string, sourceCode: string, options?: {
|
|
66
|
+
language?: string;
|
|
67
|
+
enableEnrichment?: boolean;
|
|
68
|
+
enableVerification?: boolean;
|
|
69
|
+
maxVerificationTargets?: number;
|
|
70
|
+
verificationStrategy?: VerificationStrategy;
|
|
71
|
+
}): AsyncGenerator<{
|
|
72
|
+
step: string;
|
|
73
|
+
status: string;
|
|
74
|
+
data?: any;
|
|
75
|
+
}>;
|
|
76
|
+
export declare const securityAnalysisWorkflow: {
|
|
77
|
+
id: string;
|
|
78
|
+
run: typeof analyzeFile;
|
|
79
|
+
stream: typeof analyzeFileStream;
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../../src/agents/mastra/workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU,GACX,MAAM,YAAY,CAAC;AAMpB,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;AAE1E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QACR,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;KAC7C,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,GAAG,EAAE,CAAC;IACvB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,uBAAuB,EAAE,MAAM,CAAC;QAChC,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAycD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C,GACA,OAAO,CAAC,cAAc,CAAC,CAmDzB;AAED;;GAEG;AACH,wBAAuB,iBAAiB,CACtC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C,GACA,cAAc,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CA4D9D;AAGD,eAAO,MAAM,wBAAwB;;;;CAIpC,CAAC"}
|