Repository navigation
修复:MSYS兼容边界、run_code路径扫描与unconfined反馈 - #24
KannaKuron merged 2 commits into
Conversation
KannaKuron
left a comment
There was a problem hiding this comment.
Review:方向与实现全部通过,一处修改请求后合并
四个声称我们已对照 v0.39.2 源码逐一核实,本 PR 的修复逐项核对如下——质量很高:
核实通过项
- unconfined 可观测性(声称③):
sandboxUnconfinedMarker文案准确(明示 NOT enforced + 文件工具策略独立 + 不得经 shell 绕过);前台正文(renderResult)、job 读数(renderJobRead→sandboxNotes)、初始后台登记(renderBackground+ output union 扩展)三面都是纯加法,exit/signal marker 仍锚定末尾,parseExitStatus不受影响;renderJobRead收编进sandboxNotes后runnerFailed/denied/escalation 三分支完整保留(对照过);decorateExecution的ex.sandbox = sandbox补上了「句柄等待 result 前」的 facts;executor.gitBashRoute与 shell.js:247 的既有方法名匹配,防御式调用不遮蔽失败。 - run_code 边界(声称④):EOF 行注释
break(合法语法,不再弃权)而未闭合块注释/字符串/插值仍整份 no-op——铁律保持;白名单\p{L}\p{M}\p{N}+#只作用于「以/或~/开头的整串」,其后还有translateMsysPath段边界二次校验,误伤面可控;tagged template 判定(tag 紧邻、String.raw、调用/索引/括号 tag、of/await/yield作标识符)八种形态全部保守跳过,方向正确——宁漏勿错。 - 提示门控(声称④d):
runCodeHintFor(tools, codePaths)+ 调用点读 live 值;RUN_CODE_DIRECTIVE_OFF_TEXT诚实声明 OFF;新测试从源码截取真实 listener 用new Function构造验证三种方言组合——这是真接线断言,不是 grep。 - 工具描述(声称①②):官方镜像 + 四句增补的偏离已诚实标注("plus unavoidable boundaries");
ipconfig //all/EXCL 前缀语义/UTF-8 与 CP936/mixed streams 不可猜/unconfined 声明全部在案,且不随方言开关消失。 - 测试真实性:本地 macOS 全量
npm test166/166(165 pass + 1 skip,与 CHANGELOG 一致);新增断言是真实求值(new Function)与真实 ToolRuntime/Context 集成,不是正则凑数;README 删除「所有未来版本无解」的过度结论、CHANGELOG 如实——文档纪律到位。
修改请求(一处,补上即合并)
CHANGELOG 声称警示「贯穿…超时转后台」,但 renderPromoted 本身不读 sandbox、promote 分支也未传入——测试 renderPromoted({ …, output: delta }) 的 output 是人工构造的已含警示文本,而真实链路里 promote 时刻的 output 是前台原始输出的累积(未经 renderJobRead),不含警示。即:转后台那一刻模型看到的文本仍无警示,要等下一次 job 读数才补上——与 #23 的验收标准(「贯穿超时转后台」)及 CHANGELOG 表述有落差。
建议:promote 分支把句柄上的 sandbox facts(decorateExecution 现已挂在 handle 上)传入,renderPromoted(promoted, sandbox?) 在文本尾追加 sandboxNotes——几行改动;对应测试改为断言「promote 返回值自带警示」而非「传入含警示的 output 被保留」。
附带报告(不阻塞):tests/host-loader.mjs 的 registerHooks 在 Node 24.21 上对 createRequire(...).resolve('@deepseek-ai/…') 也会生效,hostRequire.resolve 再次进入 hook → 无限递归 RangeError(你的 24.13 正常;本机 main 分支同样复现,与 PR 无关)。preview 这条我这边以你的 Windows 实测 + CI 为准。值得留意:未来 Node 小版本可能继续改变同步 resolve 钩子的作用范围,hook 里可考虑按 context.parentURL 区分自身与宿主解析,或对 hostRequire 的解析结果做一层 memo 短路。
补上 promoted 一处并 rebase 后,我们按 v0.39.3 发布(同轮会带上 #25 报告的 SIDEBAR_NS row-id 修正)。
|
已在 c79332e 补上这一处,谢谢指出测试证据的缺口。
验证:普通完整回归 166/166、实际安装 Core 完整 preview 18/18,均 exit 0,无 skip/cancel;语法及 diff 检查通过。 核对时上游 main 仍为 6244efc,已是此前 PR 提交的直接父基线,故没有需要重放的 upstream 更新。此提交仅包含审查修补及测试/CHANGELOG,不包含 #26 的实验入口。 Node 24.21 host-loader 递归按您说明保留为非阻塞后续项,本次未扩展修改范围。 |
…mespace, and release v0.39.3 (#25 #27) issue #27: the private bash tool's hard inject of workingDirectory left the module fiber INACTIVE on hosts without that service (0.2.0-rc.2) — inject minimized, cwd seam falls back to the rc.2-era official resolveWorkdir order, and activation success now requires a tools.schemas read-back. issue #25 Bug 3: SIDEBAR_NS now uses the real row id (better-sidebar) instead of the npm package name. Carries PR #24 (MSYS boundaries, run_code scan edges, unconfined feedback) as v0.39.3.
概要
Refs #23。
修复可安全处理的 run_code 源码路径边界与提示门控,同时把不能在插件层普遍解决的 MSYS 原生参数、输出编码和 Windows unconfined 边界写进模型可见反馈。这不是通用原生编码修复,也没有恢复 Windows shell confinement。
本 PR 基于上游 v0.39.2 主线,仅一个提交、12个文件;#22 已 squash 合并,不重复带入其历史。原实验分支保持不变。新内容写在 Unreleased,原 v0.39.2 发布记录保持原样。
提交:
4816cd8。具体改动
真正修复的缺陷
无法普遍修复,因此准确警示
/all、/c当路径;提示//all///c或单命令EXCL前缀,并说明排除/c同时影响/c/...。不在范围
不替换root PowerShell、不修改市场patch、不增加依赖、不改安全默认或版本号、不静默回退其他shell、不劫持fs、不替换run_code运行时、不引入全源码AST改写。词法扫描仍不能辨认HTTP路由/search/command等字符串用途;动态路径及这些数据的可靠方向是native路径或显式类型化转换。
实际验证
在新的上游v0.39.2基线上重新执行:
npm test:166/166。DSH_PREVIEW_HOST_DIR=<actual-installed-host> npm run test:preview:17/17。**覆盖限制:**新PTC测试只通过真实transport捕获程序,不执行真实PTC引擎或文件操作;未验证完整生产GUI、AppContainer或新的restricted-token隔离方案。
Issue #23中的基础平台/架构限制仍是已知边界,因此这里用Refs而非自动关闭整项跟踪。