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,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Bundle Loader
|
|
3
|
+
*
|
|
4
|
+
* Loads AI skill bundles from filesystem into SkillBundle structure.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs/promises';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
/**
|
|
9
|
+
* Load a skill bundle from filesystem
|
|
10
|
+
*
|
|
11
|
+
* Expected structure:
|
|
12
|
+
* skill-directory/
|
|
13
|
+
* ├── SKILL.md # Instructions (required)
|
|
14
|
+
* ├── package.json # Metadata (optional)
|
|
15
|
+
* ├── mcp-config.json # MCP configuration (optional)
|
|
16
|
+
* ├── src/ # Source code (optional)
|
|
17
|
+
* │ ├── index.ts
|
|
18
|
+
* │ └── ...
|
|
19
|
+
* └── plugin/ # Plugin files (optional)
|
|
20
|
+
* └── ...
|
|
21
|
+
*/
|
|
22
|
+
export async function loadSkillBundle(skillPath) {
|
|
23
|
+
// Resolve absolute path
|
|
24
|
+
const absPath = path.resolve(skillPath);
|
|
25
|
+
// Check if path exists
|
|
26
|
+
const stats = await fs.stat(absPath);
|
|
27
|
+
if (!stats.isDirectory()) {
|
|
28
|
+
throw new Error(`Skill path must be a directory: ${skillPath}`);
|
|
29
|
+
}
|
|
30
|
+
// Load SKILL.md (required)
|
|
31
|
+
const skillMd = await loadSkillMd(absPath);
|
|
32
|
+
// Load package.json for metadata (optional)
|
|
33
|
+
const metadata = await loadPackageJson(absPath);
|
|
34
|
+
// Load MCP config (optional)
|
|
35
|
+
const mcpConfig = await loadMCPConfig(absPath);
|
|
36
|
+
// Discover and load code files
|
|
37
|
+
const codeFiles = await loadCodeFiles(absPath);
|
|
38
|
+
// Discover and load plugin files (optional)
|
|
39
|
+
const pluginFiles = await loadPluginFiles(absPath);
|
|
40
|
+
return {
|
|
41
|
+
skillId: metadata.skillId || path.basename(absPath),
|
|
42
|
+
name: metadata.name || path.basename(absPath),
|
|
43
|
+
version: metadata.version || '0.0.0',
|
|
44
|
+
skillMd,
|
|
45
|
+
codeFiles,
|
|
46
|
+
mcpConfig,
|
|
47
|
+
pluginFiles,
|
|
48
|
+
rootPath: absPath,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Load SKILL.md file (required)
|
|
53
|
+
*/
|
|
54
|
+
async function loadSkillMd(skillPath) {
|
|
55
|
+
// Try different possible names
|
|
56
|
+
const possibleNames = ['SKILL.md', 'skill.md', 'INSTRUCTIONS.md', 'instructions.md', 'README.md'];
|
|
57
|
+
for (const name of possibleNames) {
|
|
58
|
+
const filePath = path.join(skillPath, name);
|
|
59
|
+
try {
|
|
60
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
61
|
+
return content;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
// Try next name
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
throw new Error(`SKILL.md not found in ${skillPath}. Tried: ${possibleNames.join(', ')}`);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Load package.json for metadata (optional)
|
|
72
|
+
*/
|
|
73
|
+
async function loadPackageJson(skillPath) {
|
|
74
|
+
const pkgPath = path.join(skillPath, 'package.json');
|
|
75
|
+
try {
|
|
76
|
+
const content = await fs.readFile(pkgPath, 'utf-8');
|
|
77
|
+
const pkg = JSON.parse(content);
|
|
78
|
+
return {
|
|
79
|
+
skillId: pkg.skillId || pkg.name,
|
|
80
|
+
name: pkg.name,
|
|
81
|
+
version: pkg.version,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
// package.json is optional
|
|
86
|
+
return {};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Load MCP server configuration (optional)
|
|
91
|
+
*/
|
|
92
|
+
async function loadMCPConfig(skillPath) {
|
|
93
|
+
const possibleNames = ['mcp-config.json', 'mcp.json', '.mcp.json'];
|
|
94
|
+
for (const name of possibleNames) {
|
|
95
|
+
const filePath = path.join(skillPath, name);
|
|
96
|
+
try {
|
|
97
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
98
|
+
const config = JSON.parse(content);
|
|
99
|
+
return config;
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
// Try next name
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// MCP config is optional
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Discover and load code files recursively
|
|
111
|
+
*/
|
|
112
|
+
async function loadCodeFiles(skillPath) {
|
|
113
|
+
const codeFiles = [];
|
|
114
|
+
// Directories to scan for code
|
|
115
|
+
const codeDirs = ['src', 'lib', '.']; // Also check root directory
|
|
116
|
+
// Extensions to consider as code
|
|
117
|
+
const codeExtensions = ['.ts', '.js', '.tsx', '.jsx', '.py', '.java', '.rs'];
|
|
118
|
+
for (const dir of codeDirs) {
|
|
119
|
+
const dirPath = path.join(skillPath, dir);
|
|
120
|
+
try {
|
|
121
|
+
const files = await findFilesRecursive(dirPath, codeExtensions);
|
|
122
|
+
for (const file of files) {
|
|
123
|
+
const content = await fs.readFile(file, 'utf-8');
|
|
124
|
+
const relativePath = path.relative(skillPath, file);
|
|
125
|
+
const language = detectLanguageFromExtension(path.extname(file));
|
|
126
|
+
if (language) {
|
|
127
|
+
codeFiles.push({
|
|
128
|
+
path: relativePath,
|
|
129
|
+
content,
|
|
130
|
+
language,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
// Directory might not exist, that's OK
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return codeFiles;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Discover and load plugin files (optional)
|
|
144
|
+
*/
|
|
145
|
+
async function loadPluginFiles(skillPath) {
|
|
146
|
+
const pluginPath = path.join(skillPath, 'plugin');
|
|
147
|
+
try {
|
|
148
|
+
const stats = await fs.stat(pluginPath);
|
|
149
|
+
if (!stats.isDirectory()) {
|
|
150
|
+
return [];
|
|
151
|
+
}
|
|
152
|
+
// Load all files in plugin directory
|
|
153
|
+
return await loadCodeFiles(pluginPath);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
// Plugin directory is optional
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Check if a file or directory is a test file/directory
|
|
162
|
+
*/
|
|
163
|
+
function isTestFileOrDirectory(name, isDirectory) {
|
|
164
|
+
// Test directory patterns
|
|
165
|
+
const testDirPatterns = ['__tests__', 'tests', 'test', '.test', '__test__', 'spec', '__specs__'];
|
|
166
|
+
// Test file patterns
|
|
167
|
+
const testFilePatterns = [
|
|
168
|
+
'.test.ts',
|
|
169
|
+
'.test.js',
|
|
170
|
+
'.test.tsx',
|
|
171
|
+
'.test.jsx',
|
|
172
|
+
'.spec.ts',
|
|
173
|
+
'.spec.js',
|
|
174
|
+
'.spec.tsx',
|
|
175
|
+
'.spec.jsx',
|
|
176
|
+
'.test.py',
|
|
177
|
+
'_test.py',
|
|
178
|
+
'.test.java',
|
|
179
|
+
'.test.rs',
|
|
180
|
+
'test.config.ts',
|
|
181
|
+
'test.config.js',
|
|
182
|
+
'vitest.config.ts',
|
|
183
|
+
'vitest.config.js',
|
|
184
|
+
'jest.config.ts',
|
|
185
|
+
'jest.config.js',
|
|
186
|
+
];
|
|
187
|
+
if (isDirectory) {
|
|
188
|
+
// Check if directory name matches test patterns
|
|
189
|
+
return testDirPatterns.includes(name);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
// Check if file name matches test patterns
|
|
193
|
+
return testFilePatterns.some((pattern) => name.endsWith(pattern));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Find files recursively with specific extensions
|
|
198
|
+
*/
|
|
199
|
+
async function findFilesRecursive(dir, extensions) {
|
|
200
|
+
const files = [];
|
|
201
|
+
try {
|
|
202
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
203
|
+
for (const entry of entries) {
|
|
204
|
+
const fullPath = path.join(dir, entry.name);
|
|
205
|
+
if (entry.isDirectory()) {
|
|
206
|
+
// Skip node_modules, .git, hidden directories, and test directories
|
|
207
|
+
if (entry.name.startsWith('.') ||
|
|
208
|
+
entry.name === 'node_modules' ||
|
|
209
|
+
isTestFileOrDirectory(entry.name, true)) {
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
// Recurse into subdirectory
|
|
213
|
+
const subFiles = await findFilesRecursive(fullPath, extensions);
|
|
214
|
+
files.push(...subFiles);
|
|
215
|
+
}
|
|
216
|
+
else if (entry.isFile()) {
|
|
217
|
+
// Skip test files
|
|
218
|
+
if (isTestFileOrDirectory(entry.name, false)) {
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
const ext = path.extname(entry.name);
|
|
222
|
+
if (extensions.includes(ext)) {
|
|
223
|
+
files.push(fullPath);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
// Directory might not exist or not accessible
|
|
230
|
+
}
|
|
231
|
+
return files;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Detect language from file extension
|
|
235
|
+
*/
|
|
236
|
+
function detectLanguageFromExtension(ext) {
|
|
237
|
+
switch (ext.toLowerCase()) {
|
|
238
|
+
case '.java':
|
|
239
|
+
return 'java';
|
|
240
|
+
case '.js':
|
|
241
|
+
case '.jsx':
|
|
242
|
+
case '.mjs':
|
|
243
|
+
case '.cjs':
|
|
244
|
+
return 'javascript';
|
|
245
|
+
case '.ts':
|
|
246
|
+
case '.tsx':
|
|
247
|
+
case '.mts':
|
|
248
|
+
case '.cts':
|
|
249
|
+
return 'typescript';
|
|
250
|
+
case '.py':
|
|
251
|
+
return 'python';
|
|
252
|
+
case '.rs':
|
|
253
|
+
return 'rust';
|
|
254
|
+
default:
|
|
255
|
+
return undefined;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Validate skill bundle structure
|
|
260
|
+
*/
|
|
261
|
+
export async function validateSkillBundle(bundle) {
|
|
262
|
+
const errors = [];
|
|
263
|
+
// Check required fields
|
|
264
|
+
if (!bundle.skillMd || bundle.skillMd.trim().length === 0) {
|
|
265
|
+
errors.push('SKILL.md is empty or missing');
|
|
266
|
+
}
|
|
267
|
+
if (!bundle.skillId) {
|
|
268
|
+
errors.push('Skill ID is missing');
|
|
269
|
+
}
|
|
270
|
+
if (!bundle.name) {
|
|
271
|
+
errors.push('Skill name is missing');
|
|
272
|
+
}
|
|
273
|
+
// Validate MCP config structure (if present)
|
|
274
|
+
if (bundle.mcpConfig) {
|
|
275
|
+
if (!bundle.mcpConfig.name) {
|
|
276
|
+
errors.push('MCP config missing name field');
|
|
277
|
+
}
|
|
278
|
+
if (!bundle.mcpConfig.version) {
|
|
279
|
+
errors.push('MCP config missing version field');
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return errors;
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=bundle-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-loader.js","sourceRoot":"","sources":["../../src/skills/bundle-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability Mismatch Detection
|
|
3
|
+
*
|
|
4
|
+
* Detects mismatches between what SKILL.md declares and what code actually does.
|
|
5
|
+
*
|
|
6
|
+
* Examples:
|
|
7
|
+
* - SKILL.md says "reads user files" but code writes to network
|
|
8
|
+
* - SKILL.md says "queries database" but code executes shell commands
|
|
9
|
+
* - Code accesses sensitive data not mentioned in SKILL.md
|
|
10
|
+
*/
|
|
11
|
+
import type { CircleIR } from 'circle-ir';
|
|
12
|
+
import type { SkillFinding, ExtractedArtifact } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Detect capability mismatches between SKILL.md and code
|
|
15
|
+
*
|
|
16
|
+
* @param skillMdIR - CircleIR extracted from SKILL.md
|
|
17
|
+
* @param codeArtifacts - CircleIR extracted from code files
|
|
18
|
+
* @returns List of capability mismatch findings
|
|
19
|
+
*/
|
|
20
|
+
export declare function detectCapabilityMismatches(skillMdIR: CircleIR, codeArtifacts: ExtractedArtifact[]): Promise<SkillFinding[]>;
|
|
21
|
+
//# sourceMappingURL=capability-mismatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-mismatch.d.ts","sourceRoot":"","sources":["../../src/skills/capability-mismatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,WAAW,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGlE;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,QAAQ,EACnB,aAAa,EAAE,iBAAiB,EAAE,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC,CA0CzB"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability Mismatch Detection
|
|
3
|
+
*
|
|
4
|
+
* Detects mismatches between what SKILL.md declares and what code actually does.
|
|
5
|
+
*
|
|
6
|
+
* Examples:
|
|
7
|
+
* - SKILL.md says "reads user files" but code writes to network
|
|
8
|
+
* - SKILL.md says "queries database" but code executes shell commands
|
|
9
|
+
* - Code accesses sensitive data not mentioned in SKILL.md
|
|
10
|
+
*/
|
|
11
|
+
import { getAxLLMClient } from '../llm/ax-client.js';
|
|
12
|
+
/**
|
|
13
|
+
* Detect capability mismatches between SKILL.md and code
|
|
14
|
+
*
|
|
15
|
+
* @param skillMdIR - CircleIR extracted from SKILL.md
|
|
16
|
+
* @param codeArtifacts - CircleIR extracted from code files
|
|
17
|
+
* @returns List of capability mismatch findings
|
|
18
|
+
*/
|
|
19
|
+
export async function detectCapabilityMismatches(skillMdIR, codeArtifacts) {
|
|
20
|
+
const findings = [];
|
|
21
|
+
// Extract declared capabilities from SKILL.md
|
|
22
|
+
const declaredSources = skillMdIR.taint.sources || [];
|
|
23
|
+
const declaredSinks = skillMdIR.taint.sinks || [];
|
|
24
|
+
// Extract actual capabilities from code
|
|
25
|
+
const actualSources = [];
|
|
26
|
+
const actualSinks = [];
|
|
27
|
+
for (const artifact of codeArtifacts) {
|
|
28
|
+
for (const source of artifact.ir.taint.sources || []) {
|
|
29
|
+
actualSources.push({ ...source, artifact: artifact.artifact });
|
|
30
|
+
}
|
|
31
|
+
for (const sink of artifact.ir.taint.sinks || []) {
|
|
32
|
+
actualSinks.push({ ...sink, artifact: artifact.artifact });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Use LLM to detect semantic mismatches
|
|
36
|
+
const mismatches = await detectMismatchesWithLLM(declaredSources, declaredSinks, actualSources, actualSinks);
|
|
37
|
+
// Convert to findings
|
|
38
|
+
for (const mismatch of mismatches) {
|
|
39
|
+
findings.push({
|
|
40
|
+
type: 'capability_mismatch',
|
|
41
|
+
severity: mismatch.severity,
|
|
42
|
+
artifact: mismatch.artifact,
|
|
43
|
+
title: mismatch.title,
|
|
44
|
+
description: mismatch.description,
|
|
45
|
+
evidence: mismatch.evidence,
|
|
46
|
+
confidence: mismatch.confidence,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return findings;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Use LLM to detect semantic capability mismatches
|
|
53
|
+
*/
|
|
54
|
+
async function detectMismatchesWithLLM(declaredSources, declaredSinks, actualSources, actualSinks) {
|
|
55
|
+
const llm = getAxLLMClient();
|
|
56
|
+
const systemPrompt = `You are a security analyst detecting capability mismatches in AI skills.
|
|
57
|
+
|
|
58
|
+
A capability mismatch occurs when:
|
|
59
|
+
1. The SKILL.md claims to do X, but the code does Y instead
|
|
60
|
+
2. The code performs operation Y, but SKILL.md doesn't mention it
|
|
61
|
+
3. The declared data access doesn't match actual data accessed in code
|
|
62
|
+
|
|
63
|
+
Your job: Find semantic mismatches between declared and actual capabilities.
|
|
64
|
+
|
|
65
|
+
Be strict:
|
|
66
|
+
- Only flag CLEAR mismatches with evidence
|
|
67
|
+
- Ignore trivial differences (e.g., "read file" vs "load file" are the same)
|
|
68
|
+
- Focus on SECURITY-RELEVANT mismatches (data access, dangerous operations)
|
|
69
|
+
- Assign high confidence only when mismatch is obvious
|
|
70
|
+
|
|
71
|
+
IMPORTANT - What is NOT a mismatch:
|
|
72
|
+
- Validation/sanitization code (e.g., validatePath, encodeURIComponent) - this is GOOD security practice
|
|
73
|
+
- SKILL.md says "secure HTTP request" and code uses encodeURIComponent - this is IMPLEMENTING security, not a mismatch
|
|
74
|
+
- SKILL.md says "sandboxed file access" and code validates paths - this is correct implementation
|
|
75
|
+
- Semantic equivalence: "accesses api.example.com" vs "makes HTTP request" are the same thing
|
|
76
|
+
|
|
77
|
+
Examples of TRUE mismatches:
|
|
78
|
+
1. SKILL.md: "No network access" | Code: https.get() or https.request() → MISMATCH (undisclosed_capability, CRITICAL)
|
|
79
|
+
2. SKILL.md: "Runs offline" | Code: fetch() or HTTP sinks → MISMATCH (undisclosed_capability, CRITICAL)
|
|
80
|
+
3. SKILL.md: "Reads from database" | Code: no database calls found → MISMATCH (false_advertising)
|
|
81
|
+
4. SKILL.md: "Accesses api.weather.com only" | Code: accesses api.analytics.com → MISMATCH (data_mismatch)
|
|
82
|
+
5. SKILL.md: Says nothing about network | Code: makes HTTP requests to ANY domain → MISMATCH (undisclosed_capability)
|
|
83
|
+
|
|
84
|
+
CRITICAL - Network access is ALWAYS a mismatch if:
|
|
85
|
+
- SKILL.md says "no network", "offline", "no external access" BUT code has SSRF sinks (https.request, fetch, etc.)
|
|
86
|
+
- SKILL.md doesn't mention network access BUT code has SSRF sinks to ANY domain
|
|
87
|
+
- Network access is a SECURITY-CRITICAL capability that MUST be disclosed
|
|
88
|
+
|
|
89
|
+
Examples of FALSE matches (DO NOT FLAG):
|
|
90
|
+
1. SKILL.md: "Validates input" | Code: uses regex validation → NOT a mismatch (implementing stated security)
|
|
91
|
+
2. SKILL.md: "Reads files in workspace" | Code: calls validatePath() → NOT a mismatch (secure implementation)
|
|
92
|
+
3. SKILL.md: "Makes HTTP request" | Code: uses encodeURIComponent on URL → NOT a mismatch (secure implementation)
|
|
93
|
+
4. SKILL.md: "Accesses API" | Code: https.request() to that API → NOT a mismatch (documented network access)`;
|
|
94
|
+
const userPrompt = `Analyze this AI skill for capability mismatches:
|
|
95
|
+
|
|
96
|
+
**Declared Capabilities (from SKILL.md):**
|
|
97
|
+
|
|
98
|
+
Declared Sources (data inputs):
|
|
99
|
+
${formatSources(declaredSources)}
|
|
100
|
+
|
|
101
|
+
Declared Sinks (dangerous operations):
|
|
102
|
+
${formatSinks(declaredSinks)}
|
|
103
|
+
|
|
104
|
+
**Actual Capabilities (from code analysis):**
|
|
105
|
+
|
|
106
|
+
Actual Sources (data inputs):
|
|
107
|
+
${formatActualSources(actualSources)}
|
|
108
|
+
|
|
109
|
+
Actual Sinks (dangerous operations):
|
|
110
|
+
${formatActualSinks(actualSinks)}
|
|
111
|
+
|
|
112
|
+
**Task:** Find mismatches where:
|
|
113
|
+
1. Code performs operations not declared in SKILL.md (undisclosed capabilities)
|
|
114
|
+
2. SKILL.md declares operations not found in code (false advertising)
|
|
115
|
+
3. Data access patterns differ significantly
|
|
116
|
+
|
|
117
|
+
Return JSON array of mismatches:
|
|
118
|
+
[
|
|
119
|
+
{
|
|
120
|
+
"type": "undisclosed_capability" | "false_advertising" | "data_mismatch",
|
|
121
|
+
"title": "Brief title (< 10 words)",
|
|
122
|
+
"description": "Detailed explanation with evidence",
|
|
123
|
+
"severity": "critical" | "high" | "medium" | "low",
|
|
124
|
+
"artifact": "which code file contains the issue",
|
|
125
|
+
"evidence": {
|
|
126
|
+
"declared": "what SKILL.md says",
|
|
127
|
+
"actual": "what code does",
|
|
128
|
+
"location": "specific code location"
|
|
129
|
+
},
|
|
130
|
+
"confidence": 0.0-1.0
|
|
131
|
+
}
|
|
132
|
+
]
|
|
133
|
+
|
|
134
|
+
If no mismatches, return: []`;
|
|
135
|
+
try {
|
|
136
|
+
const result = await llm.chatJSON(systemPrompt, userPrompt, 'verification');
|
|
137
|
+
return result || [];
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
console.error('LLM mismatch detection failed:', error);
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Format sources for LLM prompt
|
|
146
|
+
*/
|
|
147
|
+
function formatSources(sources) {
|
|
148
|
+
if (sources.length === 0) {
|
|
149
|
+
return ' (none declared)';
|
|
150
|
+
}
|
|
151
|
+
return sources
|
|
152
|
+
.map((s, i) => ` ${i + 1}. ${s.type} at ${s.location}\n Severity: ${s.severity}\n Confidence: ${(s.confidence || 0.8) * 100}%`)
|
|
153
|
+
.join('\n');
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Format sinks for LLM prompt
|
|
157
|
+
*/
|
|
158
|
+
function formatSinks(sinks) {
|
|
159
|
+
if (sinks.length === 0) {
|
|
160
|
+
return ' (none declared)';
|
|
161
|
+
}
|
|
162
|
+
return sinks
|
|
163
|
+
.map((s, i) => ` ${i + 1}. ${s.type} (${s.cwe}) at ${s.location}\n Confidence: ${(s.confidence || 0.8) * 100}%`)
|
|
164
|
+
.join('\n');
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Format actual sources with artifact info
|
|
168
|
+
*/
|
|
169
|
+
function formatActualSources(sources) {
|
|
170
|
+
if (sources.length === 0) {
|
|
171
|
+
return ' (no sources found in code)';
|
|
172
|
+
}
|
|
173
|
+
return sources
|
|
174
|
+
.map((s, i) => ` ${i + 1}. ${s.type} in ${s.artifact}:${s.line}\n Location: ${s.location}\n Confidence: ${(s.confidence || 0.8) * 100}%`)
|
|
175
|
+
.join('\n');
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Format actual sinks with artifact info
|
|
179
|
+
*/
|
|
180
|
+
function formatActualSinks(sinks) {
|
|
181
|
+
if (sinks.length === 0) {
|
|
182
|
+
return ' (no dangerous operations found in code)';
|
|
183
|
+
}
|
|
184
|
+
return sinks
|
|
185
|
+
.map((s, i) => ` ${i + 1}. ${s.type} (${s.cwe}) in ${s.artifact}:${s.line}\n Location: ${s.location}\n Confidence: ${(s.confidence || 0.8) * 100}%`)
|
|
186
|
+
.join('\n');
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=capability-mismatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-mismatch.js","sourceRoot":"","sources":["../../src/skills/capability-mismatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills Analysis Module
|
|
3
|
+
*
|
|
4
|
+
* Analyze AI skill bundles (code + SKILL.md + MCP config) for security issues.
|
|
5
|
+
*/
|
|
6
|
+
export type { SkillBundle, SkillCodeFile, MCPServerConfig, MCPPermission, MCPTool, MCPResource, SkillAnalysisResult, SkillFinding, SkillFindingType, SkillAnalysisOptions, AnalysisProgress, ExtractedArtifact, } from './types.js';
|
|
7
|
+
export { loadSkillBundle, validateSkillBundle } from './bundle-loader.js';
|
|
8
|
+
export { analyzeSkillBundle } from './skill-analyzer.js';
|
|
9
|
+
export { detectCapabilityMismatches } from './capability-mismatch.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,WAAW,EACX,aAAa,EACb,eAAe,EACf,aAAa,EACb,OAAO,EACP,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills Analysis Module
|
|
3
|
+
*
|
|
4
|
+
* Analyze AI skill bundles (code + SKILL.md + MCP config) for security issues.
|
|
5
|
+
*/
|
|
6
|
+
export { loadSkillBundle, validateSkillBundle } from './bundle-loader.js';
|
|
7
|
+
export { analyzeSkillBundle } from './skill-analyzer.js';
|
|
8
|
+
export { detectCapabilityMismatches } from './capability-mismatch.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Main orchestrator for analyzing AI skill bundles.
|
|
5
|
+
* Coordinates extraction, taint analysis, and cross-artifact reasoning.
|
|
6
|
+
*/
|
|
7
|
+
import { type SkillAnalysisResult, type SkillAnalysisOptions } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Analyze a skill bundle
|
|
10
|
+
*
|
|
11
|
+
* @param skillPath - Path to skill directory
|
|
12
|
+
* @param options - Analysis options
|
|
13
|
+
* @returns Analysis result with findings and trust score
|
|
14
|
+
*/
|
|
15
|
+
export declare function analyzeSkillBundle(skillPath: string, options?: SkillAnalysisOptions): Promise<SkillAnalysisResult>;
|
|
16
|
+
//# sourceMappingURL=skill-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-analyzer.d.ts","sourceRoot":"","sources":["../../src/skills/skill-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAEL,KAAK,mBAAmB,EAExB,KAAK,oBAAoB,EAE1B,MAAM,YAAY,CAAC;AAKpB;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAyG9B"}
|