Fix: Bridge --verbose Flag + korrekte Event-Extraktion

- --verbose ist Pflicht für --output-format stream-json
- total_cost_usd statt cost_usd für Kosten
- usage.input_tokens/output_tokens + Cache-Info
- Session-ID aus system.init Events
- rate_limit_event ignorieren
- allowedTools entfernt (Claude entscheidet selbst)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Eddy 2026-04-13 20:32:32 +02:00
parent e48519fff4
commit 3e5021dbf0

View file

@ -51,8 +51,7 @@ function spawnClaude(message, requestId) {
const args = [ const args = [
'-p', // Print-Modus (nicht interaktiv) '-p', // Print-Modus (nicht interaktiv)
'--output-format', 'stream-json', // Streaming JSON Events '--output-format', 'stream-json', // Streaming JSON Events
'--allowedTools', 'Read', 'Glob', 'Grep', 'Bash', 'Edit', 'Write', '--verbose', // Pflicht für stream-json
'WebFetch', 'WebSearch', 'Agent',
]; ];
// Bei Fortsetzung letzte Session verwenden // Bei Fortsetzung letzte Session verwenden
@ -147,11 +146,15 @@ function handleClaudeEvent(event, agentId, requestId, textState) {
switch (type) { switch (type) {
case 'system': case 'system':
if (event.subtype === 'session_id' && event.session_id) { if (event.session_id) {
currentSessionId = event.session_id; currentSessionId = event.session_id;
} }
break; break;
case 'rate_limit_event':
// Ignorieren
break;
case 'assistant': case 'assistant':
// Vollständige Nachricht — Inhalt extrahieren // Vollständige Nachricht — Inhalt extrahieren
if (event.message?.content) { if (event.message?.content) {
@ -204,13 +207,16 @@ function handleClaudeEvent(event, agentId, requestId, textState) {
// Endergebnis mit Kosten // Endergebnis mit Kosten
sendEvent('result', { sendEvent('result', {
text: event.result || '', text: event.result || '',
cost: event.cost_usd || event.cost || 0, cost: event.total_cost_usd || event.cost_usd || 0,
tokens: { tokens: {
input: event.input_tokens || 0, input: event.usage?.input_tokens || 0,
output: event.output_tokens || 0, output: event.usage?.output_tokens || 0,
cache_read: event.usage?.cache_read_input_tokens || 0,
cache_create: event.usage?.cache_creation_input_tokens || 0,
}, },
session_id: event.session_id || currentSessionId, session_id: event.session_id || currentSessionId,
duration_ms: event.duration_ms || 0, duration_ms: event.duration_ms || 0,
num_turns: event.num_turns || 0,
}); });
// Session-ID für Fortsetzung merken // Session-ID für Fortsetzung merken