Repository navigation
build(deps-dev): bump vite from 8.2.1 to 8.3.4 in /apps/presentation/dashboard in the dashboard-security group across 1 directory - #6971
Conversation
Bumps the dashboard-security group with 1 update in the /apps/presentation/dashboard directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite). Updates `vite` from 8.2.1 to 8.3.4 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v8.3.4/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 8.3.4 dependency-type: direct:development dependency-group: dashboard-security ... Signed-off-by: dependabot[bot] <support@github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; model=gpt-6.1-sol; provider=OpenAI; declaration_source=runtime_reported; reasoning_effort=max
动机
维护工作台的贡献者在本机启动开发服务,并向用户交付 Dashboard 与原生 Chat 的构建产物。
在明确暴露开发服务且满足攻击路径条件时,旧版本可通过特殊查询读取被拒绝文件的前四字节,或在导入路径后读取允许范围外的文件;新版本应拒绝两条请求,同时继续提供正常页面。
本次对照中两条旧绕过都变为 403,工作台与原生 Chat 均可构建,隔离原生后端上的任务查看、刷新及窄屏导航继续工作。
本 PR 不修改 Goal、任务、权限、调度或模型执行规则,也不证明所有平台、热更新和已安装桌面 App 均已验证。
开发服务使用本机绑定;这里的攻击影响有暴露服务和具体请求条件,不能把它解释为默认对局域网开放。作者的依赖升级目标在这条边界内已验证,不扩大为整个产品或长期效率已达成。
改动思路
复用应用现有 Vite 配置、构建入口和锁文件即可交付修复;不需要在 LoopX 中另建文件访问策略或兼容分支。
本 PR 的交付边界是 apps/presentation/dashboard 的 manifest 与 lockfile,以及它们实际解析出的开发服务和构建依赖。
比起保持旧依赖、仅依赖绑定地址缓解,或在应用中另写 middleware,采用上游已修复版本能直接修复已复现的不变量,并保留现有部署/回滚路径。它仍会影响生成给用户使用的前端,因此不能用“只是 devDependency”免除产物验证。以下是本次真实配置测试的观察,绑定本评审 head 90876a15ebb7a213d86f64cd88f3badb6fabe419:
| 同一合成请求 | 基线 8.2.1 | 本 head 8.3.4 |
|---|---|---|
普通被拒绝 .env |
403 | 403 |
| 被拒绝文件的 wasm 特殊查询 | 500,并泄露前四字节 TEST 的十六进制 | 403,无这四字节 |
导入镜像路径后读取范围外 /@fs/ |
200,返回合成 marker | 403,无 marker |
| 启动后新建的受保护文件 | 403 | 403 |
| 合法 JS/首页 | 200 | 200 |
新建文件这一行是保留拒绝行为的对照,不能宣称它也是本升级修复的旧缺陷。所有测试只使用自行创建的合成内容。
具体改动
关键代码讲解
apps/presentation/dashboard/package.jsonL108 的devDependencies.vite是真实 npm 脚本的依赖入口,声明范围从 ^8.2.1 切到 ^8.3.4,提交的锁文件固定实际 8.3.4;锁文件必须随之同步,不能只改版本文字。apps/presentation/dashboard/package-lock.jsonL1953 的packages["node_modules/vite"]固定实际 tarball、integrity、引擎和子依赖。工作台实际解析为 Vite 8.3.4、Rolldown 1.2.14;既有 override 继续固定 PostCSS 8.5.26 和 nanoid 3.3.18,React 插件保持 6.0.2。上游 Vite 的 PostCSS 范围更高,但不能仅凭范围差异虚构回归;实际 CSS、SSR、desktop/Chat 构建及浏览器路径均通过,仍明确保留这些有效版本。 Node 24.21.0 满足仓库及 Vite 引擎要求;安装后从实际入口解析元数据,并核对了上游 manifest/integrity。apps/presentation/dashboard/package-lock.jsonL1775 的packages["node_modules/rolldown"]与可选平台绑定一起更新。不能从平台条目存在推断平台兼容;本次只证明 macOS arm64 的真实 native bundler 路径。
两侧均执行 npm ci、npm run build(tsc、desktop 和 native Chat)、check:css-custom-properties、smoke:todo-ownership 及根目录 test:dashboard:coverage,均通过。随后使用真实 ChatHTTPServer、ChatStore、ActionStore 和隔离的合成 Goal 启动当前构建:桌面 Goal/任务内容与操作、任务页刷新和窄屏 Chat 原生导航抽屉/键盘选择保持一致,390px 无横向溢出。执行服务不可用状态如实显示;没有把直接 Goal URL 的启动时序当成已验证路径,也没有实际调用模型。
规范依据为 apps/presentation/dashboard/README.md,不可变 spec_revision=c97f921e2f18fbd7e155495b7eb5029031c97fe3,逐项映射如下;这些既有要求没有因为依赖升级而变成新的产品流程:
Current Status:Versioned native backend projections remain authoritative; UI has no second state owner. 对应上述构建、路由和恢复证据。Fresh Clone Public Preview:A fresh dependency installation builds and unavailable execution services are represented truthfully. 对应上述构建、路由和恢复证据。Packaged frontend delivery:Build native Chat assets and consume them through the actual native HTTP server. 对应上述构建、路由和恢复证据。
上游 Vite 8.3.4 发布记录 和 safeModulePaths 绕过说明、wasm 查询泄露说明 支持修复背景;本地表格是独立执行结果。npm audit 在两侧 head 都报告零项已知漏洞,基线存在高风险 Vite 节点;这只是当前数据库快照。另一条 custom transformIndexHtml 条件漏洞未独立复现,不声称本应用默认触发它。
对主干的风险
最强反例是编译仍绿但产物路径、CSS、SSR 或拒绝规则已坏:旧版本构建本就通过,却能被上述请求绕过,所以我同时执行了安全负例、合法访问和真实产物路径。精确 head 的 native canary 通过(4 条 direct、2 条 catalog、1 条公开边界),应用专项检查另行执行。没有读取或等待远端 CI。
必需的 node apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-contract.test.mjs 仍退出 7,失败点为第 378 行 “Personal workspace prefers the registered Goal display name”。不可变基线 c97f921e2f18fbd7e155495b7eb5029031c97fe3 与两条精确 head 的完整 stderr 仅替换 checkout 根路径后完全一致,SHA-256 为 aba0dc36c33c087fa01a9e3780eb62094ec1643a48a31b07a894320432d0b1f5;测试和 dashboard-page.tsx 相关源码 blob 未变,且这个检查读取源码文本而不运行 Vite。故判定为既有、与本补丁无关的失败,代码评审可 APPROVE;该 required frontend/CQR 的质量及合并阻塞仍保留,未豁免或改成通过。
npm 11 在两侧均未执行可选 fsevents 安装脚本;实际 native 构建成功,但未验证所有 OS、HMR 长驻 watch 或已安装 App。浏览器使用真实构建及隔离后端,观测时钟和合成路径之外未归一化业务内容;桌面截图中有瞬时刷新遮罩,因此不宣称逐像素一致。合成 Goal/registry 最终字节未改变,四个临时服务已关闭,无真实模型或生产 Goal 写入。回滚应成对还原 manifest/lock 并重新构建,同时认识到旧安全缺口会重新出现。
我的整体评价
APPROVE:这是一条完整而可逆的应用依赖修复,已从真实安装、构建、拒绝路径走到可用的前端读取与恢复结果,没有发现本 diff 引入的阻塞缺陷。既有所有者足够,额外的锁文件合并、策略层或前端契约断言重写没有本 PR 内的必要性;本次 scope-fit 结论为保持当前结构。保留既有质量失败和未测平台边界,不把 approval 当作合并、全局升级或产品整体完成授权。
English verdict: APPROVE — 90876a15ebb7a213d86f64cd88f3badb6fabe419. The dependency update closes two reproduced Vite file-disclosure paths while preserving the built application journey. An identical, independently attributed baseline frontend-contract failure remains a separate quality/merge hold; no merge or installed-App qualification is granted.
Bumps the dashboard-security group with 1 update in the /apps/presentation/dashboard directory: vite.
Updates
vitefrom 8.2.1 to 8.3.4Release notes
Sourced from vite's releases.
... (truncated)
Changelog
Sourced from vite's changelog.
... (truncated)
Commits
b6c20f6release: v8.3.4 (#23702)b28db28fix(server): match static aliases on path boundaries (#23643)bc0f21cfeat(bundled-dev): supportimport.meta.hot.acceptExports(#23463)fa71469fix(client): skip rewriting unchanged adopted styles (#23697)2a8c0f0fix(build): correct preloads when chunkImportMap is enabled with non-root bas...3a7f2aefix(html): avoid adding filesystem root to watcher (#23689)facc2fbfix: remove input option unescaping for now (#23694)70d56eafix(dev): a restart requested during a restart used to be dropped (fix #23392...cf52011fix(css): resolve imported preprocessors from their file path with lightningc...fcb6f12fix: don't treat modules ending with js-like query as js (#23687)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore <dependency name> major versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)@dependabot ignore <dependency name> minor versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)@dependabot ignore <dependency name>will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)@dependabot unignore <dependency name>will remove all of the ignore conditions of the specified dependency@dependabot unignore <dependency name> <ignore condition>will remove the ignore condition of the specified dependency and ignore conditionsYou can disable automated security fix PRs for this repo from the Security Alerts page.