Repository navigation
fix(dsh): patch vulnerable source-toolchain dependencies - #7998
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Reviewer: model_agent; model=gpt-6.1-sol; provider=OpenAI; reasoning_effort=max; runtime_reported; observation_id=85ce6a76f6a8181954175b6c3558ea84b69d6115c425763a9b72b0829234c80c
Exact head ba3d1898723f78b0f6ac2d9bed9d4cf82cb5f371;base 34cc6883fb7c9ca374e652dc900d5caf4fc924e2。未发现阻断性问题,结论 APPROVE。以下为独立审查和本地验证;不是插件发布或用户 Host 更新的证明。
动机
从源码构建、验证和打包 DSH LoopX plugin 的维护者。原锁文件解析到有已公开告警的 fast-uri 3.1.8、undici 8.11.2 和 Zod 4.4.3;同一源码工具链审计报告 13 项告警。新锁文件固定到 fast-uri 3.1.9、undici 8.12.2 和 Zod 4.6.6;独立审计为 0,实际构建、隔离安装和运行路径保持可用。本 PR 只修复源码工具链,不更新用户独立安装的 DSH Host,不发布插件或承诺整套应用没有安全问题。
实际风险随库的调用方式而不同,审计计数并不表示插件存在 13 个可直接利用的入口。例如 undici 的已公开跨源缓存问题有 interceptor 组合等前提;本 PR 的合理边界是移除已知受影响的解析版本,再证明既有开发与打包路径继续工作。不会把源码 override 宣传为已经修复其他进程里的 DSH。
改动思路
沿用已有 package/workspace 双 override 投影并重算锁文件,保持旧新 pnpm 的同一图;没有增加运行时安全策略或新的依赖 owner。当前 PR 边界为三个依赖文件 +261/-98,SDK 仍为 DSH 0.2.1-rc.2,产品源码及现有 peer 范围未改。只改一个 override 投影会破坏跨 pnpm 配置一致性;跳过锁文件不能保证实际解析修复版本。复用现有冻结版本矩阵与真实安装 smoke 足够。 package.json 投影服务 pnpm 9,workspace 投影服务较新 pnpm;两个位置选择同一修复版本,锁图负责记录实际解析和 integrity。没有新 feature 开关、安装权限、依赖缓存协议或平台适配框架。
规范依据为 packages/dsh-loopx-plugin/README.md; .github/workflows/dsh-plugin.yml,spec_revision 34cc6883fb7c9ca374e652dc900d5caf4fc924e2,在实现 diff 前读取。逐项映射:Install 保留源码与独立安装 Host 的边界;frozen-configuration 要求 pnpm 9.15.9/10.33.0/12.10.1 的冻结配置不改锁字节;Maintainer release and marketplace handoff 要求用 pnpm 10.33.0 和实际打包字节验证隔离安装、运行与卸载。当前检查覆盖这些源码维护义务,没有借此宣称完成整个发布矩阵。
修复版本另对照官方 fast-uri advisory、undici advisory 和 Zod advisory 核实,分别达到 3.1.9、8.12.2 和 4.6.6 的修复下限。没有通过忽略告警来获得 audit0。
具体改动
关键代码讲解
package.json 的 pnpm.overrides 把 fast-uri 上限推进到 3.1.9,并增加受限的 undici 8.x 和 Zod 4.x 修复选择;已有 fflate、MCP 和 Vite override 保留。选择器没有把所有版本无条件压成一个新版本。
pnpm-workspace.yaml 同步同一组规则,allowBuilds 未改。独立的三个临时配置副本实际执行各版本 lock-only frozen install,均无交互提示且锁字节相同;没有把一次显示确认提示后退出的 pnpm9 调用算作完成矩阵。
pnpm-lock.yaml 的 129 个结构化变更叶子,除三组版本/integrity 替换、peer snapshot 重算和 override 外,还补入已有 Rolldown 1.2.15 的 15 个可选平台 binding。没有其他既有包版本升级。18 项新增/替换解析的 registry integrity 全部匹配;三个修复包又实际下载并校验 SHA-512。undici 的 Node>=22.19 和 binding 的 Node>=22.12 声明没有超过当前 package 的 Node22.22.3 下限。
独立行为反例用无执行副作用的 URI 字符串检查:base 将百分号编码 scheme 变成 javascript:...,head 保留编码,普通 HTTPS 规范化相同。两侧各 33 个归档文件逐字节比较,只有 package.json 不同;Host/Client 编译字节未变。真实隔离 registry 验证 package-name 安装、正确 bundles、错误 tag/discovery/integrity 拒绝和移除;真实 DSH profile 验证初始化、carrier、禁用、disabled boot 与清理。
对主干的风险
base/head各230项测试、Host/Client/test类型检查通过;独立临时副本的pnpm9.15.9/10.33.0/12.10.1冻结配置均实际执行且锁字节不变;两侧peer/MCP、打包、artifact、隔离registry和真实DSH runtime通过。18项registry integrity相符,其中3个修复包的下载tarball另验SHA512。 当前 head 用 pnpm10.33.0 和短隔离临时目录完成原生 premerge:4项 direct、6项 selected 全通过,manual holds=0。MCP transport 保留 same-origin,拒绝 cross-origin;runtime 中 live-disable 保留共享 DSH,卸载后不留 LoopX rows。LoopX bootstrap 使用合成 CLI carrier;这里没有偷偷安装/升级真实用户 runtime 或调用模型。
保留非绿历史:长嵌套 macOS 临时目录下,汇总 runtime 检查两次触发 pnpm ERR_PNPM_ENAMETOOLONG;在同一原生 canary runner 的不可变 base 和当前 head 都复现为本地 tarball store rename 的文件名限制。使用短的、独占临时目录后,同样的完整 gate 通过,直接 runtime 两侧也通过。没有删除断言、放宽限制、修改产品源码,或声称原长路径条件已经修好。该条件与本次依赖语义分别归因。
CI 按 wait_for_ci=false 未查询、轮询或等待。发布前作者在同一 head 的 PR 正文补充:五项 DSH CI SUCCESS,Python kernel-static-checks 报 F811、其余汇总 failure/skipped,并链接另一个修复提案 #8000。这些是已收到的作者诊断,required=false;我没有独立核验 CI 结果、根因或该修复,故不把它们称为本审查已证明的通过、回归或既有失败。它们不替代本次本地正反向证据。
audit0 是当前 registry 对当前锁图的观察,不替代兼容性、安全设计或所有平台资格。原生 Windows/Linux、最低 Node22实际 Host 和 Docker 发布场景未在本次重跑,不能继承为本 head 的独立验证结果。
我的整体评价
沿用已有 package/workspace 双 override 投影并重算锁文件,保持旧新 pnpm 的同一图;没有增加运行时安全策略或新的依赖 owner。当前 PR 边界为三个依赖文件 +261/-98,SDK 仍为 DSH 0.2.1-rc.2,产品源码及现有 peer 范围未改。 最强反例是依赖审计清空了,却破坏 peer 范围、构建器、包安装或禁用后的共享服务;现有原生检查和本次 base/head 实际 profile 路径覆盖了这些边界。修复沿既有 owner 完成,所需维护成本主要是保留受支持的双配置投影,没有新增人工操作轮次。
已检查完整三文件 diff 和打包产物,33个归档文件中只有 package.json 字节变化;没有页面或布局变更,visual review 不适用。未验证原生 Linux/Windows、最低 Node 22 的真实 Host、Docker 发布矩阵或浏览器挂载交互;没有升级已安装用户 Host。 采用 repository experience 中“走真实调用与恢复”的建议,因此读回实际 bundles、profile 和卸载结果;没有把测试数量、接入登记或 audit0 说成长期模型收益。源码维护切片已得到独立正反向证据,用户独立 Host 仍由其 owner 升级;closeout、readiness 和发布授权另行判断。
English verdict: APPROVE. The exact source graph resolves the patched packages and independently passes frozen configuration, integrity, build, package, transport and isolated real DSH lifecycle checks. The pre-existing long-temp-path failure is retained with successful short-path qualification. Remote CI was not consulted; no user Host update, release or merge was performed.
合入读回
准确 head
ba3d1898723f78b0f6ac2d9bed9d4cf82cb5f371已于 2026-11-03 由维护者合入,实际 merge commit 为2eca84b445e2a0daaccb99084c35f0096f8bb30d。以下原审计、五项 DSH 分发 CI 成功及 Python 共享静态检查失败记录继续保留;后续 #8000 已通过准确 head 的静态检查,但其 Windows lifecycle 尚有具名超时,不能宣称整个交付链全绿。本 PR 的 source dependency 修复已合入;当前机器上的 Host 升级、最低 Node 22 的实际 Host 和 release-only Docker 仍按原边界单独验收,本次没有进行全局安装或改写历史失败。
当前 CI 读回与修复依赖
准确 head
ba3d1898723f78b0f6ac2d9bed9d4cf82cb5f371保持不变。DSH 分发 CI 的 pnpm 9.15.9 / 10.33.0 / 12.10.1 冻结检查及 Linux / Windows 分发检查共五项均为 SUCCESS。Python CI 的实际首个阻断是
kernel-static-checks:tests/test_lark_private_conversations.py:817的 imported pytest fixtureF811。该文件在本 PR 的不可变 base34cc6883与 head 中 blob 相同。其余四个失败汇总门报告上游 failure/skipped,不能记作通过或另一个已复现的运行时故障。修复提案 #8000 @
d46c25c00e6232f9c93a9f42e897a7e8d9c796bb针对当前 main6f90e561的该 F811 与后来新增的同一测试 E731;完整 Ruff 由两错变为零,原 15 个故障分支 base/head 均过。提案尚未合并,旧 CI 仍是失败;后续按实际新检查结果重验 readiness,保留 review 与 merge 权限边界。下文原本地资格仍绑定其声明的 revision/base,不追认旧失败。Goal And Delivered Outcome
DSH 源工具链锁定的 fast-uri、undici 和 Zod 命中已公开的安全告警。同一工具链、同一审计命令下,
pnpm audit --json从基线的 13 条告警(5 high、6 moderate、2 low,exit 1)降为本分支的 0 条(exit 0)。更新现有的有界 overrides,同步 package.json 与 pnpm-workspace.yaml,并用仓库约定的 pnpm 10.33.0 重建 lock。三个修复都留在原 major 内;DSH SDK 仍固定为 0.2.1-rc.2。lock 重建同时补全了既有 rolldown 1.2.15 的 15 个跨平台可选绑定,并重算受影响的 peer snapshots;没有升级其他既有包版本。
main;实现基线34cc6883fb7c9ca374e652dc900d5caf4fc924e2。Author Declaration
.github/workflows/dsh-plugin.yml和 README 中的源工具链资格边界。pnpm why与已安装 package metadataSelf-check: 保留现有直接配置结构和 typed owners;额外抽象或重构不增加此次修复的可验证价值。审阅了三文件差异、原生 lock 解析结果、依赖来源与对应 Node engine 下限。
Scope And Continuation
本切片完成源工具链依赖修复。overrides 属于开发依赖资格,不会修补用户另行安装的 DSH Host;没有发布、全局安装或实际采用的结论。其他生态的依赖告警和桌面 updater 的兼容资格不在本 PR 范围内,无需为此切片制造 successor。
Validation
ba3d1898723f78b0f6ac2d9bed9d4cf82cb5f371。pnpm audit --json:基线 13 条,head 0 条;保留基线 exit 1。install --frozen-lockfile --lockfile-only --ignore-scripts,每次 lock 字节不变。pnpm typecheck;三依赖 tarball integrity 与 registry 一致;两配置投影与 lock overrides 一致。pnpm test:14 文件、230 项;同步 main 后在最终 head 复跑,包含真实 LoopX 原生准入测试。smoke:peer-range与smoke:mcp-transport;实际 MCP transport 的同源保留、跨源拒绝。npm pack与smoke:artifact;packed manifest 与 head 相同。rebase 前后整个 DSH 源码和配置逐项一致,因此保留同一受测 artifact。smoke:registry/smoke:profile:真实 DSH 0.2.1-rc.2 安装、逐 bundle 读回、移除;tag、发现目标、integrity 错误均拒绝。smoke:runtime:真实 DSH Web boot、Client 加载、live-disable、disabled-package boot、teardown;LoopX bootstrap 使用既有 synthetic carrier,mounted browser Start/Pause 的独立资格未重做。smoke:install与 selected-host smoke:实际 installer、旧版本/不兼容 Host 拒绝、profile 不变、移除;指定 Host 的移除拒绝正确使完整流程失败。canary premerge --from-git-diff --git-diff-base origin/main:4 项 direct checks、6 项原生选择检查全部通过,无 failure / advisory / manual hold。cqr_08481c0ee0e0aa6cca05,exact-scope verified;fingerprint08481c0ee0e0aa6cca05afe4eab752c144775241ae38c2aecdfeea3c0170377e,3 files,safe-fix allowed / not applied,0 blockers / warnings / advisories。Frontend / Visual Evidence
UI impact: none。源码工具链配置修复,没有布局、文案或用户入口变更;截图、viewport 与 craft review 不适用。
Type of Change
LoopX Area
Shared-authority RFC fixture impact: N/A;不改变 authority、provider、运行时路由或 RFC 成熟度。
Boundary Checklist