driftdetect 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.
Files changed (117) hide show
  1. package/dist/bin/drift.d.ts +11 -0
  2. package/dist/bin/drift.d.ts.map +1 -0
  3. package/dist/bin/drift.js +83 -0
  4. package/dist/bin/drift.js.map +1 -0
  5. package/dist/commands/approve.d.ts +18 -0
  6. package/dist/commands/approve.d.ts.map +1 -0
  7. package/dist/commands/approve.js +271 -0
  8. package/dist/commands/approve.js.map +1 -0
  9. package/dist/commands/check.d.ts +39 -0
  10. package/dist/commands/check.d.ts.map +1 -0
  11. package/dist/commands/check.js +268 -0
  12. package/dist/commands/check.js.map +1 -0
  13. package/dist/commands/export.d.ts +14 -0
  14. package/dist/commands/export.d.ts.map +1 -0
  15. package/dist/commands/export.js +109 -0
  16. package/dist/commands/export.js.map +1 -0
  17. package/dist/commands/files.d.ts +13 -0
  18. package/dist/commands/files.d.ts.map +1 -0
  19. package/dist/commands/files.js +88 -0
  20. package/dist/commands/files.js.map +1 -0
  21. package/dist/commands/ignore.d.ts +18 -0
  22. package/dist/commands/ignore.d.ts.map +1 -0
  23. package/dist/commands/ignore.js +200 -0
  24. package/dist/commands/ignore.js.map +1 -0
  25. package/dist/commands/index.d.ts +16 -0
  26. package/dist/commands/index.d.ts.map +1 -0
  27. package/dist/commands/index.js +16 -0
  28. package/dist/commands/index.js.map +1 -0
  29. package/dist/commands/init.d.ts +19 -0
  30. package/dist/commands/init.d.ts.map +1 -0
  31. package/dist/commands/init.js +320 -0
  32. package/dist/commands/init.js.map +1 -0
  33. package/dist/commands/report.d.ts +20 -0
  34. package/dist/commands/report.d.ts.map +1 -0
  35. package/dist/commands/report.js +202 -0
  36. package/dist/commands/report.js.map +1 -0
  37. package/dist/commands/scan.d.ts +27 -0
  38. package/dist/commands/scan.d.ts.map +1 -0
  39. package/dist/commands/scan.js +444 -0
  40. package/dist/commands/scan.js.map +1 -0
  41. package/dist/commands/status.d.ts +18 -0
  42. package/dist/commands/status.d.ts.map +1 -0
  43. package/dist/commands/status.js +199 -0
  44. package/dist/commands/status.js.map +1 -0
  45. package/dist/commands/where.d.ts +13 -0
  46. package/dist/commands/where.d.ts.map +1 -0
  47. package/dist/commands/where.js +80 -0
  48. package/dist/commands/where.js.map +1 -0
  49. package/dist/git/hooks.d.ts +108 -0
  50. package/dist/git/hooks.d.ts.map +1 -0
  51. package/dist/git/hooks.js +389 -0
  52. package/dist/git/hooks.js.map +1 -0
  53. package/dist/git/index.d.ts +6 -0
  54. package/dist/git/index.d.ts.map +1 -0
  55. package/dist/git/index.js +6 -0
  56. package/dist/git/index.js.map +1 -0
  57. package/dist/git/staged-files.d.ts +41 -0
  58. package/dist/git/staged-files.d.ts.map +1 -0
  59. package/dist/git/staged-files.js +118 -0
  60. package/dist/git/staged-files.js.map +1 -0
  61. package/dist/index.d.ts +17 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +21 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/reporters/github-reporter.d.ts +13 -0
  66. package/dist/reporters/github-reporter.d.ts.map +1 -0
  67. package/dist/reporters/github-reporter.js +59 -0
  68. package/dist/reporters/github-reporter.js.map +1 -0
  69. package/dist/reporters/gitlab-reporter.d.ts +16 -0
  70. package/dist/reporters/gitlab-reporter.d.ts.map +1 -0
  71. package/dist/reporters/gitlab-reporter.js +62 -0
  72. package/dist/reporters/gitlab-reporter.js.map +1 -0
  73. package/dist/reporters/index.d.ts +9 -0
  74. package/dist/reporters/index.d.ts.map +1 -0
  75. package/dist/reporters/index.js +9 -0
  76. package/dist/reporters/index.js.map +1 -0
  77. package/dist/reporters/json-reporter.d.ts +13 -0
  78. package/dist/reporters/json-reporter.d.ts.map +1 -0
  79. package/dist/reporters/json-reporter.js +44 -0
  80. package/dist/reporters/json-reporter.js.map +1 -0
  81. package/dist/reporters/text-reporter.d.ts +13 -0
  82. package/dist/reporters/text-reporter.d.ts.map +1 -0
  83. package/dist/reporters/text-reporter.js +96 -0
  84. package/dist/reporters/text-reporter.js.map +1 -0
  85. package/dist/reporters/types.d.ts +42 -0
  86. package/dist/reporters/types.d.ts.map +1 -0
  87. package/dist/reporters/types.js +5 -0
  88. package/dist/reporters/types.js.map +1 -0
  89. package/dist/services/scanner-service.d.ts +166 -0
  90. package/dist/services/scanner-service.d.ts.map +1 -0
  91. package/dist/services/scanner-service.js +453 -0
  92. package/dist/services/scanner-service.js.map +1 -0
  93. package/dist/types/index.d.ts +24 -0
  94. package/dist/types/index.d.ts.map +1 -0
  95. package/dist/types/index.js +5 -0
  96. package/dist/types/index.js.map +1 -0
  97. package/dist/ui/index.d.ts +11 -0
  98. package/dist/ui/index.d.ts.map +1 -0
  99. package/dist/ui/index.js +15 -0
  100. package/dist/ui/index.js.map +1 -0
  101. package/dist/ui/progress.d.ts +115 -0
  102. package/dist/ui/progress.d.ts.map +1 -0
  103. package/dist/ui/progress.js +232 -0
  104. package/dist/ui/progress.js.map +1 -0
  105. package/dist/ui/prompts.d.ts +91 -0
  106. package/dist/ui/prompts.d.ts.map +1 -0
  107. package/dist/ui/prompts.js +160 -0
  108. package/dist/ui/prompts.js.map +1 -0
  109. package/dist/ui/spinner.d.ts +109 -0
  110. package/dist/ui/spinner.d.ts.map +1 -0
  111. package/dist/ui/spinner.js +179 -0
  112. package/dist/ui/spinner.js.map +1 -0
  113. package/dist/ui/table.d.ts +118 -0
  114. package/dist/ui/table.d.ts.map +1 -0
  115. package/dist/ui/table.js +235 -0
  116. package/dist/ui/table.js.map +1 -0
  117. package/package.json +57 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/ui/progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Progress - Progress bars for scanning
3
+ *
4
+ * Provides progress bars for long-running operations like scanning.
5
+ *
6
+ * @requirements 29.1
7
+ */
8
+ import { SingleBar, MultiBar, Presets } from 'cli-progress';
9
+ import chalk from 'chalk';
10
+ /**
11
+ * Default format string for progress bars
12
+ */
13
+ const DEFAULT_FORMAT = `${chalk.cyan('{bar}')} {percentage}% | {value}/{total} | {task}`;
14
+ /**
15
+ * Scanning format string
16
+ */
17
+ const SCAN_FORMAT = `${chalk.cyan('{bar}')} {percentage}% | {value}/{total} files | ETA: {eta}s | {task}`;
18
+ /**
19
+ * Progress bar wrapper for consistent CLI feedback
20
+ */
21
+ export class Progress {
22
+ bar;
23
+ enabled;
24
+ currentValue = 0;
25
+ constructor(options) {
26
+ this.enabled = options.enabled ?? !process.env['CI'];
27
+ const format = options.format ?? DEFAULT_FORMAT;
28
+ this.bar = new SingleBar({
29
+ format,
30
+ barCompleteChar: '\u2588',
31
+ barIncompleteChar: '\u2591',
32
+ hideCursor: options.hideCursor ?? true,
33
+ clearOnComplete: options.clearOnComplete ?? false,
34
+ stopOnComplete: true,
35
+ etaBuffer: 50,
36
+ fps: 10,
37
+ }, Presets.shades_classic);
38
+ if (this.enabled) {
39
+ this.bar.start(options.total, 0, { task: '' });
40
+ }
41
+ }
42
+ /**
43
+ * Update progress with current value
44
+ */
45
+ update(value, payload) {
46
+ this.currentValue = value;
47
+ if (this.enabled) {
48
+ this.bar.update(value, payload);
49
+ }
50
+ return this;
51
+ }
52
+ /**
53
+ * Increment progress by amount
54
+ */
55
+ increment(amount = 1, payload) {
56
+ this.currentValue += amount;
57
+ if (this.enabled) {
58
+ this.bar.increment(amount, payload);
59
+ }
60
+ return this;
61
+ }
62
+ /**
63
+ * Set the current task description
64
+ */
65
+ task(description) {
66
+ if (this.enabled) {
67
+ this.bar.update(this.currentValue, { task: description });
68
+ }
69
+ return this;
70
+ }
71
+ /**
72
+ * Set the total value
73
+ */
74
+ setTotal(total) {
75
+ if (this.enabled) {
76
+ this.bar.setTotal(total);
77
+ }
78
+ return this;
79
+ }
80
+ /**
81
+ * Stop the progress bar
82
+ */
83
+ stop() {
84
+ if (this.enabled) {
85
+ this.bar.stop();
86
+ }
87
+ return this;
88
+ }
89
+ /**
90
+ * Get current value
91
+ */
92
+ get value() {
93
+ return this.currentValue;
94
+ }
95
+ }
96
+ /**
97
+ * Multi-progress bar for parallel operations
98
+ */
99
+ export class MultiProgress {
100
+ multiBar;
101
+ bars = new Map();
102
+ enabled;
103
+ constructor(enabled) {
104
+ this.enabled = enabled ?? !process.env['CI'];
105
+ this.multiBar = new MultiBar({
106
+ format: `${chalk.cyan('{bar}')} {percentage}% | {name}: {task}`,
107
+ barCompleteChar: '\u2588',
108
+ barIncompleteChar: '\u2591',
109
+ hideCursor: true,
110
+ clearOnComplete: false,
111
+ stopOnComplete: false,
112
+ fps: 10,
113
+ }, Presets.shades_classic);
114
+ }
115
+ /**
116
+ * Create a new progress bar
117
+ */
118
+ create(name, total) {
119
+ if (!this.enabled) {
120
+ return null;
121
+ }
122
+ const bar = this.multiBar.create(total, 0, { name, task: '' });
123
+ this.bars.set(name, bar);
124
+ return bar;
125
+ }
126
+ /**
127
+ * Update a specific bar
128
+ */
129
+ update(name, value, payload) {
130
+ if (this.enabled) {
131
+ const bar = this.bars.get(name);
132
+ if (bar) {
133
+ bar.update(value, payload);
134
+ }
135
+ }
136
+ return this;
137
+ }
138
+ /**
139
+ * Increment a specific bar
140
+ */
141
+ increment(name, amount = 1, payload) {
142
+ if (this.enabled) {
143
+ const bar = this.bars.get(name);
144
+ if (bar) {
145
+ bar.increment(amount, payload);
146
+ }
147
+ }
148
+ return this;
149
+ }
150
+ /**
151
+ * Remove a specific bar
152
+ */
153
+ remove(name) {
154
+ if (this.enabled) {
155
+ const bar = this.bars.get(name);
156
+ if (bar) {
157
+ this.multiBar.remove(bar);
158
+ this.bars.delete(name);
159
+ }
160
+ }
161
+ return this;
162
+ }
163
+ /**
164
+ * Stop all progress bars
165
+ */
166
+ stop() {
167
+ if (this.enabled) {
168
+ this.multiBar.stop();
169
+ }
170
+ return this;
171
+ }
172
+ }
173
+ /**
174
+ * Create a progress bar for scanning operations
175
+ */
176
+ export function createScanProgress(totalFiles) {
177
+ return new Progress({
178
+ total: totalFiles,
179
+ format: SCAN_FORMAT,
180
+ showEta: true,
181
+ clearOnComplete: true,
182
+ });
183
+ }
184
+ /**
185
+ * Create a progress bar for analysis operations
186
+ */
187
+ export function createAnalysisProgress(totalItems) {
188
+ return new Progress({
189
+ total: totalItems,
190
+ format: `${chalk.blue('{bar}')} {percentage}% | Analyzing: {task}`,
191
+ clearOnComplete: true,
192
+ });
193
+ }
194
+ /**
195
+ * Create a progress bar for pattern detection
196
+ */
197
+ export function createDetectionProgress(totalDetectors) {
198
+ return new Progress({
199
+ total: totalDetectors,
200
+ format: `${chalk.magenta('{bar}')} {percentage}% | Running: {task}`,
201
+ clearOnComplete: true,
202
+ });
203
+ }
204
+ /**
205
+ * Run an operation with progress tracking
206
+ */
207
+ export async function withProgress(items, operation, options) {
208
+ const progressOptions = {
209
+ total: items.length,
210
+ };
211
+ if (options?.format) {
212
+ progressOptions.format = options.format;
213
+ }
214
+ const progress = new Progress(progressOptions);
215
+ for (let i = 0; i < items.length; i++) {
216
+ const item = items[i];
217
+ const taskName = options?.getTaskName?.(item) ?? `Item ${i + 1}`;
218
+ progress.task(taskName);
219
+ await operation(item, i);
220
+ progress.increment();
221
+ }
222
+ progress.stop();
223
+ }
224
+ /**
225
+ * Simple percentage display for CI mode
226
+ */
227
+ export function logProgress(current, total, message) {
228
+ const percentage = Math.round((current / total) * 100);
229
+ const msg = message ? ` - ${message}` : '';
230
+ console.log(`[${percentage}%] ${current}/${total}${msg}`);
231
+ }
232
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/ui/progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Prompts - Interactive prompts with Inquirer
3
+ *
4
+ * Provides interactive prompts for user input during CLI operations.
5
+ *
6
+ * @requirements 29.8
7
+ */
8
+ import type { Severity } from 'driftdetect-core';
9
+ /**
10
+ * Pattern approval choice
11
+ */
12
+ export interface PatternChoice {
13
+ /** Pattern ID */
14
+ id: string;
15
+ /** Pattern name */
16
+ name: string;
17
+ /** Pattern category */
18
+ category: string;
19
+ /** Confidence score */
20
+ confidence: number;
21
+ }
22
+ /**
23
+ * Prompt for confirmation
24
+ */
25
+ export declare function confirmPrompt(message: string, defaultValue?: boolean): Promise<boolean>;
26
+ /**
27
+ * Prompt for text input
28
+ */
29
+ export declare function inputPrompt(message: string, defaultValue?: string): Promise<string>;
30
+ /**
31
+ * Prompt to select from a list of options
32
+ */
33
+ export declare function selectPrompt<T extends string>(message: string, choices: Array<{
34
+ value: T;
35
+ name: string;
36
+ description?: string;
37
+ }>): Promise<T>;
38
+ /**
39
+ * Prompt to select multiple items from a list
40
+ */
41
+ export declare function multiSelectPrompt<T extends string>(message: string, choices: Array<{
42
+ value: T;
43
+ name: string;
44
+ checked?: boolean;
45
+ }>): Promise<T[]>;
46
+ /**
47
+ * Prompt for pattern approval action
48
+ */
49
+ export type PatternAction = 'approve' | 'ignore' | 'skip' | 'variant';
50
+ export declare function promptPatternAction(pattern: PatternChoice): Promise<PatternAction>;
51
+ /**
52
+ * Prompt for multiple pattern approvals
53
+ */
54
+ export declare function promptBatchPatternApproval(patterns: PatternChoice[]): Promise<string[]>;
55
+ /**
56
+ * Prompt for severity selection
57
+ */
58
+ export declare function promptSeverity(message?: string): Promise<Severity>;
59
+ /**
60
+ * Prompt for variant reason
61
+ */
62
+ export declare function promptVariantReason(): Promise<string>;
63
+ /**
64
+ * Prompt for variant scope
65
+ */
66
+ export type VariantScope = 'global' | 'directory' | 'file';
67
+ export declare function promptVariantScope(): Promise<VariantScope>;
68
+ /**
69
+ * Prompt for initialization options
70
+ */
71
+ export interface InitPromptResult {
72
+ /** Whether to scan immediately */
73
+ scanNow: boolean;
74
+ /** Whether to auto-approve high confidence patterns */
75
+ autoApprove: boolean;
76
+ }
77
+ export declare function promptInitOptions(): Promise<InitPromptResult>;
78
+ /**
79
+ * Prompt for ignore reason
80
+ */
81
+ export declare function promptIgnoreReason(): Promise<string>;
82
+ /**
83
+ * Prompt for report format selection
84
+ */
85
+ export type ReportFormat = 'text' | 'json' | 'github' | 'gitlab';
86
+ export declare function promptReportFormat(): Promise<ReportFormat>;
87
+ /**
88
+ * Prompt for category selection
89
+ */
90
+ export declare function promptCategorySelection(categories: string[]): Promise<string[]>;
91
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,YAAY,UAAQ,GACnB,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,EACjD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/D,OAAO,CAAC,CAAC,CAAC,CAKZ;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EACtD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAC5D,OAAO,CAAC,CAAC,EAAE,CAAC,CAKd;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAEtE,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC,CAmBxB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,aAAa,EAAE,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,SAA2B,GACjC,OAAO,CAAC,QAAQ,CAAC,CAUnB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAU3D;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;AAE3D,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CAShE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAYnE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAI1D;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjE,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CAUhE;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Prompts - Interactive prompts with Inquirer
3
+ *
4
+ * Provides interactive prompts for user input during CLI operations.
5
+ *
6
+ * @requirements 29.8
7
+ */
8
+ import { confirm, select, input, checkbox } from '@inquirer/prompts';
9
+ /**
10
+ * Prompt for confirmation
11
+ */
12
+ export async function confirmPrompt(message, defaultValue = false) {
13
+ return confirm({
14
+ message,
15
+ default: defaultValue,
16
+ });
17
+ }
18
+ /**
19
+ * Prompt for text input
20
+ */
21
+ export async function inputPrompt(message, defaultValue) {
22
+ const config = { message };
23
+ if (defaultValue !== undefined) {
24
+ config.default = defaultValue;
25
+ }
26
+ return input(config);
27
+ }
28
+ /**
29
+ * Prompt to select from a list of options
30
+ */
31
+ export async function selectPrompt(message, choices) {
32
+ return select({
33
+ message,
34
+ choices,
35
+ });
36
+ }
37
+ /**
38
+ * Prompt to select multiple items from a list
39
+ */
40
+ export async function multiSelectPrompt(message, choices) {
41
+ return checkbox({
42
+ message,
43
+ choices,
44
+ });
45
+ }
46
+ export async function promptPatternAction(pattern) {
47
+ const confidenceLabel = pattern.confidence >= 0.85
48
+ ? 'high'
49
+ : pattern.confidence >= 0.65
50
+ ? 'medium'
51
+ : pattern.confidence >= 0.45
52
+ ? 'low'
53
+ : 'uncertain';
54
+ return select({
55
+ message: `Pattern: ${pattern.name} (${pattern.category}) - ${confidenceLabel} confidence (${(pattern.confidence * 100).toFixed(0)}%)`,
56
+ choices: [
57
+ { value: 'approve', name: 'Approve - Enforce this pattern' },
58
+ { value: 'ignore', name: 'Ignore - Stop tracking this pattern' },
59
+ { value: 'variant', name: 'Variant - Mark as intentional deviation' },
60
+ { value: 'skip', name: 'Skip - Decide later' },
61
+ ],
62
+ });
63
+ }
64
+ /**
65
+ * Prompt for multiple pattern approvals
66
+ */
67
+ export async function promptBatchPatternApproval(patterns) {
68
+ const choices = patterns.map((p) => ({
69
+ value: p.id,
70
+ name: `${p.name} (${p.category}) - ${(p.confidence * 100).toFixed(0)}%`,
71
+ checked: p.confidence >= 0.85, // Pre-select high confidence patterns
72
+ }));
73
+ return checkbox({
74
+ message: 'Select patterns to approve:',
75
+ choices,
76
+ });
77
+ }
78
+ /**
79
+ * Prompt for severity selection
80
+ */
81
+ export async function promptSeverity(message = 'Select severity level:') {
82
+ return select({
83
+ message,
84
+ choices: [
85
+ { value: 'error', name: 'Error - Block commits and merges' },
86
+ { value: 'warning', name: 'Warning - Display but do not block' },
87
+ { value: 'info', name: 'Info - Informational only' },
88
+ { value: 'hint', name: 'Hint - Subtle suggestion' },
89
+ ],
90
+ });
91
+ }
92
+ /**
93
+ * Prompt for variant reason
94
+ */
95
+ export async function promptVariantReason() {
96
+ return input({
97
+ message: 'Enter reason for this variant:',
98
+ validate: (value) => {
99
+ if (!value.trim()) {
100
+ return 'Reason is required';
101
+ }
102
+ return true;
103
+ },
104
+ });
105
+ }
106
+ export async function promptVariantScope() {
107
+ return select({
108
+ message: 'Select variant scope:',
109
+ choices: [
110
+ { value: 'file', name: 'File - Apply to this file only' },
111
+ { value: 'directory', name: 'Directory - Apply to this directory' },
112
+ { value: 'global', name: 'Global - Apply everywhere' },
113
+ ],
114
+ });
115
+ }
116
+ export async function promptInitOptions() {
117
+ const scanNow = await confirm({
118
+ message: 'Run initial scan now?',
119
+ default: true,
120
+ });
121
+ const autoApprove = await confirm({
122
+ message: 'Auto-approve high confidence patterns (>85%)?',
123
+ default: false,
124
+ });
125
+ return { scanNow, autoApprove };
126
+ }
127
+ /**
128
+ * Prompt for ignore reason
129
+ */
130
+ export async function promptIgnoreReason() {
131
+ return input({
132
+ message: 'Enter reason for ignoring (optional):',
133
+ });
134
+ }
135
+ export async function promptReportFormat() {
136
+ return select({
137
+ message: 'Select report format:',
138
+ choices: [
139
+ { value: 'text', name: 'Text - Human-readable output' },
140
+ { value: 'json', name: 'JSON - Machine-readable output' },
141
+ { value: 'github', name: 'GitHub - GitHub Actions annotations' },
142
+ { value: 'gitlab', name: 'GitLab - GitLab CI code quality format' },
143
+ ],
144
+ });
145
+ }
146
+ /**
147
+ * Prompt for category selection
148
+ */
149
+ export async function promptCategorySelection(categories) {
150
+ const choices = categories.map((c) => ({
151
+ value: c,
152
+ name: c,
153
+ checked: true,
154
+ }));
155
+ return checkbox({
156
+ message: 'Select categories to include:',
157
+ choices,
158
+ });
159
+ }
160
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Spinner - Progress spinners
3
+ *
4
+ * Provides animated spinners for long-running operations.
5
+ *
6
+ * @requirements 29.1
7
+ */
8
+ /**
9
+ * Spinner configuration options
10
+ */
11
+ export interface SpinnerOptions {
12
+ /** Spinner text */
13
+ text?: string;
14
+ /** Spinner color */
15
+ color?: 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray';
16
+ /** Whether to show spinner (false in CI mode) */
17
+ enabled?: boolean;
18
+ }
19
+ /**
20
+ * Spinner wrapper for consistent CLI feedback
21
+ */
22
+ export declare class Spinner {
23
+ private spinner;
24
+ private enabled;
25
+ constructor(options?: SpinnerOptions);
26
+ /**
27
+ * Start the spinner with optional text
28
+ */
29
+ start(text?: string): this;
30
+ /**
31
+ * Stop the spinner with a success message
32
+ */
33
+ succeed(text?: string): this;
34
+ /**
35
+ * Stop the spinner with a failure message
36
+ */
37
+ fail(text?: string): this;
38
+ /**
39
+ * Stop the spinner with a warning message
40
+ */
41
+ warn(text?: string): this;
42
+ /**
43
+ * Stop the spinner with an info message
44
+ */
45
+ info(text?: string): this;
46
+ /**
47
+ * Stop the spinner without a status symbol
48
+ */
49
+ stop(): this;
50
+ /**
51
+ * Update the spinner text
52
+ */
53
+ text(text: string): this;
54
+ /**
55
+ * Update the spinner color
56
+ */
57
+ color(color: 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray'): this;
58
+ /**
59
+ * Check if spinner is currently spinning
60
+ */
61
+ get isSpinning(): boolean;
62
+ }
63
+ /**
64
+ * Create a new spinner instance
65
+ */
66
+ export declare function createSpinner(textOrOptions?: string | SpinnerOptions): Spinner;
67
+ /**
68
+ * Run an async operation with a spinner
69
+ */
70
+ export declare function withSpinner<T>(text: string, operation: () => Promise<T>, options?: {
71
+ successText?: string | ((result: T) => string);
72
+ failText?: string | ((error: Error) => string);
73
+ }): Promise<T>;
74
+ /**
75
+ * Pre-configured spinners for common operations
76
+ */
77
+ export declare const spinners: {
78
+ /**
79
+ * Spinner for scanning operations
80
+ */
81
+ scanning(text?: string): Spinner;
82
+ /**
83
+ * Spinner for analysis operations
84
+ */
85
+ analyzing(text?: string): Spinner;
86
+ /**
87
+ * Spinner for loading operations
88
+ */
89
+ loading(text?: string): Spinner;
90
+ /**
91
+ * Spinner for saving operations
92
+ */
93
+ saving(text?: string): Spinner;
94
+ /**
95
+ * Spinner for checking operations
96
+ */
97
+ checking(text?: string): Spinner;
98
+ };
99
+ /**
100
+ * Status indicators for non-spinner output
101
+ */
102
+ export declare const status: {
103
+ success(message: string): void;
104
+ error(message: string): void;
105
+ warning(message: string): void;
106
+ info(message: string): void;
107
+ pending(message: string): void;
108
+ };
109
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC9F,iDAAiD;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,GAAE,cAAmB;IAcxC;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ1B;;OAEG;IACH,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAK5B;;OAEG;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAKzB;;OAEG;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAKzB;;OAEG;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAKzB;;OAEG;IACH,IAAI,IAAI,IAAI;IAKZ;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB;;OAEG;IACH,KAAK,CACH,KAAK,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAC3F,IAAI;IAKP;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;CACF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,CAK9E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC;CAChD,GACA,OAAO,CAAC,CAAC,CAAC,CAoBZ;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ;IACnB;;OAEG;6BACsC,OAAO;IAIhD;;OAEG;8BACwC,OAAO;IAIlD;;OAEG;4BAC2B,OAAO;IAIrC;;OAEG;2BACyB,OAAO;IAInC;;OAEG;6BAC4C,OAAO;CAGvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM;qBACA,MAAM,GAAG,IAAI;mBAIf,MAAM,GAAG,IAAI;qBAIX,MAAM,GAAG,IAAI;kBAIhB,MAAM,GAAG,IAAI;qBAIV,MAAM,GAAG,IAAI;CAG/B,CAAC"}