Repository navigation
Conversation
KannaKuron
added a commit
that referenced
this pull request
Nov 7, 2026
Owner
|
感谢这份补丁,方向和覆盖面都很扎实。我按维护者流程把这套改动整理成了可评审分支,而不是直接合并原始 head:
相对原 head 的主要整理:
验证边界:本机 macOS 分支已推送供评审;暂未合并 main,也未发版。 |
Owner
|
整理版已合并 main 并发布 v0.51.0。
合并的是在本仓库 本机 macOS 只能验证非 Windows 面: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
问题与结果
这次在 Windows 上对 v0.50.0(
fa9382257f31c281156ba0be608d3f004b90778a)进行了源码审核与隔离宿主验证,确认 5 类运行时/配置问题,并发现现有宿主 preview 由于加载器及旧 Core 调用契约而不能有效运行。本 PR 修复这些问题,保留原有私有 Git Bash executor / 官方 PowerShell provider 架构,不改变访问策略,不升级插件版本或发布 npm。依照仓库纪律,修复从最新上游 main 的
alpha适配分支提交。run_code被注入 JavaScript prelude1. Python run_code 语法错误
触发条件:Windows,默认
posixPaths/virtualMounts/codePaths开启,调用会话使用 Python PTC runtime。原问题:
translateDispatch()仅根据工具名run_code就拼接programPrelude(),生成try{const e=process.env;...}catch{}。即使输入只有print("AUDIT_PYTHON_OK"),也会变成 Python 无法解析的程序。审核时用真实 Python 解释器复现:原程序退出码 0,转换后退出码 1,SyntaxError: expected ':'。修复方法:
programLanguageFor(ctx, agent),优先从调用 agent 自己的 context 读取ptcRuntime.language,不根据全局 peer 开关猜测。language === 'typescript'时执行 JS/TS 字面量转换及 TEMP prelude;Python、未知或不可读取的 runtime 不改源码。run_code是 executor 提供的 transport,改用选中 executor 的实际 schema 判断它是否存在,而非普通工具 registry 的 definitions 列表。验证:便携语言矩阵覆盖 Python/未知/TypeScript及 agent 优先级;完整插件入口经真实 Core PTC transport 将 Python 程序交给真实解释器,断言源代码逐字节不变且执行成功。
2. 持久终端自动接管删除用户配置
触发条件:profile 中已有启用的
optional-terminal-bash行,其中设置了timeoutMs、scrollbackLines或shellArgs,但尚未设置shellPath。原问题:原实现将整个
config替换为{ shellPath }。审核复现中,timeoutMs: 98765、scrollbackLines: 4321和shellArgs全部丢失,函数仍返回updated。修复方法:
[bashIndex, 'config', 'shellPath'],不重建整个 config map。withFileLock(profile/package.json)包住整个读取、修改、原子写入和回读验证,锁目标与 configEditor 一致。writeFileAtomic,移除无锁的 tmp/rename 回退;宿主能力不可用时明确失败。tests/terminal-bundle.mjs加入 npm test;YAML 成为锁定的开发依赖,删除作者个人机器路径探测。验证:真实 YAML parser/writer 保留其它字段、数组和用户注释;原有 plan、序列化、写入失败、回读及回滚测试也执行。
3. 隐藏工具的所有权被覆盖
触发条件:全局或祖先 scope 已注册
gitbash_native/gitbash_to_native_path,在当前 agent 被 restrict 隐藏。原问题:
schemas(agent)只列可见工具,原代码误认为隐藏名称空闲,并假设注册会因重名失败。当前 Core 明确允许 agent 层覆盖全局/祖先层,而自有注册不受该继承工具 mask 过滤。审核时在真实 Core 上复现隐藏工具重新可见且调用到插件实现。修复方法:
toolNameOccupied(),使用公开scopeChainOf(),分别检查全局、祖先各自视图以及当前 scope;子 scope 的 mask 不再抹掉上层所有权。registerExperimentalTool()与 eager native slot 共用该判断。tools.view,不依赖跨 scope 的 register 冲突来保护所有权。验证:真实 Core 覆盖全局/当前 agent 同名所有权、隐藏全局工具、隐藏祖先工具、foreign dispose 后恢复注册、Jobs reload,以及 eager-slot 生命周期。
这项是工具可见性和所有权修复;不宣称原问题能够绕过 OS sandbox。
4. dsh-ops 恢复误删原有 bash:false
触发条件:用户在安装本插件之前已经将某个模式设为
bash:false,随后插件接管其它模式并被停用/卸载。原问题:恢复逻辑把所有四个模式的 false 都视为插件写入,甚至只读到
present就安装恢复钩子。没有原值和来源记录,因此恢复会删除用户原先的 false,可能重新启用 ops bash。修复方法:
.gitbash-ops-ownership.json,只存本插件实际修改的模式、是否存在原 override 和原布尔值;不存凭证,不修改 dsh-ops 的 schema。configEditor.edit()。验证:子 Node 进程完成 adoption、父进程读取落盘收据恢复;覆盖原有 false、原有 true、继承值、其它设置、后续用户修改、失败/不落盘写入、恢复重试以及并发值变化。没有对真实用户 profile 写入。
迁移说明:升级前留下的无收据 false 可能属于用户,也可能属于旧版本。本 PR 选择保留,用户可通过 dsh-ops 设置自行恢复;不能安全自动判定来源。
5. 路由提示未到达模型
原问题:
system-prompt/assemble中调用tools.schemas()后修改返回的数组。该数组是副本,当前宿主在 waterfall 前已收集 provider 工具声明,并在结束后附回原 tools;所以字符串单测虽然通过,最终模型 schema 没有任何新路由文字。修复方法:
src/tool-routing.js,避免 Bash module 与 inline wiring 互相循环导入。验证:直接检查真实
SystemPrompt.assemble()最终产物,覆盖 native/PTC SDK、隐藏 pwsh、委托方言关闭与完整 persona。complete persona 按宿主语义保留唯一 section,不强行插入被明确抑制的 section。6. 修复宿主预览与测试可信度
审核基线:原
npm test为 342/342,通过并未暴露上述问题。原 test:preview 的 9 个文件在初始化阶段栈溢出;只临时修正 loader 后为 33/82,通过/失败不能直接解释为 49 个插件 bug,大量属于旧夹具。修复方法:
registerHooks.resolve内部的require.resolve会再次进入同步 hook,增加 try/finally 重入保护。host-runtime.mjs,真正注册 Native/Ptc executor,传入calls,从results读取单调用结果;不 monkey-patch ToolRuntime。验证与边界
本机 Windows,从用户安装目录的 Desktop ASAR 只读提取完整 Core 到隔离目录;没有修改安装目录、生产 profile 或重启 Desktop。
npm testtest:preview文件清单,Desktop 自带 Node 24.21.0、Core 0.2.2-rc.1、Cordis 4.1.0npm pack --dry-run --ignore-scriptsnode --check新增/修改入口与git diff --check宿主预览同时覆盖实际 Git Bash / PowerShell、native exact argv、中文和空格路径、GBK/UTF-16/raw 输出、取消/owner disposal、Jobs promotion、前台超时、文件输出完整性与重复 policy gate。
普通 Node 不能直接读 Electron ASAR:需用 Desktop 的完整只读提取副本,不能只用 app.asar.unpacked/dsh,更不能用不相干的全局 CLI 代替。
未声称完成真实 GUI/preset picker、真实 dsh-ops 0.5.0 整套插件生命周期、可选 Python PTC 插件整套部署、winget 安装或所有 FastCtx payload 的验证。Python 测试使用真实 Core transport + fixture runtime adapter 调用真实解释器。整个验证没有模型/API 调用。
远端检查补充:本提交
ad86e4c在复刻仓库与上游 PR 的 GitHub Actions 均 4/4 通过:Windows / Ubuntu × Node 24.9.0 / 24;上游 workflow run 为42221666847,复刻仓库 run 为42221407656。