Get started
عائلة عناصر جلسة SQLite للمسار 3
عائلة آثار جلسات SQLite للمسار 3
تحدد هذه الملاحظة نطاق clawdbot-d63.2 بينما يتولى clawdbot-d63.1 مساعد
أرشفة إعادة التعيين/الحذف المتداخل في src/config/sessions/session-accessor.sqlite.ts.
كان ملف التنفيذ يحتوي على تغييرات غير مثبتة أثناء هذه الجولة، لذا يسجل هذا الأثر
العقد الدقيق ونقاط التصحيح دون التعارض مع العامل الآخر.
العائلة المرجعية
بعد التحويل إلى SQLite، تصبح نصوص الجلسات النشطة صفوفًا في SQLite. عائلة أرشيف الجلسة هي:
- صفوف
transcript_eventsوtranscript_event_identitiesوsessionsالخاصة بـsessionIdالحالي للإدخال. - مجموعة صفوف نص SQLite نفسها لكل
sessionIdمشار إليه بواسطةentry.compactionCheckpoints[*].preCompaction.sessionId. - مجموعة صفوف نص SQLite نفسها لكل
sessionIdمشار إليه بواسطةentry.compactionCheckpoints[*].postCompaction.sessionId. - مجموعة صفوف نص SQLite نفسها لكل
sessionIdفيentry.usageFamilySessionIds.
لا تؤرشف إلا الصفوف التي لم يعد يشير إليها أي صف متبقٍ من
session_entries أو بيانات التعريف الخاصة بعائلة Compaction أو الاستخدام لأي إدخال متبقٍ.
يحافظ هذا على حالة تفرع/استعادة نقطة التحقق وتجميع الاستخدام حتى يزول
آخر مرجع نشط.
الآثار غير التابعة للعائلة بعد التحويل
ليست متغيرات ملفات نصوص الموضوع المُنشأة والملفات الجانبية للمسار حالة تشغيل نشطة في SQLite. بل هي آثار ملفات قديمة:
- لا توجد متغيرات الموضوع مثل
<sessionId>-topic-<thread>.jsonlإلا لتنسيق النصوص المدعوم بالملفات. يستخدم SQLite معرّف الجلسة الأساسي بالإضافة إلى بيانات تعريف تسليمsession_routes/الإدخال بدلًا من ملفات JSONL منفصلة لكل موضوع. - تُسمّى الملفات الجانبية للمسار مثل
.trajectory.jsonlو.trajectory-path.jsonاستنادًا إلى مساراتsessionFileحقيقية لملفات JSONL. قيمsessionFileفي SQLite هي علاماتsqlite:<agentId>:<sessionId>:<storePath>ولا تسمّي ملفات جانبية. - يجب أن تواصل قارئات طبقة الأرشيف قراءة ملفات JSONL القديمة المؤرشفة، لكن يجب ألا تفحص عملية الاحتفاظ وقت التشغيل أدلة الجلسات النشطة أو تعيد فتح ملفات نصوص JSONL لجلسات SQLite.
يظل استيراد Doctor هو مالك ترحيل ملفات JSONL الأساسية القديمة وملفات المسار الجانبية المجاورة لها. يجب ألا تضيف عملية الاحتفاظ في SQLite وقت التشغيل مستوردًا ثانيًا أو مسارًا احتياطيًا للملفات.
نقاط التصحيح
وسّع مساعد أرشفة SQLite الذي قدمه clawdbot-d63.1 بدلًا من
إضافة مسار موازٍ.
-
أضف جامعًا محليًا بالقرب من
deleteSqliteSessionStateIfUnreferenced:collectSqliteSessionArtifactFamily(entry: SessionEntry): Set<string>- ضمّن
entry.sessionId، ومعرّفات الجلسات السابقة/اللاحقة لنقطة التحقق، وusageFamilySessionIds. - رشّح السلاسل الفارغة وأزل التكرارات بطريقة حتمية.
-
أضف جامع مراجع للمخزن بعد الإزالة:
readReferencedSqliteSessionArtifactFamilyIds(database): Set<string>- كرّر على
session_entriesالحالية، وحلّل كلentry_json، واجمع معرّفات العائلة نفسها من كل إدخال باقٍ.
-
غيّر مستدعي إعادة التعيين/الحذف/الصيانة الذين يؤرشفون حاليًا
sessionIdواحدًا تمت إزالته لتمرير العائلة الكاملة للإدخال المُزال. -
لكل معرّف عائلة، أرشف صفوف نص SQLite باستخدام سبب المستدعي (
resetأوdeleted)، ثم احذف صفsessionsفقط عندما يكون معرّف العائلة غائبًا عن مجموعة المراجع بعد الإزالة. -
أبقِ حذف أحداث النص مركزيًا عبر مسار تنظيف صفوف جلسة SQLite الحالي. لا تضف قراءات JSONL نشطة.
الاختبارات المركزة
أضف اختبارات خاصة بـ SQLite فقط إلى src/config/sessions/session-accessor.conformance.test.ts
أو اختبار دورة الحياة الآخر بعد أن يثبّت clawdbot-d63.1 تغييراته:
- يؤدي حذف إدخال له نص سابق لعملية Compaction إلى أرشفة كل من الجلسة الحالية والجلسة السابقة لعملية Compaction، ثم إزالة مجموعتي صفوف SQLite كلتيهما.
- لا يؤدي حذف أحد إدخالين يشتركان في جلسة سابقة لعملية Compaction إلى أرشفة أي شيء للجلسة السابقة المشتركة حتى تتم إزالة آخر إدخال يشير إليها.
- يؤدي حذف إدخال يحتوي على
usageFamilySessionIdsإلى أرشفة صفوف نص SQLite السابقة عندما لا يشير أي إدخال آخر إلى عائلة الاستخدام تلك. - لا يتسبب مفتاح جلسة بهيئة موضوع مع علامة SQLite في أي قراءة لملف JSONL مُنشأ للموضوع أو بحث عن ملف جانبي.
يجب أن يستخدم الإثبات المركّز:
node scripts/run-vitest.mjs src/config/sessions/session-accessor.conformance.test.tsإذا كانت الاختبارات النهائية موجودة في store.session-lifecycle-mutation.test.ts، فشغّل ذلك
الملف صراحةً باستخدام الغلاف نفسه. يجب أن تبقى بوابات pnpm العامة على
Crabbox/Testbox لشجرة عمل Codex هذه.