* 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.
53 KiB
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 φορτώνει τα φίλτρα με την εξής σειρά:
- Φίλτρα έργου από τα
.rtk/filters.tomlκαι.rtk/filters.json, μόνο όταν είναι αξιόπιστα. - Καθολικά φίλτρα από τα
DATA_DIR/rtk/filters.tomlκαιDATA_DIR/rtk/filters.json. - Ενσωματωμένα φίλτρα από το
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 συμπτύσσει τις διπλότυπες γραμμές σε δύο ανεξάρτητα επίπεδα:
deduplicateανά φίλτρο (προαιρετικό, προεπιλογήfalse). Ένα φίλτρο μπορεί να ορίσειrules.deduplicate: trueγια να συμπτύξει διαδοχικές διπλότυπες γραμμές εντός της αντιστοιχισμένης εξόδου αυτού του φίλτρου, πριν από την περικοπή. Αυτό εκτελείται μέσα στοlineFilter.ts. Για παλαιότερα φίλτρα, ενεργοποιείται αυτόματα όταν το φίλτρο ορίζειcollapsePatterns. Σχήμα:deduplicate: z.boolean().default(false)στοopen-sse/services/compression/engines/rtk/filterSchema.ts.- Καθολικό για τη μηχανή
deduplicateThreshold(προεπιλογή3). Αφού εκτελεστούν όλα τα φίλτρα, η μηχανή συμπτύσσει κάθε ακολουθία από>= deduplicateThresholdπανομοιότυπες διαδοχικές γραμμές σε ολόκληρο το αποτέλεσμα (deduplicateRepeatedLines, που εφαρμόζεται στοengines/rtk/index.ts). Κατά την κανονικοποίηση, η τιμή περιορίζεται μεταξύ 2–100.
Το πέρασμα ανά φίλτρο εκτελείται πρώτο (μέσα στο φίλτρο), ενώ το καθολικό πέρασμα της μηχανής εκτελείται τελευταίο (πάνω στη συνενωμένη έξοδο), ώστε τα δύο να συνδυάζονται χωρίς διπλή καταμέτρηση.
Ομαδοποίηση γραμμών (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 |
Σε όλη τη μηχανή: ελάχιστος αριθμός διαδοχικών πανομοιότυπων γραμμών για σύμπτυξη (όρια 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 | Προεπισκόπηση συμπίεσης 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
- Προσθέστε ή ενημερώστε ένα αρχείο JSON φίλτρου.
- Συμπεριλάβετε τουλάχιστον ένα δείγμα
tests[]που αποδεικνύει τη σημαντική συμπεριφορά. - Προσθέστε ένα fixture στον κατάλογο
tests/unit/compression/fixtures/rtk/για νέες οικογένειες εντολών. - Προσθέστε κάλυψη ανίχνευσης εντολών όταν εισάγετε μια νέα κατηγορία εξόδου.
- Εκτελέστε τις πύλες επαλήθευσης και την ευρεία πύλη RTK.
- Εάν το φίλτρο είναι τοπικό στο έργο, κάντε 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.
Βέλτιστες Πρακτικές
- Να συμπεριλαμβάνετε πάντα το
tests[]— αποδεικνύει ότι το φίλτρο σας λειτουργεί και αποτρέπει παλινδρομήσεις - Χρησιμοποιείτε το
matchOutputγια πρόωρους τερματισμούς — αν μία μόνο γραμμή αποδίδει το νόημα, αντικαταστήστε ολόκληρο το μπλοκ - Προτιμάτε το
keepαντί τουstrip— οι ρητοί κανόνες «να διατηρείται πάντα» είναι ασφαλέστεροι από τους κανόνες «να αφαιρείται πάντα» - Πραγματοποιείτε δοκιμές και στα 3 επίπεδα έντασης — το
minimalδεν θα πρέπει να επιφέρει καμία αλλαγή, ενώ τοaggressiveθα πρέπει να διατηρεί τα σφάλματα - Χρησιμοποιείτε το πεδίο
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}"`
);
});
}
Τι επικυρώνει:
- Κάθε φίλτρο φορτώνεται και περνά την επικύρωση σχήματος
- Κάθε καταχώριση
tests[]παράγει την αναμενόμενη έξοδο - Η ένταση
minimalδεν εκτελεί καμία ενέργεια (διατηρεί το αρχικό περιεχόμενο και εφαρμόζει μόνο δομικά φίλτρα) - Η ένταση
aggressiveδιατηρεί τα σφάλματα, τις αποτυχίες δοκιμών και τα ίχνη στοίβας - Η συμπιεσμένη έξοδος δεν είναι ποτέ μεγαλύτερη από την αρχική είσοδο
-
Πηγή:
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)