diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b52538d..f423cb4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -505,6 +505,9 @@ jobs: - name: Integration test — Kimi Code routing and quota fixture run: tests/test-kimi-code.sh + - name: Integration test — Command Code quota windows and fallback + run: tests/test-commandcode.sh + - name: Integration test — quota notification deduplication run: tests/test-quota-alert.sh diff --git a/AiOverviewControlSettings.qml b/AiOverviewControlSettings.qml index 63bd1b0..1133ccb 100644 --- a/AiOverviewControlSettings.qml +++ b/AiOverviewControlSettings.qml @@ -269,6 +269,7 @@ PluginSettings { { id:"deepseek", name:"DeepSeek", icon:"search", mode:"telemetry", requirement:"API key", envVar:"DEEPSEEK_API_KEY", note:"Official account balance" }, { id:"kimi", name:"Kimi", icon:"language", mode:"telemetry", requirement:"API key", envVar:"MOONSHOT_API_KEY", note:"Account balance (USD/CNY), or Kimi Code subscription quota with a sk-kimi- key / KIMI_CODING_API_KEY" }, { id:"minimax", name:"MiniMax", icon:"bar_chart", mode:"telemetry", requirement:"API key", envVar:"MINIMAX_API_KEY", note:"Official models API authentication check" }, + { id:"commandcode", name:"Command Code", icon:"terminal", mode:"telemetry", requirement:"API key", envVar:"COMMAND_CODE_API_KEY", note:"Provider API key — same key used for the CLI and the Provider API. Reads /alpha/billing/credits for 5h/weekly/monthly quota; falls back to /provider/v1/models on alpha failure." }, { id:"glm", name:"GLM", icon:"memory", mode:"telemetry", requirement:"API key", envVar:"GLM_API_KEY", note:"China (Zhipu) quota windows and plan; falls back to models authentication" }, { id:"zai", name:"Z.ai", icon:"bubble_chart", mode:"telemetry", requirement:"API key", envVar:"ZAI_API_KEY", note:"Official quota windows and plan; falls back to models authentication" }, { id:"mistral", name:"Mistral", icon:"wind_power", mode:"telemetry", requirement:"API key", envVar:"MISTRAL_API_KEY", note:"Official models API authentication check" }, diff --git a/AiOverviewControlWidget.qml b/AiOverviewControlWidget.qml index 6e0ae09..7a3b697 100644 --- a/AiOverviewControlWidget.qml +++ b/AiOverviewControlWidget.qml @@ -184,6 +184,7 @@ PluginComponent { "glm", "zai", "minimax", + "commandcode", "qwen", "nvidia", "cloudflare", @@ -587,6 +588,9 @@ PluginComponent { zhipu: "GLM", zai: "Z.ai", minimax: "MiniMax", + commandcode: "Command Code", + cmd: "Command Code", + cmdcode: "Command Code", qwen: "Qwen", dashscope: "Qwen", alibaba: "Qwen", @@ -845,6 +849,7 @@ PluginComponent { if (providerId === "mistral") return Theme.warning; if (providerId === "glm" || providerId === "zhipu" || providerId === "zai") return Theme.primary; if (providerId === "minimax") return Theme.success; + if (providerId === "commandcode" || providerId === "cmd" || providerId === "cmdcode") return Theme.primary; if (providerId === "qwen" || providerId === "dashscope" || providerId === "alibaba") return Theme.warning; if (providerId === "nvidia" || providerId === "nim") return Theme.success; if (providerId === "cloudflare") return Theme.warning; @@ -1316,6 +1321,9 @@ PluginComponent { zhipu: "https://open.bigmodel.cn/usercenter/financial", zai: "https://z.ai/manage-apikey/billing", minimax: "https://platform.minimax.io/user-center/payment/balance", + commandcode: "https://commandcode.ai/billing", + cmd: "https://commandcode.ai/billing", + cmdcode: "https://commandcode.ai/billing", qwen: "https://dashscope.console.aliyun.com", dashscope: "https://dashscope.console.aliyun.com", alibaba: "https://dashscope.console.aliyun.com", diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f50e80..7944dba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Command Code provider + +- New **Command Code** (commandcode.ai) provider surfaces the live 5-hour and weekly usage windows plus the monthly USD credit balance via the same Provider API key used for the CLI (`COMMAND_CODE_API_KEY`). The `/alpha/billing/` endpoints are experimental, so the adapter degrades to the documented `/provider/v1/models` auth-only check on alpha failure — never a fabricated percentage. Contributed by [@Luna161](https://github.com/Luna161) ([#20](https://github.com/bernardopg/AiOverviewControl/issues/20), [#21](https://github.com/bernardopg/AiOverviewControl/pull/21)). + ## 1.12.0 - 2026-08-22 ### Claude provider config directory override diff --git a/README.md b/README.md index 5169f40..ff6e5c6 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ billing, authentication, and local usage telemetry — right in your DankBar. [![CI](https://github.com/bernardopg/AiOverviewControl/actions/workflows/ci.yml/badge.svg)](https://github.com/bernardopg/AiOverviewControl/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/bernardopg/AiOverviewControl)](https://github.com/bernardopg/AiOverviewControl/releases/latest) [![License](https://img.shields.io/github/license/bernardopg/AiOverviewControl)](./LICENSE) -[![Providers](https://img.shields.io/badge/providers-36-7C4DFF)](./docs/providers.md) +[![Providers](https://img.shields.io/badge/providers-37-7C4DFF)](./docs/providers.md) [![Languages](https://img.shields.io/badge/UI%20languages-5-00BFA5)](./docs/i18n-crowdin.md) [Install](#installation) · [Screenshots](#screenshots) · [Providers](./docs/providers.md) · @@ -48,7 +48,7 @@ it does not. No dashboard scraping. No fabricated percentages. Ever. | | | | --- | --- | -| 📊 **Unified dashboard** | 36 AI providers and developer tools in one place. | +| 📊 **Unified dashboard** | 37 AI providers and developer tools in one place. | | 🛰️ **Fleet overview** | Cross-provider rollup in the hero — quota-only average load, hottest provider, how many are near their cap, and the soonest reset. | | ⏱️ **Official Codex windows** | Rate-limit windows straight from `codex app-server`. | | 🤖 **Deep Claude analytics** | Quota plus local token, session, model, project, and cost analytics. | @@ -109,6 +109,7 @@ Notable integrations: | Together | Read-only API-key validation; usage and billing remain in the Together console. | | Cloudflare | Token verification and optional Workers AI GraphQL analytics. | | Z.ai, GLM | `GET /api/monitor/usage/quota/limit` — real per-window usage %, reset timestamps, and plan tier. Falls back to `/models` auth-only check. | +| Command Code | Live 5h/weekly/monthly usage via `/alpha/billing/credits`. | | xAI, MiniMax, Qwen, Mistral | Read-only `/models` (or `/api-key`) validation — zero token consumption. | | NVIDIA | Configured-key status only; its public model catalog cannot validate the key. | | Ollama | Installed and running models from `/api/tags` and `/api/ps`. | diff --git a/assets/provider-logos/SOURCES.md b/assets/provider-logos/SOURCES.md index fe64a37..4c3cfce 100644 --- a/assets/provider-logos/SOURCES.md +++ b/assets/provider-logos/SOURCES.md @@ -8,6 +8,7 @@ All marks are stored locally so the plugin never depends on a network request at - 9Router: [official `public/favicon.svg`](https://github.com/decolua/9router/blob/master/public/favicon.svg), MIT. - BytePlus Ark: [official BytePlus favicon](https://sf-bpcms.bytepluscdn.com/obj/byteplus-public-aiso/portal/assets/favicon.png), discovered from the ModelArk product page. - Warp: [Simple Icons `warp`](https://simpleicons.org/?q=warp), CC0-1.0, brand color `#01A4FF`. +- Command Code: official logomark from the [commandcode.ai brand assets](https://commandcode.ai/brand) ([`black-symbol-commandcode.svg`](https://github.com/CommandCodeAI/command-code/blob/main/.github/commandcode/symbols/black-symbol-commandcode.svg)). Normalized to a flat silhouette — the opaque background square is dropped and both symbol paths get a single `#000` fill — since the plugin re-tints the silhouette to the theme; geometry is unchanged. - GitHub Copilot: [Simple Icons `githubcopilot`](https://simpleicons.org/?q=githubcopilot), CC0-1.0. - pi: [official `logo-auto.svg`](https://pi.dev/logo-auto.svg) from [pi.dev](https://pi.dev/). Normalized to a single flat `fill` (the upstream `