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 जैसे ट्रैजेक्टरी साइडकार वास्तविक JSONL sessionFile पथों से नामित होते हैं। SQLite sessionFile मान sqlite:<agentId>:<sessionId>:<storePath> मार्कर हैं और साइडकार फ़ाइलों को नामित नहीं करते।
  • आर्काइव-स्तरीय रीडर को विरासती आर्काइव की गई JSONL फ़ाइलें पढ़ना जारी रखना चाहिए, लेकिन रनटाइम प्रतिधारण को सक्रिय सत्र निर्देशिकाएँ स्कैन नहीं करनी चाहिए या SQLite सत्रों के लिए JSONL ट्रांसक्रिप्ट फ़ाइलें दोबारा नहीं खोलनी चाहिए।

विरासती प्राथमिक JSONL फ़ाइलों और उनके निकटवर्ती ट्रैजेक्टरी साइडकार के लिए Doctor आयात ही माइग्रेशन स्वामी बना रहता है। रनटाइम SQLite प्रतिधारण को दूसरा आयातक या फ़ाइल फ़ॉलबैक नहीं जोड़ना चाहिए।

पैच बिंदु

समानांतर पथ जोड़ने के बजाय clawdbot-d63.1 द्वारा प्रस्तुत SQLite आर्काइव सहायक का विस्तार करें।

  1. deleteSqliteSessionStateIfUnreferenced के निकट एक स्थानीय संग्राहक जोड़ें:

    • collectSqliteSessionArtifactFamily(entry: SessionEntry): Set<string>
    • entry.sessionId, चेकपॉइंट के पूर्व/पश्चात सत्र आईडी, और usageFamilySessionIds शामिल करें।
    • रिक्त स्ट्रिंग फ़िल्टर करें और निर्धारक रूप से डुप्लिकेट हटाएँ।
  2. हटाने के बाद वाले स्टोर के लिए एक संदर्भ संग्राहक जोड़ें:

    • readReferencedSqliteSessionArtifactFamilyIds(database): Set<string>
    • वर्तमान session_entries पर पुनरावृत्ति करें, प्रत्येक entry_json को पार्स करें, और प्रत्येक शेष प्रविष्टि से समान परिवार आईडी एकत्र करें।
  3. वर्तमान में हटाए गए एक sessionId को आर्काइव करने वाले रीसेट/डिलीट/रखरखाव कॉलर को हटाई गई प्रविष्टि का पूरा परिवार पास करने के लिए बदलें।

  4. प्रत्येक परिवार आईडी के लिए, कॉलर के कारण (reset या deleted) के साथ SQLite ट्रांसक्रिप्ट पंक्तियाँ आर्काइव करें, फिर sessions पंक्ति को केवल तब हटाएँ जब परिवार आईडी हटाने के बाद वाले संदर्भ सेट में अनुपस्थित हो।

  5. ट्रांसक्रिप्ट इवेंट हटाने को मौजूदा SQLite सत्र-पंक्ति सफ़ाई पथ के माध्यम से केंद्रीकृत रखें। सक्रिय JSONL रीड न जोड़ें।

केंद्रित परीक्षण

src/config/sessions/session-accessor.conformance.test.ts में SQLite-मात्र परीक्षण जोड़ें या 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 में हों, तो उसी रैपर से उस फ़ाइल को स्पष्ट रूप से चलाएँ। इस Codex वर्कट्री के लिए व्यापक pnpm गेट Crabbox/Testbox पर ही रहने चाहिए।

Was this useful?
On this page

On this page