@damper/cli 0.5.4 → 0.5.6
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.
- package/dist/index.js +1 -1
- package/dist/services/claude.js +45 -14
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { statusCommand } from './commands/status.js';
|
|
|
5
5
|
import { cleanupCommand } from './commands/cleanup.js';
|
|
6
6
|
import { setupCommand } from './commands/setup.js';
|
|
7
7
|
import { releaseCommand } from './commands/release.js';
|
|
8
|
-
const VERSION = '0.5.
|
|
8
|
+
const VERSION = '0.5.6';
|
|
9
9
|
function showHelp() {
|
|
10
10
|
console.log(`
|
|
11
11
|
${pc.bold('@damper/cli')} - Agent orchestration for Damper tasks
|
package/dist/services/claude.js
CHANGED
|
@@ -126,12 +126,10 @@ export async function launchClaude(options) {
|
|
|
126
126
|
'--mcp-config', mcpConfigPath,
|
|
127
127
|
initialPrompt,
|
|
128
128
|
];
|
|
129
|
-
// Launch Claude Code
|
|
129
|
+
// Launch Claude Code using spawnSync for reliable TTY handling
|
|
130
130
|
try {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
// MCP config is passed, prompt is simple
|
|
134
|
-
await execa('claude', [
|
|
131
|
+
const { spawnSync } = await import('node:child_process');
|
|
132
|
+
const result = spawnSync('claude', [
|
|
135
133
|
'--mcp-config', mcpConfigPath,
|
|
136
134
|
initialPrompt
|
|
137
135
|
], {
|
|
@@ -142,14 +140,17 @@ export async function launchClaude(options) {
|
|
|
142
140
|
DAMPER_API_KEY: apiKey,
|
|
143
141
|
},
|
|
144
142
|
});
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
143
|
+
if (result.error) {
|
|
144
|
+
const error = result.error;
|
|
145
|
+
if (error.code === 'ENOENT') {
|
|
146
|
+
console.log(pc.red('\nError: Claude Code CLI not found.'));
|
|
147
|
+
console.log(pc.dim('Install it with: npm install -g @anthropic-ai/claude-code\n'));
|
|
148
|
+
process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
throw result.error;
|
|
152
151
|
}
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
153
154
|
// Claude exited with error - still continue to post-task flow
|
|
154
155
|
}
|
|
155
156
|
finally {
|
|
@@ -305,8 +306,38 @@ export async function postTaskFlow(options) {
|
|
|
305
306
|
}
|
|
306
307
|
}
|
|
307
308
|
else if (taskStatus === 'in_progress') {
|
|
308
|
-
|
|
309
|
-
|
|
309
|
+
// Task not completed - offer options
|
|
310
|
+
const action = await select({
|
|
311
|
+
message: 'Task is still in progress. What would you like to do?',
|
|
312
|
+
choices: [
|
|
313
|
+
{ name: 'Keep for later (resume with npx @damper/cli)', value: 'keep' },
|
|
314
|
+
{ name: 'Release task and remove worktree', value: 'release' },
|
|
315
|
+
],
|
|
316
|
+
});
|
|
317
|
+
if (action === 'release') {
|
|
318
|
+
// Release the task back to planned
|
|
319
|
+
try {
|
|
320
|
+
const api = createDamperApi(apiKey);
|
|
321
|
+
await api.abandonTask(taskId, 'Released via CLI');
|
|
322
|
+
console.log(pc.green(`✓ Task released back to planned status`));
|
|
323
|
+
}
|
|
324
|
+
catch (err) {
|
|
325
|
+
const error = err;
|
|
326
|
+
console.log(pc.yellow(`Could not release task: ${error.message}`));
|
|
327
|
+
}
|
|
328
|
+
// Remove worktree
|
|
329
|
+
try {
|
|
330
|
+
await removeWorktreeDir(cwd, projectRoot);
|
|
331
|
+
console.log(pc.green('✓ Worktree and branch removed\n'));
|
|
332
|
+
}
|
|
333
|
+
catch (err) {
|
|
334
|
+
const error = err;
|
|
335
|
+
console.log(pc.red(`Failed to remove worktree: ${error.message}\n`));
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
console.log(pc.dim('\nRun `npx @damper/cli` to resume later.\n'));
|
|
340
|
+
}
|
|
310
341
|
}
|
|
311
342
|
}
|
|
312
343
|
/**
|