fix: Permission-Mode (Yolo) an Claude CLI durchreichen [appimage]
Some checks failed
Build AppImage / build (push) Failing after 2m14s
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:
parent
acc218c17c
commit
6a41e2c8c7
1 changed files with 46 additions and 6 deletions
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue