Repository navigation
v0.7.6
v0.7.6
从 npm 上现存的 0.5.3 起算,这一版把 0.5.4 → 0.7.6 四个版本一起交付。
变更
0.5.4 · 长调用不再被单次 HTTP 请求的寿命卡死
- 等待预算按 120 秒切片循环,片长默认 120 s、硬上限 240 s;
dsh.discover回报maxWaitSliceMs,被钳制时另报maxWaitSliceMsRequested。 - 截止不再只靠中止:读流与既有截止赛跑,超时立刻收成本次结果,不等宿主交还控制权。
- 清理有界:事件流的
return()最多等 1 秒,答案不依赖清理是否完成。
0.6.0 · 调用方断开时中止,并把非失败结局与错误分开计
res.on("close")→ 中止本次调用;轮次照旧继续,桥只是不再空等。- MCP 的
notifications/cancelled真的会中止在途调用。 /status新增calls.outcomes: { timeouts, cancelledByClient };被中止的调用不再计入errors。
0.7.0–0.7.6 · 无人值守会话撞上审批墙时,桥能回绝,也能把决定交回派发方
- 三档
approvals.mode:off(默认)/deny(桥直接回绝升权)/delegate(派发方 agent 回答)。 - 两个新方法:
dsh.approvals.pending(长轮询 ≤120 s)与dsh.approvals.resolve。 - 轮次停在待批时立刻返回
status: "waiting-approval"与pendingApproval,而不是把调用方拖到超时。 allow-once只在被批准的那次调用期间放宽预设,调用结束(或下游拒绝、或 5 分钟兜底到期)即恢复;同一会话同一时刻只允许一条待批。- 按两轮独立审计收窄:决策包递归脱敏并带
untrusted标记、所有权只认桥创建的会话、改预设走所有权与模式校验、闸门任何异常都降级放行。
说明
approvals.mode默认仍是off:不开就与旧版行为一致,升级不会改变任何现有会话的行为。- 已知边界(本轮不修):子会话与桥同用户,能读到
~/.dsh/dsh-rpc/token,因此delegate挡不住「拿到 token 的子代理自己批准自己」。默认off时不触发;开启前请确保子代理可信。 - 3 次升权额度与所有权记录仍在内存,宿主重启后清零。
验证
- 单元/契约:172 例通过(methods 74、mcp-format 19、pending 36、approvals 11、registry 8、wait 6、abort 6/7、client 6、status 6)+ 宿主集成 1 例 +
catalogue ok。唯一未通过的是abort套件里那条需要child_process.spawn的用例,在本机沙箱里报EPERM,CI 上通过。 - 打包:
31 files, 432.3 KB unpacked, 153.8 KB packed。 - 真宿主端到端(本机 profile):allow-once、reject、到期、取消、preset 上报五条路径全部跑通;批准后命令确实按新预设执行,拒绝/到期/取消时命令确实未执行。
- CI:
main的 run 42214271524 双绿(Node 22.x / 24.x)。
安装
dsh plugin add @punchact/dsh-rpc-agent
或在 profile 里 install_bundle("@punchact/dsh-rpc-agent@0.7.6")。MCP 侧接法见 README 的「接进 MCP 客户端」一节。