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 را گسترش دهید و مسیر موازی اضافه نکنید.

  1. یک گردآورنده محلی نزدیک deleteSqliteSessionStateIfUnreferenced اضافه کنید:

    • collectSqliteSessionArtifactFamily(entry: SessionEntry): Set<string>
    • entry.sessionId، شناسه‌های نشست پیش/پس از نقطه بررسی و usageFamilySessionIds را شامل کنید.
    • رشته‌های خالی را فیلتر و موارد تکراری را به‌صورت قطعی حذف کنید.
  2. یک گردآورنده ارجاع برای مخزن پس از حذف اضافه کنید:

    • readReferencedSqliteSessionArtifactFamilyIds(database): Set<string>
    • روی session_entries فعلی پیمایش کنید، هر entry_json را تجزیه کنید و همان شناسه‌های خانواده را از تمام ورودی‌های باقی‌مانده گردآوری کنید.
  3. فراخواننده‌های بازنشانی/حذف/نگهداشت را که اکنون یک sessionId حذف‌شده را بایگانی می‌کنند، تغییر دهید تا خانواده کامل ورودی حذف‌شده را ارسال کنند.

  4. برای هر شناسه خانواده، ردیف‌های رونوشت SQLite را با دلیل ارائه‌شده توسط فراخواننده (reset یا deleted) بایگانی کنید، سپس ردیف sessions را فقط زمانی حذف کنید که شناسه خانواده در مجموعه ارجاعات پس از حذف وجود نداشته باشد.

  5. حذف رویدادهای رونوشت را از طریق مسیر پاک‌سازی موجود ردیف نشست SQLite متمرکز نگه دارید. خواندن فعال JSONL اضافه نکنید.

آزمون‌های متمرکز

آزمون‌های مختص SQLite را به src/config/sessions/session-accessor.conformance.test.ts یا پس از ثبت تغییرات clawdbot-d63.1 به آزمون چرخه حیات همکار اضافه کنید:

  • حذف ورودی دارای رونوشت پیش از Compaction، هم نشست فعلی و هم نشست پیش از Compaction را بایگانی می‌کند و سپس هر دو مجموعه ردیف SQLite را حذف می‌کند.
  • حذف یکی از دو ورودی که یک نشست پیش از Compaction مشترک دارند، تا زمان حذف آخرین ورودی ارجاع‌دهنده، هیچ‌چیز را برای نشست پیشین مشترک بایگانی نمی‌کند.
  • حذف ورودی دارای usageFamilySessionIds، زمانی که هیچ ورودی دیگری به آن خانواده مصرف ارجاع نمی‌دهد، ردیف‌های رونوشت SQLite مربوط به نشست پیشین را بایگانی می‌کند.
  • یک کلید نشست با شکل موضوع و نشانگر SQLite باعث خواندن هیچ فایل JSONL موضوع تولیدشده یا جست‌وجوی فایل جانبی نمی‌شود.

اثبات متمرکز باید از این دستور استفاده کند:

bash
node scripts/run-vitest.mjs src/config/sessions/session-accessor.conformance.test.ts

گیت‌های گسترده pnpm برای این درخت کاری Codex باید روی Crabbox/Testbox باقی بمانند.

Was this useful?
On this page

On this page