From 73d5bbd7be2bbdc077e4a2518fc5e80319a5b3c7 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Mon, 1 Jun 2026 08:16:13 +0200 Subject: [PATCH] =?UTF-8?q?fix(proxy):=20Prompt=20an=20claude-CLI=20via=20?= =?UTF-8?q?stdin=20statt=20argv=20=E2=80=94=20fix=20Bad=20Gateway=20durch?= =?UTF-8?q?=20E2BIG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wurzel: claude-max-api-proxy's subprocess/manager.js passt den Prompt als letztes CLI-Argument an spawn('claude', [...args, prompt]). Bei ARIA's groesseren Prompts (52 Messages + 24 Tools = ~80-100 KB) ueber- schreitet das den Linux-Kernel-Limit fuer Argument-Listen → spawn wirft E2BIG → Proxy gibt 500 zurueck → Brain wirft 502 → aria-bridge wrappt als '[Brain-Fehler] HTTP Error 502: Bad Gateway' und sendet das als Chat-Bubble + TTS. Stefan sieht 'Bad Gateway' und die App spricht das auch noch aus. Fix per zwei zusaetzlichen sed-Patches in docker-compose.yml die beim Proxy-Start neben den bestehenden ausgefuehrt werden: 1. Loescht die 'prompt, // Pass prompt as argument'-Zeile aus buildArgs() — claude-CLI bekommt den Prompt nicht mehr per argv 2. Aendert this.process.stdin?.end() in start() zu this.process.stdin?.end(prompt) — Prompt wird nach Spawn via stdin geschrieben und stdin sofort danach geschlossen Test: 'echo "test" | claude --print' funktioniert sauber. Stdin hat kein Limit wie argv (E2BIG). Original-Kommentar 'more reliable than stdin' war wohl von einer alten CLI-Version — aktuelles claude-CLI reads stdin in --print mode korrekt. Idempotent: beim Container-Restart sind die seds no-op (gemusterter Code schon nicht mehr da). Bonus-Wert: claude-max-api-proxy npm package muss man nicht patchen, unsere Aenderungen ueberleben package-Updates (sed im compose-command). --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index f9a4e96..9d92a75 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,6 +13,8 @@ services: sed -i 's/startServer({ port })/startServer({ port, host: process.env.HOST || \"127.0.0.1\" })/' $$DIST/server/standalone.js && sed -i 's/\"--no-session-persistence\",/\"--no-session-persistence\",\"--dangerously-skip-permissions\",/' $$DIST/subprocess/manager.js && sed -i 's/const DEFAULT_TIMEOUT = 300000;/const DEFAULT_TIMEOUT = 86400000;/' $$DIST/subprocess/manager.js && + sed -i '/prompt, \\/\\/ Pass prompt as argument/d' $$DIST/subprocess/manager.js && + sed -i 's|this\\.process\\.stdin?\\.end();|this.process.stdin?.end(prompt);|' $$DIST/subprocess/manager.js && cp /proxy-patches/openai-to-cli.js $$DIST/adapter/openai-to-cli.js && cp /proxy-patches/cli-to-openai.js $$DIST/adapter/cli-to-openai.js && cp /proxy-patches/routes.js $$DIST/server/routes.js &&