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
|
||||
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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue