Skip to content

feat(dashboard): chat-first test slide-over (Option A) - #2660

Merged
diegosouzapw merged 6 commits into
cheaper-inference:release/v3.8.3from
mrmm:mm/feat-test-tab-option-a-v3.8.3
May 24, 2026
Merged

diegosouzapw merged 6 commits into
cheaper-inference:release/v3.8.3from
mrmm:mm/feat-test-tab-option-a-v3.8.3

Conversation

@mrmm

@mrmm mrmm commented May 24, 2026

Copy link
Copy Markdown
Contributor

Iteration on top of #2656 (already merged into release/v3.8.3).

What changes

Refactors the provider Test slide-over for a chat-first experience.

Slide-over header now owns the toolbar

  • Model picker, Key picker and Clear button move from inside the Test tab into a dedicated toolbar row between the slide-over header and the tab strip.
  • The Test tab body becomes 100% chat: messages flex-1 + composer pinned at the bottom. Maximum real estate for the conversation, like Claude / ChatGPT playgrounds.

Tab strip simplified

  • Drop Models and Keys tabs. Model selection lives in the toolbar; key management stays on the provider page.
  • Tab strip is now Test + Logs only. Logs tab keeps its link-out to /dashboard/logs?connection=<id>.

Keep focus in the composer

  • LlmChatCard now holds a textareaRef and refocuses it after each send completes, so users can keep typing without reaching for the mouse.
  • It also autofocuses on mount when rendered in embedded mode (i.e. inside the slide-over).

LlmChatCard API surface

New optional props (all backwards-compatible with the existing inline mini-playground usage):

  • hideToolbar — skip the default header controls so a parent can render its own.
  • model / onModelChange — controlled model selection.
  • selectedKey / onSelectedKeyChange — controlled key selection.
  • onControlsChange — callback firing { clear, hasMessages, streaming } so a parent toolbar can drive Clear without breaking React Compiler strict (no refs in render).

Why

After #2656 landed, the inside-the-tab toolbar competed for vertical space with the chat content, and four tabs (Test / Models / Keys / Logs) felt heavier than needed for a quick-test surface. This iteration commits to a chat-first layout, removes redundant tabs (Models data is the picker; Keys is a provider-page concern), and fixes the focus-loss after sending which made keyboard-only usage clunky.

Verification

  • npx eslint clean on both touched files.
  • npx tsc --noEmit clean for the touched files.
  • Manual test on http://localhost:20130/dashboard/providers: open any LLM provider's slide-over, switch models in the new toolbar, send a message, watch focus stay in the textarea so the next message can be typed immediately.

Refs

Refactor the provider Test slide-over for a chat-first experience:

- Hoist Model + Key + Clear controls into a dedicated toolbar row
  rendered between the slide-over header and the tab strip. The Test tab
  body is now 100% chat (messages + composer), maximising real estate.
- Drop the Models and Keys tabs. Tab strip is now Test + Logs only.
  Model selection lives in the toolbar; key management stays on the
  provider page (Logs tab still link-out to /dashboard/logs).
- LlmChatCard gains controlled props (model, selectedKey) + hideToolbar
  + onControlsChange callback so the parent can drive UI state and
  trigger Clear, while the card retains its own send/stream/abort logic.
- Add textareaRef and refocus the composer after each send completes,
  so the user can keep typing without clicking. Also autofocus on mount
  in embedded mode.

Refs #2656
@mrmm
mrmm requested a review from diegosouzapw as a code owner May 24, 2026 15:50
@kilo-code-bot

kilo-code-bot Bot commented May 24, 2026

Copy link
Copy Markdown

Kilo Code Review could not run — your account is out of credits.

Add credits or switch to a free model to enable reviews on this change.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the LlmChatCard and ProviderTestSlideOver components to support externalized controls and an integrated toolbar. Key changes include the introduction of a LlmChatControls interface, hybrid state management for model and key selection, and the removal of redundant tabs. Feedback identifies a bug in the hybrid state logic where internal updates are skipped if callbacks are provided, redundant API calls from duplicate hook usage, and hardcoded strings that require internationalization.

Comment on lines +101 to +116
const selectedKey = selectedKeyProp ?? internalSelectedKey;
const setSelectedKey = useCallback(
(k: string) => {
if (onSelectedKeyChange) onSelectedKeyChange(k);
else setInternalSelectedKey(k);
},
[onSelectedKeyChange]
);
const model = modelProp ?? internalModel;
const setModel = useCallback(
(m: string) => {
if (onModelChange) onModelChange(m);
else setInternalModel(m);
},
[onModelChange]
);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The current implementation of the hybrid controlled/uncontrolled state for selectedKey and model has a bug. If a consumer provides the callback (e.g., onModelChange) but does not provide the value prop (e.g., model), the internal state will never update because the callback presence prevents setInternalModel from being called.

To support all usage patterns (fully controlled, fully uncontrolled, or callback-only), the internal state should be updated regardless of whether a callback is provided, while the prop should take precedence for the rendered value.

Suggested change
const selectedKey = selectedKeyProp ?? internalSelectedKey;
const setSelectedKey = useCallback(
(k: string) => {
if (onSelectedKeyChange) onSelectedKeyChange(k);
else setInternalSelectedKey(k);
},
[onSelectedKeyChange]
);
const model = modelProp ?? internalModel;
const setModel = useCallback(
(m: string) => {
if (onModelChange) onModelChange(m);
else setInternalModel(m);
},
[onModelChange]
);
const selectedKey = selectedKeyProp !== undefined ? selectedKeyProp : internalSelectedKey;
const setSelectedKey = useCallback(
(k: string) => {
setInternalSelectedKey(k);
onSelectedKeyChange?.(k);
},
[onSelectedKeyChange]
);
const model = modelProp !== undefined ? modelProp : internalModel;
const setModel = useCallback(
(m: string) => {
setInternalModel(m);
onModelChange?.(m);
},
[onModelChange]
);

Comment on lines +59 to +60
const { keys } = useApiKey();
const { models } = useProviderModels(providerId);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Both useApiKey and useProviderModels are called here and again inside the LlmChatCard component. Since these hooks perform network fetches on mount, this results in redundant API calls every time the slide-over is opened. Consider lifting the data fetching entirely to this parent component and passing the results down to LlmChatCard as props, or implementing a caching layer in the hooks.

Comment on lines +219 to +258
<label className="text-[11px] text-text-muted shrink-0">Model:</label>
<select
value={model}
onChange={(e) => onModelChange(e.target.value)}
className="min-w-0 flex-1 rounded-md border border-border bg-bg-subtle text-xs px-2 py-1 text-text-main focus:outline-none focus:ring-1 focus:ring-primary"
>
{modelOptions.length === 0 && <option value="">—</option>}
{modelOptions.map((m) => (
<option key={m.id} value={m.id}>
{m.id}
</option>
))}
</select>
</div>
{keys.length > 0 && (
<div className="flex items-center gap-1.5">
<label className="text-[11px] text-text-muted shrink-0">Key:</label>
<select
value={selectedKey}
onChange={(e) => onSelectedKeyChange(e.target.value)}
className="rounded-md border border-border bg-bg-subtle text-xs px-2 py-1 text-text-main focus:outline-none focus:ring-1 focus:ring-primary"
>
<option value="">(default)</option>
{keys.map((k) => (
<option key={k.id} value={k.key}>
{k.name ?? k.id}
</option>
))}
</select>
</div>
)}
{hasMessages && (
<button
type="button"
onClick={() => controls?.clear()}
className="text-[11px] text-text-muted hover:text-text-main transition-colors flex items-center gap-1"
title="Clear conversation"
>
<span className="material-symbols-outlined text-[14px]">delete_sweep</span>
Clear

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Several user-facing strings in the new TestToolbar are hardcoded. For consistency with the rest of the dashboard and to support internationalization, please use the useTranslations hook with the appropriate locale keys (e.g., from the miniPlayground namespace).

Comment on lines 315 to 325
title="Logs"
body={
<div className="flex flex-col gap-2">
<p>Per-provider log filtering is coming soon. For now, open the global logs view.</p>
<>
<p>View request and response logs for this provider on the dedicated logs page.</p>
<a
href={`/dashboard/logs?connection=${encodeURIComponent(providerId)}`}
className="inline-flex items-center gap-1.5 text-accent hover:underline self-center"
className="mt-2 inline-flex items-center gap-1 text-accent hover:underline"
target="_blank"
rel="noopener noreferrer"
>
<span className="material-symbols-outlined text-[14px]">open_in_new</span>
Open logs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The strings in the LogsTab component are hardcoded. Please refactor these to use the project's internationalization system.

mrmm added 5 commits May 24, 2026 17:58
Drop disabled={streaming} from textarea so users can draft the next
message while the assistant reply is still streaming. The stop button
remains in place during streaming, so the next message cannot be sent
until streaming completes - then textarea refocus picks up the draft
ready to send.
…-model rejection

When the same model alias (e.g. claude-haiku-4-5-20251001) is registered
under multiple providers in an OmniRoute deployment, the chat-completions
endpoint rejects bare model names with an 'Ambiguous model' error.

Auto-qualify the model field by prepending providerId/ when no slash is
already present. This routes the test request to the specific provider
whose card invoked the slide-over, eliminating the ambiguity.

The qualified name is also stored on the assistant message so the
per-reply label shows what was actually dispatched.
The Logs tab in the provider Test slide-over now fetches and renders the
recent call logs for the connection inline (via /api/usage/call-logs?provider),
instead of a link-out placeholder. Logs auto-refresh every 4s while the
tab is open and each row expands to show request / response payloads on
demand (/api/usage/call-logs/{id}).

Empty / error states still surface the link to the full /dashboard/logs
page filtered by connection so users can drop into the full logger when
they need filters, search, and export.
- LogEntry now exposes account, apiKey, apiKeyName, apiKeyId from the
  call-logs API. Each row shows the human-readable requester (api key
  name or account) below the model name, with a masked key hint in the
  tooltip.
- LogDetail dropped the request / response payload viewer. Expanded
  rows now render a metadata-only summary (timestamp, status, duration,
  model, requested model, provider, requester, tokens) — payloads stay
  on the dedicated /dashboard/logs page.
- Reduce LogsTab fetch limit 50 -> 20 (tail-style)
- Shorten poll interval 4s -> 2s for snappier live watch
- Replace 'auto-refresh' label with pulsing green 'Live' badge + 'tailing last N' counter
@diegosouzapw
diegosouzapw merged commit 0f6daf4 into cheaper-inference:release/v3.8.3 May 24, 2026
2 of 3 checks passed
@diegosouzapw

Copy link
Copy Markdown
Collaborator

Thanks @mrmm for this excellent polishing! Option A is indeed a much cleaner UX for the provider test slide-over. Consolidating the selects/buttons to a unified toolbar and keeping the Test tab 100% focused on chat, combined with tailing provider logs in the Logs tab and keeping composer focus, makes for a very premium experience. I've squashed and merged this, and it will be included in the v3.8.3 release. Great work!

@diegosouzapw diegosouzapw mentioned this pull request May 24, 2026
diegosouzapw added a commit that referenced this pull request May 24, 2026
* chore(config): ignore additional agent workflow command files

Add newly introduced agent workflow and Claude command files to
.gitignore so proprietary automation assets are not committed.

* feat(deepseek-web): fix auth to use userToken + WASM PoW solver

Rewrite deepseek-web executor from broken cookie auth to userToken
Bearer flow (like Chat2API). Replace pure JS Keccak PoW with WASM
solver (5.8s → 86ms). Add 14 models, validation, and dashboard UX.

* fix(deepseek-web): update target_path to use challenge property

* refactor(deepseek-web): streamline token handling and implement cache eviction

* fix(deepseek-web): fix SSE parser, prompt format, and error handling

- Handle all 3 DeepSeek SSE stream formats: initial fragments,
  APPEND operations, and bare string tokens (fixes truncated responses)
- Simplify prompt builder to send system + last user message only
  (DeepSeek web API is single-turn, full history caused marker leakage)
- Check json.code before token extraction (fixes "did not return
  access token: Authorization" on code 40003 with HTTP 200)
- Clear session cache alongside token cache on auth errors
- Add dev origin for remote testing

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore: ignore memory-bank and cursor agent rules from tracking

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat: enhance documentation and configuration for Fumadocs integration

- Added Fumadocs MDX support in the Next.js configuration.
- Updated transpile packages to include fumadocs-ui and fumadocs-core.
- Implemented a comprehensive set of redirects for documentation paths to improve navigation.
- Removed the generate-docs-index script as it is no longer needed.
- Updated various documentation titles for consistency and clarity.
- Enhanced global styles to incorporate Fumadocs UI themes and styles.

* refactor(docs): cleanup fumadocs PR — revert deepseek, add i18n fallback, restore LanguageSelector

- Revert unrelated deepseek-web.ts changes (should be separate PR)
- Add .source/ to .gitignore (Fumadocs generated files)
- Remove contributor IP from allowedDevOrigins
- Add i18n runtime fallback: reads NEXT_LOCALE cookie, loads translated
  .md from docs/i18n/<locale>/docs/ (preserves existing translation pipeline)
- Restore LanguageSelector in Fumadocs layout nav
- Restore SEO metadata (title template, description, robots)

* fix(codex): use allowlist to strip non-Responses-API fields in non-passthrough path (#2608) (#2615)

Integrated into release/v3.8.3 — fix(codex): allowlist-based sanitization for gpt-5.5 Responses API

* fix(deepseek-web): fix SSE parser, prompt format, error handling, and cache keys (#2616)

Integrated into release/v3.8.3 — fix(deepseek-web): SSE parser (APPEND + bare tokens), prompt builder, error handling, session cache cleanup

* chore(config): ignore additional agent workflow command files

Add newly introduced agent workflow and Claude command files to
.gitignore so proprietary automation assets are not committed.

* feat(docs): migrate /docs to Fumadocs MDX with nested routes (#2614)

Integrated into release/v3.8.3 — Fumadocs MDX migration with nested routes, search API, and 50+ URL redirects

* fix(catalog): skip static PROVIDER_MODELS when synced models exist (#2625)

Integrated into release/v3.8.3

* fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus (#2629)

Integrated into release/v3.8.3

* fix(cli): register tsx loader and add opencode config subcommand (#2631)

Integrated into release/v3.8.3

* feat(dashboard): add search and filters to /dashboard/api-manager (#2628)

Integrated into release/v3.8.3

* fix(claude): improve Pi and OpenCode compatibility (#2621)

Integrated into release/v3.8.3

* fix: restore semantic passthrough system-role-only extraction instead of full normalization (#2620)

Integrated into release/v3.8.3

* fix(kiro): stabilize conversationId across prompt compression (#2630)

Integrated into release/v3.8.3

* fix(deepseek-web): SSE thinking/search routing and session lifecycle (#2624)

Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul

* feat(dashboard): free-tier grouping with symbolic link in /providers (#2632)

Integrated into release/v3.8.3

* fix: close implementation gaps — t3-chat-web, stream_options, combo_strategy, batch config (#2634)

Integrated into release/v3.8.3

* feat(dashboard): risk notice modal for sensitive providers (#2633)

Integrated into release/v3.8.3

* fix(reasoning): extend reasoning_content injection to Kimi K2 and other replay models (#2639)

Integrated into release/v3.8.3

* fix(cli): Linux autostart via systemd user service (fixes #2627) (#2635)

Integrated into release/v3.8.3

* Refactor/providers free tier (#2640)

Integrated into release/v3.8.3

* fix(tests): remove duplicate assertion in schema coercion & fix(cli): ignore system vars in env check

* fix(combo): preserve omniModel tag in streaming output for round-trip context pinning (#2646)

Integrated into release/v3.8.3

* feat(dashboard): media providers pages + Web Fetch category (#2645)

Integrated into release/v3.8.3

* Feature provider adapta org com tutorial de conexão em modal (#2643)

Integrated into release/v3.8.3

* fix(rtk): skip content-based filter matching for non-shell tool results (#2642)

Integrated into release/v3.8.3

* fix(translator): enable Claude extended thinking for Copilot Responses-API requests (#2647)

Integrated into release/v3.8.3

* feat(dashboard): add search and filters to /dashboard/api-manager (#2641)

Integrated into release/v3.8.3

* feat(dashboard): risk notice modal for sensitive providers (#2638)

Integrated into release/v3.8.3

* feat(dashboard): mini-playground inline (Phase 4) (#2648)

Integrated into release/v3.8.3

* fix(settings): fix Require Login modal Cancel button text and dismissal (#2649)

Integrated into release/v3.8.3

* feat(combos): universal context handoff for cross-model conversation continuity (#2653)

Integrated into release/v3.8.3

* chore(release): bump to v3.8.3 — changelog, docs, version sync

* feat(i18n): complete zh-CN translations for 1220 missing keys (#2655)

Integrated into release/v3.8.3

* chore(release): include electron package changes in v3.8.3

* docs(changelog): integrate PR #2655 into v3.8.3

* feat(i18n): translate 377 additional zh-CN entries (81 new keys + 296 same-as-en) (#2659)

Integrated into release/v3.8.3

* feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation (#2656)

Integrated into release/v3.8.3

* docs: update changelog for PR integrations under v3.8.3

* feat(cli): integrate native updates, autostart and headless CLI mode (#2662)

Integrated into release/v3.8.3

* fix(proxy): save dashboard custom proxies in registry (#2661)

Integrated into release/v3.8.3

* feat(dashboard): chat-first test slide-over (Option A) (#2660)

Integrated into release/v3.8.3

* docs: update changelog with Batch 2 PR merges for v3.8.3

* fix: add xhigh+max to effortLevel schema; add opencode-plugin publish job (#2666)

Integrated into release/v3.8.3

* docs: update changelog with Batch 3 PR #2666 merge for v3.8.3

* feat(quota+providers): card-grid layout, provider group headers, Codex race fix (#2667)

Integrated into release/v3.8.3

* feat(dashboard): real-time live WebSocket monitoring (#2668)

Integrated into release/v3.8.3

* feat(copilot): AI assistant with CodeGraph + CLI + knowledge base (#2669)

Integrated into release/v3.8.3

* feat(pipeline): pre-request middleware hooks (#2670)

Integrated into release/v3.8.3

* feat(resilience): credential health check + adaptive circuit breaker (#2671)

Integrated into release/v3.8.3

* feat(playground): combo routing visual simulator (#2672)

Integrated into release/v3.8.3

* feat(auth): API key groups with model-level permissions (#2673)

Integrated into release/v3.8.3

* feat(pwa): enhanced manifest + push notification support (#2674)

Integrated into release/v3.8.3

* feat(proxy): serverless relay endpoints with rate limiting (#2675)

Integrated into release/v3.8.3

* docs(changelog): update changelog for PRs 2667-2675 & fix: resolve typescript compile-time errors

* fix(db): remove transactions from migrations

Remove explicit transaction wrappers from recent migrations and correct
the API key groups migration metadata. Also fix codegraph path resolution
for ESM environments and refresh generated fumadocs source output.

---------

Co-authored-by: Ömer Vehbe <ovehbe@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Mr. Meowgi <mr@meowgi.dev>
Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com>
Co-authored-by: amogus22877769 <y.lev357@gmail.com>
Co-authored-by: Halil Tezcan KARABULUT <info@hlltzcnkb.com>
Co-authored-by: Tentoxa <53821604+Tentoxa@users.noreply.github.com>
Co-authored-by: HALDRO <121296348+HALDRO@users.noreply.github.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: janeza2 <49841619+janeza2@users.noreply.github.com>
Co-authored-by: df4p <38404+df4p@users.noreply.github.com>
Co-authored-by: ivan-mezentsev <ivan@mezentsev.me>
Co-authored-by: Chewji <126886556+Chewji9875@users.noreply.github.com>
Co-authored-by: L-aros <107354918+L-aros@users.noreply.github.com>
Co-authored-by: M.M <mr.maatoug@gmail.com>
Co-authored-by: Benson K B <bensonkbmca@gmail.com>
Co-authored-by: terence71-glitch <mcdowellterence71@gmail.com>
HouMinXi pushed a commit to HouMinXi/OmniRoute that referenced this pull request Aug 2, 2026
* chore(config): ignore additional agent workflow command files

Add newly introduced agent workflow and Claude command files to
.gitignore so proprietary automation assets are not committed.

* feat(deepseek-web): fix auth to use userToken + WASM PoW solver

Rewrite deepseek-web executor from broken cookie auth to userToken
Bearer flow (like Chat2API). Replace pure JS Keccak PoW with WASM
solver (5.8s → 86ms). Add 14 models, validation, and dashboard UX.

* fix(deepseek-web): update target_path to use challenge property

* refactor(deepseek-web): streamline token handling and implement cache eviction

* fix(deepseek-web): fix SSE parser, prompt format, and error handling

- Handle all 3 DeepSeek SSE stream formats: initial fragments,
  APPEND operations, and bare string tokens (fixes truncated responses)
- Simplify prompt builder to send system + last user message only
  (DeepSeek web API is single-turn, full history caused marker leakage)
- Check json.code before token extraction (fixes "did not return
  access token: Authorization" on code 40003 with HTTP 200)
- Clear session cache alongside token cache on auth errors
- Add dev origin for remote testing

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore: ignore memory-bank and cursor agent rules from tracking

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat: enhance documentation and configuration for Fumadocs integration

- Added Fumadocs MDX support in the Next.js configuration.
- Updated transpile packages to include fumadocs-ui and fumadocs-core.
- Implemented a comprehensive set of redirects for documentation paths to improve navigation.
- Removed the generate-docs-index script as it is no longer needed.
- Updated various documentation titles for consistency and clarity.
- Enhanced global styles to incorporate Fumadocs UI themes and styles.

* refactor(docs): cleanup fumadocs PR — revert deepseek, add i18n fallback, restore LanguageSelector

- Revert unrelated deepseek-web.ts changes (should be separate PR)
- Add .source/ to .gitignore (Fumadocs generated files)
- Remove contributor IP from allowedDevOrigins
- Add i18n runtime fallback: reads NEXT_LOCALE cookie, loads translated
  .md from docs/i18n/<locale>/docs/ (preserves existing translation pipeline)
- Restore LanguageSelector in Fumadocs layout nav
- Restore SEO metadata (title template, description, robots)

* fix(codex): use allowlist to strip non-Responses-API fields in non-passthrough path (cheaper-inference#2608) (cheaper-inference#2615)

Integrated into release/v3.8.3 — fix(codex): allowlist-based sanitization for gpt-5.5 Responses API

* fix(deepseek-web): fix SSE parser, prompt format, error handling, and cache keys (cheaper-inference#2616)

Integrated into release/v3.8.3 — fix(deepseek-web): SSE parser (APPEND + bare tokens), prompt builder, error handling, session cache cleanup

* chore(config): ignore additional agent workflow command files

Add newly introduced agent workflow and Claude command files to
.gitignore so proprietary automation assets are not committed.

* feat(docs): migrate /docs to Fumadocs MDX with nested routes (cheaper-inference#2614)

Integrated into release/v3.8.3 — Fumadocs MDX migration with nested routes, search API, and 50+ URL redirects

* fix(catalog): skip static PROVIDER_MODELS when synced models exist (cheaper-inference#2625)

Integrated into release/v3.8.3

* fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus (cheaper-inference#2629)

Integrated into release/v3.8.3

* fix(cli): register tsx loader and add opencode config subcommand (cheaper-inference#2631)

Integrated into release/v3.8.3

* feat(dashboard): add search and filters to /dashboard/api-manager (cheaper-inference#2628)

Integrated into release/v3.8.3

* fix(claude): improve Pi and OpenCode compatibility (cheaper-inference#2621)

Integrated into release/v3.8.3

* fix: restore semantic passthrough system-role-only extraction instead of full normalization (cheaper-inference#2620)

Integrated into release/v3.8.3

* fix(kiro): stabilize conversationId across prompt compression (cheaper-inference#2630)

Integrated into release/v3.8.3

* fix(deepseek-web): SSE thinking/search routing and session lifecycle (cheaper-inference#2624)

Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul

* feat(dashboard): free-tier grouping with symbolic link in /providers (cheaper-inference#2632)

Integrated into release/v3.8.3

* fix: close implementation gaps — t3-chat-web, stream_options, combo_strategy, batch config (cheaper-inference#2634)

Integrated into release/v3.8.3

* feat(dashboard): risk notice modal for sensitive providers (cheaper-inference#2633)

Integrated into release/v3.8.3

* fix(reasoning): extend reasoning_content injection to Kimi K2 and other replay models (cheaper-inference#2639)

Integrated into release/v3.8.3

* fix(cli): Linux autostart via systemd user service (fixes cheaper-inference#2627) (cheaper-inference#2635)

Integrated into release/v3.8.3

* Refactor/providers free tier (cheaper-inference#2640)

Integrated into release/v3.8.3

* fix(tests): remove duplicate assertion in schema coercion & fix(cli): ignore system vars in env check

* fix(combo): preserve omniModel tag in streaming output for round-trip context pinning (cheaper-inference#2646)

Integrated into release/v3.8.3

* feat(dashboard): media providers pages + Web Fetch category (cheaper-inference#2645)

Integrated into release/v3.8.3

* Feature provider adapta org com tutorial de conexão em modal (cheaper-inference#2643)

Integrated into release/v3.8.3

* fix(rtk): skip content-based filter matching for non-shell tool results (cheaper-inference#2642)

Integrated into release/v3.8.3

* fix(translator): enable Claude extended thinking for Copilot Responses-API requests (cheaper-inference#2647)

Integrated into release/v3.8.3

* feat(dashboard): add search and filters to /dashboard/api-manager (cheaper-inference#2641)

Integrated into release/v3.8.3

* feat(dashboard): risk notice modal for sensitive providers (cheaper-inference#2638)

Integrated into release/v3.8.3

* feat(dashboard): mini-playground inline (Phase 4) (cheaper-inference#2648)

Integrated into release/v3.8.3

* fix(settings): fix Require Login modal Cancel button text and dismissal (cheaper-inference#2649)

Integrated into release/v3.8.3

* feat(combos): universal context handoff for cross-model conversation continuity (cheaper-inference#2653)

Integrated into release/v3.8.3

* chore(release): bump to v3.8.3 — changelog, docs, version sync

* feat(i18n): complete zh-CN translations for 1220 missing keys (cheaper-inference#2655)

Integrated into release/v3.8.3

* chore(release): include electron package changes in v3.8.3

* docs(changelog): integrate PR cheaper-inference#2655 into v3.8.3

* feat(i18n): translate 377 additional zh-CN entries (81 new keys + 296 same-as-en) (cheaper-inference#2659)

Integrated into release/v3.8.3

* feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation (cheaper-inference#2656)

Integrated into release/v3.8.3

* docs: update changelog for PR integrations under v3.8.3

* feat(cli): integrate native updates, autostart and headless CLI mode (cheaper-inference#2662)

Integrated into release/v3.8.3

* fix(proxy): save dashboard custom proxies in registry (cheaper-inference#2661)

Integrated into release/v3.8.3

* feat(dashboard): chat-first test slide-over (Option A) (cheaper-inference#2660)

Integrated into release/v3.8.3

* docs: update changelog with Batch 2 PR merges for v3.8.3

* fix: add xhigh+max to effortLevel schema; add opencode-plugin publish job (cheaper-inference#2666)

Integrated into release/v3.8.3

* docs: update changelog with Batch 3 PR cheaper-inference#2666 merge for v3.8.3

* feat(quota+providers): card-grid layout, provider group headers, Codex race fix (cheaper-inference#2667)

Integrated into release/v3.8.3

* feat(dashboard): real-time live WebSocket monitoring (cheaper-inference#2668)

Integrated into release/v3.8.3

* feat(copilot): AI assistant with CodeGraph + CLI + knowledge base (cheaper-inference#2669)

Integrated into release/v3.8.3

* feat(pipeline): pre-request middleware hooks (cheaper-inference#2670)

Integrated into release/v3.8.3

* feat(resilience): credential health check + adaptive circuit breaker (cheaper-inference#2671)

Integrated into release/v3.8.3

* feat(playground): combo routing visual simulator (cheaper-inference#2672)

Integrated into release/v3.8.3

* feat(auth): API key groups with model-level permissions (cheaper-inference#2673)

Integrated into release/v3.8.3

* feat(pwa): enhanced manifest + push notification support (cheaper-inference#2674)

Integrated into release/v3.8.3

* feat(proxy): serverless relay endpoints with rate limiting (cheaper-inference#2675)

Integrated into release/v3.8.3

* docs(changelog): update changelog for PRs 2667-2675 & fix: resolve typescript compile-time errors

* fix(db): remove transactions from migrations

Remove explicit transaction wrappers from recent migrations and correct
the API key groups migration metadata. Also fix codegraph path resolution
for ESM environments and refresh generated fumadocs source output.

---------

Co-authored-by: Ömer Vehbe <ovehbe@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Mr. Meowgi <mr@meowgi.dev>
Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com>
Co-authored-by: amogus22877769 <y.lev357@gmail.com>
Co-authored-by: Halil Tezcan KARABULUT <info@hlltzcnkb.com>
Co-authored-by: Tentoxa <53821604+Tentoxa@users.noreply.github.com>
Co-authored-by: HALDRO <121296348+HALDRO@users.noreply.github.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: janeza2 <49841619+janeza2@users.noreply.github.com>
Co-authored-by: df4p <38404+df4p@users.noreply.github.com>
Co-authored-by: ivan-mezentsev <ivan@mezentsev.me>
Co-authored-by: Chewji <126886556+Chewji9875@users.noreply.github.com>
Co-authored-by: L-aros <107354918+L-aros@users.noreply.github.com>
Co-authored-by: M.M <mr.maatoug@gmail.com>
Co-authored-by: Benson K B <bensonkbmca@gmail.com>
Co-authored-by: terence71-glitch <mcdowellterence71@gmail.com>
Poid-ZA pushed a commit to Poid-ZA/OmniRoute that referenced this pull request Aug 5, 2026
* chore(config): ignore additional agent workflow command files

Add newly introduced agent workflow and Claude command files to
.gitignore so proprietary automation assets are not committed.

* feat(deepseek-web): fix auth to use userToken + WASM PoW solver

Rewrite deepseek-web executor from broken cookie auth to userToken
Bearer flow (like Chat2API). Replace pure JS Keccak PoW with WASM
solver (5.8s → 86ms). Add 14 models, validation, and dashboard UX.

* fix(deepseek-web): update target_path to use challenge property

* refactor(deepseek-web): streamline token handling and implement cache eviction

* fix(deepseek-web): fix SSE parser, prompt format, and error handling

- Handle all 3 DeepSeek SSE stream formats: initial fragments,
  APPEND operations, and bare string tokens (fixes truncated responses)
- Simplify prompt builder to send system + last user message only
  (DeepSeek web API is single-turn, full history caused marker leakage)
- Check json.code before token extraction (fixes "did not return
  access token: Authorization" on code 40003 with HTTP 200)
- Clear session cache alongside token cache on auth errors
- Add dev origin for remote testing

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore: ignore memory-bank and cursor agent rules from tracking

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat: enhance documentation and configuration for Fumadocs integration

- Added Fumadocs MDX support in the Next.js configuration.
- Updated transpile packages to include fumadocs-ui and fumadocs-core.
- Implemented a comprehensive set of redirects for documentation paths to improve navigation.
- Removed the generate-docs-index script as it is no longer needed.
- Updated various documentation titles for consistency and clarity.
- Enhanced global styles to incorporate Fumadocs UI themes and styles.

* refactor(docs): cleanup fumadocs PR — revert deepseek, add i18n fallback, restore LanguageSelector

- Revert unrelated deepseek-web.ts changes (should be separate PR)
- Add .source/ to .gitignore (Fumadocs generated files)
- Remove contributor IP from allowedDevOrigins
- Add i18n runtime fallback: reads NEXT_LOCALE cookie, loads translated
  .md from docs/i18n/<locale>/docs/ (preserves existing translation pipeline)
- Restore LanguageSelector in Fumadocs layout nav
- Restore SEO metadata (title template, description, robots)

* fix(codex): use allowlist to strip non-Responses-API fields in non-passthrough path (cheaper-inference#2608) (cheaper-inference#2615)

Integrated into release/v3.8.3 — fix(codex): allowlist-based sanitization for gpt-5.5 Responses API

* fix(deepseek-web): fix SSE parser, prompt format, error handling, and cache keys (cheaper-inference#2616)

Integrated into release/v3.8.3 — fix(deepseek-web): SSE parser (APPEND + bare tokens), prompt builder, error handling, session cache cleanup

* chore(config): ignore additional agent workflow command files

Add newly introduced agent workflow and Claude command files to
.gitignore so proprietary automation assets are not committed.

* feat(docs): migrate /docs to Fumadocs MDX with nested routes (cheaper-inference#2614)

Integrated into release/v3.8.3 — Fumadocs MDX migration with nested routes, search API, and 50+ URL redirects

* fix(catalog): skip static PROVIDER_MODELS when synced models exist (cheaper-inference#2625)

Integrated into release/v3.8.3

* fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus (cheaper-inference#2629)

Integrated into release/v3.8.3

* fix(cli): register tsx loader and add opencode config subcommand (cheaper-inference#2631)

Integrated into release/v3.8.3

* feat(dashboard): add search and filters to /dashboard/api-manager (cheaper-inference#2628)

Integrated into release/v3.8.3

* fix(claude): improve Pi and OpenCode compatibility (cheaper-inference#2621)

Integrated into release/v3.8.3

* fix: restore semantic passthrough system-role-only extraction instead of full normalization (cheaper-inference#2620)

Integrated into release/v3.8.3

* fix(kiro): stabilize conversationId across prompt compression (cheaper-inference#2630)

Integrated into release/v3.8.3

* fix(deepseek-web): SSE thinking/search routing and session lifecycle (cheaper-inference#2624)

Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul

* feat(dashboard): free-tier grouping with symbolic link in /providers (cheaper-inference#2632)

Integrated into release/v3.8.3

* fix: close implementation gaps — t3-chat-web, stream_options, combo_strategy, batch config (cheaper-inference#2634)

Integrated into release/v3.8.3

* feat(dashboard): risk notice modal for sensitive providers (cheaper-inference#2633)

Integrated into release/v3.8.3

* fix(reasoning): extend reasoning_content injection to Kimi K2 and other replay models (cheaper-inference#2639)

Integrated into release/v3.8.3

* fix(cli): Linux autostart via systemd user service (fixes cheaper-inference#2627) (cheaper-inference#2635)

Integrated into release/v3.8.3

* Refactor/providers free tier (cheaper-inference#2640)

Integrated into release/v3.8.3

* fix(tests): remove duplicate assertion in schema coercion & fix(cli): ignore system vars in env check

* fix(combo): preserve omniModel tag in streaming output for round-trip context pinning (cheaper-inference#2646)

Integrated into release/v3.8.3

* feat(dashboard): media providers pages + Web Fetch category (cheaper-inference#2645)

Integrated into release/v3.8.3

* Feature provider adapta org com tutorial de conexão em modal (cheaper-inference#2643)

Integrated into release/v3.8.3

* fix(rtk): skip content-based filter matching for non-shell tool results (cheaper-inference#2642)

Integrated into release/v3.8.3

* fix(translator): enable Claude extended thinking for Copilot Responses-API requests (cheaper-inference#2647)

Integrated into release/v3.8.3

* feat(dashboard): add search and filters to /dashboard/api-manager (cheaper-inference#2641)

Integrated into release/v3.8.3

* feat(dashboard): risk notice modal for sensitive providers (cheaper-inference#2638)

Integrated into release/v3.8.3

* feat(dashboard): mini-playground inline (Phase 4) (cheaper-inference#2648)

Integrated into release/v3.8.3

* fix(settings): fix Require Login modal Cancel button text and dismissal (cheaper-inference#2649)

Integrated into release/v3.8.3

* feat(combos): universal context handoff for cross-model conversation continuity (cheaper-inference#2653)

Integrated into release/v3.8.3

* chore(release): bump to v3.8.3 — changelog, docs, version sync

* feat(i18n): complete zh-CN translations for 1220 missing keys (cheaper-inference#2655)

Integrated into release/v3.8.3

* chore(release): include electron package changes in v3.8.3

* docs(changelog): integrate PR cheaper-inference#2655 into v3.8.3

* feat(i18n): translate 377 additional zh-CN entries (81 new keys + 296 same-as-en) (cheaper-inference#2659)

Integrated into release/v3.8.3

* feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation (cheaper-inference#2656)

Integrated into release/v3.8.3

* docs: update changelog for PR integrations under v3.8.3

* feat(cli): integrate native updates, autostart and headless CLI mode (cheaper-inference#2662)

Integrated into release/v3.8.3

* fix(proxy): save dashboard custom proxies in registry (cheaper-inference#2661)

Integrated into release/v3.8.3

* feat(dashboard): chat-first test slide-over (Option A) (cheaper-inference#2660)

Integrated into release/v3.8.3

* docs: update changelog with Batch 2 PR merges for v3.8.3

* fix: add xhigh+max to effortLevel schema; add opencode-plugin publish job (cheaper-inference#2666)

Integrated into release/v3.8.3

* docs: update changelog with Batch 3 PR cheaper-inference#2666 merge for v3.8.3

* feat(quota+providers): card-grid layout, provider group headers, Codex race fix (cheaper-inference#2667)

Integrated into release/v3.8.3

* feat(dashboard): real-time live WebSocket monitoring (cheaper-inference#2668)

Integrated into release/v3.8.3

* feat(copilot): AI assistant with CodeGraph + CLI + knowledge base (cheaper-inference#2669)

Integrated into release/v3.8.3

* feat(pipeline): pre-request middleware hooks (cheaper-inference#2670)

Integrated into release/v3.8.3

* feat(resilience): credential health check + adaptive circuit breaker (cheaper-inference#2671)

Integrated into release/v3.8.3

* feat(playground): combo routing visual simulator (cheaper-inference#2672)

Integrated into release/v3.8.3

* feat(auth): API key groups with model-level permissions (cheaper-inference#2673)

Integrated into release/v3.8.3

* feat(pwa): enhanced manifest + push notification support (cheaper-inference#2674)

Integrated into release/v3.8.3

* feat(proxy): serverless relay endpoints with rate limiting (cheaper-inference#2675)

Integrated into release/v3.8.3

* docs(changelog): update changelog for PRs 2667-2675 & fix: resolve typescript compile-time errors

* fix(db): remove transactions from migrations

Remove explicit transaction wrappers from recent migrations and correct
the API key groups migration metadata. Also fix codegraph path resolution
for ESM environments and refresh generated fumadocs source output.

---------

Co-authored-by: Ömer Vehbe <ovehbe@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Mr. Meowgi <mr@meowgi.dev>
Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com>
Co-authored-by: amogus22877769 <y.lev357@gmail.com>
Co-authored-by: Halil Tezcan KARABULUT <info@hlltzcnkb.com>
Co-authored-by: Tentoxa <53821604+Tentoxa@users.noreply.github.com>
Co-authored-by: HALDRO <121296348+HALDRO@users.noreply.github.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: janeza2 <49841619+janeza2@users.noreply.github.com>
Co-authored-by: df4p <38404+df4p@users.noreply.github.com>
Co-authored-by: ivan-mezentsev <ivan@mezentsev.me>
Co-authored-by: Chewji <126886556+Chewji9875@users.noreply.github.com>
Co-authored-by: L-aros <107354918+L-aros@users.noreply.github.com>
Co-authored-by: M.M <mr.maatoug@gmail.com>
Co-authored-by: Benson K B <bensonkbmca@gmail.com>
Co-authored-by: terence71-glitch <mcdowellterence71@gmail.com>
tkgo11 pushed a commit to tkgo11/OmniRoute that referenced this pull request Sep 23, 2026
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
* chore(config): ignore additional agent workflow command files

Add newly introduced agent workflow and Claude command files to
.gitignore so proprietary automation assets are not committed.

* feat(deepseek-web): fix auth to use userToken + WASM PoW solver

Rewrite deepseek-web executor from broken cookie auth to userToken
Bearer flow (like Chat2API). Replace pure JS Keccak PoW with WASM
solver (5.8s → 86ms). Add 14 models, validation, and dashboard UX.

* fix(deepseek-web): update target_path to use challenge property

* refactor(deepseek-web): streamline token handling and implement cache eviction

* fix(deepseek-web): fix SSE parser, prompt format, and error handling

- Handle all 3 DeepSeek SSE stream formats: initial fragments,
  APPEND operations, and bare string tokens (fixes truncated responses)
- Simplify prompt builder to send system + last user message only
  (DeepSeek web API is single-turn, full history caused marker leakage)
- Check json.code before token extraction (fixes "did not return
  access token: Authorization" on code 40003 with HTTP 200)
- Clear session cache alongside token cache on auth errors
- Add dev origin for remote testing

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore: ignore memory-bank and cursor agent rules from tracking

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat: enhance documentation and configuration for Fumadocs integration

- Added Fumadocs MDX support in the Next.js configuration.
- Updated transpile packages to include fumadocs-ui and fumadocs-core.
- Implemented a comprehensive set of redirects for documentation paths to improve navigation.
- Removed the generate-docs-index script as it is no longer needed.
- Updated various documentation titles for consistency and clarity.
- Enhanced global styles to incorporate Fumadocs UI themes and styles.

* refactor(docs): cleanup fumadocs PR — revert deepseek, add i18n fallback, restore LanguageSelector

- Revert unrelated deepseek-web.ts changes (should be separate PR)
- Add .source/ to .gitignore (Fumadocs generated files)
- Remove contributor IP from allowedDevOrigins
- Add i18n runtime fallback: reads NEXT_LOCALE cookie, loads translated
  .md from docs/i18n/<locale>/docs/ (preserves existing translation pipeline)
- Restore LanguageSelector in Fumadocs layout nav
- Restore SEO metadata (title template, description, robots)

* fix(codex): use allowlist to strip non-Responses-API fields in non-passthrough path (cheaper-inference#2608) (cheaper-inference#2615)

Integrated into release/v3.8.3 — fix(codex): allowlist-based sanitization for gpt-5.5 Responses API

* fix(deepseek-web): fix SSE parser, prompt format, error handling, and cache keys (cheaper-inference#2616)

Integrated into release/v3.8.3 — fix(deepseek-web): SSE parser (APPEND + bare tokens), prompt builder, error handling, session cache cleanup

* chore(config): ignore additional agent workflow command files

Add newly introduced agent workflow and Claude command files to
.gitignore so proprietary automation assets are not committed.

* feat(docs): migrate /docs to Fumadocs MDX with nested routes (cheaper-inference#2614)

Integrated into release/v3.8.3 — Fumadocs MDX migration with nested routes, search API, and 50+ URL redirects

* fix(catalog): skip static PROVIDER_MODELS when synced models exist (cheaper-inference#2625)

Integrated into release/v3.8.3

* fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus (cheaper-inference#2629)

Integrated into release/v3.8.3

* fix(cli): register tsx loader and add opencode config subcommand (cheaper-inference#2631)

Integrated into release/v3.8.3

* feat(dashboard): add search and filters to /dashboard/api-manager (cheaper-inference#2628)

Integrated into release/v3.8.3

* fix(claude): improve Pi and OpenCode compatibility (cheaper-inference#2621)

Integrated into release/v3.8.3

* fix: restore semantic passthrough system-role-only extraction instead of full normalization (cheaper-inference#2620)

Integrated into release/v3.8.3

* fix(kiro): stabilize conversationId across prompt compression (cheaper-inference#2630)

Integrated into release/v3.8.3

* fix(deepseek-web): SSE thinking/search routing and session lifecycle (cheaper-inference#2624)

Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul

* feat(dashboard): free-tier grouping with symbolic link in /providers (cheaper-inference#2632)

Integrated into release/v3.8.3

* fix: close implementation gaps — t3-chat-web, stream_options, combo_strategy, batch config (cheaper-inference#2634)

Integrated into release/v3.8.3

* feat(dashboard): risk notice modal for sensitive providers (cheaper-inference#2633)

Integrated into release/v3.8.3

* fix(reasoning): extend reasoning_content injection to Kimi K2 and other replay models (cheaper-inference#2639)

Integrated into release/v3.8.3

* fix(cli): Linux autostart via systemd user service (fixes cheaper-inference#2627) (cheaper-inference#2635)

Integrated into release/v3.8.3

* Refactor/providers free tier (cheaper-inference#2640)

Integrated into release/v3.8.3

* fix(tests): remove duplicate assertion in schema coercion & fix(cli): ignore system vars in env check

* fix(combo): preserve omniModel tag in streaming output for round-trip context pinning (cheaper-inference#2646)

Integrated into release/v3.8.3

* feat(dashboard): media providers pages + Web Fetch category (cheaper-inference#2645)

Integrated into release/v3.8.3

* Feature provider adapta org com tutorial de conexão em modal (cheaper-inference#2643)

Integrated into release/v3.8.3

* fix(rtk): skip content-based filter matching for non-shell tool results (cheaper-inference#2642)

Integrated into release/v3.8.3

* fix(translator): enable Claude extended thinking for Copilot Responses-API requests (cheaper-inference#2647)

Integrated into release/v3.8.3

* feat(dashboard): add search and filters to /dashboard/api-manager (cheaper-inference#2641)

Integrated into release/v3.8.3

* feat(dashboard): risk notice modal for sensitive providers (cheaper-inference#2638)

Integrated into release/v3.8.3

* feat(dashboard): mini-playground inline (Phase 4) (cheaper-inference#2648)

Integrated into release/v3.8.3

* fix(settings): fix Require Login modal Cancel button text and dismissal (cheaper-inference#2649)

Integrated into release/v3.8.3

* feat(combos): universal context handoff for cross-model conversation continuity (cheaper-inference#2653)

Integrated into release/v3.8.3

* chore(release): bump to v3.8.3 — changelog, docs, version sync

* feat(i18n): complete zh-CN translations for 1220 missing keys (cheaper-inference#2655)

Integrated into release/v3.8.3

* chore(release): include electron package changes in v3.8.3

* docs(changelog): integrate PR cheaper-inference#2655 into v3.8.3

* feat(i18n): translate 377 additional zh-CN entries (81 new keys + 296 same-as-en) (cheaper-inference#2659)

Integrated into release/v3.8.3

* feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation (cheaper-inference#2656)

Integrated into release/v3.8.3

* docs: update changelog for PR integrations under v3.8.3

* feat(cli): integrate native updates, autostart and headless CLI mode (cheaper-inference#2662)

Integrated into release/v3.8.3

* fix(proxy): save dashboard custom proxies in registry (cheaper-inference#2661)

Integrated into release/v3.8.3

* feat(dashboard): chat-first test slide-over (Option A) (cheaper-inference#2660)

Integrated into release/v3.8.3

* docs: update changelog with Batch 2 PR merges for v3.8.3

* fix: add xhigh+max to effortLevel schema; add opencode-plugin publish job (cheaper-inference#2666)

Integrated into release/v3.8.3

* docs: update changelog with Batch 3 PR cheaper-inference#2666 merge for v3.8.3

* feat(quota+providers): card-grid layout, provider group headers, Codex race fix (cheaper-inference#2667)

Integrated into release/v3.8.3

* feat(dashboard): real-time live WebSocket monitoring (cheaper-inference#2668)

Integrated into release/v3.8.3

* feat(copilot): AI assistant with CodeGraph + CLI + knowledge base (cheaper-inference#2669)

Integrated into release/v3.8.3

* feat(pipeline): pre-request middleware hooks (cheaper-inference#2670)

Integrated into release/v3.8.3

* feat(resilience): credential health check + adaptive circuit breaker (cheaper-inference#2671)

Integrated into release/v3.8.3

* feat(playground): combo routing visual simulator (cheaper-inference#2672)

Integrated into release/v3.8.3

* feat(auth): API key groups with model-level permissions (cheaper-inference#2673)

Integrated into release/v3.8.3

* feat(pwa): enhanced manifest + push notification support (cheaper-inference#2674)

Integrated into release/v3.8.3

* feat(proxy): serverless relay endpoints with rate limiting (cheaper-inference#2675)

Integrated into release/v3.8.3

* docs(changelog): update changelog for PRs 2667-2675 & fix: resolve typescript compile-time errors

* fix(db): remove transactions from migrations

Remove explicit transaction wrappers from recent migrations and correct
the API key groups migration metadata. Also fix codegraph path resolution
for ESM environments and refresh generated fumadocs source output.

---------

Co-authored-by: Ömer Vehbe <ovehbe@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Mr. Meowgi <mr@meowgi.dev>
Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com>
Co-authored-by: amogus22877769 <y.lev357@gmail.com>
Co-authored-by: Halil Tezcan KARABULUT <info@hlltzcnkb.com>
Co-authored-by: Tentoxa <53821604+Tentoxa@users.noreply.github.com>
Co-authored-by: HALDRO <121296348+HALDRO@users.noreply.github.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: janeza2 <49841619+janeza2@users.noreply.github.com>
Co-authored-by: df4p <38404+df4p@users.noreply.github.com>
Co-authored-by: ivan-mezentsev <ivan@mezentsev.me>
Co-authored-by: Chewji <126886556+Chewji9875@users.noreply.github.com>
Co-authored-by: L-aros <107354918+L-aros@users.noreply.github.com>
Co-authored-by: M.M <mr.maatoug@gmail.com>
Co-authored-by: Benson K B <bensonkbmca@gmail.com>
Co-authored-by: terence71-glitch <mcdowellterence71@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants