bugproof 0.1.2 → 0.2.5

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 (78) hide show
  1. package/CHANGELOG.md +61 -5
  2. package/README.md +232 -8
  3. package/bin/bugproof.cmd +2 -0
  4. package/dist/capture/env-snapshot.d.ts +53 -0
  5. package/dist/capture/env-snapshot.d.ts.map +1 -0
  6. package/dist/capture/env-snapshot.js +122 -0
  7. package/dist/capture/env-snapshot.js.map +1 -0
  8. package/dist/capture/language-support.d.ts +55 -0
  9. package/dist/capture/language-support.d.ts.map +1 -0
  10. package/dist/capture/language-support.js +505 -0
  11. package/dist/capture/language-support.js.map +1 -0
  12. package/dist/capture/packager.d.ts +9 -0
  13. package/dist/capture/packager.d.ts.map +1 -1
  14. package/dist/capture/packager.js +23 -2
  15. package/dist/capture/packager.js.map +1 -1
  16. package/dist/capture/source-strategy.d.ts +52 -0
  17. package/dist/capture/source-strategy.d.ts.map +1 -0
  18. package/dist/capture/source-strategy.js +227 -0
  19. package/dist/capture/source-strategy.js.map +1 -0
  20. package/dist/cli.js +373 -12
  21. package/dist/cli.js.map +1 -1
  22. package/dist/config/loader.d.ts +44 -0
  23. package/dist/config/loader.d.ts.map +1 -0
  24. package/dist/config/loader.js +87 -0
  25. package/dist/config/loader.js.map +1 -0
  26. package/dist/replay/engine.d.ts +9 -0
  27. package/dist/replay/engine.d.ts.map +1 -1
  28. package/dist/replay/engine.js +29 -3
  29. package/dist/replay/engine.js.map +1 -1
  30. package/dist/replay/hints.d.ts +18 -0
  31. package/dist/replay/hints.d.ts.map +1 -0
  32. package/dist/replay/hints.js +138 -0
  33. package/dist/replay/hints.js.map +1 -0
  34. package/dist/replay/sandbox.js +41 -14
  35. package/dist/replay/sandbox.js.map +1 -1
  36. package/dist/replay/verdict.d.ts.map +1 -1
  37. package/dist/replay/verdict.js +41 -5
  38. package/dist/replay/verdict.js.map +1 -1
  39. package/dist/sandbox/bugbox.d.ts.map +1 -1
  40. package/dist/sandbox/bugbox.js +40 -6
  41. package/dist/sandbox/bugbox.js.map +1 -1
  42. package/dist/sandbox/container.d.ts +81 -0
  43. package/dist/sandbox/container.d.ts.map +1 -0
  44. package/dist/sandbox/container.js +343 -0
  45. package/dist/sandbox/container.js.map +1 -0
  46. package/dist/sandbox/cross-platform.d.ts +59 -0
  47. package/dist/sandbox/cross-platform.d.ts.map +1 -0
  48. package/dist/sandbox/cross-platform.js +330 -0
  49. package/dist/sandbox/cross-platform.js.map +1 -0
  50. package/dist/sandbox/filesystem.d.ts +2 -2
  51. package/dist/sandbox/filesystem.d.ts.map +1 -1
  52. package/dist/sandbox/filesystem.js +46 -19
  53. package/dist/sandbox/filesystem.js.map +1 -1
  54. package/dist/sandbox/network.d.ts.map +1 -1
  55. package/dist/sandbox/network.js +31 -2
  56. package/dist/sandbox/network.js.map +1 -1
  57. package/dist/share/gist.d.ts +21 -0
  58. package/dist/share/gist.d.ts.map +1 -0
  59. package/dist/share/gist.js +158 -0
  60. package/dist/share/gist.js.map +1 -0
  61. package/dist/utils/archive.d.ts +1 -0
  62. package/dist/utils/archive.d.ts.map +1 -1
  63. package/dist/utils/archive.js +42 -1
  64. package/dist/utils/archive.js.map +1 -1
  65. package/dist/utils/artifact-validation.d.ts +7 -0
  66. package/dist/utils/artifact-validation.d.ts.map +1 -0
  67. package/dist/utils/artifact-validation.js +212 -0
  68. package/dist/utils/artifact-validation.js.map +1 -0
  69. package/dist/utils/dependencies.d.ts +18 -0
  70. package/dist/utils/dependencies.d.ts.map +1 -0
  71. package/dist/utils/dependencies.js +218 -0
  72. package/dist/utils/dependencies.js.map +1 -0
  73. package/dist/utils/ui.d.ts +1 -0
  74. package/dist/utils/ui.d.ts.map +1 -1
  75. package/dist/utils/ui.js +1 -0
  76. package/dist/utils/ui.js.map +1 -1
  77. package/package.json +5 -2
  78. package/scripts/postinstall.cjs +38 -5
@@ -0,0 +1,330 @@
1
+ /**
2
+ * BugBox Cross-Platform Layer
3
+ *
4
+ * Handles the scenario where a bug was captured on one OS but replayed on another.
5
+ * Instead of requiring Docker/WSL, this layer translates:
6
+ *
7
+ * 1. Commands — python3 ↔ python, node stays node, bash → cmd/powershell
8
+ * 2. Paths — / ↔ \, $HOME ↔ %USERPROFILE%, path separators in PATH
9
+ * 3. Environment variables — HOME ↔ USERPROFILE, USER ↔ USERNAME, etc.
10
+ * 4. Shell wrappers — bash -c "..." → cmd /c "..." or powershell -c "..."
11
+ *
12
+ * Limitations (honest about what we CAN'T do):
13
+ * - Compiled binaries (ELF on Windows, PE on Linux) → fail with clear message
14
+ * - OS-specific syscalls (inotify, kqueue, epoll) → fail with clear message
15
+ * - Shell scripts with heavy bash-isms → best-effort translation, may fail
16
+ *
17
+ * Philosophy: Translate what's translatable, warn clearly about what isn't.
18
+ */
19
+ import * as os from 'os';
20
+ import * as path from 'path';
21
+ import { spawnSync } from 'child_process';
22
+ /**
23
+ * Detects whether cross-platform translation is needed and assesses compatibility.
24
+ */
25
+ export function detectCrossPlatform(capturedPlatform, replayPlatform) {
26
+ const replay = replayPlatform || os.platform();
27
+ const needsTranslation = capturedPlatform !== replay;
28
+ const warnings = [];
29
+ let likelyCompatible = true;
30
+ if (needsTranslation) {
31
+ warnings.push(`Cross-platform replay: captured on ${platformName(capturedPlatform)}, replaying on ${platformName(replay)}`);
32
+ // Assess compatibility
33
+ if ((capturedPlatform === 'linux' && replay === 'darwin') ||
34
+ (capturedPlatform === 'darwin' && replay === 'linux')) {
35
+ // Unix-to-Unix: high compatibility for scripting languages
36
+ likelyCompatible = true;
37
+ warnings.push('Unix-to-Unix translation: high compatibility expected for scripting languages.');
38
+ }
39
+ else if ((capturedPlatform === 'win32' && (replay === 'linux' || replay === 'darwin')) ||
40
+ ((capturedPlatform === 'linux' || capturedPlatform === 'darwin') && replay === 'win32')) {
41
+ // Cross-family: medium compatibility
42
+ likelyCompatible = true; // Optimistic — we'll catch hard failures in command translation
43
+ warnings.push('Cross-family translation applied. Path separators and commands will be adapted.');
44
+ }
45
+ }
46
+ return { capturedPlatform, replayPlatform: replay, needsTranslation, likelyCompatible, warnings };
47
+ }
48
+ /**
49
+ * Translates a command from the captured platform to the replay platform.
50
+ */
51
+ export function translateCommand(command, capturedPlatform, replayPlatform) {
52
+ const replay = replayPlatform || os.platform();
53
+ const translations = [];
54
+ const blockers = [];
55
+ if (capturedPlatform === replay) {
56
+ return { command, translated: false, translations: [], blockers: [] };
57
+ }
58
+ let translated = [...command];
59
+ // 1. Translate the executable
60
+ translated[0] = translateExecutable(translated[0], capturedPlatform, replay, translations, blockers);
61
+ // 2. Translate shell wrappers
62
+ translated = translateShellWrapper(translated, capturedPlatform, replay, translations);
63
+ // 3. Translate path arguments
64
+ translated = translated.map((arg, i) => {
65
+ if (i === 0)
66
+ return arg; // Already handled
67
+ return translatePathArg(arg, capturedPlatform, replay);
68
+ });
69
+ return {
70
+ command: translated,
71
+ translated: translations.length > 0,
72
+ translations,
73
+ blockers,
74
+ };
75
+ }
76
+ /**
77
+ * Translates environment variables between platforms.
78
+ */
79
+ export function translateEnvironment(env, capturedPlatform, replayPlatform) {
80
+ const replay = replayPlatform || os.platform();
81
+ const translations = [];
82
+ if (capturedPlatform === replay) {
83
+ return { environment: env, translations: [] };
84
+ }
85
+ const result = { ...env };
86
+ // Translate PATH separator
87
+ if (result.PATH) {
88
+ const fromSep = capturedPlatform === 'win32' ? ';' : ':';
89
+ const toSep = replay === 'win32' ? ';' : ':';
90
+ if (fromSep !== toSep) {
91
+ result.PATH = result.PATH.split(fromSep).join(toSep);
92
+ translations.push(`PATH separator: '${fromSep}' → '${toSep}'`);
93
+ }
94
+ }
95
+ // Map HOME ↔ USERPROFILE
96
+ if (capturedPlatform === 'win32' && replay !== 'win32') {
97
+ // Windows → Unix
98
+ if (result.USERPROFILE && !result.HOME) {
99
+ result.HOME = translatePathValue(result.USERPROFILE, capturedPlatform, replay);
100
+ translations.push('USERPROFILE → HOME');
101
+ }
102
+ if (result.USERNAME && !result.USER) {
103
+ result.USER = result.USERNAME;
104
+ translations.push('USERNAME → USER');
105
+ }
106
+ if (result.APPDATA && !result.XDG_CONFIG_HOME) {
107
+ result.XDG_CONFIG_HOME = translatePathValue(result.APPDATA, capturedPlatform, replay);
108
+ translations.push('APPDATA → XDG_CONFIG_HOME');
109
+ }
110
+ }
111
+ else if (capturedPlatform !== 'win32' && replay === 'win32') {
112
+ // Unix → Windows
113
+ if (result.HOME && !result.USERPROFILE) {
114
+ result.USERPROFILE = translatePathValue(result.HOME, capturedPlatform, replay);
115
+ translations.push('HOME → USERPROFILE');
116
+ }
117
+ if (result.USER && !result.USERNAME) {
118
+ result.USERNAME = result.USER;
119
+ translations.push('USER → USERNAME');
120
+ }
121
+ }
122
+ // Translate TMPDIR/TMP/TEMP
123
+ if (capturedPlatform !== 'win32' && replay === 'win32') {
124
+ if (result.TMPDIR && !result.TEMP) {
125
+ result.TEMP = os.tmpdir();
126
+ result.TMP = os.tmpdir();
127
+ translations.push('TMPDIR → TEMP/TMP (using local temp dir)');
128
+ }
129
+ }
130
+ else if (capturedPlatform === 'win32' && replay !== 'win32') {
131
+ if ((result.TEMP || result.TMP) && !result.TMPDIR) {
132
+ result.TMPDIR = os.tmpdir();
133
+ translations.push('TEMP/TMP → TMPDIR (using local temp dir)');
134
+ }
135
+ }
136
+ // Translate path values in all env vars
137
+ for (const key of Object.keys(result)) {
138
+ if (result[key] && looksLikePath(result[key], capturedPlatform)) {
139
+ const translated = translatePathValue(result[key], capturedPlatform, replay);
140
+ if (translated !== result[key]) {
141
+ result[key] = translated;
142
+ }
143
+ }
144
+ }
145
+ return { environment: result, translations };
146
+ }
147
+ // ── Command translation helpers ──
148
+ /** Common command aliases across platforms */
149
+ const COMMAND_MAP = {
150
+ // ── Scripting languages ──
151
+ 'python3': { win32: 'python' },
152
+ 'python': { linux: 'python3', darwin: 'python3' },
153
+ 'pip3': { win32: 'pip' },
154
+ 'pip': { linux: 'pip3', darwin: 'pip3' },
155
+ // ── Java/JVM ──
156
+ 'gradlew': { win32: 'gradlew.bat' },
157
+ 'gradlew.bat': { linux: './gradlew', darwin: './gradlew' },
158
+ './gradlew': { win32: 'gradlew.bat' },
159
+ 'mvnw': { win32: 'mvnw.cmd' },
160
+ 'mvnw.cmd': { linux: './mvnw', darwin: './mvnw' },
161
+ './mvnw': { win32: 'mvnw.cmd' },
162
+ // ── C/C++ build tools ──
163
+ 'make': { win32: 'mingw32-make' },
164
+ 'mingw32-make': { linux: 'make', darwin: 'make' },
165
+ 'cc': { win32: 'gcc' },
166
+ 'c++': { win32: 'g++' },
167
+ // ── .NET ──
168
+ 'dotnet': { win32: 'dotnet', linux: 'dotnet', darwin: 'dotnet' },
169
+ // ── Utilities ──
170
+ 'open': { win32: 'start', linux: 'xdg-open' },
171
+ 'xdg-open': { win32: 'start', darwin: 'open' },
172
+ 'start': { linux: 'xdg-open', darwin: 'open' },
173
+ 'cls': { linux: 'clear', darwin: 'clear' },
174
+ 'clear': { win32: 'cls' },
175
+ 'cat': { win32: 'type' },
176
+ 'ls': { win32: 'dir' },
177
+ 'rm': { win32: 'del' },
178
+ 'cp': { win32: 'copy' },
179
+ 'mv': { win32: 'move' },
180
+ 'which': { win32: 'where' },
181
+ 'where': { linux: 'which', darwin: 'which' },
182
+ // ── Shell ──
183
+ 'sh': { win32: 'bash' },
184
+ };
185
+ /** Binary extensions that cannot run cross-platform (reserved for future use) */
186
+ const _NATIVE_BINARY_EXTENSIONS = ['.exe', '.dll', '.so', '.dylib', '.elf', ''];
187
+ function translateExecutable(exe, from, to, translations, blockers) {
188
+ const baseName = path.basename(exe).replace(/\.exe$/i, '');
189
+ // Check for native binaries
190
+ const ext = path.extname(exe).toLowerCase();
191
+ if (from !== to) {
192
+ if (from === 'win32' && ext === '.exe' && to !== 'win32') {
193
+ blockers.push(`Cannot run Windows executable '${exe}' on ${platformName(to)}. Requires Windows or Wine.`);
194
+ }
195
+ if (from === 'linux' && !ext && to === 'win32') {
196
+ // Could be a Linux ELF binary — check if it's a known scripting command
197
+ if (!isScriptingCommand(baseName)) {
198
+ blockers.push(`Binary '${exe}' may be a Linux ELF executable. Cannot run on Windows without WSL.`);
199
+ }
200
+ }
201
+ }
202
+ // Try command map
203
+ const mapping = COMMAND_MAP[baseName];
204
+ if (mapping && mapping[to]) {
205
+ // Verify the target command exists
206
+ const exists = commandExists(mapping[to]);
207
+ if (exists) {
208
+ translations.push(`Command: ${baseName} → ${mapping[to]}`);
209
+ return mapping[to];
210
+ }
211
+ }
212
+ // python3 → python fallback on Windows
213
+ if (baseName === 'python3' && to === 'win32') {
214
+ if (commandExists('python')) {
215
+ translations.push('Command: python3 → python');
216
+ return 'python';
217
+ }
218
+ }
219
+ return exe;
220
+ }
221
+ function translateShellWrapper(command, from, to, translations) {
222
+ if (command.length < 2)
223
+ return command;
224
+ const exe = path.basename(command[0]).replace(/\.exe$/i, '');
225
+ // bash -c "..." → cmd /c "..." or powershell -c "..."
226
+ if ((exe === 'bash' || exe === 'sh') && command[1] === '-c' && to === 'win32') {
227
+ if (commandExists('bash')) {
228
+ // WSL/Git Bash available — keep as-is
229
+ return command;
230
+ }
231
+ translations.push(`Shell: ${exe} -c → powershell -Command`);
232
+ return ['powershell', '-NoProfile', '-Command', ...command.slice(2)];
233
+ }
234
+ // cmd /c "..." → bash -c "..." on Unix
235
+ if (exe === 'cmd' && (command[1] === '/c' || command[1] === '/C') && to !== 'win32') {
236
+ translations.push('Shell: cmd /c → bash -c');
237
+ return ['bash', '-c', ...command.slice(2)];
238
+ }
239
+ // powershell -Command "..." → bash -c "..." on Unix
240
+ if ((exe === 'powershell' || exe === 'pwsh') && to !== 'win32') {
241
+ const cmdIdx = command.findIndex(a => a === '-Command' || a === '-c');
242
+ if (cmdIdx >= 0) {
243
+ translations.push(`Shell: ${exe} → bash -c`);
244
+ return ['bash', '-c', ...command.slice(cmdIdx + 1)];
245
+ }
246
+ }
247
+ return command;
248
+ }
249
+ // ── Path translation ──
250
+ function translatePathArg(arg, from, to) {
251
+ if (!looksLikePath(arg, from))
252
+ return arg;
253
+ return translatePathValue(arg, from, to);
254
+ }
255
+ function translatePathValue(value, from, to) {
256
+ if (from === 'win32' && to !== 'win32') {
257
+ // Windows → Unix: C:\Users\foo → /home/foo (best effort)
258
+ let result = value.replace(/\\/g, '/');
259
+ // Strip drive letter
260
+ result = result.replace(/^[A-Za-z]:/, '');
261
+ // Map common Windows paths
262
+ result = result.replace(/^\/Users\//, '/home/');
263
+ return result;
264
+ }
265
+ if (from !== 'win32' && to === 'win32') {
266
+ // Unix → Windows: /home/foo/project → C:\Users\foo\project (best effort)
267
+ let result = value.replace(/\//g, '\\');
268
+ // Add drive letter if absolute
269
+ if (result.startsWith('\\')) {
270
+ result = 'C:' + result;
271
+ }
272
+ // Map common Unix paths
273
+ result = result.replace(/^C:\\home\\/, 'C:\\Users\\');
274
+ return result;
275
+ }
276
+ return value;
277
+ }
278
+ function looksLikePath(value, platform) {
279
+ if (platform === 'win32') {
280
+ return /^[A-Za-z]:[/\\]/.test(value) || value.includes('\\');
281
+ }
282
+ return value.startsWith('/') || value.startsWith('./') || value.startsWith('../');
283
+ }
284
+ // ── Utilities ──
285
+ function platformName(p) {
286
+ switch (p) {
287
+ case 'win32': return 'Windows';
288
+ case 'linux': return 'Linux';
289
+ case 'darwin': return 'macOS';
290
+ default: return p;
291
+ }
292
+ }
293
+ function isScriptingCommand(name) {
294
+ const crossPlatformCommands = [
295
+ // Scripting runtimes
296
+ 'node', 'python', 'python3', 'ruby', 'perl', 'php', 'deno', 'bun',
297
+ // JVM
298
+ 'java', 'javac', 'kotlin', 'kotlinc', 'scala', 'scalac',
299
+ // Compiled but cross-platform source
300
+ 'go', 'cargo', 'rustc', 'gcc', 'g++', 'clang', 'clang++', 'cc', 'c++',
301
+ // Build tools
302
+ 'make', 'cmake', 'ninja', 'meson', 'gradle', 'gradlew', 'mvn', 'mvnw', 'sbt', 'ant',
303
+ 'msbuild', 'dotnet', 'xcodebuild',
304
+ // Package managers
305
+ 'npm', 'npx', 'yarn', 'pnpm', 'pip', 'pip3', 'gem', 'bundle', 'composer',
306
+ 'apt', 'brew', 'choco', 'scoop', 'pacman',
307
+ // Version managers
308
+ 'nvm', 'pyenv', 'rbenv', 'rustup', 'sdkman',
309
+ // Test runners
310
+ 'jest', 'pytest', 'mocha', 'vitest', 'rspec', 'junit',
311
+ // Misc tools
312
+ 'git', 'curl', 'wget', 'tar', 'unzip', 'grep', 'find', 'sed', 'awk',
313
+ ];
314
+ return crossPlatformCommands.includes(name);
315
+ }
316
+ function commandExists(name) {
317
+ try {
318
+ const cmd = os.platform() === 'win32' ? 'where' : 'which';
319
+ const result = spawnSync(cmd, [name], {
320
+ encoding: 'utf-8',
321
+ timeout: 3000,
322
+ stdio: ['pipe', 'pipe', 'pipe'],
323
+ });
324
+ return result.status === 0;
325
+ }
326
+ catch {
327
+ return false;
328
+ }
329
+ }
330
+ //# sourceMappingURL=cross-platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-platform.js","sourceRoot":"","sources":["../../src/sandbox/cross-platform.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@ export declare function createIsolatedDir(): IsolatedDirResult;
33
33
  * so the replayed process cannot modify captured files.
34
34
  *
35
35
  * Linux/macOS: removes write bit (chmod a-w recursively).
36
- * Windows: icacls to deny write.
36
+ * Windows: attrib +r recursively (more reliable than icacls).
37
37
  */
38
38
  export declare function lockDirReadOnly(dirPath: string): void;
39
39
  /**
@@ -44,7 +44,7 @@ export declare function unlockDir(dirPath: string): void;
44
44
  /**
45
45
  * Removes the entire isolated directory.
46
46
  * Handles read-only files by unlocking first.
47
- * Never throws — best-effort cleanup.
47
+ * Never throws — best-effort cleanup with retries on Windows.
48
48
  */
49
49
  export declare function cleanupIsolatedDir(result: IsolatedDirResult): void;
50
50
  //# sourceMappingURL=filesystem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/sandbox/filesystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,CAgBrD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAcrD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAc/C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAelE"}
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/sandbox/filesystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,CAgBrD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAkBrD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAkB/C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CA+BlE"}
@@ -39,18 +39,23 @@ export function createIsolatedDir() {
39
39
  * so the replayed process cannot modify captured files.
40
40
  *
41
41
  * Linux/macOS: removes write bit (chmod a-w recursively).
42
- * Windows: icacls to deny write.
42
+ * Windows: attrib +r recursively (more reliable than icacls).
43
43
  */
44
44
  export function lockDirReadOnly(dirPath) {
45
45
  if (!fs.existsSync(dirPath))
46
46
  return;
47
47
  if (os.platform() === 'win32') {
48
- // On Windows, use icacls to set read-only attribute on all files
49
- spawnSync('icacls', [dirPath, '/deny', `${os.userInfo().username}:(W)`, '/T', '/C'], {
50
- encoding: 'utf-8',
51
- timeout: 10000,
52
- stdio: 'pipe',
53
- });
48
+ // On Windows, use attrib +r to set read-only recursively (simpler and more reliable)
49
+ try {
50
+ spawnSync('attrib', ['+r', dirPath, '/s', '/d'], {
51
+ encoding: 'utf-8',
52
+ timeout: 10000,
53
+ stdio: 'pipe',
54
+ });
55
+ }
56
+ catch {
57
+ // Best effort — attrib may fail on some Windows setups
58
+ }
54
59
  }
55
60
  else {
56
61
  // Unix: remove write bit recursively
@@ -65,12 +70,17 @@ export function unlockDir(dirPath) {
65
70
  if (!fs.existsSync(dirPath))
66
71
  return;
67
72
  if (os.platform() === 'win32') {
68
- // Remove the deny rule
69
- spawnSync('icacls', [dirPath, '/remove:d', os.userInfo().username, '/T', '/C'], {
70
- encoding: 'utf-8',
71
- timeout: 10000,
72
- stdio: 'pipe',
73
- });
73
+ // On Windows, use attrib -r to clear read-only recursively
74
+ try {
75
+ spawnSync('attrib', ['-r', dirPath, '/s', '/d'], {
76
+ encoding: 'utf-8',
77
+ timeout: 10000,
78
+ stdio: 'pipe',
79
+ });
80
+ }
81
+ catch {
82
+ // Best effort — attrib may fail on some Windows setups
83
+ }
74
84
  }
75
85
  else {
76
86
  // Unix: restore write bit
@@ -80,7 +90,7 @@ export function unlockDir(dirPath) {
80
90
  /**
81
91
  * Removes the entire isolated directory.
82
92
  * Handles read-only files by unlocking first.
83
- * Never throws — best-effort cleanup.
93
+ * Never throws — best-effort cleanup with retries on Windows.
84
94
  */
85
95
  export function cleanupIsolatedDir(result) {
86
96
  if (!fs.existsSync(result.rootDir))
@@ -92,11 +102,28 @@ export function cleanupIsolatedDir(result) {
92
102
  catch {
93
103
  // Best effort
94
104
  }
95
- try {
96
- fs.rmSync(result.rootDir, { recursive: true, force: true });
97
- }
98
- catch {
99
- // Best effort — on Windows, locked handles may prevent immediate removal
105
+ // On Windows, retry cleanup a few times to handle file locks and handle delays
106
+ const maxRetries = os.platform() === 'win32' ? 3 : 1;
107
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
108
+ try {
109
+ fs.rmSync(result.rootDir, { recursive: true, force: true });
110
+ return; // Success
111
+ }
112
+ catch (err) {
113
+ if (attempt === maxRetries - 1) {
114
+ // Last attempt failed, but don't throw — best effort
115
+ break;
116
+ }
117
+ // Wait a bit before retrying on Windows to allow file handles to release
118
+ if (os.platform() === 'win32') {
119
+ try {
120
+ spawnSync('timeout', ['/t', '1', '/nobreak'], { stdio: 'pipe' });
121
+ }
122
+ catch {
123
+ // Fallback: continue to next retry anyway
124
+ }
125
+ }
126
+ }
100
127
  }
101
128
  }
102
129
  // ── Internal helpers ──
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/sandbox/filesystem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/sandbox/filesystem.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/sandbox/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,CAAC;AAE5E,8DAA8D;AAC9D,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,YAAY,EAAE,OAAO,CAAC;IACtB,qCAAqC;IACrC,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG,eAAe,CAWjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,sBAAsB,CA4CxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,IAAI,CAiBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAiB/E"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/sandbox/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,CAAC;AAE5E,8DAA8D;AAC9D,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,YAAY,EAAE,OAAO,CAAC;IACtB,qCAAqC;IACrC,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG,eAAe,CAWjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,sBAAsB,CA4CxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,IAAI,CAiBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAuB/E"}
@@ -119,13 +119,18 @@ export function createNetworkCleanup(strategy, ruleName) {
119
119
  * @returns true if the rule was added, false on failure.
120
120
  */
121
121
  export function addFirewallBlockRule(ruleName, exePath) {
122
+ const safeRuleName = sanitizeFirewallRuleName(ruleName);
123
+ const safeExePath = sanitizeExecutablePath(exePath);
124
+ if (!safeRuleName || !safeExePath) {
125
+ return false;
126
+ }
122
127
  try {
123
128
  const result = spawnSync('netsh', [
124
129
  'advfirewall', 'firewall', 'add', 'rule',
125
- `name=${ruleName}`,
130
+ `name=${safeRuleName}`,
126
131
  'dir=out',
127
132
  'action=block',
128
- `program=${exePath}`,
133
+ `program=${safeExePath}`,
129
134
  ], { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
130
135
  return result.status === 0;
131
136
  }
@@ -133,4 +138,28 @@ export function addFirewallBlockRule(ruleName, exePath) {
133
138
  return false;
134
139
  }
135
140
  }
141
+ function sanitizeFirewallRuleName(value) {
142
+ if (!value || value.length > 120) {
143
+ return null;
144
+ }
145
+ if (/[\r\n\t=]/.test(value)) {
146
+ return null;
147
+ }
148
+ if (!/^[A-Za-z0-9 _.-]+$/.test(value)) {
149
+ return null;
150
+ }
151
+ return value;
152
+ }
153
+ function sanitizeExecutablePath(value) {
154
+ if (!value || value.length > 260) {
155
+ return null;
156
+ }
157
+ if (/[\r\n\0]/.test(value)) {
158
+ return null;
159
+ }
160
+ if (/["<>|]/.test(value)) {
161
+ return null;
162
+ }
163
+ return value;
164
+ }
136
165
  //# sourceMappingURL=network.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/sandbox/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAe1C;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA0B;IAC9D,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9C,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAyB,EACzB,OAAiB;IAEjB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO;gBACL,oEAAoE;gBACpE,mEAAmE;gBACnE,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;gBAClE,YAAY,EAAE,KAAK;gBACnB,QAAQ;aACT,CAAC;QAEJ,KAAK,cAAc;YACjB,OAAO;gBACL,4CAA4C;gBAC5C,mEAAmE;gBACnE,gCAAgC;gBAChC,OAAO,EAAE;oBACP,cAAc;oBACd,IAAI;oBACJ,2CAA2C;oBAC3C,IAAI;oBACJ,GAAG,OAAO;iBACX;gBACD,YAAY,EAAE,KAAK;gBACnB,QAAQ;aACT,CAAC;QAEJ,KAAK,OAAO;YACV,sEAAsE;YACtE,0EAA0E;YAC1E,OAAO;gBACL,OAAO;gBACP,YAAY,EAAE,IAAI;gBAClB,QAAQ;aACT,CAAC;QAEJ,KAAK,MAAM,CAAC;QACZ;YACE,OAAO;gBACL,OAAO;gBACP,YAAY,EAAE,KAAK;gBACnB,QAAQ;aACT,CAAC;IACN,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAyB,EACzB,QAAiB;IAEjB,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,EAAE,CAAC;QACrC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC;gBACH,SAAS,CACP,OAAO,EACP,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,QAAQ,EAAE,CAAC,EACjE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CACpD,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,0DAA0D;YAC5D,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,OAAe;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CACtB,OAAO,EACP;YACE,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM;YACxC,QAAQ,QAAQ,EAAE;YAClB,SAAS;YACT,cAAc;YACd,WAAW,OAAO,EAAE;SACrB,EACD,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CACpD,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/sandbox/network.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Share Engine — push .bug artifacts to GitHub Gist
3
+ *
4
+ * Creates a secret gist with the artifact contents for easy sharing.
5
+ * Recipients can download and replay with: bugproof pull <gist-url>
6
+ */
7
+ export interface ShareResult {
8
+ url: string;
9
+ gistId: string;
10
+ rawUrl: string;
11
+ }
12
+ export declare function sanitizeShareError(input: string): string;
13
+ /**
14
+ * Uploads artifact contents to a GitHub Gist.
15
+ * Requires GITHUB_TOKEN or BUGPROOF_GITHUB_TOKEN env var.
16
+ */
17
+ export declare function shareToGist(artifactPath: string, options?: {
18
+ public?: boolean;
19
+ description?: string;
20
+ }): Promise<ShareResult>;
21
+ //# sourceMappingURL=gist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gist.d.ts","sourceRoot":"","sources":["../../src/share/gist.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,WAAW,CAAC,CA4EtB"}