diff --git a/agent/sandbox/claude/real_e2e_test.go b/agent/sandbox/claude/real_e2e_test.go index 50c8f2e6..e37a47eb 100644 --- a/agent/sandbox/claude/real_e2e_test.go +++ b/agent/sandbox/claude/real_e2e_test.go @@ -64,6 +64,9 @@ func TestRealClaudeCLIExecution(t *testing.T) { Model: model, SystemPrompt: "You are a helpful assistant. Reply concisely.", Timeout: 3 * time.Minute, + ConnectorOptions: map[string]interface{}{ + "max_tokens": 4096, // Limit max_tokens to avoid backend API limits + }, } t.Logf("Creating executor with options:") @@ -227,6 +230,9 @@ func TestClaudeCLIDirectExecution(t *testing.T) { ConnectorKey: apiKey, Model: model, Timeout: 3 * time.Minute, + ConnectorOptions: map[string]interface{}{ + "max_tokens": 4096, // Limit max_tokens to avoid backend API limits + }, } exec, err := NewExecutor(manager, opts) diff --git a/sandbox/manager.go b/sandbox/manager.go index 7921bd5c..c93c6a59 100644 --- a/sandbox/manager.go +++ b/sandbox/manager.go @@ -62,15 +62,9 @@ func newDemuxReadCloser(src io.Reader, closer io.Closer) *demuxReadCloser { defer close(d.done) defer pw.Close() - fmt.Printf("[DEBUG demux] Starting stdcopy.StdCopy\n") - startTime := time.Now() - // Use stdcopy to demux stdout and stderr // We only care about stdout here, stderr goes to a discard writer - n, err := stdcopy.StdCopy(pw, io.Discard, src) - elapsed := time.Since(startTime) - - fmt.Printf("[DEBUG demux] stdcopy.StdCopy returned: bytes=%d, err=%v, elapsed=%v\n", n, err, elapsed) + _, err := stdcopy.StdCopy(pw, io.Discard, src) if err != nil && err != io.EOF { d.mu.Lock() @@ -113,7 +107,7 @@ func (d *demuxReadCloser) Close() error { case <-d.done: // Normal completion case <-time.After(5 * time.Second): - fmt.Printf("[DEBUG demux] Timeout waiting for demux goroutine to finish\n") + // Timeout - goroutine may be stuck, but we've done cleanup } d.mu.Lock()