Files
OmniRoute/docs/i18n/el/docs/compression/RTK_COMPRESSION.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* feat(docs): mirror every docs/ page in all 65 locales

Extends the documentation mirrors from the 22-page core set (#13940) to
every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors
(6,208 new), language bars rewritten for the full locale list, state
adopted so the blocking drift gate now covers all 152 pages.

run-translation.mjs: an oversized block made only of table rows or list
items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is
cut at item boundaries and rejoined without a blank line — the single
16-40 KB request outlived the backend socket for verbose scripts. 48
older mirrors whose tables had lost rows were retranslated with --force.

* docs(i18n): refresh mirrors for the sources the base changed since the branch cut

Section-level retranslation of the 29 docs (and README.md) whose source
or mirrors moved on release/v3.8.51 during the run, then state adoption;
the drift gate is green again on the merged tree.
2026-09-18 13:16:46 -03:00

53 KiB
Raw Blame History

RTK Compression (Ελληνικά)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Η συμπίεση RTK είναι η μηχανή συμπίεσης του OmniRoute που λαμβάνει υπόψη τις εντολές για έξοδο τερματικού και εργαλείων. Είναι σχεδιασμένη για συνεδρίες πρακτόρων προγραμματισμού, όπου το μεγαλύτερο μέρος της αύξησης του περιβάλλοντος προέρχεται από αρχεία καταγραφής δοκιμών, έξοδο μεταγλώττισης, θόρυβο διαχειριστών πακέτων, καταγραφές κελύφους, έξοδο Docker, έξοδο git και ίχνη στοίβας.

Το RTK μπορεί να εκτελεστεί απευθείας με defaultMode: "rtk" ή ως το πρώτο βήμα σε μια αλυσιδωτή διοχέτευση, συνήθως:

rtk -> caveman

Αυτή η σειρά συμπιέζει πρώτα τη θορυβώδη έξοδο μηχανής και, στη συνέχεια, επιτρέπει στο Caveman να συμπυκνώσει το κείμενο που απομένει.

Το αρχικό RTK αναφέρει εξοικονόμηση 60-90% στην έξοδο εντολών. Το δείγμα συνεδρίας στο README του μειώνεται από ~118,000 τυπικά διακριτικά σε ~23,900 διακριτικά RTK, δηλαδή εξοικονόμηση 79.7% (~80%). Το OmniRoute χρησιμοποιεί αυτόν τον αρχικό μέσο όρο για τον υπολογισμό της αλυσιδωτής εξοικονόμησης με τη συμπίεση εισόδου του Caveman:

Μέσος όρος 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/.

Εντός του ίδιου πεδίου, τα φίλτρα σχήματος TOML v1 του RTK έχουν προτεραιότητα έναντι των φίλτρων JSON του OmniRoute. Οι εκφράσεις TOML match_command ελέγχονται πριν από την αντιστοίχιση τύπου εντολής, ώστε ένα εισαγόμενο φίλτρο συγκεκριμένης εντολής να μπορεί να παρακάμψει ένα ευρύτερο φίλτρο στο συγκεκριμένο πεδίο. Το πεδίο έργου εξακολουθεί να έχει προτεραιότητα έναντι του καθολικού πεδίου, ανεξάρτητα από τη μορφή αρχείου.

Τα φίλτρα έργου υπόκεινται σκόπιμα σε έλεγχο αξιοπιστίας, επειδή τα φίλτρα κανονικών εκφράσεων μπορούν να αλλάξουν τον τρόπο με τον οποίο η έξοδος εργαλείων εμφανίζεται στους πράκτορες. Ένα αρχείο φίλτρων έργου γίνεται αποδεκτό όταν ισχύει μία από τις παρακάτω συνθήκες:

  • Το rtkConfig.trustProjectFilters είναι true.
  • Έχει οριστεί το OMNIROUTE_RTK_TRUST_PROJECT_FILTERS=1.
  • Το .rtk/trust.json περιέχει το αντίστοιχο hash SHA-256 για το αρχείο φίλτρων έργου.

Παράδειγμα αρχείου αξιοπιστίας:

{
  "filtersSha256": "0123456789abcdef...",
  "filtersTomlSha256": "fedcba9876543210..."
}

Τα hash είναι ξεχωριστά: το filtersSha256 χαρακτηρίζει ως αξιόπιστο το .rtk/filters.json, ενώ το filtersTomlSha256 χαρακτηρίζει ως αξιόπιστο το .rtk/filters.toml. Η επεξεργασία οποιουδήποτε από τα δύο αρχεία ακυρώνει μόνο τη δική του καταχώριση αξιοπιστίας. Τα καθολικά αρχεία εγκαθίστανται από διαχειριστή και χρησιμοποιούν την υπάρχουσα συμπεριφορά αξιοπιστίας καθολικών φίλτρων.

Τα προσαρμοσμένα φίλτρα μπορούν να είναι ένα αντικείμενο φίλτρου ή ένας πίνακας αντικειμένων φίλτρων. Τα μη έγκυρα προσαρμοσμένα φίλτρα παραλείπονται και αναφέρονται από τα διαγνωστικά του /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.<filter>]]. Άγνωστα πεδία, μη έγκυρες ή μη ασφαλείς κανονικές εκφράσεις, ταυτόχρονοι κανόνες αφαίρεσης/διατήρησης, αρχεία άνω του 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 φίλτρων

Τα φίλτρα χρησιμοποιούν το σχήμα JSON που περιγράφεται στη Μορφή κανόνων συμπίεσης. Κατά την εκτέλεση, εφαρμόζονται τα ακόλουθα στάδια με τη σειρά:

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[]. Τα προσαρμοσμένα φίλτρα θα πρέπει επίσης να τα περιλαμβάνουν, ειδικά όταν χρησιμοποιούνται από κοινού σε πολλά έργα.

Απαλοιφή διπλότυπων γραμμών (δύο επίπεδα)

Το RTK συμπτύσσει τις διπλότυπες γραμμές σε δύο ανεξάρτητα επίπεδα:

  1. deduplicate ανά φίλτρο (προαιρετικό, προεπιλογή false). Ένα φίλτρο μπορεί να ορίσει rules.deduplicate: true για να συμπτύξει διαδοχικές διπλότυπες γραμμές εντός της αντιστοιχισμένης εξόδου αυτού του φίλτρου, πριν από την περικοπή. Αυτό εκτελείται μέσα στο lineFilter.ts. Για παλαιότερα φίλτρα, ενεργοποιείται αυτόματα όταν το φίλτρο ορίζει collapsePatterns. Σχήμα: deduplicate: z.boolean().default(false) στο open-sse/services/compression/engines/rtk/filterSchema.ts.
  2. Καθολικό για τη μηχανή deduplicateThreshold (προεπιλογή 3). Αφού εκτελεστούν όλα τα φίλτρα, η μηχανή συμπτύσσει κάθε ακολουθία από >= deduplicateThreshold πανομοιότυπες διαδοχικές γραμμές σε ολόκληρο το αποτέλεσμα (deduplicateRepeatedLines, που εφαρμόζεται στο engines/rtk/index.ts). Κατά την κανονικοποίηση, η τιμή περιορίζεται μεταξύ 2100.

Το πέρασμα ανά φίλτρο εκτελείται πρώτο (μέσα στο φίλτρο), ενώ το καθολικό πέρασμα της μηχανής εκτελείται τελευταίο (πάνω στη συνενωμένη έξοδο), ώστε τα δύο να συνδυάζονται χωρίς διπλή καταμέτρηση.

Ομαδοποίηση γραμμών (enableGrouping)

Όταν το rtkConfig.enableGrouping είναι true (προεπιλογή false), το RTK εκτελεί ένα επιπλέον πέρασμα groupSimilarLines πάνω στο αποτέλεσμα μετά την απαλοιφή διπλοτύπων, το οποίο συμπτύσσει ακολουθίες από σχεδόν ισοδύναμες (όχι πανομοιότυπες σε επίπεδο byte) διαδοχικές γραμμές. Το rtkConfig.groupingThreshold (προεπιλογή 3) είναι το ελάχιστο μήκος ακολουθίας που ενεργοποιεί την ομαδοποίηση. Αυτό αποτελεί το δομικό αντίστοιχο του deduplicateThreshold: η απαλοιφή διπλοτύπων χειρίζεται τις ακριβείς επαναλήψεις, ενώ η ομαδοποίηση χειρίζεται «το ίδιο σχήμα με μικρές διαφορές». Και οι δύο σημαίες αποτελούν μέρος του JSON rtkConfig που διατηρείται στον πίνακα key_value (δείτε την ενότητα «Ρύθμιση παραμέτρων» παραπάνω), επομένως η ρύθμιση διατηρείται μετά από επανεκκινήσεις.

Αφαίρεση σχολίων κώδικα (stripCodeComments / preserveDocstrings)

Όταν είναι ενεργοποιημένο το rtkConfig.applyToCodeBlocks, το RTK μπορεί επίσης να αφαιρεί σχόλια από περιφραγμένα μπλοκ κώδικα:

  • stripCodeComments (προεπιλογή false) — προαιρετικό. Όταν είναι true, το RTK αφαιρεί σχόλια από περιφραγμένα μπλοκ JavaScript και TypeScript. Ιστορικά, η σημαία διαβαζόταν αλλά δεν εφαρμοζόταν ποτέ, επομένως η προεπιλογή παραμένει στη «διατήρηση», ώστε να αποφευχθεί μια σιωπηρή αλλαγή στην παραγωγή.
  • preserveDocstrings (προεπιλογή true) — κατά την αφαίρεση σχολίων, τα σχόλια μπλοκ JSDoc//** … */ διατηρούνται (περιέχουν τεκμηρίωση API που αξίζει περισσότερο από τα byte που κοστίζουν). Ορίστε το σε false για να αφαιρεθούν και αυτά.

Η αφαίρεση σχολίων υλοποιείται στο open-sse/services/compression/engines/rtk/codeStripper.ts. Χρησιμοποιεί τον αναλυτή TypeScript (όχι κανονική έκφραση), ώστε οι συμβολοσειρές, τα πρότυπα και τα λεκτικά κανονικών εκφράσεων να μην εκλαμβάνονται ποτέ ως σχόλια, και διακόπτει πλήρως τη διαδικασία όταν εντοπίζεται JSX (ώστε τα σχόλια σε περιέκτες εκφράσεων JSX να μην αλλοιώνονται ποτέ). Προς το παρόν, η αφαίρεση σχολίων εφαρμόζεται μόνο σε JavaScript και TypeScriptοι άλλες γλώσσες στο σύνολο CodeLanguage του εργαλείου αφαίρεσης (Python, Rust, Go, Ruby, Java) υποστηρίζουν σύμπτυξη κενών γραμμών και λευκών χαρακτήρων, αλλά όχι αφαίρεση σχολίων. Η εκτέλεση στο μπλοκ από το οποίο αφαιρέθηκαν σχόλια επισημαίνεται ως rtk:code-strip στο rulesApplied.

Σημείωση — η κωδικοποίηση GCF / δεδομένων σε μορφή πίνακα αποτελεί ξεχωριστή μηχανή. Το RTK δεν περιέχει τον κωδικοποιητή JSON σε μορφή πίνακα/στηλών «GCF» (Graph Compact Format). Αυτός ο κωδικοποιητής — ο οποίος αντικατέστησε έναν παλαιότερο κωδικοποιητή omni-tabular — βρίσκεται στη μηχανή headroom (open-sse/services/compression/engines/headroom/, με τον ενσωματωμένο κωδικοποιητή-αποκωδικοποιητή στον κατάλογο headroom/gcf/). Δεν σχετίζεται με τη διοχέτευση φίλτρων RTK που τεκμηριώνεται εδώ.

Ρύθμιση παραμέτρων

Οι καθολικές ρυθμίσεις είναι διαθέσιμες μέσω του /api/settings/compression. Οι ρυθμίσεις που αφορούν ειδικά το RTK είναι επίσης διαθέσιμες μέσω του /api/context/rtk/config.

{
  "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.

Η πλήρης δομή του rtkConfig ορίζεται από τα RtkConfig / DEFAULT_RTK_CONFIG στο open-sse/services/compression/types.ts. Ολόκληρο το αντικείμενο αποθηκεύεται ως μία ενιαία τιμή JSON στον πίνακα SQLite key_value με namespace = "compression", key = "rtkConfig" (src/lib/db/compression.ts) και κανονικοποιείται κατά την ανάγνωση από το normalizeRtkConfig. Επομένως, κάθε πεδίο παρακάτω — συμπεριλαμβανομένων των enableGrouping, groupingThreshold, stripCodeComments και preserveDocstrings — περνά από την ίδια αποθήκη και διατηρείται μετά από επανεκκίνηση.

Κλειδί Προεπιλογή Σκοπός
deduplicateThreshold 3 Σε όλη τη μηχανή: ελάχιστος αριθμός διαδοχικών πανομοιότυπων γραμμών για σύμπτυξη (όρια 2100)
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 Προεπισκόπηση συμπίεσης RTK για ένα ωφέλιμο φορτίο κειμένου
/api/context/rtk/raw-output/[id] GET Ανάγνωση διατηρημένης, αποχαρακτηρισμένης ακατέργαστης εξόδου
/api/compression/preview POST Προεπισκόπηση οποιασδήποτε λειτουργίας συμπίεσης

Ωφέλιμο φορτίο δοκιμής RTK:

{
  "command": "npm test",
  "text": "FAIL tests/example.test.ts\nAssertionError: expected true\nTest Files 1 failed",
  "config": {
    "intensity": "standard"
  }
}

Ωφέλιμο φορτίο προεπισκόπησης συμπίεσης:

{
  "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:

{
  "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, μετά την απόκρυψη

Τα διατηρούμενα αρχεία εγγράφονται στον κατάλογο:

DATA_DIR/rtk/raw-output/

Τα μυστικά αποκρύπτονται πριν από τη μόνιμη αποθήκευση, συμπεριλαμβανομένων συνηθισμένων bearer tokens, κλειδιών API, Slack tokens, κλειδιών πρόσβασης AWS και τιμών τύπου ανάθεσης token=..., secret=..., password=.... Τα αναλυτικά δεδομένα αποθηκεύουν μόνο το αναγνωριστικό δείκτη, το μέγεθος και τα μεταδεδομένα hash.

Πύλη Επαλήθευσης

Η εστιασμένη πύλη επαλήθευσης εκτελεί ενσωματωμένες δοκιμές φίλτρων inline χωρίς να καλεί εξωτερικές εντολές μέσω shell:

node --import tsx/esm --test tests/unit/compression/rtk-verify.test.ts

Η ευρύτερη πύλη RTK είναι:

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

Εκτελέστε την ευρεία πύλη συμπίεσης πριν από την κυκλοφορία:

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[] που αποδεικνύει τη σημαντική συμπεριφορά.
  3. Προσθέστε ένα fixture στον κατάλογο tests/unit/compression/fixtures/rtk/ για νέες οικογένειες εντολών.
  4. Προσθέστε κάλυψη ανίχνευσης εντολών όταν εισάγετε μια νέα κατηγορία εξόδου.
  5. Εκτελέστε τις πύλες επαλήθευσης και την ευρεία πύλη RTK.
  6. Εάν το φίλτρο είναι τοπικό στο έργο, κάντε commit το .rtk/filters.json και ανανεώστε το .rtk/trust.json μόνο μετά από έλεγχο.

Επίπεδα Έντασης (v3.8.16+)

Το RTK υποστηρίζει 3 επίπεδα έντασης που εξισορροπούν την επιθετικότητα της συμπίεσης με την ασφάλεια. Το επίπεδο ορίζεται μέσω του config.intensity στη ρύθμιση παραμέτρων της μηχανής.

Τα 3 Επίπεδα

Επίπεδο Όριο περικοπής Εξοικονόμηση token Κίνδυνος Ιδανικό για
minimal 24 γραμμές ανά ενότητα ~20-40% Πολύ χαμηλός Παραγωγή με κρίσιμο συγκείμενο
standard (προεπιλογή) 24 γραμμές ανά ενότητα ~50-70% Χαμηλός Καθημερινές συνεδρίες προγραμματισμού
aggressive 16 γραμμές ανά ενότητα ~70-90% Μέτριος Μεγάλες συνεδρίες, μέγιστη εξοικονόμηση

Πού Πραγματοποιείται η Περικοπή

Το όριο περικοπής επηρεάζει το lineFilter.ts:

// Από το open-sse/services/compression/engines/rtk/index.ts:329-330
config.intensity === "aggressive" ? 16 : 24,
config.intensity === "aggressive" ? 16 : 24,

Διατηρούνται τόσο η αρχή όσο και το τέλος κάθε ενότητας· το ενδιάμεσο περιεχόμενο απορρίπτεται όταν ενεργοποιείται η περικοπή.

Τι Διατηρείται και Τι Περικόπτεται

Περιεχόμενο minimal standard aggressive
Σφάλματα / ίχνη στοίβας διατηρούνται διατηρούνται διατηρούνται
Αποτυχίες δοκιμών διατηρούνται διατηρούνται διατηρούνται
Σφάλματα build διατηρούνται διατηρούνται διατηρούνται
Επιτυχείς δοκιμές (αναλυτικές) διατηρούνται 🟡 συμπτύσσονται 🟡 συμπτύσσονται
Συνήθης έξοδος (αρχεία καταγραφής πληροφοριών) 🟡 συμπτύσσεται 🟡 συμπτύσσεται απορρίπτεται
Γραμμές προόδου 🟡 συμπτύσσονται απορρίπτονται απορρίπτονται
Banner / τέχνη ASCII 🟡 συμπτύσσεται απορρίπτεται απορρίπτεται

Επιλογή της Κατάλληλης Έντασης

                  Είναι καταστροφική η απώλεια συγκειμένου;
                  │
      ┌───────────┼───────────┐
      │           │           │
     ΝΑΙ         ΟΧΙ       ΔΕΝ ΕΙΜΑΙ ΣΙΓΟΥΡΟΣ
      │           │           │
      ▼           │           │
   minimal        │           │
      │           │           │
      │           ▼           ▼
      │      Πόσο κρίσιμη    Δοκιμάστε πρώτα το `standard`
      │      είναι η απόδοση; (λειτουργεί για το 80% των
      │           │          περιπτώσεων)
      │      ┌────┴────┐
      │      │         │
      │    ΧΑΜΗΛΗ     ΥΨΗΛΗ
      │      │         │
      │      ▼         ▼
      │   standard   aggressive
      │      │         │
      └──────┴─────────┘

Ρύθμιση Παραμέτρων Έντασης

Ανά combo (στη ρύθμιση παραμέτρων του combo):

{
  "combo": "my-coding-combo",
  "routing": {/* ... */},
  "compression": {
    "engine": "rtk",
    "intensity": "aggressive"
  }
}

Προγραμματιστικά:

Το rtkEngine (@omniroute/open-sse/services/compression/engines/rtk) είναι ένα CompressionEngine και δεν διαθέτει μέθοδο updateConfig. Ενημερώστε τη ρύθμιση παραμέτρων μιας μηχανής μέσω του βοηθητικού εργαλείου μητρώου:

import { updateEngineConfig } from "@omniroute/open-sse/services/compression/engines/registry";

updateEngineConfig("rtk", { intensity: "aggressive" });

Επαλήθευση του Αποτελέσματος

Χρησιμοποιήστε την Πύλη Επαλήθευσης (δείτε παρακάτω) για να επιβεβαιώσετε ότι το φίλτρο σας είναι ασφαλές στην ένταση που επιλέξατε:

import { runRtkFilterTests } from "omniroute/compression/engines/rtk/verify";

const result = runRtkFilterTests({ intensity: "aggressive" });
if (!result.passed) {
  console.error("Filters failed at aggressive intensity");
}

Ανάπτυξη Προσαρμοσμένων Φίλτρων (v3.8.16+)

Ο κατάλογος engines/rtk/filters/ περιέχει 49+ ενσωματωμένα αρχεία JSON φίλτρων. Μπορείτε να προσθέσετε τα δικά σας για να συμπιέζετε την έξοδο προσαρμοσμένων εργαλείων που δεν καλύπτονται από τις προεπιλογές.

Σχήμα Φίλτρου (Zod)

{
  "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"],    // Γραμμές προς σύμπτυξη σε μία εμφάνιση (προεπιλογή: [])
    "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 Traceback

{
  "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     # Σε επίπεδο χρήστη
<project>/.rtk/filters/my-filter.json      # Σε επίπεδο έργου

Τα φίλτρα φορτώνονται αυτόματα κατά την εκκίνηση μέσω της loadRtkFilters() στο open-sse/services/compression/engines/rtk/filterLoader.ts. Ο φορτωτής εντοπίζει φίλτρα από:

  • Ενσωματωμένο κατάλογο: open-sse/services/compression/engines/rtk/filters/
  • Κατάλογο χρήστη: ~/.omniroute/rtk/filters/
  • Κατάλογο έργου: <project>/.rtk/filters/

Για να φορτώσετε φίλτρα μέσω κώδικα:

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

Για να επικυρώσετε όλα τα εγκατεστημένα φίλτρα, καλέστε τη runRtkFilterTests(), η οποία εξάγεται από το open-sse/services/compression/engines/rtk/verify.ts.

Βέλτιστες Πρακτικές

  1. Να συμπεριλαμβάνετε πάντα το tests[] — αποδεικνύει ότι το φίλτρο σας λειτουργεί και αποτρέπει παλινδρομήσεις
  2. Χρησιμοποιείτε το matchOutput για πρόωρους τερματισμούςαν μία μόνο γραμμή αποδίδει το νόημα, αντικαταστήστε ολόκληρο το μπλοκ
  3. Προτιμάτε το keep αντί του stripοι ρητοί κανόνες «να διατηρείται πάντα» είναι ασφαλέστεροι από τους κανόνες «να αφαιρείται πάντα»
  4. Πραγματοποιείτε δοκιμές και στα 3 επίπεδα έντασης — το minimal δεν θα πρέπει να επιφέρει καμία αλλαγή, ενώ το aggressive θα πρέπει να διατηρεί τα σφάλματα
  5. Χρησιμοποιείτε το πεδίο unless — προστατεύστε τους πρόωρους τερματισμούς με τον όρο «να μην ενεργοποιείται εάν υπάρχει το X»

Ανάκτηση Ακατέργαστης Εξόδου & Πύλη Επαλήθευσης

Όταν το RTK συμπιέζει επιθετικά την έξοδο, μπορείτε να ανακτήσετε το αρχικό κείμενο για αποσφαλμάτωση, έλεγχο ή επανάληψη.

Πώς Λειτουργεί η Ανάκτηση Ακατέργαστης Εξόδου

Αρχική έξοδος (10K tokens)
        │
        ▼
Συμπίεση RTK (με rawOutput.enabled=true)
        │
        ├─▶ Συμπιεσμένη έξοδος (2K tokens)  ──▶ προς το LLM
        │
        └─▶ Αρχική έξοδος (10K tokens)       ──▶ αποθηκεύεται στη βάση δεδομένων
                                                    (συνδέεται μέσω του request_id)

Ενεργοποίηση Αποθήκευσης Ακατέργαστης Εξόδου

Ανά αίτημα (στη συνδυαστική διαμόρφωση):

{
  "compression": {
    "engine": "rtk",
    "intensity": "aggressive",
    "rawOutput": {
      "enabled": true,
      "maxBytes": 1048576 // Όριο 1MB
    }
  }
}

Προεπιλογή: rawOutput.enabled: false (εξοικονομεί χώρο αποθήκευσης).

Κόστος Αποθήκευσης

Ανά αίτημα Όριο 1MB Όριο 10MB
Μέση συμπιεσμένη έξοδος ~5KB ~5KB
Αποθηκευμένη ακατέργαστη έξοδος ~50-500KB ~500KB-5MB
Με 1000 αιτήματα/ημέρα 50-500MB/ημέρα 500MB-5GB/ημέρα

Σύσταση: Ενεργοποιείτε την ακατέργαστη έξοδο μόνο για συνεδρίες αποσφαλμάτωσης ή δειγματοληπτικούς ελέγχους, όχι σε μόνιμη βάση.

Ανάκτηση του Αρχικού Περιεχομένου

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() για να εκτελέσετε την επαλήθευση:

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_ENGINES.md — Μητρώο μηχανών και ενσωματωμένες μηχανές
  • EXTENDING_COMPRESSION.md — Προσαρμοσμένες μηχανές, πακέτα γλωσσών, διαδοχικές διοχετεύσεις
  • Πηγαίος κώδικας: open-sse/services/compression/engines/rtk/ (63 αρχεία, ~70KB)