इसे छोड़कर कंटेंट पर जाएं

सीक्रेट ऑब्फस्केशन

संवेदनशील मानों (API कुंजियाँ, टोकन, पासवर्ड) को LLM प्रदाताओं को भेजे जाने से रोकता है। जब सक्षम होता है, तो प्रक्रिया से बाहर जाने से पहले सीक्रेट को निर्धारक प्लेसहोल्डर से बदल दिया जाता है, और मॉडल द्वारा लौटाए गए टूल कॉल आर्गुमेंट में पुनर्स्थापित कर दिया जाता है।

डिफ़ॉल्ट रूप से सक्षम है। /settings UI के माध्यम से या सीधे config.yml में टॉगल करें:

secrets:
enabled: false

यह कैसे काम करता है

Section titled “यह कैसे काम करता है”
  1. सेशन स्टार्टअप पर, सीक्रेट दो स्रोतों से एकत्र किए जाते हैं:

    • एनवायरनमेंट वेरिएबल जो सामान्य सीक्रेट पैटर्न (*_KEY, *_SECRET, *_TOKEN, *_PASSWORD, आदि) से मेल खाते हों और जिनका मान >= 8 अक्षर हो
    • secrets.yml फ़ाइलें (नीचे देखें)
  2. LLM को भेजे जाने वाले आउटबाउंड संदेशों में सभी सीक्रेट मानों को <<$env:S0>>, <<$env:S1>>, आदि जैसे प्लेसहोल्डर से बदल दिया जाता है।

  3. मॉडल द्वारा लौटाए गए टूल कॉल आर्गुमेंट को डीप-वॉक किया जाता है और निष्पादन से पहले प्लेसहोल्डर को मूल मानों में पुनर्स्थापित किया जाता है।

दो मोड नियंत्रित करते हैं कि प्रत्येक सीक्रेट के साथ क्या होता है:

मोडव्यवहारउलटनीय
obfuscate (डिफ़ॉल्ट)इंडेक्स्ड प्लेसहोल्डर <<$env:SN>> से बदला जाता हैहाँ (टूल आर्गुमेंट में डी-ऑब्फस्केट होता है)
replaceनिर्धारक समान-लंबाई वाली स्ट्रिंग से बदला जाता हैनहीं (एकतरफा)

YAML में कस्टम सीक्रेट एंट्री परिभाषित करें। दो स्थानों की जाँच की जाती है:

स्तरपथउद्देश्य
वैश्विक~/.xcsh/agent/secrets.ymlसभी प्रोजेक्ट में सीक्रेट
प्रोजेक्ट<cwd>/.xcsh/secrets.ymlप्रोजेक्ट-विशिष्ट सीक्रेट

प्रोजेक्ट एंट्री मिलान करने वाले content वाली वैश्विक एंट्री को ओवरराइड करती हैं।

ऐरे में प्रत्येक एंट्री के ये फ़ील्ड होते हैं:

फ़ील्डप्रकारआवश्यकविवरण
type"plain" या "regex"हाँमिलान रणनीति
contentस्ट्रिंगहाँसीक्रेट मान (plain) या regex पैटर्न (regex)
mode"obfuscate" या "replace"नहींडिफ़ॉल्ट: "obfuscate"
replacementस्ट्रिंगनहींकस्टम प्रतिस्थापन (केवल replace मोड)
flagsस्ट्रिंगनहींRegex फ़्लैग (केवल regex प्रकार)
# एक विशिष्ट API कुंजी को ऑब्फस्केट करें (डिफ़ॉल्ट मोड)
- type: plain
content: sk-proj-abc123def456
# एक डेटाबेस पासवर्ड को निश्चित स्ट्रिंग से बदलें
- type: plain
content: hunter2
mode: replace
replacement: "********"
# किसी भी AWS-स्टाइल कुंजी को ऑब्फस्केट करें
- type: regex
content: "AKIA[0-9A-Z]{16}"
# स्पष्ट फ़्लैग के साथ केस-असंवेदनशील मिलान
- type: regex
content: "api[_-]?key\\s*=\\s*\\w+"
flags: "i"
# Regex लिटरल सिंटैक्स (एक स्ट्रिंग में पैटर्न और फ़्लैग)
- type: regex
content: "/bearer\\s+[a-zA-Z0-9._~+\\/=-]+/i"

Regex एंट्री हमेशा वैश्विक रूप से स्कैन करती हैं (g फ़्लैग स्वचालित रूप से लागू होता है)। Regex लिटरल सिंटैक्स /pattern/flags को अलग content + flags फ़ील्ड के विकल्प के रूप में समर्थित है। पैटर्न के भीतर एस्केप्ड स्लैश (\\/) को सही ढंग से संभाला जाता है।

# कनेक्शन स्ट्रिंग को एकतरफा बदलें (उलटनीय नहीं)
- type: regex
content: "postgres://[^\\s]+"
mode: replace
replacement: "postgres://***"

एनवायरनमेंट वेरिएबल डिटेक्शन के साथ इंटरेक्शन

Section titled “एनवायरनमेंट वेरिएबल डिटेक्शन के साथ इंटरेक्शन”

एनवायरनमेंट वेरिएबल हमेशा पहले एकत्र किए जाते हैं। फ़ाइल-परिभाषित एंट्री बाद में जोड़ी जाती हैं, इसलिए फ़ाइल एंट्री उन सीक्रेट को कवर कर सकती हैं जो एनवायरनमेंट वेरिएबल में नहीं हैं (कॉन्फ़िग फ़ाइलें, हार्डकोडेड मान, आदि)। यदि एक ही मान दोनों में दिखाई देता है, तो फ़ाइल एंट्री का मोड प्राथमिकता लेता है।

  • src/secrets/index.ts — लोडिंग, मर्जिंग, एनवायरनमेंट वेरिएबल संग्रह
  • src/secrets/obfuscator.tsSecretObfuscator क्लास, प्लेसहोल्डर जनरेशन, मैसेज ऑब्फस्केशन
  • src/secrets/regex.ts — regex लिटरल पार्सिंग और कम्पाइलेशन
  • src/config/settings-schema.tssecrets.enabled सेटिंग परिभाषा