Repository navigation
Fix endpoint visibility, A2A status, and API catalog - #1806
diegosouzapw merged 4 commits into
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces visibility controls for the ngrok tunnel panel on the dashboard, allowing users to show or hide it via the Appearance settings. It updates the corresponding API schemas, client-side state management, and documentation. I have identified an issue regarding the inconsistent handling of the ngrok token state when the panel is hidden, which could lead to data loss compared to the existing Tailscale implementation.
| if (!tunnelVisibility.showNgrokTunnel) { | ||
| setNgrokStatus(null); | ||
| setNgrokNotice(null); | ||
| setNgrokToken(""); | ||
| } |
There was a problem hiding this comment.
When the ngrok tunnel panel is hidden, the ngrokToken state is reset to an empty string. This behavior is inconsistent with the Tailscale implementation, where tailscalePassword is preserved even if its panel is hidden. If a user enters a token but accidentally toggles the visibility in another tab or triggers a settings reload, their input will be lost. Consider preserving the token state to improve user experience.
There was a problem hiding this comment.
Fixed in 2371a4f by preserving the ngrok token state when the panel is hidden.
There was a problem hiding this comment.
Pull request overview
Adds a persisted Appearance preference to hide/show the ngrok tunnel panel on the Endpoint page, and tightens A2A enablement behavior so the API and dashboard reflect the service being disabled when toggled OFF.
Changes:
- Persist and apply an “Endpoint tunnel visibility” toggle for the ngrok tunnel panel; skip ngrok loading/polling when hidden.
- Gate A2A status + JSON-RPC behavior on the persisted
a2aEnabledsetting, and update dashboard UX for disabled state. - Add an API Catalog error UI state, refresh PWA cache behavior for Next.js assets, and expand tests/docs/i18n accordingly.
Reviewed changes
Copilot reviewed 24 out of 24 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| tests/unit/settings-schema-routing-strategies.test.ts | Verifies settings schemas accept the new tunnel visibility toggles. |
| tests/unit/settings-api.test.ts | Ensures settings API persists/returns hideEndpointNgrokTunnel. |
| tests/unit/db-settings-crud.test.ts | Asserts new default settings values for mcpEnabled / a2aEnabled. |
| tests/unit/a2a-enabled-route.test.ts | New unit tests for A2A disabled/enablement behavior in status + JSON-RPC. |
| src/types/settings.ts | Extends Settings types with protocol toggles and ngrok visibility flag. |
| src/shared/validation/settingsSchemas.ts | Adds hideEndpointNgrokTunnel to settings route validation. |
| src/shared/validation/schemas.ts | Adds endpoint tunnel visibility toggles to shared validation schema. |
| src/lib/db/settings.ts | Adds defaults for mcpEnabled, a2aEnabled, and hideEndpointNgrokTunnel. |
| src/i18n/messages/en.json | Adds labels/descriptions for Endpoint tunnel visibility + ngrok toggle. |
| src/i18n/messages/zh-CN.json | Adds Chinese translations for the new Appearance labels. |
| src/app/api/a2a/status/route.ts | Returns disabled/offline A2A status when a2aEnabled is false. |
| src/app/a2a/route.ts | Rejects JSON-RPC calls with 503 when A2A is disabled. |
| src/app/(dashboard)/dashboard/settings/components/AppearanceTab.tsx | Adds Appearance UI toggle for ngrok tunnel panel visibility. |
| src/app/(dashboard)/dashboard/endpoint/page.tsx | Updates A2A tab rendering to show a disabled-service panel when OFF. |
| src/app/(dashboard)/dashboard/endpoint/tests/EndpointPageClient.test.tsx | Ensures ngrok status isn’t fetched when ngrok panel is hidden. |
| src/app/(dashboard)/dashboard/endpoint/tests/ApiEndpointsTab.test.tsx | New tests for API catalog error state and successful render. |
| src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx | Skips ngrok status load/polling and clears ngrok state when hidden. |
| src/app/(dashboard)/dashboard/endpoint/ApiEndpointsTab.tsx | Adds API catalog error state UI when OpenAPI load fails. |
| public/sw.js | Bumps cache version and adds network-first caching for /_next/* assets. |
| docs/USER_GUIDE.md | Documents tunnel panel visibility controls in Appearance settings. |
| docs/FEATURES.md | Updates features list to mention endpoint tunnel visibility controls. |
| docs/API_REFERENCE.md | Documents /api/tunnels/ngrok endpoints. |
| docs/A2A-SERVER.md | Documents A2A enablement behavior and disabled error code. |
| README.md | Updates README to mention tunnel visibility controls and A2A enablement requirement. |
Comments suppressed due to low confidence (1)
src/app/a2a/route.ts:124
rejectIfA2ADisabled()runs before the auth check, which means unauthenticated callers can probe whether A2A is enabled/disabled and will get a 503 instead of the usual unauthorized response when an API key is configured. Consider authenticating first (whenOMNIROUTE_API_KEYis set) and only then returning the disabled error to avoid information disclosure and keep error semantics consistent.
export async function POST(req: NextRequest) {
const disabledResponse = await rejectIfA2ADisabled();
if (disabledResponse) return disabledResponse;
// Auth check
if (!authenticate(req)) {
return jsonRpcError(null, -32600, "Unauthorized: missing or invalid API key");
}
| async function rejectIfA2ADisabled() { | ||
| const settings = await getSettings(); | ||
| if (settings.a2aEnabled === true) return null; | ||
| return NextResponse.json( | ||
| { | ||
| jsonrpc: "2.0", | ||
| id: null, | ||
| error: { | ||
| code: -32000, | ||
| message: "A2A endpoint is disabled. Enable it from the Endpoints page.", | ||
| }, | ||
| }, | ||
| { status: 503 } | ||
| ); | ||
| } |
There was a problem hiding this comment.
The disabled-response is returned before parsing the request body, so the JSON-RPC response always uses id: null. For well-formed JSON-RPC requests that include an id, clients expect the same id echoed back even for server errors; consider parsing the body (or at least extracting id) before returning the disabled error so callers can correlate responses.
There was a problem hiding this comment.
Fixed in 2371a4f by authenticating before the disabled-state check and echoing the JSON-RPC request id in the disabled response.
|
Thanks @rdself for this great contribution! 🎉 It's now officially merged into the |
2bdc72a
into
diegosouzapw: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 diegosouzapw#1797 diegosouzapw#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 (diegosouzapw#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (diegosouzapw#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (diegosouzapw#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (diegosouzapw#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (diegosouzapw#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 diegosouzapw#1804 diegosouzapw#1805 * fix: clear active requests and recover providers (diegosouzapw#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (diegosouzapw#1775) * feat: auto-restore probe-failed database to prevent data loss (diegosouzapw#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (diegosouzapw#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 diegosouzapw#1797 diegosouzapw#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 (diegosouzapw#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (diegosouzapw#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (diegosouzapw#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (diegosouzapw#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (diegosouzapw#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 diegosouzapw#1804 diegosouzapw#1805 * fix: clear active requests and recover providers (diegosouzapw#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (diegosouzapw#1775) * feat: auto-restore probe-failed database to prevent data loss (diegosouzapw#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (diegosouzapw#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 diegosouzapw#1797 diegosouzapw#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 (diegosouzapw#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (diegosouzapw#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (diegosouzapw#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (diegosouzapw#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (diegosouzapw#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 diegosouzapw#1804 diegosouzapw#1805 * fix: clear active requests and recover providers (diegosouzapw#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (diegosouzapw#1775) * feat: auto-restore probe-failed database to prevent data loss (diegosouzapw#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (diegosouzapw#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 diegosouzapw#1797 diegosouzapw#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 (diegosouzapw#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (diegosouzapw#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (diegosouzapw#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (diegosouzapw#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (diegosouzapw#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 diegosouzapw#1804 diegosouzapw#1805 * fix: clear active requests and recover providers (diegosouzapw#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (diegosouzapw#1775) * feat: auto-restore probe-failed database to prevent data loss (diegosouzapw#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (diegosouzapw#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>
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 diegosouzapw#1797 diegosouzapw#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 (diegosouzapw#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (diegosouzapw#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (diegosouzapw#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (diegosouzapw#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (diegosouzapw#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 diegosouzapw#1804 diegosouzapw#1805 * fix: clear active requests and recover providers (diegosouzapw#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (diegosouzapw#1775) * feat: auto-restore probe-failed database to prevent data loss (diegosouzapw#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (diegosouzapw#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 diegosouzapw#1797 diegosouzapw#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 (diegosouzapw#1823) Integrated into release/v3.7.6 * fix(dashboard): correct loadPresets ReferenceError in CostOverviewTab * fix(codex): omit compact client metadata (diegosouzapw#1822) Integrated into release/v3.7.6 * feat(chatgpt-web): support thinking_effort (Standard/Extended) for thinking-capable models (diegosouzapw#1821) Integrated into release/v3.7.6 * Fix endpoint visibility, A2A status, and API catalog (diegosouzapw#1806) Integrated into release/v3.7.6 * fix(analytics): use pure SQL aggregations — no history rows loaded (diegosouzapw#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 diegosouzapw#1804 diegosouzapw#1805 * fix: clear active requests and recover providers (diegosouzapw#1824) Integrated into release/v3.7.6 * feat: inject fallback tool names to prevent upstream 400 errors (diegosouzapw#1775) * feat: auto-restore probe-failed database to prevent data loss (diegosouzapw#1810) * fix: safely cast inputs to strings before calling trim() to avoid crashes on numeric fields in proxy modal (diegosouzapw#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
Validation
Browser verification
/dashboard/endpointin the browser.Notes