diff --git a/src-tauri/scripts/claude-bridge.js b/src-tauri/scripts/claude-bridge.js index 7400a47..6383497 100644 --- a/src-tauri/scripts/claude-bridge.js +++ b/src-tauri/scripts/claude-bridge.js @@ -8,6 +8,8 @@ const readline = require('readline'); // State let claudeProcess = null; let abortController = null; +let currentPermissionMode = 'default'; +let currentResumeSessionId = null; // Event an Rust senden function emit(event, payload) { @@ -22,7 +24,7 @@ function respond(id, result, error = null) { } // Claude Code als Subprocess starten -async function startClaude(message, requestId) { +async function startClaude(message, requestId, context, resumeSessionId) { abortController = new AbortController(); emit('agent-started', { @@ -32,11 +34,35 @@ async function startClaude(message, requestId) { }); try { + // CLI-Args aufbauen + const args = ['--output-format', 'stream-json']; + + // Permission-Modus: direkt als CLI-Flag durchreichen + if (currentPermissionMode && currentPermissionMode !== 'default') { + args.push('--permission-mode', currentPermissionMode); + } + + // Resume-Session: vorherige Claude-Session fortsetzen + const sid = resumeSessionId || currentResumeSessionId; + if (sid) { + args.push('--resume', sid); + } + + // Context als System-Prompt anhängen + if (context) { + args.push('--append-system-prompt', context); + } + + // Nachricht als Prompt + args.push('-p', message); + + emit('log', { + level: 'info', + message: `CLI args: claude ${args.filter(a => a !== context).join(' ')} [permMode=${currentPermissionMode}]` + }); + // Claude Code CLI aufrufen - claudeProcess = spawn('claude', [ - '--output-format', 'stream-json', - '-p', message - ], { + claudeProcess = spawn('claude', args, { signal: abortController.signal, env: { ...process.env, FORCE_COLOR: '0' } }); @@ -172,7 +198,20 @@ rl.on('line', (line) => { switch (msg.command) { case 'message': - startClaude(msg.message, msg.id); + startClaude(msg.message, msg.id, msg.context, msg.resumeSessionId); + break; + case 'set-permission-mode': + currentPermissionMode = msg.mode || 'default'; + emit('log', { level: 'info', message: `Permission-Modus: ${currentPermissionMode}` }); + respond(msg.id, `permission-mode=${currentPermissionMode}`); + break; + case 'set-mode': + // Agent-Modus (solo/handlanger/experten/auto) — wird aktuell nicht an CLI weitergegeben + respond(msg.id, `mode=${msg.mode}`); + break; + case 'set-model': + // Modell-Wechsel — wird aktuell nicht an CLI weitergegeben + respond(msg.id, `model=${msg.model}`); break; case 'stop': stopAll(); @@ -182,6 +221,7 @@ rl.on('line', (line) => { respond(msg.id, 'pong'); break; default: + emit('log', { level: 'warn', message: `Unbekannter Befehl: ${msg.command}` }); respond(msg.id, null, `Unbekannter Befehl: ${msg.command}`); } } catch (e) {