状態はディスクに書き込まれ、圧縮されても存続します
「圧縮されても生き残る状態 — それは会話の外にあるからです。」
TodoWrite とタスクの違いは何ですか?
s03 のTodoManager もタスクをリストできますが、それはメモリに保存されます。 s06 で述べた auto_compact がトリガーされるとすぐに、messages[] が summary に置き換えられ、TodoManager のステータスが消滅します(メモリ内にあるため)。
s07 の Task は異なります。各タスクは .tasks/task_42.json ファイルです。コンテキストが圧縮されたり、プロセスが再起動されたり、エージェントが置き換えられたりしても、ディスク ファイルが存在する限り、 タスクは引き続き存在します。
# .tasks/task_12.json { "id": 12, "subject": "Refactor auth middleware", "description": "Extract JWT logic to shared module", "status": "pending", "blockedBy": [8, 11], # 必须先完成 #8 和 #11 "owner": "" }
選択ルール: 一時的な ToDo にはtodoを使用します (完了したら忘れてください)。永続的なタスク (セッション間で保持されるタスクや依存するタスク) にはtaskを使用します。
BlockedBy · 依存関係グラフのテンパー
blockedBy はタスク ID のリストです。現在のタスクが「実行可能」になる前に、これらは completed でなければなりません。
s07 の実装には細かい詳細が含まれています。タスクが完了すると、他のすべてのタスクの BlockedBy リストから自動的に削除されます。
def _clear_dependency(self, completed_id: int): # Scan every task, remove completed_id from their blockedBy for f in self.dir.glob("task_*.json"): task = json.loads(f.read_text()) if completed_id in task.get("blockedBy", []): task["blockedBy"].remove(completed_id) self._save(task)
この方法では、エージェントは「どのタスクがブロック解除されているか」テーブルを個別に管理する必要がなく、.tasks/ をトラバースする限り、status=="pending" and not blockedBy で見つかったテーブルが実行可能になります。
依存関係グラフの相互作用
以下のウィジェットは、5 つのタスクの依存関係グラフを提供します。 「完了」をクリックすると、blockedBy が自動的に更新され、どのタスクが「実行可能」になる (緑色で強調表示される) ことがわかります。
圧縮した後でも生き残ることはできますか?
s06 は、auto_compact がmessages[] を概要に置き換えると述べました。ただし、タスクはディスク上にあるため影響を受けません。 テスト: エージェントに 5 つのタスクを実行させます。会話を圧縮した後、.tasks/ をスキャンし、同じ場所で会話を続けることができます。