---
read_when:
    - OpenClaw रनटाइम डेटा, कैश, ट्रांसक्रिप्ट, टास्क स्थिति या अस्थायी फ़ाइलों को SQLite में स्थानांतरित करना
    - पुरानी JSON या JSONL फ़ाइलों से doctor माइग्रेशन डिज़ाइन करना
    - बैकअप, पुनर्स्थापना, VFS या वर्कर स्टोरेज व्यवहार बदलना
    - सत्र लॉक हटाना, छँटाई, संक्षिप्तीकरण, या JSON संगतता पथ
summary: कॉन्फ़िगरेशन को फ़ाइल-समर्थित रखते हुए SQLite को प्राथमिक टिकाऊ स्थिति और कैश परत बनाने की माइग्रेशन योजना
title: डेटाबेस-प्रथम स्थिति पुनर्संरचना
x-i18n:
    generated_at: "2026-07-27T18:29:24Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: ae4d72f04c1228742cc7ea3cc87a96b06aa1e2b750ace23cca5b387844746186
    source_path: refactor/database-first.md
    workflow: 16
---

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

## निर्णय

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

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

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

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

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

## कठोर अनुबंध

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

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

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

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

### कठोर लक्ष्य

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

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

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

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

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

### शेष कार्य

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

```bash
openclaw doctor --fix
```

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4. सत्र स्टोर API बदलें।
   - रनटाइम पहचान के रूप में `storePath` हटाएँ। रनटाइम के लिए पूर्ण और
     `check:database-first-legacy-stores` द्वारा संरक्षित: सत्र मेटाडेटा, रूट अपडेट,
     कमांड स्थायित्व, CLI सत्र सफ़ाई, Feishu रीजनिंग पूर्वावलोकन,
     ट्रांसक्रिप्ट-स्टेट स्थायित्व, सबएजेंट गहराई, ऑथ प्रोफ़ाइल सत्र
     ओवरराइड, पैरेंट-फ़ोर्क लॉजिक और QA-lab निरीक्षण अब कैनोनिकल
     एजेंट/सत्र कुंजियों से डेटाबेस निर्धारित करते हैं।
     Gateway/TUI/UI/macOS सत्र-सूची प्रतिक्रियाएँ अब लेगेसी `path` के बजाय `databasePath`
     प्रदर्शित करती हैं; macOS डीबग सरफ़ेस `session.store` कॉन्फ़िगरेशन लिखने के बजाय प्रति-एजेंट डेटाबेस को
     केवल-पढ़ने योग्य स्टेट के रूप में दिखाते हैं।
     `/status`, चैट-संचालित ट्रैजेक्टरी निर्यात और CLI निर्भरता प्रॉक्सी अब
     लेगेसी स्टोर पथ प्रसारित नहीं करते; ट्रांसक्रिप्ट उपयोग फ़ॉलबैक
     एजेंट/सत्र पहचान से SQLite पढ़ता है। रनटाइम और ब्रिज परीक्षण अब
     `storePath` प्रदर्शित नहीं करते; उस लेगेसी फ़ील्ड नाम का स्वामित्व doctor/माइग्रेशन इनपुट के पास है।
     Gateway संयुक्त-सत्र लोडिंग में अब गैर-टेम्प्लेटेड
     `session.store` मानों के लिए विशेष रनटाइम ब्रांच नहीं है; यह प्रति-एजेंट SQLite पंक्तियाँ एकत्रित करती है।
     लेगेसी सत्र-लॉक doctor लेन और उसका `.jsonl.lock` सफ़ाई सहायक
     हटा दिए गए; अब SQLite सत्र समवर्तीता की सीमा है।
     हॉट रनटाइम कॉल साइट `resolveSessionRowEntry` जैसे पंक्ति-उन्मुख सहायक नामों का उपयोग करती हैं;
     पुराना `resolveSessionStoreEntry` संगतता उपनाम रनटाइम और Plugin SDK निर्यातों से
     हटा दिया गया है।

- `{ agentId, sessionKey }` पंक्ति संचालन का उपयोग करें।
  पूर्ण: `getSessionEntry`, `upsertSessionEntry`, `deleteSessionEntry`,
  `patchSessionEntry`, और `listSessionEntries` SQLite-प्रथम API हैं, जिन्हें
  सत्र स्टोर पथ की आवश्यकता नहीं होती। स्थिति सारांश, स्थानीय एजेंट स्थिति, स्वास्थ्य,
  और `openclaw sessions` सूचीकरण कमांड अब प्रति-एजेंट पंक्तियाँ सीधे पढ़ते हैं
  और `sessions.json` पथों के बजाय प्रति-एजेंट SQLite डेटाबेस पथ प्रदर्शित करते हैं।
- संपूर्ण-स्टोर हटाने/सम्मिलित करने को `upsertSessionEntry`,
  `deleteSessionEntry`, `listSessionEntries`, और SQL क्लीनअप क्वेरी से बदलें।
  रनटाइम के लिए पूर्ण: हॉट पथ अब पंक्ति API और टकराव होने पर पुनः प्रयास किए जाने वाले पंक्ति पैच का उपयोग करते हैं;
  शेष संपूर्ण-स्टोर आयात/प्रतिस्थापन सहायक केवल माइग्रेशन आयात
  कोड और SQLite बैकएंड परीक्षणों तक सीमित हैं।
  - `store-writer.ts` और राइटर-क्यू परीक्षण हटाएँ। पूर्ण।
  - सत्र पंक्ति अपसर्ट/पैच से रनटाइम की लेगेसी-कुंजी छँटाई और उपनाम-हटाने के पैरामीटर
    हटाएँ। पूर्ण।

5. रनटाइम JSON रजिस्ट्री व्यवहार हटाएँ।
   - सैंडबॉक्स रजिस्ट्री के पठन और लेखन को केवल SQLite बनाएँ। पूर्ण।
   - मोनोलिथिक और शार्डेड JSON केवल माइग्रेशन चरण से आयात करें। पूर्ण।
   - शार्डेड रजिस्ट्री लॉक और JSON लेखन हटाएँ। पूर्ण।

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

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

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

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

9. अप्रचलित परीक्षण और कोड हटाएँ। ज्ञात रनटाइम सत्र सतहों के लिए पूर्ण।

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

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

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

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

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

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

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

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

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

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

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