Skip to content

Release v3.8.3 - #2617

Merged
diegosouzapw merged 62 commits into
mainfrom
release/v3.8.3
May 24, 2026
Merged

diegosouzapw merged 62 commits into
mainfrom
release/v3.8.3

Conversation

@diegosouzapw

@diegosouzapw diegosouzapw commented May 23, 2026 •

Copy link
Copy Markdown
Owner

[3.8.3] — 2026-05-24

✨ New Features

  • feat(combos): universal context handoff for cross-model conversation continuity — structured XML summary system (<context_handoff>) that preserves conversation continuity and handles state transfer when combo routing switches models. (#2653 — thanks @herjarsa)
  • feat(docs): migrate /docs to Fumadocs MDX with nested routes — replaces the custom docs engine with Fumadocs, adding [...slug] catch-all routing, search API at /docs/api/search, source.config.ts content configuration, and meta.json navigation files across 8 doc sections (architecture/, compression/, frameworks/, guides/, ops/, reference/, routing/, security/). Includes 50+ URL redirects for backward compatibility via next.config.mjs. (#2614 — thanks @ovehbe)
  • feat(dashboard): add search and filters to /dashboard/api-manager — filter bar with search by name/key, active-only toggle (persisted to localStorage), status filter (active/disabled/banned/expired), type filter (standard/manage/restricted), filter count badges, and empty state with "Clear Filters" button. (#2628 / #2641 — thanks @diegosouzapw)
  • feat(dashboard): free-tier grouping with symbolic link in /dashboard/providers — groups and displays all free-tier providers from all categories dynamically using hasFree: true properties without removing them from their native lists. Displays category dot and amber dot with localizable tooltips, dedupes search results by provider ID, and corrects free tier count statistics. (#2632 — thanks @diegosouzapw)
  • feat(dashboard): risk notice modal for sensitive providers — show a soft, informative warning modal when connecting to session-based or OAuth providers (like Claude, Cursor, Copilot) for the first time. Adds subscriptionRisk properties to 20 providers, localizable templates, and stores acknowledgment in localStorage. (#2633 / #2638 — thanks @diegosouzapw)
  • feat(dashboard): refactor free-tier provider dashboard layout — cleans up visual clutter, reorganizes categories, hides redundant banners, and integrates free-tier categories nicely into the primary provider interface. (#2640 — thanks @diegosouzapw)
  • feat(dashboard): mini-playground inline (Phase 4) — integrated interactive mini-playground capabilities to provider details pages, including support for specialized example cards (Embedding, Image, LLM Chat, Music, STT, TTS, Video, Web Fetch, Web Search), unified API key loading hooks, model listing hooks, and curl command builder. (#2648 — thanks @diegosouzapw)
  • feat(webfetch): category support with dedicated media providers page and executors for Firecrawl, Jina Reader, and Tavily. (#2645 — thanks @diegosouzapw)
  • feat(adapta): integrate Adapta Org (adapta-web) provider with automatic Clerk authentication refresh and custom onboarding tutorial modal. (#2643 — thanks @df4p)
  • feat(i18n): complete translations for Simplified Chinese — translates 1220 missing keys bringing UI coverage to 98.8% with 0 placeholders. (#2655 — thanks @L-aros)
  • feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation and a slideover panel for LLM provider testing UI. (#2656 — thanks @mrmm)
  • feat(i18n): finish Simplified Chinese (zh-CN) UI coverage with 377 translated entries. (#2659 — thanks @L-aros)
  • feat(dashboard): chat-first test slide-over layout — consolidates header controls (Model/Key selects, Clear button) into a unified toolbar, maximizes vertical conversation space, integrates live tailing of provider logs in Logs tab, and locks composer focus for keyboard-only convenience. (#2660 — thanks @mrmm)
  • feat(cli): desktop updates, autostart, and headless CLI modes — integrates native auto-updater checks, login autostart (Linux .desktop, macOS/Windows login items), and a background headless server CLI daemon mode (--headless or OMNIROUTE_HEADLESS=true) into the Electron app wrapper. (#2662 — thanks @benzntech)
  • feat(quota): card-grid layout and provider group headers under quota management — replaces monolithic table with a beautiful 4-column card grid in limits. (#2667 — thanks @Gi99lin)
  • feat(dashboard): real-time WebSocket live monitoring daemon — runs a Node.js WebSocket daemon sidecar on port 20129 to emit real-time events for request starts/completes/fails, combo attempts, and credential status in the dashboard logs. (#2668 — thanks @herjarsa)
  • feat(copilot): AI assistant with CodeGraph + CLI + knowledge base — integrates a dashboard assistant with CodeGraph knowledge base access and CLI capabilities for app exploration. (#2669 — thanks @ovehbe / @herjarsa)
  • feat(pipeline): pre-request middleware hooks — pipeline executing custom JS hooks before routing/combo logic to mutate headers/body or short-circuit requests. (#2670 — thanks @herjarsa)
  • feat(resilience): credential health check + adaptive circuit breaker v2 — background connection health check scheduler with progressive circuit breaker adding DEGRADED state and HALF-OPEN recovery validation to avoid latency spikes. (#2671 — thanks @herjarsa)
  • feat(playground): combo routing visual simulator — interactive route simulation page at /dashboard/combos/playground to showcase cascade hops, latency, and cost estimates. (#2672 — thanks @herjarsa)
  • feat(auth): API key groups with model-level permissions — group definitions with model-level wildcards/denies where API keys inherit group-scoped restrictions. (#2673 — thanks @herjarsa)
  • feat(pwa): enhanced manifest + push notification support — polishes offline shortcuts, screenshots, display metadata, and push service workers. (#2674 — thanks @herjarsa)
  • feat(proxy): serverless relay proxy endpoints with rate limiting — public relay proxy endpoints with cost caps and rate limits, CRUD API, and dashboard usage tracking. (#2675 — thanks @herjarsa)

🔧 Bug Fixes

  • fix(settings): Require Login modal Cancel button text and dismissal — modal now renders localized cancel label via the common namespace and closes correctly without modifying settings when cancelled. (#2649 — thanks @Chewji9875)
  • fix(deepseek-web): re-apply SSE parser, prompt format, and error handling fixes — handles all 3 DeepSeek SSE stream formats (initial fragments, APPEND operations, bare string tokens), uses non-greedy regex for markdown image stripping, simplifies prompt to single-turn, checks json.code before token extraction, and uses accessToken fallback for session cache eviction on auth errors. (#2616 — thanks @ovehbe)
  • fix(deepseek-web): SSE thinking/search routing and session lifecycle — properly routes thinking vs content fragments based on thinking_enabled flag, handles search results with citation indices, appends search result footnotes, refactors transformSSE() and collectSSEContent() with shared helpers. (#2624 — thanks @ovehbe)
  • fix(codex): use allowlist to strip non-Responses-API fields in non-passthrough path — strips residual Chat Completions fields (stream_options, service_tier, store, metadata) from the request body when routing through the non-passthrough (translation) code path, preventing GPT-5.5 from receiving invalid parameters. (#2615 — thanks @diegosouzapw)
  • fix(catalog): skip static PROVIDER_MODELS when synced models exist — prevents stale/duplicate model entries in /v1/models for auto-synced providers. (#2625 — thanks @herjarsa)
  • fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus — when a PAT token gets 401, falls back to Cosy auth against api1.qoder.sh; adds supportsVision: true to qwen3-vl-plus. (#2629 — thanks @herjarsa)
  • fix(cli): register tsx loader and add opencode config subcommand — registers tsx/esm at CLI startup so dynamic .ts imports resolve; adds omniroute config opencode convenience alias. (#2631 — thanks @amogus22877769)
  • fix(claude): improve Pi and OpenCode compatibility — adds Pi Coding Agent anchors to system transform removal, stores _toolNameMap as non-enumerable, strips context_management when thinking is disabled. (#2621 — thanks @unitythemaker)
  • fix(passthrough): restore semantic passthrough system-role-only extraction — reverts full normalizeClaudeUpstreamMessages() to lighter extractSystemRoleMessages() in CC semantic passthrough paths, preventing document/tool chain corruption. (#2620 — thanks @Tentoxa)
  • fix(kiro): stabilize conversationId across prompt compression — captures pre-compression body and uses the original first user message as seed for UUID v5, keeping Kiro's AWS conversation context stable. (#2630 — thanks @HALDRO)
  • fix(t3-chat-web): close implementation gaps for t3.chat TanStack Start, tracking of stream_options, and retry configurations — parses TSS Turbo Stream Serialization from _serverFn/*, tracks request combo_strategy via database migration 062_usage_history_combo_strategy.sql, and makes batch retry backoffs custom-configurable via environment variables. (#2634 — thanks @oyi77)
  • fix(reasoning): extend empty reasoning_content injection to prevent tool call loops in Kimi K2 and replay models — injects empty reasoning_content field to Kimi models during tool-calling sequences to bypass loop issues. (#2639 — thanks @herjarsa)
  • fix(cli): Linux autostart via systemd user service on headless VPS — adds auto-generating systemd user service unit for headless setups on Linux, updating tray configs and system variables allowlist (LOGNAME and XDG_CURRENT_DESKTOP). (#2635 — thanks @janeza2)
  • fix(combo): preserve <omniModel> tag in SSE stream output for combos when using context_cache_protection to ensure correct context pinning round-trips. (#2646 — thanks @herjarsa)
  • fix(rtk): prevent false positives in RTK compression by skipping content-based filter matching for non-shell tool results (e.g. read_file, grep_search). (#2642 — thanks @HALDRO)
  • fix(translator): enable Claude extended thinking for Copilot Responses-API requests — handles reasoning budget and translations for Copilot. (#2647 — thanks @ivan-mezentsev)
  • fix(tests): remove duplicate assertion in schema coercion & fix(cli): ignore system vars in env check. (thanks @diegosouzapw)
  • fix(combo): resolve pending request leaks on unresponsive combo targets — implements a default 60-second per-target timeout during combo routing loops to abort hanging upstream requests and release capacity limits. (#2663 — thanks @Chewji9875)
  • fix(proxy): save custom dashboard proxies directly in SQLite registry — writes new provider/account/global/combo custom proxies directly to the modern proxy_registry database and assigns them via proxy_assignments instead of creating duplicate configurations. (#2661 — thanks @terence71-glitch)
  • fix(settings): expand effortLevel enum to support xhigh and max reasoning efforts — adds xhigh and max levels to the updateThinkingBudgetSchema to resolve validation failures that silently discarded top-effort request payloads. (#2666 — thanks @mrmm)
  • fix(codex): Codex OAuth refresh token reuse race condition under parallel requests. (#2667 — thanks @diegosouzapw)

📝 Maintenance

  • chore(config): ignore additional agent workflow command files (.agents/commands/). (thanks @diegosouzapw)
  • chore(config): ignore memory-bank and Cursor agent rules from tracking. (thanks @ovehbe)
  • chore(ci): publish @omniroute/opencode-plugin to npm — adds a parallel build, test, and publish job to the npm release workflow for automated package deployment. (#2666 — thanks @mrmm)

Tests

  • All tests pass

⚠️ After merging: run Phase 2 steps to tag, publish, and deploy.

diegosouzapw and others added 12 commits May 23, 2026 03:22
Add newly introduced agent workflow and Claude command files to
.gitignore so proprietary automation assets are not committed.
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.
- 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>
Co-authored-by: Cursor <cursoragent@cursor.com>
- 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.
…ack, 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)
…ssthrough path (#2608) (#2615)

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

Integrated into release/v3.8.3 — fix(deepseek-web): SSE parser (APPEND + bare tokens), prompt builder, error handling, session cache cleanup
Add newly introduced agent workflow and Claude command files to
.gitignore so proprietary automation assets are not committed.
@kilo-code-bot

kilo-code-bot Bot commented May 23, 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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cbec5e0a68

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +16 to +17
const cookieStore = cookies();
return (cookieStore as any).get(LOCALE_COOKIE)?.value || DEFAULT_LOCALE;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Await cookies() before reading locale cookie

getDocsLocale() calls cookies() synchronously, but in the current Next.js runtime this API is async; as written, (cookieStore as any).get(...) runs on a Promise and falls into the catch path, so the page always uses DEFAULT_LOCALE. This breaks the new translated-doc fallback for users with a non-English locale cookie.

Useful? React with 👍 / 👎.

? raw.slice(bodyMatch.index + bodyMatch[0].length).trim()
: raw;

return marked.parse(body) as string;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Sanitize translated markdown before injecting HTML

marked.parse(body) is returned directly and later rendered with dangerouslySetInnerHTML, but marked does not sanitize HTML output. In non-English locale paths (docs/i18n/...), any raw HTML in translated markdown can execute in the browser (e.g., scriptable attributes), creating an XSS path that the previous docs renderer explicitly mitigated.

Useful? React with 👍 / 👎.

@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 migrates the documentation system to Fumadocs, replacing custom components and scripts with a standardized framework while implementing extensive redirects for legacy paths. It also hardens the CodexExecutor against API field errors and improves DeepSeekWebExecutor streaming. Feedback highlights a significant regression in the new messagesToPrompt function, which currently breaks multi-turn conversations by ignoring assistant responses and previous user turns, alongside concerns regarding type safety and regex side effects on system instructions.

Comment on lines +343 to +377
function messagesToPrompt(messages: Array<{ role: string; content: string }>): string {
const extractText = (content: unknown): string => {
if (Array.isArray(content)) {
return (content as any[])
.filter((item: any) => item.type === "text")
.map((item: any) => item.text)
.join("\n");
}
return String(content || "");
};

if (messages.length === 0) return "";

// Collect system prompt(s) and find the last user message
const systemParts: string[] = [];
let lastUserContent = "";
for (const m of messages) {
if (m.role === "system") {
const text = extractText(m.content).trim();
if (text) systemParts.push(text);
} else if (m.role === "user") {
lastUserContent = extractText(m.content).trim();
}
}

const parts: string[] = [];
if (systemParts.length > 0) {
parts.push(systemParts.join("\n\n"));
}
if (lastUserContent) {
parts.push(lastUserContent);
}

return parts.join("\n\n").replace(/!\[.*?\]\(.*?\)/g, "");
}

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 messagesToPrompt function has several issues that should be addressed:

  1. Context Loss: The implementation only extracts system messages and the last user message, completely ignoring assistant responses and previous user turns. This breaks multi-turn conversation support, which is a significant regression compared to the previous implementation. If the DeepSeek Web API requires history to be packed into the prompt string when parent_message_id is null, the transcript-style mapping should be restored.
  2. Type Safety and Robustness: The messages parameter type specifies content: string, but the logic handles it as an array. Additionally, when processing content arrays, the code should verify that item.text is a string to avoid joining undefined or non-string values.
  3. Regex Side Effects: Applying the image-stripping regex to the final joined prompt can have unintended side effects on system instructions (e.g., if they contain markdown image syntax as examples). It is safer to apply this transformation only to the content of user messages.
function messagesToPrompt(messages: Array<{ role: string; content: any }>): string {
  const extractText = (content: unknown): string => {
    if (Array.isArray(content)) {
      return (content as any[])
        .filter((item: any) => item.type === "text" && typeof item.text === "string")
        .map((item: any) => item.text)
        .join("\n");
    }
    return typeof content === "string" ? content : String(content ?? "");
  };

  if (messages.length === 0) return "";

  const systemParts: string[] = [];
  let lastUserContent = "";
  for (const m of messages) {
    let text = extractText(m.content).trim();
    if (!text) continue;

    if (m.role === "system") {
      systemParts.push(text);
    } else if (m.role === "user") {
      // Strip images only from user content to avoid side effects in system prompts
      lastUserContent = text.replace(/!\\[.*?\\]\\(.*?\\)/g, "");
    }
    // Note: Assistant messages are currently ignored, resulting in single-turn behavior.
  }

  const parts: string[] = [];
  if (systemParts.length > 0) {
    parts.push(systemParts.join("\n\n"));
  }
  if (lastUserContent) {
    parts.push(lastUserContent);
  }

  return parts.join("\n\n");
}

@github-actions

github-actions Bot commented May 23, 2026 •

Copy link
Copy Markdown
Contributor

CI Coverage Report

  • Coverage job: skipped
  • PR test policy: success

Coverage artifact was not available for this run.

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

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

htkarabulut and others added 2 commits May 23, 2026 17:07
… of full normalization (#2620)

Integrated into release/v3.8.3
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

…2624)

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

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f030b007ac

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +2128 to +2134
body = injectUniversalHandoffBody(
body,
lastModel,
modelStr,
`Model routing: ${lastModel} → ${modelStr}`,
existingHandoff
);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Rebuild handoff-injected body per target attempt

This loop mutates body in place (body = injectUniversalHandoffBody(...)) before each model attempt, so if an earlier target fails, later targets inherit previously injected handoff system messages and get additional handoff messages stacked on top. In fallback scenarios (multiple targets tried in one request), the final target can receive contradictory/duplicated transfer prompts, which degrades routing quality and unnecessarily inflates context. Start each attempt from an unmodified base request (or strip prior handoff injection) before injecting the current target's handoff.

Useful? React with 👍 / 👎.

Comment on lines +93 to +97
const creds = await resolveCredentials(pid);
if (creds) {
resolvedProvider = pid;
credentials = creds;
break;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Require usable credentials before auto-selecting web-fetch provider

Auto-selection currently treats any truthy getProviderCredentials result as usable credentials, but that function can return non-credential sentinel objects (for example rate-limit states) that don't contain an API key. In that case the route selects the first provider anyway and then fails inside the executor with auth errors instead of trying the next configured provider. Gate selection on an actually usable credential shape (e.g., non-empty apiKey) so fallback order works as intended.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0ead4cbb54

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +81 to +85
const creds = await resolveCredentials(resolvedProvider);
if (!creds) {
return errorResponse(
HTTP_STATUS.BAD_REQUEST,
`No credentials configured for web-fetch provider: ${resolvedProvider}. ` +

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Validate explicit web-fetch credentials before dispatch

In the explicit-provider path, any truthy return from resolveCredentials is accepted and passed to the executor, but getProviderCredentials can return non-credential sentinel objects (for example rate-limit/lockout states) that do not include an API key. In that case the request is misrouted into executor auth errors (typically 401) instead of returning the correct policy/backoff response for that provider, so clients get the wrong failure mode when they explicitly choose a provider.

Useful? React with 👍 / 👎.

Comment on lines +40 to +44
const creds = await getProviderCredentials(providerId);
return creds ?? null;
} catch {
return null;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Propagate credential-resolution backend errors

resolveCredentials catches all exceptions from getProviderCredentials and converts them to null, which later becomes a 400 "No credentials configured" response. This masks transient DB/persistence failures as client misconfiguration, causing incorrect status codes and preventing callers from treating the failure as retryable infrastructure error.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3766437c7c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +14 to +18
export async function POST(request: Request) {
try {
const body: CopilotRequest = await request.json();

if (!body.messages || !Array.isArray(body.messages) || body.messages.length === 0) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P0 Badge Enforce auth before processing Copilot chat requests

This endpoint executes privileged Copilot tools without any authentication or authorization check, so any caller who can reach /api/copilot/chat can trigger state-changing actions (for example API key management) and backend command execution paths via processCopilotChat. Add the same API/session auth gate used by other management routes before reading the body or dispatching tools.

Useful? React with 👍 / 👎.

Comment thread src/lib/copilot/tools.ts
if (!cliPath) return "omniroute CLI not found in PATH. Install OmniRoute first.";

try {
const output = execSync(`omniroute ${cmd}`, {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P0 Badge Stop shell-interpolating Copilot CLI input

runOmniRouteCli passes user-controlled text directly into execSync as a shell command string, so shell metacharacters in command (e.g. ;, &&, $()) can execute arbitrary OS commands beyond omniroute .... This is an RCE sink; switch to spawn/execFile with explicit argv parsing and allowlisting.

Useful? React with 👍 / 👎.

Comment on lines +89 to +90
if (!apiKey || !isValidApiKey(apiKey)) {
return { authorized: false, sessionId, error: "Invalid API key" };

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Await API key validation in LiveWS authorization

isValidApiKey is async, but this check treats the returned Promise as a boolean (!isValidApiKey(apiKey)), which is always false for non-empty tokens; that means any supplied token can pass WebSocket auth. Await the validation result so unauthorized clients are rejected correctly.

Useful? React with 👍 / 👎.

Comment thread src/lib/copilot/engine.ts
const q = query.toLowerCase();

// Architecture questions
if (/architecture|arquitectura|pipeline|request.*flow|request.*path/.test(q)) {

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0e4ca39163

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +55 to +57
export async function POST(request: Request) {
try {
const body: CreateHookRequest = await request.json();

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P0 Badge Require management auth on middleware hook endpoints

This new management surface never calls requireManagementAuth, so any unauthenticated caller who can reach the server can create/update/delete hooks and inject arbitrary hook code that is later executed via new Function in the runtime registry. That is a direct remote code-execution path and also exposes hook metadata/logs without authorization; add the same auth gate used by other management routes before processing request bodies or mutating hook state in both /api/middleware/hooks and /api/middleware/hooks/[name] handlers.

Useful? React with 👍 / 👎.

Comment on lines +70 to +74
if (body.code !== undefined) {
// Re-register with new code
unregisterHook(name);
registerHook(saved);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Sync non-code hook updates to the runtime registry

PUT /api/middleware/hooks/[name] persists updates to SQLite, but only refreshes the in-memory registry when code changes. Updates like enabled, priority, or scope therefore do not take effect at runtime until restart, so disabling a bad hook (or changing execution order/scope) appears successful in API responses while hooks continue running with stale settings.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

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.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@diegosouzapw
diegosouzapw merged commit 75d9a83 into main May 24, 2026
9 of 10 checks passed
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 (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>
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 (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>
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 (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>
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.