fix(worker): постмортем получает транскрипт сессий dev/reviewer по session_id
Some checks failed
CI / test (push) Failing after 1m52s
CI / build-and-package (amd64, linux) (push) Failing after 1m1s
CI / build-and-package (amd64, windows) (push) Successful in 29s

Раньше постмортем-агенту передавался только session_id, без содержимого
сессии — анализировать было нечего. Теперь Runner умеет читать сообщения
сессии (Messages → renderTranscript) через SessionMessages, а postMortem
подставляет реальные шаги агента (сообщения/tool-вызовы) в промпт.
Пустая/недоступная сессия помечается явно. Сбои чтения не фатальны.
This commit is contained in:
ki.sagidullin
2026-08-24 16:48:43 +05:00
parent 89d571b483
commit 6546f18348
5 changed files with 221 additions and 16 deletions

View File

@@ -18,6 +18,9 @@ import (
// OpenCodeRunner — интерфейс для opencode (подменяемый в тестах).
type OpenCodeRunner interface {
Run(ctx context.Context, prompt, cwd, agent, sessionID string) (*opencode.Result, error)
// SessionMessages возвращает транскрипт сессии (шаги агента) по sessionID
// для постмортем-анализа. cwd — каталог, где живёт сервер пула сессии.
SessionMessages(ctx context.Context, cwd, sessionID string) (string, error)
}
// PollTaskFunc — callback для обработки готовой задачи (подменяемый в тестах).
@@ -350,11 +353,11 @@ func (w *Worker) runTask(ctx context.Context, task *storage.Task) (err error) {
return pErr
}
if e := w.setStatus(ctx, task, storage.StatusSuccess); e != nil {
return fmt.Errorf("%w: set %s: %v", ErrUpdate, task.Status, e)
return fmt.Errorf("%w: set %s: %v", ErrUpdate, task.Status, e)
}
w.notifyStatus(ctx, task, storage.StatusSuccess)
return nil
}
w.notifyStatus(ctx, task, storage.StatusSuccess)
return nil
}
// Не пройдено: если есть итерации — dev дорабатывает.
if iter+1 < maxReviewIterations {