L'état est écrit sur le disque et survit à la compression
「State that survives compression — because it's outside the conversation.」
Quelle est la différence entre TodoWrite et Task ?
LeTodoManager de s03 peut également lister les tâches - mais il est stocké dans la mémoire. Dès que l'auto_compact mentionné dans s06 est déclenché, les messages[] sont remplacés par un résumé et le statut de TodoManager est disparu (car il est en mémoire).
LaTâche de s07 est différente : chaque tâche est un fichier .tasks/task_42.json. Que le contexte soit compressé, que le processus soit redémarré ou que l'agent soit remplacé - tant que le fichier disque existe toujours, la tâche existe toujours.
# .tasks/task_12.json { "id" : 12, "subject" : "Refactor auth middleware", "description" : "Extraire la logique JWT vers le module partagé", "statut" : "en attente", "blockedBy" : [8, 11], # Doit compléter les numéros 8 et 11 "propriétaire" : ""
Règles de sélection : Utiliseztodopour les tâches temporaires (oubliez-le une fois que vous l'avez terminé) ; utiliseztaskpour les tâches persistantes (conservées au fil des sessions et dépendantes).
blockBy · Tempérament du graphique de dépendance
blockedBy est une liste d'identifiants de tâches - ceux-ci doivent être terminés avant que la tâche en cours ne soit "exécutable".
L'implémentation de s07 présente un détail intéressant : Lorsqu'une tâche est terminée, elle se supprime automatiquement de la liste bloquée par de toutes les autres tâches.
def _clear_dependency(self,complete_id : int) : # Analyser chaque tâche, supprimercomplete_id de leur bloquéBy pour f dans soi.dir.glob("task_*.json") : tâche = json.loads(f.read_text()) ifcomplete_id dans task.get("blockedBy", []) : tâche["blockedBy"].remove(completed_id) soi._save(tâche)
De cette façon, l'agent n'a pas besoin de maintenir une table séparée "quelles tâches sont débloquées" - il suffit de parcourir .tasks/ et de trouver status=="en attente" et non bloquéBy qui sont maintenant exécutables.
Interaction avec le graphe de dépendance
Le widget ci-dessous vous donne un graphique de dépendances de 5 tâches. Cliquez sur « terminer » pour voir bloquéBy automatiquement mis à jour et quelles tâches deviennent « exécutables » (surlignées en vert).
Peut-il encore survivre après avoir été compressé ?
s06 a mentionné qu'auto_compact remplacerait messages[] par un résumé. Mais la tâche n’est pas affectée car elle se trouve sur le disque. Testez-le : laissez l'agent effectuer 5 tâches. Après avoir compressé le dialogue, il analyse .tasks/ et peut continuer là où il se trouvait.