Skip to content

feat(desktop): support system Claude Code runtime - #3827

Open
WEIWEICurry wants to merge 8 commits into
makecindy:mainfrom
WEIWEICurry:feat/issue-3760-claude-code-source
Open

feat(desktop): support system Claude Code runtime#3827
WEIWEICurry wants to merge 8 commits into
makecindy:mainfrom
WEIWEICurry:feat/issue-3760-claude-code-source

Conversation

@WEIWEICurry

Copy link
Copy Markdown
Contributor

这次改了什么

摘要

为 Desktop 增加 Claude Code 运行来源选择。默认继续使用 Cindy 管理的内置版本;用户可在“设置 → 关于”中改用系统安装,并通过 PATH 或绝对可执行文件路径进行探测。

启动时会执行版本探测并校验 Cindy 支持的最低版本。系统 Claude Code 缺失、无法执行、启动器不受支持或版本过低时,会自动回退到 Cindy 管理的版本并显示可操作提示。“关于”页展示实际生效的来源、版本和路径。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:Fixes 希望 Cindy 能复用系统已安装的 Claude Code,而不是只认 App 私有副本 #3760
  • 本 PR 包含:Desktop 设置持久化、受信任 IPC/preload 边界、系统 Claude Code 探测与最低版本校验、启动回退提示、About 实际来源展示、5 种语言文案、帮助文档和行为级回归测试
  • 明确不包含:服务端、Mobile 行为、Codex 运行来源切换
  • 用户可见变化:“设置 → 关于”新增 Claude Code 来源卡片;来源改动在重启后生效;系统版本不可用时显示回退原因
  • 是否存在 breaking change:无。默认行为仍为 Cindy 管理的内置版本

UI 变化

  • 新增 About 页运行来源选择卡片,包含受管/系统分段选择、可选绝对路径、探测结果、重启提示与恢复默认操作
  • 未附截图:当前 Windows 环境未完成 Desktop Light/Dark 实机目检,未将复用主题样式表述为已完成双模式目检
  • 引用的设计规范:
    • DESIGN.md §2 Color Palette & Roles§10 Theme System & Token Reference§10 Light / Dark Dual-Mode Delivery Gate:颜色均使用现有语义 token,不新增单模式硬编码
    • DESIGN.md §4 Component Stylings(Cards & Containers、Inputs & Forms):复用设置页卡片、输入框和按钮语义
    • DESIGN.md §5 Border Radius Scale§14.2 Focus Management:沿用标准圆角与可见焦点环

怎么验证的

自动验证

corepack pnpm test:unit:related
结果:通过。test runner、Desktop、Mobile 及全部受影响 packages 均 PASS(Windows 管理员上下文仅用于仓库既有符号链接/临时目录测试权限)

corepack pnpm --filter desktop run --if-present typecheck
结果:通过

node ../../node_modules/vitest/vitest.mjs run src/main/__tests__/agentBinaryLinuxPrepare.test.ts src/main/agent-binaries/__tests__/system-claude-code.test.ts src/shared/__tests__/claudeCodeRuntimeSettings.test.ts --config vitest.config.ts
结果:3 files / 24 tests 通过

corepack pnpm design:inventory
结果:通过并更新生成清单

corepack pnpm check:dco
结果:1 commit signed off

手工验证

  • 已在 Windows 开发环境完成代码路径、生成物和测试验证
  • 未用真实 macOS/Linux 系统 Claude Code 安装进行跨平台启动验证

未执行的验证

  • 未启动打包后的 Desktop 做完整交互验收
  • 未完成 Light/Dark 两种模式的实机目检
  • 未在 macOS/Linux 实机验证 PATH 与自定义路径探测;由单测覆盖平台候选、版本门槛和回退决策,最终以 CI/维护者实机验证为准

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:

影响与回滚

  • 影响范围:仅 Desktop Claude Code 二进制选择、启动探测及 About 设置。偏好保存在 Electron userData 下的独立 JSON;IPC 限定受信任 renderer,绝对路径与枚举值均在 main 进程校验,日志不记录用户路径
  • 降级方式:用户可在 UI 恢复默认;无效系统来源会自动回退 Cindy 管理版本。代码层可整体回退本提交,不涉及数据库 migration、协议或服务端
  • 跨平台:Windows 仅接受原生 .exe,明确拒绝不能安全直启的 .cmd/.bat;macOS/Linux 搜索 PATH 与常见目录。Linux 明确选择的系统版本探测失败后,不会再次选中未经验证的 PATH 二进制
  • 存量插件影响:无

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s
  • UI 改动已在“UI 变化”注明引用的设计规范章节
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档
  • 已确认测试结果或说明未执行原因

Signed-off-by: WEIWEICurry <2728306174@qq.com>
@WEIWEICurry
WEIWEICurry requested a review from a team as a code owner September 3, 2026 02:14
@greptile-apps

greptile-apps Bot commented Sep 3, 2026

Copy link
Copy Markdown

Greptile Summary

此 PR 为 Desktop 增加系统 Claude Code 运行来源选择,并打通持久化设置、受信任 IPC、启动探测与回退、About 状态展示及多语言提示。

  • 支持从 PATH 或绝对路径探测系统 Claude Code,并校验最低版本
  • 系统运行时不可用时回退 Cindy 管理的版本
  • 在 About 页面提供来源选择、路径检查、重启提示和实际运行信息
  • 补充共享契约、Linux fallback 协调、帮助文档及行为测试

Confidence Score: 4/5

合并前应修复 PATH 探测提前终止的问题,否则具有多个 Claude Code 安装的用户可能被错误回退到受管版本。

系统来源的多候选搜索在首个可执行文件无法报告版本或版本过旧时立即失败,导致后续 PATH 中的兼容安装永远不会被检查。

Files Needing Attention: apps/desktop/src/main/agent-binaries/system-claude-code.ts

Important Files Changed

Filename Overview
apps/desktop/src/main/agent-binaries/system-claude-code.ts 新增跨平台系统 Claude Code 探测与版本校验;PATH 多候选搜索会被首个版本异常候选提前终止。
apps/desktop/src/main/agent-binaries/index.ts 将持久化来源选择接入二进制准备流程,并记录实际来源和回退原因。
apps/desktop/src/main/maker-ipc/claude-code-runtime-settings.ts 新增受信任 renderer 限定的设置读写、重置及探测 IPC,并验证枚举和绝对路径。
apps/desktop/src/main/claude-code-runtime-settings-store.ts 在 Electron userData 中以原子覆盖设置文件持久化 Claude Code 运行来源。
apps/desktop/src/renderer/components/settings/ClaudeCodeRuntimeCard.tsx 新增来源选择、可选路径、安装探测、重启状态及恢复默认的 About 设置卡片。
apps/desktop/src/renderer/App.tsx 环境检查通过后读取最终运行决策,并对系统来源回退显示一次性提示。
apps/desktop/src/shared/claudeCodeRuntimeSettings.ts 定义跨 main、preload 和 renderer 使用的设置、探测结果及运行决策契约。

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[About 页面选择来源] --> B[Preload 固定 IPC]
  B --> C[Main 校验并持久化设置]
  C --> D[重启后 prepare Claude Code]
  D --> E{来源为 system?}
  E -- 否 --> F[准备 Cindy 管理版本]
  E -- 是 --> G[从自定义路径或 PATH 探测]
  G --> H{版本兼容且可执行?}
  H -- 是 --> I[使用系统 Claude Code]
  H -- 否 --> F
  F --> J[记录实际来源与回退原因]
  I --> J
  J --> K[About 展示并按需提示用户]
Loading
Prompt To Fix All With AI
### Issue 1
apps/desktop/src/main/agent-binaries/system-claude-code.ts:134-142
**PATH 探测被首个版本阻断**

当用户选择系统来源并留空自定义路径时,如果 PATH 前部的 `claude` 可执行但版本无法读取或低于最低版本,这里会立即返回失败,不再检查后续目录中的兼容安装,导致 Cindy 错误回退到受管版本并显示误导性警告。请仅对显式自定义路径立即失败;自动探测时应继续检查剩余候选,并在全部候选都失败后返回最合适的失败原因。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (1): Last reviewed commit: "feat(desktop): support system Claude Cod..." | Re-trigger Greptile

Comment thread apps/desktop/src/main/agent-binaries/system-claude-code.ts
@MagicLizi MagicLizi added awaiting-discussion 等待维护者讨论(review-pr) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) touches:rules 改动碰到规则 / 规范文档(review-pr 自动维护,仅展示) labels Sep 3, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

本 PR 命中维护者确认门(产品 / UI:设置页新增 Claude Code 运行来源卡片,启动探测与回退对用户可见)。

请维护者直接在本 PR 上 Approve;如果要求修改,请 Request Changes,作者改完后再 Approve。讨论 issue:#3828

作者侧无需再操作,除非维护者提出修改要求。

@MagicLizi

Copy link
Copy Markdown
Contributor

命中 UI 路径(apps/desktop/src/renderer/App.tsx / apps/desktop/src/renderer/components/settings/AboutSection.tsx / apps/desktop/src/renderer/components/settings/ClaudeCodeRuntimeCard.tsx)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面(```html 代码块、.html 附件或在线预览链接),便于确认界面符合 DESIGN.md 设计规范。这不是合并阻断。

Signed-off-by: WEIWEICurry <2728306174@qq.com>
@WEIWEICurry

Copy link
Copy Markdown
Contributor Author

Windows CI 中 3 项失败均为与本 PR 改动无关的时序/超时测试;Linux CI 与本地完整相关测试均通过。当前账号没有重跑 Actions 的权限,麻烦维护者协助 Re-run failed jobs,谢谢。

@MagicLizi

Copy link
Copy Markdown
Contributor

@WEIWEICurry 👋 这个 PR 目前与 main 有合并冲突,auto-review 因此暂时跳过、没法继续审查 / 合并。

请在本地 merge 最新的 origin/main 解决冲突后推送;冲突解除后,下一轮 auto-review 会自动重新处理这个 PR。

Signed-off-by: WEIWEICurry <2728306174@qq.com>
@WEIWEICurry

Copy link
Copy Markdown
Contributor Author

已在本地合并最新的 upstream/main,解决冲突并推送至当前分支(643567b9b)。本地相关单测与 Desktop typecheck 均已通过。

@MagicLizi

Copy link
Copy Markdown
Contributor

@WEIWEICurry 👋 这个 PR 目前与 main 有合并冲突,auto-review 因此暂时跳过、没法继续审查 / 合并。

请在本地 merge 最新的 origin/main 解决冲突后推送;冲突解除后,下一轮 auto-review 会自动重新处理这个 PR。

Signed-off-by: WEIWEICurry <2728306174@qq.com>
@WEIWEICurry

Copy link
Copy Markdown
Contributor Author

已在本地合并最新的 upstream/main,解决冲突并推送至当前分支。

@MagicLizi

Copy link
Copy Markdown
Contributor

@WEIWEICurry 👋 这个 PR 目前与 main 有合并冲突,auto-review 因此暂时跳过、没法继续审查 / 合并。

请在本地 merge 最新的 origin/main 解决冲突后推送;冲突解除后,下一轮 auto-review 会自动重新处理这个 PR。

Signed-off-by: WEIWEICurry <2728306174@qq.com>
Signed-off-by: WEIWEICurry <2728306174@qq.com>
Signed-off-by: WEIWEICurry <2728306174@qq.com>
Signed-off-by: WEIWEICurry <2728306174@qq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-discussion 等待维护者讨论(review-pr) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) touches:rules 改动碰到规则 / 规范文档(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

希望 Cindy 能复用系统已安装的 Claude Code,而不是只认 App 私有副本

2 participants