Get started

พาธ 3 ตระกูลอาร์ติแฟกต์เซสชัน SQLite

กลุ่มอาร์ติแฟกต์เซสชัน 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 เพิ่มเข้ามา แทนการ เพิ่มเส้นทางคู่ขนาน

  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

หากการทดสอบสุดท้ายอยู่ใน store.session-lifecycle-mutation.test.ts ให้เรียกใช้ ไฟล์นั้นอย่างชัดเจนด้วยตัวครอบเดียวกัน เกต pnpm แบบกว้างควรทำงานบน Crabbox/Testbox สำหรับเวิร์กทรี Codex นี้

Was this useful?
On this page

On this page