fix(worker): постмортем получает транскрипт сессий dev/reviewer по session_id
Раньше постмортем-агенту передавался только session_id, без содержимого сессии — анализировать было нечего. Теперь Runner умеет читать сообщения сессии (Messages → renderTranscript) через SessionMessages, а postMortem подставляет реальные шаги агента (сообщения/tool-вызовы) в промпт. Пустая/недоступная сессия помечается явно. Сбои чтения не фатальны.
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user