cognium-ai 1.20.1 → 2.0.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.
Files changed (140) hide show
  1. package/README.md +33 -19
  2. package/dist/cli/args.d.ts +82 -0
  3. package/dist/cli/args.d.ts.map +1 -0
  4. package/dist/cli/args.js +5 -0
  5. package/dist/cli/args.js.map +1 -0
  6. package/dist/cli/colors.d.ts +31 -0
  7. package/dist/cli/colors.d.ts.map +1 -0
  8. package/dist/cli/colors.js +80 -0
  9. package/dist/cli/colors.js.map +1 -0
  10. package/dist/cli/commands/analyze-skill.d.ts +33 -0
  11. package/dist/cli/commands/analyze-skill.d.ts.map +1 -0
  12. package/dist/cli/commands/analyze-skill.js +217 -0
  13. package/dist/cli/commands/analyze-skill.js.map +1 -0
  14. package/dist/cli/commands/analyze.d.ts +19 -0
  15. package/dist/cli/commands/analyze.d.ts.map +1 -0
  16. package/dist/cli/commands/analyze.js +301 -0
  17. package/dist/cli/commands/analyze.js.map +1 -0
  18. package/dist/cli/commands/benchmark-runner.d.ts +42 -0
  19. package/dist/cli/commands/benchmark-runner.d.ts.map +1 -0
  20. package/dist/cli/commands/benchmark-runner.js +18 -0
  21. package/dist/cli/commands/benchmark-runner.js.map +1 -0
  22. package/dist/cli/commands/benchmark.d.ts +11 -0
  23. package/dist/cli/commands/benchmark.d.ts.map +1 -0
  24. package/dist/cli/commands/benchmark.js +90 -0
  25. package/dist/cli/commands/benchmark.js.map +1 -0
  26. package/dist/cli/commands/cluster.d.ts +12 -0
  27. package/dist/cli/commands/cluster.d.ts.map +1 -0
  28. package/dist/cli/commands/cluster.js +202 -0
  29. package/dist/cli/commands/cluster.js.map +1 -0
  30. package/dist/cli/commands/compare.d.ts +13 -0
  31. package/dist/cli/commands/compare.d.ts.map +1 -0
  32. package/dist/cli/commands/compare.js +109 -0
  33. package/dist/cli/commands/compare.js.map +1 -0
  34. package/dist/cli/commands/dead-code.d.ts +11 -0
  35. package/dist/cli/commands/dead-code.d.ts.map +1 -0
  36. package/dist/cli/commands/dead-code.js +75 -0
  37. package/dist/cli/commands/dead-code.js.map +1 -0
  38. package/dist/cli/commands/generate-spec.d.ts +11 -0
  39. package/dist/cli/commands/generate-spec.d.ts.map +1 -0
  40. package/dist/cli/commands/generate-spec.js +119 -0
  41. package/dist/cli/commands/generate-spec.js.map +1 -0
  42. package/dist/cli/commands/health.d.ts +11 -0
  43. package/dist/cli/commands/health.d.ts.map +1 -0
  44. package/dist/cli/commands/health.js +76 -0
  45. package/dist/cli/commands/health.js.map +1 -0
  46. package/dist/cli/commands/metrics.d.ts +12 -0
  47. package/dist/cli/commands/metrics.d.ts.map +1 -0
  48. package/dist/cli/commands/metrics.js +231 -0
  49. package/dist/cli/commands/metrics.js.map +1 -0
  50. package/dist/cli/commands/project.d.ts +21 -0
  51. package/dist/cli/commands/project.d.ts.map +1 -0
  52. package/dist/cli/commands/project.js +92 -0
  53. package/dist/cli/commands/project.js.map +1 -0
  54. package/dist/cli/commands/quality.d.ts +15 -0
  55. package/dist/cli/commands/quality.d.ts.map +1 -0
  56. package/dist/cli/commands/quality.js +85 -0
  57. package/dist/cli/commands/quality.js.map +1 -0
  58. package/dist/cli/commands/scan.d.ts +11 -0
  59. package/dist/cli/commands/scan.d.ts.map +1 -0
  60. package/dist/cli/commands/scan.js +101 -0
  61. package/dist/cli/commands/scan.js.map +1 -0
  62. package/dist/cli/commands/secrets.d.ts +11 -0
  63. package/dist/cli/commands/secrets.d.ts.map +1 -0
  64. package/dist/cli/commands/secrets.js +79 -0
  65. package/dist/cli/commands/secrets.js.map +1 -0
  66. package/dist/cli/commands/spec-diff.d.ts +12 -0
  67. package/dist/cli/commands/spec-diff.d.ts.map +1 -0
  68. package/dist/cli/commands/spec-diff.js +149 -0
  69. package/dist/cli/commands/spec-diff.js.map +1 -0
  70. package/dist/cli/commands/swarm.d.ts +21 -0
  71. package/dist/cli/commands/swarm.d.ts.map +1 -0
  72. package/dist/cli/commands/swarm.js +173 -0
  73. package/dist/cli/commands/swarm.js.map +1 -0
  74. package/dist/cli/commands/trust.d.ts +23 -0
  75. package/dist/cli/commands/trust.d.ts.map +1 -0
  76. package/dist/cli/commands/trust.js +364 -0
  77. package/dist/cli/commands/trust.js.map +1 -0
  78. package/dist/cli/commands/understand.d.ts +12 -0
  79. package/dist/cli/commands/understand.d.ts.map +1 -0
  80. package/dist/cli/commands/understand.js +186 -0
  81. package/dist/cli/commands/understand.js.map +1 -0
  82. package/dist/cli/config.d.ts +161 -0
  83. package/dist/cli/config.d.ts.map +1 -0
  84. package/dist/cli/config.js +383 -0
  85. package/dist/cli/config.js.map +1 -0
  86. package/dist/cli/discovery.d.ts +31 -0
  87. package/dist/cli/discovery.d.ts.map +1 -0
  88. package/dist/cli/discovery.js +212 -0
  89. package/dist/cli/discovery.js.map +1 -0
  90. package/dist/cli/effective-options.d.ts +42 -0
  91. package/dist/cli/effective-options.d.ts.map +1 -0
  92. package/dist/cli/effective-options.js +80 -0
  93. package/dist/cli/effective-options.js.map +1 -0
  94. package/dist/cli/file-collection.d.ts +49 -0
  95. package/dist/cli/file-collection.d.ts.map +1 -0
  96. package/dist/cli/file-collection.js +142 -0
  97. package/dist/cli/file-collection.js.map +1 -0
  98. package/dist/cli/formatters/index.d.ts +15 -0
  99. package/dist/cli/formatters/index.d.ts.map +1 -0
  100. package/dist/cli/formatters/index.js +51 -0
  101. package/dist/cli/formatters/index.js.map +1 -0
  102. package/dist/cli/formatters/json.d.ts +11 -0
  103. package/dist/cli/formatters/json.d.ts.map +1 -0
  104. package/dist/cli/formatters/json.js +12 -0
  105. package/dist/cli/formatters/json.js.map +1 -0
  106. package/dist/cli/formatters/project-json.d.ts +11 -0
  107. package/dist/cli/formatters/project-json.d.ts.map +1 -0
  108. package/dist/cli/formatters/project-json.js +12 -0
  109. package/dist/cli/formatters/project-json.js.map +1 -0
  110. package/dist/cli/formatters/project-sarif.d.ts +11 -0
  111. package/dist/cli/formatters/project-sarif.d.ts.map +1 -0
  112. package/dist/cli/formatters/project-sarif.js +127 -0
  113. package/dist/cli/formatters/project-sarif.js.map +1 -0
  114. package/dist/cli/formatters/project-summary.d.ts +11 -0
  115. package/dist/cli/formatters/project-summary.d.ts.map +1 -0
  116. package/dist/cli/formatters/project-summary.js +202 -0
  117. package/dist/cli/formatters/project-summary.js.map +1 -0
  118. package/dist/cli/formatters/sarif-shared.d.ts +101 -0
  119. package/dist/cli/formatters/sarif-shared.d.ts.map +1 -0
  120. package/dist/cli/formatters/sarif-shared.js +57 -0
  121. package/dist/cli/formatters/sarif-shared.js.map +1 -0
  122. package/dist/cli/formatters/sarif.d.ts +12 -0
  123. package/dist/cli/formatters/sarif.d.ts.map +1 -0
  124. package/dist/cli/formatters/sarif.js +92 -0
  125. package/dist/cli/formatters/sarif.js.map +1 -0
  126. package/dist/cli/formatters/summary.d.ts +11 -0
  127. package/dist/cli/formatters/summary.d.ts.map +1 -0
  128. package/dist/cli/formatters/summary.js +240 -0
  129. package/dist/cli/formatters/summary.js.map +1 -0
  130. package/dist/cli/formatters/two-phase-summary.d.ts +11 -0
  131. package/dist/cli/formatters/two-phase-summary.d.ts.map +1 -0
  132. package/dist/cli/formatters/two-phase-summary.js +188 -0
  133. package/dist/cli/formatters/two-phase-summary.js.map +1 -0
  134. package/dist/cli/program.d.ts +117 -0
  135. package/dist/cli/program.d.ts.map +1 -0
  136. package/dist/cli/program.js +852 -0
  137. package/dist/cli/program.js.map +1 -0
  138. package/dist/cli.js +16 -3
  139. package/dist/cli.js.map +1 -1
  140. package/package.json +5 -2
package/README.md CHANGED
@@ -11,35 +11,39 @@ npm install -g cognium-ai
11
11
  ## Commands
12
12
 
13
13
  ```bash
14
- cognium-ai scan <path> # Scan for security vulnerabilities (LLM-enhanced)
15
- cognium-ai dead-code <path> # Detect dead/unreachable code
16
- cognium-ai secrets <path> # Scan for secrets and credentials
17
- cognium-ai health <path> # Calculate codebase health score
18
- cognium-ai metrics <path> # Software metrics (CK suite, Halstead)
19
- cognium-ai skill <path> # Analyze AI skill bundle security
20
- cognium-ai trust <path> # Trust score (27 passes: supply chain, security, AI safety)
21
- cognium-ai compare <A> <B> # Compare trust scores between two paths
22
- cognium-ai quality <path> # Quality score (5 passes)
23
- cognium-ai understand <path> # Semantic understanding (functions, roles, side effects)
24
- cognium-ai spec-diff <path> # Spec-gap analysis (code vs spec alignment)
25
- cognium-ai cluster <path> # Component clustering and architecture analysis
26
- cognium-ai generate-spec <file> # Generate Specifica spec from code
27
- cognium-ai init # Create configuration file
14
+ cognium-ai scan <path> # Scan for security vulnerabilities (LLM-enhanced)
15
+ cognium-ai trust <path> # Trust score across 30+ passes (supply chain, security, AI safety, compliance)
16
+ cognium-ai quality <path> # Quality score (complexity, tests, docs, maintainability, performance)
17
+ cognium-ai spec-diff <path> # Spec-gap analysis (code vs Specifica spec alignment)
18
+ cognium-ai generate-spec <path> # Generate Specifica spec from code
19
+
20
+ cognium-ai init # Create cognium.config.json (auto-detects languages)
21
+ cognium-ai doctor # Check environment, LLM config, project setup
22
+ cognium-ai version # Show component versions
28
23
  ```
29
24
 
25
+ Run `cognium-ai <command> --help` for command-specific options. Several
26
+ additional commands (`dead-code`, `secrets`, `health`, `metrics`,
27
+ `understand`, `cluster`, `compare`, `analyze-skill`, `benchmark`) are
28
+ available but currently undergoing CLI polish — they remain callable but
29
+ are hidden from the headline `--help` until they soak.
30
+
30
31
  ## Scan Options
31
32
 
32
33
  ```bash
33
34
  cognium-ai scan src/ # LLM-enhanced scan (default)
34
35
  cognium-ai scan src/ --no-llm # Static-only (no LLM)
35
- cognium-ai scan src/ --llm-discovery # LLM discovery mode (deeper)
36
36
  cognium-ai scan src/ -f json -o results.json # JSON output to file
37
- cognium-ai scan src/ -f sarif -o results.sarif # SARIF output
38
37
  cognium-ai scan src/ --severity high # High+ severity only
39
38
  cognium-ai scan src/ --exclude-tests # Skip test files
40
39
  cognium-ai scan src/ --threads 20 # Custom parallelism
40
+ cognium-ai scan src/ -x '**/vendor/**' # Exclude paths
41
+ cognium-ai scan src/ --exit-code # Exit 1 on findings (CI)
41
42
  ```
42
43
 
44
+ For SARIF output, use `cognium-ai trust` (`-f sarif -o trust.sarif`),
45
+ which produces SARIF 2.1.0 against all trust passes.
46
+
43
47
  ## LLM Configuration
44
48
 
45
49
  Configure via CLI flags or environment variables (flags take precedence):
@@ -62,8 +66,8 @@ export LLM_ENRICHMENT_MODEL=cognium/gpt-oss-120b
62
66
  | `--llm-base-url <url>` | LLM API base URL (OpenAI-compatible) | `http://localhost:4000/v1` |
63
67
  | `--llm-api-key <key>` | LLM API key | `LLM_API_KEY` env var |
64
68
  | `--llm-model <model>` | LLM model name | `cognium/gpt-oss-120b` |
65
- | `--no-llm` | Disable LLM, static analysis only | off |
66
- | `--llm-discovery` | Enable deeper LLM discovery mode | off |
69
+ | `--no-llm` | Disable LLM, use static analysis only | LLM enabled by default |
70
+ | `--no-llm-discovery` | Disable LLM discovery mode | discovery enabled by default |
67
71
 
68
72
  ### Provider Examples
69
73
 
@@ -107,7 +111,17 @@ jobs:
107
111
  --llm-base-url https://models.github.ai/inference \
108
112
  --llm-api-key "$GITHUB_TOKEN" \
109
113
  --llm-model openai/gpt-5 \
110
- -f sarif -o results.sarif
114
+ -f json -o scan.json
115
+
116
+ - name: Trust score with SARIF for code-scanning upload
117
+ env:
118
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
119
+ run: |
120
+ cognium-ai trust ./src \
121
+ --llm-base-url https://models.github.ai/inference \
122
+ --llm-api-key "$GITHUB_TOKEN" \
123
+ --llm-model openai/gpt-5 \
124
+ -f sarif -o trust.sarif
111
125
  ```
112
126
 
113
127
  **Free tier limits**: `openai/gpt-5` = 50 req/day, `openai/gpt-4o-mini` = 150 req/day. Uses the built-in `GITHUB_TOKEN` with `models: read` permission.
@@ -0,0 +1,82 @@
1
+ /**
2
+ * CLI Argument Parser
3
+ */
4
+ export type OutputFormat = 'json' | 'summary' | 'sarif' | 'markdown' | 'csv';
5
+ export type Command = 'analyze' | 'benchmark' | 'scan' | 'health' | 'secrets' | 'dead-code' | 'generate-spec' | 'analyze-skill' | 'metrics' | 'trust' | 'compare' | 'quality' | 'understand' | 'spec-diff' | 'cluster';
6
+ export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent';
7
+ export type BundleType = 'jr-dev' | 'sr-dev' | 'architect' | 'security-review' | 'full-review';
8
+ export interface CliArgs {
9
+ command: Command;
10
+ file: string | null;
11
+ directory: string | null;
12
+ format: OutputFormat;
13
+ output: string | null;
14
+ config: string | null;
15
+ include: string[];
16
+ exclude: string[];
17
+ exitCode: boolean;
18
+ quiet: boolean;
19
+ help: boolean;
20
+ version: boolean;
21
+ logLevel: LogLevel | null;
22
+ discoverPatterns: boolean;
23
+ patternThreshold: number;
24
+ noLlm: boolean;
25
+ llmEnrich: boolean;
26
+ llmVerify: boolean;
27
+ llmBaseUrl: string | null;
28
+ llmApiKey: string | null;
29
+ llmModel: string | null;
30
+ language: string | null;
31
+ threads: number;
32
+ bundle: BundleType | null;
33
+ expectedResults: string | null;
34
+ limit: number | null;
35
+ categories: string[];
36
+ parallel: number | null;
37
+ cache: boolean;
38
+ cacheDir: string | null;
39
+ clearCache: boolean;
40
+ streamOutput: string | null;
41
+ memoryEfficient: boolean;
42
+ specModel: string | null;
43
+ specOverwrite: boolean;
44
+ specSkip: boolean;
45
+ specNoBackup: boolean;
46
+ specDesign: boolean;
47
+ specPrinciples: boolean;
48
+ specTasks: boolean;
49
+ specDesignLLM: boolean;
50
+ specPrinciplesLLM: boolean;
51
+ specTasksLLM: boolean;
52
+ specDir: string | null;
53
+ crossArtifact?: boolean;
54
+ verification?: boolean;
55
+ minConfidence?: number;
56
+ minSeverity?: 'critical' | 'high' | 'medium' | 'low' | 'info';
57
+ severity: 'critical' | 'high' | 'medium' | 'low' | null;
58
+ excludeTests: boolean;
59
+ llmDiscovery: boolean;
60
+ disablePass: string[];
61
+ fileTimeout: number;
62
+ maxFiles: number | null;
63
+ pathB: string | null;
64
+ history: boolean;
65
+ maxCommits: number;
66
+ includeCategory: string[];
67
+ excludeCategory: string[];
68
+ includeTests: boolean;
69
+ publicAsEntry: boolean;
70
+ top: number | null;
71
+ full: boolean;
72
+ metricCategory: string[];
73
+ role: string[];
74
+ securityOnly: boolean;
75
+ healthSecurity: boolean;
76
+ healthSecrets: boolean;
77
+ healthDeadCode: boolean;
78
+ healthQuality: boolean;
79
+ healthPerformance: boolean;
80
+ threshold: number;
81
+ }
82
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * CLI Argument Parser
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Terminal Colors
3
+ *
4
+ * Lightweight color utilities using ANSI codes.
5
+ * Colors are disabled when output is not a TTY (piping to file).
6
+ */
7
+ export declare const colors: {
8
+ red: (text: string) => string;
9
+ green: (text: string) => string;
10
+ yellow: (text: string) => string;
11
+ blue: (text: string) => string;
12
+ magenta: (text: string) => string;
13
+ cyan: (text: string) => string;
14
+ gray: (text: string) => string;
15
+ bold: (text: string) => string;
16
+ dim: (text: string) => string;
17
+ error: (text: string) => string;
18
+ warning: (text: string) => string;
19
+ success: (text: string) => string;
20
+ info: (text: string) => string;
21
+ critical: (text: string) => string;
22
+ high: (text: string) => string;
23
+ medium: (text: string) => string;
24
+ low: (text: string) => string;
25
+ };
26
+ export declare function getSpinnerFrame(): string;
27
+ /**
28
+ * Clear the current line and move cursor to start.
29
+ */
30
+ export declare function clearLine(): void;
31
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/cli/colors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuCH,eAAO,MAAM,MAAM;gBAEL,MAAM;kBACJ,MAAM;mBACL,MAAM;iBACR,MAAM;oBACH,MAAM;iBACT,MAAM;iBACN,MAAM;iBAGN,MAAM;gBACP,MAAM;kBAGJ,MAAM;oBACJ,MAAM;oBACN,MAAM;iBACT,MAAM;qBAGF,MAAM;iBACV,MAAM;mBACJ,MAAM;gBACT,MAAM;CACnB,CAAC;AAQF,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAGhC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Terminal Colors
3
+ *
4
+ * Lightweight color utilities using ANSI codes.
5
+ * Colors are disabled when output is not a TTY (piping to file).
6
+ */
7
+ // Check if colors should be enabled
8
+ const supportsColor = process.stdout.isTTY && !process.env.NO_COLOR;
9
+ const codes = {
10
+ reset: '\x1b[0m',
11
+ bold: '\x1b[1m',
12
+ dim: '\x1b[2m',
13
+ // Colors
14
+ red: '\x1b[31m',
15
+ green: '\x1b[32m',
16
+ yellow: '\x1b[33m',
17
+ blue: '\x1b[34m',
18
+ magenta: '\x1b[35m',
19
+ cyan: '\x1b[36m',
20
+ white: '\x1b[37m',
21
+ gray: '\x1b[90m',
22
+ // Bright colors
23
+ brightRed: '\x1b[91m',
24
+ brightGreen: '\x1b[92m',
25
+ brightYellow: '\x1b[93m',
26
+ brightBlue: '\x1b[94m',
27
+ brightMagenta: '\x1b[95m',
28
+ brightCyan: '\x1b[96m',
29
+ // Background
30
+ bgRed: '\x1b[41m',
31
+ bgGreen: '\x1b[42m',
32
+ bgYellow: '\x1b[43m',
33
+ };
34
+ function colorize(color, text) {
35
+ if (!supportsColor)
36
+ return text;
37
+ return `${color}${text}${codes.reset}`;
38
+ }
39
+ export const colors = {
40
+ // Text colors
41
+ red: (text) => colorize(codes.red, text),
42
+ green: (text) => colorize(codes.green, text),
43
+ yellow: (text) => colorize(codes.yellow, text),
44
+ blue: (text) => colorize(codes.blue, text),
45
+ magenta: (text) => colorize(codes.magenta, text),
46
+ cyan: (text) => colorize(codes.cyan, text),
47
+ gray: (text) => colorize(codes.gray, text),
48
+ // Styles
49
+ bold: (text) => colorize(codes.bold, text),
50
+ dim: (text) => colorize(codes.dim, text),
51
+ // Semantic colors
52
+ error: (text) => colorize(codes.red, text),
53
+ warning: (text) => colorize(codes.yellow, text),
54
+ success: (text) => colorize(codes.green, text),
55
+ info: (text) => colorize(codes.cyan, text),
56
+ // Severity
57
+ critical: (text) => colorize(codes.brightRed + codes.bold, text),
58
+ high: (text) => colorize(codes.red, text),
59
+ medium: (text) => colorize(codes.yellow, text),
60
+ low: (text) => colorize(codes.gray, text),
61
+ };
62
+ /**
63
+ * Format a spinner character for progress indication.
64
+ */
65
+ const spinnerFrames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
66
+ let spinnerIndex = 0;
67
+ export function getSpinnerFrame() {
68
+ if (!supportsColor)
69
+ return '*';
70
+ return spinnerFrames[spinnerIndex++ % spinnerFrames.length];
71
+ }
72
+ /**
73
+ * Clear the current line and move cursor to start.
74
+ */
75
+ export function clearLine() {
76
+ if (!supportsColor)
77
+ return;
78
+ process.stdout.write('\r\x1b[K');
79
+ }
80
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/cli/colors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Analyze Skill CLI Command
3
+ *
4
+ * Analyzes AI skill bundles for security issues.
5
+ *
6
+ * Usage:
7
+ * cognium-ai analyze-skill <skill-path>
8
+ * cognium-ai analyze-skill <skill-path> --format json
9
+ * cognium-ai analyze-skill <skill-path> --format json -o report.json
10
+ * cognium-ai analyze-skill <skill-path> --no-cross-artifact
11
+ * cognium-ai analyze-skill <skill-path> --min-confidence 0.8
12
+ */
13
+ export interface AnalyzeSkillOptions {
14
+ /** Output format */
15
+ format?: 'text' | 'json' | 'markdown';
16
+ /** Output file path */
17
+ output?: string;
18
+ /** Enable cross-artifact analysis */
19
+ crossArtifact?: boolean;
20
+ /** Enable LLM verification */
21
+ verification?: boolean;
22
+ /** Minimum confidence threshold */
23
+ minConfidence?: number;
24
+ /** Minimum severity to report */
25
+ minSeverity?: 'critical' | 'high' | 'medium' | 'low' | 'info';
26
+ /** Show progress */
27
+ verbose?: boolean;
28
+ }
29
+ /**
30
+ * Execute analyze-skill command
31
+ */
32
+ export declare function executeAnalyzeSkill(skillPath: string, options?: AnalyzeSkillOptions): Promise<void>;
33
+ //# sourceMappingURL=analyze-skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-skill.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,MAAM,WAAW,mBAAmB;IAClC,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IAEtC,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,qCAAqC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,iCAAiC;IACjC,WAAW,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAE9D,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6C7G"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Analyze Skill CLI Command
3
+ *
4
+ * Analyzes AI skill bundles for security issues.
5
+ *
6
+ * Usage:
7
+ * cognium-ai analyze-skill <skill-path>
8
+ * cognium-ai analyze-skill <skill-path> --format json
9
+ * cognium-ai analyze-skill <skill-path> --format json -o report.json
10
+ * cognium-ai analyze-skill <skill-path> --no-cross-artifact
11
+ * cognium-ai analyze-skill <skill-path> --min-confidence 0.8
12
+ */
13
+ import * as fs from 'fs/promises';
14
+ import { analyzeSkillBundle, } from 'circle-ir-ai';
15
+ /**
16
+ * Execute analyze-skill command
17
+ */
18
+ export async function executeAnalyzeSkill(skillPath, options = {}) {
19
+ const { format = 'text', output, crossArtifact = true, verification = true, minConfidence = 0.7, minSeverity = 'low', verbose = false, } = options;
20
+ try {
21
+ if (verbose) {
22
+ console.log(`Analyzing skill: ${skillPath}\n`);
23
+ }
24
+ // Run analysis
25
+ const result = await analyzeSkillBundle(skillPath, {
26
+ enableCrossArtifact: crossArtifact,
27
+ enableVerification: verification,
28
+ minConfidence,
29
+ minSeverity,
30
+ onProgress: verbose ? progressCallback : undefined,
31
+ });
32
+ // Format output
33
+ const formattedOutput = formatAnalysisResult(result, format);
34
+ // Write to file or stdout
35
+ if (output) {
36
+ await fs.writeFile(output, formattedOutput, 'utf-8');
37
+ console.log(`\nReport written to: ${output}`);
38
+ }
39
+ else {
40
+ console.log(formattedOutput);
41
+ }
42
+ // Exit with appropriate code
43
+ const hasCriticalFindings = result.findings.some((f) => f.severity === 'critical');
44
+ if (hasCriticalFindings) {
45
+ process.exit(1);
46
+ }
47
+ }
48
+ catch (error) {
49
+ console.error(`Error: ${error instanceof Error ? error.message : error}`);
50
+ process.exit(1);
51
+ }
52
+ }
53
+ /**
54
+ * Progress callback for verbose mode
55
+ */
56
+ function progressCallback(status) {
57
+ const progress = status.progress.toFixed(0).padStart(3, ' ');
58
+ console.log(`[${progress}%] ${status.phase.toUpperCase().padEnd(10)} ${status.message}`);
59
+ }
60
+ /**
61
+ * Format analysis result based on format option
62
+ */
63
+ function formatAnalysisResult(result, format) {
64
+ switch (format) {
65
+ case 'json':
66
+ return JSON.stringify(result, null, 2);
67
+ case 'markdown':
68
+ return formatMarkdown(result);
69
+ case 'text':
70
+ default:
71
+ return formatText(result);
72
+ }
73
+ }
74
+ /**
75
+ * Format as plain text
76
+ */
77
+ function formatText(result) {
78
+ const lines = [];
79
+ lines.push('='.repeat(80));
80
+ lines.push(`SKILL ANALYSIS REPORT: ${result.name}`);
81
+ lines.push('='.repeat(80));
82
+ lines.push('');
83
+ lines.push(`Skill ID: ${result.skillId}`);
84
+ lines.push(`Version: ${result.version}`);
85
+ lines.push(`Trust Score: ${(result.score * 100).toFixed(1)}% ${getScoreEmoji(result.score)}`);
86
+ lines.push(`Findings: ${result.findings.length}`);
87
+ lines.push(`Analysis Time: ${(result.metadata.durationMs / 1000).toFixed(2)}s`);
88
+ lines.push('');
89
+ // Group findings by severity
90
+ const bySeverity = groupBySeverity(result.findings);
91
+ for (const severity of ['critical', 'high', 'medium', 'low', 'info']) {
92
+ const findings = bySeverity.get(severity) || [];
93
+ if (findings.length === 0)
94
+ continue;
95
+ lines.push('');
96
+ lines.push(`${'─'.repeat(80)}`);
97
+ lines.push(`${severity.toUpperCase()} FINDINGS (${findings.length})`);
98
+ lines.push(`${'─'.repeat(80)}`);
99
+ lines.push('');
100
+ for (let i = 0; i < findings.length; i++) {
101
+ const finding = findings[i];
102
+ lines.push(`${i + 1}. ${finding.title}`);
103
+ lines.push(` Type: ${finding.type}`);
104
+ lines.push(` Artifact: ${finding.artifact}`);
105
+ lines.push(` Confidence: ${(finding.confidence * 100).toFixed(0)}%`);
106
+ if (finding.cwe) {
107
+ lines.push(` CWE: ${finding.cwe}`);
108
+ }
109
+ if (finding.location?.line) {
110
+ lines.push(` Location: Line ${finding.location.line}`);
111
+ }
112
+ lines.push(` Description: ${finding.description}`);
113
+ lines.push('');
114
+ }
115
+ }
116
+ // Recommendations
117
+ if (result.recommendations.length > 0) {
118
+ lines.push('');
119
+ lines.push(`${'─'.repeat(80)}`);
120
+ lines.push('RECOMMENDATIONS');
121
+ lines.push(`${'─'.repeat(80)}`);
122
+ lines.push('');
123
+ for (let i = 0; i < result.recommendations.length; i++) {
124
+ lines.push(`${i + 1}. ${result.recommendations[i]}`);
125
+ }
126
+ lines.push('');
127
+ }
128
+ lines.push('='.repeat(80));
129
+ return lines.join('\n');
130
+ }
131
+ /**
132
+ * Format as Markdown
133
+ */
134
+ function formatMarkdown(result) {
135
+ const lines = [];
136
+ lines.push(`# Skill Analysis Report: ${result.name}`);
137
+ lines.push('');
138
+ lines.push(`**Skill ID:** ${result.skillId} `);
139
+ lines.push(`**Version:** ${result.version} `);
140
+ lines.push(`**Trust Score:** ${(result.score * 100).toFixed(1)}% ${getScoreEmoji(result.score)} `);
141
+ lines.push(`**Findings:** ${result.findings.length} `);
142
+ lines.push(`**Analysis Time:** ${(result.metadata.durationMs / 1000).toFixed(2)}s `);
143
+ lines.push('');
144
+ // Summary by severity
145
+ const bySeverity = groupBySeverity(result.findings);
146
+ lines.push('## Summary');
147
+ lines.push('');
148
+ lines.push('| Severity | Count |');
149
+ lines.push('|----------|-------|');
150
+ for (const severity of ['critical', 'high', 'medium', 'low', 'info']) {
151
+ const count = bySeverity.get(severity)?.length || 0;
152
+ if (count > 0) {
153
+ lines.push(`| ${severity} | ${count} |`);
154
+ }
155
+ }
156
+ lines.push('');
157
+ // Detailed findings
158
+ for (const severity of ['critical', 'high', 'medium', 'low', 'info']) {
159
+ const findings = bySeverity.get(severity) || [];
160
+ if (findings.length === 0)
161
+ continue;
162
+ lines.push(`## ${severity.toUpperCase()} Findings (${findings.length})`);
163
+ lines.push('');
164
+ for (let i = 0; i < findings.length; i++) {
165
+ const finding = findings[i];
166
+ lines.push(`### ${i + 1}. ${finding.title}`);
167
+ lines.push('');
168
+ lines.push(`- **Type:** ${finding.type}`);
169
+ lines.push(`- **Artifact:** ${finding.artifact}`);
170
+ lines.push(`- **Confidence:** ${(finding.confidence * 100).toFixed(0)}%`);
171
+ if (finding.cwe) {
172
+ lines.push(`- **CWE:** ${finding.cwe}`);
173
+ }
174
+ if (finding.location?.line) {
175
+ lines.push(`- **Location:** Line ${finding.location.line}`);
176
+ }
177
+ lines.push('');
178
+ lines.push(`**Description:** ${finding.description}`);
179
+ lines.push('');
180
+ }
181
+ }
182
+ // Recommendations
183
+ if (result.recommendations.length > 0) {
184
+ lines.push('## Recommendations');
185
+ lines.push('');
186
+ for (let i = 0; i < result.recommendations.length; i++) {
187
+ lines.push(`${i + 1}. ${result.recommendations[i]}`);
188
+ }
189
+ lines.push('');
190
+ }
191
+ return lines.join('\n');
192
+ }
193
+ /**
194
+ * Get emoji for score
195
+ */
196
+ function getScoreEmoji(score) {
197
+ if (score >= 0.9)
198
+ return '✅';
199
+ if (score >= 0.7)
200
+ return '⚠️';
201
+ if (score >= 0.5)
202
+ return '❌';
203
+ return '🚨';
204
+ }
205
+ /**
206
+ * Group findings by severity
207
+ */
208
+ function groupBySeverity(findings) {
209
+ const map = new Map();
210
+ for (const finding of findings) {
211
+ const existing = map.get(finding.severity) || [];
212
+ existing.push(finding);
213
+ map.set(finding.severity, existing);
214
+ }
215
+ return map;
216
+ }
217
+ //# sourceMappingURL=analyze-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-skill.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze-skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Analyze command — single-file, directory swarm, or multi-agent bundle.
3
+ *
4
+ * Also exports the lower-level runAnalysis() helper used by other code.
5
+ */
6
+ import { type CircleIR, type TaintConfig } from 'circle-ir';
7
+ import type { CliArgs } from '../args.js';
8
+ export interface AnalysisOptions {
9
+ taintConfig?: TaintConfig;
10
+ discoverPatterns?: boolean;
11
+ patternThreshold?: number;
12
+ llmEnrich?: boolean;
13
+ llmVerify?: boolean;
14
+ llmBaseUrl?: string;
15
+ llmApiKey?: string;
16
+ }
17
+ export declare function runAnalysis(filePath: string, options?: AnalysisOptions): Promise<CircleIR>;
18
+ export declare function executeAnalyze(args: CliArgs): Promise<number>;
19
+ //# sourceMappingURL=analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAW,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AASrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAS1C,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAQnB;AAyGD,wBAAsB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAuLnE"}