* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
60 KiB
RTK Compression (हिन्दी)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
RTK compression, टर्मिनल और टूल आउटपुट के लिए OmniRoute का कमांड-सजग कम्प्रेशन इंजन है। इसे कोडिंग-एजेंट सत्रों के लिए डिज़ाइन किया गया है, जहाँ संदर्भ में अधिकांश वृद्धि टेस्ट लॉग, बिल्ड आउटपुट, पैकेज मैनेजर के अनावश्यक आउटपुट, शेल ट्रांस्क्रिप्ट, Docker आउटपुट, git आउटपुट और स्टैक ट्रेस से होती है।
RTK सीधे defaultMode: "rtk" के साथ या स्टैक्ड पाइपलाइन के पहले चरण के रूप में चल सकता है, आमतौर पर:
rtk -> caveman
यह क्रम पहले अव्यवस्थित मशीन आउटपुट को कम्प्रेस करता है, फिर Caveman को शेष गद्य को संक्षिप्त करने देता है।
अपस्ट्रीम RTK कमांड आउटपुट में 60-90% बचत की रिपोर्ट करता है। इसके README का नमूना सत्र
~118,000 मानक टोकन से घटकर ~23,900 RTK टोकन रह जाता है, जो 79.7% बचत (~80%) है। OmniRoute,
Caveman इनपुट कम्प्रेशन के साथ स्टैक्ड बचत की गणना के लिए इसी अपस्ट्रीम औसत का उपयोग करता है:
RTK औसत: 80% बचत
Caveman इनपुट: 46% बचत
स्टैक्ड: 1 - (1 - 0.80) * (1 - 0.46) = 89.2% बचत
सीमा: 1 - (1 - 0.60..0.90) * (1 - 0.46) = 78.4-94.6%
यह क्या कम्प्रेस करता है
अंतर्निहित कैटलॉग वर्तमान में इन श्रेणियों में 49 फ़िल्टर प्रदान करता है:
| श्रेणी | उदाहरण |
|---|---|
git |
git status, git branch, git diff, git log |
test |
Vitest, Jest, Pytest, Playwright, Go टेस्ट, Cargo टेस्ट |
build |
TypeScript, ESLint, Biome, Prettier, Vite, Webpack, Turbo, Nx |
package |
npm install, npm audit, pip, uv sync, Poetry, Bundler |
shell |
ls, find, grep, सामान्य शेल लॉग |
docker |
docker ps, Docker लॉग |
infra |
Terraform, OpenTofu, systemctl status |
generic |
JSON आउटपुट, स्टैक ट्रेस, सामान्य आउटपुट फ़ॉलबैक |
open-sse/services/compression/engines/rtk/commandDetector.ts में मौजूद डिटेक्टर, फ़िल्टर चयन से पहले
आउटपुट को वर्गीकृत करता है। जब कोई कमांड वर्ग पर्याप्त न हो, तब फ़िल्टर कमांड पैटर्न या आउटपुट रेगेक्स के
आधार पर भी मिलान कर सकते हैं।
फ़िल्टर रिज़ॉल्यूशन
RTK फ़िल्टरों को इस क्रम में लोड करता है:
.rtk/filters.tomlऔर.rtk/filters.jsonसे प्रोजेक्ट फ़िल्टर, केवल विश्वसनीय होने पर।DATA_DIR/rtk/filters.tomlऔरDATA_DIR/rtk/filters.jsonसे ग्लोबल फ़िल्टर।open-sse/services/compression/engines/rtk/filters/से अंतर्निहित फ़िल्टर।
एक ही स्कोप के भीतर, RTK TOML स्कीमा v1 फ़िल्टरों को OmniRoute JSON फ़िल्टरों पर प्राथमिकता मिलती है। TOML
match_command एक्सप्रेशन की जाँच कमांड-टाइप मिलान से पहले की जाती है, ताकि आयातित कमांड-विशिष्ट
फ़िल्टर उस स्कोप के अधिक व्यापक फ़िल्टर को ओवरराइड कर सके। फ़ाइल फ़ॉर्मेट चाहे जो भी हो, प्रोजेक्ट स्कोप
को ग्लोबल स्कोप पर प्राथमिकता मिलती है।
प्रोजेक्ट फ़िल्टर जानबूझकर विश्वास-नियंत्रित हैं, क्योंकि रेगेक्स फ़िल्टर यह बदल सकते हैं कि एजेंटों को टूल आउटपुट कैसे दिखाया जाता है। प्रोजेक्ट फ़िल्टर फ़ाइल तब स्वीकार की जाती है, जब इनमें से कोई एक शर्त सत्य हो:
rtkConfig.trustProjectFiltersका मानtrueहो।OMNIROUTE_RTK_TRUST_PROJECT_FILTERS=1सेट हो।.rtk/trust.jsonमें प्रोजेक्ट फ़िल्टर फ़ाइल का मेल खाता SHA-256 हैश मौजूद हो।
ट्रस्ट फ़ाइल का उदाहरण:
{
"filtersSha256": "0123456789abcdef...",
"filtersTomlSha256": "fedcba9876543210..."
}
हैश अलग-अलग हैं: filtersSha256, .rtk/filters.json को विश्वसनीय बनाता है, जबकि filtersTomlSha256,
.rtk/filters.toml को विश्वसनीय बनाता है। किसी भी फ़ाइल को संपादित करने पर केवल उसकी अपनी ट्रस्ट प्रविष्टि
अमान्य होती है। ग्लोबल फ़ाइलें व्यवस्थापक द्वारा इंस्टॉल की जाती हैं और मौजूदा ग्लोबल-फ़िल्टर ट्रस्ट व्यवहार
का उपयोग करती हैं।
कस्टम फ़िल्टर एक फ़िल्टर ऑब्जेक्ट या फ़िल्टर ऑब्जेक्टों की एक ऐरे हो सकते हैं। अमान्य कस्टम फ़िल्टर छोड़ दिए
जाते हैं और /api/context/rtk/filters डायग्नोस्टिक्स द्वारा रिपोर्ट किए जाते हैं। अमान्य अंतर्निहित फ़िल्टर
तुरंत विफल हो जाते हैं।
RTK TOML स्कीमा v1 संगतता
OmniRoute, RTK TOML स्कीमा v1 का उपयोग करके घोषणात्मक फ़िल्टर फ़ाइलों को पार्स, सत्यापित, परीक्षण और इंस्टॉल कर सकता है।
समर्थित फ़ील्ड हैं: description, match_command, strip_ansi, filter_stderr,
strip_lines_matching, keep_lines_matching, replace, match_output, truncate_lines_at,
head_lines, tail_lines, max_lines, on_empty, और [[tests.<filter>]] इनलाइन परीक्षण।
अज्ञात फ़ील्ड, अमान्य या असुरक्षित रेगुलर एक्सप्रेशन, एक साथ मौजूद strip/keep नियम, 1 MiB से बड़ी फ़ाइलें,
और अज्ञात फ़िल्टर के संदर्भ अस्वीकार कर दिए जाते हैं। जिस फ़ाइल के इनलाइन परीक्षण विफल होते हैं, उसे
निरीक्षण के लिए सत्यापित किया जा सकता है, लेकिन इंस्टॉल या लोड नहीं किया जा सकता। कस्टम फ़ाइल लोड होने
की विफलताएँ fail-open रहती हैं: अमान्य फ़ाइल छोड़ दी जाती है और शेष फ़िल्टर काम करना जारी रखते हैं।
क्लाइंट द्वारा टूल आउटपुट पहले ही कैप्चर किए जाने के बाद OmniRoute उसे प्राप्त करता है, इसलिए filter_stderr = true
प्रोसेस कैप्चर को नहीं बदल सकता। इस फ़ील्ड को no-op के रूप में स्वीकार किया जाता है और सत्यापन एक चेतावनी लौटाता है।
इसे जानबूझकर RTK TOML स्कीमा v1 संगतता के रूप में वर्णित किया गया है, न कि RTK निष्पादन योग्य फ़ाइल,
शेल हुक, Rust कमांड कार्यान्वयन या उसके ट्रस्ट-स्टोर लेआउट के साथ पूर्ण संगतता के रूप में।
डैशबोर्ड का उन्नत RTK दृश्य पेस्ट या अपलोड किए गए TOML को स्वीकार करता है। सत्यापन केवल-पढ़ने योग्य है।
इंस्टॉलेशन प्रतिबंधात्मक अनुमतियों के साथ DATA_DIR/rtk/filters.toml को परमाण्विक रूप से लिखता है और
बिना पुनः आरंभ किए सक्रिय फ़िल्टर कैटलॉग को रीफ़्रेश करता है। किसी मौजूदा फ़ाइल को बदलने के लिए स्पष्ट
overwrite पुष्टि आवश्यक है और पहले DATA_DIR/rtk/filters.toml.bak बनाया जाता है।
फ़िल्टर DSL
फ़िल्टर Compression Rules Format में वर्णित JSON स्कीमा का उपयोग करते हैं। रनटाइम इन चरणों को क्रम से लागू करता है:
stripAnsi -> filterStderr -> replace -> matchOutput -> पंक्तियाँ हटाएँ/शामिल करें
-> truncateLineAt -> head/tail/maxLines -> onEmpty
महत्वपूर्ण फ़ील्ड:
| फ़ील्ड | उद्देश्य |
|---|---|
rules.stripAnsi |
मिलान से पहले टर्मिनल रंग/नियंत्रण अनुक्रम हटाएँ |
rules.filterStderr |
मिलान/फ़िल्टरिंग से पहले सामान्य stderr उपसर्गों को सामान्यीकृत करें |
rules.replace |
क्रमबद्ध रेगुलर एक्सप्रेशन प्रतिस्थापन लागू करें |
rules.matchOutput |
आउटपुट के किसी ज्ञात स्थिति से मेल खाने पर संक्षिप्त सारांश लौटाएँ |
rules.matchOutput[].unless |
त्रुटि/विफलता पैटर्न मौजूद होने पर शॉर्टकट छोड़ दें |
rules.dropPatterns |
अनावश्यक पंक्तियाँ हटाएँ |
rules.includePatterns |
कार्रवाई योग्य पंक्तियों को प्राथमिकता दें |
rules.collapsePatterns |
बार-बार आने वाली मेल खाती पंक्तियों को संक्षिप्त करें |
rules.deduplicate |
प्रति-फ़िल्टर ऑप्ट-इन: लगातार आने वाली डुप्लिकेट पंक्तियों को संक्षिप्त करें |
rules.truncateLineAt |
Unicode-सुरक्षित प्रति-पंक्ति ट्रंकेशन |
rules.onEmpty |
सभी पंक्तियाँ फ़िल्टर हो जाने पर फ़ॉलबैक संदेश |
tests[] |
सत्यापन गेट द्वारा उपयोग किए जाने वाले इनलाइन नमूने |
अंतर्निर्मित फ़िल्टर में इनलाइन tests[] नमूने शामिल होना अपेक्षित है। कस्टम फ़िल्टर में भी
उन्हें शामिल किया जाना चाहिए, विशेष रूप से जब उन्हें विभिन्न प्रोजेक्टों में साझा किया जाता है।
पंक्ति डीडुप्लिकेशन (दो स्तर)
RTK डुप्लिकेट पंक्तियों को दो स्वतंत्र स्तरों पर संक्षिप्त करता है:
- प्रति-फ़िल्टर
deduplicate(ऑप्ट-इन, डिफ़ॉल्टfalse)। कोई फ़िल्टरrules.deduplicate: trueसेट करके, काट-छाँट से पहले, उस फ़िल्टर के मिलान किए गए आउटपुट के भीतर लगातार आने वाली डुप्लिकेट पंक्तियों को संक्षिप्त कर सकता है। यहlineFilter.tsके अंदर चलता है। लीगेसी फ़िल्टरों के लिए, जब फ़िल्टरcollapsePatternsपरिभाषित करता है, तो यह अपने-आप सक्षम हो जाता है। स्कीमा:open-sse/services/compression/engines/rtk/filterSchema.tsमेंdeduplicate: z.boolean().default(false)। - इंजन-व्यापी
deduplicateThreshold(डिफ़ॉल्ट3)। सभी फ़िल्टर चलने के बाद, इंजन पूरे परिणाम में एक जैसी लगातार पंक्तियों के>= deduplicateThresholdलंबे किसी भी क्रम को संक्षिप्त करता है (deduplicateRepeatedLines, जिसेengines/rtk/index.tsमें लागू किया जाता है)। सामान्यीकरण के दौरान मान को 2–100 के बीच सीमित किया जाता है।
प्रति-फ़िल्टर पास पहले (फ़िल्टर के अंदर) चलता है और इंजन-व्यापी पास अंत में (जोड़े गए आउटपुट पर) चलता है, इसलिए दोनों बिना दोहरी गणना के एक साथ काम करते हैं।
पंक्ति समूहीकरण (enableGrouping)
जब rtkConfig.enableGrouping, true (डिफ़ॉल्ट false) होता है, तो RTK डीडुप्लिकेशन के बाद प्राप्त परिणाम पर एक अतिरिक्त groupSimilarLines
पास चलाता है, जो लगभग समान (बाइट-स्तर पर पूरी तरह समान नहीं)
लगातार पंक्तियों के क्रमों को संक्षिप्त करता है। rtkConfig.groupingThreshold (डिफ़ॉल्ट 3) वह न्यूनतम क्रम-लंबाई है जो
समूहीकरण को ट्रिगर करती है। यह deduplicateThreshold का संरचनात्मक समकक्ष है: डीडुप्लिकेशन सटीक पुनरावृत्तियों को संभालता है,
जबकि समूहीकरण "छोटे अंतरों के साथ समान संरचना" को संभालता है। दोनों फ़्लैग key_value तालिका में संरक्षित rtkConfig JSON
का भाग हैं (ऊपर कॉन्फ़िगरेशन देखें), इसलिए सेटिंग पुनरारंभ के बाद भी बनी रहती है।
कोड टिप्पणियाँ हटाना (stripCodeComments / preserveDocstrings)
जब rtkConfig.applyToCodeBlocks सक्षम होता है, तब RTK फ़ेंस किए गए कोड ब्लॉक से टिप्पणियाँ भी हटा सकता है:
stripCodeComments(डिफ़ॉल्टfalse) — ऑप्ट-इन।trueहोने पर, RTK JavaScript और TypeScript के फ़ेंस किए गए ब्लॉक से टिप्पणियाँ हटा देता है। ऐतिहासिक रूप से इस फ़्लैग को पढ़ा तो जाता था, लेकिन कभी लागू नहीं किया गया, इसलिए उत्पादन में बिना सूचना के परिवर्तन से बचने के लिए डिफ़ॉल्ट "संरक्षित रखें" ही रहता है।preserveDocstrings(डिफ़ॉल्टtrue) — टिप्पणियाँ हटाते समय, JSDoc//** … */ब्लॉक टिप्पणियाँ रखी जाती हैं (वे ऐसी API दस्तावेज़ीकरण रखती हैं जिसका महत्व उनके द्वारा लिए गए बाइट्स से अधिक है)। इन्हें भी हटाने के लिए इसेfalseपर सेट करें।
टिप्पणी हटाने की प्रक्रिया open-sse/services/compression/engines/rtk/codeStripper.ts में कार्यान्वित है। यह
TypeScript पार्सर (रेगेक्स नहीं) का उपयोग करती है, ताकि स्ट्रिंग, टेम्पलेट और रेगेक्स लिटरल को कभी गलती से
टिप्पणी न माना जाए, और JSX मिलने पर यह प्रक्रिया पूरी तरह रोक देती है (ताकि JSX एक्सप्रेशन-कंटेनर टिप्पणियाँ
कभी खराब न हों)। टिप्पणी हटाना वर्तमान में केवल JavaScript और TypeScript पर लागू होता है — स्ट्रिपर के
CodeLanguage सेट की अन्य भाषाओं (Python, Rust, Go, Ruby, Java) में खाली पंक्तियाँ और
व्हाइटस्पेस संक्षिप्त किए जाते हैं, लेकिन टिप्पणियाँ नहीं हटाई जातीं। स्ट्रिप किए गए ब्लॉक के रन को
rulesApplied में rtk:code-strip टैग दिया जाता है।
नोट — GCF / सारणीबद्ध एन्कोडिंग एक अलग इंजन है। RTK में "GCF" (Graph Compact Format) सारणीबद्ध/स्तंभात्मक JSON एन्कोडर नहीं है। वह एन्कोडर — जिसने पुराने
omni-tabularएन्कोडर को प्रतिस्थापित किया था — headroom इंजन में स्थित है (open-sse/services/compression/engines/headroom/, जबकि साथ दिया गया कोडेकheadroom/gcf/के अंतर्गत है)। इसका यहाँ दस्तावेज़ीकृत RTK फ़िल्टर पाइपलाइन से कोई संबंध नहीं है।
कॉन्फ़िगरेशन
वैश्विक सेटिंग्स /api/settings/compression के माध्यम से उपलब्ध हैं। RTK-विशिष्ट सेटिंग्स भी
/api/context/rtk/config के माध्यम से उपलब्ध हैं।
{
"defaultMode": "stacked",
"autoTriggerMode": "stacked",
"autoTriggerTokens": 32000,
"stackedPipeline": [
{ "engine": "rtk", "intensity": "standard" },
{ "engine": "caveman", "intensity": "full" }
],
"rtkConfig": {
"enabled": true,
"intensity": "standard",
"applyToToolResults": true,
"applyToCodeBlocks": false,
"applyToAssistantMessages": false,
"enabledFilters": [],
"disabledFilters": [],
"maxLinesPerResult": 120,
"maxCharsPerResult": 12000,
"deduplicateThreshold": 3,
"customFiltersEnabled": true,
"trustProjectFilters": false,
"rawOutputRetention": "never",
"rawOutputMaxBytes": 1048576,
"enableGrouping": false,
"groupingThreshold": 3,
"stripCodeComments": false,
"preserveDocstrings": true
}
}
enabledFilters और disabledFilters फ़िल्टर आईडी का उपयोग करते हैं, उदाहरण के लिए test-vitest या git-diff।
rtkConfig की पूर्ण संरचना open-sse/services/compression/types.ts में RtkConfig /
DEFAULT_RTK_CONFIG द्वारा परिभाषित है। पूरे ऑब्जेक्ट को SQLite की key_value तालिका में
namespace = "compression", key = "rtkConfig" के अंतर्गत एकल JSON मान के रूप में सहेजा जाता है
(src/lib/db/compression.ts), और पढ़ते समय normalizeRtkConfig द्वारा सामान्यीकृत किया जाता है। इसलिए नीचे दिया गया प्रत्येक फ़ील्ड
— जिसमें enableGrouping, groupingThreshold, stripCodeComments, और preserveDocstrings शामिल हैं —
उसी स्टोर के माध्यम से राउंड-ट्रिप करता है और पुनः आरंभ होने के बाद भी बना रहता है।
| कुंजी | डिफ़ॉल्ट | उद्देश्य |
|---|---|---|
deduplicateThreshold |
3 |
पूरे इंजन में: संक्षिप्त करने के लिए लगातार समान पंक्तियों की न्यूनतम संख्या (सीमा 2–100) |
enableGrouping |
false |
वैकल्पिक: लगभग समान लगातार पंक्तियों के क्रमों को संक्षिप्त करें |
groupingThreshold |
3 |
समूहबद्धता ट्रिगर करने वाले लगातार समान-पंक्ति क्रम की न्यूनतम संख्या |
stripCodeComments |
false |
वैकल्पिक: फ़ेन्स्ड कोड ब्लॉक से टिप्पणियाँ हटाएँ (applyToCodeBlocks आवश्यक) |
preserveDocstrings |
true |
टिप्पणियाँ हटाते समय JSDoc//** … */ ब्लॉक बनाए रखें |
API
| रूट | विधि | उद्देश्य |
|---|---|---|
/api/context/rtk/config |
GET | RTK कॉन्फ़िगरेशन पढ़ें |
/api/context/rtk/config |
PUT | RTK कॉन्फ़िगरेशन अपडेट करें |
/api/context/rtk/filters |
GET | फ़िल्टर कैटलॉग और लोड डायग्नोस्टिक्स सूचीबद्ध करें |
/api/context/rtk/import |
POST | RTK TOML स्कीमा v1 फ़ाइलों को सत्यापित या इंस्टॉल करें |
/api/context/rtk/test |
POST | एक टेक्स्ट पेलोड के लिए RTK कम्प्रेशन का पूर्वावलोकन करें |
/api/context/rtk/raw-output/[id] |
GET | बनाए रखा गया संशोधित रॉ आउटपुट पढ़ें |
/api/compression/preview |
POST | किसी भी कम्प्रेशन मोड का पूर्वावलोकन करें |
RTK परीक्षण पेलोड:
{
"command": "npm test",
"text": "FAIL tests/example.test.ts\nAssertionError: expected true\nTest Files 1 failed",
"config": {
"intensity": "standard"
}
}
कम्प्रेशन पूर्वावलोकन पेलोड:
{
"mode": "stacked",
"messages": [
{
"role": "tool",
"content": "FAIL tests/example.test.ts\nAssertionError: expected true\nTest Files 1 failed"
}
],
"config": {
"rtkConfig": {
"rawOutputRetention": "failures"
}
}
}
प्रबंधन रूट के लिए डैशबोर्ड प्रबंधन प्रमाणीकरण या मेल खाने वाली API-कुंजी नीति आवश्यक है।
RTK TOML सत्यापन पेलोड:
{
"action": "validate",
"content": "schema_version = 1\n\n[filters.my-tool]\nmatch_command = \"^my-tool\\\\b\"\nmax_lines = 20\n"
}
सत्यापित फ़ाइल को वैश्विक रूप से इंस्टॉल करने के लिए "action": "install" का उपयोग करें। किसी मौजूदा वैश्विक फ़ाइल को बदलने की समीक्षा और पुष्टि करने के बाद ही
"overwrite": true जोड़ें।
रॉ आउटपुट पुनर्प्राप्ति
RTK सामान्यतः केवल संपीड़ित टेक्स्ट लौटाता है। डीबगिंग के लिए, rawOutputRetention संशोधित
रॉ आउटपुट को बनाए रख सकता है:
| मान | व्यवहार |
|---|---|
never |
रॉ आउटपुट बनाए न रखें |
failures |
केवल संभावित विफलता वाले आउटपुट को बनाए रखें |
always |
संशोधन के बाद प्रत्येक संपीड़ित RTK रॉ आउटपुट को बनाए रखें |
बनाए रखी गई फ़ाइलें यहाँ लिखी जाती हैं:
DATA_DIR/rtk/raw-output/
स्थायी रूप से सहेजने से पहले गोपनीय जानकारी को संशोधित कर दिया जाता है, जिसमें सामान्य बेयरर टोकन, API कुंजियाँ, Slack टोकन,
AWS एक्सेस कुंजियाँ और असाइनमेंट-शैली के token=..., secret=..., password=... मान शामिल हैं। एनालिटिक्स
केवल पॉइंटर आईडी, आकार और हैश मेटाडेटा संग्रहीत करता है।
सत्यापन गेट
केंद्रित सत्यापन गेट बाहरी कमांड का उपयोग किए बिना अंतर्निहित इनलाइन फ़िल्टर परीक्षण चलाता है:
node --import tsx/esm --test tests/unit/compression/rtk-verify.test.ts
व्यापक RTK गेट यह है:
node --import tsx/esm --test \
tests/unit/compression/rtk-*.test.ts \
tests/unit/compression/pipeline-integration.test.ts \
tests/unit/compression/context-compression-api.test.ts
रिलीज़ से पहले व्यापक संपीड़न गेट चलाएँ:
node --import tsx/esm --test \
tests/unit/compression/*.test.ts \
tests/golden-set/*.test.ts \
tests/integration/compression-pipeline.test.ts \
tests/unit/api/compression/compression-api.test.ts
RTK का विस्तार करना
- कोई फ़िल्टर JSON फ़ाइल जोड़ें या अपडेट करें।
- कम-से-कम एक
tests[]नमूना शामिल करें जो महत्वपूर्ण व्यवहार को प्रमाणित करता हो। - नए कमांड परिवारों के लिए
tests/unit/compression/fixtures/rtk/के अंतर्गत कोई फ़िक्स्चर जोड़ें। - नया आउटपुट वर्ग प्रस्तुत करते समय कमांड पहचान कवरेज जोड़ें।
- सत्यापन और व्यापक RTK गेट चलाएँ।
- यदि फ़िल्टर प्रोजेक्ट-स्थानीय है, तो समीक्षा के बाद ही
.rtk/filters.jsonको कमिट और.rtk/trust.jsonको रीफ़्रेश करें।
तीव्रता स्तर (v3.8.16+)
RTK 3 तीव्रता स्तरों का समर्थन करता है, जो संपीड़न की आक्रामकता और सुरक्षा के बीच संतुलन बनाते हैं। स्तर को इंजन कॉन्फ़िगरेशन में config.intensity के माध्यम से सेट किया जाता है।
3 स्तर
| स्तर | ट्रंकेशन सीमा | टोकन बचत | जोखिम | इसके लिए सर्वोत्तम |
|---|---|---|---|---|
minimal |
प्रति अनुभाग 24 पंक्तियाँ | ~20-40% | बहुत कम | महत्वपूर्ण संदर्भ वाला प्रोडक्शन |
standard (डिफ़ॉल्ट) |
प्रति अनुभाग 24 पंक्तियाँ | ~50-70% | कम | दैनिक कोडिंग सत्र |
aggressive |
प्रति अनुभाग 16 पंक्तियाँ | ~70-90% | मध्यम | लंबे सत्र, अधिकतम बचत |
ट्रंकेशन कहाँ होता है
ट्रंकेशन सीमा lineFilter.ts को प्रभावित करती है:
// open-sse/services/compression/engines/rtk/index.ts:329-330 से
config.intensity === "aggressive" ? 16 : 24,
config.intensity === "aggressive" ? 16 : 24,
प्रत्येक अनुभाग के आरंभ और अंत, दोनों को सुरक्षित रखा जाता है; ट्रंकेशन लागू होने पर बीच की सामग्री हटा दी जाती है।
क्या बना रहता है बनाम क्या काटा जाता है
| सामग्री | minimal | standard | aggressive |
|---|---|---|---|
| त्रुटियाँ / स्टैक ट्रेस | ✅ सुरक्षित | ✅ सुरक्षित | ✅ सुरक्षित |
| परीक्षण विफलताएँ | ✅ सुरक्षित | ✅ सुरक्षित | ✅ सुरक्षित |
| बिल्ड त्रुटियाँ | ✅ सुरक्षित | ✅ सुरक्षित | ✅ सुरक्षित |
| परीक्षण सफलताएँ (विस्तृत) | ✅ सुरक्षित | 🟡 संक्षिप्त | 🟡 संक्षिप्त |
| नियमित आउटपुट (जानकारी लॉग) | 🟡 संक्षिप्त | 🟡 संक्षिप्त | ❌ हटाया गया |
| प्रगति बार | 🟡 संक्षिप्त | ❌ हटाया गया | ❌ हटाया गया |
| बैनर / ASCII कला | 🟡 संक्षिप्त | ❌ हटाया गया | ❌ हटाया गया |
सही तीव्रता चुनना
क्या संदर्भ खोना विनाशकारी है?
│
┌───────────┼───────────┐
│ │ │
हाँ नहीं निश्चित नहीं
│ │ │
▼ │ │
minimal │ │
│ │ │
│ ▼ ▼
│ थ्रूपुट कितना पहले `standard` आज़माएँ
│ महत्वपूर्ण है? (80% मामलों में
│ │ काम करता है)
│ ┌────┴────┐
│ │ │
│ कम अधिक
│ │ │
│ ▼ ▼
│ standard aggressive
│ │ │
└──────┴─────────┘
तीव्रता कॉन्फ़िगर करना
प्रति-कॉम्बो (कॉम्बो कॉन्फ़िगरेशन में):
{
"combo": "my-coding-combo",
"routing": {/* ... */},
"compression": {
"engine": "rtk",
"intensity": "aggressive"
}
}
प्रोग्राम के माध्यम से:
rtkEngine (@omniroute/open-sse/services/compression/engines/rtk) एक
CompressionEngine है और इसमें कोई updateConfig विधि नहीं है। इसके बजाय रजिस्ट्री हेल्पर
के माध्यम से इंजन का कॉन्फ़िगरेशन अपडेट करें:
import { updateEngineConfig } from "@omniroute/open-sse/services/compression/engines/registry";
updateEngineConfig("rtk", { intensity: "aggressive" });
प्रभाव सत्यापित करना
यह पुष्टि करने के लिए कि आपका फ़िल्टर आपकी चुनी गई तीव्रता पर सुरक्षित है, सत्यापन गेट (नीचे देखें) का उपयोग करें:
import { runRtkFilterTests } from "omniroute/compression/engines/rtk/verify";
const result = runRtkFilterTests({ intensity: "aggressive" });
if (!result.passed) {
console.error("आक्रामक तीव्रता पर फ़िल्टर विफल हुए");
}
कस्टम फ़िल्टर डेवलपमेंट (v3.8.16+)
engines/rtk/filters/ डायरेक्टरी में 49+ बिल्ट-इन फ़िल्टर JSON फ़ाइलें हैं। आप उन कस्टम टूल्स के आउटपुट को संपीड़ित करने के लिए अपने फ़िल्टर जोड़ सकते हैं जो डिफ़ॉल्ट फ़िल्टर्स में शामिल नहीं हैं।
फ़िल्टर स्कीमा (Zod)
{
"id": "string", // आवश्यक। फ़िल्टर पहचानकर्ता (kebab-case, उदाहरण: "python-traceback")
"label": "string", // आवश्यक। मानव-पठनीय फ़िल्टर नाम
"description": "string", // वैकल्पिक (डिफ़ॉल्ट: "")। फ़िल्टर क्या करता है, इसका संक्षिप्त विवरण
"category": "git|test|build|shell|docker|package|infra|cloud|generic",
"priority": number, // वैकल्पिक (0-100, डिफ़ॉल्ट: 50)। निष्पादन क्रम (अधिक मान = पहले)
"match": {
"commands": ["string"], // मिलान किए जाने वाले कमांड नाम (उदाहरण: "python", "pytest")
"patterns": ["string"], // आउटपुट से मिलान करने वाले रेगुलर एक्सप्रेशन पैटर्न
"outputTypes": ["string"] // पहचानी गई आउटपुट श्रेणियाँ (उदाहरण: "test-failure")
},
"rules": {
"stripAnsi": boolean, // वैकल्पिक (डिफ़ॉल्ट: false)। ANSI रंग कोड हटाएँ
"replace": [ // खोजने-और-बदलने के नियम (डिफ़ॉल्ट: [])
{ "pattern": "regex", "replacement": "..." }
],
"matchOutput": [ // पैटर्न मिलते ही आगे की प्रक्रिया रोकें (डिफ़ॉल्ट: [])
{
"pattern": "regex",
"message": "short summary",
"unless": "regex" // यदि यह पैटर्न मेल खाता है, तो छोड़ दें
}
],
"includePatterns": ["string"], // रखी जाने वाली पंक्तियाँ (रेगुलर एक्सप्रेशन पैटर्न, डिफ़ॉल्ट: [])
"dropPatterns": ["string"], // हटाई जाने वाली पंक्तियाँ (रेगुलर एक्सप्रेशन पैटर्न, डिफ़ॉल्ट: [])
"collapsePatterns": ["string"], // एकल आवृत्ति में समेटी जाने वाली पंक्तियाँ (डिफ़ॉल्ट: [])
"deduplicate": boolean, // वैकल्पिक (डिफ़ॉल्ट: false)। डुप्लिकेट पंक्तियाँ हटाएँ
"truncateLineAt": number, // वैकल्पिक (डिफ़ॉल्ट: 0)। पंक्तियों को अधिकतम वर्णों तक छोटा करें
"maxLines": number, // वैकल्पिक (डिफ़ॉल्ट: 0)। कुल पंक्तियों की कठोर सीमा
"headLines": number, // वैकल्पिक (डिफ़ॉल्ट: 20)। मेल खाने वाले आउटपुट की पहली N पंक्तियाँ रखें
"tailLines": number, // वैकल्पिक (डिफ़ॉल्ट: 20)। मेल खाने वाले आउटपुट की अंतिम N पंक्तियाँ रखें
"onEmpty": "string", // वैकल्पिक (डिफ़ॉल्ट: "")। सभी पंक्तियाँ फ़िल्टर हो जाने पर फ़ॉलबैक संदेश
"filterStderr": boolean // वैकल्पिक (डिफ़ॉल्ट: false)। stderr आउटपुट को भी फ़िल्टर करें
},
"preserve": {
"errorPatterns": ["string"], // वे पैटर्न जिन्हें हमेशा सुरक्षित रखा जाना चाहिए (डिफ़ॉल्ट: [])
"summaryPatterns": ["string"] // अंतिम सारांश पंक्ति के पैटर्न (डिफ़ॉल्ट: [])
},
"tests": [ // सत्यापन के लिए इनलाइन परीक्षण (डिफ़ॉल्ट: [])
{
"name": "string", // आवश्यक। परीक्षण का नाम
"input": "sample output", // आवश्यक। नमूना इनपुट टेक्स्ट
"expected": "expected output", // आवश्यक। अपेक्षित संपीड़ित आउटपुट
"command": "optional command" // वैकल्पिक। कमांड संदर्भ
}
]
}
उदाहरण: Python ट्रेसबैक फ़िल्टर
{
"id": "python-traceback",
"label": "Python Traceback Filter",
"description": "Compresses Python tracebacks to essential file/line locations and error type",
"category": "test",
"priority": 60,
"match": {
"commands": ["python", "python3", "pytest", "uv", "poetry"],
"patterns": ["Traceback \\(most recent call last\\)", "Error", "Exception"],
"outputTypes": ["error-traceback"]
},
"rules": {
"stripAnsi": true,
"includePatterns": [
"Traceback \\(most recent call last\\)",
"^\\s*File \".+\", line \\d+",
"^\\s*[A-Z][a-zA-Z]+Error:",
"^\\s*[A-Z][a-zA-Z]+Exception"
],
"dropPatterns": ["site-packages/", "^\\s+[a-z_]+\\([^)]*\\)$"],
"headLines": 5,
"tailLines": 3,
"maxLines": 25,
"filterStderr": true
},
"preserve": {
"errorPatterns": ["Error:", "Exception:", "Traceback"],
"summaryPatterns": ["^[A-Z][a-zA-Z]+(?:Error|Exception):"]
},
"tests": [
{
"name": "preserves-error-type-and-location",
"input": "Traceback (most recent call last):\n File \"app.py\", line 42, in main\n do_thing()\n File \"lib/utils.py\", line 17, in helper\n return 1 / 0\nZeroDivisionError: division by zero",
"expected": "Traceback (most recent call last):\n File \"app.py\", line 42, in main\n File \"lib/utils.py\", line 17, in helper\nZeroDivisionError: division by zero",
"command": "python app.py"
}
]
}
कस्टम फ़िल्टर लोड करना
फ़ाइल को किसी मान्यता-प्राप्त स्थान पर रखें:
~/.omniroute/rtk/filters/my-filter.json # उपयोगकर्ता-स्तर
<project>/.rtk/filters/my-filter.json # प्रोजेक्ट-स्तर
स्टार्टअप पर फ़िल्टर open-sse/services/compression/engines/rtk/filterLoader.ts में मौजूद loadRtkFilters() के माध्यम से स्वचालित रूप से लोड होते हैं। लोडर निम्न स्थानों से फ़िल्टर खोजता है:
- बिल्ट-इन कैटलॉग:
open-sse/services/compression/engines/rtk/filters/ - उपयोगकर्ता डायरेक्टरी:
~/.omniroute/rtk/filters/ - प्रोजेक्ट डायरेक्टरी:
<project>/.rtk/filters/
फ़िल्टर को प्रोग्रामेटिक रूप से लोड करने के लिए:
import { loadRtkFilters } from "@omniroute/open-sse/services/compression/engines/rtk/filterLoader";
// विकल्प: customFiltersEnabled (उपयोगकर्ता/प्रोजेक्ट फ़िल्टर लोड करें, डिफ़ॉल्ट रूप से चालू),
// trustProjectFilters, refresh.
const filters = loadRtkFilters({ customFiltersEnabled: true });
सत्यापन
लोड किए जाते समय फ़िल्टर को Zod स्कीमा के विरुद्ध सत्यापित किया जाता है। गलत संरचना वाला फ़िल्टर लोड होने में विफल रहेगा और एक त्रुटि लॉग करेगा:
RTK_FILTER_LOADER: filter "my-filter" failed validation:
- rules.replace.0.pattern: Invalid regex
- match.commands: must not be empty
इंस्टॉल किए गए सभी फ़िल्टर सत्यापित करने के लिए, runRtkFilterTests() को कॉल करें, जिसे open-sse/services/compression/engines/rtk/verify.ts से एक्सपोर्ट किया गया है।
सर्वोत्तम अभ्यास
- हमेशा
tests[]शामिल करें — ये साबित करते हैं कि आपका फ़िल्टर काम करता है और रिग्रेशन रोकते हैं - शॉर्ट-सर्किट के लिए
matchOutputका उपयोग करें — यदि एक पंक्ति पूरी बात बता देती है, तो पूरे ब्लॉक को बदल दें stripके बजायkeepको प्राथमिकता दें — स्पष्ट "हमेशा सुरक्षित रखें" नियम, "हमेशा हटाएँ" नियमों से अधिक सुरक्षित होते हैं- तीनों इंटेंसिटी स्तरों पर परीक्षण करें —
minimalको कुछ नहीं करना चाहिए, जबकिaggressiveको फिर भी त्रुटियों को सुरक्षित रखना चाहिए unlessफ़ील्ड का उपयोग करें — "यदि X मौजूद है, तो ट्रिगर न करें" के साथ शॉर्ट-सर्किट को सुरक्षित करें
रॉ आउटपुट रिकवरी और सत्यापन गेट
जब RTK आउटपुट को अत्यधिक संपीड़ित करता है, तो आप डीबगिंग, ऑडिट या रीप्ले के लिए मूल टेक्स्ट पुनर्प्राप्त कर सकते हैं।
रॉ आउटपुट रिकवरी कैसे काम करती है
मूल आउटपुट (10K टोकन)
│
▼
RTK संपीड़न (rawOutput.enabled=true के साथ)
│
├─▶ संपीड़ित आउटपुट (2K टोकन) ──▶ LLM को
│
└─▶ मूल आउटपुट (10K टोकन) ──▶ DB में संग्रहीत
(request_id द्वारा लिंक किया गया)
रॉ आउटपुट स्टोरेज सक्षम करना
प्रति-अनुरोध (कॉम्बो कॉन्फ़िगरेशन में):
{
"compression": {
"engine": "rtk",
"intensity": "aggressive",
"rawOutput": {
"enabled": true,
"maxBytes": 1048576 // 1MB सीमा
}
}
}
डिफ़ॉल्ट: rawOutput.enabled: false (स्टोरेज बचाता है)।
स्टोरेज लागत
| प्रति-अनुरोध | 1MB सीमा | 10MB सीमा |
|---|---|---|
| औसत संपीड़ित आउटपुट | ~5KB | ~5KB |
| संग्रहीत रॉ आउटपुट | ~50-500KB | ~500KB-5MB |
| प्रतिदिन 1000 अनुरोधों के साथ | 50-500MB/दिन | 500MB-5GB/दिन |
अनुशंसा: रॉ आउटपुट केवल डीबगिंग सत्रों या सैंपल किए गए ऑडिट के लिए सक्षम करें, इसे हमेशा चालू न रखें।
मूल आउटपुट पुनर्प्राप्त करना
import { readRtkRawOutput } from "omniroute/compression/engines/rtk/rawOutput";
const raw = readRtkRawOutput(pointerId); // कंप्रेशन आँकड़ों से pointerId
if (raw) {
console.log("Original output:", raw);
}
कंप्रेशन के बाद pointerId, CompressionStats.rtkRawOutputPointers[] में लौटाया जाता है।
फ़ंक्शन सिग्नेचर के लिए open-sse/services/compression/engines/rtk/rawOutput.ts:102 देखें।
सत्यापन गेट
RTK फ़िल्टर सत्यापन (open-sse/services/compression/engines/rtk/verify.ts) सभी फ़िल्टरों को उनके tests[] के विरुद्ध सत्यापित करता है और सुनिश्चित करता है कि सभी 3 तीव्रता स्तरों पर व्यवहार सही हो।
सत्यापन चलाने के लिए runRtkFilterTests() को कॉल करें:
import { runRtkFilterTests } from "open-sse/services/compression/engines/rtk/verify";
const result = runRtkFilterTests();
console.log(`Passed: ${result.outcomes.filter((o) => o.passed).length}`);
console.log(`Failed: ${result.outcomes.filter((o) => !o.passed).length}`);
if (!result.passed) {
console.error("Filters failed verification");
result.outcomes
.filter((o) => !o.passed)
.forEach((o) => {
console.error(
` - ${o.filterId} / ${o.testName}: expected "${o.expected}", got "${o.actual}"`
);
});
}
यह क्या सत्यापित करता है:
- प्रत्येक फ़िल्टर लोड होता है और स्कीमा सत्यापन पास करता है
- प्रत्येक
tests[]प्रविष्टि अपेक्षित आउटपुट उत्पन्न करती है minimalतीव्रता कोई परिवर्तन नहीं करती (मूल को सुरक्षित रखती है, केवल संरचनात्मक फ़िल्टर लागू करती है)aggressiveतीव्रता त्रुटियों, परीक्षण विफलताओं और स्टैक ट्रेस को सुरक्षित रखती है- संपीड़ित आउटपुट कभी भी मूल इनपुट से बड़ा नहीं होता
-
स्रोत:
open-sse/services/compression/engines/rtk/(63 फ़ाइलें, ~70KB) -
फ़िल्टर परिवर्तन मर्ज करने से पहले — हमेशा सुनिश्चित करें कि परीक्षण पास हों
-
RTK इंजन अपग्रेड करने के बाद — स्कीमा बदल चुका हो सकता है
-
निगरानी के दौरान समय-समय पर — परीक्षण फ़िक्स्चर में ड्रिफ़्ट से सुरक्षा करता है
-
नया टूल/कमांड परिवार जोड़ते समय — प्रमाणित करता है कि नया फ़िल्टर काम करता है
यह भी देखें
- COMPRESSION_GUIDE.md — संपूर्ण कम्प्रेशन पाइपलाइन का अवलोकन
- COMPRESSION_ENGINES.md — इंजन रजिस्ट्री और अंतर्निहित इंजन
- EXTENDING_COMPRESSION.md — कस्टम इंजन, भाषा पैक और स्टैक्ड पाइपलाइन
- स्रोत:
open-sse/services/compression/engines/rtk/(63 फ़ाइलें, ~70KB)