# dsh-context-compression-improved

> Улучшенный форк [dsh-context-compression-selector](https://github.com/WilliamShi666/dsh-context-compression-selector) — проверяемого селектора сжатия контекста результатов инструментов для DeepSeek Harness — с добавлением ортогонального **гейта сжатия скелетов кода**.

[English](README.md) · [中文说明](README.zh.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [Italiano](README.it.md) · [Español](README.es.md) · [Журнал изменений](CHANGELOG.ru.md) · [Руководство по установке](docs/installation.ru.md)

> [!NOTE]
> **Что этот форк добавляет к апстриму 0.1.0:**
>
> - Ортогональный **гейт сжатия скелетов кода** (`codeSkeleton.enabled`, по умолчанию выключен): при первом появлении чрезмерного свежего результата инструмента с исходным кодом можно сохранить скелет из импортов и объявлений — тела опускаются, строки с ошибками сохраняются — до того, как запустятся обычные редьюсеры.
> - Переключатель этого гейта в том же разделе настроек селектора, независимый от каждого профиля сжатия.
> - Базовую конфигурацию ESLint, подключённую к CI, цикл TDD `test:watch` и документацию на английском, упрощённом китайском, японском и корейском языках.

> [!IMPORTANT]
> Этот проект поддерживает **только модели DeepSeek**. Измерение без потерь и сжатие с потерями опираются на входящие в поставку официальные токенизаторы DeepSeek (`deepseek-v4-flash`, `deepseek-v4-pro`, `deepseek-v4-flash-vision-exp`). Во всех остальных случаях плагин работает по принципу fail-open и сохраняет исходные результаты инструментов. Полную модель безопасности см. в [апстрим-README](https://github.com/WilliamShi666/dsh-context-compression-selector#model-support-and-safety).

<!-- host-compat:begin — generated by scripts/sync-hosts.mjs from scripts/hosts.mjs; DO NOT EDIT -->
- **Поддерживаемые хосты DSH:** `0.1.0-rc.2` `0.1.0-rc.3` `0.1.0-rc.6` `0.1.0-rc.7` `0.1.0-rc.8` `0.1.1-rc.1` `0.1.1-rc.2` `0.1.2-rc.1` `0.1.5-rc.1` `0.1.5-rc.2` `0.1.5-rc.3` `0.1.7-rc.1` `0.1.7-rc.2` `0.2.0-rc.1` `0.2.0-rc.2` `0.2.1-rc.1` `0.2.1-rc.2` `0.2.1-rc.3` `0.2.1-rc.4` `0.2.1-rc.5` (20 rc по линиям 0.1.0 / 0.1.1 / 0.1.2 / 0.1.5 / 0.1.7 / 0.2.0 / 0.2.1)
<!-- host-compat:end -->

## Что это такое

Долгоживущие задачи агентов накапливают большой объём вывода инструментов. Этот плагин сообщества добавляет выбираемые и проверяемые политики сокращения контекста результатов инструментов без изменения ядра DeepSeek Harness:

- **Fresh** предварительно сжимает новый ставший чрезмерным сегмент результата инструмента до того, как модель его получит.
- **Aggregate** повторно предварительно сжимает свежий материал, если тот продолжает выходить за свой бюджет.
- **History / micro-compact** заменяет подходящие старые результаты инструментов, сохраняя недавний рабочий контекст.
- **TailTrim** — необязательный путь сокращения хвоста, доступный только в режиме Custom.
- **Native** сохраняет характерное для Harness усечение начала/середины/хвоста как отдельный явный профиль.
- **Скелет кода (новый, ортогональный гейт)** — см. ниже.

Каждое решение фиксируется: этап, редьюсер, триггер, причина пропуска и точные количества токенов, где они доступны.

## Гейт скелетов кода (новый)

Когда гейт включён, чрезмерный **свежий результат инструмента с исходным кодом** (например, большой `read_file`) сначала пытается пройти редукцию до скелета: импорты и объявления типов/функций/классов сохраняются, тела функций опускаются с маркером, а строки с ошибками внутри опущенных тел сохраняются. Если скелет невозможно построить или проверить, результат откатывается к исходной обрезке начала — гейт никогда не может сделать контекст хуже.

Свойства:

- **Ортогональность**: независим от выбранного профиля (`balanced`, `savings`, `cache-strict`, `adaptive`, `custom`, `off`, `native`). Гейт получают все профили.
- **По умолчанию выключен**: `codeSkeleton: { enabled: false }`, пока вы его не включите.
- **Зависит от измерения**: требует точного токенизатора DeepSeek; без него плагин работает по принципу fail-open.
- **Заморозка на сессию**: как и все настройки селектора, изменения затрагивают только новые наблюдаемые сессии.
- **Строгий разбор**: `codeSkeleton` должен быть в точности `{ enabled: boolean }`; некорректные значения вызывают ошибку на стороне рантайма и отображаются в браузерном UI как нечитаемые.

## UI настроек

Выберите профиль сжатия, задайте уровень срабатывания Auto Compact и включите сжатие скелетов кода в том же разделе настроек. Переключатель сохраняет значение при изменении и показывает сохранённое состояние после перезагрузки.

![UI настроек Context Compression Selector](docs/assets/context-compression-selector-settings.png)

## Установка

**Рекомендуется: установка из npm.** Одна версия обслуживает все поддерживаемые линейки Harness — `latest` несёт полный перечень из 17 rc (0.1.0-rc.2 → 0.2.1-rc.2); рантайм сам выбирает ветки кода для своей линейки.

```sh
dsh plugin --profile web add dsh-context-compression-improved@latest
dsh --profile web --dump-config
```

Из исходников (альтернатива — внутренние имена пакетов намеренно остаются апстримовскими):

```sh
git clone https://github.com/drscrewdriver/dsh-context-compression-improved.git
cd dsh-context-compression-improved
pnpm install --frozen-lockfile
pnpm build
```

Затем упакуйте пакет селектора и добавьте его в профиль Harness — полное пошаговое руководство, включая проверку и удаление, приведено в [руководстве по установке](docs/installation.md).

## Разработка

```sh
pnpm install --frozen-lockfile
pnpm lint          # ESLint baseline (also enforced in CI)
pnpm typecheck     # runtime + selector + tests tsc, plus the bundle step
pnpm test          # full vitest suite
pnpm test:watch    # TDD loop: write the failing regression first, then make it pass
pnpm build
pnpm verify:release
```

Вклад следует апстрим-дисциплине: сначала добавляется падающая регрессия, все производственные изменения остаются в этом репозитории, а свидетельства «triggered», «enabled but skipped» и fail-open объясняются раздельно. См. [CONTRIBUTING.md](CONTRIBUTING.md).

## Совместимость

- Собрано и протестировано против официальных релизов DeepSeek Harness; peers перечисляют полный список поддержки (`0.1.0-rc.2` → `0.2.1-rc.2`, семь линеек), и плагин использует только публичные API плагинов и профилей. Список генерируется `scripts/sync-hosts.mjs` из `scripts/hosts.mjs` в управляемый блок выше.
- Требуются Node `^22.19.0 || >=24` и pnpm `11.7.0`.
- Плагин использует только публичные API расширений Harness и не изменяет код ядра Harness. Неофициальный проект сообщества, не связан с DeepSeek и не одобрен им.

## Благодарности и лицензия

- Апстрим-проект и вся предшествующая работа: [WilliamShi666/dsh-context-compression-selector](https://github.com/WilliamShi666/dsh-context-compression-selector) от WilliamShi666 (MIT).
- Дополнения форка (гейт скелетов кода, инструментарий, локализованная документация): drscrewdriver.
- MIT — см. [LICENSE](LICENSE) (уведомление об авторских правах апстрима сохранено) и [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) о происхождении входящих в поставку токенизаторов.
