Repository navigation
变更
- 审批台账落盘(
approvals.json,0600、原子替换):每会话的放宽额度、本桥创建的会话所有权、尚未还清的放宽欠账都跨重启保留;启动时把上一个进程留下的放宽收回。 history补上期限:新增historyBudgetMs(默认30000ms,钳制 100–120000),读不到就以-32005结束,不再无限等待;关闭事件流也改成有界(最多等 1 秒),Host 卡住不会再把答案一起拖住。- 文档:中英 README 逐节对齐;
docs/release.md重写为可执行的手册,并新增 Release 正文模板(本正文即按该骨架写)。
说明
- 等待仍是分片循环:单次 HTTP 响应活不过五分钟(Node fetch 的 300 s
headersTimeout,实测 303.9 s 报fetch failed),片长由maxWaitSliceMs控制(默认 120000,上限 240000)。CLI 与 MCP 工具已自动续等,自己写客户端要自己切片。 - 审批任务停在待批时会立刻返回:
approvals.mode=delegate下,轮次若因等你回答而停下,dsh_ask/dsh_wait返回status:"waiting-approval"与pendingApproval,而不是死等到deadlineMs。 - 已知边界:① token 对桥创建的子会话可读(同机同用户),
delegate防的是误操作与提示注入,不防同用户进程自我批准;② 闸门只拦工具参数里的sandbox_permissions,configure改预设被禁止,但"创建会话时调用方自选预设"不受闸门约束;③ 放宽额度按会话,重启不再清零,新建会话仍重新计三次。
验证
| 项 | 结果 |
|---|---|
| 单测(十套件) | methods 76 · mcp-format 19 · registry 8 · pending 36 · approvals 11 · approval-state 8 · wait 6 · abort 7 · client 6 · status 6 = 182 例 |
| 真宿主集成 | test/host.test.mjs 1 例 |
| 端到端 / 边界 | test/e2e.mjs 14 例、test/edge.mjs 24 例(最近一次运行 2026-11-05) |
| 版本一致性 | check:version → version ok: 0.7.7 |
| 打包完整性 | check:package → 32 files, 485.2 KB unpacked, 172.3 KB packed |
| CI | 合入提交 27c09df 的 test run #42220725409 双绿(Node 22.x / 24.x) |
本机沙箱限制:
abort套件里一条用例需要spawn子进程,在workspace-write下被以EPERM拒绝,因此本机npm test退出码为 1(170 通过 / 该例环境性失败);同一提交的 CI 在无此限制的环境下双绿,故以 CI 为发布依据。这是环境边界,不是代码失败。
安装
dsh plugin add @punchact/dsh-rpc-agent@0.7.7