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

TTSR इंजेक्शन जीवनचक्र

यह दस्तावेज़ वर्तमान Time Traveling Stream Rules (TTSR) रनटाइम पथ को कवर करता है, जिसमें नियम खोज से लेकर स्ट्रीम रुकावट, पुनः प्रयास इंजेक्शन, एक्सटेंशन सूचनाएं, और सत्र-स्थिति प्रबंधन शामिल हैं।

कार्यान्वयन फ़ाइलें

Section titled “कार्यान्वयन फ़ाइलें”

1. खोज फ़ीड और नियम पंजीकरण

Section titled “1. खोज फ़ीड और नियम पंजीकरण”

सत्र निर्माण के समय, createAgentSession() सभी खोजे गए नियमों को लोड करता है और एक TtsrManager बनाता है:

const ttsrSettings = settings.getGroup("ttsr");
const ttsrManager = new TtsrManager(ttsrSettings);
const rulesResult = await loadCapability<Rule>(ruleCapability.id, { cwd });
for (const rule of rulesResult.items) {
if (rule.ttsrTrigger) ttsrManager.addRule(rule);
}

पूर्व-पंजीकरण डीडुप्लिकेशन व्यवहार

Section titled “पूर्व-पंजीकरण डीडुप्लिकेशन व्यवहार”

loadCapability("rules") rule.name के आधार पर डीडुप्लिकेट करता है, जिसमें पहला-जीतता-है (first-wins) शब्दार्थ होता है (उच्च प्रदाता प्राथमिकता पहले)। छायांकित डुप्लिकेट TTSR पंजीकरण से पहले हटा दिए जाते हैं।

TtsrManager.addRule() व्यवहार

Section titled “TtsrManager.addRule() व्यवहार”

पंजीकरण छोड़ दिया जाता है जब:

  • rule.ttsrTrigger अनुपस्थित हो
  • समान rule.name वाला नियम पहले से इस प्रबंधक में पंजीकृत हो
  • regex संकलित होने में विफल हो (new RegExp(rule.ttsrTrigger) त्रुटि फेंके)

अमान्य regex ट्रिगर चेतावनी के रूप में लॉग किए जाते हैं और अनदेखा कर दिए जाते हैं; सत्र स्टार्टअप जारी रहता है।

TtsrSettings.enabled को प्रबंधक में लोड किया जाता है लेकिन वर्तमान में रनटाइम गेटिंग में जाँचा नहीं जाता। यदि नियम मौजूद हैं, तो मिलान फिर भी चलता है।

2. स्ट्रीमिंग मॉनिटर जीवनचक्र

Section titled “2. स्ट्रीमिंग मॉनिटर जीवनचक्र”

TTSR पहचान AgentSession.#handleAgentEvent के अंदर चलती है।

turn_start पर, स्ट्रीम बफ़र रीसेट होता है:

  • ttsrManager.resetBuffer()

स्ट्रीम के दौरान (message_update)

Section titled “स्ट्रीम के दौरान (message_update)”

जब सहायक अपडेट आते हैं और नियम मौजूद होते हैं:

  • text_delta और toolcall_delta की निगरानी करें
  • डेल्टा को प्रबंधक बफ़र में जोड़ें
  • check(buffer) को कॉल करें

check() पंजीकृत नियमों पर पुनरावृत्ति करता है और उन सभी मिलान करने वाले नियमों को लौटाता है जो दोहराव नीति (#canTrigger) को पास करते हैं।

3. ट्रिगर निर्णय और तत्काल निरस्तीकरण पथ

Section titled “3. ट्रिगर निर्णय और तत्काल निरस्तीकरण पथ”

जब एक या अधिक नियम मेल खाते हैं:

  1. markInjected(matches) प्रबंधक इंजेक्शन स्थिति में नियम नामों को रिकॉर्ड करता है।
  2. मेल खाने वाले नियम #pendingTtsrInjections में कतारबद्ध होते हैं।
  3. #ttsrAbortPending = true
  4. agent.abort() तुरंत कॉल किया जाता है।
  5. ttsr_triggered इवेंट असिंक्रोनस रूप से उत्सर्जित होता है (फ़ायर-एंड-फ़ॉरगेट)।
  6. पुनः प्रयास कार्य setTimeout(..., 50) के माध्यम से शेड्यूल किया जाता है।

निरस्तीकरण एक्सटेंशन कॉलबैक पर अवरुद्ध नहीं होता।

4. पुनः प्रयास शेड्यूलिंग, संदर्भ मोड, और रिमाइंडर इंजेक्शन

Section titled “4. पुनः प्रयास शेड्यूलिंग, संदर्भ मोड, और रिमाइंडर इंजेक्शन”

50ms टाइमआउट के बाद:

  1. #ttsrAbortPending = false
  2. ttsrManager.getSettings().contextMode पढ़ें
  3. यदि contextMode === "discard" है, तो agent.popMessage() के साथ आंशिक सहायक आउटपुट को छोड़ दें
  4. ttsr-interrupt.md टेम्पलेट का उपयोग करके लंबित नियमों से इंजेक्शन सामग्री बनाएं
  5. प्रति नियम एक <system-interrupt ...> ब्लॉक वाला एक सिंथेटिक उपयोगकर्ता संदेश जोड़ें
  6. पुनः जनरेशन के लिए agent.continue() कॉल करें

टेम्पलेट पेलोड है:

<system-interrupt reason="rule_violation" rule="{{name}}" path="{{path}}">
...
{{content}}
</system-interrupt>

सामग्री जनरेशन के बाद लंबित इंजेक्शन साफ़ कर दिए जाते हैं।

आंशिक आउटपुट पर contextMode व्यवहार

Section titled “आंशिक आउटपुट पर contextMode व्यवहार”
  • discard: पुनः प्रयास से पहले आंशिक/निरस्त सहायक संदेश हटा दिया जाता है।
  • keep: आंशिक सहायक आउटपुट वार्तालाप स्थिति में बना रहता है; रिमाइंडर उसके बाद जोड़ा जाता है।

5. दोहराव नीति और अंतराल तर्क

Section titled “5. दोहराव नीति और अंतराल तर्क”

TtsrManager #messageCount और प्रति-नियम lastInjectedAt को ट्रैक करता है।

एक नियम इंजेक्शन रिकॉर्ड होने के बाद केवल एक बार ट्रिगर हो सकता है।

एक नियम तभी पुनः ट्रिगर हो सकता है जब:

  • messageCount - lastInjectedAt >= repeatGap

messageCount turn_end पर बढ़ता है, इसलिए अंतराल पूर्ण टर्न में मापा जाता है, स्ट्रीम चंक में नहीं।

6. इवेंट उत्सर्जन और एक्सटेंशन/हुक सतहें

Section titled “6. इवेंट उत्सर्जन और एक्सटेंशन/हुक सतहें”

AgentSessionEvent में शामिल है:

{ type: "ttsr_triggered"; rules: Rule[] }

#emitSessionEvent() इवेंट को यहाँ रूट करता है:

  • एक्सटेंशन श्रोता (ExtensionRunner.emit({ type: "ttsr_triggered", rules }))
  • स्थानीय सत्र सदस्य

हुक और कस्टम-टूल टाइपिंग

Section titled “हुक और कस्टम-टूल टाइपिंग”
  • एक्सटेंशन API on("ttsr_triggered", ...) को उजागर करता है
  • हुक API on("ttsr_triggered", ...) को उजागर करता है
  • कस्टम टूल onSession({ reason: "ttsr_triggered", rules }) प्राप्त करते हैं

इंटरैक्टिव-मोड रेंडरिंग अंतर

Section titled “इंटरैक्टिव-मोड रेंडरिंग अंतर”

इंटरैक्टिव मोड session.isTtsrAbortPending का उपयोग करता है ताकि TTSR रुकावट के दौरान निरस्त सहायक स्टॉप कारण को दृश्य विफलता के रूप में दिखाने से रोका जा सके, और जब इवेंट आता है तब TtsrNotificationComponent रेंडर करता है।

7. स्थायित्व और पुनः प्रारंभ स्थिति (वर्तमान कार्यान्वयन)

Section titled “7. स्थायित्व और पुनः प्रारंभ स्थिति (वर्तमान कार्यान्वयन)”

SessionManager में इंजेक्ट किए गए नियम स्थायित्व के लिए पूर्ण स्कीमा समर्थन है:

  • प्रविष्टि प्रकार: ttsr_injection
  • जोड़ने का API: appendTtsrInjection(ruleNames)
  • क्वेरी API: getInjectedTtsrRules()
  • संदर्भ पुनर्निर्माण में SessionContext.injectedTtsrRules शामिल है

TtsrManager restoreInjected(ruleNames) के माध्यम से पुनर्स्थापन का भी समर्थन करता है।

वर्तमान वायरिंग स्थिति

Section titled “वर्तमान वायरिंग स्थिति”

वर्तमान रनटाइम पथ में:

  • AgentSession TTSR ट्रिगर होने पर ttsr_injection प्रविष्टियाँ नहीं जोड़ता।
  • createAgentSession() existingSession.injectedTtsrRules को वापस ttsrManager में पुनर्स्थापित नहीं करता।

शुद्ध प्रभाव: इंजेक्ट किए गए नियम का दमन लाइव प्रक्रिया के लिए इन-मेमोरी लागू होता है, लेकिन वर्तमान में इस पथ द्वारा सत्र पुनः लोड/पुनः प्रारंभ के दौरान स्थायी/पुनर्स्थापित नहीं होता।

8. रेस सीमाएं और क्रम गारंटी

Section titled “8. रेस सीमाएं और क्रम गारंटी”

निरस्तीकरण बनाम पुनः प्रयास कॉलबैक

Section titled “निरस्तीकरण बनाम पुनः प्रयास कॉलबैक”
  • TTSR हैंडलर के दृष्टिकोण से निरस्तीकरण सिंक्रोनस है (agent.abort() तुरंत कॉल किया जाता है)
  • पुनः प्रयास टाइमर द्वारा विलंबित होता है (50ms)
  • एक्सटेंशन सूचना असिंक्रोनस है और जानबूझकर निरस्तीकरण/पुनः प्रयास शेड्यूलिंग से पहले प्रतीक्षित नहीं की जाती

एक ही स्ट्रीम विंडो में कई मिलान

Section titled “एक ही स्ट्रीम विंडो में कई मिलान”

check() सभी वर्तमान में मेल खाने वाले पात्र नियम लौटाता है। वे अगले पुनः प्रयास संदेश पर एक बैच के रूप में इंजेक्ट किए जाते हैं।

निरस्तीकरण और जारी रखने के बीच

Section titled “निरस्तीकरण और जारी रखने के बीच”

टाइमर विंडो के दौरान, स्थिति बदल सकती है (उपयोगकर्ता रुकावट, मोड क्रियाएं, अतिरिक्त इवेंट)। पुनः प्रयास कॉल सर्वोत्तम-प्रयास है: agent.continue().catch(() => {}) अनुवर्ती त्रुटियों को निगल लेता है।

9. किनारे के मामलों का सारांश

Section titled “9. किनारे के मामलों का सारांश”
  • अमान्य ttsr_trigger regex: चेतावनी के साथ छोड़ दिया जाता है; अन्य नियम जारी रहते हैं।
  • क्षमता परत पर डुप्लिकेट नियम नाम: निम्न-प्राथमिकता वाले डुप्लिकेट पंजीकरण से पहले छायांकित कर दिए जाते हैं।
  • प्रबंधक परत पर डुप्लिकेट नाम: दूसरा पंजीकरण अनदेखा कर दिया जाता है।
  • contextMode: "keep": रिमाइंडर पुनः प्रयास से पहले आंशिक उल्लंघनकारी आउटपुट संदर्भ में बना रह सकता है।
  • दोहराव-अंतराल-के-बाद turn_end पर टर्न गणना वृद्धि पर निर्भर करता है; मध्य-टर्न चंक अंतराल काउंटर को आगे नहीं बढ़ाते।