Get started
خانواده مصنوعات نشست SQLite در مسیر 3
مسیر 3 خانواده مصنوعات نشست SQLite
این یادداشت دامنه 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 بهجای فایلهای JSONL جداگانه برای هر موضوع، از شناسه متعارف نشست بههمراه فراداده تحویلsession_routes/ورودی استفاده میکند. - فایلهای جانبی مسیر حرکت مانند
.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گیتهای گسترده pnpm برای این درخت کاری Codex باید روی Crabbox/Testbox باقی بمانند.