Files
OmniRoute/docs/i18n/ru/docs/compression/COMPRESSION_ENGINES.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* feat(docs): mirror every docs/ page in all 65 locales

Extends the documentation mirrors from the 22-page core set (#13940) to
every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors
(6,208 new), language bars rewritten for the full locale list, state
adopted so the blocking drift gate now covers all 152 pages.

run-translation.mjs: an oversized block made only of table rows or list
items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is
cut at item boundaries and rejoined without a blank line — the single
16-40 KB request outlived the backend socket for verbose scripts. 48
older mirrors whose tables had lost rows were retranslated with --force.

* docs(i18n): refresh mirrors for the sources the base changed since the branch cut

Section-level retranslation of the 29 docs (and README.md) whose source
or mirrors moved on release/v3.8.51 during the run, then state adoption;
the drift gate is green again on the merged tree.
2026-09-18 13:16:46 -03:00

46 KiB
Raw Blame History

Compression Engines (Русский)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Сжатие OmniRoute построено вокруг контрактов движков. Режим может запускать один движок напрямую (caveman или rtk) либо детерминированный составной конвейер, последовательно выполняющий несколько движков.

Режимы

Режим Путь движка Предназначенный ввод
off нет Точное сохранение промпта
lite Вспомогательные средства Caveman lite Постоянная очистка с низким риском
standard Caveman Сжатие промптов на естественном языке
aggressive Caveman + суммаризаторы истории/инструментов Длительные сеансы чата
ultra Caveman + средства отсечения Восстановление при достижении предела контекста
rtk RTK Вывод терминала, оболочки, сборки, тестов и git
omniglyph OmniGlyph Контекст в виде изображения в нативном канале провайдера
stacked Конвейер, по умолчанию rtk -> caveman Смешанные журналы инструментов и проза, максимальная экономия

Профили сжатия OmniGlyph

Движок omniglyph (пакет omniglyph, 1.4.0+) принимает именованный семантический профиль, который задаётся глобально через omniglyph.profile в настройках сжатия или для отдельного шага через конфигурацию шага составного конвейера:

Профиль Граница
aggressive По умолчанию. Политика, для которой опубликованы результаты измерений: преобразует в изображения систему, документацию инструментов и плотную историю
balanced Сохраняет активное состояние в нативном виде, защищает последние 8 ходов, сворачивает более старую закрытую историю
coding-safe Сохраняет полномочия, схемы инструментов и активный вывод инструментов в нативном виде, защищает последние 12 ходов
passthrough Маршрутизирует без преобразования; движок пропускается

Профиль — это верхняя, а не нижняя граница: mergeCompressionProfileOptions в пакете не позволяет переопределению со стороны вызывающего кода повторно открыть канал с потерями, закрытый профилем, поэтому заданное для отдельного шага preserveSystemPrompt: false не может повторно включить сжатие системного промпта при использовании coding-safe.

По результатам измерений на этой кодовой базе: coding-safe и balanced повышают minCompressChars до максимального значения и сохраняют систему, схемы инструментов и результаты инструментов в нативном виде, поэтому сеанс, в котором история ещё не накопилась, останавливается на below_min_chars, и движок ничего не преобразует. Именно поэтому по умолчанию используется aggressive, а не самый безопасный профиль.

Пакет определяет собственную область применения моделей и профиль из конфигурации своего окружения. OmniRoute никогда не делегирует это решение: адаптер фиксирует фильтр моделей на самой ограничительной области пакета, поэтому настройки окружения хоста могут только сузить список разрешённых моделей, но никогда не расширить его за пределы подтверждённых измерениями OmniRoute результатов.

Реестр движков

Реестр находится в open-sse/services/compression/engines/registry.ts. Движки предоставляют общий контракт:

  • id: стабильный идентификатор движка, например caveman или rtk
  • apply(text, config): устаревший путь выполнения, используемый составными конвейерами
  • compress(input, config): основной путь выполнения, возвращающий текст и статистику
  • getConfigSchema(): возвращает структуру допустимой конфигурации в формате, подобном JSON Schema
  • validateConfig(config): возвращает { valid, errors[] }

Для регистрации используется registerCompressionEngine(engine) (или registerEngine для расширенных сценариев), которая перед принятием вызывает assertValidEngine() и validateConfig(defaultConfig). Используйте unregisterCompressionEngine(id), чтобы удалить движок во время выполнения.

strategySelector.ts регистрирует встроенные движки до запуска сжатия. Благодаря этому предварительный просмотр, сжатие во время выполнения, составной режим, тесты и будущие движки используют один и тот же путь выполнения.

Сжатие описаний MCP (связано)

Отдельный реестр сжимает метаданные описаний инструментов MCP на уровне реестра — см. open-sse/mcp-server/descriptionCompressor.ts и MCP-SERVER.md. Он повторно использует правила Caveman, но работает с метаданными инструментов, а не с полезной нагрузкой запросов.

Дополнительные встроенные движки

Помимо Caveman, RTK и LLMLingua-2, реестр включает несколько специализированных движков сжатия без потерь / структурного сжатия (используемых составными конвейерами, интерактивной средой и тестами):

Движок Идентификатор Назначение
CCR ccr Content-Compress-Retrieve (H4): заменяет большие непрерывные блоки текста ссылками с адресацией по содержимому, благодаря чему повторяющиеся/большие блоки отправляются один раз, а затем на них ссылаются.
headroom headroom SmartCrusher (H3 + N5): табличное сжатие без потерь для полезных нагрузок в виде однородных JSON-массивов в колоночную форму [N rows].
ionizer ionizer Выборка строк из начала/середины/конца очень больших однородных блоков с сохранением исключённой середины в виде CCR-ссылки с адресацией по содержимому.
session-dedup session-dedup Межходовая дедупликация с адресацией по содержимому (в духе TokenMizer): исключает текст, уже встречавшийся в предыдущих ходах того же сеанса.

Инструкция протокола извлечения CCR (#8033): когда CCR впервые заменяет ≥1 блока в запросе, движок добавляет в начало одно идемпотентное сообщение system (начинающееся с маркера [CCR protocol]), объясняющее вызывающей стороне контракт «маркер → инструмент»: что означает маркер [CCR retrieve hash=<24hex> chars=N], что хеш необходимо скопировать дословно (все 24 шестнадцатеричных символа — ошибки при копировании хеша являются вероятной причиной ошибок "block not found"), а также что маркер [dedup:ref sha=...] означает «найти ранее в истории», а не «вызвать инструмент». Примечание внедряется только тогда, когда заявленный вызывающей стороной tools[] подтверждает, что она действительно может обратиться к omniroute_ccr_retrieve (callerSupportsCcrRetrieve() в open-sse/services/compression/engines/ccr/protocolInstruction.ts) — обычная OpenAI-совместимая вызывающая сторона без этого инструмента никогда не получает указание вызвать то, к чему у неё нет доступа. Идемпотентность обеспечивается поиском маркера в истории сообщений перед внедрением, поэтому в многоходовых запросах (повторно передающих предыдущие сообщения) примечание не добавляется заново на каждом ходу.

Caveman

Режим Caveman предназначен для семантического сжатия обычного текста:

  • сохраняет блоки кода, URL-адреса, JSON, пути и структурированные данные
  • удаляет лишние слова, оговорки, повторяющийся контекст и многословные связующие формулировки
  • поддерживает наборы языковых правил для файлов в open-sse/services/compression/rules/
  • остаётся доступным через устаревшие режимы standard, aggressive и ultra

Раздел панели управления: Dashboard -> Context & Cache -> Caveman.

Разработчики Caveman сообщают о сокращении количества выходных токенов на ~75%, средней экономии выходных данных на 65% в тестах с диапазоном 22-87% и инструменте сжатия входных данных на ~46%. OmniRoute использует показатель Caveman для сжатия входных данных при документировании совокупной экономии промпта и контекста; режим вывода Caveman остаётся отдельной функцией управления поведением ответов.

RTK

Режим RTK предназначен для вывода команд и инструментов:

  • распознаёт такие классы вывода, как git status, git branch, git diff, Vitest/Jest/Pytest, тесты Cargo/Go, сборки TypeScript/Vite/Webpack, ESLint, аудит/установки npm, журналы Docker, команды оболочки find/grep, трассировки стека и обычные журналы
  • применяет 49 фильтров JSON из open-sse/services/compression/engines/rtk/filters/
  • поддерживает декларативный конвейер в стиле RTK: удаление ANSI-последовательностей, замену, досрочное завершение при совпадении вывода, удаление/сохранение строк, обрезку отдельных строк, обрезку по началу/концу/максимальному количеству строк и резервный вариант для пустого результата
  • поддерживает проектные фильтры с проверкой доверия в .rtk/filters.json и глобальные фильтры в DATA_DIR/rtk/filters.json
  • удаляет ANSI-последовательности, лишний вывод прогресса, повторяющиеся строки и бесполезный шаблонный текст
  • сохраняет ошибки, требующие действий, предупреждения, сводки, изменённые файлы и контекст в конце
  • может при необходимости сохранять отредактированный исходный вывод для восстановления/отладки через аутентифицированные маршруты управления

Раздел панели управления: Dashboard -> Context & Cache -> RTK.

Практические сведения о пользовательских фильтрах, доверии, проверке и восстановлении исходного вывода приведены в RTK_COMPRESSION.md.

Разработчики RTK сообщают об экономии 60-90% при сжатии вывода команд. Пример из README показывает, что за 30-минутный сеанс Claude Code количество токенов сокращается с ~118,000 до ~23,900, то есть экономится 79.7%.

LLMLingua-2 (семантическое прореживание)

Режим LLMLingua-2 выполняет семантическое прореживание токенов в тексте с помощью небольшого ONNX-классификатора токенов, дополняя основанные на правилах движки Caveman и RTK:

  • сжимает текст только в несистемных сообщениях; ограждённые блоки кода и другие сохраняемые конструкции никогда не изменяются
  • запускает бэкенд @atjsh/llmlingua-2 (ONNX через @huggingface/transformers) в рабочем потоке, поэтому инференс модели никогда не блокирует цикл обработки запросов
  • поддерживает объединение в стек (stackPriority 35): в составном конвейере он запускается после структурных движков (CCR, session-dedup, headroom, Caveman), но перед ultra, поскольку семантическое прореживание наиболее эффективно для уже структурно сжатого текста — например, rtk -> caveman -> llmlingua
  • при любой ошибке продолжает работу без сжатия (отсутствие необязательных зависимостей, запуск рабочего потока, загрузка модели, инференс или тайм-аут) → исходный текст возвращается без изменений, ошибка никогда не выдаётся

Расположение движка: open-sse/services/compression/engines/llmlingua/. Раздел панели управления: Dashboard -> Context & Cache -> LLMLingua.

Модели

Модель по умолчанию — TinyBERT (atjsh/llmlingua-2-js-tinybert-meetingbank, ~57 МБ, быстрая). Модель BERT-base с более высокой точностью (Arcoldd/llmlingua4j-bert-base-onnx, ~710 МБ) доступна через поле model в конфигурации движка. При первом вызове @huggingface/transformers отложенно загружает выбранную модель из HuggingFace Hub в ${DATA_DIR}/models/llmlingua (modelStore.ts); переопределение modelPath в конфигурации позволяет вместо этого указать локальную копию (для автономных установок / установок в изолированной среде).

Необязательные зависимости и установка по требованию

Стек одноранговых зависимостей среды выполнения LLMLingua, допускающий исключение, является необязательным. Два пакета объявлены как optionalDependencies в package.json и остаются внешними для производственной сборки (scripts/build/prepublish.ts не включает их в пакет):

Пакет Версия (закреплённая) Примечания
@atjsh/llmlingua-2 2.0.5 Основной пакет; объявляет остальные одноранговыми
js-tiktoken ^1.0.20 Токенизатор

Версия @huggingface/transformers закреплена на ^4.2.0 (она используется совместно с локальным механизмом эмбеддингов и также включается посредством трассировки в автономный пакет); @atjsh/llmlingua-2@2.0.5 объявляет для неё одноранговую зависимость "^3.5.2 || ^4.0.0", поэтому поддерживаются Transformers.js v3 и v4. Начиная с 2.0.4, @atjsh/llmlingua-2 больше не требует @tensorflow/tfjs, что позволило исключить крупнейший отдельный компонент (TensorFlow.js) из стека SLM. Только два указанных выше пакета являются допускающими исключение одноранговыми зависимостями SLM. Стандартная команда npm install (для разработки) автоматически устанавливает необязательный стек, если необязательные зависимости не исключены.

Зачем установка по требованию: опубликованный в npm пакет, автономный пакет и образ Docker поставляются без этих зависимостей, чтобы сохранять небольшой размер. Если они отсутствуют, проверка зависимостей рабочего потока (проверка разрешения @atjsh/llmlingua-2 в worker.ts) завершается неудачно, и движок молча продолжает работу без сжатия — выбор LLMLingua не оказывает никакого эффекта (текст возвращается без изменений, ошибка не записывается в журнал). Чтобы активировать его в среде с исключёнными зависимостями, установите необязательный стек:

# закрепите версии, объявленные в optionalDependencies файла package.json
npm install @atjsh/llmlingua-2@2.0.5 js-tiktoken

Удаление @tensorflow/tfjs (2.0.4+) устраняет ранее преобладавший компонент размером ~800 МБ — оставшийся объём занимают среды выполнения transformers.js и onnxruntime-node, а также модель TinyBERT (~57 МБ), загружаемая при первом использовании (не через npm).

Для каждой среды:

  • Разработка / npm install — устанавливается автоматически, если не был указан параметр --omit=optional (или --no-optional). Никаких действий не требуется.
  • Глобальный npm (npm i -g omniroute) / автономная установка — выполните приведённую выше команду установки внутри каталога установленного пакета или переустановите его, не исключая необязательные зависимости.
  • Docker — добавьте команду установки в слой производного образа; опубликованный образ намеренно поставляется в минимальной комплектации.
  • VPS (PM2) — установите пакет в node_modules приложения, затем перезапустите процесс, чтобы воркер повторно проверил условие доступности.
  • Чистый автономный Next (npm run build.build/next/standalone/server.js) — автономная трассировка не включает НИ воркер, НИ необязательные зависимости, поэтому движок незаметно переходит в режим разрешения при сбое. scripts/build/colocate-standalone.mjs повторно добавляет и то, и другое (сборку воркера через esbuild + замыкание необязательных зависимостей в автономное дерево); скрипт автоматически запускается через npm-хук postbuild после каждой сборки. Идемпотентен и корректно завершает работу при отсутствии зависимостей.

Проверка активности: если выбран LLMLingua, реальный прозаический текст действительно сокращается (движок перестаёт переходить в режим разрешения при сбое), а первый запрос запускает скачивание модели в ${DATA_DIR}/models/llmlingua. Проверка намеренно выполняется только для @atjsh/llmlingua-2 — остальные одноранговые зависимости поддерживают только ESM, и require.resolve выдаёт для них исключение, даже когда они установлены, — поэтому воркер по-прежнему переходит в режим разрешения при сбое, если какая-либо одноранговая зависимость действительно отсутствует во время import().

Составные конвейеры

Составной режим выполняет шаги конвейера по порядку. По умолчанию используется:

rtk -> caveman

Используйте этот режим для сеансов с агентами программирования, в которых промпт объединяет вывод команд с текстом, написанным человеком или ассистентом. Сначала RTK сокращает избыточные журналы инструментов, затем Caveman сжимает оставшийся естественный язык.

Шаги конвейера настраиваются с помощью stackedPipeline в параметрах сжатия или посредством комбинаций сжатия.

Когда оба движка сокращают одни и те же подходящие данные, экономия суммируется:

combined = 1 - (1 - RTK savings) * (1 - Caveman input savings)
average  = 1 - (1 - 0.80) * (1 - 0.46) = 89.2%
range    = 1 - (1 - 0.60..0.90) * (1 - 0.46) = 78.4-94.6%

Фильтр дерева доступности MCP

Интеллектуальный фильтр дерева доступности MCP — это уровень сжатия после выполнения, который применяется к результатам инструментов MCP, а не к промптам или контексту. Он предназначен для обработки многословных данных дерева доступности и снимков браузера, возвращаемых такими инструментами, как Playwright, computer-use и MCP-серверы автоматизации браузера.

Что он делает

  1. Удаление шума — удаляет пустые элементы generic/text (- generic:, - text: "")
  2. Сворачивание соседних элементов — когда ≥ collapseThreshold (по умолчанию 30) последовательных строк представляют собой повторяющиеся структурные элементы, они сворачиваются до первых collapseKeepHead (по умолчанию 10) строк + сводки с количеством + последних collapseKeepTail (по умолчанию 5) строк
  3. Сохранение ссылок — якоря [ref=eXX], необходимые для Playwright/computer-use, никогда не изменяются
  4. Жёсткое усечение — если текст после сворачивания всё ещё превышает maxTextChars (по умолчанию 50 000), он усекается с добавлением подсказки по навигации, чтобы агент мог продолжить работу

Расположение движка

open-sse/services/compression/engines/mcpAccessibility/
  index.ts            ← точка входа smartFilterText()
  collapseRepeated.ts ← алгоритм сворачивания соседних элементов
  constants.ts        ← DEFAULT_MCP_ACCESSIBILITY_CONFIG

Конфигурация

Управляется параметром compression.mcpAccessibility в глобальных настройках (миграция 056). Конфигурация по умолчанию:

{
  "enabled": true,
  "maxTextChars": 50000,
  "collapseThreshold": 30,
  "collapseKeepHead": 10,
  "collapseKeepTail": 5,
  "minLengthToProcess": 2000
}

Фильтр применяется только к данным результатов инструментов, у которых type имеет значение "text", а длина превышает minLengthToProcess. Он не влияет на сжатие промптов или данные запросов.

Ожидаемая экономия

6080% для результатов инструментов снимков браузера в зависимости от сложности страницы. Алгоритм сворачивания имеет сложность O(n) по количеству строк и добавляет незначительную задержку.

Сравнение этого фильтра с указанными выше движками сжатия

Аспект Caveman / RTK / Stacked Фильтр доступности MCP
Цель Промпты / контекст запросов Результаты инструментов MCP
Условие запуска Настройка режима сжатия compression.mcpAccessibility.enabled
Область действия Все сообщения SSE Только результаты инструментов
Якоря ссылок Н Сохраняются безусловно

Комбинации сжатия

Комбинации сжатия — это именованные профили сжатия, которые можно назначать комбинациям маршрутизации:

  • compression_combos: хранит режим, конвейер, конфигурацию RTK, языковую конфигурацию и маркер по умолчанию
  • compression_combo_assignments: сопоставляет комбинацию сжатия с комбинацией маршрутизации
  • интеграция во время выполнения разрешает назначенную комбинацию сжатия до применения общих переопределений комбинации
  • аналитика включает compression_combo_id и engine

Раздел панели управления: Dashboard -> Context & Cache -> Compression Combos.

Поверхность API

Маршрут Назначение
/api/settings/compression Глобальные настройки сжатия (включая конфигурацию mcpAccessibility)
/api/compression/preview Предварительный просмотр любого режима сжатия
/api/compression/language-packs Список доступных языковых пакетов Caveman
/api/context/caveman/config Псевдоним настроек Caveman
/api/context/rtk/config Значения по умолчанию и настройки RTK
/api/context/rtk/filters Каталог фильтров RTK
/api/context/rtk/test Эндпоинт предварительного просмотра/тестирования RTK
/api/context/rtk/raw-output/[id] Аутентифицированное восстановление отредактированного необработанного вывода
/api/context/combos CRUD для комбинаций сжатия
/api/context/combos/[id]/assignments CRUD для назначений комбинаций маршрутизации
/api/context/analytics Псевдоним аналитики сжатия

Маршруты управления требуют аутентификации для управления или проверок политик API-ключей.

Инструменты MCP

Сжатие предоставляет пять инструментов MCP:

Инструмент Область Назначение
omniroute_compression_status read:compression Настройки, аналитика, статистика кеша
omniroute_compression_configure write:compression Обновление глобальных настроек
omniroute_set_compression_engine write:compression Установка режима и необязательного конвейера
omniroute_list_compression_combos read:compression Список комбинаций сжатия
omniroute_compression_combo_stats read:compression Чтение аналитики комбинаций/движков

Область применения и исключения

Эмбеддинги никогда не сжимаются. open-sse/handlers/embeddings.ts никогда не вызывает движок сжатия — тела запросов/ответов передаются исполнителю напрямую без изменений. Сегодня это обеспечивается структурно (обработчики эмбеддингов и завершений чата разделены), а не проверкой во время выполнения, однако это означает, что риск искажения векторов из #8034 отсутствует в тракте эмбеддингов.

Фильтр исключений для отдельных моделей/эндпоинтов (#8034). Для завершений чата оператор может указать идентификаторы моделей / цели provider/model, которые никогда не должны сжиматься, — это защитная мера, полезная на случай, если позднее сжатие будет подключено ближе к тракту, смежному с эмбеддингами, а также в целом для любой модели, где важен точный, побайтово неизменный промпт (детерминированные оценки, чувствительные к кешу префиксы и т. д.).

  • Поле настроек: exclusions?: string[] в глобальной конфигурации сжатия (GET/PUT /api/settings/compression), сохраняемое через существующее пространство имён сжатия key_value (src/lib/db/compression.ts) — новая таблица не требуется.
  • Вкладка панели управления: Dashboard → Compression → Exclusions (/dashboard/compression/exclusions).
  • Синтаксис шаблонов: * — единственный подстановочный знак. Все прочие метасимволы регулярных выражений в шаблоне экранируются перед сопоставлением, поэтому gpt-5.6 соответствует только буквальной строке и никогда — gpt-5x6 (безопасно в отношении ReDoS, ограничено, без вложенных квантификаторов). Шаблоны сопоставляются без учёта регистра как с отдельным идентификатором модели, так и с составным значением provider/modelgpt-5-6, openai/gpt-5-6 и openai/* поддерживаются, а * само по себе исключает все модели.
  • Сопоставление: isCompressionExcluded() / normalizeCompressionExclusions() в open-sse/services/compression/exclusions.ts. chatCore.ts проверяет исключённую цель сразу после разрешения настроек сжатия, до запуска любого движка, и обрабатывает совпадение точно так же, как глобальное отключение сжатия, — тело запроса гарантированно остаётся побайтово идентичным. Пропуск записывается через writeCompressionSkip(..., "excluded") для отображения в аналитике.
  • Значение по умолчанию (пустой/отсутствующий список): поведение идентично существовавшему до #8034 — ничего не исключается.

Известные ограничения

  • LLMLingua-2 (SLM) требует совместного размещения необязательных зависимостей. Воркер запускается в production-сборке, только когда @atjsh/llmlingua-2 и одноранговые зависимости совместно размещены в dist/node_modules (см. scripts/build/colocateOptionals.mjs, #4286). Без них движок аварийно возвращает исходный текст. Разрешение воркера больше не зависит от import.meta.url (он не работает в автономном бандле) — вместо этого оно привязано к текущему рабочему каталогу среды выполнения / argv[1].
  • Языковые пакеты Caveman de / fr / ja являются частичными. Они содержат правила context + filler + structural, но не содержат пакетов dedup / ultra, поэтому интенсивность ultra для этих языков не выше, чем full (они используют только собственные правила — скрытого отката к английским правилам dedup/ultra, который мог бы исказить иностранный текст, нет). Пакеты en / es / id / pt-BR являются полными. Приветствуется добавление dedup.json + ultra.json для частичных пакетов.
  • Составная телеметрия перечисляет только движки, выполнившие сжатие. Шаг составного конвейера, движок которого был запущен, но обеспечил экономию 0 %, возвращает stats:null и поэтому не отображается в engineBreakdownего невозможно отличить от пропущенного шага. Различение состояний «запущен, 0 %» и «пропущен» потребовало бы изменения модели детализации и отложено.

Проверка

Целевые проверки для этой области:

node --import tsx/esm --test tests/unit/compression/rtk-*.test.ts tests/unit/compression/pipeline-integration.test.ts tests/unit/compression/context-compression-api.test.ts
node --import tsx/esm --test tests/unit/compression/*.test.ts tests/golden-set/*.test.ts tests/integration/compression-pipeline.test.ts tests/unit/api/compression/compression-api.test.ts
node --import tsx/esm --test tests/unit/compression/mcpAccessibility*.test.ts
npm run typecheck:core