الدرس 07 · ذاكرة

تتم كتابة الحالة على القرص، والبقاء على قيد الحياة الضغط

「State that survives compression — because it's outside the conversation.」

⏱ ~10 د · 📝 3 مكونات تفاعلية · 🧑‍💻 مبني على shareAI-lab · s07_task_system.py

ما هو الفرق بين TodoWrite والمهمة؟

يمكن لـ

s03's TodoManager أيضًا إدراج المهام - ولكن يتم تخزينها في الذاكرة. بمجرد تشغيل الضغط التلقائي المذكور في s06، يتم استبدال الرسائل[] بالملخص، وتختفي حالة TodoManager (لأنها موجودة في الذاكرة). تختلف مهمة الخاصة بـ

s07: كل مهمة عبارة عن ملف .tasks/task_42.json. سواء تم ضغط السياق، أو إعادة تشغيل العملية، أو استبدال الوكيل - طالما أن ملف القرص لا يزال موجودًا، فستظل المهمة موجودة.

# .tasks/task_12.json
{
  "id": 12،
  "subject": "البرامج الوسيطة لمصادقة Refactor",
  "description": "استخرج منطق JWT إلى الوحدة النمطية المشتركة"،
  "الحالة": "في انتظار"،
  "blockedBy": [8, 11], # يجب إكمال رقم 8 ورقم 11
  "المالك": ""
قواعد الاختيار: استخدم المهام للمهام المؤقتة (انسى الأمر بمجرد الانتهاء منه)؛ استخدم المهمة للمهام المستمرة (التي يتم الاحتفاظ بها عبر الجلسات والمعتمدة).

منعت بواسطة · مزاج الرسم البياني التبعية

blockedBy عبارة عن قائمة بمعرفات المهام - يجب إكمالها قبل أن تصبح المهمة الحالية "قابلة للتنفيذ".

يحتوي تنفيذ s07 على تفاصيل دقيقة: عند اكتمال المهمة، ستزيل نفسها تلقائيًا من القائمة المحظورة بواسطة لجميع المهام الأخرى.

def _clear_dependency(self,Complete_id: int):
    # افحص كل مهمة، وأزل المعرف المكتمل من المحظور
    لـ f في self.dir.glob("task_*.json"):
        المهمة = json.loads(f.read_text())
        إذا تم إكمال_id في Task.get("blockedBy", []):
            المهمة["blockedBy"].remove(completed_id)
            الذات._save(task)

وبهذه الطريقة، لا يحتاج الوكيل إلى الاحتفاظ بجدول منفصل "ما هي المهام التي تم إلغاء حظرها" - ما عليك سوى اجتياز .tasks/ والعثور على status=="pending" وغير المحظورة والتي أصبحت الآن قابلة للتنفيذ.

تفاعل الرسم البياني التبعية

تمنحك الأداة أدناه رسمًا بيانيًا للتبعية يتكون من 5 مهام. انقر فوق "مكتمل" لرؤية تحديث الحظر تلقائيًا والمهام التي تصبح "قابلة للتنفيذ" (مظللة باللون الأخضر).

هل لا يزال بإمكانه البقاء على قيد الحياة بعد ضغطه؟

ذكر

s06 أن الضغط التلقائي سيستبدل الرسائل[] بملخص. لكن المهمة لا تتأثر لأنها موجودة على القرص. اختبره: اسمح للوكيل بإجراء 5 مهام. بعد ضغط مربع الحوار، يقوم بمسح .tasks/ ويمكنه الاستمرار حيث كان.

تفاعلي

Widget 1 · الرسم البياني للتبعية · انقر فوق "إكمال" لرؤية تحديثات التبعية

العلاقة الطوبولوجية من 5 مهام. انقر فوق الزر الموجود على أي مهمة معلقة لتغيير حالتها وملاحظة التغييرات في المصفوفة المحظورة وقائمة "الملف القابل للتنفيذ التالي".

Task 列表(.tasks/ 目录)
当前可执行(status=pending, blockedBy=[])
依赖关系图
تفاعلي

Widget 2 · ضغط البقاء · مهمة البقاء على قيد الحياة auto_compact

اسمح للوكيل بإنشاء 3 مهام، ثم قم بتشغيل الضغط التلقائي (يتم مسح الرسائل)، ثم قم بالاستعادة - تحقق مما إذا كانت المهام لا تزال موجودة.

.tasks/ 目录
messages[]
تفاعلي

Widget 3 · سلسلة التبعية · أعطيك صورة للإجابة على المهام التي يمكن تفعيلها الآن

تبعيات 5 المهام. الإجابة: في موقف معين، ما هي الخطوات التالية التي يمكن القيام بها (ممكن اختيارات متعددة).

答对 0 / 4