@blockspool/cli 0.4.1 → 0.4.3

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 (149) hide show
  1. package/dist/bin/blockspool.d.ts +16 -0
  2. package/dist/bin/blockspool.d.ts.map +1 -0
  3. package/dist/bin/blockspool.js +45 -0
  4. package/dist/bin/blockspool.js.map +1 -0
  5. package/dist/commands/solo-auto.d.ts +6 -0
  6. package/dist/commands/solo-auto.d.ts.map +1 -0
  7. package/dist/commands/solo-auto.js +418 -0
  8. package/dist/commands/solo-auto.js.map +1 -0
  9. package/dist/commands/solo-exec.d.ts +6 -0
  10. package/dist/commands/solo-exec.d.ts.map +1 -0
  11. package/dist/commands/solo-exec.js +656 -0
  12. package/dist/commands/solo-exec.js.map +1 -0
  13. package/dist/commands/solo-inspect.d.ts +6 -0
  14. package/dist/commands/solo-inspect.d.ts.map +1 -0
  15. package/dist/commands/solo-inspect.js +690 -0
  16. package/dist/commands/solo-inspect.js.map +1 -0
  17. package/dist/commands/solo-lifecycle.d.ts +6 -0
  18. package/dist/commands/solo-lifecycle.d.ts.map +1 -0
  19. package/dist/commands/solo-lifecycle.js +188 -0
  20. package/dist/commands/solo-lifecycle.js.map +1 -0
  21. package/dist/commands/solo-nudge.d.ts +6 -0
  22. package/dist/commands/solo-nudge.d.ts.map +1 -0
  23. package/dist/commands/solo-nudge.js +49 -0
  24. package/dist/commands/solo-nudge.js.map +1 -0
  25. package/dist/commands/solo-qa.d.ts +6 -0
  26. package/dist/commands/solo-qa.d.ts.map +1 -0
  27. package/dist/commands/solo-qa.js +254 -0
  28. package/dist/commands/solo-qa.js.map +1 -0
  29. package/dist/commands/solo.d.ts +11 -0
  30. package/dist/commands/solo.d.ts.map +1 -0
  31. package/dist/commands/solo.js +43 -0
  32. package/dist/commands/solo.js.map +1 -0
  33. package/dist/index.d.ts +18 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +18 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/lib/artifacts.d.ts +136 -0
  38. package/dist/lib/artifacts.d.ts.map +1 -0
  39. package/dist/lib/artifacts.js +146 -0
  40. package/dist/lib/artifacts.js.map +1 -0
  41. package/dist/lib/doctor.d.ts +45 -0
  42. package/dist/lib/doctor.d.ts.map +1 -0
  43. package/dist/lib/doctor.js +383 -0
  44. package/dist/lib/doctor.js.map +1 -0
  45. package/dist/lib/exec.d.ts +24 -0
  46. package/dist/lib/exec.d.ts.map +1 -0
  47. package/dist/lib/exec.js +295 -0
  48. package/dist/lib/exec.js.map +1 -0
  49. package/dist/lib/formulas.d.ts +78 -0
  50. package/dist/lib/formulas.d.ts.map +1 -0
  51. package/dist/lib/formulas.js +295 -0
  52. package/dist/lib/formulas.js.map +1 -0
  53. package/dist/lib/git.d.ts +9 -0
  54. package/dist/lib/git.d.ts.map +1 -0
  55. package/dist/lib/git.js +60 -0
  56. package/dist/lib/git.js.map +1 -0
  57. package/dist/lib/guidelines.d.ts +43 -0
  58. package/dist/lib/guidelines.d.ts.map +1 -0
  59. package/dist/lib/guidelines.js +195 -0
  60. package/dist/lib/guidelines.js.map +1 -0
  61. package/dist/lib/logger.d.ts +17 -0
  62. package/dist/lib/logger.d.ts.map +1 -0
  63. package/dist/lib/logger.js +42 -0
  64. package/dist/lib/logger.js.map +1 -0
  65. package/dist/lib/retention.d.ts +62 -0
  66. package/dist/lib/retention.d.ts.map +1 -0
  67. package/dist/lib/retention.js +285 -0
  68. package/dist/lib/retention.js.map +1 -0
  69. package/dist/lib/run-history.d.ts +52 -0
  70. package/dist/lib/run-history.d.ts.map +1 -0
  71. package/dist/lib/run-history.js +116 -0
  72. package/dist/lib/run-history.js.map +1 -0
  73. package/dist/lib/run-state.d.ts +58 -0
  74. package/dist/lib/run-state.d.ts.map +1 -0
  75. package/dist/lib/run-state.js +119 -0
  76. package/dist/lib/run-state.js.map +1 -0
  77. package/dist/lib/scope.d.ts +95 -0
  78. package/dist/lib/scope.d.ts.map +1 -0
  79. package/dist/lib/scope.js +291 -0
  80. package/dist/lib/scope.js.map +1 -0
  81. package/dist/lib/selection.d.ts +35 -0
  82. package/dist/lib/selection.d.ts.map +1 -0
  83. package/dist/lib/selection.js +110 -0
  84. package/dist/lib/selection.js.map +1 -0
  85. package/dist/lib/solo-auto.d.ts +87 -0
  86. package/dist/lib/solo-auto.d.ts.map +1 -0
  87. package/dist/lib/solo-auto.js +1230 -0
  88. package/dist/lib/solo-auto.js.map +1 -0
  89. package/dist/lib/solo-ci.d.ts +84 -0
  90. package/dist/lib/solo-ci.d.ts.map +1 -0
  91. package/dist/lib/solo-ci.js +300 -0
  92. package/dist/lib/solo-ci.js.map +1 -0
  93. package/dist/lib/solo-config.d.ts +155 -0
  94. package/dist/lib/solo-config.d.ts.map +1 -0
  95. package/dist/lib/solo-config.js +236 -0
  96. package/dist/lib/solo-config.js.map +1 -0
  97. package/dist/lib/solo-git.d.ts +44 -0
  98. package/dist/lib/solo-git.d.ts.map +1 -0
  99. package/dist/lib/solo-git.js +174 -0
  100. package/dist/lib/solo-git.js.map +1 -0
  101. package/dist/lib/solo-hints.d.ts +32 -0
  102. package/dist/lib/solo-hints.d.ts.map +1 -0
  103. package/dist/lib/solo-hints.js +98 -0
  104. package/dist/lib/solo-hints.js.map +1 -0
  105. package/dist/lib/solo-remote.d.ts +14 -0
  106. package/dist/lib/solo-remote.d.ts.map +1 -0
  107. package/dist/lib/solo-remote.js +48 -0
  108. package/dist/lib/solo-remote.js.map +1 -0
  109. package/dist/lib/solo-stdin.d.ts +13 -0
  110. package/dist/lib/solo-stdin.d.ts.map +1 -0
  111. package/dist/lib/solo-stdin.js +33 -0
  112. package/dist/lib/solo-stdin.js.map +1 -0
  113. package/dist/lib/solo-ticket.d.ts +213 -0
  114. package/dist/lib/solo-ticket.d.ts.map +1 -0
  115. package/dist/lib/solo-ticket.js +850 -0
  116. package/dist/lib/solo-ticket.js.map +1 -0
  117. package/dist/lib/solo-utils.d.ts +133 -0
  118. package/dist/lib/solo-utils.d.ts.map +1 -0
  119. package/dist/lib/solo-utils.js +300 -0
  120. package/dist/lib/solo-utils.js.map +1 -0
  121. package/dist/lib/spindle.d.ts +144 -0
  122. package/dist/lib/spindle.d.ts.map +1 -0
  123. package/dist/lib/spindle.js +388 -0
  124. package/dist/lib/spindle.js.map +1 -0
  125. package/dist/tui/app.d.ts +17 -0
  126. package/dist/tui/app.d.ts.map +1 -0
  127. package/dist/tui/app.js +139 -0
  128. package/dist/tui/app.js.map +1 -0
  129. package/dist/tui/index.d.ts +8 -0
  130. package/dist/tui/index.d.ts.map +1 -0
  131. package/dist/tui/index.js +7 -0
  132. package/dist/tui/index.js.map +1 -0
  133. package/dist/tui/poller.d.ts +42 -0
  134. package/dist/tui/poller.d.ts.map +1 -0
  135. package/dist/tui/poller.js +62 -0
  136. package/dist/tui/poller.js.map +1 -0
  137. package/dist/tui/screens/overview.d.ts +9 -0
  138. package/dist/tui/screens/overview.d.ts.map +1 -0
  139. package/dist/tui/screens/overview.js +189 -0
  140. package/dist/tui/screens/overview.js.map +1 -0
  141. package/dist/tui/state.d.ts +93 -0
  142. package/dist/tui/state.d.ts.map +1 -0
  143. package/dist/tui/state.js +169 -0
  144. package/dist/tui/state.js.map +1 -0
  145. package/dist/tui/types.d.ts +18 -0
  146. package/dist/tui/types.d.ts.map +1 -0
  147. package/dist/tui/types.js +5 -0
  148. package/dist/tui/types.js.map +1 -0
  149. package/package.json +1 -1
@@ -0,0 +1,383 @@
1
+ /**
2
+ * Doctor checks for BlockSpool prerequisites
3
+ *
4
+ * Detects missing tools, auth issues, and configuration problems
5
+ * before users hit cryptic errors mid-workflow.
6
+ */
7
+ import { spawnSync } from 'node:child_process';
8
+ import * as fs from 'node:fs';
9
+ import * as path from 'node:path';
10
+ /**
11
+ * Helper to create CheckResult objects consistently
12
+ */
13
+ function createCheckResult(name, status, message, options) {
14
+ const result = { name, status, message };
15
+ if (options?.fix)
16
+ result.fix = options.fix;
17
+ if (options?.details)
18
+ result.details = options.details;
19
+ return result;
20
+ }
21
+ /**
22
+ * Run all doctor checks
23
+ */
24
+ export async function runDoctorChecks(options) {
25
+ const checks = [];
26
+ // 1. Git installed
27
+ checks.push(checkGitInstalled());
28
+ // 2. In a git repo
29
+ checks.push(checkIsGitRepo(options.repoRoot));
30
+ // 3. Node version
31
+ checks.push(checkNodeVersion());
32
+ // 4. Claude CLI installed
33
+ checks.push(checkClaudeInstalled());
34
+ // 5. Claude CLI authenticated
35
+ checks.push(await checkClaudeAuthenticated());
36
+ // 6. gh CLI installed (for --pr)
37
+ checks.push(checkGhInstalled());
38
+ // 7. gh CLI authenticated (for --pr)
39
+ checks.push(await checkGhAuthenticated());
40
+ // 8. .blockspool/ writable
41
+ checks.push(checkBlockspoolWritable(options.repoRoot));
42
+ // 9. Optional: ripgrep for faster scanning
43
+ checks.push(checkRipgrepInstalled());
44
+ // 10. SQLite native module
45
+ checks.push(await checkSqliteModule());
46
+ // Determine capabilities
47
+ const hasGit = checks.find(c => c.name === 'git')?.status === 'pass';
48
+ const isRepo = checks.find(c => c.name === 'git-repo')?.status === 'pass';
49
+ const hasClaude = checks.find(c => c.name === 'claude')?.status === 'pass';
50
+ const claudeAuth = checks.find(c => c.name === 'claude-auth')?.status === 'pass';
51
+ const hasGh = checks.find(c => c.name === 'gh')?.status === 'pass';
52
+ const ghAuth = checks.find(c => c.name === 'gh-auth')?.status === 'pass';
53
+ const writable = checks.find(c => c.name === 'blockspool-dir')?.status !== 'fail';
54
+ const hasSqlite = checks.find(c => c.name === 'sqlite')?.status === 'pass';
55
+ return {
56
+ checks,
57
+ canScout: hasGit && isRepo && writable && hasSqlite,
58
+ canRun: hasGit && isRepo && hasClaude && claudeAuth && writable && hasSqlite,
59
+ canPr: hasGit && isRepo && hasClaude && claudeAuth && hasGh && ghAuth && writable && hasSqlite,
60
+ };
61
+ }
62
+ /**
63
+ * Check: git installed
64
+ */
65
+ function checkGitInstalled() {
66
+ try {
67
+ const result = spawnSync('git', ['--version'], { encoding: 'utf-8' });
68
+ if (result.status === 0) {
69
+ const version = result.stdout.trim().replace('git version ', '');
70
+ return createCheckResult('git', 'pass', `git found (${version})`);
71
+ }
72
+ }
73
+ catch {
74
+ // Fall through to fail
75
+ }
76
+ return createCheckResult('git', 'fail', 'git not found', {
77
+ fix: 'Install git: https://git-scm.com/downloads',
78
+ });
79
+ }
80
+ /**
81
+ * Check: current directory is a git repo
82
+ */
83
+ function checkIsGitRepo(repoRoot) {
84
+ const cwd = repoRoot ?? process.cwd();
85
+ try {
86
+ const result = spawnSync('git', ['rev-parse', '--git-dir'], {
87
+ cwd,
88
+ encoding: 'utf-8',
89
+ });
90
+ if (result.status === 0) {
91
+ return createCheckResult('git-repo', 'pass', 'Inside a git repository');
92
+ }
93
+ }
94
+ catch {
95
+ // Fall through to fail
96
+ }
97
+ return createCheckResult('git-repo', 'fail', 'Not a git repository', {
98
+ fix: 'Run `git init` or cd into an existing repo',
99
+ });
100
+ }
101
+ /**
102
+ * Check: Node version is supported
103
+ */
104
+ function checkNodeVersion() {
105
+ const version = process.version;
106
+ const major = parseInt(version.slice(1).split('.')[0], 10);
107
+ // Require Node 18+ for ESM and modern features
108
+ if (major >= 18) {
109
+ return createCheckResult('node', 'pass', `Node ${version} (supported)`);
110
+ }
111
+ if (major >= 16) {
112
+ return createCheckResult('node', 'warn', `Node ${version} (may work, but 18+ recommended)`, {
113
+ fix: 'Upgrade to Node 18+: https://nodejs.org/',
114
+ });
115
+ }
116
+ return createCheckResult('node', 'fail', `Node ${version} (too old)`, {
117
+ fix: 'Upgrade to Node 18+: https://nodejs.org/',
118
+ });
119
+ }
120
+ /**
121
+ * Check: Claude CLI installed
122
+ */
123
+ function checkClaudeInstalled() {
124
+ try {
125
+ const result = spawnSync('claude', ['--version'], {
126
+ encoding: 'utf-8',
127
+ timeout: 5000,
128
+ });
129
+ if (result.status === 0) {
130
+ const version = result.stdout.trim();
131
+ return createCheckResult('claude', 'pass', `Claude CLI found (${version})`);
132
+ }
133
+ }
134
+ catch {
135
+ // Fall through to fail
136
+ }
137
+ return createCheckResult('claude', 'fail', 'Claude CLI not found', {
138
+ fix: 'Install Claude Code: https://claude.ai/code',
139
+ details: 'Required for `solo run` to execute tickets',
140
+ });
141
+ }
142
+ /**
143
+ * Check: Claude CLI authenticated
144
+ */
145
+ async function checkClaudeAuthenticated() {
146
+ try {
147
+ // Try a simple command that requires auth
148
+ const result = spawnSync('claude', ['--help'], {
149
+ encoding: 'utf-8',
150
+ timeout: 10000,
151
+ });
152
+ // If claude is installed, assume it handles its own auth
153
+ // We can't easily test auth without making an API call
154
+ if (result.status === 0) {
155
+ return createCheckResult('claude-auth', 'pass', 'Claude CLI accessible', {
156
+ details: 'Auth will be checked on first run',
157
+ });
158
+ }
159
+ }
160
+ catch {
161
+ // Fall through
162
+ }
163
+ // If Claude isn't installed, skip this check
164
+ return createCheckResult('claude-auth', 'warn', 'Could not verify Claude authentication', {
165
+ fix: 'Run `claude` and complete authentication',
166
+ });
167
+ }
168
+ /**
169
+ * Check: gh CLI installed
170
+ */
171
+ function checkGhInstalled() {
172
+ try {
173
+ const result = spawnSync('gh', ['--version'], {
174
+ encoding: 'utf-8',
175
+ timeout: 5000,
176
+ });
177
+ if (result.status === 0) {
178
+ const firstLine = result.stdout.split('\n')[0];
179
+ const version = firstLine.replace('gh version ', '').split(' ')[0];
180
+ return createCheckResult('gh', 'pass', `GitHub CLI found (${version})`);
181
+ }
182
+ }
183
+ catch {
184
+ // Fall through
185
+ }
186
+ return createCheckResult('gh', 'warn', 'GitHub CLI not found', {
187
+ fix: 'Install gh: https://cli.github.com/',
188
+ details: 'Only needed for `solo run --pr` to create PRs',
189
+ });
190
+ }
191
+ /**
192
+ * Check: gh CLI authenticated
193
+ */
194
+ async function checkGhAuthenticated() {
195
+ try {
196
+ const result = spawnSync('gh', ['auth', 'status'], {
197
+ encoding: 'utf-8',
198
+ timeout: 10000,
199
+ });
200
+ if (result.status === 0) {
201
+ // Parse the output to get the account
202
+ const match = result.stdout.match(/Logged in to .* as (\S+)/);
203
+ const account = match ? match[1] : 'authenticated';
204
+ return createCheckResult('gh-auth', 'pass', `GitHub CLI authenticated (${account})`);
205
+ }
206
+ // Check stderr for more info
207
+ if (result.stderr?.includes('not logged in')) {
208
+ return createCheckResult('gh-auth', 'warn', 'GitHub CLI not authenticated', {
209
+ fix: 'Run `gh auth login`',
210
+ details: 'Only needed for `solo run --pr` to create PRs',
211
+ });
212
+ }
213
+ }
214
+ catch {
215
+ // Fall through
216
+ }
217
+ return createCheckResult('gh-auth', 'warn', 'Could not verify GitHub authentication', {
218
+ fix: 'Run `gh auth login`',
219
+ details: 'Only needed for `solo run --pr` to create PRs',
220
+ });
221
+ }
222
+ /**
223
+ * Check: .blockspool/ directory is writable
224
+ */
225
+ function checkBlockspoolWritable(repoRoot) {
226
+ const cwd = repoRoot ?? process.cwd();
227
+ const blockspoolDir = path.join(cwd, '.blockspool');
228
+ try {
229
+ // Check if directory exists
230
+ if (fs.existsSync(blockspoolDir)) {
231
+ // Check if writable
232
+ fs.accessSync(blockspoolDir, fs.constants.W_OK);
233
+ return createCheckResult('blockspool-dir', 'pass', '.blockspool/ exists and is writable');
234
+ }
235
+ // Directory doesn't exist - check if we can create it
236
+ fs.accessSync(cwd, fs.constants.W_OK);
237
+ return createCheckResult('blockspool-dir', 'pass', '.blockspool/ can be created');
238
+ }
239
+ catch {
240
+ return createCheckResult('blockspool-dir', 'fail', 'Cannot write to .blockspool/', {
241
+ fix: 'Check directory permissions or run with appropriate access',
242
+ });
243
+ }
244
+ }
245
+ /**
246
+ * Check: ripgrep installed (optional, for faster scanning)
247
+ */
248
+ function checkRipgrepInstalled() {
249
+ try {
250
+ const result = spawnSync('rg', ['--version'], {
251
+ encoding: 'utf-8',
252
+ timeout: 5000,
253
+ });
254
+ if (result.status === 0) {
255
+ const version = result.stdout.split('\n')[0].replace('ripgrep ', '');
256
+ return createCheckResult('ripgrep', 'pass', `ripgrep found (${version})`, {
257
+ details: 'Enables faster code scanning',
258
+ });
259
+ }
260
+ }
261
+ catch {
262
+ // Fall through
263
+ }
264
+ return createCheckResult('ripgrep', 'warn', 'ripgrep not found (optional)', {
265
+ fix: 'Install rg: https://github.com/BurntSushi/ripgrep#installation',
266
+ details: 'Scanning will work but may be slower on large repos',
267
+ });
268
+ }
269
+ /**
270
+ * Check: SQLite native module
271
+ *
272
+ * better-sqlite3 is a native module that requires either:
273
+ * 1. Prebuild binary for the platform (automatic via prebuild-install)
274
+ * 2. Node-gyp build tools (python, c++ compiler)
275
+ */
276
+ async function checkSqliteModule() {
277
+ try {
278
+ // Try to import better-sqlite3 - this will fail if native module isn't built
279
+ const { default: Database } = await import('better-sqlite3');
280
+ // Try to create a temporary in-memory database
281
+ const db = new Database(':memory:');
282
+ db.exec('SELECT 1');
283
+ db.close();
284
+ return createCheckResult('sqlite', 'pass', 'SQLite native module loaded', {
285
+ details: 'better-sqlite3 working correctly',
286
+ });
287
+ }
288
+ catch (err) {
289
+ const error = err;
290
+ const message = error.message || String(err);
291
+ // Check for common native module errors
292
+ if (message.includes('Could not locate the bindings file') ||
293
+ message.includes('was compiled against a different Node.js version') ||
294
+ message.includes('NODE_MODULE_VERSION')) {
295
+ return createCheckResult('sqlite', 'fail', 'SQLite native module needs rebuild', {
296
+ fix: 'Run: npm rebuild better-sqlite3',
297
+ details: message,
298
+ });
299
+ }
300
+ if (message.includes('Cannot find module')) {
301
+ return createCheckResult('sqlite', 'fail', 'SQLite native module not installed', {
302
+ fix: 'Run: npm install better-sqlite3',
303
+ details: message,
304
+ });
305
+ }
306
+ // Generic failure
307
+ return createCheckResult('sqlite', 'fail', 'SQLite native module failed to load', {
308
+ fix: 'Try: npm rebuild better-sqlite3. If that fails, ensure you have build tools (python, c++ compiler)',
309
+ details: message,
310
+ });
311
+ }
312
+ }
313
+ /**
314
+ * Format doctor report for human-readable output
315
+ */
316
+ export function formatDoctorReport(report) {
317
+ const lines = [];
318
+ // Status icons
319
+ const icons = {
320
+ pass: '✅',
321
+ warn: '⚠️',
322
+ fail: '❌',
323
+ };
324
+ lines.push('BlockSpool Doctor\n');
325
+ // Group checks by status
326
+ const failed = report.checks.filter(c => c.status === 'fail');
327
+ const warned = report.checks.filter(c => c.status === 'warn');
328
+ const passed = report.checks.filter(c => c.status === 'pass');
329
+ // Show all checks
330
+ for (const check of report.checks) {
331
+ lines.push(`${icons[check.status]} ${check.message}`);
332
+ if (check.fix && check.status !== 'pass') {
333
+ lines.push(` fix: ${check.fix}`);
334
+ }
335
+ }
336
+ lines.push('');
337
+ // Summary
338
+ lines.push('Capabilities:');
339
+ lines.push(` ${report.canScout ? '✅' : '❌'} solo scout — Find improvement opportunities`);
340
+ lines.push(` ${report.canRun ? '✅' : '❌'} solo run — Execute tickets with Claude`);
341
+ lines.push(` ${report.canPr ? '✅' : '❌'} solo run --pr — Create PRs on GitHub`);
342
+ // Action items if there are failures
343
+ if (failed.length > 0) {
344
+ lines.push('');
345
+ lines.push('Action required:');
346
+ for (const check of failed) {
347
+ if (check.fix) {
348
+ lines.push(` • ${check.fix}`);
349
+ }
350
+ }
351
+ }
352
+ // Warnings that might affect workflow
353
+ if (warned.length > 0 && failed.length === 0) {
354
+ lines.push('');
355
+ lines.push('Optional improvements:');
356
+ for (const check of warned) {
357
+ if (check.fix) {
358
+ lines.push(` • ${check.fix}`);
359
+ }
360
+ }
361
+ }
362
+ return lines.join('\n');
363
+ }
364
+ /**
365
+ * Format doctor report as JSON
366
+ */
367
+ export function formatDoctorReportJson(report) {
368
+ return JSON.stringify({
369
+ checks: report.checks.map(c => ({
370
+ name: c.name,
371
+ status: c.status,
372
+ message: c.message,
373
+ fix: c.fix,
374
+ details: c.details,
375
+ })),
376
+ capabilities: {
377
+ scout: report.canScout,
378
+ run: report.canRun,
379
+ pr: report.canPr,
380
+ },
381
+ }, null, 2);
382
+ }
383
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/lib/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Node.js ExecRunner implementation
3
+ *
4
+ * Spawns commands, captures output to artifact files,
5
+ * handles timeout/cancellation, and returns structured results.
6
+ */
7
+ import type { ExecRunner, ExecSpec, ExecResult } from '@blockspool/core';
8
+ export interface NodeExecRunnerOptions {
9
+ defaultMaxLogBytes?: number;
10
+ defaultTailBytes?: number;
11
+ killGraceMs?: number;
12
+ }
13
+ export declare class NodeExecRunner implements ExecRunner {
14
+ private readonly defaultMaxLogBytes;
15
+ private readonly defaultTailBytes;
16
+ private readonly killGraceMs;
17
+ constructor(opts?: NodeExecRunnerOptions);
18
+ run(spec: ExecSpec): Promise<ExecResult>;
19
+ }
20
+ /**
21
+ * Create a Node exec runner with default options
22
+ */
23
+ export declare function createExecRunner(opts?: NodeExecRunnerOptions): ExecRunner;
24
+ //# sourceMappingURL=exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/lib/exec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EAGX,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA0FD,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,IAAI,GAAE,qBAA0B;IAMtC,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;CA8N/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,UAAU,CAEzE"}