diff --git a/agents/claude.ts b/agents/claude.ts index 3393640..3deec74 100644 --- a/agents/claude.ts +++ b/agents/claude.ts @@ -39,8 +39,8 @@ export class ClaudeAgent implements Agent { // Create a temporary file for the prompt const promptFile = createTempFile(prompt, "prompt.txt"); - // Execute Claude Code with the prompt - const command = `$HOME/.local/bin/claude --dangerously-skip-permissions "${promptFile}"`; + // Execute Claude Code with the prompt using proper headless mode + const command = `$HOME/.local/bin/claude -p "${promptFile}" --output-format json --permission-mode acceptEdits`; core.info(`Executing: ${command}`); const { stdout, stderr } = await executeCommand(command, { @@ -51,20 +51,33 @@ export class ClaudeAgent implements Agent { core.warning(`Claude Code stderr: ${stderr}`); } - if (stdout) { + // Parse JSON response from Claude Code + let claudeResponse: any; + try { + claudeResponse = JSON.parse(stdout); + } catch { + core.warning("Failed to parse Claude Code JSON response, using raw output"); + claudeResponse = { result: stdout }; + } + + if (claudeResponse.result) { core.info("Claude Code output:"); - console.log(stdout); + console.log(claudeResponse.result); } core.info("Claude Code executed successfully"); return { - success: true, - output: stdout, - error: stderr || undefined, + success: !claudeResponse.is_error, + output: claudeResponse.result || stdout, + error: claudeResponse.is_error ? claudeResponse.result : (stderr || undefined), metadata: { promptFile, command, + session_id: claudeResponse.session_id, + cost_usd: claudeResponse.total_cost_usd, + duration_ms: claudeResponse.duration_ms, + num_turns: claudeResponse.num_turns, }, }; } catch (error) { diff --git a/index.cjs b/index.cjs index 8de35e7..4ac379a 100644 --- a/index.cjs +++ b/index.cjs @@ -19861,7 +19861,7 @@ var ClaudeAgent = class { core.info("Executing Claude Code..."); try { const promptFile = createTempFile(prompt, "prompt.txt"); - const command = `$HOME/.local/bin/claude --dangerously-skip-permissions "${promptFile}"`; + const command = `$HOME/.local/bin/claude -p "${promptFile}" --output-format json --permission-mode acceptEdits`; core.info(`Executing: ${command}`); const { stdout, stderr } = await executeCommand(command, { ANTHROPIC_API_KEY: this.apiKey @@ -19869,18 +19869,29 @@ var ClaudeAgent = class { if (stderr) { core.warning(`Claude Code stderr: ${stderr}`); } - if (stdout) { + let claudeResponse; + try { + claudeResponse = JSON.parse(stdout); + } catch { + core.warning("Failed to parse Claude Code JSON response, using raw output"); + claudeResponse = { result: stdout }; + } + if (claudeResponse.result) { core.info("Claude Code output:"); - console.log(stdout); + console.log(claudeResponse.result); } core.info("Claude Code executed successfully"); return { - success: true, - output: stdout, - error: stderr || void 0, + success: !claudeResponse.is_error, + output: claudeResponse.result || stdout, + error: claudeResponse.is_error ? claudeResponse.result : stderr || void 0, metadata: { promptFile, - command + command, + session_id: claudeResponse.session_id, + cost_usd: claudeResponse.total_cost_usd, + duration_ms: claudeResponse.duration_ms, + num_turns: claudeResponse.num_turns } }; } catch (error) {