# Compression Rules Format (Bahasa Indonesia) 🌐 **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) · 🇳🇬 [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) --- Aturan kompresi adalah file JSON yang dimuat saat runtime. Aturan tersebut sengaja hanya berisi data agar paket bahasa dan filter perintah RTK baru dapat ditinjau tanpa mengubah kode mesin. > **Skema kanonis (sumber kebenaran):** [`open-sse/services/compression/rules/_schema.json`](../../open-sse/services/compression/rules/_schema.json) (JSON Schema draf 2020-12). > Contoh di bawah hanya bersifat ilustratif — jika ragu, validasi paket Anda terhadap `_schema.json`. ## Paket Aturan Caveman Paket aturan Caveman berada di: ```txt open-sse/services/compression/rules//.json ``` Setiap paket berisi penggantian yang diterapkan pada prosa normal setelah bagian yang dilindungi diisolasi. ```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." } ] } ``` ### Kolom Caveman | Kolom | Wajib | Deskripsi | | ------------------------ | ----- | ----------------------------------------------------------------------------- | | `language` | ya | Kunci bahasa mirip BCP-47 seperti `en`, `pt-BR`, `es` | | `category` | ya | Nama file/kategori paket, misalnya `filler` atau `dedup` | | `rules` | ya | Larik aturan penggantian regex | | `rules[].name` | ya | Nama aturan yang stabil | | `rules[].pattern` | ya | Sumber regex JavaScript | | `rules[].flags` | tidak | Flag regex JavaScript; default `gi` | | `rules[].replacement` | tidak | String pengganti atau fallback saat `replacementMap` tidak cocok | | `rules[].replacementMap` | tidak | Penggantian spesifik kecocokan dengan teks cocok ternormalisasi sebagai kunci | | `rules[].context` | tidak | `all`, `user`, `assistant`, atau `system`; default `all` | | `rules[].category` | tidak | `filler`, `context`, `structural`, `dedup`, `terse`, atau `ultra` | | `rules[].minIntensity` | tidak | `lite`, `full`, atau `ultra`; default `lite` | | `rules[].description` | tidak | Ringkasan aturan yang mudah dibaca manusia | Gunakan `flags` ketika pencocokan peka huruf besar-kecil diperlukan, misalnya untuk menghapus artikel sebelum prosa berhuruf kecil tanpa menghapus `the OpenAI API`. Gunakan `replacementMap` ketika satu regex memiliki beberapa alternatif yang memerlukan keluaran berbeda; ini menjaga agar paket aturan JSON hanya berisi data sekaligus mempertahankan perilaku fungsi penggantian bawaan TypeScript yang lebih kaya. ## Paket Filter RTK Filter RTK berada di: ```txt open-sse/services/compression/engines/rtk/filters/.json ``` Setiap filter menjelaskan cara mengenali dan mengompresi suatu kelompok keluaran perintah. ```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" } ] } ``` ### Bidang RTK | Bidang | Wajib | Deskripsi | | -------------------------- | ----- | -------------------------------------------------------------------------------- | | `id` | ya | ID filter yang stabil | | `label` | ya | Nama yang dapat dibaca di dasbor | | `category` | ya | Kelompok filter: git, test, build, shell, docker, package, infra, cloud, generic | | `priority` | tidak | Prioritas lebih tinggi akan dipilih ketika beberapa filter cocok | | `match.outputTypes` | tidak | ID keluaran detektor yang memilih filter ini | | `match.commands` | tidak | Token perintah yang memilih filter ini | | `match.patterns` | tidak | Pola regex yang memilih filter ini berdasarkan teks keluaran | | `rules.stripAnsi` | tidak | Menghapus urutan escape ANSI sebelum tahapan regex | | `rules.replace` | tidak | Substitusi regex berurutan yang diterapkan baris demi baris | | `rules.matchOutput` | tidak | Aturan keluaran pintasan dengan pelindung opsional `unless` | | `rules.includePatterns` | tidak | Baris yang lebih diutamakan untuk dipertahankan | | `rules.dropPatterns` | tidak | Baris yang akan dihapus sebagai derau | | `rules.collapsePatterns` | tidak | Baris cocok berulang yang dapat diringkas | | `rules.deduplicate` | tidak | Meringkas baris ternormalisasi yang duplikat | | `rules.truncateLineAt` | tidak | Batas karakter per baris yang aman untuk Unicode | | `rules.maxLines` | tidak | Jumlah maksimum baris yang dipertahankan sebelum mempertahankan bagian akhir | | `rules.headLines` | tidak | Baris awal yang dipertahankan selama pemotongan | | `rules.tailLines` | tidak | Baris akhir yang dipertahankan untuk konteks terbaru | | `rules.onEmpty` | tidak | Pesan cadangan ketika pemfilteran menghapus seluruh konten | | `rules.filterStderr` | tidak | Menormalisasi prefiks stderr umum sebelum tahap pemfilteran berikutnya | | `preserve.errorPatterns` | tidak | Baris kesalahan yang harus tetap ada setelah pemotongan | | `preserve.summaryPatterns` | tidak | Baris ringkasan yang harus tetap ada setelah pemotongan | | `tests[]` | tidak | Sampel verifikasi sebaris yang digunakan oleh gerbang verifikasi RTK | RTK menerapkan tahapan deklaratif dalam urutan berikut: `stripAnsi`, `filterStderr`, `replace`, `matchOutput`, `dropPatterns`/`includePatterns`, `truncateLineAt`, `headLines`/`tailLines`, `maxLines`, dan `onEmpty`. Filter kustom dapat dimuat dari: 1. File `.rtk/filters.json` proyek hanya setelah hash `.rtk/trust.json` yang cocok tersedia atau `trustProjectFilters` diaktifkan. 2. `DATA_DIR/rtk/filters.json` global. 3. Filter bawaan. File kustom proyek/global dapat berisi satu objek filter atau sebuah array objek filter. Filter kustom yang tidak valid dilewati dengan diagnostik; filter bawaan yang tidak valid menggagalkan validasi. File kepercayaan proyek: ```json { "filtersSha256": "0123456789abcdef..." } ``` Penggantian lingkungan `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS=1` memercayai filter proyek tanpa hash dan penggunaannya sebaiknya dibatasi pada pengembangan lokal yang terkendali. ## Aturan Keamanan - Pastikan aturan bersifat idempoten: menjalankan filter yang sama dua kali tidak boleh merusak output. - Pertahankan teks kesalahan, jalur file, nomor baris, dan ringkasan perintah secara persis jika memungkinkan. - Hindari aturan yang memodifikasi blok kode, payload JSON, URL, atau data rahasia. - Tambahkan cakupan unit untuk keluarga perintah baru dalam pengujian detektor/filter. - Tambahkan sampel `tests[]` ke setiap filter bawaan dan filter kustom bersama. ## Validasi Paket aturan divalidasi sebelum digunakan. Paket Caveman bawaan dan filter RTK bawaan langsung gagal selama validasi agar aset rilis yang rusak terdeteksi sebelum dikirim. Filter RTK kustom dilewati disertai diagnostik ketika penguraian atau validasi kepercayaan gagal. Validasi terfokus: ```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 ```