fix: Permission-Mode (Yolo) an Claude CLI durchreichen [appimage]
Some checks failed
Build AppImage / build (push) Failing after 2m14s

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 <noreply@anthropic.com>
This commit is contained in:
Eddy 2026-05-02 23:03:29 +02:00
parent acc218c17c
commit 6a41e2c8c7

View file

@ -8,6 +8,8 @@ const readline = require('readline');
// State // State
let claudeProcess = null; let claudeProcess = null;
let abortController = null; let abortController = null;
let currentPermissionMode = 'default';
let currentResumeSessionId = null;
// Event an Rust senden // Event an Rust senden
function emit(event, payload) { function emit(event, payload) {
@ -22,7 +24,7 @@ function respond(id, result, error = null) {
} }
// Claude Code als Subprocess starten // Claude Code als Subprocess starten
async function startClaude(message, requestId) { async function startClaude(message, requestId, context, resumeSessionId) {
abortController = new AbortController(); abortController = new AbortController();
emit('agent-started', { emit('agent-started', {
@ -32,11 +34,35 @@ async function startClaude(message, requestId) {
}); });
try { 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 // Claude Code CLI aufrufen
claudeProcess = spawn('claude', [ claudeProcess = spawn('claude', args, {
'--output-format', 'stream-json',
'-p', message
], {
signal: abortController.signal, signal: abortController.signal,
env: { ...process.env, FORCE_COLOR: '0' } env: { ...process.env, FORCE_COLOR: '0' }
}); });
@ -172,7 +198,20 @@ rl.on('line', (line) => {
switch (msg.command) { switch (msg.command) {
case 'message': 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; break;
case 'stop': case 'stop':
stopAll(); stopAll();
@ -182,6 +221,7 @@ rl.on('line', (line) => {
respond(msg.id, 'pong'); respond(msg.id, 'pong');
break; break;
default: default:
emit('log', { level: 'warn', message: `Unbekannter Befehl: ${msg.command}` });
respond(msg.id, null, `Unbekannter Befehl: ${msg.command}`); respond(msg.id, null, `Unbekannter Befehl: ${msg.command}`);
} }
} catch (e) { } catch (e) {