Tools
अंतर
diffs एक वैकल्पिक बंडल किया गया Plugin टूल है, जो पहले/बाद के टेक्स्ट या एकीकृत पैच को केवल-पढ़ने योग्य डिफ़ आर्टिफ़ैक्ट में बदलता है। यह सिस्टम प्रॉम्प्ट के आरंभ में एजेंट के लिए संक्षिप्त मार्गदर्शन भी जोड़ता है और अधिक विस्तृत निर्देशों के लिए एक सहायक स्किल के साथ आता है।
इनपुट: before + after टेक्स्ट, या एक एकीकृत patch (परस्पर अनन्य)।
आउटपुट: कैनवास प्रस्तुति के लिए Gateway व्यूअर URL, संदेश डिलीवरी के लिए रेंडर की गई PNG/PDF फ़ाइल का पथ, या दोनों।
त्वरित शुरुआत
Plugin इंस्टॉल करें
openclaw plugins install diffsPlugin सक्षम करें
{ plugins: { entries: { diffs: { enabled: true, }, }, },}कोई मोड चुनें
view
कैनवास-प्रथम प्रवाह: एजेंट mode: "view" के साथ diffs को कॉल करते हैं और canvas present के साथ details.viewerUrl खोलते हैं।
file
चैट फ़ाइल डिलीवरी: एजेंट mode: "file" के साथ diffs को कॉल करते हैं और path या filePath का उपयोग करके message के साथ details.filePath भेजते हैं।
both
संयुक्त (डिफ़ॉल्ट): एजेंट एक ही कॉल में दोनों आर्टिफ़ैक्ट पाने के लिए mode: "both" के साथ diffs को कॉल करते हैं।
अंतर्निहित सिस्टम मार्गदर्शन अक्षम करें
टूल को बनाए रखते हुए आरंभ में जोड़ा गया सिस्टम-प्रॉम्प्ट मार्गदर्शन हटाने के लिए, plugins.entries.diffs.hooks.allowPromptInjection को false पर सेट करें:
{ plugins: { entries: { diffs: { enabled: true, hooks: { allowPromptInjection: false, }, }, }, },}इससे टूल और स्किल उपलब्ध रहते हुए Plugin का before_prompt_build हुक अवरुद्ध हो जाता है। मार्गदर्शन और टूल दोनों को अक्षम करने के लिए इसके बजाय Plugin को अक्षम करें।
टूल इनपुट संदर्भ
जहाँ उल्लेख न हो, सभी फ़ील्ड वैकल्पिक हैं।
beforestringमूल टेक्स्ट। जब patch छोड़ा गया हो, तब after के साथ आवश्यक।
afterstringअपडेट किया गया टेक्स्ट। जब patch छोड़ा गया हो, तब before के साथ आवश्यक।
patchstringएकीकृत डिफ़ टेक्स्ट। before और after के साथ परस्पर अनन्य।
pathstringपहले/बाद के मोड के लिए प्रदर्शित फ़ाइल नाम।
langstringपहले/बाद के मोड के लिए भाषा ओवरराइड संकेत। अज्ञात मान और डिफ़ॉल्ट व्यूअर सेट से बाहर की भाषाएँ सामान्य टेक्स्ट पर वापस आ जाती हैं, जब तक कि Diff Viewer Language Pack Plugin इंस्टॉल न हो।
titlestringव्यूअर शीर्षक ओवरराइड।
mode"view" | "file" | "both"आउटपुट मोड। डिफ़ॉल्ट रूप से Plugin का डिफ़ॉल्ट defaults.mode (both)। अप्रचलित उपनाम: "image", "file" के समान व्यवहार करता है।
theme"light" | "dark"व्यूअर थीम। डिफ़ॉल्ट रूप से Plugin का डिफ़ॉल्ट defaults.theme।
layout"unified" | "split"डिफ़ लेआउट। डिफ़ॉल्ट रूप से Plugin का डिफ़ॉल्ट defaults.layout।
expandUnchangedbooleanपूरा संदर्भ उपलब्ध होने पर अपरिवर्तित अनुभाग विस्तृत करें। केवल प्रति-कॉल विकल्प (Plugin की डिफ़ॉल्ट कुंजी नहीं)।
fileFormat"png" | "pdf"रेंडर की गई फ़ाइल का प्रारूप। डिफ़ॉल्ट रूप से Plugin का डिफ़ॉल्ट defaults.fileFormat।
fileQuality"standard" | "hq" | "print"PNG/PDF रेंडरिंग के लिए गुणवत्ता प्रीसेट।
fileScalenumberडिवाइस स्केल ओवरराइड (1-4)।
fileMaxWidthnumberCSS पिक्सेल में अधिकतम रेंडर चौड़ाई (640-2400)।
ttlSecondsnumberdefault: 1800व्यूअर और स्वतंत्र फ़ाइल आउटपुट के लिए आर्टिफ़ैक्ट TTL, सेकंड में। अधिकतम 21600।
baseUrlstringव्यूअर URL मूल का ओवरराइड। Plugin के viewerBaseUrl को ओवरराइड करता है। यह http या https होना चाहिए, क्वेरी/हैश के बिना।
सत्यापन और सीमाएँ
before/after: प्रत्येक अधिकतम 512 KiB।patch: अधिकतम 2 MiB।path: अधिकतम 2048 बाइट।lang: अधिकतम 128 बाइट।title: अधिकतम 1024 बाइट।- पैच जटिलता सीमा: अधिकतम 128 फ़ाइलें और कुल 120000 पंक्तियाँ।
before/afterके साथpatchको अस्वीकार कर दिया जाता है।- रेंडर की गई फ़ाइल की सुरक्षा सीमाएँ (PNG और PDF):
fileQuality: "standard": अधिकतम 8 MP (8,000,000 रेंडर किए गए पिक्सेल)।fileQuality: "hq": अधिकतम 14 MP।fileQuality: "print": अधिकतम 24 MP।- PDF की सीमा भी 50 पृष्ठ है।
सिंटैक्स हाइलाइटिंग
अंतर्निहित भाषाएँ:
javascript, typescript, tsx, jsx, json, markdown, yaml, css, html, sh, python, go, rust, java, c, cpp, csharp, php, sql, docker, ruby, swift, kotlin, r, dart, lua, powershell, xml, और toml।
सामान्य उपनाम (js, ts, bash, md, yml, c++, dockerfile, rb, kt, ps1, आदि) उन भाषाओं में सामान्यीकृत हो जाते हैं।
अधिक भाषाओं (Astro, Vue, Svelte, MDX, GraphQL, Terraform/HCL, Nix, Clojure, Elixir, Haskell, OCaml, Scala, Zig, Solidity, Verilog/VHDL, Fortran, MATLAB, LaTeX, Mermaid, Sass/Less/SCSS, Nginx, Apache, CSV, dotenv, INI, diff, और अन्य) के लिए Diff Viewer Language Pack Plugin इंस्टॉल करें:
openclaw plugins install clawhub:@openclaw/diffs-language-packपैक के बिना भी असमर्थित भाषाएँ पठनीय सामान्य टेक्स्ट के रूप में रेंडर होती हैं। अपस्ट्रीम कैटलॉग के लिए Diffs Language Pack Plugin और Shiki भाषाएँ देखें।
आउटपुट विवरण अनुबंध
सभी सफल परिणामों में changed शामिल होता है: पहले/बाद का एकसमान इनपुट कोई आर्टिफ़ैक्ट बनाए बिना false लौटाता है; रेंडर किए गए परिणाम true लौटाते हैं।
व्यूअर फ़ील्ड (view और both मोड)
changedartifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(उपलब्ध होने परagentId,sessionId,messageChannel,agentAccountId)
फ़ाइल फ़ील्ड (file और both मोड)
changedartifactIdexpiresAtfilePathpath(संदेश टूल संगतता के लिएfilePathके समान मान)fileBytesfileFormatfileQualityfileScalefileMaxWidth
| मोड | लौटाता है |
|---|---|
"view" |
केवल व्यूअर फ़ील्ड। |
"file" |
केवल फ़ाइल फ़ील्ड, कोई व्यूअर आर्टिफ़ैक्ट नहीं। |
"both" |
व्यूअर फ़ील्ड और फ़ाइल फ़ील्ड। यदि फ़ाइल रेंडरिंग विफल होती है, तो भी व्यूअर fileError के साथ लौटता है। |
संक्षिप्त किए गए अपरिवर्तित अनुभाग
व्यूअर N unmodified lines जैसी पंक्तियाँ दिखाता है। विस्तार नियंत्रण केवल तब दिखाई देते हैं, जब रेंडर किए गए डिफ़ में विस्तृत किए जा सकने वाला संदर्भ डेटा हो (आमतौर पर पहले/बाद के इनपुट के लिए)। कई एकीकृत पैच अपने हंक में संदर्भ निकाय छोड़ देते हैं, इसलिए पंक्ति बिना विस्तार नियंत्रण के दिखाई दे सकती है -- यह अपेक्षित है, बग नहीं। expandUnchanged केवल तभी लागू होता है, जब विस्तृत किया जा सकने वाला संदर्भ मौजूद हो।
बहु-फ़ाइल नेविगेशन
एक से अधिक फ़ाइलों को प्रभावित करने वाले पैच परिवर्तित-फ़ाइलों के सारांश कार्ड से शुरू होते हैं: कुल +N / -N संख्याएँ, प्रति-फ़ाइल संख्याएँ, जोड़े गए/हटाए गए/नाम बदले गए बैज, और प्रत्येक फ़ाइल पर जाने वाले एंकर लिंक। रेंडर की गई PNG/PDF फ़ाइलें प्रति-फ़ाइल हेडर संख्याएँ बनाए रखती हैं, लेकिन इंटरैक्टिव व्यू टॉगल हटा देती हैं, क्योंकि स्थिर फ़ाइल में वे निष्क्रिय नियंत्रण होते हैं।
Plugin डिफ़ॉल्ट
पूरे Plugin के लिए डिफ़ॉल्ट ~/.openclaw/openclaw.json में सेट करें:
{ plugins: { entries: { diffs: { enabled: true, config: { defaults: { fontFamily: "Fira Code", fontSize: 15, lineSpacing: 1.6, layout: "unified", showLineNumbers: true, diffIndicators: "bars", wordWrap: true, background: true, theme: "dark", fileFormat: "png", fileQuality: "standard", fileScale: 2, fileMaxWidth: 960, mode: "both", ttlSeconds: 21600, }, }, }, }, },}समर्थित defaults कुंजियाँ: fontFamily, fontSize, lineSpacing, layout, showLineNumbers, diffIndicators, wordWrap, background, theme, fileFormat, fileQuality, fileScale, fileMaxWidth, mode, ttlSeconds। स्पष्ट टूल कॉल पैरामीटर इन्हें ओवरराइड करते हैं।
स्थायी व्यूअर URL कॉन्फ़िगरेशन
viewerBaseUrlstringजब टूल कॉल baseUrl पास नहीं करता, तब लौटाए गए व्यूअर लिंक के लिए Plugin-स्वामित्व वाला फ़ॉलबैक। यह http या https होना चाहिए, क्वेरी/हैश के बिना।
{ plugins: { entries: { diffs: { enabled: true, config: { viewerBaseUrl: "https://gateway.example.com/openclaw", }, }, }, },}सुरक्षा कॉन्फ़िगरेशन
security.allowRemoteViewerbooleandefault: falsefalse: व्यूअर रूट के गैर-लूपबैक अनुरोध अस्वीकार कर दिए जाते हैं। true: टोकनयुक्त पथ मान्य होने पर रिमोट व्यूअर की अनुमति होती है।
{ plugins: { entries: { diffs: { enabled: true, config: { security: { allowRemoteViewer: false, }, }, }, }, },}आर्टिफ़ैक्ट जीवनचक्र और स्टोरेज
- व्यूअर HTML और मेटाडेटा, Diffs Plugin ब्लॉब नेमस्पेस के अंतर्गत साझा
state/openclaw.sqliteडेटाबेस में रहते हैं। HTML को gzip से संपीड़ित किया जाता है; SQLite यादृच्छिक URL टोकन के केवल SHA-256 हैश को संग्रहीत करता है, स्वयं टोकन को नहीं। - रेंडर की गई PNG/PDF फ़ाइलें
$TMPDIR/openclaw-diffsके अंतर्गत अस्थायी रूप से तैयार की गई फ़ाइलें बनी रहती हैं, क्योंकि चैनल डिलीवरी के लिए फ़ाइल पथ आवश्यक है। उनकी समाप्ति का मेटाडेटा SQLite के नियंत्रण में रहता है; कोई JSON साइडकार नहीं लिखे जाते। - डिफ़ॉल्ट आर्टिफ़ैक्ट TTL: 30 मिनट। अधिकतम स्वीकृत TTL: 6 घंटे।
- प्रत्येक आर्टिफ़ैक्ट निर्माण कॉल के बाद अवसर मिलने पर क्लीनअप चलता है। पहले समाप्त हो चुकी SQLite पंक्तियाँ हटाई जाती हैं, फिर उनसे संबंधित कोई भी PNG/PDF डायरेक्टरी।
- एक फ़ॉलबैक स्वीप 24 घंटे से अधिक पुराने, पंक्ति-विहीन अस्थायी फ़ोल्डर हटा देता है। पुराने
meta.json,file-meta.json, औरviewer.htmlकैश न तो आयात किए जाते हैं, न पढ़े जाते हैं।
व्यूअर URL और नेटवर्क व्यवहार
व्यूअर रूट: /plugins/diffs/view/{artifactId}/{token}
व्यूअर एसेट:
/plugins/diffs/assets/viewer.js/plugins/diffs/assets/viewer-runtime.js/plugins/diffs-language-pack/assets/viewer.js(केवल जब डिफ़ किसी लैंग्वेज पैक की भाषा का उपयोग करता है)
व्यूअर दस्तावेज़ इन एसेट को व्यूअर URL के सापेक्ष हल करता है, इसलिए वैकल्पिक baseUrl पथ प्रीफ़िक्स एसेट अनुरोधों पर भी लागू होता है।
URL समाधान क्रम: टूल-कॉल baseUrl (सख़्त सत्यापन के बाद) -> Plugin viewerBaseUrl -> डिफ़ॉल्ट लूपबैक 127.0.0.1। यदि Gateway बाइंड मोड custom है और gateway.customBindHost सेट है, तो लूपबैक के बजाय उस होस्ट का उपयोग किया जाता है।
baseUrl के नियम: http:// या https:// होना आवश्यक है; क्वेरी और हैश अस्वीकार किए जाते हैं; ओरिजिन के साथ वैकल्पिक बेस पथ की अनुमति है।
सुरक्षा मॉडल
व्यूअर सुरक्षा सुदृढ़ीकरण
- डिफ़ॉल्ट रूप से केवल लूपबैक।
- सख़्त ID और टोकन पैटर्न सत्यापन वाले टोकनयुक्त व्यूअर पथ।
- व्यूअर प्रतिक्रिया CSP:
default-src 'none'; स्क्रिप्ट/एसेट केवल स्वयं से; कोई आउटबाउंडconnect-srcनहीं। - रिमोट एक्सेस सक्षम होने पर रिमोट चूक थ्रॉटलिंग: प्रति 60 सेकंड में 40 विफलताएँ होने पर 60 सेकंड का लॉकआउट सक्रिय होता है (
429 Too Many Requests)।
फ़ाइल रेंडरिंग सुरक्षा सुदृढ़ीकरण
- स्क्रीनशॉट ब्राउज़र अनुरोध रूटिंग डिफ़ॉल्ट रूप से अस्वीकृत रहती है।
- केवल
http://127.0.0.1/plugins/diffs/assets/*से स्थानीय व्यूअर एसेट की अनुमति है। - बाहरी नेटवर्क अनुरोध अवरुद्ध किए जाते हैं।
फ़ाइल मोड के लिए ब्राउज़र आवश्यकताएँ
mode: "file" और mode: "both" के लिए Chromium-संगत ब्राउज़र आवश्यक है।
समाधान क्रम:
कॉन्फ़िगरेशन
OpenClaw कॉन्फ़िगरेशन में browser.executablePath।
पर्यावरण चर
OPENCLAW_BROWSER_EXECUTABLE_PATHBROWSER_EXECUTABLE_PATHPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
प्लेटफ़ॉर्म फ़ॉलबैक
Chrome, Chromium, Edge, और Brave के लिए सामान्य इंस्टॉल पथ तथा PATH लुकअप।
सामान्य विफलता संदेश: Diff PNG/PDF rendering requires a Chromium-compatible browser...। Chrome, Chromium, Edge, या Brave इंस्टॉल करके अथवा ऊपर दिए गए निष्पादन योग्य पथ विकल्पों में से कोई एक सेट करके इसे ठीक करें।
समस्या निवारण
इनपुट सत्यापन त्रुटियाँ
Provide patch or both before and after text.--beforeऔरafterदोनों शामिल करें, याpatchप्रदान करें।Provide either patch or before/after input, not both.-- इनपुट मोड को न मिलाएँ।Invalid baseUrl: ...-- वैकल्पिक पथ वालेhttp(s)ओरिजिन का उपयोग करें, क्वेरी/हैश के बिना।{field} exceeds maximum size (...)-- पेलोड का आकार घटाएँ।- बड़े पैच का अस्वीकरण -- पैच फ़ाइलों की संख्या या कुल पंक्तियाँ घटाएँ।
व्यूअर की पहुँच
- डिफ़ॉल्ट रूप से व्यूअर URL
127.0.0.1पर हल होता है। - रिमोट एक्सेस के लिए, या तो Plugin
viewerBaseUrlसेट करें, प्रत्येक कॉल मेंbaseUrlपास करें, याgateway.customBindHostके साथgateway.bind=customका उपयोग करें। - यदि
gateway.trustedProxiesमें समान होस्ट के प्रॉक्सी (उदाहरण के लिए Tailscale Serve) हेतु लूपबैक शामिल है, तो अग्रेषित क्लाइंट-IP हेडर के बिना सीधे लूपबैक व्यूअर अनुरोध डिज़ाइन के अनुसार सुरक्षित रूप से विफल होते हैं। - उस प्रॉक्सी टोपोलॉजी के लिए, अटैचमेंट हेतु
mode: "file"/"both"को प्राथमिकता दें, या साझा किए जा सकने वाले व्यूअर लिंक के लिए जानबूझकरsecurity.allowRemoteViewerके साथ PluginviewerBaseUrl/प्रॉक्सीbaseUrlसक्षम करें। security.allowRemoteViewerको केवल तभी सक्षम करें जब बाहरी व्यूअर एक्सेस अपेक्षित हो।
अपरिवर्तित-पंक्तियों वाली पंक्ति में विस्तार बटन नहीं है
विस्तार योग्य संदर्भ से रहित पैच इनपुट के लिए यह अपेक्षित है; यह व्यूअर की विफलता नहीं है।
आर्टिफ़ैक्ट नहीं मिला
- TTL के कारण आर्टिफ़ैक्ट समाप्त हो गया।
- टोकन या पथ बदल गया।
- क्लीनअप ने पुराने डेटा को हटा दिया।
परिचालन मार्गदर्शन
- कैनवास में स्थानीय इंटरैक्टिव समीक्षाओं के लिए
mode: "view"को प्राथमिकता दें। - अटैचमेंट की आवश्यकता वाले आउटबाउंड चैट चैनलों के लिए
mode: "file"को प्राथमिकता दें। allowRemoteViewerको तब तक अक्षम रखें, जब तक आपके डिप्लॉयमेंट को रिमोट व्यूअर URL की आवश्यकता न हो।- संवेदनशील डिफ़ के लिए एक स्पष्ट छोटा
ttlSecondsसेट करें। - आवश्यक न होने पर डिफ़ इनपुट में सीक्रेट भेजने से बचें।
- यदि आपका चैनल छवियों को बहुत अधिक संपीड़ित करता है (उदाहरण के लिए Telegram या WhatsApp), तो PDF आउटपुट (
fileFormat: "pdf") को प्राथमिकता दें।