- Drop empty barrel src/components/providers/index.ts (no external importers)
- Drop src/components/providers/types.ts (only referenced in a stale comment)
- Trim src/components/providers/utils.ts to the 10 exports actually used
externally; remaining helpers (ampcode mappers, key builders, base URL
normalizers, redundant recent-stats wrappers) were dead after the
ProvidersWorkbench rewrite
fix(provider): update button icon styles in ProviderHeaderCard
style(provider): enhance layout and typography in ProviderHeaderCard and ProviderResourcePanel
fix(provider): update status styles in ProviderResourceTable and sharedForm
The detail metadata section was rendering authIndex with the
status.notAvailable label (zh: "不可用"), which reads like the
provider doesn't support the feature at all. Every provider supports
authIndex; it's just absent until you link an auth file. Reuse the
status.notSet label so the wording matches baseUrl / proxyUrl and
makes it clear that the entry simply doesn't have a value yet.
The form's apiKey field is intentionally empty in edit mode (the
placeholder reads "leave blank to keep unchanged"), so model discovery
and the Claude connectivity test were sending requests with no
credentials and getting 401 for Codex / Claude / Gemini providers.
- BaseProviderForm derives a fallbackAuthIndex from resource.raw.authIndex
alongside the existing fallbackApiKey and passes both into the
discovery and connectivity hooks
- modelsApi.fetch{V1,Claude,Gemini,}ModelsViaApiCall accept an optional
authIndex and forward it on apiCallApi.request so the backend can
inject the OAuth/auth-file token for providers that store the key
externally
- useModelDiscovery threads the authIndex through to every brand
- useConnectivityTest threads authIndex through the Claude path and no
longer rejects the request as "API key required" when an authIndex is
available
Replace the free-form test-model input on the OpenAI-compatible and
Claude edit sheets with a Select whose options are derived from the
already-added models. An Auto entry (annotated with the first model
name) maps to an empty form.testModel so connectivity tests keep
falling back to the first configured model when the user hasn't made
an explicit pick. If an existing config carried a test model that
isn't in form.models, surface it as a custom option so the value is
preserved instead of silently dropped.
- BaseProviderForm and AmpcodeForm now snapshot the initial form
signature on mount and report dirty/clean state to the parent via a
new onDirtyChange callback
- ProviderSheet tracks the form's dirty flag and wraps the cancel
button plus the new Sheet.confirmClose hook with a confirmation
prompt; the prompt is skipped during submit and in detail mode
- Sheet gains an optional confirmClose hook so that Escape, overlay
click and the close button all route through the same async check
before starting the close animation
- Add i18n keys (en/zh-CN/zh-TW/ru) for the unsaved-changes prompt
When the OpenAI-compatible endpoint rejects the first authenticated
/models request (some upstreams expose the route unauthenticated, or
the configured key only covers chat completions), retry once with no
key and no custom headers before surfacing the original error so the
discovery panel can populate.
ModelDiscoveryPanel now hands the full ModelInfo objects to onApply
instead of just the model names, and BaseProviderForm copies each
incoming alias into the new form.models row so suggestions from
endpoints that return alias metadata are no longer silently dropped.
- Wire useProviderRecentRequests into ProvidersWorkbenchPage and pass
usageByProvider down to the resource table; the header refresh now
refreshes recent requests in parallel with the provider snapshot
- ProviderResourceTable status column hosts the existing status badge
plus an inline ProviderStatusBar driven by the recent-requests usage;
column widths rebalanced so the bar fits on a single row
- New OpenAIBrandToolbar gives the OpenAI-compatible brand a sort
control (name / priority / recent-success with direction) and a
multi-select model filter dropdown; ProviderResourcePanel renders it
via the new openaiControls prop
- ProvidersWorkbenchPage computes the available model union, sorts /
filters resources when the OpenAI brand is active, and resets the
selected models when switching brands
- Add providerStatusBar.module.scss for the in-row status bar styling
and i18n keys (en/zh-CN/zh-TW/ru) for the new toolbar
- New useModelDiscovery hook fans out to modelsApi.fetchGemini /
fetchV1 / fetchClaude / fetchModels based on brand and surfaces
loading, error and the normalized model list
- New ModelDiscoveryPanel renders an inline search, select-all and
per-model checkboxes with an Already added marker for entries that
already exist in form.models
- BaseProviderForm: show a Fetch from endpoint button at the top of
the models section for the supported brands, with apply merging
the picked names into form.models while skipping duplicates and
replacing the empty placeholder row
- Add i18n keys (en/zh-CN/zh-TW/ru) for the discovery toolbar, list
states and apply count
Track per-entry signatures (apiKey + proxyUrl + headersText) so editing
one OpenAI key entry no longer clears the success/error state of the
other entries. The global signature (baseUrl/headers/models/testModel)
keeps clearing every entry as before.
- Introduce useConnectivityTest hook that drives per-key and bulk tests
via apiCallApi against the chat-completions / messages endpoints, with
signature-based status reset
- OpenAI form: each API key entry header now shows a status icon plus a
per-key Test button, and the entries section gains a Test all button
- Claude form: enable the Test model field and add a Test button with
inline status; falls back to the persisted apiKey when the edit form
field is left blank
- Add ConnectivityStatusIcon, related styles (spin keyframes, buttons,
error banner), and i18n keys (en/zh-CN/zh-TW/ru) for the test labels
and validation messages
- Wire useProviderWorkbench.toggleDisabled through ProviderResourcePanel
to ProviderResourceTable as an inline ToggleSwitch in the actions cell
- Hide the toggle for the Ampcode singleton brand
- Add toast on success/failure and i18n keys (en/zh-CN/zh-TW/ru) for the
enable/disable labels and a toggleFailed error message
- Deleted AiProvidersVertexEditPage and its associated routes.
- Consolidated AI provider routes under ProvidersWorkbenchPage.
- Removed Claude and OpenAI draft stores as they are no longer in use.
- Updated theme styles to include new workbench tokens for UI consistency.
- Introduced new quota management for xAI/Grok, including types, API calls, and UI components.
- Added localization support for xAI quota in English, Russian, Chinese (Simplified and Traditional).
- Updated styles for xAI quota cards and sections.
- Integrated xAI quota fetching and rendering logic into existing quota management system.
- Enhanced auth file handling to support xAI files.
- Introduced Home control plane configuration options in English, Russian, Simplified Chinese, and Traditional Chinese locales.
- Added new fields for error log retention, usage statistics, and image generation settings in visual configuration.
- Enhanced payload model entries to include header management and condition matching capabilities.
- Updated default visual configuration values to accommodate new settings.
- Updated English, Russian, Simplified Chinese, and Traditional Chinese localization files to change "Antigravity Credits Retry" to "Use Antigravity Credits" and removed associated descriptions.
- Modified ConfigPage.module.scss to improve layout and styling, including adjustments to widths, gaps, paddings, and border-radius for various elements.
- Simplified the structure of the ConfigPage component by removing unused variables and streamlining the JSX.
- Deleted chartConfig.ts and its exports from index.ts, as they are no longer needed.
- Removed latency.ts and its related functions for latency statistics and formatting.
- Cleaned up usageIndex.ts by removing functions related to indexing usage details, as they are not in use.
- Introduced `useProviderRecentRequests` hook to manage recent request data for providers.
- Replaced usage of `useProviderStats` with `useProviderRecentRequests` in relevant components.
- Updated `VertexSection` and other provider components to consume recent request data instead of key stats.
- Removed obsolete `useProviderStats` hook and related usage details.
- Added new utility functions for handling recent request data, including normalization and aggregation.
- Updated API service to fetch recent request usage data.
- Refactored `AuthFileCard` and related components to utilize recent request statistics.
- Cleaned up unused code and types related to previous usage stats implementation.