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
package/dist/cli/args.js DELETED
@@ -1,653 +0,0 @@
1
- /**
2
- * CLI Argument Parser
3
- */
4
- /**
5
- * Parse command-line arguments.
6
- */
7
- export function parseArgs(argv) {
8
- const args = {
9
- command: 'analyze',
10
- file: null,
11
- directory: null,
12
- format: 'summary',
13
- output: null,
14
- config: null,
15
- include: [],
16
- exclude: [],
17
- exitCode: false,
18
- quiet: false,
19
- help: false,
20
- version: false,
21
- logLevel: null,
22
- discoverPatterns: false,
23
- patternThreshold: 0.6,
24
- noLlm: false,
25
- llmEnrich: false,
26
- llmVerify: false,
27
- llmBaseUrl: null,
28
- llmApiKey: null,
29
- llmModel: null,
30
- language: null,
31
- threads: 10,
32
- bundle: null,
33
- expectedResults: null,
34
- limit: null,
35
- categories: [],
36
- parallel: null,
37
- cache: true,
38
- cacheDir: null,
39
- clearCache: false,
40
- streamOutput: null,
41
- memoryEfficient: false,
42
- specModel: null,
43
- specOverwrite: false,
44
- specSkip: false,
45
- specNoBackup: false,
46
- specDesign: false,
47
- specPrinciples: false,
48
- specTasks: false,
49
- specDesignLLM: false,
50
- specPrinciplesLLM: false,
51
- specTasksLLM: false,
52
- specDir: null,
53
- severity: null,
54
- excludeTests: false,
55
- llmDiscovery: false,
56
- disablePass: [],
57
- fileTimeout: 30,
58
- maxFiles: null,
59
- pathB: null,
60
- history: true,
61
- maxCommits: 100,
62
- includeCategory: [],
63
- excludeCategory: [],
64
- includeTests: false,
65
- publicAsEntry: false,
66
- top: null,
67
- full: false,
68
- metricCategory: [],
69
- role: [],
70
- securityOnly: false,
71
- healthSecurity: true,
72
- healthSecrets: true,
73
- healthDeadCode: true,
74
- healthQuality: true,
75
- healthPerformance: true,
76
- threshold: 50,
77
- };
78
- let i = 0;
79
- while (i < argv.length) {
80
- const arg = argv[i];
81
- switch (arg) {
82
- case 'benchmark':
83
- args.command = 'benchmark';
84
- break;
85
- case 'scan':
86
- args.command = 'scan';
87
- break;
88
- case 'health':
89
- args.command = 'health';
90
- break;
91
- case 'secrets':
92
- args.command = 'secrets';
93
- break;
94
- case 'dead-code':
95
- args.command = 'dead-code';
96
- break;
97
- case 'generate-spec':
98
- args.command = 'generate-spec';
99
- break;
100
- case 'analyze-skill':
101
- args.command = 'analyze-skill';
102
- break;
103
- case 'metrics':
104
- args.command = 'metrics';
105
- break;
106
- case 'trust':
107
- args.command = 'trust';
108
- break;
109
- case 'compare':
110
- args.command = 'compare';
111
- break;
112
- case 'quality':
113
- args.command = 'quality';
114
- break;
115
- case 'understand':
116
- args.command = 'understand';
117
- break;
118
- case 'spec-diff':
119
- args.command = 'spec-diff';
120
- break;
121
- case 'cluster':
122
- args.command = 'cluster';
123
- break;
124
- case '-h':
125
- case '--help':
126
- args.help = true;
127
- break;
128
- case '-v':
129
- case '--version':
130
- args.version = true;
131
- break;
132
- case '-f':
133
- case '--format':
134
- i++;
135
- if (i >= argv.length) {
136
- throw new Error('Missing value for --format');
137
- }
138
- const format = argv[i].toLowerCase();
139
- if (!['json', 'summary', 'sarif', 'markdown'].includes(format)) {
140
- throw new Error(`Invalid format: ${format}. Use json, summary, sarif, or markdown.`);
141
- }
142
- args.format = format;
143
- break;
144
- case '-o':
145
- case '--output':
146
- i++;
147
- if (i >= argv.length) {
148
- throw new Error('Missing value for --output');
149
- }
150
- args.output = argv[i];
151
- break;
152
- case '-c':
153
- case '--config':
154
- i++;
155
- if (i >= argv.length) {
156
- throw new Error('Missing value for --config');
157
- }
158
- args.config = argv[i];
159
- break;
160
- case '-i':
161
- case '--include':
162
- i++;
163
- if (i >= argv.length) {
164
- throw new Error('Missing value for --include');
165
- }
166
- args.include.push(argv[i]);
167
- break;
168
- case '-x':
169
- case '--exclude':
170
- i++;
171
- if (i >= argv.length) {
172
- throw new Error('Missing value for --exclude');
173
- }
174
- args.exclude.push(argv[i]);
175
- break;
176
- case '-e':
177
- case '--exit-code':
178
- args.exitCode = true;
179
- break;
180
- case '-q':
181
- case '--quiet':
182
- args.quiet = true;
183
- break;
184
- case '-d':
185
- case '--discover-patterns':
186
- args.discoverPatterns = true;
187
- break;
188
- case '--pattern-threshold':
189
- i++;
190
- if (i >= argv.length) {
191
- throw new Error('Missing value for --pattern-threshold');
192
- }
193
- args.patternThreshold = parseFloat(argv[i]);
194
- if (isNaN(args.patternThreshold) || args.patternThreshold < 0 || args.patternThreshold > 1) {
195
- throw new Error('--pattern-threshold must be a number between 0 and 1');
196
- }
197
- break;
198
- case '--llm-enrich':
199
- args.llmEnrich = true;
200
- break;
201
- case '--llm-verify':
202
- args.llmVerify = true;
203
- break;
204
- case '--llm':
205
- // Enable both enrichment and verification
206
- args.llmEnrich = true;
207
- args.llmVerify = true;
208
- break;
209
- case '--no-llm':
210
- // Explicitly disable LLM (static analysis only)
211
- args.noLlm = true;
212
- args.llmEnrich = false;
213
- args.llmVerify = false;
214
- break;
215
- case '--llm-discovery':
216
- // Enable LLM discovery mode (deeper analysis)
217
- args.llmDiscovery = true;
218
- args.llmEnrich = true;
219
- break;
220
- case '--severity':
221
- i++;
222
- if (i >= argv.length) {
223
- throw new Error('Missing value for --severity');
224
- }
225
- const severity = argv[i].toLowerCase();
226
- if (!['critical', 'high', 'medium', 'low'].includes(severity)) {
227
- throw new Error(`Invalid severity: ${severity}. Use critical, high, medium, or low.`);
228
- }
229
- args.severity = severity;
230
- break;
231
- case '--exclude-tests':
232
- args.excludeTests = true;
233
- break;
234
- case '--llm-base-url':
235
- i++;
236
- if (i >= argv.length) {
237
- throw new Error('Missing value for --llm-base-url');
238
- }
239
- args.llmBaseUrl = argv[i];
240
- break;
241
- case '--llm-api-key':
242
- i++;
243
- if (i >= argv.length) {
244
- throw new Error('Missing value for --llm-api-key');
245
- }
246
- args.llmApiKey = argv[i];
247
- break;
248
- case '--llm-model':
249
- i++;
250
- if (i >= argv.length) {
251
- throw new Error('Missing value for --llm-model');
252
- }
253
- args.llmModel = argv[i];
254
- break;
255
- case '-l':
256
- case '--language':
257
- i++;
258
- if (i >= argv.length) {
259
- throw new Error('Missing value for --language');
260
- }
261
- args.language = argv[i].toLowerCase();
262
- break;
263
- case '-t':
264
- case '--threads':
265
- i++;
266
- if (i >= argv.length) {
267
- throw new Error('Missing value for --threads');
268
- }
269
- args.threads = parseInt(argv[i], 10);
270
- if (isNaN(args.threads) || args.threads < 1) {
271
- throw new Error('--threads must be a positive number');
272
- }
273
- break;
274
- case '-b':
275
- case '--bundle':
276
- i++;
277
- if (i >= argv.length) {
278
- throw new Error('Missing value for --bundle');
279
- }
280
- const bundle = argv[i].toLowerCase();
281
- if (!['jr-dev', 'sr-dev', 'architect', 'security-review', 'full-review'].includes(bundle)) {
282
- throw new Error(`Invalid bundle: ${bundle}. Use jr-dev, sr-dev, architect, security-review, or full-review.`);
283
- }
284
- args.bundle = bundle;
285
- break;
286
- case '--log-level':
287
- i++;
288
- if (i >= argv.length) {
289
- throw new Error('Missing value for --log-level');
290
- }
291
- const logLevel = argv[i].toLowerCase();
292
- if (!['trace', 'debug', 'info', 'warn', 'error', 'silent'].includes(logLevel)) {
293
- throw new Error(`Invalid log level: ${logLevel}. Use trace, debug, info, warn, error, or silent.`);
294
- }
295
- args.logLevel = logLevel;
296
- break;
297
- case '--expected':
298
- case '--expected-results':
299
- i++;
300
- if (i >= argv.length) {
301
- throw new Error('Missing value for --expected-results');
302
- }
303
- args.expectedResults = argv[i];
304
- break;
305
- case '--limit':
306
- i++;
307
- if (i >= argv.length) {
308
- throw new Error('Missing value for --limit');
309
- }
310
- args.limit = parseInt(argv[i], 10);
311
- if (isNaN(args.limit)) {
312
- throw new Error('--limit must be a number');
313
- }
314
- break;
315
- case '--category':
316
- i++;
317
- if (i >= argv.length) {
318
- throw new Error('Missing value for --category');
319
- }
320
- args.categories.push(argv[i]);
321
- break;
322
- case '--parallel':
323
- i++;
324
- if (i >= argv.length) {
325
- throw new Error('Missing value for --parallel');
326
- }
327
- args.parallel = parseInt(argv[i], 10);
328
- if (isNaN(args.parallel) || args.parallel < 1) {
329
- throw new Error('--parallel must be a positive number');
330
- }
331
- break;
332
- case '--cache':
333
- args.cache = true;
334
- break;
335
- case '--no-cache':
336
- args.cache = false;
337
- break;
338
- case '--cache-dir':
339
- i++;
340
- if (i >= argv.length) {
341
- throw new Error('Missing value for --cache-dir');
342
- }
343
- args.cacheDir = argv[i];
344
- break;
345
- case '--clear-cache':
346
- args.clearCache = true;
347
- break;
348
- case '--stream-output':
349
- i++;
350
- if (i >= argv.length) {
351
- throw new Error('Missing value for --stream-output');
352
- }
353
- args.streamOutput = argv[i];
354
- break;
355
- case '--memory-efficient':
356
- args.memoryEfficient = true;
357
- break;
358
- case '--spec-model':
359
- i++;
360
- if (i >= argv.length) {
361
- throw new Error('Missing value for --spec-model');
362
- }
363
- args.specModel = argv[i];
364
- break;
365
- case '--spec-overwrite':
366
- args.specOverwrite = true;
367
- break;
368
- case '--spec-skip':
369
- args.specSkip = true;
370
- break;
371
- case '--spec-no-backup':
372
- args.specNoBackup = true;
373
- break;
374
- case '--design':
375
- args.specDesign = true;
376
- break;
377
- case '--principles':
378
- args.specPrinciples = true;
379
- break;
380
- case '--tasks':
381
- args.specTasks = true;
382
- break;
383
- case '--design-llm':
384
- args.specDesignLLM = true;
385
- args.specDesign = true; // Implied
386
- break;
387
- case '--principles-llm':
388
- args.specPrinciplesLLM = true;
389
- args.specPrinciples = true; // Implied
390
- break;
391
- case '--tasks-llm':
392
- args.specTasksLLM = true;
393
- args.specTasks = true; // Implied
394
- break;
395
- case '--all':
396
- // Generate all outputs (design + principles + tasks)
397
- args.specDesign = true;
398
- args.specPrinciples = true;
399
- args.specTasks = true;
400
- break;
401
- case '--spec':
402
- i++;
403
- if (i >= argv.length) {
404
- throw new Error('Missing value for --spec');
405
- }
406
- args.specDir = argv[i];
407
- break;
408
- case '--disable-pass':
409
- i++;
410
- if (i >= argv.length) {
411
- throw new Error('Missing value for --disable-pass');
412
- }
413
- args.disablePass.push(...argv[i].split(',').map(s => s.trim()).filter(Boolean));
414
- break;
415
- case '--file-timeout':
416
- i++;
417
- if (i >= argv.length) {
418
- throw new Error('Missing value for --file-timeout');
419
- }
420
- args.fileTimeout = parseInt(argv[i], 10);
421
- if (isNaN(args.fileTimeout) || args.fileTimeout < 1) {
422
- throw new Error('--file-timeout must be a positive number (seconds)');
423
- }
424
- break;
425
- case '--max-files':
426
- i++;
427
- if (i >= argv.length) {
428
- throw new Error('Missing value for --max-files');
429
- }
430
- args.maxFiles = parseInt(argv[i], 10);
431
- if (isNaN(args.maxFiles) || args.maxFiles < 1) {
432
- throw new Error('--max-files must be a positive number');
433
- }
434
- break;
435
- default:
436
- // Check for --key=value style
437
- if (arg.startsWith('--format=')) {
438
- const format = arg.substring(9).toLowerCase();
439
- if (!['json', 'summary', 'sarif', 'markdown'].includes(format)) {
440
- throw new Error(`Invalid format: ${format}. Use json, summary, or sarif.`);
441
- }
442
- args.format = format;
443
- }
444
- else if (arg.startsWith('--output=')) {
445
- args.output = arg.substring(9);
446
- }
447
- else if (arg.startsWith('--config=')) {
448
- args.config = arg.substring(9);
449
- }
450
- else if (arg.startsWith('--include=')) {
451
- args.include.push(arg.substring(10));
452
- }
453
- else if (arg.startsWith('--exclude=')) {
454
- args.exclude.push(arg.substring(10));
455
- }
456
- else if (arg.startsWith('--expected=') || arg.startsWith('--expected-results=')) {
457
- const value = arg.includes('--expected-results=')
458
- ? arg.substring(19)
459
- : arg.substring(11);
460
- args.expectedResults = value;
461
- }
462
- else if (arg.startsWith('--limit=')) {
463
- const value = parseInt(arg.substring(8), 10);
464
- if (isNaN(value)) {
465
- throw new Error('--limit must be a number');
466
- }
467
- args.limit = value;
468
- }
469
- else if (arg.startsWith('--category=')) {
470
- args.categories.push(arg.substring(11));
471
- }
472
- else if (arg.startsWith('--parallel=')) {
473
- const value = parseInt(arg.substring(11), 10);
474
- if (isNaN(value) || value < 1) {
475
- throw new Error('--parallel must be a positive number');
476
- }
477
- args.parallel = value;
478
- }
479
- else if (arg.startsWith('--log-level=')) {
480
- const logLevel = arg.substring(12).toLowerCase();
481
- if (!['trace', 'debug', 'info', 'warn', 'error', 'silent'].includes(logLevel)) {
482
- throw new Error(`Invalid log level: ${logLevel}. Use trace, debug, info, warn, error, or silent.`);
483
- }
484
- args.logLevel = logLevel;
485
- }
486
- else if (arg === '--discover-patterns') {
487
- args.discoverPatterns = true;
488
- }
489
- else if (arg.startsWith('--pattern-threshold=')) {
490
- const value = parseFloat(arg.substring(20));
491
- if (isNaN(value) || value < 0 || value > 1) {
492
- throw new Error('--pattern-threshold must be a number between 0 and 1');
493
- }
494
- args.patternThreshold = value;
495
- }
496
- else if (arg === '--llm-enrich') {
497
- args.llmEnrich = true;
498
- }
499
- else if (arg === '--llm-verify') {
500
- args.llmVerify = true;
501
- }
502
- else if (arg === '--llm') {
503
- args.llmEnrich = true;
504
- args.llmVerify = true;
505
- }
506
- else if (arg === '--no-llm') {
507
- args.noLlm = true;
508
- args.llmEnrich = false;
509
- args.llmVerify = false;
510
- }
511
- else if (arg === '--llm-discovery') {
512
- args.llmDiscovery = true;
513
- args.llmEnrich = true;
514
- }
515
- else if (arg.startsWith('--severity=')) {
516
- const sev = arg.substring(11).toLowerCase();
517
- if (!['critical', 'high', 'medium', 'low'].includes(sev)) {
518
- throw new Error(`Invalid severity: ${sev}. Use critical, high, medium, or low.`);
519
- }
520
- args.severity = sev;
521
- }
522
- else if (arg === '--exclude-tests') {
523
- args.excludeTests = true;
524
- }
525
- else if (arg.startsWith('--llm-base-url=')) {
526
- args.llmBaseUrl = arg.substring(15);
527
- }
528
- else if (arg.startsWith('--llm-api-key=')) {
529
- args.llmApiKey = arg.substring(14);
530
- }
531
- else if (arg.startsWith('--llm-model=')) {
532
- args.llmModel = arg.substring(12);
533
- }
534
- else if (arg.startsWith('--language=')) {
535
- args.language = arg.substring(11).toLowerCase();
536
- }
537
- else if (arg.startsWith('--threads=')) {
538
- const value = parseInt(arg.substring(10), 10);
539
- if (isNaN(value) || value < 1) {
540
- throw new Error('--threads must be a positive number');
541
- }
542
- args.threads = value;
543
- }
544
- else if (arg.startsWith('--bundle=')) {
545
- const bundle = arg.substring(9).toLowerCase();
546
- if (!['jr-dev', 'sr-dev', 'architect', 'security-review', 'full-review'].includes(bundle)) {
547
- throw new Error(`Invalid bundle: ${bundle}. Use jr-dev, sr-dev, architect, security-review, or full-review.`);
548
- }
549
- args.bundle = bundle;
550
- }
551
- else if (arg === '--cache') {
552
- args.cache = true;
553
- }
554
- else if (arg === '--no-cache') {
555
- args.cache = false;
556
- }
557
- else if (arg.startsWith('--cache-dir=')) {
558
- args.cacheDir = arg.substring(12);
559
- }
560
- else if (arg === '--clear-cache') {
561
- args.clearCache = true;
562
- }
563
- else if (arg.startsWith('--stream-output=')) {
564
- args.streamOutput = arg.substring(16);
565
- }
566
- else if (arg === '--memory-efficient') {
567
- args.memoryEfficient = true;
568
- }
569
- else if (arg.startsWith('--spec-model=')) {
570
- args.specModel = arg.substring(13);
571
- }
572
- else if (arg === '--spec-overwrite') {
573
- args.specOverwrite = true;
574
- }
575
- else if (arg === '--spec-skip') {
576
- args.specSkip = true;
577
- }
578
- else if (arg === '--spec-no-backup') {
579
- args.specNoBackup = true;
580
- }
581
- else if (arg === '--design') {
582
- args.specDesign = true;
583
- }
584
- else if (arg === '--principles') {
585
- args.specPrinciples = true;
586
- }
587
- else if (arg === '--tasks') {
588
- args.specTasks = true;
589
- }
590
- else if (arg === '--design-llm') {
591
- args.specDesignLLM = true;
592
- args.specDesign = true;
593
- }
594
- else if (arg === '--principles-llm') {
595
- args.specPrinciplesLLM = true;
596
- args.specPrinciples = true;
597
- }
598
- else if (arg === '--tasks-llm') {
599
- args.specTasksLLM = true;
600
- args.specTasks = true;
601
- }
602
- else if (arg === '--all') {
603
- args.specDesign = true;
604
- args.specPrinciples = true;
605
- args.specTasks = true;
606
- }
607
- else if (arg.startsWith('--spec=')) {
608
- args.specDir = arg.substring(7);
609
- }
610
- else if (arg.startsWith('--disable-pass=')) {
611
- args.disablePass.push(...arg.substring(15).split(',').map(s => s.trim()).filter(Boolean));
612
- }
613
- else if (arg.startsWith('--file-timeout=')) {
614
- const value = parseInt(arg.substring(15), 10);
615
- if (isNaN(value) || value < 1) {
616
- throw new Error('--file-timeout must be a positive number (seconds)');
617
- }
618
- args.fileTimeout = value;
619
- }
620
- else if (arg.startsWith('--max-files=')) {
621
- const value = parseInt(arg.substring(12), 10);
622
- if (isNaN(value) || value < 1) {
623
- throw new Error('--max-files must be a positive number');
624
- }
625
- args.maxFiles = value;
626
- }
627
- else if (arg.startsWith('-')) {
628
- throw new Error(`Unknown option: ${arg}`);
629
- }
630
- else {
631
- // Positional argument (file or directory)
632
- if (args.file === null && args.directory === null) {
633
- args.file = arg;
634
- }
635
- else if (args.command === 'compare') {
636
- // compare takes two positional args — ignore extra here
637
- // (compare command extracts both from process.argv directly)
638
- }
639
- else {
640
- throw new Error(`Unexpected argument: ${arg}`);
641
- }
642
- }
643
- }
644
- i++;
645
- }
646
- // For directory-based commands, treat file as directory
647
- if (['benchmark', 'scan', 'health', 'secrets', 'dead-code', 'analyze-skill', 'trust', 'compare', 'quality', 'understand', 'spec-diff', 'cluster'].includes(args.command) && args.file) {
648
- args.directory = args.file;
649
- args.file = null;
650
- }
651
- return args;
652
- }
653
- //# sourceMappingURL=args.js.map