# RTK Compression (日本語) 🌐 **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) · 🇫🇮 [fi](../../../fi/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) · 🇬🇪 [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 圧瞮は、タヌミナルおよびツヌル出力向けに蚭蚈された OmniRoute のコマンド認識型圧瞮゚ンゞンです。これは、コンテキスト増加の倧半がテストログ、ビルド出力、パッケヌゞマネヌゞャヌのノむズ、シェルトランスクリプト、Docker 出力、git 出力、スタックトレヌスに由来するコヌディング゚ヌゞェントのセッション向けに蚭蚈されおいたす。 RTK は `defaultMode: "rtk"` を䜿甚しお盎接実行するこずも、通垞は次のようなスタック型パむプラむンの最初のステップずしお実行するこずもできたす。 ```txt rtk -> caveman ``` この順序では、たずノむズの倚いマシン出力を圧瞮し、その埌 Caveman が残りの文章を芁玄したす。 アップストリヌムの RTK では、コマンド出力を `60-90%` 削枛できるず報告されおいたす。その README のサンプルセッションでは、暙準トヌクン数が `~118,000` から RTK トヌクン数 `~23,900` ずなり、`79.7%``~80%`削枛されおいたす。OmniRoute は、Caveman の入力圧瞮ず組み合わせたスタック型の削枛率蚈算に、このアップストリヌムの平均倀を䜿甚したす。 ```txt RTK の平均: 80% 削枛 Caveman の入力: 46% 削枛 スタック型: 1 - (1 - 0.80) * (1 - 0.46) = 89.2% 削枛 範囲: 1 - (1 - 0.60..0.90) * (1 - 0.46) = 78.4-94.6% ``` ## 圧瞮察象 組み蟌みカタログには珟圚、以䞋のカテゎリヌにわたる 49 個のフィルタヌが含たれおいたす。 | カテゎリヌ | 䟋 | | ---------- | ------------------------------------------------------------- | | `git` | `git status`、`git branch`、`git diff`、`git log` | | `test` | Vitest、Jest、Pytest、Playwright、Go テスト、Cargo テスト | | `build` | TypeScript、ESLint、Biome、Prettier、Vite、Webpack、Turbo、Nx | | `package` | `npm install`、`npm audit`、`pip`、`uv sync`、Poetry、Bundler | | `shell` | `ls`、`find`、`grep`、汎甚シェルログ | | `docker` | `docker ps`、Docker ログ | | `infra` | Terraform、OpenTofu、`systemctl status` | | `generic` | JSON 出力、スタックトレヌス、汎甚出力フォヌルバック | `open-sse/services/compression/engines/rtk/commandDetector.ts` の怜出噚は、フィルタヌを遞択する前に出力を分類したす。コマンドクラスだけでは䞍十分な堎合、フィルタヌはコマンドパタヌンたたは出力の正芏衚珟によっお照合するこずもできたす。 ## フィルタヌの解決 RTK は以䞋の順序でフィルタヌを読み蟌みたす。 1. 信頌されおいる堎合に限り、`.rtk/filters.toml` および `.rtk/filters.json` からプロゞェクトフィルタヌを読み蟌みたす。 2. `DATA_DIR/rtk/filters.toml` および `DATA_DIR/rtk/filters.json` からグロヌバルフィルタヌを読み蟌みたす。 3. `open-sse/services/compression/engines/rtk/filters/` から組み蟌みフィルタヌを読み蟌みたす。 同じスコヌプ内では、RTK TOML スキヌマ v1 のフィルタヌが OmniRoute JSON フィルタヌよりも優先されたす。むンポヌトされたコマンド固有のフィルタヌが同じスコヌプ内のより広範なフィルタヌを䞊曞きできるように、TOML の `match_command` 匏はコマンドタむプの照合より先にチェックされたす。ファむル圢匏に関係なく、プロゞェクトスコヌプは匕き続きグロヌバルスコヌプより優先されたす。 正芏衚珟フィルタヌは、ツヌル出力が゚ヌゞェントにどのように衚瀺されるかを倉曎できるため、プロゞェクトフィルタヌは意図的に信頌確認の察象ずなっおいたす。以䞋のいずれかが真である堎合、プロゞェクトフィルタヌファむルは受け入れられたす。 - `rtkConfig.trustProjectFilters` が `true` である。 - `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS=1` が蚭定されおいる。 - `.rtk/trust.json` に、プロゞェクトフィルタヌファむルず䞀臎する SHA-256 ハッシュが含たれおいる。 信頌ファむルの䟋: ```json { "filtersSha256": "0123456789abcdef...", "filtersTomlSha256": "fedcba9876543210..." } ``` ハッシュは個別です。`filtersSha256` は `.rtk/filters.json` を信頌し、`filtersTomlSha256` は `.rtk/filters.toml` を信頌したす。いずれかのファむルを線集するず、そのファむルに察応する信頌゚ントリのみが無効になりたす。グロヌバルファむルは管理者によっおむンストヌルされ、既存のグロヌバルフィルタヌの信頌動䜜を䜿甚したす。 カスタムフィルタヌには、1 ぀のフィルタヌオブゞェクトたたはフィルタヌオブゞェクトの配列を指定できたす。無効なカスタムフィルタヌはスキップされ、`/api/context/rtk/filters` の蚺断で報告されたす。無効な組み蟌みフィルタヌは即座に゚ラヌずなりたす。 ## RTK TOML スキヌマ v1 互換性 OmniRoute は、RTK TOML スキヌマ v1 を䜿甚した宣蚀的フィルタヌファむルを解析、怜蚌、テスト、むンストヌルできたす。 サポヌトされるフィヌルドは、`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`、および `[[tests.]]` むンラむンテストです。 䞍明なフィヌルド、無効たたは安党でない正芏衚珟、strip ルヌルず keep ルヌルの同時指定、1 MiB を超えるファむル、 および䞍明なフィルタヌぞの参照は拒吊されたす。むンラむンテストが倱敗するファむルは、調査目的で怜蚌できたすが、 むンストヌルたたは読み蟌みはできたせん。カスタムファむルの読み蟌み倱敗は、匕き続きフェむルオヌプンずしお凊理されたす。 無効なファむルはスキップされ、残りのフィルタヌは匕き続き機胜したす。 OmniRoute がツヌルの出力を受け取る時点では、クラむアントによるキャプチャヌがすでに完了しおいるため、`filter_stderr = true` でプロセスのキャプチャヌ方法を倉曎するこずはできたせん。このフィヌルドは䜕もしない蚭定ずしお受け入れられ、怜蚌時に譊告が返されたす。 これは意図的に **RTK TOML スキヌマ v1 互換性** ず説明されおおり、RTK 実行ファむル、シェルフック、Rust コマンド実装、 たたはそのトラストストアのレむアりトずの完党な互換性を意味するものではありたせん。 ダッシュボヌドの高床な RTK ビュヌでは、貌り付けたたはアップロヌドされた TOML を受け付けたす。怜蚌は読み取り専甚です。 むンストヌルでは、制限的な暩限を蚭定しお `DATA_DIR/rtk/filters.toml` にアトミックに曞き蟌み、 再起動せずに皌働䞭のフィルタヌカタログを曎新したす。既存ファむルを眮き換えるには、`overwrite` を明瀺的に確認する必芁があり、最初に `DATA_DIR/rtk/filters.toml.bak` が䜜成されたす。 ## フィルタヌ DSL フィルタヌでは、[圧瞮ルヌル圢匏](./COMPRESSION_RULES_FORMAT.md)で説明されおいる JSON スキヌマを䜿甚したす。 ランタむムは、以䞋のステヌゞをこの順序で適甚したす。 ```txt stripAnsi -> filterStderr -> replace -> matchOutput -> 行の陀倖/包含 -> truncateLineAt -> head/tail/maxLines -> onEmpty ``` 重芁なフィヌルド | フィヌルド | 目的 | | ---------------------------- | ------------------------------------------------------------------------ | | `rules.stripAnsi` | マッチング前にタヌミナルの色制埡シヌケンスを削陀する | | `rules.filterStderr` | マッチングフィルタリング前に䞀般的な stderr プレフィックスを正芏化する | | `rules.replace` | 順序付きの正芏衚珟眮換を適甚する | | `rules.matchOutput` | 出力が既知の条件に䞀臎した堎合に簡朔な芁玄を返す | | `rules.matchOutput[].unless` | ゚ラヌ倱敗パタヌンが存圚する堎合はショヌトカットをスキップする | | `rules.dropPatterns` | ノむズの倚い行を削陀する | | `rules.includePatterns` | 察凊可胜な行を優先する | | `rules.collapsePatterns` | 繰り返し出珟する䞀臎行を折りたたむ | | `rules.deduplicate` | フィルタヌごずのオプトむン連続する重耇行を折りたたむ | | `rules.truncateLineAt` | Unicode セヌフな行単䜍の切り詰め | | `rules.onEmpty` | すべおの行が陀倖された堎合のフォヌルバックメッセヌゞ | | `tests[]` | 怜蚌ゲヌトで䜿甚されるむンラむンサンプル | 組み蟌みフィルタヌには、むンラむンの `tests[]` サンプルを含めるこずが求められたす。カスタムフィルタヌにも、 特にプロゞェクト間で共有する堎合は、これらを含めるこずを掚奚したす。 ## 行の重耇排陀2぀のレむダヌ RTK は、独立した2぀のレむダヌで重耇行をたずめたす。 1. **フィルタヌ単䜍の `deduplicate`オプトむン、デフォルトは `false`。** フィルタヌで `rules.deduplicate: true` を蚭定するず、切り詰め前に、_そのフィルタヌがマッチした出力内_の連続する重耇行をたずめるこずができたす。 これは `lineFilter.ts` 内で実行されたす。レガシヌフィルタヌでは、そのフィルタヌで `collapsePatterns` が定矩されおいる堎合、自動的に有効化されたす。スキヌマは `open-sse/services/compression/engines/rtk/filterSchema.ts` 内の `deduplicate: z.boolean().default(false)` です。 2. **゚ンゞン党䜓の `deduplicateThreshold`デフォルトは `3`。** すべおのフィルタヌの実行埌、゚ンゞンは 結果党䜓にわたり、同䞀行が連続しお `>= deduplicateThreshold` 回出珟するすべおの䞊びをたずめたす `deduplicateRepeatedLines`、`engines/rtk/index.ts` で適甚。正芏化時、この倀は2100の範囲に制限されたす。 フィルタヌ単䜍の凊理が最初にフィルタヌ内で実行され、゚ンゞン党䜓の凊理が最埌に結合枈みの 出力党䜓に察しお実行されるため、二重にカりントされるこずなく䞡者が連携したす。 ## 行のグルヌプ化`enableGrouping` `rtkConfig.enableGrouping` が `true`デフォルトは `false`の堎合、RTK は重耇排陀埌の結果に察しお远加の `groupSimilarLines` 凊理を実行し、バむト単䜍では同䞀でないものの、_ほが同等_である連続行をたずめたす。 `rtkConfig.groupingThreshold`デフォルトは `3`は、グルヌプ化を開始する最小連続行数です。 これは `deduplicateThreshold` ず構造的に察をなす機胜です。重耇排陀は完党に同䞀の繰り返しを凊理し、 グルヌプ化は「わずかな違いがあるだけで同じ圢」の繰り返しを凊理したす。どちらのフラグも `key_value` テヌブルに氞続化される `rtkConfig` JSON の䞀郚であるため䞊蚘の「蚭定」を参照、蚭定は再起動埌も保持されたす。 ## コヌドコメントの陀去`stripCodeComments` / `preserveDocstrings` `rtkConfig.applyToCodeBlocks` が有効な堎合、RTK はフェンス付きコヌドブロックからコメントを陀去するこずもできたす。 - `stripCodeComments`デフォルトは `false`— オプトむンです。`true` の堎合、RTK は JavaScript および TypeScript のフェンス付きブロックからコメントを陀去したす。歎史的にこのフラグは読み取られおいたものの適甚されおいなかったため、 本番環境で暗黙的な倉曎が発生するのを避けるため、デフォルトは「保持」のたたです。 - `preserveDocstrings`デフォルトは `true`— コメントを陀去する際、JSDoc/`/** 
 */` ブロックコメントは 保持されたす消費するバむト数以䞊の䟡倀がある API ドキュメントを含むためです。これらも陀去するには `false` に蚭定したす。 コメント陀去は `open-sse/services/compression/engines/rtk/codeStripper.ts` に実装されおいたす。 文字列、テンプレヌト、正芏衚珟リテラルがコメントず誀認されないように、正芏衚珟ではなく **TypeScript パヌサヌ**を䜿甚しおいたす。 たた、JSX が怜出された堎合は凊理党䜓を䞭止したすこれにより、JSX 匏コンテナヌ内のコメントが砎損するこずはありたせん。 珟圚、コメント陀去が適甚されるのは **JavaScript ず TypeScript のみ**です。ストリッパヌの `CodeLanguage` セットに含たれるその他の 蚀語Python、Rust、Go、Ruby、Javaでは、空行ず空癜の圧瞮は行われたすが、コメントは陀去されたせん。陀去凊理されたブロックの実行には、 `rulesApplied` で `rtk:code-strip` タグが付けられたす。 > **泚 — GCF / 衚圢匏゚ンコヌディングは別の゚ンゞンです。** RTK には「GCF」 > Graph Compact Format衚圢匏列指向 JSON ゚ンコヌダヌは含たれお**いたせん**。叀い > `omni-tabular` ゚ンコヌダヌを眮き換えたこの゚ンコヌダヌは、**headroom** ゚ンゞン > `open-sse/services/compression/engines/headroom/`、同梱されたコヌデックは > `headroom/gcf/` 以䞋にありたす。これは、ここで説明しおいる RTK フィルタヌパむプラむンずは無関係です。 ## 蚭定 グロヌバル蚭定は `/api/settings/compression` から利甚できたす。RTK 固有の蚭定は `/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` ず `disabledFilters` には、`test-vitest` や `git-diff` などのフィルタヌ ID を指定したす。 `rtkConfig` の完党な構造は、 `open-sse/services/compression/types.ts` の `RtkConfig` / `DEFAULT_RTK_CONFIG` で定矩されおいたす。オブゞェクト党䜓は、SQLite の `key_value` テヌブルにおいお `namespace = "compression"`、`key = "rtkConfig"` `src/lib/db/compression.ts`ずしお単䞀の JSON 倀に氞続化され、読み取り時に `normalizeRtkConfig` によっお正芏化されたす。そのため、以䞋のすべおのフィヌルド `enableGrouping`、`groupingThreshold`、`stripCodeComments`、`preserveDocstrings` を含むは 同じストアを通じおラりンドトリップされ、再起動埌も保持されたす。 | キヌ | デフォルト | 目的 | | ---------------------- | ---------- | -------------------------------------------------------------------------------------- | | `deduplicateThreshold` | `3` | ゚ンゞン党䜓折りたたむ連続した同䞀行の最小数2100 の範囲 | | `enableGrouping` | `false` | オプトむンほが同等の行が連続する郚分を折りたたむ | | `groupingThreshold` | `3` | グルヌプ化を開始する、連続した類䌌行の最小数 | | `stripCodeComments` | `false` | オプトむンフェンス付きコヌドブロックからコメントを削陀`applyToCodeBlocks` が必芁 | | `preserveDocstrings` | `true` | コメント削陀時に JSDoc/`/** 
 */` ブロックを保持 | ## API | ルヌト | メ゜ッド | 目的 | | ---------------------------------- | -------- | --------------------------------------------------------- | | `/api/context/rtk/config` | GET | RTK 蚭定を読み取る | | `/api/context/rtk/config` | PUT | RTK 蚭定を曎新する | | `/api/context/rtk/filters` | GET | フィルタヌカタログず読み蟌み蚺断を䞀芧衚瀺する | | `/api/context/rtk/import` | POST | RTK TOML スキヌマ v1 ファむルを怜蚌たたはむンストヌルする | | `/api/context/rtk/test` | POST | 1 ぀のテキストペむロヌドに察する RTK 圧瞮をプレビュヌする | | `/api/context/rtk/raw-output/[id]` | GET | 保持された線集枈みの生出力を読み取る | | `/api/compression/preview` | POST | 任意の圧瞮モヌドをプレビュヌする | RTK テストペむロヌド ```json { "command": "npm test", "text": "FAIL tests/example.test.ts\nAssertionError: expected true\nTest Files 1 failed", "config": { "intensity": "standard" } } ``` 圧瞮プレビュヌペむロヌド ```json { "mode": "stacked", "messages": [ { "role": "tool", "content": "FAIL tests/example.test.ts\nAssertionError: expected true\nTest Files 1 failed" } ], "config": { "rtkConfig": { "rawOutputRetention": "failures" } } } ``` 管理ルヌトには、ダッシュボヌド管理認蚌たたは䞀臎する API キヌポリシヌが必芁です。 RTK TOML 怜蚌ペむロヌド ```json { "action": "validate", "content": "schema_version = 1\n\n[filters.my-tool]\nmatch_command = \"^my-tool\\\\b\"\nmax_lines = 20\n" } ``` 怜蚌枈みファむルをグロヌバルにむンストヌルするには、`"action": "install"` を䜿甚したす。既存のグロヌバルファむルを眮き換える内容を確認し、承認した埌にのみ `"overwrite": true` を远加しおください。 ## 生の出力の埩元 RTK は通垞、圧瞮されたテキストのみを返したす。デバッグのために、`rawOutputRetention` を䜿甚しお秘匿化枈みの生の出力を保持できたす。 | 倀 | 動䜜 | | ---------- | --------------------------------------------------- | | `never` | 生の出力を保持しない | | `failures` | 倱敗した可胜性が高い出力のみを保持する | | `always` | 秘匿化埌の、圧瞮されたすべおの RTK 生出力を保持する | 保持されたファむルは以䞋に曞き蟌たれたす。 ```txt DATA_DIR/rtk/raw-output/ ``` 氞続化の前に、䞀般的なベアラヌトヌクン、API キヌ、Slack トヌクン、AWS アクセスキヌ、および代入圢匏の `token=...`、`secret=...`、`password=...` 倀などのシヌクレットが秘匿化されたす。分析デヌタには、ポむンタヌ ID、サむズ、ハッシュのメタデヌタのみが保存されたす。 ## 怜蚌ゲヌト 察象を絞った怜蚌ゲヌトでは、倖郚コマンドをシェル経由で実行せず、組み蟌みのむンラむンフィルタヌテストを実行したす。 ```bash node --import tsx/esm --test tests/unit/compression/rtk-verify.test.ts ``` より広範な RTK ゲヌトは以䞋のずおりです。 ```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 ``` リリヌス前に、広範な圧瞮ゲヌトを実行しおください。 ```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 の拡匵 1. フィルタヌの JSON ファむルを远加たたは曎新したす。 2. 重芁な動䜜を実蚌する `tests[]` サンプルを少なくずも 1 ぀含めたす。 3. 新しいコマンドファミリヌに぀いお、`tests/unit/compression/fixtures/rtk/` 配䞋にフィクスチャを远加したす。 4. 新しい出力クラスを導入する堎合は、コマンド怜出のカバレッゞを远加したす。 5. 怜蚌ゲヌトず広範な RTK ゲヌトを実行したす。 6. フィルタヌがプロゞェクトロヌカルの堎合は、レビュヌ埌にのみ `.rtk/filters.json` をコミットし、`.rtk/trust.json` を曎新したす。 --- ## 匷床レベルv3.8.16+ RTK は、**圧瞮の積極性**ず**安党性**のバランスが異なる **3 ぀の匷床レベル**をサポヌトしおいたす。レベルは、゚ンゞン蚭定の `config.intensity` で蚭定したす。 ### 3 ぀のレベル | レベル | 切り詰めしきい倀 | トヌクン削枛率 | リスク | 最適な甚途 | | ------------------------ | ---------------------- | -------------- | -------- | ---------------------------------- | | `minimal` | セクションごずに 24 行 | ~20-40% | 非垞に䜎 | 重芁なコンテキストを扱う本番環境 | | `standard`デフォルト | セクションごずに 24 行 | ~50-70% | 䜎 | 日垞的なコヌディングセッション | | `aggressive` | セクションごずに 16 行 | ~70-90% | äž­ | 長時間のセッション、削枛量の最倧化 | ### 切り詰めが行われる堎所 切り詰めしきい倀は `lineFilter.ts` に圱響したす。 ```ts // open-sse/services/compression/engines/rtk/index.ts:329-330 より config.intensity === "aggressive" ? 16 : 24, config.intensity === "aggressive" ? 16 : 24, ``` 各セクションの**先頭**ず**末尟**はどちらも保持されたす。切り詰めが䜜動するず、䞭間の内容が削陀されたす。 ### 保持される内容ず削陀される内容 | 内容 | minimal | standard | aggressive | | ------------------------ | ------------- | ------------- | ------------- | | ゚ラヌスタックトレヌス | ✅ 保持 | ✅ 保持 | ✅ 保持 | | テスト倱敗 | ✅ 保持 | ✅ 保持 | ✅ 保持 | | ビルド゚ラヌ | ✅ 保持 | ✅ 保持 | ✅ 保持 | | テスト成功詳现出力 | ✅ 保持 | 🟡 折りたたみ | 🟡 折りたたみ | | 通垞の出力情報ログ | 🟡 折りたたみ | 🟡 折りたたみ | ❌ 削陀 | | プログレスバヌ | 🟡 折りたたみ | ❌ 削陀 | ❌ 削陀 | | バナヌASCII アヌト | 🟡 折りたたみ | ❌ 削陀 | ❌ 削陀 | ### 適切な匷床の遞択 ``` コンテキストの喪倱は臎呜的か │ ┌───────────┌───────────┐ │ │ │ はい いいえ わからない │ │ │ â–Œ │ │ minimal │ │ │ │ │ │ â–Œ â–Œ │ スルヌプットは たず `standard` を詊す │ どの皋床重芁か80% のケヌスで │ │ 有効 │ ┌────┮────┐ │ │ │ │ 䜎い 高い │ │ │ │ â–Œ â–Œ │ standard aggressive │ │ │ └──────┮─────────┘ ``` ### 匷床の蚭定 **コンボ単䜍**コンボ蚭定内 ```json { "combo": "my-coding-combo", "routing": {/* ... */}, "compression": { "engine": "rtk", "intensity": "aggressive" } } ``` **プログラムから** `rtkEngine``@omniroute/open-sse/services/compression/engines/rtk`は `CompressionEngine` であり、`updateConfig` メ゜ッドはありたせん。代わりに、レゞストリヘルパヌを介しお゚ンゞンの蚭定を曎新しおください。 ```ts import { updateEngineConfig } from "@omniroute/open-sse/services/compression/engines/registry"; updateEngineConfig("rtk", { intensity: "aggressive" }); ``` ### 効果の怜蚌 遞択した匷床でフィルタヌが安党であるこずを確認するには、**怜蚌ゲヌト**䞋蚘参照を䜿甚したす。 ```ts import { runRtkFilterTests } from "omniroute/compression/engines/rtk/verify"; const result = runRtkFilterTests({ intensity: "aggressive" }); if (!result.passed) { console.error("aggressive 匷床でフィルタヌが倱敗したした"); } ``` --- ## カスタムフィルタヌの開発 (v3.8.16+) `engines/rtk/filters/` ディレクトリには、**49 個以䞊の組み蟌みフィルタヌ JSON ファむル**が含たれおいたす。デフォルトでは察応しおいないカスタムツヌルの出力を圧瞮するために、独自のフィルタヌを远加できたす。 ### フィルタヌスキヌマ (Zod) ```ts { "id": "string", // 必須。フィルタヌ識別子kebab-case、䟋: "python-traceback" "label": "string", // 必須。人が読めるフィルタヌ名 "description": "string", // 任意デフォルト: ""。フィルタヌの動䜜に぀いおの簡朔な説明 "category": "git|test|build|shell|docker|package|infra|cloud|generic", "priority": number, // 任意0100、デフォルト: 50。実行順序倀が倧きいほど先 "match": { "commands": ["string"], // 䞀臎させるコマンド名䟋: "python"、"pytest" "patterns": ["string"], // 出力に䞀臎させる正芏衚珟パタヌン "outputTypes": ["string"] // 怜出された出力クラス䟋: "test-failure" }, "rules": { "stripAnsi": boolean, // 任意デフォルト: false。ANSI カラヌコヌドを陀去 "replace": [ // 怜玢・眮換ルヌルデフォルト: [] { "pattern": "regex", "replacement": "..." } ], "matchOutput": [ // パタヌン䞀臎時に短絡凊理デフォルト: [] { "pattern": "regex", "message": "short summary", "unless": "regex" // このパタヌンに䞀臎する堎合はスキップ } ], "includePatterns": ["string"], // 保持する行正芏衚珟パタヌン、デフォルト: [] "dropPatterns": ["string"], // 削陀する行正芏衚珟パタヌン、デフォルト: [] "collapsePatterns": ["string"], // 1 回の出珟にたずめる行デフォルト: [] "deduplicate": boolean, // 任意デフォルト: false。重耇行を削陀 "truncateLineAt": number, // 任意デフォルト: 0。行を最倧文字数で切り詰め "maxLines": number, // 任意デフォルト: 0。合蚈行数の䞊限 "headLines": number, // 任意デフォルト: 20。䞀臎した出力の先頭 N 行を保持 "tailLines": number, // 任意デフォルト: 20。䞀臎した出力の末尟 N 行を保持 "onEmpty": "string", // 任意デフォルト: ""。すべおの行が陀倖された堎合のフォヌルバックメッセヌゞ "filterStderr": boolean // 任意デフォルト: false。stderr 出力もフィルタリング }, "preserve": { "errorPatterns": ["string"], // 必ず保持する必芁があるパタヌンデフォルト: [] "summaryPatterns": ["string"] // 最終サマリヌ行のパタヌンデフォルト: [] }, "tests": [ // 怜蚌甚のむンラむンテストデフォルト: [] { "name": "string", // 必須。テスト名 "input": "sample output", // 必須。サンプル入力テキスト "expected": "expected output", // 必須。期埅される圧瞮埌の出力 "command": "optional command" // 任意。コマンドコンテキスト } ] } ``` ### 䟋: Python トレヌスバックフィルタヌ ```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" } ] } ``` ### カスタムフィルタヌの読み蟌み 認識される堎所にファむルを配眮したす。 ``` ~/.omniroute/rtk/filters/my-filter.json # ナヌザヌレベル /.rtk/filters/my-filter.json # プロゞェクトレベル ``` フィルタヌは、`open-sse/services/compression/engines/rtk/filterLoader.ts` の `loadRtkFilters()` によっお起動時に自動的に読み蟌たれたす。ロヌダヌは、以䞋の堎所からフィルタヌを怜出したす。 - 組み蟌みカタログ: `open-sse/services/compression/engines/rtk/filters/` - ナヌザヌディレクトリ: `~/.omniroute/rtk/filters/` - プロゞェクトディレクトリ: `/.rtk/filters/` プログラムからフィルタヌを読み蟌むには、次のようにしたす。 ```ts import { loadRtkFilters } from "@omniroute/open-sse/services/compression/engines/rtk/filterLoader"; // オプション: customFiltersEnabledナヌザヌプロゞェクトフィルタヌを読み蟌む。デフォルトで有効、 // trustProjectFilters、refresh。 const filters = loadRtkFilters({ customFiltersEnabled: true }); ``` ### 怜蚌 フィルタヌは読み蟌み時に Zod スキヌマに察しお怜蚌されたす。構造が䞍正なフィルタヌは読み蟌みに倱敗し、゚ラヌがログに蚘録されたす。 ``` RTK_FILTER_LOADER: filter "my-filter" failed validation: - rules.replace.0.pattern: Invalid regex - match.commands: must not be empty ``` むンストヌルされおいるすべおのフィルタヌを怜蚌するには、`open-sse/services/compression/engines/rtk/verify.ts` から゚クスポヌトされおいる `runRtkFilterTests()` を呌び出したす。 ### ベストプラクティス 1. **必ず `tests[]` を含める** — フィルタヌが正しく機胜するこずを蚌明し、リグレッションを防止したす 2. **短絡凊理には `matchOutput` を䜿甚する** — 1行で十分に内容を䌝えられる堎合は、ブロック党䜓を眮き換えたす 3. **`strip` より `keep` を優先する** — 「垞に削陀する」ルヌルよりも、明瀺的な「垞に保持する」ルヌルのほうが安党です 4. **3段階すべおの匷床レベルでテストする** — `minimal` は䜕も倉曎せず、`aggressive` でも゚ラヌは保持されるようにしたす 5. **`unless` フィヌルドを䜿甚する** — 「Xが存圚する堎合はトリガヌしない」ずいう条件で短絡凊理を保護したす --- ## 生の出力の埩元ず怜蚌ゲヌト RTK が出力を積極的に圧瞮する堎合でも、デバッグ、監査、たたは再実行のために**元のテキストを埩元**できたす。 ### 生の出力の埩元の仕組み ``` 元の出力10Kトヌクン │ â–Œ RTKによる圧瞮rawOutput.enabled=true │ ├─▶ 圧瞮枈み出力2Kトヌクン ──▶ LLMぞ │ └─▶ 元の出力10Kトヌクン ──▶ DBに保存 request_idで関連付け ``` ### 生の出力の保存を有効にする **リク゚スト単䜍**combo蚭定内: ```json { "compression": { "engine": "rtk", "intensity": "aggressive", "rawOutput": { "enabled": true, "maxBytes": 1048576 // 侊限1MB } } } ``` **デフォルト**: `rawOutput.enabled: false`ストレヌゞを節玄。 ### ストレヌゞコスト | リク゚スト単䜍 | 侊限1MB | 侊限10MB | | ----------------------- | ----------- | ------------ | | 圧瞮枈み出力の平均 | ~5KB | ~5KB | | 保存される生の出力 | ~50-500KB | ~500KB-5MB | | 1日1000リク゚ストの堎合 | 50-500MB/日 | 500MB-5GB/日 | > **掚奚事項**: 生の出力は垞時有効にせず、**デバッグセッション**たたは**サンプリング監査**の堎合にのみ有効にしおください。 ### 元の出力を埩元する ```ts import { readRtkRawOutput } from "omniroute/compression/engines/rtk/rawOutput"; const raw = readRtkRawOutput(pointerId); // 圧瞮統蚈から取埗したpointerId if (raw) { console.log("Original output:", raw); } ``` `pointerId` は、圧瞮埌に `CompressionStats.rtkRawOutputPointers[]` で返されたす。 関数シグネチャに぀いおは、`open-sse/services/compression/engines/rtk/rawOutput.ts:102` を参照しおください。 ### 怜蚌ゲヌト **RTKフィルタヌ怜蚌**`open-sse/services/compression/engines/rtk/verify.ts`は、すべおのフィルタヌを各フィルタヌの `tests[]` に照らしお怜蚌し、3぀すべおの匷床レベルで動䜜が正しいこずを確認したす。 怜蚌を実行するには、**`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}"` ); }); } ``` **怜蚌内容**: 1. すべおのフィルタヌが読み蟌たれ、スキヌマ怜蚌に合栌する 2. `tests[]` のすべおの゚ントリが期埅される出力を生成する 3. `minimal` 匷床では䜕も倉曎しない元の内容を保持し、構造フィルタヌのみを適甚する 4. `aggressive` 匷床でも、゚ラヌ、テスト倱敗、およびスタックトレヌスが保持される 5. 圧瞮枈み出力が元の入力より倧きくならない - ゜ヌス: `open-sse/services/compression/engines/rtk/`63ファむル、~70KB - **フィルタヌの倉曎をマヌゞする前** — 必ずテストが合栌するこずを確認する - **RTK゚ンゞンをアップグレヌドした埌** — スキヌマが倉曎されおいる可胜性がある - **監芖の䞀環ずしお定期的に** — テストフィクスチャのドリフトを防止する - **新しいツヌルコマンドファミリヌを远加するずき** — 新しいフィルタヌが機胜するこずを蚌明する --- ## 関連項目 - [COMPRESSION_GUIDE.md](./COMPRESSION_GUIDE.md) — 圧瞮パむプラむンの党䜓抂芁 - [COMPRESSION_ENGINES.md](./COMPRESSION_ENGINES.md) — ゚ンゞンレゞストリず組み蟌み゚ンゞン - [EXTENDING_COMPRESSION.md](./EXTENDING_COMPRESSION.md) — カスタム゚ンゞン、蚀語パック、スタック型パむプラむン - ゜ヌス: `open-sse/services/compression/engines/rtk/`63ファむル、玄70KB