feat(opencode): рабочий serve для dev стартует из папки репозитория; пул покрывает внешним сервером подкаталоги
Some checks failed
CI / test (push) Failing after 1m59s
CI / build-and-package (amd64, linux) (push) Failing after 1m2s
CI / build-and-package (amd64, windows) (push) Successful in 26s

This commit is contained in:
ki.sagidullin
2026-08-24 19:36:38 +05:00
parent 6c0b903794
commit 2005421739
4 changed files with 84 additions and 18 deletions

View File

@@ -201,7 +201,12 @@ func (w *Worker) pollAndDispatch(ctx context.Context) error {
func (w *Worker) runTask(ctx context.Context, task *storage.Task) (err error) {
// 0. постмортем-анализ: если задача завершилась failed/timeout — после
// выхода из runTask (всех путей) запускаем анализ сессий dev/reviewer.
defer w.postMortemAfter(ctx, task, &err)
// projectDir (каталог основного репозитория) объявляем заранее — defer
// захватывает переменную, её значение подставится к моменту возврата.
var projectDir string
defer func() {
w.postMortemAfter(ctx, task, projectDir, &err)
}()
// 1. проверяем статус
if task.Status != storage.StatusApproved {
@@ -241,8 +246,12 @@ func (w *Worker) runTask(ctx context.Context, task *storage.Task) (err error) {
}
}
// 3. cwd — общий каталог (вариант A: один dev видит все репозитории).
cwd := w.Worktree
// 3. cwd — папка основного репозитория: сервер opencode для работы стартует
// из самого репозитория (подхватывает .serena, экономит токены на поиск
// файлов из корня worktree). Служебный root-сервер в worktree остаётся
// для аналитика; пул поднимает свой serve на каждый репозиторий работы.
cwd := w.repoDirOf(repos[0])
projectDir = cwd
// Цикл dev → review, до maxReviewIterations.
var feedback []string
@@ -253,6 +262,8 @@ func (w *Worker) runTask(ctx context.Context, task *storage.Task) (err error) {
Title: task.Title,
Goal: task.Goal,
Repos: repos,
Primary: repos[0],
Others: repos[1:],
Why: task.Why,
AC: task.AC,
Steps: task.Steps,