Repository navigation
[Grok/dsh 69] 三平台原生能力验收 #201
Copy link
Copy link
Closed
Labels
ready-for-agentAgent-grabbable workAgent-grabbable work
Description
Activity
已集成:三平台能力矩阵(#201)
集成提交:
596d5af(已普通推送到rewrite/grok-dsh-20260920,未改动main)。实现内容
- 矩阵入口:
scripts/rust-capability-matrix.py+rust-platforms.yml的capability-matrixjob(ubuntu-22.04 / macos-15 / windows-2022)。安装打包产物与注册表 dsh,记录 OS / 终端版本,每一格为ok/refused/unavailable,缺设备或平台无法执行的能力从不静默通过。 - 产品修复(矩阵暴露):
- Linux:
xclip/wl-paste打不开显示时如实报「无法到达显示服务」,不再假报剪贴板为空; - Windows:
/copy向clip.exe写入带 BOM 的 UTF-16LE,中文不再乱码; - macOS:
/copy为pbcopy强制 UTF-8 locale(LANG未设时中文曾变成 MacRoman); - macOS:关闭终端窗口在无 POLLHUP 时也可检测(stdin 可读且 FIONREAD=0 连续 3 次,间隔 200 ms)→ 客户端 exit 129,dsh 随之结束。
- Linux:
- 新/扩 harness:
rust-clipboard-pty-test.py、rust-tmux-pty-test.py;Unix PTY 脚本同时跑 Linux;Windows ConPTY 增加 keys/history、clipboard、voice doctor。 - 文档:
docs/rewrite/platform-capabilities.md、README / README.zh、CONTRIBUTING;Changesetrust-capability-matrix.md。
检查(本地 box,Linux x64,
/workspace/verify-logs/201-final3)cargo fmt --check、pnpm typecheck、debug、clippy -A通过;严格 clippy 仅 2 个已知错误。test:rust:796 passed,4 个已知 Linux 失败(同基线)。pnpm test:111 files;2684 passed / 8 skipped。build+build:rust+check:rust-package+rust-install-test+ plain-pipe 通过;e2e:177 passed / 1 skipped。- PTY:terminal / prompt / cancel / tmux / shell / voice / nav / screen / remote 全部通过;
xvfb-run下真实剪贴板 PTY 通过。
真实运行(GitHub Actions,三平台能力矩阵)
最终证据:
ci/201-matrix-f#36446085443(含本票全部产品修复与 harness)。集成提交本身的运行 #36450015133(矩阵 job 仅在分支名含matrix时触发)。均为已打包 tarball + 注册表 dsh 0.1.5-rc.3 + 仓库 mock 模型。平台 Job 环境摘要 结果 linux-x64 109017318192 Ubuntu 22.04.5,kernel 6.8,tmux 3.2a,X11 :99(xvfb)矩阵 ok=truemacos-arm64 109017318174 macOS 15.7.9,tmux 3.7c,pbcopy 可用 矩阵 ok=true(含 hangup ~2.3 s → 129)windows-x64 109017318245 Windows Server 2022 10.0.20348.5622 ConPTY 12 步全过 中间证据(保留未删):
ci/201-matrix#36431404509、-b#36434520361、-c#36435276789、-d#36438992649、-e#36442130080(mac hangup 已绿;remote_ssh 因 mid-frame 快照偶发失败,harness 改为等完整通知后-f绿)。每平台矩阵格
单元格 Linux macOS Windows keys_prompt ok ok unavailable(ConPTY keys-history)mouse_nav ok ok unavailable(ConPTY) shell_tools ok ok unavailable(ConPTY shell/pwsh)cancel_turn ok ok unavailable(ConPTY cancel)screen_modes ok ok unavailable(ConPTY) terminal_restore_hangup_early_quit ok(hangup ~2.2 s → 129) ok(hangup ~2.3 s → 129) unavailable(Unix PTY) clipboard_real ok(xclip;无 XAUTHORITY → refused 显示不可达;CJK /copy)ok(osascript/pbcopy;空粘贴读 pasteboard;CJK) unavailable(ConPTY clipboard:UTF-16LE CJK + 图片粘贴 not available)voice_doctor unavailable( voice.platform-unverified,0 设备)ok(列出虚拟设备;实时录音未验证) unavailable( voice.platform-unverified)sandbox_profiles refused(坏 glob + Landlock/bubblewrap 限制,有明确文案) ok(坏 glob 拒绝;workspace 探针通过) refused(Windows 未实现) remote_ssh ok ok refused(Windows 无 --remote/wrap) tmux_real ok(tmux 3.2a;CJK; /copy→tmux buffer;鼠标;退出恢复)ok(tmux 3.7c;同上) unavailable(Unix-only) windows_conpty unavailable unavailable ok(install/headless/turn/file-approval/shell/cancel/resume/sandbox-refused/keys-history/clipboard/voice-doctor/install-update-rollback) 对照验收标准
- 记录三平台 OS / 终端版本与真实效果(矩阵 JSON 产物 +
docs/rewrite/platform-capabilities.md)。 - 键鼠、shell、取消、屏幕模式、终端恢复、真实剪贴板、voice doctor(无 fixture)、沙箱、SSH、tmux、Windows ConPTY 均有证据;缺设备 / 拒绝 / 不可用明确标注。
- 产品侧跨平台差异已修并记入文档(显示不可达、clip.exe UTF-16LE、pbcopy UTF-8 locale、macOS hangup)。
- 新发现的差异记入文档,未删功能、未事后放宽验收。
已记录的差异
- Linux:空括号粘贴与参考一致(Ignore);真实 GNOME / Wayland 桌面不进 CI(X11 用 xvfb)。
- macOS:仅 ad-hoc 签名;麦克风列表 ≠ 录音(TCC / avfoundation);CI 只有虚拟声卡。
- Windows:仅 ConPTY,未驱动 Windows Terminal / conhost / VS Code;剪贴板图片未实现;无 win32-arm64;dsh ACL 无法进入
%USERPROFILE%内工作区;codsh-rust.exe仍在跑时 npm 更新会 EBUSY。 - 能力矩阵 job 仅在分支名含
matrix(及集成分支策略见 workflow)时跑。
未改动
- 未改动
main,未发布包/标签/Release,未改仓库设置或 secrets。 - 草稿分支
ci/201-matrix…ci/201-matrix-f保留未删。
- 矩阵入口:
Metadata
Metadata
Assignees
Labels
ready-for-agentAgent-grabbable workAgent-grabbable work
Parent
#132
Ticket: 69
Status: ready-for-agent
User Stories: 18, 26, 53, 54, 69(见父规格)
What to build
三个平台的用户都能可靠使用已交付的键盘、鼠标、剪贴板、语音、文件/进程保护及终端恢复,并看到真实差异。
Acceptance criteria
Blocked by
Delivery contract
用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。