Files
OmniRoute/docs/i18n/ru/docs/compression/COMPRESSION_RULES_FORMAT.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

19 KiB
Raw Blame History

Compression Rules Format (Русский)

🌐 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


Правила сжатия представляют собой JSON-файлы, загружаемые во время выполнения. Они намеренно содержат только данные, чтобы новые языковые пакеты и фильтры команд RTK можно было проверять без изменения кода движка.

Каноническая схема (источник истины): open-sse/services/compression/rules/_schema.json (JSON Schema draft 2020-12). Приведённые ниже примеры предназначены для иллюстрации — при возникновении сомнений проверяйте свой пакет по _schema.json.

Пакеты правил Caveman

Пакеты правил Caveman находятся в каталоге:

open-sse/services/compression/rules/<language>/<pack>.json

Каждый пакет содержит замены, применяемые к обычному тексту после изоляции защищённых областей.

{
  "language": "en",
  "category": "filler",
  "rules": [
    {
      "name": "question_to_directive",
      "pattern": "\\b(?:Can you explain why|Could you show me how)\\b\\s*",
      "replacement": "Explain why ",
      "replacementMap": {
        "can you explain why": "Explain why ",
        "could you show me how": "Show how "
      },
      "flags": "gi",
      "context": "all",
      "category": "context",
      "minIntensity": "lite",
      "description": "Convert verbose questions into direct requests."
    }
  ]
}

Поля Caveman

Поле Обязательно Описание
language да Ключ языка в формате, подобном BCP-47, например en, pt-BR, es
category да Имя файла/категория пакета, например filler или dedup
rules да Массив правил замены на основе регулярных выражений
rules[].name да Стабильное имя правила
rules[].pattern да Исходный текст регулярного выражения JavaScript
rules[].flags нет Флаги регулярного выражения JavaScript; по умолчанию gi
rules[].replacement нет Строка замены или резервное значение при отсутствии совпадения в replacementMap
rules[].replacementMap нет Замены для конкретных совпадений, ключами служит нормализованный совпавший текст
rules[].context нет all, user, assistant или system; по умолчанию all
rules[].category нет filler, context, structural, dedup, terse или ultra
rules[].minIntensity нет lite, full или ultra; по умолчанию lite
rules[].description нет Понятное человеку краткое описание правила

Используйте flags, когда важен регистр символов, например при удалении артикля перед текстом в нижнем регистре без удаления the OpenAI API. Используйте replacementMap, когда одно регулярное выражение содержит несколько альтернатив, для которых требуются разные результаты; это позволяет пакетам правил JSON содержать только данные, сохраняя при этом поведение более функциональных встроенных функций замены TypeScript.

Наборы фильтров RTK

Фильтры RTK находятся в:

open-sse/services/compression/engines/rtk/filters/<filter>.json

Каждый фильтр описывает, как распознать и сжать семейство результатов выполнения команд.

{
  "id": "test-vitest",
  "label": "Vitest output",
  "category": "test",
  "priority": 92,
  "match": {
    "outputTypes": ["test-vitest"],
    "commands": ["vitest", "npm test", "npm run test"],
    "patterns": ["\\bFAIL\\b", "\\bPASS\\b", "\\bTest Files\\b"]
  },
  "rules": {
    "stripAnsi": true,
    "replace": [{ "pattern": "\\s+\\[[0-9]+ms\\]", "replacement": "" }],
    "matchOutput": [
      {
        "pattern": "All tests passed",
        "message": "vitest: ok",
        "unless": "FAIL|Error:"
      }
    ],
    "includePatterns": ["FAIL", "Error:", "Test Files", "Tests"],
    "dropPatterns": ["^\\s*$", "Duration\\s+\\d+"],
    "collapsePatterns": ["^\\s+at "],
    "deduplicate": true,
    "truncateLineAt": 240,
    "maxLines": 160,
    "headLines": 24,
    "tailLines": 40,
    "onEmpty": "vitest: ok",
    "filterStderr": false
  },
  "preserve": {
    "errorPatterns": ["FAIL", "Error:", "AssertionError"],
    "summaryPatterns": ["Test Files", "Tests", "Snapshots"]
  },
  "tests": [
    {
      "name": "keeps failing tests",
      "command": "vitest",
      "input": "FAIL test/a.test.ts\\nError: boom\\nTest Files 1 failed",
      "expected": "FAIL test/a.test.ts\\nError: boom\\nTest Files 1 failed"
    }
  ]
}

Поля RTK

Поле Обязательно Описание
id да Стабильный идентификатор фильтра
label да Название, отображаемое на панели мониторинга
category да Семейство фильтра: git, test, build, shell, docker, package, infra, cloud, generic
priority нет При совпадении нескольких фильтров выбирается фильтр с более высоким приоритетом
match.outputTypes нет Идентификаторы результатов детектора, выбирающие этот фильтр
match.commands нет Токены команд, выбирающие этот фильтр
match.patterns нет Регулярные выражения, выбирающие этот фильтр по тексту вывода
rules.stripAnsi нет Удаляет управляющие последовательности ANSI перед этапами обработки регулярными выражениями
rules.replace нет Упорядоченные подстановки по регулярным выражениям, применяемые построчно
rules.matchOutput нет Правила немедленного формирования вывода с необязательным условием unless
rules.includePatterns нет Строки, которым следует отдавать предпочтение при сохранении
rules.dropPatterns нет Строки, удаляемые как шум
rules.collapsePatterns нет Повторяющиеся совпадающие строки, которые можно свернуть
rules.deduplicate нет Сворачивает дублирующиеся нормализованные строки
rules.truncateLineAt нет Безопасное для Unicode ограничение количества символов в строке
rules.maxLines нет Максимальное количество сохраняемых строк до сохранения хвостовой части
rules.headLines нет Начальные строки, сохраняемые при усечении
rules.tailLines нет Конечные строки, сохраняемые для актуального контекста
rules.onEmpty нет Резервное сообщение, если фильтрация удаляет всё содержимое
rules.filterStderr нет Нормализует распространённые префиксы stderr перед последующими этапами фильтрации
preserve.errorPatterns нет Строки с ошибками, которые должны сохраняться при усечении
preserve.summaryPatterns нет Строки со сводкой, которые должны сохраняться при усечении
tests[] нет Встроенные проверочные примеры, используемые этапом проверки RTK

RTK применяет декларативные этапы в следующем порядке: stripAnsi, filterStderr, replace, matchOutput, dropPatterns/includePatterns, truncateLineAt, headLines/tailLines, maxLines и onEmpty.

Пользовательские фильтры могут загружаться из следующих источников:

  1. Файлы проекта .rtk/filters.json — только при наличии соответствующего хеша в .rtk/trust.json или если включён параметр trustProjectFilters.
  2. Глобальный файл DATA_DIR/rtk/filters.json.
  3. Встроенные фильтры.

Пользовательские файлы проекта и глобальные файлы могут содержать один объект фильтра или массив объектов фильтров. Недопустимые пользовательские фильтры пропускаются с диагностическими сообщениями; недопустимые встроенные фильтры приводят к ошибке проверки.

Файл доверия проекта:

{
  "filtersSha256": "0123456789abcdef..."
}

Переопределение окружения OMNIROUTE_RTK_TRUST_PROJECT_FILTERS=1 позволяет доверять фильтрам проекта без хеша и должно использоваться только при контролируемой локальной разработке.

Правила безопасности

  • Правила должны быть идемпотентными: повторное применение одного и того же фильтра не должно повреждать вывод.
  • По возможности сохраняйте точный текст ошибок, пути к файлам, номера строк и сводки команд.
  • Избегайте правил, изменяющих блоки кода, данные JSON, URL-адреса или секреты.
  • Добавляйте модульные тесты для новых семейств команд в тесты детекторов и фильтров.
  • Добавляйте образцы tests[] в каждый встроенный фильтр и в общие пользовательские фильтры.

Валидация

Наборы правил проверяются перед использованием. Встроенные наборы Caveman и встроенные фильтры RTK немедленно завершают работу с ошибкой при сбое валидации, чтобы неисправные ресурсы релиза были обнаружены до поставки. Пользовательские фильтры RTK пропускаются с диагностическими сообщениями, если синтаксический анализ или проверка доверия завершаются неудачно.

Целевая валидация:

node --import tsx/esm --test tests/unit/compression/rule-loader.test.ts tests/unit/compression/language-packs.test.ts
node --import tsx/esm --test tests/unit/compression/rtk-verify.test.ts tests/unit/compression/rtk-dsl-pipeline.test.ts