Get started
पथ 3 SQLite सत्र आर्टिफ़ैक्ट परिवार
पथ 3 SQLite सत्र आर्टिफ़ैक्ट फ़ैमिली
यह नोट clawdbot-d63.2 का दायरा निर्धारित करता है, जबकि clawdbot-d63.1, src/config/sessions/session-accessor.sqlite.ts में ओवरलैप होने वाले
रीसेट/डिलीट आर्काइव हेल्पर का स्वामी है।
इस चरण के दौरान कार्यान्वयन फ़ाइल में असहेजे बदलाव थे, इसलिए यह आर्टिफ़ैक्ट सहवर्ती वर्कर से टकराव किए बिना
सटीक अनुबंध और पैच बिंदुओं को दर्ज करता है।
प्रामाणिक फ़ैमिली
SQLite पर स्विच करने के बाद, सक्रिय सत्र ट्रांसक्रिप्ट SQLite पंक्तियाँ हैं। किसी सत्र की आर्काइव फ़ैमिली है:
- प्रविष्टि के वर्तमान
sessionIdके लिएtranscript_events,transcript_event_identities, औरsessionsपंक्तियाँ। entry.compactionCheckpoints[*].preCompaction.sessionIdद्वारा संदर्भित प्रत्येकsessionIdके लिए वही SQLite ट्रांसक्रिप्ट पंक्ति सेट।entry.compactionCheckpoints[*].postCompaction.sessionIdद्वारा संदर्भित प्रत्येकsessionIdके लिए वही SQLite ट्रांसक्रिप्ट पंक्ति सेट।entry.usageFamilySessionIdsमें प्रत्येकsessionIdके लिए वही SQLite ट्रांसक्रिप्ट पंक्ति सेट।
केवल उन पंक्तियों को आर्काइव करें जिन्हें अब किसी शेष
session_entries पंक्ति या किसी शेष प्रविष्टि के Compaction अथवा उपयोग-फ़ैमिली
मेटाडेटा द्वारा संदर्भित नहीं किया जाता। इससे अंतिम सक्रिय संदर्भ हटने तक
चेकपॉइंट ब्रांच/पुनर्स्थापना और उपयोग रोलअप स्थिति संरक्षित रहती है।
स्विच के बाद गैर-फ़ैमिली आर्टिफ़ैक्ट
जनरेट किए गए विषय ट्रांसक्रिप्ट फ़ाइल वेरिएंट और ट्रैजेक्टरी साइडकार सक्रिय SQLite रनटाइम स्थिति नहीं हैं। वे लीगेसी फ़ाइल आर्टिफ़ैक्ट हैं:
<sessionId>-topic-<thread>.jsonlजैसे विषय वेरिएंट केवल फ़ाइल-समर्थित ट्रांसक्रिप्ट प्रारूप के लिए मौजूद होते हैं। SQLite प्रति-विषय JSONL फ़ाइलों के बजाय कैनोनिकल सत्र आईडी के साथsession_routes/प्रविष्टि डिलीवरी मेटाडेटा का उपयोग करता है।.trajectory.jsonlऔर.trajectory-path.jsonजैसे ट्रैजेक्टरी साइडकार वास्तविक JSONLsessionFileपथों से नामित होते हैं। SQLitesessionFileमानsqlite:<agentId>:<sessionId>:<storePath>मार्कर हैं और साइडकार फ़ाइलों का नाम नहीं बताते।- आर्काइव-टियर रीडर को लीगेसी आर्काइव की गई JSONL फ़ाइलें पढ़ते रहना चाहिए, लेकिन रनटाइम रिटेंशन को SQLite सत्रों के लिए सक्रिय सत्र डायरेक्टरी स्कैन या JSONL ट्रांसक्रिप्ट फ़ाइलें दोबारा नहीं खोलनी चाहिए।
लीगेसी प्राथमिक JSONL फ़ाइलों और उनके निकटवर्ती ट्रैजेक्टरी साइडकार के माइग्रेशन का स्वामी Doctor इंपोर्ट ही रहता है। रनटाइम SQLite रिटेंशन को दूसरा इंपोर्टर या फ़ाइल फ़ॉलबैक नहीं जोड़ना चाहिए।
पैच बिंदु
समानांतर पथ जोड़ने के बजाय clawdbot-d63.1 द्वारा प्रस्तुत SQLite आर्काइव हेल्पर का विस्तार करें।
-
deleteSqliteSessionStateIfUnreferencedके पास एक स्थानीय कलेक्टर जोड़ें:collectSqliteSessionArtifactFamily(entry: SessionEntry): Set<string>entry.sessionId, चेकपॉइंट के पूर्व/पश्चात सत्र आईडी औरusageFamilySessionIdsशामिल करें।- रिक्त स्ट्रिंग फ़िल्टर करें और नियतात्मक रूप से डुप्लिकेट हटाएँ।
-
हटाने के बाद वाले स्टोर के लिए एक संदर्भ कलेक्टर जोड़ें:
readReferencedSqliteSessionArtifactFamilyIds(database): Set<string>- वर्तमान
session_entriesपर पुनरावृति करें, प्रत्येकentry_jsonको पार्स करें और प्रत्येक शेष प्रविष्टि से वही फ़ैमिली आईडी एकत्र करें।
-
वर्तमान में एक हटाए गए
sessionIdको आर्काइव करने वाले रीसेट/डिलीट/रखरखाव कॉलर को बदलकर हटाई गई प्रविष्टि की पूरी फ़ैमिली पास कराएँ। -
प्रत्येक फ़ैमिली आईडी के लिए, कॉलर के कारण (
resetयाdeleted) सहित SQLite ट्रांसक्रिप्ट पंक्तियाँ आर्काइव करें, फिर केवल तभीsessionsपंक्ति हटाएँ जब फ़ैमिली आईडी हटाने के बाद वाले संदर्भ सेट में अनुपस्थित हो। -
ट्रांसक्रिप्ट इवेंट हटाने की प्रक्रिया को मौजूदा SQLite सत्र-पंक्ति क्लीनअप पथ के माध्यम से केंद्रीकृत रखें। सक्रिय JSONL रीड न जोड़ें।
केंद्रित परीक्षण
clawdbot-d63.1 के कमिट होने के बाद src/config/sessions/session-accessor.conformance.test.ts
या सहवर्ती लाइफ़साइकल परीक्षण में केवल SQLite वाले परीक्षण जोड़ें:
- पूर्व-Compaction ट्रांसक्रिप्ट वाली प्रविष्टि हटाने पर वर्तमान सत्र और पूर्व-Compaction सत्र, दोनों आर्काइव होते हैं, फिर दोनों SQLite पंक्ति सेट हट जाते हैं।
- Compaction पूर्व-सत्र साझा करने वाली दो प्रविष्टियों में से एक को हटाने पर साझा पूर्व-सत्र के लिए तब तक कुछ भी आर्काइव नहीं होता, जब तक अंतिम संदर्भित करने वाली प्रविष्टि हटा नहीं दी जाती।
usageFamilySessionIdsवाली प्रविष्टि हटाने पर पूर्ववर्ती SQLite ट्रांसक्रिप्ट पंक्तियाँ आर्काइव होती हैं, जब कोई अन्य प्रविष्टि उस उपयोग फ़ैमिली को संदर्भित नहीं करती।- SQLite मार्कर वाली विषय-आकृति सत्र कुंजी किसी जनरेट की गई विषय JSONL रीड या साइडकार लुकअप का कारण नहीं बनती।
केंद्रित प्रमाण में इसका उपयोग होना चाहिए:
node scripts/run-vitest.mjs src/config/sessions/session-accessor.conformance.test.tsइस Codex वर्कट्री के लिए व्यापक pnpm गेट Crabbox/Testbox पर ही रहने चाहिए।