circle-ir-ai 2.7.1 → 2.7.2

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 (146) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/package.json +2 -2
  3. package/dist/cli/args.d.ts +0 -86
  4. package/dist/cli/args.d.ts.map +0 -1
  5. package/dist/cli/args.js +0 -653
  6. package/dist/cli/args.js.map +0 -1
  7. package/dist/cli/colors.d.ts +0 -31
  8. package/dist/cli/colors.d.ts.map +0 -1
  9. package/dist/cli/colors.js +0 -80
  10. package/dist/cli/colors.js.map +0 -1
  11. package/dist/cli/commands/analyze-skill.d.ts +0 -33
  12. package/dist/cli/commands/analyze-skill.d.ts.map +0 -1
  13. package/dist/cli/commands/analyze-skill.js +0 -217
  14. package/dist/cli/commands/analyze-skill.js.map +0 -1
  15. package/dist/cli/commands/analyze.d.ts +0 -19
  16. package/dist/cli/commands/analyze.d.ts.map +0 -1
  17. package/dist/cli/commands/analyze.js +0 -303
  18. package/dist/cli/commands/analyze.js.map +0 -1
  19. package/dist/cli/commands/benchmark-runner.d.ts +0 -42
  20. package/dist/cli/commands/benchmark-runner.d.ts.map +0 -1
  21. package/dist/cli/commands/benchmark-runner.js +0 -18
  22. package/dist/cli/commands/benchmark-runner.js.map +0 -1
  23. package/dist/cli/commands/benchmark.d.ts +0 -11
  24. package/dist/cli/commands/benchmark.d.ts.map +0 -1
  25. package/dist/cli/commands/benchmark.js +0 -90
  26. package/dist/cli/commands/benchmark.js.map +0 -1
  27. package/dist/cli/commands/cluster.d.ts +0 -12
  28. package/dist/cli/commands/cluster.d.ts.map +0 -1
  29. package/dist/cli/commands/cluster.js +0 -203
  30. package/dist/cli/commands/cluster.js.map +0 -1
  31. package/dist/cli/commands/compare.d.ts +0 -13
  32. package/dist/cli/commands/compare.d.ts.map +0 -1
  33. package/dist/cli/commands/compare.js +0 -109
  34. package/dist/cli/commands/compare.js.map +0 -1
  35. package/dist/cli/commands/dead-code.d.ts +0 -11
  36. package/dist/cli/commands/dead-code.d.ts.map +0 -1
  37. package/dist/cli/commands/dead-code.js +0 -75
  38. package/dist/cli/commands/dead-code.js.map +0 -1
  39. package/dist/cli/commands/generate-spec.d.ts +0 -11
  40. package/dist/cli/commands/generate-spec.d.ts.map +0 -1
  41. package/dist/cli/commands/generate-spec.js +0 -120
  42. package/dist/cli/commands/generate-spec.js.map +0 -1
  43. package/dist/cli/commands/health.d.ts +0 -11
  44. package/dist/cli/commands/health.d.ts.map +0 -1
  45. package/dist/cli/commands/health.js +0 -76
  46. package/dist/cli/commands/health.js.map +0 -1
  47. package/dist/cli/commands/index.d.ts +0 -30
  48. package/dist/cli/commands/index.d.ts.map +0 -1
  49. package/dist/cli/commands/index.js +0 -36
  50. package/dist/cli/commands/index.js.map +0 -1
  51. package/dist/cli/commands/metrics.d.ts +0 -12
  52. package/dist/cli/commands/metrics.d.ts.map +0 -1
  53. package/dist/cli/commands/metrics.js +0 -231
  54. package/dist/cli/commands/metrics.js.map +0 -1
  55. package/dist/cli/commands/project.d.ts +0 -21
  56. package/dist/cli/commands/project.d.ts.map +0 -1
  57. package/dist/cli/commands/project.js +0 -92
  58. package/dist/cli/commands/project.js.map +0 -1
  59. package/dist/cli/commands/quality.d.ts +0 -15
  60. package/dist/cli/commands/quality.d.ts.map +0 -1
  61. package/dist/cli/commands/quality.js +0 -86
  62. package/dist/cli/commands/quality.js.map +0 -1
  63. package/dist/cli/commands/scan.d.ts +0 -11
  64. package/dist/cli/commands/scan.d.ts.map +0 -1
  65. package/dist/cli/commands/scan.js +0 -102
  66. package/dist/cli/commands/scan.js.map +0 -1
  67. package/dist/cli/commands/secrets.d.ts +0 -11
  68. package/dist/cli/commands/secrets.d.ts.map +0 -1
  69. package/dist/cli/commands/secrets.js +0 -79
  70. package/dist/cli/commands/secrets.js.map +0 -1
  71. package/dist/cli/commands/spec-diff.d.ts +0 -12
  72. package/dist/cli/commands/spec-diff.d.ts.map +0 -1
  73. package/dist/cli/commands/spec-diff.js +0 -150
  74. package/dist/cli/commands/spec-diff.js.map +0 -1
  75. package/dist/cli/commands/swarm.d.ts +0 -21
  76. package/dist/cli/commands/swarm.d.ts.map +0 -1
  77. package/dist/cli/commands/swarm.js +0 -175
  78. package/dist/cli/commands/swarm.js.map +0 -1
  79. package/dist/cli/commands/trust.d.ts +0 -23
  80. package/dist/cli/commands/trust.d.ts.map +0 -1
  81. package/dist/cli/commands/trust.js +0 -397
  82. package/dist/cli/commands/trust.js.map +0 -1
  83. package/dist/cli/commands/understand.d.ts +0 -12
  84. package/dist/cli/commands/understand.d.ts.map +0 -1
  85. package/dist/cli/commands/understand.js +0 -188
  86. package/dist/cli/commands/understand.js.map +0 -1
  87. package/dist/cli/config.d.ts +0 -161
  88. package/dist/cli/config.d.ts.map +0 -1
  89. package/dist/cli/config.js +0 -383
  90. package/dist/cli/config.js.map +0 -1
  91. package/dist/cli/discovery.d.ts +0 -31
  92. package/dist/cli/discovery.d.ts.map +0 -1
  93. package/dist/cli/discovery.js +0 -212
  94. package/dist/cli/discovery.js.map +0 -1
  95. package/dist/cli/effective-options.d.ts +0 -42
  96. package/dist/cli/effective-options.d.ts.map +0 -1
  97. package/dist/cli/effective-options.js +0 -80
  98. package/dist/cli/effective-options.js.map +0 -1
  99. package/dist/cli/file-collection.d.ts +0 -49
  100. package/dist/cli/file-collection.d.ts.map +0 -1
  101. package/dist/cli/file-collection.js +0 -142
  102. package/dist/cli/file-collection.js.map +0 -1
  103. package/dist/cli/formatters/index.d.ts +0 -15
  104. package/dist/cli/formatters/index.d.ts.map +0 -1
  105. package/dist/cli/formatters/index.js +0 -51
  106. package/dist/cli/formatters/index.js.map +0 -1
  107. package/dist/cli/formatters/json.d.ts +0 -11
  108. package/dist/cli/formatters/json.d.ts.map +0 -1
  109. package/dist/cli/formatters/json.js +0 -12
  110. package/dist/cli/formatters/json.js.map +0 -1
  111. package/dist/cli/formatters/project-json.d.ts +0 -11
  112. package/dist/cli/formatters/project-json.d.ts.map +0 -1
  113. package/dist/cli/formatters/project-json.js +0 -12
  114. package/dist/cli/formatters/project-json.js.map +0 -1
  115. package/dist/cli/formatters/project-sarif.d.ts +0 -11
  116. package/dist/cli/formatters/project-sarif.d.ts.map +0 -1
  117. package/dist/cli/formatters/project-sarif.js +0 -127
  118. package/dist/cli/formatters/project-sarif.js.map +0 -1
  119. package/dist/cli/formatters/project-summary.d.ts +0 -11
  120. package/dist/cli/formatters/project-summary.d.ts.map +0 -1
  121. package/dist/cli/formatters/project-summary.js +0 -202
  122. package/dist/cli/formatters/project-summary.js.map +0 -1
  123. package/dist/cli/formatters/sarif-shared.d.ts +0 -101
  124. package/dist/cli/formatters/sarif-shared.d.ts.map +0 -1
  125. package/dist/cli/formatters/sarif-shared.js +0 -57
  126. package/dist/cli/formatters/sarif-shared.js.map +0 -1
  127. package/dist/cli/formatters/sarif.d.ts +0 -12
  128. package/dist/cli/formatters/sarif.d.ts.map +0 -1
  129. package/dist/cli/formatters/sarif.js +0 -92
  130. package/dist/cli/formatters/sarif.js.map +0 -1
  131. package/dist/cli/formatters/summary.d.ts +0 -11
  132. package/dist/cli/formatters/summary.d.ts.map +0 -1
  133. package/dist/cli/formatters/summary.js +0 -240
  134. package/dist/cli/formatters/summary.js.map +0 -1
  135. package/dist/cli/formatters/two-phase-summary.d.ts +0 -11
  136. package/dist/cli/formatters/two-phase-summary.d.ts.map +0 -1
  137. package/dist/cli/formatters/two-phase-summary.js +0 -188
  138. package/dist/cli/formatters/two-phase-summary.js.map +0 -1
  139. package/dist/cli/index.d.ts +0 -10
  140. package/dist/cli/index.d.ts.map +0 -1
  141. package/dist/cli/index.js +0 -72
  142. package/dist/cli/index.js.map +0 -1
  143. package/dist/cli/program.d.ts +0 -117
  144. package/dist/cli/program.d.ts.map +0 -1
  145. package/dist/cli/program.js +0 -825
  146. package/dist/cli/program.js.map +0 -1
@@ -1,303 +0,0 @@
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 * as fs from 'fs';
7
- import * as path from 'path';
8
- import { analyze } from 'circle-ir';
9
- import { ensureAnalyzerInitialized } from '../../utils/analyzer-init.js';
10
- import { loadCogniumConfig, convertCogniumConfigToPassOptions } from '../config.js';
11
- import { analyzeFile } from '../../agents/mastra/workflow.js';
12
- import { runBundle, runBundleOnFiles, registerSecurityAgents, } from '../../agents/multi/index.js';
13
- import { runSwarmAnalysis } from './swarm.js';
14
- import { formatOutput } from '../formatters/index.js';
15
- export async function runAnalysis(filePath, options = {}) {
16
- await ensureAnalyzerInitialized();
17
- const code = fs.readFileSync(filePath, 'utf-8');
18
- const ext = path.extname(filePath).toLowerCase();
19
- let language = 'java';
20
- if (ext === '.c' || ext === '.h')
21
- language = 'c';
22
- else if (['.cpp', '.cc', '.cxx', '.hpp'].includes(ext))
23
- language = 'cpp';
24
- return analyze(code, filePath, language, { taintConfig: options.taintConfig });
25
- }
26
- // ---------------------------------------------------------------------------
27
- // executeAnalyze — CLI entry for `cognium-ai <path>` (no subcommand)
28
- // ---------------------------------------------------------------------------
29
- function detectLanguageFromFile(filePath) {
30
- const ext = path.extname(filePath).toLowerCase();
31
- switch (ext) {
32
- case '.java': return 'java';
33
- case '.js':
34
- case '.jsx':
35
- case '.mjs':
36
- case '.cjs': return 'javascript';
37
- case '.ts':
38
- case '.tsx':
39
- case '.mts':
40
- case '.cts': return 'typescript';
41
- case '.py': return 'python';
42
- case '.rs': return 'rust';
43
- case '.c':
44
- case '.h': return 'c';
45
- case '.cpp':
46
- case '.cc':
47
- case '.cxx':
48
- case '.hpp':
49
- case '.hxx': return 'cpp';
50
- default: return 'java';
51
- }
52
- }
53
- function collectJavaFiles(dir, include, exclude) {
54
- const files = [];
55
- const walk = (d) => {
56
- for (const entry of fs.readdirSync(d, { withFileTypes: true })) {
57
- const fullPath = path.join(d, entry.name);
58
- if (entry.isDirectory()) {
59
- const relPath = path.relative(dir, fullPath);
60
- if (exclude.some(p => relPath.includes(p) || entry.name === p))
61
- continue;
62
- walk(fullPath);
63
- }
64
- else if (entry.name.endsWith('.java')) {
65
- const relPath = path.relative(dir, fullPath);
66
- if (include.length > 0 && !include.some(p => relPath.includes(p) || entry.name.includes(p)))
67
- continue;
68
- if (exclude.some(p => relPath.includes(p) || entry.name === p))
69
- continue;
70
- files.push(fullPath);
71
- }
72
- }
73
- };
74
- walk(dir);
75
- return files;
76
- }
77
- function getSeverityIcon(severity) {
78
- switch (severity) {
79
- case 'CRITICAL': return '🔴';
80
- case 'HIGH': return '🟠';
81
- case 'MEDIUM': return '🟡';
82
- case 'LOW': return '🟢';
83
- default: return 'ℹ️';
84
- }
85
- }
86
- function formatBundleResult(result) {
87
- const lines = [];
88
- lines.push('═══════════════════════════════════════════════════════════════');
89
- lines.push(' MULTI-AGENT ANALYSIS RESULTS');
90
- lines.push('═══════════════════════════════════════════════════════════════');
91
- lines.push('');
92
- lines.push(`Files analyzed: ${result.summary.totalFiles}`);
93
- lines.push(`Total findings: ${result.summary.totalFindings}`);
94
- lines.push(`Total time: ${(result.totalTimeMs / 1000).toFixed(2)}s`);
95
- lines.push('');
96
- lines.push('Findings by category:');
97
- for (const [cat, count] of Object.entries(result.summary.byCategory)) {
98
- if (count > 0)
99
- lines.push(` ${cat}: ${count}`);
100
- }
101
- lines.push('');
102
- const filesWithFindings = result.results.filter(r => r.summary.totalFindings > 0);
103
- if (filesWithFindings.length > 0) {
104
- lines.push('───────────────────────────────────────────────────────────────');
105
- lines.push('FILES WITH FINDINGS');
106
- lines.push('───────────────────────────────────────────────────────────────');
107
- for (const fileResult of filesWithFindings) {
108
- lines.push('');
109
- lines.push(`📁 ${fileResult.filePath}`);
110
- for (const agentResult of fileResult.results) {
111
- for (const f of agentResult.findings) {
112
- const sev = (f.severity ?? 'INFO').toUpperCase();
113
- const loc = f.location;
114
- const line = loc?.line ?? '?';
115
- const msg = f.message ?? f.type;
116
- const cwe = f.cwe ? ` [${f.cwe}]` : '';
117
- lines.push(` ${getSeverityIcon(sev)} Line ${line}: ${msg}${cwe}`);
118
- }
119
- }
120
- }
121
- }
122
- lines.push('');
123
- lines.push('═══════════════════════════════════════════════════════════════');
124
- return lines.join('\n');
125
- }
126
- export async function executeAnalyze(args) {
127
- const targetPath = args.file || args.directory;
128
- if (!targetPath) {
129
- console.error('Error: No file or directory specified');
130
- console.error('Usage: cognium-ai <file|directory> [options]');
131
- return 1;
132
- }
133
- if (!fs.existsSync(targetPath)) {
134
- console.error(`Error: Path not found: ${targetPath}`);
135
- return 1;
136
- }
137
- const isDirectory = fs.statSync(targetPath).isDirectory();
138
- // Merge cognium.config.json into pass-disable list
139
- const cogniumConfig = loadCogniumConfig(args.config || undefined, targetPath);
140
- let configDisabledPasses = [];
141
- if (cogniumConfig) {
142
- const { disabledPasses } = convertCogniumConfigToPassOptions(cogniumConfig);
143
- configDisabledPasses = disabledPasses;
144
- }
145
- const mergedDisabledPasses = [...new Set([...configDisabledPasses, ...args.disablePass])];
146
- // Effective include/exclude (CLI overrides config)
147
- const include = args.include.length > 0 ? args.include : (cogniumConfig?.include ?? []);
148
- const exclude = args.exclude.length > 0 ? args.exclude : (cogniumConfig?.exclude ?? []);
149
- try {
150
- if (args.bundle) {
151
- registerSecurityAgents();
152
- if (isDirectory) {
153
- const files = collectJavaFiles(targetPath, include, exclude);
154
- const fileInputs = files.map(f => ({
155
- path: f,
156
- content: fs.readFileSync(f, 'utf-8'),
157
- language: 'java',
158
- }));
159
- if (!args.quiet) {
160
- console.error(`Running ${args.bundle} bundle on ${fileInputs.length} files...`);
161
- }
162
- const bundleResult = await runBundleOnFiles(args.bundle, fileInputs, {
163
- maxConcurrency: args.threads,
164
- onFileComplete: args.quiet ? undefined : (file, i, total) => {
165
- console.error(`[${i}/${total}] ${path.basename(file)}`);
166
- },
167
- });
168
- const output = args.format === 'json'
169
- ? JSON.stringify(bundleResult, null, 2)
170
- : formatBundleResult(bundleResult);
171
- if (args.output) {
172
- fs.writeFileSync(args.output, output);
173
- if (!args.quiet)
174
- console.error(`Output written to ${args.output}`);
175
- }
176
- else {
177
- console.log(output);
178
- }
179
- if (args.exitCode && bundleResult.summary.totalFindings > 0)
180
- return 1;
181
- }
182
- else {
183
- const sourceCode = fs.readFileSync(targetPath, 'utf-8');
184
- const detectedLang = detectLanguageFromFile(targetPath);
185
- const bundleLang = (['java', 'c', 'cpp'].includes(detectedLang) ? detectedLang : 'java');
186
- const bundleResult = await runBundle(args.bundle, sourceCode, targetPath, {
187
- language: bundleLang,
188
- });
189
- const output = args.format === 'json'
190
- ? JSON.stringify(bundleResult, null, 2)
191
- : formatBundleResult({
192
- results: [bundleResult],
193
- totalTimeMs: bundleResult.totalTimeMs,
194
- summary: { totalFiles: 1, ...bundleResult.summary },
195
- });
196
- if (args.output) {
197
- fs.writeFileSync(args.output, output);
198
- if (!args.quiet)
199
- console.error(`Output written to ${args.output}`);
200
- }
201
- else {
202
- console.log(output);
203
- }
204
- if (args.exitCode && bundleResult.summary.totalFindings > 0)
205
- return 1;
206
- }
207
- return 0;
208
- }
209
- if (isDirectory) {
210
- const result = await runSwarmAnalysis({
211
- directory: targetPath,
212
- include,
213
- exclude,
214
- quiet: args.quiet,
215
- maxConcurrency: args.threads,
216
- enableEnrichment: args.llmEnrich,
217
- enableVerification: args.llmVerify,
218
- cacheEnabled: args.cache,
219
- cacheDir: args.cacheDir ?? undefined,
220
- clearCache: args.clearCache,
221
- streamOutput: args.streamOutput ?? undefined,
222
- memoryEfficient: args.memoryEfficient,
223
- disabledPasses: mergedDisabledPasses.length > 0 ? mergedDisabledPasses : undefined,
224
- });
225
- if (args.output) {
226
- fs.writeFileSync(args.output, JSON.stringify(result, null, 2));
227
- if (!args.quiet)
228
- console.error(`Output written to ${args.output}`);
229
- }
230
- else if (args.format === 'json') {
231
- console.log(JSON.stringify(result, null, 2));
232
- }
233
- if (args.exitCode && result.summary.totalVulnerabilities > 0)
234
- return 1;
235
- return 0;
236
- }
237
- // Single-file path
238
- const sourceCode = fs.readFileSync(targetPath, 'utf-8');
239
- const detectedLang = detectLanguageFromFile(targetPath);
240
- const mastraResult = await analyzeFile(targetPath, sourceCode, {
241
- language: detectedLang,
242
- enableEnrichment: args.llmEnrich,
243
- enableVerification: args.llmVerify,
244
- disabledPasses: mergedDisabledPasses.length > 0 ? mergedDisabledPasses : undefined,
245
- });
246
- const result = {
247
- meta: {
248
- file_path: targetPath,
249
- language: detectedLang,
250
- loc: sourceCode.split('\n').length,
251
- parse_time_ms: 0,
252
- analysis_time_ms: mastraResult.stats.totalTimeMs || 0,
253
- },
254
- types: [],
255
- imports: [],
256
- exports: [],
257
- calls: [],
258
- cfg: { blocks: [], edges: [] },
259
- dfg: { definitions: [], uses: [] },
260
- taint: {
261
- sources: mastraResult.vulnerabilities.map((v) => {
262
- const src = v.source;
263
- return {
264
- line: src?.line ?? 0,
265
- type: src?.type ?? 'unknown',
266
- location: `Line ${src?.line ?? 0}`,
267
- severity: v.severity ?? 'medium',
268
- };
269
- }),
270
- sinks: mastraResult.vulnerabilities.map((v) => {
271
- const sink = v.sink;
272
- return {
273
- line: sink?.line ?? 0,
274
- type: sink?.type ?? 'unknown',
275
- cwe: v.cwe ?? 'CWE-Unknown',
276
- location: `Line ${sink?.line ?? 0}`,
277
- };
278
- }),
279
- sanitizers: [],
280
- flows: [],
281
- },
282
- unresolved: [],
283
- enriched: { llm_sources: [], llm_sinks: [], llm_verified: [] },
284
- };
285
- const output = formatOutput(result, args.format, targetPath);
286
- if (args.output) {
287
- fs.writeFileSync(args.output, output);
288
- if (!args.quiet)
289
- console.error(`Output written to ${args.output}`);
290
- }
291
- else {
292
- console.log(output);
293
- }
294
- if (args.exitCode && result.taint.sinks.length > 0)
295
- return 1;
296
- return 0;
297
- }
298
- catch (error) {
299
- console.error('Error:', error instanceof Error ? error.message : error);
300
- return 1;
301
- }
302
- }
303
- //# sourceMappingURL=analyze.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- /**
2
- * Re-export benchmark runner for use in CLI.
3
- *
4
- * The benchmark runner lives in benchmarks/lib/ (outside src/),
5
- * so we use a dynamic import to avoid rootDir violations at compile time.
6
- */
7
- export interface BenchmarkRunnerOptions {
8
- benchmarkDir: string;
9
- expectedResultsPath: string;
10
- categories?: string[];
11
- limit?: number;
12
- verbose?: boolean;
13
- parallelism?: number;
14
- llmEnrich?: boolean;
15
- llmVerify?: boolean;
16
- llmBaseUrl?: string;
17
- llmApiKey?: string;
18
- }
19
- export interface CategoryMetrics {
20
- category: string;
21
- truePositives: number;
22
- falsePositives: number;
23
- falseNegatives: number;
24
- trueNegatives: number;
25
- }
26
- export interface BenchmarkReport {
27
- categoryMetrics: CategoryMetrics[];
28
- overallMetrics: {
29
- truePositives: number;
30
- falsePositives: number;
31
- falseNegatives: number;
32
- trueNegatives: number;
33
- };
34
- }
35
- /**
36
- * Dynamically import and run the benchmark runner.
37
- * This avoids rootDir issues since the import happens at runtime.
38
- */
39
- export declare function loadBenchmarkRunner(): Promise<{
40
- runBenchmark: (options: BenchmarkRunnerOptions) => Promise<BenchmarkReport>;
41
- }>;
42
- //# sourceMappingURL=benchmark-runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark-runner.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/benchmark-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,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,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,eAAe,EAAE,CAAC;IACnC,cAAc,EAAE;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IACnD,YAAY,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7E,CAAC,CAMD"}
@@ -1,18 +0,0 @@
1
- /**
2
- * Re-export benchmark runner for use in CLI.
3
- *
4
- * The benchmark runner lives in benchmarks/lib/ (outside src/),
5
- * so we use a dynamic import to avoid rootDir violations at compile time.
6
- */
7
- /**
8
- * Dynamically import and run the benchmark runner.
9
- * This avoids rootDir issues since the import happens at runtime.
10
- */
11
- export async function loadBenchmarkRunner() {
12
- // Use dynamic import to load from benchmarks directory at runtime
13
- // The path is constructed to avoid static analysis by tsc
14
- const benchmarkPath = ['..', '..', '..', 'benchmarks', 'lib', 'runner.js'].join('/');
15
- const runner = await import(/* @vite-ignore */ benchmarkPath);
16
- return { runBenchmark: runner.runBenchmark };
17
- }
18
- //# sourceMappingURL=benchmark-runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark-runner.js","sourceRoot":"","sources":["../../../src/cli/commands/benchmark-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiCH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IAGvC,kEAAkE;IAClE,0DAA0D;IAC1D,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;AAC/C,CAAC"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Benchmark command
3
- *
4
- * Runs OWASP Benchmark tests against Circle-IR.
5
- */
6
- import type { CliArgs } from '../args.js';
7
- /**
8
- * Execute OWASP Benchmark tests.
9
- */
10
- export declare function executeBenchmark(args: CliArgs): Promise<number>;
11
- //# sourceMappingURL=benchmark.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/benchmark.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA4FrE"}
@@ -1,90 +0,0 @@
1
- /**
2
- * Benchmark command
3
- *
4
- * Runs OWASP Benchmark tests against Circle-IR.
5
- */
6
- import * as fs from 'fs';
7
- import { loadBenchmarkRunner } from './benchmark-runner.js';
8
- /**
9
- * Execute OWASP Benchmark tests.
10
- */
11
- export async function executeBenchmark(args) {
12
- const testDir = args.directory;
13
- const expectedFile = args.expectedResults;
14
- if (!testDir) {
15
- console.error('Error: No test directory specified');
16
- console.error('Usage: cognium-ai benchmark <directory> --expected <file>');
17
- return 1;
18
- }
19
- if (!fs.existsSync(testDir)) {
20
- console.error(`Error: Directory not found: ${testDir}`);
21
- return 1;
22
- }
23
- if (!expectedFile) {
24
- console.error('Error: No expected results file specified');
25
- console.error('Usage: cognium-ai benchmark <directory> --expected <file>');
26
- return 1;
27
- }
28
- if (!fs.existsSync(expectedFile)) {
29
- console.error(`Error: Expected results file not found: ${expectedFile}`);
30
- return 1;
31
- }
32
- // Dynamically load the benchmark runner (lives outside src/)
33
- const { runBenchmark } = await loadBenchmarkRunner();
34
- // Run benchmark using the existing runner
35
- const report = await runBenchmark({
36
- benchmarkDir: testDir,
37
- expectedResultsPath: expectedFile,
38
- categories: args.categories.length > 0 ? args.categories : undefined,
39
- limit: args.limit || undefined,
40
- verbose: !args.quiet,
41
- parallelism: args.parallel || 1,
42
- llmEnrich: args.llmEnrich,
43
- llmVerify: args.llmVerify,
44
- llmBaseUrl: args.llmBaseUrl || undefined,
45
- llmApiKey: args.llmApiKey || undefined,
46
- });
47
- // Output results
48
- if (args.format === 'json') {
49
- console.log(JSON.stringify(report, null, 2));
50
- }
51
- else {
52
- // Summary format
53
- console.log();
54
- console.log('Results by Category');
55
- console.log('-'.repeat(70));
56
- console.log('Category'.padEnd(20) + 'Total'.padEnd(8) + 'TP'.padEnd(8) + 'FP'.padEnd(8) + 'FN'.padEnd(8) + 'Score');
57
- console.log('-'.repeat(70));
58
- for (const metrics of report.categoryMetrics) {
59
- const total = metrics.truePositives + metrics.falseNegatives;
60
- const score = total > 0 ? ((metrics.truePositives / total) * 100).toFixed(1) : 'N/A';
61
- console.log(metrics.category.padEnd(20) +
62
- total.toString().padEnd(8) +
63
- metrics.truePositives.toString().padEnd(8) +
64
- metrics.falsePositives.toString().padEnd(8) +
65
- metrics.falseNegatives.toString().padEnd(8) +
66
- score + '%');
67
- }
68
- console.log('-'.repeat(70));
69
- const om = report.overallMetrics;
70
- const totalTests = om.truePositives + om.falseNegatives;
71
- const overallScore = totalTests > 0
72
- ? ((om.truePositives / totalTests) * 100).toFixed(1)
73
- : 'N/A';
74
- console.log('TOTAL'.padEnd(20) +
75
- totalTests.toString().padEnd(8) +
76
- om.truePositives.toString().padEnd(8) +
77
- om.falsePositives.toString().padEnd(8) +
78
- om.falseNegatives.toString().padEnd(8) +
79
- overallScore + '%');
80
- console.log();
81
- console.log(`OWASP Benchmark Score: ${overallScore}%`);
82
- }
83
- // Write output file if specified
84
- if (args.output) {
85
- fs.writeFileSync(args.output, JSON.stringify(report, null, 2));
86
- console.log(`Report written to ${args.output}`);
87
- }
88
- return 0;
89
- }
90
- //# sourceMappingURL=benchmark.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../../src/cli/commands/benchmark.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Cluster Command
3
- *
4
- * Wires existing src/components/ analyzeComponents() to CLI.
5
- * Performs two-phase component enrichment and clustering.
6
- *
7
- * Usage:
8
- * cognium-ai cluster <path> [--format json] [--llm]
9
- */
10
- import type { CliArgs } from '../args.js';
11
- export declare function executeCluster(args: CliArgs): Promise<number>;
12
- //# sourceMappingURL=cluster.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cluster.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AA+G1C,wBAAsB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAwFnE"}