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

  1. Check whether the gemini process crashed (see stderr events nearby)
  2. Retry the message — transient pipe breakage happens on busy systems
  3. 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.