Repository navigation
fix(xiaomi-mimo): update models to V2.5, fix Token Plan validation and default region - #1823
Conversation
…d default region - Update model list: add mimo-v2.5-pro, mimo-v2.5, mimo-v2.5-tts, mimo-v2.5-tts-voiceclone, mimo-v2.5-tts-voicedesign (keep V2 legacy) - Add custom validation in SPECIALTY_VALIDATORS — Token Plan keys (tp-*) only work on regional endpoints, not api.xiaomimimo.com; validates via /chat/completions with the user's configured baseUrl - Change default Token Plan region from AMS to SGP (more universally accessible for international users) - Update unit tests for new model list and SGP URLs
There was a problem hiding this comment.
Code Review
This pull request updates the Xiaomi MiMo provider by adding several v2.5 models to the registry and changing the default regional base URL from Amsterdam to Singapore. It also introduces a custom API key validator. Feedback was provided regarding the validator's logic: it currently uses a hardcoded model ID instead of allowing a user-specified one and is too permissive with HTTP status codes, potentially marking failed requests (like 404 or 5xx) as valid.
| "xiaomi-mimo": async ({ apiKey, providerSpecificData }: any) => { | ||
| try { | ||
| const baseUrl = normalizeBaseUrl( | ||
| providerSpecificData?.baseUrl || "https://api.xiaomimimo.com/v1" | ||
| ); | ||
| const chatUrl = `${baseUrl.replace(/\/chat\/completions$/, "")}/chat/completions`; | ||
| const res = await validationWrite(chatUrl, { | ||
| method: "POST", | ||
| headers: buildBearerHeaders(apiKey, providerSpecificData), | ||
| body: JSON.stringify({ | ||
| model: "mimo-v2.5-pro", | ||
| messages: [{ role: "user", content: "test" }], | ||
| max_tokens: 1, | ||
| }), | ||
| }); | ||
| if (res.status === 401 || res.status === 403) { | ||
| return { valid: false, error: "Invalid API key" }; | ||
| } | ||
| // Any non-auth response (200, 400, 422, 429) means auth passed | ||
| return { valid: true, error: null }; | ||
| } catch (error: any) { | ||
| return toValidationErrorResult(error); | ||
| } | ||
| }, |
There was a problem hiding this comment.
The specialty validator for xiaomi-mimo has two issues:
- It uses a hardcoded model ID
mimo-v2.5-pro, ignoring any user-providedvalidationModelIdinproviderSpecificData. This can cause validation to fail if the user only has access to specific models. - The validity check is too permissive. It returns
valid: truefor any status code other than 401 or 403, including 404 (wrong URL) or 5xx (server error). It should only consider the key valid if the response indicates that authentication was successful (e.g., 200, 400, 422, or 429).
"xiaomi-mimo": async ({ apiKey, providerSpecificData }: any) => {
try {
const baseUrl = normalizeBaseUrl(
providerSpecificData?.baseUrl || "https://api.xiaomimimo.com/v1"
);
const chatUrl = baseUrl.replace(/\/chat\/completions$/, "") + "/chat/completions";
const testModelId = providerSpecificData?.validationModelId || "mimo-v2.5-pro";
const res = await validationWrite(chatUrl, {
method: "POST",
headers: buildBearerHeaders(apiKey, providerSpecificData),
body: JSON.stringify({
model: testModelId,
messages: [{ role: "user", content: "test" }],
max_tokens: 1,
}),
});
if (res.status === 401 || res.status === 403) {
return { valid: false, error: "Invalid API key" };
}
if (res.ok || res.status === 400 || res.status === 422 || res.status === 429) {
return { valid: true, error: null };
}
if (res.status >= 500) {
return { valid: false, error: "Provider unavailable (" + res.status + ")" };
}
return { valid: false, error: "Validation failed: " + res.status };
} catch (error: any) {
return toValidationErrorResult(error);
}
},|
Thanks @Gi99lin for this great contribution! 🎉 It's now officially merged into the |
dff22ad
into
cheaper-inference:release/v3.7.6
* feat(api-keys): add rename support in permissions modal Add an editable key name field at the top of the permissions modal, allowing users to rename API keys alongside existing permission settings. The backend already supported name updates via PATCH /api/keys/:id — this wires the UI to send the name field and refreshes the key list on success. Changes: - Add keyName state and text input to PermissionsModal - Update handleUpdatePermissions to validate and send name in PATCH body - Add integration test for rename via PATCH (valid, empty, too-long names) - Update E2E mock to handle PATCH requests * chore(release): bump version to 3.7.6 * chore(release): v3.7.6 — merge API key rename feature and sync docs * chore(release): expand contributor credits to 155 PRs across full project history - Expanded acknowledgment table from 29 to 53 contributors - Added 100+ previously uncredited PRs from project inception through v3.7.5 - Moved contributor credits section to v3.7.6 (current release) - Synced llm.txt version to 3.7.6 * fix: resolve security ReDoS in codex and bugs #1797 #1789 * feat(dashboard): implement remaining v3.7.6 dashboard features and fixes * fix(xiaomi-mimo): update models to V2.5, fix Token Plan validation and default region (#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (#1802) Integrated into release/v3.7.6 * fix(stability): resolve codex input validation, enable combo circuit breaker, and fix broken unit tests * docs(changelog): update for stability bug fixes #1804 #1805 * fix: clear active requests and recover providers (#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (#1775) * feat: auto-restore probe-failed database to prevent data loss (#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (#1825) * chore(release): v3.7.6 — final stability patches for production * test: update expected db probe-failure error message for auto-restore feature * chore(workflow): mandate implementation plan generation in resolve-issues * docs(changelog): rewrite v3.7.6 with complete commit-accurate entries * feat(analytics): add cost-based usage insights and activity streaks Expand usage analytics to report total cost, per-series cost totals, API key counts, and current activity streaks using pricing-aware token calculations. Also make probe-failed database recovery choose the newest backup by its embedded timestamp instead of filesystem mtime so auto-restore selects the intended snapshot reliably. * fix(mitm): enforce transparent interception on port 443 only Reject non-443 MITM port updates in the settings API and normalize stored configuration back to the required transparent interception port. Lock the dashboard port field to 443, update the validation copy, and add integration coverage to prevent stale custom ports from being accepted or surfaced. * docs(changelog): update for analytics and mitm features --------- Co-authored-by: Andrew Munsell <andrew@wizardapps.net> Co-authored-by: Antigravity Assistant <bot@antigravity.local> Co-authored-by: Gi99lin <74502520+Gi99lin@users.noreply.github.com> Co-authored-by: Sergey Morozov <tr0st@bk.ru> Co-authored-by: payne <baboialex95@gmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: ipanghu <bypanghu@163.com>
* feat(api-keys): add rename support in permissions modal Add an editable key name field at the top of the permissions modal, allowing users to rename API keys alongside existing permission settings. The backend already supported name updates via PATCH /api/keys/:id — this wires the UI to send the name field and refreshes the key list on success. Changes: - Add keyName state and text input to PermissionsModal - Update handleUpdatePermissions to validate and send name in PATCH body - Add integration test for rename via PATCH (valid, empty, too-long names) - Update E2E mock to handle PATCH requests * chore(release): bump version to 3.7.6 * chore(release): v3.7.6 — merge API key rename feature and sync docs * chore(release): expand contributor credits to 155 PRs across full project history - Expanded acknowledgment table from 29 to 53 contributors - Added 100+ previously uncredited PRs from project inception through v3.7.5 - Moved contributor credits section to v3.7.6 (current release) - Synced llm.txt version to 3.7.6 * fix: resolve security ReDoS in codex and bugs #1797 #1789 * feat(dashboard): implement remaining v3.7.6 dashboard features and fixes * fix(xiaomi-mimo): update models to V2.5, fix Token Plan validation and default region (#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (#1802) Integrated into release/v3.7.6 * fix(stability): resolve codex input validation, enable combo circuit breaker, and fix broken unit tests * docs(changelog): update for stability bug fixes #1804 #1805 * fix: clear active requests and recover providers (#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (#1775) * feat: auto-restore probe-failed database to prevent data loss (#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (#1825) * chore(release): v3.7.6 — final stability patches for production * test: update expected db probe-failure error message for auto-restore feature * chore(workflow): mandate implementation plan generation in resolve-issues * docs(changelog): rewrite v3.7.6 with complete commit-accurate entries * feat(analytics): add cost-based usage insights and activity streaks Expand usage analytics to report total cost, per-series cost totals, API key counts, and current activity streaks using pricing-aware token calculations. Also make probe-failed database recovery choose the newest backup by its embedded timestamp instead of filesystem mtime so auto-restore selects the intended snapshot reliably. * fix(mitm): enforce transparent interception on port 443 only Reject non-443 MITM port updates in the settings API and normalize stored configuration back to the required transparent interception port. Lock the dashboard port field to 443, update the validation copy, and add integration coverage to prevent stale custom ports from being accepted or surfaced. * docs(changelog): update for analytics and mitm features * chore(release): attribute community contributors Co-authored-by: rdself <rdself@users.noreply.github.com> Co-authored-by: oyi77 <oyi77@users.noreply.github.com> Co-authored-by: clousky2020 <clousky2020@users.noreply.github.com> Co-authored-by: benzntech <benzntech@users.noreply.github.com> Co-authored-by: kang-heewon <kang-heewon@users.noreply.github.com> Co-authored-by: herjarsa <herjarsa@users.noreply.github.com> Co-authored-by: backryun <backryun@users.noreply.github.com> Co-authored-by: tombii <tombii@users.noreply.github.com> Co-authored-by: christopher-s <christopher-s@users.noreply.github.com> Co-authored-by: zen0bit <zen0bit@users.noreply.github.com> Co-authored-by: k0valik <k0valik@users.noreply.github.com> Co-authored-by: zhangqiang8vip <zhangqiang8vip@users.noreply.github.com> Co-authored-by: wlfonseca <wlfonseca@users.noreply.github.com> Co-authored-by: RaviTharuma <RaviTharuma@users.noreply.github.com> Co-authored-by: prakersh <prakersh@users.noreply.github.com> Co-authored-by: payne0420 <payne0420@users.noreply.github.com> Co-authored-by: only4copilot <only4copilot@users.noreply.github.com> Co-authored-by: jay77721 <jay77721@users.noreply.github.com> Co-authored-by: hijak <hijak@users.noreply.github.com> Co-authored-by: hartmark <hartmark@users.noreply.github.com> Co-authored-by: defhouse <defhouse@users.noreply.github.com> Co-authored-by: xiaoge1688 <xiaoge1688@users.noreply.github.com> Co-authored-by: xandr0s <xandr0s@users.noreply.github.com> Co-authored-by: willbnu <willbnu@users.noreply.github.com> Co-authored-by: slewis3600 <slewis3600@users.noreply.github.com> Co-authored-by: sergey-v9 <sergey-v9@users.noreply.github.com> Co-authored-by: razllivan <razllivan@users.noreply.github.com> Co-authored-by: nmime <nmime@users.noreply.github.com> Co-authored-by: Moutia-Ben-Yahia <Moutia-Ben-Yahia@users.noreply.github.com> Co-authored-by: Mind-Dragon <Mind-Dragon@users.noreply.github.com> Co-authored-by: mercs2910 <mercs2910@users.noreply.github.com> Co-authored-by: MAINER4IK <MAINER4IK@users.noreply.github.com> Co-authored-by: luandiasrj <luandiasrj@users.noreply.github.com> Co-authored-by: knopki <knopki@users.noreply.github.com> Co-authored-by: kfiramar <kfiramar@users.noreply.github.com> Co-authored-by: ken2190 <ken2190@users.noreply.github.com> Co-authored-by: keith8496 <keith8496@users.noreply.github.com> Co-authored-by: jonesfernandess <jonesfernandess@users.noreply.github.com> Co-authored-by: JasonLandbridge <JasonLandbridge@users.noreply.github.com> Co-authored-by: i1hwan <i1hwan@users.noreply.github.com> Co-authored-by: Gorchakov-Pressure <Gorchakov-Pressure@users.noreply.github.com> Co-authored-by: foxy1402 <foxy1402@users.noreply.github.com> Co-authored-by: dt418 <dt418@users.noreply.github.com> Co-authored-by: dhaern <dhaern@users.noreply.github.com> Co-authored-by: DavyMassoneto <DavyMassoneto@users.noreply.github.com> Co-authored-by: dail45 <dail45@users.noreply.github.com> Co-authored-by: congvc-dev <congvc-dev@users.noreply.github.com> Co-authored-by: be0hhh <be0hhh@users.noreply.github.com> Co-authored-by: andruwa13 <andruwa13@users.noreply.github.com> Co-authored-by: AndrewDragonIV <AndrewDragonIV@users.noreply.github.com> Co-authored-by: AndersonFirmino <AndersonFirmino@users.noreply.github.com> Co-authored-by: alexsvdk <alexsvdk@users.noreply.github.com> Co-authored-by: abhinavjnu <abhinavjnu@users.noreply.github.com> --------- Co-authored-by: Andrew Munsell <andrew@wizardapps.net> Co-authored-by: Antigravity Assistant <bot@antigravity.local> Co-authored-by: Gi99lin <74502520+Gi99lin@users.noreply.github.com> Co-authored-by: Sergey Morozov <tr0st@bk.ru> Co-authored-by: payne <baboialex95@gmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: ipanghu <bypanghu@163.com> Co-authored-by: rdself <rdself@users.noreply.github.com> Co-authored-by: oyi77 <oyi77@users.noreply.github.com> Co-authored-by: clousky2020 <clousky2020@users.noreply.github.com> Co-authored-by: benzntech <benzntech@users.noreply.github.com> Co-authored-by: kang-heewon <kang-heewon@users.noreply.github.com> Co-authored-by: herjarsa <herjarsa@users.noreply.github.com> Co-authored-by: backryun <backryun@users.noreply.github.com> Co-authored-by: tombii <tombii@users.noreply.github.com> Co-authored-by: christopher-s <christopher-s@users.noreply.github.com> Co-authored-by: zen0bit <zen0bit@users.noreply.github.com> Co-authored-by: k0valik <k0valik@users.noreply.github.com> Co-authored-by: zhangqiang8vip <zhangqiang8vip@users.noreply.github.com> Co-authored-by: wlfonseca <wlfonseca@users.noreply.github.com> Co-authored-by: RaviTharuma <RaviTharuma@users.noreply.github.com> Co-authored-by: prakersh <prakersh@users.noreply.github.com> Co-authored-by: payne0420 <payne0420@users.noreply.github.com> Co-authored-by: only4copilot <only4copilot@users.noreply.github.com> Co-authored-by: jay77721 <jay77721@users.noreply.github.com> Co-authored-by: hijak <hijak@users.noreply.github.com> Co-authored-by: hartmark <hartmark@users.noreply.github.com> Co-authored-by: defhouse <defhouse@users.noreply.github.com> Co-authored-by: xiaoge1688 <xiaoge1688@users.noreply.github.com> Co-authored-by: xandr0s <xandr0s@users.noreply.github.com> Co-authored-by: willbnu <willbnu@users.noreply.github.com> Co-authored-by: slewis3600 <slewis3600@users.noreply.github.com> Co-authored-by: sergey-v9 <sergey-v9@users.noreply.github.com> Co-authored-by: razllivan <razllivan@users.noreply.github.com> Co-authored-by: nmime <nmime@users.noreply.github.com> Co-authored-by: Moutia-Ben-Yahia <Moutia-Ben-Yahia@users.noreply.github.com> Co-authored-by: Mind-Dragon <Mind-Dragon@users.noreply.github.com> Co-authored-by: mercs2910 <mercs2910@users.noreply.github.com> Co-authored-by: MAINER4IK <MAINER4IK@users.noreply.github.com> Co-authored-by: luandiasrj <luandiasrj@users.noreply.github.com> Co-authored-by: knopki <knopki@users.noreply.github.com> Co-authored-by: kfiramar <kfiramar@users.noreply.github.com> Co-authored-by: ken2190 <ken2190@users.noreply.github.com> Co-authored-by: keith8496 <keith8496@users.noreply.github.com> Co-authored-by: jonesfernandess <jonesfernandess@users.noreply.github.com> Co-authored-by: JasonLandbridge <JasonLandbridge@users.noreply.github.com> Co-authored-by: i1hwan <i1hwan@users.noreply.github.com> Co-authored-by: Gorchakov-Pressure <Gorchakov-Pressure@users.noreply.github.com> Co-authored-by: foxy1402 <foxy1402@users.noreply.github.com> Co-authored-by: dt418 <dt418@users.noreply.github.com> Co-authored-by: dhaern <dhaern@users.noreply.github.com> Co-authored-by: DavyMassoneto <DavyMassoneto@users.noreply.github.com> Co-authored-by: dail45 <dail45@users.noreply.github.com> Co-authored-by: congvc-dev <congvc-dev@users.noreply.github.com> Co-authored-by: be0hhh <be0hhh@users.noreply.github.com> Co-authored-by: andruwa13 <andruwa13@users.noreply.github.com> Co-authored-by: AndrewDragonIV <AndrewDragonIV@users.noreply.github.com> Co-authored-by: AndersonFirmino <AndersonFirmino@users.noreply.github.com> Co-authored-by: alexsvdk <alexsvdk@users.noreply.github.com> Co-authored-by: abhinavjnu <abhinavjnu@users.noreply.github.com>
* feat(api-keys): add rename support in permissions modal Add an editable key name field at the top of the permissions modal, allowing users to rename API keys alongside existing permission settings. The backend already supported name updates via PATCH /api/keys/:id — this wires the UI to send the name field and refreshes the key list on success. Changes: - Add keyName state and text input to PermissionsModal - Update handleUpdatePermissions to validate and send name in PATCH body - Add integration test for rename via PATCH (valid, empty, too-long names) - Update E2E mock to handle PATCH requests * chore(release): bump version to 3.7.6 * chore(release): v3.7.6 — merge API key rename feature and sync docs * chore(release): expand contributor credits to 155 PRs across full project history - Expanded acknowledgment table from 29 to 53 contributors - Added 100+ previously uncredited PRs from project inception through v3.7.5 - Moved contributor credits section to v3.7.6 (current release) - Synced llm.txt version to 3.7.6 * fix: resolve security ReDoS in codex and bugs cheaper-inference#1797 cheaper-inference#1789 * feat(dashboard): implement remaining v3.7.6 dashboard features and fixes * fix(xiaomi-mimo): update models to V2.5, fix Token Plan validation and default region (cheaper-inference#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (cheaper-inference#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (cheaper-inference#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (cheaper-inference#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (cheaper-inference#1802) Integrated into release/v3.7.6 * fix(stability): resolve codex input validation, enable combo circuit breaker, and fix broken unit tests * docs(changelog): update for stability bug fixes cheaper-inference#1804 cheaper-inference#1805 * fix: clear active requests and recover providers (cheaper-inference#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (cheaper-inference#1775) * feat: auto-restore probe-failed database to prevent data loss (cheaper-inference#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (cheaper-inference#1825) * chore(release): v3.7.6 — final stability patches for production * test: update expected db probe-failure error message for auto-restore feature * chore(workflow): mandate implementation plan generation in resolve-issues * docs(changelog): rewrite v3.7.6 with complete commit-accurate entries * feat(analytics): add cost-based usage insights and activity streaks Expand usage analytics to report total cost, per-series cost totals, API key counts, and current activity streaks using pricing-aware token calculations. Also make probe-failed database recovery choose the newest backup by its embedded timestamp instead of filesystem mtime so auto-restore selects the intended snapshot reliably. * fix(mitm): enforce transparent interception on port 443 only Reject non-443 MITM port updates in the settings API and normalize stored configuration back to the required transparent interception port. Lock the dashboard port field to 443, update the validation copy, and add integration coverage to prevent stale custom ports from being accepted or surfaced. * docs(changelog): update for analytics and mitm features --------- Co-authored-by: Andrew Munsell <andrew@wizardapps.net> Co-authored-by: Antigravity Assistant <bot@antigravity.local> Co-authored-by: Gi99lin <74502520+Gi99lin@users.noreply.github.com> Co-authored-by: Sergey Morozov <tr0st@bk.ru> Co-authored-by: payne <baboialex95@gmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: ipanghu <bypanghu@163.com>
* feat(api-keys): add rename support in permissions modal Add an editable key name field at the top of the permissions modal, allowing users to rename API keys alongside existing permission settings. The backend already supported name updates via PATCH /api/keys/:id — this wires the UI to send the name field and refreshes the key list on success. Changes: - Add keyName state and text input to PermissionsModal - Update handleUpdatePermissions to validate and send name in PATCH body - Add integration test for rename via PATCH (valid, empty, too-long names) - Update E2E mock to handle PATCH requests * chore(release): bump version to 3.7.6 * chore(release): v3.7.6 — merge API key rename feature and sync docs * chore(release): expand contributor credits to 155 PRs across full project history - Expanded acknowledgment table from 29 to 53 contributors - Added 100+ previously uncredited PRs from project inception through v3.7.5 - Moved contributor credits section to v3.7.6 (current release) - Synced llm.txt version to 3.7.6 * fix: resolve security ReDoS in codex and bugs cheaper-inference#1797 cheaper-inference#1789 * feat(dashboard): implement remaining v3.7.6 dashboard features and fixes * fix(xiaomi-mimo): update models to V2.5, fix Token Plan validation and default region (cheaper-inference#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (cheaper-inference#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (cheaper-inference#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (cheaper-inference#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (cheaper-inference#1802) Integrated into release/v3.7.6 * fix(stability): resolve codex input validation, enable combo circuit breaker, and fix broken unit tests * docs(changelog): update for stability bug fixes cheaper-inference#1804 cheaper-inference#1805 * fix: clear active requests and recover providers (cheaper-inference#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (cheaper-inference#1775) * feat: auto-restore probe-failed database to prevent data loss (cheaper-inference#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (cheaper-inference#1825) * chore(release): v3.7.6 — final stability patches for production * test: update expected db probe-failure error message for auto-restore feature * chore(workflow): mandate implementation plan generation in resolve-issues * docs(changelog): rewrite v3.7.6 with complete commit-accurate entries * feat(analytics): add cost-based usage insights and activity streaks Expand usage analytics to report total cost, per-series cost totals, API key counts, and current activity streaks using pricing-aware token calculations. Also make probe-failed database recovery choose the newest backup by its embedded timestamp instead of filesystem mtime so auto-restore selects the intended snapshot reliably. * fix(mitm): enforce transparent interception on port 443 only Reject non-443 MITM port updates in the settings API and normalize stored configuration back to the required transparent interception port. Lock the dashboard port field to 443, update the validation copy, and add integration coverage to prevent stale custom ports from being accepted or surfaced. * docs(changelog): update for analytics and mitm features * chore(release): attribute community contributors Co-authored-by: rdself <rdself@users.noreply.github.com> Co-authored-by: oyi77 <oyi77@users.noreply.github.com> Co-authored-by: clousky2020 <clousky2020@users.noreply.github.com> Co-authored-by: benzntech <benzntech@users.noreply.github.com> Co-authored-by: kang-heewon <kang-heewon@users.noreply.github.com> Co-authored-by: herjarsa <herjarsa@users.noreply.github.com> Co-authored-by: backryun <backryun@users.noreply.github.com> Co-authored-by: tombii <tombii@users.noreply.github.com> Co-authored-by: christopher-s <christopher-s@users.noreply.github.com> Co-authored-by: zen0bit <zen0bit@users.noreply.github.com> Co-authored-by: k0valik <k0valik@users.noreply.github.com> Co-authored-by: zhangqiang8vip <zhangqiang8vip@users.noreply.github.com> Co-authored-by: wlfonseca <wlfonseca@users.noreply.github.com> Co-authored-by: RaviTharuma <RaviTharuma@users.noreply.github.com> Co-authored-by: prakersh <prakersh@users.noreply.github.com> Co-authored-by: payne0420 <payne0420@users.noreply.github.com> Co-authored-by: only4copilot <only4copilot@users.noreply.github.com> Co-authored-by: jay77721 <jay77721@users.noreply.github.com> Co-authored-by: hijak <hijak@users.noreply.github.com> Co-authored-by: hartmark <hartmark@users.noreply.github.com> Co-authored-by: defhouse <defhouse@users.noreply.github.com> Co-authored-by: xiaoge1688 <xiaoge1688@users.noreply.github.com> Co-authored-by: xandr0s <xandr0s@users.noreply.github.com> Co-authored-by: willbnu <willbnu@users.noreply.github.com> Co-authored-by: slewis3600 <slewis3600@users.noreply.github.com> Co-authored-by: sergey-v9 <sergey-v9@users.noreply.github.com> Co-authored-by: razllivan <razllivan@users.noreply.github.com> Co-authored-by: nmime <nmime@users.noreply.github.com> Co-authored-by: Moutia-Ben-Yahia <Moutia-Ben-Yahia@users.noreply.github.com> Co-authored-by: Mind-Dragon <Mind-Dragon@users.noreply.github.com> Co-authored-by: mercs2910 <mercs2910@users.noreply.github.com> Co-authored-by: MAINER4IK <MAINER4IK@users.noreply.github.com> Co-authored-by: luandiasrj <luandiasrj@users.noreply.github.com> Co-authored-by: knopki <knopki@users.noreply.github.com> Co-authored-by: kfiramar <kfiramar@users.noreply.github.com> Co-authored-by: ken2190 <ken2190@users.noreply.github.com> Co-authored-by: keith8496 <keith8496@users.noreply.github.com> Co-authored-by: jonesfernandess <jonesfernandess@users.noreply.github.com> Co-authored-by: JasonLandbridge <JasonLandbridge@users.noreply.github.com> Co-authored-by: i1hwan <i1hwan@users.noreply.github.com> Co-authored-by: Gorchakov-Pressure <Gorchakov-Pressure@users.noreply.github.com> Co-authored-by: foxy1402 <foxy1402@users.noreply.github.com> Co-authored-by: dt418 <dt418@users.noreply.github.com> Co-authored-by: dhaern <dhaern@users.noreply.github.com> Co-authored-by: DavyMassoneto <DavyMassoneto@users.noreply.github.com> Co-authored-by: dail45 <dail45@users.noreply.github.com> Co-authored-by: congvc-dev <congvc-dev@users.noreply.github.com> Co-authored-by: be0hhh <be0hhh@users.noreply.github.com> Co-authored-by: andruwa13 <andruwa13@users.noreply.github.com> Co-authored-by: AndrewDragonIV <AndrewDragonIV@users.noreply.github.com> Co-authored-by: AndersonFirmino <AndersonFirmino@users.noreply.github.com> Co-authored-by: alexsvdk <alexsvdk@users.noreply.github.com> Co-authored-by: abhinavjnu <abhinavjnu@users.noreply.github.com> --------- Co-authored-by: Andrew Munsell <andrew@wizardapps.net> Co-authored-by: Antigravity Assistant <bot@antigravity.local> Co-authored-by: Gi99lin <74502520+Gi99lin@users.noreply.github.com> Co-authored-by: Sergey Morozov <tr0st@bk.ru> Co-authored-by: payne <baboialex95@gmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: ipanghu <bypanghu@163.com> Co-authored-by: rdself <rdself@users.noreply.github.com> Co-authored-by: oyi77 <oyi77@users.noreply.github.com> Co-authored-by: clousky2020 <clousky2020@users.noreply.github.com> Co-authored-by: benzntech <benzntech@users.noreply.github.com> Co-authored-by: kang-heewon <kang-heewon@users.noreply.github.com> Co-authored-by: herjarsa <herjarsa@users.noreply.github.com> Co-authored-by: backryun <backryun@users.noreply.github.com> Co-authored-by: tombii <tombii@users.noreply.github.com> Co-authored-by: christopher-s <christopher-s@users.noreply.github.com> Co-authored-by: zen0bit <zen0bit@users.noreply.github.com> Co-authored-by: k0valik <k0valik@users.noreply.github.com> Co-authored-by: zhangqiang8vip <zhangqiang8vip@users.noreply.github.com> Co-authored-by: wlfonseca <wlfonseca@users.noreply.github.com> Co-authored-by: RaviTharuma <RaviTharuma@users.noreply.github.com> Co-authored-by: prakersh <prakersh@users.noreply.github.com> Co-authored-by: payne0420 <payne0420@users.noreply.github.com> Co-authored-by: only4copilot <only4copilot@users.noreply.github.com> Co-authored-by: jay77721 <jay77721@users.noreply.github.com> Co-authored-by: hijak <hijak@users.noreply.github.com> Co-authored-by: hartmark <hartmark@users.noreply.github.com> Co-authored-by: defhouse <defhouse@users.noreply.github.com> Co-authored-by: xiaoge1688 <xiaoge1688@users.noreply.github.com> Co-authored-by: xandr0s <xandr0s@users.noreply.github.com> Co-authored-by: willbnu <willbnu@users.noreply.github.com> Co-authored-by: slewis3600 <slewis3600@users.noreply.github.com> Co-authored-by: sergey-v9 <sergey-v9@users.noreply.github.com> Co-authored-by: razllivan <razllivan@users.noreply.github.com> Co-authored-by: nmime <nmime@users.noreply.github.com> Co-authored-by: Moutia-Ben-Yahia <Moutia-Ben-Yahia@users.noreply.github.com> Co-authored-by: Mind-Dragon <Mind-Dragon@users.noreply.github.com> Co-authored-by: mercs2910 <mercs2910@users.noreply.github.com> Co-authored-by: MAINER4IK <MAINER4IK@users.noreply.github.com> Co-authored-by: luandiasrj <luandiasrj@users.noreply.github.com> Co-authored-by: knopki <knopki@users.noreply.github.com> Co-authored-by: kfiramar <kfiramar@users.noreply.github.com> Co-authored-by: ken2190 <ken2190@users.noreply.github.com> Co-authored-by: keith8496 <keith8496@users.noreply.github.com> Co-authored-by: jonesfernandess <jonesfernandess@users.noreply.github.com> Co-authored-by: JasonLandbridge <JasonLandbridge@users.noreply.github.com> Co-authored-by: i1hwan <i1hwan@users.noreply.github.com> Co-authored-by: Gorchakov-Pressure <Gorchakov-Pressure@users.noreply.github.com> Co-authored-by: foxy1402 <foxy1402@users.noreply.github.com> Co-authored-by: dt418 <dt418@users.noreply.github.com> Co-authored-by: dhaern <dhaern@users.noreply.github.com> Co-authored-by: DavyMassoneto <DavyMassoneto@users.noreply.github.com> Co-authored-by: dail45 <dail45@users.noreply.github.com> Co-authored-by: congvc-dev <congvc-dev@users.noreply.github.com> Co-authored-by: be0hhh <be0hhh@users.noreply.github.com> Co-authored-by: andruwa13 <andruwa13@users.noreply.github.com> Co-authored-by: AndrewDragonIV <AndrewDragonIV@users.noreply.github.com> Co-authored-by: AndersonFirmino <AndersonFirmino@users.noreply.github.com> Co-authored-by: alexsvdk <alexsvdk@users.noreply.github.com> Co-authored-by: abhinavjnu <abhinavjnu@users.noreply.github.com>
* feat(api-keys): add rename support in permissions modal Add an editable key name field at the top of the permissions modal, allowing users to rename API keys alongside existing permission settings. The backend already supported name updates via PATCH /api/keys/:id — this wires the UI to send the name field and refreshes the key list on success. Changes: - Add keyName state and text input to PermissionsModal - Update handleUpdatePermissions to validate and send name in PATCH body - Add integration test for rename via PATCH (valid, empty, too-long names) - Update E2E mock to handle PATCH requests * chore(release): bump version to 3.7.6 * chore(release): v3.7.6 — merge API key rename feature and sync docs * chore(release): expand contributor credits to 155 PRs across full project history - Expanded acknowledgment table from 29 to 53 contributors - Added 100+ previously uncredited PRs from project inception through v3.7.5 - Moved contributor credits section to v3.7.6 (current release) - Synced llm.txt version to 3.7.6 * fix: resolve security ReDoS in codex and bugs cheaper-inference#1797 cheaper-inference#1789 * feat(dashboard): implement remaining v3.7.6 dashboard features and fixes * fix(xiaomi-mimo): update models to V2.5, fix Token Plan validation and default region (cheaper-inference#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (cheaper-inference#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (cheaper-inference#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (cheaper-inference#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (cheaper-inference#1802) Integrated into release/v3.7.6 * fix(stability): resolve codex input validation, enable combo circuit breaker, and fix broken unit tests * docs(changelog): update for stability bug fixes cheaper-inference#1804 cheaper-inference#1805 * fix: clear active requests and recover providers (cheaper-inference#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (cheaper-inference#1775) * feat: auto-restore probe-failed database to prevent data loss (cheaper-inference#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (cheaper-inference#1825) * chore(release): v3.7.6 — final stability patches for production * test: update expected db probe-failure error message for auto-restore feature * chore(workflow): mandate implementation plan generation in resolve-issues * docs(changelog): rewrite v3.7.6 with complete commit-accurate entries * feat(analytics): add cost-based usage insights and activity streaks Expand usage analytics to report total cost, per-series cost totals, API key counts, and current activity streaks using pricing-aware token calculations. Also make probe-failed database recovery choose the newest backup by its embedded timestamp instead of filesystem mtime so auto-restore selects the intended snapshot reliably. * fix(mitm): enforce transparent interception on port 443 only Reject non-443 MITM port updates in the settings API and normalize stored configuration back to the required transparent interception port. Lock the dashboard port field to 443, update the validation copy, and add integration coverage to prevent stale custom ports from being accepted or surfaced. * docs(changelog): update for analytics and mitm features --------- Co-authored-by: Andrew Munsell <andrew@wizardapps.net> Co-authored-by: Antigravity Assistant <bot@antigravity.local> Co-authored-by: Gi99lin <74502520+Gi99lin@users.noreply.github.com> Co-authored-by: Sergey Morozov <tr0st@bk.ru> Co-authored-by: payne <baboialex95@gmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: ipanghu <bypanghu@163.com>
* feat(api-keys): add rename support in permissions modal Add an editable key name field at the top of the permissions modal, allowing users to rename API keys alongside existing permission settings. The backend already supported name updates via PATCH /api/keys/:id — this wires the UI to send the name field and refreshes the key list on success. Changes: - Add keyName state and text input to PermissionsModal - Update handleUpdatePermissions to validate and send name in PATCH body - Add integration test for rename via PATCH (valid, empty, too-long names) - Update E2E mock to handle PATCH requests * chore(release): bump version to 3.7.6 * chore(release): v3.7.6 — merge API key rename feature and sync docs * chore(release): expand contributor credits to 155 PRs across full project history - Expanded acknowledgment table from 29 to 53 contributors - Added 100+ previously uncredited PRs from project inception through v3.7.5 - Moved contributor credits section to v3.7.6 (current release) - Synced llm.txt version to 3.7.6 * fix: resolve security ReDoS in codex and bugs cheaper-inference#1797 cheaper-inference#1789 * feat(dashboard): implement remaining v3.7.6 dashboard features and fixes * fix(xiaomi-mimo): update models to V2.5, fix Token Plan validation and default region (cheaper-inference#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (cheaper-inference#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (cheaper-inference#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (cheaper-inference#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (cheaper-inference#1802) Integrated into release/v3.7.6 * fix(stability): resolve codex input validation, enable combo circuit breaker, and fix broken unit tests * docs(changelog): update for stability bug fixes cheaper-inference#1804 cheaper-inference#1805 * fix: clear active requests and recover providers (cheaper-inference#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (cheaper-inference#1775) * feat: auto-restore probe-failed database to prevent data loss (cheaper-inference#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (cheaper-inference#1825) * chore(release): v3.7.6 — final stability patches for production * test: update expected db probe-failure error message for auto-restore feature * chore(workflow): mandate implementation plan generation in resolve-issues * docs(changelog): rewrite v3.7.6 with complete commit-accurate entries * feat(analytics): add cost-based usage insights and activity streaks Expand usage analytics to report total cost, per-series cost totals, API key counts, and current activity streaks using pricing-aware token calculations. Also make probe-failed database recovery choose the newest backup by its embedded timestamp instead of filesystem mtime so auto-restore selects the intended snapshot reliably. * fix(mitm): enforce transparent interception on port 443 only Reject non-443 MITM port updates in the settings API and normalize stored configuration back to the required transparent interception port. Lock the dashboard port field to 443, update the validation copy, and add integration coverage to prevent stale custom ports from being accepted or surfaced. * docs(changelog): update for analytics and mitm features * chore(release): attribute community contributors Co-authored-by: rdself <rdself@users.noreply.github.com> Co-authored-by: oyi77 <oyi77@users.noreply.github.com> Co-authored-by: clousky2020 <clousky2020@users.noreply.github.com> Co-authored-by: benzntech <benzntech@users.noreply.github.com> Co-authored-by: kang-heewon <kang-heewon@users.noreply.github.com> Co-authored-by: herjarsa <herjarsa@users.noreply.github.com> Co-authored-by: backryun <backryun@users.noreply.github.com> Co-authored-by: tombii <tombii@users.noreply.github.com> Co-authored-by: christopher-s <christopher-s@users.noreply.github.com> Co-authored-by: zen0bit <zen0bit@users.noreply.github.com> Co-authored-by: k0valik <k0valik@users.noreply.github.com> Co-authored-by: zhangqiang8vip <zhangqiang8vip@users.noreply.github.com> Co-authored-by: wlfonseca <wlfonseca@users.noreply.github.com> Co-authored-by: RaviTharuma <RaviTharuma@users.noreply.github.com> Co-authored-by: prakersh <prakersh@users.noreply.github.com> Co-authored-by: payne0420 <payne0420@users.noreply.github.com> Co-authored-by: only4copilot <only4copilot@users.noreply.github.com> Co-authored-by: jay77721 <jay77721@users.noreply.github.com> Co-authored-by: hijak <hijak@users.noreply.github.com> Co-authored-by: hartmark <hartmark@users.noreply.github.com> Co-authored-by: defhouse <defhouse@users.noreply.github.com> Co-authored-by: xiaoge1688 <xiaoge1688@users.noreply.github.com> Co-authored-by: xandr0s <xandr0s@users.noreply.github.com> Co-authored-by: willbnu <willbnu@users.noreply.github.com> Co-authored-by: slewis3600 <slewis3600@users.noreply.github.com> Co-authored-by: sergey-v9 <sergey-v9@users.noreply.github.com> Co-authored-by: razllivan <razllivan@users.noreply.github.com> Co-authored-by: nmime <nmime@users.noreply.github.com> Co-authored-by: Moutia-Ben-Yahia <Moutia-Ben-Yahia@users.noreply.github.com> Co-authored-by: Mind-Dragon <Mind-Dragon@users.noreply.github.com> Co-authored-by: mercs2910 <mercs2910@users.noreply.github.com> Co-authored-by: MAINER4IK <MAINER4IK@users.noreply.github.com> Co-authored-by: luandiasrj <luandiasrj@users.noreply.github.com> Co-authored-by: knopki <knopki@users.noreply.github.com> Co-authored-by: kfiramar <kfiramar@users.noreply.github.com> Co-authored-by: ken2190 <ken2190@users.noreply.github.com> Co-authored-by: keith8496 <keith8496@users.noreply.github.com> Co-authored-by: jonesfernandess <jonesfernandess@users.noreply.github.com> Co-authored-by: JasonLandbridge <JasonLandbridge@users.noreply.github.com> Co-authored-by: i1hwan <i1hwan@users.noreply.github.com> Co-authored-by: Gorchakov-Pressure <Gorchakov-Pressure@users.noreply.github.com> Co-authored-by: foxy1402 <foxy1402@users.noreply.github.com> Co-authored-by: dt418 <dt418@users.noreply.github.com> Co-authored-by: dhaern <dhaern@users.noreply.github.com> Co-authored-by: DavyMassoneto <DavyMassoneto@users.noreply.github.com> Co-authored-by: dail45 <dail45@users.noreply.github.com> Co-authored-by: congvc-dev <congvc-dev@users.noreply.github.com> Co-authored-by: be0hhh <be0hhh@users.noreply.github.com> Co-authored-by: andruwa13 <andruwa13@users.noreply.github.com> Co-authored-by: AndrewDragonIV <AndrewDragonIV@users.noreply.github.com> Co-authored-by: AndersonFirmino <AndersonFirmino@users.noreply.github.com> Co-authored-by: alexsvdk <alexsvdk@users.noreply.github.com> Co-authored-by: abhinavjnu <abhinavjnu@users.noreply.github.com> --------- Co-authored-by: Andrew Munsell <andrew@wizardapps.net> Co-authored-by: Antigravity Assistant <bot@antigravity.local> Co-authored-by: Gi99lin <74502520+Gi99lin@users.noreply.github.com> Co-authored-by: Sergey Morozov <tr0st@bk.ru> Co-authored-by: payne <baboialex95@gmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: ipanghu <bypanghu@163.com> Co-authored-by: rdself <rdself@users.noreply.github.com> Co-authored-by: oyi77 <oyi77@users.noreply.github.com> Co-authored-by: clousky2020 <clousky2020@users.noreply.github.com> Co-authored-by: benzntech <benzntech@users.noreply.github.com> Co-authored-by: kang-heewon <kang-heewon@users.noreply.github.com> Co-authored-by: herjarsa <herjarsa@users.noreply.github.com> Co-authored-by: backryun <backryun@users.noreply.github.com> Co-authored-by: tombii <tombii@users.noreply.github.com> Co-authored-by: christopher-s <christopher-s@users.noreply.github.com> Co-authored-by: zen0bit <zen0bit@users.noreply.github.com> Co-authored-by: k0valik <k0valik@users.noreply.github.com> Co-authored-by: zhangqiang8vip <zhangqiang8vip@users.noreply.github.com> Co-authored-by: wlfonseca <wlfonseca@users.noreply.github.com> Co-authored-by: RaviTharuma <RaviTharuma@users.noreply.github.com> Co-authored-by: prakersh <prakersh@users.noreply.github.com> Co-authored-by: payne0420 <payne0420@users.noreply.github.com> Co-authored-by: only4copilot <only4copilot@users.noreply.github.com> Co-authored-by: jay77721 <jay77721@users.noreply.github.com> Co-authored-by: hijak <hijak@users.noreply.github.com> Co-authored-by: hartmark <hartmark@users.noreply.github.com> Co-authored-by: defhouse <defhouse@users.noreply.github.com> Co-authored-by: xiaoge1688 <xiaoge1688@users.noreply.github.com> Co-authored-by: xandr0s <xandr0s@users.noreply.github.com> Co-authored-by: willbnu <willbnu@users.noreply.github.com> Co-authored-by: slewis3600 <slewis3600@users.noreply.github.com> Co-authored-by: sergey-v9 <sergey-v9@users.noreply.github.com> Co-authored-by: razllivan <razllivan@users.noreply.github.com> Co-authored-by: nmime <nmime@users.noreply.github.com> Co-authored-by: Moutia-Ben-Yahia <Moutia-Ben-Yahia@users.noreply.github.com> Co-authored-by: Mind-Dragon <Mind-Dragon@users.noreply.github.com> Co-authored-by: mercs2910 <mercs2910@users.noreply.github.com> Co-authored-by: MAINER4IK <MAINER4IK@users.noreply.github.com> Co-authored-by: luandiasrj <luandiasrj@users.noreply.github.com> Co-authored-by: knopki <knopki@users.noreply.github.com> Co-authored-by: kfiramar <kfiramar@users.noreply.github.com> Co-authored-by: ken2190 <ken2190@users.noreply.github.com> Co-authored-by: keith8496 <keith8496@users.noreply.github.com> Co-authored-by: jonesfernandess <jonesfernandess@users.noreply.github.com> Co-authored-by: JasonLandbridge <JasonLandbridge@users.noreply.github.com> Co-authored-by: i1hwan <i1hwan@users.noreply.github.com> Co-authored-by: Gorchakov-Pressure <Gorchakov-Pressure@users.noreply.github.com> Co-authored-by: foxy1402 <foxy1402@users.noreply.github.com> Co-authored-by: dt418 <dt418@users.noreply.github.com> Co-authored-by: dhaern <dhaern@users.noreply.github.com> Co-authored-by: DavyMassoneto <DavyMassoneto@users.noreply.github.com> Co-authored-by: dail45 <dail45@users.noreply.github.com> Co-authored-by: congvc-dev <congvc-dev@users.noreply.github.com> Co-authored-by: be0hhh <be0hhh@users.noreply.github.com> Co-authored-by: andruwa13 <andruwa13@users.noreply.github.com> Co-authored-by: AndrewDragonIV <AndrewDragonIV@users.noreply.github.com> Co-authored-by: AndersonFirmino <AndersonFirmino@users.noreply.github.com> Co-authored-by: alexsvdk <alexsvdk@users.noreply.github.com> Co-authored-by: abhinavjnu <abhinavjnu@users.noreply.github.com>
…d default region (cheaper-inference#1823) Integrated into release/v3.7.6
* feat(api-keys): add rename support in permissions modal Add an editable key name field at the top of the permissions modal, allowing users to rename API keys alongside existing permission settings. The backend already supported name updates via PATCH /api/keys/:id — this wires the UI to send the name field and refreshes the key list on success. Changes: - Add keyName state and text input to PermissionsModal - Update handleUpdatePermissions to validate and send name in PATCH body - Add integration test for rename via PATCH (valid, empty, too-long names) - Update E2E mock to handle PATCH requests * chore(release): bump version to 3.7.6 * chore(release): v3.7.6 — merge API key rename feature and sync docs * chore(release): expand contributor credits to 155 PRs across full project history - Expanded acknowledgment table from 29 to 53 contributors - Added 100+ previously uncredited PRs from project inception through v3.7.5 - Moved contributor credits section to v3.7.6 (current release) - Synced llm.txt version to 3.7.6 * fix: resolve security ReDoS in codex and bugs cheaper-inference#1797 cheaper-inference#1789 * feat(dashboard): implement remaining v3.7.6 dashboard features and fixes * fix(xiaomi-mimo): update models to V2.5, fix Token Plan validation and default region (cheaper-inference#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (cheaper-inference#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (cheaper-inference#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (cheaper-inference#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (cheaper-inference#1802) Integrated into release/v3.7.6 * fix(stability): resolve codex input validation, enable combo circuit breaker, and fix broken unit tests * docs(changelog): update for stability bug fixes cheaper-inference#1804 cheaper-inference#1805 * fix: clear active requests and recover providers (cheaper-inference#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (cheaper-inference#1775) * feat: auto-restore probe-failed database to prevent data loss (cheaper-inference#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (cheaper-inference#1825) * chore(release): v3.7.6 — final stability patches for production * test: update expected db probe-failure error message for auto-restore feature * chore(workflow): mandate implementation plan generation in resolve-issues * docs(changelog): rewrite v3.7.6 with complete commit-accurate entries * feat(analytics): add cost-based usage insights and activity streaks Expand usage analytics to report total cost, per-series cost totals, API key counts, and current activity streaks using pricing-aware token calculations. Also make probe-failed database recovery choose the newest backup by its embedded timestamp instead of filesystem mtime so auto-restore selects the intended snapshot reliably. * fix(mitm): enforce transparent interception on port 443 only Reject non-443 MITM port updates in the settings API and normalize stored configuration back to the required transparent interception port. Lock the dashboard port field to 443, update the validation copy, and add integration coverage to prevent stale custom ports from being accepted or surfaced. * docs(changelog): update for analytics and mitm features --------- Co-authored-by: Andrew Munsell <andrew@wizardapps.net> Co-authored-by: Antigravity Assistant <bot@antigravity.local> Co-authored-by: Gi99lin <74502520+Gi99lin@users.noreply.github.com> Co-authored-by: Sergey Morozov <tr0st@bk.ru> Co-authored-by: payne <baboialex95@gmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: ipanghu <bypanghu@163.com>
* feat(api-keys): add rename support in permissions modal Add an editable key name field at the top of the permissions modal, allowing users to rename API keys alongside existing permission settings. The backend already supported name updates via PATCH /api/keys/:id — this wires the UI to send the name field and refreshes the key list on success. Changes: - Add keyName state and text input to PermissionsModal - Update handleUpdatePermissions to validate and send name in PATCH body - Add integration test for rename via PATCH (valid, empty, too-long names) - Update E2E mock to handle PATCH requests * chore(release): bump version to 3.7.6 * chore(release): v3.7.6 — merge API key rename feature and sync docs * chore(release): expand contributor credits to 155 PRs across full project history - Expanded acknowledgment table from 29 to 53 contributors - Added 100+ previously uncredited PRs from project inception through v3.7.5 - Moved contributor credits section to v3.7.6 (current release) - Synced llm.txt version to 3.7.6 * fix: resolve security ReDoS in codex and bugs cheaper-inference#1797 cheaper-inference#1789 * feat(dashboard): implement remaining v3.7.6 dashboard features and fixes * fix(xiaomi-mimo): update models to V2.5, fix Token Plan validation and default region (cheaper-inference#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (cheaper-inference#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (cheaper-inference#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (cheaper-inference#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (cheaper-inference#1802) Integrated into release/v3.7.6 * fix(stability): resolve codex input validation, enable combo circuit breaker, and fix broken unit tests * docs(changelog): update for stability bug fixes cheaper-inference#1804 cheaper-inference#1805 * fix: clear active requests and recover providers (cheaper-inference#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (cheaper-inference#1775) * feat: auto-restore probe-failed database to prevent data loss (cheaper-inference#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (cheaper-inference#1825) * chore(release): v3.7.6 — final stability patches for production * test: update expected db probe-failure error message for auto-restore feature * chore(workflow): mandate implementation plan generation in resolve-issues * docs(changelog): rewrite v3.7.6 with complete commit-accurate entries * feat(analytics): add cost-based usage insights and activity streaks Expand usage analytics to report total cost, per-series cost totals, API key counts, and current activity streaks using pricing-aware token calculations. Also make probe-failed database recovery choose the newest backup by its embedded timestamp instead of filesystem mtime so auto-restore selects the intended snapshot reliably. * fix(mitm): enforce transparent interception on port 443 only Reject non-443 MITM port updates in the settings API and normalize stored configuration back to the required transparent interception port. Lock the dashboard port field to 443, update the validation copy, and add integration coverage to prevent stale custom ports from being accepted or surfaced. * docs(changelog): update for analytics and mitm features * chore(release): attribute community contributors Co-authored-by: rdself <rdself@users.noreply.github.com> Co-authored-by: oyi77 <oyi77@users.noreply.github.com> Co-authored-by: clousky2020 <clousky2020@users.noreply.github.com> Co-authored-by: benzntech <benzntech@users.noreply.github.com> Co-authored-by: kang-heewon <kang-heewon@users.noreply.github.com> Co-authored-by: herjarsa <herjarsa@users.noreply.github.com> Co-authored-by: backryun <backryun@users.noreply.github.com> Co-authored-by: tombii <tombii@users.noreply.github.com> Co-authored-by: christopher-s <christopher-s@users.noreply.github.com> Co-authored-by: zen0bit <zen0bit@users.noreply.github.com> Co-authored-by: k0valik <k0valik@users.noreply.github.com> Co-authored-by: zhangqiang8vip <zhangqiang8vip@users.noreply.github.com> Co-authored-by: wlfonseca <wlfonseca@users.noreply.github.com> Co-authored-by: RaviTharuma <RaviTharuma@users.noreply.github.com> Co-authored-by: prakersh <prakersh@users.noreply.github.com> Co-authored-by: payne0420 <payne0420@users.noreply.github.com> Co-authored-by: only4copilot <only4copilot@users.noreply.github.com> Co-authored-by: jay77721 <jay77721@users.noreply.github.com> Co-authored-by: hijak <hijak@users.noreply.github.com> Co-authored-by: hartmark <hartmark@users.noreply.github.com> Co-authored-by: defhouse <defhouse@users.noreply.github.com> Co-authored-by: xiaoge1688 <xiaoge1688@users.noreply.github.com> Co-authored-by: xandr0s <xandr0s@users.noreply.github.com> Co-authored-by: willbnu <willbnu@users.noreply.github.com> Co-authored-by: slewis3600 <slewis3600@users.noreply.github.com> Co-authored-by: sergey-v9 <sergey-v9@users.noreply.github.com> Co-authored-by: razllivan <razllivan@users.noreply.github.com> Co-authored-by: nmime <nmime@users.noreply.github.com> Co-authored-by: Moutia-Ben-Yahia <Moutia-Ben-Yahia@users.noreply.github.com> Co-authored-by: Mind-Dragon <Mind-Dragon@users.noreply.github.com> Co-authored-by: mercs2910 <mercs2910@users.noreply.github.com> Co-authored-by: MAINER4IK <MAINER4IK@users.noreply.github.com> Co-authored-by: luandiasrj <luandiasrj@users.noreply.github.com> Co-authored-by: knopki <knopki@users.noreply.github.com> Co-authored-by: kfiramar <kfiramar@users.noreply.github.com> Co-authored-by: ken2190 <ken2190@users.noreply.github.com> Co-authored-by: keith8496 <keith8496@users.noreply.github.com> Co-authored-by: jonesfernandess <jonesfernandess@users.noreply.github.com> Co-authored-by: JasonLandbridge <JasonLandbridge@users.noreply.github.com> Co-authored-by: i1hwan <i1hwan@users.noreply.github.com> Co-authored-by: Gorchakov-Pressure <Gorchakov-Pressure@users.noreply.github.com> Co-authored-by: foxy1402 <foxy1402@users.noreply.github.com> Co-authored-by: dt418 <dt418@users.noreply.github.com> Co-authored-by: dhaern <dhaern@users.noreply.github.com> Co-authored-by: DavyMassoneto <DavyMassoneto@users.noreply.github.com> Co-authored-by: dail45 <dail45@users.noreply.github.com> Co-authored-by: congvc-dev <congvc-dev@users.noreply.github.com> Co-authored-by: be0hhh <be0hhh@users.noreply.github.com> Co-authored-by: andruwa13 <andruwa13@users.noreply.github.com> Co-authored-by: AndrewDragonIV <AndrewDragonIV@users.noreply.github.com> Co-authored-by: AndersonFirmino <AndersonFirmino@users.noreply.github.com> Co-authored-by: alexsvdk <alexsvdk@users.noreply.github.com> Co-authored-by: abhinavjnu <abhinavjnu@users.noreply.github.com> --------- Co-authored-by: Andrew Munsell <andrew@wizardapps.net> Co-authored-by: Antigravity Assistant <bot@antigravity.local> Co-authored-by: Gi99lin <74502520+Gi99lin@users.noreply.github.com> Co-authored-by: Sergey Morozov <tr0st@bk.ru> Co-authored-by: payne <baboialex95@gmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: ipanghu <bypanghu@163.com> Co-authored-by: rdself <rdself@users.noreply.github.com> Co-authored-by: oyi77 <oyi77@users.noreply.github.com> Co-authored-by: clousky2020 <clousky2020@users.noreply.github.com> Co-authored-by: benzntech <benzntech@users.noreply.github.com> Co-authored-by: kang-heewon <kang-heewon@users.noreply.github.com> Co-authored-by: herjarsa <herjarsa@users.noreply.github.com> Co-authored-by: backryun <backryun@users.noreply.github.com> Co-authored-by: tombii <tombii@users.noreply.github.com> Co-authored-by: christopher-s <christopher-s@users.noreply.github.com> Co-authored-by: zen0bit <zen0bit@users.noreply.github.com> Co-authored-by: k0valik <k0valik@users.noreply.github.com> Co-authored-by: zhangqiang8vip <zhangqiang8vip@users.noreply.github.com> Co-authored-by: wlfonseca <wlfonseca@users.noreply.github.com> Co-authored-by: RaviTharuma <RaviTharuma@users.noreply.github.com> Co-authored-by: prakersh <prakersh@users.noreply.github.com> Co-authored-by: payne0420 <payne0420@users.noreply.github.com> Co-authored-by: only4copilot <only4copilot@users.noreply.github.com> Co-authored-by: jay77721 <jay77721@users.noreply.github.com> Co-authored-by: hijak <hijak@users.noreply.github.com> Co-authored-by: hartmark <hartmark@users.noreply.github.com> Co-authored-by: defhouse <defhouse@users.noreply.github.com> Co-authored-by: xiaoge1688 <xiaoge1688@users.noreply.github.com> Co-authored-by: xandr0s <xandr0s@users.noreply.github.com> Co-authored-by: willbnu <willbnu@users.noreply.github.com> Co-authored-by: slewis3600 <slewis3600@users.noreply.github.com> Co-authored-by: sergey-v9 <sergey-v9@users.noreply.github.com> Co-authored-by: razllivan <razllivan@users.noreply.github.com> Co-authored-by: nmime <nmime@users.noreply.github.com> Co-authored-by: Moutia-Ben-Yahia <Moutia-Ben-Yahia@users.noreply.github.com> Co-authored-by: Mind-Dragon <Mind-Dragon@users.noreply.github.com> Co-authored-by: mercs2910 <mercs2910@users.noreply.github.com> Co-authored-by: MAINER4IK <MAINER4IK@users.noreply.github.com> Co-authored-by: luandiasrj <luandiasrj@users.noreply.github.com> Co-authored-by: knopki <knopki@users.noreply.github.com> Co-authored-by: kfiramar <kfiramar@users.noreply.github.com> Co-authored-by: ken2190 <ken2190@users.noreply.github.com> Co-authored-by: keith8496 <keith8496@users.noreply.github.com> Co-authored-by: jonesfernandess <jonesfernandess@users.noreply.github.com> Co-authored-by: JasonLandbridge <JasonLandbridge@users.noreply.github.com> Co-authored-by: i1hwan <i1hwan@users.noreply.github.com> Co-authored-by: Gorchakov-Pressure <Gorchakov-Pressure@users.noreply.github.com> Co-authored-by: foxy1402 <foxy1402@users.noreply.github.com> Co-authored-by: dt418 <dt418@users.noreply.github.com> Co-authored-by: dhaern <dhaern@users.noreply.github.com> Co-authored-by: DavyMassoneto <DavyMassoneto@users.noreply.github.com> Co-authored-by: dail45 <dail45@users.noreply.github.com> Co-authored-by: congvc-dev <congvc-dev@users.noreply.github.com> Co-authored-by: be0hhh <be0hhh@users.noreply.github.com> Co-authored-by: andruwa13 <andruwa13@users.noreply.github.com> Co-authored-by: AndrewDragonIV <AndrewDragonIV@users.noreply.github.com> Co-authored-by: AndersonFirmino <AndersonFirmino@users.noreply.github.com> Co-authored-by: alexsvdk <alexsvdk@users.noreply.github.com> Co-authored-by: abhinavjnu <abhinavjnu@users.noreply.github.com>
Summary
Fixes Xiaomi MiMo provider failing to connect — both adding API keys and sending requests were broken due to outdated model IDs and incorrect regional endpoint defaults.
Root Cause
Two issues combined to completely break the provider:
Outdated model IDs — The registry listed
mimo-v2-pro,mimo-v2-omni,mimo-v2-tts, but Xiaomi released the V2.5 series (mimo-v2.5-pro,mimo-v2.5,mimo-v2.5-tts, etc.). The generic OpenAI validation sends a test chat request with the first registered model — using an obsolete model ID caused validation failure.Wrong default regional endpoint — Token Plan keys (
tp-*) only work on their assigned regional cluster. The defaulttoken-plan-amsendpoint doesn't work for all TP keys. Changed totoken-plan-sgpwhich has wider availability.No custom validation — Xiaomi was using the generic
validateOpenAILikeProviderwhich first triesGET /models(works but gives false negatives on wrong region), then falls through to/chat/completionswith an obsolete model. Added dedicatedSPECIALTY_VALIDATORSentry.Changes
open-sse/config/providerRegistry.tsmimo-v2.5-pro,mimo-v2.5,mimo-v2.5-tts,mimo-v2.5-tts-voiceclone,mimo-v2.5-tts-voicedesignsrc/lib/providers/validation.tsxiaomi-mimotoSPECIALTY_VALIDATORS— validates via/chat/completionsusing the user's configuredbaseUrl(critical for Token Plan regional endpoints)src/app/(dashboard)/dashboard/providers/[id]/page.tsxtoken-plan-amstotoken-plan-sgptests/unit/xiaomi-mimo-provider.test.tsVerification
tp-*) on SGP endpointGET /v1/modelsreturns all 8 models (V2 + V2.5)POST /v1/chat/completionswithmimo-v2.5-proreturns 200/messages) returns 404 on Token Plan — OpenAI format is the only optionchat-openai-compat-providersintegration test passes