chenhg5/cc-connect · error
read stdout: %w
Error message
read stdout: %w
What it means
Wraps a bufio.Scanner error after the gemini stdout read loop ends: reading the CLI's JSON stream failed mid-turn (broken pipe, process death, or a line exceeding the scanner buffer). The error is emitted as an EventError so the user sees the failed turn.
Source
Thrown at agent/gemini/session.go:256
line := scanner.Text()
if line == "" {
continue
}
slog.Debug("geminiSession: raw", "line", truncate(line, 500))
var raw map[string]any
if err := json.Unmarshal([]byte(line), &raw); err != nil {
slog.Debug("geminiSession: non-JSON line", "line", line)
continue
}
gs.handleEvent(raw)
}
if err := scanner.Err(); err != nil {
slog.Error("geminiSession: scanner error", "error", err)
evt := core.Event{Type: core.EventError, Error: fmt.Errorf("read stdout: %w", err)}
select {
case gs.events <- evt:
case <-gs.ctx.Done():
return
}
}
}
// Gemini CLI stream-json event types:
//
// init — session_id, model
// message — role (user/assistant), content, delta
// tool_use — tool_name, tool_id, parameters
// tool_result — tool_id, status, output, error
// error — severity, message
// result — status, stats (final event)
func (gs *geminiSession) handleEvent(raw map[string]any) {
eventType, _ := raw["type"].(string)View on GitHub (pinned to 4000b2338a)
Solutions
- Check whether the gemini process crashed (see stderr events nearby)
- Retry the message — transient pipe breakage happens on busy systems
- If lines are too long, report upstream; the scanner buffer may need raising
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at agent/gemini/session.go:256 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of chenhg5/cc-connect@4000b2338a (2026-09-06).
Data as JSON: /api/errors/9759c393a44b6209.
Report an issue: GitHub.