@shakecodeslikecray/whiterose 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1188 @@
1
+ import { z } from 'zod';
2
+
3
+ declare const BugSeverity: z.ZodEnum<["critical", "high", "medium", "low"]>;
4
+ type BugSeverity = z.infer<typeof BugSeverity>;
5
+ declare const BugCategory: z.ZodEnum<["logic-error", "security", "async-race-condition", "edge-case", "null-reference", "type-coercion", "resource-leak", "intent-violation"]>;
6
+ type BugCategory = z.infer<typeof BugCategory>;
7
+ declare const ConfidenceLevel: z.ZodEnum<["high", "medium", "low"]>;
8
+ type ConfidenceLevel = z.infer<typeof ConfidenceLevel>;
9
+ declare const ConfidenceScore: z.ZodObject<{
10
+ overall: z.ZodEnum<["high", "medium", "low"]>;
11
+ codePathValidity: z.ZodNumber;
12
+ reachability: z.ZodNumber;
13
+ intentViolation: z.ZodBoolean;
14
+ staticToolSignal: z.ZodBoolean;
15
+ adversarialSurvived: z.ZodBoolean;
16
+ }, "strip", z.ZodTypeAny, {
17
+ overall: "high" | "medium" | "low";
18
+ codePathValidity: number;
19
+ reachability: number;
20
+ intentViolation: boolean;
21
+ staticToolSignal: boolean;
22
+ adversarialSurvived: boolean;
23
+ }, {
24
+ overall: "high" | "medium" | "low";
25
+ codePathValidity: number;
26
+ reachability: number;
27
+ intentViolation: boolean;
28
+ staticToolSignal: boolean;
29
+ adversarialSurvived: boolean;
30
+ }>;
31
+ type ConfidenceScore = z.infer<typeof ConfidenceScore>;
32
+ declare const CodePathStep: z.ZodObject<{
33
+ step: z.ZodNumber;
34
+ file: z.ZodString;
35
+ line: z.ZodNumber;
36
+ code: z.ZodString;
37
+ explanation: z.ZodString;
38
+ }, "strip", z.ZodTypeAny, {
39
+ code: string;
40
+ step: number;
41
+ file: string;
42
+ line: number;
43
+ explanation: string;
44
+ }, {
45
+ code: string;
46
+ step: number;
47
+ file: string;
48
+ line: number;
49
+ explanation: string;
50
+ }>;
51
+ type CodePathStep = z.infer<typeof CodePathStep>;
52
+ declare const Bug: z.ZodObject<{
53
+ id: z.ZodString;
54
+ title: z.ZodString;
55
+ description: z.ZodString;
56
+ file: z.ZodString;
57
+ line: z.ZodNumber;
58
+ endLine: z.ZodOptional<z.ZodNumber>;
59
+ severity: z.ZodEnum<["critical", "high", "medium", "low"]>;
60
+ category: z.ZodEnum<["logic-error", "security", "async-race-condition", "edge-case", "null-reference", "type-coercion", "resource-leak", "intent-violation"]>;
61
+ confidence: z.ZodObject<{
62
+ overall: z.ZodEnum<["high", "medium", "low"]>;
63
+ codePathValidity: z.ZodNumber;
64
+ reachability: z.ZodNumber;
65
+ intentViolation: z.ZodBoolean;
66
+ staticToolSignal: z.ZodBoolean;
67
+ adversarialSurvived: z.ZodBoolean;
68
+ }, "strip", z.ZodTypeAny, {
69
+ overall: "high" | "medium" | "low";
70
+ codePathValidity: number;
71
+ reachability: number;
72
+ intentViolation: boolean;
73
+ staticToolSignal: boolean;
74
+ adversarialSurvived: boolean;
75
+ }, {
76
+ overall: "high" | "medium" | "low";
77
+ codePathValidity: number;
78
+ reachability: number;
79
+ intentViolation: boolean;
80
+ staticToolSignal: boolean;
81
+ adversarialSurvived: boolean;
82
+ }>;
83
+ codePath: z.ZodArray<z.ZodObject<{
84
+ step: z.ZodNumber;
85
+ file: z.ZodString;
86
+ line: z.ZodNumber;
87
+ code: z.ZodString;
88
+ explanation: z.ZodString;
89
+ }, "strip", z.ZodTypeAny, {
90
+ code: string;
91
+ step: number;
92
+ file: string;
93
+ line: number;
94
+ explanation: string;
95
+ }, {
96
+ code: string;
97
+ step: number;
98
+ file: string;
99
+ line: number;
100
+ explanation: string;
101
+ }>, "many">;
102
+ evidence: z.ZodArray<z.ZodString, "many">;
103
+ suggestedFix: z.ZodOptional<z.ZodString>;
104
+ relatedContract: z.ZodOptional<z.ZodString>;
105
+ staticAnalysisSignals: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
106
+ createdAt: z.ZodString;
107
+ }, "strip", z.ZodTypeAny, {
108
+ file: string;
109
+ line: number;
110
+ id: string;
111
+ title: string;
112
+ description: string;
113
+ severity: "critical" | "high" | "medium" | "low";
114
+ category: "logic-error" | "security" | "async-race-condition" | "edge-case" | "null-reference" | "type-coercion" | "resource-leak" | "intent-violation";
115
+ confidence: {
116
+ overall: "high" | "medium" | "low";
117
+ codePathValidity: number;
118
+ reachability: number;
119
+ intentViolation: boolean;
120
+ staticToolSignal: boolean;
121
+ adversarialSurvived: boolean;
122
+ };
123
+ codePath: {
124
+ code: string;
125
+ step: number;
126
+ file: string;
127
+ line: number;
128
+ explanation: string;
129
+ }[];
130
+ evidence: string[];
131
+ createdAt: string;
132
+ endLine?: number | undefined;
133
+ suggestedFix?: string | undefined;
134
+ relatedContract?: string | undefined;
135
+ staticAnalysisSignals?: string[] | undefined;
136
+ }, {
137
+ file: string;
138
+ line: number;
139
+ id: string;
140
+ title: string;
141
+ description: string;
142
+ severity: "critical" | "high" | "medium" | "low";
143
+ category: "logic-error" | "security" | "async-race-condition" | "edge-case" | "null-reference" | "type-coercion" | "resource-leak" | "intent-violation";
144
+ confidence: {
145
+ overall: "high" | "medium" | "low";
146
+ codePathValidity: number;
147
+ reachability: number;
148
+ intentViolation: boolean;
149
+ staticToolSignal: boolean;
150
+ adversarialSurvived: boolean;
151
+ };
152
+ codePath: {
153
+ code: string;
154
+ step: number;
155
+ file: string;
156
+ line: number;
157
+ explanation: string;
158
+ }[];
159
+ evidence: string[];
160
+ createdAt: string;
161
+ endLine?: number | undefined;
162
+ suggestedFix?: string | undefined;
163
+ relatedContract?: string | undefined;
164
+ staticAnalysisSignals?: string[] | undefined;
165
+ }>;
166
+ type Bug = z.infer<typeof Bug>;
167
+ declare const ProviderType: z.ZodEnum<["claude-code", "aider", "codex", "opencode", "ollama", "gemini"]>;
168
+ type ProviderType = z.infer<typeof ProviderType>;
169
+ declare const PriorityLevel: z.ZodEnum<["critical", "high", "medium", "low", "ignore"]>;
170
+ type PriorityLevel = z.infer<typeof PriorityLevel>;
171
+ declare const PackageConfig: z.ZodObject<{
172
+ path: z.ZodString;
173
+ priority: z.ZodEnum<["critical", "high", "medium", "low", "ignore"]>;
174
+ include: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
175
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
176
+ }, "strip", z.ZodTypeAny, {
177
+ path: string;
178
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
179
+ include?: string[] | undefined;
180
+ exclude?: string[] | undefined;
181
+ }, {
182
+ path: string;
183
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
184
+ include?: string[] | undefined;
185
+ exclude?: string[] | undefined;
186
+ }>;
187
+ type PackageConfig = z.infer<typeof PackageConfig>;
188
+ declare const MonorepoConfig: z.ZodObject<{
189
+ detection: z.ZodEnum<["auto", "explicit"]>;
190
+ packages: z.ZodOptional<z.ZodArray<z.ZodObject<{
191
+ path: z.ZodString;
192
+ priority: z.ZodEnum<["critical", "high", "medium", "low", "ignore"]>;
193
+ include: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
194
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
195
+ }, "strip", z.ZodTypeAny, {
196
+ path: string;
197
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
198
+ include?: string[] | undefined;
199
+ exclude?: string[] | undefined;
200
+ }, {
201
+ path: string;
202
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
203
+ include?: string[] | undefined;
204
+ exclude?: string[] | undefined;
205
+ }>, "many">>;
206
+ crossPackageAnalysis: z.ZodDefault<z.ZodBoolean>;
207
+ }, "strip", z.ZodTypeAny, {
208
+ detection: "auto" | "explicit";
209
+ crossPackageAnalysis: boolean;
210
+ packages?: {
211
+ path: string;
212
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
213
+ include?: string[] | undefined;
214
+ exclude?: string[] | undefined;
215
+ }[] | undefined;
216
+ }, {
217
+ detection: "auto" | "explicit";
218
+ packages?: {
219
+ path: string;
220
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
221
+ include?: string[] | undefined;
222
+ exclude?: string[] | undefined;
223
+ }[] | undefined;
224
+ crossPackageAnalysis?: boolean | undefined;
225
+ }>;
226
+ type MonorepoConfig = z.infer<typeof MonorepoConfig>;
227
+ declare const WhiteroseConfig: z.ZodObject<{
228
+ version: z.ZodDefault<z.ZodString>;
229
+ provider: z.ZodDefault<z.ZodEnum<["claude-code", "aider", "codex", "opencode", "ollama", "gemini"]>>;
230
+ providerFallback: z.ZodOptional<z.ZodArray<z.ZodEnum<["claude-code", "aider", "codex", "opencode", "ollama", "gemini"]>, "many">>;
231
+ include: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
232
+ exclude: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
233
+ priorities: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEnum<["critical", "high", "medium", "low", "ignore"]>>>;
234
+ categories: z.ZodDefault<z.ZodArray<z.ZodEnum<["logic-error", "security", "async-race-condition", "edge-case", "null-reference", "type-coercion", "resource-leak", "intent-violation"]>, "many">>;
235
+ minConfidence: z.ZodDefault<z.ZodEnum<["high", "medium", "low"]>>;
236
+ monorepo: z.ZodOptional<z.ZodObject<{
237
+ detection: z.ZodEnum<["auto", "explicit"]>;
238
+ packages: z.ZodOptional<z.ZodArray<z.ZodObject<{
239
+ path: z.ZodString;
240
+ priority: z.ZodEnum<["critical", "high", "medium", "low", "ignore"]>;
241
+ include: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
242
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
243
+ }, "strip", z.ZodTypeAny, {
244
+ path: string;
245
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
246
+ include?: string[] | undefined;
247
+ exclude?: string[] | undefined;
248
+ }, {
249
+ path: string;
250
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
251
+ include?: string[] | undefined;
252
+ exclude?: string[] | undefined;
253
+ }>, "many">>;
254
+ crossPackageAnalysis: z.ZodDefault<z.ZodBoolean>;
255
+ }, "strip", z.ZodTypeAny, {
256
+ detection: "auto" | "explicit";
257
+ crossPackageAnalysis: boolean;
258
+ packages?: {
259
+ path: string;
260
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
261
+ include?: string[] | undefined;
262
+ exclude?: string[] | undefined;
263
+ }[] | undefined;
264
+ }, {
265
+ detection: "auto" | "explicit";
266
+ packages?: {
267
+ path: string;
268
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
269
+ include?: string[] | undefined;
270
+ exclude?: string[] | undefined;
271
+ }[] | undefined;
272
+ crossPackageAnalysis?: boolean | undefined;
273
+ }>>;
274
+ staticAnalysis: z.ZodDefault<z.ZodObject<{
275
+ typescript: z.ZodDefault<z.ZodBoolean>;
276
+ eslint: z.ZodDefault<z.ZodBoolean>;
277
+ }, "strip", z.ZodTypeAny, {
278
+ typescript: boolean;
279
+ eslint: boolean;
280
+ }, {
281
+ typescript?: boolean | undefined;
282
+ eslint?: boolean | undefined;
283
+ }>>;
284
+ output: z.ZodDefault<z.ZodObject<{
285
+ sarif: z.ZodDefault<z.ZodBoolean>;
286
+ markdown: z.ZodDefault<z.ZodBoolean>;
287
+ sarifPath: z.ZodDefault<z.ZodString>;
288
+ markdownPath: z.ZodDefault<z.ZodString>;
289
+ }, "strip", z.ZodTypeAny, {
290
+ sarif: boolean;
291
+ markdown: boolean;
292
+ sarifPath: string;
293
+ markdownPath: string;
294
+ }, {
295
+ sarif?: boolean | undefined;
296
+ markdown?: boolean | undefined;
297
+ sarifPath?: string | undefined;
298
+ markdownPath?: string | undefined;
299
+ }>>;
300
+ }, "strip", z.ZodTypeAny, {
301
+ include: string[];
302
+ exclude: string[];
303
+ version: string;
304
+ provider: "claude-code" | "aider" | "codex" | "opencode" | "ollama" | "gemini";
305
+ priorities: Record<string, "critical" | "high" | "medium" | "low" | "ignore">;
306
+ categories: ("logic-error" | "security" | "async-race-condition" | "edge-case" | "null-reference" | "type-coercion" | "resource-leak" | "intent-violation")[];
307
+ minConfidence: "high" | "medium" | "low";
308
+ staticAnalysis: {
309
+ typescript: boolean;
310
+ eslint: boolean;
311
+ };
312
+ output: {
313
+ sarif: boolean;
314
+ markdown: boolean;
315
+ sarifPath: string;
316
+ markdownPath: string;
317
+ };
318
+ providerFallback?: ("claude-code" | "aider" | "codex" | "opencode" | "ollama" | "gemini")[] | undefined;
319
+ monorepo?: {
320
+ detection: "auto" | "explicit";
321
+ crossPackageAnalysis: boolean;
322
+ packages?: {
323
+ path: string;
324
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
325
+ include?: string[] | undefined;
326
+ exclude?: string[] | undefined;
327
+ }[] | undefined;
328
+ } | undefined;
329
+ }, {
330
+ include?: string[] | undefined;
331
+ exclude?: string[] | undefined;
332
+ version?: string | undefined;
333
+ provider?: "claude-code" | "aider" | "codex" | "opencode" | "ollama" | "gemini" | undefined;
334
+ providerFallback?: ("claude-code" | "aider" | "codex" | "opencode" | "ollama" | "gemini")[] | undefined;
335
+ priorities?: Record<string, "critical" | "high" | "medium" | "low" | "ignore"> | undefined;
336
+ categories?: ("logic-error" | "security" | "async-race-condition" | "edge-case" | "null-reference" | "type-coercion" | "resource-leak" | "intent-violation")[] | undefined;
337
+ minConfidence?: "high" | "medium" | "low" | undefined;
338
+ monorepo?: {
339
+ detection: "auto" | "explicit";
340
+ packages?: {
341
+ path: string;
342
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
343
+ include?: string[] | undefined;
344
+ exclude?: string[] | undefined;
345
+ }[] | undefined;
346
+ crossPackageAnalysis?: boolean | undefined;
347
+ } | undefined;
348
+ staticAnalysis?: {
349
+ typescript?: boolean | undefined;
350
+ eslint?: boolean | undefined;
351
+ } | undefined;
352
+ output?: {
353
+ sarif?: boolean | undefined;
354
+ markdown?: boolean | undefined;
355
+ sarifPath?: string | undefined;
356
+ markdownPath?: string | undefined;
357
+ } | undefined;
358
+ }>;
359
+ type WhiteroseConfig = z.infer<typeof WhiteroseConfig>;
360
+ declare const BehavioralContract: z.ZodObject<{
361
+ function: z.ZodString;
362
+ file: z.ZodString;
363
+ inputs: z.ZodArray<z.ZodObject<{
364
+ name: z.ZodString;
365
+ type: z.ZodString;
366
+ constraints: z.ZodOptional<z.ZodString>;
367
+ }, "strip", z.ZodTypeAny, {
368
+ type: string;
369
+ name: string;
370
+ constraints?: string | undefined;
371
+ }, {
372
+ type: string;
373
+ name: string;
374
+ constraints?: string | undefined;
375
+ }>, "many">;
376
+ outputs: z.ZodObject<{
377
+ type: z.ZodString;
378
+ constraints: z.ZodOptional<z.ZodString>;
379
+ }, "strip", z.ZodTypeAny, {
380
+ type: string;
381
+ constraints?: string | undefined;
382
+ }, {
383
+ type: string;
384
+ constraints?: string | undefined;
385
+ }>;
386
+ invariants: z.ZodArray<z.ZodString, "many">;
387
+ sideEffects: z.ZodArray<z.ZodString, "many">;
388
+ throws: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
389
+ }, "strip", z.ZodTypeAny, {
390
+ function: string;
391
+ file: string;
392
+ inputs: {
393
+ type: string;
394
+ name: string;
395
+ constraints?: string | undefined;
396
+ }[];
397
+ outputs: {
398
+ type: string;
399
+ constraints?: string | undefined;
400
+ };
401
+ invariants: string[];
402
+ sideEffects: string[];
403
+ throws?: string[] | undefined;
404
+ }, {
405
+ function: string;
406
+ file: string;
407
+ inputs: {
408
+ type: string;
409
+ name: string;
410
+ constraints?: string | undefined;
411
+ }[];
412
+ outputs: {
413
+ type: string;
414
+ constraints?: string | undefined;
415
+ };
416
+ invariants: string[];
417
+ sideEffects: string[];
418
+ throws?: string[] | undefined;
419
+ }>;
420
+ type BehavioralContract = z.infer<typeof BehavioralContract>;
421
+ declare const FeatureIntent: z.ZodObject<{
422
+ name: z.ZodString;
423
+ description: z.ZodString;
424
+ priority: z.ZodEnum<["critical", "high", "medium", "low", "ignore"]>;
425
+ constraints: z.ZodArray<z.ZodString, "many">;
426
+ relatedFiles: z.ZodArray<z.ZodString, "many">;
427
+ }, "strip", z.ZodTypeAny, {
428
+ description: string;
429
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
430
+ name: string;
431
+ constraints: string[];
432
+ relatedFiles: string[];
433
+ }, {
434
+ description: string;
435
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
436
+ name: string;
437
+ constraints: string[];
438
+ relatedFiles: string[];
439
+ }>;
440
+ type FeatureIntent = z.infer<typeof FeatureIntent>;
441
+ declare const CodebaseUnderstanding: z.ZodObject<{
442
+ version: z.ZodString;
443
+ generatedAt: z.ZodString;
444
+ summary: z.ZodObject<{
445
+ framework: z.ZodOptional<z.ZodString>;
446
+ language: z.ZodString;
447
+ type: z.ZodString;
448
+ description: z.ZodString;
449
+ }, "strip", z.ZodTypeAny, {
450
+ type: string;
451
+ description: string;
452
+ language: string;
453
+ framework?: string | undefined;
454
+ }, {
455
+ type: string;
456
+ description: string;
457
+ language: string;
458
+ framework?: string | undefined;
459
+ }>;
460
+ features: z.ZodArray<z.ZodObject<{
461
+ name: z.ZodString;
462
+ description: z.ZodString;
463
+ priority: z.ZodEnum<["critical", "high", "medium", "low", "ignore"]>;
464
+ constraints: z.ZodArray<z.ZodString, "many">;
465
+ relatedFiles: z.ZodArray<z.ZodString, "many">;
466
+ }, "strip", z.ZodTypeAny, {
467
+ description: string;
468
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
469
+ name: string;
470
+ constraints: string[];
471
+ relatedFiles: string[];
472
+ }, {
473
+ description: string;
474
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
475
+ name: string;
476
+ constraints: string[];
477
+ relatedFiles: string[];
478
+ }>, "many">;
479
+ contracts: z.ZodArray<z.ZodObject<{
480
+ function: z.ZodString;
481
+ file: z.ZodString;
482
+ inputs: z.ZodArray<z.ZodObject<{
483
+ name: z.ZodString;
484
+ type: z.ZodString;
485
+ constraints: z.ZodOptional<z.ZodString>;
486
+ }, "strip", z.ZodTypeAny, {
487
+ type: string;
488
+ name: string;
489
+ constraints?: string | undefined;
490
+ }, {
491
+ type: string;
492
+ name: string;
493
+ constraints?: string | undefined;
494
+ }>, "many">;
495
+ outputs: z.ZodObject<{
496
+ type: z.ZodString;
497
+ constraints: z.ZodOptional<z.ZodString>;
498
+ }, "strip", z.ZodTypeAny, {
499
+ type: string;
500
+ constraints?: string | undefined;
501
+ }, {
502
+ type: string;
503
+ constraints?: string | undefined;
504
+ }>;
505
+ invariants: z.ZodArray<z.ZodString, "many">;
506
+ sideEffects: z.ZodArray<z.ZodString, "many">;
507
+ throws: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
508
+ }, "strip", z.ZodTypeAny, {
509
+ function: string;
510
+ file: string;
511
+ inputs: {
512
+ type: string;
513
+ name: string;
514
+ constraints?: string | undefined;
515
+ }[];
516
+ outputs: {
517
+ type: string;
518
+ constraints?: string | undefined;
519
+ };
520
+ invariants: string[];
521
+ sideEffects: string[];
522
+ throws?: string[] | undefined;
523
+ }, {
524
+ function: string;
525
+ file: string;
526
+ inputs: {
527
+ type: string;
528
+ name: string;
529
+ constraints?: string | undefined;
530
+ }[];
531
+ outputs: {
532
+ type: string;
533
+ constraints?: string | undefined;
534
+ };
535
+ invariants: string[];
536
+ sideEffects: string[];
537
+ throws?: string[] | undefined;
538
+ }>, "many">;
539
+ dependencies: z.ZodRecord<z.ZodString, z.ZodString>;
540
+ structure: z.ZodObject<{
541
+ totalFiles: z.ZodNumber;
542
+ totalLines: z.ZodNumber;
543
+ packages: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
544
+ }, "strip", z.ZodTypeAny, {
545
+ totalFiles: number;
546
+ totalLines: number;
547
+ packages?: string[] | undefined;
548
+ }, {
549
+ totalFiles: number;
550
+ totalLines: number;
551
+ packages?: string[] | undefined;
552
+ }>;
553
+ }, "strip", z.ZodTypeAny, {
554
+ version: string;
555
+ generatedAt: string;
556
+ summary: {
557
+ type: string;
558
+ description: string;
559
+ language: string;
560
+ framework?: string | undefined;
561
+ };
562
+ features: {
563
+ description: string;
564
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
565
+ name: string;
566
+ constraints: string[];
567
+ relatedFiles: string[];
568
+ }[];
569
+ contracts: {
570
+ function: string;
571
+ file: string;
572
+ inputs: {
573
+ type: string;
574
+ name: string;
575
+ constraints?: string | undefined;
576
+ }[];
577
+ outputs: {
578
+ type: string;
579
+ constraints?: string | undefined;
580
+ };
581
+ invariants: string[];
582
+ sideEffects: string[];
583
+ throws?: string[] | undefined;
584
+ }[];
585
+ dependencies: Record<string, string>;
586
+ structure: {
587
+ totalFiles: number;
588
+ totalLines: number;
589
+ packages?: string[] | undefined;
590
+ };
591
+ }, {
592
+ version: string;
593
+ generatedAt: string;
594
+ summary: {
595
+ type: string;
596
+ description: string;
597
+ language: string;
598
+ framework?: string | undefined;
599
+ };
600
+ features: {
601
+ description: string;
602
+ priority: "critical" | "high" | "medium" | "low" | "ignore";
603
+ name: string;
604
+ constraints: string[];
605
+ relatedFiles: string[];
606
+ }[];
607
+ contracts: {
608
+ function: string;
609
+ file: string;
610
+ inputs: {
611
+ type: string;
612
+ name: string;
613
+ constraints?: string | undefined;
614
+ }[];
615
+ outputs: {
616
+ type: string;
617
+ constraints?: string | undefined;
618
+ };
619
+ invariants: string[];
620
+ sideEffects: string[];
621
+ throws?: string[] | undefined;
622
+ }[];
623
+ dependencies: Record<string, string>;
624
+ structure: {
625
+ totalFiles: number;
626
+ totalLines: number;
627
+ packages?: string[] | undefined;
628
+ };
629
+ }>;
630
+ type CodebaseUnderstanding = z.infer<typeof CodebaseUnderstanding>;
631
+ declare const FileHash: z.ZodObject<{
632
+ path: z.ZodString;
633
+ hash: z.ZodString;
634
+ lastModified: z.ZodString;
635
+ }, "strip", z.ZodTypeAny, {
636
+ path: string;
637
+ hash: string;
638
+ lastModified: string;
639
+ }, {
640
+ path: string;
641
+ hash: string;
642
+ lastModified: string;
643
+ }>;
644
+ type FileHash = z.infer<typeof FileHash>;
645
+ declare const CacheState: z.ZodObject<{
646
+ version: z.ZodString;
647
+ lastFullScan: z.ZodOptional<z.ZodString>;
648
+ lastIncrementalScan: z.ZodOptional<z.ZodString>;
649
+ fileHashes: z.ZodArray<z.ZodObject<{
650
+ path: z.ZodString;
651
+ hash: z.ZodString;
652
+ lastModified: z.ZodString;
653
+ }, "strip", z.ZodTypeAny, {
654
+ path: string;
655
+ hash: string;
656
+ lastModified: string;
657
+ }, {
658
+ path: string;
659
+ hash: string;
660
+ lastModified: string;
661
+ }>, "many">;
662
+ }, "strip", z.ZodTypeAny, {
663
+ version: string;
664
+ fileHashes: {
665
+ path: string;
666
+ hash: string;
667
+ lastModified: string;
668
+ }[];
669
+ lastFullScan?: string | undefined;
670
+ lastIncrementalScan?: string | undefined;
671
+ }, {
672
+ version: string;
673
+ fileHashes: {
674
+ path: string;
675
+ hash: string;
676
+ lastModified: string;
677
+ }[];
678
+ lastFullScan?: string | undefined;
679
+ lastIncrementalScan?: string | undefined;
680
+ }>;
681
+ type CacheState = z.infer<typeof CacheState>;
682
+ interface AnalysisContext {
683
+ files: string[];
684
+ understanding: CodebaseUnderstanding;
685
+ config: WhiteroseConfig;
686
+ staticAnalysisResults: StaticAnalysisResult[];
687
+ }
688
+ interface StaticAnalysisResult {
689
+ tool: 'typescript' | 'eslint';
690
+ file: string;
691
+ line: number;
692
+ message: string;
693
+ severity: 'error' | 'warning' | 'info';
694
+ code?: string;
695
+ }
696
+ interface LLMProvider {
697
+ name: ProviderType;
698
+ detect(): Promise<boolean>;
699
+ isAvailable(): Promise<boolean>;
700
+ analyze(context: AnalysisContext): Promise<Bug[]>;
701
+ adversarialValidate(bug: Bug, context: AnalysisContext): Promise<AdversarialResult>;
702
+ generateUnderstanding(files: string[], existingDocsSummary?: string): Promise<CodebaseUnderstanding>;
703
+ }
704
+ interface AdversarialResult {
705
+ survived: boolean;
706
+ counterArguments: string[];
707
+ adjustedConfidence?: ConfidenceScore;
708
+ }
709
+ declare const ScanResult: z.ZodObject<{
710
+ id: z.ZodString;
711
+ timestamp: z.ZodString;
712
+ scanType: z.ZodEnum<["full", "incremental"]>;
713
+ filesScanned: z.ZodNumber;
714
+ filesChanged: z.ZodOptional<z.ZodNumber>;
715
+ duration: z.ZodNumber;
716
+ bugs: z.ZodArray<z.ZodObject<{
717
+ id: z.ZodString;
718
+ title: z.ZodString;
719
+ description: z.ZodString;
720
+ file: z.ZodString;
721
+ line: z.ZodNumber;
722
+ endLine: z.ZodOptional<z.ZodNumber>;
723
+ severity: z.ZodEnum<["critical", "high", "medium", "low"]>;
724
+ category: z.ZodEnum<["logic-error", "security", "async-race-condition", "edge-case", "null-reference", "type-coercion", "resource-leak", "intent-violation"]>;
725
+ confidence: z.ZodObject<{
726
+ overall: z.ZodEnum<["high", "medium", "low"]>;
727
+ codePathValidity: z.ZodNumber;
728
+ reachability: z.ZodNumber;
729
+ intentViolation: z.ZodBoolean;
730
+ staticToolSignal: z.ZodBoolean;
731
+ adversarialSurvived: z.ZodBoolean;
732
+ }, "strip", z.ZodTypeAny, {
733
+ overall: "high" | "medium" | "low";
734
+ codePathValidity: number;
735
+ reachability: number;
736
+ intentViolation: boolean;
737
+ staticToolSignal: boolean;
738
+ adversarialSurvived: boolean;
739
+ }, {
740
+ overall: "high" | "medium" | "low";
741
+ codePathValidity: number;
742
+ reachability: number;
743
+ intentViolation: boolean;
744
+ staticToolSignal: boolean;
745
+ adversarialSurvived: boolean;
746
+ }>;
747
+ codePath: z.ZodArray<z.ZodObject<{
748
+ step: z.ZodNumber;
749
+ file: z.ZodString;
750
+ line: z.ZodNumber;
751
+ code: z.ZodString;
752
+ explanation: z.ZodString;
753
+ }, "strip", z.ZodTypeAny, {
754
+ code: string;
755
+ step: number;
756
+ file: string;
757
+ line: number;
758
+ explanation: string;
759
+ }, {
760
+ code: string;
761
+ step: number;
762
+ file: string;
763
+ line: number;
764
+ explanation: string;
765
+ }>, "many">;
766
+ evidence: z.ZodArray<z.ZodString, "many">;
767
+ suggestedFix: z.ZodOptional<z.ZodString>;
768
+ relatedContract: z.ZodOptional<z.ZodString>;
769
+ staticAnalysisSignals: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
770
+ createdAt: z.ZodString;
771
+ }, "strip", z.ZodTypeAny, {
772
+ file: string;
773
+ line: number;
774
+ id: string;
775
+ title: string;
776
+ description: string;
777
+ severity: "critical" | "high" | "medium" | "low";
778
+ category: "logic-error" | "security" | "async-race-condition" | "edge-case" | "null-reference" | "type-coercion" | "resource-leak" | "intent-violation";
779
+ confidence: {
780
+ overall: "high" | "medium" | "low";
781
+ codePathValidity: number;
782
+ reachability: number;
783
+ intentViolation: boolean;
784
+ staticToolSignal: boolean;
785
+ adversarialSurvived: boolean;
786
+ };
787
+ codePath: {
788
+ code: string;
789
+ step: number;
790
+ file: string;
791
+ line: number;
792
+ explanation: string;
793
+ }[];
794
+ evidence: string[];
795
+ createdAt: string;
796
+ endLine?: number | undefined;
797
+ suggestedFix?: string | undefined;
798
+ relatedContract?: string | undefined;
799
+ staticAnalysisSignals?: string[] | undefined;
800
+ }, {
801
+ file: string;
802
+ line: number;
803
+ id: string;
804
+ title: string;
805
+ description: string;
806
+ severity: "critical" | "high" | "medium" | "low";
807
+ category: "logic-error" | "security" | "async-race-condition" | "edge-case" | "null-reference" | "type-coercion" | "resource-leak" | "intent-violation";
808
+ confidence: {
809
+ overall: "high" | "medium" | "low";
810
+ codePathValidity: number;
811
+ reachability: number;
812
+ intentViolation: boolean;
813
+ staticToolSignal: boolean;
814
+ adversarialSurvived: boolean;
815
+ };
816
+ codePath: {
817
+ code: string;
818
+ step: number;
819
+ file: string;
820
+ line: number;
821
+ explanation: string;
822
+ }[];
823
+ evidence: string[];
824
+ createdAt: string;
825
+ endLine?: number | undefined;
826
+ suggestedFix?: string | undefined;
827
+ relatedContract?: string | undefined;
828
+ staticAnalysisSignals?: string[] | undefined;
829
+ }>, "many">;
830
+ summary: z.ZodObject<{
831
+ critical: z.ZodNumber;
832
+ high: z.ZodNumber;
833
+ medium: z.ZodNumber;
834
+ low: z.ZodNumber;
835
+ total: z.ZodNumber;
836
+ }, "strip", z.ZodTypeAny, {
837
+ critical: number;
838
+ high: number;
839
+ medium: number;
840
+ low: number;
841
+ total: number;
842
+ }, {
843
+ critical: number;
844
+ high: number;
845
+ medium: number;
846
+ low: number;
847
+ total: number;
848
+ }>;
849
+ }, "strip", z.ZodTypeAny, {
850
+ id: string;
851
+ summary: {
852
+ critical: number;
853
+ high: number;
854
+ medium: number;
855
+ low: number;
856
+ total: number;
857
+ };
858
+ duration: number;
859
+ timestamp: string;
860
+ scanType: "full" | "incremental";
861
+ filesScanned: number;
862
+ bugs: {
863
+ file: string;
864
+ line: number;
865
+ id: string;
866
+ title: string;
867
+ description: string;
868
+ severity: "critical" | "high" | "medium" | "low";
869
+ category: "logic-error" | "security" | "async-race-condition" | "edge-case" | "null-reference" | "type-coercion" | "resource-leak" | "intent-violation";
870
+ confidence: {
871
+ overall: "high" | "medium" | "low";
872
+ codePathValidity: number;
873
+ reachability: number;
874
+ intentViolation: boolean;
875
+ staticToolSignal: boolean;
876
+ adversarialSurvived: boolean;
877
+ };
878
+ codePath: {
879
+ code: string;
880
+ step: number;
881
+ file: string;
882
+ line: number;
883
+ explanation: string;
884
+ }[];
885
+ evidence: string[];
886
+ createdAt: string;
887
+ endLine?: number | undefined;
888
+ suggestedFix?: string | undefined;
889
+ relatedContract?: string | undefined;
890
+ staticAnalysisSignals?: string[] | undefined;
891
+ }[];
892
+ filesChanged?: number | undefined;
893
+ }, {
894
+ id: string;
895
+ summary: {
896
+ critical: number;
897
+ high: number;
898
+ medium: number;
899
+ low: number;
900
+ total: number;
901
+ };
902
+ duration: number;
903
+ timestamp: string;
904
+ scanType: "full" | "incremental";
905
+ filesScanned: number;
906
+ bugs: {
907
+ file: string;
908
+ line: number;
909
+ id: string;
910
+ title: string;
911
+ description: string;
912
+ severity: "critical" | "high" | "medium" | "low";
913
+ category: "logic-error" | "security" | "async-race-condition" | "edge-case" | "null-reference" | "type-coercion" | "resource-leak" | "intent-violation";
914
+ confidence: {
915
+ overall: "high" | "medium" | "low";
916
+ codePathValidity: number;
917
+ reachability: number;
918
+ intentViolation: boolean;
919
+ staticToolSignal: boolean;
920
+ adversarialSurvived: boolean;
921
+ };
922
+ codePath: {
923
+ code: string;
924
+ step: number;
925
+ file: string;
926
+ line: number;
927
+ explanation: string;
928
+ }[];
929
+ evidence: string[];
930
+ createdAt: string;
931
+ endLine?: number | undefined;
932
+ suggestedFix?: string | undefined;
933
+ relatedContract?: string | undefined;
934
+ staticAnalysisSignals?: string[] | undefined;
935
+ }[];
936
+ filesChanged?: number | undefined;
937
+ }>;
938
+ type ScanResult = z.infer<typeof ScanResult>;
939
+
940
+ declare function loadConfig(cwd: string): Promise<WhiteroseConfig>;
941
+ declare function loadUnderstanding(cwd: string): Promise<CodebaseUnderstanding | null>;
942
+ declare function saveConfig(cwd: string, config: WhiteroseConfig): Promise<void>;
943
+
944
+ declare function scanCodebase(cwd: string, config?: WhiteroseConfig): Promise<string[]>;
945
+ declare function getChangedFiles(cwd: string, config: WhiteroseConfig): Promise<{
946
+ files: string[];
947
+ hashes: FileHash[];
948
+ }>;
949
+ declare function getDependentFiles(changedFiles: string[], cwd: string, allFiles?: string[]): Promise<string[]>;
950
+
951
+ type ProgressCallback = (message: string) => void;
952
+ type BugFoundCallback = (bug: Bug) => void;
953
+ declare class ClaudeCodeProvider implements LLMProvider {
954
+ name: ProviderType;
955
+ private progressCallback?;
956
+ private bugFoundCallback?;
957
+ private currentProcess?;
958
+ private unsafeMode;
959
+ detect(): Promise<boolean>;
960
+ isAvailable(): Promise<boolean>;
961
+ /**
962
+ * Enable unsafe mode (--dangerously-skip-permissions).
963
+ * WARNING: This bypasses Claude's permission prompts and should only be used
964
+ * when you trust the codebase being analyzed.
965
+ */
966
+ setUnsafeMode(enabled: boolean): void;
967
+ isUnsafeMode(): boolean;
968
+ setProgressCallback(callback: ProgressCallback): void;
969
+ setBugFoundCallback(callback: BugFoundCallback): void;
970
+ private reportProgress;
971
+ private reportBug;
972
+ cancel(): void;
973
+ analyze(context: AnalysisContext): Promise<Bug[]>;
974
+ adversarialValidate(bug: Bug, _context: AnalysisContext): Promise<AdversarialResult>;
975
+ generateUnderstanding(files: string[], existingDocsSummary?: string): Promise<CodebaseUnderstanding>;
976
+ private buildAgenticAnalysisPrompt;
977
+ private buildAgenticUnderstandingPrompt;
978
+ private buildAdversarialPrompt;
979
+ private runAgenticClaude;
980
+ private processAgentOutput;
981
+ private runSimpleClaude;
982
+ private parseBugData;
983
+ private parseAdversarialResponse;
984
+ private parseUnderstandingResponse;
985
+ private extractJson;
986
+ }
987
+
988
+ declare class AiderProvider implements LLMProvider {
989
+ name: ProviderType;
990
+ detect(): Promise<boolean>;
991
+ isAvailable(): Promise<boolean>;
992
+ analyze(context: AnalysisContext): Promise<Bug[]>;
993
+ adversarialValidate(bug: Bug, _context: AnalysisContext): Promise<AdversarialResult>;
994
+ generateUnderstanding(files: string[], _existingDocsSummary?: string): Promise<CodebaseUnderstanding>;
995
+ private readFilesWithLimit;
996
+ private prioritizeFiles;
997
+ private buildAnalysisPrompt;
998
+ private buildAdversarialPrompt;
999
+ private buildUnderstandingPrompt;
1000
+ private runAider;
1001
+ private parseAnalysisResponse;
1002
+ private parseAdversarialResponse;
1003
+ private parseUnderstandingResponse;
1004
+ private extractJson;
1005
+ private parseSeverity;
1006
+ private parseCategory;
1007
+ private parseConfidence;
1008
+ }
1009
+
1010
+ declare function getProvider(name: ProviderType): Promise<LLMProvider>;
1011
+
1012
+ declare function detectProvider(): Promise<ProviderType[]>;
1013
+ declare function isProviderAvailable(name: ProviderType): Promise<boolean>;
1014
+
1015
+ declare function runStaticAnalysis(cwd: string, files: string[], config: WhiteroseConfig): Promise<StaticAnalysisResult[]>;
1016
+
1017
+ interface SarifResult {
1018
+ $schema: string;
1019
+ version: string;
1020
+ runs: SarifRun[];
1021
+ }
1022
+ interface SarifRun {
1023
+ tool: {
1024
+ driver: {
1025
+ name: string;
1026
+ version: string;
1027
+ informationUri: string;
1028
+ rules: SarifRule[];
1029
+ };
1030
+ };
1031
+ results: SarifResultItem[];
1032
+ }
1033
+ interface SarifRule {
1034
+ id: string;
1035
+ name: string;
1036
+ shortDescription: {
1037
+ text: string;
1038
+ };
1039
+ fullDescription: {
1040
+ text: string;
1041
+ };
1042
+ defaultConfiguration: {
1043
+ level: string;
1044
+ };
1045
+ properties: {
1046
+ category: string;
1047
+ };
1048
+ }
1049
+ interface SarifResultItem {
1050
+ ruleId: string;
1051
+ level: string;
1052
+ message: {
1053
+ text: string;
1054
+ markdown?: string;
1055
+ };
1056
+ locations: SarifLocation[];
1057
+ codeFlows?: SarifCodeFlow[];
1058
+ }
1059
+ interface SarifLocation {
1060
+ physicalLocation: {
1061
+ artifactLocation: {
1062
+ uri: string;
1063
+ };
1064
+ region: {
1065
+ startLine: number;
1066
+ endLine?: number;
1067
+ };
1068
+ };
1069
+ }
1070
+ interface SarifCodeFlow {
1071
+ threadFlows: {
1072
+ locations: {
1073
+ location: SarifLocation;
1074
+ message?: {
1075
+ text: string;
1076
+ };
1077
+ }[];
1078
+ }[];
1079
+ }
1080
+ declare function outputSarif(result: ScanResult): SarifResult;
1081
+
1082
+ declare function outputMarkdown(result: ScanResult): string;
1083
+
1084
+ declare function generateIntentDocument(understanding: CodebaseUnderstanding): string;
1085
+ interface ParsedIntent {
1086
+ knownConstraints: string[];
1087
+ areasOfConcern: string[];
1088
+ customFeatures: FeatureIntent[];
1089
+ overrides: {
1090
+ description?: string;
1091
+ framework?: string;
1092
+ };
1093
+ }
1094
+ declare function parseIntentDocument(content: string): ParsedIntent;
1095
+ /**
1096
+ * Merge parsed intent with existing understanding
1097
+ */
1098
+ declare function mergeIntentWithUnderstanding(understanding: CodebaseUnderstanding, parsedIntent: ParsedIntent): CodebaseUnderstanding;
1099
+
1100
+ interface FixOptions {
1101
+ dryRun: boolean;
1102
+ branch?: string;
1103
+ }
1104
+ interface FixResult {
1105
+ success: boolean;
1106
+ diff?: string;
1107
+ error?: string;
1108
+ branchName?: string;
1109
+ }
1110
+ declare function applyFix(bug: Bug, config: WhiteroseConfig, options: FixOptions): Promise<FixResult>;
1111
+ declare function batchFix(bugs: Bug[], config: WhiteroseConfig, options: FixOptions): Promise<Map<string, FixResult>>;
1112
+
1113
+ declare function isGitRepo(cwd?: string): Promise<boolean>;
1114
+ declare function getCurrentBranch(cwd?: string): Promise<string>;
1115
+ declare function hasUncommittedChanges(cwd?: string): Promise<boolean>;
1116
+ declare function createFixBranch(branchName: string, bug: Bug, cwd?: string): Promise<string>;
1117
+ declare function commitFix(bug: Bug, cwd?: string): Promise<string>;
1118
+ declare function stashChanges(cwd?: string): Promise<boolean>;
1119
+ declare function popStash(cwd?: string): Promise<void>;
1120
+ declare function getDiff(file: string, cwd?: string): Promise<string>;
1121
+ declare function getStagedDiff(cwd?: string): Promise<string>;
1122
+ declare function resetFile(file: string, cwd?: string): Promise<void>;
1123
+ declare function getFileAtHead(file: string, cwd?: string): Promise<string>;
1124
+ interface GitStatus {
1125
+ isRepo: boolean;
1126
+ branch: string;
1127
+ hasChanges: boolean;
1128
+ staged: string[];
1129
+ modified: string[];
1130
+ untracked: string[];
1131
+ }
1132
+ declare function getGitStatus(cwd?: string): Promise<GitStatus>;
1133
+
1134
+ interface DependencyGraph {
1135
+ files: Map<string, Set<string>>;
1136
+ dependents: Map<string, Set<string>>;
1137
+ }
1138
+ /**
1139
+ * Build a dependency graph for the given files
1140
+ */
1141
+ declare function buildDependencyGraph(cwd: string, files: string[]): Promise<DependencyGraph>;
1142
+ /**
1143
+ * Get the imports that a file makes
1144
+ */
1145
+ declare function getImportsOf(filePath: string): Promise<string[]>;
1146
+ /**
1147
+ * Check if fileA depends on fileB (directly or transitively)
1148
+ */
1149
+ declare function dependsOn(fileA: string, fileB: string, cwd: string, allFiles: string[]): Promise<boolean>;
1150
+ /**
1151
+ * Get circular dependencies
1152
+ */
1153
+ declare function findCircularDependencies(cwd: string, allFiles: string[]): Promise<string[][]>;
1154
+
1155
+ interface Package {
1156
+ name: string;
1157
+ path: string;
1158
+ relativePath: string;
1159
+ packageJson: Record<string, any>;
1160
+ }
1161
+ interface MonorepoInfo {
1162
+ isMonorepo: boolean;
1163
+ type: 'npm-workspaces' | 'yarn-workspaces' | 'pnpm-workspaces' | 'lerna' | 'nx' | 'turborepo' | 'none';
1164
+ rootPath: string;
1165
+ packages: Package[];
1166
+ }
1167
+ /**
1168
+ * Detect if the cwd is a monorepo and return info about packages
1169
+ */
1170
+ declare function detectMonorepo(cwd: string): Promise<MonorepoInfo>;
1171
+ /**
1172
+ * Get files belonging to a specific package
1173
+ */
1174
+ declare function getPackageFiles(pkg: Package, patterns?: string[], ignore?: string[]): Promise<string[]>;
1175
+ /**
1176
+ * Detect which package a file belongs to
1177
+ */
1178
+ declare function getPackageForFile(file: string, packages: Package[]): Package | null;
1179
+ /**
1180
+ * Group files by package
1181
+ */
1182
+ declare function groupFilesByPackage(files: string[], packages: Package[]): Map<Package | null, string[]>;
1183
+ /**
1184
+ * Get cross-package dependencies
1185
+ */
1186
+ declare function getCrossPackageDependencies(packages: Package[]): Promise<Map<string, string[]>>;
1187
+
1188
+ export { type AdversarialResult, AiderProvider, type AnalysisContext, BehavioralContract, Bug, BugCategory, BugSeverity, CacheState, ClaudeCodeProvider, CodePathStep, CodebaseUnderstanding, ConfidenceLevel, ConfidenceScore, FeatureIntent, FileHash, type GitStatus, type LLMProvider, MonorepoConfig, type MonorepoInfo, type Package, PackageConfig, PriorityLevel, ProviderType, ScanResult, type StaticAnalysisResult, WhiteroseConfig, applyFix, batchFix, buildDependencyGraph, commitFix, createFixBranch, dependsOn, detectMonorepo, detectProvider, findCircularDependencies, generateIntentDocument, getChangedFiles, getCrossPackageDependencies, getCurrentBranch, getDependentFiles, getDiff, getFileAtHead, getGitStatus, getImportsOf, getPackageFiles, getPackageForFile, getProvider, getStagedDiff, groupFilesByPackage, hasUncommittedChanges, isGitRepo, isProviderAvailable, loadConfig, loadUnderstanding, mergeIntentWithUnderstanding, outputMarkdown, outputSarif, parseIntentDocument, popStash, resetFile, runStaticAnalysis, saveConfig, scanCodebase, stashChanges };