# 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) · 🇧🇬 [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) · 🇮🇳 [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 draft 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` | បាទ/ចាស | អារេនៃច្បាប់ជំនួស regex | | `rules[].name` | បាទ/ចាស | ឈ្មោះច្បាប់ដែលមានស្ថិរភាព | | `rules[].pattern` | បាទ/ចាស | ប្រភព regex របស់ JavaScript | | `rules[].flags` | ទេ | ទង់ regex របស់ 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` នៅពេលការផ្គូផ្គងដែលប្រកាន់តួអក្សរធំតូចមានសារៈសំខាន់ ឧទាហរណ៍ ការដក article ចេញពីមុខអត្ថបទដែលចាប់ផ្ដើមដោយអក្សរតូច ដោយមិនដក `the OpenAI API` ចេញ។ ប្រើ `replacementMap` នៅពេល regex មួយមានជម្រើសច្រើនដែលត្រូវការលទ្ធផលខុសៗគ្នា; វាធ្វើឱ្យកញ្ចប់ច្បាប់ 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` | ទេ | លំនាំ regex ដែលជ្រើសរើសតម្រងនេះពីអត្ថបទលទ្ធផល | | `rules.stripAnsi` | ទេ | លុបលំដាប់ escape ANSI មុនដំណាក់កាល regex | | `rules.replace` | ទេ | ការជំនួស regex តាមលំដាប់ ដែលត្រូវបានអនុវត្តមួយបន្ទាត់ម្តងៗ | | `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` របស់គម្រោង តែបន្ទាប់ពីមាន hash ដែលត្រូវគ្នានៅក្នុង `.rtk/trust.json` ឬ `trustProjectFilters` ត្រូវបានបើក។ 2. `DATA_DIR/rtk/filters.json` សកល។ 3. តម្រងដែលភ្ជាប់មកជាមួយ។ ឯកសារផ្ទាល់ខ្លួនរបស់គម្រោង/សកលអាចមានវត្ថុតម្រងមួយ ឬអារេនៃវត្ថុតម្រង។ តម្រង ផ្ទាល់ខ្លួនដែលមិនត្រឹមត្រូវនឹងត្រូវរំលងជាមួយព័ត៌មានវិនិច្ឆ័យ។ តម្រងដែលភ្ជាប់មកជាមួយដែលមិនត្រឹមត្រូវនឹងធ្វើឱ្យការផ្ទៀងផ្ទាត់បរាជ័យ។ ឯកសារទុកចិត្តរបស់គម្រោង៖ ```json { "filtersSha256": "0123456789abcdef..." } ``` ការកំណត់ជំនួសតាម environment `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS=1` ទុកចិត្តលើតម្រងរបស់គម្រោងដោយមិនត្រូវការ hash ហើយគួរត្រូវបានកម្រិតឱ្យប្រើតែក្នុងការអភិវឌ្ឍមូលដ្ឋានដែលមានការគ្រប់គ្រងប៉ុណ្ណោះ។ ## ច្បាប់សុវត្ថិភាព - រក្សាច្បាប់ឱ្យមានលក្ខណៈ idempotent៖ ការដំណើរការតម្រងដដែលពីរដងមិនគួរធ្វើឱ្យលទ្ធផលខូចឡើយ។ - រក្សាអត្ថបទកំហុស ផ្លូវឯកសារ លេខបន្ទាត់ និងសេចក្ដីសង្ខេបពាក្យបញ្ជាឱ្យនៅដដែលតាមដែលអាចធ្វើទៅបាន។ - ជៀសវាងច្បាប់ដែលកែប្រែប្លុកកូដ JSON payloads URLs ឬទិន្នន័យសម្ងាត់។ - បន្ថែមការគ្របដណ្ដប់ដោយតេស្តឯកតាសម្រាប់ក្រុមពាក្យបញ្ជាថ្មីៗនៅក្នុងតេស្តរបស់ detector/filter។ - បន្ថែមគំរូ `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 ```