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
@@ -0,0 +1,252 @@
1
+ // ─── Theme — Pulse Design System ─────────────────────────────────────────────
2
+ // Single source of truth for all visual output in Bilt.
3
+ // No chalk calls should exist outside this file.
4
+ import chalk from "chalk";
5
+ // ─── Plain Mode ──────────────────────────────────────────────────────────────
6
+ /** When true, all output is plain text — no color, no banner, no Pulse Bar. */
7
+ let _plainMode = false;
8
+ export function setPlainMode(enabled) {
9
+ _plainMode = enabled;
10
+ if (enabled) {
11
+ chalk.level = 0;
12
+ }
13
+ }
14
+ export function isPlainMode() {
15
+ return _plainMode;
16
+ }
17
+ // ─── NO_COLOR / --no-color Support ───────────────────────────────────────────
18
+ export function initColorSupport(noColorFlag) {
19
+ if (noColorFlag ||
20
+ process.env["NO_COLOR"] !== undefined ||
21
+ process.env["TERM"] === "dumb") {
22
+ chalk.level = 0;
23
+ }
24
+ }
25
+ function makeColor(hex, ansi256) {
26
+ const colorFn = () => {
27
+ if (chalk.level >= 3)
28
+ return chalk.hex(hex);
29
+ if (chalk.level >= 2)
30
+ return chalk.ansi256(ansi256);
31
+ return chalk;
32
+ };
33
+ return {
34
+ hex,
35
+ ansi256,
36
+ apply: (text) => colorFn()(text),
37
+ bold: (text) => colorFn().bold(text),
38
+ dim: (text) => colorFn().dim(text),
39
+ };
40
+ }
41
+ export const colors = {
42
+ voidInk: makeColor("#0D1117", 234),
43
+ vitalTeal: makeColor("#5EEAD4", 86),
44
+ pulseCoral: makeColor("#FB7185", 210),
45
+ amberFlag: makeColor("#FBBF24", 220),
46
+ mintClear: makeColor("#34D399", 78),
47
+ slateDim: makeColor("#64748B", 244),
48
+ };
49
+ // ─── Glyph System ────────────────────────────────────────────────────────────
50
+ // Closed set — never mix in a second glyph family.
51
+ export const glyphs = {
52
+ critical: "\u2716", // ✖ U+2716
53
+ warning: "\u25B2", // ▲ U+25B2
54
+ passed: "\u25CF", // ● U+25CF
55
+ fixed: "\u2713", // ✓ U+2713
56
+ info: "\u25C6", // ◆ U+25C6
57
+ divider: "\u2500", // ─ U+2500
58
+ rule: "\u2502", // │ U+2502
59
+ filledBlock: "\u2588", // █ U+2588
60
+ emptyBlock: "\u2591", // ░ U+2591
61
+ arrow: "\u2192", // → U+2192
62
+ };
63
+ export const spinnerFrames = [
64
+ "\u280B",
65
+ "\u2819",
66
+ "\u2839",
67
+ "\u2838",
68
+ "\u283C",
69
+ "\u2834",
70
+ "\u2826",
71
+ "\u2827",
72
+ "\u2807",
73
+ "\u280F",
74
+ ]; // ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏
75
+ // ─── Severity Mapping ────────────────────────────────────────────────────────
76
+ export function severityGlyph(severity) {
77
+ switch (severity) {
78
+ case "critical":
79
+ return glyphs.critical;
80
+ case "warning":
81
+ return glyphs.warning;
82
+ case "info":
83
+ return glyphs.info;
84
+ case "passed":
85
+ return glyphs.passed;
86
+ }
87
+ }
88
+ export function severityColor(severity) {
89
+ switch (severity) {
90
+ case "critical":
91
+ return colors.pulseCoral;
92
+ case "warning":
93
+ return colors.amberFlag;
94
+ case "info":
95
+ return colors.slateDim;
96
+ case "passed":
97
+ return colors.mintClear;
98
+ }
99
+ }
100
+ /** Return the severity glyph already colored. */
101
+ export function styledGlyph(severity) {
102
+ return severityColor(severity).apply(severityGlyph(severity));
103
+ }
104
+ // ─── BILT Banner (hand-tuned 5-line ASCII wordmark) ──────────────────────────
105
+ const BANNER_LINES = [
106
+ " \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
107
+ " \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D",
108
+ " \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 ",
109
+ " \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 ",
110
+ " \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 ",
111
+ " \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D ",
112
+ ];
113
+ export function banner() {
114
+ if (_plainMode)
115
+ return "BILT";
116
+ return BANNER_LINES.map((line) => colors.vitalTeal.bold(line)).join("\n");
117
+ }
118
+ // ─── Startup Banner seen tracking ───────────────────────────────────────────
119
+ let _bliptBannerShown = false;
120
+ export function resetBliptBannerSeen() {
121
+ _bliptBannerShown = false;
122
+ }
123
+ export function showBliptBanner(version) {
124
+ if (_bliptBannerShown || _plainMode)
125
+ return;
126
+ _bliptBannerShown = true;
127
+ console.log(banner());
128
+ console.log("");
129
+ }
130
+ // Copy strings
131
+ export const SNAPSHOT_NOTICE = "A snapshot will be saved — undo anytime with 'bilt undo'.";
132
+ // ─── Pulse Bar ───────────────────────────────────────────────────────────────
133
+ // Segmented health-score meter. Filled segments color-shift by score range:
134
+ // 0-39 Pulse Coral, 40-74 Amber Flag, 75-100 Mint Clear.
135
+ // Empty segments always Slate Dim.
136
+ export function pulseBar(score, width = 25) {
137
+ const clamped = Math.max(0, Math.min(100, Math.round(score)));
138
+ const filled = Math.round((clamped / 100) * width);
139
+ const empty = width - filled;
140
+ if (_plainMode) {
141
+ return `Health ${"#".repeat(filled)}${".".repeat(empty)} ${clamped}/100`;
142
+ }
143
+ const fillColor = clamped <= 39
144
+ ? colors.pulseCoral
145
+ : clamped <= 74
146
+ ? colors.amberFlag
147
+ : colors.mintClear;
148
+ const filledStr = fillColor.apply(glyphs.filledBlock.repeat(filled));
149
+ const emptyStr = colors.slateDim.dim(glyphs.emptyBlock.repeat(empty));
150
+ const label = colors.slateDim.apply("Health");
151
+ const scoreStr = fillColor.bold(`${clamped}/100`);
152
+ return ` ${label} ${filledStr}${emptyStr} ${scoreStr}`;
153
+ }
154
+ // ─── Section Header ──────────────────────────────────────────────────────────
155
+ // ◆ prefixed, bold, sentence case.
156
+ export function sectionHeader(text) {
157
+ if (_plainMode)
158
+ return `\n${text}`;
159
+ return ` ${colors.slateDim.apply(glyphs.info)} ${chalk.bold(text)}`;
160
+ }
161
+ // ─── Left-Rule Finding Line ──────────────────────────────────────────────────
162
+ // │ ✖ message location
163
+ export function ruleLine(content) {
164
+ if (_plainMode)
165
+ return ` ${content}`;
166
+ return ` ${colors.slateDim.dim(glyphs.rule)} ${content}`;
167
+ }
168
+ // ─── Divider ─────────────────────────────────────────────────────────────────
169
+ export function divider(width = 45) {
170
+ if (_plainMode)
171
+ return "-".repeat(width);
172
+ return ` ${colors.slateDim.dim(glyphs.divider.repeat(width))}`;
173
+ }
174
+ // ─── Summary Box ─────────────────────────────────────────────────────────────
175
+ // The ONLY full box-border element in the app — reserved for the final card.
176
+ export function summaryBox(lines) {
177
+ if (_plainMode)
178
+ return lines.join("\n");
179
+ const maxLen = Math.max(...lines.map((l) => stripAnsi(l).length), 40);
180
+ const border = colors.vitalTeal.apply;
181
+ const h = glyphs.divider;
182
+ const top = border(` \u250C${h.repeat(maxLen + 2)}\u2510`);
183
+ const bottom = border(` \u2514${h.repeat(maxLen + 2)}\u2518`);
184
+ const body = lines.map((line) => {
185
+ const stripped = stripAnsi(line);
186
+ const pad = maxLen - stripped.length;
187
+ return ` ${border("\u2502")} ${line}${" ".repeat(Math.max(0, pad))} ${border("\u2502")}`;
188
+ });
189
+ return [top, ...body, bottom].join("\n");
190
+ }
191
+ // ─── Path Truncation ─────────────────────────────────────────────────────────
192
+ // Truncate from the left: …/src/config.js
193
+ export function truncatePath(filePath, maxLen = 40) {
194
+ if (filePath.length <= maxLen)
195
+ return filePath;
196
+ return "\u2026/" + filePath.slice(-(maxLen - 2));
197
+ }
198
+ // ─── Spinner ─────────────────────────────────────────────────────────────────
199
+ // Braille-cycle spinner in Vital Teal. Replaces `ora`.
200
+ export class Spinner {
201
+ frameIndex = 0;
202
+ interval = null;
203
+ _text;
204
+ constructor(text) {
205
+ this._text = text;
206
+ }
207
+ get text() {
208
+ return this._text;
209
+ }
210
+ set text(value) {
211
+ this._text = value;
212
+ }
213
+ start() {
214
+ if (_plainMode) {
215
+ process.stderr.write(`${this._text}\n`);
216
+ return this;
217
+ }
218
+ this.interval = setInterval(() => {
219
+ const frame = colors.vitalTeal.apply(spinnerFrames[this.frameIndex % spinnerFrames.length]);
220
+ process.stderr.write(`\r ${frame} ${colors.slateDim.apply(this._text)}`);
221
+ this.frameIndex++;
222
+ }, 80);
223
+ return this;
224
+ }
225
+ stop() {
226
+ if (this.interval) {
227
+ clearInterval(this.interval);
228
+ this.interval = null;
229
+ }
230
+ if (!_plainMode) {
231
+ process.stderr.write("\r" + " ".repeat(80) + "\r");
232
+ }
233
+ }
234
+ fail(message) {
235
+ this.stop();
236
+ console.error(` ${colors.pulseCoral.apply(glyphs.critical)} ${colors.pulseCoral.apply(message)}`);
237
+ }
238
+ }
239
+ // ─── Styled Text Helpers ─────────────────────────────────────────────────────
240
+ export const text = {
241
+ bold: (t) => chalk.bold(t),
242
+ dim: (t) => chalk.dim(t),
243
+ };
244
+ // ─── ANSI Strip ──────────────────────────────────────────────────────────────
245
+ export function stripAnsi(str) {
246
+ // Covers SGR sequences and OSC 8 hyperlinks
247
+ // eslint-disable-next-line no-control-regex
248
+ return str
249
+ .replace(/\u001B\[\d*;?\d*;?\d*m/g, "")
250
+ .replace(/\u001B\]8;;[^\u001B]*\u001B\\/g, "");
251
+ }
252
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/ui/theme.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bilt-toolkit",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Zero-configuration CLI toolkit that keeps local projects healthy before they reach Git.",
5
5
  "type": "module",
6
6
  "main": "dist/cli.js",
@@ -11,7 +11,11 @@
11
11
  "dist",
12
12
  "bin"
13
13
  ],
14
+ "engines": {
15
+ "node": ">=18.0.0"
16
+ },
14
17
  "scripts": {
18
+ "prepare": "npm run build",
15
19
  "dev": "tsx src/cli.ts",
16
20
  "build": "tsc",
17
21
  "start": "node dist/cli.js",
@@ -39,7 +43,6 @@
39
43
  "author": "",
40
44
  "license": "MIT",
41
45
  "dependencies": {
42
- "boxen": "^8.0.1",
43
46
  "chalk": "^5.6.2",
44
47
  "chokidar": "^4.0.3",
45
48
  "commander": "^15.0.0",
@@ -48,7 +51,6 @@
48
51
  "enquirer": "^2.4.1",
49
52
  "execa": "^9.6.1",
50
53
  "fast-glob": "^3.3.3",
51
- "ora": "^9.4.1",
52
54
  "simple-git": "^3.27.0",
53
55
  "zod": "^4.4.3"
54
56
  },
@@ -58,6 +60,7 @@
58
60
  "eslint": "^10.7.0",
59
61
  "prettier": "^3.9.5",
60
62
  "rimraf": "^6.1.3",
63
+ "sharp": "^0.35.3",
61
64
  "tsx": "^4.23.1",
62
65
  "typescript": "^7.0.2",
63
66
  "vitest": "^4.1.10"