A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode,DeepSeek Harness and more. Only official website: ccswitch.io
This report summarizes scanner evidence for farion1231/cc-switch, a Rust project with 150,519 GitHub stars. SynthScan examined 661,772 lines of code across 1499 source files, recording 808 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 2.2 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 495 finding(s).
Are imports declared and package/API names verified? 76 finding(s).
Are wrappers, guards, and repeated structures necessary? 333 finding(s).
Which changes need focused human review? 808 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 808 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/types/sessionFixtures.test.ts | 37 | // ─── 运行时 schema ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/types/sessionFixtures.test.ts | 321 | // ─── 契约规则(与 Rust providers/blocks.rs 常量一致) ────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 80 | // ─── 文案 ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 523 | // ─── 额度文字(和供应商卡片同一套:按设置写剩余或已用,快用完 / 已用完才多说一句)──────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 1022 | // ─── 「需要路由」判定(镜像前端 `providerNeedsRouting`)────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 1125 | // ─── 快照 ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 1369 | // ─── 问题区的状态 ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 1497 | // ─── 反馈行 ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 1613 | // ─── 菜单模型(纯数据)──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 2013 | // ─── 读状态 → 模型 ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 2085 | // ─── 模型 → 托盘面板 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 2387 | // ─── 模型 → Tauri 菜单 ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 2484 | // ─── 图标圆点和悬停提示 ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 2776 | // ─── 点击 ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray.rs | 3166 | // ─── 额度刷新 ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray_panel.rs | 72 | // ─── 文案 ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray_panel.rs | 191 | // ─── 方位 ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray_panel.rs | 339 | // ─── 窗口 ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray_panel.rs | 569 | // ─── 平台:玻璃和摆放 ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/tray_panel.rs | 1078 | // ─── 命令 ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/content.rs | 181 | // ── ContentRef ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/content.rs | 550 | // ── 图片 ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/hermes.rs | 55 | // ── SQLite scanning ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/hermes.rs | 638 | // ── JSONL scanning ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/hermes.rs | 1008 | // ── SQLite (state.db) ─────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/claude.rs | 326 | // ─── 会话正文解析(设计 §4.1)──────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/claude.rs | 991 | // ─── 块构造 ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/claude.rs | 1314 | // ─── 文本规则 ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/claude.rs | 1400 | // ─── 原始记录(只声明用到的字段,其余由 serde 跳过)────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex.rs | 231 | // ─── 会话内容解析(设计 §4.2)──────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex.rs | 268 | // ─── 行结构(只声明用得到的字段,其余跳过不分配)────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex.rs | 491 | // ─── 状态机 ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex.rs | 778 | // ─── 轮次 ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex.rs | 850 | // ─── 消息输出 ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex.rs | 1104 | // ─── 工具调用 ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex.rs | 1321 | // ─── 结构化项 ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex.rs | 1530 | // ─── 输出与回填 ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex.rs | 1758 | // ─── 收尾 ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex.rs | 2769 | // ─── load_messages:结构化 blocks(§4.2)──────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex_items.rs | 32 | // ─── 行位置与 ContentRef ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex_items.rs | 39 | // ─── 借用式反序列化 ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex_items.rs | 185 | // ─── item_completed ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex_items.rs | 595 | // ─── 命令文本 ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex_items.rs | 716 | // ─── 工具输出头 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex_items.rs | 810 | // ─── diff ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex_items.rs | 893 | // ─── 图片 ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/codex_items.rs | 943 | // ─── block 构造 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/blocks.rs | 204 | // ─── 预览 ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/blocks.rs | 263 | // ─── 标题提炼(§3.3):输出 ≤ TITLE_CHARS,多行取首行并加 `…` ───────────────── | COMMENT |
| MEDIUM | src-tauri/src/session_manager/providers/blocks.rs | 748 | // ─── diff 统计 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/proxy/copilot_optimizer.rs | 517 | // ─── 内部辅助 ───────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/proxy/copilot_optimizer.rs | 657 | // ─── 测试 ───────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/commands/omo.rs | 39 | // ── OMO Slim commands ─────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/commands/import_export.rs | 28 | // ─── File import/export ────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/commands/import_export.rs | 97 | // ─── File dialogs ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/commands/import_export.rs | 143 | // ─── Database backup management ───────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/commands/import_export.rs | 213 | // ─── Backup storage overview ───────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/services/subscription_grok.rs | 34 | // ── 凭据读取 ────────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/services/subscription_grok.rs | 181 | // ── gRPC-web 帧与 protobuf 解析 ────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/services/subscription_grok.rs | 451 | // ── API 查询 ────────────────────────────────────────────── | COMMENT |
| 174 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/config/codexReasoningLevelPresets.test.ts | 1 | import { describe, expect, it } from "vitest"; | COMMENT |
| LOW | tests/config/codexReasoningLevelPresets.test.ts | 121 | ], | COMMENT |
| LOW | tests/config/codexReasoningLevelPresets.test.ts | 161 | // 双官方清单内(effort 仅 high/max 两档真实深度);不声明 default=回落 | COMMENT |
| LOW | tests/config/codexReasoningLevelPresets.test.ts | 221 | // reasoning.effort 枚举(lmstudio.ai/blog/lmstudio-v0.3.29,2026-10-14) | COMMENT |
| LOW | .github/workflows/sync-r2.yml | 1 | # Mirror release assets to Cloudflare R2 so ccswitch.io/download can serve | COMMENT |
| LOW | .github/workflows/wsl2-nightly.yml | 1 | name: WSL2 Nightly | COMMENT |
| LOW | src-tauri/build.rs | 1 | fn main() { | COMMENT |
| LOW | src-tauri/tests/golden/codex_red_lines.rs | 1 | //! ② Codex 直连切换的红线。 | COMMENT |
| LOW | src-tauri/tests/golden/codex_red_lines.rs | 21 | //! | 10 | 归一化不覆盖用户自己的同名表 | 本文件 | | COMMENT |
| LOW | src-tauri/tests/golden/main.rs | 1 | //! 重构前的金标测试。 | COMMENT |
| LOW | src-tauri/src/model_capabilities.rs | 61 | COMMENT | |
| LOW | src-tauri/src/codex_history_migration.rs | 441 | let generation = entry.path(); | COMMENT |
| LOW | src-tauri/src/hermes_config.rs | 1 | //! Hermes Agent 配置文件读写模块 | COMMENT |
| LOW | src-tauri/src/hermes_config.rs | 21 | //! api_key: sk-or-... | COMMENT |
| LOW | src-tauri/src/hermes_config.rs | 221 | } | COMMENT |
| LOW | src-tauri/src/hermes_config.rs | 481 | /// ``` | COMMENT |
| LOW | src-tauri/src/hermes_config.rs | 781 | /// Upserts into the `custom_providers:` YAML sequence (matched by `name`). | COMMENT |
| LOW | src-tauri/src/hermes_config.rs | 1101 | pub(crate) fn json_to_yaml(json: &serde_json::Value) -> Result<serde_yaml::Value, AppError> { | COMMENT |
| LOW | src-tauri/src/config.rs | 1 | use serde::{Deserialize, Serialize}; | COMMENT |
| LOW | src-tauri/src/lib.rs | 1941 | // 此时应仅阻止退出、保持托盘后台运行。 | COMMENT |
| LOW | src-tauri/src/lib.rs | 2301 | .buttons(MessageDialogButtons::OkCancelCustom( | COMMENT |
| LOW | src-tauri/src/lib.rs | 2361 | /// | COMMENT |
| LOW | src-tauri/src/provider.rs | 21 | #[serde(skip_serializing_if = "Option::is_none")] | COMMENT |
| LOW | src-tauri/src/provider.rs | 301 | pub base_url: Option<String>, | COMMENT |
| LOW | src-tauri/src/provider.rs | 321 | pub coding_plan_provider: Option<String>, | COMMENT |
| LOW | src-tauri/src/provider.rs | 341 | #[derive(Debug, Clone, Serialize, Deserialize)] | COMMENT |
| LOW | src-tauri/src/provider.rs | 381 | /// 使用托管账号认证(如 GitHub Copilot OAuth) | COMMENT |
| LOW | src-tauri/src/provider.rs | 441 | } | COMMENT |
| LOW | src-tauri/src/provider.rs | 521 | pub partner_promotion_key: Option<String>, | COMMENT |
| LOW | src-tauri/src/provider.rs | 541 | /// Codex Copilot only: absent or auto prefers advertised Responses, then Chat. | COMMENT |
| LOW | src-tauri/src/provider.rs | 561 | /// If not set, Claude -> Responses conversions use a client-provided session/thread | COMMENT |
| LOW | src-tauri/src/provider.rs | 581 | )] | COMMENT |
| LOW | src-tauri/src/provider.rs | 601 | skip_serializing_if = "Option::is_none" | COMMENT |
| LOW | src-tauri/src/provider.rs | 641 | pub display_name: Option<String>, | COMMENT |
| LOW | src-tauri/src/provider.rs | 721 | #[serde(default)] | COMMENT |
| LOW | src-tauri/src/provider.rs | 741 | #[serde(rename = "opusModel")] | COMMENT |
| LOW | src-tauri/src/provider.rs | 781 | /// 供应商名称 | COMMENT |
| LOW | src-tauri/src/provider.rs | 801 | /// 备注信息 | COMMENT |
| LOW | src-tauri/src/provider.rs | 1001 | // ============================================================================ | COMMENT |
| LOW | src-tauri/src/codex_config.rs | 21 | /// provider is routed through CC Switch. A dedicated id is an ownership | COMMENT |
| LOW | src-tauri/src/codex_config.rs | 41 | /// `web_search` hosted tool. A BLACKLIST (default-on): everything not listed keeps | COMMENT |
| LOW | src-tauri/src/codex_config.rs | 61 | "minimax.io", // MiniMax global (api.minimax.io) | COMMENT |
| LOW | src-tauri/src/codex_config.rs | 221 | pub enum CodexCatalogToolProfile { | COMMENT |
| LOW | src-tauri/src/codex_config.rs | 241 | /// which also honors settings-level `apiFormat` and the TOML `wire_api` (matching | COMMENT |
| LOW | src-tauri/src/codex_config.rs | 1021 | /// The auth mode Codex resolves for an `auth.json` payload | COMMENT |
| LOW | src-tauri/src/codex_config.rs | 1421 | model: String, | COMMENT |
| LOW | src-tauri/src/codex_config.rs | 1981 | /// Hosts whose native `/responses` gateway publishes an OFFICIAL Codex model | COMMENT |
| LOW | src-tauri/src/codex_config.rs | 2121 | /// field ..."). `base_instructions` is the other known required field; the | COMMENT |
| LOW | src-tauri/src/codex_config.rs | 2541 | Official { | COMMENT |
| LOW | src-tauri/src/codex_config.rs | 2561 | /// custom 工具 `exec`;其余第三方行是 direct,只有 `exec_command`。两者若共用一个值,切换时 | COMMENT |
| LOW | src-tauri/src/codex_config.rs | 2741 | } | COMMENT |
| LOW | src-tauri/src/usage_events.rs | 1 | //! 使用统计实时刷新事件模块 | COMMENT |
| LOW | src-tauri/src/app_config.rs | 301 | pub repo_owner: Option<String>, | COMMENT |
| LOW | src-tauri/src/app_config.rs | 661 | /// 应用管理器(claude/codex) | COMMENT |
| LOW | src-tauri/src/app_config.rs | 861 | Self::auto_import_prompt_if_exists(&mut config, AppType::OpenClaw)?; | COMMENT |
| LOW | src-tauri/src/tray_panel.rs | 1 | //! 托盘面板:Windows 右键点托盘图标、macOS 左右键点图标时,在图标旁弹出一块玻璃面板, | COMMENT |
| LOW | src-tauri/src/agy_config.rs | 1 | //! Antigravity CLI (`agy`) 的 live 配置。 | COMMENT |
| LOW | src-tauri/src/linux_fix.rs | 1 | //! Linux 专用的主窗口恢复补丁。 | COMMENT |
| LOW | src-tauri/src/linux_fix.rs | 21 | //! 排队请求不会延迟抢焦点; | COMMENT |
| LOW | src-tauri/src/linux_fix.rs | 261 | } | COMMENT |
| 255 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | deplink.html | 1359 | "ANTHROPIC_AUTH_TOKEN": "sk-your-api-key-here", | CODE |
| HIGH | deplink.html | 1368 | "OPENAI_API_KEY": "sk-your-api-key-here" | CODE |
| HIGH⚡ | deplink.html | 1387 | api_key = "sk-your-api-key-here" | CODE |
| HIGH⚡ | deplink.html | 1391 | "GEMINI_API_KEY": "AIzaSy-your-api-key-here", | CODE |
| HIGH⚡ | deplink.html | 1399 | "apiKey": "sk-your-api-key-here" | CODE |
| HIGH | docs/user-manual/ja/5-faq/5.1-config-files.md | 336 | apiKey: "your-api-key", | CODE |
| HIGH | docs/user-manual/ja/2-providers/2.1-add.md | 135 | "ANTHROPIC_API_KEY": "your-api-key", | CODE |
| HIGH | docs/user-manual/ja/2-providers/2.1-add.md | 155 | "OPENAI_API_KEY": "your-api-key" | CODE |
| HIGH | docs/user-manual/ja/2-providers/2.1-add.md | 195 | "GEMINI_API_KEY": "your-api-key", | CODE |
| HIGH | docs/user-manual/zh/5-faq/5.1-config-files.md | 336 | apiKey: "your-api-key", | CODE |
| HIGH | docs/user-manual/zh/2-providers/2.1-add.md | 135 | "ANTHROPIC_API_KEY": "your-api-key", | CODE |
| HIGH | docs/user-manual/zh/2-providers/2.1-add.md | 155 | "OPENAI_API_KEY": "your-api-key" | CODE |
| HIGH | docs/user-manual/zh/2-providers/2.1-add.md | 195 | "GEMINI_API_KEY": "your-api-key", | CODE |
| HIGH | docs/user-manual/en/5-faq/5.1-config-files.md | 336 | apiKey: "your-api-key", | CODE |
| HIGH | docs/user-manual/en/2-providers/2.1-add.md | 135 | "ANTHROPIC_API_KEY": "your-api-key", | CODE |
| HIGH | docs/user-manual/en/2-providers/2.1-add.md | 155 | "OPENAI_API_KEY": "your-api-key" | CODE |
| HIGH | docs/user-manual/en/2-providers/2.1-add.md | 195 | "GEMINI_API_KEY": "your-api-key", | CODE |
| HIGH | src/components/providers/forms/CommonConfigEditor.tsx | 241 | "ANTHROPIC_AUTH_TOKEN": "your-api-key-here" | CODE |
| HIGH | src/components/providers/forms/ProviderForm.tsx | 3059 | "apiKey": "your-api-key-here" | CODE |
| HIGH | src/components/providers/forms/ProviderForm.tsx | 3095 | "apiKey": "your-api-key-here", | CODE |
| HIGH | src/components/providers/forms/GeminiConfigSections.tsx | 63 | GEMINI_API_KEY=sk-your-api-key-here | CODE |
| HIGH | src/i18n/locales/zh.json | 1990 | "authJsonPlaceholder": "{\n \"OPENAI_API_KEY\": \"sk-your-api-key-here\"\n}", | CODE |
| HIGH | src/i18n/locales/tr.json | 1974 | "authJsonPlaceholder": "{\n \"OPENAI_API_KEY\": \"sk-your-api-key-here\"\n}", | CODE |
| HIGH | src/i18n/locales/ja.json | 1990 | "authJsonPlaceholder": "{\n \"OPENAI_API_KEY\": \"sk-your-api-key-here\"\n}", | CODE |
| HIGH | src/i18n/locales/en.json | 1990 | "authJsonPlaceholder": "{\n \"OPENAI_API_KEY\": \"sk-your-api-key-here\"\n}", | CODE |
| HIGH | src/i18n/locales/zh-TW.json | 1991 | "authJsonPlaceholder": "{\n \"OPENAI_API_KEY\": \"sk-your-api-key-here\"\n}", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/components/PiProviderForm.test.tsx | 18 | async function fetchModelsAndClosePicker(user: User) { | CODE |
| LOW | src/types/usage.ts | 283 | export function getCacheWriteAvailability( | CODE |
| LOW | src/types/usage.ts | 321 | export function isNonNegativeDecimalString(value: string): boolean { | CODE |
| LOW | src/types/omo.ts | 302 | export function parseOmoOtherFieldsObject( | CODE |
| LOW | src/types/omo.ts | 427 | export function buildOmoSlimProfilePreview( | CODE |
| LOW | src/config/universalProviderPresets.ts | 96 | export function createUniversalProviderFromPreset( | CODE |
| LOW | src/config/hermesBuiltinProviderIds.ts | 74 | export function isHermesBuiltinProviderId(providerKey: string): boolean { | CODE |
| LOW | src/config/openclawProviderPresets.ts | 61 | export function rebaseOpenClawSuggestedDefaults( | CODE |
| LOW | src/config/codingPlanProviders.ts | 109 | export function codingPlanEnabledByDefault( | CODE |
| LOW | src/config/codingPlanProviders.ts | 120 | export function extractBaseUrlForUsageDetection( | CODE |
| LOW | src/config/piProviderPresets.ts | 3445 | function materializeVerifiedThinkingProfiles( | CODE |
| LOW | src/config/piModelCatalog.ts | 935 | export function getPiModelCatalogReference( | CODE |
| LOW | src/utils/claudeEditorOverlay.ts | 14 | export function withClaudeGatewayDefaults( | CODE |
| LOW | src/utils/claudeEditorOverlay.ts | 33 | export function overlayClaudeProviderFields( | CODE |
| LOW | src/utils/providerCapabilities.ts | 26 | function hasExplicitCodexThirdPartyUpstream( | CODE |
| LOW | src/utils/providerCapabilities.ts | 46 | export function resolveCodexOfficialIdentity( | CODE |
| LOW | src/utils/providerCapabilities.ts | 128 | export function supportsConnectivityCheck( | CODE |
| LOW | src/utils/providerCapabilities.ts | 141 | export function supportsOfficialProxyTakeover( | CODE |
| LOW | src/utils/deepLinkConfigPreview.ts | 44 | export function parseDeepLinkConfigPreview( | CODE |
| LOW | src/utils/postChangeSync.ts | 7 | export async function syncCurrentProvidersLiveSafe(): Promise<{ | CODE |
| LOW | src/components/UsageScriptModal.tsx | 202 | function isOfficialSubscriptionProvider(provider: Provider, appId: AppId) { | CODE |
| LOW | src/components/settings/WebdavSyncSection.tsx | 161 | function buildPasswordPreservationKey(values: { | CODE |
| LOW | src/components/openclaw/utils.ts | 17 | export function parseOpenClawEnvEditorValue(raw: string): OpenClawEnvConfig { | CODE |
| LOW⚡ | src/components/openclaw/utils.ts | 44 | export function getOpenClawToolsProfileSelectValue(profile?: string): string { | CODE |
| LOW⚡ | src/components/openclaw/utils.ts | 53 | export function getOpenClawUnsupportedProfile(profile?: string): string | null { | CODE |
| LOW⚡ | src/components/openclaw/utils.ts | 60 | export function getOpenClawTimeoutInputValue( | CODE |
| LOW | src/components/universal/UniversalProviderFormModal.tsx | 30 | export function UniversalProviderFormModal({ | CODE |
| LOW | src/components/shell/NewLayoutDialog.tsx | 44 | export function useNewLayoutNoticePending( | CODE |
| LOW | src/components/providers/presentation.ts | 191 | function buildSwitchSectionsByView(input: SwitchModeInput): ProviderSection[] { | CODE |
| LOW | …mponents/providers/forms/ClaudeDesktopProviderForm.tsx | 249 | export function ClaudeDesktopProviderForm({ | CODE |
| LOW | …ponents/providers/forms/ManagedAccountRemoveDialog.tsx | 38 | export function ManagedAccountRemoveDialog({ | CODE |
| LOW | src/components/providers/forms/modelMetadataFill.ts | 163 | export function piThinkingLevelMapFromEfforts( | CODE |
| LOW | …/components/providers/forms/ClaudeStackModelsField.tsx | 27 | export function createClaudeStackModelRow( | CODE |
| LOW | …/components/providers/forms/ClaudeStackModelsField.tsx | 38 | export function normalizeClaudeStackModels( | CODE |
| LOW | src/components/providers/forms/OmoFormFields.tsx | 259 | export function mergeCustomModelsIntoStore( | CODE |
| LOW | …ts/providers/forms/LocalProxyRequestOverridesField.tsx | 19 | export function LocalProxyRequestOverridesField({ | CODE |
| LOW | src/components/providers/forms/CodexFormFields.tsx | 125 | export function isCopilotModelSupportedByCodex( | CODE |
| LOW | src/components/providers/forms/CodexFormFields.tsx | 147 | export function resolveCopilotReportedPromptLimit( | CODE |
| LOW | src/components/providers/forms/CodexFormFields.tsx | 426 | export function formatReasoningLevelsLabel(levels: string[]): string { | CODE |
| LOW | …omponents/providers/forms/helpers/opencodeFormUtils.ts | 129 | export function hasNativeOpencodeDefinition( | CODE |
| LOW | …omponents/providers/forms/helpers/opencodeFormUtils.ts | 145 | export function getOpencodeDeclaredModels( | CODE |
| LOW | …omponents/providers/forms/helpers/opencodeFormUtils.ts | 216 | export function parseOpencodeConfigStrict( | CODE |
| LOW | …omponents/providers/forms/helpers/opencodeFormUtils.ts | 372 | export function formatOpencodeExtraOptionValue(value: unknown): string { | CODE |
| LOW | …omponents/providers/forms/helpers/opencodeFormUtils.ts | 397 | export function mergeOpencodeExtraOptionRows( | CODE |
| LOW | src/components/usage/UsageTrendChart.tsx | 183 | export function formatUsageTrendTickLabel( | CODE |
| LOW | src/components/usage/UsageTrendChart.tsx | 221 | export function createUsageTrendTokenTickFormatter( | CODE |
| LOW | src/components/usage/UsageTrendChart.tsx | 246 | export function formatUsageTrendTokenTickLabel( | CODE |
| LOW | src/components/usage/UsageDashboard.tsx | 120 | export function resetUsageSyncClockForTests() { | CODE |
| LOW | src/components/usage/format.ts | 285 | export function getEstimatedTokensPerSecond( | CODE |
| LOW | src/components/usage/format.ts | 299 | export function getAggregateTokensPerSecond( | CODE |
| LOW | src/components/usage/format.ts | 338 | export function formatOutputTokensPerSecond( | CODE |
| LOW | src/components/usage/format.ts | 344 | export function formatEstimatedTokensPerSecond( | CODE |
| LOW | src/components/usage/format.ts | 385 | function isTraditionalChineseLanguage(normalizedLanguage: string): boolean { | CODE |
| LOW | src/components/prompts/PiNativePromptResources.tsx | 93 | export function usePiPromptTemplatesQuery() { | CODE |
| LOW | src/components/apps/ToolUninstallConfirmDialog.tsx | 28 | export function ToolUninstallConfirmDialog({ | CODE |
| LOW | src/components/apps/useToolManagement.ts | 59 | export function hermesUninstallMayLeaveFiles(plan: ToolUninstallPlan) { | CODE |
| LOW | src/components/apps/useToolManagement.ts | 288 | function updateToolManagementState(update: Partial<ToolManagementState>) { | CODE |
| LOW | src/components/apps/useToolManagement.ts | 313 | export async function checkToolUpdatesInBackground(): Promise<void> { | CODE |
| LOW | src/hooks/useSkills.ts | 111 | export function useRefreshDiscoverableSkills() { | CODE |
| LOW | src/hooks/useSkills.ts | 171 | export function useDiscoverableSkillsFailures() { | CODE |
| 36 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/guides/codex-deepseek-routing-guide-ja.md | 52 | ## Step 1: Codex プロバイダーを追加する | COMMENT |
| LOW | docs/guides/codex-deepseek-routing-guide-ja.md | 72 | ## Step 2: ローカルルーティングを有効にして Codex をルーティングする | COMMENT |
| LOW | docs/guides/codex-deepseek-routing-guide-ja.md | 83 | ## Step 3: プロバイダーを切り替えて Codex を再起動する | COMMENT |
| LOW | docs/guides/claude-codex-routing-guide-en.md | 32 | ## Step 1: Add a provider | COMMENT |
| LOW | docs/guides/claude-codex-routing-guide-en.md | 67 | ## Step 2: Enable local routing and take over Claude Code | COMMENT |
| LOW | docs/guides/claude-codex-routing-guide-en.md | 78 | ## Step 3: Switch providers and verify | COMMENT |
| LOW | docs/guides/codex-unified-session-history-guide-ja.md | 94 | ### Step 1: スイッチを見つける | COMMENT |
| LOW | docs/guides/codex-unified-session-history-guide-ja.md | 110 | ### Step 2: スイッチをオフからオンに切り替える → 確認ダイアログが表示される | COMMENT |
| LOW | docs/guides/codex-unified-session-history-guide-ja.md | 162 | ### Step 1: スイッチをオンからオフに切り替える → バックアップを探索 → 確認ダイアログが表示される | COMMENT |
| LOW | docs/guides/codex-unified-session-history-guide-ja.md | 181 | ### Step 2: 復元はどう実行されるか(バックアップ台帳に従って正確に戻す) | COMMENT |
| LOW | docs/guides/codex-unified-session-history-guide-ja.md | 197 | ### Step 3: 通知を見て、結果を確認する | COMMENT |
| LOW | docs/guides/codex-kimi-routing-guide-en.md | 47 | ## Step 1: Add a Codex provider | COMMENT |
| LOW | docs/guides/codex-kimi-routing-guide-en.md | 60 | ## Step 2: Enable local routing and route Codex | COMMENT |
| LOW | docs/guides/codex-kimi-routing-guide-en.md | 71 | ## Step 3: Switch providers and restart Codex | COMMENT |
| LOW | docs/guides/codex-claude-routing-guide-ja.md | 32 | ## Step 1: Codex プロバイダーを追加する | COMMENT |
| LOW | docs/guides/codex-claude-routing-guide-ja.md | 59 | ## Step 2: ローカルルーティングを有効にして Codex をルーティングする | COMMENT |
| LOW | docs/guides/codex-claude-routing-guide-ja.md | 70 | ## Step 3: プロバイダーを切り替えて Codex を再起動する | COMMENT |
| LOW | …cs/guides/codex-official-auth-preservation-guide-en.md | 44 | ## Step 1: Switch back to OpenAI Official and complete official login | COMMENT |
| LOW | …cs/guides/codex-official-auth-preservation-guide-en.md | 54 | ## Step 2: Enable Codex App Enhancements | COMMENT |
| LOW | …cs/guides/codex-official-auth-preservation-guide-en.md | 77 | ## Step 3: Add a third-party Codex provider | COMMENT |
| LOW | …cs/guides/codex-official-auth-preservation-guide-en.md | 88 | ## Step 4: Enable local routing and route Codex when needed | COMMENT |
| LOW | …cs/guides/codex-official-auth-preservation-guide-en.md | 105 | ## Step 5: Switch to the third-party provider and restart Codex | COMMENT |
| LOW | docs/guides/codex-deepseek-routing-guide-en.md | 52 | ## Step 1: Add a Codex provider | COMMENT |
| LOW | docs/guides/codex-deepseek-routing-guide-en.md | 72 | ## Step 2: Enable local routing and route Codex | COMMENT |
| LOW | docs/guides/codex-deepseek-routing-guide-en.md | 83 | ## Step 3: Switch providers and restart Codex | COMMENT |
| LOW | docs/guides/claude-codex-routing-guide-ja.md | 32 | ## Step 1: プロバイダーを追加する | COMMENT |
| LOW | docs/guides/claude-codex-routing-guide-ja.md | 67 | ## Step 2: ローカルルーティングを有効にして Claude Code をルーティングする | COMMENT |
| LOW | docs/guides/claude-codex-routing-guide-ja.md | 78 | ## Step 3: プロバイダーを切り替えて確認する | COMMENT |
| LOW | docs/guides/codex-unified-session-history-guide-en.md | 94 | ### Step 1: Find the switch | COMMENT |
| LOW | docs/guides/codex-unified-session-history-guide-en.md | 110 | ### Step 2: Flip the switch from off to on -> a confirmation dialog pops up | COMMENT |
| LOW | docs/guides/codex-unified-session-history-guide-en.md | 162 | ### Step 1: Flip the switch from on to off -> probe for backups -> a confirmation dialog pops up | COMMENT |
| LOW | docs/guides/codex-unified-session-history-guide-en.md | 181 | ### Step 2: How restore runs (precise flip-back per the backup ledger) | COMMENT |
| LOW | docs/guides/codex-unified-session-history-guide-en.md | 197 | ### Step 3: Read the toast, confirm the result | COMMENT |
| LOW | docs/guides/codex-kimi-routing-guide-ja.md | 47 | ## Step 1: Codex プロバイダーを追加する | COMMENT |
| LOW | docs/guides/codex-kimi-routing-guide-ja.md | 60 | ## Step 2: ローカルルーティングを有効にして Codex をルーティングする | COMMENT |
| LOW | docs/guides/codex-kimi-routing-guide-ja.md | 71 | ## Step 3: プロバイダーを切り替えて Codex を再起動する | COMMENT |
| LOW | …cs/guides/codex-official-auth-preservation-guide-ja.md | 44 | ## Step 1: OpenAI Official に戻して公式ログインを完了する | COMMENT |
| LOW | …cs/guides/codex-official-auth-preservation-guide-ja.md | 54 | ## Step 2: Codex アプリ拡張を有効化する | COMMENT |
| LOW | …cs/guides/codex-official-auth-preservation-guide-ja.md | 77 | ## Step 3: サードパーティ Codex プロバイダーを追加する | COMMENT |
| LOW | …cs/guides/codex-official-auth-preservation-guide-ja.md | 88 | ## Step 4: 必要に応じてローカルルーティングと Codex ルーティングを有効化する | COMMENT |
| LOW | …cs/guides/codex-official-auth-preservation-guide-ja.md | 105 | ## Step 5: サードパーティプロバイダーへ切り替えて Codex を再起動する | COMMENT |
| LOW | docs/guides/codex-claude-routing-guide-en.md | 32 | ## Step 1: Add a Codex provider | COMMENT |
| LOW | docs/guides/codex-claude-routing-guide-en.md | 59 | ## Step 2: Enable local routing and take over Codex | COMMENT |
| LOW | docs/guides/codex-claude-routing-guide-en.md | 70 | ## Step 3: Switch providers and restart Codex | COMMENT |
| LOW | docs/user-manual/en/1-getting-started/1.4-quickstart.md | 5 | ## Step 1: Add a Provider | COMMENT |
| LOW | docs/user-manual/en/1-getting-started/1.4-quickstart.md | 18 | ## Step 2: Switch Provider | COMMENT |
| LOW | docs/user-manual/en/1-getting-started/1.4-quickstart.md | 30 | ## Step 3: Activation | COMMENT |
| LOW | docs/user-manual/en/2-providers/2.6-claude-desktop.md | 29 | ### Step 1: Open the Claude Desktop Page | COMMENT |
| LOW | docs/user-manual/en/2-providers/2.6-claude-desktop.md | 39 | ### Step 2: Import or Add Providers | COMMENT |
| LOW | docs/user-manual/en/2-providers/2.6-claude-desktop.md | 80 | ### Step 3: Switch and Restart Claude Desktop | COMMENT |
| LOW | src-tauri/src/proxy/providers/transform_responses.rs | 2231 | // Step 1: OpenAI nested details as fallback for cache tokens | COMMENT |
| LOW | src-tauri/src/proxy/providers/transform_responses.rs | 2262 | // Step 2: Direct Anthropic-style fields override (authoritative if present) | COMMENT |
| LOW | src-tauri/src/deeplink/provider.rs | 37 | // Step 1: Merge config file if provided (v3.8+) | COMMENT |
| LOW⚡ | src-tauri/src/services/env_manager.rs | 22 | // Step 1: Create backup | COMMENT |
| LOW⚡ | src-tauri/src/services/env_manager.rs | 25 | // Step 2: Delete variables | COMMENT |
| LOW⚡ | src-tauri/src/services/session_usage_codex.rs | 855 | // Step 1: 小写 | COMMENT |
| LOW⚡ | src-tauri/src/services/session_usage_codex.rs | 858 | // Step 2: 剥离 "provider/" 前缀(如 openai/, azure/) | COMMENT |
| LOW⚡ | src-tauri/src/services/session_usage_codex.rs | 863 | // Step 3: 剥离 ISO 日期后缀 -YYYY-MM-DD(正好 11 字符) | COMMENT |
| LOW | src-tauri/src/services/session_usage_codex.rs | 878 | // Step 4: 剥离紧凑日期后缀 -YYYYMMDD(正好 9 字符) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/components/SessionMarkdown.test.tsx | 77 | screen.getByRole("link", { name: "user@example.com" }), | CODE |
| LOW | tests/components/SessionMarkdown.test.tsx | 585 | await user.click(screen.getByRole("link", { name: "user@example.com" })); | CODE |
| LOW | tests/components/ProviderCard.codexAccount.test.tsx | 206 | const login = "user@example.com"; | CODE |
| LOW | tests/components/ManagementListSearch.test.tsx | 19 | expect(input).toHaveAttribute("placeholder", "Search managed items"); | CODE |
| LOW | …s/components/ProviderForm.codexManagedAccount.test.tsx | 113 | login: "user@example.com", | CODE |
| LOW | tests/components/CodexOAuthSection.test.tsx | 68 | login: "user@example.com", | CODE |
| LOW | tests/components/CodexOAuthSection.test.tsx | 494 | expect(optionLabels.indexOf("user@example.com")).toBeLessThan( | CODE |
| LOW | tests/hooks/useManagedAuth.test.tsx | 113 | login: "user@example.com", | CODE |
| LOW | src-tauri/src/proxy/providers/codex_oauth_auth.rs | 2384 | Some("user@example.com".to_string()), | CODE |
| LOW | src-tauri/src/proxy/providers/codex_oauth_auth.rs | 2619 | Some("user@example.com".to_string()), | CODE |
| LOW | src-tauri/src/proxy/providers/codex_oauth_auth.rs | 2631 | Some("user@example.com".to_string()), | CODE |
| LOW | src-tauri/src/proxy/providers/codex_oauth_auth.rs | 2695 | Some("user@example.com".to_string()), | CODE |
| LOW | src-tauri/src/proxy/providers/codex_oauth_auth.rs | 2726 | Some("user@example.com".to_string()), | CODE |
| LOW | src-tauri/src/proxy/providers/codex_oauth_auth.rs | 3341 | Some("user@example.com".to_string()), | CODE |
| LOW | src-tauri/src/proxy/providers/codex_oauth_auth.rs | 3374 | Some("user@example.com".to_string()), | CODE |
| LOW | src-tauri/src/proxy/providers/codex_oauth_auth.rs | 3425 | Some("user@example.com".to_string()), | CODE |
| LOW | src-tauri/src/proxy/providers/codex_oauth_auth.rs | 3454 | Some("user@example.com".to_string()), | CODE |
| LOW | src-tauri/src/proxy/providers/codex_oauth_auth.rs | 3470 | Some("user@example.com".to_string()), | CODE |
| LOW | src/components/providers/forms/HermesFormFields.tsx | 73 | const candidate = trimmed.replace(TEMPLATE_TOKEN_RE, "placeholder"); | CODE |
| LOW | src/i18n/locales/zh.json | 62 | "placeholder": "请输入API Key", | CODE |
| LOW | src/i18n/locales/zh.json | 3416 | "placeholder": "状态筛选", | CODE |
| LOW⚡ | src/i18n/locales/zh.json | 3720 | "placeholder": "127.0.0.1", | CODE |
| LOW⚡ | src/i18n/locales/zh.json | 3725 | "placeholder": "15721", | CODE |
| LOW⚡ | src/i18n/locales/zh.json | 3730 | "placeholder": "3", | CODE |
| LOW⚡ | src/i18n/locales/zh.json | 3735 | "placeholder": "0(不限)或 300", | CODE |
| LOW | src/i18n/locales/tr.json | 62 | "placeholder": "API Anahtarını Girin", | CODE |
| LOW | src/i18n/locales/tr.json | 3400 | "placeholder": "Duruma göre filtrele", | CODE |
| LOW⚡ | src/i18n/locales/tr.json | 3704 | "placeholder": "127.0.0.1", | CODE |
| LOW⚡ | src/i18n/locales/tr.json | 3709 | "placeholder": "15721", | CODE |
| LOW⚡ | src/i18n/locales/tr.json | 3714 | "placeholder": "3", | CODE |
| LOW⚡ | src/i18n/locales/tr.json | 3719 | "placeholder": "0 (sınırsız) veya 300", | CODE |
| LOW | src/i18n/locales/ja.json | 62 | "placeholder": "API Key を入力", | CODE |
| LOW | src/i18n/locales/ja.json | 3416 | "placeholder": "状態で絞り込み", | CODE |
| LOW⚡ | src/i18n/locales/ja.json | 3720 | "placeholder": "127.0.0.1", | CODE |
| LOW⚡ | src/i18n/locales/ja.json | 3725 | "placeholder": "15721", | CODE |
| LOW⚡ | src/i18n/locales/ja.json | 3730 | "placeholder": "3", | CODE |
| LOW⚡ | src/i18n/locales/ja.json | 3735 | "placeholder": "0(無制限)または 300", | CODE |
| LOW | src/i18n/locales/en.json | 62 | "placeholder": "Enter API Key", | CODE |
| LOW | src/i18n/locales/en.json | 3416 | "placeholder": "Filter by status", | CODE |
| LOW⚡ | src/i18n/locales/en.json | 3720 | "placeholder": "127.0.0.1", | CODE |
| LOW⚡ | src/i18n/locales/en.json | 3725 | "placeholder": "15721", | CODE |
| LOW⚡ | src/i18n/locales/en.json | 3730 | "placeholder": "3", | CODE |
| LOW⚡ | src/i18n/locales/en.json | 3735 | "placeholder": "0 (unlimited) or 300", | CODE |
| LOW | src/i18n/locales/zh-TW.json | 62 | "placeholder": "請輸入 API Key", | CODE |
| LOW | src/i18n/locales/zh-TW.json | 3417 | "placeholder": "狀態篩選", | CODE |
| LOW⚡ | src/i18n/locales/zh-TW.json | 3721 | "placeholder": "127.0.0.1", | CODE |
| LOW⚡ | src/i18n/locales/zh-TW.json | 3726 | "placeholder": "15721", | CODE |
| LOW⚡ | src/i18n/locales/zh-TW.json | 3731 | "placeholder": "3", | CODE |
| LOW⚡ | src/i18n/locales/zh-TW.json | 3736 | "placeholder": "0(不限)或 300", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src-tauri/src/proxy/providers/transform_responses.rs | 2231 | // Step 1: OpenAI nested details as fallback for cache tokens | COMMENT |
| LOW | src-tauri/src/proxy/providers/transform_responses.rs | 2262 | // Step 2: Direct Anthropic-style fields override (authoritative if present) | COMMENT |
| LOW | src-tauri/src/deeplink/provider.rs | 37 | // Step 1: Merge config file if provided (v3.8+) | COMMENT |
| LOW⚡ | src-tauri/src/services/env_manager.rs | 22 | // Step 1: Create backup | COMMENT |
| LOW⚡ | src-tauri/src/services/env_manager.rs | 25 | // Step 2: Delete variables | COMMENT |
| LOW⚡ | src-tauri/src/services/session_usage_codex.rs | 855 | // Step 1: 小写 | COMMENT |
| LOW⚡ | src-tauri/src/services/session_usage_codex.rs | 858 | // Step 2: 剥离 "provider/" 前缀(如 openai/, azure/) | COMMENT |
| LOW⚡ | src-tauri/src/services/session_usage_codex.rs | 863 | // Step 3: 剥离 ISO 日期后缀 -YYYY-MM-DD(正好 11 字符) | COMMENT |
| LOW | src-tauri/src/services/session_usage_codex.rs | 878 | // Step 4: 剥离紧凑日期后缀 -YYYYMMDD(正好 9 字符) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/guides/deeplink-site-integration-guide-zh.md | 0 | \ model_provider = "example" model = "example-coder" [model_providers.example] name = "example ai" base_url = "https://a | STRING |
| HIGH | docs/guides/deeplink-site-integration-guide-en.md | 0 | \ model_provider = "example" model = "example-coder" [model_providers.example] name = "example ai" base_url = "https://a | STRING |
| HIGH | docs/guides/deeplink-site-integration-guide-ja.md | 0 | \ model_provider = "example" model = "example-coder" [model_providers.example] name = "example ai" base_url = "https://a | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CHANGELOG.md | 566 | - **Codex Deep Links Dropped Provider Settings** (refs #7438, #7942, #5510): A link carrying `config.toml` used to keep | CODE |
| MEDIUM | CHANGELOG.md | 567 | - **Grok Build Deep Links Dropped the Model Profile** (refs #6457): The table named by `[models] default` is kept throug | CODE |
| MEDIUM | CHANGELOG.md | 1310 | - **Grok Models Work Through xAI's Native Responses API Under Codex Routing** (#6917): A series of contributed fixes clo | CODE |
| MEDIUM | CHANGELOG.md | 1609 | Development since v3.18.0 is headlined by a security-hardening wave and a proxy correctness fix with immediate field imp | CODE |
| MEDIUM | docs/release-notes/v4.0.19-en.md | 56 | - **Picking some relay models filled in another vendor's parameters** ([#8765](https://github.com/farion1231/cc-switch/i | CODE |
| MEDIUM | docs/release-notes/v3.20.2-en.md | 11 | - **Run Grok in Codex through xAI's native Responses API** ([#6917](https://github.com/farion1231/cc-switch/pull/6917), | CODE |
| MEDIUM | docs/release-notes/v3.20.2-en.md | 91 | A series of contributed commits closes four independent failures on the native-Responses path to xAI. xAI rejects Codex | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | src/components/JsonEditor.tsx | 305 | const contextualRanges = viewRef.current.state.selection.ranges.map( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src-tauri/src/database/backup.rs | 3163 | #[ignore = "perf harness, run explicitly"] | COMMENT |
| MEDIUM⚡ | src-tauri/src/resources/gpt5_5_template.json | 42 | "base_instructions": "You are Codex, a coding agent based on GPT-5. You and the user share one workspace, and your job | CODE |
| MEDIUM⚡ | src-tauri/src/resources/gpt5_5_template.json | 44 | "instructions_template": "You are Codex, a coding agent based on GPT-5. You and the user share one workspace, and yo | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …uri/src/resources/codex_deepseek_catalog_template.json | 57 | "instructions_template": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your | CODE |
| LOW | …uri/src/resources/codex_deepseek_catalog_template.json | 69 | "base_instructions": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your job i | CODE |
| LOW | …uri/src/resources/codex_deepseek_catalog_template.json | 124 | "instructions_template": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your | CODE |
| LOW | …uri/src/resources/codex_deepseek_catalog_template.json | 136 | "base_instructions": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your job i | CODE |
| LOW⚡ | src-tauri/src/resources/gpt5_5_template.json | 42 | "base_instructions": "You are Codex, a coding agent based on GPT-5. You and the user share one workspace, and your job | CODE |
| LOW⚡ | src-tauri/src/resources/gpt5_5_template.json | 44 | "instructions_template": "You are Codex, a coding agent based on GPT-5. You and the user share one workspace, and yo | CODE |