# dsh-repetition-guard

[English](README.md) | Česky

Zastaví „zacyklení" modelu při generování — když začne dokola opakovat jedno
slovo (`wait wait wait …`, `počkat počkat …`), klidně stovky/tisíckrát, a pálí
tak tokeny bez užitku.

## Jak to funguje

Plugin se napojí na `llm/stream` waterfall (oficiální rozšířovací bod DSH kolem
každého streamovaného modelového callu) a hlídá jak `reasoning-delta` chunky
(text přemýšlení), tak `text-delta` chunky (viditelná odpověď). Jakmile konec
kteréhokoli proudu obsahuje **12 stejných slov za sebou** (práh jde měnit),
stream ukončí.

Ukončení streamu donutí adapter abortnout `fetch` → provider přestane generovat
další tokeny. Zbytek se chová jako normální konec (assembler bere finish =
`stop`), takže turn skončí čistě s tím, co se stihlo vygenerovat před zacyklením.

## Proč to nemůže ublížit normálnímu výstupu

- Spouští se až na **≥ 12 stejných slov za sebou** — normální reasoning ani text
  takový úsek neobsahuje (jedno „wait" je v pohodě, dvanáct ne).
- Kontroluje jen posledních `tailChars` znaků (160), takže to nespomaluje stream
  ani nezabírá paměť.
- Nic nemaže — jen přestane číst stream; už vygenerované bloky zůstávají.

## Instalace

```bash
dsh plugin --profile web add dsh-repetition-guard
```

Po restartu session hlídá všechny modelové cally (vč. subagentů).

## Konfigurace

- práh slov: `config.threshold` (výchozí 12)
- velikost kontrolovaného ocasu: `config.tailChars` (výchozí 160)
- při zásahu zapíše: `repetition-guard: stopped a repeated-word loop…`

## Licence

MIT
