bilt-toolkit 1.0.0 → 1.0.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 (106) hide show
  1. package/bin/bilt.js +1 -1
  2. package/dist/cli.js +62 -6
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/doctor.d.ts +1 -0
  5. package/dist/commands/doctor.d.ts.map +1 -1
  6. package/dist/commands/doctor.js +113 -52
  7. package/dist/commands/doctor.js.map +1 -1
  8. package/dist/commands/fix.d.ts +1 -1
  9. package/dist/commands/fix.d.ts.map +1 -1
  10. package/dist/commands/fix.js +211 -64
  11. package/dist/commands/fix.js.map +1 -1
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +15 -13
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/scan.d.ts +6 -9
  16. package/dist/commands/scan.d.ts.map +1 -1
  17. package/dist/commands/scan.js +326 -206
  18. package/dist/commands/scan.js.map +1 -1
  19. package/dist/commands/undo.d.ts +3 -1
  20. package/dist/commands/undo.d.ts.map +1 -1
  21. package/dist/commands/undo.js +32 -14
  22. package/dist/commands/undo.js.map +1 -1
  23. package/dist/commands/watch.d.ts.map +1 -1
  24. package/dist/commands/watch.js +17 -8
  25. package/dist/commands/watch.js.map +1 -1
  26. package/dist/config/config.d.ts.map +1 -1
  27. package/dist/config/config.js +10 -0
  28. package/dist/config/config.js.map +1 -1
  29. package/dist/core/fix/confirm.d.ts +1 -1
  30. package/dist/core/fix/confirm.d.ts.map +1 -1
  31. package/dist/core/fix/confirm.js +4 -2
  32. package/dist/core/fix/confirm.js.map +1 -1
  33. package/dist/core/fix/git.d.ts +6 -0
  34. package/dist/core/fix/git.d.ts.map +1 -0
  35. package/dist/core/fix/git.js +45 -0
  36. package/dist/core/fix/git.js.map +1 -0
  37. package/dist/core/fix/snapshot.d.ts.map +1 -1
  38. package/dist/core/fix/snapshot.js +68 -1
  39. package/dist/core/fix/snapshot.js.map +1 -1
  40. package/dist/core/rules/providers.d.ts +2 -1
  41. package/dist/core/rules/providers.d.ts.map +1 -1
  42. package/dist/core/rules/providers.js +91 -0
  43. package/dist/core/rules/providers.js.map +1 -1
  44. package/dist/core/rules/secret-rules.d.ts.map +1 -1
  45. package/dist/core/rules/secret-rules.js +82 -3
  46. package/dist/core/rules/secret-rules.js.map +1 -1
  47. package/dist/core/scan/env.d.ts.map +1 -1
  48. package/dist/core/scan/env.js +15 -1
  49. package/dist/core/scan/env.js.map +1 -1
  50. package/dist/core/scan/secrets.d.ts.map +1 -1
  51. package/dist/core/scan/secrets.js +49 -4
  52. package/dist/core/scan/secrets.js.map +1 -1
  53. package/dist/core/scan/verifiers/aws.d.ts +4 -0
  54. package/dist/core/scan/verifiers/aws.d.ts.map +1 -0
  55. package/dist/core/scan/verifiers/aws.js +98 -0
  56. package/dist/core/scan/verifiers/aws.js.map +1 -0
  57. package/dist/core/scan/verifiers/github.d.ts +4 -0
  58. package/dist/core/scan/verifiers/github.d.ts.map +1 -0
  59. package/dist/core/scan/verifiers/github.js +23 -0
  60. package/dist/core/scan/verifiers/github.js.map +1 -0
  61. package/dist/core/scan/verifiers/index.d.ts +7 -0
  62. package/dist/core/scan/verifiers/index.d.ts.map +1 -0
  63. package/dist/core/scan/verifiers/index.js +15 -0
  64. package/dist/core/scan/verifiers/index.js.map +1 -0
  65. package/dist/core/scan/verifiers/openai.d.ts +4 -0
  66. package/dist/core/scan/verifiers/openai.d.ts.map +1 -0
  67. package/dist/core/scan/verifiers/openai.js +22 -0
  68. package/dist/core/scan/verifiers/openai.js.map +1 -0
  69. package/dist/core/scan/verifiers/slack.d.ts +4 -0
  70. package/dist/core/scan/verifiers/slack.d.ts.map +1 -0
  71. package/dist/core/scan/verifiers/slack.js +28 -0
  72. package/dist/core/scan/verifiers/slack.js.map +1 -0
  73. package/dist/core/scan/verifiers/stripe.d.ts +4 -0
  74. package/dist/core/scan/verifiers/stripe.d.ts.map +1 -0
  75. package/dist/core/scan/verifiers/stripe.js +22 -0
  76. package/dist/core/scan/verifiers/stripe.js.map +1 -0
  77. package/dist/core/scan/verifiers/supabase.d.ts +4 -0
  78. package/dist/core/scan/verifiers/supabase.d.ts.map +1 -0
  79. package/dist/core/scan/verifiers/supabase.js +35 -0
  80. package/dist/core/scan/verifiers/supabase.js.map +1 -0
  81. package/dist/core/score/health.d.ts.map +1 -1
  82. package/dist/core/score/health.js +1 -0
  83. package/dist/core/score/health.js.map +1 -1
  84. package/dist/core/watch/watcher.d.ts +4 -1
  85. package/dist/core/watch/watcher.d.ts.map +1 -1
  86. package/dist/core/watch/watcher.js +4 -2
  87. package/dist/core/watch/watcher.js.map +1 -1
  88. package/dist/types/index.d.ts +55 -4
  89. package/dist/types/index.d.ts.map +1 -1
  90. package/dist/ui/format.d.ts +22 -12
  91. package/dist/ui/format.d.ts.map +1 -1
  92. package/dist/ui/format.js +223 -74
  93. package/dist/ui/format.js.map +1 -1
  94. package/dist/ui/reporter.d.ts +18 -15
  95. package/dist/ui/reporter.d.ts.map +1 -1
  96. package/dist/ui/reporter.js +142 -182
  97. package/dist/ui/reporter.js.map +1 -1
  98. package/dist/ui/sound.d.ts +6 -0
  99. package/dist/ui/sound.d.ts.map +1 -0
  100. package/dist/ui/sound.js +13 -0
  101. package/dist/ui/sound.js.map +1 -0
  102. package/dist/ui/theme.d.ts +67 -0
  103. package/dist/ui/theme.d.ts.map +1 -0
  104. package/dist/ui/theme.js +252 -0
  105. package/dist/ui/theme.js.map +1 -0
  106. package/package.json +6 -3
@@ -1,17 +1,29 @@
1
1
  // ─── Fix Command ─────────────────────────────────────────────────────────────
2
2
  // Scans for issues, generates fix actions, and applies them interactively.
3
3
  import path from "node:path";
4
- import chalk from "chalk";
4
+ import { colors, glyphs, sectionHeader, text } from "../ui/theme.js";
5
5
  import Enquirer from "enquirer";
6
6
  import { promises as fs } from "node:fs";
7
7
  import { executeScan } from "./scan.js";
8
8
  import { loadConfig } from "../config/config.js";
9
9
  import { createSnapshot } from "../core/fix/snapshot.js";
10
+ import { purgeSecretFromHistory } from "../core/fix/git.js";
11
+ import { parseEnvFile } from "../core/scan/env.js";
10
12
  import { addToGitignore, generateEnvExample, addMissingEnvVars, } from "../core/fix/env-fix.js";
11
13
  import { requireTypedConfirmation, requireSimpleConfirmation, } from "../core/fix/confirm.js";
12
- import { reportFixPreview, reportFixComplete } from "../ui/reporter.js";
13
- import { parseEnvFile } from "../core/scan/env.js";
14
+ import { reportFixPlan, reportFixComplete, } from "../ui/reporter.js";
15
+ import {} from "../types/index.js";
14
16
  import { SECRET_RULES } from "../core/rules/secret-rules.js";
17
+ function touchesGitHistory(action) {
18
+ if (action.touchesGitHistory)
19
+ return true;
20
+ const desc = action.description.toLowerCase();
21
+ const preview = (action.preview || "").toLowerCase();
22
+ return (desc.includes("git history") ||
23
+ desc.includes("rewrite history") ||
24
+ preview.includes("git history") ||
25
+ preview.includes("rewrite history"));
26
+ }
15
27
  /**
16
28
  * Execute the `bilt fix` command.
17
29
  *
@@ -27,25 +39,30 @@ export async function executeFix(projectDir, options = {}) {
27
39
  // ── Run scan ────────────────────────────────────────────────────────
28
40
  const result = await executeScan(rootDir, {
29
41
  quiet: true,
42
+ debug: options.debug,
43
+ retainSecrets: true,
30
44
  });
31
45
  if (result.findings.length === 0) {
32
46
  console.log("");
33
- console.log(chalk.green.bold(" No issues found nothing to fix!"));
47
+ console.log(colors.mintClear.bold(" " + glyphs.passed + " No issues found \u2014 nothing to fix"));
34
48
  console.log("");
35
49
  return;
36
50
  }
37
51
  // ── Generate fix actions ────────────────────────────────────────────
38
- const actions = await generateFixActions(rootDir, result.findings);
52
+ const actions = await generateFixActions(rootDir, result.findings, options);
39
53
  if (actions.length === 0) {
40
54
  console.log("");
41
- console.log(chalk.yellow(" Issues found but no automated fixes available. Review manually."));
55
+ console.log(colors.amberFlag.apply(" " + glyphs.warning + " Issues found but no automated fixes available. Review manually."));
42
56
  console.log("");
43
57
  return;
44
58
  }
45
59
  // ── Dry-run: preview only ───────────────────────────────────────────
46
60
  if (options.dryRun) {
47
- reportFixPreview(actions);
48
- console.log(chalk.dim(" (Dry run no changes applied)"));
61
+ for (const action of actions) {
62
+ const plan = await action.preview();
63
+ await reportFixPlan(plan);
64
+ }
65
+ console.log(colors.slateDim.dim(" (Dry run \u2014 no changes applied)"));
49
66
  console.log("");
50
67
  return;
51
68
  }
@@ -68,20 +85,21 @@ export async function executeFix(projectDir, options = {}) {
68
85
  const safeActions = actions.filter((a) => a.type === "safe");
69
86
  if (safeActions.length === 0) {
70
87
  console.log("");
71
- console.log(chalk.yellow(" No safe fixes available. Run without --safe for interactive mode."));
88
+ console.log(colors.amberFlag.apply(" " + glyphs.warning + " No safe fixes available. Run without --safe for interactive mode."));
72
89
  console.log("");
73
90
  return;
74
91
  }
75
- reportFixPreview(safeActions);
76
92
  let applied = 0;
77
93
  let skipped = 0;
78
94
  for (const action of safeActions) {
79
95
  try {
80
- const success = await action.apply();
81
- if (success) {
96
+ const plan = await action.preview();
97
+ const result = await action.apply();
98
+ const verification = await action.verify();
99
+ if (result.success && verification.passed) {
82
100
  applied++;
83
101
  if (options.verbose) {
84
- console.log(chalk.green(` ${action.description}`));
102
+ console.log(colors.mintClear.apply(" " + glyphs.fixed + " " + action.description));
85
103
  }
86
104
  }
87
105
  else {
@@ -92,67 +110,107 @@ export async function executeFix(projectDir, options = {}) {
92
110
  skipped++;
93
111
  if (options.verbose) {
94
112
  const msg = error instanceof Error ? error.message : String(error);
95
- console.log(chalk.red(` Failed: ${action.description} (${msg})`));
113
+ console.log(colors.pulseCoral.apply(" " + glyphs.critical + " Failed: " + action.description + " (" + msg + ")"));
96
114
  }
97
115
  }
98
116
  }
99
- reportFixComplete(applied, skipped);
117
+ await reportFixComplete(applied, skipped);
100
118
  return;
101
119
  }
102
120
  // ── Interactive mode ────────────────────────────────────────────────
103
- reportFixPreview(actions);
104
121
  let applied = 0;
105
122
  let skipped = 0;
106
123
  for (const action of actions) {
107
- console.log("");
108
- console.log(chalk.bold(` ${action.description}`));
109
- if (action.preview) {
110
- console.log(chalk.dim(` ${action.preview}`));
111
- }
124
+ const plan = await action.preview();
125
+ await reportFixPlan(plan);
112
126
  let shouldApply = false;
113
- if (action.type === "safe") {
114
- shouldApply = await requireSimpleConfirmation(action);
115
- }
116
- else if (action.type === "destructive") {
117
- shouldApply = await requireSimpleConfirmation(action);
127
+ if (plan.requiresConfirmation) {
128
+ const wantAutoFix = await requireSimpleConfirmation({ description: action.description }, `Would you like Bilt to run this fix automatically?`);
129
+ if (wantAutoFix) {
130
+ shouldApply = await requireTypedConfirmation({ description: action.description }, plan.requiresConfirmation);
131
+ }
132
+ else {
133
+ shouldApply = false;
134
+ }
118
135
  }
119
136
  else {
120
- // Irreversible require typed confirmation
121
- shouldApply = await requireTypedConfirmation(action, "confirm");
137
+ shouldApply = await requireSimpleConfirmation({ description: action.description });
122
138
  }
123
139
  if (shouldApply) {
124
140
  try {
125
- const success = await action.apply();
126
- if (success) {
127
- applied++;
128
- console.log(chalk.green(" ✓ Applied"));
141
+ const result = await action.apply();
142
+ console.log("");
143
+ result.stepsApplied.forEach((step) => {
144
+ console.log(colors.mintClear.apply(` ${glyphs.fixed} ${step}`));
145
+ });
146
+ if (result.success) {
147
+ const verification = await action.verify();
148
+ if (verification.passed) {
149
+ applied++;
150
+ console.log(colors.mintClear.apply(` ${glyphs.fixed} ${verification.message}`));
151
+ }
152
+ else {
153
+ skipped++;
154
+ console.log(colors.amberFlag.apply(` ${glyphs.info} Fix applied but verification failed: ${verification.message}`));
155
+ }
129
156
  }
130
157
  else {
131
158
  skipped++;
132
- console.log(chalk.yellow(" ⏭ Skipped (failed to apply)"));
159
+ console.log(colors.amberFlag.apply(` ${glyphs.info} Skipped (failed to apply: ${result.error})`));
133
160
  }
134
161
  }
135
162
  catch (error) {
136
163
  skipped++;
137
164
  const msg = error instanceof Error ? error.message : String(error);
138
- console.log(chalk.red(` Error: ${msg}`));
165
+ console.log(colors.pulseCoral.apply(` ${glyphs.critical} Error: ${msg}`));
139
166
  }
140
167
  }
141
168
  else {
142
169
  skipped++;
143
- console.log(chalk.dim(" Skipped"));
170
+ console.log(colors.slateDim.dim(` ${glyphs.info} Skipped`));
144
171
  }
145
172
  }
146
- reportFixComplete(applied, skipped);
173
+ await reportFixComplete(applied, skipped);
147
174
  }
148
175
  // ─── Fix Action Generator ────────────────────────────────────────────────────
149
176
  /**
150
177
  * Generate fix actions from scan findings.
151
178
  */
152
- async function generateFixActions(rootDir, findings) {
179
+ async function generateFixActions(rootDir, findings, options) {
153
180
  const actions = [];
154
181
  const addedTypes = new Set();
155
182
  const config = await loadConfig(rootDir);
183
+ const debugReadFile = async (pathStr) => {
184
+ try {
185
+ const content = await fs.readFile(pathStr, "utf-8");
186
+ if (options.debug) {
187
+ console.log(`[DEBUG READ] ${pathStr} (${Buffer.byteLength(content, "utf8")} bytes)`);
188
+ }
189
+ return content;
190
+ }
191
+ catch (err) {
192
+ if (options.debug) {
193
+ console.log(`[DEBUG READ] ${pathStr} (Error: ${err.message})`);
194
+ }
195
+ throw err;
196
+ }
197
+ };
198
+ const debugWriteFile = async (pathStr, newContent, oldContent = "") => {
199
+ if (options.debug) {
200
+ console.log(`[DEBUG WRITE] ${pathStr}`);
201
+ console.log(` Length Before: ${Buffer.byteLength(oldContent, "utf8")} bytes`);
202
+ console.log(` Length After: ${Buffer.byteLength(newContent, "utf8")} bytes`);
203
+ console.log(` Diff Preview:`);
204
+ // Simple diff preview: just show it's different if lengths or content differ
205
+ if (oldContent === newContent) {
206
+ console.log(` (No changes)`);
207
+ }
208
+ else {
209
+ console.log(` (File modified)`);
210
+ }
211
+ }
212
+ await fs.writeFile(pathStr, newContent, "utf-8");
213
+ };
156
214
  for (const finding of findings) {
157
215
  switch (finding.category) {
158
216
  case "gitignore-missing": {
@@ -163,40 +221,78 @@ async function generateFixActions(rootDir, findings) {
163
221
  description: "Add .env patterns to .gitignore",
164
222
  type: "safe",
165
223
  findingId: finding.id,
166
- preview: "Will append .env, .env.*, .env.local to .gitignore",
224
+ preview: async () => ({
225
+ steps: ["Append .env patterns to .gitignore"],
226
+ estimatedTime: "< 1s",
227
+ risk: "Low"
228
+ }),
167
229
  apply: async () => {
168
230
  const gitignorePath = path.join(rootDir, ".gitignore");
169
231
  const newContent = await addToGitignore([".env", ".env.*", ".env.local", ".env.*.local", ".bilt/"], gitignorePath);
170
- await fs.writeFile(gitignorePath, newContent, "utf-8");
171
- return true;
232
+ let oldContent = "";
233
+ try {
234
+ oldContent = await fs.readFile(gitignorePath, "utf-8");
235
+ }
236
+ catch { }
237
+ await debugWriteFile(gitignorePath, newContent, oldContent);
238
+ return { success: true, stepsApplied: ["Appended .env patterns to .gitignore"] };
239
+ },
240
+ verify: async () => {
241
+ const gitignorePath = path.join(rootDir, ".gitignore");
242
+ let content = "";
243
+ try {
244
+ content = await fs.readFile(gitignorePath, "utf-8");
245
+ }
246
+ catch { }
247
+ if (content.includes(".env"))
248
+ return { passed: true, message: "Verified .gitignore updated." };
249
+ return { passed: false, message: ".gitignore not properly updated." };
172
250
  },
251
+ undo: async () => { }
173
252
  });
174
253
  }
175
254
  break;
176
255
  }
177
256
  case "env-missing": {
178
- const key = finding.message.match(/["']([^"']+)["']/)?.[1] ??
257
+ const key = finding.message.match(/process\.env\.(\w+)/)?.[1] ??
258
+ finding.message.match(/["']([^"']+)["']/)?.[1] ??
179
259
  finding.message.match(/`([^`]+)`/)?.[1] ??
180
- finding.message.match(/(\w+)/)?.[1];
260
+ finding.message.match(/Variable "(\w+)"/)?.[1];
181
261
  if (key && !addedTypes.has(`env-missing-${key}`)) {
182
262
  addedTypes.add(`env-missing-${key}`);
183
263
  actions.push({
184
264
  id: `fix-env-missing-${key}-${Date.now()}`,
185
- description: `Add missing env var ${key} to ${finding.file}`,
265
+ description: `Add missing env var ${key} to .env`,
186
266
  type: "safe",
187
267
  findingId: finding.id,
188
- preview: `Will append ${key}= to ${finding.file}`,
268
+ preview: async () => ({
269
+ steps: [`Append ${key}= to .env`],
270
+ estimatedTime: "< 1s",
271
+ risk: "Low"
272
+ }),
189
273
  apply: async () => {
190
- const envFilePath = path.join(rootDir, finding.file);
274
+ const envFilePath = path.join(rootDir, ".env");
191
275
  let content = "";
192
276
  try {
193
- content = await fs.readFile(envFilePath, "utf-8");
277
+ content = await debugReadFile(envFilePath);
194
278
  }
195
279
  catch { }
196
280
  const newContent = addMissingEnvVars(content, [key]);
197
- await fs.writeFile(envFilePath, newContent, "utf-8");
198
- return true;
281
+ await debugWriteFile(envFilePath, newContent, content);
282
+ return { success: true, stepsApplied: [`Appended ${key}= to .env`] };
283
+ },
284
+ verify: async () => {
285
+ const envFilePath = path.join(rootDir, ".env");
286
+ let content = "";
287
+ try {
288
+ content = await fs.readFile(envFilePath, "utf-8");
289
+ }
290
+ catch { }
291
+ if (content.includes(`${key}=`))
292
+ return { passed: true, message: "Verified environment variable added." };
293
+ return { passed: false, message: "Environment variable not found in .env." };
199
294
  },
295
+ undo: async () => { }
200
296
  });
201
297
  }
202
298
  break;
@@ -209,7 +305,11 @@ async function generateFixActions(rootDir, findings) {
209
305
  description: "Generate .env.example with all required keys",
210
306
  type: "safe",
211
307
  findingId: finding.id,
212
- preview: "Will create .env.example with placeholder values",
308
+ preview: async () => ({
309
+ steps: ["Create or update .env.example with placeholder values"],
310
+ estimatedTime: "< 1s",
311
+ risk: "Low"
312
+ }),
213
313
  apply: async () => {
214
314
  const envFilePath = path.join(rootDir, ".env");
215
315
  let content = "";
@@ -217,33 +317,74 @@ async function generateFixActions(rootDir, findings) {
217
317
  content = await fs.readFile(envFilePath, "utf-8");
218
318
  }
219
319
  catch {
220
- return false;
320
+ return { success: false, stepsApplied: [], error: "No .env file found" };
221
321
  }
222
322
  const parsed = parseEnvFile(content, envFilePath);
223
323
  const exampleContent = generateEnvExample(parsed, SECRET_RULES, config.entropyThreshold);
224
- await fs.writeFile(path.join(rootDir, ".env.example"), exampleContent, "utf-8");
225
- return true;
324
+ const targetPath = path.join(rootDir, ".env.example");
325
+ let oldExampleContent = "";
326
+ try {
327
+ oldExampleContent = await fs.readFile(targetPath, "utf-8");
328
+ }
329
+ catch { }
330
+ await debugWriteFile(targetPath, exampleContent, oldExampleContent);
331
+ return { success: true, stepsApplied: ["Generated .env.example"] };
332
+ },
333
+ verify: async () => {
334
+ try {
335
+ await fs.access(path.join(rootDir, ".env.example"));
336
+ return { passed: true, message: "Verified .env.example exists." };
337
+ }
338
+ catch {
339
+ return { passed: false, message: ".env.example not created." };
340
+ }
226
341
  },
342
+ undo: async () => { }
227
343
  });
228
344
  }
229
345
  break;
230
346
  }
231
347
  case "secret-detected": {
232
- // Secrets can't be auto-fixed — provide guidance
233
348
  actions.push({
234
349
  id: `fix-secret-${finding.id}`,
235
350
  description: `Remove secret from ${finding.file}${finding.line ? `:${finding.line}` : ""}`,
236
351
  type: "destructive",
237
352
  findingId: finding.id,
238
- preview: finding.suggestion ??
239
- "Move secret to env var and add to .gitignore",
353
+ preview: async () => ({
354
+ steps: ["Rotate credential", "Rewrite Git history", "Force-push (if remote)"],
355
+ estimatedTime: "2-5 mins",
356
+ risk: "Critical",
357
+ requiresConfirmation: "PURGE_HISTORY",
358
+ instructions: "1. Rotate the credential.\n2. Rewrite Git history.\n3. Force-push the cleaned history.\n4. Notify collaborators."
359
+ }),
240
360
  apply: async () => {
241
- // We can't auto-remove secrets safely — this needs manual review
242
- // But we can offer to add the file to .gitignore
243
- console.log(chalk.yellow(` ℹ Please manually remove the secret from ${finding.file}`));
244
- console.log(chalk.dim(` Move the value to a .env file and reference it via an environment variable.`));
245
- return true;
361
+ let isGitRepo = false;
362
+ try {
363
+ const { execSync } = await import("node:child_process");
364
+ execSync("git rev-parse --is-inside-work-tree", { cwd: rootDir, stdio: "ignore" });
365
+ isGitRepo = true;
366
+ }
367
+ catch { }
368
+ if (isGitRepo && finding.secret) {
369
+ console.log(colors.amberFlag.apply(" " + glyphs.info + " Executing Git history rewrite..."));
370
+ try {
371
+ await purgeSecretFromHistory(rootDir, finding.secret);
372
+ return { success: true, stepsApplied: ["Git history and workspace purged of the secret."] };
373
+ }
374
+ catch (err) {
375
+ const msg = err instanceof Error ? err.message : String(err);
376
+ return { success: false, stepsApplied: [], error: msg };
377
+ }
378
+ }
379
+ else {
380
+ console.log(colors.amberFlag.apply(" " + glyphs.info + " Please manually remove the secret from " + finding.file));
381
+ return { success: true, stepsApplied: ["Provided instructions for manual secret removal"] };
382
+ }
383
+ },
384
+ verify: async () => {
385
+ return { passed: true, message: "Verification complete." };
246
386
  },
387
+ undo: async () => { }
247
388
  });
248
389
  break;
249
390
  }
@@ -254,12 +395,18 @@ async function generateFixActions(rootDir, findings) {
254
395
  description: `Review client-exposed secret in ${finding.file}`,
255
396
  type: "destructive",
256
397
  findingId: finding.id,
257
- preview: finding.suggestion ??
258
- "Ensure this env var should be exposed to the client bundle",
398
+ preview: async () => ({
399
+ steps: ["Review client exposure"],
400
+ estimatedTime: "< 1m",
401
+ risk: "High",
402
+ instructions: finding.suggestion ?? "Ensure this env var should be exposed to the client bundle"
403
+ }),
259
404
  apply: async () => {
260
- console.log(chalk.yellow(` Review ${finding.file} this value is exposed to the client.`));
261
- return true;
405
+ console.log(colors.amberFlag.apply(" " + glyphs.info + " Review " + finding.file + " \u2014 this value is exposed to the client."));
406
+ return { success: true, stepsApplied: ["Flagged for review"] };
262
407
  },
408
+ verify: async () => { return { passed: true, message: "Instruction acknowledged." }; },
409
+ undo: async () => { }
263
410
  });
264
411
  break;
265
412
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAgBA;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyGnE"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAeA;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGnE"}
@@ -1,8 +1,7 @@
1
1
  // ─── Init Command ────────────────────────────────────────────────────────────
2
2
  // Zero-friction onboarding: scan, auto-fix safe issues, show health card.
3
3
  import path from "node:path";
4
- import chalk from "chalk";
5
- import boxen from "boxen";
4
+ import { colors, glyphs, banner, text, isPlainMode } from "../ui/theme.js";
6
5
  import { promises as fs } from "node:fs";
7
6
  import { executeScan } from "./scan.js";
8
7
  import { createSnapshot } from "../core/fix/snapshot.js";
@@ -25,15 +24,18 @@ export async function executeInit(projectDir) {
25
24
  const rootDir = path.resolve(projectDir);
26
25
  const config = await loadConfig(rootDir);
27
26
  // ── Welcome banner ──────────────────────────────────────────────────
28
- const banner = boxen(`\n${chalk.bold.cyan(" 🏗️ BILT — Project Health Toolkit")}\n\n` +
29
- chalk.dim(" Zero-configuration setup. One command to a healthy repo.\n"), {
30
- padding: 0,
31
- margin: { top: 1, bottom: 0, left: 1, right: 1 },
32
- borderStyle: "round",
33
- borderColor: "cyan",
34
- });
35
- console.log(banner);
27
+ const isPlain = isPlainMode();
28
+ console.log("");
29
+ console.log(banner());
30
+ if (!isPlain)
31
+ await new Promise((resolve) => setTimeout(resolve, 80));
36
32
  console.log("");
33
+ console.log(colors.vitalTeal.bold(" BILT \u2014 Project Health Toolkit"));
34
+ if (!isPlain)
35
+ await new Promise((resolve) => setTimeout(resolve, 80));
36
+ console.log(colors.slateDim.dim(" Zero-configuration setup. One command to a healthy repo."));
37
+ if (!isPlain)
38
+ await new Promise((resolve) => setTimeout(resolve, 80));
37
39
  // ── Run full scan ───────────────────────────────────────────────────
38
40
  const result = await executeScan(rootDir, {
39
41
  quiet: false,
@@ -72,7 +74,7 @@ export async function executeInit(projectDir) {
72
74
  const newContent = await addToGitignore(envPatterns, gitignorePath);
73
75
  await fs.writeFile(gitignorePath, newContent, "utf-8");
74
76
  fixesApplied++;
75
- console.log(chalk.green(" Added .env patterns to .gitignore"));
77
+ console.log(colors.mintClear.apply(" " + glyphs.fixed + " Added .env patterns to .gitignore"));
76
78
  }
77
79
  catch {
78
80
  // Failed to update .gitignore — non-critical
@@ -87,7 +89,7 @@ export async function executeInit(projectDir) {
87
89
  const exampleContent = generateEnvExample(parsed, SECRET_RULES, config.entropyThreshold);
88
90
  await fs.writeFile(path.join(rootDir, ".env.example"), exampleContent, "utf-8");
89
91
  fixesApplied++;
90
- console.log(chalk.green(" Generated .env.example"));
92
+ console.log(colors.mintClear.apply(" " + glyphs.fixed + " Generated .env.example"));
91
93
  }
92
94
  catch {
93
95
  // Failed to generate .env.example — non-critical
@@ -96,6 +98,6 @@ export async function executeInit(projectDir) {
96
98
  // ── Re-run scan to get updated results ──────────────────────────────
97
99
  const updatedResult = fixesApplied > 0 ? await executeScan(rootDir, { quiet: true }) : result;
98
100
  // ── Report ──────────────────────────────────────────────────────────
99
- reportInitComplete(updatedResult, fixesApplied);
101
+ await reportInitComplete(updatedResult, fixesApplied);
100
102
  }
101
103
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -3,15 +3,12 @@ import type { ScanResult, ScanOptions } from "../types/index.js";
3
3
  * Execute a full project scan, returning a ScanResult.
4
4
  *
5
5
  * 1. Load config
6
- * 2. Find & parse .env files
7
- * 3. Detect env mismatches (missing/unused vars)
8
- * 4. Check .gitignore coverage
9
- * 5. Scan working tree for secrets
10
- * 6. Scan git history for secrets
11
- * 7. Detect framework & client-exposed secrets
12
- * 8. Run plugins
13
- * 9. Calculate health score
14
- * 10. Report results
6
+ * 2. Step 1: Check .gitignore
7
+ * 3. Step 2: Check env variable usage (and mismatches, unused, client exposed)
8
+ * 4. Step 3: Check for secrets (working tree & git history)
9
+ * 5. Step 4: Run plugins
10
+ * 6. Calculate health score
11
+ * 7. Report final results
15
12
  */
16
13
  export declare function executeScan(projectDir: string, options?: ScanOptions): Promise<ScanResult>;
17
14
  //# sourceMappingURL=scan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,UAAU,EAEV,WAAW,EAGZ,MAAM,mBAAmB,CAAC;AA0B3B;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CAyRrB"}
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,UAAU,EAEV,WAAW,EAGZ,MAAM,mBAAmB,CAAC;AA6F3B;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CA6XrB"}