依赖安全设计

范围:npm manifest 和 lockfile,并共享记录并行的 Python 依赖工作。源码与已安装 App 的边界分别记录。

当前实现与已验证缺口

仓库使用 npm workspaces 管理 apps/web, apps/desktop以及 apps/cli。Web 应用使用 App Router,配置为 output: "export";生成文件由 Python worker 提供。桌面使用 Electron 和 electron-builder。根 lockfile 包含所有 workspace 的运行、构建及可选依赖图。

位于以下路径的规范 Dependabot 清单 /tmp/openprogram-completion-audit/dependabot-open.json 在基线记录了 194 个未关闭警报:18 个包名对应 154 个 npm 警报,以及以下文件中的 40 个 pip 警报: uv.lock。npm 基线含 6 个 critical、54 个 high、78 个 medium 和 16 个 low 警报;55 条为直接依赖,99 条为传递依赖。被忽略的报告 reports/content-security/npm-dependency-security-baseline.md 记录精确公告、范围、版本与命令。范围核对将 GitHub 逗号分隔的范围作为 semver 合取处理,解析错误时失败。

参考资料与框架比较

修复版本来自 GitHub 公告和包注册表。修改 lockfile 前通过 npm view 检查注册表元数据。所选框架版本要求 Node 22.12 或更新,因此根 engine 合同、CI 启动和开发环境设置必须使用相同最低版本。

领域现有能力缺失能力或风险决策
Next.jsApp Router、静态导出、客户端运行时 API;打包路径没有 Next 服务端。已安装的 14.2.35 符合当前 Next 公告的受影响范围,Next 16 移除了 next lint.使用 Next 16.3.5,配合 eslint 9 和直接 lint 脚本。manifest 路由通过 dynamic = "force-static" 以及现有 webpack 构建保持静态导出。
Electron原生外壳、preload 隔离、打包运行时和 loopback worker URL。Electron 37.10.3 符合 lockfile/直接依赖记录中的受影响范围。使用 Electron 44.4.3。其包和解包 App 声明最低 macOS 13;desktop 检查覆盖源码 API。进行本地 App 验收前,打包必须替换已安装的 Electron bundle。
位图标注图片裁剪、旋转、绘制、文本、形状、保存、撤销、重做,以及选择/拖动编辑。tui-image-editor 包含有漏洞的 Fabric 4 依赖链,替代方案必须保留标注交互。移除 tui-image-editor ,直接使用维护中的 Fabric 7.4.0 作为原生 canvas 上的透明标注层。裁剪和旋转将标注合成到图像;导出前仍支持选择、移动、调整大小和文本编辑。
npm 传递依赖图一个 npm lockfile 固定可复现的 workspace 依赖。旧的嵌套 tar, form-data, postcss, extract-zip及遗留 HTTP 包仍在依赖图中。更新兼容的传递依赖路径;若没有修复版本则移除不再维护的依赖链。最终 lockfile 逐一核对全部公告范围,包括包已不存在的记录。
Python 依赖图uv.lock 由 Python 依赖工作独立管理。AnyIO、torch、setuptools 和其他 pip 公告必须依据精确修复范围核对。保留相同清单、证据和完整门禁合同;并行负责人在整合前提供 Python 版本变更与证据。

官方参考: Next.js 16 升级指南, Next.js 16.3.5 发布, Electron 44 发布, Fabric 公告 GHSA-hfvx-25r5-qc3w, Fabric 公告 GHSA-w22m-hvvm-xmwx,以及被忽略的基线和核对报告中逐项记录的公告链接。

采用、调整与拒绝的选择

目标架构与边界

所有包解析通过根 npm lockfile。直接 workspace manifest 声明支持的框架与外壳版本;只有上级包需要时才接受嵌套包。构建边界为 npm ci --ignore-scripts ,随后执行 workspace 检查。运行边界包括导出的 Web 资产、Electron main/preload 和提供资产的 Python worker。未经产品既有验证,不得将不可信输入传入包 CLI 或归档解压器。

Electron 包解析本身不会更新现有的 /Applications/OpenProgram.app 。支持的本地流程是用可信运行时基底打包当前 checkout,覆盖安装唯一默认 App,随后运行 scripts/refresh-local-app.sh 一次。验证必须检查已安装 App 实际的 process.versions.electron;源码检查不能证明已安装运行时版本。

Python 依赖工作负责 uv.lock ,并在共享报告中记录主机策略:Intel macOS 支持 BM25,Intel 上没有可选 embedding wheel,macOS arm64 embedding wheel 要求 Python 3.14 或更新。当前验证主机为 macOS 15.7.3。

安全失败按依赖解析失败处理:干净安装、审计、类型检查、构建或受影响测试失败均阻止完成,并记录精确命令。兼容失败时,旧 manifest 保留在 Git,直到最小源码调整通过受影响检查。本项工作不含远程写入、发布、已安装 App 刷新或 Python 源码修改。

验收条件

  1. 最终 commit 中,每个直接 npm manifest 版本和每个 lockfile 实例均不在规范清单中适用公告的受影响范围内;不忽略或隐藏警报。
  2. npm ci --ignore-scripts 在支持的 Node/npm engine 上成功, npm audit --json 报告零漏洞,规范范围核对没有受影响 npm 版本。若上游仍有无补丁公告,报告必须列出其上级依赖链、原因和测试过的替代方案。
  3. npm run build --workspace apps/web, npm run typecheck --workspace apps/cli, npm test --workspace apps/web, npm run check:web, npm run check:desktop以及 npm run check:cli 均从干净安装运行。最终报告区分既有源码失败和依赖引入的失败。
  4. 最终 diff 仅包含依赖 manifest/lockfile、必要的 Next/Electron 兼容源码、规范设计和忽略证据的规则。限定范围提交后工作树干净。

完整门禁清单

实现状态

npm 候选使用 Next 16.3.5、Electron 44.4.3、Fabric 7.4.0,以及 lockfile 记录的修复后传递依赖图。源码检查覆盖静态导出、直接 lint 调用、原生桌面功能和位图编辑器的裁剪、旋转、绘制、标注、保存、撤销、重做及销毁路径。Python 部分仍是独立 uv.lock 变更的协调边界。最终审计计数、核对输出和残留源码测试失败记录在被忽略的最终记录中。