Repository navigation
fix(rtk): skip content-based filter matching for non-shell tool results - #2642
Conversation
RTK was applying keepPatterns/stripPatterns to ALL tool-role messages
by matching on text content alone. This caused false positives: a
TypeScript source file read via the Read tool containing 'error TS2322'
in an example or comment would match the build-typescript detector and
get filtered down to error-only lines. The model would then see a
truncated file and assume the Read tool was broken.
Fix: in applyRtkCompression(), build a tool_call_id → {toolName, command}
lookup from preceding assistant messages. For each tool-role message:
- bash/shell/terminal/run_command/execute_command/exec/command → pass
command to processRtkText, filters apply as before
- any other tool (read, grep, glob, edit, write, ...) → skipFilters=true,
keepPatterns/stripPatterns are skipped
- tool_call_id not found in lookup → existing behavior (text-based
detection), backward compatible
smartTruncate and deduplication still apply to all tool results.
Shell tool pattern taken from existing isTerminalTool() in grok-web.ts.
Aligns with official rtk-ai/rtk behavior:
'hook only runs on Bash tool calls. Claude Code built-in tools like
Read, Grep, and Glob do not pass through the Bash hook.'
Root cause confirmed via session log analysis: model switched to bash
cat/head fallbacks after RTK filtered Read tool results by content.
|
Kilo Code Review could not run — your account is out of credits. Add credits or switch to a free model to enable reviews on this change. |
There was a problem hiding this comment.
Code Review
This pull request introduces selective RTK filtering by distinguishing between shell and non-shell tool results. It implements a lookup mechanism to associate tool outputs with their originating tool metadata, ensuring filters are only applied to relevant terminal-like commands. Feedback suggests enhancing the robustness of the tool argument parsing to handle non-string inputs and potential null values from JSON parsing, as well as optimizing performance by hoisting the shell tool detection regular expression out of the message processing loop.
| if (typeof fn.arguments === "string") { | ||
| try { | ||
| const args = JSON.parse(fn.arguments); | ||
| command = | ||
| typeof args.command === "string" | ||
| ? args.command | ||
| : typeof args.cmd === "string" | ||
| ? args.cmd | ||
| : null; | ||
| } catch { | ||
| // non-JSON arguments | ||
| } | ||
| } |
There was a problem hiding this comment.
The current implementation for extracting the command argument has two potential issues:
- It only handles
fn.argumentswhen it is a string. Some providers or internal transformations may pass arguments as a pre-parsed object. JSON.parsecan returnnull(e.g., if the input is the string"null"), which would cause an error when accessingargs.commandorargs.cmd. Although wrapped in atry-catch, it's better to explicitly check the type and value ofargsfor robustness.
const rawArgs = fn.arguments;
let args: any = null;
if (typeof rawArgs === "string") {
try {
args = JSON.parse(rawArgs);
} catch {
// non-JSON arguments
}
} else if (rawArgs && typeof rawArgs === "object") {
args = rawArgs;
}
if (args && typeof args === "object") {
command =
typeof args.command === "string"
? args.command
: typeof args.cmd === "string"
? args.cmd
: null;
}| // Only apply RTK filters to bash/shell tool results. | ||
| // Non-shell tools (read, glob, grep, edit, write, etc.) skip filter matching | ||
| // to prevent content-based false positives (e.g. a TS file matching build-typescript). | ||
| if (/\b(bash|shell|terminal|run_command|execute_command|exec|command)\b/.test(name)) { |
a9e0df8
into
cheaper-inference:release/v3.8.3
|
Muito obrigado pela contribuição, @HALDRO! A integração foi concluída com sucesso. |
* chore(config): ignore additional agent workflow command files Add newly introduced agent workflow and Claude command files to .gitignore so proprietary automation assets are not committed. * feat(deepseek-web): fix auth to use userToken + WASM PoW solver Rewrite deepseek-web executor from broken cookie auth to userToken Bearer flow (like Chat2API). Replace pure JS Keccak PoW with WASM solver (5.8s → 86ms). Add 14 models, validation, and dashboard UX. * fix(deepseek-web): update target_path to use challenge property * refactor(deepseek-web): streamline token handling and implement cache eviction * fix(deepseek-web): fix SSE parser, prompt format, and error handling - Handle all 3 DeepSeek SSE stream formats: initial fragments, APPEND operations, and bare string tokens (fixes truncated responses) - Simplify prompt builder to send system + last user message only (DeepSeek web API is single-turn, full history caused marker leakage) - Check json.code before token extraction (fixes "did not return access token: Authorization" on code 40003 with HTTP 200) - Clear session cache alongside token cache on auth errors - Add dev origin for remote testing Co-authored-by: Cursor <cursoragent@cursor.com> * chore: ignore memory-bank and cursor agent rules from tracking Co-authored-by: Cursor <cursoragent@cursor.com> * feat: enhance documentation and configuration for Fumadocs integration - Added Fumadocs MDX support in the Next.js configuration. - Updated transpile packages to include fumadocs-ui and fumadocs-core. - Implemented a comprehensive set of redirects for documentation paths to improve navigation. - Removed the generate-docs-index script as it is no longer needed. - Updated various documentation titles for consistency and clarity. - Enhanced global styles to incorporate Fumadocs UI themes and styles. * refactor(docs): cleanup fumadocs PR — revert deepseek, add i18n fallback, restore LanguageSelector - Revert unrelated deepseek-web.ts changes (should be separate PR) - Add .source/ to .gitignore (Fumadocs generated files) - Remove contributor IP from allowedDevOrigins - Add i18n runtime fallback: reads NEXT_LOCALE cookie, loads translated .md from docs/i18n/<locale>/docs/ (preserves existing translation pipeline) - Restore LanguageSelector in Fumadocs layout nav - Restore SEO metadata (title template, description, robots) * fix(codex): use allowlist to strip non-Responses-API fields in non-passthrough path (#2608) (#2615) Integrated into release/v3.8.3 — fix(codex): allowlist-based sanitization for gpt-5.5 Responses API * fix(deepseek-web): fix SSE parser, prompt format, error handling, and cache keys (#2616) Integrated into release/v3.8.3 — fix(deepseek-web): SSE parser (APPEND + bare tokens), prompt builder, error handling, session cache cleanup * chore(config): ignore additional agent workflow command files Add newly introduced agent workflow and Claude command files to .gitignore so proprietary automation assets are not committed. * feat(docs): migrate /docs to Fumadocs MDX with nested routes (#2614) Integrated into release/v3.8.3 — Fumadocs MDX migration with nested routes, search API, and 50+ URL redirects * fix(catalog): skip static PROVIDER_MODELS when synced models exist (#2625) Integrated into release/v3.8.3 * fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus (#2629) Integrated into release/v3.8.3 * fix(cli): register tsx loader and add opencode config subcommand (#2631) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (#2628) Integrated into release/v3.8.3 * fix(claude): improve Pi and OpenCode compatibility (#2621) Integrated into release/v3.8.3 * fix: restore semantic passthrough system-role-only extraction instead of full normalization (#2620) Integrated into release/v3.8.3 * fix(kiro): stabilize conversationId across prompt compression (#2630) Integrated into release/v3.8.3 * fix(deepseek-web): SSE thinking/search routing and session lifecycle (#2624) Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul * feat(dashboard): free-tier grouping with symbolic link in /providers (#2632) Integrated into release/v3.8.3 * fix: close implementation gaps — t3-chat-web, stream_options, combo_strategy, batch config (#2634) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (#2633) Integrated into release/v3.8.3 * fix(reasoning): extend reasoning_content injection to Kimi K2 and other replay models (#2639) Integrated into release/v3.8.3 * fix(cli): Linux autostart via systemd user service (fixes #2627) (#2635) Integrated into release/v3.8.3 * Refactor/providers free tier (#2640) Integrated into release/v3.8.3 * fix(tests): remove duplicate assertion in schema coercion & fix(cli): ignore system vars in env check * fix(combo): preserve omniModel tag in streaming output for round-trip context pinning (#2646) Integrated into release/v3.8.3 * feat(dashboard): media providers pages + Web Fetch category (#2645) Integrated into release/v3.8.3 * Feature provider adapta org com tutorial de conexão em modal (#2643) Integrated into release/v3.8.3 * fix(rtk): skip content-based filter matching for non-shell tool results (#2642) Integrated into release/v3.8.3 * fix(translator): enable Claude extended thinking for Copilot Responses-API requests (#2647) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (#2641) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (#2638) Integrated into release/v3.8.3 * feat(dashboard): mini-playground inline (Phase 4) (#2648) Integrated into release/v3.8.3 * fix(settings): fix Require Login modal Cancel button text and dismissal (#2649) Integrated into release/v3.8.3 * feat(combos): universal context handoff for cross-model conversation continuity (#2653) Integrated into release/v3.8.3 * chore(release): bump to v3.8.3 — changelog, docs, version sync * feat(i18n): complete zh-CN translations for 1220 missing keys (#2655) Integrated into release/v3.8.3 * chore(release): include electron package changes in v3.8.3 * docs(changelog): integrate PR #2655 into v3.8.3 * feat(i18n): translate 377 additional zh-CN entries (81 new keys + 296 same-as-en) (#2659) Integrated into release/v3.8.3 * feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation (#2656) Integrated into release/v3.8.3 * docs: update changelog for PR integrations under v3.8.3 * feat(cli): integrate native updates, autostart and headless CLI mode (#2662) Integrated into release/v3.8.3 * fix(proxy): save dashboard custom proxies in registry (#2661) Integrated into release/v3.8.3 * feat(dashboard): chat-first test slide-over (Option A) (#2660) Integrated into release/v3.8.3 * docs: update changelog with Batch 2 PR merges for v3.8.3 * fix: add xhigh+max to effortLevel schema; add opencode-plugin publish job (#2666) Integrated into release/v3.8.3 * docs: update changelog with Batch 3 PR #2666 merge for v3.8.3 * feat(quota+providers): card-grid layout, provider group headers, Codex race fix (#2667) Integrated into release/v3.8.3 * feat(dashboard): real-time live WebSocket monitoring (#2668) Integrated into release/v3.8.3 * feat(copilot): AI assistant with CodeGraph + CLI + knowledge base (#2669) Integrated into release/v3.8.3 * feat(pipeline): pre-request middleware hooks (#2670) Integrated into release/v3.8.3 * feat(resilience): credential health check + adaptive circuit breaker (#2671) Integrated into release/v3.8.3 * feat(playground): combo routing visual simulator (#2672) Integrated into release/v3.8.3 * feat(auth): API key groups with model-level permissions (#2673) Integrated into release/v3.8.3 * feat(pwa): enhanced manifest + push notification support (#2674) Integrated into release/v3.8.3 * feat(proxy): serverless relay endpoints with rate limiting (#2675) Integrated into release/v3.8.3 * docs(changelog): update changelog for PRs 2667-2675 & fix: resolve typescript compile-time errors * fix(db): remove transactions from migrations Remove explicit transaction wrappers from recent migrations and correct the API key groups migration metadata. Also fix codegraph path resolution for ESM environments and refresh generated fumadocs source output. --------- Co-authored-by: Ömer Vehbe <ovehbe@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Mr. Meowgi <mr@meowgi.dev> Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com> Co-authored-by: amogus22877769 <y.lev357@gmail.com> Co-authored-by: Halil Tezcan KARABULUT <info@hlltzcnkb.com> Co-authored-by: Tentoxa <53821604+Tentoxa@users.noreply.github.com> Co-authored-by: HALDRO <121296348+HALDRO@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: janeza2 <49841619+janeza2@users.noreply.github.com> Co-authored-by: df4p <38404+df4p@users.noreply.github.com> Co-authored-by: ivan-mezentsev <ivan@mezentsev.me> Co-authored-by: Chewji <126886556+Chewji9875@users.noreply.github.com> Co-authored-by: L-aros <107354918+L-aros@users.noreply.github.com> Co-authored-by: M.M <mr.maatoug@gmail.com> Co-authored-by: Benson K B <bensonkbmca@gmail.com> Co-authored-by: terence71-glitch <mcdowellterence71@gmail.com>
* chore(config): ignore additional agent workflow command files Add newly introduced agent workflow and Claude command files to .gitignore so proprietary automation assets are not committed. * feat(deepseek-web): fix auth to use userToken + WASM PoW solver Rewrite deepseek-web executor from broken cookie auth to userToken Bearer flow (like Chat2API). Replace pure JS Keccak PoW with WASM solver (5.8s → 86ms). Add 14 models, validation, and dashboard UX. * fix(deepseek-web): update target_path to use challenge property * refactor(deepseek-web): streamline token handling and implement cache eviction * fix(deepseek-web): fix SSE parser, prompt format, and error handling - Handle all 3 DeepSeek SSE stream formats: initial fragments, APPEND operations, and bare string tokens (fixes truncated responses) - Simplify prompt builder to send system + last user message only (DeepSeek web API is single-turn, full history caused marker leakage) - Check json.code before token extraction (fixes "did not return access token: Authorization" on code 40003 with HTTP 200) - Clear session cache alongside token cache on auth errors - Add dev origin for remote testing Co-authored-by: Cursor <cursoragent@cursor.com> * chore: ignore memory-bank and cursor agent rules from tracking Co-authored-by: Cursor <cursoragent@cursor.com> * feat: enhance documentation and configuration for Fumadocs integration - Added Fumadocs MDX support in the Next.js configuration. - Updated transpile packages to include fumadocs-ui and fumadocs-core. - Implemented a comprehensive set of redirects for documentation paths to improve navigation. - Removed the generate-docs-index script as it is no longer needed. - Updated various documentation titles for consistency and clarity. - Enhanced global styles to incorporate Fumadocs UI themes and styles. * refactor(docs): cleanup fumadocs PR — revert deepseek, add i18n fallback, restore LanguageSelector - Revert unrelated deepseek-web.ts changes (should be separate PR) - Add .source/ to .gitignore (Fumadocs generated files) - Remove contributor IP from allowedDevOrigins - Add i18n runtime fallback: reads NEXT_LOCALE cookie, loads translated .md from docs/i18n/<locale>/docs/ (preserves existing translation pipeline) - Restore LanguageSelector in Fumadocs layout nav - Restore SEO metadata (title template, description, robots) * fix(codex): use allowlist to strip non-Responses-API fields in non-passthrough path (cheaper-inference#2608) (cheaper-inference#2615) Integrated into release/v3.8.3 — fix(codex): allowlist-based sanitization for gpt-5.5 Responses API * fix(deepseek-web): fix SSE parser, prompt format, error handling, and cache keys (cheaper-inference#2616) Integrated into release/v3.8.3 — fix(deepseek-web): SSE parser (APPEND + bare tokens), prompt builder, error handling, session cache cleanup * chore(config): ignore additional agent workflow command files Add newly introduced agent workflow and Claude command files to .gitignore so proprietary automation assets are not committed. * feat(docs): migrate /docs to Fumadocs MDX with nested routes (cheaper-inference#2614) Integrated into release/v3.8.3 — Fumadocs MDX migration with nested routes, search API, and 50+ URL redirects * fix(catalog): skip static PROVIDER_MODELS when synced models exist (cheaper-inference#2625) Integrated into release/v3.8.3 * fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus (cheaper-inference#2629) Integrated into release/v3.8.3 * fix(cli): register tsx loader and add opencode config subcommand (cheaper-inference#2631) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (cheaper-inference#2628) Integrated into release/v3.8.3 * fix(claude): improve Pi and OpenCode compatibility (cheaper-inference#2621) Integrated into release/v3.8.3 * fix: restore semantic passthrough system-role-only extraction instead of full normalization (cheaper-inference#2620) Integrated into release/v3.8.3 * fix(kiro): stabilize conversationId across prompt compression (cheaper-inference#2630) Integrated into release/v3.8.3 * fix(deepseek-web): SSE thinking/search routing and session lifecycle (cheaper-inference#2624) Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul * feat(dashboard): free-tier grouping with symbolic link in /providers (cheaper-inference#2632) Integrated into release/v3.8.3 * fix: close implementation gaps — t3-chat-web, stream_options, combo_strategy, batch config (cheaper-inference#2634) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (cheaper-inference#2633) Integrated into release/v3.8.3 * fix(reasoning): extend reasoning_content injection to Kimi K2 and other replay models (cheaper-inference#2639) Integrated into release/v3.8.3 * fix(cli): Linux autostart via systemd user service (fixes cheaper-inference#2627) (cheaper-inference#2635) Integrated into release/v3.8.3 * Refactor/providers free tier (cheaper-inference#2640) Integrated into release/v3.8.3 * fix(tests): remove duplicate assertion in schema coercion & fix(cli): ignore system vars in env check * fix(combo): preserve omniModel tag in streaming output for round-trip context pinning (cheaper-inference#2646) Integrated into release/v3.8.3 * feat(dashboard): media providers pages + Web Fetch category (cheaper-inference#2645) Integrated into release/v3.8.3 * Feature provider adapta org com tutorial de conexão em modal (cheaper-inference#2643) Integrated into release/v3.8.3 * fix(rtk): skip content-based filter matching for non-shell tool results (cheaper-inference#2642) Integrated into release/v3.8.3 * fix(translator): enable Claude extended thinking for Copilot Responses-API requests (cheaper-inference#2647) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (cheaper-inference#2641) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (cheaper-inference#2638) Integrated into release/v3.8.3 * feat(dashboard): mini-playground inline (Phase 4) (cheaper-inference#2648) Integrated into release/v3.8.3 * fix(settings): fix Require Login modal Cancel button text and dismissal (cheaper-inference#2649) Integrated into release/v3.8.3 * feat(combos): universal context handoff for cross-model conversation continuity (cheaper-inference#2653) Integrated into release/v3.8.3 * chore(release): bump to v3.8.3 — changelog, docs, version sync * feat(i18n): complete zh-CN translations for 1220 missing keys (cheaper-inference#2655) Integrated into release/v3.8.3 * chore(release): include electron package changes in v3.8.3 * docs(changelog): integrate PR cheaper-inference#2655 into v3.8.3 * feat(i18n): translate 377 additional zh-CN entries (81 new keys + 296 same-as-en) (cheaper-inference#2659) Integrated into release/v3.8.3 * feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation (cheaper-inference#2656) Integrated into release/v3.8.3 * docs: update changelog for PR integrations under v3.8.3 * feat(cli): integrate native updates, autostart and headless CLI mode (cheaper-inference#2662) Integrated into release/v3.8.3 * fix(proxy): save dashboard custom proxies in registry (cheaper-inference#2661) Integrated into release/v3.8.3 * feat(dashboard): chat-first test slide-over (Option A) (cheaper-inference#2660) Integrated into release/v3.8.3 * docs: update changelog with Batch 2 PR merges for v3.8.3 * fix: add xhigh+max to effortLevel schema; add opencode-plugin publish job (cheaper-inference#2666) Integrated into release/v3.8.3 * docs: update changelog with Batch 3 PR cheaper-inference#2666 merge for v3.8.3 * feat(quota+providers): card-grid layout, provider group headers, Codex race fix (cheaper-inference#2667) Integrated into release/v3.8.3 * feat(dashboard): real-time live WebSocket monitoring (cheaper-inference#2668) Integrated into release/v3.8.3 * feat(copilot): AI assistant with CodeGraph + CLI + knowledge base (cheaper-inference#2669) Integrated into release/v3.8.3 * feat(pipeline): pre-request middleware hooks (cheaper-inference#2670) Integrated into release/v3.8.3 * feat(resilience): credential health check + adaptive circuit breaker (cheaper-inference#2671) Integrated into release/v3.8.3 * feat(playground): combo routing visual simulator (cheaper-inference#2672) Integrated into release/v3.8.3 * feat(auth): API key groups with model-level permissions (cheaper-inference#2673) Integrated into release/v3.8.3 * feat(pwa): enhanced manifest + push notification support (cheaper-inference#2674) Integrated into release/v3.8.3 * feat(proxy): serverless relay endpoints with rate limiting (cheaper-inference#2675) Integrated into release/v3.8.3 * docs(changelog): update changelog for PRs 2667-2675 & fix: resolve typescript compile-time errors * fix(db): remove transactions from migrations Remove explicit transaction wrappers from recent migrations and correct the API key groups migration metadata. Also fix codegraph path resolution for ESM environments and refresh generated fumadocs source output. --------- Co-authored-by: Ömer Vehbe <ovehbe@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Mr. Meowgi <mr@meowgi.dev> Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com> Co-authored-by: amogus22877769 <y.lev357@gmail.com> Co-authored-by: Halil Tezcan KARABULUT <info@hlltzcnkb.com> Co-authored-by: Tentoxa <53821604+Tentoxa@users.noreply.github.com> Co-authored-by: HALDRO <121296348+HALDRO@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: janeza2 <49841619+janeza2@users.noreply.github.com> Co-authored-by: df4p <38404+df4p@users.noreply.github.com> Co-authored-by: ivan-mezentsev <ivan@mezentsev.me> Co-authored-by: Chewji <126886556+Chewji9875@users.noreply.github.com> Co-authored-by: L-aros <107354918+L-aros@users.noreply.github.com> Co-authored-by: M.M <mr.maatoug@gmail.com> Co-authored-by: Benson K B <bensonkbmca@gmail.com> Co-authored-by: terence71-glitch <mcdowellterence71@gmail.com>
* chore(config): ignore additional agent workflow command files Add newly introduced agent workflow and Claude command files to .gitignore so proprietary automation assets are not committed. * feat(deepseek-web): fix auth to use userToken + WASM PoW solver Rewrite deepseek-web executor from broken cookie auth to userToken Bearer flow (like Chat2API). Replace pure JS Keccak PoW with WASM solver (5.8s → 86ms). Add 14 models, validation, and dashboard UX. * fix(deepseek-web): update target_path to use challenge property * refactor(deepseek-web): streamline token handling and implement cache eviction * fix(deepseek-web): fix SSE parser, prompt format, and error handling - Handle all 3 DeepSeek SSE stream formats: initial fragments, APPEND operations, and bare string tokens (fixes truncated responses) - Simplify prompt builder to send system + last user message only (DeepSeek web API is single-turn, full history caused marker leakage) - Check json.code before token extraction (fixes "did not return access token: Authorization" on code 40003 with HTTP 200) - Clear session cache alongside token cache on auth errors - Add dev origin for remote testing Co-authored-by: Cursor <cursoragent@cursor.com> * chore: ignore memory-bank and cursor agent rules from tracking Co-authored-by: Cursor <cursoragent@cursor.com> * feat: enhance documentation and configuration for Fumadocs integration - Added Fumadocs MDX support in the Next.js configuration. - Updated transpile packages to include fumadocs-ui and fumadocs-core. - Implemented a comprehensive set of redirects for documentation paths to improve navigation. - Removed the generate-docs-index script as it is no longer needed. - Updated various documentation titles for consistency and clarity. - Enhanced global styles to incorporate Fumadocs UI themes and styles. * refactor(docs): cleanup fumadocs PR — revert deepseek, add i18n fallback, restore LanguageSelector - Revert unrelated deepseek-web.ts changes (should be separate PR) - Add .source/ to .gitignore (Fumadocs generated files) - Remove contributor IP from allowedDevOrigins - Add i18n runtime fallback: reads NEXT_LOCALE cookie, loads translated .md from docs/i18n/<locale>/docs/ (preserves existing translation pipeline) - Restore LanguageSelector in Fumadocs layout nav - Restore SEO metadata (title template, description, robots) * fix(codex): use allowlist to strip non-Responses-API fields in non-passthrough path (cheaper-inference#2608) (cheaper-inference#2615) Integrated into release/v3.8.3 — fix(codex): allowlist-based sanitization for gpt-5.5 Responses API * fix(deepseek-web): fix SSE parser, prompt format, error handling, and cache keys (cheaper-inference#2616) Integrated into release/v3.8.3 — fix(deepseek-web): SSE parser (APPEND + bare tokens), prompt builder, error handling, session cache cleanup * chore(config): ignore additional agent workflow command files Add newly introduced agent workflow and Claude command files to .gitignore so proprietary automation assets are not committed. * feat(docs): migrate /docs to Fumadocs MDX with nested routes (cheaper-inference#2614) Integrated into release/v3.8.3 — Fumadocs MDX migration with nested routes, search API, and 50+ URL redirects * fix(catalog): skip static PROVIDER_MODELS when synced models exist (cheaper-inference#2625) Integrated into release/v3.8.3 * fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus (cheaper-inference#2629) Integrated into release/v3.8.3 * fix(cli): register tsx loader and add opencode config subcommand (cheaper-inference#2631) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (cheaper-inference#2628) Integrated into release/v3.8.3 * fix(claude): improve Pi and OpenCode compatibility (cheaper-inference#2621) Integrated into release/v3.8.3 * fix: restore semantic passthrough system-role-only extraction instead of full normalization (cheaper-inference#2620) Integrated into release/v3.8.3 * fix(kiro): stabilize conversationId across prompt compression (cheaper-inference#2630) Integrated into release/v3.8.3 * fix(deepseek-web): SSE thinking/search routing and session lifecycle (cheaper-inference#2624) Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul * feat(dashboard): free-tier grouping with symbolic link in /providers (cheaper-inference#2632) Integrated into release/v3.8.3 * fix: close implementation gaps — t3-chat-web, stream_options, combo_strategy, batch config (cheaper-inference#2634) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (cheaper-inference#2633) Integrated into release/v3.8.3 * fix(reasoning): extend reasoning_content injection to Kimi K2 and other replay models (cheaper-inference#2639) Integrated into release/v3.8.3 * fix(cli): Linux autostart via systemd user service (fixes cheaper-inference#2627) (cheaper-inference#2635) Integrated into release/v3.8.3 * Refactor/providers free tier (cheaper-inference#2640) Integrated into release/v3.8.3 * fix(tests): remove duplicate assertion in schema coercion & fix(cli): ignore system vars in env check * fix(combo): preserve omniModel tag in streaming output for round-trip context pinning (cheaper-inference#2646) Integrated into release/v3.8.3 * feat(dashboard): media providers pages + Web Fetch category (cheaper-inference#2645) Integrated into release/v3.8.3 * Feature provider adapta org com tutorial de conexão em modal (cheaper-inference#2643) Integrated into release/v3.8.3 * fix(rtk): skip content-based filter matching for non-shell tool results (cheaper-inference#2642) Integrated into release/v3.8.3 * fix(translator): enable Claude extended thinking for Copilot Responses-API requests (cheaper-inference#2647) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (cheaper-inference#2641) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (cheaper-inference#2638) Integrated into release/v3.8.3 * feat(dashboard): mini-playground inline (Phase 4) (cheaper-inference#2648) Integrated into release/v3.8.3 * fix(settings): fix Require Login modal Cancel button text and dismissal (cheaper-inference#2649) Integrated into release/v3.8.3 * feat(combos): universal context handoff for cross-model conversation continuity (cheaper-inference#2653) Integrated into release/v3.8.3 * chore(release): bump to v3.8.3 — changelog, docs, version sync * feat(i18n): complete zh-CN translations for 1220 missing keys (cheaper-inference#2655) Integrated into release/v3.8.3 * chore(release): include electron package changes in v3.8.3 * docs(changelog): integrate PR cheaper-inference#2655 into v3.8.3 * feat(i18n): translate 377 additional zh-CN entries (81 new keys + 296 same-as-en) (cheaper-inference#2659) Integrated into release/v3.8.3 * feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation (cheaper-inference#2656) Integrated into release/v3.8.3 * docs: update changelog for PR integrations under v3.8.3 * feat(cli): integrate native updates, autostart and headless CLI mode (cheaper-inference#2662) Integrated into release/v3.8.3 * fix(proxy): save dashboard custom proxies in registry (cheaper-inference#2661) Integrated into release/v3.8.3 * feat(dashboard): chat-first test slide-over (Option A) (cheaper-inference#2660) Integrated into release/v3.8.3 * docs: update changelog with Batch 2 PR merges for v3.8.3 * fix: add xhigh+max to effortLevel schema; add opencode-plugin publish job (cheaper-inference#2666) Integrated into release/v3.8.3 * docs: update changelog with Batch 3 PR cheaper-inference#2666 merge for v3.8.3 * feat(quota+providers): card-grid layout, provider group headers, Codex race fix (cheaper-inference#2667) Integrated into release/v3.8.3 * feat(dashboard): real-time live WebSocket monitoring (cheaper-inference#2668) Integrated into release/v3.8.3 * feat(copilot): AI assistant with CodeGraph + CLI + knowledge base (cheaper-inference#2669) Integrated into release/v3.8.3 * feat(pipeline): pre-request middleware hooks (cheaper-inference#2670) Integrated into release/v3.8.3 * feat(resilience): credential health check + adaptive circuit breaker (cheaper-inference#2671) Integrated into release/v3.8.3 * feat(playground): combo routing visual simulator (cheaper-inference#2672) Integrated into release/v3.8.3 * feat(auth): API key groups with model-level permissions (cheaper-inference#2673) Integrated into release/v3.8.3 * feat(pwa): enhanced manifest + push notification support (cheaper-inference#2674) Integrated into release/v3.8.3 * feat(proxy): serverless relay endpoints with rate limiting (cheaper-inference#2675) Integrated into release/v3.8.3 * docs(changelog): update changelog for PRs 2667-2675 & fix: resolve typescript compile-time errors * fix(db): remove transactions from migrations Remove explicit transaction wrappers from recent migrations and correct the API key groups migration metadata. Also fix codegraph path resolution for ESM environments and refresh generated fumadocs source output. --------- Co-authored-by: Ömer Vehbe <ovehbe@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Mr. Meowgi <mr@meowgi.dev> Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com> Co-authored-by: amogus22877769 <y.lev357@gmail.com> Co-authored-by: Halil Tezcan KARABULUT <info@hlltzcnkb.com> Co-authored-by: Tentoxa <53821604+Tentoxa@users.noreply.github.com> Co-authored-by: HALDRO <121296348+HALDRO@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: janeza2 <49841619+janeza2@users.noreply.github.com> Co-authored-by: df4p <38404+df4p@users.noreply.github.com> Co-authored-by: ivan-mezentsev <ivan@mezentsev.me> Co-authored-by: Chewji <126886556+Chewji9875@users.noreply.github.com> Co-authored-by: L-aros <107354918+L-aros@users.noreply.github.com> Co-authored-by: M.M <mr.maatoug@gmail.com> Co-authored-by: Benson K B <bensonkbmca@gmail.com> Co-authored-by: terence71-glitch <mcdowellterence71@gmail.com>
…ts (cheaper-inference#2642) Integrated into release/v3.8.3
* chore(config): ignore additional agent workflow command files Add newly introduced agent workflow and Claude command files to .gitignore so proprietary automation assets are not committed. * feat(deepseek-web): fix auth to use userToken + WASM PoW solver Rewrite deepseek-web executor from broken cookie auth to userToken Bearer flow (like Chat2API). Replace pure JS Keccak PoW with WASM solver (5.8s → 86ms). Add 14 models, validation, and dashboard UX. * fix(deepseek-web): update target_path to use challenge property * refactor(deepseek-web): streamline token handling and implement cache eviction * fix(deepseek-web): fix SSE parser, prompt format, and error handling - Handle all 3 DeepSeek SSE stream formats: initial fragments, APPEND operations, and bare string tokens (fixes truncated responses) - Simplify prompt builder to send system + last user message only (DeepSeek web API is single-turn, full history caused marker leakage) - Check json.code before token extraction (fixes "did not return access token: Authorization" on code 40003 with HTTP 200) - Clear session cache alongside token cache on auth errors - Add dev origin for remote testing Co-authored-by: Cursor <cursoragent@cursor.com> * chore: ignore memory-bank and cursor agent rules from tracking Co-authored-by: Cursor <cursoragent@cursor.com> * feat: enhance documentation and configuration for Fumadocs integration - Added Fumadocs MDX support in the Next.js configuration. - Updated transpile packages to include fumadocs-ui and fumadocs-core. - Implemented a comprehensive set of redirects for documentation paths to improve navigation. - Removed the generate-docs-index script as it is no longer needed. - Updated various documentation titles for consistency and clarity. - Enhanced global styles to incorporate Fumadocs UI themes and styles. * refactor(docs): cleanup fumadocs PR — revert deepseek, add i18n fallback, restore LanguageSelector - Revert unrelated deepseek-web.ts changes (should be separate PR) - Add .source/ to .gitignore (Fumadocs generated files) - Remove contributor IP from allowedDevOrigins - Add i18n runtime fallback: reads NEXT_LOCALE cookie, loads translated .md from docs/i18n/<locale>/docs/ (preserves existing translation pipeline) - Restore LanguageSelector in Fumadocs layout nav - Restore SEO metadata (title template, description, robots) * fix(codex): use allowlist to strip non-Responses-API fields in non-passthrough path (cheaper-inference#2608) (cheaper-inference#2615) Integrated into release/v3.8.3 — fix(codex): allowlist-based sanitization for gpt-5.5 Responses API * fix(deepseek-web): fix SSE parser, prompt format, error handling, and cache keys (cheaper-inference#2616) Integrated into release/v3.8.3 — fix(deepseek-web): SSE parser (APPEND + bare tokens), prompt builder, error handling, session cache cleanup * chore(config): ignore additional agent workflow command files Add newly introduced agent workflow and Claude command files to .gitignore so proprietary automation assets are not committed. * feat(docs): migrate /docs to Fumadocs MDX with nested routes (cheaper-inference#2614) Integrated into release/v3.8.3 — Fumadocs MDX migration with nested routes, search API, and 50+ URL redirects * fix(catalog): skip static PROVIDER_MODELS when synced models exist (cheaper-inference#2625) Integrated into release/v3.8.3 * fix(qoder): Cosy auth fallback for PAT tokens + vision support for qwen3-vl-plus (cheaper-inference#2629) Integrated into release/v3.8.3 * fix(cli): register tsx loader and add opencode config subcommand (cheaper-inference#2631) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (cheaper-inference#2628) Integrated into release/v3.8.3 * fix(claude): improve Pi and OpenCode compatibility (cheaper-inference#2621) Integrated into release/v3.8.3 * fix: restore semantic passthrough system-role-only extraction instead of full normalization (cheaper-inference#2620) Integrated into release/v3.8.3 * fix(kiro): stabilize conversationId across prompt compression (cheaper-inference#2630) Integrated into release/v3.8.3 * fix(deepseek-web): SSE thinking/search routing and session lifecycle (cheaper-inference#2624) Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul * feat(dashboard): free-tier grouping with symbolic link in /providers (cheaper-inference#2632) Integrated into release/v3.8.3 * fix: close implementation gaps — t3-chat-web, stream_options, combo_strategy, batch config (cheaper-inference#2634) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (cheaper-inference#2633) Integrated into release/v3.8.3 * fix(reasoning): extend reasoning_content injection to Kimi K2 and other replay models (cheaper-inference#2639) Integrated into release/v3.8.3 * fix(cli): Linux autostart via systemd user service (fixes cheaper-inference#2627) (cheaper-inference#2635) Integrated into release/v3.8.3 * Refactor/providers free tier (cheaper-inference#2640) Integrated into release/v3.8.3 * fix(tests): remove duplicate assertion in schema coercion & fix(cli): ignore system vars in env check * fix(combo): preserve omniModel tag in streaming output for round-trip context pinning (cheaper-inference#2646) Integrated into release/v3.8.3 * feat(dashboard): media providers pages + Web Fetch category (cheaper-inference#2645) Integrated into release/v3.8.3 * Feature provider adapta org com tutorial de conexão em modal (cheaper-inference#2643) Integrated into release/v3.8.3 * fix(rtk): skip content-based filter matching for non-shell tool results (cheaper-inference#2642) Integrated into release/v3.8.3 * fix(translator): enable Claude extended thinking for Copilot Responses-API requests (cheaper-inference#2647) Integrated into release/v3.8.3 * feat(dashboard): add search and filters to /dashboard/api-manager (cheaper-inference#2641) Integrated into release/v3.8.3 * feat(dashboard): risk notice modal for sensitive providers (cheaper-inference#2638) Integrated into release/v3.8.3 * feat(dashboard): mini-playground inline (Phase 4) (cheaper-inference#2648) Integrated into release/v3.8.3 * fix(settings): fix Require Login modal Cancel button text and dismissal (cheaper-inference#2649) Integrated into release/v3.8.3 * feat(combos): universal context handoff for cross-model conversation continuity (cheaper-inference#2653) Integrated into release/v3.8.3 * chore(release): bump to v3.8.3 — changelog, docs, version sync * feat(i18n): complete zh-CN translations for 1220 missing keys (cheaper-inference#2655) Integrated into release/v3.8.3 * chore(release): include electron package changes in v3.8.3 * docs(changelog): integrate PR cheaper-inference#2655 into v3.8.3 * feat(i18n): translate 377 additional zh-CN entries (81 new keys + 296 same-as-en) (cheaper-inference#2659) Integrated into release/v3.8.3 * feat(dashboard): add Cmd+K / Ctrl+K command palette for sidebar navigation (cheaper-inference#2656) Integrated into release/v3.8.3 * docs: update changelog for PR integrations under v3.8.3 * feat(cli): integrate native updates, autostart and headless CLI mode (cheaper-inference#2662) Integrated into release/v3.8.3 * fix(proxy): save dashboard custom proxies in registry (cheaper-inference#2661) Integrated into release/v3.8.3 * feat(dashboard): chat-first test slide-over (Option A) (cheaper-inference#2660) Integrated into release/v3.8.3 * docs: update changelog with Batch 2 PR merges for v3.8.3 * fix: add xhigh+max to effortLevel schema; add opencode-plugin publish job (cheaper-inference#2666) Integrated into release/v3.8.3 * docs: update changelog with Batch 3 PR cheaper-inference#2666 merge for v3.8.3 * feat(quota+providers): card-grid layout, provider group headers, Codex race fix (cheaper-inference#2667) Integrated into release/v3.8.3 * feat(dashboard): real-time live WebSocket monitoring (cheaper-inference#2668) Integrated into release/v3.8.3 * feat(copilot): AI assistant with CodeGraph + CLI + knowledge base (cheaper-inference#2669) Integrated into release/v3.8.3 * feat(pipeline): pre-request middleware hooks (cheaper-inference#2670) Integrated into release/v3.8.3 * feat(resilience): credential health check + adaptive circuit breaker (cheaper-inference#2671) Integrated into release/v3.8.3 * feat(playground): combo routing visual simulator (cheaper-inference#2672) Integrated into release/v3.8.3 * feat(auth): API key groups with model-level permissions (cheaper-inference#2673) Integrated into release/v3.8.3 * feat(pwa): enhanced manifest + push notification support (cheaper-inference#2674) Integrated into release/v3.8.3 * feat(proxy): serverless relay endpoints with rate limiting (cheaper-inference#2675) Integrated into release/v3.8.3 * docs(changelog): update changelog for PRs 2667-2675 & fix: resolve typescript compile-time errors * fix(db): remove transactions from migrations Remove explicit transaction wrappers from recent migrations and correct the API key groups migration metadata. Also fix codegraph path resolution for ESM environments and refresh generated fumadocs source output. --------- Co-authored-by: Ömer Vehbe <ovehbe@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Mr. Meowgi <mr@meowgi.dev> Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com> Co-authored-by: amogus22877769 <y.lev357@gmail.com> Co-authored-by: Halil Tezcan KARABULUT <info@hlltzcnkb.com> Co-authored-by: Tentoxa <53821604+Tentoxa@users.noreply.github.com> Co-authored-by: HALDRO <121296348+HALDRO@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: janeza2 <49841619+janeza2@users.noreply.github.com> Co-authored-by: df4p <38404+df4p@users.noreply.github.com> Co-authored-by: ivan-mezentsev <ivan@mezentsev.me> Co-authored-by: Chewji <126886556+Chewji9875@users.noreply.github.com> Co-authored-by: L-aros <107354918+L-aros@users.noreply.github.com> Co-authored-by: M.M <mr.maatoug@gmail.com> Co-authored-by: Benson K B <bensonkbmca@gmail.com> Co-authored-by: terence71-glitch <mcdowellterence71@gmail.com>
Warning: Experimental Fix — Please Review Carefully
This PR addresses a real bug observed in production sessions but the fix is relatively new and has not been extensively tested. Please do not merge if anything looks wrong — feedback and corrections are very welcome.
Problem
RTK compression was applying keepPatterns/stripPatterns to all tool-role messages by matching on text content alone (via contentPatterns in detectCommandType).
This caused false positives: a TypeScript source file read via the built-in Read tool — containing a string like error TS2322 in an example, comment, or JSDoc — would match the build-typescript detector and get filtered down to error-only lines. The model would then see a heavily truncated file and assume the Read tool was broken, falling back to bash cat/head workarounds.
Confirmed via session log analysis: model reasoning explicitly stated 'read tool seems to be returning only partial content' and switched to bash fallbacks.
This aligns with how the official rtk-ai/rtk CLI works: 'hook only runs on Bash tool calls. Claude Code built-in tools like Read, Grep, and Glob do not pass through the Bash hook.'
Fix
In applyRtkCompression(), build a tool_call_id to toolName/command lookup from preceding assistant tool_calls entries. For each tool-role message:
smartTruncate and deduplication still apply to all tool results regardless of skipFilters.
Shell tool regex pattern taken from existing isTerminalTool() in open-sse/executors/grok-web.ts to stay consistent with project conventions.
What Was Not Changed
Testing
Uncertainty
Not 100% certain tool_call_id lookup will always be present in all provider formats (Anthropic, Gemini, etc.). If absent, code falls back to existing content-based detection — worst case is old behavior, not a regression.
Alternative Approach Worth Considering
This fix works at the message routing level — deciding per tool_call_id whether to apply filters. But there may be a cleaner fix on the detection side: tighten contentPatterns in the filter catalog so they require higher confidence before matching (e.g. require commandMatched in addition to contentMatches, or raise the confidence threshold). That would prevent false positives at the source rather than routing around them. The current approach is safer and more explicit, but the detection-side fix might be more correct long-term.