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 เพิ่มเข้ามา แทนการ
เพิ่มเส้นทางคู่ขนาน
-
เพิ่มตัวรวบรวมภายในใกล้กับ
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 นี้