Remote-Keep-Alive gegen 180s-Timeout + System-Prompt via Datei
Task 1 – Remote-Befehle laufen nicht mehr in einen starren 180s-Timeout:
- RemoteConnectionManager.ExecuteCommand nutzt jetzt einen INAKTIVITÄTS-
Timeout (Watchdog auf LastProgressAt) statt hartem Wall-Clock-Limit; ein
Befehl darf beliebig lange laufen, solange der Client Progress-Frames sendet.
- RemoteEndpoint: neuer "progress"-Case setzt die Frist zurück.
- InternalEndpoint (MCP-Pfad remote_execute): hartes CancellationTokenSource(180s)
entfernt → nutzt konfigurierbares ExecuteTimeout-Setting + RequestAborted.
- remote.ps1 / remote.sh: senden während laufender Befehle alle 15s ein
{"type":"progress"}-Keep-Alive; async stdout/stderr-Lesen gegen Pipe-Deadlocks.
- ToolService: Tool-Beschreibungen erklären den Inaktivitäts-Timeout.
Task 2 – System-Prompt über --system-prompt-file statt CLI-Argument:
- ClaudeCliService schreibt den vollen System-Prompt in eine Temp-Datei und
übergibt --system-prompt-file, um das Windows-Kommandozeilen-Längenlimit zu
umgehen. Cleanup im finally. Agent-Verhalten unverändert (MEMORY.md bleibt inline).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
9db9bd4cc7
commit
ace5036f00
7 files changed
+118
-26
No files matched your search
+18
-10
@@ -272,18 +272,26 @@ def main():
|
||||
stderr = ""
|
||||
|
||||
try:
|
||||
result = subprocess.run(
|
||||
proc = subprocess.Popen(
|
||||
["bash", "-c", command],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=300
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
text=True
|
||||
)
|
||||
stdout = result.stdout
|
||||
stderr = result.stderr
|
||||
exit_code = result.returncode
|
||||
except subprocess.TimeoutExpired:
|
||||
stderr = "Timeout nach 300 Sekunden"
|
||||
exit_code = 124
|
||||
# Warten und dabei periodisch ein Keep-Alive senden, damit lange Befehle
|
||||
# nicht in den Server-Inaktivitaets-Timeout laufen. communicate(timeout)
|
||||
# liest die Pipes leer (kein Deadlock) und laesst den Prozess bei einem
|
||||
# Timeout weiterlaufen -> beliebig lange Laufzeit moeglich.
|
||||
while True:
|
||||
try:
|
||||
stdout, stderr = proc.communicate(timeout=15)
|
||||
break
|
||||
except subprocess.TimeoutExpired:
|
||||
try:
|
||||
ws.send('{"type":"progress"}')
|
||||
except Exception:
|
||||
pass
|
||||
exit_code = proc.returncode
|
||||
except Exception as e:
|
||||
stderr = str(e)
|
||||
exit_code = 1
|
||||
|
||||
Reference in new issue
Block a user