feat(i18n): add compression analytics + ultra mode keys to all 32 locales

- Add compressionModeUltra, compressionModeUltraDesc, compressionAnalyticsTitle,
  compressionAnalyticsDescription keys to all 32 locale files
- Fix missing trailing comma after comboHealthDescription in all non-en locales
- Add compressionAnalytics unit tests (10/10 passing) with beforeEach isolation
This commit is contained in:
oyi77
2026-04-29 12:01:22 +07:00
parent 71702a086c
commit ce3e4ba618
33 changed files with 473 additions and 32 deletions

View File

@@ -283,7 +283,9 @@
"utilization": "الاستخدام",
"utilizationDescription": "اتجاهات استخدام حصة المزود وتتبع حدود المعدل",
"comboHealth": "صحة المجموعة",
"comboHealthDescription": "الحصة على مستوى المجموعة وتوزيع الاستخدام ومقاييس الأداء"
"comboHealthDescription": "الحصة على مستوى المجموعة وتوزيع الاستخدام ومقاييس الأداء",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "مفاتيح واجهة برمجة التطبيقات",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Използване",
"utilizationDescription": "Тенденции в използването на квотата на доставчика и проследяване на ограниченията на скоростта",
"comboHealth": "Здраве на комбинацията",
"comboHealthDescription": "Квота на ниво комбинация, разпределение на използването и метрики на производителността"
"comboHealthDescription": "Квота на ниво комбинация, разпределение на използването и метрики на производителността",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API ключове",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Využití",
"utilizationDescription": "Trendy využití kvót poskytovatele a sledování limitů rychlosti",
"comboHealth": "Zdraví Combo",
"comboHealthDescription": "Kvóta na úrovni kombinace, distribuce využití a metriky výkonu"
"comboHealthDescription": "Kvóta na úrovni kombinace, distribuce využití a metriky výkonu",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API Klíče",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Udnyttelse",
"utilizationDescription": "Leverandørkvoteforbrugstendenser og hastighedsgrænseovervågning",
"comboHealth": "Kombosundhed",
"comboHealthDescription": "Komboniveaudkvote, fordeling af brug og ydeevnemålinger"
"comboHealthDescription": "Komboniveaudkvote, fordeling af brug og ydeevnemålinger",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API nøgler",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Auslastung",
"utilizationDescription": "Anbieter-Kontingent-Nutzungstrends und Ratenlimit-Verfolgung",
"comboHealth": "Combo-Gesundheit",
"comboHealthDescription": "Combo-level Kontingent, Nutzungsverteilung und Leistungsmetriken"
"comboHealthDescription": "Combo-level Kontingent, Nutzungsverteilung und Leistungsmetriken",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API-Schlüssel",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Utilization",
"utilizationDescription": "Provider quota usage trends and rate limit tracking",
"comboHealth": "Combo Health",
"comboHealthDescription": "Combo-level quota, usage distribution, and performance metrics"
"comboHealthDescription": "Combo-level quota, usage distribution, and performance metrics",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API Keys",
@@ -2476,6 +2478,8 @@
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionAggressiveConfig": "Aggressive Engine Configuration",
"compressionAggressiveConfigDesc": "Fine-tune summarization, tool compression, and aging thresholds",
"compressionSummarizerEnabled": "Enable Summarizer",

View File

@@ -283,7 +283,9 @@
"utilization": "Utilización",
"utilizationDescription": "Tendencias de uso de cuota del proveedor y seguimiento de límites de tasa",
"comboHealth": "Salud del combo",
"comboHealthDescription": "Cuota a nivel de combo, distribución de uso y métricas de rendimiento"
"comboHealthDescription": "Cuota a nivel de combo, distribución de uso y métricas de rendimiento",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "Claves API",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Käyttöaste",
"utilizationDescription": "Palveluntarjoajan kiintiön käyttötrendit ja nopeusrajoitusten seuranta",
"comboHealth": "Yhdistelmän kunto",
"comboHealthDescription": "Yhdistelmätason kiintiö, käytön jakautuminen ja suorituskykymittarit"
"comboHealthDescription": "Yhdistelmätason kiintiö, käytön jakautuminen ja suorituskykymittarit",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API-avaimet",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Utilisation",
"utilizationDescription": "Tendances d'utilisation du quota fournisseur et suivi des limites de débit",
"comboHealth": "Santé du combo",
"comboHealthDescription": "Quota au niveau combo, distribution de l'utilisation et métriques de performance"
"comboHealthDescription": "Quota au niveau combo, distribution de l'utilisation et métriques de performance",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "Clés API",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "ניצול",
"utilizationDescription": "מגמות שימוש במכסת הספק ומעקב אחר מגבלות קצב",
"comboHealth": "בריאות הקומבו",
"comboHealthDescription": "מכסה ברמת הקומבו, הפצת שימוש ומדדי ביצוע"
"comboHealthDescription": "מכסה ברמת הקומבו, הפצת שימוש ומדדי ביצוע",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "מפתחות API",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "उपयोग",
"utilizationDescription": "प्रदाता कोटा उपयोग रुझान और दर सीमा ट्रैकिंग",
"comboHealth": "कॉम्बो स्वास्थ्य",
"comboHealthDescription": "कॉम्बो-स्तरीय कोटा, उपयोग वितरण और प्रदर्शन मेट्रिक्स"
"comboHealthDescription": "कॉम्बो-स्तरीय कोटा, उपयोग वितरण और प्रदर्शन मेट्रिक्स",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "एपीआई कुंजी",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Kihasználtság",
"utilizationDescription": "Szolgáltatói kvótahasználati trendek és sebességkorlát-követés",
"comboHealth": "Kombo egészsége",
"comboHealthDescription": "Kombó szintű kvóta, használateloszlás és teljesítménymutatók"
"comboHealthDescription": "Kombó szintű kvóta, használateloszlás és teljesítménymutatók",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API kulcsok",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Pemanfaatan",
"utilizationDescription": "Tren penggunaan kuota penyedia dan pelacakan batas tarif",
"comboHealth": "Kesehatan Kombinasi",
"comboHealthDescription": "Kuota tingkat kombinasi, distribusi penggunaan, dan metrik kinerja"
"comboHealthDescription": "Kuota tingkat kombinasi, distribusi penggunaan, dan metrik kinerja",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "Kunci API",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Utilizzo",
"utilizationDescription": "Tendenze di utilizzo della quota del provider e monitoraggio dei limiti di frequenza",
"comboHealth": "Salute Combo",
"comboHealthDescription": "Quota a livello combo, distribuzione dell'utilizzo e metriche delle prestazioni"
"comboHealthDescription": "Quota a livello combo, distribuzione dell'utilizzo e metriche delle prestazioni",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "Chiavi API",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "活用率",
"utilizationDescription": "プロバイダーのクォータ使用傾向とレート制限の追跡",
"comboHealth": "コンボ健全性",
"comboHealthDescription": "コンボレベルのクォータ、使用分布、パフォーマンスメトリクス"
"comboHealthDescription": "コンボレベルのクォータ、使用分布、パフォーマンスメトリクス",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "APIキー",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "활용률",
"utilizationDescription": "공급자 할당량 사용 추세 및 속도 제한 추적",
"comboHealth": "콤보 건강 상태",
"comboHealthDescription": "콤보 수준 할당량, 사용 분포 및 성능 메트릭"
"comboHealthDescription": "콤보 수준 할당량, 사용 분포 및 성능 메트릭",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API 키",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Pemanfaatan",
"utilizationDescription": "Tren penggunaan kuota pembekal dan penjejakan had kadar",
"comboHealth": "Kesihatan Combo",
"comboHealthDescription": "Kuota peringkat combo, pengagihan penggunaan dan metrik prestasi"
"comboHealthDescription": "Kuota peringkat combo, pengagihan penggunaan dan metrik prestasi",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "Kunci API",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Benutting",
"utilizationDescription": "Trends in quotagebruik van de provider en bijhouden van snelheidslimieten",
"comboHealth": "Combo-gezondheid",
"comboHealthDescription": "Quota op combo-niveau, gebruiksdistributie en prestatiegegevens"
"comboHealthDescription": "Quota op combo-niveau, gebruiksdistributie en prestatiegegevens",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API-sleutels",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Utnyttelse",
"utilizationDescription": "Leverandørkvotebrukstrender og hastighetsgrensesporing",
"comboHealth": "Kombohelse",
"comboHealthDescription": "Kombonivåkvote, bruksfordeling og ytelsesmålinger"
"comboHealthDescription": "Kombonivåkvote, bruksfordeling og ytelsesmålinger",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API-nøkler",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Paggamit",
"utilizationDescription": "Mga trend sa paggamit ng quota ng provider at pagsubaybay sa rate limit",
"comboHealth": "Kalusugan ng Combo",
"comboHealthDescription": "Quota sa antas ng combo, pamamahagi ng paggamit, at mga metrics ng pagganap"
"comboHealthDescription": "Quota sa antas ng combo, pamamahagi ng paggamit, at mga metrics ng pagganap",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "Mga API Key",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Wykorzystanie",
"utilizationDescription": "Trendy wykorzystania kwoty dostawcy i śledzenie limitów szybkości",
"comboHealth": "Zdrowie Kombinacji",
"comboHealthDescription": "Kwota na poziomie kombinacji, dystrybucja użycia i metryki wydajności"
"comboHealthDescription": "Kwota na poziomie kombinacji, dystrybucja użycia i metryki wydajności",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "Klucze API",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Utilização",
"utilizationDescription": "Tendências de uso de cota do provedor e rastreamento de limites de taxa",
"comboHealth": "Saúde do Combo",
"comboHealthDescription": "Cota em nível de combo, distribuição de uso e métricas de desempenho"
"comboHealthDescription": "Cota em nível de combo, distribuição de uso e métricas de desempenho",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "Chaves de API",
@@ -2474,6 +2476,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Utilização",
"utilizationDescription": "Tendências de uso de quota do provedor e rastreamento de limites de taxa",
"comboHealth": "Saúde do Combo",
"comboHealthDescription": "Quota ao nível do combo, distribuição de uso e métricas de desempenho"
"comboHealthDescription": "Quota ao nível do combo, distribuição de uso e métricas de desempenho",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "Chaves de API",
@@ -2474,6 +2476,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Utilizare",
"utilizationDescription": "Tendințe de utilizare a cotelor furnizorului și urmărirea limitelor de rată",
"comboHealth": "Sănătatea Combo-ului",
"comboHealthDescription": "Cotă la nivel de combo, distribuția utilizării și metricile de performanță"
"comboHealthDescription": "Cotă la nivel de combo, distribuția utilizării și metricile de performanță",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "Chei API",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Использование",
"utilizationDescription": "Тенденции использования квоты поставщика и отслеживание ограничений скорости",
"comboHealth": "Здоровье комбо",
"comboHealthDescription": "Квота на уровне комбо, распределение использования и метрики производительности"
"comboHealthDescription": "Квота на уровне комбо, распределение использования и метрики производительности",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API-ключи",
@@ -2446,6 +2448,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Využitie",
"utilizationDescription": "Trendy využitia kvót poskytovateľa a sledovanie limitov rýchlosti",
"comboHealth": "Zdravie Combo",
"comboHealthDescription": "Kvóta na úrovni combo, distribúcia používania a metríky výkonu"
"comboHealthDescription": "Kvóta na úrovni combo, distribúcia používania a metríky výkonu",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API kľúče",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Användning",
"utilizationDescription": "Leverantörskvotanvändningstrender och hastighetsgränsuppföljning",
"comboHealth": "Kombohälsa",
"comboHealthDescription": "Kombonivåkvot, användningsfördelning och prestandamått"
"comboHealthDescription": "Kombonivåkvot, användningsfördelning och prestandamått",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API-nycklar",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "การใช้งาน",
"utilizationDescription": "แนวโน้มการใช้โควต้าของผู้ให้บริการและการติดตามขีดจำกัดอัตรา",
"comboHealth": "สุขภาพคอมโบ",
"comboHealthDescription": "โควต้าระดับคอมโบ การกระจายการใช้งาน และตัวชั่งวัดประสิทธิภาพ"
"comboHealthDescription": "โควต้าระดับคอมโบ การกระจายการใช้งาน และตัวชั่งวัดประสิทธิภาพ",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "คีย์ API",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Kullanım",
"utilizationDescription": "Sağlayıcı kota kullanım trendleri ve hız limiti takibi",
"comboHealth": "Kombo Sağlığı",
"comboHealthDescription": "Kombo düzeyinde kota, kullanım dağılımı ve performans metrikleri"
"comboHealthDescription": "Kombo düzeyinde kota, kullanım dağılımı ve performans metrikleri",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API Anahtarları",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Використання",
"utilizationDescription": "Тренди використання квоти постачальника та відстеження обмежень швидкості",
"comboHealth": "Здоров'я комбінації",
"comboHealthDescription": "Квота на рівні комбінації, розподіл використання та метрики продуктивності"
"comboHealthDescription": "Квота на рівні комбінації, розподіл використання та метрики продуктивності",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "Ключі API",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "Tỷ lệ sử dụng",
"utilizationDescription": "Xu hướng sử dụng hạn ngạch nhà cung cấp và theo dõi giới hạn tốc độ",
"comboHealth": "Sức khỏe Combo",
"comboHealthDescription": "Hạn ngạch cấp combo, phân phối sử dụng và số liệu hiệu suất"
"comboHealthDescription": "Hạn ngạch cấp combo, phân phối sử dụng và số liệu hiệu suất",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "Khóa API",
@@ -2422,6 +2424,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -283,7 +283,9 @@
"utilization": "利用率",
"utilizationDescription": "提供商配额使用趋势和速率限制跟踪",
"comboHealth": "组合健康状况",
"comboHealthDescription": "组合级别配额、使用分布和性能指标"
"comboHealthDescription": "组合级别配额、使用分布和性能指标",
"compressionAnalyticsTitle": "Compression Analytics",
"compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats."
},
"apiManager": {
"title": "API 密钥",
@@ -2512,6 +2514,10 @@
"compressionModeLiteDesc": "Whitespace and blank line reduction",
"compressionModeStandard": "Standard (Caveman)",
"compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
"compressionModeAggressive": "Aggressive",
"compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
"compressionModeUltra": "Ultra",
"compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
"compressionGeneral": "General Settings",
"compressionAutoTrigger": "Auto-Trigger Threshold",
"compressionCacheTTL": "Cache TTL",

View File

@@ -0,0 +1,251 @@
import { describe, it, before, beforeEach, after } from "node:test";
import assert from "node:assert/strict";
import { mkdtempSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
const tmpDir = mkdtempSync(join(tmpdir(), "omniroute-test-"));
process.env.DATA_DIR = tmpDir;
import {
insertCompressionAnalyticsRow,
getCompressionAnalyticsSummary,
} from "../../../src/lib/db/compressionAnalytics.js";
import { getDbInstance } from "../../../src/lib/db/core.js";
describe("compressionAnalytics", () => {
before(() => {
const db = getDbInstance();
db.exec(`
CREATE TABLE IF NOT EXISTS compression_analytics (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp TEXT NOT NULL,
combo_id TEXT,
provider TEXT,
mode TEXT NOT NULL,
original_tokens INTEGER NOT NULL,
compressed_tokens INTEGER NOT NULL,
tokens_saved INTEGER NOT NULL,
duration_ms INTEGER,
request_id TEXT
)
`);
});
beforeEach(() => {
// Clear table before each test for full isolation
const db = getDbInstance();
db.exec("DELETE FROM compression_analytics");
});
after(() => {
rmSync(tmpDir, { recursive: true, force: true });
});
it("empty table returns zeroed summary", () => {
const summary = getCompressionAnalyticsSummary();
assert.deepEqual(summary, {
totalRequests: 0,
totalTokensSaved: 0,
avgSavingsPct: 0,
avgDurationMs: 0,
byMode: {},
byProvider: {},
last24h: [],
});
});
it("insert single row does not throw", () => {
const row = {
timestamp: new Date().toISOString(),
mode: "lite",
original_tokens: 1000,
compressed_tokens: 800,
tokens_saved: 200,
};
assert.doesNotThrow(() => insertCompressionAnalyticsRow(row));
const summary = getCompressionAnalyticsSummary();
assert.equal(summary.totalRequests, 1);
});
it("summary counts correctly after multiple inserts", () => {
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "lite",
original_tokens: 1000,
compressed_tokens: 800,
tokens_saved: 200,
});
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "standard",
original_tokens: 300,
compressed_tokens: 280,
tokens_saved: 20,
});
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "aggressive",
original_tokens: 500,
compressed_tokens: 400,
tokens_saved: 100,
});
const summary = getCompressionAnalyticsSummary();
assert.equal(summary.totalRequests, 3);
});
it("totalTokensSaved sums correctly", () => {
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "lite",
original_tokens: 1000,
compressed_tokens: 800,
tokens_saved: 200,
});
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "standard",
original_tokens: 300,
compressed_tokens: 280,
tokens_saved: 20,
});
const summary = getCompressionAnalyticsSummary();
assert.equal(summary.totalTokensSaved, 220);
});
it("byMode groups correctly", () => {
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "lite",
original_tokens: 1000,
compressed_tokens: 800,
tokens_saved: 200,
});
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "lite",
original_tokens: 500,
compressed_tokens: 400,
tokens_saved: 100,
});
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "standard",
original_tokens: 300,
compressed_tokens: 270,
tokens_saved: 30,
});
const summary = getCompressionAnalyticsSummary();
assert.equal(summary.byMode["lite"].count, 2);
assert.equal(summary.byMode["lite"].tokensSaved, 300);
assert.equal(summary.byMode["standard"].count, 1);
});
it("byProvider groups correctly", () => {
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "lite",
original_tokens: 1000,
compressed_tokens: 800,
tokens_saved: 200,
provider: "ProviderA",
});
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "lite",
original_tokens: 500,
compressed_tokens: 400,
tokens_saved: 100,
provider: "ProviderB",
});
const summary = getCompressionAnalyticsSummary();
assert.deepEqual(summary.byProvider["ProviderA"], { count: 1, tokensSaved: 200 });
assert.deepEqual(summary.byProvider["ProviderB"], { count: 1, tokensSaved: 100 });
});
it("since=24h filters rows older than 24h", () => {
const oldTimestamp = new Date(Date.now() - 48 * 60 * 60 * 1000).toISOString();
const recentTimestamp = new Date().toISOString();
insertCompressionAnalyticsRow({
timestamp: oldTimestamp,
mode: "lite",
original_tokens: 2000,
compressed_tokens: 1800,
tokens_saved: 200,
});
insertCompressionAnalyticsRow({
timestamp: recentTimestamp,
mode: "lite",
original_tokens: 1000,
compressed_tokens: 900,
tokens_saved: 100,
});
const summary24h = getCompressionAnalyticsSummary("24h");
assert.equal(summary24h.totalRequests, 1);
assert.equal(summary24h.totalTokensSaved, 100);
});
it("since=undefined returns all rows including old ones", () => {
const oldTimestamp = new Date(Date.now() - 48 * 60 * 60 * 1000).toISOString();
const recentTimestamp = new Date().toISOString();
insertCompressionAnalyticsRow({
timestamp: oldTimestamp,
mode: "lite",
original_tokens: 2000,
compressed_tokens: 1800,
tokens_saved: 200,
});
insertCompressionAnalyticsRow({
timestamp: recentTimestamp,
mode: "lite",
original_tokens: 1000,
compressed_tokens: 900,
tokens_saved: 100,
});
const summaryAll = getCompressionAnalyticsSummary();
assert.equal(summaryAll.totalRequests, 2);
assert.equal(summaryAll.totalTokensSaved, 300);
});
it("avgSavingsPct calculates correctly", () => {
// 200/1000 = 20%, 100/500 = 20% → avg = 20%
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "lite",
original_tokens: 1000,
compressed_tokens: 800,
tokens_saved: 200,
});
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "standard",
original_tokens: 500,
compressed_tokens: 400,
tokens_saved: 100,
});
const summary = getCompressionAnalyticsSummary();
assert.equal(summary.avgSavingsPct, 20);
});
it("last24h hourly buckets have correct shape", () => {
insertCompressionAnalyticsRow({
timestamp: new Date().toISOString(),
mode: "lite",
original_tokens: 1000,
compressed_tokens: 800,
tokens_saved: 200,
});
const hourly = getCompressionAnalyticsSummary("24h").last24h;
assert(Array.isArray(hourly));
assert(hourly.length <= 24);
hourly.forEach((bucket) => {
assert(typeof bucket.hour === "string");
assert(typeof bucket.count === "number");
assert(typeof bucket.tokensSaved === "number");
});
});
});