fix: открыть буфер bufio.Scanner до 64МБ — NDJSON-строка с text-партом вердикта >64КБ роняла сканер (ErrTooLong), терялся весь поток после первого события (step_start); добавить диаг. лог lines/bytes/scanerr
This commit is contained in:
@@ -158,6 +158,10 @@ func (r *Runner) Run(ctx context.Context, prompt, cwd, agent, sessionID string)
|
||||
go func() {
|
||||
defer close(done)
|
||||
sc := bufio.NewScanner(stdout)
|
||||
// NDJSON opencode пишет каждый объект одной строкой; большой text-парт с
|
||||
// вердиктом легко превышает дефолтный лимит Scanner в 64КБ → ErrTooLong и
|
||||
// потеря всего потока после первой строки. Поднимаем до 64МБ.
|
||||
sc.Buffer(make([]byte, 64*1024), 64*1024*1024)
|
||||
for sc.Scan() {
|
||||
line := sc.Text()
|
||||
mu.Lock()
|
||||
@@ -171,6 +175,10 @@ func (r *Runner) Run(ctx context.Context, prompt, cwd, agent, sessionID string)
|
||||
}
|
||||
}
|
||||
}
|
||||
scanErr := sc.Err()
|
||||
if scanErr != nil {
|
||||
r.logf("opencode(%s) scan err: %v", agent, scanErr)
|
||||
}
|
||||
}()
|
||||
|
||||
baseline, _ := r.maxDirMsgTS(ctx, cwd)
|
||||
@@ -234,6 +242,8 @@ pollLoop:
|
||||
out := strings.Join(buf, "\n")
|
||||
mu.Unlock()
|
||||
|
||||
r.logf("opencode(%s) lines=%d bytes=%d", agent, len(buf), len(out))
|
||||
|
||||
sid := sessionID
|
||||
if s, ok := SessionIDFromOutput(out); ok {
|
||||
sid = s
|
||||
|
||||
Reference in New Issue
Block a user