# RTK Compression (Suomi) 🌐 **Languages:** đŸ‡ș🇾 [English](../../../../compression/RTK_COMPRESSION.md) · đŸ‡ȘđŸ‡č [am](../../../am/docs/compression/RTK_COMPRESSION.md) · 🇾🇩 [ar](../../../ar/docs/compression/RTK_COMPRESSION.md) · 🇩🇿 [az](../../../az/docs/compression/RTK_COMPRESSION.md) · 🇧🇬 [bg](../../../bg/docs/compression/RTK_COMPRESSION.md) · đŸ‡§đŸ‡© [bn](../../../bn/docs/compression/RTK_COMPRESSION.md) · 🇧🇩 [bs](../../../bs/docs/compression/RTK_COMPRESSION.md) · 🇹🇿 [cs](../../../cs/docs/compression/RTK_COMPRESSION.md) · đŸ‡©đŸ‡° [da](../../../da/docs/compression/RTK_COMPRESSION.md) · đŸ‡©đŸ‡Ș [de](../../../de/docs/compression/RTK_COMPRESSION.md) · đŸ‡ŹđŸ‡· [el](../../../el/docs/compression/RTK_COMPRESSION.md) · đŸ‡Ș🇾 [es](../../../es/docs/compression/RTK_COMPRESSION.md) · đŸ‡ȘđŸ‡Ș [et](../../../et/docs/compression/RTK_COMPRESSION.md) · đŸ‡źđŸ‡· [fa](../../../fa/docs/compression/RTK_COMPRESSION.md) · đŸ‡«đŸ‡· [fr](../../../fr/docs/compression/RTK_COMPRESSION.md) · 🇼đŸ‡Ș [ga](../../../ga/docs/compression/RTK_COMPRESSION.md) · 🇼🇳 [gu](../../../gu/docs/compression/RTK_COMPRESSION.md) · 🇳🇬 [ha](../../../ha/docs/compression/RTK_COMPRESSION.md) · đŸ‡źđŸ‡± [he](../../../he/docs/compression/RTK_COMPRESSION.md) · 🇼🇳 [hi](../../../hi/docs/compression/RTK_COMPRESSION.md) · đŸ‡­đŸ‡· [hr](../../../hr/docs/compression/RTK_COMPRESSION.md) · 🇭đŸ‡ș [hu](../../../hu/docs/compression/RTK_COMPRESSION.md) · 🇩đŸ‡Č [hy](../../../hy/docs/compression/RTK_COMPRESSION.md) · đŸ‡źđŸ‡© [id](../../../id/docs/compression/RTK_COMPRESSION.md) · 🇳🇬 [ig](../../../ig/docs/compression/RTK_COMPRESSION.md) · 🇼đŸ‡č [it](../../../it/docs/compression/RTK_COMPRESSION.md) · đŸ‡ŻđŸ‡” [ja](../../../ja/docs/compression/RTK_COMPRESSION.md) · 🇬đŸ‡Ș [ka](../../../ka/docs/compression/RTK_COMPRESSION.md) · 🇰🇭 [km](../../../km/docs/compression/RTK_COMPRESSION.md) · 🇼🇳 [kn](../../../kn/docs/compression/RTK_COMPRESSION.md) · đŸ‡°đŸ‡· [ko](../../../ko/docs/compression/RTK_COMPRESSION.md) · đŸ‡±đŸ‡č [lt](../../../lt/docs/compression/RTK_COMPRESSION.md) · đŸ‡±đŸ‡» [lv](../../../lv/docs/compression/RTK_COMPRESSION.md) · 🇼🇳 [ml](../../../ml/docs/compression/RTK_COMPRESSION.md) · 🇼🇳 [mr](../../../mr/docs/compression/RTK_COMPRESSION.md) · đŸ‡ČđŸ‡Ÿ [ms](../../../ms/docs/compression/RTK_COMPRESSION.md) · đŸ‡ČđŸ‡č [mt](../../../mt/docs/compression/RTK_COMPRESSION.md) · đŸ‡ČđŸ‡Č [my](../../../my/docs/compression/RTK_COMPRESSION.md) · đŸ‡łđŸ‡” [ne](../../../ne/docs/compression/RTK_COMPRESSION.md) · đŸ‡łđŸ‡± [nl](../../../nl/docs/compression/RTK_COMPRESSION.md) · 🇳🇮 [no](../../../no/docs/compression/RTK_COMPRESSION.md) · 🇼🇳 [or](../../../or/docs/compression/RTK_COMPRESSION.md) · 🇼🇳 [pa](../../../pa/docs/compression/RTK_COMPRESSION.md) · đŸ‡”đŸ‡­ [phi](../../../phi/docs/compression/RTK_COMPRESSION.md) · đŸ‡”đŸ‡± [pl](../../../pl/docs/compression/RTK_COMPRESSION.md) · đŸ‡”đŸ‡č [pt](../../../pt/docs/compression/RTK_COMPRESSION.md) · đŸ‡§đŸ‡· [pt-BR](../../../pt-BR/docs/compression/RTK_COMPRESSION.md) · đŸ‡·đŸ‡Ž [ro](../../../ro/docs/compression/RTK_COMPRESSION.md) · đŸ‡·đŸ‡ș [ru](../../../ru/docs/compression/RTK_COMPRESSION.md) · đŸ‡±đŸ‡° [si](../../../si/docs/compression/RTK_COMPRESSION.md) · 🇾🇰 [sk](../../../sk/docs/compression/RTK_COMPRESSION.md) · 🇾🇼 [sl](../../../sl/docs/compression/RTK_COMPRESSION.md) · đŸ‡·đŸ‡ž [sr](../../../sr/docs/compression/RTK_COMPRESSION.md) · 🇾đŸ‡Ș [sv](../../../sv/docs/compression/RTK_COMPRESSION.md) · 🇰đŸ‡Ș [sw](../../../sw/docs/compression/RTK_COMPRESSION.md) · 🇼🇳 [ta](../../../ta/docs/compression/RTK_COMPRESSION.md) · 🇼🇳 [te](../../../te/docs/compression/RTK_COMPRESSION.md) · đŸ‡č🇭 [th](../../../th/docs/compression/RTK_COMPRESSION.md) · đŸ‡čđŸ‡· [tr](../../../tr/docs/compression/RTK_COMPRESSION.md) · đŸ‡ș🇩 [uk-UA](../../../uk-UA/docs/compression/RTK_COMPRESSION.md) · đŸ‡”đŸ‡° [ur](../../../ur/docs/compression/RTK_COMPRESSION.md) · đŸ‡ș🇿 [uz](../../../uz/docs/compression/RTK_COMPRESSION.md) · đŸ‡»đŸ‡ł [vi](../../../vi/docs/compression/RTK_COMPRESSION.md) · 🇳🇬 [yo](../../../yo/docs/compression/RTK_COMPRESSION.md) · 🇹🇳 [zh-CN](../../../zh-CN/docs/compression/RTK_COMPRESSION.md) · đŸ‡čđŸ‡Œ [zh-TW](../../../zh-TW/docs/compression/RTK_COMPRESSION.md) --- RTK-pakkaus on OmniRouten komentotietoinen pakkausmoottori pÀÀte- ja työkalutulosteille. Se on suunniteltu koodausagentti-istuntoihin, joissa kontekstin kasvu johtuu enimmĂ€kseen testilokeista, koontitulosteista, paketinhallinnan ylimÀÀrĂ€isestĂ€ tulosteesta, komentotulkin istuntotallenteista, Docker-tulosteista, git-tulosteista ja pinojĂ€ljityksistĂ€. RTK:ta voidaan kĂ€yttÀÀ suoraan asetuksella `defaultMode: "rtk"` tai pinotun kĂ€sittelyketjun ensimmĂ€isenĂ€ vaiheena, yleensĂ€: ```txt rtk -> caveman ``` TĂ€ssĂ€ jĂ€rjestyksessĂ€ pakataan ensin kohinainen konetuloste, minkĂ€ jĂ€lkeen Caveman tiivistÀÀ jĂ€ljelle jÀÀvĂ€n tekstin. AlkuperĂ€inen RTK ilmoittaa komentotulosteiden sÀÀstöksi `60-90%`. Sen README-tiedoston esimerkki-istunto pienenee `~118,000` vakiotokenista `~23,900` RTK-tokeniin, mikĂ€ tarkoittaa `79.7%`:n sÀÀstöÀ (`~80%`). OmniRoute kĂ€yttÀÀ tĂ€tĂ€ alkuperĂ€isen toteutuksen keskiarvoa laskiessaan pinottua sÀÀstöÀ Cavemanin syötepakkauksen kanssa: ```txt RTK:n keskiarvo: 80% sÀÀstetty Caveman-syöte: 46% sÀÀstetty Pinottu: 1 - (1 - 0.80) * (1 - 0.46) = 89.2% sÀÀstetty VaihteluvĂ€li: 1 - (1 - 0.60..0.90) * (1 - 0.46) = 78.4-94.6% ``` ## MitĂ€ se pakkaa SisÀÀnrakennettu luettelo sisĂ€ltÀÀ tĂ€llĂ€ hetkellĂ€ 49 suodatinta seuraavissa luokissa: | Luokka | EsimerkkejĂ€ | | --------- | ------------------------------------------------------------- | | `git` | `git status`, `git branch`, `git diff`, `git log` | | `test` | Vitest, Jest, Pytest, Playwright, Go-testit, Cargo-testit | | `build` | TypeScript, ESLint, Biome, Prettier, Vite, Webpack, Turbo, Nx | | `package` | `npm install`, `npm audit`, `pip`, `uv sync`, Poetry, Bundler | | `shell` | `ls`, `find`, `grep`, yleiset komentotulkkilokit | | `docker` | `docker ps`, Docker-lokit | | `infra` | Terraform, OpenTofu, `systemctl status` | | `generic` | JSON-tuloste, pinojĂ€ljitykset, yleinen tulosteen vararatkaisu | Tunnistin tiedostossa `open-sse/services/compression/engines/rtk/commandDetector.ts` luokittelee tulosteen ennen suodattimen valintaa. Suodattimet voivat tĂ€smĂ€tĂ€ myös komentomallin tai tulosteen sÀÀnnöllisen lausekkeen perusteella, kun komentoluokka ei riitĂ€. ## Suodattimien ratkaiseminen RTK lataa suodattimet tĂ€ssĂ€ jĂ€rjestyksessĂ€: 1. Projektisuodattimet tiedostoista `.rtk/filters.toml` ja `.rtk/filters.json`, vain kun niihin luotetaan. 2. Yleiset suodattimet tiedostoista `DATA_DIR/rtk/filters.toml` ja `DATA_DIR/rtk/filters.json`. 3. SisÀÀnrakennetut suodattimet hakemistosta `open-sse/services/compression/engines/rtk/filters/`. Samassa vaikutusalueessa RTK:n TOML-skeeman v1 suodattimet ovat etusijalla OmniRouten JSON-suodattimiin nĂ€hden. TOML-muotoiset `match_command`-lausekkeet tarkistetaan ennen komentotyyppiin perustuvaa tĂ€smĂ€ytystĂ€, jotta tuotu komentokohtainen suodatin voi ohittaa saman vaikutusalueen yleisemmĂ€n suodattimen. Projektin vaikutusalue on edelleen etusijalla yleiseen vaikutusalueeseen nĂ€hden tiedostomuodosta riippumatta. Projektisuodattimet edellyttĂ€vĂ€t tarkoituksella erillistĂ€ luottamusta, koska sÀÀnnöllisiin lausekkeisiin perustuvat suodattimet voivat muuttaa sitĂ€, miten työkalutuloste nĂ€ytetÀÀn agenteille. Projektin suodatintiedosto hyvĂ€ksytÀÀn, kun jokin seuraavista ehdoista tĂ€yttyy: - `rtkConfig.trustProjectFilters` on `true`. - `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS=1` on asetettu. - `.rtk/trust.json` sisĂ€ltÀÀ projektin suodatintiedostoa vastaavan SHA-256-tiivisteen. Esimerkki luottamustiedostosta: ```json { "filtersSha256": "0123456789abcdef...", "filtersTomlSha256": "fedcba9876543210..." } ``` Tiivisteet ovat erillisiĂ€: `filtersSha256` myöntÀÀ luottamuksen tiedostolle `.rtk/filters.json`, kun taas `filtersTomlSha256` myöntÀÀ luottamuksen tiedostolle `.rtk/filters.toml`. Kumman tahansa tiedoston muokkaaminen mitĂ€töi vain sen oman luottamusmerkinnĂ€n. Yleiset tiedostot ovat jĂ€rjestelmĂ€nvalvojan asentamia ja kĂ€yttĂ€vĂ€t nykyistĂ€ yleisten suodattimien luottamuskĂ€ytĂ€ntöÀ. Mukautetut suodattimet voivat olla yksi suodatinobjekti tai suodatinobjektien taulukko. Virheelliset mukautetut suodattimet ohitetaan ja ilmoitetaan `/api/context/rtk/filters`-diagnostiikassa. Virheelliset sisÀÀnrakennetut suodattimet aiheuttavat vĂ€littömĂ€n virheen. ## RTK TOML -skeeman v1-yhteensopivuus OmniRoute voi jĂ€sentÀÀ, validoida, testata ja asentaa deklaratiivisia suodatintiedostoja, jotka kĂ€yttĂ€vĂ€t RTK TOML -skeeman versiota 1. Tuetut kentĂ€t ovat `description`, `match_command`, `strip_ansi`, `filter_stderr`, `strip_lines_matching`, `keep_lines_matching`, `replace`, `match_output`, `truncate_lines_at`, `head_lines`, `tail_lines`, `max_lines`, `on_empty` ja sisĂ€iset `[[tests.]]`-testit. Tuntemattomat kentĂ€t, virheelliset tai vaaralliset sÀÀnnölliset lausekkeet, samanaikaiset poisto- ja sĂ€ilytyssÀÀnnöt, yli 1 MiB:n tiedostot sekĂ€ viittaukset tuntemattomiin suodattimiin hylĂ€tÀÀn. Tiedosto, jonka sisĂ€iset testit epĂ€onnistuvat, voidaan validoida tarkastelua varten, mutta sitĂ€ ei voi asentaa tai ladata. Mukautettujen tiedostojen latausvirheet noudattavat edelleen fail-open-periaatetta: virheellinen tiedosto ohitetaan, ja jĂ€ljellĂ€ olevat suodattimet jatkavat toimintaansa. OmniRoute vastaanottaa työkalun tulosteen vasta sen jĂ€lkeen, kun asiakasohjelma on jo tallentanut sen, joten `filter_stderr = true` ei voi muuttaa prosessin tulosteen tallennusta. KenttĂ€ hyvĂ€ksytÀÀn, mutta sillĂ€ ei ole vaikutusta, ja validointi palauttaa varoituksen. TĂ€tĂ€ kuvataan tarkoituksella **RTK TOML -skeeman v1-yhteensopivuudeksi**, ei tĂ€ydelliseksi yhteensopivuudeksi RTK-suoritettavan tiedoston, komentotulkin koukkujen, Rust-komentototeutusten tai sen luottamussĂ€ilön rakenteen kanssa. Hallintapaneelin edistynyt RTK-nĂ€kymĂ€ hyvĂ€ksyy liitetyn tai palvelimeen ladatun TOML-sisĂ€llön. Validointi on vain luku -toiminto. Asennus kirjoittaa tiedoston `DATA_DIR/rtk/filters.toml` atomisesti rajoitetuin kĂ€yttöoikeuksin ja pĂ€ivittÀÀ aktiivisen suodatinluettelon ilman uudelleenkĂ€ynnistystĂ€. Olemassa olevan tiedoston korvaaminen edellyttÀÀ nimenomaista `overwrite`-vahvistusta, ja toiminto luo ensin tiedoston `DATA_DIR/rtk/filters.toml.bak`. ## Suodattimien DSL Suodattimet kĂ€yttĂ€vĂ€t dokumentissa [PakkaussÀÀntöjen muoto](./COMPRESSION_RULES_FORMAT.md) kuvattua JSON-skeemaa. Ajonaikainen jĂ€rjestelmĂ€ suorittaa nĂ€mĂ€ vaiheet seuraavassa jĂ€rjestyksessĂ€: ```txt stripAnsi -> filterStderr -> replace -> matchOutput -> rivien poistaminen/sisĂ€llyttĂ€minen -> truncateLineAt -> head/tail/maxLines -> onEmpty ``` TĂ€rkeĂ€t kentĂ€t: | KenttĂ€ | Tarkoitus | | ---------------------------- | ------------------------------------------------------------------------------- | | `rules.stripAnsi` | Poista pÀÀtteen vĂ€ri- ja ohjaussekvenssit ennen tĂ€smĂ€ytystĂ€ | | `rules.filterStderr` | Normalisoi yleiset stderr-etuliitteet ennen tĂ€smĂ€ytystĂ€/suodatusta | | `rules.replace` | Suorita jĂ€rjestetyt sÀÀnnöllisten lausekkeiden korvaukset | | `rules.matchOutput` | Palauta tiivis yhteenveto, kun tuloste vastaa tunnettua tilannetta | | `rules.matchOutput[].unless` | Ohita oikopolku, kun virhe- tai epĂ€onnistumismalli esiintyy | | `rules.dropPatterns` | Poista tarpeettoman meluisat rivit | | `rules.includePatterns` | Suosi toimintaa edellyttĂ€viĂ€ rivejĂ€ | | `rules.collapsePatterns` | YhdistĂ€ toistuvat tĂ€smÀÀvĂ€t rivit | | `rules.deduplicate` | Suodatinkohtainen valinnainen toiminto: yhdistĂ€ perĂ€kkĂ€iset kaksoiskappalerivit | | `rules.truncateLineAt` | Unicode-turvallinen rivikohtainen katkaisu | | `rules.onEmpty` | Varaviesti, jos kaikki rivit suodatetaan pois | | `tests[]` | Vahvistusportin kĂ€yttĂ€mĂ€t sisĂ€iset esimerkit | SisÀÀnrakennettujen suodattimien odotetaan sisĂ€ltĂ€vĂ€n sisĂ€isiĂ€ `tests[]`-esimerkkejĂ€. Myös mukautettujen suodattimien tulisi sisĂ€ltÀÀ niitĂ€, erityisesti silloin, kun suodattimia jaetaan projektien kesken. ## Rivien duplikaattien poisto (kaksi tasoa) RTK yhdistÀÀ pÀÀllekkĂ€iset rivit kahdella toisistaan riippumattomalla tasolla: 1. **Suodatinkohtainen `deduplicate` (valinnainen, oletus `false`).** Suodatin voi mÀÀrittÀÀ asetuksen `rules.deduplicate: true` yhdistÀÀkseen perĂ€kkĂ€iset pÀÀllekkĂ€iset rivit _kyseisen suodattimen tĂ€smÀÀmĂ€ssĂ€ tulosteessa_ ennen katkaisua. TĂ€mĂ€ suoritetaan tiedoston `lineFilter.ts` sisĂ€llĂ€. Vanhoille suodattimille se otetaan automaattisesti kĂ€yttöön, kun suodatin mÀÀrittÀÀ `collapsePatterns`-asetuksen. Skeema: `deduplicate: z.boolean().default(false)` tiedostossa `open-sse/services/compression/engines/rtk/filterSchema.ts`. 2. **Koko moottorin `deduplicateThreshold` (oletus `3`).** Kun kaikki suodattimet on suoritettu, moottori yhdistÀÀ koko tuloksesta kaikki vĂ€hintÀÀn `deduplicateThreshold` identtisen perĂ€kkĂ€isen rivin jaksot (`deduplicateRepeatedLines`, kĂ€ytössĂ€ tiedostossa `engines/rtk/index.ts`). Normalisoinnissa arvon rajat ovat 2–100. Suodatinkohtainen vaihe suoritetaan ensin (suodattimen sisĂ€llĂ€) ja koko moottorin kattava vaihe viimeisenĂ€ (yhdistetylle tulosteelle), joten ne toimivat yhdessĂ€ ilman kaksinkertaista laskentaa. ## Rivien ryhmittely (`enableGrouping`) Kun `rtkConfig.enableGrouping` on `true` (oletus `false`), RTK suorittaa duplikaattien poiston jĂ€lkeiselle tulokselle lisĂ€ksi `groupSimilarLines`-vaiheen, joka yhdistÀÀ perĂ€kkĂ€iset _lĂ€hes vastaavat_ (eivĂ€t tavutasolla identtiset) rivit. `rtkConfig.groupingThreshold` (oletus `3`) on ryhmittelyn kĂ€ynnistĂ€vĂ€ jakson vĂ€himmĂ€ispituus. TĂ€mĂ€ on `deduplicateThreshold`-asetuksen rakenteellinen vastine: duplikaattien poisto kĂ€sittelee tĂ€smĂ€lliset toistot, ryhmittely puolestaan ”saman muodon pienin eroin”. Molemmat asetukset ovat osa `key_value`-tauluun tallennettua `rtkConfig`-JSON-objektia (katso yllĂ€ oleva MÀÀritys), joten asetus sĂ€ilyy uudelleenkĂ€ynnistysten vĂ€lillĂ€. ## Koodikommenttien poistaminen (`stripCodeComments` / `preserveDocstrings`) Kun `rtkConfig.applyToCodeBlocks` on kĂ€ytössĂ€, RTK voi myös poistaa kommentit aidatuista koodilohkoista: - `stripCodeComments` (oletus `false`) — valinnainen. Kun arvo on `true`, RTK poistaa kommentit JavaScript- ja TypeScript-koodilohkoista. Aiemmin asetus luettiin mutta sitĂ€ ei koskaan sovellettu, joten oletuksena kommentit sĂ€ilytetÀÀn, jotta tuotantoon ei tule huomaamatonta muutosta. - `preserveDocstrings` (oletus `true`) — kommentteja poistettaessa JSDoc-/`/** 
 */`-lohkokommentit sĂ€ilytetÀÀn (ne sisĂ€ltĂ€vĂ€t API-dokumentaatiota, jonka arvo ylittÀÀ niiden viemĂ€n tavumÀÀrĂ€n). Aseta arvoksi `false`, jos haluat poistaa myös ne. Kommenttien poisto on toteutettu tiedostossa `open-sse/services/compression/engines/rtk/codeStripper.ts`. Se kĂ€yttÀÀ **TypeScript-jĂ€sennintĂ€** (ei sÀÀnnöllistĂ€ lauseketta), jotta merkkijono-, malline- ja sÀÀnnöllisten lausekkeiden literaaleja ei koskaan tulkita virheellisesti kommenteiksi. LisĂ€ksi toiminto keskeytetÀÀn kokonaan, jos JSX:ÀÀ havaitaan (jotta JSX:n lausekesĂ€ilöjen kommentit eivĂ€t koskaan vioitu). Kommenttien poisto koskee tĂ€llĂ€ hetkellĂ€ **vain JavaScriptiĂ€ ja TypeScriptiĂ€** — muissa poistajan `CodeLanguage`-joukon kielissĂ€ (Python, Rust, Go, Ruby, Java) tyhjĂ€t rivit ja tyhjĂ€tilat yhdistetÀÀn, mutta kommentteja ei poisteta. KĂ€sitellyn lohkon suoritus merkitÀÀn `rulesApplied`-kentĂ€ssĂ€ tunnisteella `rtk:code-strip`. > **Huomautus — GCF / taulukkomuotoinen koodaus on erillinen moottori.** RTK **ei** sisĂ€llĂ€ ”GCF”- > (Graph Compact Format) taulukko-/sarakemuotoista JSON-kooderia. Kyseinen kooderi — joka korvasi vanhemman > `omni-tabular`-kooderin — sijaitsee **headroom**-moottorissa > (`open-sse/services/compression/engines/headroom/`, ja mukana toimitettu koodekki hakemistossa > `headroom/gcf/`). Se ei liity tĂ€ssĂ€ dokumentoituun RTK-suodatinputkeen. ## MÀÀritykset Yleiset asetukset ovat kĂ€ytettĂ€vissĂ€ osoitteessa `/api/settings/compression`. RTK-kohtaiset asetukset ovat myös kĂ€ytettĂ€vissĂ€ osoitteessa `/api/context/rtk/config`. ```json { "defaultMode": "stacked", "autoTriggerMode": "stacked", "autoTriggerTokens": 32000, "stackedPipeline": [ { "engine": "rtk", "intensity": "standard" }, { "engine": "caveman", "intensity": "full" } ], "rtkConfig": { "enabled": true, "intensity": "standard", "applyToToolResults": true, "applyToCodeBlocks": false, "applyToAssistantMessages": false, "enabledFilters": [], "disabledFilters": [], "maxLinesPerResult": 120, "maxCharsPerResult": 12000, "deduplicateThreshold": 3, "customFiltersEnabled": true, "trustProjectFilters": false, "rawOutputRetention": "never", "rawOutputMaxBytes": 1048576, "enableGrouping": false, "groupingThreshold": 3, "stripCodeComments": false, "preserveDocstrings": true } } ``` `enabledFilters` ja `disabledFilters` kĂ€yttĂ€vĂ€t suodatintunnuksia, kuten `test-vitest` tai `git-diff`. `rtkConfig`-objektin koko rakenne mÀÀritellÀÀn `RtkConfig`- / `DEFAULT_RTK_CONFIG`-mÀÀrityksillĂ€ tiedostossa `open-sse/services/compression/types.ts`. Koko objekti sĂ€ilytetÀÀn yhtenĂ€ JSON-arvona SQLiten `key_value`-taulussa arvoilla `namespace = "compression"`, `key = "rtkConfig"` (`src/lib/db/compression.ts`), ja `normalizeRtkConfig` normalisoi sen luettaessa. NĂ€in ollen kaikki alla olevat kentĂ€t — mukaan lukien `enableGrouping`, `groupingThreshold`, `stripCodeComments` ja `preserveDocstrings` — kulkevat saman tallennuksen kautta molempiin suuntiin ja sĂ€ilyvĂ€t uudelleenkĂ€ynnistyksen jĂ€lkeen. | Avain | Oletusarvo | Tarkoitus | | ---------------------- | ---------- | --------------------------------------------------------------------------------------------------------- | | `deduplicateThreshold` | `3` | Koko moottoria koskeva: identtisten perĂ€kkĂ€isten rivien vĂ€himmĂ€ismÀÀrĂ€ tiivistĂ€mistĂ€ varten (rajat 2–100) | | `enableGrouping` | `false` | Valinnainen: tiivistĂ€ lĂ€hes vastaavien perĂ€kkĂ€isten rivien jaksot | | `groupingThreshold` | `3` | Samankaltaisten perĂ€kkĂ€isten rivien vĂ€himmĂ€ismÀÀrĂ€, joka kĂ€ynnistÀÀ ryhmittelyn | | `stripCodeComments` | `false` | Valinnainen: poista kommentit aidatuista koodilohkoista (edellyttÀÀ `applyToCodeBlocks`-asetusta) | | `preserveDocstrings` | `true` | SĂ€ilytĂ€ JSDoc-/`/** 
 */`-lohkot kommentteja poistettaessa | ## API | Reitti | MenetelmĂ€ | Tarkoitus | | ---------------------------------- | --------- | --------------------------------------------------------- | | `/api/context/rtk/config` | GET | Lue RTK-mÀÀritykset | | `/api/context/rtk/config` | PUT | PĂ€ivitĂ€ RTK-mÀÀritykset | | `/api/context/rtk/filters` | GET | Listaa suodatinluettelo ja latausdiagnostiikka | | `/api/context/rtk/import` | POST | Validoi tai asenna RTK TOML -skeeman version 1 tiedostoja | | `/api/context/rtk/test` | POST | Esikatsele yhden tekstihyötykuorman RTK-pakkausta | | `/api/context/rtk/raw-output/[id]` | GET | Lue sĂ€ilytetty ja peitetty raakatuotos | | `/api/compression/preview` | POST | Esikatsele mitĂ€ tahansa pakkaustilaa | RTK-testihyötykuorma: ```json { "command": "npm test", "text": "FAIL tests/example.test.ts\nAssertionError: expected true\nTest Files 1 failed", "config": { "intensity": "standard" } } ``` Pakkauksen esikatselun hyötykuorma: ```json { "mode": "stacked", "messages": [ { "role": "tool", "content": "FAIL tests/example.test.ts\nAssertionError: expected true\nTest Files 1 failed" } ], "config": { "rtkConfig": { "rawOutputRetention": "failures" } } } ``` Hallintareitit edellyttĂ€vĂ€t hallintapaneelin hallintatodennusta tai vastaavaa API-avainkĂ€ytĂ€ntöÀ. RTK TOML -validoinnin hyötykuorma: ```json { "action": "validate", "content": "schema_version = 1\n\n[filters.my-tool]\nmatch_command = \"^my-tool\\\\b\"\nmax_lines = 20\n" } ``` Asenna validoitu tiedosto yleisesti kĂ€yttĂ€mĂ€llĂ€ arvoa `"action": "install"`. LisÀÀ `"overwrite": true` vasta, kun olet tarkistanut ja vahvistanut olemassa olevan yleisen tiedoston korvaamisen. ## Raakatulosteen palautus RTK palauttaa tavallisesti vain pakatun tekstin. VianmÀÀritystĂ€ varten `rawOutputRetention` voi sĂ€ilyttÀÀ sensuroidun raakatulosteen: | Arvo | Toiminta | | ---------- | -------------------------------------------------------------- | | `never` | ÄlĂ€ sĂ€ilytĂ€ raakatulostetta | | `failures` | SĂ€ilytĂ€ vain todennĂ€köisiin epĂ€onnistumisiin liittyvĂ€ tuloste | | `always` | SĂ€ilytĂ€ kaikki pakatut RTK-raakatulosteet sensuroinnin jĂ€lkeen | SĂ€ilytetyt tiedostot kirjoitetaan hakemistoon: ```txt DATA_DIR/rtk/raw-output/ ``` Salaisuudet sensuroidaan ennen tallennusta. TĂ€mĂ€ koskee esimerkiksi yleisiĂ€ bearer-tunnuksia, API-avaimia, Slack-tunnuksia, AWS-kĂ€yttöavaimia sekĂ€ sijoitusmuotoisia `token=...`-, `secret=...`- ja `password=...`-arvoja. Analytiikkaan tallennetaan vain viitetunnus sekĂ€ koko- ja tiivistemetatiedot. ## Varmennusportti Kohdennettu varmennusportti suorittaa sisÀÀnrakennetut inline-suodatintestit kĂ€ynnistĂ€mĂ€ttĂ€ ulkoisia komentoja komentotulkin kautta: ```bash node --import tsx/esm --test tests/unit/compression/rtk-verify.test.ts ``` Laajempi RTK-portti on: ```bash node --import tsx/esm --test \ tests/unit/compression/rtk-*.test.ts \ tests/unit/compression/pipeline-integration.test.ts \ tests/unit/compression/context-compression-api.test.ts ``` Suorita laaja pakkausportti ennen julkaisua: ```bash node --import tsx/esm --test \ tests/unit/compression/*.test.ts \ tests/golden-set/*.test.ts \ tests/integration/compression-pipeline.test.ts \ tests/unit/api/compression/compression-api.test.ts ``` ## RTK:n laajentaminen 1. LisÀÀ suodattimen JSON-tiedosto tai pĂ€ivitĂ€ sitĂ€. 2. SisĂ€llytĂ€ vĂ€hintÀÀn yksi `tests[]`-esimerkki, joka todentaa tĂ€rkeĂ€n toiminnan. 3. LisÀÀ uusille komentoperheille testiaineisto hakemistoon `tests/unit/compression/fixtures/rtk/`. 4. LisÀÀ komentojen tunnistuksen testikattavuus, kun otat kĂ€yttöön uuden tulosteluokan. 5. Suorita varmennusportti ja laajemmat RTK-portit. 6. Jos suodatin on projektikohtainen, commitoi `.rtk/filters.json` ja pĂ€ivitĂ€ `.rtk/trust.json` vasta katselmoinnin jĂ€lkeen. --- ## Intensiteettitasot (v3.8.16+) RTK tukee **kolmea intensiteettitasoa**, jotka tasapainottavat **pakkauksen aggressiivisuutta** ja **turvallisuutta**. Taso asetetaan moottorin mÀÀrityksen `config.intensity`-arvolla. ### Kolme tasoa | Taso | Katkaisukynnys | TunnistesÀÀstö | Riski | Soveltuu parhaiten | | ------------------- | ---------------------- | -------------- | -------------- | ----------------------------------------- | | `minimal` | 24 riviĂ€ osiota kohden | ~20-40% | ErittĂ€in pieni | Tuotantoon, jossa konteksti on kriittinen | | `standard` (oletus) | 24 riviĂ€ osiota kohden | ~50-70% | Pieni | PĂ€ivittĂ€isiin koodausistuntoihin | | `aggressive` | 16 riviĂ€ osiota kohden | ~70-90% | Keskisuuri | Pitkiin istuntoihin ja maksimisÀÀstöihin | ### MissĂ€ katkaisu tapahtuu Katkaisukynnys vaikuttaa tiedostoon `lineFilter.ts`: ```ts // Tiedostosta open-sse/services/compression/engines/rtk/index.ts:329-330 config.intensity === "aggressive" ? 16 : 24, config.intensity === "aggressive" ? 16 : 24, ``` Kunkin osion **alku** ja **loppu** sĂ€ilytetÀÀn; keskellĂ€ oleva sisĂ€ltö poistetaan, kun katkaisu aktivoituu. ### MikĂ€ sĂ€ilyy ja mikĂ€ poistetaan | SisĂ€ltö | minimal | standard | aggressive | | ------------------------------- | --------------- | --------------- | --------------- | | Virheet / pinojĂ€ljet | ✅ sĂ€ilytetÀÀn | ✅ sĂ€ilytetÀÀn | ✅ sĂ€ilytetÀÀn | | Testien epĂ€onnistumiset | ✅ sĂ€ilytetÀÀn | ✅ sĂ€ilytetÀÀn | ✅ sĂ€ilytetÀÀn | | Koontivirheet | ✅ sĂ€ilytetÀÀn | ✅ sĂ€ilytetÀÀn | ✅ sĂ€ilytetÀÀn | | LĂ€pĂ€istyt testit (monisanaiset) | ✅ sĂ€ilytetÀÀn | 🟡 tiivistetÀÀn | 🟡 tiivistetÀÀn | | Rutiinituloste (infolokit) | 🟡 tiivistetÀÀn | 🟡 tiivistetÀÀn | ❌ poistetaan | | Edistymispalkit | 🟡 tiivistetÀÀn | ❌ poistetaan | ❌ poistetaan | | Bannerit / ASCII-taide | 🟡 tiivistetÀÀn | ❌ poistetaan | ❌ poistetaan | ### Oikean intensiteetin valitseminen ``` Onko kontekstin menettĂ€minen katastrofaalista? │ ┌───────────┌───────────┐ │ │ │ KYLLÄ EI EN OSAA SANOA │ │ │ â–Œ │ │ minimal │ │ │ │ │ │ â–Œ â–Œ │ Kuinka tĂ€rkeÀÀ Kokeile ensin `standard`-tasoa │ suorituskyky (toimii 80 %:ssa │ on? tapauksista) │ │ │ ┌────┮────┐ │ │ │ │ VÄHÄINEN SUURI │ │ │ │ â–Œ â–Œ │ standard aggressive │ │ │ └──────┮─────────┘ ``` ### Intensiteetin mÀÀrittĂ€minen **YhdistelmĂ€kohtaisesti** (yhdistelmĂ€n mÀÀrityksessĂ€): ```json { "combo": "my-coding-combo", "routing": {/* ... */}, "compression": { "engine": "rtk", "intensity": "aggressive" } } ``` **Ohjelmallisesti**: `rtkEngine` (`@omniroute/open-sse/services/compression/engines/rtk`) on `CompressionEngine`, eikĂ€ sillĂ€ ole `updateConfig`-metodia. PĂ€ivitĂ€ moottorin mÀÀritys sen sijaan rekisterin apufunktion kautta: ```ts import { updateEngineConfig } from "@omniroute/open-sse/services/compression/engines/registry"; updateEngineConfig("rtk", { intensity: "aggressive" }); ``` ### Vaikutuksen varmentaminen Varmista **varmennusportin** avulla (katso jĂ€ljempĂ€nĂ€), ettĂ€ suodatin on turvallinen valitsemallasi intensiteetillĂ€: ```ts import { runRtkFilterTests } from "omniroute/compression/engines/rtk/verify"; const result = runRtkFilterTests({ intensity: "aggressive" }); if (!result.passed) { console.error("Suodattimet epĂ€onnistuivat aggressive-intensiteetillĂ€"); } ``` --- ## Mukautettujen suodattimien kehittĂ€minen (v3.8.16+) Hakemisto `engines/rtk/filters/` sisĂ€ltÀÀ **yli 49 sisÀÀnrakennettua JSON-suodatintiedostoa**. Voit lisĂ€tĂ€ omia suodattimia pakataksesi sellaisten mukautettujen työkalujen tulosteen, joita oletusasetukset eivĂ€t kata. ### Suodattimen skeema (Zod) ```ts { "id": "string", // Pakollinen. Suodattimen tunniste (kebab-case, esim. "python-traceback") "label": "string", // Pakollinen. Ihmisen luettavissa oleva suodattimen nimi "description": "string", // Valinnainen (oletus: ""). Lyhyt kuvaus suodattimen toiminnasta "category": "git|test|build|shell|docker|package|infra|cloud|generic", "priority": number, // Valinnainen (0–100, oletus: 50). SuoritusjĂ€rjestys (suurempi = ensin) "match": { "commands": ["string"], // TĂ€smĂ€ttĂ€vĂ€t komentojen nimet (esim. "python", "pytest") "patterns": ["string"], // Tulosteeseen tĂ€smĂ€ttĂ€vĂ€t regex-lausekkeet "outputTypes": ["string"] // Tunnistetut tulosteluokat (esim. "test-failure") }, "rules": { "stripAnsi": boolean, // Valinnainen (oletus: false). Poista ANSI-vĂ€rikoodit "replace": [ // Etsi ja korvaa -sÀÀnnöt (oletus: []) { "pattern": "regex", "replacement": "..." } ], "matchOutput": [ // Lopeta kĂ€sittely heti, kun lauseke tĂ€smÀÀ (oletus: []) { "pattern": "regex", "message": "short summary", "unless": "regex" // Ohita, jos tĂ€mĂ€ lauseke tĂ€smÀÀ } ], "includePatterns": ["string"], // SĂ€ilytettĂ€vĂ€t rivit (regex-lausekkeet, oletus: []) "dropPatterns": ["string"], // Poistettavat rivit (regex-lausekkeet, oletus: []) "collapsePatterns": ["string"], // Yhdeksi esiintymĂ€ksi tiivistettĂ€vĂ€t rivit (oletus: []) "deduplicate": boolean, // Valinnainen (oletus: false). Poista pÀÀllekkĂ€iset rivit "truncateLineAt": number, // Valinnainen (oletus: 0). Katkaise rivit enimmĂ€ispituuteen "maxLines": number, // Valinnainen (oletus: 0). Rivien kokonaismÀÀrĂ€n ehdoton ylĂ€raja "headLines": number, // Valinnainen (oletus: 20). SĂ€ilytĂ€ tĂ€smĂ€nneen tulosteen ensimmĂ€iset N riviĂ€ "tailLines": number, // Valinnainen (oletus: 20). SĂ€ilytĂ€ tĂ€smĂ€nneen tulosteen viimeiset N riviĂ€ "onEmpty": "string", // Valinnainen (oletus: ""). Varaviesti, jos kaikki rivit suodatetaan pois "filterStderr": boolean // Valinnainen (oletus: false). Suodata myös stderr-tuloste }, "preserve": { "errorPatterns": ["string"], // Lausekkeet, jotka on aina sĂ€ilytettĂ€vĂ€ (oletus: []) "summaryPatterns": ["string"] // Loppuyhteenvetorivin lausekkeet (oletus: []) }, "tests": [ // SisĂ€iset varmennustestit (oletus: []) { "name": "string", // Pakollinen. Testin nimi "input": "sample output", // Pakollinen. Esimerkkisyöte "expected": "expected output", // Pakollinen. Odotettu pakattu tuloste "command": "optional command" // Valinnainen. Komentokonteksti } ] } ``` ### Esimerkki: Python-pinojĂ€lkisuodatin ```json { "id": "python-traceback", "label": "Python Traceback Filter", "description": "Compresses Python tracebacks to essential file/line locations and error type", "category": "test", "priority": 60, "match": { "commands": ["python", "python3", "pytest", "uv", "poetry"], "patterns": ["Traceback \\(most recent call last\\)", "Error", "Exception"], "outputTypes": ["error-traceback"] }, "rules": { "stripAnsi": true, "includePatterns": [ "Traceback \\(most recent call last\\)", "^\\s*File \".+\", line \\d+", "^\\s*[A-Z][a-zA-Z]+Error:", "^\\s*[A-Z][a-zA-Z]+Exception" ], "dropPatterns": ["site-packages/", "^\\s+[a-z_]+\\([^)]*\\)$"], "headLines": 5, "tailLines": 3, "maxLines": 25, "filterStderr": true }, "preserve": { "errorPatterns": ["Error:", "Exception:", "Traceback"], "summaryPatterns": ["^[A-Z][a-zA-Z]+(?:Error|Exception):"] }, "tests": [ { "name": "preserves-error-type-and-location", "input": "Traceback (most recent call last):\n File \"app.py\", line 42, in main\n do_thing()\n File \"lib/utils.py\", line 17, in helper\n return 1 / 0\nZeroDivisionError: division by zero", "expected": "Traceback (most recent call last):\n File \"app.py\", line 42, in main\n File \"lib/utils.py\", line 17, in helper\nZeroDivisionError: division by zero", "command": "python app.py" } ] } ``` ### Mukautettujen suodattimien lataaminen Sijoita tiedosto tunnistettuun sijaintiin: ``` ~/.omniroute/rtk/filters/my-filter.json # KĂ€yttĂ€jĂ€taso /.rtk/filters/my-filter.json # Projektitaso ``` Suodattimet ladataan automaattisesti kĂ€ynnistyksen yhteydessĂ€ `open-sse/services/compression/engines/rtk/filterLoader.ts`-tiedoston `loadRtkFilters()`-toiminnolla. Lataaja etsii suodattimia seuraavista sijainneista: - SisÀÀnrakennettu luettelo: `open-sse/services/compression/engines/rtk/filters/` - KĂ€yttĂ€jĂ€hakemisto: `~/.omniroute/rtk/filters/` - Projektihakemisto: `/.rtk/filters/` Suodattimien lataaminen ohjelmallisesti: ```ts import { loadRtkFilters } from "@omniroute/open-sse/services/compression/engines/rtk/filterLoader"; // Valinnat: customFiltersEnabled (lataa kĂ€yttĂ€jĂ€- ja projektisuodattimet, oletuksena kĂ€ytössĂ€), // trustProjectFilters, refresh. const filters = loadRtkFilters({ customFiltersEnabled: true }); ``` ### Validointi Suodattimet validoidaan ladattaessa Zod-skeemaa vasten. Rakenteeltaan virheellisen suodattimen lataaminen epĂ€onnistuu ja virhe kirjataan lokiin: ``` RTK_FILTER_LOADER: suodattimen "my-filter" validointi epĂ€onnistui: - rules.replace.0.pattern: Virheellinen regex-lauseke - match.commands: ei saa olla tyhjĂ€ ``` Voit validoida kaikki asennetut suodattimet kutsumalla `runRtkFilterTests()`-toimintoa, joka viedÀÀn `open-sse/services/compression/engines/rtk/verify.ts`-tiedostosta. ### Parhaat kĂ€ytĂ€nnöt 1. **SisĂ€llytĂ€ aina `tests[]`** — ne todistavat suodattimesi toimivuuden ja estĂ€vĂ€t regressiot 2. **KĂ€ytĂ€ `matchOutput`-kenttÀÀ oikopoluissa** — jos yksi rivi kertoo kaiken oleellisen, korvaa koko lohko 3. **Suosi `keep`-kenttÀÀ `strip`-kentĂ€n sijaan** — eksplisiittiset ”sĂ€ilytĂ€ aina” -sÀÀnnöt ovat turvallisempia kuin ”poista aina” -sÀÀnnöt 4. **Testaa kaikilla kolmella intensiteettitasolla** — `minimal` ei saisi tehdĂ€ mitÀÀn, ja `aggressive`-tason tulisi silti sĂ€ilyttÀÀ virheet 5. **KĂ€ytĂ€ `unless`-kenttÀÀ** — suojaa oikopolut ehdolla â€Ă€lĂ€ aktivoi, jos X esiintyy” --- ## Raakatulosteen palautus ja varmennusportti Kun RTK pakkaa tulostetta aggressiivisesti, voit **palauttaa alkuperĂ€isen tekstin** virheenkorjausta, auditointia tai uudelleentoistoa varten. ### NĂ€in raakatulosteen palautus toimii ``` AlkuperĂ€inen tuloste (10K tokenia) │ â–Œ RTK-pakkaus (rawOutput.enabled=true) │ ├─▶ Pakattu tuloste (2K tokenia) ──▶ LLM:lle │ └─▶ AlkuperĂ€inen tuloste (10K tokenia) ──▶ tallennetaan tietokantaan (linkitetty request_id-tunnuksella) ``` ### Raakatulosteen tallennuksen kĂ€yttöönotto **Pyyntökohtaisesti** (yhdistelmĂ€konfiguraatiossa): ```json { "compression": { "engine": "rtk", "intensity": "aggressive", "rawOutput": { "enabled": true, "maxBytes": 1048576 // 1MB:n enimmĂ€israja } } } ``` **Oletus**: `rawOutput.enabled: false` (sÀÀstÀÀ tallennustilaa). ### Tallennuskustannus | Pyyntökohtaisesti | 1MB:n raja | 10MB:n raja | | ------------------------------ | -------------- | --------------- | | KeskimÀÀrĂ€inen pakattu tuloste | ~5KB | ~5KB | | Tallennettu raakatuloste | ~50-500KB | ~500KB-5MB | | 1000 pyyntöÀ pĂ€ivĂ€ssĂ€ | 50-500MB/pĂ€ivĂ€ | 500MB-5GB/pĂ€ivĂ€ | > **Suositus**: Ota raakatuloste kĂ€yttöön vain **virheenkorjausistuntoja** tai **otantaan perustuvaa auditointia** varten, Ă€lĂ€ jatkuvasti. ### AlkuperĂ€isen tulosteen palauttaminen ```ts import { readRtkRawOutput } from "omniroute/compression/engines/rtk/rawOutput"; const raw = readRtkRawOutput(pointerId); // pointerId pakkaustilastoista if (raw) { console.log("Original output:", raw); } ``` `pointerId` palautetaan pakkauksen jĂ€lkeen taulukossa `CompressionStats.rtkRawOutputPointers[]`. Funktion allekirjoitus on tiedostossa `open-sse/services/compression/engines/rtk/rawOutput.ts:102`. ### Varmennusportti **RTK-suodattimien varmennus** (`open-sse/services/compression/engines/rtk/verify.ts`) validoi kaikki suodattimet niiden `tests[]`-testejĂ€ vasten ja varmistaa toiminnan oikeellisuuden kaikilla kolmella intensiteettitasolla. **Suorita varmennus kutsumalla `runRtkFilterTests()`**: ```ts import { runRtkFilterTests } from "open-sse/services/compression/engines/rtk/verify"; const result = runRtkFilterTests(); console.log(`Passed: ${result.outcomes.filter((o) => o.passed).length}`); console.log(`Failed: ${result.outcomes.filter((o) => !o.passed).length}`); if (!result.passed) { console.error("Filters failed verification"); result.outcomes .filter((o) => !o.passed) .forEach((o) => { console.error( ` - ${o.filterId} / ${o.testName}: expected "${o.expected}", got "${o.actual}"` ); }); } ``` **MitĂ€ se validoi**: 1. Jokainen suodatin latautuu ja lĂ€pĂ€isee skeemavalidoinnin 2. Jokainen `tests[]`-merkintĂ€ tuottaa odotetun tulosteen 3. `minimal`-intensiteetti ei tee muutoksia (sĂ€ilyttÀÀ alkuperĂ€isen ja kĂ€yttÀÀ vain rakenteellisia suodattimia) 4. `aggressive`-intensiteetti sĂ€ilyttÀÀ virheet, epĂ€onnistuneet testit ja pinon jĂ€ljitykset 5. Pakattu tuloste ei koskaan ole alkuperĂ€istĂ€ syötettĂ€ suurempi - LĂ€hde: `open-sse/services/compression/engines/rtk/` (63 tiedostoa, ~70KB) - **Ennen suodatinmuutoksen yhdistĂ€mistĂ€** — varmista aina, ettĂ€ testit lĂ€pĂ€istÀÀn - **RTK-moottorin pĂ€ivittĂ€misen jĂ€lkeen** — skeema on saattanut muuttua - **SÀÀnnöllisesti valvonnan yhteydessĂ€** — suojaa testikalusteiden ajautumiselta - **Kun lisÀÀt uuden työkalu- tai komentoperheen** — osoittaa uuden suodattimen toimivan --- ## Katso myös - [COMPRESSION_GUIDE.md](./COMPRESSION_GUIDE.md) — Pakkausputken kattava yleiskatsaus - [COMPRESSION_ENGINES.md](./COMPRESSION_ENGINES.md) — Moottorirekisteri ja sisÀÀnrakennetut moottorit - [EXTENDING_COMPRESSION.md](./EXTENDING_COMPRESSION.md) — Mukautetut moottorit, kielipaketit ja pinotut kĂ€sittelyputket - LĂ€hdekoodi: `open-sse/services/compression/engines/rtk/` (63 tiedostoa, ~70 kt)