<!-- codsh-publication:grok-cli-dsh-rewrite:ticket-68 --> ## Parent https://github.com/Blackman99/codsh/issues/132 **Ticket:** 68 **Status:** ready-for-agent **User Stories:** 7, 18, 69(见父规格) ## What to build 原生 Windows 用户安装预编译程序,通过支持的终端完成 dsh 对话、文件工具、审批、取消和恢复。 ## Acceptance criteria - [ ] 解决公开 Rust 导出在 Windows 的实际构建/运行差异,不能把上游 best-effort 当已支持。 - [ ] 验证 ConPTY/控制台输入、路径、Unicode、shell 与进程树取消,原生 Windows 不能以 WSL 替代验收。 - [ ] 安装、更新、失败回退、终端复原及目录隔离可重现,用户无需自行编译。 - [ ] 建立未被 skip 的 Windows 集成入口;其他功能和沙箱限制由平台能力验收继续验证。 ## Blocked by - #198 — Ticket 66: macOS 预编译安装、更新与回退 ## Delivery contract 用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。
Activity
fix(rust): say Windows image paste is unavailable and keep typed imag…
feat(rust): Windows prebuilt and native console run (#200)
Blackman99 commentedon Sep 28, 2026
已集成:Windows 预编译产物与原生终端运行(#200)
集成提交:
664781c(已普通推送到rewrite/grok-dsh-20260920,未改动main)。实现内容
rust-native.yml在 windows-2022 上构建x86_64-pc-windows-msvc(+crt-static,不依赖 VC++ 运行库);release.yml的check:rust-package要求包含win32-x64。\\?\前缀进入 dsh 或 Home),审批路径识别盘符。taskkill /T /F结束整棵进程树。windows_unpaired_release_types_the_character);Windows 上不推送 kitty 键盘协议。pwsh,现按 shell 命令渲染并按 shell 审批策略处理;无密钥 mock 在 win32 上发出 pwsh 命令。scripts/rust-windows-pty-test.py,通过真实 ConPTY(pywinpty,外层cmd.exe)驱动已安装的打包产物;rust-platforms.yml新增windowsjob(windows-2022 / windows-2025,无 Rust 工具链),在集成分支及含windows的分支上运行,不带 skip。rust-windows-prebuilt.md(codsh-cli/codsh-bundlepatch)。检查(本地 box,Linux x64)
cargo fmt --check、pnpm typecheck、debug 构建、clippy -A(允许级)通过;严格 clippy 仅 2 个已知错误(tail_markerdead code、needless_return)。test:rust:792 passed,4 个已知 Linux 失败(2×filesystem_sandbox、voicesubstitute_route…、privacydrafts_stay_local…),与基线一致;其余 crate 全部通过。pnpm test:110 files;2676 passed / 15 skipped。build+build:rust+check:rust-package+rust-install-test+ plain-pipe 通过;旧版 e2e(pnpm 10):177 passed / 1 skipped。x86_64-pc-windows-gnu目标做了 clippy 编译检查。真实运行(GitHub Actions,原生 Windows,非 WSL)
集成运行 Rust platforms #36409443574(集成提交 664781c 本身):重跑失败 job 后全部成功,含 #198 的 macOS 安装 job 与 #199 的 Linux job。均为已打包 tarball + 注册表 dsh(测试版本 0.1.5-rc.3)+ 仓库 mock 模型,无网络模型、无官方账号、无 Rust 编译环境。
开发期证据运行(
ci/200-windows-i):#36403713746,windows-2022 108872624471、windows-2025 108872624409 均成功(windows-2025:Microsoft Windows [Version 10.0.26100.33438])。每个 Windows job 的场景(均在 ConPTY 内的
cmd.exe里运行,退出前后读取控制台输入模式,必须一致,且退出后 shell 仍能接收一行输入):install-check— 运行时检查通过;headless— 非交互 turn;turn— 交互 turn,中日韩文字与 Alt 码字符 ✓ 正确输入与显示;file-approval— 工作区路径含空格与中文(工作 区),文件工具需审批后写入;shell— pwsh 命令经审批执行;cancel— 运行中的 pwsh 被取消,pwsh.exe及其整棵进程树结束;resume—--continue恢复上次会话;sandbox-refused— codsh 沙箱配置在 Windows 上被明确拒绝;install-update-rollback— 安装 → 更新提示(0.24.0 → 99.0.1)→ 3 种损坏安装被拒绝(版本不匹配/更新未完成、下载损坏或不完整、缺少原生产物),被拒绝的启动不写入 Rust Home → 回退;更新计划选择 npm;Rust Home 保留,旧~/.dsh/~/.grok未被触碰。对照验收标准
rust-platforms.yml的windowsjob +scripts/rust-windows-pty-test.py);剪贴板、通知、麦克风及沙箱等由 [Grok/dsh 69] 三平台原生能力验收 #201 平台能力验收继续验证。已记录的差异
%USERPROFILE%内的工作区——此时 pwsh 在C:\Program Files\PowerShell\7启动、写入被拒绝。因此 cancel 场景使用配置目录之外的工作区(C:\codsh-win-cancel-<pid>\工作 区)。这是上游 dsh 行为,记录给 [Grok/dsh 69] 三平台原生能力验收 #201。cancel场景失败(108891747396):长时间运行的 pwsh 命令直接以 exit 0、无输出结束,测试随后卡住约 23 分钟,客户端进程残留导致后面的更新步骤出现一次EBUSY(重试后通过)。只重跑失败的 job 后,两个 Windows job 全部通过;开发期运行与 windows-2022 均未复现。原因尚未确定(怀疑 dsh 的 ACL 沙箱或 CIM 进程查询偶发卡住);将在 [Grok/dsh 69] 三平台原生能力验收 #201 中给测试脚本加超时与更完整的错误信息,并继续观察。codsh-rust.exe在运行,npm 更新会报EBUSY(CI 中偶发;测试脚本 5 秒后重试成功)。用户需先退出正在运行的客户端再更新。windowsjob 只在集成分支和名称含windows的分支上运行(Windows runner 较慢,安装/更新/回退一步约 5 分钟)。/update(同 [Grok/dsh 66] macOS 预编译安装、更新与回退 #198)。未改动
main,未发布包/标签/Release,未改仓库设置或 secrets。ci/200-probe、ci/200-windows-a…ci/200-windows-i保留未删。