mirror of
https://github.com/cexll/myclaude.git
synced 2026-02-05 02:30:26 +08:00
fix: increase stdoutDrainTimeout from 100ms to 500ms
Resolves intermittent "completed without agent_message output" errors when Claude CLI exits before all stdout data is read. - internal/executor/executor.go:43 - internal/app/app.go:27 - Add benchmark script for stability testing Generated with SWE-Agent.ai Co-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>
This commit is contained in:
@@ -24,7 +24,7 @@ const (
|
|||||||
stdoutCloseReasonWait = "wait-done"
|
stdoutCloseReasonWait = "wait-done"
|
||||||
stdoutCloseReasonDrain = "drain-timeout"
|
stdoutCloseReasonDrain = "drain-timeout"
|
||||||
stdoutCloseReasonCtx = "context-cancel"
|
stdoutCloseReasonCtx = "context-cancel"
|
||||||
stdoutDrainTimeout = 100 * time.Millisecond
|
stdoutDrainTimeout = 500 * time.Millisecond
|
||||||
)
|
)
|
||||||
|
|
||||||
// Test hooks for dependency injection
|
// Test hooks for dependency injection
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ const (
|
|||||||
stdoutCloseReasonWait = "wait-done"
|
stdoutCloseReasonWait = "wait-done"
|
||||||
stdoutCloseReasonDrain = "drain-timeout"
|
stdoutCloseReasonDrain = "drain-timeout"
|
||||||
stdoutCloseReasonCtx = "context-cancel"
|
stdoutCloseReasonCtx = "context-cancel"
|
||||||
stdoutDrainTimeout = 100 * time.Millisecond
|
stdoutDrainTimeout = 500 * time.Millisecond
|
||||||
)
|
)
|
||||||
|
|
||||||
// Hook points (tests can override inside this package).
|
// Hook points (tests can override inside this package).
|
||||||
|
|||||||
43
codeagent-wrapper/scripts/benchmark_claude.sh
Executable file
43
codeagent-wrapper/scripts/benchmark_claude.sh
Executable file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Benchmark script for Claude CLI stability test
|
||||||
|
# Tests if the stdoutDrainTimeout fix resolves intermittent failures
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
RUNS=${1:-100}
|
||||||
|
FAIL_COUNT=0
|
||||||
|
SUCCESS_COUNT=0
|
||||||
|
TIMEOUT_COUNT=0
|
||||||
|
|
||||||
|
echo "Running $RUNS iterations..."
|
||||||
|
echo "---"
|
||||||
|
|
||||||
|
for i in $(seq 1 $RUNS); do
|
||||||
|
result=$(timeout 30 codeagent --backend claude --skip-permissions 'say OK' 2>&1) || true
|
||||||
|
|
||||||
|
if echo "$result" | grep -q 'without agent_message'; then
|
||||||
|
((FAIL_COUNT++))
|
||||||
|
echo "[$i] FAIL: without agent_message"
|
||||||
|
elif echo "$result" | grep -q 'timeout'; then
|
||||||
|
((TIMEOUT_COUNT++))
|
||||||
|
echo "[$i] TIMEOUT"
|
||||||
|
elif echo "$result" | grep -q 'OK\|ok'; then
|
||||||
|
((SUCCESS_COUNT++))
|
||||||
|
printf "\r[$i] OK "
|
||||||
|
else
|
||||||
|
((FAIL_COUNT++))
|
||||||
|
echo "[$i] FAIL: unexpected output"
|
||||||
|
echo "$result" | head -3
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "---"
|
||||||
|
echo "Results ($RUNS runs):"
|
||||||
|
echo " Success: $SUCCESS_COUNT ($(echo "scale=1; $SUCCESS_COUNT * 100 / $RUNS" | bc)%)"
|
||||||
|
echo " Fail: $FAIL_COUNT ($(echo "scale=1; $FAIL_COUNT * 100 / $RUNS" | bc)%)"
|
||||||
|
echo " Timeout: $TIMEOUT_COUNT ($(echo "scale=1; $TIMEOUT_COUNT * 100 / $RUNS" | bc)%)"
|
||||||
|
|
||||||
|
if [ $FAIL_COUNT -gt 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user