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 स्क्रिप्ट केवल doctor माइग्रेशन सीड के भीतर लीगेसी JSONL बनाती है और लीगेसी सेशन इंडेक्स पथ को स्पष्ट रूप से नाम देती है।

शेष कार्य

  • [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 पुरानी JSONL ट्रांस्क्रिप्ट फ़ाइलों को SQLite पंक्तियाँ डालने से पहले सामान्यीकृत करता है; वर्तमान रनटाइम पंक्तियाँ पहले से ही वर्तमान ट्रांस्क्रिप्ट स्कीमा में लिखी जाती हैं। ट्रैजेक्टरी/सेशन निर्यात उन पंक्तियों को यथावत पढ़ता है और उसे निर्यात के समय पुराने माइग्रेशन नहीं करने चाहिए।
  • पुराने ट्रांस्क्रिप्ट 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-स्वामित्व वाली स्थिति को होस्ट-स्वामित्व वाली टाइप की गई तालिकाएँ नहीं मिलतीं। इंस्टॉल किए गए plugins, संस्करणयुक्त 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 टोकन एक्सचेंज कैश, github-copilot/token-cache/default के अंतर्गत साझा SQLite Plugin-स्टेट तालिका का उपयोग करता है। यह प्रदाता-स्वामित्व वाली कैश स्थिति है, इसलिए यह जानबूझकर होस्ट स्कीमा तालिका नहीं जोड़ता।
  • 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 प्रोफ़ाइल-ID मरम्मत 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 क्रेडेंशियल पुनर्प्राप्ति स्नैपशॉट अब qqbot/credential-backups के अंतर्गत SQLite Plugin स्थिति में रहते हैं। रनटाइम अब 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 Doctor से Node होस्ट कॉन्फ़िग सहित लेगेसी JSON स्थिति फ़ाइलों को 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 एडाप्टर क्लाइंट SQLite सिंक-स्टोर रूट डायरेक्टरी पास करते हैं, नकली sync-store.json या bot-storage.json पथ नहीं।
  • 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 ऐप-सर्वर वार्तालाप बाइंडिंग अब OpenClaw सत्र कुंजी या स्पष्ट {agentId, sessionId} स्कोप द्वारा SQLite Plugin स्थिति को कुंजीबद्ध करती हैं। उन्हें ट्रांसक्रिप्ट-पथ फ़ॉलबैक बाइंडिंग संरक्षित नहीं करनी चाहिए।
  • 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 स्टोर के रूप में लेबल करते हैं।
  • Memory-core रनटाइम, CLI स्थिति, Gateway डॉक्टर विधियाँ और Plugin SDK फ़साड अब लीगेसी .dreams/session-corpus फ़ाइलों का ऑडिट या संग्रह नहीं करते। वे फ़ाइलें केवल माइग्रेशन इनपुट हैं; डॉक्टर उन्हें SQLite में आयात करता है और सत्यापन के बाद स्रोत को हटा देता है। सक्रिय सत्र-अंतर्ग्रहण साक्ष्य पंक्तियाँ अब वर्चुअल SQLite पथ memory/session-ingestion/<day>.txt का उपयोग करती हैं; रनटाइम कभी भी .dreams/session-corpus में स्थिति नहीं लिखता या उससे स्थिति व्युत्पन्न नहीं करता।
  • Memory-core सार्वजनिक आर्टिफ़ैक्ट 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 मार्कर को अनदेखा करता है। डॉक्टर सेवानिवृत्त रॉ cron.webhook को केवल उन मार्कर को स्पष्ट SQLite डिलीवरी में बदलते समय पढ़ता है, फिर कॉन्फ़िग कुंजी हटा देता है।
  • आउटबाउंड और सत्र डिलीवरी कतारें अब साझा 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 Skills-अपलोड स्टेजिंग अब साझा skill_uploads और skill_upload_chunks पंक्तियों का उपयोग करती है। अपलोड के दौरान चंक अलग-अलग ट्रांज़ैक्शनल रहते हैं, फिर कमिट एक सत्यापित आर्काइव BLOB संयोजित करता है और चंक पंक्तियाँ हटा देता है। इंस्टॉलर को केवल इंस्टॉल चलते समय अस्थायी रूप से मटेरियलाइज़ किया गया आर्काइव पथ मिलता है। डॉक्टर क्षणिक अपलोड आयात करने के बजाय सेवानिवृत्त एक-घंटे के फ़ाइल सिस्टम स्टेजिंग ट्री को त्याग देता है।
  • सबएजेंट इनलाइन अटैचमेंट अब वर्कस्पेस .openclaw/attachments/* के अंतर्गत मटेरियलाइज़ नहीं होते। स्पॉन पथ SQLite VFS सीड प्रविष्टियाँ तैयार करता है, इनलाइन रन उन प्रविष्टियों को प्रति-एजेंट रनटाइम स्क्रैच नेमस्पेस में सीड करते हैं और डिस्क-समर्थित टूल अटैचमेंट पथों के लिए उस SQLite स्क्रैच को ओवरले करते हैं। पुराने सबएजेंट-रन अटैचमेंट-डायरेक्टरी रजिस्ट्री कॉलम और सफ़ाई हुक हटा दिए गए हैं।
  • CLI इमेज हाइड्रेशन अब स्थिर openclaw-cli-images कैश फ़ाइलों को बनाए नहीं रखता। बाहरी CLI बैकएंड को अभी भी फ़ाइल पथ मिलते हैं, लेकिन वे पथ सफ़ाई सहित प्रति-रन अस्थायी मटेरियलाइज़ेशन हैं।
  • कैश-ट्रेस निदान, Anthropic पेलोड निदान, रॉ मॉडल स्ट्रीम निदान, निदान टाइमलाइन इवेंट और Gateway स्थिरता बंडल अब logs/*.jsonl या logs/stability/*.json फ़ाइलों के बजाय SQLite पंक्तियाँ लिखते हैं। रनटाइम पथ ओवरराइड फ़्लैग और env var हटा दिए गए हैं; निर्यात/डीबग कमांड डेटाबेस पंक्तियों से स्पष्ट रूप से फ़ाइलें मटेरियलाइज़ कर सकते हैं।
  • 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 केवल कॉन्फ़िग फ़ाइल, परिवेश फ़ाइल और 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 साइडकार लिखने या पढ़ने के बजाय प्रत्येक वर्कस्पेस/Skill के लिए एक 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 INTO के साथ डेटाबेस स्नैपशॉट लेता है, लाइव WAL/SHM साइडकार छोड़ देता है, संग्रह मैनिफ़ेस्ट में स्नैपशॉट मेटाडेटा रिकॉर्ड करता है और संग्रह मैनिफ़ेस्ट के साथ पूर्ण हुए बैकअप रन SQLite में रिकॉर्ड करता है। openclaw backup create लिखे गए संग्रह को डिफ़ॉल्ट रूप से सत्यापित करता है; --no-verify स्पष्ट तेज़ पथ है।
  • openclaw backup restore निष्कर्षण से पहले संग्रह को सत्यापित करता है, सत्यापक के सामान्यीकृत मैनिफ़ेस्ट का पुनः उपयोग करता है और सत्यापित मैनिफ़ेस्ट परिसंपत्तियों को उनके रिकॉर्ड किए गए स्रोत पथों पर पुनर्स्थापित करता है। लिखने के लिए इसे --yes की आवश्यकता होती है और पुनर्स्थापन योजना के लिए --dry-run का समर्थन करता है।
  • पुराना बैकअप अस्थिर-पथ फ़िल्टर हटा दिया गया है। बैकअप को अब लीगेसी सत्र या Cron JSON/JSONL फ़ाइलों के लिए लाइव-टार स्किप सूची की आवश्यकता नहीं है, क्योंकि संग्रह निर्माण से पहले 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 पढ़ता है।
  • डाउनग्रेड/रनटाइम-फ़ाइलों में निर्यात करने के पथ की आवश्यकता नहीं है।

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

इन्हें वैश्विक डेटाबेस में ले जाएँ:

  • Task रजिस्ट्री के रनटाइम लेखन अब साझा डेटाबेस का उपयोग करते हैं; अप्रकाशित tasks/runs.sqlite साइडकार आयातक हटा दिया गया है। स्नैपशॉट सहेजने पर task id के आधार पर upsert होता है और केवल अनुपस्थित task/delivery पंक्तियाँ हटाई जाती हैं।
  • Task Flow के रनटाइम लेखन अब साझा डेटाबेस का उपयोग करते हैं; अप्रकाशित tasks/flows/registry.sqlite साइडकार आयातक हटा दिया गया है। स्नैपशॉट सहेजने पर flow id के आधार पर upsert होता है और केवल अनुपस्थित flow पंक्तियाँ हटाई जाती हैं।
  • 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-समर्थित कॉल इतिहास को tail करता है और उसका सारांश देता है।
  • QQBot Gateway सत्र, ज्ञात-उपयोगकर्ता रिकॉर्ड और ref-index उद्धरण कैश अब 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 मैपिंग और भेजे गए echo की डीडुप पंक्तियाँ अब 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 क्रिप्टो स्नैपशॉट अब 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 के अंतर्गत SQLite Plugin स्टेट/blob नेमस्पेस (sync-store, storage-meta, thread-bindings, core claimable dedupe के माध्यम से matrix.inbound-dedupe.*, startup-verification, credentials, recovery-key, idb-snapshots) का उपयोग करते हैं; 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 seed प्रविष्टियाँ हैं और कभी भी टिकाऊ वर्कस्पेस फ़ाइलें नहीं होतीं।
  • टूल आर्टिफ़ैक्ट। रनटाइम लेखन के लिए पूर्ण।
  • रन आर्टिफ़ैक्ट। प्रति-एजेंट 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/package मैनिफ़ेस्ट
  • डिस्क मोड चुने जाने पर उपयोगकर्ता वर्कस्पेस और Git रिपॉज़िटरी
  • ऑपरेटर द्वारा tail किए जाने के लिए निर्धारित लॉग, जब तक किसी विशिष्ट लॉग सतह को स्थानांतरित न किया जाए

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

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

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

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

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

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

  • एजेंट और एजेंट डेटाबेस रजिस्ट्री
  • Task और Task Flow लेजर
  • Plugin स्टेट
  • सैंडबॉक्स कंटेनर/ब्राउज़र रजिस्ट्री
  • Cron/शेड्यूलर रन इतिहास
  • पेयरिंग, डिवाइस, पुश, अपडेट-जाँच, TUI, OpenRouter/मॉडल कैश और अन्य छोटा Gateway-स्कोप वाला रनटाइम स्टेट
  • बैकअप और माइग्रेशन मेटाडेटा
  • Gateway मीडिया अटैचमेंट बाइट्स। रनटाइम लेखन के लिए पूर्ण; प्रत्यक्ष फ़ाइल पथ चैनल प्रेषकों और सैंडबॉक्स स्टेजिंग के साथ संगतता के लिए अस्थायी मटेरियलाइज़ेशन हैं। रनटाइम अनुमतिसूचियाँ लीगेसी स्टेट/कॉन्फ़िगरेशन मीडिया रूट नहीं, बल्कि SQLite मटेरियलाइज़ेशन पथ स्वीकार करती हैं। doctor लीगेसी मीडिया फ़ाइलों को media_blobs में आयात करता है और पंक्तियाँ सफलतापूर्वक लिखे जाने के बाद स्रोत फ़ाइलें हटा देता है।
  • डीबग प्रॉक्सी कैप्चर सत्र, इवेंट और पेलोड blob। पूर्ण: कैप्चर साझा स्टेट DB में रहते हैं और साझा स्टेट DB बूटस्ट्रैप, स्कीमा, WAL और busy-timeout सेटिंग के माध्यम से खुलते हैं। पेलोड बाइट्स capture_blobs.data में gzip-संपीड़ित हैं; कोई डीबग प्रॉक्सी रनटाइम साइडकार DB ओवरराइड, blob डायरेक्टरी या केवल-proxy-capture जनरेटेड स्कीमा/codegen लक्ष्य नहीं है। doctor/स्टार्टअप माइग्रेशन प्रकाशित debug-proxy/capture.sqlite पंक्तियों और संदर्भित पेलोड blob को आयात करता है, जिसमें सक्रिय लीगेसी DB/blob एनवायरनमेंट ओवरराइड भी शामिल हैं, फिर 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 हैं।
  • संपूर्ण-स्टोर पुनर्लेखन सहायक, फ़ाइल राइटर, क्यू परीक्षण, एलियस प्रूनिंग और लिगेसी-कुंजी विलोपन पैरामीटर रनटाइम से हटा दिए गए हैं।
  • बहिष्कृत रूट-पैकेज संगतता निर्यात अब भी कैननिकल sessions.json पथों को SQLite पंक्ति API के अनुकूल बनाते हैं।
  • 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 INTO से स्नैपशॉट लें।
  • कॉम्पैक्ट DB स्नैपशॉट, कॉन्फ़िगरेशन, बाहरी क्रेडेंशियल और अनुरोधित वर्कस्पेस निर्यात आर्काइव करें।
  • कच्ची लाइव *.sqlite-wal और *.sqlite-shm फ़ाइलें छोड़ दें।
  • प्रत्येक DB स्नैपशॉट खोलकर और PRAGMA integrity_check चलाकर सत्यापित करें। openclaw backup create डिफ़ॉल्ट रूप से यह आर्काइव सत्यापन करता है; --no-verify केवल लेखन-पश्चात आर्काइव पास को छोड़ता है, स्नैपशॉट निर्माण अखंडता जाँच को नहीं।
  • पुनर्स्थापना स्नैपशॉट को उनके लक्ष्य पथों पर वापस कॉपी करती है। पुनर्स्थापित वैश्विक DB संस्करण 1 का उपयोग करते हैं; पुनर्स्थापित प्रति-एजेंट DB संस्करण 2 का उपयोग करते हैं और संस्करण 1 स्नैपशॉट खोले जाने पर परमाण्विक रूप से अपग्रेड होते हैं।

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

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

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

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

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

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

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

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

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

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

पुनर्स्थापना को आर्काइव स्नैपशॉट से वैश्विक डेटाबेस और एजेंट डेटाबेस फ़ाइलों का पुनर्निर्माण करना चाहिए। वैश्विक स्कीमा संस्करण 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-state पंक्तियाँ लिखता है। पूर्ण।
    • QMD समन्वय, एम्बेड के लिए साझा SQLite लीज़ और प्रत्येक संग्रह/अपडेट/एम्बेड राइटर के लिए प्रति-एजेंट SQLite लीज़ का उपयोग करता है। रनटाइम अब qmd/embed.lock.lock या agents/<agentId>/qmd-write.lock.lock नहीं बनाता; Doctor केवल निश्चित रूप से पुराने सेवानिवृत्त साइडकार हटाता है। पूर्ण।
  2. वर्करों को डेटाबेस-जागरूक बनाएँ।

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

    • बैकअप को VACUUM INTO के साथ ग्लोबल, एजेंट और 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-state में रहती हैं; 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-state स्टोर का उपयोग करती है। सक्रिय क्लाइंट/रनटाइम अनुबंध 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 अंतिम-सत्र पॉइंटर, exec अनुमोदन, 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 रन के लिए स्रोत को warning के रूप में removed_source=0 सहित रिकॉर्ड करता है।

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

  • प्रति थ्रेड/प्रक्रिया एक कनेक्शन ठीक है; वर्करों के बीच हैंडल साझा न करें।
  • WAL, foreign_keys=ON, 5s बिज़ी टाइमआउट और छोटे BEGIN IMMEDIATE लेखन ट्रांज़ैक्शन का उपयोग करें। SQLite की एकल बिज़ी प्रतीक्षा के ऊपर सिंक्रोनस लॉक पुनःप्रयास की परत न जोड़ें।
  • जब तक कोई एसिंक ट्रांज़ैक्शन API स्पष्ट म्यूटेक्स/बैकप्रेशर अर्थविज्ञान न जोड़े, लेखन ट्रांज़ैक्शन हेल्पर को सिंक्रोनस रखें।
  • पैरेंट डिलीवरी लेखन छोटे और ट्रांज़ैक्शनल रखें।
  • पूरे स्टोर को पुनः लिखने से बचें; पंक्ति-स्तरीय अपसर्ट/डिलीट का उपयोग करें।
  • हॉट कोड स्थानांतरित करने से पहले एजेंट-द्वारा-सूची, सत्र-द्वारा-सूची, updated-at, रन आईडी और समाप्ति पथों के लिए इंडेक्स जोड़ें।
  • बड़े आर्टिफ़ैक्ट, मीडिया और वेक्टर को base64 या संख्यात्मक-अरे JSON के बजाय BLOB या खंडित BLOB पंक्तियों के रूप में संग्रहीत करें।
  • अपारदर्शी plugin-state प्रविष्टियाँ छोटी और स्कोप की हुई रखें।
  • फ़ाइल-सिस्टम प्रूनिंग के बजाय 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
  • 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