Состояние записывается на диск, выдерживая сжатие.
「State that survives compression — because it's outside the conversation.」
В чем разница между TodoWrite и Task?
TodoManager s03 также может отображать список задач, но он хранится в памяти. Как только срабатывает auto_compact, упомянутый в s06, messages[] заменяются сводкой, а статус TodoManager исчезает (поскольку он находится в памяти).
s07 Task отличается: каждая задача представляет собой файл .tasks/task_42.json. Независимо от того, сжат ли контекст, перезапущен процесс или заменен агент — пока файл на диске существует, задача все еще существует.
# .tasks/task_12.json { "id": 12, "subject": "Рефакторинг промежуточного программного обеспечения аутентификации", "description": "Извлечь логику JWT в общий модуль", "статус": "ожидание", "blockedBy": [8, 11], # Необходимо выполнить №8 и №11 "владелец": ""
Правила выбора: используйтеtodoдля временных задач (забудьте об этом, как только закончите); используйтеtaskдля постоянных задач (сохраняющихся между сеансами и зависимых).
BlockedBy · Характер графика зависимостей
blockedBy — это список идентификаторов задач. Они должны быть завершены, прежде чем текущая задача станет «исполняемой».
Реализация s07 имеет изящную деталь: Когда задача завершена, она автоматически удаляется из списка заблокированных всех остальных задач.
def _clear_dependentency(self, Completed_id: int): # Сканировать каждую задачу, удалять завершенные_id из их заблокированных for f in self.dir.glob("task_*.json"): задача = json.loads(f.read_text()) ifcomplete_id in Task.get("blockedBy", []): задача["blockedBy"].remove(completed_id) self._save(task)
Таким образом, агенту не нужно вести отдельную таблицу «какие задачи разблокированы» — просто пройдите по .tasks/ и найдите status=="pending" и notblockBy, которые теперь являются исполняемыми.
Взаимодействие с графом зависимостей
В виджете ниже представлен график зависимостей из 5 задач. Нажмите «Завершить», чтобы увидеть, какие задачи заблокированы автоматически обновляются и какие задачи становятся «исполняемыми» (выделены зеленым).
Может ли он выжить после сжатия?
s06 упомянул, что auto_compact заменит messages[] сводкой. Но на задачу это не влияет, поскольку она находится на диске. Протестируйте. Позвольте агенту выполнить 5 задач. После сжатия диалога он сканирует .tasks/ и может продолжить работу с того места, где был.