Skip to content

feat(runtime): add multi-model providers and opt-in Claude SDK engine - #296

Merged
oratis merged 3 commits into
mainfrom
codex/multi-model-engines
Oct 25, 2026
Merged

oratis merged 3 commits into
mainfrom
codex/multi-model-engines

Conversation

@oratis

@oratis oratis commented Oct 25, 2026 •

Copy link
Copy Markdown
Owner

Summary

修复原生运行时的截断/预算结束状态、摘要模型与取消传递、凭证解析和工具权限边界,并统一 CLI、app-server、桌面与编辑器使用的多模型配置,接入 Kimi/GLM。
新增显式启用的 Claude Agent SDK 实验引擎(固定 0.3.310),通过受控 MCP 工具桥复用 DeepCode 的审批、sandbox、快照和审计。
native 保持默认;设置 engine: "native" 并新建会话即可回滚,旧 SDK 会话保留,拒绝原地跨引擎混写。

Review fixes

本次按正常执行、权限拒绝、取消与重启恢复重新检查完整变更,并修复:

  • SDK 快照编号跨轮次重复、回滚引用指向修改后快照或不存在编号:延续持久编号,只引用实际修改前快照,保留读取来源。
  • 审批后路径变化与恢复工具权限缺口:执行前重新检查真实路径,拒绝 workspace 下的硬链接写入,review 恢复遵守 sandbox 和文件 contract。
  • 用户问答不返回、摘要/CLI slash 命令取消不完整:贯通 signal,取消解除等待,空摘要不替换历史。
  • hook/helper shell 结束后残留后台子进程:清理进程组,防止延迟写入。
  • SDK 丢失/不兼容 binding 时错误恢复、晚到流错误被当成成功、初始化/关闭异常漏清理:保留历史并明确失败,补齐排空、监听器与临时目录清理。
  • CLI 识别仅配置 DEEPSEEK_AUTH_TOKEN 的启动方式;SDK 有历史时切换模型须先 /clear;显式禁用的 hooks 不阻止启动。

Independent review and release preparation

独立 agent 已发布 3 条行级审查意见,修复提交 c334e1a 已处理全部发现并通过 独立复审 COMMENT,原 3 个线程均已回复证据并解决:

  • P1:最终异步路径核验后检查取消;Write/Edit/NotebookEdit 等待 I/O 后也检查 signal,不再在取消后启动下一次写入。
  • P2:默认及 mode-only workspace sandbox 保留 /add-dir 额外目录,read-only/denyWrite 不被放宽。
  • P2:CLI 和生产协议 store 在复制前拒绝 SDK、未来版本及孤儿 SDK 会话 fork,保留原始历史且不生成目标会话。

独立复审额外运行 core 49 项、CLI 9 项、server store 8 项,全部通过;未发现新的阻断问题。

用户已授权修复后合并上线。本 PR 同步 v0.4.0 的六处版本号与 CHANGELOG,并将实际 SDK 进程 smoke 加入标签发布验证。按现有仓库发布机制,无 Apple/npm 凭证时只发布 VSIX 和源码;不将 SDK 可选执行文件加入 VSIX,不改变 native 默认。

Test plan

本地环境:macOS arm64 / Node 22.23.4 / pnpm 9.12.0。

  • pnpm install --frozen-lockfile
  • pnpm typecheck、pnpm lint、pnpm format:check
  • pnpm test:1,778 passed / 23 skipped(平台限定与 opt-in 测试)
  • pnpm build、pnpm docs:check
  • DEEPCODE_SDK_SMOKE=1 pnpm --filter @deepcode/app-server exec vitest run src/engines/claude-sdk.smoke.test.ts:2 passed,真实 SDK 进程连接本地模拟 Messages 端点,验证工具、审批及重启恢复;没有发送厂商请求。
  • pnpm --filter @deepcode/desktop test:e2e:7 passed
  • cargo test --manifest-path apps/desktop/src-tauri/Cargo.toml --locked:30 passed
  • pnpm release:check:status=ok;VS Code app-server 701,845 / 786,432 bytes,VSIX 216,965 / 262,144 bytes,权限与架构扫描通过。
  • pnpm --filter @deepcode/desktop build:tauri-assets:前端、sidecar、Node 22 运行资源构建通过(desktop sidecar 701,889 bytes)。
  • 提交 hook 中的格式、lint、typecheck、包测试通过。
  • 额外 cargo fmt --check:基线未改动的 commands.rs、credentials.rs、file_preview.rs、settings.rs、voice.rs 存在格式差异;本 PR 没有修改 Rust 源码,也未混入格式整理。

CI verification

修复提交 c334e1a 的 5 项 CI 全部通过,2026-10-26 核对:

  • Ubuntu 全量测试:1,790 passed / 11 skipped;独立 SDK 进程 smoke 2 项通过。
  • macOS 全量测试:1,778 passed / 23 skipped;独立 SDK 进程 smoke 2 项通过。
  • 两端类型、lint、格式、构建及发布门禁通过;Linux bwrap 11 项、netns 2 项实际执行通过。
  • 桌面端到端、Rust check/test、文档检查全部通过。

SDK smoke 使用本地模拟 Messages 端点及假密钥,不代表真实 Kimi/GLM 厂商验收。所有新增回归、独立复审及最新 CI 均完成后执行合并,发布 v0.4.0。

Pending validation and limitations

  • 真实 Kimi/GLM 端点和套餐:当前没有对应凭证。需覆盖读→编辑→测试→拒绝审批→中断→重启恢复,以及长任务质量/成本对比。本地 fixture 不能代替厂商兼容验收。
  • 发行安装包:SDK 可选依赖在桌面/VS Code bundle 中 external;现有发布包不附带 SDK 运行文件。独立安装、发行签名/公证、无系统 Node/Claude 的冷启动与升级回滚尚待验收。
  • SDK 保持 experimental,未开放第三方 MCP/plugin 工具、Task/持久 shell、agent/mcp_tool/prompt hooks;/compact 与会话 rewind 明确拒绝,/clear 新建会话。
  • 原生 app-server 自动压缩、协议级模型发现、自定义 profile 的完整 UI 能力标签尚未接入;SDK 私有完整历史不导入原生 loop。
  • realpath 预检与执行前复检不宣称消除所有并发文件系统替换竞态;shell 继续依赖 OS sandbox。未知模型价格不伪造估算。

Documentation

  • 新增 docs/adr/0002-multi-model-agent-engine.md:审查发现、决策、复审修复、验证结果和回滚。
  • 新增 docs/multi-model.md:配置、凭证、实验边界、取消和回滚操作。
  • 更新 docs/CODEX_ALIGNMENT_PLAN.md、docs/quickstart.md。

Release notes label

  • release-notes:feature

Checklist

  • PR 标题与 commits 使用 conventional commits
  • 添加权限、凭证、取消、快照/恢复和 SDK 边界的回归测试
  • 当前修复提交 c334e1a 的 5 项 CI 全绿,独立复审通过,3 个审查线程已解决。

Related

审查基线:origin/main@cedeb85。实现范围和后续验收见 ADR 0002。

@oratis oratis added the release-notes:feature User-visible feature changes for release notes label Oct 25, 2026

@oratis oratis left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

独立 agent 审查(基线:5df23abe7fce8ecaa3640ecaddc595a1ea856245,比较 origin/main...HEAD)。

检查了多模型路由与凭证隔离、native/SDK 工具权限和取消、会话恢复/分叉、CLI/桌面接入及可选 SDK 打包。确认 3 项应在合并前修复的问题,详见行级评论;复现仅使用临时目录、假 provider 和假凭证,没有真实厂商调用。native 默认和可选依赖 lazy import 路径未发现新的阻断问题。

残余验收:Kimi/GLM 真实 API、长任务质量/成本、签名安装包和干净机器启动仍不能由 fixture CI 证明。此为 COMMENT review,不是对自己 PR 的正式批准。

Comment thread packages/core/src/runtime/engine.ts Resolved

@oratis oratis left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

独立 agent 复审完成,已核对远端 HEAD 为 c334e1ae73d0a756c704a967639dc0f9f7a4b088,工作区与该提交一致。

原 3 条发现均已修复:

  1. 取消:native/SDK 在最后一次异步路径预检后重新检查 signal;Write/Edit/NotebookEdit 在异步准备完成后、实际写入前再次检查,并将 signal 传入文件 I/O。
  2. 额外目录:按有效 sandbox mode 合并 additionalDirectories,默认与显式 workspace-write 均生效,read-only 和 denyWrite 继续拒绝。
  3. 分叉:CLI 与生产 CanonicalThreadStore 在创建新会话前使用同一断言,拒绝 SDK、未知版本和遗留 SDK 私有目录的历史分叉,不生成新的不完整会话;原生分叉仍通过。

本人独立执行相关回归:core 5 个文件 49 项、CLI 恢复 9 项、server store 8 项,合计 66 项全部通过;另核对 git diff --check 通过。复审未发现新的阻断问题。当前提交 CI 尚在运行,仍应以最终 CI 结果作为合并门禁。

native 保持默认,回滚仍为 engine: "native" 并新建会话,旧 SDK 记录保留。真实 Kimi/GLM API、长任务质量/成本、签名发行包及干净机器启动仍待外部验收,不能用本地 fixture 结果代替。此为独立复审 COMMENT,非自己批准 PR。

@oratis
oratis merged commit 3421a3c into main Oct 25, 2026
5 checks passed
@oratis

oratis commented Oct 25, 2026

Copy link
Copy Markdown
Owner Author

已按独立评审 → 修复 → 复审 → CI → 合并 → 发布顺序完成。

  • 独立评审的 1 项 P1、2 项 P2 均已修复,原 3 个线程已解决;独立复审 无新阻断项。
  • PR 已合并,main 提交 3421a3c77a4955d428b2bc9b5169c128b85c1279;主分支 5 项 CI 全通过。
  • v0.4.0 正式 Release 已发布,发布工作流 成功。
  • 下载 deepcode-0.4.0.vsix,216,968 bytes。下载文件 SHA-256 f380d9fadc24599fad5ec0dc4295414959dd9622994328ea9bb43f95a02d996a 与 GitHub asset digest 一致,包内版本为 0.4.0。
  • 已从已发布 VSIX 提取 app-server,在独立临时 workspace/home、包旁没有 SDK 安装的环境中检查:协议初始化、创建/读取会话、配置诊断、退出重启及恢复会话全部通过。

native 仍为默认;回滚 SDK 选择时设置 engine: "native" 并新建会话,保留旧 SDK 数据。

本次公开产物为 VSIX 与源码。Apple 签名和 npm 凭证未配置,DMG/npm 两个发布步骤按既定规则跳过;未发布 SDK 安装包。真实 Kimi/GLM 接口、长任务质量及签名安装包仍待相应凭证和环境验收,SDK 保持 experimental。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release-notes:feature User-visible feature changes for release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant