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