احفظ الحالة على القرص لتنجو من الضغط
«حالة تنجو من الضغط — لأنها خارج المحادثة.»
ما الفرق بين TodoWrite و Task؟
يستطيع TodoManager في s03 إدراج المهام أيضاً — لكنه يخزنها في الذاكرة. حين تُطلق auto_compact من s06، تُستبدل messages[] بملخص، وتُفقد حالة TodoManager معها (لأنها في الذاكرة).
الـ Task في s07 مختلف: كل مهمة ملف .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؛ للمهام الدائمة (تتجاوز الجلسات، لها تبعيات) استخدمtask.
blockedBy · سلوك رسم التبعيات
blockedBy قائمة بمعرّفات المهام — يجب إكمالها جميعاً قبل أن تصبح المهمة الحالية «قابلة للتنفيذ».
في تطبيق 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 مهام. اضغط «complete» وشاهد blockedBy يُحدَّث تلقائياً وأي المهام تتحول إلى «قابلة للتنفيذ» (مُظللة بالأخضر).
هل تنجو من الضغط؟
s06 شرح أن auto_compact تستبدل messages[] بملخص واحد. لكن المهام لا تتأثر لأنها على القرص. اختبر ذلك: دع الوكيل يُنشئ 5 مهام، اضغط السياق، ثم افحص .tasks/ وستجد كل شيء في مكانه.