Get started

डेटाबेस-प्रथम स्थिति पुनर्संरचना

डेटाबेस-प्रथम स्टेट रीफ़ैक्टर

निर्णय

दो-स्तरीय SQLite लेआउट का उपयोग करें:

  • वैश्विक डेटाबेस: ~/.openclaw/state/openclaw.sqlite
  • एजेंट डेटाबेस: एजेंट-स्वामित्व वाले वर्कस्पेस, ट्रांसक्रिप्ट, VFS, आर्टिफ़ैक्ट और बड़े प्रति-एजेंट रनटाइम स्टेट के लिए प्रत्येक एजेंट का एक SQLite डेटाबेस
  • कॉन्फ़िगरेशन फ़ाइल-समर्थित रहता है: openclaw.json डेटाबेस के बाहर रहता है। रनटाइम प्रमाणीकरण प्रोफ़ाइल SQLite में चली जाती हैं; बाहरी प्रदाता या CLI क्रेडेंशियल फ़ाइलें OpenClaw के डेटाबेस के बाहर स्वामी द्वारा प्रबंधित रहती हैं।

वैश्विक डेटाबेस कंट्रोल-प्लेन डेटाबेस है। यह एजेंट खोज, साझा Gateway स्टेट, पेयरिंग, डिवाइस/Node स्टेट, टास्क और फ़्लो लेजर, Plugin स्टेट, शेड्यूलर रनटाइम स्टेट, बैकअप मेटाडेटा और माइग्रेशन स्टेट का स्वामी है।

एजेंट डेटाबेस डेटा-प्लेन डेटाबेस है। यह एजेंट के सेशन मेटाडेटा, ट्रांसक्रिप्ट इवेंट स्ट्रीम, VFS वर्कस्पेस या स्क्रैच नेमस्पेस, टूल आर्टिफ़ैक्ट, रन आर्टिफ़ैक्ट और खोजे/इंडेक्स किए जा सकने वाले एजेंट-स्थानीय कैश डेटा का स्वामी है।

इससे बड़े एजेंट वर्कस्पेस, ट्रांसक्रिप्ट और बाइनरी स्क्रैच डेटा को साझा Gateway राइट लेन में डालने के लिए बाध्य किए बिना एक टिकाऊ वैश्विक दृश्य मिलता है।

कठोर अनुबंध

इस माइग्रेशन का एक प्रामाणिक रनटाइम स्वरूप है:

  • सेशन पंक्तियाँ केवल सेशन मेटाडेटा को स्थायी रखती हैं। उन्हें transcriptLocator, ट्रांसक्रिप्ट फ़ाइल पथ, सहोदर JSONL पथ, लॉक पथ, प्रूनिंग मेटाडेटा या फ़ाइल-युग संगतता पॉइंटर स्थायी नहीं रखने चाहिए।
  • ट्रांसक्रिप्ट पहचान हमेशा SQLite पहचान होती है: {agentId, sessionId} और जहाँ प्रोटोकॉल को आवश्यकता हो, वहाँ वैकल्पिक विषय मेटाडेटा।
  • sqlite-transcript://... कोई रनटाइम या प्रोटोकॉल पहचान नहीं है। नए कोड को ट्रांसक्रिप्ट लोकेटर व्युत्पन्न, स्थायी, पास, पार्स या माइग्रेट नहीं करने चाहिए। रनटाइम और परीक्षणों में छद्म-लोकेटर बिल्कुल नहीं होने चाहिए; दस्तावेज़ इस स्ट्रिंग का उल्लेख केवल इसे प्रतिबंधित करने के लिए कर सकते हैं।
  • पुराने sessions.json, ट्रांसक्रिप्ट JSONL, .jsonl.lock, प्रूनिंग, ट्रंकेशन, और पुराना सेशन-पथ लॉजिक केवल doctor माइग्रेशन/इम्पोर्ट पथ में होने चाहिए।
  • पुराने सेशन कॉन्फ़िगरेशन उपनाम केवल doctor माइग्रेशन में होने चाहिए। रनटाइम session.idleMinutes, session.resetByType.dm, या किसी अन्य कॉन्फ़िगर किए गए एजेंट के लिए क्रॉस-एजेंट agent:main:* मुख्य-सेशन उपनामों की व्याख्या नहीं करता।
  • सेशन रूटिंग पहचान टाइप की गई रिलेशनल स्टेट है। सक्रिय रनटाइम और UI पथों को sessions.session_scope, sessions.account_id, sessions.primary_conversation_id, conversations, और session_conversations पढ़ने चाहिए; उन्हें session_key पार्स नहीं करना चाहिए या प्रदाता पहचान के लिए session_entries.entry_json से जानकारी नहीं निकालनी चाहिए, सिवाय उस समय संगतता छाया के रूप में जब पुराने कॉल साइट हटाए जा रहे हों।
  • dm बनाम direct जैसे चैनल-स्तरीय डायरेक्ट-मैसेज मार्कर रूटिंग शब्दावली हैं, ट्रांसक्रिप्ट लोकेटर या फ़ाइल-स्टोर संगतता हैंडल नहीं।
  • पुराना हुक हैंडलर कॉन्फ़िगरेशन केवल doctor चेतावनी/माइग्रेशन सतहों में होना चाहिए। रनटाइम को hooks.internal.handlers लोड नहीं करना चाहिए; हुक केवल खोजी गई हुक डायरेक्टरी और HOOK.md मेटाडेटा के माध्यम से चलते हैं।
  • रनटाइम स्टार्टअप, सक्रिय उत्तर पथ, Compaction, रीसेट, रिकवरी, डायग्नोस्टिक्स, TTS, मेमोरी हुक, उप-एजेंट, Plugin कमांड रूटिंग, प्रोटोकॉल सीमाएँ और हुक को रनटाइम के माध्यम से {agentId, sessionId} पास करना चाहिए।
  • परीक्षणों को {agentId, sessionId} के माध्यम से SQLite ट्रांसक्रिप्ट पंक्तियाँ सीड और सत्यापित करनी चाहिए। जो परीक्षण केवल JSONL पथ फ़ॉरवर्डिंग, कॉलर-दिए गए लोकेटर के संरक्षण या ट्रांसक्रिप्ट-फ़ाइल संगतता को सिद्ध करते हैं, उन्हें हटा देना चाहिए, जब तक कि वे doctor इम्पोर्ट, गैर-सेशन समर्थन/डीबग मैटेरियलाइज़ेशन या प्रोटोकॉल स्वरूप को कवर न करते हों।
  • runEmbeddedPiAgent(...), तैयार वर्कर रन और आंतरिक एम्बेडेड प्रयास को ट्रांसक्रिप्ट लोकेटर स्वीकार नहीं करने चाहिए। वे {agentId, sessionId} द्वारा SQLite ट्रांसक्रिप्ट मैनेजर खोलते हैं और उस मैनेजर को आंतरिकीकृत PI-संगत एजेंट सेशन में पास करते हैं, ताकि पुराने कॉलर रनर से JSON/JSONL ट्रांसक्रिप्ट न लिखवा सकें।
  • रनर डायग्नोस्टिक्स को रनटाइम/कैश/पेलोड ट्रेस रिकॉर्ड SQLite में संग्रहीत करने चाहिए। रनटाइम डायग्नोस्टिक्स को JSONL फ़ाइल ओवरराइड नॉब या सामान्य ट्रांसक्रिप्ट JSONL एक्सपोर्ट हेल्पर उजागर नहीं करने चाहिए; उपयोगकर्ता-सामना वाले एक्सपोर्ट डेटाबेस पंक्तियों से स्पष्ट आर्टिफ़ैक्ट मैटेरियलाइज़ कर सकते हैं, बिना फ़ाइल नामों को रनटाइम में वापस भेजे।
  • रॉ स्ट्रीम लॉगिंग OPENCLAW_RAW_STREAM=1 और SQLite डायग्नोस्टिक्स पंक्तियों का उपयोग करती है। पुराना pi-mono PI_RAW_STREAM, PI_RAW_STREAM_PATH, और raw-openai-completions.jsonl फ़ाइल लॉगर अनुबंध OpenClaw रनटाइम या परीक्षणों का हिस्सा नहीं है।
  • QMD मेमोरी इंडेक्सिंग को SQLite ट्रांसक्रिप्ट को मार्कडाउन फ़ाइलों में एक्सपोर्ट नहीं करना चाहिए। QMD केवल कॉन्फ़िगर की गई मेमोरी फ़ाइलों को इंडेक्स करता है; सेशन ट्रांसक्रिप्ट खोज SQLite-समर्थित रहती है।
  • नए कोड के लिए QMD SDK उप-पथ केवल QMD हेतु है। SQLite सेशन ट्रांसक्रिप्ट इंडेक्सिंग हेल्पर memory-core-host-engine-session-transcripts पर रहते हैं; कोई भी QMD पुनः-एक्सपोर्ट केवल संगतता के लिए है और रनटाइम कोड द्वारा उपयोग नहीं किया जाना चाहिए।
  • अंतर्निहित मेमोरी इंडेक्स स्वामी एजेंट डेटाबेस में रहते हैं। रनटाइम कॉन्फ़िगरेशन और समाधान किए गए रनटाइम अनुबंधों को memorySearch.store.path उजागर नहीं करना चाहिए; doctor उस पुराने कॉन्फ़िगरेशन कुंजी को हटाता है और वर्तमान कोड एजेंट databasePath को आंतरिक रूप से पास करता है।

कार्यान्वयन कार्य में तब तक कोड हटाते रहना चाहिए, जब तक ये कथन doctor/इम्पोर्ट/एक्सपोर्ट/डीबग सीमाओं के बाहर बिना किसी अपवाद के सत्य न हो जाएँ।

लक्ष्य स्थिति और प्रगति

कठोर लक्ष्य

  • एक वैश्विक SQLite डेटाबेस कंट्रोल-प्लेन स्टेट का स्वामी है: state/openclaw.sqlite
  • एक प्रति-एजेंट SQLite डेटाबेस डेटा-प्लेन स्टेट का स्वामी है: agents/<agentId>/agent/openclaw-agent.sqlite
  • कॉन्फ़िगरेशन फ़ाइल-समर्थित रहता है। openclaw.json इस डेटाबेस रीफ़ैक्टर का हिस्सा नहीं है।
  • पुरानी फ़ाइलें केवल doctor माइग्रेशन इनपुट हैं।
  • रनटाइम सक्रिय स्टेट के रूप में सेशन या ट्रांसक्रिप्ट JSONL कभी नहीं लिखता या पढ़ता।

लक्ष्य स्थितियाँ

  • not-started: फ़ाइल-युग रनटाइम कोड अभी भी सक्रिय स्टेट लिखता है।
  • migrating: doctor/इम्पोर्ट कोड फ़ाइल डेटा को SQLite में ले जा सकता है।
  • dual-read: अस्थायी ब्रिज SQLite और पुरानी फ़ाइलें दोनों पढ़ता है। इस रीफ़ैक्टर के लिए यह स्थिति प्रतिबंधित है, जब तक इसे स्पष्ट रूप से केवल doctor हेतु प्रलेखित न किया गया हो।
  • sqlite-runtime: रनटाइम केवल SQLite पढ़ता और लिखता है।
  • clean: पुराने रनटाइम API और परीक्षण हटा दिए गए हैं, और गार्ड प्रतिगमन रोकता है।
  • done: दस्तावेज़, परीक्षण, बैकअप, doctor माइग्रेशन और परिवर्तित जाँचें स्वच्छ स्थिति सिद्ध करती हैं।

वर्तमान स्थिति

  • सेशन: रनटाइम के लिए clean। सेशन पंक्तियाँ प्रति-एजेंट डेटाबेस में रहती हैं, रनटाइम API {agentId, sessionId} या {agentId, sessionKey} का उपयोग करते हैं, और sessions.json केवल doctor हेतु पुराना इनपुट है।
  • ट्रांसक्रिप्ट: रनटाइम के लिए clean। ट्रांसक्रिप्ट इवेंट, पहचान, स्नैपशॉट, और ट्रैजेक्टरी रनटाइम इवेंट प्रति-एजेंट डेटाबेस में रहते हैं। रनटाइम अब ट्रांसक्रिप्ट लोकेटर या JSONL ट्रांसक्रिप्ट पथ स्वीकार नहीं करता।
  • PI एम्बेडेड रनर: clean। एम्बेडेड PI रन, तैयार वर्कर, Compaction, और पुनः-प्रयास लूप SQLite सेशन स्कोप का उपयोग करते हैं और पुराने ट्रांसक्रिप्ट हैंडल अस्वीकार करते हैं।
  • Cron: रनटाइम के लिए clean। रनटाइम cron_jobs और Cron-स्वामित्व वाले task_runs का उपयोग करता है; रनटाइम परीक्षण SQLite storeKey नामकरण का उपयोग करते हैं, और फ़ाइल-युग Cron पथ केवल doctor के पुराने माइग्रेशन परीक्षणों में रहते हैं।
  • टास्क रजिस्ट्री: clean। टास्क और टास्क फ़्लो रनटाइम पंक्तियाँ state/openclaw.sqlite में रहती हैं; अप्रकाशित साइडकार SQLite इम्पोर्टर हटा दिए गए हैं।
  • Plugin स्टेट: clean। Plugin स्टेट/ब्लॉब पंक्तियाँ साझा वैश्विक डेटाबेस में रहती हैं; पुराने Plugin-स्टेट साइडकार SQLite हेल्पर से बचाव किया गया है।
  • मेमोरी: अंतर्निहित मेमोरी और सेशन ट्रांसक्रिप्ट इंडेक्सिंग के लिए sqlite-runtime। मेमोरी इंडेक्स तालिकाएँ प्रति-एजेंट डेटाबेस में रहती हैं, Plugin मेमोरी स्टेट साझा Plugin-स्टेट पंक्तियों का उपयोग करता है, और पुरानी मेमोरी फ़ाइलें doctor माइग्रेशन इनपुट या उपयोगकर्ता वर्कस्पेस सामग्री हैं।
  • बैकअप: sqlite-runtime। बैकअप संक्षिप्त SQLite स्नैपशॉट स्टेज करता है, सक्रिय WAL/SHM साइडकार छोड़ देता है, SQLite अखंडता सत्यापित करता है, और बैकअप रन को वैश्विक डेटाबेस में दर्ज करता है।
  • वर्कस्पेस सेटअप: sqlite-runtime। सेटअप पूर्णता, वर्कस्पेस अनुप्रमाणन, और जनरेट किए गए बूटस्ट्रैप हैश टाइप की गई साझा SQLite तालिकाओं में रहते हैं। रनटाइम सेवानिवृत्त वर्कस्पेस JSON और .attested साइडकार को पढ़ता या लिखता नहीं है; Doctor उनके सत्यापित इम्पोर्ट और प्रमाणित निष्कासन का स्वामी है।
  • Doctor माइग्रेशन: जानबूझकर migrating। Doctor पुराने JSON, JSONL और सेवानिवृत्त साइडकार स्टोर को SQLite में इम्पोर्ट करता है, माइग्रेशन रन/स्रोत दर्ज करता है, और सफल स्रोतों को हटा देता है।
  • निष्पादन अनुमोदन: file-runtime। TypeScript और macOS अभी भी सक्रिय स्टेट डायरेक्टरी के exec-approvals.json को पढ़ते और लिखते हैं; आरक्षित exec_approvals_config स्कीमा का अभी कोई रनटाइम स्वामी नहीं है। भविष्य के कटओवर में समान-स्टेट doctor इम्पोर्ट जोड़ना होगा और दोनों रनटाइम को साथ ले जाना होगा।
  • E2E स्क्रिप्ट: रनटाइम कवरेज के लिए clean। Docker MCP सीडिंग SQLite पंक्तियाँ लिखती है। रनटाइम-कॉन्टेक्स्ट Docker स्क्रिप्ट पुराना JSONL केवल doctor माइग्रेशन सीड के भीतर बनाती है और पुराने सेशन इंडेक्स पथ को स्पष्ट रूप से नाम देती है।

शेष कार्य

  • [x] Cron रनटाइम-परीक्षण स्टोर वेरिएबल का नाम storePath से बदलें, जब तक वे doctor के पुराने इनपुट न हों। फ़ाइलें: src/cron/service.test-harness.ts, src/cron/service.runs-one-shot-main-job-disables-it.test.ts, src/cron/service/timer.regression.test.ts, src/cron/service/ops.test.ts, src/cron/service/store.test.ts, src/cron/service.heartbeat-ok-summary-suppressed.test.ts, src/cron/service.main-job-passes-heartbeat-target-last.test.ts, src/cron/store.test.ts। प्रमाण: pnpm check:database-first-legacy-stores; rg -n 'storePath' src/cron --glob '!**/commands/doctor/**'
  • [x] अप्रचलित फ़ाइल-युग एक्सपोर्ट परीक्षण मॉक हटाएँ या उनका नाम बदलें। फ़ाइल: src/auto-reply/reply/commands-export-test-mocks.ts। प्रमाण: rg -n 'resolveSessionFilePath|sessionFile|storePath|transcriptLocator' src/auto-reply/reply
  • [x] Docker रनटाइम-कॉन्टेक्स्ट के पुराने JSONL सीड को स्पष्ट रूप से केवल doctor हेतु बनाएँ। फ़ाइल: scripts/e2e/session-runtime-context-docker-client.ts। प्रमाण: rg -n 'sessions\\.json|sessionFile|\\.jsonl' scripts/e2e/session-runtime-context-docker-client.ts केवल seedBrokenLegacySessionForDoctorMigration दिखाता है।
  • [x] किसी भी स्कीमा परिवर्तन के बाद Kysely जनरेट किए गए प्रकार संरेखित रखें। फ़ाइलें: src/state/openclaw-state-schema.sql, src/state/openclaw-agent-schema.sql, src/state/*generated*। प्रमाण: इस चरण में कोई स्कीमा परिवर्तन नहीं; pnpm db:kysely:check; pnpm lint:kysely
  • [x] छुए गए स्टोर, कमांड और स्क्रिप्ट के लिए केंद्रित परीक्षण फिर से चलाएँ। प्रमाण: pnpm test src/cron/service/store.test.ts src/cron/store.test.ts src/cron/service.heartbeat-ok-summary-suppressed.test.ts src/cron/service.main-job-passes-heartbeat-target-last.test.ts src/cron/service.every-jobs-fire.test.ts src/cron/service.persists-delivered-status.test.ts src/cron/service.runs-one-shot-main-job-disables-it.test.ts src/cron/service/ops.test.ts src/cron/service/timer.regression.test.ts src/auto-reply/reply/commands-export-session.test.ts extensions/telegram/src/thread-bindings.test.ts extensions/slack/src/monitor/message-handler/prepare.test.ts src/acp/translator.session-lineage-meta.test.ts; git diff --check
  • [x] done घोषित करने से पहले, परिवर्तित गेट या दूरस्थ व्यापक प्रमाण चलाएँ। प्रमाण: pnpm check:changed --timed -- <changed extension paths> अस्थायी Node 24/pnpm सेटअप और सिंक किए गए बिना-.git वर्कस्पेस के लिए स्पष्ट पथ रूटिंग के बाद Hetzner Crabbox रन run_3f1cabf6b25c पर सफल हुआ।

प्रतिगमन न होने दें

  • कोई ट्रांसक्रिप्ट लोकेटर नहीं।
  • कोई सक्रिय सेशन फ़ाइल नहीं।
  • doctor के पुराने माइग्रेशन परीक्षणों के अलावा कोई नकली JSONL परीक्षण फ़िक्स्चर नहीं।
  • जहाँ Kysely अपेक्षित है, वहाँ कोई रॉ SQLite अभिगम नहीं।
  • कोई नया फ़ाइल-युग DB माइग्रेशन नहीं। वैश्विक स्कीमा संस्करण 1 पर रहता है। प्रकाशित प्रति-एजेंट संस्करण 1 स्कीमा में स्थिर मेमोरी-स्रोत पहचानों के लिए संस्करण 2 तक एक सीमित रनटाइम माइग्रेशन है।

कोड-पठन मान्यताएँ

कोई अनुवर्ती उत्पाद निर्णय इस योजना को अवरुद्ध नहीं कर रहा है। कार्यान्वयन को इन मान्यताओं के साथ आगे बढ़ना चाहिए:

  • इस स्टोरेज पथ के लिए सीधे node:sqlite का उपयोग करें और WAL रीसेट के लिए सुरक्षित Node रनटाइम (22.22.3+, 24.15+, या 25.9+) आवश्यक बनाएँ।
  • ठीक एक सामान्य कॉन्फ़िगरेशन फ़ाइल रखें। इस रिफ़ैक्टर में कॉन्फ़िगरेशन, plugin मैनिफ़ेस्ट या Git कार्यक्षेत्रों को SQLite में न ले जाएँ।
  • रनटाइम संगतता फ़ाइलें आवश्यक नहीं हैं। पुराने JSON और JSONL फ़ाइलें केवल माइग्रेशन इनपुट हैं। ब्रांच-स्थानीय SQLite साइडकार कभी जारी नहीं किए गए थे और उन्हें आयात करने के बजाय हटा दिया जाता है।
  • पुरानी फ़ाइल-से-डेटाबेस माइग्रेशन का स्वामित्व openclaw doctor --fix के पास है। रनटाइम स्टार्टअप केवल जारी किए गए SQLite स्कीमा संस्करणों के बीच सीमित अपग्रेड का स्वामी है; इसे फ़ाइल-युग की स्थिति आयात नहीं करनी चाहिए।
  • क्रेडेंशियल संगतता भी इसी नियम का पालन करती है: रनटाइम क्रेडेंशियल SQLite में रहते हैं। पुराने auth-profiles.json, प्रति-एजेंट auth.json, और साझा credentials/oauth.json फ़ाइलें doctor माइग्रेशन इनपुट हैं और आयात के बाद हटा दी जाती हैं।
  • जनरेट की गई मॉडल कैटलॉग स्थिति डेटाबेस-समर्थित है। रनटाइम कोड को agents/<agentId>/agent/models.json नहीं लिखना चाहिए; मौजूदा models.json फ़ाइलें पुरानी doctor इनपुट हैं और agent_model_catalogs में आयात के बाद हटा दी जाती हैं।
  • रनटाइम को ट्रांसक्रिप्ट लोकेटर माइग्रेट, सामान्यीकृत या ब्रिज नहीं करने चाहिए। सक्रिय ट्रांसक्रिप्ट पहचान SQLite में {agentId, sessionId} है। फ़ाइल पथ केवल पुराने doctor इनपुट हैं, और sqlite-transcript://... को सीमा हैंडल मानने के बजाय रनटाइम, प्रोटोकॉल, हुक और plugin सतहों से गायब होना चाहिए।
  • SQLite के रनटाइम ट्रांसक्रिप्ट पठन पुराने JSONL प्रविष्टि-आकार माइग्रेशन नहीं चलाते या संगतता के लिए पूरे ट्रांसक्रिप्ट दोबारा नहीं लिखते। पुरानी प्रविष्टि का सामान्यीकरण स्पष्ट doctor/आयात उपयोगिताओं में रहता है। doctor SQLite पंक्तियाँ डालने से पहले पुरानी JSONL ट्रांसक्रिप्ट फ़ाइलों को सामान्यीकृत करता है; वर्तमान रनटाइम पंक्तियाँ पहले ही वर्तमान ट्रांसक्रिप्ट स्कीमा में लिखी जाती हैं। ट्रैजेक्टरी/सत्र निर्यात उन पंक्तियों को यथावत पढ़ता है और उसे निर्यात के समय पुराने माइग्रेशन नहीं करने चाहिए।
  • पुराने ट्रांसक्रिप्ट JSONL पार्स/माइग्रेशन सहायक केवल doctor के लिए हैं। रनटाइम ट्रांसक्रिप्ट प्रारूप कोड केवल वर्तमान SQLite ट्रांसक्रिप्ट संदर्भ बनाता है; पंक्तियाँ डालने से पहले पुराने JSONL प्रविष्टि अपग्रेड का स्वामित्व doctor के पास है।
  • रनटाइम के स्वामित्व वाला पुराना JSONL ट्रांसक्रिप्ट स्ट्रीमिंग सहायक हटा दिया गया। doctor आयात कोड स्पष्ट पुरानी फ़ाइल रीडिंग का स्वामी है; रनटाइम सत्र इतिहास SQLite पंक्तियाँ पढ़ता है।
  • Codex ऐप-सर्वर बाइंडिंग Codex plugin-स्थिति नेमस्पेस में OpenClaw sessionId को कैनोनिकल कुंजी के रूप में उपयोग करती हैं। sessionKey रूटिंग/प्रदर्शन के लिए मेटाडेटा है और इसे स्थायी सत्र आईडी को प्रतिस्थापित नहीं करना चाहिए या ट्रांसक्रिप्ट-फ़ाइल पहचान को पुनर्जीवित नहीं करना चाहिए।
  • कॉन्टेक्स्ट इंजन वर्तमान रनटाइम अनुबंध सीधे प्राप्त करते हैं। रजिस्ट्री को इंजनों को ऐसे पुनःप्रयास शिम से नहीं लपेटना चाहिए जो sessionKey, transcriptScope, या prompt हटाते हों; जो इंजन वर्तमान डेटाबेस-प्रथम पैरामीटर स्वीकार नहीं कर सकते, उन्हें ब्रिज किए जाने के बजाय स्पष्ट रूप से विफल होना चाहिए।
  • बैकअप आउटपुट एक आर्काइव फ़ाइल ही रहना चाहिए। डेटाबेस सामग्री को कच्चे लाइव WAL साइडकार के बजाय संक्षिप्त SQLite स्नैपशॉट के रूप में उस आर्काइव में जाना चाहिए।
  • पहले डेटाबेस-प्रथम चरण के लिए ट्रांसक्रिप्ट खोज उपयोगी है, लेकिन आवश्यक नहीं। स्कीमा को इस तरह डिज़ाइन करें कि FTS बाद में जोड़ा जा सके।
  • डेटाबेस सीमा के स्थिर होने तक वर्कर निष्पादन को सेटिंग्स के पीछे प्रयोगात्मक रहना चाहिए।

कोड-पठन निष्कर्ष

वर्तमान ब्रांच पहले ही अवधारणा-प्रमाण चरण से आगे निकल चुकी है। साझा डेटाबेस मौजूद है, Node node:sqlite को एक छोटे रनटाइम सहायक के माध्यम से जोड़ा गया है, और पूर्व स्टोर अब state/openclaw.sqlite या स्वामी openclaw-agent.sqlite डेटाबेस में लिखते हैं।

शेष कार्य SQLite चुनना नहीं है; बल्कि नई सीमा को साफ़ रखना और उन सभी संगतता-आकार वाले इंटरफ़ेस को हटाना है जो अभी भी पुरानी फ़ाइल दुनिया जैसे दिखते हैं:

  • सत्र storePath अब रनटाइम पहचान, परीक्षण फ़िक्स्चर का आकार या स्थिति पेलोड फ़ील्ड नहीं है। रनटाइम और ब्रिज परीक्षणों में अब storePath अनुबंध नाम नहीं है; doctor/माइग्रेशन कोड उस पुरानी शब्दावली का स्वामी है।
  • सत्र लेखन अब पुरानी इन-प्रोसेस store-writer.ts कतार से नहीं गुजरते। SQLite पैच लेखन ट्रांज़ैक्शन के बाहर तैयारी करता है, फिर स्पष्ट टकराव पहचान के साथ एक छोटा समकालिक सत्यापन/लागू ट्रांज़ैक्शन उपयोग करता है।
  • पुराने पथ की खोज के अभी भी वैध माइग्रेशन उपयोग हैं, लेकिन रनटाइम कोड को sessions.json और ट्रांसक्रिप्ट JSONL फ़ाइलों को संभावित लेखन लक्ष्य मानना बंद कर देना चाहिए।
  • एजेंट के स्वामित्व वाली तालिकाएँ प्रति-एजेंट SQLite डेटाबेस में रहती हैं। वैश्विक DB रजिस्ट्री/कंट्रोल-प्लेन पंक्तियाँ रखता है; ट्रांसक्रिप्ट पहचान प्रति-एजेंट ट्रांसक्रिप्ट पंक्तियों में {agentId, sessionId} है। रनटाइम कोड को ट्रांसक्रिप्ट फ़ाइल पथ स्थायी रूप से संग्रहित नहीं करने चाहिए या ट्रांसक्रिप्ट लोकेटर माइग्रेट नहीं करने चाहिए।
  • doctor पहले से कई पुरानी फ़ाइलें आयात करता है। सफ़ाई का उद्देश्य इसे एकल स्पष्ट माइग्रेशन कार्यान्वयन बनाना है, जिसे doctor एक स्थायी माइग्रेशन रिपोर्ट के साथ कॉल करता है।

कोई अतिरिक्त उत्पाद प्रश्न कार्यान्वयन को अवरुद्ध नहीं कर रहे हैं।

वर्तमान कोड संरचना

ब्रांच में पहले से एक वास्तविक साझा SQLite आधार है:

  • रनटाइम की न्यूनतम आवश्यकता अब WAL रीसेट के लिए सुरक्षित Node बिल्ड है: 22.22.3+, 24.15+, या 25.9+। package.json, CLI रनटाइम गार्ड, इंस्टॉलर डिफ़ॉल्ट, macOS रनटाइम लोकेटर, CI और सार्वजनिक इंस्टॉलेशन दस्तावेज़—सभी इस पर सहमत हैं।
  • src/state/openclaw-state-db.ts, openclaw.sqlite को खोलता है, WAL सेट करता है, synchronous=NORMAL, busy_timeout=30000, foreign_keys=ON सेट करता है और src/state/openclaw-state-schema.sql से व्युत्पन्न जनरेट किया गया स्कीमा मॉड्यूल लागू करता है।
  • Kysely टेबल प्रकार और रनटाइम स्कीमा मॉड्यूल, कमिट की गई .sql फ़ाइलों से बनाए गए अस्थायी SQLite डेटाबेस से जनरेट होते हैं; रनटाइम कोड अब ग्लोबल, प्रति-एजेंट या प्रॉक्सी कैप्चर डेटाबेस के लिए कॉपी-पेस्ट की गई स्कीमा स्ट्रिंग नहीं रखता।
  • रनटाइम स्टोर, SQLite पंक्ति आकृतियों की हस्तनिर्मित छाया प्रतियाँ बनाने के बजाय, उन जनरेट किए गए Kysely DB इंटरफ़ेस से चयनित और सम्मिलित पंक्ति प्रकार व्युत्पन्न करते हैं। रॉ SQL केवल स्कीमा अनुप्रयोग, प्रैग्मा और केवल-माइग्रेशन DDL तक सीमित रहता है।
  • ग्लोबल SQLite स्कीमा user_version = 1 पर बना हुआ है। प्रति-एजेंट स्कीमा संस्करण 2 पर है; उसका ओपनर शिप किए गए संस्करण 1 की मेमोरी-सोर्स कुंजी को स्थिर पूर्णांक पहचान में परमाण्विक रूप से माइग्रेट करता है। फ़ाइल-से-डेटाबेस आयात Doctor कोड में बना रहता है।
  • जहाँ स्वामित्व सीमा कैनॉनिकल है, वहाँ रिलेशनल स्वामित्व लागू किया जाता है: स्रोत माइग्रेशन पंक्तियाँ migration_runs से कैस्केड होती हैं, कार्य डिलीवरी स्थिति task_runs से कैस्केड होती है और ट्रांसक्रिप्ट पहचान पंक्तियाँ ट्रांसक्रिप्ट इवेंट से कैस्केड होती हैं।
  • वर्तमान साझा टेबलों में agent_databases, auth_profile_stores, auth_profile_state, plugin_state_entries, plugin_blob_entries, media_blobs, skill_uploads, capture_sessions, capture_events, capture_blobs, sandbox_registry_entries, cron_jobs, commitments, delivery_queue_entries, model_capability_cache, workspace_setup_state, workspace_path_aliases, workspace_attestations, workspace_generated_bootstrap_hashes, native_hook_relay_bridges, current_conversation_bindings, plugin_binding_approvals, tui_last_sessions, acp_sessions, acp_replay_sessions, acp_replay_events, task_runs, task_delivery_state, flow_runs, subagent_runs, migration_runs और backup_runs शामिल हैं।
  • मनमानी Plugin-स्वामित्व वाली स्थिति को होस्ट-स्वामित्व वाली टाइप्ड टेबल नहीं मिलतीं। इंस्टॉल किए गए Plugin संस्करणित JSON पेलोड के लिए plugin_state_entries और बाइट्स के लिए plugin_blob_entries का उपयोग करते हैं, जिनमें नेमस्पेस/कुंजी स्वामित्व, TTL क्लीनअप, बैकअप और Plugin माइग्रेशन रिकॉर्ड शामिल हैं। जहाँ क्वेरी अनुबंध का स्वामी होस्ट हो, वहाँ होस्ट-स्वामित्व वाली Plugin ऑर्केस्ट्रेशन स्थिति में अब भी टाइप्ड टेबल हो सकती हैं, जैसे plugin_binding_approvals
  • Plugin माइग्रेशन, Plugin-स्वामित्व वाले नेमस्पेस पर डेटा माइग्रेशन होते हैं, होस्ट स्कीमा माइग्रेशन नहीं। कोई Plugin माइग्रेशन प्रदाता के माध्यम से अपनी संस्करणित स्थिति/ब्लॉब प्रविष्टियों को माइग्रेट कर सकता है और होस्ट सामान्य माइग्रेशन लेजर में स्रोत/रन स्थिति दर्ज करता है। नए Plugin इंस्टॉलेशन के लिए openclaw-state-schema.sql बदलने की आवश्यकता नहीं होती, जब तक कि होस्ट स्वयं किसी नए क्रॉस-Plugin अनुबंध का स्वामित्व नहीं ले रहा हो।
  • src/state/openclaw-agent-db.ts, agents/<agentId>/agent/openclaw-agent.sqlite को खोलता है, डेटाबेस को ग्लोबल DB में पंजीकृत करता है और एजेंट-स्थानीय सत्र, ट्रांसक्रिप्ट, VFS, आर्टिफ़ैक्ट, कैश तथा मेमोरी-इंडेक्स टेबल का स्वामी होता है। साझा रनटाइम डिस्कवरी अब हर कॉल साइट पर उस क्वेरी को दोबारा लागू करने के बजाय जनरेटेड-टाइप्ड agent_databases रजिस्ट्री पढ़ती है।
  • ग्लोबल और प्रति-एजेंट डेटाबेस, डेटाबेस भूमिका, स्कीमा संस्करण, टाइमस्टैम्प और एजेंट डेटाबेस के लिए एजेंट आईडी वाली schema_meta पंक्ति दर्ज करते हैं। ग्लोबल DB user_version = 1 पर बना रहता है; सीमित मेमोरी-सोर्स पहचान माइग्रेशन के बाद प्रति-एजेंट DB संस्करण 2 का उपयोग करते हैं।
  • प्रति-एजेंट सत्र पहचान में अब session_id द्वारा कुंजीबद्ध कैनॉनिकल sessions रूट टेबल है, जिसमें session_key, session_scope, account_id, primary_conversation_id, टाइमस्टैम्प, प्रदर्शन फ़ील्ड, मॉडल मेटाडेटा, हार्नेस आईडी और पैरेंट/स्पॉन लिंकेज क्वेरी-योग्य कॉलम के रूप में हैं। session_routes, session_key से वर्तमान session_id तक का अद्वितीय सक्रिय रूट इंडेक्स है, जिससे कोई रूट कुंजी नए टिकाऊ सत्र में जा सकती है और हॉट रीड को डुप्लिकेट sessions.session_key पंक्तियों में से चुनना नहीं पड़ता। पुराना session_entries.entry_json संगतता-आकृति वाला पेलोड टिकाऊ session_id रूट से फ़ॉरेन कुंजी द्वारा जुड़ा है; अब वह किसी सत्र का एकमात्र स्कीमा-स्तरीय निरूपण नहीं है।
  • प्रति-एजेंट बाहरी वार्तालाप पहचान भी रिलेशनल है: conversations सामान्यीकृत प्रदाता/खाता/वार्तालाप पहचान संग्रहीत करता है और session_conversations एक OpenClaw सत्र को एक या अधिक बाहरी वार्तालापों से जोड़ता है। इसमें साझा-मुख्य DM सत्र शामिल हैं, जहाँ अनेक पीयर जानबूझकर एक सत्र से मैप हो सकते हैं और session_key में गलत जानकारी देने की आवश्यकता नहीं होती। SQLite प्राकृतिक प्रदाता पहचान की अद्वितीयता भी लागू करता है, इसलिए समान चैनल/खाता/प्रकार/पीयर/थ्रेड ट्यूपल अलग-अलग वार्तालाप आईडी में विभाजित नहीं हो सकता। साझा-मुख्य डायरेक्ट पीयर participant भूमिका से जुड़े होते हैं, जिससे एक OpenClaw सत्र पुराने पीयर को अस्पष्ट संबंधित पंक्तियों में घटाए बिना अनेक बाहरी DM पीयर का प्रतिनिधित्व कर सकता है। sessions.primary_conversation_id अब भी वर्तमान टाइप्ड डिलीवरी लक्ष्य की ओर संकेत करता है। बंद रूटिंग/स्थिति कॉलम केवल TypeScript यूनियन पर निर्भर रहने के बजाय SQLite CHECK बाधाओं द्वारा लागू किए जाते हैं। रनटाइम सत्र प्रोजेक्शन, टाइप्ड सत्र/वार्तालाप कॉलम लागू करने से पहले session_entries.entry_json से संगतता रूटिंग छायाएँ साफ़ करता है, ताकि पुराने JSON पेलोड डिलीवरी लक्ष्यों को फिर से सक्रिय न कर सकें। सबएजेंट घोषणा रूटिंग को इसी प्रकार टाइप्ड SQLite डिलीवरी संदर्भ की आवश्यकता होती है; वह अब संगतता SessionEntry रूट फ़ील्ड पर फ़ॉलबैक नहीं करती। Gateway chat.send का स्पष्ट डिलीवरी इनहेरिटेंस, origin/last* संगतता फ़ील्ड के बजाय टाइप्ड SQLite डिलीवरी संदर्भ पढ़ता है। tools.effective भी प्रदाता/खाता/थ्रेड संदर्भ को पुराने last* सत्र-प्रविष्टि छाया से नहीं, बल्कि टाइप्ड SQLite डिलीवरी/रूटिंग पंक्तियों से व्युत्पन्न करता है। सिस्टम-इवेंट प्रॉम्प्ट संदर्भ, origin छाया के बजाय टाइप्ड डिलीवरी फ़ील्ड से चैनल/to/खाता/थ्रेड फ़ील्ड दोबारा बनाता है। साझा deliveryContextFromSession सहायक और सत्र-से-वार्तालाप मैपर अब SessionEntry.origin को पूरी तरह अनदेखा करते हैं; केवल टाइप्ड डिलीवरी फ़ील्ड और रिलेशनल वार्तालाप पंक्तियाँ हॉट रूट पहचान बना सकती हैं। रनटाइम सत्र प्रविष्टि सामान्यीकरण, entry_json को स्थायी बनाने या प्रोजेक्ट करने से पहले origin हटा देता है और इनबाउंड मेटाडेटा नई ओरिजिन छायाएँ बनाने के बजाय टाइप्ड चैनल/चैट फ़ील्ड तथा रिलेशनल वार्तालाप पंक्तियाँ लिखता है।
  • ट्रांसक्रिप्ट इवेंट, ट्रांसक्रिप्ट स्नैपशॉट और ट्रैजेक्टरी रनटाइम इवेंट अब कैनॉनिकल प्रति-एजेंट sessions रूट को संदर्भित करते हैं और सत्र हटाए जाने पर कैस्केड होते हैं। ट्रांसक्रिप्ट पहचान/आइडेम्पोटेंसी पंक्तियाँ ठीक उसी ट्रांसक्रिप्ट इवेंट पंक्ति से कैस्केड होती रहती हैं।
  • मेमोरी-कोर इंडेक्स अब स्पष्ट एजेंट-डेटाबेस टेबल memory_index_meta, memory_index_sources, memory_index_chunks और memory_embedding_cache का उपयोग करते हैं, जहाँ memory_index_state संशोधन परिवर्तनों को ट्रैक करता है। वैकल्पिक FTS/वेक्टर साइड इंडेक्स के नाम सामान्य meta, files, chunks, chunks_fts या chunks_vec टेबल के बजाय memory_index_chunks_fts और memory_index_chunks_vec हैं। कैनॉनिकल नाम वर्तमान पथ/स्रोत पंक्ति आकृति और सीरियलाइज़्ड एम्बेडिंग संगतता बनाए रखते हैं। ये टेबल व्युत्पन्न/खोज कैश हैं, कैनॉनिकल ट्रांसक्रिप्ट स्टोरेज नहीं; इन्हें हटाकर मेमोरी कार्यक्षेत्र फ़ाइलों और कॉन्फ़िगर किए गए स्रोतों से दोबारा बनाया जा सकता है। शिप किए गए सामान्य-नाम वाले मेमोरी इंडेक्स को खोलने पर उसका मेटाडेटा, स्रोत, चंक और एम्बेडिंग कैश कैनॉनिकल टेबल में माइग्रेट होते हैं; व्युत्पन्न FTS/वेक्टर टेबल अपने कैनॉनिकल नामों के अंतर्गत दोबारा बनाई जाती हैं।
  • सबएजेंट रन पुनर्प्राप्ति स्थिति अब टाइप्ड साझा subagent_runs पंक्तियों में रहती है, जिनमें चाइल्ड, अनुरोधकर्ता और नियंत्रक सत्र कुंजियों के इंडेक्स हैं। पुरानी subagents/runs.json फ़ाइल केवल Doctor क्लीनअप इनपुट है। इसकी रन प्रविष्टियाँ क्षणिक पुनर्प्राप्ति स्थिति हैं, इसलिए Doctor रिटायरमेंट रसीद दर्ज करता है और फ़ाइल को आयात किए बिना त्याग देता है। चूँकि SQLite पंक्तियाँ हटाए जाने के बाद कोई फ़ाइल यह सिद्ध नहीं कर सकती कि उसकी प्रविष्टियाँ सक्रिय हैं या पुरानी, इसलिए ऑपरेटरों को इस सीमा के पार अपग्रेड करने से पहले फ़ाइल-युग के सक्रिय रन पूरे होने देना आवश्यक है।
  • वर्तमान वार्तालाप बाइंडिंग अब सामान्यीकृत वार्तालाप आईडी द्वारा कुंजीबद्ध टाइप्ड साझा current_conversation_bindings पंक्तियों में रहती हैं, जहाँ लक्ष्य एजेंट/सत्र कॉलम, वार्तालाप प्रकार, स्थिति, समाप्ति और मेटाडेटा डुप्लिकेट अपारदर्शी बाइंडिंग रिकॉर्ड के बजाय रिलेशनल कॉलम के रूप में संग्रहीत होते हैं। टिकाऊ बाइंडिंग कुंजी में सामान्यीकृत वार्तालाप प्रकार शामिल होता है, ताकि डायरेक्ट/समूह/चैनल संदर्भ टकराएँ नहीं और SQLite अमान्य बाइंडिंग प्रकार/स्थिति मान अस्वीकार कर दे। पुरानी bindings/current-conversations.json फ़ाइल केवल Doctor माइग्रेशन इनपुट है।
  • डिलीवरी कतार पुनर्प्राप्ति अब रीप्ले JSON पर चैनल, लक्ष्य, खाता, सत्र, पुनःप्रयास, त्रुटि, प्लेटफ़ॉर्म-प्रेषण और पुनर्प्राप्ति स्थिति के टाइप्ड कतार कॉलम अध्यारोपित करती है। entry_json रीप्ले पेलोड, हुक और फ़ॉर्मैटिंग पेलोड बनाए रखता है, लेकिन हॉट कतार रूटिंग/स्थिति के लिए टाइप्ड कॉलम प्रामाणिक हैं।
  • TUI अंतिम-सत्र पुनर्स्थापना पॉइंटर अब हैश किए गए TUI कनेक्शन/सत्र स्कोप द्वारा कुंजीबद्ध टाइप्ड साझा tui_last_sessions पंक्तियों में रहते हैं। रनटाइम केवल SQLite को पढ़ता और लिखता है, प्रत्येक स्कोप को परमाण्विक रूप से अपसर्ट करता है और Heartbeat सत्रों को बाहर रखता है। openclaw doctor --fix पुरानी TUI JSON फ़ाइल को कड़ाई से सत्यापित करता है, नई SQLite पंक्तियाँ बनाए रखता है, कैनॉनिकल परिणाम सत्यापित करता है और संग्रह छोड़ने के बजाय अपरिवर्तित विरासत फ़ाइल हटा देता है।
  • Discord कमांड डिप्लॉयमेंट हैश अब साझा Plugin-स्थिति SQLite स्टोर में रहते हैं। रनटाइम केवल सटीक एप्लिकेशन-स्कोप वाली कुंजियाँ पढ़ता और लिखता है। Doctor पुनर्निर्माण-योग्य विरासत discord/command-deploy-cache.json फ़ाइल को आयात किए बिना हटा देता है, इसलिए अगला स्टार्टअप एक कैनॉनिकल समन्वयन करता है।
  • डिफ़ॉल्ट TTS प्राथमिकताएँ अब speech-core Plugin के अंतर्गत कुंजीबद्ध साझा Plugin-स्थिति SQLite पंक्तियों में रहती हैं। पुरानी settings/tts.json फ़ाइल केवल Doctor माइग्रेशन इनपुट है; रनटाइम अब TTS प्राथमिकताओं वाली JSON फ़ाइलें पढ़ता या लिखता नहीं है और विरासत पथ रिज़ॉल्वर Doctor माइग्रेशन मॉड्यूल में रहता है।
  • सीक्रेट लक्ष्य मेटाडेटा अब यह दिखावा करने के बजाय स्टोर की बात करता है कि प्रत्येक क्रेडेंशियल लक्ष्य एक कॉन्फ़िगरेशन फ़ाइल है। openclaw.json कॉन्फ़िगरेशन स्टोर बना रहता है; ऑथ-प्रोफ़ाइल लक्ष्य टाइप्ड SQLite auth_profile_stores पंक्तियों का उपयोग करते हैं, जिनमें प्रदाता-आकृति वाले क्रेडेंशियल JSON पेलोड के रूप में रखे जाते हैं।
  • सीक्रेट ऑडिट अब रिटायर की गई प्रति-एजेंट auth.json फ़ाइलों को स्कैन नहीं करता। उस विरासत फ़ाइल के बारे में चेतावनी देने, उसे आयात करने और हटाने का स्वामित्व Doctor के पास है।
  • विरासत ऑथ प्रोफ़ाइल पथ सहायक अब Doctor के विरासत कोड में रहते हैं। कोर ऑथ प्रोफ़ाइल पथ सहायक, auth-profiles.json या auth-state.json रनटाइम पथ नहीं, बल्कि SQLite ऑथ-स्टोर पहचान और प्रदर्शन स्थान उजागर करते हैं।
  • सबएजेंट रन पुनर्प्राप्ति और OpenRouter मॉडल क्षमता कैश रनटाइम मॉड्यूल अब SQLite स्नैपशॉट रीडर/राइटर को केवल-Doctor विरासत JSON आयात सहायकों से अलग रखते हैं। OpenRouter क्षमताएँ एक अपारदर्शी कैश ब्लॉब या प्रदाता-विशिष्ट होस्ट टेबल के बजाय provider_id = "openrouter" के अंतर्गत टाइप्ड सामान्य model_capability_cache पंक्तियों का उपयोग करती हैं। सबएजेंट रन taskName टाइप्ड subagent_runs.task_name कॉलम में संग्रहीत होता है; payload_json प्रति रीप्ले/डीबग डेटा है, हॉट प्रदर्शन या लुकअप फ़ील्ड का स्रोत नहीं।
  • src/agents/filesystem/virtual-agent-fs.sqlite.ts, एजेंट डेटाबेस की vfs_entries टेबल पर SQLite VFS लागू करता है। डायरेक्टरी रीड, पुनरावर्ती निर्यात, डिलीट और रीनेम पूरे नेमस्पेस को स्कैन करने या LIKE पथ मिलान पर निर्भर रहने के बजाय इंडेक्स की गई (namespace, path) प्रीफ़िक्स रेंज का उपयोग करते हैं।
  • src/agents/runtime-worker.entry.ts प्रत्येक रन के लिए SQLite VFS, टूल आर्टिफ़ैक्ट, रन आर्टिफ़ैक्ट और सीमित दायरे वाले कैश स्टोर बनाता है।
  • वर्कस्पेस बूटस्ट्रैप पूर्णता, सत्यापन की नवीनता और जनरेट किए गए बूटस्ट्रैप हैश अब कैनोनिकल वर्कस्पेस पहचान द्वारा कुंजीबद्ध, टाइप की गई साझा workspace_setup_state, workspace_path_aliases, workspace_attestations और workspace_generated_bootstrap_hashes पंक्तियों में रहते हैं। स्थायी लेक्सिकल और वास्तविक-पथ उपनाम, कॉन्फ़िगर किया गया सिमलिंक गायब हो जाने के बाद भी गायब वर्कस्पेस की सुरक्षा को स्थिर रखते हैं; पुनर्निर्देशित उपनाम सुरक्षित रूप से विफल होते हैं। रनटाइम अब openclaw-workspace-state.json, .openclaw/workspace-state.json, स्टेट-डायरेक्टरी workspace-attestations/*.attested या सहोदर <workspace>.attested साइडकार को पढ़ता या लिखता नहीं है। openclaw doctor --fix लेगेसी स्रोतों को सत्यापित करके उन पर दावा करता है, माइग्रेशन रसीदों के साथ उन्हें SQLite में आयात करता है, कैनोनिकल पंक्तियों को सत्यापित करता है और उसके बाद ही दावा की गई फ़ाइलें हटाता है।
  • साझा स्कीमा एक exec_approvals_config सिंगलटन पंक्ति आरक्षित करता है, लेकिन रनटाइम कटओवर अभी लंबित है। TypeScript और macOS सहायक अब भी स्टेट-स्कोप वाली JSON फ़ाइल का उपयोग करते हैं और दोनों को एक साथ SQLite पर जाना होगा।
  • TypeScript डिवाइस पहचान अब टाइप की गई device_identities पंक्तियों का उपयोग करती है, जबकि केवल Doctor के लिए लेगेसी JSON आयात को रनटाइम स्वामी से बाहर रखा गया है। समन्वित स्कीमा और क्रॉस-रनटाइम माइग्रेशन लंबित होने के कारण डिवाइस प्रमाणीकरण अब भी फ़ाइल-समर्थित है; device_auth_tokens उस अनुवर्ती कार्य के लिए आरक्षित है।
  • GitHub Copilot टोकन एक्सचेंज कैश, साझा SQLite Plugin-स्टेट तालिका में github-copilot/token-cache/default के अंतर्गत रहता है। यह प्रदाता-स्वामित्व वाली कैश स्थिति है, इसलिए यह जानबूझकर होस्ट स्कीमा तालिका नहीं जोड़ता।
  • GitHub Copilot Compaction अब openclaw-compaction-*.json वर्कस्पेस साइडकार नहीं लिखता। हार्नेस ट्रैक किए गए SDK सत्र के लिए SDK इतिहास Compaction RPC को कॉल करता है, और OpenClaw संगतता मार्कर फ़ाइलों के बजाय टिकाऊ सत्र/ट्रांसक्रिप्ट स्थिति SQLite में रखता है।
  • साझा Swift रनटाइम (OpenClawKit) डिवाइस पहचान के लिए समान state/openclaw.sqlite#table/device_identities आकार और पंक्ति कुंजियों का उपयोग करता है। Apple-कंटेनर लेगेसी फ़ाइलों को Swift माइग्रेशन स्वामी आयात करता है क्योंकि TypeScript Doctor उन कंटेनरों तक पहुँच नहीं सकता। समन्वित प्रमाणीकरण अनुवर्ती कार्य के लिए Swift डिवाइस प्रमाणीकरण फ़ाइल-समर्थित बना हुआ है।
  • Android डिवाइस पहचान और कैश किया हुआ डिवाइस प्रमाणीकरण ऐप-स्थानीय स्टोर बने हुए हैं। इनके लिए अलग Android-स्वामित्व वाला माइग्रेशन आवश्यक है; होस्ट SQLite दावे वर्तमान Android व्यवहार का वर्णन नहीं करते।
  • Android सूचना का हालिया-पैकेज इतिहास टाइप की गई android_notification_recent_packages पंक्तियों का उपयोग करता है। रनटाइम अब पुरानी SharedPreferences CSV कुंजियों को माइग्रेट या पढ़ता नहीं है।
  • लेगेसी identity/device.json मौजूद होने पर, SQLite पहचान पंक्ति अमान्य होने पर, या SQLite पहचान स्टोर न खुल पाने पर डिवाइस पहचान निर्माण सुरक्षित रूप से विफल होता है। Doctor पहले उस फ़ाइल को आयात करके हटाता है, इसलिए रनटाइम स्टार्टअप माइग्रेशन से पहले पेयरिंग पहचान को चुपचाप बदल नहीं सकता।
  • डिवाइस पहचान चयन एक SQLite पंक्ति कुंजी है, JSON फ़ाइल लोकेटर नहीं। परीक्षण और Gateway सहायक स्पष्ट पहचान कुंजियाँ पास करते हैं; केवल Doctor माइग्रेशन और सुरक्षित-विफल स्टार्टअप गेट को सेवानिवृत्त identity/device.json फ़ाइल नाम ज्ञात है।
  • सत्र रीसेट संगतता अब Doctor कॉन्फ़िगरेशन माइग्रेशन में रहती है: session.idleMinutes को session.reset.idleMinutes में स्थानांतरित किया जाता है, session.resetByType.dm को session.resetByType.direct में स्थानांतरित किया जाता है, और रनटाइम रीसेट नीति केवल कैनोनिकल रीसेट कुंजियाँ पढ़ती है।
  • लेगेसी कॉन्फ़िगरेशन संगतता अब src/commands/doctor/ के अंतर्गत रहती है। सामान्य readConfigFileSnapshot() सत्यापन Doctor के लेगेसी डिटेक्टर आयात नहीं करता या लेगेसी समस्याओं पर टिप्पणी नहीं जोड़ता; runDoctorConfigPreflight() Doctor की मरम्मत/रिपोर्टिंग के लिए वे समस्याएँ जोड़ता है। Doctor कॉन्फ़िगरेशन प्रवाह src/commands/doctor/legacy-config.ts आयात करता है, और पुराने OAuth प्रोफ़ाइल-आईडी की मरम्मत src/commands/doctor/legacy/oauth-profile-ids.ts के अंतर्गत रहती है।
  • Doctor के अलावा अन्य कमांड लेगेसी कॉन्फ़िगरेशन की मरम्मत स्वतः नहीं चलाते। उदाहरण के लिए, openclaw update --channel अब अमान्य लेगेसी कॉन्फ़िगरेशन पर विफल होता है और Doctor माइग्रेशन कोड चुपचाप आयात करने के बजाय उपयोगकर्ता से Doctor चलाने को कहता है।
  • वेब पुश, APNs, Voice Wake, अपडेट जाँच और कॉन्फ़िगरेशन स्वास्थ्य अब संपूर्ण अपारदर्शी JSON ब्लॉब के बजाय सदस्यताओं, VAPID कुंजियों, Node पंजीकरणों, ट्रिगर पंक्तियों, रूटिंग पंक्तियों, अपडेट-सूचना स्थिति और कॉन्फ़िगरेशन स्वास्थ्य प्रविष्टियों के लिए टाइप की गई साझा SQLite तालिकाओं का उपयोग करते हैं। वेब पुश और APNs लेखन केवल प्रभावित प्राथमिक-कुंजी पंक्ति को अपसर्ट करते हैं; कॉन्फ़िगरेशन स्वास्थ्य कॉन्फ़िगरेशन पथ के अनुसार समन्वय करता है। उनके रनटाइम मॉड्यूल केवल Doctor के लिए उपलब्ध लेगेसी JSON आयात सहायकों से अलग रहते हैं।
  • APNs रनटाइम केवल apns_registrations को पढ़ता और लिखता है। स्पष्ट openclaw doctor --fix सेवानिवृत्त push/apns-registrations.json को सख्ती से आयात करता है, मौजूदा कैनोनिकल पंक्तियाँ सुरक्षित रखता है, लेनदेन सत्यापित करता है, रसीद दर्ज करता है और रहस्य वाली JSON फ़ाइल हटाता है। रसीद-समर्थित पुनः प्रयास केवल सफ़ाई करते हैं, जबकि apns_registration_tombstones पहली मरम्मत से पहले हुए अमान्यकरणों को कवर करते हैं, ताकि पुराने रिले अनुदान या डिवाइस टोकन पुनर्जीवित न हो सकें।
  • Node-होस्ट कॉन्फ़िगरेशन अब साझा SQLite डेटाबेस में टाइप की गई सिंगलटन पंक्ति का उपयोग करता है। पुरानी node.json फ़ाइल या बाधित दावा मौजूद रहने तक रनटाइम सुरक्षित रूप से विफल होता है; स्पष्ट openclaw doctor --fix सामान्य रनटाइम उपयोग से पहले उसे सख्ती से आयात करके हटाता है।
  • डिवाइस/Node पेयरिंग, चैनल पेयरिंग, चैनल अनुमति-सूचियाँ और बूटस्ट्रैप स्थिति अब संपूर्ण अपारदर्शी JSON ब्लॉब के बजाय टाइप की गई SQLite पंक्तियों का उपयोग करते हैं। Plugin बाइंडिंग अनुमोदन और Cron जॉब स्थिति भी इसी विभाजन का पालन करते हैं: रनटाइम मॉड्यूल SQLite-समर्थित संचालन और तटस्थ स्नैपशॉट सहायक उजागर करते हैं, और पेयरिंग/बूटस्ट्रैप तथा Plugin बाइंडिंग अनुमोदन के स्नैपशॉट लेखन तालिकाओं को रिक्त करने के बजाय प्राथमिक कुंजी के अनुसार पंक्तियों का समन्वय करते हैं, जबकि Doctor src/commands/doctor/legacy/* मॉड्यूल के माध्यम से पुरानी JSON फ़ाइलें आयात करके हटाता है।
  • इंस्टॉल किए गए Plugin रिकॉर्ड अब SQLite इंस्टॉल्ड-Plugin इंडेक्स में रहते हैं। रनटाइम कॉन्फ़िगरेशन पढ़ना/लिखना अब पुराने plugins.installs लेखक-कॉन्फ़िगरेशन डेटा को माइग्रेट या सुरक्षित नहीं रखता; Doctor सामान्य रनटाइम उपयोग से पहले उस लेगेसी कॉन्फ़िगरेशन आकार को SQLite में आयात करता है।
  • QQBot क्रेडेंशियल पुनर्प्राप्ति स्नैपशॉट अब SQLite Plugin स्थिति में qqbot/credential-backups के अंतर्गत रहते हैं। रनटाइम अब qqbot/data/credential-backup*.json नहीं लिखता; QQBot Doctor अनुबंध सक्रिय स्टेट निर्देशिका से उन लेगेसी बैकअप फ़ाइलों को आयात और संग्रहित करता है।
  • Gateway रीलोड योजना आंतरिक installedPluginIndex.installRecords.* अंतर नेमस्पेस के अंतर्गत SQLite इंस्टॉल्ड-Plugin इंडेक्स स्नैपशॉट की तुलना करती है। रनटाइम रीलोड निर्णय अब उन पंक्तियों को नकली plugins.installs कॉन्फ़िगरेशन ऑब्जेक्ट में नहीं लपेटते।
  • Matrix खाता क्रेडेंशियल अब SQLite Plugin स्थिति में रहते हैं। रनटाइम केवल वही कैनोनिकल स्टोर पढ़ता है; Doctor उन सेवानिवृत्त credentials/matrix/credentials*.json फ़ाइलों को आयात, सत्यापित और संग्रहित करता है जिनका खाता हल किया जा सकता है।
  • कोर पेयरिंग और Cron रनटाइम मॉड्यूल अब लेगेसी JSON पथ बिल्डरों का उपयोग नहीं करते। अप्रचलित पेयरिंग-पथ SDK सहायक केवल माइग्रेशन संगतता के लिए बना हुआ है; Doctor स्थिति माइग्रेशन उसकी फ़ाइल पढ़ने और आयात का स्वामी है। Doctor-स्वामित्व वाले लेगेसी मॉड्यूल केवल आयात परीक्षणों और माइग्रेशन के लिए pending.json, paired.json, bootstrap.json और cron/jobs.json स्रोत पथ बनाते हैं। लेगेसी Cron जॉब-आकार सामान्यीकरण और JSONL इतिहास आयात src/commands/doctor/cron/ के अंतर्गत रहते हैं; लेगेसी SQLite इतिहास को अंतिम रूप देना स्थिति डेटाबेस खोलने के दौरान चलता है।
  • src/commands/doctor/legacy/runtime-state.ts Node होस्ट कॉन्फ़िगरेशन सहित लेगेसी JSON स्थिति फ़ाइलों को Doctor से SQLite में आयात करता है। नए लेगेसी फ़ाइल आयातक src/commands/doctor/legacy/ के अंतर्गत रहते हैं।
  • src/commands/doctor/state-migrations.ts लेगेसी sessions.json और *.jsonl ट्रांसक्रिप्ट सीधे SQLite में आयात करता है और सफल स्रोतों को हटाता है। यह अब रूट लेगेसी ट्रांसक्रिप्ट को agents/<agentId>/sessions/*.jsonl के माध्यम से चरणबद्ध नहीं करता या आयात से पहले कैनोनिकल JSONL लक्ष्य नहीं बनाता।
  • स्थिति अखंडता की Doctor जाँच अब लेगेसी सत्र निर्देशिकाओं को स्कैन नहीं करती या अनाथ JSONL हटाने का विकल्प नहीं देती। लेगेसी ट्रांसक्रिप्ट फ़ाइलें केवल माइग्रेशन इनपुट हैं, और माइग्रेशन चरण आयात तथा स्रोत हटाने दोनों का स्वामी है।
  • लेगेसी सैंडबॉक्स रजिस्ट्री आयात src/commands/doctor/legacy/sandbox-registry.ts के अंतर्गत रहता है; सक्रिय सैंडबॉक्स रजिस्ट्री पढ़ना और लिखना केवल SQLite पर रहता है।
  • लेगेसी सत्र ट्रांसक्रिप्ट स्वास्थ्य/आयात मरम्मत src/commands/doctor/legacy/session-transcript-health.ts के अंतर्गत रहती है; रनटाइम कमांड मॉड्यूल अब JSONL ट्रांसक्रिप्ट पार्सिंग या सक्रिय-शाखा मरम्मत कोड नहीं रखते।

पूर्ण किए गए समेकन/हटाने की मुख्य बातें:

  • Plugin स्थिति अब साझा state/openclaw.sqlite डेटाबेस का उपयोग करती है। पुराना शाखा-स्थानीय plugin-state/state.sqlite साइडकार आयातक हटा दिया गया है क्योंकि वह SQLite लेआउट कभी जारी नहीं हुआ। प्रोब/परीक्षण सहायक Plugin-स्थिति-विशिष्ट SQLite पथ उजागर करने के बजाय साझा databasePath की रिपोर्ट करते हैं।
  • कार्य और TaskFlow रनटाइम तालिकाएँ अब tasks/runs.sqlite और tasks/flows/registry.sqlite के बजाय साझा state/openclaw.sqlite डेटाबेस में रहती हैं; उसी अप्रकाशित-लेआउट कारण से पुराने साइडकार आयातक हटा दिए गए हैं।
  • src/config/sessions/store.ts को अब इनबाउंड मेटाडेटा, रूट अपडेट या अपडेट-समय रीड के लिए storePath की आवश्यकता नहीं है। कमांड स्थायित्व, CLI सत्र सफ़ाई, उप-एजेंट गहराई, प्रमाणीकरण ओवरराइड और ट्रांसक्रिप्ट सत्र पहचान एजेंट/सत्र पंक्ति API का उपयोग करते हैं। लेखन आशावादी टकराव पुनःप्रयास के साथ SQLite पंक्ति पैच के रूप में लागू किए जाते हैं।
  • सत्र लक्ष्य समाधान अब पुराने sessions.json पथों के बजाय प्रति-एजेंट डेटाबेस लक्ष्य उजागर करता है। साझा Gateway, ACP मेटाडेटा, डॉक्टर रूट सुधार और openclaw sessions, agent_databases के साथ कॉन्फ़िगर किए गए एजेंटों की गणना करते हैं।
  • Gateway सत्र रूटिंग अब resolveGatewaySessionDatabaseTarget का उपयोग करती है; लौटाए गए लक्ष्य में पुराने सत्र-स्टोर फ़ाइल पथ के बजाय databasePath और संभावित SQLite पंक्ति कुंजियाँ होती हैं।
  • चैनल सत्र रनटाइम प्रकार अब अपडेट-समय रीड, इनबाउंड मेटाडेटा और अंतिम-रूट अपडेट के लिए {agentId, sessionKey} उजागर करते हैं। पुराना saveSessionStore(storePath, store) संगतता प्रकार हटा दिया गया है।
  • Plugin रनटाइम, एक्सटेंशन API और Plugin SDK सत्र सतहें अब सक्रिय-सत्र संपूर्ण-स्टोर/फ़ाइल संगतता सहायकों के बजाय SQLite-समर्थित सत्र पंक्ति सहायक उजागर करती हैं। रूट लाइब्रेरी संगतता निर्यात पुराने आंतरिक और माइग्रेशन कॉलरों के लिए केवल Plugin SDK के बाहर उपलब्ध रहते हैं। पुराना resolveLegacySessionStorePath सहायक हटा दिया गया है; पुराना sessions.json पथ निर्माण अब माइग्रेशन और परीक्षण फ़िक्स्चर तक स्थानीय है।
  • src/config/sessions/session-entries.sqlite.ts अब प्रति-एजेंट डेटाबेस में प्रामाणिक सत्र प्रविष्टियाँ संग्रहीत करता है और पंक्ति-स्तरीय रीड/अपसर्ट/डिलीट पैच समर्थन प्रदान करता है। रनटाइम अपसर्ट/पैच/डिलीट अब अक्षर-भेद वाले रूपों के लिए स्कैन या पुरानी उपनाम कुंजियों को हटाता नहीं है; प्रामाणीकरण का स्वामित्व डॉक्टर के पास है। स्वतंत्र JSON आयात सहायक हटा दिया गया है और माइग्रेशन संपूर्ण सत्र तालिका बदलने के बजाय नई पंक्तियों को अपसर्ट करके मर्ज करता है। सार्वजनिक रीड/सूची/लोड सहायक टाइप की गई sessions और conversations पंक्तियों से सक्रिय सत्र मेटाडेटा प्रक्षेपित करते हैं; entry_json एक संगतता/डीबग छाया है और टाइप की गई सत्र पहचान या डिलीवरी संदर्भ खोए बिना पुरानी या अमान्य हो सकती है।
  • src/config/sessions/delivery-info.ts अब टाइप की गई प्रति-एजेंट sessions + conversations + session_conversations पंक्तियों से डिलीवरी संदर्भ हल करता है। यह अब session_entries.entry_json से रनटाइम डिलीवरी पहचान का पुनर्निर्माण नहीं करता; टाइप की गई वार्तालाप पंक्ति का न होना रनटाइम फ़ॉलबैक नहीं, बल्कि डॉक्टर माइग्रेशन/सुधार समस्या है।
  • संग्रहीत-सत्र रीसेट निर्णय अब टाइप किए गए sessions.session_scope, sessions.chat_type और sessions.channel मेटाडेटा को प्राथमिकता देते हैं। sessionKey पार्सिंग केवल कमांड लक्ष्यों पर स्पष्ट थ्रेड/विषय प्रत्ययों के लिए रहती है; समूह बनाम प्रत्यक्ष रीसेट वर्गीकरण अब कुंजी के आकार से नहीं आता।
  • सत्र सूची/स्थिति प्रदर्शन वर्गीकरण अब टाइप किए गए चैट मेटाडेटा और Gateway सत्र प्रकार का उपयोग करता है। यह अब session_key के भीतर :group: या :channel: उपस्ट्रिंग को स्थायी समूह/प्रत्यक्ष सत्य नहीं मानता।
  • मौन-उत्तर नीति चयन अब केवल स्पष्ट वार्तालाप प्रकार या सतह मेटाडेटा का उपयोग करता है। यह अब session_key उपस्ट्रिंग से प्रत्यक्ष/समूह नीति का अनुमान नहीं लगाता।
  • सत्र प्रदर्शन मॉडल समाधान अब एजेंट आईडी को session_key से अलग निकालने के बजाय SQLite सत्र डेटाबेस लक्ष्य से प्राप्त करता है।
  • एजेंट-से-एजेंट घोषणा लक्ष्य हाइड्रेशन अब केवल टाइप किए गए sessions.list deliveryContext का उपयोग करता है। यह अब पुराने origin, प्रतिबिंबित last* फ़ील्ड या session_key आकार से चैनल/खाता/थ्रेड रूटिंग पुनर्प्राप्त नहीं करता।
  • sessions_send थ्रेड-लक्ष्य अस्वीकृति अब टाइप किया गया SQLite रूटिंग मेटाडेटा पढ़ती है। यह अब लक्ष्य कुंजी से थ्रेड प्रत्ययों को पार्स करके लक्ष्यों को अस्वीकार या स्वीकार नहीं करती।
  • समूह-क्षेत्रित टूल नीति सत्यापन अब वर्तमान या उत्पन्न सत्र के लिए टाइप की गई SQLite वार्तालाप रूटिंग पढ़ता है। यह अब sessionKey को डिकोड करके समूह/चैनल पहचान पर भरोसा नहीं करता; जब कोई टाइप की गई सत्र पंक्ति उनकी पुष्टि नहीं करती, तो कॉलर द्वारा दिए गए समूह आईडी हटा दिए जाते हैं।
  • चैनल मॉडल ओवरराइड मिलान अब स्पष्ट समूह और मूल वार्तालाप मेटाडेटा का उपयोग करता है। यह अब parentSessionKey से मूल वार्तालाप आईडी डिकोड नहीं करता।
  • संग्रहीत मॉडल ओवरराइड वंशानुक्रम को अब टाइप किए गए सत्र संदर्भ से स्पष्ट मूल सत्र कुंजी की आवश्यकता होती है। यह अब sessionKey में :thread: या :topic: प्रत्ययों से मूल ओवरराइड प्राप्त नहीं करता।
  • पुराना सत्र थ्रेड-सूचना रैपर और लोड किया गया Plugin थ्रेड पार्सर हटा दिए गए हैं; कोई रनटाइम कोड config/sessions/thread-info आयात नहीं करता।
  • चैनल वार्तालाप सहायक अब पूर्ण-सत्र-कुंजी पार्सिंग ब्रिज उजागर नहीं करता। कोर अभी भी resolveSessionConversation(...) के माध्यम से प्रदाता-स्वामित्व वाली अपरिष्कृत वार्तालाप आईडी को सामान्यीकृत करता है, लेकिन यह sessionKey से रूट तथ्य पुनर्निर्मित नहीं करता।
  • पूर्णता डिलीवरी, प्रेषण नीति और कार्य रखरखाव अब session_key आकार से चैट प्रकार प्राप्त नहीं करते। पुराना चैट-प्रकार कुंजी पार्सर हटा दिया गया है; इन पथों को टाइप किया गया सत्र मेटाडेटा, टाइप किया गया डिलीवरी संदर्भ या स्पष्ट डिलीवरी लक्ष्य शब्दावली चाहिए।
  • सत्र सूची/स्थिति, निदान, अनुमोदन खाता बाइंडिंग, TUI Heartbeat फ़िल्टरिंग और उपयोग सारांश अब प्रदाता/खाता/थ्रेड/प्रदर्शन रूटिंग के लिए SessionEntry.origin से जानकारी नहीं निकालते। शेष रनटाइम origin रीड केवल गैर-सत्र अवधारणाओं या वर्तमान-टर्न डिलीवरी ऑब्जेक्ट के हैं।
  • अनुमोदन-अनुरोध मूल वार्तालाप लुकअप अब टाइप की गई प्रति-एजेंट सत्र रूटिंग पंक्तियाँ पढ़ता है। यह अब sessionKey से चैनल/समूह/थ्रेड वार्तालाप पहचान पार्स नहीं करता; टाइप किए गए मेटाडेटा का न होना माइग्रेशन/सुधार समस्या है।
  • Gateway सत्र-परिवर्तित/चैट/सत्र इवेंट पेलोड अब SessionEntry.origin या last* रूट छायाएँ वापस नहीं भेजते; क्लाइंट को टाइप किए गए channel, chatType और deliveryContext प्राप्त होते हैं।
  • Heartbeat डिलीवरी समाधान अब टाइप किया गया SQLite deliveryContext सीधे प्राप्त कर सकता है और Heartbeat रनटाइम वर्तमान रूटिंग के लिए संगतता session_entries छायाओं पर निर्भर रहने के बजाय प्रति-एजेंट सत्र डिलीवरी पंक्ति पास करता है।
  • Cron पृथक-एजेंट डिलीवरी लक्ष्य समाधान भी संगतता प्रविष्टि पेलोड पर फ़ॉलबैक करने से पहले टाइप की गई प्रति-एजेंट सत्र डिलीवरी पंक्ति से अपने वर्तमान रूट को हाइड्रेट करता है।
  • उप-एजेंट घोषणा उद्गम समाधान अब loadRequesterSessionEntry के माध्यम से टाइप किए गए अनुरोधकर्ता-सत्र डिलीवरी संदर्भ को आगे बढ़ाता है और संगतता last*/deliveryContext छायाओं के बजाय उस पंक्ति को प्राथमिकता देता है।
  • इनबाउंड सत्र मेटाडेटा अपडेट अब पहले टाइप की गई प्रति-एजेंट डिलीवरी पंक्ति के साथ मर्ज होते हैं; पुरानी SessionEntry डिलीवरी फ़ील्ड केवल तब फ़ॉलबैक हैं जब कोई टाइप की गई वार्तालाप पंक्ति मौजूद नहीं होती।
  • पुनःआरंभ/अपडेट डिलीवरी निष्कर्षण अब टाइप की गई SQLite डिलीवरी threadId को sessionKey से पार्स किए गए विषय/थ्रेड अंशों पर प्राथमिकता देता है; पार्सिंग केवल पुराने थ्रेड-आकार वाले कुंजियों के लिए फ़ॉलबैक है।
  • हुक एजेंट संदर्भ चैनल आईडी अब पहले टाइप की गई SQLite वार्तालाप पहचान, फिर स्पष्ट संदेश मेटाडेटा को प्राथमिकता देते हैं। वे अब sessionKey से प्रदाता/समूह/चैनल अंश पार्स नहीं करते।
  • Gateway chat.send बाहरी-रूट वंशानुक्रम अब sessionKey के भागों से चैनल/प्रत्यक्ष/समूह दायरे का अनुमान लगाने के बजाय टाइप किया गया SQLite सत्र रूटिंग मेटाडेटा पढ़ता है। चैनल-क्षेत्रित सत्र केवल तभी वंशानुक्रम करते हैं जब टाइप किया गया सत्र चैनल और चैट प्रकार संग्रहीत डिलीवरी संदर्भ से मेल खाते हैं; साझा-मुख्य सत्र अपने अधिक कठोर CLI/क्लाइंट-मेटाडेटा-रहित नियम को बनाए रखते हैं।
  • पुनःआरंभ-सेंटिनल जागरण और निरंतरता रूटिंग अब Heartbeat जागरण या रूट किए गए एजेंट-टर्न निरंतरताओं को कतारबद्ध करने से पहले टाइप की गई SQLite डिलीवरी/रूटिंग पंक्तियाँ पढ़ती है। यह अब सत्र-प्रविष्टि JSON छाया से डिलीवरी संदर्भ पुनर्निर्मित नहीं करती।
  • Gateway tools.effective संदर्भ समाधान अब प्रदाता, खाता, लक्ष्य, थ्रेड और उत्तर-मोड इनपुट के लिए टाइप की गई SQLite डिलीवरी/रूटिंग पंक्तियाँ पढ़ता है। यह अब पुरानी session_entries.entry_json उद्गम छायाओं से उन सक्रिय रूटिंग फ़ील्ड को पुनर्प्राप्त नहीं करता।
  • रीयलटाइम वॉइस परामर्श रूटिंग अब टाइप की गई प्रति-एजेंट SQLite सत्र पंक्तियों से मूल/कॉल डिलीवरी हल करती है। एम्बेडेड एजेंट संदेश रूट चुनते समय यह अब संगतता SessionEntry.deliveryContext छायाओं पर फ़ॉलबैक नहीं करती।
  • ACP स्पॉन Heartbeat रिले और मूल-स्ट्रीम रूटिंग अब टाइप की गई SQLite सत्र पंक्तियों से मूल डिलीवरी पढ़ते हैं। वे अब संगतता सत्र-प्रविष्टि छायाओं से मूल डिलीवरी संदर्भ पुनर्निर्मित नहीं करते।
  • सत्र डिलीवरी रूट संरक्षण अब टाइप किए गए चैट मेटाडेटा और स्थायी डिलीवरी स्तंभों का अनुसरण करता है। यह अब sessionKey से चैनल संकेत, प्रत्यक्ष/मुख्य चिह्न या थ्रेड आकार नहीं निकालता; आंतरिक वेबचैट रूट केवल तभी बाहरी लक्ष्य प्राप्त करते हैं जब SQLite में सत्र के लिए पहले से टाइप की गई/स्थायी डिलीवरी पहचान मौजूद हो।
  • सामान्य सत्र डिलीवरी निष्कर्षण अब केवल सटीक टाइप की गई SQLite सत्र डिलीवरी पंक्ति पढ़ता है। यह अब थ्रेड/विषय प्रत्यय पार्स नहीं करता या थ्रेड-आकार वाली कुंजी से आधार सत्र कुंजी पर फ़ॉलबैक नहीं करता।
  • उत्तर प्रेषण, पुनःआरंभ सेंटिनल पुनर्प्राप्ति और रीयलटाइम वॉइस परामर्श रूटिंग अब थ्रेड रूटिंग के लिए सटीक टाइप की गई SQLite सत्र/वार्तालाप पंक्तियों का उपयोग करते हैं। वे अब थ्रेड-आकार वाली सत्र कुंजियों को पार्स करके थ्रेड आईडी या आधार-सत्र डिलीवरी संदर्भ पुनर्प्राप्त नहीं करते।
  • एम्बेडेड PI इतिहास सीमा अब प्रदाता, चैट प्रकार और समकक्ष पहचान के लिए टाइप किए गए SQLite सत्र रूटिंग प्रक्षेपण (sessions + प्राथमिक conversations) का उपयोग करती है। यह अब sessionKey से प्रदाता, DM, समूह या थ्रेड आकार पार्स नहीं करती।
  • Cron टूल डिलीवरी अनुमान अब केवल स्पष्ट डिलीवरी या वर्तमान टाइप किए गए डिलीवरी संदर्भ का उपयोग करता है। यह अब agentSessionKey से चैनल, समकक्ष, खाता या थ्रेड लक्ष्य डिकोड नहीं करता।
  • रनटाइम सत्र पंक्तियाँ अब पुराना lastProvider रूट उपनाम नहीं रखतीं। सहायक और परीक्षण टाइप किए गए lastChannel और deliveryContext फ़ील्ड का उपयोग करते हैं; डॉक्टर माइग्रेशन ही एकमात्र स्थान है जिसे पुराने रूट उपनामों या स्थायी origin छायाओं का अनुवाद करना चाहिए।
  • ट्रांसक्रिप्ट इवेंट, VFS पंक्तियाँ और टूल आर्टिफ़ैक्ट पंक्तियाँ अब प्रति-एजेंट डेटाबेस में लिखती हैं। अप्रकाशित वैश्विक ट्रांसक्रिप्ट-फ़ाइल मैपिंग तालिका हटा दी गई है; इसके बजाय डॉक्टर स्थायी माइग्रेशन पंक्तियों में पुराने स्रोत पथ दर्ज करता है।
  • रनटाइम ट्रांसक्रिप्ट लुकअप अब JSONL बाइट ऑफ़सेट स्कैन या पुरानी ट्रांसक्रिप्ट फ़ाइलों की जाँच नहीं करता। Gateway चैट/मीडिया/इतिहास पथ SQLite से ट्रांसक्रिप्ट पंक्तियाँ पढ़ते हैं; सत्र JSONL अब केवल पुराना डॉक्टर इनपुट है, रनटाइम स्थिति या निर्यात प्रारूप नहीं।
  • ट्रांसक्रिप्ट मूल और शाखा संबंध SQLite ट्रांसक्रिप्ट हेडर में संरचित parentTranscriptScope: {agentId, sessionId} मेटाडेटा का उपयोग करते हैं, पथ-जैसी agent-db:...transcript_events... लोकेटर स्ट्रिंग का नहीं।
  • ट्रांसक्रिप्ट प्रबंधक अनुबंध अब अंतर्निहित स्थायी create(cwd) या continueRecent(cwd) कंस्ट्रक्टर उजागर नहीं करता। स्थायी ट्रांसक्रिप्ट प्रबंधक स्पष्ट {agentId, sessionId} दायरे के साथ खोले जाते हैं; केवल इन-मेमोरी मैनेजर परीक्षणों और शुद्ध ट्रांसक्रिप्ट रूपांतरणों के लिए स्कोप-मुक्त रहते हैं।
  • रनटाइम ट्रांसक्रिप्ट स्टोर API फ़ाइलसिस्टम पथों के बजाय SQLite स्कोप का समाधान करते हैं। पुराना resolve...ForPath हेल्पर और अप्रयुक्त transcriptPath लेखन विकल्प रनटाइम कॉलर से हटा दिए गए हैं।
  • रनटाइम सेशन समाधान अब {agentId, sessionId} का उपयोग करता है और बाहरी सीमाओं के लिए sqlite-transcript://<agent>/<session> स्ट्रिंग व्युत्पन्न नहीं करनी चाहिए। लीगेसी निरपेक्ष JSONL पथ केवल doctor माइग्रेशन इनपुट हैं।
  • नेटिव हुक रिले डायरेक्ट-ब्रिज रिकॉर्ड अब रिले आईडी द्वारा कुंजीबद्ध, टाइप की गई साझा native_hook_relay_bridges पंक्तियों में रहते हैं। रनटाइम अब इन अल्पकालिक ब्रिज रिकॉर्ड के लिए /tmp JSON रजिस्ट्री या अपारदर्शी जेनेरिक रिकॉर्ड नहीं लिखता।
  • runEmbeddedPiAgent(...) में अब ट्रांसक्रिप्ट-लोकेटर पैरामीटर नहीं है। तैयार वर्कर डिस्क्रिप्टर में भी ट्रांसक्रिप्ट लोकेटर शामिल नहीं होते। रनटाइम सेशन स्थिति और कतारबद्ध फ़ॉलो-अप रन व्युत्पन्न ट्रांसक्रिप्ट हैंडल के बजाय {agentId, sessionId} रखते हैं।
  • एम्बेडेड Compaction अब agentId और sessionId से SQLite स्कोप लेता है। Compaction हुक, कॉन्टेक्स्ट-इंजन कॉल, CLI डेलिगेशन और प्रोटोकॉल उत्तरों को व्युत्पन्न sqlite-transcript://... हैंडल नहीं मिलने चाहिए। एक्सपोर्ट/डीबग कोड पंक्तियों से स्पष्ट उपयोगकर्ता आर्टिफ़ैक्ट बना सकता है, लेकिन वह कोई जेनेरिक सेशन JSONL एक्सपोर्ट पथ प्रदान नहीं करता या फ़ाइल नामों को वापस रनटाइम पहचान में नहीं भेजता।
  • /export-session SQLite से ट्रांसक्रिप्ट पंक्तियाँ पढ़ता है और केवल अनुरोधित स्टैंडअलोन HTML दृश्य लिखता है। एम्बेडेड व्यूअर अब उन पंक्तियों से सेशन JSONL का पुनर्निर्माण या डाउनलोड नहीं करता।
  • कॉन्टेक्स्ट-इंजन डेलिगेशन अब एजेंट पहचान पुनर्प्राप्त करने के लिए ट्रांसक्रिप्ट लोकेटर को पार्स नहीं करता। तैयार रनटाइम कॉन्टेक्स्ट समाधान किया गया agentId बिल्ट-इन Compaction अडैप्टर में ले जाता है।
  • ट्रांसक्रिप्ट पुनर्लेखन और लाइव टूल-रिज़ल्ट ट्रंकेशन अब {agentId, sessionId} द्वारा ट्रांसक्रिप्ट स्थिति पढ़ते और बनाए रखते हैं तथा ट्रांसक्रिप्ट-अपडेट इवेंट पेलोड के लिए अस्थायी लोकेटर व्युत्पन्न नहीं करते।
  • ट्रांसक्रिप्ट-स्थिति हेल्पर सरफ़ेस में अब लोकेटर-आधारित readTranscriptState, replaceTranscriptStateEvents, या persistTranscriptStateMutation वेरिएंट नहीं हैं। रनटाइम कॉलर को {agentId, sessionId} API का उपयोग करना चाहिए। Doctor इंपोर्ट स्पष्ट फ़ाइल पथ द्वारा लीगेसी फ़ाइलें पढ़ता है और SQLite पंक्तियाँ लिखता है; वह लोकेटर स्ट्रिंग माइग्रेट नहीं करता।
  • रनटाइम सेशन-मैनेजर कॉन्ट्रैक्ट अब open(locator), forkFrom(locator), या setTranscriptLocator(...) को एक्सपोज़ नहीं करता। परसिस्टेड सेशन मैनेजर केवल {agentId, sessionId} द्वारा खुलते हैं; लिस्ट/फ़ोर्क हेल्पर ट्रांसक्रिप्ट मैनेजर फ़साड के बजाय पंक्ति-उन्मुख सेशन और चेकपॉइंट API पर रहते हैं।
  • Gateway ट्रांसक्रिप्ट रीडर API स्कोप-प्रथम हैं। वे {agentId, sessionId} लेते हैं और ऐसे पोज़िशनल ट्रांसक्रिप्ट लोकेटर को स्वीकार नहीं करते जो अनजाने में रनटाइम पहचान बन सकता हो। सक्रिय ट्रांसक्रिप्ट लोकेटर पार्सिंग हटा दी गई है; लीगेसी स्रोत पथ केवल doctor इंपोर्ट कोड द्वारा पढ़े जाते हैं।
  • ट्रांसक्रिप्ट अपडेट इवेंट भी स्कोप-प्रथम हैं। emitSessionTranscriptUpdate अब अकेली लोकेटर स्ट्रिंग स्वीकार नहीं करता, और लिसनर किसी हैंडल को पार्स किए बिना {agentId, sessionId} द्वारा रूट करते हैं।
  • Gateway सेशन-संदेश ब्रॉडकास्ट ट्रांसक्रिप्ट लोकेटर के बजाय एजेंट/सेशन स्कोप से सेशन कुंजियों का समाधान करता है। पुराना ट्रांसक्रिप्ट-लोकेटर-से-सेशन कुंजी रिज़ॉल्वर/कैश हटा दिया गया है।
  • Gateway सेशन-हिस्ट्री SSE लाइव अपडेट को एजेंट/सेशन स्कोप द्वारा फ़िल्टर करता है। वह अब यह तय करने के लिए ट्रांसक्रिप्ट लोकेटर उम्मीदवारों, रियलपाथ या फ़ाइल-आकार की ट्रांसक्रिप्ट पहचानों को कैननिकलाइज़ नहीं करता कि किसी स्ट्रीम को अपडेट मिलना चाहिए या नहीं।
  • सेशन लाइफ़साइकल हुक अब session_end पर ट्रांसक्रिप्ट लोकेटर व्युत्पन्न या एक्सपोज़ नहीं करते। हुक उपभोक्ताओं को sessionId, sessionKey, अगले-सेशन आईडी और एजेंट कॉन्टेक्स्ट मिलते हैं; ट्रांसक्रिप्ट फ़ाइलें लाइफ़साइकल कॉन्ट्रैक्ट का हिस्सा नहीं हैं।
  • रीसेट हुक भी अब ट्रांसक्रिप्ट लोकेटर व्युत्पन्न या एक्सपोज़ नहीं करते। before_reset पेलोड पुनर्प्राप्त SQLite संदेशों के साथ रीसेट कारण रखता है, जबकि सेशन पहचान हुक कॉन्टेक्स्ट में रहती है।
  • एजेंट हार्नेस रीसेट अब ट्रांसक्रिप्ट लोकेटर स्वीकार नहीं करता। रीसेट डिस्पैच कारण के साथ sessionId/sessionKey द्वारा स्कोप किया जाता है।
  • एजेंट एक्सटेंशन सेशन प्रकार अब transcriptLocator को एक्सपोज़ नहीं करते; एक्सटेंशन को फ़ाइल-आकार की ट्रांसक्रिप्ट पहचान तक पहुँचने के बजाय सेशन कॉन्टेक्स्ट और रनटाइम API का उपयोग करना चाहिए।
  • Plugin Compaction हुक अब ट्रांसक्रिप्ट लोकेटर एक्सपोज़ नहीं करते। हुक कॉन्टेक्स्ट में सेशन पहचान पहले से होती है, और ट्रांसक्रिप्ट पठन फ़ाइल-आकार के हैंडल के बजाय SQLite स्कोप-जागरूक API के माध्यम से होना चाहिए।
  • before_agent_finalize हुक अब नेटिव हुक रिले पेलोड सहित transcriptPath को एक्सपोज़ नहीं करते। फ़ाइनलाइज़ेशन हुक केवल सेशन कॉन्टेक्स्ट का उपयोग करते हैं।
  • Gateway रीसेट प्रतिक्रियाएँ अब लौटाई गई एंट्री पर ट्रांसक्रिप्ट लोकेटर संश्लेषित नहीं करतीं। रीसेट SQLite ट्रांसक्रिप्ट पंक्तियाँ बनाता है, स्वच्छ सेशन एंट्री लौटाता है और ट्रांसक्रिप्ट एक्सेस को स्कोप-जागरूक रीडर पर छोड़ता है।
  • एम्बेडेड रन और Compaction परिणाम अब सेशन लेखांकन के लिए ट्रांसक्रिप्ट लोकेटर प्रदर्शित नहीं करते। स्वचालित Compaction केवल सक्रिय sessionId, Compaction काउंटर और टोकन मेटाडेटा अपडेट करता है।
  • एम्बेडेड प्रयास परिणाम अब transcriptLocatorUsed नहीं लौटाते, और कॉन्टेक्स्ट-इंजन compact() परिणाम अब ट्रांसक्रिप्ट लोकेटर नहीं लौटाते। रनटाइम पुनःप्रयास लूप केवल उत्तराधिकारी sessionId स्वीकार करते हैं।
  • डिलीवरी-मिरर ट्रांसक्रिप्ट एपेंड परिणाम अब ट्रांसक्रिप्ट लोकेटर नहीं लौटाते। कॉलर को जोड़ा गया messageId मिलता है; ट्रांसक्रिप्ट अपडेट संकेत SQLite स्कोप का उपयोग करते हैं।
  • पैरेंट-सेशन फ़ोर्क हेल्पर केवल फ़ोर्क किया गया sessionId लौटाते हैं। सबएजेंट तैयारी चाइल्ड एजेंट/सेशन स्कोप को इंजनों में भेजती है।
  • CLI रनर पैरामीटर और हिस्ट्री रीसीडिंग अब ट्रांसक्रिप्ट लोकेटर स्वीकार नहीं करते। CLI हिस्ट्री पठन {agentId, sessionId} और सेशन कुंजी कॉन्टेक्स्ट से SQLite ट्रांसक्रिप्ट स्कोप का समाधान करता है।
  • CLI और एम्बेडेड-रनर परीक्षण फ़िक्स्चर अब सक्रिय सेशन को *.jsonl फ़ाइल मानने या रनटाइम पैरामीटर के माध्यम से sqlite-transcript://... स्ट्रिंग भेजने के बजाय सेशन आईडी द्वारा SQLite ट्रांसक्रिप्ट पंक्तियाँ सीड और पढ़ते हैं।
  • सेशन टूल-रिज़ल्ट गार्ड इवेंट ज्ञात सेशन स्कोप से उत्सर्जित होते हैं, भले ही इन-मेमोरी मैनेजर के पास कोई व्युत्पन्न लोकेटर न हो। इसके परीक्षण अब सक्रिय /tmp/*.jsonl ट्रांसक्रिप्ट फ़ाइलों का दिखावा नहीं करते।
  • BTW और Compaction-चेकपॉइंट हेल्पर अब SQLite स्कोप द्वारा ट्रांसक्रिप्ट पंक्तियाँ पढ़ते और फ़ोर्क करते हैं। चेकपॉइंट मेटाडेटा अब केवल सेशन आईडी और लीफ़/एंट्री आईडी संग्रहीत करता है; व्युत्पन्न लोकेटर अब चेकपॉइंट पेलोड में नहीं लिखे जाते।
  • Gateway ट्रांसक्रिप्ट-कुंजी लुकअप प्रोटोकॉल सीमाओं पर SQLite ट्रांसक्रिप्ट स्कोप का उपयोग करता है और अब ट्रांसक्रिप्ट फ़ाइल नामों के रियलपाथ या स्टैट नहीं करता।
  • स्वचालित Compaction ट्रांसक्रिप्ट रोटेशन SQLite ट्रांसक्रिप्ट स्टोर के माध्यम से उत्तराधिकारी ट्रांसक्रिप्ट पंक्तियाँ सीधे लिखता है। सेशन पंक्तियाँ केवल उत्तराधिकारी सेशन पहचान रखती हैं, टिकाऊ JSONL पथ या परसिस्टेड लोकेटर नहीं।
  • एम्बेडेड कॉन्टेक्स्ट-इंजन Compaction SQLite-नामित ट्रांसक्रिप्ट रोटेशन हेल्पर का उपयोग करता है। रोटेशन परीक्षण अब JSONL उत्तराधिकारी पथ नहीं बनाते या सक्रिय सेशन को फ़ाइलों के रूप में मॉडल नहीं करते।
  • प्रबंधित आउटगोइंग इमेज रिटेंशन अपने ट्रांसक्रिप्ट-संदेश कैश को फ़ाइलसिस्टम स्टैट कॉल के बजाय SQLite ट्रांसक्रिप्ट आँकड़ों से कुंजीबद्ध करता है।
  • रनटाइम सेशन लॉक और स्टैंडअलोन लीगेसी .jsonl.lock doctor लेन हटा दिए गए हैं।
  • Microsoft Teams रनटाइम बैरल और सार्वजनिक Plugin SDK अब पुराने फ़ाइल-लॉक हेल्पर को पुनः एक्सपोर्ट नहीं करते; टिकाऊ Plugin स्थिति पथ SQLite-समर्थित हैं।
  • सेशन आयु/गणना प्रूनिंग और स्पष्ट सेशन क्लीनअप हटा दिए गए हैं। लीगेसी इंपोर्ट का स्वामी Doctor है; पुराने सेशन स्पष्ट रूप से रीसेट या हटाए जाते हैं।
  • Doctor अखंडता जाँच अब किसी लीगेसी JSONL फ़ाइल को SQLite सेशन पंक्ति के लिए वैध सक्रिय ट्रांसक्रिप्ट नहीं मानती। सक्रिय ट्रांसक्रिप्ट स्वास्थ्य केवल SQLite पर आधारित है; लीगेसी JSONL फ़ाइलें माइग्रेशन/ऑर्फ़न-क्लीनअप इनपुट के रूप में रिपोर्ट की जाती हैं।
  • Doctor अब agents/<agent>/sessions/ को आवश्यक रनटाइम स्थिति नहीं मानता। वह उस डायरेक्टरी को केवल तभी स्कैन करता है जब वह पहले से मौजूद हो, लीगेसी इंपोर्ट या ऑर्फ़न-क्लीनअप इनपुट के रूप में।
  • Gateway sessions.resolve, सेशन पैच/रीसेट/कॉम्पैक्ट पथ, सबएजेंट स्पॉनिंग, तेज़ एबॉर्ट, ACP मेटाडेटा, Heartbeat-पृथक सेशन और TUI पैचिंग अब सामान्य रनटाइम कार्य के साइड इफ़ेक्ट के रूप में लीगेसी सेशन कुंजियों को माइग्रेट या प्रून नहीं करते।
  • CLI कमांड सेशन समाधान अब storePath के बजाय स्वामी agentId लौटाता है, और वह सामान्य --to या --session-id समाधान के दौरान लीगेसी मुख्य-सेशन पंक्तियों को कॉपी नहीं करता। लीगेसी मुख्य-पंक्ति कैननिकलाइज़ेशन केवल doctor का दायित्व है।
  • रनटाइम सबएजेंट गहराई समाधान अब sessions.json या JSON5 सेशन स्टोर नहीं पढ़ता। वह एजेंट आईडी द्वारा SQLite session_entries पढ़ता है, और लीगेसी गहराई/सेशन मेटाडेटा केवल doctor इंपोर्ट पथ के माध्यम से प्रवेश कर सकता है।
  • ऑथ प्रोफ़ाइल सेशन ओवरराइड फ़ाइल-आकार वाले सेशन-स्टोर रनटाइम को लेज़ी-लोड करने के बजाय प्रत्यक्ष {agentId, sessionKey} पंक्ति अपसर्ट के माध्यम से परसिस्ट होते हैं।
  • ऑटो-रिप्लाई वर्बोज़ गेटिंग और सेशन अपडेट हेल्पर अब सेशन पहचान द्वारा SQLite सेशन पंक्तियाँ पढ़ते/अपसर्ट करते हैं और परसिस्टेड पंक्ति स्थिति को छूने से पहले लीगेसी स्टोर पथ की आवश्यकता नहीं रखते।
  • कमांड-रन सेशन मेटाडेटा हेल्पर अब एंट्री-उन्मुख नाम और मॉड्यूल पथ उपयोग करते हैं; पुराना session-store कमांड हेल्पर सरफ़ेस हटा दिया गया है।
  • बूटस्ट्रैप हेडर सीडिंग और मैन्युअल Compaction सीमा सुदृढ़ीकरण अब SQLite ट्रांसक्रिप्ट पंक्तियों को सीधे परिवर्तित करते हैं। रनटाइम कॉलर लिखने योग्य .jsonl पथों के बजाय सेशन पहचान भेजते हैं।
  • साइलेंट सेशन-रोटेशन रीप्ले SQLite ट्रांसक्रिप्ट पंक्तियों से {agentId, sessionId} द्वारा हाल के उपयोगकर्ता/असिस्टेंट टर्न कॉपी करता है। वह अब स्रोत या लक्ष्य ट्रांसक्रिप्ट लोकेटर स्वीकार नहीं करता।
  • नई रनटाइम सेशन पंक्तियाँ अब ट्रांसक्रिप्ट लोकेटर संग्रहीत नहीं करतीं। कॉलर सीधे {agentId, sessionId} का उपयोग करते हैं; एक्सपोर्ट/डीबग कमांड पंक्तियों को साकार करते समय आउटपुट फ़ाइल नाम चुन सकते हैं।
  • नया परसिस्टेड ट्रांसक्रिप्ट सेशन शुरू करने पर अब हमेशा स्कोप द्वारा SQLite पंक्तियाँ खोली जाती हैं। सेशन मैनेजर अब नए सेशन की पहचान के रूप में पिछले फ़ाइल-युग के ट्रांसक्रिप्ट पथ या लोकेटर का पुनः उपयोग नहीं करता।
  • परसिस्टेड ट्रांसक्रिप्ट सेशन स्पष्ट openTranscriptSessionManagerForSession({agentId, sessionId}) API का उपयोग करते हैं। पुराने स्थिर SessionManager.create/openForSession/list/forkFromSession फ़साड हटा दिए गए हैं ताकि परीक्षण और रनटाइम कोड अनजाने में फ़ाइल-युग सेशन खोज को फिर से न बना सकें।
  • Plugin रनटाइम अब api.runtime.agent.session.resolveTranscriptLocatorPath को एक्सपोज़ नहीं करता; Plugin कोड SQLite पंक्ति हेल्पर और स्कोप मानों का उपयोग करता है।
  • सार्वजनिक session-store-runtime SDK सरफ़ेस अब केवल सेशन पंक्ति और ट्रांसक्रिप्ट पंक्ति हेल्पर एक्सपोर्ट करता है। केंद्रित SQLite स्कीमा/पथ/ट्रांज़ैक्शन हेल्पर sqlite-runtime में रहते हैं; रॉ ओपन/क्लोज़/रीसेट हेल्पर प्रथम-पक्ष परीक्षणों के लिए केवल स्थानीय रहते हैं।
  • लीगेसी .jsonl ट्रैजेक्टरी/चेकपॉइंट फ़ाइल नाम क्लासिफ़ायर अब doctor लीगेसी सेशन-फ़ाइल मॉड्यूल में रहते हैं। कोर सेशन सत्यापन अब सामान्य SQLite सेशन आईडी तय करने के लिए फ़ाइल-आर्टिफ़ैक्ट हेल्पर इंपोर्ट नहीं करता।
  • Active Memory ब्लॉकिंग सबएजेंट रन Plugin स्थिति के अंतर्गत अस्थायी या परसिस्टेड session.jsonl फ़ाइलें बनाने के बजाय SQLite ट्रांसक्रिप्ट पंक्तियों का उपयोग करते हैं। पुराना transcriptDir विकल्प हटा दिया गया है।
  • एकबारगी स्लग जनरेशन और सिस्टम-एजेंट प्लानर रन अस्थायी session.jsonl फ़ाइलें बनाने के बजाय SQLite ट्रांसक्रिप्ट पंक्तियों का उपयोग करते हैं।
  • llm-task हेल्पर रन और छिपी प्रतिबद्धता का निष्कर्षण भी SQLite ट्रांसक्रिप्ट पंक्तियों का उपयोग करते हैं, इसलिए ये केवल-मॉडल हेल्पर सत्र अब अस्थायी JSON/JSONL ट्रांसक्रिप्ट फ़ाइलें नहीं बनाते।
  • TranscriptSessionManager अब केवल एक खुला हुआ SQLite ट्रांसक्रिप्ट स्कोप है। रनटाइम कोड इसे openTranscriptSessionManagerForSession({agentId, sessionId}) के साथ खोलता है; बनाने, ब्रांच करने, जारी रखने, सूचीबद्ध करने और फ़ोर्क करने के प्रवाह स्थिर मैनेजर फ़साड के बजाय अपनी स्वामित्व वाली SQLite पंक्ति के हेल्पर में रहते हैं। डॉक्टर/इंपोर्ट/डीबग कोड रनटाइम सत्र मैनेजर के बाहर स्पष्ट लीगेसी स्रोत फ़ाइलों को संभालता है।
  • पुरानी SessionManager.newSession() और SessionManager.createBranchedSession() फ़साड विधियाँ हटा दी गईं। नए सत्र और ट्रांसक्रिप्ट वंशज पहले से खुले मैनेजर को किसी अलग स्थायी सत्र में बदलने के बजाय अपने स्वामित्व वाले SQLite कार्यप्रवाह द्वारा बनाए जाते हैं।
  • मूल ट्रांसक्रिप्ट के फ़ोर्क निर्णय और फ़ोर्क निर्माण अब storePath या sessionsDir स्वीकार नहीं करते; वे सुरक्षित रखे गए फ़ाइल-सिस्टम पथ मेटाडेटा के बजाय {agentId, sessionId} SQLite ट्रांसक्रिप्ट स्कोप का उपयोग करते हैं।
  • मेमोरी-होस्ट अब निष्क्रिय सत्र-डायरेक्टरी ट्रांसक्रिप्ट वर्गीकरण हेल्पर निर्यात नहीं करता; अब प्रविष्टि निर्माण के दौरान ट्रांसक्रिप्ट फ़िल्टरिंग SQLite पंक्ति मेटाडेटा से व्युत्पन्न होती है।
  • मेमोरी-होस्ट और QMD सत्र-निर्यात परीक्षण SQLite ट्रांसक्रिप्ट स्कोप का उपयोग करते हैं। पुराने agents/<agentId>/sessions/*.jsonl पथों को केवल वहाँ कवर किया जाता है, जहाँ कोई परीक्षण जानबूझकर डॉक्टर/इंपोर्ट/एक्सपोर्ट संगतता सिद्ध कर रहा हो।
  • QA-lab का रॉ सत्र निरीक्षण अब agents/qa/sessions/sessions.json को पढ़ने के बजाय Gateway के माध्यम से sessions.list का उपयोग करता है; MSteams फ़ीडबैक नकली JSONL पथ बनाए बिना सीधे SQLite ट्रांसक्रिप्ट में जोड़ता है।
  • साझा इनबाउंड चैनल टर्न अब लीगेसी storePath के बजाय {agentId, sessionKey} रखते हैं। LINE, WhatsApp, Slack, Discord, Telegram, Matrix, Signal, iMessage, BlueBubbles, Feishu, Google Chat, IRC, Nextcloud Talk, Zalo, Zalo Personal, QA Channel, Microsoft Teams, Mattermost, Synology Chat, Tlon, Twitch और QQBot के रिकॉर्डिंग पथ अब अपडेट-समय मेटाडेटा पढ़ते हैं और SQLite पहचान के माध्यम से इनबाउंड सत्र पंक्तियाँ रिकॉर्ड करते हैं।
  • सक्रिय सत्र पंक्तियों से ट्रांसक्रिप्ट लोकेटर का स्थायित्व हटा दिया गया है। resolveSessionTranscriptTarget, agentId, sessionId और वैकल्पिक विषय मेटाडेटा लौटाता है; लीगेसी ट्रांसक्रिप्ट फ़ाइल नामों को केवल डॉक्टर कोड इंपोर्ट करता है।
  • रनटाइम ट्रांसक्रिप्ट हेडर SQLite संस्करण 1 से शुरू होते हैं। पुराने JSONL V1/V2/V3 आकार अपग्रेड केवल डॉक्टर इंपोर्ट में रहते हैं और पंक्तियाँ संग्रहीत होने से पहले इंपोर्ट किए गए हेडर को वर्तमान SQLite ट्रांसक्रिप्ट संस्करण में सामान्यीकृत करते हैं।
  • डेटाबेस-प्रथम गार्ड अब SessionManager.listAll और SessionManager.forkFromSession को प्रतिबंधित करता है; सत्र सूचीकरण और फ़ोर्क/पुनर्स्थापन कार्यप्रवाहों को पंक्ति/स्कोप-आधारित SQLite API पर ही रहना होगा।
  • गार्ड डॉक्टर/इंपोर्ट कोड के बाहर लीगेसी ट्रांसक्रिप्ट JSONL पार्स/सक्रिय-ब्रांच मरम्मत हेल्पर नामों को भी प्रतिबंधित करता है, ताकि रनटाइम दूसरा लीगेसी ट्रांसक्रिप्ट माइग्रेशन पथ न बना सके।
  • एम्बेडेड PI रन आने वाले ट्रांसक्रिप्ट हैंडल अस्वीकार करते हैं। वे वर्कर लॉन्च से पहले और प्रयास द्वारा ट्रांसक्रिप्ट स्थिति को छूने से पहले फिर से SQLite {agentId, sessionId} पहचान का उपयोग करते हैं। पुराना /tmp/*.jsonl इनपुट रनटाइम लेखन लक्ष्य का चयन नहीं कर सकता।
  • कैश ट्रेस, Anthropic पेलोड, रॉ स्ट्रीम और डायग्नोस्टिक्स टाइमलाइन रिकॉर्ड अब टाइप की गई SQLite diagnostic_events पंक्तियों में लिखे जाते हैं। Gateway स्थिरता बंडल अब टाइप की गई SQLite diagnostic_stability_bundles पंक्तियों में लिखे जाते हैं। पुराने diagnostics.cacheTrace.filePath, OPENCLAW_CACHE_TRACE_FILE, OPENCLAW_ANTHROPIC_PAYLOAD_LOG_FILE और OPENCLAW_DIAGNOSTICS_TIMELINE_PATH JSONL ओवरराइड पथ हटा दिए गए हैं, और सामान्य स्थिरता कैप्चर अब logs/stability/*.json फ़ाइलें नहीं लिखता।
  • Cron स्थायित्व अब प्रत्येक सेव पर पूरी जॉब तालिका को हटाकर/दोबारा डालने के बजाय SQLite cron_jobs पंक्तियों का मिलान करता है। Plugin लक्ष्य राइटबैक मेल खाती cron पंक्तियों को सीधे अपडेट करते हैं और रनटाइम cron स्थिति को उसी स्थिति-डेटाबेस ट्रांज़ैक्शन में रखते हैं।
  • Cron रनटाइम कॉलर अब एक स्थिर SQLite cron स्टोर कुंजी का उपयोग करते हैं। लीगेसी cron.store पथ केवल डॉक्टर इंपोर्ट इनपुट हैं; उत्पादन Gateway, कार्य रखरखाव, स्थिति, रन-इतिहास और Telegram लक्ष्य राइटबैक पथ resolveCronStoreKey का उपयोग करते हैं और अब कुंजी के पथ को सामान्यीकृत नहीं करते। Cron स्थिति अब पुराने फ़ाइल-आकार वाले storePath फ़ील्ड के बजाय storeKey की रिपोर्ट करती है।
  • Cron रनटाइम लोड और शेड्यूलिंग अब लीगेसी स्थायी जॉब आकारों को सामान्यीकृत नहीं करते, जैसे jobId, schedule.cron, संख्यात्मक atMs, स्ट्रिंग बूलियन या अनुपस्थित sessionTarget। SQLite में पंक्तियाँ डाले जाने से पहले इन मरम्मतों का स्वामी डॉक्टर लीगेसी इंपोर्ट है।
  • ACP स्पॉन अब ट्रांसक्रिप्ट JSONL फ़ाइल पथों को हल या स्थायी नहीं करता। स्पॉन और थ्रेड-बाइंड सेटअप SQLite सत्र पंक्ति को सीधे स्थायी करते हैं और सत्र आईडी को सुरक्षित रखी गई ट्रांसक्रिप्ट पहचान के रूप में रखते हैं।
  • ACP सत्र मेटाडेटा API अब agentId के अनुसार SQLite पंक्तियाँ पढ़ते/सूचीबद्ध/अपसर्ट करते हैं और अब ACP सत्र प्रविष्टि अनुबंध के भाग के रूप में storePath को उजागर नहीं करते।
  • सत्र उपयोग लेखांकन और Gateway उपयोग एकत्रीकरण अब ट्रांसक्रिप्ट को केवल {agentId, sessionId} द्वारा हल करते हैं। लागत/उपयोग कैश और खोजे गए सत्र के सारांश अब ट्रांसक्रिप्ट लोकेटर स्ट्रिंग बनाकर नहीं देते।
  • Gateway चैट जोड़ना, निरस्त-आंशिक स्थायित्व, /sessions.send और वेबचैट मीडिया ट्रांसक्रिप्ट लेखन SQLite ट्रांसक्रिप्ट स्कोप के माध्यम से सीधे जोड़ते हैं। Gateway ट्रांसक्रिप्ट-इंजेक्शन हेल्पर अब transcriptLocator पैरामीटर स्वीकार नहीं करता।
  • SQLite ट्रांसक्रिप्ट खोज अब केवल ट्रांसक्रिप्ट स्कोप और आँकड़े सूचीबद्ध करती है: {agentId, sessionId, updatedAt, eventCount}। निष्प्रयोज्य listSqliteSessionTranscriptLocators संगतता हेल्पर और प्रति-पंक्ति locator फ़ील्ड हटा दिए गए हैं।
  • ट्रांसक्रिप्ट मरम्मत रनटाइम अब केवल repairTranscriptSessionStateIfNeeded({agentId, sessionId}) उजागर करता है। पुराना लोकेटर-आधारित मरम्मत हेल्पर हटा दिया गया है; डॉक्टर/डीबग कोड स्पष्ट स्रोत फ़ाइल पथ पढ़ता है और लोकेटर स्ट्रिंग कभी माइग्रेट नहीं करता।
  • ACP रीप्ले लेजर रनटाइम अब प्रति-सत्र रीप्ले पंक्तियों को acp/event-ledger.json के बजाय साझा SQLite स्थिति डेटाबेस में संग्रहीत करता है; डॉक्टर लीगेसी फ़ाइल को इंपोर्ट करके हटा देता है।
  • Gateway ट्रांसक्रिप्ट रीडर हेल्पर अब पुराने session-utils.fs मॉड्यूल नाम के बजाय src/gateway/session-transcript-readers.ts में रहते हैं। फ़ॉलबैक पुनःप्रयास इतिहास जाँच का नाम पुराने फ़ाइल-हेल्पर सतह के बजाय SQLite ट्रांसक्रिप्ट सामग्री के अनुसार रखा गया है।
  • Gateway इंजेक्टेड-चैट और Compaction हेल्पर अब मानों को ट्रांसक्रिप्ट पथ या स्रोत फ़ाइल नाम देने के बजाय आंतरिक हेल्पर API के माध्यम से SQLite ट्रांसक्रिप्ट स्कोप पास करते हैं।
  • बूटस्ट्रैप निरंतरता पहचान अब hasCompletedBootstrapTranscriptTurn के माध्यम से SQLite ट्रांसक्रिप्ट पंक्तियों की जाँच करती है; यह अब फ़ाइल-आकार वाला हेल्पर नाम उजागर नहीं करती।
  • एम्बेडेड-रनर परीक्षण अब SQLite ट्रांसक्रिप्ट पहचान का उपयोग करते हैं, और नया ट्रांसक्रिप्ट मैनेजर खोलने के लिए हमेशा स्पष्ट sessionId आवश्यक है।
  • मेमोरी इंडेक्सिंग हेल्पर अब शुरू से अंत तक SQLite ट्रांसक्रिप्ट शब्दावली का उपयोग करते हैं: होस्ट listSessionTranscriptScopesForAgent और sessionTranscriptKeyForScope निर्यात करता है, लक्षित सिंक sessionTranscripts को कतारबद्ध करता है, सार्वजनिक सत्र-खोज परिणाम अपारदर्शी transcript:<agent>:<session> पथ उजागर करते हैं, और नकली फ़ाइल पथ के बजाय आंतरिक DB स्रोत कुंजी source_kind='sessions' के अंतर्गत session:<session> है।
  • जेनेरिक Plugin SDK स्थायी-डीडुप हेल्पर अब फ़ाइल-आकार वाले विकल्प उजागर नहीं करता। कॉलर SQLite स्कोप कुंजियाँ प्रदान करते हैं और टिकाऊ डीडुप पंक्तियाँ साझा Plugin स्थिति में रहती हैं।
  • Microsoft Teams SSO टोकन लॉक की गई JSON फ़ाइलों से SQLite Plugin स्थिति में स्थानांतरित हो गए हैं। डॉक्टर msteams-sso-tokens.json को इंपोर्ट करता है, पेलोड से प्रामाणिक SSO टोकन कुंजियों को फिर बनाता है और स्रोत फ़ाइल हटा देता है। प्रत्यायोजित OAuth टोकन अपनी मौजूदा निजी क्रेडेंशियल-फ़ाइल सीमा पर बने रहते हैं।
  • Matrix सिंक कैश स्थिति bot-storage.json से SQLite Plugin स्थिति में स्थानांतरित हो गई है। डॉक्टर लीगेसी रॉ या रैप किए गए सिंक पेलोड इंपोर्ट करता है और स्रोत फ़ाइल हटा देता है। सक्रिय Matrix और QA Lab Matrix अडैप्टर क्लाइंट नकली sync-store.json या bot-storage.json पथ नहीं, बल्कि SQLite सिंक-स्टोर रूट डायरेक्टरी पास करते हैं।
  • Matrix लीगेसी क्रिप्टो माइग्रेशन स्थिति legacy-crypto-migration.json से SQLite Plugin स्थिति में स्थानांतरित हो गई है। डॉक्टर पुरानी स्थिति फ़ाइल इंपोर्ट करता है; Matrix SDK IndexedDB स्नैपशॉट crypto-idb-snapshot.json से SQLite Plugin ब्लॉब में स्थानांतरित हो गए हैं। Matrix पुनर्प्राप्ति कुंजियाँ और क्रेडेंशियल SQLite Plugin-स्थिति पंक्तियाँ हैं; उनकी पुरानी JSON फ़ाइलें केवल डॉक्टर माइग्रेशन इनपुट हैं।
  • Memory Wiki गतिविधि लॉग अब .openclaw-wiki/log.jsonl के बजाय SQLite Plugin स्थिति का उपयोग करते हैं। Memory Wiki माइग्रेशन प्रदाता पुराने JSONL लॉग इंपोर्ट करता है; विकी मार्कडाउन और उपयोगकर्ता वॉल्ट सामग्री कार्यक्षेत्र सामग्री के रूप में फ़ाइल-समर्थित रहती है।
  • Memory Wiki अब .openclaw-wiki/state.json या अप्रयुक्त .openclaw-wiki/locks डायरेक्टरी नहीं बनाता। यदि किसी पुराने वॉल्ट में वे अभी भी हैं, तो माइग्रेशन प्रदाता उन सेवानिवृत्त Plugin मेटाडेटा फ़ाइलों को हटा देता है।
  • सिस्टम-एजेंट ऑडिट प्रविष्टियाँ अब audit/crestodian.jsonl के बजाय कोर SQLite Plugin स्थिति का उपयोग करती हैं। डॉक्टर लीगेसी JSONL ऑडिट लॉग इंपोर्ट करता है और सफल इंपोर्ट के बाद उसे हटा देता है।
  • कॉन्फ़िग लेखन/निरीक्षण ऑडिट प्रविष्टियाँ अब logs/config-audit.jsonl के बजाय कोर SQLite Plugin स्थिति का उपयोग करती हैं। डॉक्टर लीगेसी JSONL ऑडिट लॉग इंपोर्ट करता है और सफल इंपोर्ट के बाद उसे हटा देता है।
  • macOS सहयोगी अब openclaw.json संपादित करते समय ऐप-स्थानीय logs/config-audit.jsonl या logs/config-health.json साइडकार नहीं लिखता। कॉन्फ़िग फ़ाइल फ़ाइल-समर्थित रहती है, पुनर्प्राप्ति स्नैपशॉट कॉन्फ़िग फ़ाइल के पास रहते हैं, और टिकाऊ कॉन्फ़िग ऑडिट/स्वास्थ्य स्थिति Gateway SQLite स्टोर से संबंधित होती है।
  • सिस्टम-एजेंट रेस्क्यू की लंबित स्वीकृतियाँ अब crestodian/rescue-pending/*.json या openclaw/rescue-pending/*.json के बजाय कोर SQLite Plugin स्थिति का उपयोग करती हैं। ये अल्पकालिक सुरक्षा क्षमताएँ कभी इंपोर्ट नहीं की जातीं; डॉक्टर दोनों सेवानिवृत्त डायरेक्टरियाँ त्याग देता है, ताकि अपग्रेड किसी पुराने लेखन को फिर सक्रिय न कर सके।
  • Phone Control की अस्थायी आर्म स्थिति अब plugins/phone-control/armed.json के बजाय SQLite Plugin स्थिति का उपयोग करती है। डॉक्टर लीगेसी आर्म्ड-स्टेट फ़ाइल को phone-control/arm-state नेमस्पेस में इंपोर्ट करता है और फ़ाइल हटा देता है।
  • डॉक्टर अब JSONL ट्रांसक्रिप्ट को उसी स्थान पर सुधारता या बैकअप JSONL फ़ाइलें नहीं बनाता। यह सक्रिय ब्रांच को SQLite में इंपोर्ट करता है और लीगेसी स्रोत हटा देता है।
  • सत्र-मेमोरी हुक ट्रांसक्रिप्ट लुकअप {agentId, sessionId} स्कोप-केवल SQLite रीड का उपयोग करता है। इसका हेल्पर अब ट्रांसक्रिप्ट लोकेटर, लीगेसी फ़ाइल रीड या फ़ाइल-पुनर्लेखन विकल्प स्वीकार अथवा व्युत्पन्न नहीं करता।
  • Codex ऐप-सर्वर वार्तालाप बाइंडिंग अब SQLite Plugin स्थिति की कुंजी OpenClaw सत्र कुंजी या स्पष्ट {agentId, sessionId} स्कोप के अनुसार निर्धारित करती हैं। उन्हें ट्रांसक्रिप्ट-पथ फ़ॉलबैक बाइंडिंग सुरक्षित नहीं रखनी चाहिए।
  • Codex ऐप-सर्वर मिरर किए गए इतिहास के रीड केवल SQLite ट्रांसक्रिप्ट स्कोप का उपयोग करते हैं; उन्हें ट्रांसक्रिप्ट फ़ाइल पथों से पहचान पुनर्प्राप्त नहीं करनी चाहिए।
  • भूमिका-क्रम और Compaction रीसेट पथ अब पुरानी ट्रांसक्रिप्ट फ़ाइलें अनलिंक नहीं करते; रीसेट केवल SQLite सत्र पंक्ति और ट्रांसक्रिप्ट पहचान को घुमाता है।
  • Gateway रीसेट और चेकपॉइंट प्रतिक्रियाएँ साफ़ सत्र पंक्तियाँ तथा सत्र आईडी लौटाती हैं। वे अब क्लाइंट के लिए SQLite ट्रांसक्रिप्ट लोकेटर नहीं बनातीं।
  • मेमोरी-कोर Dreaming अब अनुपस्थित JSONL फ़ाइलों की जाँच करके सत्र पंक्तियों को कम नहीं करता। सबएजेंट सफ़ाई फ़ाइल-सिस्टम अस्तित्व जाँच के बजाय सत्र रनटाइम API के माध्यम से होती है। इसके ट्रांसक्रिप्ट-ग्रहण परीक्षण agents/<id>/sessions फ़िक्स्चर या लोकेटर प्लेसहोल्डर बनाने के बजाय सीधे SQLite पंक्तियाँ सीड करते हैं।
  • मेमोरी ट्रांसक्रिप्ट इंडेक्सिंग उद्धरण/रीड हेल्पर के लिए transcript:<agentId>:<sessionId> को वर्चुअल खोज-परिणाम पथ के रूप में उजागर कर सकती है। टिकाऊ इंडेक्स स्रोत संबंधपरक है (source_kind='sessions', source_key='session:<sessionId>', session_id=<sessionId>), इसलिए यह मान रनटाइम ट्रांसक्रिप्ट लोकेटर नहीं है, फ़ाइल सिस्टम पथ नहीं है, और इसे कभी भी सत्र रनटाइम API में वापस पास नहीं किया जाना चाहिए।
  • Gateway डॉक्टर मेमोरी स्थिति SQLite Plugin-स्टेट पंक्तियों से अल्पकालिक रिकॉल और फ़ेज़-सिग्नल की संख्याएँ पढ़ती है, न कि memory/.dreams/*.json से; CLI और डॉक्टर आउटपुट अब उस स्टोरेज को पथ नहीं, बल्कि SQLite स्टोर के रूप में लेबल करते हैं।
  • मेमोरी-कोर रनटाइम, CLI स्थिति, Gateway डॉक्टर विधियाँ और Plugin SDK फ़साड अब पुरानी .dreams/session-corpus फ़ाइलों का ऑडिट या संग्रह नहीं करते। वे फ़ाइलें केवल माइग्रेशन इनपुट हैं; डॉक्टर उन्हें SQLite में आयात करता है और सत्यापन के बाद स्रोत को हटा देता है। सक्रिय सत्र-इंजेशन साक्ष्य पंक्तियाँ अब वर्चुअल SQLite पथ memory/session-ingestion/<day>.txt का उपयोग करती हैं; रनटाइम कभी भी .dreams/session-corpus में स्थिति नहीं लिखता या उससे स्थिति प्राप्त नहीं करता।
  • मेमोरी-कोर सार्वजनिक आर्टिफ़ैक्ट SQLite होस्ट इवेंट को वर्चुअल JSON आर्टिफ़ैक्ट memory/events/memory-host-events.json के रूप में प्रदर्शित करते हैं; वे अब पुराने .dreams/events.jsonl स्रोत पथ का पुनः उपयोग नहीं करते।
  • सैंडबॉक्स कंटेनर/ब्राउज़र रजिस्ट्रियाँ अब टाइप किए गए सत्र, इमेज, टाइमस्टैम्प, बैकएंड/कॉन्फ़िगरेशन और ब्राउज़र पोर्ट कॉलम वाली साझा sandbox_registry_entries SQLite तालिका का उपयोग करती हैं। डॉक्टर पुरानी मोनोलिथिक और शार्ड की गई JSON रजिस्ट्री फ़ाइलें आयात करता है और सफल स्रोतों को हटा देता है। रनटाइम रीड सत्य के स्रोत के रूप में टाइप किए गए पंक्ति कॉलम का उपयोग करते हैं; entry_json केवल रीप्ले/डीबग प्रति है।
  • प्रतिबद्धताएँ अब पूरे स्टोर के JSON ब्लॉब के बजाय टाइप की गई साझा commitments तालिका का उपयोग करती हैं। रनटाइम इंडेक्स किए गए स्कोप, डिलीवरी-विंडो, रोलिंग कैप, स्थिति और प्रयास क्वेरी के साथ सिंक्रोनस SQLite ट्रांज़ैक्शन का उपयोग करता है; record_json केवल रीप्ले/डीबग प्रति है। स्पष्ट डॉक्टर मरम्मत संपूर्ण पुरानी commitments.json को सत्यापित करती है, नई SQLite पंक्तियाँ बनाए रखती है, परिणाम का सत्यापन करती है, और उसके बाद ही अपरिवर्तित स्रोत को हटाती है। रनटाइम सेवानिवृत्त फ़ाइल को कभी पढ़ता या लिखता नहीं है।
  • Web Push सदस्यताएँ और जनरेट की गई VAPID पहचान अब टाइप की गई साझा web_push_subscriptions और web_push_vapid_keys पंक्तियों का उपयोग करती हैं। रनटाइम पंजीकरण, समय-सीमा समाप्ति की सफ़ाई और प्रथम-उपयोग कुंजी जनरेशन पंक्ति-स्तरीय SQLite ट्रांज़ैक्शन का उपयोग करते हैं। स्पष्ट डॉक्टर मरम्मत दोनों सेवानिवृत्त JSON स्टोर को सत्यापित करती है, SQLite लेखन से पहले उन पर दावा करती है, उन्हें एटॉमिक रूप से आयात करती है, परस्पर-विरोधी VAPID पहचानों को अस्वीकार करती है, परिणाम सत्यापित करती है, और उसके बाद ही दावों को हटाती है। डॉक्टर संपूर्ण आयात के दौरान स्टेट-डायरेक्टरी रखरखाव लॉक बनाए रखता है, ताकि कोई पुराना Gateway सेवानिवृत्त फ़ाइलें फिर से न बना सके। पंजीकरण, डिलीवरी, विलोपन और कुंजी समाधान तब तक बंद अवस्था में विफल होते हैं, जब तक डॉक्टर लंबित पुराने स्रोतों या बाधित दावों का समाधान नहीं कर देता।
  • Cron जॉब परिभाषाओं, शेड्यूल स्थिति और रन इतिहास में अब रनटाइम JSON राइटर या रीडर नहीं हैं। रनटाइम टाइप किए गए शेड्यूल, पेलोड, डिलीवरी, विफलता-अलर्ट, सत्र, स्थिति और रनटाइम-स्टेट कॉलम वाली cron_jobs पंक्तियों के साथ निदान, डिलीवरी, सत्र/रन, मॉडल और टोकन योग के लिए Cron-स्वामित्व वाले task_runs विवरण का उपयोग करता है। job_json केवल रीप्ले/डीबग प्रति है; state_json ऐसे नेस्टेड रनटाइम निदान रखता है जिनके पास अभी हॉट क्वेरी फ़ील्ड नहीं हैं, जबकि रनटाइम टाइप किए गए कॉलम से हॉट स्टेट फ़ील्ड को पुनः हाइड्रेट करता है। डॉक्टर पुरानी jobs.json, jobs-state.json और runs/*.jsonl फ़ाइलें आयात करता है और आयात किए गए स्रोतों को हटा देता है। Plugin लक्ष्य राइटबैक संपूर्ण Cron स्टोर को लोड करके बदलने के बजाय मेल खाने वाली cron_jobs पंक्तियों को अपडेट करते हैं।
  • Gateway स्टार्टअप रनटाइम प्रोजेक्शन में पुराने notify: true मार्करों को अनदेखा करता है। डॉक्टर केवल उन मार्करों को स्पष्ट SQLite डिलीवरी में बदलते समय सेवानिवृत्त रॉ cron.webhook को पढ़ता है, फिर कॉन्फ़िगरेशन कुंजी हटा देता है।
  • आउटबाउंड और सत्र डिलीवरी कतारें अब साझा delivery_queue_entries तालिका में कतार स्थिति, प्रविष्टि प्रकार, सत्र कुंजी, चैनल, लक्ष्य, खाता आईडी, पुनः प्रयास संख्या, अंतिम प्रयास/त्रुटि, रिकवरी स्थिति और प्लेटफ़ॉर्म-प्रेषण मार्कर टाइप किए गए कॉलम के रूप में संग्रहीत करती हैं। रनटाइम रिकवरी उन हॉट फ़ील्ड को टाइप किए गए कॉलम से पढ़ती है और पुनः प्रयास/रिकवरी परिवर्तन रीप्ले JSON को दोबारा लिखे बिना उन कॉलम को सीधे अपडेट करते हैं। संपूर्ण JSON पेलोड केवल संदेश बॉडी और अन्य कोल्ड रीप्ले डेटा के लिए रीप्ले/डीबग ब्लॉब के रूप में रहता है।
  • प्रबंधित आउटगोइंग इमेज रिकॉर्ड अब टाइप की गई साझा managed_outgoing_image_records पंक्तियों का उपयोग करते हैं। रनटाइम केवल टाइप किए गए कॉलम पढ़ता है; JSON कॉलम रीप्ले/डीबग प्रति है। मूल इमेज बाइट प्रबंधित मीडिया डायरेक्टरी में नामित अटैचमेंट आर्टिफ़ैक्ट के रूप में रहते हैं।
  • Discord मॉडल-पिकर प्राथमिकताएँ, कमांड-डिप्लॉय हैश और थ्रेड बाइंडिंग अब साझा SQLite Plugin स्टेट का उपयोग करते हैं। उनकी पुरानी JSON आयात योजनाएँ कोर माइग्रेशन कोड में नहीं, Discord Plugin सेटअप/डॉक्टर माइग्रेशन सतह में रहती हैं।
  • Plugin पुराने आयात डिटेक्टर डॉक्टर-नामित मॉड्यूल का उपयोग करते हैं, जैसे doctor-legacy-state.ts या doctor-state-imports.ts; सामान्य चैनल रनटाइम मॉड्यूल को पुराने JSON डिटेक्टर आयात नहीं करने चाहिए।
  • BlueBubbles कैचअप कर्सर और इनबाउंड डीडुप मार्कर अब साझा SQLite Plugin स्टेट का उपयोग करते हैं। उनकी पुरानी JSON आयात योजनाएँ कोर माइग्रेशन कोड में नहीं, BlueBubbles Plugin सेटअप/डॉक्टर माइग्रेशन सतह में रहती हैं।
  • Telegram अपडेट ऑफ़सेट, स्टिकर कैश पंक्तियाँ, भेजे गए संदेश की कैश पंक्तियाँ, विषय-नाम कैश पंक्तियाँ और थ्रेड बाइंडिंग अब साझा SQLite Plugin स्टेट का उपयोग करते हैं। उनकी पुरानी JSON आयात योजनाएँ कोर माइग्रेशन कोड में नहीं, Telegram Plugin सेटअप/डॉक्टर माइग्रेशन सतह में रहती हैं।
  • iMessage कैचअप कर्सर, उत्तर शॉर्ट-आईडी मैपिंग और भेजे गए-इको की डीडुप पंक्तियाँ अब साझा SQLite Plugin स्टेट का उपयोग करती हैं। पुरानी imessage/catchup/*.json, imessage/reply-cache.jsonl और imessage/sent-echoes.jsonl फ़ाइलें केवल डॉक्टर इनपुट हैं।
  • Feishu संदेश डीडुप पंक्तियाँ अब feishu/dedup/*.json फ़ाइलों या सेवानिवृत्त हाथ से बनाए गए dedup.* स्टोर के बजाय कोर दावा-योग्य डीडुप (साझा SQLite Plugin स्टेट में feishu.dedup.* नेमस्पेस) का उपयोग करती हैं, और कोई पुराना आयात नहीं होता क्योंकि अपग्रेड के बाद रीप्ले-सुरक्षा कैश फिर से बनता है।
  • Microsoft Teams वार्तालाप, पोल, लंबित अपलोड बफ़र और फ़ीडबैक लर्निंग अब साझा SQLite Plugin स्टेट/ब्लॉब तालिकाओं का उपयोग करते हैं। लंबित अपलोड पथ plugin_blob_entries का उपयोग करता है, ताकि मीडिया बफ़र base64 JSON के बजाय SQLite BLOB के रूप में संग्रहीत हों। रनटाइम सहायक नाम अब *-fs फ़ाइल-स्टोर नामकरण के बजाय SQLite/स्टेट नामकरण का उपयोग करते हैं, और पुराना storePath शिम इन स्टोर से हटा दिया गया है। इसकी पुरानी JSON आयात योजना Microsoft Teams Plugin सेटअप/डॉक्टर माइग्रेशन सतह में रहती है।
  • Zalo होस्टेड आउटबाउंड मीडिया अब openclaw-zalo-outbound-media JSON/bin अस्थायी साइडकार के बजाय साझा SQLite plugin_blob_entries का उपयोग करता है।
  • डिफ़ व्यूअर HTML और मेटाडेटा अब meta.json/viewer.html अस्थायी फ़ाइलों के बजाय साझा SQLite plugin_blob_entries का उपयोग करते हैं। व्यूअर HTML gzip ब्लॉब के रूप में संग्रहीत होता है और केवल URL टोकन हैश को स्थायी किया जाता है। रेंडर किए गए PNG/PDF आउटपुट अस्थायी मटेरियलाइज़ेशन बने रहते हैं क्योंकि चैनल डिलीवरी को अभी भी फ़ाइल पथ चाहिए; उनकी समय-सीमा समाप्ति का मेटाडेटा JSON साइडकार के बिना SQLite के स्वामित्व में है।
  • Canvas प्रबंधित दस्तावेज़ अब डिफ़ॉल्ट state/canvas/documents डायरेक्टरी के बजाय साझा SQLite plugin_blob_entries का उपयोग करते हैं। Canvas होस्ट उन ब्लॉब को सीधे सर्व करता है; स्थानीय फ़ाइलें केवल स्पष्ट host.root ऑपरेटर सामग्री या अस्थायी मटेरियलाइज़ेशन के लिए बनाई जाती हैं, जब किसी डाउनस्ट्रीम मीडिया रीडर को पथ की आवश्यकता होती है।
  • File Transfer ऑडिट निर्णय अब असीमित audit/file-transfer.jsonl रनटाइम लॉग के बजाय साझा SQLite plugin_state_entries का उपयोग करते हैं। डॉक्टर पुरानी JSONL ऑडिट फ़ाइल को Plugin स्टेट में आयात करता है और साफ़ आयात के बाद स्रोत को हटा देता है।
  • ACPX प्रक्रिया लीज़ और Gateway इंस्टेंस पहचान अब साझा SQLite Plugin स्टेट का उपयोग करते हैं। डॉक्टर पुरानी gateway-instance-id फ़ाइल को Plugin स्टेट में आयात करता है और स्रोत को हटा देता है।
  • ACPX द्वारा जनरेट की गई रैपर स्क्रिप्ट और पृथक Codex होम OpenClaw अस्थायी रूट के अंतर्गत अस्थायी मटेरियलाइज़ेशन हैं, टिकाऊ OpenClaw स्टेट नहीं। टिकाऊ ACPX रनटाइम रिकॉर्ड SQLite लीज़ और Gateway-इंस्टेंस पंक्तियाँ हैं; पुरानी ACPX stateDir कॉन्फ़िगरेशन सतह हटा दी गई है, क्योंकि अब वहाँ कोई रनटाइम स्टेट नहीं लिखा जाता।
  • Gateway मीडिया अटैचमेंट अब साझा media_blobs SQLite तालिका को कैनोनिकल बाइट स्टोर के रूप में उपयोग करते हैं। चैनल और सैंडबॉक्स संगतता सतहों को लौटाए गए स्थानीय पथ डेटाबेस पंक्ति के अस्थायी मटेरियलाइज़ेशन हैं, टिकाऊ मीडिया स्टोर नहीं। रनटाइम मीडिया अनुमति-सूचियों में अब पुराने $OPENCLAW_STATE_DIR/media या कॉन्फ़िगरेशन-डायरेक्टरी media रूट शामिल नहीं हैं; वे डायरेक्टरियाँ केवल डॉक्टर आयात स्रोत हैं।
  • शेल पूर्णता अब $OPENCLAW_STATE_DIR/completions/* कैश फ़ाइलें नहीं लिखती। इंस्टॉल, डॉक्टर, अपडेट और रिलीज़ स्मोक पथ टिकाऊ पूर्णता कैश फ़ाइलों के बजाय जनरेट किए गए पूर्णता आउटपुट या प्रोफ़ाइल सोर्सिंग का उपयोग करते हैं।
  • Gateway स्किल-अपलोड स्टेजिंग अब साझा skill_uploads और skill_upload_chunks पंक्तियों का उपयोग करती है। अपलोड के दौरान चंक अलग-अलग ट्रांज़ैक्शनल रहते हैं, फिर कमिट एक सत्यापित आर्काइव BLOB संयोजित करता है और चंक पंक्तियाँ हटा देता है। इंस्टॉलर को केवल इंस्टॉल चलने के दौरान अस्थायी रूप से मटेरियलाइज़ किया गया आर्काइव पथ मिलता है। डॉक्टर क्षणिक अपलोड आयात करने के बजाय सेवानिवृत्त एक-घंटे की फ़ाइल सिस्टम स्टेजिंग ट्री को त्याग देता है।
  • सबएजेंट इनलाइन अटैचमेंट अब वर्कस्पेस .openclaw/attachments/* के अंतर्गत मटेरियलाइज़ नहीं होते। स्पॉन पथ SQLite VFS सीड प्रविष्टियाँ तैयार करता है, इनलाइन रन उन प्रविष्टियों को प्रति-एजेंट रनटाइम स्क्रैच नेमस्पेस में सीड करते हैं, और डिस्क-समर्थित टूल अटैचमेंट पथों के लिए उस SQLite स्क्रैच को ओवरले करते हैं। पुरानी सबएजेंट-रन अटैचमेंट-डायरेक्टरी रजिस्ट्री कॉलम और क्लीनअप हुक हटा दिए गए हैं।
  • CLI इमेज हाइड्रेशन अब स्थिर openclaw-cli-images कैश फ़ाइलें बनाए नहीं रखता। बाहरी CLI बैकएंड को अब भी फ़ाइल पथ मिलते हैं, लेकिन वे पथ सफ़ाई के साथ प्रति-रन अस्थायी मटेरियलाइज़ेशन हैं।
  • कैश-ट्रेस निदान, Anthropic पेलोड निदान, रॉ मॉडल स्ट्रीम निदान, निदान टाइमलाइन इवेंट और Gateway स्थिरता बंडल अब logs/*.jsonl या logs/stability/*.json फ़ाइलों के बजाय SQLite पंक्तियाँ लिखते हैं। रनटाइम पथ ओवरराइड फ़्लैग और एनवायरनमेंट वेरिएबल हटा दिए गए हैं; निर्यात/डीबग कमांड डेटाबेस पंक्तियों से स्पष्ट रूप से फ़ाइलें मटेरियलाइज़ कर सकते हैं।
  • macOS सहायक में अब रोलिंग diagnostics.jsonl राइटर नहीं है। ऐप लॉग यूनिफ़ाइड लॉगिंग में जाते हैं और टिकाऊ Gateway निदान SQLite-समर्थित रहते हैं।
  • macOS पोर्ट-गार्डियन रिकॉर्ड सूची अब Application Support JSON फ़ाइल या अपारदर्शी सिंगलटन ब्लॉब के बजाय टाइप की गई साझा SQLite macos_port_guardian_records पंक्तियों का उपयोग करती है। सभी macOS ऐप प्रोफ़ाइल एक ही होस्ट-ग्लोबल नेटिव डेटाबेस का उपयोग करती हैं क्योंकि वे मशीन-स्थानीय पोर्ट का समन्वय करती हैं। जब तक कोई पुरानी JSON-लेखन ऐप प्रति चल रही होती है, प्रत्येक लेजर ऑपरेशन अवरुद्ध रहता है। माइग्रेशन केवल स्रोत का स्नैपशॉट लेने और बाद में उसका पुनः सत्यापन करने के लिए पुराने लेजर के स्थिर फ़ाइल-लॉक प्रोटोकॉल से जुड़ता है। यह उस लॉक को पकड़े बिना लाइव कमांड और प्रक्रिया-प्रारंभ तथ्यों से प्रत्येक पुरानी पंक्ति का समाधान करता है, फिर प्राधिकृत SQLite पंक्तियाँ दोबारा पढ़ता है, योजना लागू करता है, प्रत्येक रसीद सत्यापित करता है और स्रोत को हटा देता है। हटाने के पुनः प्रयास अनुपस्थित पंक्तियों की फिर से योजना बनाते हैं, ताकि सेवानिवृत्त बासी रसीदें पुनर्जीवित न हो सकें। लॉक अल्पकालिक रहता है, ताकि SSH के स्पॉन होने के बाद वह किसी पुराने राइटर को फँसा न दे। कटओवर जानबूझकर एकतरफ़ा है: स्थिर-अवस्था रनटाइम कभी JSON को पढ़ता, प्रोजेक्ट या लिखता नहीं है, और केवल-JSON बिल्ड पर रोलबैक नई SQLite रसीदों को संरक्षित नहीं करता।
  • Gateway सिंगलटन लॉक अब अस्थायी-डायरेक्टरी लॉक फ़ाइलों के बजाय gateway_locks स्कोप के अंतर्गत टाइप की गई साझा SQLite state_leases पंक्तियों का उपयोग करते हैं। Fly और OAuth समस्या-निवारण दस्तावेज़ अब बासी फ़ाइल-लॉक सफ़ाई के बजाय SQLite लीज़/प्रमाणीकरण रीफ़्रेश लॉक की ओर संकेत करते हैं।
  • Gateway पुनःप्रारंभ सेंटिनल स्थिति अब restart-sentinel.json के बजाय टाइप की गई साझा SQLite gateway_restart_sentinel पंक्तियों का उपयोग करती है; रनटाइम सेंटिनल प्रकार, स्थिति, रूटिंग, संदेश, निरंतरता और आँकड़े टाइप किए गए स्तंभों से पढ़ता है। वे स्तंभ प्रामाणिक हैं; payload_json केवल रीप्ले/डीबग शैडो है। रनटाइम के पढ़ने, लिखने और साफ़ करने के पथ केवल SQLite का उपयोग करते हैं। सामान्य पुनःप्रारंभ पुनर्प्राप्ति से पहले सत्यापित पुराने पोस्ट-अपडेट सेंटिनल को आयात करने, टाइप की गई पंक्ति को सत्यापित करने और स्रोत फ़ाइल हटाने के लिए एक सीमित स्थिति-माइग्रेशन मॉड्यूल स्टार्टअप और Doctor के दौरान चलता है। कोई भी स्थिर-अवस्था रनटाइम मॉड्यूल लेगेसी फ़ाइल को पढ़ता, लिखता या साफ़ नहीं करता।
  • Gateway पुनःप्रारंभ अभिप्राय और सुपरवाइज़र हैंडऑफ़ स्थिति अब gateway-restart-intent.json और gateway-supervisor-restart-handoff.json साइडकार के बजाय टाइप की गई साझा SQLite gateway_restart_intent और gateway_restart_handoff पंक्तियों का उपयोग करती हैं।
  • Gateway सिंगलटन समन्वय अब gateway.<hash>.lock फ़ाइलें लिखने के बजाय gateway_locks के अंतर्गत टाइप की गई state_leases पंक्तियों का उपयोग करता है। लीज़ पंक्ति लॉक स्वामी, समाप्ति, Heartbeat और डीबग पेलोड की स्वामी है; SQLite परमाण्विक अधिग्रहण/रिलीज़ सीमा का स्वामी है। हटाया गया फ़ाइल-लॉक डायरेक्टरी विकल्प अब मौजूद नहीं है; परीक्षण सीधे SQLite पंक्ति पहचान का उपयोग करते हैं।
  • cron/runs/*.jsonl फ़ाइलें स्कैन करने वाला पुराना असंदर्भित Cron उपयोग-रिपोर्ट सहायक हटा दिया गया। Cron रन इतिहास रिपोर्ट Cron के स्वामित्व वाली task_runs पंक्तियाँ पढ़ती हैं।
  • मुख्य-सत्र पुनःप्रारंभ पुनर्प्राप्ति अब agents/*/sessions डायरेक्टरियाँ स्कैन करने के बजाय SQLite agent_databases रजिस्ट्री के माध्यम से संभावित एजेंट खोजती है।
  • Gemini सत्र-क्षति पुनर्प्राप्ति अब केवल SQLite सत्र पंक्ति हटाती है; इसे अब लेगेसी storePath गेट की आवश्यकता नहीं है और यह व्युत्पन्न ट्रांसक्रिप्ट JSONL पथ को अनलिंक करने का प्रयास नहीं करती।
  • पथ ओवरराइड प्रबंधन अब शाब्दिक undefined/null पर्यावरण मानों को अनसेट मानता है, जिससे परीक्षणों या शेल हैंडऑफ़ के दौरान अनजाने रेपो-रूट undefined/state/*.sqlite डेटाबेस बनने से बचते हैं।
  • कॉन्फ़िग स्वास्थ्य फ़िंगरप्रिंट अब logs/config-health.json के बजाय टाइप की गई साझा SQLite config_health_entries पंक्तियों का उपयोग करते हैं, जिससे सामान्य कॉन्फ़िग फ़ाइल एकमात्र गैर-क्रेडेंशियल कॉन्फ़िगरेशन दस्तावेज़ बनी रहती है। macOS सहयोगी केवल प्रक्रिया-स्थानीय स्वास्थ्य स्थिति रखता है और पुराने JSON साइडकार को दोबारा नहीं बनाता।
  • प्रमाणीकरण प्रोफ़ाइल रनटाइम अब क्रेडेंशियल JSON फ़ाइलें आयात या लिखता नहीं है। प्रामाणिक क्रेडेंशियल स्टोर SQLite है; auth-profiles.json, प्रति-एजेंट auth.json, और साझा credentials/oauth.json Doctor माइग्रेशन इनपुट हैं, जिन्हें आयात के बाद हटा दिया जाता है।
  • प्रमाणीकरण प्रोफ़ाइल सहेजने/स्थिति के परीक्षण अब सीधे टाइप की गई SQLite प्रमाणीकरण तालिकाओं की पुष्टि करते हैं और लेगेसी प्रमाणीकरण-प्रोफ़ाइल फ़ाइलनामों का उपयोग केवल Doctor माइग्रेशन इनपुट के लिए करते हैं।
  • openclaw secrets apply केवल कॉन्फ़िग फ़ाइल, env फ़ाइल और SQLite प्रमाणीकरण-प्रोफ़ाइल स्टोर को साफ़ करता है। इसमें अब हटाए जा चुके प्रति-एजेंट auth.json को संपादित करने वाला संगतता तर्क नहीं है; उस फ़ाइल का आयात और हटाना Doctor के स्वामित्व में है।
  • Hermes गुप्त माइग्रेशन योजनाएँ आयातित API-कुंजी प्रोफ़ाइलों को सीधे SQLite प्रमाणीकरण-प्रोफ़ाइल स्टोर में लागू करती हैं। यह अब मध्यवर्ती लक्ष्य के रूप में auth-profiles.json को लिखता या सत्यापित नहीं करता।
  • उपयोगकर्ता-दृश्य प्रमाणीकरण दस्तावेज़ अब उपयोगकर्ताओं को auth-profiles.json का निरीक्षण या प्रतिलिपि बनाने के लिए कहने के बजाय state/openclaw.sqlite#table/auth_profile_stores/<agentDir> का वर्णन करते हैं; लेगेसी OAuth/प्रमाणीकरण JSON नाम केवल Doctor-आयात इनपुट के रूप में दस्तावेज़ित रहते हैं।
  • MCP OAuth सत्र अब साझा state/openclaw.sqlite में संस्करणित mcp_oauth_stores पंक्तियों का उपयोग करते हैं। SDK के स्वामित्व वाले टोकन, क्लाइंट-पंजीकरण और डिस्कवरी ऑब्जेक्ट एक सत्यापित JSON पेलोड बने रहते हैं ताकि निर्भरता एक्सटेंशन फ़ील्ड सुरक्षित रहें, जबकि प्रत्येक पढ़ना/संशोधित करना/लिखना एक छोटी Kysely ट्रांज़ैक्शन में कमिट होता है। एक साझा SQLite लीज़ रीफ़्रेश, लॉगिन और लॉगआउट को क्रमबद्ध करती है; एम्बेडेड MCP ट्रांसपोर्ट अब MCP SDK को उस लीज़ के बाहर रीफ़्रेश नहीं करने देते। Doctor स्रोत रसीदों के साथ हटाए गए mcp-oauth/*.json स्टोर को विशेष रूप से आयात और हटाता है, और रनटाइम में कोई फ़ाइल फ़ॉलबैक नहीं है।
  • कोर स्थिति-पथ सहायक अब हटाई गई credentials/oauth.json फ़ाइल को प्रदर्शित नहीं करते। लेगेसी फ़ाइलनाम Doctor प्रमाणीकरण आयात पथ तक सीमित है।
  • इंस्टॉल, सुरक्षा, ऑनबोर्डिंग, मॉडल-प्रमाणीकरण और SecretRef दस्तावेज़ अब प्रति-एजेंट प्रमाणीकरण-प्रोफ़ाइल JSON फ़ाइलों के बजाय SQLite प्रमाणीकरण-प्रोफ़ाइल पंक्तियों और संपूर्ण-स्थिति बैकअप/माइग्रेशन का वर्णन करते हैं।
  • PI मॉडल डिस्कवरी अब प्रामाणिक क्रेडेंशियल को इन-मेमोरी pi-coding-agent प्रमाणीकरण स्टोरेज में भेजती है। यह अब डिस्कवरी के दौरान प्रति-एजेंट auth.json बनाती, साफ़ करती या लिखती नहीं है।
  • Voice Wake ट्रिगर और रूटिंग सेटिंग अब settings/voicewake.json, settings/voicewake-routing.json या अपारदर्शी सामान्य पंक्तियों के बजाय टाइप की गई साझा SQLite तालिकाओं का उपयोग करती हैं; Doctor लेगेसी JSON फ़ाइलें आयात करता है और सफल माइग्रेशन के बाद उन्हें हटा देता है।
  • अपडेट-जाँच स्थिति अब update-check.json या अपारदर्शी सामान्य ब्लॉब के बजाय टाइप की गई साझा update_check_state पंक्ति का उपयोग करती है; Doctor लेगेसी JSON फ़ाइल आयात करता है और सफल माइग्रेशन के बाद उसे हटा देता है।
  • कॉन्फ़िग स्वास्थ्य स्थिति अब logs/config-health.json या अपारदर्शी सामान्य ब्लॉब के बजाय टाइप की गई साझा config_health_entries पंक्तियों का उपयोग करती है; Doctor लेगेसी JSON फ़ाइल आयात करता है और सफल माइग्रेशन के बाद उसे हटा देता है।
  • Plugin वार्तालाप बाइंडिंग अनुमोदन अब अपारदर्शी साझा SQLite स्थिति या plugin-binding-approvals.json के बजाय टाइप की गई plugin_binding_approvals पंक्तियों का उपयोग करते हैं; लेगेसी फ़ाइल Doctor माइग्रेशन इनपुट है।
  • सामान्य वर्तमान-वार्तालाप बाइंडिंग अब bindings/current-conversations.json को दोबारा लिखने के बजाय टाइप की गई current_conversation_bindings पंक्तियाँ संग्रहीत करती हैं; Doctor लेगेसी JSON फ़ाइल आयात करता है और सफल माइग्रेशन के बाद उसे हटा देता है।
  • Memory Wiki आयातित-स्रोत सिंक लेज़र अब .openclaw-wiki/source-sync.json को दोबारा लिखने के बजाय प्रति वॉल्ट/स्रोत कुंजी एक SQLite Plugin-स्थिति पंक्ति संग्रहीत करते हैं; माइग्रेशन प्रदाता लेगेसी JSON लेज़र को आयात करके हटा देता है।
  • Memory Wiki ChatGPT आयात-रन रिकॉर्ड अब .openclaw-wiki/import-runs/*.json लिखने के बजाय प्रति वॉल्ट/रन आईडी एक SQLite Plugin-स्थिति पंक्ति संग्रहीत करते हैं। आयात-रन स्नैपशॉट अभिलेखीकरण को ब्लॉब स्टोरेज में स्थानांतरित किए जाने तक रोलबैक स्नैपशॉट स्पष्ट वॉल्ट फ़ाइलें बने रहते हैं।
  • Memory Wiki संकलित डाइजेस्ट अब .openclaw-wiki/cache/agent-digest.json और .openclaw-wiki/cache/claims.jsonl लिखने के बजाय संपीड़ित SQLite Plugin-ब्लॉब पंक्तियाँ संग्रहीत करते हैं। कैश दोबारा बनाया जा सकता है, इसलिए Doctor पुरानी कैश फ़ाइलों को आयात किए बिना हटा देता है।
  • ClawHub Skills इंस्टॉल ट्रैकिंग अब रनटाइम पर .clawhub/lock.json और .clawhub/origin.json साइडकार लिखने या पढ़ने के बजाय प्रति वर्कस्पेस/Skills एक SQLite Plugin-स्थिति पंक्ति संग्रहीत करती है। रनटाइम कोड फ़ाइल-आकार के लॉकफ़ाइल/मूल अमूर्तन के बजाय ट्रैक किए गए-इंस्टॉल स्थिति ऑब्जेक्ट का उपयोग करता है। Doctor कॉन्फ़िगर किए गए एजेंट वर्कस्पेस से लेगेसी साइडकार आयात करता है और स्वच्छ आयात के बाद उन्हें हटा देता है।
  • इंस्टॉल किया गया Plugin इंडेक्स अब plugins/installs.json के बजाय टाइप की गई साझा SQLite installed_plugin_index सिंगलटन पंक्ति को पढ़ता और लिखता है; लेगेसी JSON फ़ाइल केवल Doctor माइग्रेशन इनपुट है और आयात के बाद हटा दी जाती है।
  • लेगेसी plugins/installs.json पथ सहायक अब Doctor लेगेसी कोड में रहता है। रनटाइम Plugin-इंडेक्स मॉड्यूल केवल SQLite-समर्थित स्थायित्व विकल्प प्रदर्शित करते हैं, JSON फ़ाइल पथ नहीं।
  • Gateway पुनःप्रारंभ सेंटिनल, पुनःप्रारंभ अभिप्राय और सुपरवाइज़र हैंडऑफ़ स्थिति अब सामान्य अपारदर्शी ब्लॉब के बजाय टाइप की गई साझा SQLite पंक्तियों (gateway_restart_sentinel, gateway_restart_intent और gateway_restart_handoff) का उपयोग करती हैं। रनटाइम पुनःप्रारंभ कोड में कोई फ़ाइल-आकार का सेंटिनल/अभिप्राय/हैंडऑफ़ अनुबंध नहीं है।
  • Matrix सिंक कैश, स्टोरेज मेटाडेटा, थ्रेड बाइंडिंग, इनबाउंड डीडुप मार्कर, स्टार्टअप सत्यापन कूलडाउन स्थिति, SDK IndexedDB क्रिप्टो स्नैपशॉट, क्रेडेंशियल और पुनर्प्राप्ति कुंजियाँ अब साझा SQLite Plugin स्थिति/ब्लॉब तालिकाओं का उपयोग करती हैं। रनटाइम पथ स्ट्रक्ट अब storage-meta.json मेटाडेटा पथ प्रदर्शित नहीं करते; वह फ़ाइलनाम केवल लेगेसी माइग्रेशन इनपुट है। उनकी लेगेसी JSON आयात योजना Matrix Plugin सेटअप/Doctor माइग्रेशन सतह में रहती है। इनबाउंड डीडुप मार्कर कोर दावायोग्य डीडुप (साझा स्थिति DB में matrix.inbound-dedupe.* नेमस्पेस) का उपयोग करते हैं; Matrix Doctor स्थिति माइग्रेशन हटाई गई प्रति-रूट inbound-dedupe पंक्तियों और inbound-dedupe.json को एक बार आयात करता है, फिर रनटाइम केवल दावायोग्य-डीडुप स्टोर पढ़ता है।
  • Matrix स्टार्टअप अब लेगेसी Matrix फ़ाइल स्थिति को स्कैन, रिपोर्ट या पूर्ण नहीं करता। Matrix फ़ाइल पहचान, लेगेसी क्रिप्टो स्नैपशॉट निर्माण, रूम-कुंजी पुनर्स्थापन माइग्रेशन स्थिति, आयात और स्रोत हटाना—सभी Doctor के स्वामित्व में हैं।
  • Matrix रनटाइम माइग्रेशन बैरल हटा दिए गए। लेगेसी स्थिति/क्रिप्टो पहचान और परिवर्तन सहायक अब रनटाइम API सतह का भाग होने के बजाय सीधे Matrix Doctor द्वारा आयात किए जाते हैं।
  • Matrix माइग्रेशन स्नैपशॉट पुनःउपयोग मार्कर अब matrix/migration-snapshot.json के बजाय SQLite Plugin स्थिति में रहते हैं; Doctor अब भी साइडकार स्थिति फ़ाइल लिखे बिना उसी सत्यापित पूर्व-माइग्रेशन अभिलेख का पुनःउपयोग कर सकता है।
  • Nostr बस कर्सर और प्रोफ़ाइल प्रकाशन स्थिति अब साझा SQLite Plugin स्थिति का उपयोग करते हैं। उनकी लेगेसी JSON आयात योजना Nostr Plugin सेटअप/Doctor माइग्रेशन सतह में रहती है।
  • Active Memory सत्र टॉगल अब session-toggles.json के बजाय साझा SQLite Plugin स्थिति का उपयोग करते हैं; मेमोरी को दोबारा चालू करने पर JSON ऑब्जेक्ट दोबारा लिखने के बजाय पंक्ति हटा दी जाती है।
  • Skill Workshop प्रस्ताव और समीक्षा काउंटर अब प्रति-वर्कस्पेस skill-workshop/<workspace>.json स्टोर के बजाय साझा SQLite Plugin स्थिति का उपयोग करते हैं। प्रत्येक प्रस्ताव skill-workshop/proposals के अंतर्गत एक अलग पंक्ति है और समीक्षा काउंटर skill-workshop/reviews के अंतर्गत एक अलग पंक्ति है।
  • Skill Workshop समीक्षक उप-एजेंट रन अब skill-workshop/<sessionId>.json साइडकार सत्र पथ बनाने के बजाय रनटाइम सत्र ट्रांसक्रिप्ट रिज़ॉल्वर का उपयोग करते हैं।
  • ACPX प्रक्रिया लीज़ अब संपूर्ण-फ़ाइल process-leases.json रजिस्ट्री के बजाय acpx/process-leases के अंतर्गत साझा SQLite Plugin स्थिति का उपयोग करती हैं। प्रत्येक लीज़ अपनी अलग पंक्ति के रूप में संग्रहीत होती है, जिससे रनटाइम JSON पुनर्लेखन पथ के बिना स्टार्टअप पर बासी प्रक्रियाओं को हटाना सुरक्षित रहता है।
  • ACPX रैपर स्क्रिप्ट और पृथक Codex होम OpenClaw अस्थायी रूट में जनरेट होते हैं। आवश्यकता के अनुसार इन्हें दोबारा बनाया जाता है और ये बैकअप या माइग्रेशन इनपुट नहीं हैं।
  • उप-एजेंट रन रजिस्ट्री स्थायित्व टाइप की गई साझा subagent_runs पंक्तियों का उपयोग करता है। पुराना subagents/runs.json पथ अब केवल Doctor क्लीनअप इनपुट है। Doctor इसे स्थिति रखरखाव लॉक के अंतर्गत अपने अधिकार में लेता है, त्याग निर्णय को SQLite में रिकॉर्ड करता है और अस्थायी रन स्थिति आयात किए बिना इसे हटा देता है। कोई रनटाइम JSON रीडर, राइटर, कैश या फ़ॉलबैक शेष नहीं है; केवल फ़ाइल में मौजूद प्रगतिरत रन की क्रॉस-वर्ज़न पुनर्प्राप्ति इस समाप्ति सीमा पर जानबूझकर असमर्थित है। रजिस्ट्री व्यवहार सिद्ध करने के लिए रनटाइम परीक्षण अब अमान्य या खाली runs.json फ़िक्स्चर नहीं बनाते; वे सीधे SQLite पंक्तियाँ सीड/पढ़ते हैं।
  • बैकअप अभिलेखीकरण से पहले स्थिति डायरेक्टरी को स्टेज करता है, गैर-डेटाबेस फ़ाइलें कॉपी करता है, ऑनलाइन बैकअप और ऑफ़लाइन VACUUM के साथ डेटाबेस स्नैपशॉट लेता है, लाइव WAL/SHM साइडकार छोड़ देता है, अभिलेख मेनिफ़ेस्ट में स्नैपशॉट मेटाडेटा रिकॉर्ड करता है और पूर्ण बैकअप रन को अभिलेख मेनिफ़ेस्ट के साथ SQLite में रिकॉर्ड करता है। openclaw backup create डिफ़ॉल्ट रूप से लिखे गए अभिलेख को सत्यापित करता है; --no-verify स्पष्ट तेज़ पथ है।
  • openclaw backup restore निष्कर्षण से पहले अभिलेख को सत्यापित करता है, सत्यापक के सामान्यीकृत मेनिफ़ेस्ट का पुनःउपयोग करता है और सत्यापित मेनिफ़ेस्ट एसेट को उनके रिकॉर्ड किए गए स्रोत पथों पर पुनर्स्थापित करता है। लेखन के लिए इसे --yes की आवश्यकता होती है और यह पुनर्स्थापन योजना के लिए --dry-run का समर्थन करता है।
  • पुराना बैकअप अस्थिर-पथ फ़िल्टर हटा दिया गया है। बैकअप को अब लेगेसी सत्र या Cron JSON/JSONL फ़ाइलों के लिए लाइव-tar स्किप सूची की आवश्यकता नहीं है, क्योंकि SQLite स्नैपशॉट अभिलेख बनाने से पहले स्टेज किए जाते हैं।
  • सामान्य सेटअप और ऑनबोर्डिंग के लिए कार्यक्षेत्र तैयार करने की प्रक्रिया अब agents/<agentId>/sessions/ निर्देशिकाएँ नहीं बनाती। वे केवल कॉन्फ़िगरेशन/कार्यस्थल बनाती हैं; SQLite सत्र पंक्तियाँ और ट्रांसक्रिप्ट पंक्तियाँ आवश्यकतानुसार प्रति-एजेंट डेटाबेस में बनाई जाती हैं।
  • सुरक्षा अनुमति सुधार अब sessions.json और ट्रांसक्रिप्ट JSONL फ़ाइलों के बजाय वैश्विक और प्रति-एजेंट SQLite डेटाबेस तथा WAL/SHM साइडकार को लक्षित करता है।
  • सैंडबॉक्स रजिस्ट्री के रनटाइम नाम अब सक्रिय स्टोर में पुरानी JSON रजिस्ट्री शब्दावली बनाए रखने के बजाय सीधे SQLite रजिस्ट्री के प्रकारों का वर्णन करते हैं।
  • openclaw reset --scope config+creds+sessions केवल पुरानी sessions/ निर्देशिकाएँ ही नहीं, बल्कि प्रति-एजेंट openclaw-agent.sqlite डेटाबेस और WAL/SHM साइडकार भी हटाता है।
  • Gateway के समेकित सत्र सहायक अब प्रविष्टि-उन्मुख नामों का उपयोग करते हैं: loadCombinedSessionEntriesForGateway, { databasePath, entries } लौटाता है। पुराने संयुक्त-स्टोर नामकरण को रनटाइम कॉलर से हटा दिया गया है।
  • Docker MCP चैनल सीडिंग अब sessions.json और JSONL ट्रांसक्रिप्ट बनाने के बजाय मुख्य सत्र पंक्ति और ट्रांसक्रिप्ट इवेंट को प्रति-एजेंट SQLite डेटाबेस में लिखती है।
  • बंडल किया गया सत्र-मेमोरी हुक अब {agentId, sessionId} के आधार पर SQLite से पिछले सत्र का संदर्भ प्राप्त करता है। अब यह ट्रांसक्रिप्ट पथों या workspace/sessions निर्देशिकाओं को स्कैन, संग्रहीत या संश्लेषित नहीं करता।
  • बंडल किया गया कमांड-लॉगर हुक अब logs/commands.log में जोड़ने के बजाय कमांड ऑडिट पंक्तियाँ साझा SQLite command_log_entries तालिका में लिखता है।
  • चैनल पेयरिंग की अनुमति-सूचियाँ अब रनटाइम पर केवल SQLite-समर्थित पठन/लेखन सहायक उपलब्ध कराती हैं। अप्रचलित Plugin SDK पथ रिज़ॉल्वर माइग्रेशन संगतता के लिए बना हुआ है; फ़ाइल रीडर केवल doctor स्थिति माइग्रेशन कोड में मौजूद हैं।
  • migration_runs स्थिति, टाइमस्टैम्प और JSON रिपोर्ट सहित पुरानी स्थिति माइग्रेशन के निष्पादन दर्ज करता है।
  • migration_sources प्रत्येक आयातित पुरानी फ़ाइल के स्रोत को हैश, आकार, रिकॉर्ड संख्या, लक्ष्य तालिका, रन आईडी, स्थिति और स्रोत-निष्कासन स्थिति सहित दर्ज करता है।
  • backup_runs बैकअप अभिलेख पथ, स्थिति और JSON मैनिफ़ेस्ट दर्ज करता है।
  • वैश्विक स्कीमा किसी अप्रयुक्त agents रजिस्ट्री तालिका को नहीं रखता। जब तक रनटाइम में एजेंट रिकॉर्ड का कोई वास्तविक स्वामी नहीं होता, एजेंट डेटाबेस खोज ही प्रामाणिक agent_databases रजिस्ट्री है।
  • जनरेट किया गया मॉडल कैटलॉग कॉन्फ़िगरेशन, एजेंट निर्देशिका द्वारा कुंजीबद्ध टाइप की गई वैश्विक SQLite agent_model_catalogs पंक्तियों में संग्रहीत होता है। रनटाइम कॉलर ensureOpenClawModelCatalog का उपयोग करते हैं; रनटाइम कोड में कोई models.json संगतता API नहीं है। कार्यान्वयन SQLite में लिखता है और एम्बेड की गई PI रजिस्ट्री को models.json फ़ाइल बनाए बिना उस संग्रहीत पेलोड से हाइड्रेट किया जाता है।
  • वैकल्पिक memory.qmd.sessions निर्यात प्रति-एजेंट डेटाबेस से प्रामाणिक ट्रांसक्रिप्ट पंक्तियाँ पढ़ता है और स्पष्ट QMD इनपुट आर्टिफ़ैक्ट के रूप में QMD होम के अंतर्गत सैनिटाइज़ किया गया Markdown निर्मित करता है। इसलिए QMD सत्र संग्रह और आर्टिफ़ैक्ट पहचान मैपिंग कॉन्फ़िगर किए गए बाहरी-टूल ब्रिज का हिस्सा बने रहते हैं; वे दूसरा प्रामाणिक ट्रांसक्रिप्ट स्टोर नहीं हैं।
  • QMD का अपना index.sqlite, YAML संग्रह कॉन्फ़िगरेशन और मॉडल डाउनलोड ~/.openclaw/agents/<agentId>/qmd के अंतर्गत बाहरी-टूल आर्टिफ़ैक्ट बने रहते हैं; उन्हें plugin_blob_entries में मिरर नहीं किया जाता। OpenClaw के स्वामित्व वाला QMD समन्वय डेटाबेस-प्रथम है: साझा state_leases वैश्विक रूप से एम्बेड को क्रमबद्ध करते हैं और प्रति-एजेंट state_leases संग्रह/अपडेट/एम्बेड राइटर को क्रमबद्ध करते हैं। रनटाइम कोई QMD लॉक साइडकार नहीं बनाता।
  • वैकल्पिक memory-lancedb Plugin अब अंतर्निहित OpenClaw-प्रबंधित स्टोर के रूप में ~/.openclaw/memory/lancedb नहीं बनाता। यह एक बाहरी LanceDB बैकएंड है और तब तक अक्षम रहता है, जब तक ऑपरेटर स्पष्ट dbPath कॉन्फ़िगर नहीं करता।
  • check:database-first-legacy-stores उस नए रनटाइम स्रोत को विफल करता है जो पुराने स्टोर नामों को लेखन-शैली फ़ाइल-सिस्टम API के साथ जोड़ता है। यह उस रनटाइम स्रोत को भी विफल करता है जो सेवानिवृत्त ट्रांसक्रिप्ट ब्रिज मार्कर transcriptLocator या sqlite-transcript://... को फिर से प्रस्तुत करता है। माइग्रेशन, doctor, आयात और स्पष्ट गैर-सत्र निर्यात कोड की अनुमति बनी रहती है। sessionFile, storePath और पुराने SessionManager फ़ाइल-युग फ़साड जैसे व्यापक पुराने अनुबंध नामों के अभी भी मौजूदा स्वामी हैं और उन्हें आवश्यक प्रीफ़्लाइट जाँच बनाने से पहले अलग माइग्रेशन गार्ड कार्य की आवश्यकता है। अब गार्ड रनटाइम cache/*.json स्टोर, सामान्य thread-bindings.json साइडकार, Cron स्थिति/रन-लॉग JSON, कॉन्फ़िगरेशन स्वास्थ्य JSON, रीस्टार्ट और लॉक साइडकार, Voice Wake सेटिंग्स, Plugin बाइंडिंग अनुमोदन, इंस्टॉल किए गए Plugin का इंडेक्स JSON, File Transfer ऑडिट JSONL, Memory Wiki गतिविधि लॉग, पुराना बंडल किया गया command-logger टेक्स्ट लॉग और pi-mono रॉ-स्ट्रीम JSONL डायग्नोस्टिक्स नॉब को भी कवर करता है। यह पुराने रूट-स्तरीय doctor लेगेसी मॉड्यूल नामों पर भी प्रतिबंध लगाता है, ताकि संगतता कोड src/commands/doctor/ के अंतर्गत बना रहे। Android डीबग हैंडलर भी camera_debug.log या debug_logs.txt कैश फ़ाइलें तैयार करने के बजाय logcat/इन-मेमोरी आउटपुट का उपयोग करते हैं।

लक्ष्य स्कीमा संरचना

स्कीमा को स्पष्ट रखें। होस्ट-स्वामित्व वाली रनटाइम स्थिति टाइप की गई तालिकाओं का उपयोग करती है। Plugin-स्वामित्व वाली अपारदर्शी स्थिति plugin_state_entries / plugin_blob_entries का उपयोग करती है; कोई सामान्य होस्ट kv तालिका नहीं है।

वैश्विक डेटाबेस:

text
state_leases(scope, lease_key, owner, expires_at, heartbeat_at, payload_json, created_at, updated_at)exec_approvals_config(config_key, raw_json, socket_path, has_socket_token, default_security, default_ask, default_ask_fallback, auto_allow_skills, agent_count, allowlist_count, updated_at_ms)schema_meta(meta_key, role, schema_version, agent_id, app_version, created_at, updated_at)agent_databases(agent_id, path, schema_version, last_seen_at, size_bytes)task_runs(...)task_delivery_state(...)flow_runs(...)subagent_runs(run_id, child_session_key, requester_session_key, controller_session_key, created_at, ended_at, cleanup_handled, payload_json)current_conversation_bindings(binding_key, binding_id, target_agent_id, target_session_id, target_session_key, channel, account_id, conversation_kind, parent_conversation_id, conversation_id, target_kind, status, bound_at, expires_at, metadata_json, updated_at)plugin_binding_approvals(plugin_root, channel, account_id, plugin_id, plugin_name, approved_at)tui_last_sessions(scope_key, session_key, updated_at)plugin_state_entries(plugin_id, namespace, entry_key, value_json, created_at, expires_at)plugin_blob_entries(plugin_id, namespace, entry_key, metadata_json, blob, created_at, expires_at)media_blobs(subdir, id, content_type, size_bytes, blob, created_at, updated_at)skill_uploads(upload_id, kind, slug, force, size_bytes, sha256, actual_sha256, received_bytes, archive_blob, created_at, expires_at, committed, committed_at, idempotency_key_hash)skill_upload_chunks(upload_id, byte_offset, size_bytes, chunk_blob)web_push_subscriptions(endpoint_hash, subscription_id, endpoint, p256dh, auth, created_at_ms, updated_at_ms)web_push_vapid_keys(key_id, public_key, private_key, subject, updated_at_ms)apns_registrations(node_id, transport, token, relay_handle, send_grant, installation_id, relay_origin, topic, environment, distribution, token_debug_suffix, updated_at_ms)apns_registration_tombstones(node_id, deleted_at_ms)node_host_config(config_key, version, node_id, token, display_name, gateway_host, gateway_port, gateway_tls, gateway_tls_fingerprint, gateway_context_path, updated_at_ms)device_identities(identity_key, device_id, public_key_pem, private_key_pem, created_at_ms, updated_at_ms)device_auth_tokens(device_id, role, token, scopes_json, updated_at_ms)macos_port_guardian_records(pid, port, command, mode, timestamp)workspace_setup_state(workspace_key, workspace_path, version, bootstrap_seeded_at, setup_completed_at, updated_at)workspace_path_aliases(alias_key, alias_path, workspace_key, workspace_path, updated_at_ms)workspace_attestations(workspace_key, attested_at_ms, updated_at_ms)workspace_generated_bootstrap_hashes(workspace_key, filename, sha256)native_hook_relay_bridges(relay_id, pid, hostname, port, token, expires_at_ms, updated_at_ms)model_capability_cache(provider_id, model_id, name, input_text, input_image, reasoning, supports_tools, context_window, max_tokens, cost_input, cost_output, cost_cache_read, cost_cache_write, updated_at_ms)agent_model_catalogs(catalog_key, agent_dir, raw_json, updated_at)managed_outgoing_image_records(attachment_id, session_key, agent_id, message_id, created_at, updated_at, retention_class, alt, original_media_id, original_media_subdir, original_content_type, original_width, original_height, original_size_bytes, original_filename, record_json, cleanup_pending)gateway_restart_sentinel(sentinel_key, version, kind, status, ts, session_key, thread_id, delivery_channel, delivery_to, delivery_account_id, message, continuation_json, doctor_hint, stats_json, payload_json, updated_at_ms)channel_pairing_requests(channel_key, account_id, request_id, code, created_at, last_seen_at, meta_json)channel_pairing_allow_entries(channel_key, account_id, entry, sort_order, updated_at)voicewake_triggers(config_key, position, trigger, updated_at_ms)voicewake_routing_config(config_key, version, default_target_mode, default_target_agent_id, default_target_session_key, updated_at_ms)voicewake_routing_routes(config_key, position, trigger, target_mode, target_agent_id, target_session_key, updated_at_ms)update_check_state(state_key, last_checked_at, last_notified_version, last_notified_tag, last_available_version, last_available_tag, auto_install_id, auto_first_seen_version, auto_first_seen_tag, auto_first_seen_at, auto_last_attempt_version, auto_last_attempt_at, auto_last_success_version, auto_last_success_at, updated_at_ms)config_health_entries(config_path, last_known_good_json, last_promoted_good_json, last_observed_suspicious_signature, updated_at_ms)sandbox_registry_entries(registry_kind, container_name, session_key, backend_id, runtime_label, image, created_at_ms, last_used_at_ms, config_label_kind, config_hash, cdp_port, no_vnc_port, entry_json, updated_at)cron_jobs(store_key, job_id, name, description, enabled, delete_after_run, created_at_ms, agent_id, session_key, schedule_kind, schedule_expr, schedule_tz, every_ms, anchor_ms, at, stagger_ms, session_target, wake_mode, payload_kind, payload_message, payload_model, payload_fallbacks_json, payload_thinking, payload_timeout_seconds, payload_allow_unsafe_external_content, payload_external_content_source_json, payload_light_context, payload_tools_allow_json, delivery_mode, delivery_channel, delivery_to, delivery_thread_id, delivery_account_id, delivery_best_effort, failure_delivery_mode, failure_delivery_channel, failure_delivery_to, failure_delivery_account_id, failure_alert_disabled, failure_alert_after, failure_alert_channel, failure_alert_to, failure_alert_cooldown_ms, failure_alert_include_skipped, failure_alert_mode, failure_alert_account_id, next_run_at_ms, running_at_ms, last_run_at_ms, last_run_status, last_error, last_duration_ms, consecutive_errors, consecutive_skipped, schedule_error_count, last_delivery_status, last_delivery_error, last_delivered, last_failure_alert_at_ms, job_json, state_json, runtime_updated_at_ms, schedule_identity, sort_order, updated_at)delivery_queue_entries(queue_name, id, status, entry_kind, session_key, channel, target, account_id, retry_count, last_attempt_at, last_error, recovery_state, platform_send_started_at, entry_json, enqueued_at, updated_at, failed_at)commitments(id, agent_id, session_key, channel, account_id, recipient_id, thread_id, sender_id, kind, sensitivity, source, status, reason, suggested_text, dedupe_key, confidence, due_earliest_ms, due_latest_ms, due_timezone, source_message_id, source_run_id, created_at_ms, updated_at_ms, attempts, last_attempt_at_ms, sent_at_ms, dismissed_at_ms, snoozed_until_ms, expired_at_ms, record_json)migration_runs(id, started_at, finished_at, status, report_json)migration_sources(source_key, migration_kind, source_path, target_table, source_sha256, source_size_bytes, source_record_count, last_run_id, status, imported_at, removed_source, report_json)backup_runs(id, created_at, archive_path, status, manifest_json)

एजेंट डेटाबेस:

text
schema_meta(meta_key, role, schema_version, agent_id, app_version, created_at, updated_at)sessions(session_id, session_key, session_scope, created_at, updated_at, started_at, ended_at, status, chat_type, channel, account_id, primary_conversation_id, model_provider, model, agent_harness_id, parent_session_key, spawned_by, display_name)conversations(conversation_id, channel, account_id, kind, peer_id, parent_conversation_id, thread_id, native_channel_id, native_direct_user_id, label, metadata_json, created_at, updated_at)session_conversations(session_id, conversation_id, role, first_seen_at, last_seen_at)session_routes(session_key, session_id, updated_at)session_entries(session_id, session_key, entry_json, updated_at)transcript_events(session_id, seq, event_json, created_at)transcript_event_identities(session_id, event_id, seq, event_type, has_parent, parent_id, message_idempotency_key, created_at)transcript_snapshots(session_id, snapshot_id, reason, event_count, created_at, metadata_json)vfs_entries(namespace, path, kind, content_blob, metadata_json, updated_at)tool_artifacts(run_id, artifact_id, kind, metadata_json, blob, created_at)run_artifacts(run_id, path, kind, metadata_json, blob, created_at)trajectory_runtime_events(session_id, run_id, seq, event_json, created_at)memory_index_meta(key, value)memory_index_sources(id, path, source, hash, mtime, size)memory_index_chunks(id, path, source, start_line, end_line, hash, model, text, embedding, updated_at)memory_embedding_cache(provider, model, provider_key, hash, embedding, dims, updated_at)memory_index_state(id, revision)cache_entries(scope, key, value_json, blob, expires_at, updated_at)

memory_index_sources.id स्थिर पूर्णांक प्राथमिक कुंजी है; (path, source) अद्वितीय बनी रहती है।

भविष्य में खोज, कैनोनिकल इवेंट तालिकाओं को बदले बिना FTS तालिकाएँ जोड़ सकती है:

text
transcript_events_fts(session_id, seq, text)vfs_entries_fts(namespace, path, text)

बड़े मानों को JSON स्ट्रिंग एन्कोडिंग के बजाय blob कॉलम का उपयोग करना चाहिए। ऐसे छोटे संरचित डेटा के लिए value_json रखें, जिन्हें सामान्य SQLite टूलिंग से निरीक्षण योग्य बने रहना आवश्यक है।

agent_databases इस ब्रांच के लिए कैनोनिकल रजिस्ट्री है। वास्तविक एजेंट-रिकॉर्ड स्वामी के अस्तित्व तक agents तालिका न जोड़ें; एजेंट कॉन्फ़िगरेशन openclaw.json में ही रहता है।

Doctor माइग्रेशन संरचना

Doctor को एक स्पष्ट माइग्रेशन चरण कॉल करना चाहिए, जिसकी रिपोर्ट की जा सके और जिसे सुरक्षित रूप से दोबारा चलाया जा सके:

bash
openclaw doctor --fix

openclaw doctor --fix सामान्य कॉन्फ़िगरेशन प्रीफ़्लाइट के बाद स्थिति माइग्रेशन कार्यान्वयन को लागू करता है और आयात से पहले सत्यापित बैकअप बनाता है। रनटाइम स्टार्टअप और openclaw migrate को पुरानी OpenClaw स्थिति फ़ाइलें आयात नहीं करनी चाहिए।

माइग्रेशन के गुण:

  • एक माइग्रेशन पास किसी भी चीज़ में परिवर्तन करने से पहले सभी पुरानी फ़ाइल स्रोतों को खोजता है और एक योजना तैयार करता है।
  • Doctor पुरानी फ़ाइलों को आयात करने से पहले एक सत्यापित पूर्व-माइग्रेशन बैकअप आर्काइव बनाता है।
  • आयात आइडेम्पोटेंट होते हैं और स्रोत पथ, mtime, आकार, हैश तथा लक्ष्य तालिका द्वारा कुंजीबद्ध होते हैं।
  • लक्ष्य डेटाबेस के कमिट होने के बाद सफल स्रोत फ़ाइलें हटा दी जाती हैं या आर्काइव कर दी जाती हैं।
  • विफल आयात स्रोत को अपरिवर्तित छोड़ते हैं और migration_runs में चेतावनी दर्ज करते हैं।
  • माइग्रेशन उपलब्ध होने के बाद रनटाइम कोड केवल SQLite पढ़ता है।
  • डाउनग्रेड/रनटाइम फ़ाइलों में निर्यात पथ आवश्यक नहीं है।

माइग्रेशन सूची

इन्हें वैश्विक डेटाबेस में स्थानांतरित करें:

  • कार्य रजिस्ट्री के रनटाइम लेखन अब साझा डेटाबेस का उपयोग करते हैं; गैर-रिलीज़ किया गया tasks/runs.sqlite साइडकार आयातक हटा दिया गया है। स्नैपशॉट सहेजने की प्रक्रिया कार्य id के आधार पर अपसर्ट करती है और केवल अनुपस्थित कार्य/डिलीवरी पंक्तियाँ हटाती है।
  • Task Flow के रनटाइम लेखन अब साझा डेटाबेस का उपयोग करते हैं; गैर-रिलीज़ किया गया tasks/flows/registry.sqlite साइडकार आयातक हटा दिया गया है। स्नैपशॉट सहेजने की प्रक्रिया फ़्लो id के आधार पर अपसर्ट करती है और केवल अनुपस्थित फ़्लो पंक्तियाँ हटाती है।
  • Plugin स्थिति के रनटाइम लेखन अब साझा डेटाबेस का उपयोग करते हैं; गैर-रिलीज़ किया गया plugin-state/state.sqlite साइडकार आयातक हटा दिया गया है।
  • अंतर्निर्मित मेमोरी खोज अब डिफ़ॉल्ट रूप से memory/<agentId>.sqlite का उपयोग नहीं करती; इसकी इंडेक्स तालिकाएँ स्वामी एजेंट डेटाबेस में रहती हैं, और स्पष्ट memorySearch.store.path साइडकार ऑप्ट-इन को doctor कॉन्फ़िगरेशन माइग्रेशन में स्थानांतरित कर दिया गया है।
  • अंतर्निर्मित मेमोरी रीइंडेक्स एजेंट डेटाबेस में केवल मेमोरी-स्वामित्व वाली तालिकाएँ रीसेट करता है। इसे पूरी SQLite फ़ाइल प्रतिस्थापित नहीं करनी चाहिए, क्योंकि वही डेटाबेस सत्रों, ट्रांसक्रिप्ट, VFS पंक्तियों, आर्टिफ़ैक्ट और रनटाइम कैश का स्वामी है।
  • मोनोलिथिक और शार्ड किए गए JSON से सैंडबॉक्स कंटेनर/ब्राउज़र रजिस्ट्रियाँ। रनटाइम लेखन अब साझा डेटाबेस का उपयोग करते हैं; पुराने JSON का आयात बना हुआ है।
  • Cron कार्य परिभाषाएँ, शेड्यूल स्थिति और रन इतिहास अब साझा SQLite का उपयोग करते हैं; doctor पुरानी jobs.json, jobs-state.json, और cron/runs/*.jsonl फ़ाइलों को आयात करके हटाता है
  • डिवाइस पहचान/प्रमाणीकरण, पुश, अपडेट जाँच, प्रतिबद्धताएँ, OpenRouter मॉडल कैश, इंस्टॉल किए गए Plugin का इंडेक्स और ऐप-सर्वर बाइंडिंग
  • डिवाइस/Node पेयरिंग और बूटस्ट्रैप रिकॉर्ड अब टाइप की गई SQLite तालिकाओं का उपयोग करते हैं
  • डिवाइस-पेयर सूचना सब्सक्राइबर और डिलीवर किए गए अनुरोध के मार्कर अब device-pair-notify.json के बजाय साझा SQLite Plugin-स्थिति तालिका का उपयोग करते हैं।
  • वॉइस-कॉल के कॉल रिकॉर्ड अब calls.jsonl के बजाय voice-call / calls नेमस्पेस के अंतर्गत साझा SQLite Plugin-स्थिति तालिका का उपयोग करते हैं; Plugin CLI SQLite-समर्थित कॉल इतिहास का टेल और सारांश प्रस्तुत करता है।
  • QQBot Gateway सत्र, ज्ञात-उपयोगकर्ता रिकॉर्ड और रेफ़-इंडेक्स उद्धरण कैश अब session-*.json, known-users.json, और ref-index.jsonl के बजाय qqbot नेमस्पेस (gateway-sessions, known-users, ref-index) के अंतर्गत SQLite Plugin स्थिति का उपयोग करते हैं। वे पुरानी फ़ाइलें कैश हैं और उनका माइग्रेशन नहीं किया जाता।
  • Discord मॉडल-पिकर प्राथमिकताएँ, कमांड-डिप्लॉय हैश और थ्रेड बाइंडिंग अब model-picker-preferences.json, command-deploy-cache.json, और thread-bindings.json के बजाय discord नेमस्पेस (model-picker-preferences, command-deploy-hashes, thread-bindings) के अंतर्गत SQLite Plugin स्थिति का उपयोग करते हैं; Discord doctor/setup माइग्रेशन पुरानी फ़ाइलों को आयात करके हटाता है।
  • BlueBubbles कैच-अप कर्सर और इनबाउंड डीडुप मार्कर अब bluebubbles/catchup/*.json और bluebubbles/inbound-dedupe/*.json के बजाय bluebubbles नेमस्पेस (catchup-cursors, inbound-dedupe) के अंतर्गत SQLite Plugin स्थिति का उपयोग करते हैं; BlueBubbles doctor/setup माइग्रेशन पुरानी फ़ाइलों को आयात करके हटाता है।
  • Telegram अपडेट ऑफ़सेट, स्टिकर कैश प्रविष्टियाँ, रिप्लाई-चेन संदेश कैश प्रविष्टियाँ, भेजे गए संदेश की कैश प्रविष्टियाँ, विषय-नाम कैश प्रविष्टियाँ और थ्रेड बाइंडिंग अब update-offset-*.json, sticker-cache.json, *.telegram-messages.json, *.telegram-sent-messages.json, *.telegram-topic-names.json, और thread-bindings-*.json के बजाय telegram नेमस्पेस (update-offsets, sticker-cache, message-cache, sent-messages, topic-names, thread-bindings) के अंतर्गत SQLite Plugin स्थिति का उपयोग करते हैं; Telegram doctor/setup माइग्रेशन पुरानी फ़ाइलों को आयात करके हटाता है।
  • iMessage कैच-अप कर्सर, रिप्लाई शॉर्ट-id मैपिंग और भेजे गए इको की डीडुप पंक्तियाँ अब imessage/catchup/*.json, imessage/reply-cache.jsonl, और imessage/sent-echoes.jsonl के बजाय imessage नेमस्पेस (catchup-cursors, reply-cache, sent-echoes) के अंतर्गत SQLite Plugin स्थिति का उपयोग करती हैं; iMessage doctor/setup माइग्रेशन पुरानी फ़ाइलों को आयात करके हटाता है।
  • Microsoft Teams वार्तालाप, पोल, SSO टोकन और फ़ीडबैक से मिली सीख अब msteams-conversations.json, msteams-polls.json, msteams-sso-tokens.json, और *.learnings.json के बजाय SQLite Plugin स्थिति नेमस्पेस (conversations, polls, sso-tokens, feedback-learnings) का उपयोग करते हैं; Microsoft Teams doctor/setup माइग्रेशन पुरानी फ़ाइलों को आयात करके संग्रहित करता है। लंबित अपलोड अल्पकालिक SQLite कैश हैं और पुरानी JSON कैश फ़ाइलों का माइग्रेशन नहीं किया जाता।
  • Matrix सिंक कैश, स्टोरेज मेटाडेटा, थ्रेड बाइंडिंग, इनबाउंड डीडुप मार्कर, स्टार्टअप सत्यापन कूलडाउन स्थिति, क्रेडेंशियल, रिकवरी कुंजियाँ और SDK IndexedDB क्रिप्टो स्नैपशॉट अब matrix के अंतर्गत SQLite Plugin स्थिति/ब्लॉब नेमस्पेस (sync-store, storage-meta, thread-bindings, कोर के दावायोग्य डीडुप के माध्यम से matrix.inbound-dedupe.*, startup-verification, credentials, recovery-key, idb-snapshots) का उपयोग करते हैं, न कि bot-storage.json, storage-meta.json, thread-bindings.json, inbound-dedupe.json, startup-verification.json, credentials.json, recovery-key.json, और crypto-idb-snapshot.json; Matrix doctor/setup माइग्रेशन खाता-स्कोप वाले Matrix स्टोरेज रूट से उन पुरानी फ़ाइलों (और सेवानिवृत्त प्रति-रूट inbound-dedupe SQLite पंक्तियों) को आयात करके हटाता है।
  • Nostr बस कर्सर और प्रोफ़ाइल प्रकाशन स्थिति अब bus-state-*.json और profile-state-*.json के बजाय nostr नेमस्पेस (bus-state, profile-state) के अंतर्गत SQLite Plugin स्थिति का उपयोग करते हैं; Nostr doctor/setup माइग्रेशन पुरानी फ़ाइलों को आयात करके हटाता है।
  • Active Memory सत्र टॉगल अब session-toggles.json के बजाय active-memory/session-toggles के अंतर्गत SQLite Plugin स्थिति का उपयोग करते हैं।
  • Skill Workshop प्रस्ताव कतारें और समीक्षा काउंटर अब प्रति-वर्कस्पेस skill-workshop/<workspace>.json फ़ाइलों के बजाय skill-workshop/proposals और skill-workshop/reviews के अंतर्गत SQLite Plugin स्थिति का उपयोग करते हैं।
  • आउटबाउंड डिलीवरी और सत्र डिलीवरी कतारें अब स्थायी delivery-queue/*.json, delivery-queue/failed/*.json, और session-delivery-queue/*.json फ़ाइलों के बजाय अलग-अलग कतार नामों (outbound-delivery, session-delivery) के अंतर्गत वैश्विक SQLite delivery_queue_entries तालिका साझा करती हैं। doctor का पुरानी-स्थिति चरण लंबित और विफल पंक्तियों को आयात करता है, पुराने डिलीवर किए गए मार्कर हटाता है और आयात के बाद पुरानी JSON फ़ाइलें मिटाता है। हॉट रूटिंग और पुनःप्रयास फ़ील्ड टाइप किए गए कॉलम हैं; JSON पेलोड केवल रीप्ले/डीबग के लिए रखा जाता है।
  • ACPX प्रक्रिया लीज़ अब process-leases.json के बजाय acpx/process-leases के अंतर्गत SQLite Plugin स्थिति का उपयोग करती हैं।
  • बैकअप और माइग्रेशन रन मेटाडेटा

इन्हें एजेंट डेटाबेस में ले जाएँ:

  • एजेंट सत्र रूट और संगतता-आकार वाले सत्र-प्रविष्टि पेलोड। रनटाइम लेखन के लिए पूर्ण: हॉट सत्र मेटाडेटा को sessions में क्वेरी किया जा सकता है, जबकि पुराने आकार वाला पूरा SessionEntry पेलोड session_entries में रहता है।
  • एजेंट ट्रांसक्रिप्ट इवेंट। रनटाइम लेखन के लिए पूर्ण।
  • Compaction चेकपॉइंट और ट्रांसक्रिप्ट स्नैपशॉट। रनटाइम लेखन के लिए पूर्ण: चेकपॉइंट ट्रांसक्रिप्ट प्रतियाँ SQLite ट्रांसक्रिप्ट पंक्तियाँ हैं और चेकपॉइंट मेटाडेटा transcript_snapshots में दर्ज किया जाता है। Gateway चेकपॉइंट सहायक अब इन मानों को स्रोत फ़ाइलों के बजाय ट्रांसक्रिप्ट स्नैपशॉट कहते हैं।
  • एजेंट VFS स्क्रैच/वर्कस्पेस नेमस्पेस। रनटाइम VFS लेखन के लिए पूर्ण।
  • उप-एजेंट अटैचमेंट पेलोड। रनटाइम लेखन के लिए पूर्ण: वे SQLite VFS सीड प्रविष्टियाँ हैं और कभी भी स्थायी वर्कस्पेस फ़ाइलें नहीं होते।
  • टूल आर्टिफ़ैक्ट। रनटाइम लेखन के लिए पूर्ण।
  • रन आर्टिफ़ैक्ट। प्रति-एजेंट run_artifacts तालिका के माध्यम से वर्कर रनटाइम लेखन के लिए पूर्ण।
  • एजेंट-स्थानीय रनटाइम कैश। प्रति-एजेंट cache_entries तालिका के माध्यम से वर्कर रनटाइम-स्कोप कैश लेखन के लिए पूर्ण। Gateway-व्यापी मॉडल कैश वैश्विक डेटाबेस में ही रहेंगे, जब तक वे एजेंट-विशिष्ट न हो जाएँ।
  • ACP पैरेंट स्ट्रीम लॉग। रनटाइम लेखन के लिए पूर्ण।
  • ACP रीप्ले लेजर सत्र। acp_replay_sessions और acp_replay_events के माध्यम से रनटाइम लेखन के लिए पूर्ण; पुराना acp/event-ledger.json केवल doctor इनपुट के रूप में रहता है।
  • ACP सत्र मेटाडेटा। acp_sessions के माध्यम से रनटाइम लेखन के लिए पूर्ण; sessions.json में पुराने entry.acp ब्लॉक केवल doctor माइग्रेशन इनपुट हैं।
  • ट्रैजेक्टरी साइडकार, जब वे स्पष्ट निर्यात फ़ाइलें न हों। रनटाइम लेखन के लिए पूर्ण: ट्रैजेक्टरी कैप्चर एजेंट-डेटाबेस की trajectory_runtime_events पंक्तियाँ लिखता है और रन-स्कोप वाले आर्टिफ़ैक्ट को SQLite में मिरर करता है। पुराने साइडकार केवल doctor आयात इनपुट हैं; निर्यात नए JSONL सहायता-बंडल आउटपुट बना सकता है, लेकिन रनटाइम पर पुराने ट्रैजेक्टरी/ट्रांसक्रिप्ट साइडकार को पढ़ता या माइग्रेट नहीं करता। रनटाइम ट्रैजेक्टरी कैप्चर SQLite स्कोप उजागर करता है; JSONL पथ सहायक निर्यात/डीबग सहायता तक सीमित हैं और रनटाइम मॉड्यूल से पुनः निर्यात नहीं किए जाते। एम्बेडेड-रनर ट्रैजेक्टरी मेटाडेटा ट्रांसक्रिप्ट लोकेटर को स्थायी रखने के बजाय {agentId, sessionId, sessionKey} पहचान दर्ज करता है।

फ़िलहाल इन्हें फ़ाइल-समर्थित रखें:

  • openclaw.json
  • प्रदाता या CLI क्रेडेंशियल फ़ाइलें
  • Plugin/पैकेज मैनिफ़ेस्ट
  • डिस्क मोड चुने जाने पर उपयोगकर्ता वर्कस्पेस और Git रिपॉज़िटरी
  • ऑपरेटर द्वारा टेल करने के लिए बनाए गए लॉग, जब तक किसी विशिष्ट लॉग सतह को स्थानांतरित न किया जाए

माइग्रेशन योजना

चरण 0: सीमा को स्थिर करें

अधिक पंक्तियाँ स्थानांतरित करने से पहले स्थायी-स्थिति की सीमा स्पष्ट करें:

  • वैश्विक डेटाबेस में एक migration_runs तालिका जोड़ें। पुरानी-स्थिति माइग्रेशन निष्पादन रिपोर्ट के लिए पूर्ण।
  • फ़ाइल-से-डेटाबेस आयात के लिए doctor-स्वामित्व वाली एकल स्थिति माइग्रेशन सेवा जोड़ें। पूर्ण: openclaw doctor --fix पुरानी-स्थिति माइग्रेशन कार्यान्वयन का उपयोग करता है।
  • plan को केवल-पढ़ने योग्य बनाएँ और apply से बैकअप बनवाएँ, आयात व सत्यापन करवाएँ और फिर पुरानी फ़ाइलें हटवाएँ या क्वारंटीन करवाएँ। पूर्ण: doctor सत्यापित पूर्व-माइग्रेशन बैकअप बनाता है, बैकअप पथ को migration_runs में भेजता है और आयातक/हटाने के पथों का पुनः उपयोग करता है।
  • स्थिर प्रतिबंध जोड़ें ताकि नया रनटाइम कोड पुरानी स्थिति फ़ाइलें न लिख सके, जबकि माइग्रेशन कोड और परीक्षण अब भी उन्हें सीड/पढ़ सकें। वर्तमान में माइग्रेट किए गए पुराने स्टोर के लिए पूर्ण; गार्ड निषिद्ध रनटाइम ट्रांसक्रिप्ट लोकेटर अनुबंधों के लिए नेस्टेड परीक्षण भी स्कैन करता है।

चरण 1: वैश्विक नियंत्रण तल पूरा करें

साझा समन्वय स्थिति को state/openclaw.sqlite में रखें:

  • एजेंट और एजेंट डेटाबेस रजिस्ट्री
  • कार्य और Task Flow लेजर
  • Plugin स्थिति
  • सैंडबॉक्स कंटेनर/ब्राउज़र रजिस्ट्री
  • Cron/शेड्यूलर रन इतिहास
  • पेयरिंग, डिवाइस, पुश, अपडेट-जाँच, TUI, OpenRouter/मॉडल कैश और अन्य छोटी Gateway-स्कोप वाली रनटाइम स्थिति
  • बैकअप और माइग्रेशन मेटाडेटा
  • Gateway मीडिया अटैचमेंट बाइट्स। रनटाइम लेखन के लिए पूर्ण; प्रत्यक्ष फ़ाइल पथ चैनल प्रेषकों और सैंडबॉक्स स्टेजिंग के साथ संगतता के लिए अस्थायी मटेरियलाइज़ेशन हैं। रनटाइम अनुमति-सूचियाँ SQLite मटेरियलाइज़ेशन पथ स्वीकार करती हैं, न कि पुराने स्थिति/कॉन्फ़िगरेशन मीडिया रूट। doctor पुरानी मीडिया फ़ाइलों को media_blobs में आयात करता है और पंक्तियाँ सफलतापूर्वक लिखे जाने के बाद स्रोत फ़ाइलें हटा देता है।
  • डीबग प्रॉक्सी कैप्चर सत्र, इवेंट और पेलोड ब्लॉब। पूर्ण: कैप्चर साझा स्थिति DB में रहते हैं और साझा स्थिति DB बूटस्ट्रैप, स्कीमा, WAL और बिज़ी-टाइमआउट सेटिंग के माध्यम से खुलते हैं। पेलोड बाइट्स capture_blobs.data में gzip-संपीड़ित हैं; कोई डीबग प्रॉक्सी रनटाइम साइडकार DB ओवरराइड, ब्लॉब डायरेक्टरी या केवल-प्रॉक्सी-कैप्चर जनरेट किया गया स्कीमा/कोडजन लक्ष्य नहीं है। doctor/स्टार्टअप माइग्रेशन रिलीज़ की गई debug-proxy/capture.sqlite पंक्तियाँ और संदर्भित पेलोड ब्लॉब आयात करता है, जिनमें सक्रिय पुराने DB/ब्लॉब परिवेश ओवरराइड भी शामिल हैं, फिर CA प्रमाणपत्रों को अक्षुण्ण रखते हुए उन स्रोतों को संग्रहित करता है।

यह चरण उन उप-प्रणालियों से डुप्लिकेट साइडकार ओपनर, अनुमति सहायक, WAL सेटअप, फ़ाइल-सिस्टम प्रूनिंग और संगतता राइटर भी हटा देता है।

चरण 2: प्रति-एजेंट डेटाबेस प्रस्तुत करना

प्रत्येक एजेंट के लिए एक डेटाबेस बनाएँ और उसे वैश्विक DB से पंजीकृत करें:

text
~/.openclaw/state/openclaw.sqlite~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite

वैश्विक agent_databases पंक्ति पथ, स्कीमा संस्करण, अंतिम बार देखे जाने का टाइमस्टैम्प और आकार/अखंडता का मूलभूत मेटाडेटा संग्रहीत करती है। रनटाइम कोड सीधे फ़ाइल पथ निर्धारित करने के बजाय रजिस्ट्री से एजेंट DB माँगता है।

एजेंट DB के स्वामित्व में ये हैं:

  • sessions कैनोनिकल सत्र रूट के रूप में, जिसमें session_entries उस रूट से जुड़ी संगतता-आकार वाली पेलोड तालिका है, और session_routes अद्वितीय सक्रिय session_key लुकअप है
  • conversations और session_conversations सत्रों से जुड़ी सामान्यीकृत प्रदाता रूटिंग पहचान के रूप में
  • transcript_events
  • ट्रांसक्रिप्ट स्नैपशॉट और Compaction चेकपॉइंट। रनटाइम लेखन के लिए पूर्ण।
  • vfs_entries
  • tool_artifacts और रन आर्टिफ़ैक्ट
  • एजेंट-स्थानीय रनटाइम/कैश पंक्तियाँ। वर्कर-स्कोप्ड कैश के लिए पूर्ण।
  • ACP पैरेंट स्ट्रीम इवेंट
  • ट्रैजेक्टरी रनटाइम इवेंट, जब वे स्पष्ट निर्यात आर्टिफ़ैक्ट न हों

चरण 3: सत्र स्टोर API बदलना

रनटाइम के लिए पूर्ण। फ़ाइल-आकार वाला सत्र स्टोर सरफ़ेस अब सक्रिय रनटाइम अनुबंध नहीं है:

  • रनटाइम अब loadSessionStore(storePath) को कॉल नहीं करता या storePath को सत्र पहचान नहीं मानता।
  • रनटाइम पंक्ति ऑपरेशन getSessionEntry, upsertSessionEntry, patchSessionEntry, deleteSessionEntry और listSessionEntries हैं।
  • पूरे स्टोर को पुनः लिखने वाले सहायक, फ़ाइल राइटर, कतार परीक्षण, उपनाम प्रूनिंग और लेगेसी-कुंजी हटाने के पैरामीटर रनटाइम से हटा दिए गए हैं।
  • बहिष्कृत रूट-पैकेज संगतता निर्यात 2026-10-12 तक केवल doctor के लिए बने sessions.json इम्पोर्टर को कार्य सौंपते हैं; Plugin SDK संगतता रीड कैनोनिकल SQLite पंक्तियों को प्रोजेक्ट करना जारी रखते हैं।
  • sessions.json पार्सिंग अब केवल doctor माइग्रेशन/इम्पोर्ट कोड और doctor परीक्षणों में रहती है।
  • रनटाइम जीवनचक्र फ़ॉलबैक JSONL की पहली पंक्तियों के बजाय SQLite ट्रांसक्रिप्ट हेडर पढ़ता है।

ऐसी किसी भी चीज़ को हटाना जारी रखें जो फ़ाइल-लॉक पैरामीटर, फ़ाइल-रखरखाव के रूप में प्रूनिंग/ट्रंकेशन शब्दावली, स्टोर-पथ पहचान या ऐसे परीक्षण फिर से प्रस्तुत करती हो जिनका एकमात्र अभिकथन JSON स्थायित्व है।

चरण 4: ट्रांसक्रिप्ट, ACP स्ट्रीम, ट्रैजेक्टरी और VFS स्थानांतरित करना

प्रत्येक एजेंट डेटा स्ट्रीम को डेटाबेस-नेटिव बनाएँ:

  • ट्रांसक्रिप्ट संलग्न लेखन एक SQLite ट्रांज़ैक्शन से होते हैं, जो सत्र हेडर सुनिश्चित करता है, संदेश आइडेम्पोटेंसी जाँचता है, पैरेंट टेल चुनता है, transcript_events में प्रविष्ट करता है और क्वेरी योग्य पहचान मेटाडेटा transcript_event_identities में दर्ज करता है। सीधे ट्रांसक्रिप्ट संदेश संलग्न करने और सामान्य स्थायी TranscriptSessionManager संलग्न करने के लिए पूर्ण; स्पष्ट ब्रांच ऑपरेशन अपना स्पष्ट पैरेंट चयन बनाए रखते हैं और बिना कोई फ़ाइल लोकेटर निर्धारित किए SQLite पंक्तियाँ लिखते रहते हैं।
  • ACP पैरेंट स्ट्रीम लॉग .acp-stream.jsonl फ़ाइलों के बजाय पंक्तियाँ बनते हैं। पूर्ण।
  • ACP स्पॉन सेटअप अब ट्रांसक्रिप्ट JSONL पथ स्थायी नहीं करता। पूर्ण।
  • रनटाइम ट्रैजेक्टरी कैप्चर सीधे इवेंट पंक्तियाँ/आर्टिफ़ैक्ट लिखता है। स्पष्ट सहायता/निर्यात कमांड अभी भी निर्यात प्रारूप के रूप में सहायता-बंडल JSONL आर्टिफ़ैक्ट बना सकता है, लेकिन सत्र निर्यात सत्र JSONL को फिर से नहीं बनाता। पूर्ण।
  • डिस्क मोड के रूप में कॉन्फ़िगर किए जाने पर डिस्क वर्कस्पेस डिस्क पर ही रहते हैं।
  • VFS स्क्रैच और प्रयोगात्मक केवल-VFS वर्कस्पेस मोड एजेंट DB का उपयोग करते हैं।

माइग्रेशन पुरानी JSONL फ़ाइलों को एक बार इम्पोर्ट करता है, गणना/हैश migration_runs में दर्ज करता है और अखंडता जाँचों के बाद इम्पोर्ट की गई फ़ाइलें हटा देता है।

चरण 5: बैकअप, पुनर्स्थापना, वैक्यूम और सत्यापन

बैकअप एक आर्काइव फ़ाइल बने रहते हैं:

  • प्रत्येक वैश्विक और एजेंट डेटाबेस का चेकपॉइंट बनाएँ।
  • प्रत्येक DB का SQLite ऑनलाइन बैकअप लेकर, उसके बाद ऑफ़लाइन VACUUM से स्नैपशॉट बनाएँ।
  • कॉम्पैक्ट DB स्नैपशॉट, कॉन्फ़िगरेशन, बाहरी क्रेडेंशियल और अनुरोधित वर्कस्पेस निर्यात आर्काइव करें।
  • कच्ची लाइव *.sqlite-wal और *.sqlite-shm फ़ाइलें छोड़ दें।
  • प्रत्येक DB स्नैपशॉट खोलकर और PRAGMA integrity_check चलाकर सत्यापित करें। openclaw backup create डिफ़ॉल्ट रूप से यह आर्काइव सत्यापन करता है; --no-verify केवल लेखन के बाद वाला आर्काइव चरण छोड़ता है, स्नैपशॉट निर्माण की अखंडता जाँच नहीं।
  • पुनर्स्थापना स्नैपशॉट को उनके लक्ष्य पथों पर वापस कॉपी करती है। पुनर्स्थापित वैश्विक DB संस्करण 1 का उपयोग करते हैं; पुनर्स्थापित प्रति-एजेंट DB संस्करण 2 का उपयोग करते हैं, और संस्करण 1 स्नैपशॉट खोले जाने पर परमाणु रूप से अपग्रेड होते हैं।

चरण 6: वर्कर रनटाइम

डेटाबेस विभाजन लागू होने के दौरान वर्कर मोड को प्रयोगात्मक रखें:

  • वर्कर एजेंट ID, रन ID, फ़ाइल-सिस्टम मोड और DB रजिस्ट्री पहचान प्राप्त करते हैं।
  • प्रत्येक वर्कर अपना SQLite कनेक्शन खोलता है।
  • पैरेंट चैनल डिलीवरी, अनुमोदन, कॉन्फ़िगरेशन और रद्द करने का अधिकार बनाए रखता है।
  • प्रत्येक सक्रिय रन के लिए एक वर्कर से शुरू करें; पूलिंग केवल जीवनचक्र और DB कनेक्शन स्वामित्व स्थिर होने के बाद जोड़ें।

चरण 7: पुरानी व्यवस्था हटाना

रनटाइम सत्र प्रबंधन के लिए पूर्ण। पुरानी व्यवस्था की अनुमति केवल स्पष्ट doctor इनपुट या सहायता/निर्यात आउटपुट के रूप में है:

  • कोई रनटाइम sessions.json, ट्रांसक्रिप्ट JSONL, सैंडबॉक्स रजिस्ट्री JSON, टास्क साइडकार SQLite या Plugin-स्टेट साइडकार SQLite लेखन नहीं।
  • कोई JSON/सत्र फ़ाइल प्रूनिंग, फ़ाइल ट्रांसक्रिप्ट ट्रंकेशन, सत्र फ़ाइल लॉक या लॉक-आकार वाले सत्र परीक्षण नहीं।
  • ऐसे कोई रनटाइम संगतता निर्यात नहीं जिनका उद्देश्य पुरानी सत्र फ़ाइलों को अद्यतित रखना हो।
  • स्पष्ट सहायता निर्यात उपयोगकर्ता-अनुरोधित आर्काइव/मैटेरियलाइज़ेशन प्रारूप बने रहते हैं और उन्हें फ़ाइल नाम वापस रनटाइम पहचान में नहीं देने चाहिए।

बैकअप और पुनर्स्थापना

बैकअप एक आर्काइव फ़ाइल होना चाहिए, लेकिन डेटाबेस कैप्चर SQLite-नेटिव होना चाहिए:

  1. लेखन ट्रांज़ैक्शन सीमित रखें ताकि ऑनलाइन बैकअप आगे बढ़ सके।
  2. कैप्चर करने से पहले प्रत्येक लाइव वैश्विक और एजेंट डेटाबेस सत्यापित करें।
  3. SQLite ऑनलाइन बैकअप से प्रत्येक डेटाबेस को अस्थायी बैकअप डायरेक्टरी में कैप्चर करें, फिर लाइव कनेक्शन बंद करें और निजी कॉपी पर VACUUM चलाएँ। स्वामी-परिभाषित SQLite क्षमताओं की आवश्यकता वाले Plugin स्कीमा तब तक फ़ेल-क्लोज़ रहते हैं, जब तक स्वामी सुरक्षित स्नैपशॉट अनुबंध प्रदान नहीं करता।
  4. डेटाबेस स्नैपशॉट, कॉन्फ़िगरेशन फ़ाइल, क्रेडेंशियल डायरेक्टरी, चयनित वर्कस्पेस और एक मैनिफ़ेस्ट आर्काइव करें।
  5. प्रत्येक SQLite स्नैपशॉट के फ़ाइल आकार को सत्यापित करें, फिर कैनोनिकल OpenClaw डेटाबेस खोलें और PRAGMA integrity_check के साथ भूमिका सत्यापन चलाएँ। समर्पित Plugin स्कीमा तब तक अपारदर्शी रहते हैं, जब तक उनका स्वामी सत्यापक प्रदान नहीं करता। openclaw backup create इसे डिफ़ॉल्ट रूप से करता है; --no-verify केवल जानबूझकर लेखन के बाद वाला आर्काइव चरण छोड़ने के लिए है।

प्राथमिक बैकअप प्रारूप के रूप में कच्ची लाइव *.sqlite, *.sqlite-wal और *.sqlite-shm प्रतियों पर निर्भर न रहें। आर्काइव मैनिफ़ेस्ट में डेटाबेस भूमिका, एजेंट ID, स्कीमा संस्करण, स्रोत पथ, स्नैपशॉट पथ, बाइट आकार और अखंडता स्थिति दर्ज होनी चाहिए।

पुनर्स्थापना को आर्काइव स्नैपशॉट से वैश्विक डेटाबेस और एजेंट डेटाबेस फ़ाइलें फिर से बनानी चाहिए। वैश्विक स्कीमा संस्करण 1 पर रहता है; प्रति-एजेंट संस्करण 1 स्नैपशॉट को संस्करण 2 तक सीमित रनटाइम अपग्रेड मिलता है। फ़ाइल-से-डेटाबेस इम्पोर्ट का एकमात्र स्वामी doctor रहता है। पुनर्स्थापना कमांड पहले आर्काइव सत्यापित करता है, फिर सत्यापित निकाले गए पेलोड से प्रत्येक मैनिफ़ेस्ट आस्ति बदलता है।

रनटाइम रीफ़ैक्टर योजना

  1. डेटाबेस रजिस्ट्री API जोड़ें।

    • वैश्विक DB और प्रति-एजेंट DB पथ निर्धारित करें।
    • वैश्विक स्कीमा को user_version = 1 पर रखें। प्रति-एजेंट DB संस्करण 2 का उपयोग करते हैं, जिसमें जारी किए गए संस्करण 1 मेमोरी-स्रोत आकार से एक परमाणु माइग्रेशन होता है।
    • परीक्षण, बैकअप और doctor द्वारा उपयोग किए जाने वाले बंद करने/चेकपॉइंट/अखंडता सहायक जोड़ें।
  2. साइडकार SQLite स्टोर समेकित करें।

    • Plugin स्टेट तालिकाएँ वैश्विक डेटाबेस में स्थानांतरित करें। रनटाइम लेखन के लिए पूर्ण; अप्रकाशित लेगेसी साइडकार इम्पोर्टर हटा दिया गया है।
    • टास्क रजिस्ट्री तालिकाएँ वैश्विक डेटाबेस में स्थानांतरित करें। रनटाइम लेखन के लिए पूर्ण; अप्रकाशित लेगेसी साइडकार इम्पोर्टर हटा दिया गया है।
    • Task Flow तालिकाएँ वैश्विक डेटाबेस में स्थानांतरित करें। रनटाइम लेखन के लिए पूर्ण; अप्रकाशित लेगेसी साइडकार इम्पोर्टर हटा दिया गया है।
    • अंतर्निहित मेमोरी-सर्च तालिकाएँ प्रत्येक एजेंट डेटाबेस में स्थानांतरित करें। पूर्ण; स्पष्ट कस्टम memorySearch.store.path अब doctor कॉन्फ़िगरेशन माइग्रेशन द्वारा हटाया जाता है। पूर्ण रीइंडेक्स केवल मेमोरी तालिकाओं पर यथास्थान चलता है; पुराना पूरी-फ़ाइल स्वैप पथ और साइडकार इंडेक्स स्वैप सहायक हटा दिए गए हैं।
    • उन उप-प्रणालियों से डुप्लिकेट डेटाबेस ओपनर, WAL सेटअप, अनुमति सहायक और बंद करने के पथ हटाएँ।
  3. एजेंट-स्वामित्व वाली तालिकाएँ प्रति-एजेंट डेटाबेस में स्थानांतरित करें।

    • वैश्विक डेटाबेस रजिस्ट्री के माध्यम से माँग पर एजेंट DB बनाएँ। पूर्ण।
    • रनटाइम सत्र प्रविष्टियाँ, ट्रांसक्रिप्ट इवेंट, VFS पंक्तियाँ और टूल आर्टिफ़ैक्ट एजेंट DB में स्थानांतरित करें। पूर्ण।
    • ब्रांच-स्थानीय साझा-DB सत्र प्रविष्टियाँ, ट्रांसक्रिप्ट इवेंट, VFS पंक्तियाँ या टूल आर्टिफ़ैक्ट माइग्रेट न करें; वह लेआउट कभी जारी नहीं हुआ। doctor में केवल लेगेसी फ़ाइल-से-डेटाबेस इम्पोर्ट रखें।
  4. सत्र स्टोर API बदलें।

    • रनटाइम पहचान के रूप में storePath हटाएँ। रनटाइम के लिए पूर्ण और check:database-first-legacy-stores द्वारा संरक्षित: सत्र मेटाडेटा, रूट अपडेट, कमांड स्थायित्व, CLI सत्र सफ़ाई, Feishu रीजनिंग पूर्वावलोकन, ट्रांसक्रिप्ट-स्टेट स्थायित्व, सबएजेंट गहराई, ऑथ प्रोफ़ाइल सत्र ओवरराइड, पैरेंट-फ़ोर्क लॉजिक और QA-lab निरीक्षण अब कैनोनिकल एजेंट/सत्र कुंजियों से डेटाबेस निर्धारित करते हैं। Gateway/TUI/UI/macOS सत्र-सूची प्रतिक्रियाएँ अब लेगेसी path के बजाय databasePath प्रदर्शित करती हैं; macOS डीबग सरफ़ेस session.store कॉन्फ़िगरेशन लिखने के बजाय प्रति-एजेंट डेटाबेस को केवल-पढ़ने योग्य स्टेट के रूप में दिखाते हैं। /status, चैट-संचालित ट्रैजेक्टरी निर्यात और CLI निर्भरता प्रॉक्सी अब लेगेसी स्टोर पथ प्रसारित नहीं करते; ट्रांसक्रिप्ट उपयोग फ़ॉलबैक एजेंट/सत्र पहचान से SQLite पढ़ता है। रनटाइम और ब्रिज परीक्षण अब storePath प्रदर्शित नहीं करते; उस लेगेसी फ़ील्ड नाम का स्वामित्व doctor/माइग्रेशन इनपुट के पास है। Gateway संयुक्त-सत्र लोडिंग में अब गैर-टेम्प्लेटेड session.store मानों के लिए विशेष रनटाइम ब्रांच नहीं है; यह प्रति-एजेंट SQLite पंक्तियाँ एकत्रित करती है। लेगेसी सत्र-लॉक doctor लेन और उसका .jsonl.lock सफ़ाई सहायक हटा दिए गए; अब SQLite सत्र समवर्तीता की सीमा है। हॉट रनटाइम कॉल साइट resolveSessionRowEntry जैसे पंक्ति-उन्मुख सहायक नामों का उपयोग करती हैं; पुराना resolveSessionStoreEntry संगतता उपनाम रनटाइम और Plugin SDK निर्यातों से हटा दिया गया है।
  • { agentId, sessionKey } पंक्ति संचालन का उपयोग करें। पूर्ण: getSessionEntry, upsertSessionEntry, deleteSessionEntry, patchSessionEntry, और listSessionEntries SQLite-प्रथम API हैं, जिन्हें सत्र स्टोर पथ की आवश्यकता नहीं होती। स्थिति सारांश, स्थानीय एजेंट स्थिति, स्वास्थ्य, और openclaw sessions सूचीकरण कमांड अब प्रति-एजेंट पंक्तियाँ सीधे पढ़ते हैं और sessions.json पथों के बजाय प्रति-एजेंट SQLite डेटाबेस पथ प्रदर्शित करते हैं।
  • संपूर्ण-स्टोर हटाने/सम्मिलित करने को upsertSessionEntry, deleteSessionEntry, listSessionEntries, और SQL क्लीनअप क्वेरी से बदलें। रनटाइम के लिए पूर्ण: हॉट पथ अब पंक्ति API और टकराव होने पर पुनः प्रयास किए जाने वाले पंक्ति पैच का उपयोग करते हैं; शेष संपूर्ण-स्टोर आयात/प्रतिस्थापन सहायक केवल माइग्रेशन आयात कोड और SQLite बैकएंड परीक्षणों तक सीमित हैं।
    • store-writer.ts और राइटर-क्यू परीक्षण हटाएँ। पूर्ण।
    • सत्र पंक्ति अपसर्ट/पैच से रनटाइम की लेगेसी-कुंजी छँटाई और उपनाम-हटाने के पैरामीटर हटाएँ। पूर्ण।
  1. रनटाइम JSON रजिस्ट्री व्यवहार हटाएँ।
    • सैंडबॉक्स रजिस्ट्री के पठन और लेखन को केवल SQLite बनाएँ। पूर्ण।
    • मोनोलिथिक और शार्डेड JSON केवल माइग्रेशन चरण से आयात करें। पूर्ण।
    • शार्डेड रजिस्ट्री लॉक और JSON लेखन हटाएँ। पूर्ण।
  • यदि आकार हॉट-पथ परिचालन स्थिति बना रहता है, तो रजिस्ट्री पंक्तियों को सामान्य अपारदर्शी JSON के रूप में संग्रहीत करने के बजाय एक टाइपयुक्त रजिस्ट्री तालिका रखें। पूर्ण।
  1. फ़ाइल-लॉक-जैसा सत्र परिवर्तन हटाएँ।

    • रनटाइम लॉक निर्माण और रनटाइम लॉक API के लिए पूर्ण।
    • स्वतंत्र लेगेसी .jsonl.lock doctor क्लीनअप लेन हटा दी गई है।
    • स्थिति अखंडता में अब अनाथ ट्रांसक्रिप्ट फ़ाइलों की छँटाई के लिए अलग पथ नहीं है; doctor माइग्रेशन लेगेसी JSONL स्रोतों को एक ही स्थान पर आयात/हटाता है।
    • Gateway सिंगलटन समन्वय gateway_locks के अंतर्गत टाइपयुक्त SQLite state_leases पंक्तियों का उपयोग करता है और अब फ़ाइल-लॉक डायरेक्टरी सीम उजागर नहीं करता।
    • सामान्य Plugin SDK डीडुप स्थायित्व अब फ़ाइल लॉक या JSON फ़ाइलों का उपयोग नहीं करता; यह साझा SQLite Plugin-स्थिति पंक्तियाँ लिखता है। पूर्ण।
    • QMD समन्वय एम्बेड के लिए साझा SQLite लीज़ और प्रत्येक संग्रह/अपडेट/एम्बेड राइटर के लिए प्रति-एजेंट SQLite लीज़ का उपयोग करता है। रनटाइम अब qmd/embed.lock.lock या agents/<agentId>/qmd-write.lock.lock नहीं बनाता; Doctor केवल निश्चित रूप से पुराने और सेवा-मुक्त साइडकार हटाता है। पूर्ण।
  2. वर्कर को डेटाबेस-जागरूक बनाएँ।

    • वर्कर अपने स्वयं के SQLite कनेक्शन खोलते हैं।
    • पैरेंट डिलीवरी, चैनल कॉलबैक और कॉन्फ़िगरेशन का स्वामी है।
    • वर्कर को एजेंट आईडी, रन आईडी, फ़ाइलसिस्टम मोड और DB रजिस्ट्री पहचान मिलती है, लाइव हैंडल नहीं।
    • vfs-only प्रयोगात्मक रहता है और एजेंट डेटाबेस को अपने स्टोरेज रूट के रूप में उपयोग करता है।
    • आरंभ में प्रत्येक सक्रिय रन के लिए एक वर्कर रखें। पूलिंग तब तक प्रतीक्षा कर सकती है, जब तक DB कनेक्शन जीवनकाल और रद्दीकरण व्यवहार सामान्य न हो जाएँ।
  3. बैकअप एकीकरण।

    • बैकअप को ऑनलाइन बैकअप और उसके बाद ऑफ़लाइन VACUUM के साथ वैश्विक, एजेंट और Plugin डेटाबेस के स्नैपशॉट लेना सिखाएँ। स्थिति एसेट के अंतर्गत खोजी गई *.sqlite फ़ाइलों के लिए पूर्ण; अनुपलब्ध स्वामी क्षमताओं की आवश्यकता वाली Plugin स्कीमा सुरक्षित रूप से विफल होती हैं।
    • प्रामाणिक SQLite अखंडता और स्कीमा पहचान के लिए बैकअप सत्यापन, तथा समर्पित Plugin स्नैपशॉट के लिए सामान्य फ़ाइल-आकार सत्यापन जोड़ें। बैकअप निर्माण और डिफ़ॉल्ट आर्काइव सत्यापन के लिए पूर्ण।
    • बैकअप रन मेटाडेटा SQLite में दर्ज करें। आर्काइव पथ, स्थिति और मैनिफ़ेस्ट JSON वाली साझा backup_runs तालिका के माध्यम से पूर्ण।
    • सत्यापित आर्काइव स्नैपशॉट से पुनर्स्थापन जोड़ें। पूर्ण: openclaw backup restore निष्कर्षण से पहले सत्यापित करता है, सत्यापनकर्ता के सामान्यीकृत मैनिफ़ेस्ट का उपयोग करता है, --dry-run का समर्थन करता है, और दर्ज स्रोत पथों को बदलने से पहले --yes आवश्यक बनाता है।
    • VFS/वर्कस्पेस निर्यात केवल अनुरोध किए जाने पर शामिल करें; सत्र आंतरिक भागों को JSON या JSONL के रूप में निर्यात न करें।
  4. अप्रचलित परीक्षण और कोड हटाएँ। ज्ञात रनटाइम सत्र सतहों के लिए पूर्ण।

  • वे परीक्षण हटाएँ जो sessions.json या ट्रांसक्रिप्ट JSONL फ़ाइलों के रनटाइम निर्माण की पुष्टि करते हैं। कोर सत्र स्टोर, चैट, Gateway ट्रांसक्रिप्ट ईवेंट, पूर्वावलोकन, जीवनचक्र, कमांड सत्र-प्रविष्टि अपडेट, स्वतः-उत्तर रीसेट/ट्रेस, और memory-core Dreaming फिक्स्चर, अनुमोदन लक्ष्य रूटिंग, सत्र ट्रांसक्रिप्ट सुधार, सुरक्षा अनुमति सुधार, ट्रैजेक्टरी निर्यात और सत्र निर्यात के लिए पूर्ण। Active Memory ट्रांसक्रिप्ट परीक्षण अब SQLite स्कोप और किसी अस्थायी या स्थायी JSONL फ़ाइल के न बनाए जाने की पुष्टि करते हैं। पुराना Heartbeat ट्रांसक्रिप्ट-छँटाई रिग्रेशन हटा दिया गया क्योंकि रनटाइम अब JSONL ट्रांसक्रिप्ट को छोटा नहीं करता। एजेंट सत्र-सूची टूल परीक्षण अब लेगेसी sessions.json पथों को Gateway प्रतिक्रिया आकार के रूप में मॉडल नहीं करते; ऐप/UI/macOS परीक्षण databasePath का उपयोग करते हैं। /status ट्रांसक्रिप्ट-उपयोग परीक्षण अब JSONL फ़ाइलें लिखने के बजाय सीधे SQLite ट्रांसक्रिप्ट पंक्तियाँ सीड करते हैं। Gateway सत्र जीवनचक्र परीक्षण अब सीधे SQLite ट्रांसक्रिप्ट सीडिंग सहायकों का उपयोग करते हैं; पुराना एकल-पंक्ति सत्र-फ़ाइल फिक्स्चर आकार रीसेट और हटाने के कवरेज से हट गया है। sessions.delete अब फ़ाइल-युग का archived: [] फ़ील्ड नहीं लौटाता; हटाना केवल पंक्ति परिवर्तन परिणाम रिपोर्ट करता है। पुराना deleteTranscript विकल्प भी हट गया है: सत्र हटाने पर प्रामाणिक sessions रूट हट जाता है और SQLite को सत्र-स्वामित्व वाली ट्रांसक्रिप्ट, स्नैपशॉट और ट्रैजेक्टरी पंक्तियाँ कैस्केड करने देता है, ताकि कोई कॉलर ट्रांसक्रिप्ट अनाथ न छोड़ सके या क्लीनअप शाखा न भूल सके। संदर्भ-इंजन ट्रैजेक्टरी कैप्चर परीक्षण अब session.trajectory.jsonl पढ़ने के बजाय पृथक एजेंट डेटाबेस से trajectory_runtime_events पंक्तियाँ पढ़ते हैं। Docker MCP चैनल सीड स्क्रिप्ट अब सीधे SQLite पंक्तियाँ सीड करती हैं। प्रत्यक्ष sessions.json लेखन केवल doctor फिक्स्चर तक सीमित है। Tool Search Gateway E2E agents/<agentId>/sessions/*.jsonl फ़ाइलों को स्कैन करने के बजाय SQLite ट्रांसक्रिप्ट पंक्तियों से टूल-कॉल साक्ष्य पढ़ता है। Memory-core होस्ट ईवेंट और सत्र-कॉर्पस स्क्रैच पंक्तियाँ अब साझा SQLite Plugin-स्थिति में रहती हैं; events.jsonl और session-corpus/*.txt केवल लेगेसी doctor माइग्रेशन इनपुट हैं। सक्रिय पंक्तियाँ .dreams/session-corpus के बजाय memory/session-ingestion/ वर्चुअल पथों का उपयोग करती हैं। पुराना memory-core Dreaming सुधार मॉड्यूल और उसके CLI/Gateway परीक्षण हटा दिए गए क्योंकि रनटाइम अब उस कॉर्पस के फ़ाइल आर्काइव सुधार का स्वामी नहीं है। Memory-core ब्रिज/सार्वजनिक-आर्टिफ़ैक्ट परीक्षण अब .dreams/events.jsonl उजागर नहीं करते; वे SQLite-समर्थित वर्चुअल JSON आर्टिफ़ैक्ट नाम का उपयोग करते हैं। सार्वजनिक SDK/Codex परीक्षण दस्तावेज़ अब सत्र फ़ाइलों के बजाय SQLite सत्र स्थिति कहते हैं, और चैनल-टर्न उदाहरण अब storePath आर्ग्युमेंट उजागर नहीं करता। Matrix सिंक स्थिति अब सीधे SQLite Plugin-स्थिति स्टोर का उपयोग करती है। सक्रिय क्लाइंट/रनटाइम अनुबंध bot-storage.json पथ के बजाय खाता स्टोरेज रूट पास करते हैं, और doctor स्रोत हटाने से पहले लेगेसी bot-storage.json को SQLite में आयात करता है। QA Lab Matrix पुनरारंभ/विनाशकारी परिदृश्य अब नकली bot-storage.json फ़ाइलें बनाने या हटाने के बजाय सीधे SQLite सिंक पंक्ति बदलते हैं, और E2EE आधार नकली sync-store.json पथ के बजाय सिंक-स्टोर रूट पास करता है। Matrix स्टोरेज-रूट चयन अब लेगेसी सिंक/थ्रेड JSON फ़ाइलों के आधार पर रूट को स्कोर नहीं करता; यह टिकाऊ रूट मेटाडेटा और वास्तविक क्रिप्टो स्थिति का उपयोग करता है। रनटाइम SQLite सत्र बैकएंड परीक्षण सुइट अब sessions.json नहीं गढ़ता; लेगेसी स्रोत फिक्स्चर अब उन्हें आयात करने वाले doctor परीक्षणों में रहते हैं। Gateway सत्र परीक्षण अब createSessionStoreDir सहायक या अप्रयुक्त अस्थायी सत्र-स्टोर पथ सेटअप उजागर नहीं करते; फिक्स्चर डायरेक्टरी स्पष्ट हैं, और प्रत्यक्ष पंक्ति सेटअप SQLite सत्र-पंक्ति नामकरण का उपयोग करता है। केवल-doctor JSON5 सत्र-स्टोर पार्सर कवरेज इंफ़्रा परीक्षणों से हटकर doctor माइग्रेशन परीक्षणों में चला गया, इसलिए रनटाइम परीक्षण सुइट अब लेगेसी सत्र-फ़ाइल पार्सिंग के स्वामी नहीं हैं। Microsoft Teams रनटाइम SSO/लंबित-अपलोड परीक्षण अब JSON साइडकार फिक्स्चर या पार्सर नहीं रखते; लेगेसी SSO टोकन पार्सिंग केवल Plugin माइग्रेशन मॉड्यूल में रहती है। Telegram परीक्षण अब नकली /tmp/*.json स्टोर पथ सीड नहीं करते; वे सीधे SQLite-समर्थित संदेश कैश रीसेट करते हैं। सामान्य OpenClaw परीक्षण-स्थिति सहायक अब लेगेसी auth-profiles.json राइटर उजागर नहीं करता; doctor प्रमाणीकरण माइग्रेशन परीक्षण स्थानीय रूप से उस फिक्स्चर के स्वामी हैं। TUI अंतिम-सत्र पॉइंटर, निष्पादन अनुमोदन, Active Memory टॉगल, Matrix डीडुप/स्टार्टअप सत्यापन, Memory Wiki स्रोत सिंक, वर्तमान-वार्तालाप बाइंडिंग, ऑनबोर्डिंग प्रमाणीकरण और Hermes सीक्रेट आयात के रनटाइम परीक्षण अब पुरानी साइडकार फ़ाइलें नहीं बनाते या पुराने फ़ाइलनामों की अनुपस्थिति की पुष्टि नहीं करते। वे SQLite पंक्तियों और सार्वजनिक स्टोर API के माध्यम से व्यवहार सिद्ध करते हैं; doctor/माइग्रेशन परीक्षण ही एकमात्र स्थान हैं जहाँ लेगेसी स्रोत फ़ाइलनाम होने चाहिए। डिवाइस/Node पेयरिंग, चैनल allowFrom, पुनरारंभ इंटेंट, पुनरारंभ हैंडऑफ़, सत्र डिलीवरी कतार प्रविष्टियाँ, कॉन्फ़िगरेशन स्वास्थ्य, iMessage कैश, Cron जॉब, PI ट्रांसक्रिप्ट हेडर, सबएजेंट रजिस्ट्री और प्रबंधित छवि अटैचमेंट के रनटाइम परीक्षण भी अब सेवा-मुक्त JSON/JSONL फ़ाइलें केवल यह सिद्ध करने के लिए नहीं बनाते कि उन्हें अनदेखा किया जाता है या वे अनुपस्थित हैं। PI ओवरफ़्लो पुनर्प्राप्ति में अब SessionManager पुनर्लेखन/छोटा करने का फ़ॉलबैक नहीं है: टूल-परिणाम छोटा करना और संदर्भ-इंजन ट्रांसक्रिप्ट पुनर्लेखन SQLite ट्रांसक्रिप्ट पंक्तियों को बदलते हैं, फिर डेटाबेस से सक्रिय प्रॉम्प्ट स्थिति रीफ़्रेश करते हैं। स्थायी SessionManager संदेश जोड़ना पैरेंट चयन और आइडेम्पोटेंसी के लिए परमाणु SQLite ट्रांसक्रिप्ट जोड़ सहायक को सौंपता है। सामान्य मेटाडेटा/कस्टम प्रविष्टि जोड़ भी SQLite के भीतर वर्तमान पैरेंट चुनते हैं, इसलिए पुराने मैनेजर इंस्टेंस SQLite-पूर्व पैरेंट-श्रृंखला रेस को पुनर्जीवित नहीं करते। मध्य-टर्न पूर्व-जाँच और sessions_yield के लिए सिंथेटिक PI टेल क्लीनअप अब सीधे SQLite ट्रांसक्रिप्ट स्थिति को ट्रिम करता है; पुराना SessionManager टेल-हटाने ब्रिज और उसके परीक्षण हटा दिए गए हैं। Compaction चेकपॉइंट कैप्चर भी अब केवल SQLite से स्नैपशॉट लेता है; कॉलर अब वैकल्पिक ट्रांसक्रिप्ट स्रोत के रूप में लाइव SessionManager पास नहीं करते।

  • लेगेसी फ़ाइलें सीड करने वाले परीक्षण केवल माइग्रेशन के लिए रखें।

  • सक्रिय रनटाइम सतहों के लिए JSON-फ़ाइल प्रमाण को SQL पंक्ति प्रमाण से बदल दिया गया है।

  • लेगेसी सत्र/कैश JSON पथों पर रनटाइम लेखन के लिए स्थिर प्रतिबंध जोड़ें। रिपॉज़िटरी गार्ड के लिए पूर्ण।

  1. माइग्रेशन रिपोर्ट को ऑडिट योग्य बनाएँ।
    • आरंभ/समाप्ति टाइमस्टैम्प, स्रोत पथ, स्रोत हैश, गणनाएँ, चेतावनियाँ और बैकअप पथ सहित माइग्रेशन रन SQLite में दर्ज करें। पूर्ण: लेगेसी-स्थिति माइग्रेशन निष्पादन अब स्रोत पथ/तालिका इन्वेंटरी, स्रोत फ़ाइल SHA-256, आकार, रिकॉर्ड गणनाएँ, चेतावनियाँ और बैकअप पथ सहित migration_runs रिपोर्ट स्थायी रूप से संग्रहीत करते हैं। पूर्ण: लेगेसी-स्थिति माइग्रेशन निष्पादन स्रोत-स्तरीय ऑडिट और भविष्य के स्किप/बैकफ़िल निर्णयों के लिए migration_sources पंक्तियाँ भी स्थायी रूप से संग्रहीत करते हैं।
    • लागू करने की प्रक्रिया को आइडेम्पोटेंट बनाएँ। आंशिक आयात के बाद दोबारा चलाने पर या तो पहले से आयातित स्रोत को छोड़ देना चाहिए या स्थिर कुंजी के आधार पर मर्ज करना चाहिए। पूर्ण: सत्र इंडेक्स, ट्रांसक्रिप्ट, डिलीवरी कतारें, Plugin स्थिति, कार्य लेजर और एजेंट-स्वामित्व वाली वैश्विक SQLite पंक्तियाँ स्थिर कुंजियों या अपसर्ट/प्रतिस्थापन अर्थविज्ञान के माध्यम से आयात होती हैं, इसलिए पुनः चलाने पर टिकाऊ पंक्तियों की प्रतिलिपि बनाए बिना मर्ज होता है।
    • विफल आयातों को मूल स्रोत फ़ाइल उसी स्थान पर रखनी होगी। पूर्ण: विफल ट्रांसक्रिप्ट आयात अब मूल JSONL स्रोत को उसके पहचाने गए पथ पर छोड़ देते हैं, और migration_sources अगले doctor रन के लिए स्रोत को removed_source=0 सहित warning के रूप में दर्ज करता है।

प्रदर्शन नियम

  • प्रति थ्रेड/प्रक्रिया एक कनेक्शन ठीक है; हैंडल को वर्करों के बीच साझा न करें।
  • WAL, foreign_keys=ON, 5s का बिज़ी टाइमआउट और छोटे BEGIN IMMEDIATE लेखन ट्रांज़ैक्शन उपयोग करें। SQLite की एकल बिज़ी प्रतीक्षा के ऊपर सिंक्रोनस लॉक पुनःप्रयास की परत न जोड़ें।
  • जब तक कोई एसिंक ट्रांज़ैक्शन API स्पष्ट म्यूटेक्स/बैकप्रेशर अर्थविज्ञान नहीं जोड़ता, तब तक लेखन ट्रांज़ैक्शन सहायकों को सिंक्रोनस रखें।
  • पैरेंट डिलीवरी लेखनों को छोटा और ट्रांज़ैक्शनल रखें।
  • पूरे स्टोर को पुनः लिखने से बचें; पंक्ति-स्तरीय अपसर्ट/डिलीट उपयोग करें।
  • हॉट कोड को स्थानांतरित करने से पहले एजेंट के अनुसार सूची, सत्र के अनुसार सूची, अपडेट-समय, रन आईडी और समाप्ति पथों के लिए इंडेक्स जोड़ें।
  • बड़े आर्टिफ़ैक्ट, मीडिया और वेक्टर को base64 या संख्यात्मक-ऐरे JSON के बजाय BLOB या खंडित BLOB पंक्तियों के रूप में संग्रहीत करें।
  • अपारदर्शी Plugin-स्थिति प्रविष्टियों को छोटा और सीमित दायरे में रखें।
  • फ़ाइलसिस्टम प्रूनिंग के बजाय TTL/समाप्ति के लिए SQL क्लीनअप जोड़ें। डेटाबेस-स्वामित्व वाले रनटाइम स्टोरों के लिए यह पूरा हो चुका है: मीडिया, Plugin स्थिति, Plugin ब्लॉब, स्थायी डीडुप, और एजेंट कैश सभी SQLite पंक्तियों के माध्यम से समाप्त होते हैं। शेष फ़ाइलसिस्टम क्लीनअप अस्थायी मटेरियलाइज़ेशन या स्पष्ट निष्कासन कमांड तक सीमित है।

स्थिर प्रतिबंध

एक रेपो जाँच जोड़ें जो विरासती स्थिति पथों पर नए रनटाइम लेखन को विफल करे:

  • sessions.json
  • *.trajectory.jsonl मटेरियलाइज़ किए गए सपोर्ट-बंडल आउटपुट को छोड़कर
  • .acp-stream.jsonl
  • acp/event-ledger.json
  • cache/*.json रनटाइम कैश फ़ाइलें
  • agents/<agentId>/agent/auth.json
  • agents/<agentId>/agent/models.json
  • credentials/oauth.json
  • github-copilot.token.json
  • openrouter-models.json
  • auth-profiles.json
  • auth-state.json
  • exec-approvals.json
  • openclaw-workspace-state.json
  • workspace-state.json
  • workspace-attestations/*.attested
  • सिब्लिंग <workspace>.attested
  • Matrix credentials*.json और recovery-key.json
  • cron/runs/*.jsonl
  • cron/jobs.json
  • jobs-state.json
  • device-pair-notify.json
  • devices/pending.json / devices/paired.json / devices/bootstrap.json (2026.7 में सेवानिवृत्त: रनटाइम स्टोर साझा स्थिति DB में device_pairing_* / device_bootstrap_tokens है; युग्मित रिकॉर्ड Gateway स्टार्टअप पर आयात होते हैं, अस्थायी लंबित/बूटस्ट्रैप पंक्तियाँ हटा दी जाती हैं)
  • nodes/pending.json / nodes/paired.json (2026.7 में सेवानिवृत्त: Gateway स्टार्टअप पर युग्मित डिवाइस रिकॉर्ड में समाहित)
  • identity/device.json
  • identity/device-auth.json (सेवानिवृत्त; केवल Doctor द्वारा device_auth_tokens में आयात)
  • push/web-push-subscriptions.json (सेवानिवृत्त; केवल Doctor द्वारा web_push_subscriptions में आयात)
  • push/vapid-keys.json (सेवानिवृत्त; केवल Doctor द्वारा web_push_vapid_keys में आयात)
  • push/apns-registrations.json (सेवानिवृत्त; केवल Doctor द्वारा apns_registrations में आयात)
  • process-leases.json
  • gateway-instance-id
  • session-toggles.json
  • Memory-core .dreams/events.jsonl
  • Memory-core .dreams/session-corpus/
  • Memory-core .dreams/daily-ingestion.json
  • Memory-core .dreams/session-ingestion.json
  • Memory-core .dreams/short-term-recall.json
  • Memory-core .dreams/phase-signals.json
  • Memory-core .dreams/short-term-promotion.lock
  • Skill Workshop skill-workshop/<workspace>.json
  • Skill Workshop skill-workshop/skill-workshop-review-*.json
  • Nostr bus-state-*.json
  • Nostr profile-state-*.json
  • calls.jsonl
  • known-users.json
  • ref-index.jsonl
  • QQBot session-*.json
  • BlueBubbles bluebubbles/catchup/*.json
  • BlueBubbles bluebubbles/inbound-dedupe/*.json
  • Telegram update-offset-*.json
  • Telegram sticker-cache.json
  • Telegram *.telegram-messages.json
  • Telegram *.telegram-sent-messages.json
  • Telegram *.telegram-topic-names.json
  • Telegram thread-bindings-*.json
  • iMessage catchup/*.json
  • iMessage reply-cache.jsonl
  • iMessage sent-echoes.jsonl
  • Microsoft Teams msteams-conversations.json
  • Microsoft Teams msteams-polls.json
  • Microsoft Teams msteams-sso-tokens.json
  • Microsoft Teams *.learnings.json
  • Matrix bot-storage.json
  • Matrix sync-store.json
  • Matrix thread-bindings.json
  • Matrix inbound-dedupe.json
  • Matrix startup-verification.json
  • Matrix storage-meta.json
  • Matrix crypto-idb-snapshot.json
  • Discord model-picker-preferences.json
  • Discord command-deploy-cache.json
  • सैंडबॉक्स रजिस्ट्री शार्ड JSON फ़ाइलें
  • plugin-state/state.sqlite
  • तदर्थ openclaw-state.sqlite रनटाइम साइडकार
  • tasks/runs.sqlite
  • tasks/flows/registry.sqlite
  • bindings/current-conversations.json
  • restart-sentinel.json
  • gateway-restart-intent.json
  • gateway-supervisor-restart-handoff.json
  • gateway.<hash>.lock
  • qmd/embed.lock.lock
  • agents/<agentId>/qmd-write.lock.lock
  • commands.log
  • config-health.json
  • port-guard.json
  • settings/voicewake.json
  • settings/voicewake-routing.json
  • plugin-binding-approvals.json
  • plugins/installs.json
  • audit/file-transfer.jsonl
  • audit/crestodian.jsonl
  • crestodian/rescue-pending/*.json
  • openclaw/rescue-pending/*.json
  • plugins/phone-control/armed.json
  • Memory Wiki .openclaw-wiki/log.jsonl
  • Memory Wiki .openclaw-wiki/state.json
  • Memory Wiki .openclaw-wiki/locks/
  • Memory Wiki .openclaw-wiki/source-sync.json
  • Memory Wiki .openclaw-wiki/import-runs/*.json
  • Memory Wiki .openclaw-wiki/cache/agent-digest.json
  • Memory Wiki .openclaw-wiki/cache/claims.jsonl
  • ClawHub .clawhub/lock.json
  • ClawHub .clawhub/origin.json
  • ब्राउज़र प्रोफ़ाइल सज्जा .openclaw-profile-decorated
  • SessionManager.open(...) फ़ाइल-समर्थित सत्र ओपनर
  • SessionManager.listAll(...) और TranscriptSessionManager.listAll(...) ट्रांसक्रिप्ट सूचीकरण फ़साड
  • SessionManager.forkFromSession(...) और TranscriptSessionManager.forkFromSession(...) ट्रांसक्रिप्ट फ़ोर्क फ़साड
  • SessionManager.newSession(...) और TranscriptSessionManager.newSession(...) परिवर्तनशील सत्र प्रतिस्थापन फ़साड
  • SessionManager.createBranchedSession(...) और TranscriptSessionManager.createBranchedSession(...) ब्रांच-सत्र फ़साड

प्रतिबंध को परीक्षणों में विरासती फ़िक्स्चर बनाने और माइग्रेशन कोड में विरासती फ़ाइल स्रोतों को पढ़ने/आयात करने/हटाने की अनुमति देनी चाहिए। रिलीज़ न किए गए SQLite साइडकार प्रतिबंधित ही रहेंगे और उन्हें Doctor आयात की अनुमति नहीं मिलेगी।

पूर्णता मानदंड

  • रनटाइम डेटा और कैश लेखन वैश्विक या एजेंट SQLite डेटाबेस में जाते हैं।
  • रनटाइम अब सत्र इंडेक्स, ट्रांसक्रिप्ट JSONL, सैंडबॉक्स रजिस्ट्री JSON, कार्य साइडकार SQLite या Plugin-स्थिति साइडकार SQLite नहीं लिखता। रिलीज़ न किए गए कार्य और Plugin-स्थिति साइडकार SQLite आयातक हटा दिए गए हैं।
  • विरासती फ़ाइल आयात केवल Doctor में होता है।
  • बैकअप सघन SQLite स्नैपशॉट और अखंडता प्रमाण वाला एक आर्काइव बनाता है।
  • एजेंट वर्कर डिस्क, VFS स्क्रैच या प्रयोगात्मक केवल-VFS स्टोरेज के साथ चल सकते हैं।
  • कॉन्फ़िगरेशन और स्पष्ट क्रेडेंशियल फ़ाइलें ही अपेक्षित स्थायी गैर-डेटाबेस नियंत्रण फ़ाइलें रहती हैं।
  • रेपो जाँच विरासती रनटाइम फ़ाइल स्टोरों को दोबारा प्रस्तुत होने से रोकती हैं।
Was this useful?
On this page

On this page