# πŸ“¦ @goodandready/dsh-agent-loop-guard

Аварийный ΠΏΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΡŒ ΠΎΡ‚ зацикливания Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² инструмСнтов ΠΈ тСкстового ΠΏΠΎΡ‚ΠΎΠΊΠ° Π°Π³Π΅Π½Ρ‚Π° для DeepSeek Harness

npm version license DSH Plugin Node version

ВсС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π°Π²Ρ‚ΠΎΡ€Π°

πŸ‡¬πŸ‡§ English β€’ πŸ‡·πŸ‡Ί Русский β€’ πŸ‡¨πŸ‡³ δΈ­ζ–‡θ―΄ζ˜Ž

⭐ Если Π²Π°ΠΌ нравится этот ΠΏΠ»Π°Π³ΠΈΠ½, ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΅ΠΌΡƒ Π·Π²Π΅Π·Π΄Ρƒ Π½Π° GitHub β€” это ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мСня Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ дальшС.

πŸ› Если Π²Ρ‹ нашли Π±Π°Π³ ΠΈΠ»ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», создайтС issue Π½Π° GitHub Π½Π° любом языкС β€” я Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ вашС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсий ΠΏΠ»Π°Π³ΠΈΠ½Π°.
--- ## ⚑ НазначСниС ΠΈ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠ°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ многоэтапных Π·Π°Π΄Π°Ρ‡ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ ИИ-Π°Π³Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ‚Π»ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ: бСсконСчно ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„Π°ΠΉΠ» Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ€Π°Π· Π·Π° Ρ€Π°Π·ΠΎΠΌ Π±Π΅Π·ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ инструмСнт с ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ строки Π² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΌ ΠΎΡ‚Π²Π΅Ρ‚Π΅. Π’Π°ΠΊΠΈΠ΅ зацикливания приводят ΠΊ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠΌΡƒ ΠΈΡΡ‡Π΅Ρ€ΠΏΠ°Π½ΠΈΡŽ контСкста ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², Π·Π°ΠΌΠΎΡ€ΠΎΠ·ΠΊΠ΅ интСрфСйса ΠΈ бСсполСзной Ρ‚Ρ€Π°Ρ‚Π΅ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π°. **`@goodandready/dsh-agent-loop-guard`** β€” Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ для срСды выполнСния DeepSeek Harness, ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅ Π°Π³Π΅Π½Ρ‚Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ хоста Π±Π΅Π· Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π² ядро DSH: 1. **ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ прогрСсса инструмСнтов (Progress-Aware Epochs)**: ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ инструмСнтов Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ *Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°*, ΠΊΠΎΠ³Π΄Π° с ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Π½Π΅ измСнилось состояниС систСмы ΠΈΠ»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π›Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `Ρ‡Ρ‚Π΅Π½ΠΈΠ΅` βž” `ΠΏΡ€Π°Π²ΠΊΠ°` βž” `Ρ‡Ρ‚Π΅Π½ΠΈΠ΅` βž” `ΠΏΡ€Π°Π²ΠΊΠ°`) Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ свободно. 2. **ΠŸΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ тСкста (Assistant Output Loop Guard)**: отслСТиваСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… строк ΠΈ Ρ†Π΅Π»Ρ‹Ρ… многострочных Π°Π±Π·Π°Ρ†Π΅Π² ΠΌΠ΅ΠΆΠ΄Ρƒ шагами ΠΈ Ρ…ΠΎΠ΄Π°ΠΌΠΈ, выполняя ΠΌΡΠ³ΠΊΡƒΡŽ ΠΎΡ‚ΠΌΠ΅Π½Ρƒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ истории Π΄ΠΈΠ°Π»ΠΎΠ³Π°. 3. **БСзопасный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² Ρ€Π΅ΠΆΠΈΠΌ ΠΎΡ‚Π²Π΅Ρ‚Π° (Answer-Only Mode)**: ΠΏΡ€ΠΈ фиксации зацикливания инструмСнт Π½Π΅ просто ΠΏΠ°Π΄Π°Π΅Ρ‚ с ошибкой, Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ структурированный ΠΎΡ‚ΠΊΠ°Π·, ΠΎΠ±ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ модСль ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тСкстовый ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ с объяснСниСм ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. 4. **ΠœΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСкрСтов Π² ΠΆΡƒΡ€Π½Π°Π»Π°Ρ…**: Π»ΡŽΠ±Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ доступа, Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ автоматичСски Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° `[redacted]` Π² диагностичСских Π»ΠΎΠ³Π°Ρ…. --- ## πŸ—οΈ АрхитСктура Ρ€Π°Π±ΠΎΡ‚Ρ‹ ```mermaid graph TD subgraph DSH ["Π‘Ρ€Π΅Π΄Π° выполнСния DeepSeek Harness"] Turn["Π₯ΠΎΠ΄ выполнСния Π°Π³Π΅Π½Ρ‚Π°
(РассуТдСниС LLM ΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ инструмСнтов)"] Stream["ΠŸΠΎΡ‚ΠΎΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ассистСнта
(text-delta ΠΈ block-end)"] UserStop["Анализ сообщСний ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
(Π‘Ρ‚ΠΎΠΏ-слова: стоп, Ρ…Π²Π°Ρ‚ΠΈΡ‚, ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈ, пСтля)"] end subgraph LoopGuard ["@goodandready/dsh-agent-loop-guard"] ToolInterceptor["ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‡ΠΈΠΊ ctx.tools.guard
(ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° denyReason ΠΏΠ΅Ρ€Π΅Π΄ запуском)"] ProgressEpoch["Π’Ρ€Π΅ΠΊΠ΅Ρ€ эпох прогрСсса
(Π₯ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²)"] OutputState["AssistantOutputGuardState
(Анализ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΎΠ² строк ΠΈ Π±Π»ΠΎΠΊΠΎΠ²)"] SafeLogger["Банитизация ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ²
(ΠœΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Bearer/API Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²)"] end subgraph Actions ["ДСйствия Π·Π°Ρ‰ΠΈΡ‚Ρ‹"] Allow["Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ инструмСнта
(Новый Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ / зафиксирован прогрСсс)"] Deny["ΠžΡ‚ΠΊΠ°Π· с ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π² Ρ€Π΅ΠΆΠΈΠΌ ΠΎΡ‚Π²Π΅Ρ‚Π°
(Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ тСкстового Ρ€Π΅Π·ΡŽΠΌΠ΅ ΠΎΡ‚ Π°Π³Π΅Π½Ρ‚Π°)"] Cancel["Мягкая ΠΎΡ‚ΠΌΠ΅Π½Π° сСссии
(keepInbox: false ΠΏΡ€ΠΈ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠΈ тСкста)"] end Turn -->|agent/pre-step ΠΈ Π²Ρ‹Π·ΠΎΠ² инструмСнта| ToolInterceptor ToolInterceptor --> ProgressEpoch ProgressEpoch -->|ИзмСнСниС состояния ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΎ| Allow ProgressEpoch -->|Π”ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ Π»ΠΈΠΌΠΈΡ‚| Deny Stream --> OutputState OutputState -->|ΠŸΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ Π»ΠΈΠΌΠΈΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΎΠ² тСкста| Cancel UserStop -->|МгновСнная фиксация остановки| Deny Deny -.-> SafeLogger Cancel -.-> SafeLogger ``` --- ## ✨ ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Ρ€Π°Π·Π±ΠΎΡ€ возмоТностСй ### 1. Π­ΠΏΠΎΡ…ΠΈ прогрСсса ΠΈ диффСрСнциация Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… счётчиков, ΠΏΠ»Π°Π³ΠΈΠ½ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ дСйствий Π°Π³Π΅Π½Ρ‚Π°: * **Π”Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ**: строит ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ сигнатуры Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (`callFingerprint`) ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (`resultFingerprint`). * **Π­ΠΏΠΎΡ…ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ дСйствия**: ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ (измСнился Ρ„Π°ΠΉΠ», вСрнулся Π½ΠΎΠ²Ρ‹ΠΉ diff ΠΈΠ»ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ прогрСсса), счётчик холостых ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ обнуляСтся. * **Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ сСтСвых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ**: Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ эндпоинты (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Π½Ρ‹Π΅ API-запросы Gitea ΠΈΠ»ΠΈ curl) Π½Π΅ ΡΠΊΠ»Π΅ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ URL. * **Π‘Π΅Π»Ρ‹ΠΉ список инструмСнтов отслСТивания Π·Π°Π΄Π°Ρ‡**: инструмСнты вСдСния списков Π·Π°Π΄Π°Ρ‡ (`todo_write`) ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ собствСнным нСзависимым Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ, прСдотвращая Π»ΠΎΠΆΠ½Ρ‹Π΅ срабатывания ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Ρ‡Π΅ΠΊ-листов. ### 2. ΠšΠΎΠ΄Ρ‹ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΉ ΠΈ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ прСдохранитСля | Код Π·Π°Ρ‰ΠΈΡ‚Ρ‹ | УсловиС срабатывания | Π›ΠΈΠΌΠΈΡ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ | ДСйствиС ΠΏΠ»Π°Π³ΠΈΠ½Π° | |:---|:---|:---|:---| | `LOOP_GUARD_STOP` | ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ остановки (`стоп`, `Ρ…Π²Π°Ρ‚ΠΈΡ‚`, `ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈ`, `ΠΎΡ‚Π²Π΅Ρ‚ΡŒ`, `пСтля`, `stop`, `halt`, `cancel`) | МгновСнно | Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ инструмСнтов; Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ тСкстовый ΠΎΡ‚Π²Π΅Ρ‚ | | `LOOP_GUARD_DUPLICATE` | ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ | 1 ΠΏΠΎΠ²Ρ‚ΠΎΡ€ | ΠŸΡ€Π΅ΡΠ΅ΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠΏΡ‚Π°Π½ΠΈΠ΅ Π½Π° мСстС; Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ | | `LOOP_GUARD_REPEAT` | Π§Π΅Ρ€Π΅Π΄Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² инструмСнтов ΠΎΠ΄Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π±Π΅Π· измСнСния состояния | `maxCallsPerRepeatGroup` (5) | ΠžΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½Ρ‹Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Ρ‹ | | `LOOP_GUARD_LIMIT` | Π‘ΡƒΠΌΠΌΠ°Ρ€Π½ΠΎΠ΅ число бСсплодных ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ Π·Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ…ΠΎΠ΄ | `maxToolAttemptsPerTurn` (64) | ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠΉ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ холостых дСйствий | | `LOOP_GUARD_PROGRESS_LIMIT` | ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ progress-инструмСнтов Π±Π΅Π· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ продвиТСния | `maxProgressToolCallsPerTurn` (16) | Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ todo | | `LOOP_GUARD_OUTPUT` | МодСль Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ строки ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΈ тСкста | `maxRepeatedAssistantLines` (5) | Мягко ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ сСссию Ρ‡Π΅Ρ€Π΅Π· `agent.cancel()` | ### 3. ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ зацикливания тСкстового Π²Ρ‹Π²ΠΎΠ΄Π° Иногда модСль зацикливаСтся Π½Π΅ Π½Π° инструмСнтах, Π° Π½Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ тСкста (повторяСт ΠΎΠ΄Π½Ρƒ Ρ„Ρ€Π°Π·Ρƒ Π² Ρ†ΠΈΠΊΠ»Π΅ streaming): * **Нормализация строк**: ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ символы пСрСноса ΠΈ мноТСствСнныС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. * **ДСтСкция Π°Π±Π·Π°Ρ†Π΅Π²**: Ρ…ΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊΠΈ тСкста Π΄ΠΎ `maxAssistantBlockChars` (16 384 Π±Π°ΠΉΡ‚). * **Π˜ΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚ Π²ΠΎ врСмя выполнСния инструмСнтов**: ΠΏΠΎΠΊΠ° Π°Π³Π΅Π½Ρ‚ ΠΆΠ΄Ρ‘Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΎΡ‚ΠΌΠ΅Π½Π° тСкста Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ блокируСтся. * **Чистый сброс**: ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ сообщСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ состояниС Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ очищаСтся. ### 4. Банитизация ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° приватности ВсС ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ записи ΠΆΡƒΡ€Π½Π°Π»Π° автоматичСски ΠΌΠ°ΡΠΊΠΈΡ€ΡƒΡŽΡ‚ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: * Π’ΠΎΠΊΠ΅Π½Ρ‹ Bearer, ΠΏΠ°Ρ€ΠΎΠ»ΠΈ, cookie ΠΈ сСкрСты Π² query-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… (`token=`, `api-key=`, `secret=`) Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° `[redacted]` Π΄ΠΎ записи Π² Π»ΠΎΠ³. * ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π³Π»ΡƒΠ±ΠΈΠ½Π° влоТСнности Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для прСдотвращСния ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… JSON-структур. ### 5. Π’Π΅Π±-интСрфСйс, Тивая тСлСмСтрия ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ * **Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° настроСк**: Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ встроСна Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ *«Настройки β†’ ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ β†’ Настройки ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²Β»* (`settings.plugin.item`, order 95). * **Π”ΠΈΠ·Π°ΠΉΠ½-систСма DSH**: построСна строго Π½Π° систСмных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… DSH (`--dsw-alias-*`), доступных связках `