Skip to content

Tunnel Agent 0.9.0

Choose a tag to compare

@github-actions github-actions released this 22 Jun 16:36
· 43 commits to main since this release

Installation

Platform Installer Portable
Windows x64 Setup.exe .zip
Windows arm64 Setup.exe .zip
Linux x64 .AppImage
Linux arm64 .AppImage
macOS x64 (Intel) .pkg .zip
macOS arm64 (Apple Silicon) .pkg .zip

Existing installations update automatically via Velopack.


Fixed

  • Engine update toast localization (MainWindowViewModel, Resources/Strings*.resx): the "<engine> <version> is ready to install." body of the CLIProxyAPI/Perplexity update toast was hardcoded in English while its title was translated. It now resolves through the new Toast_EngineUpdateAvailable_Body format string, translated for all fourteen supported languages.

Added

  • Dashboard summary by provider or model (DashboardViewModel, DashboardView.axaml, Resources/Strings*.resx): the usage summary table now has a sliding tab to group rows by provider or by model, reusing the same per-row metrics (calls, success/fail, rate, tokens, estimated cost, last request). The headline cards and chart remain provider-agnostic aggregates. Added DashboardView_Summary_ByProvider, DashboardView_Summary_ByModel and DashboardView_Summary_Model translations for all fourteen languages.
  • Dashboard/Home usage view and usage-backed requests (DashboardView, DashboardViewModel, LogsViewModel, UsageChart, UsageService, UsageStore, UsageEvent, ModelPricing, MainWindow): added Home as the default sidebar section with usage range tabs, headline metrics, provider summary, an interactive hoverable usage chart, and CLIProxyAPI usage telemetry backed by SQLite persistence. Tunnel Agent enables CLIProxyAPI usage statistics, continuously drains the destructive /v0/management/usage-queue, deduplicates events by hash, estimates model token costs, parses cache/reasoning token details, and keeps persisted history across restarts. Dashboard and the Logs → Requests tab now use this telemetry store as their source of truth, while Logs → Proxy logs remains a raw log-file view with separate clear/delete actions and its own renamed auto-refresh setting; clearing usage history is available from Dashboard and Requests and deletes only stored usage events.
  • Dynamic model pricing with on-disk cache (OpenRouterContextService, ModelPricing, DashboardViewModel, MainWindowViewModel): dashboard cost estimates resolve per-model prices from OpenRouter's live /v1/models list (input, output, cache-read and cache-write rates), falling back to a built-in table for models OpenRouter does not list. This avoids mispricing models newer than the table, which previously fell back to an older prefix match. The fetched model map is persisted to openrouter-models.json under the local data directory and seeded into memory on startup (instant, offline-capable), refreshing from the network only when the cache is missing or older than 24h. Agents configuration reuses the same cached map for context window, reasoning and image-modality metadata.
  • Per-provider cost accounting (ModelPricing): cost estimation distinguishes cache-creation (write) from cache-read tokens and applies the correct token model per provider — Anthropic-style events bill input as cache-free with separate write/read rates, while OpenAI-style events use the aggregate-cached subtraction.
  • Dashboard/Home localization across all languages (Resources/Strings*.resx, MainWindow.axaml, DashboardView.axaml, LogsView.axaml): the Home/Dashboard view and the clear-usage-history dialog now ship full translations (DashboardView_*, Sidebar_Home, Dialog_ClearUsageHistory_*) for all fourteen supported languages instead of only English and Spanish, and the clear-usage confirmation dialog uses its own Dialog_ClearUsageHistory_Cancel key. The shared clear-usage-history tooltip (used on Home and the Logs → Requests tab) was renamed from LogsView_ClearUsageHistoryTooltip to the view-neutral Common_ClearUsageHistoryTooltip and translated for every language.