Repository navigation
Release v3.8.3 - #2617
Release v3.8.3#2617
Conversation
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)
… 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 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.
💡 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".
| const cookieStore = cookies(); | ||
| return (cookieStore as any).get(LOCALE_COOKIE)?.value || DEFAULT_LOCALE; |
There was a problem hiding this comment.
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; |
There was a problem hiding this comment.
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 👍 / 👎.
There was a problem hiding this comment.
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.
| 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, ""); | ||
| } |
There was a problem hiding this comment.
The messagesToPrompt function has several issues that should be addressed:
- 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_idis null, the transcript-style mapping should be restored. - Type Safety and Robustness: The
messagesparameter type specifiescontent: string, but the logic handles it as an array. Additionally, when processing content arrays, the code should verify thatitem.textis a string to avoid joiningundefinedor non-string values. - 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");
}
CI Coverage Report
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
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Integrated into release/v3.8.3
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Integrated into release/v3.8.3
… of full normalization (#2620) Integrated into release/v3.8.3
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Integrated into release/v3.8.3
|
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
… job (#2666) Integrated into release/v3.8.3
There was a problem hiding this comment.
💡 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".
| body = injectUniversalHandoffBody( | ||
| body, | ||
| lastModel, | ||
| modelStr, | ||
| `Model routing: ${lastModel} → ${modelStr}`, | ||
| existingHandoff | ||
| ); |
There was a problem hiding this comment.
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 👍 / 👎.
| const creds = await resolveCredentials(pid); | ||
| if (creds) { | ||
| resolvedProvider = pid; | ||
| credentials = creds; | ||
| break; |
There was a problem hiding this comment.
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 👍 / 👎.
…x race fix (#2667) Integrated into release/v3.8.3
There was a problem hiding this comment.
💡 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".
| const creds = await resolveCredentials(resolvedProvider); | ||
| if (!creds) { | ||
| return errorResponse( | ||
| HTTP_STATUS.BAD_REQUEST, | ||
| `No credentials configured for web-fetch provider: ${resolvedProvider}. ` + |
There was a problem hiding this comment.
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 👍 / 👎.
| const creds = await getProviderCredentials(providerId); | ||
| return creds ?? null; | ||
| } catch { | ||
| return null; | ||
| } |
There was a problem hiding this comment.
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 👍 / 👎.
Integrated into release/v3.8.3
There was a problem hiding this comment.
💡 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".
| export async function POST(request: Request) { | ||
| try { | ||
| const body: CopilotRequest = await request.json(); | ||
|
|
||
| if (!body.messages || !Array.isArray(body.messages) || body.messages.length === 0) { |
There was a problem hiding this comment.
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 👍 / 👎.
| if (!cliPath) return "omniroute CLI not found in PATH. Install OmniRoute first."; | ||
|
|
||
| try { | ||
| const output = execSync(`omniroute ${cmd}`, { |
There was a problem hiding this comment.
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 👍 / 👎.
| if (!apiKey || !isValidApiKey(apiKey)) { | ||
| return { authorized: false, sessionId, error: "Invalid API key" }; |
There was a problem hiding this comment.
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 👍 / 👎.
Integrated into release/v3.8.3
| const q = query.toLowerCase(); | ||
|
|
||
| // Architecture questions | ||
| if (/architecture|arquitectura|pipeline|request.*flow|request.*path/.test(q)) { |
…2671) Integrated into release/v3.8.3
There was a problem hiding this comment.
💡 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".
| export async function POST(request: Request) { | ||
| try { | ||
| const body: CreateHookRequest = await request.json(); |
There was a problem hiding this comment.
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 👍 / 👎.
| if (body.code !== undefined) { | ||
| // Re-register with new code | ||
| unregisterHook(name); | ||
| registerHook(saved); | ||
| } |
There was a problem hiding this comment.
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 👍 / 👎.
Integrated into release/v3.8.3
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Integrated into release/v3.8.3
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Integrated into release/v3.8.3
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Integrated into release/v3.8.3
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…pescript compile-time errors
|
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.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
* 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>
* 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>
[3.8.3] — 2026-05-24
✨ New Features
<context_handoff>) that preserves conversation continuity and handles state transfer when combo routing switches models. (#2653 — thanks @herjarsa)/docsto 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.tscontent configuration, andmeta.jsonnavigation files across 8 doc sections (architecture/,compression/,frameworks/,guides/,ops/,reference/,routing/,security/). Includes 50+ URL redirects for backward compatibility vianext.config.mjs. (#2614 — thanks @ovehbe)/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)/dashboard/providers— groups and displays all free-tier providers from all categories dynamically usinghasFree: trueproperties 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)subscriptionRiskproperties to 20 providers, localizable templates, and stores acknowledgment in localStorage. (#2633 / #2638 — thanks @diegosouzapw)adapta-web) provider with automatic Clerk authentication refresh and custom onboarding tutorial modal. (#2643 — thanks @df4p)--headlessorOMNIROUTE_HEADLESS=true) into the Electron app wrapper. (#2662 — thanks @benzntech)20129to emit real-time events for request starts/completes/fails, combo attempts, and credential status in the dashboard logs. (#2668 — thanks @herjarsa)/dashboard/combos/playgroundto showcase cascade hops, latency, and cost estimates. (#2672 — thanks @herjarsa)🔧 Bug Fixes
commonnamespace and closes correctly without modifying settings when cancelled. (#2649 — thanks @Chewji9875)json.codebefore token extraction, and usesaccessTokenfallback for session cache eviction on auth errors. (#2616 — thanks @ovehbe)thinking_enabledflag, handles search results with citation indices, appends search result footnotes, refactorstransformSSE()andcollectSSEContent()with shared helpers. (#2624 — thanks @ovehbe)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)/v1/modelsfor auto-synced providers. (#2625 — thanks @herjarsa)api1.qoder.sh; addssupportsVision: trueto qwen3-vl-plus. (#2629 — thanks @herjarsa)tsx/esmat CLI startup so dynamic.tsimports resolve; addsomniroute config opencodeconvenience alias. (#2631 — thanks @amogus22877769)_toolNameMapas non-enumerable, stripscontext_managementwhen thinking is disabled. (#2621 — thanks @unitythemaker)normalizeClaudeUpstreamMessages()to lighterextractSystemRoleMessages()in CC semantic passthrough paths, preventing document/tool chain corruption. (#2620 — thanks @Tentoxa)_serverFn/*, tracks requestcombo_strategyvia database migration062_usage_history_combo_strategy.sql, and makes batch retry backoffs custom-configurable via environment variables. (#2634 — thanks @oyi77)reasoning_contentinjection to prevent tool call loops in Kimi K2 and replay models — injects emptyreasoning_contentfield to Kimi models during tool-calling sequences to bypass loop issues. (#2639 — thanks @herjarsa)LOGNAMEandXDG_CURRENT_DESKTOP). (#2635 — thanks @janeza2)<omniModel>tag in SSE stream output for combos when usingcontext_cache_protectionto ensure correct context pinning round-trips. (#2646 — thanks @herjarsa)proxy_registrydatabase and assigns them viaproxy_assignmentsinstead of creating duplicate configurations. (#2661 — thanks @terence71-glitch)xhighandmaxlevels to the updateThinkingBudgetSchema to resolve validation failures that silently discarded top-effort request payloads. (#2666 — thanks @mrmm)📝 Maintenance
.agents/commands/). (thanks @diegosouzapw)memory-bankand Cursor agent rules from tracking. (thanks @ovehbe)Tests