# Compression Rules Format (Български) 🌐 **Languages:** 🇺🇸 [English](../../../../compression/COMPRESSION_RULES_FORMAT.md) · 🇪🇹 [am](../../../am/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇸🇦 [ar](../../../ar/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇦🇿 [az](../../../az/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇧🇩 [bn](../../../bn/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇧🇦 [bs](../../../bs/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇨🇿 [cs](../../../cs/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇩🇰 [da](../../../da/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇩🇪 [de](../../../de/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇬🇷 [el](../../../el/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇪🇸 [es](../../../es/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇪🇪 [et](../../../et/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇷 [fa](../../../fa/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇫🇮 [fi](../../../fi/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇫🇷 [fr](../../../fr/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇪 [ga](../../../ga/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇳 [gu](../../../gu/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇳🇬 [ha](../../../ha/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇱 [he](../../../he/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇳 [hi](../../../hi/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇭🇷 [hr](../../../hr/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇭🇺 [hu](../../../hu/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇦🇲 [hy](../../../hy/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇩 [id](../../../id/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇳🇬 [ig](../../../ig/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇹 [it](../../../it/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇯🇵 [ja](../../../ja/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇬🇪 [ka](../../../ka/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇰🇭 [km](../../../km/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇳 [kn](../../../kn/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇰🇷 [ko](../../../ko/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇱🇹 [lt](../../../lt/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇱🇻 [lv](../../../lv/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇳 [ml](../../../ml/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇳 [mr](../../../mr/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇲🇾 [ms](../../../ms/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇲🇹 [mt](../../../mt/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇲🇲 [my](../../../my/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇳🇵 [ne](../../../ne/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇳🇱 [nl](../../../nl/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇳🇴 [no](../../../no/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇳 [or](../../../or/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇳 [pa](../../../pa/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇵🇭 [phi](../../../phi/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇵🇱 [pl](../../../pl/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇵🇹 [pt](../../../pt/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇷🇴 [ro](../../../ro/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇷🇺 [ru](../../../ru/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇱🇰 [si](../../../si/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇸🇰 [sk](../../../sk/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇸🇮 [sl](../../../sl/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇷🇸 [sr](../../../sr/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇸🇪 [sv](../../../sv/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇰🇪 [sw](../../../sw/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇳 [ta](../../../ta/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇮🇳 [te](../../../te/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇹🇭 [th](../../../th/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇹🇷 [tr](../../../tr/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇵🇰 [ur](../../../ur/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇺🇿 [uz](../../../uz/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇻🇳 [vi](../../../vi/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇳🇬 [yo](../../../yo/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/compression/COMPRESSION_RULES_FORMAT.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/compression/COMPRESSION_RULES_FORMAT.md) --- Правилата за компресиране са JSON файлове, зареждани по време на изпълнение. Те умишлено съдържат само данни, така че нови езикови пакети и филтри за RTK команди да могат да бъдат преглеждани, без да се променя кодът на енджина. > **Канонична схема (източник на истината):** [`open-sse/services/compression/rules/_schema.json`](../../open-sse/services/compression/rules/_schema.json) (JSON Schema, чернова 2020-12). > Примерите по-долу са илюстративни — при съмнение валидирайте пакета си спрямо `_schema.json`. ## Пакети с Caveman правила Пакетите с Caveman правила се намират в: ```txt open-sse/services/compression/rules//.json ``` Всеки пакет съдържа замествания, които се прилагат към обикновен текст, след като защитените области бъдат изолирани. ```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 филтрите се намират в: ```txt open-sse/services/compression/engines/rtk/filters/.json ``` Всеки филтър описва как да бъде разпознато и компресирано семейство от изходни данни на команди. ```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 verify | 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. Вградените филтри. Проектните/глобалните персонализирани файлове могат да съдържат един обект на филтър или масив от обекти на филтри. Невалидните персонализирани филтри се пропускат с диагностични съобщения; невалидните вградени филтри водят до неуспешна валидация. Файл за доверие на проекта: ```json { "filtersSha256": "0123456789abcdef..." } ``` Заместващата настройка на средата `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS=1` предоставя доверие на проектните филтри без хеш и трябва да бъде ограничена до контролирана локална разработка. ## Правила за безопасност - Поддържайте правилата идемпотентни: повторното изпълнение на един и същ филтър не трябва да поврежда изхода. - Запазвайте точния текст на грешките, файловите пътища, номерата на редовете и обобщенията на командите, когато е възможно. - Избягвайте правила, които променят блокове с код, JSON данни, URL адреси или тайни. - Добавяйте покритие с модулни тестове за новите семейства команди в тестовете за детектори/филтри. - Добавяйте примерни стойности в `tests[]` към всеки вграден филтър и към споделените персонализирани филтри. ## Валидиране Пакетите с правила се валидират преди употреба. Вградените пакети на Caveman и вградените RTK филтри прекратяват незабавно с грешка при неуспешно валидиране, така че повредените ресурси за изданието да бъдат открити преди разпространение. Персонализираните RTK филтри се пропускат с диагностични съобщения, когато синтактичният анализ или валидирането на доверието е неуспешно. Целенасочено валидиране: ```bash 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 ```