From 6a41e2c8c75ebc5e7192449dd9dfc3b2ed8ec900 Mon Sep 17 00:00:00 2001 From: Eddy Date: Sat, 2 May 2026 23:03:29 +0200 Subject: [PATCH] fix: Permission-Mode (Yolo) an Claude CLI durchreichen [appimage] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Bridge hat bisher set-permission-mode komplett ignoriert. Jetzt wird --permission-mode als CLI-Flag an claude übergeben. Auch context und resumeSessionId werden jetzt korrekt durchgereicht (--append-system-prompt und --resume). Behebt: Yolo-Modus hatte keinen Effekt, Claude fragte trotzdem nach. Co-Authored-By: Claude Opus 4.6 --- src-tauri/scripts/claude-bridge.js | 52 ++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 6 deletions(-) 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) {