From c64c0278f2396c3908ff57aa8511d72c086f4039 Mon Sep 17 00:00:00 2001 From: Janpeter Visser <30029041+madhura68@users.noreply.github.com> Date: Thu, 14 May 2026 19:29:14 +0200 Subject: [PATCH] feat(worker): configureerbare Claude --output-format, default stream-json (IDEA-064) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit run-one-job.ts spawnde Claude met een hardcoded --output-format text, dus de run-log bevatte alleen Claude's eind-samenvatting — geen zicht op het werk tijdens een job (~6-10 min stilte, dan ineens de samenvatting). - --output-format komt nu uit AGENT_CLAUDE_OUTPUT_FORMAT (default 'stream-json'). stream-json streamt elke tool-call / elk bericht live naar de run-log; --verbose wordt automatisch toegevoegd want print-mode vereist dat bij stream-json. - Zet AGENT_CLAUDE_OUTPUT_FORMAT=text terug voor de oude terse output. - .env.example: nieuwe var gedocumenteerd. stdoutBuf wordt alleen voor de TOKEN_EXPIRED-regexscan gebruikt; de auth-error-strings staan ook binnen de JSON-events, dus detectie werkt ongewijzigd. Niets parseert de output als job-resultaat. Gevolg: de run-log (en de jobs/.log symlink uit IDEA-063) wordt JSONL i.p.v. plain text — gebruik jq of een viewer. Log-grootte groeit; rotate-logs.sh dekt dat al af. node --check + type-strip schoon. Co-Authored-By: Claude Opus 4.7 (1M context) --- .env.example | 6 ++++++ bin/run-one-job.ts | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 3f3a523..0acc9f9 100644 --- a/.env.example +++ b/.env.example @@ -108,3 +108,9 @@ AGENT_BACKOFF_MAX=300 AGENT_LOG_GZIP_AFTER_HOURS=24 # Hoeveel dagen ge-gzipte logs bewaren voor we ze verwijderen. AGENT_LOG_DELETE_AFTER_DAYS=30 + +# Claude CLI --output-format. Default 'stream-json' streamt de volledige +# event-stream (tool-calls, berichten) live naar de run-log; 'text' geeft +# alleen Claude's eind-samenvatting (terser, maar geen live-meekijken). +# stream-json maakt de run-log JSONL — gebruik jq of een viewer. +AGENT_CLAUDE_OUTPUT_FORMAT=stream-json diff --git a/bin/run-one-job.ts b/bin/run-one-job.ts index cd0919c..8155fea 100644 --- a/bin/run-one-job.ts +++ b/bin/run-one-job.ts @@ -292,6 +292,13 @@ async function main(): Promise { // 7. Build CLI args. const promptText = getKindPromptText(ctx.kind).replace('$PAYLOAD_PATH', payloadPath) + // --output-format is configureerbaar via env. Default 'stream-json' geeft + // de volledige event-stream (elke tool-call, elk bericht) live in de + // run-log, i.p.v. alleen Claude's eind-samenvatting. stream-json vereist + // --verbose in print-mode. Zet AGENT_CLAUDE_OUTPUT_FORMAT=text terug voor + // de oude terse output. TOKEN_EXPIRED-detectie werkt ongewijzigd: de + // auth-error-strings staan ook binnen de JSON-events. + const outputFormat = process.env.AGENT_CLAUDE_OUTPUT_FORMAT ?? 'stream-json' const args: string[] = [ '-p', promptText, @@ -306,8 +313,9 @@ async function main(): Promise { '--add-dir', '/opt/agent', '--output-format', - 'text', + outputFormat, ] + if (outputFormat === 'stream-json') args.push('--verbose') if (effort) args.push('--effort', effort) const cwd = worktreePath ?? '/opt/agent'