Repository navigation
feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation - #2656
diegosouzapw merged 17 commits into
Conversation
…ation Adds a quick-access command palette to the dashboard, triggered with Cmd+K (macOS) / Ctrl+K (Linux/Windows). It exposes every visible sidebar item (across all sections) as a searchable, keyboard-navigable list — letting users jump to any page without reaching for the mouse. Behavior: - Cmd+K / Ctrl+K toggles the palette from anywhere inside DashboardLayout - ArrowUp / ArrowDown to move selection (wraps), Enter to navigate - Escape (or backdrop click) to close - Substring match against item label + subtitle (case-insensitive) - Respects per-user hidden sidebar items (via /api/settings) - External links (e.g. docs) open in a new tab with noopener/noreferrer - Uses next-intl translations from the existing 'sidebar' namespace, with safe fallback to the item id when a key is missing Implementation notes: - CommandPalette has a thin outer wrapper that returns null when closed and mounts an inner CommandPaletteDialog only while open — this keeps all hooks unconditional and avoids React Compiler strict-mode violations (no setState-in-effect, no ref reads during render) - AbortController wraps the /api/settings fetch so unmount cancels it - useMemo for derived items + filtered list to avoid recomputation - Material Symbols icons reused from sidebar definitions for visual parity with the sidebar itself
|
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. |
There was a problem hiding this comment.
Code Review
This pull request introduces a new CommandPalette component to the dashboard, allowing users to search and navigate through sidebar items using a global Cmd/Ctrl+K shortcut. Feedback focuses on adhering to the repository's testing requirements for new production code, optimizing data fetching for settings to prevent redundant network requests, and internationalizing hardcoded UI strings. Additionally, a code suggestion was provided to ensure the keyboard shortcut works consistently even when Caps Lock is active.
| onClose: () => void; | ||
| } | ||
|
|
||
| export default function CommandPalette({ isOpen, onClose }: CommandPaletteProps) { |
There was a problem hiding this comment.
The repository style guide (Rule 9) requires that all changes to production code in src/ include corresponding tests. Please add unit tests for this new component (e.g., in tests/unit/CommandPalette.test.tsx) to verify its rendering, search filtering, and keyboard navigation logic.
References
- Always include tests when changing production code (src/, open-sse/, electron/, bin/). (link)
| useEffect(() => { | ||
| const ctrl = new AbortController(); | ||
| fetch("/api/settings", { signal: ctrl.signal }) | ||
| .then((res) => res.json()) | ||
| .then((data) => { | ||
| setHiddenItems( | ||
| new Set(normalizeHiddenSidebarItems(data?.[HIDDEN_SIDEBAR_ITEMS_SETTING_KEY])) | ||
| ); | ||
| }) | ||
| .catch(() => { | ||
| // ignore aborts and fetch failures; palette still works with empty hidden set | ||
| }); | ||
| return () => ctrl.abort(); | ||
| }, []); |
There was a problem hiding this comment.
The /api/settings endpoint is fetched every time the command palette is opened because the CommandPaletteDialog component is unmounted when closed. This results in redundant network requests. Consider lifting this state to a context provider or using a data-fetching hook with caching (like SWR or TanStack Query) to improve efficiency.
| ref={inputRef} | ||
| type="text" | ||
| className="flex-1 bg-transparent text-text placeholder:text-text-muted outline-none text-sm" | ||
| placeholder="Go to..." |
|
|
||
| useEffect(() => { | ||
| const handleKeyDown = (e: KeyboardEvent) => { | ||
| if ((e.metaKey || e.ctrlKey) && e.key === "k") { |
There was a problem hiding this comment.
- Surface the Cmd+K / Ctrl+K shortcut as a clickable 'Quick nav' pill in the Header right-actions cluster, with a platform-aware kbd badge (⌘K on macOS, Ctrl+K elsewhere). Falls back to an icon-only button on mobile widths. Detection uses useSyncExternalStore so it works in SSR without violating the React Compiler 'no setState in effect' rule. - Align CommandPalette visuals with the Modal design tokens: bg-surface instead of bg-bg, rounded-xl instead of rounded-2xl, and the same animate-in fade-in zoom-in-95 entrance. - Add ring-1 ring-inset ring-accent/20 to the selected row for clearer keyboard focus. - Wire DashboardLayout to pass onOpenCommandPalette to Header so the same setCommandPaletteOpen state drives both the shortcut and the click trigger.
…nputs Bumps the command palette from max-w-lg to max-w-3xl, raises the result list cap to 60vh, increases search input padding (px-6/py-4) and font-size (text-base), and updates the placeholder copy. Brings the palette in line with full-popup form patterns used elsewhere in the dashboard.
Items in the command palette are now visually grouped under sticky section headers (Home, Omni Proxy, Analytics, Monitoring, Dev Tools, Agentic, Gamification, Other Features, Configuration, Help) mirroring the sidebar's IA. - Section titles resolved via 'sidebar' i18n namespace with fallback. - Search now also matches section labels (so typing 'mon' shows the Monitoring section, etc.). - Keyboard navigation remains a single flat list across all groups; selection is tracked by a stable flat index attached as a data attr so scroll-into-view keeps working through grouped headers.
Mirror the sidebar's two-level grouping in the command palette: section header (Omni Proxy, Configuration, etc.) + optional inner subgroup header (Compression Context, Tools, Integrations, Proxy, Costs Parameters, Audit) when sidebar children are SidebarItemGroups. - Iterate section.children directly so SidebarItemGroup is preserved instead of being flattened by getSectionItems(). - PaletteItem now carries subgroupId/subgroupLabel when applicable. - Search matches sidebar section labels and subgroup labels too: 'compression' bubbles up the whole Compression Context block. - Grouped render is two-level: sticky section header on top of subgroup heads on top of item rows. Items under a subgroup are indented (pl-10) to match the sidebar visual hierarchy. - Keyboard nav still walks the flat filtered[] array via flatIndex data-attr, unchanged from prior commit.
The /dashboard/providers grid forced 5 columns at >=1280px which made each card 190-260px wide on a 13" MBP. Provider names were truncated to 3-5 chars (Ama..., An..., Cli...) because the inner card row crammed icon, name, risk info, deprecated badge, dot, status badges, toggle and test button on a single line with no flex-wrap. - page.tsx: bump breakpoints from grid-cols-2 sm:3 lg:4 xl:5 to grid-cols-1 sm:2 lg:3 xl:4 2xl:5. The 5-column layout now only kicks in at >=1536px (24" displays); 13" MBP shows a comfortable 3-column layout at lg (>=1024px) and 4-column at xl (>=1280px). - ProviderCard.tsx: switch the inner row from a single flex-row to flex-col gap-2 xl:flex-row xl:items-center xl:justify-between. The right-side cluster (toggle + test button) is now self-end on narrow widths so it sits below the name, which gets the full card width for its truncate.
Clicking a sidebar link now shows a thin gradient progress bar at the top of the viewport while Next.js streams the new route. The bar fades out once the pathname or search params change. - New NavigationProgress component, mounted once from DashboardLayout inside a Suspense boundary (useSearchParams requirement). - Anchor-click listener filters modifier keys, new tabs, downloads, hash links, mailto/tel, cross-origin, and same-URL clicks. - Pathname + searchParams effect treats route completion as the finish signal; smooth ease-out to 100% then fades out. - Tokens: bg-gradient-to-r from-primary via-accent to-primary, matching OmniRoute's OpenClaw coral + indigo accent. - z-[9999] so it sits above all dialogs and the command palette.
Previous layout crammed icon + name + chips + status + badges + toggle + Test
into a single horizontal row, forcing the name to truncate to 3-5 chars at
typical small-screen card widths (200-280px on 13" MBP grids).
Restructure card body into three vertically-stacked rows:
Row 1 (identity): logo + full provider name (wraps, no truncation) +
risk info icon + category dot
Row 2 (capabilities): service-kind chips + compat/deprecated badges
(rendered only when at least one is present)
Row 3 (footer): connection status badges on the left, toggle + Test
button on the right, separated by subtle border-t
All 13 data fields and controls preserved. Name now uses break-words
instead of truncate so multi-word providers like 'GitLab Duo Code
Suggestions' or 'Devin CLI (Officially Unsupported)' stay readable at
narrow widths.
Closes feedback on responsiveness regression visible on 13" MBP.
…ll-width - ProviderCard wrapper now uses h-full + Card class h-full flex flex-col so grid items stretch uniformly (fixes deprecated-tag card taller than siblings). - When inline Test playground expands, the outer wrapper applies col-span-full so the expanded card breaks out of its narrow grid cell and uses the full row width. - LlmChatCard header switched from flex-wrap to a 3-col grid (1fr auto auto) at sm+ so Model and Select-Key labels no longer overlap when rendered in a narrow inline slot; collapses to a single column on very narrow viewports.
- Replace inline Test expansion with a Modal popup (size=lg) so the playground gets a proper full-width surface instead of trying to squeeze into a narrow grid cell. - Drop the col-span-full breakout hack from the card wrapper. - Row 2 (capabilities/badges) is now always rendered with min-h, so cards with a Deprecated badge no longer stretch taller than siblings; rows in the grid stay uniform. - Revert LlmChatCard header back to the original flex-wrap layout (no longer needed to compensate for the cramped inline slot).
- Show deprecated state as a single 'block' material-symbols icon in Row 1 header next to the risk and category indicators, instead of a full Row 2 badge that bumped card height for all sibling cards. - Drop the min-h reservation on Row 2 (capabilities row). Row 2 is now conditional again; cards without chips/badges stay compact while still equalizing within a row thanks to the grid stretch + Card h-full from the previous fix. - Footer left cluster switched from flex-wrap to flex-nowrap with overflow-hidden and errorTime truncate, so an Error + errorTime combo no longer pushes the row to two lines and inflates the footer height vs cards without errors.
- Modal sizes up to 'full' (max-w-4xl) so the playground actually has room instead of squeezing inside a small popup. - LlmChatCard gains an 'embedded' prop that drops its outer rounded-border bg-bg-card p-4 wrapper when rendered inside another container (the modal already supplies bg-surface + p-6). Removes the double border and double padding visible in the screenshot. - Embedded mode also expands the messages area to min-h-[200px] / [300px] up to 50vh so users can hold a real conversation in the popup. - Modal title now renders the provider icon + name + a muted 'Test' suffix instead of a generic '— Test' string.
- Modal: new compactHeader and bodyClassName props. compactHeader shrinks the title bar (px-4 py-2.5, smaller traffic-light dots, text-sm title). bodyClassName fully replaces the default body classes when provided so consumers can take over the layout. - ProviderCard Test modal uses compactHeader + bodyClassName 'p-4 max-h-[calc(85vh-60px)] overflow-hidden flex flex-col', so the modal body becomes a flex column the chat fills. - LlmChatCard embedded mode now stretches via flex-1 min-h-0 and the messages list scrolls internally (flex-1 min-h-0, no fixed max-h cap). The modal no longer shows an outer scrollbar that pushes the header out of view as the conversation grows.
- Alternating-band conversation pattern (ChatGPT/Claude style): each turn renders as a full-width row with a small persona avatar (smart_toy / person / error glyph), uppercase role label, and content flowing at natural width. Assistant rows get a subtle bg-bg-card/40 band so it's easy to scan turns. - Content capped at max-w-3xl mx-auto for readability; long error lines wrap cleanly instead of stretching across the modal. - Error messages get a dedicated red avatar + red text so '[Error: ...]' replies stop looking like normal assistant content. - Empty state replaced with a centered forum icon + hint + send shortcut, instead of a tiny gray sentence. - Input row promoted to a single bordered shell with a circular send button (arrow_upward) and a stop button (stop) — same idiom users know from modern chat UIs. Textarea auto-expands up to max-h-32.
- Extend Message type with optional model field - Capture effectiveModel at send time and attach to assistant message - Preserve model through streaming, error, and abort paths via spread - Render model name (mono, muted) next to Assistant label per reply - Modal body padding pl-4 pr-2 py-3 (was p-4) to widen chat usable width
Replace centered modal with right-edge slide-over carrying tabs:
- Test: existing embedded LlmChatCard, taller usable area
- Models: live /api/v1/providers/{id}/models list with copy-id action
- Keys: link to provider page (placeholder until inline editor lands)
- Logs: link to /dashboard/logs filtered by connection
Non-blocking scrim with backdrop blur; Escape closes; body scroll locked.
Header shows provider logo + apiType + deprecated/risk inline meta.
Width responsive: sm:640 / md:720 / lg:820 / mobile full-width sheet.
Slide-over implemented standalone (not via Modal) to avoid Modal layout assumptions.
d06d5ae
into
diegosouzapw:release/v3.8.3
|
Thanks @mrmm for adding the keyboard-navigable Cmd+K / Ctrl+K command palette and refactoring the provider testing UI into the slide-over panel! These UX additions look fantastic and are now merged to be included in the v3.8.3 release. |
* 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>
* 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 (diegosouzapw#2608) (diegosouzapw#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 (diegosouzapw#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 (diegosouzapw#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 (diegosouzapw#2625) Integrated into release/v3.8.3 * fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus (diegosouzapw#2629) Integrated into release/v3.8.3 * fix(cli): register tsx loader and add opencode config subcommand (diegosouzapw#2631) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (diegosouzapw#2628) Integrated into release/v3.8.3 * fix(claude): improve Pi and OpenCode compatibility (diegosouzapw#2621) Integrated into release/v3.8.3 * fix: restore semantic passthrough system-role-only extraction instead of full normalization (diegosouzapw#2620) Integrated into release/v3.8.3 * fix(kiro): stabilize conversationId across prompt compression (diegosouzapw#2630) Integrated into release/v3.8.3 * fix(deepseek-web): SSE thinking/search routing and session lifecycle (diegosouzapw#2624) Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul * feat(dashboard): free-tier grouping with symbolic link in /providers (diegosouzapw#2632) Integrated into release/v3.8.3 * fix: close implementation gaps — t3-chat-web, stream_options, combo_strategy, batch config (diegosouzapw#2634) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (diegosouzapw#2633) Integrated into release/v3.8.3 * fix(reasoning): extend reasoning_content injection to Kimi K2 and other replay models (diegosouzapw#2639) Integrated into release/v3.8.3 * fix(cli): Linux autostart via systemd user service (fixes diegosouzapw#2627) (diegosouzapw#2635) Integrated into release/v3.8.3 * Refactor/providers free tier (diegosouzapw#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 (diegosouzapw#2646) Integrated into release/v3.8.3 * feat(dashboard): media providers pages + Web Fetch category (diegosouzapw#2645) Integrated into release/v3.8.3 * Feature provider adapta org com tutorial de conexão em modal (diegosouzapw#2643) Integrated into release/v3.8.3 * fix(rtk): skip content-based filter matching for non-shell tool results (diegosouzapw#2642) Integrated into release/v3.8.3 * fix(translator): enable Claude extended thinking for Copilot Responses-API requests (diegosouzapw#2647) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (diegosouzapw#2641) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (diegosouzapw#2638) Integrated into release/v3.8.3 * feat(dashboard): mini-playground inline (Phase 4) (diegosouzapw#2648) Integrated into release/v3.8.3 * fix(settings): fix Require Login modal Cancel button text and dismissal (diegosouzapw#2649) Integrated into release/v3.8.3 * feat(combos): universal context handoff for cross-model conversation continuity (diegosouzapw#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 (diegosouzapw#2655) Integrated into release/v3.8.3 * chore(release): include electron package changes in v3.8.3 * docs(changelog): integrate PR diegosouzapw#2655 into v3.8.3 * feat(i18n): translate 377 additional zh-CN entries (81 new keys + 296 same-as-en) (diegosouzapw#2659) Integrated into release/v3.8.3 * feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation (diegosouzapw#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 (diegosouzapw#2662) Integrated into release/v3.8.3 * fix(proxy): save dashboard custom proxies in registry (diegosouzapw#2661) Integrated into release/v3.8.3 * feat(dashboard): chat-first test slide-over (Option A) (diegosouzapw#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 (diegosouzapw#2666) Integrated into release/v3.8.3 * docs: update changelog with Batch 3 PR diegosouzapw#2666 merge for v3.8.3 * feat(quota+providers): card-grid layout, provider group headers, Codex race fix (diegosouzapw#2667) Integrated into release/v3.8.3 * feat(dashboard): real-time live WebSocket monitoring (diegosouzapw#2668) Integrated into release/v3.8.3 * feat(copilot): AI assistant with CodeGraph + CLI + knowledge base (diegosouzapw#2669) Integrated into release/v3.8.3 * feat(pipeline): pre-request middleware hooks (diegosouzapw#2670) Integrated into release/v3.8.3 * feat(resilience): credential health check + adaptive circuit breaker (diegosouzapw#2671) Integrated into release/v3.8.3 * feat(playground): combo routing visual simulator (diegosouzapw#2672) Integrated into release/v3.8.3 * feat(auth): API key groups with model-level permissions (diegosouzapw#2673) Integrated into release/v3.8.3 * feat(pwa): enhanced manifest + push notification support (diegosouzapw#2674) Integrated into release/v3.8.3 * feat(proxy): serverless relay endpoints with rate limiting (diegosouzapw#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>
* 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 (diegosouzapw#2608) (diegosouzapw#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 (diegosouzapw#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 (diegosouzapw#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 (diegosouzapw#2625) Integrated into release/v3.8.3 * fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus (diegosouzapw#2629) Integrated into release/v3.8.3 * fix(cli): register tsx loader and add opencode config subcommand (diegosouzapw#2631) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (diegosouzapw#2628) Integrated into release/v3.8.3 * fix(claude): improve Pi and OpenCode compatibility (diegosouzapw#2621) Integrated into release/v3.8.3 * fix: restore semantic passthrough system-role-only extraction instead of full normalization (diegosouzapw#2620) Integrated into release/v3.8.3 * fix(kiro): stabilize conversationId across prompt compression (diegosouzapw#2630) Integrated into release/v3.8.3 * fix(deepseek-web): SSE thinking/search routing and session lifecycle (diegosouzapw#2624) Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul * feat(dashboard): free-tier grouping with symbolic link in /providers (diegosouzapw#2632) Integrated into release/v3.8.3 * fix: close implementation gaps — t3-chat-web, stream_options, combo_strategy, batch config (diegosouzapw#2634) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (diegosouzapw#2633) Integrated into release/v3.8.3 * fix(reasoning): extend reasoning_content injection to Kimi K2 and other replay models (diegosouzapw#2639) Integrated into release/v3.8.3 * fix(cli): Linux autostart via systemd user service (fixes diegosouzapw#2627) (diegosouzapw#2635) Integrated into release/v3.8.3 * Refactor/providers free tier (diegosouzapw#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 (diegosouzapw#2646) Integrated into release/v3.8.3 * feat(dashboard): media providers pages + Web Fetch category (diegosouzapw#2645) Integrated into release/v3.8.3 * Feature provider adapta org com tutorial de conexão em modal (diegosouzapw#2643) Integrated into release/v3.8.3 * fix(rtk): skip content-based filter matching for non-shell tool results (diegosouzapw#2642) Integrated into release/v3.8.3 * fix(translator): enable Claude extended thinking for Copilot Responses-API requests (diegosouzapw#2647) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (diegosouzapw#2641) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (diegosouzapw#2638) Integrated into release/v3.8.3 * feat(dashboard): mini-playground inline (Phase 4) (diegosouzapw#2648) Integrated into release/v3.8.3 * fix(settings): fix Require Login modal Cancel button text and dismissal (diegosouzapw#2649) Integrated into release/v3.8.3 * feat(combos): universal context handoff for cross-model conversation continuity (diegosouzapw#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 (diegosouzapw#2655) Integrated into release/v3.8.3 * chore(release): include electron package changes in v3.8.3 * docs(changelog): integrate PR diegosouzapw#2655 into v3.8.3 * feat(i18n): translate 377 additional zh-CN entries (81 new keys + 296 same-as-en) (diegosouzapw#2659) Integrated into release/v3.8.3 * feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation (diegosouzapw#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 (diegosouzapw#2662) Integrated into release/v3.8.3 * fix(proxy): save dashboard custom proxies in registry (diegosouzapw#2661) Integrated into release/v3.8.3 * feat(dashboard): chat-first test slide-over (Option A) (diegosouzapw#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 (diegosouzapw#2666) Integrated into release/v3.8.3 * docs: update changelog with Batch 3 PR diegosouzapw#2666 merge for v3.8.3 * feat(quota+providers): card-grid layout, provider group headers, Codex race fix (diegosouzapw#2667) Integrated into release/v3.8.3 * feat(dashboard): real-time live WebSocket monitoring (diegosouzapw#2668) Integrated into release/v3.8.3 * feat(copilot): AI assistant with CodeGraph + CLI + knowledge base (diegosouzapw#2669) Integrated into release/v3.8.3 * feat(pipeline): pre-request middleware hooks (diegosouzapw#2670) Integrated into release/v3.8.3 * feat(resilience): credential health check + adaptive circuit breaker (diegosouzapw#2671) Integrated into release/v3.8.3 * feat(playground): combo routing visual simulator (diegosouzapw#2672) Integrated into release/v3.8.3 * feat(auth): API key groups with model-level permissions (diegosouzapw#2673) Integrated into release/v3.8.3 * feat(pwa): enhanced manifest + push notification support (diegosouzapw#2674) Integrated into release/v3.8.3 * feat(proxy): serverless relay endpoints with rate limiting (diegosouzapw#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>
…ation (diegosouzapw#2656) Integrated into release/v3.8.3
* 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 (diegosouzapw#2608) (diegosouzapw#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 (diegosouzapw#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 (diegosouzapw#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 (diegosouzapw#2625) Integrated into release/v3.8.3 * fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus (diegosouzapw#2629) Integrated into release/v3.8.3 * fix(cli): register tsx loader and add opencode config subcommand (diegosouzapw#2631) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (diegosouzapw#2628) Integrated into release/v3.8.3 * fix(claude): improve Pi and OpenCode compatibility (diegosouzapw#2621) Integrated into release/v3.8.3 * fix: restore semantic passthrough system-role-only extraction instead of full normalization (diegosouzapw#2620) Integrated into release/v3.8.3 * fix(kiro): stabilize conversationId across prompt compression (diegosouzapw#2630) Integrated into release/v3.8.3 * fix(deepseek-web): SSE thinking/search routing and session lifecycle (diegosouzapw#2624) Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul * feat(dashboard): free-tier grouping with symbolic link in /providers (diegosouzapw#2632) Integrated into release/v3.8.3 * fix: close implementation gaps — t3-chat-web, stream_options, combo_strategy, batch config (diegosouzapw#2634) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (diegosouzapw#2633) Integrated into release/v3.8.3 * fix(reasoning): extend reasoning_content injection to Kimi K2 and other replay models (diegosouzapw#2639) Integrated into release/v3.8.3 * fix(cli): Linux autostart via systemd user service (fixes diegosouzapw#2627) (diegosouzapw#2635) Integrated into release/v3.8.3 * Refactor/providers free tier (diegosouzapw#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 (diegosouzapw#2646) Integrated into release/v3.8.3 * feat(dashboard): media providers pages + Web Fetch category (diegosouzapw#2645) Integrated into release/v3.8.3 * Feature provider adapta org com tutorial de conexão em modal (diegosouzapw#2643) Integrated into release/v3.8.3 * fix(rtk): skip content-based filter matching for non-shell tool results (diegosouzapw#2642) Integrated into release/v3.8.3 * fix(translator): enable Claude extended thinking for Copilot Responses-API requests (diegosouzapw#2647) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (diegosouzapw#2641) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (diegosouzapw#2638) Integrated into release/v3.8.3 * feat(dashboard): mini-playground inline (Phase 4) (diegosouzapw#2648) Integrated into release/v3.8.3 * fix(settings): fix Require Login modal Cancel button text and dismissal (diegosouzapw#2649) Integrated into release/v3.8.3 * feat(combos): universal context handoff for cross-model conversation continuity (diegosouzapw#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 (diegosouzapw#2655) Integrated into release/v3.8.3 * chore(release): include electron package changes in v3.8.3 * docs(changelog): integrate PR diegosouzapw#2655 into v3.8.3 * feat(i18n): translate 377 additional zh-CN entries (81 new keys + 296 same-as-en) (diegosouzapw#2659) Integrated into release/v3.8.3 * feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation (diegosouzapw#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 (diegosouzapw#2662) Integrated into release/v3.8.3 * fix(proxy): save dashboard custom proxies in registry (diegosouzapw#2661) Integrated into release/v3.8.3 * feat(dashboard): chat-first test slide-over (Option A) (diegosouzapw#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 (diegosouzapw#2666) Integrated into release/v3.8.3 * docs: update changelog with Batch 3 PR diegosouzapw#2666 merge for v3.8.3 * feat(quota+providers): card-grid layout, provider group headers, Codex race fix (diegosouzapw#2667) Integrated into release/v3.8.3 * feat(dashboard): real-time live WebSocket monitoring (diegosouzapw#2668) Integrated into release/v3.8.3 * feat(copilot): AI assistant with CodeGraph + CLI + knowledge base (diegosouzapw#2669) Integrated into release/v3.8.3 * feat(pipeline): pre-request middleware hooks (diegosouzapw#2670) Integrated into release/v3.8.3 * feat(resilience): credential health check + adaptive circuit breaker (diegosouzapw#2671) Integrated into release/v3.8.3 * feat(playground): combo routing visual simulator (diegosouzapw#2672) Integrated into release/v3.8.3 * feat(auth): API key groups with model-level permissions (diegosouzapw#2673) Integrated into release/v3.8.3 * feat(pwa): enhanced manifest + push notification support (diegosouzapw#2674) Integrated into release/v3.8.3 * feat(proxy): serverless relay endpoints with rate limiting (diegosouzapw#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>
What
Adds a quick-access command palette to the dashboard, triggered with Cmd+K (macOS) / Ctrl+K (Linux/Windows). It exposes every visible sidebar item — across all sections (Omni-Proxy, Analytics, Monitoring, Dev Tools, Agentic, Gamification, Other Features, Configuration, Help) — as a searchable, keyboard-navigable list, letting users jump to any page without reaching for the mouse.
Targets
release/v3.8.3to ship with the same release as #2617.Why
The sidebar already has 50+ items distributed across 10 sections, and the count keeps growing with each release (mini-playground, media providers, web-fetch category, free-tier grouping, etc.). Scrolling/clicking the sidebar to reach a page is increasingly slow. A Cmd+K palette is the standard UX for fast navigation in dense dashboards (VS Code, Linear, GitHub, Vercel, Supabase…), and it's a natural complement to the existing customizable sidebar.
Behavior
/api/settings— same source as the customizable sidebar)noopener/noreferrerand show anopen_in_newglyphnext-intltranslations from the existingsidebarnamespace, with a safe fallback to the item id if a key is missingImplementation notes
src/shared/components/CommandPalette.tsxwith a thin outer wrapper that returnsnullwhen closed; an innerCommandPaletteDialogis mounted only while open. This keeps all hooks unconditional and avoids React Compiler strict-mode violations (nosetStateinside effects, no ref reads during render).useEffectcleanups +AbortControlleraround the/api/settingsfetch so unmount cancels in-flight requests cleanly.useMemofor bothallItems(derived fromSIDEBAR_SECTIONS+hiddenItems) and the filtered list.DashboardLayoutgains oneuseState(commandPaletteOpen), oneuseEffectfor the globalkeydownlistener, and mounts<CommandPalette>once.Files
src/shared/components/CommandPalette.tsx(240 lines)src/shared/components/layouts/DashboardLayout.tsx(+15 lines — keyboard listener, state, mount)Checks
npx eslinton both files → 0 errors / 0 warnings (React Compiler strict)npx tsc --noEmit→ 0 type errors in touched filesOut of scope (left for later if useful)
Cmd+Kdiscoverability badge in the header/api/settingsfetch withSidebar(would need a small shared hook/context — separate refactor)Screenshots / video
(none — happy to add a recording on request)