Repository navigation
Releases
dsh-computer 0.1.0-rc.3
English
Driven by a real user session (Calculator + Notes, 24 approval prompts, ~23 min). dsh-computer itself was ~4% of the wall-clock; the rest was model turns, approval waits, and bash escalations the model used because the driver could not open an app or name a window. Replaying that Calculator path on the real Helper now takes 0 prompts.
✨ Added
computer_apps— running Dock-visible apps with exact bundle id, pid, frontmost flag, and the Accessibility window numberscomputer_observeaccepts. Read-only; windows are listed only with Accessibility trust (accessibilityTrusted).computer_launch— opens an installed app by exact reverse-DNS bundle id, or activates it if running, and waits briefly for its first window. No arguments, documents, or URLs can be passed, so it needs no approval; paths,file://URLs, display names, and shell syntax are rejected before the Helper. Replaces shellopen -a.- Both are optional, additive driver methods (
listApps,launchApp). The driver contract stays v5.
🐛 Fixed
esc/Esc/ESCandarrowleft|right|up|downnow normalize toescape/left|right|up|downin both the Node and Swift policies, so they no longer prompt as unknown chords. The approval digest stays identical on both sides.- 「清除」 is no longer classified as destructive; English
Clearnever was. 删除 / 抹掉 / 卸载 / 销毁 and delete / erase / remove still require approval. computer_launchagainst an app that is still quitting relaunches it instead of failing withunidentified_application.
📖 Guidance
computer_actnow tells the model to click on-screen buttons or usetypefor printable characters;keywith a printable character is a non-navigation chord and prompts every time.
📦 Install
npm install @zseven-w/dsh-computerCompatible with @zseven-w/dsh-qa@0.1.0-rc.2 (contract v5).
简体中文
起因是一份真实用户会话(计算器 + 备忘录,24 次审批,约 23 分钟)。dsh-computer 自身只占约 4% 的时间,其余是模型轮次、审批等待,以及模型因为驱动无法打开应用、无法给出窗口号而发起的 bash 提权。在真实 Helper 上重放那条计算器路径,现在审批 0 次。
✨ 新增
computer_apps:列出 Dock 可见的运行中应用,含精确 bundle id、pid、是否最前,以及computer_observe可用的 Accessibility 窗口号。只读;仅在已授予 Accessibility 时列出窗口。computer_launch:按精确的反向域名 bundle id 打开已安装应用(已运行则激活),并短暂等待首个窗口。不能传参数、文档或 URL,因此不需要审批;路径、file://、显示名和 shell 语法都会在进入 Helper 前被拒绝。用于代替 shellopen -a。- 两者都是可选的增量 Driver 方法(
listApps、launchApp),合同版本仍为 v5。
🐛 修复
esc/Esc/ESC与arrowleft|right|up|down在 Node 与 Swift 两侧都归一为escape/left|right|up|down,不再被当作未知组合键弹审批;两侧审批摘要保持一致。- 「清除」不再被判为破坏性操作(英文
Clear本来就不是);删除/抹掉/卸载/销毁与 delete/erase/remove 仍需审批。 - 对正在退出的应用调用
computer_launch时会重新打开,而不是报unidentified_application。
📖 引导
computer_act说明现在要求模型对可打印字符点击屏幕按钮或使用type;用key发送可打印字符属于非导航组合键,每次都会弹审批。
📦 安装
npm install @zseven-w/dsh-computer与 @zseven-w/dsh-qa@0.1.0-rc.2 兼容(合同 v5)。
dsh-computer 0.1.0-rc.2
English
🐛 Fixed
- macOS CI crash (
Exited with unexpected signal code 5). Not an environment issue:cfArrayin the Swift tests built aCFArraywith nil callbacks over unretained pointers, so a bridged temporary ("not-an-ax-element" as CFTypeRef) was freed before the array was read andChildrenRead.fromcalledCFGetTypeIDon freed memory. Local runs got lucky; the runner's allocator reused the memory.kCFTypeArrayCallBacksmakes the array retain its elements. CI is now green on Linux and macOS. - Windows removed from the CI matrix. Five tests failed there on
unsafe_capture_artifact— a POSIX ownership check Windows cannot satisfy, exercising macOS-only capture code on a platform whereNativeHelperthrowsComputerPlatformErroranyway. The platform claim was dropped; the security check was not weakened. - The native protocol smoke tolerates
window_not_found(a frontmost app with no AX windows — a GPU-rendered terminal, a fullscreen app, a CI runner) alongside the grant and lock codes it already tolerated. The summary still disclosesboundedObserve: { ok: false, code }, so a green run says whether the observe actually ran. - Package, Node and Swift protocol versions are now derived in tests instead of hardcoded in six places; a release bump no longer breaks the handshake tests, and the mismatch assertion no longer silently tests the previous version's error text.
📖 Docs
- The Helper is built by you, by design. No Developer ID notarization is planned; earlier docs read "not done" as though it were pending.
📦 Install
npm install @zseven-w/dsh-computerDriver contract v5. @zseven-w/dsh-qa@0.1.0-rc.2 refuses any other contract version at load.
简体中文
🐛 修复
- macOS CI 崩溃(
Exited with unexpected signal code 5)。 不是环境问题:Swift 测试里的cfArray用 nil callbacks 在未 retain 的指针上建CFArray,桥接的临时对象("not-an-ax-element" as CFTypeRef)在数组被读取前就已释放,ChildrenRead.from随后对已释放内存调用CFGetTypeID。本地只是侥幸,runner 的分配器复用了那块内存。改用kCFTypeArrayCallBacks让数组 retain 元素。CI 现已在 Linux 与 macOS 上全绿。 - 从 CI 矩阵移除 Windows。 五个测试在那里因
unsafe_capture_artifact失败——那是 Windows 无法满足的 POSIX 属主检查,且被测的是 macOS 专用截图代码,而NativeHelper在该平台本来就抛ComputerPlatformError。撤掉的是平台声明,安全检查未放宽。 - 原生协议 smoke 在既有的授权/锁定错误码之外,也容忍
window_not_found(前台 app 不暴露 AX 窗口——GPU 渲染的终端、全屏应用、CI runner)。摘要仍披露boundedObserve: { ok: false, code },绿色结果会说明 observe 是否真的执行。 - 包版本、Node 与 Swift 协议版本在测试中改为派生,不再在六处硬编码;发版 bump 不会再打红握手测试,版本不匹配的断言也不会悄悄变成在断言上一版的文案。
📖 文档
- Helper 按设计由你自行构建。不做 Developer ID 公证;此前文档写「尚未完成」像是待办。
📦 安装
npm install @zseven-w/dsh-computer驱动契约 v5。@zseven-w/dsh-qa@0.1.0-rc.2 在加载时拒绝其他契约版本。
Full Changelog: v0.1.0-rc.1...v0.1.0-rc.2
dsh-computer 0.1.0-rc.1
English
First public prerelease. macOS desktop automation for DeepSeek Harness: observes the accessibility tree, gates risky actions behind one-time approval, permanently refuses secure fields, and returns bounded visual evidence with Set-of-Mark labels.
npm install @zseven-w/dsh-computerThe native Helper is not distributed with this package, by design. You build it from the checkout and grant it Accessibility + Screen Recording yourself; it is ad-hoc signed with no TeamIdentifier and no stapled ticket. There is no Developer ID notarization planned — building it yourself is the supported path, not a gap waiting to close. README.md has the build and grant steps. This is driver contract v5, and it is the desktop half of @zseven-w/dsh-qa.
Correction (2026-09-20). These notes originally said the macOS CI crash and the Windows failures were "runner-environment issues under investigation". That was wrong on both counts. The macOS crash was a use-after-free in a test helper (
cfArraybuilt a CFArray with nil callbacks, so a bridged temporary was freed before the array was read); it reproduced on the runner because the runner's allocator reused the memory, and only looked environmental because local runs got lucky. The Windows failures were macOS-only capture code being exercised on a platform the package does not support; Windows was removed from the matrix rather than the security check being weakened. Both are fixed in v0.1.0-rc.2, whose CI is green on Linux and macOS. The earlier notes also said notarization was "not done"; it is not planned.
简体中文
首个公开预发布版本。面向 DeepSeek Harness 的 macOS 桌面自动化:基于可访问性树观察,高风险动作走一次性审批,安全字段永久拒绝,并返回带 Set-of-Mark 标注的有界视觉证据。
npm install @zseven-w/dsh-computer原生 Helper 按设计不随包分发。 需要你从工作区自行构建,并自行授予辅助功能 + 屏幕录制权限;它是 adhoc 签名,没有 TeamIdentifier,也没有 stapled 票据。没有 Developer ID 公证的计划——自行构建是受支持的路径,不是等待被补上的缺口。构建与授权步骤见 README.zh.md。当前是驱动契约 v5,同时是 @zseven-w/dsh-qa 的桌面那一半。
更正(2026-09-20)。 本正文最初称 macOS CI 崩溃与 Windows 失败是「runner 环境问题、仍在排查」。两条都错了。macOS 崩溃是测试辅助函数里的 use-after-free(
cfArray用 nil callbacks 建 CFArray,桥接的临时对象在数组被读取前就已释放);它在 runner 上复现是因为那里的分配器复用了那块内存,本地只是侥幸。Windows 失败是 macOS 专用的截图代码在一个本包不支持的平台上被执行;处理方式是把 Windows 从矩阵移除,而不是放宽安全检查。两者都已在 v0.1.0-rc.2 修复,其 CI 在 Linux 与 macOS 上均为绿。此前正文还写公证「尚未完成」;准确的说法是不做。
Full Changelog: https://github.com/ZSeven-W/dsh-computer/commits/v0.1.0-rc.1