From 8f3a07adb428060ff20731558962584649194420 Mon Sep 17 00:00:00 2001 From: ARIA Date: Mon, 20 Jul 2026 00:15:39 +0000 Subject: [PATCH] fix: routes.js reicht cliInput.systemPrompt nie an subprocess.start() durch Root Cause fuer "Claude kennt Hermes-Tools nicht" gefunden: unser openai-to-cli.js baut systemPrompt korrekt, manager.js liest options.systemPrompt korrekt fuer --system-prompt -- aber der stock npm-Code in server/routes.js kopiert beim subprocess.start(cliInput.prompt, {model, sessionId}) nur model+ sessionId, nie systemPrompt. Also war options.systemPrompt immer undefined, --system-prompt kam nie mit echtem Inhalt an, Claude lief die ganze Zeit mit seiner eigenen Default-Identitaet statt der injizierten Hermes-Tools. Neuer sed patcht jetzt auch routes.js und reicht systemPrompt durch (trifft beide Call-Sites: Streaming + Non-Streaming). Verifiziert lokal gegen das echte npm-Paket claude-max-api-proxy@1.0.0. --- docker-compose.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index ec1111c..b84ea73 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -30,6 +30,27 @@ services: # Server, CLAUDE.md, ...) fuer diese Session — eingebaute Tools # (Bash/Read/...) bleiben an, sind hier aber ungenutzt. Danach sieht # Claude NUR noch die per Prompt injizierten externen Tools. + # - ECHTER ROOT CAUSE fuer "Claude kennt Hermes-Tools ueberhaupt nicht" + # (gefunden 20.07.2026, npm-Paket claude-max-api-proxy@1.0.0 lokal + # gezogen und Zeile fuer Zeile nachverfolgt statt weiter zu raten): + # Unser eigener openai-to-cli.js-Patch baut korrekt ein Objekt + # { prompt, systemPrompt, model, sessionId } (systemPrompt = der ganze + # Tool-Block + System-Messages, siehe extractSystemPrompt()). Der + # manager.js-Sed-Patch unten liest korrekt options.systemPrompt fuer + # den --system-prompt-Flag. ABER: dazwischen liegt server/routes.js + # (STOCK npm-Code, von uns bisher NICHT gepatcht!) — und genau dort + # wird beim Aufruf von subprocess.start(cliInput.prompt, {...}) nur + # { model: cliInput.model, sessionId: cliInput.sessionId } durchgereicht. + # cliInput.systemPrompt wird schlicht NIE in dieses Options-Objekt + # kopiert. Ergebnis: options.systemPrompt ist in manager.js IMMER + # undefined, --system-prompt kam nie mit echtem Inhalt an, Claude lief + # die ganze Zeit mit seiner EIGENEN Default-Identitaet (daher exakt die + # "Web-Suche/Datei-Tools/Terminal/Kalender-Mail-Drive(Google)/Cron"- + # Antwort — das sind Claude Codes eigene Bordmittel, nicht Hermes' + # Tools). Der zusaetzliche sed unten patcht jetzt auch routes.js und + # reicht cliInput.systemPrompt endlich durch (trifft beide Call-Sites: + # Streaming- UND Non-Streaming-Handler, da beide exakt + # "model: cliInput.model," enthalten). # # Adapter-Patches (proxy-patches/*.js) sind 1:1 aus dem ARIA-Proxy # uebernommen — sie sind generisch (implementieren nur die @@ -58,6 +79,7 @@ services: 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 && + sed -i 's/model: cliInput\\.model,/model: cliInput.model, systemPrompt: cliInput.systemPrompt,/' $$DIST/server/routes.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 && claude-max-api"