* 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.
16 KiB
Compression Rules Format (עברית)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇳 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
כללי דחיסה הם קובצי JSON שנטענים בזמן ריצה. הם מבוססי נתונים בלבד במכוון, כך שניתן לסקור חבילות שפה חדשות ומסנני פקודות RTK מבלי לשנות את קוד המנוע.
סכמה קנונית (מקור האמת):
open-sse/services/compression/rules/_schema.json(טיוטת JSON Schema 2020-12). הדוגמאות שלהלן נועדו להמחשה — במקרה של ספק, אמתו את החבילה שלכם מול_schema.json.
חבילות כללים של Caveman
חבילות הכללים של Caveman נמצאות תחת:
open-sse/services/compression/rules/<language>/<pack>.json
כל חבילה מכילה החלפות שמוחלות על טקסט רגיל לאחר בידוד האזורים המוגנים.
{
"language": "en",
"category": "filler",
"rules": [
{
"name": "question_to_directive",
"pattern": "\\b(?:Can you explain why|Could you show me how)\\b\\s*",
"replacement": "Explain why ",
"replacementMap": {
"can you explain why": "Explain why ",
"could you show me how": "Show how "
},
"flags": "gi",
"context": "all",
"category": "context",
"minIntensity": "lite",
"description": "Convert verbose questions into direct requests."
}
]
}
שדות Caveman
| שדה | חובה | תיאור |
|---|---|---|
language |
כן | מפתח שפה דמוי BCP-47, כגון en, pt-BR, es |
category |
כן | שם קובץ/קטגוריה של החבילה, לדוגמה filler או dedup |
rules |
כן | מערך של כללי החלפה באמצעות ביטויים רגולריים |
rules[].name |
כן | שם יציב של הכלל |
rules[].pattern |
כן | מקור של ביטוי רגולרי ב-JavaScript |
rules[].flags |
לא | דגלי ביטוי רגולרי של JavaScript; ברירת המחדל היא gi |
rules[].replacement |
לא | מחרוזת החלפה או ערך חלופי כאשר אין התאמה ב-replacementMap |
rules[].replacementMap |
לא | החלפות ייעודיות להתאמה, שממופות לפי הטקסט המותאם לאחר נרמול |
rules[].context |
לא | all, user, assistant או system; ברירת המחדל היא all |
rules[].category |
לא | filler, context, structural, dedup, terse או ultra |
rules[].minIntensity |
לא | lite, full או ultra; ברירת המחדל היא lite |
rules[].description |
לא | תקציר קריא לאדם של הכלל |
השתמשו ב-flags כאשר יש חשיבות להתאמה תלוית רישיות, לדוגמה להסרת תווית לפני טקסט באותיות קטנות מבלי להסיר את the OpenAI API. השתמשו ב-replacementMap כאשר ביטוי רגולרי אחד כולל כמה חלופות שזקוקות לפלטים שונים; כך חבילות כללי JSON נשארות מבוססות נתונים בלבד, תוך שימור ההתנהגות של פונקציות ההחלפה המובנות והעשירות יותר של TypeScript.
חבילות מסנני RTK
מסנני RTK נמצאים תחת:
open-sse/services/compression/engines/rtk/filters/<filter>.json
כל מסנן מתאר כיצד לזהות ולדחוס משפחה של פלטי פקודות.
{
"id": "test-vitest",
"label": "Vitest output",
"category": "test",
"priority": 92,
"match": {
"outputTypes": ["test-vitest"],
"commands": ["vitest", "npm test", "npm run test"],
"patterns": ["\\bFAIL\\b", "\\bPASS\\b", "\\bTest Files\\b"]
},
"rules": {
"stripAnsi": true,
"replace": [{ "pattern": "\\s+\\[[0-9]+ms\\]", "replacement": "" }],
"matchOutput": [
{
"pattern": "All tests passed",
"message": "vitest: ok",
"unless": "FAIL|Error:"
}
],
"includePatterns": ["FAIL", "Error:", "Test Files", "Tests"],
"dropPatterns": ["^\\s*$", "Duration\\s+\\d+"],
"collapsePatterns": ["^\\s+at "],
"deduplicate": true,
"truncateLineAt": 240,
"maxLines": 160,
"headLines": 24,
"tailLines": 40,
"onEmpty": "vitest: ok",
"filterStderr": false
},
"preserve": {
"errorPatterns": ["FAIL", "Error:", "AssertionError"],
"summaryPatterns": ["Test Files", "Tests", "Snapshots"]
},
"tests": [
{
"name": "keeps failing tests",
"command": "vitest",
"input": "FAIL test/a.test.ts\\nError: boom\\nTest Files 1 failed",
"expected": "FAIL test/a.test.ts\\nError: boom\\nTest Files 1 failed"
}
]
}
שדות RTK
| שדה | חובה | תיאור |
|---|---|---|
id |
כן | מזהה מסנן יציב |
label |
כן | שם קריא בלוח הבקרה |
category |
כן | משפחת המסנן: git, test, build, shell, docker, package, infra, cloud, generic |
priority |
לא | עדיפות גבוהה יותר מנצחת כאשר מספר מסננים תואמים |
match.outputTypes |
לא | מזהי פלט של הגלאי שבוחרים במסנן זה |
match.commands |
לא | אסימוני פקודות שבוחרים במסנן זה |
match.patterns |
לא | תבניות ביטויים רגולריים שבוחרות במסנן זה מתוך טקסט הפלט |
rules.stripAnsi |
לא | הסרת רצפי מילוט ANSI לפני שלבי הביטויים הרגולריים |
rules.replace |
לא | החלפות ביטויים רגולריים מסודרות המוחלות שורה אחר שורה |
rules.matchOutput |
לא | כללי פלט שעוצרים את העיבוד מוקדם, עם תנאי unless אופציונלי |
rules.includePatterns |
לא | שורות שיש להעדיף לשמר |
rules.dropPatterns |
לא | שורות שיש להסיר כרעש |
rules.collapsePatterns |
לא | שורות תואמות חוזרות שניתן לכווץ |
rules.deduplicate |
לא | כיווץ שורות מנורמלות כפולות |
rules.truncateLineAt |
לא | מגבלת תווים לכל שורה, בטוחה ל-Unicode |
rules.maxLines |
לא | מספר השורות המרבי שיישמר לפני שימור הסוף |
rules.headLines |
לא | שורות מתחילת הפלט שנשמרות במהלך הקיטוע |
rules.tailLines |
לא | שורות מסוף הפלט שנשמרות לצורך הקשר עדכני |
rules.onEmpty |
לא | הודעת ברירת מחדל כאשר הסינון מסיר את כל התוכן |
rules.filterStderr |
לא | נרמול קידומות stderr נפוצות לפני שלבי הסינון הבאים |
preserve.errorPatterns |
לא | שורות שגיאה שאמורות לשרוד את הקיטוע |
preserve.summaryPatterns |
לא | שורות סיכום שאמורות לשרוד את הקיטוע |
tests[] |
לא | דוגמאות אימות מובנות המשמשות את שער האימות של RTK |
RTK מחיל שלבים הצהרתיים בסדר הבא: stripAnsi, filterStderr, replace,
matchOutput, dropPatterns/includePatterns, truncateLineAt, headLines/tailLines,
maxLines ו-onEmpty.
ניתן לטעון מסננים מותאמים אישית מתוך:
- קובצי
.rtk/filters.jsonשל הפרויקט, רק לאחר שקיים גיבוב תואם בקובץ.rtk/trust.json, או כאשרtrustProjectFiltersמופעל. - הקובץ הגלובלי
DATA_DIR/rtk/filters.json. - מסננים מובנים.
קבצים מותאמים אישית של הפרויקט או ברמה הגלובלית עשויים להכיל אובייקט מסנן יחיד או מערך של אובייקטי מסנן. מסננים מותאמים אישית לא תקינים מדולגים תוך הפקת מידע אבחוני; מסננים מובנים לא תקינים גורמים לכשל באימות.
קובץ האמון של הפרויקט:
{
"filtersSha256": "0123456789abcdef..."
}
דריסת הסביבה OMNIROUTE_RTK_TRUST_PROJECT_FILTERS=1 נותנת אמון במסנני הפרויקט ללא
גיבוב, ויש להגביל את השימוש בה לפיתוח מקומי מבוקר.
כללי בטיחות
- יש לשמור על אידמפוטנטיות של הכללים: הפעלת אותו מסנן פעמיים לא אמורה להשחית את הפלט.
- יש לשמר במידת האפשר את הנוסח המדויק של שגיאות, נתיבי קבצים, מספרי שורות וסיכומי פקודות.
- יש להימנע מכללים שמשנים בלוקי קוד, מטעני JSON, כתובות URL או סודות.
- יש להוסיף כיסוי בדיקות יחידה למשפחות פקודות חדשות בבדיקות הגלאי/המסנן.
- יש להוסיף דוגמאות
tests[]לכל מסנן מובנה ולמסננים מותאמים אישית משותפים.
אימות
חבילות כללים מאומתות לפני השימוש. חבילות Caveman מובנות ומסנני RTK מובנים נכשלים מיד במהלך האימות, כך שנכסי הפצה פגומים מתגלים לפני המשלוח. מסנני RTK מותאמים אישית מדולגים עם מידע אבחוני כאשר ניתוח התחביר או אימות האמון נכשלים.
אימות ממוקד:
node --import tsx/esm --test tests/unit/compression/rule-loader.test.ts tests/unit/compression/language-packs.test.ts
node --import tsx/esm --test tests/unit/compression/rtk-verify.test.ts tests/unit/compression/rtk-dsl-pipeline.test.ts