Technical reference
ट्रांसक्रिप्ट स्वच्छता
OpenClaw किसी रन से पहले ट्रांसक्रिप्ट पर प्रदाता-विशिष्ट सुधार लागू करता है (मॉडल संदर्भ बनाते समय)। इनमें से अधिकांश सख्त प्रदाता आवश्यकताओं को पूरा करने के लिए उपयोग किए जाने वाले इन-मेमोरी समायोजन हैं। एक अलग सत्र-फ़ाइल सुधार चरण सत्र लोड होने से पहले संग्रहीत JSONL को भी दोबारा लिख सकता है, लेकिन केवल विकृत पंक्तियों या ऐसे स्थायी टर्न के लिए जो अमान्य टिकाऊ रिकॉर्ड हैं। डिलीवर किए गए सहायक उत्तर डिस्क पर संरक्षित रहते हैं; प्रदाता-विशिष्ट सहायक-प्रीफ़िल हटाना केवल आउटबाउंड पेलोड बनाते समय होता है।
सुधार होने पर, एटॉमिक प्रतिस्थापन से पहले मूल फ़ाइल को एक अस्थायी
*.bak-<pid>-<ts> सिबलिंग में लिखा जाता है, फिर प्रतिस्थापन सफल होने पर उसे
हटा दिया जाता है। बैकअप केवल तभी रखा जाता है जब क्लीनअप स्वयं विफल हो,
और उस स्थिति में पथ वापस रिपोर्ट किया जाता है।
दायरे में शामिल हैं:
- रनटाइम-केवल प्रॉम्प्ट संदर्भ को उपयोगकर्ता-दृश्य ट्रांसक्रिप्ट टर्न से बाहर रखना
- टूल कॉल आईडी सैनिटाइज़ेशन
- टूल कॉल इनपुट सत्यापन
- टूल परिणाम युग्मन सुधार
- टर्न सत्यापन / क्रम निर्धारण
- थॉट सिग्नेचर क्लीनअप
- थिंकिंग सिग्नेचर क्लीनअप
- इमेज पेलोड सैनिटाइज़ेशन
- प्रदाता रीप्ले से पहले रिक्त टेक्स्ट-ब्लॉक क्लीनअप
- प्रदाता रीप्ले से पहले अपूर्ण केवल-रीज़निंग लंबाई-टर्न क्लीनअप
- उपयोगकर्ता-इनपुट उद्गम टैगिंग (अंतर-सत्र रूट किए गए प्रॉम्प्ट के लिए)
- Bedrock Converse रीप्ले के लिए खाली सहायक त्रुटि-टर्न सुधार
यदि आपको ट्रांसक्रिप्ट भंडारण का विवरण चाहिए, तो सत्र प्रबंधन का गहन विवरण देखें।
वैश्विक नियम: रनटाइम संदर्भ उपयोगकर्ता ट्रांसक्रिप्ट नहीं है
किसी टर्न के लिए मॉडल प्रॉम्प्ट में रनटाइम/सिस्टम संदर्भ जोड़ा जा सकता है, लेकिन यह अंतिम उपयोगकर्ता द्वारा लिखी गई सामग्री नहीं है। OpenClaw Gateway उत्तरों, कतारबद्ध फ़ॉलोअप, ACP, CLI और एम्बेडेड OpenClaw रन के लिए एक अलग ट्रांसक्रिप्ट-मुखी प्रॉम्प्ट बॉडी रखता है। संग्रहीत दृश्य उपयोगकर्ता टर्न रनटाइम-संवर्धित प्रॉम्प्ट के बजाय उस ट्रांसक्रिप्ट बॉडी का उपयोग करते हैं।
उन पुराने सत्रों के लिए जिनमें रनटाइम रैपर पहले से स्थायी किए जा चुके हैं, Gateway इतिहास WebChat, TUI, REST या SSE क्लाइंट को संदेश लौटाने से पहले एक डिस्प्ले प्रोजेक्शन लागू करता है।
यह कहाँ चलता है
सभी ट्रांसक्रिप्ट स्वच्छता एम्बेडेड रनर में केंद्रीकृत है:
- नीति चयन:
src/agents/transcript-policy.ts(resolveTranscriptPolicy,provider,modelApiऔरmodelIdके आधार पर) - सैनिटाइज़ेशन/सुधार अनुप्रयोग:
src/agents/embedded-agent-runner/replay-history.tsमेंsanitizeSessionHistory
ट्रांसक्रिप्ट स्वच्छता से अलग, सत्र फ़ाइलों को लोड करने से पहले (यदि आवश्यक हो) सुधारा जाता है:
src/agents/session-file-repair.tsमेंrepairSessionFileIfNeededsrc/agents/embedded-agent-runner/run/attempt.tsऔरsrc/agents/embedded-agent-runner/compact.tsसे कॉल किया जाता है
वैश्विक नियम: इमेज सैनिटाइज़ेशन
आकार सीमाओं के कारण प्रदाता-पक्ष अस्वीकृति रोकने के लिए इमेज पेलोड हमेशा सैनिटाइज़ किए जाते हैं (अत्यधिक बड़े base64 चित्रों का आकार घटाना/पुनः संपीड़ित करना)। यह विज़न-सक्षम मॉडल के लिए इमेज-प्रेरित टोकन दबाव नियंत्रित करने में भी सहायता करता है: कम अधिकतम आयाम टोकन उपयोग घटाते हैं, अधिक आयाम विवरण संरक्षित रखते हैं।
कार्यान्वयन:
src/agents/embedded-agent-helpers/images.tsमेंsanitizeSessionMessagesImagessrc/agents/tool-images.tsमेंsanitizeContentBlocksImages- इमेज की अधिकतम भुजा
agents.defaults.imageMaxDimensionPxके माध्यम से कॉन्फ़िगर की जा सकती है (डिफ़ॉल्ट:1200) - जब यह चरण रीप्ले सामग्री से गुजरता है, तब रिक्त टेक्स्ट ब्लॉक हटा दिए जाते हैं। जो सहायक टर्न खाली हो जाते हैं, उन्हें रीप्ले प्रति से हटा दिया जाता है; जो उपयोगकर्ता और टूल-परिणाम टर्न खाली हो जाते हैं, उन्हें एक गैर-खाली छोड़ी-गई-सामग्री प्लेसहोल्डर मिलता है।
वैश्विक नियम: विकृत टूल कॉल
मॉडल संदर्भ बनने से पहले ऐसे सहायक टूल-कॉल ब्लॉक हटा दिए जाते हैं जिनमें input
और arguments दोनों अनुपस्थित हों। यह आंशिक रूप से स्थायी किए गए टूल कॉल
(उदाहरण के लिए, दर सीमा विफलता के बाद) के कारण प्रदाता की अस्वीकृति रोकता है।
कार्यान्वयन:
src/agents/session-transcript-repair.tsमेंsanitizeToolCallInputssanitizeSessionHistoryमें लागू (src/agents/embedded-agent-runner/replay-history.ts)
वैश्विक नियम: टूल परिणाम युग्मन
प्रदाता-विशिष्ट कॉल आईडी दोबारा लिखे जाने से पहले प्रत्येक सहायक टर्न में टूल परिणामों को टूल-कॉल घटनाओं के साथ जोड़ा जाता है। प्रदाता द्वारा जनरेट की गई आईडी बाद के टर्न में दोहराई जा सकती हैं, इसलिए दोहराए गए कॉल के पास वाला परिणाम उसी घटना के साथ रहता है। स्थानांतरित परिणाम को केवल तभी ले जाया जाता है जब ठीक एक अनसुलझी घटना उसकी स्वामी हो सकती है; अस्पष्ट अतिरिक्त परिणाम हटा दिए जाते हैं और अनुपस्थित घटनाओं को संश्लेषित त्रुटि परिणाम मिलते हैं।
कार्यान्वयन: src/agents/session-transcript-repair.ts में
sanitizeToolUseResultPairing
वैश्विक नियम: अपूर्ण या मौन केवल-रीज़निंग टर्न
इनमें से किसी भी घटना के बाद, यदि सहायक टर्न में केवल थिंकिंग या संशोधित-थिंकिंग सामग्री होती है, तो उसे इन-मेमोरी रीप्ले प्रति से हटा दिया जाता है:
- प्रदाता की आउटपुट सीमा टर्न को अपूर्ण रीज़निंग स्थिति में समाप्त करती है।
- मौन-उत्तर क्लीनअप टर्न का एकमात्र दृश्य
NO_REPLYटेक्स्ट हटा देता है।
जब सख्त प्रदाता वार्तालाप को दोबारा बनाते हैं, तब मौन-उत्तर क्लीनअप छिपी हुई रीज़निंग को बाद के सहायक टूल-उपयोग टर्न में विलय होने से रोकता है।
खाली लंबाई टर्न अपरिवर्तित रहते हैं, ठीक वैसे ही जैसे दृश्य टेक्स्ट, टूल कॉल या अज्ञात सामग्री ब्लॉक वाले लंबाई टर्न। टूल कॉल या अज्ञात सामग्री ब्लॉक वाले मौन-उत्तर टर्न भी अपरिवर्तित रहते हैं। संग्रहीत ट्रांसक्रिप्ट दोबारा नहीं लिखे जाते।
कार्यान्वयन: src/agents/embedded-agent-runner/replay-history.ts में
normalizeAssistantReplayContent
वैश्विक नियम: अंतर-सत्र इनपुट उद्गम
जब कोई एजेंट sessions_send के माध्यम से किसी अन्य सत्र में प्रॉम्प्ट भेजता है
(एजेंट-से-एजेंट उत्तर/घोषणा चरणों सहित), तो OpenClaw बनाए गए
उपयोगकर्ता टर्न को message.provenance.kind = "inter_session" के साथ स्थायी करता है।
OpenClaw रूट किए गए प्रॉम्प्ट टेक्स्ट से पहले उसी टर्न का [Inter-session message] ... isUser=false
मार्कर भी जोड़ता है, ताकि सक्रिय मॉडल कॉल विदेशी सत्र आउटपुट को
बाहरी अंतिम-उपयोगकर्ता निर्देशों से अलग कर सके। उपलब्ध होने पर इस
मार्कर में स्रोत सत्र, चैनल और टूल शामिल होते हैं। प्रदाता संगतता के लिए
ट्रांसक्रिप्ट अब भी role: "user" का उपयोग करता है, लेकिन दृश्य टेक्स्ट और
उद्गम मेटाडेटा दोनों टर्न को अंतर-सत्र डेटा के रूप में चिह्नित करते हैं।
संदर्भ पुनर्निर्माण के दौरान, OpenClaw केवल उद्गम मेटाडेटा वाले पुराने स्थायी अंतर-सत्र उपयोगकर्ता टर्न पर भी यही मार्कर लागू करता है।
प्रदाता मैट्रिक्स (वर्तमान व्यवहार)
OpenAI / OpenAI Codex
- केवल इमेज सैनिटाइज़ेशन।
- OpenAI Responses/Codex ट्रांसक्रिप्ट के लिए अनाथ रीज़निंग सिग्नेचर (बाद में सामग्री ब्लॉक के बिना स्वतंत्र रीज़निंग आइटम) हटाएँ, और मॉडल रूट स्विच होने के बाद रीप्ले योग्य OpenAI रीज़निंग हटाएँ।
- एन्क्रिप्ट किए गए खाली-सारांश आइटम सहित रीप्ले योग्य OpenAI Responses
रीज़निंग आइटम पेलोड संरक्षित रखें, ताकि मैन्युअल/WebSocket रीप्ले आवश्यक
rs_*स्थिति को सहायक आउटपुट आइटम के साथ युग्मित रखे। - नेटिव ChatGPT Codex Responses सत्र
prompt_cache_keyको संरक्षित रखते हुए, पूर्व आइटम आईडी के बिना पिछले Responses रीज़निंग/संदेश/फ़ंक्शन पेलोड को रीप्ले करके Codex वायर समानता का पालन करता है। - OpenAI Responses-परिवार रीप्ले कैनॉनिकल
call_*|fc_*समान-मॉडल रीज़निंग युग्मों को संरक्षित रखता है, लेकिन pi-ai पेलोड रूपांतरण से पहले विकृत या अत्यधिक लंबीcall_id/फ़ंक्शन-कॉल आइटम आईडी को नियतात्मक रूप से सामान्यीकृत करता है। - टूल परिणाम युग्मन सुधार वास्तविक मिलान किए गए आउटपुट को स्थानांतरित कर सकता है और
अनुपस्थित टूल कॉल के लिए Codex-शैली
abortedआउटपुट संश्लेषित कर सकता है। - कोई टर्न सत्यापन या पुनःक्रम निर्धारण नहीं; थॉट सिग्नेचर नहीं हटाए जाते।
OpenAI-संगत Chat Completions
- पुराने सहायक थिंकिंग/रीज़निंग ब्लॉक रीप्ले से पहले हटा दिए जाते हैं,
ताकि स्थानीय और प्रॉक्सी-शैली के OpenAI-संगत सर्वर को
reasoningयाreasoning_contentजैसे पिछले-टर्न रीज़निंग फ़ील्ड न मिलें। - वर्तमान समान-टर्न टूल-कॉल निरंतरताएँ सहायक रीज़निंग ब्लॉक को टूल परिणाम रीप्ले होने तक टूल कॉल से संलग्न रखती हैं।
reasoning: trueवाली कस्टम/स्व-होस्टेड मॉडल प्रविष्टियाँ रीप्ले किए गए रीज़निंग मेटाडेटा को संरक्षित रखती हैं।- प्रदाता-स्वामित्व वाले अपवाद तब इससे बाहर रह सकते हैं जब उनके वायर प्रोटोकॉल को रीप्ले किए गए रीज़निंग मेटाडेटा की आवश्यकता हो।
Google (Generative AI / Gemini CLI / Antigravity)
- टूल कॉल आईडी सैनिटाइज़ेशन: सख्ती से अक्षरांकीय।
- टूल परिणाम युग्मन सुधार और संश्लेषित टूल परिणाम।
- टर्न सत्यापन (Gemini-शैली टर्न प्रत्यावर्तन)।
- Google टर्न क्रम सुधार (यदि इतिहास सहायक से शुरू होता है, तो एक छोटा उपयोगकर्ता बूटस्ट्रैप पहले जोड़ें)।
- Antigravity Claude: थिंकिंग सिग्नेचर सामान्यीकृत करें; अहस्ताक्षरित थिंकिंग ब्लॉक हटाएँ।
Anthropic / Minimax (Anthropic-संगत)
- टूल परिणाम युग्मन सुधार और संश्लेषित टूल परिणाम।
- टर्न सत्यापन (सख्त प्रत्यावर्तन पूरा करने के लिए लगातार उपयोगकर्ता टर्न विलय करें)।
- थिंकिंग सक्षम होने पर, Cloudflare AI Gateway रूट सहित आउटगोइंग Anthropic Messages पेलोड से अंतिम सहायक प्रीफ़िल टर्न हटा दिए जाते हैं।
- जब सत्र का Compaction हो चुका हो, तो प्रदाता रीप्ले से पहले प्री-Compaction सहायक थिंकिंग सिग्नेचर हटा दिए जाते हैं। थिंकिंग सिग्नेचर जनरेशन के समय वार्तालाप उपसर्ग से क्रिप्टोग्राफ़िक रूप से बंधे होते हैं; Compaction के बाद उपसर्ग बदल जाता है (मूल सामग्री की जगह सारांशित सामग्री आ जाती है), इसलिए मूल सिग्नेचर को रीप्ले करने से Anthropic अनुरोध को "Invalid signature in thinking block" के साथ अस्वीकार करता है। थिंकिंग टेक्स्ट को अहस्ताक्षरित ब्लॉक के रूप में संरक्षित रखा जाता है और फिर नीचे दिए गए नियम द्वारा संभाला जाता है।
- अनुपस्थित, खाली या रिक्त रीप्ले सिग्नेचर वाले थिंकिंग ब्लॉक प्रदाता रूपांतरण से पहले हटा दिए जाते हैं। यदि इससे सहायक टर्न खाली हो जाता है, तो OpenClaw गैर-खाली छोड़े-गए-रीज़निंग टेक्स्ट के साथ टर्न का आकार बनाए रखता है।
- पुराने केवल-थिंकिंग सहायक टर्न जिन्हें हटाना आवश्यक है, उन्हें गैर-खाली छोड़े-गए-रीज़निंग टेक्स्ट से बदल दिया जाता है, ताकि प्रदाता एडाप्टर रीप्ले टर्न को न हटाएँ।
Amazon Bedrock (Converse API)
- खाली सहायक स्ट्रीम-त्रुटि टर्न को रीप्ले से पहले गैर-खाली फ़ॉलबैक
टेक्स्ट ब्लॉक में सुधारा जाता है। Bedrock Converse
content: []वाले सहायक संदेशों को अस्वीकार करता है, इसलिएstopReason: "error"और खाली सामग्री वाले स्थायी सहायक टर्न भी लोड होने से पहले डिस्क पर सुधारे जाते हैं। - केवल रिक्त टेक्स्ट ब्लॉक वाले सहायक स्ट्रीम-त्रुटि टर्न को अमान्य रिक्त ब्लॉक रीप्ले करने के बजाय इन-मेमोरी रीप्ले प्रति से हटा दिया जाता है।
- जब सत्र का Compaction हो चुका हो, तो ऊपर Anthropic के समान कारण से Converse रीप्ले से पहले प्री-Compaction सहायक थिंकिंग सिग्नेचर हटा दिए जाते हैं।
- अनुपस्थित, खाली या रिक्त रीप्ले सिग्नेचर वाले Claude थिंकिंग ब्लॉक Converse रीप्ले से पहले हटा दिए जाते हैं। यदि इससे सहायक टर्न खाली हो जाता है, तो OpenClaw गैर-खाली छोड़े-गए-रीज़निंग टेक्स्ट के साथ टर्न का आकार बनाए रखता है।
- पुराने केवल-थिंकिंग सहायक टर्न जिन्हें हटाना आवश्यक है, उन्हें गैर-खाली छोड़े-गए-रीज़निंग टेक्स्ट से बदल दिया जाता है, ताकि Converse रीप्ले सख्त टर्न आकार बनाए रखे।
- रीप्ले OpenClaw डिलीवरी-मिरर और Gateway द्वारा इंजेक्ट किए गए सहायक टर्न को फ़िल्टर करता है।
- इमेज सैनिटाइज़ेशन वैश्विक नियम के माध्यम से लागू होता है।
Mistral (मॉडल-आईडी आधारित पहचान सहित)
- टूल कॉल आईडी सैनिटाइज़ेशन: strict9 (अक्षरांकीय, लंबाई 9)।
OpenRouter Gemini
- थॉट सिग्नेचर क्लीनअप: गैर-base64
thought_signatureमान हटाएँ (base64 बनाए रखें)।
OpenRouter Anthropic
- रीज़निंग सक्षम होने पर सत्यापित OpenRouter OpenAI-संगत Anthropic मॉडल पेलोड से अंतिम सहायक प्रीफ़िल टर्न हटा दिए जाते हैं, जो प्रत्यक्ष Anthropic और Cloudflare Anthropic रीप्ले व्यवहार से मेल खाता है।
अन्य सभी
- केवल इमेज सैनिटाइज़ेशन।
ऐतिहासिक व्यवहार (2026.1.22 से पहले)
2026.1.22 रिलीज़ से पहले, OpenClaw ट्रांसक्रिप्ट स्वच्छता की कई परतें लागू करता था:
- एक transcript-sanitize एक्सटेंशन प्रत्येक संदर्भ निर्माण पर चलता था और यह कर सकता था:
- टूल उपयोग/परिणाम की जोड़ी को सुधारना।
- टूल कॉल आईडी को स्वच्छ करना (इसमें एक गैर-सख्त मोड भी था, जो
_/-को संरक्षित रखता था)।
- रनर प्रदाता-विशिष्ट स्वच्छता भी करता था, जिससे काम दोहराया जाता था।
- प्रदाता नीति के बाहर अतिरिक्त परिवर्तन भी होते थे, जिनमें
स्थायी भंडारण से पहले सहायक टेक्स्ट से
<final>टैग हटाना, सहायक के खाली त्रुटि टर्न हटाना, और टूल कॉल के बाद सहायक सामग्री को ट्रिम करना शामिल था।
इस जटिलता के कारण विभिन्न प्रदाताओं के बीच प्रतिगमन हुए (विशेष रूप से
openai-responses call_id|fc_id की जोड़ी में)। 2026.1.22 की सफ़ाई ने
एक्सटेंशन को हटा दिया, तर्क को रनर में केंद्रीकृत किया और इमेज स्वच्छता के
अतिरिक्त OpenAI को बिना बदलाव रखा।