AACWorkflow Docs

Задачи

Единица работы для каждого запуска агента, с чёткой машиной состояний, тайм-аутами и правилами повтора.

Задача (task) — это единица каждого запуска агентаназначение issue агенту, @-упоминание агента в комментарии, отправка сообщения в чате или срабатывание Автопилота по расписанию — всё это создаёт задачу. AACWorkflow ставит её в очередь; демон забирает её и передаёт соответствующему инструменту AI-разработки, затем записывает результат обратно на сервер по завершении.

Задачи и issues — это два разных объекта. Один issue может быть назначен, @-упомянут и вручную перезапущен множество раз — каждый раз создаётся новая задача.

Состояния задачи

Rendering diagram…
  • Queued — задача только что создана и ожидает, пока демон её заберёт
  • Dispatched — демон забрал её и запускает инструмент AI-разработки
  • Running — инструмент AI-разработки выполняет работу
  • Completed — успешно завершена; результат (комментарии, коммиты, изменения статуса) записан на сервер
  • Failed — прервана с ошибкой или тайм-аутом; если причина сбоя повторяемая, задача автоматически возвращается в queued для ещё одной попытки
  • Cancelled — пользователь отменил задачу

Что происходит при тайм-ауте задачи

Сервер AACWorkflow сканирует каждые 30 секунд. Два вида тайм-аута вызывают сбой:

СитуацияТайм-аут
Отправлена, но не запущена (демон забрал, но не запустил инструмент AI)5 минут
Выполняется слишком долго2,5 часа

Оба тайм-аута используют причину сбоя timeout и повторяются автоматически (следующий раздел). О проверке отсутствующей среды выполнения см. Демон и среды выполнения → Когда среда выполнения помечается как офлайн.

Какие сбои повторяются автоматически, а какие нет

Сбои делятся на две категории: повторяемые и неповторяемые.

Повторяемые (AACWorkflow автоматически переставляет в очередь):

  • runtime_offline — демон пропал после отправки задачи
  • runtime_recovery — демон упал и перезапустился, возвращая незавершённые задачи
  • timeout — тайм-аут выполнения или отправки

Неповторяемые (задача остаётся в failed):

  • agent_error — сам инструмент AI-разработки сообщил об ошибке (ошибка API, превышение квоты, внутренняя ошибка). Базовые проблемы не повторяются — это привело бы к бесконечному циклу.

Автоматический повтор имеет два дополнительных условия:

  1. Не более 2 попыток — 1 исходная + 1 повтор. Если повтор также завершается сбоем, дальнейших повторов нет, даже если причина повторяемая.
  2. Только для задач, созданных из issue и чата — задачи, запущенные Автопилотом, не повторяются автоматически.

Задачи Автопилота не повторяются автоматически по замыслу. У Автопилота свой собственный цикл запуска (например, ежедневный); автоматические повторы при сбое пересекались бы со следующим запланированным запуском. Если нужен немедленный повтор после сбоя, используйте ручной перезапуск (следующий раздел).

Как узнать, что задача Автопилота завершилась сбоем: уведомление приходит в Inbox, а статус связанного issue возвращается с in_progress обратно на todo. Страница Автопилоты также показывает последний результат запуска для каждого автопилота.

Ручной перезапуск и автоматический повтор

Ручной перезапуск — это тот, который вы запускаете из CLI или API (POST /api/issues/{id}/rerun):

aacworkflow issue rerun <issue-id>

Поведение:

  • По умолчанию нацелен на текущего назначенного агента issue — полезно, когда вы хотите, чтобы перезапуск следовал текущему назначению независимо от того, кто выполнял предыдущую задачу.
  • Кнопка повтора в журнале выполнений на конкретной строке передаёт ID задачи этой строки, так что перезапуск нацелен на агента, который выполнял именно эту задачу — а не текущего назначенного. Это делает повтор по строке осмысленным для участников сквадов, параллельных @-упоминаний агентов или строк, чей агент был заменён переназначением.
  • Отменяет задачу целевого агента в очереди или выполняющуюся по этому issue (если есть). Задачи других агентов по тому же issue (например, параллельные @-упоминания) остаются нетронутыми.
  • Создаёт совершенно новую задачу — счётчик попыток сбрасывается до 1, даже если исходная задача достигла потолка попыток.
  • Запускает свежую сессию агента — предыдущий ID сессии не наследуется. Ручной перезапуск означает, что вы оценили предыдущий результат как плохой, поэтому возобновление той же беседы воспроизвело бы то же испорченное состояние. (Автоматический повтор, напротив, наследует сессию — этот путь для инфраструктурных сбоев, а не плохого результата.)

Сравнение:

ИзмерениеАвтоматический повторРучной перезапуск
ТриггерСистема, на основе причины сбояВы, вручную
Потолок2 попыткиБез ограничений
Применимые источникиIssues, чатIssues с назначенным агентом
Выбранный агентТот же агент, что и упавшая задачаАгент исходной задачи (UI-повтор по строке) или текущий назначенный issue (CLI / без task_id)
Наследование сессииДа (возобновляет предыдущую сессию)Нет (свежая сессия)

Как сбой задачи влияет на статус issue

Если задача, созданная из issue, завершается сбоем (и автоматический повтор не удался), потому что issue был назначен агенту, статус issue автоматически откатывается с in_progress на todo — так что, открыв доску, вы сразу видите «этому нужно ещё внимание». См. Issues и проекты.

Может ли задача продолжить с предыдущего контекста

Да — при условии, что инструмент AI-разработки поддерживает возобновление сессии.

AACWorkflow фиксирует ID сессии дважды в течение задачи: один раз в начале (когда инструмент AI возвращает своё первое системное сообщение) и один раз в конце (при завершении или сбое). Первый позволяет демону восстановиться при сбое в середине выполнения; второй зарезервирован для следующего автоматического повтора, где этот ID передаётся обратно, чтобы агент мог продолжить предыдущий разговор и состояние файлов. Ручной перезапуск намеренно пропускает это и начинает свежую сессию — см. Ручной перезапуск и автоматический повтор.

Все поддерживаемые инструменты возобновляют сессии — передайте resume id, и задача продолжится с предыдущего контекста. Единственная особенность — Pi: его resume id — это путь к файлу сессии на диске, а не строковый идентификатор.

См. Матрица инструментов → Возобновление сессии.

Далее