circle-ir-ai 2.7.1 → 2.7.3

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 (158) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/dist/health-score/calculator.d.ts.map +1 -1
  3. package/dist/health-score/calculator.js +15 -0
  4. package/dist/health-score/calculator.js.map +1 -1
  5. package/dist/quality/calculator.d.ts +4 -0
  6. package/dist/quality/calculator.d.ts.map +1 -1
  7. package/dist/quality/calculator.js +4 -0
  8. package/dist/quality/calculator.js.map +1 -1
  9. package/dist/specifica/conflict-resolver.d.ts.map +1 -1
  10. package/dist/specifica/conflict-resolver.js +13 -1
  11. package/dist/specifica/conflict-resolver.js.map +1 -1
  12. package/dist/specifica/generator.js +19 -3
  13. package/dist/specifica/generator.js.map +1 -1
  14. package/package.json +2 -2
  15. package/dist/cli/args.d.ts +0 -86
  16. package/dist/cli/args.d.ts.map +0 -1
  17. package/dist/cli/args.js +0 -653
  18. package/dist/cli/args.js.map +0 -1
  19. package/dist/cli/colors.d.ts +0 -31
  20. package/dist/cli/colors.d.ts.map +0 -1
  21. package/dist/cli/colors.js +0 -80
  22. package/dist/cli/colors.js.map +0 -1
  23. package/dist/cli/commands/analyze-skill.d.ts +0 -33
  24. package/dist/cli/commands/analyze-skill.d.ts.map +0 -1
  25. package/dist/cli/commands/analyze-skill.js +0 -217
  26. package/dist/cli/commands/analyze-skill.js.map +0 -1
  27. package/dist/cli/commands/analyze.d.ts +0 -19
  28. package/dist/cli/commands/analyze.d.ts.map +0 -1
  29. package/dist/cli/commands/analyze.js +0 -303
  30. package/dist/cli/commands/analyze.js.map +0 -1
  31. package/dist/cli/commands/benchmark-runner.d.ts +0 -42
  32. package/dist/cli/commands/benchmark-runner.d.ts.map +0 -1
  33. package/dist/cli/commands/benchmark-runner.js +0 -18
  34. package/dist/cli/commands/benchmark-runner.js.map +0 -1
  35. package/dist/cli/commands/benchmark.d.ts +0 -11
  36. package/dist/cli/commands/benchmark.d.ts.map +0 -1
  37. package/dist/cli/commands/benchmark.js +0 -90
  38. package/dist/cli/commands/benchmark.js.map +0 -1
  39. package/dist/cli/commands/cluster.d.ts +0 -12
  40. package/dist/cli/commands/cluster.d.ts.map +0 -1
  41. package/dist/cli/commands/cluster.js +0 -203
  42. package/dist/cli/commands/cluster.js.map +0 -1
  43. package/dist/cli/commands/compare.d.ts +0 -13
  44. package/dist/cli/commands/compare.d.ts.map +0 -1
  45. package/dist/cli/commands/compare.js +0 -109
  46. package/dist/cli/commands/compare.js.map +0 -1
  47. package/dist/cli/commands/dead-code.d.ts +0 -11
  48. package/dist/cli/commands/dead-code.d.ts.map +0 -1
  49. package/dist/cli/commands/dead-code.js +0 -75
  50. package/dist/cli/commands/dead-code.js.map +0 -1
  51. package/dist/cli/commands/generate-spec.d.ts +0 -11
  52. package/dist/cli/commands/generate-spec.d.ts.map +0 -1
  53. package/dist/cli/commands/generate-spec.js +0 -120
  54. package/dist/cli/commands/generate-spec.js.map +0 -1
  55. package/dist/cli/commands/health.d.ts +0 -11
  56. package/dist/cli/commands/health.d.ts.map +0 -1
  57. package/dist/cli/commands/health.js +0 -76
  58. package/dist/cli/commands/health.js.map +0 -1
  59. package/dist/cli/commands/index.d.ts +0 -30
  60. package/dist/cli/commands/index.d.ts.map +0 -1
  61. package/dist/cli/commands/index.js +0 -36
  62. package/dist/cli/commands/index.js.map +0 -1
  63. package/dist/cli/commands/metrics.d.ts +0 -12
  64. package/dist/cli/commands/metrics.d.ts.map +0 -1
  65. package/dist/cli/commands/metrics.js +0 -231
  66. package/dist/cli/commands/metrics.js.map +0 -1
  67. package/dist/cli/commands/project.d.ts +0 -21
  68. package/dist/cli/commands/project.d.ts.map +0 -1
  69. package/dist/cli/commands/project.js +0 -92
  70. package/dist/cli/commands/project.js.map +0 -1
  71. package/dist/cli/commands/quality.d.ts +0 -15
  72. package/dist/cli/commands/quality.d.ts.map +0 -1
  73. package/dist/cli/commands/quality.js +0 -86
  74. package/dist/cli/commands/quality.js.map +0 -1
  75. package/dist/cli/commands/scan.d.ts +0 -11
  76. package/dist/cli/commands/scan.d.ts.map +0 -1
  77. package/dist/cli/commands/scan.js +0 -102
  78. package/dist/cli/commands/scan.js.map +0 -1
  79. package/dist/cli/commands/secrets.d.ts +0 -11
  80. package/dist/cli/commands/secrets.d.ts.map +0 -1
  81. package/dist/cli/commands/secrets.js +0 -79
  82. package/dist/cli/commands/secrets.js.map +0 -1
  83. package/dist/cli/commands/spec-diff.d.ts +0 -12
  84. package/dist/cli/commands/spec-diff.d.ts.map +0 -1
  85. package/dist/cli/commands/spec-diff.js +0 -150
  86. package/dist/cli/commands/spec-diff.js.map +0 -1
  87. package/dist/cli/commands/swarm.d.ts +0 -21
  88. package/dist/cli/commands/swarm.d.ts.map +0 -1
  89. package/dist/cli/commands/swarm.js +0 -175
  90. package/dist/cli/commands/swarm.js.map +0 -1
  91. package/dist/cli/commands/trust.d.ts +0 -23
  92. package/dist/cli/commands/trust.d.ts.map +0 -1
  93. package/dist/cli/commands/trust.js +0 -397
  94. package/dist/cli/commands/trust.js.map +0 -1
  95. package/dist/cli/commands/understand.d.ts +0 -12
  96. package/dist/cli/commands/understand.d.ts.map +0 -1
  97. package/dist/cli/commands/understand.js +0 -188
  98. package/dist/cli/commands/understand.js.map +0 -1
  99. package/dist/cli/config.d.ts +0 -161
  100. package/dist/cli/config.d.ts.map +0 -1
  101. package/dist/cli/config.js +0 -383
  102. package/dist/cli/config.js.map +0 -1
  103. package/dist/cli/discovery.d.ts +0 -31
  104. package/dist/cli/discovery.d.ts.map +0 -1
  105. package/dist/cli/discovery.js +0 -212
  106. package/dist/cli/discovery.js.map +0 -1
  107. package/dist/cli/effective-options.d.ts +0 -42
  108. package/dist/cli/effective-options.d.ts.map +0 -1
  109. package/dist/cli/effective-options.js +0 -80
  110. package/dist/cli/effective-options.js.map +0 -1
  111. package/dist/cli/file-collection.d.ts +0 -49
  112. package/dist/cli/file-collection.d.ts.map +0 -1
  113. package/dist/cli/file-collection.js +0 -142
  114. package/dist/cli/file-collection.js.map +0 -1
  115. package/dist/cli/formatters/index.d.ts +0 -15
  116. package/dist/cli/formatters/index.d.ts.map +0 -1
  117. package/dist/cli/formatters/index.js +0 -51
  118. package/dist/cli/formatters/index.js.map +0 -1
  119. package/dist/cli/formatters/json.d.ts +0 -11
  120. package/dist/cli/formatters/json.d.ts.map +0 -1
  121. package/dist/cli/formatters/json.js +0 -12
  122. package/dist/cli/formatters/json.js.map +0 -1
  123. package/dist/cli/formatters/project-json.d.ts +0 -11
  124. package/dist/cli/formatters/project-json.d.ts.map +0 -1
  125. package/dist/cli/formatters/project-json.js +0 -12
  126. package/dist/cli/formatters/project-json.js.map +0 -1
  127. package/dist/cli/formatters/project-sarif.d.ts +0 -11
  128. package/dist/cli/formatters/project-sarif.d.ts.map +0 -1
  129. package/dist/cli/formatters/project-sarif.js +0 -127
  130. package/dist/cli/formatters/project-sarif.js.map +0 -1
  131. package/dist/cli/formatters/project-summary.d.ts +0 -11
  132. package/dist/cli/formatters/project-summary.d.ts.map +0 -1
  133. package/dist/cli/formatters/project-summary.js +0 -202
  134. package/dist/cli/formatters/project-summary.js.map +0 -1
  135. package/dist/cli/formatters/sarif-shared.d.ts +0 -101
  136. package/dist/cli/formatters/sarif-shared.d.ts.map +0 -1
  137. package/dist/cli/formatters/sarif-shared.js +0 -57
  138. package/dist/cli/formatters/sarif-shared.js.map +0 -1
  139. package/dist/cli/formatters/sarif.d.ts +0 -12
  140. package/dist/cli/formatters/sarif.d.ts.map +0 -1
  141. package/dist/cli/formatters/sarif.js +0 -92
  142. package/dist/cli/formatters/sarif.js.map +0 -1
  143. package/dist/cli/formatters/summary.d.ts +0 -11
  144. package/dist/cli/formatters/summary.d.ts.map +0 -1
  145. package/dist/cli/formatters/summary.js +0 -240
  146. package/dist/cli/formatters/summary.js.map +0 -1
  147. package/dist/cli/formatters/two-phase-summary.d.ts +0 -11
  148. package/dist/cli/formatters/two-phase-summary.d.ts.map +0 -1
  149. package/dist/cli/formatters/two-phase-summary.js +0 -188
  150. package/dist/cli/formatters/two-phase-summary.js.map +0 -1
  151. package/dist/cli/index.d.ts +0 -10
  152. package/dist/cli/index.d.ts.map +0 -1
  153. package/dist/cli/index.js +0 -72
  154. package/dist/cli/index.js.map +0 -1
  155. package/dist/cli/program.d.ts +0 -117
  156. package/dist/cli/program.d.ts.map +0 -1
  157. package/dist/cli/program.js +0 -825
  158. 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