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.
This commit is contained in:
ARIA
2026-07-20 00:15:39 +00:00
parent 5c5391b16e
commit 8f3a07adb4
+22
View File
@@ -30,6 +30,27 @@ services:
# Server, CLAUDE.md, ...) fuer diese Session — eingebaute Tools # Server, CLAUDE.md, ...) fuer diese Session — eingebaute Tools
# (Bash/Read/...) bleiben an, sind hier aber ungenutzt. Danach sieht # (Bash/Read/...) bleiben an, sind hier aber ungenutzt. Danach sieht
# Claude NUR noch die per Prompt injizierten externen Tools. # 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 # Adapter-Patches (proxy-patches/*.js) sind 1:1 aus dem ARIA-Proxy
# uebernommen — sie sind generisch (implementieren nur die # 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 '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 '/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|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/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/cli-to-openai.js $$DIST/adapter/cli-to-openai.js &&
claude-max-api" claude-max-api"