Overview
dsh-hard-gate
README / EN
Package documentation
Registry summary
dsh.pub verifies the pinned bundle contract, runtime facts, and distribution semantics. The complete README remains in the source repository.
Read the full README on GitHubLIMITATIONS
Known limitations
- **不是内核沙箱。** 闸门检查的是"命令字符串"和"文件工具参数"。`node build.js`、`python script.py`、`cargo run` 这类命令内部删了什么,闸门看不到——那部分只能靠 OS 沙箱。本插件补的是沙箱退化到 `danger-full-access` 之后的缺口,**不替代沙箱**。 - **PowerShell 解析是词法级的**,不是真正的语法树。别名、`Invoke-Expression`、Base64、拼接变量都可能隐藏真实目标;因此"无法静态解析的删除"一律**询问**而不是放行,但无法保证 100% 覆盖。 - `write` 的整文件规则依赖 `read` 结果附带的 `meta`(`offset` / `lines` / `totalLines`),并回退到页脚文本。若 DSH 改了这两处的形状,`unknownReadIsComplete`(默认 `true`)决定退化为"视为读完"还是"要求重读"。 - 闸门只判断"是否读到 EOF",不判断单行内容是否完整:`read` 会把超长单行截到 2000 字符,这类文件的"完整视图"仍可能缺行内内容。超长行文件请用 `edit`,不要整文件 `write`。 - 受保护路径是**绝对规则**:如果工作区本身位于受保护根内(临时目录除外),文件工具将无法写入该工作区。请用 `extraRoots` / `replaceProtectedPaths` 调整。 - `enforceWorkspaceOnly` 会拦住"合理地改工作区外文件"的场景,这是有意的默认值;需要时用 `extraRoots` 放行具体目录,而不是整条关掉。 - 变更预算是**按会话**统计;不同 session 各自计数。agent-team 的并发子代理若共享同一会话会被合并计数,否则各自计数。 - `tools.guard` 兜底使用**词法路径**(同步、无 I/O)。符号链接指向工作区外时由 `pre-execute` 的 realpath 检查负责;两层同时失效的概率很低,但不是零。 - Auto 审查器是**第二层判断**,不是沙箱;它只看见单个动作,无法知道用户是否授权了某个中风险操作,所以中风险一律转人工。它也不能替代硬闸的路径/备份规则。 - 内置 Auto 审查器会看过滤后的对话历史;本插件的审查器刻意不看。两者只能启用一个。 - `run_code` 外层不送审,内层 PTC 调用逐个送审;`run_code` 里直接 `fs.rm` 这类操作由硬闸的 `program-fs-mutation` 询问兜底。 - 首次 `install_bundle` 与任何 `plugin_manager` 调用本身可能触发审批,这是 DSH 的行为,与本插件无关。
