diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index f27399a70e..74159fd4b9 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -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", diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json index 737315c80d..2dfa6fe86c 100644 --- a/src/i18n/messages/bg.json +++ b/src/i18n/messages/bg.json @@ -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", diff --git a/src/i18n/messages/cs.json b/src/i18n/messages/cs.json index 93eaca7075..4a6a3b33ff 100644 --- a/src/i18n/messages/cs.json +++ b/src/i18n/messages/cs.json @@ -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", diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json index a3d9a47747..00c89fad36 100644 --- a/src/i18n/messages/da.json +++ b/src/i18n/messages/da.json @@ -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", diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index 3b2a47e34e..f0bbada796 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -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", diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index eeb72a2047..fe4c98b808 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -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", diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 5e5d1a3475..ab1e423a09 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -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", diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json index 52a1fd9012..0ae8104067 100644 --- a/src/i18n/messages/fi.json +++ b/src/i18n/messages/fi.json @@ -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", diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index 7b57bb85fe..9ebd9d6148 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -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", diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json index 135ab2d4df..69ab6704e5 100644 --- a/src/i18n/messages/he.json +++ b/src/i18n/messages/he.json @@ -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", diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json index 897b446a44..ffb7894803 100644 --- a/src/i18n/messages/hi.json +++ b/src/i18n/messages/hi.json @@ -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", diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json index 4891a45503..6bf7a7b173 100644 --- a/src/i18n/messages/hu.json +++ b/src/i18n/messages/hu.json @@ -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", diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json index 57adb170e5..b36c959731 100644 --- a/src/i18n/messages/id.json +++ b/src/i18n/messages/id.json @@ -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", diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index 93807848fa..2bd1ac6c3f 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -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", diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index aa0530b842..f2ba2c66d5 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -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", diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index f5c2ee2d4e..bc568281d0 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -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", diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json index 45980e79a2..3fd3d97fc9 100644 --- a/src/i18n/messages/ms.json +++ b/src/i18n/messages/ms.json @@ -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", diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json index e4b6d5fe7b..650690fe37 100644 --- a/src/i18n/messages/nl.json +++ b/src/i18n/messages/nl.json @@ -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", diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json index 27a06f1f6e..19803980e3 100644 --- a/src/i18n/messages/no.json +++ b/src/i18n/messages/no.json @@ -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", diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json index 0f21de3afe..e9ca4ece21 100644 --- a/src/i18n/messages/phi.json +++ b/src/i18n/messages/phi.json @@ -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", diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json index 772464341b..ecb4d9f4f2 100644 --- a/src/i18n/messages/pl.json +++ b/src/i18n/messages/pl.json @@ -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", diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index 9825e4ecae..87b9bf8a65 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -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", diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index 4d07810cfd..e8c45940eb 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -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", diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json index 0be121a5d7..6a2e1a59a3 100644 --- a/src/i18n/messages/ro.json +++ b/src/i18n/messages/ro.json @@ -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", diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index c6c3d98504..3402539fd2 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -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", diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json index f88effb038..6436692088 100644 --- a/src/i18n/messages/sk.json +++ b/src/i18n/messages/sk.json @@ -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", diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json index 099e7b1063..30391cdbaf 100644 --- a/src/i18n/messages/sv.json +++ b/src/i18n/messages/sv.json @@ -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", diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json index 14f697a238..3e8c38962e 100644 --- a/src/i18n/messages/th.json +++ b/src/i18n/messages/th.json @@ -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", diff --git a/src/i18n/messages/tr.json b/src/i18n/messages/tr.json index 19214cf3d5..6a7368a920 100644 --- a/src/i18n/messages/tr.json +++ b/src/i18n/messages/tr.json @@ -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", diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json index f6233ef7e0..ca1f670727 100644 --- a/src/i18n/messages/uk-UA.json +++ b/src/i18n/messages/uk-UA.json @@ -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", diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json index 960b5562e6..e578eab015 100644 --- a/src/i18n/messages/vi.json +++ b/src/i18n/messages/vi.json @@ -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", diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index 8553ec6b24..42c84fe9bf 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -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", diff --git a/tests/unit/compression/compressionAnalytics.test.ts b/tests/unit/compression/compressionAnalytics.test.ts new file mode 100644 index 0000000000..6c473f1ab9 --- /dev/null +++ b/tests/unit/compression/compressionAnalytics.test.ts @@ -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"); + }); + }); +});