# Compression Rules Format (Română) 🌐 **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) · 🇧🇬 [bg](../../../bg/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) · 🇷🇺 [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) --- Regulile de compresie sunt fișiere JSON încărcate în timpul rulării. Acestea conțin în mod intenționat doar date, astfel încât noile pachete lingvistice și filtrele pentru comenzile RTK să poată fi revizuite fără modificarea codului motorului. > **Schema canonică (sursa adevărului):** [`open-sse/services/compression/rules/_schema.json`](../../open-sse/services/compression/rules/_schema.json) (JSON Schema draft 2020-12). > Exemplele de mai jos au rol ilustrativ — dacă aveți îndoieli, validați pachetul folosind `_schema.json`. ## Pachete de reguli Caveman Pachetele de reguli Caveman se află în: ```txt open-sse/services/compression/rules//.json ``` Fiecare pachet conține înlocuiri care se aplică textului obișnuit după izolarea regiunilor protejate. ```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." } ] } ``` ### Câmpuri Caveman | Câmp | Obligatoriu | Descriere | | ------------------------ | ----------- | ------------------------------------------------------------------------------------- | | `language` | da | Cheie de limbă similară BCP-47, precum `en`, `pt-BR`, `es` | | `category` | da | Numele fișierului/categoria pachetului, de exemplu `filler` sau `dedup` | | `rules` | da | Matrice de reguli de înlocuire cu expresii regulate | | `rules[].name` | da | Nume stabil al regulii | | `rules[].pattern` | da | Sursa expresiei regulate JavaScript | | `rules[].flags` | nu | Indicatori pentru expresii regulate JavaScript; valoarea implicită este `gi` | | `rules[].replacement` | nu | Șir de înlocuire sau variantă de rezervă când `replacementMap` nu găsește o potrivire | | `rules[].replacementMap` | nu | Înlocuiri specifice potrivirii, indexate după textul normalizat găsit | | `rules[].context` | nu | `all`, `user`, `assistant` sau `system`; valoarea implicită este `all` | | `rules[].category` | nu | `filler`, `context`, `structural`, `dedup`, `terse` sau `ultra` | | `rules[].minIntensity` | nu | `lite`, `full` sau `ultra`; valoarea implicită este `lite` | | `rules[].description` | nu | Rezumat al regulii, ușor de înțeles pentru oameni | Utilizați `flags` atunci când potrivirea sensibilă la litere mari și mici este importantă, de exemplu pentru eliminarea articolelor înaintea textului scris cu litere mici, fără a elimina `the OpenAI API`. Utilizați `replacementMap` atunci când o expresie regulată are mai multe alternative care necesită rezultate diferite; astfel, pachetele de reguli JSON rămân bazate exclusiv pe date, păstrând în același timp comportamentul funcțiilor de înlocuire TypeScript încorporate, mai complexe. ## Pachete de filtre RTK Filtrele RTK se află în: ```txt open-sse/services/compression/engines/rtk/filters/.json ``` Fiecare filtru descrie modul de recunoaștere și comprimare a unei familii de rezultate ale comenzilor. ```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" } ] } ``` ### Câmpuri RTK | Câmp | Obligatoriu | Descriere | | -------------------------- | ----------- | ---------------------------------------------------------------------------------- | | `id` | da | ID stabil al filtrului | | `label` | da | Nume ușor de citit în tabloul de bord | | `category` | da | Familia filtrului: git, test, build, shell, docker, package, infra, cloud, generic | | `priority` | nu | Prioritatea mai mare prevalează atunci când se potrivesc mai multe filtre | | `match.outputTypes` | nu | ID-urile rezultatelor detectorului care selectează acest filtru | | `match.commands` | nu | Tokenurile comenzilor care selectează acest filtru | | `match.patterns` | nu | Modelele regex care selectează acest filtru pe baza textului rezultatului | | `rules.stripAnsi` | nu | Elimină secvențele de escape ANSI înaintea etapelor regex | | `rules.replace` | nu | Substituții regex ordonate, aplicate linie cu linie | | `rules.matchOutput` | nu | Reguli de rezultat cu scurtcircuitare și protecție opțională `unless` | | `rules.includePatterns` | nu | Liniile a căror păstrare este preferată | | `rules.dropPatterns` | nu | Liniile care trebuie eliminate ca zgomot | | `rules.collapsePatterns` | nu | Liniile repetate care se potrivesc și care pot fi restrânse | | `rules.deduplicate` | nu | Restrânge liniile normalizate duplicate | | `rules.truncateLineAt` | nu | Limita de caractere per linie, compatibilă cu Unicode | | `rules.maxLines` | nu | Numărul maxim de linii păstrate înaintea conservării finalului | | `rules.headLines` | nu | Liniile de început păstrate în timpul trunchierii | | `rules.tailLines` | nu | Liniile finale păstrate pentru contextul recent | | `rules.onEmpty` | nu | Mesaj de rezervă atunci când filtrarea elimină întregul conținut | | `rules.filterStderr` | nu | Normalizează prefixele stderr comune înaintea etapelor ulterioare de filtrare | | `preserve.errorPatterns` | nu | Liniile de eroare care trebuie să supraviețuiască trunchierii | | `preserve.summaryPatterns` | nu | Liniile de rezumat care trebuie să supraviețuiască trunchierii | | `tests[]` | nu | Exemple de verificare încorporate, utilizate de poarta de verificare RTK | RTK aplică etapele declarative în această ordine: `stripAnsi`, `filterStderr`, `replace`, `matchOutput`, `dropPatterns`/`includePatterns`, `truncateLineAt`, `headLines`/`tailLines`, `maxLines` și `onEmpty`. Filtrele personalizate pot fi încărcate din: 1. Fișierele de proiect `.rtk/filters.json`, numai după ce este prezent un hash corespunzător în `.rtk/trust.json` sau este activat `trustProjectFilters`. 2. Fișierul global `DATA_DIR/rtk/filters.json`. 3. Filtrele încorporate. Fișierele personalizate de proiect/globale pot conține un singur obiect de filtru sau o matrice de obiecte de filtru. Filtrele personalizate nevalide sunt omise și sunt generate diagnostice; filtrele încorporate nevalide determină eșecul validării. Fișierul de încredere al proiectului: ```json { "filtersSha256": "0123456789abcdef..." } ``` Suprascrierea prin variabila de mediu `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS=1` acordă încredere filtrelor de proiect fără un hash și ar trebui limitată la dezvoltarea locală controlată. ## Reguli de siguranță - Mențineți regulile idempotente: rularea aceluiași filtru de două ori nu trebuie să deterioreze rezultatul. - Păstrați, acolo unde este posibil, textul exact al erorilor, căile fișierelor, numerele de linie și rezumatele comenzilor. - Evitați regulile care modifică blocurile de cod, sarcinile utile JSON, URL-urile sau secretele. - Adăugați acoperire prin teste unitare pentru noile familii de comenzi în testele detectorului/filtrului. - Adăugați exemple `tests[]` pentru fiecare filtru încorporat și pentru filtrele personalizate partajate. ## Validare Pachetele de reguli sunt validate înainte de utilizare. Pachetele Caveman încorporate și filtrele RTK încorporate eșuează imediat în timpul validării, astfel încât resursele defecte ale versiunii să fie detectate înainte de livrare. Filtrele RTK personalizate sunt omise, cu mesaje de diagnosticare, atunci când analizarea sau validarea încrederii eșuează. Validare focalizată: ```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 ```