diff --git a/README.md b/README.md
index 26efcee..809b9e5 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,46 @@
-# dsh-better-sidebar
+# dsh-apes-sidebar
+
+> [!NOTE]
+> **Fork notice** — 本项目是 [dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar) 的 fork,
+> 基线 **upstream v0.24.1**(commit `a2751cf`,MIT)。
+>
+> - **本 fork 的增量**:`src/client/apes/` 下的 3 个信息层 tab(`apes:agents` 智能体 / `apes:apps` 应用 /
+> `apes:profile` 画像),按 DSH 标准 `TabDescriptor` 接口注册,自动获得上游原生适配层的全部待遇
+> (进原生 guide、tab 芯片图标、开合与分栏)。
+> - **宿主版本要求(与上游 v0.24.1 一致)**:DSH **0.2.0-rc.1+**(peer `^0.2.0-rc.1`)。装在更旧的宿主上会被
+> 启动兼容性预检判定失败、**整行静默禁用**(既不报错也不加载)。
+> - **自 v0.19.1 起的上游变化**:终端 / 浏览器交给宿主内置(DSH 0.1.6 起自带右列终端与浏览器)、工作区路径围栏取消
+> (文件读写按进程权限)、右侧栏面板走 DSH 原生右列。
+> - 版本线独立于上游:`1.3.0`(fork)。以下文档主体沿用上游 v0.24.1 原文,包名已替换为本 fork 名。
+
+> [!NOTE]
+> **Fork notice** — 本项目是 [dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar) 的 fork,
+> 基线 **upstream v0.19.1**(commit `8753096`,MIT)。
+>
+> - **上游 v0.18.0 → v0.19.1 的关键变化**:v0.19.0-alpha.1 起,插件的内容**注册进 DSH 原生右侧栏**
+> (`src/client/native/`)——不再自绘第二套右侧面板与开关按钮。这正是本 fork 此前"窗口里有两套侧边栏
+> 与两套开关"的根因;升到 v0.19.1 后**只剩一套**。
+> - **本 fork 的增量**:`src/client/apes/` 下的 3 个信息层 tab(`apes:agents` 智能体 / `apes:apps` 应用 /
+> `apes:profile` 画像),按 DSH 标准 `TabDescriptor` 接口注册——因此它们会自动获得上游原生适配层
+> 的全部待遇(进原生 guide、tab 芯片图标、开合与分栏)。
+> - 版本线独立于上游:`1.2.0`(fork)。上游历史版本见其 CHANGELOG。
> [!IMPORTANT]
> **v0.19.0 起接入 DSH 原生侧边栏**:右列就是 DSH 自己的右侧栏,插件把每个 tab 类型注册为原生 tab(不再自绘右侧面板),只保留自绘的底部工作台与开放给所有插件的 `ctx.betterSidebar` 服务。
>
-> **v0.24.1 起要求 DSH `0.2.0-rc.1+`**(peer 下限 `^0.2.0-rc.1`)。0.2.0 对本插件所用的全部宿主 API 是**纯增量**(零导出删除、会话格式仍 v4、CLI 与客户端运行时未变),所以这一版没有运行时兼容分支,只把支持线整体前移。**DSH 0.1.7 线的用户请固定 `dsh-better-sidebar@0.22.1`——caret 范围跨 minor 不成立,`^0.1.7-rc.1` 在 0.2.0 宿主上会被启动预检静默禁用**;按 DSH 版本选插件版本的对照表见[安装](#-安装)。
+> **v0.24.1 起要求 DSH `0.2.0-rc.1+`**(peer 下限 `^0.2.0-rc.1`)。0.2.0 对本插件所用的全部宿主 API 是**纯增量**(零导出删除、会话格式仍 v4、CLI 与客户端运行时未变),所以这一版没有运行时兼容分支,只把支持线整体前移。**DSH 0.1.7 线的用户请固定 `dsh-apes-sidebar@0.22.1`——caret 范围跨 minor 不成立,`^0.1.7-rc.1` 在 0.2.0 宿主上会被启动预检静默禁用**;按 DSH 版本选插件版本的对照表见[安装](#-安装)。

@@ -344,7 +369,7 @@ GitHub topic [`dsh-better-sidebar`](https://github.com/topics/dsh-better-sidebar
| [GULI-lab/DSH-element-source](https://github.com/GULI-lab/DSH-element-source) |

| 点击页面任意 UI 元素直达 Vue / React / Svelte / Angular 源码并送入会话 |
| [Lzh3070/dsh-file-review-tab](https://github.com/Lzh3070/dsh-file-review-tab) |

| 文件改动审查页:行级红绿 diff + 撤销 + chat 行深链 |
| [yq04/dsh-git-remotes](https://github.com/yq04/dsh-git-remotes) |

| Git 远程页:分支 / 上游 / ahead-behind,fetch 可 prune、ff-only pull、确认后 push |
-| [ztyhehe/dsh-better-sidebar-svn](https://github.com/ztyhehe/dsh-better-sidebar-svn) |

| SVN 源码管理页:status / diff / log / commit / update / revert / 冲突解决,与内置 Git 面板对称 |
+| [ztyhehe/dsh-apes-sidebar-svn](https://github.com/ztyhehe/dsh-apes-sidebar-svn) |

| SVN 源码管理页:status / diff / log / commit / update / revert / 冲突解决,与内置 Git 面板对称 |
| [Melody-max114/dsh-excel-panel](https://github.com/Melody-max114/dsh-excel-panel) |

| Excel 编辑页:xlsx 预览 / 编辑、公式实时计算、合并单元格、保存回原文件 |
| [v587d/dsh-anysearch-refs](https://github.com/v587d/dsh-anysearch-refs) |

| AnySearch 搜索结果引用卡片:搜索词、来源摘要、关键词高亮 |
| [mlosun/dsh-docs-panel](https://github.com/mlosun/dsh-docs-panel) |

| 全局文档面板:随身 Markdown 笔记,任何工作区随时可读 |
@@ -357,7 +382,7 @@ GitHub topic [`dsh-better-sidebar`](https://github.com/topics/dsh-better-sidebar
| [yq04/dsh-turn-review](https://github.com/yq04/dsh-turn-review) |

| 本轮审查:逐回合审查 agent 改动 |
| [Ghz114514/dsh-refpics](https://github.com/Ghz114514/dsh-refpics) |

| Pinterest 风格参考图搜索:瀑布流、侧栏画板、下载与 Eagle 收藏 |
| [yzlin499/dsh-yzlin499-easy-plugins](https://github.com/yzlin499/dsh-yzlin499-easy-plugins) |

| 实用小工具集(毛坯房 DSH 友好) |
-| [dong-victor/dsh-better-sidebar-starter](https://github.com/dong-victor/dsh-better-sidebar-starter) |

| 运行配置页:IDEA 式 Run/Debug 配置(npm / springboot / python / custom)——一键启动、历史保存、WebSocket 实时日志(ANSI 彩色)、多实例并行、进程树跨平台杀死 |
+| [dong-victor/dsh-apes-sidebar-starter](https://github.com/dong-victor/dsh-apes-sidebar-starter) |

| 运行配置页:IDEA 式 Run/Debug 配置(npm / springboot / python / custom)——一键启动、历史保存、WebSocket 实时日志(ANSI 彩色)、多实例并行、进程树跨平台杀死 |
| [baosfeng/my-dsh-plugins](https://github.com/baosfeng/my-dsh-plugins) |

| 个人多插件合集(`dsh-file-activity`):侧边栏文件活动页——记录文件读取 / 新增 / 修改历史与统计,按文件夹平铺,点击用原生预览打开 |
| [Hoemr/dsh-better-overleaf](https://github.com/Hoemr/dsh-better-overleaf) |

| Overleaf 标签页:直连 CDP 浏览器登录(支持第三方 Chromium)、项目切换、工作区下 overleaf/ 目录本地 git 镜像与双向同步 |
@@ -372,7 +397,7 @@ GitHub topic [`dsh-better-sidebar`](https://github.com/topics/dsh-better-sidebar
|---|---|---|
| [HuanLinOTO/dsh-plugin-better-sidebar-plugin-office](https://github.com/HuanLinOTO/dsh-plugin-better-sidebar-plugin-office) |

| Office 三件套预览(.docx / .xlsx / .pptx),独立 bundle 瘦身主体(官方推荐目录收录) |
| [zemul/dsh-video-preview](https://github.com/zemul/dsh-video-preview) |

| 视频内联预览:.mp4 / .webm / .mov / .mkv / .avi,自带 /video 路由支持 HTTP Range 拖进度条 |
-| [dong-victor/dsh-better-sidebar-jupyter](https://github.com/dong-victor/dsh-better-sidebar-jupyter) |

| `.ipynb` 可运行 Notebook 视图:懒启动 Python kernel、流式输出、保存回写 |
+| [dong-victor/dsh-apes-sidebar-jupyter](https://github.com/dong-victor/dsh-apes-sidebar-jupyter) |

| `.ipynb` 可运行 Notebook 视图:懒启动 Python kernel、流式输出、保存回写 |
@@ -383,19 +408,19 @@ GitHub topic [`dsh-better-sidebar`](https://github.com/topics/dsh-better-sidebar
| 插件 | ⭐ | 简介 |
|---|---|---|
-| [eg-bole/dsh-better-sidebar-icons](https://github.com/eg-bole/dsh-better-sidebar-icons) |

| VSCode 风格文件 / 文件夹图标主题:文件树与编辑器 Tab 换上熟悉的开发环境图标(vscode-icons 移植,纯 DOM 覆盖零侵入,安装 / 卸载零残留) |
-| [dong-victor/dsh-better-sidebar-terminal-plus](https://github.com/dong-victor/dsh-better-sidebar-terminal-plus) |

| 终端增强:内嵌 Nerd Font 图标字体、修复 xterm 图标渲染、稳定终端 cwd |
+| [eg-bole/dsh-apes-sidebar-icons](https://github.com/eg-bole/dsh-apes-sidebar-icons) |

| VSCode 风格文件 / 文件夹图标主题:文件树与编辑器 Tab 换上熟悉的开发环境图标(vscode-icons 移植,纯 DOM 覆盖零侵入,安装 / 卸载零残留) |
+| [dong-victor/dsh-apes-sidebar-terminal-plus](https://github.com/dong-victor/dsh-apes-sidebar-terminal-plus) |

| 终端增强:内嵌 Nerd Font 图标字体、修复 xterm 图标渲染、稳定终端 cwd |
| [Max-Null/dsh-sidebar-preview-select](https://github.com/Max-Null/dsh-sidebar-preview-select) |

| 预览划选增强:侧边栏预览里划选文本 → 浮动「发送到会话」 |
| [Hoemr/dsh-quicklook](https://github.com/Hoemr/dsh-quicklook) |

| QuickLook 式空格预览:活动文件标签页按 Space 全尺寸查看图片 / PDF / 文本,Space 或 Esc 关闭 |
-> 📣 **上架你的插件**:给仓库打上 `dsh-better-sidebar` topic 即出现在 [topic 页](https://github.com/topics/dsh-better-sidebar);再向 [`src/client/plugins-tabs.ts`](./src/client/plugins-tabs.ts) / [`src/client/plugins-viewers.ts`](./src/client/plugins-viewers.ts) 提一条 `PluginEntry` PR,即可进入设置页内置推荐目录(数据完整性由 `tests/plugin-list.spec.ts` 守护)。
+> 📣 **上架你的插件**:给仓库打上 `dsh-apes-sidebar` topic 即出现在 [topic 页](https://github.com/topics/dsh-apes-sidebar);再向 [`src/client/plugins-tabs.ts`](./src/client/plugins-tabs.ts) / [`src/client/plugins-viewers.ts`](./src/client/plugins-viewers.ts) 提一条 `PluginEntry` PR,即可进入设置页内置推荐目录(数据完整性由 `tests/plugin-list.spec.ts` 守护)。
## 🤝 参与贡献
- **代码改动走 PR**:`feat/*` / `fix/*` 分支开发 → `gh pr create`;纯文档改动可直接推 main
-- **收录生态插件**:给仓库打 `dsh-better-sidebar` topic + 向 [`src/client/plugins-tabs.ts`](./src/client/plugins-tabs.ts) / [`plugins-viewers.ts`](./src/client/plugins-viewers.ts) 提 PR
+- **收录生态插件**:给仓库打 `dsh-apes-sidebar` topic + 向 [`src/client/plugins-tabs.ts`](./src/client/plugins-tabs.ts) / [`plugins-viewers.ts`](./src/client/plugins-viewers.ts) 提 PR
- **提交前自检**:`pnpm typecheck && pnpm build && pnpm test`(或 `make check` 一键聚合;CI 另有 npm 打包 → 真实挂载 → 无头渲染门禁 `pnpm test:mount`,及聚合双挂载回归 `pnpm test:mount:aggregate`)
- 仓库工作规范见 [`AGENTS.md`](./AGENTS.md)(含仓库硬约束与 CI 说明)
@@ -417,5 +442,5 @@ GitHub topic [`dsh-better-sidebar`](https://github.com/topics/dsh-better-sidebar
---
diff --git a/dsh.plugin.json b/dsh.plugin.json
index bed1395..da5b9c2 100644
--- a/dsh.plugin.json
+++ b/dsh.plugin.json
@@ -1,6 +1,6 @@
{
"id": "dsh-external/dsh-apes-sidebar",
- "version": "0.24.1",
+ "version": "1.3.0",
"main": "./lib/index.js",
"description": "更好用的右侧边栏——文件树、编辑器、文件变动、任务和侧边对话都收在这一栏里,每个会话互不干扰。暴露服务供其他插件注册侧边栏页面与文件预览器",
"engines": {
diff --git a/package.json b/package.json
index 1f6c139..4328676 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
- "name": "dsh-better-sidebar",
- "version": "0.24.1",
- "description": "Better Sidebar for DSH — file tree, editor, changes, tasks and side chat in one column, separate for every conversation. Also exposes a service other plugins use to register sidebar tabs and file viewers.",
+ "name": "dsh-apes-sidebar",
+ "version": "1.3.0",
+ "description": "APE fork of dsh-better-sidebar (base v0.24.1): session-isolated right sidebar — file tree, editor, changes, tasks and side chat — built on the host's native sidebar, plus apes:* information-layer tabs (agents / apps / profile). Forked from omdsh-dev/DSH-better-sidebar under MIT.",
"type": "module",
"repository": {
"type": "git",
@@ -74,7 +74,8 @@
"README_EN.md",
"LICENSE",
"icon.svg",
- "locale/*.json"
+ "locale/*.json",
+ "scripts/switch.sh"
],
"scripts": {
"build": "node -e \"require('node:fs').rmSync('lib',{recursive:true,force:true})\" && tsc -p tsconfig.build.json && tsdown",
@@ -89,7 +90,11 @@
"test:mount:aggregate": "bash scripts/e2e-aggregate-mount.sh",
"clean": "node -e \"require('node:fs').rmSync('lib',{recursive:true,force:true})\"",
"check:consumer-types": "bash scripts/check-consumer-types.sh",
- "lint": "eslint ."
+ "lint": "eslint .",
+ "switch": "bash scripts/switch.sh",
+ "switch:status": "bash scripts/switch.sh --status",
+ "switch:aps": "bash scripts/switch.sh aps",
+ "switch:upstream": "bash scripts/switch.sh upstream"
},
"license": "MIT",
"peerDependencies": {
@@ -227,5 +232,11 @@
"vitest": "^4.1.8",
"zustand": "~4.4.7"
},
- "icon": "./icon.svg"
+ "icon": "./icon.svg",
+ "forkedFrom": {
+ "name": "dsh-better-sidebar",
+ "version": "0.24.1",
+ "commit": "a2751cf",
+ "url": "https://github.com/omdsh-dev/DSH-better-sidebar"
+ }
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5e0ff35..cd7b139 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -101,7 +101,7 @@ importers:
devDependencies:
'@cordisjs/plugin-loader':
specifier: ^1.0.0-rc.5
- version: 1.0.0-rc.5(cordis@4.0.0-rc.8)(node-addon-require-builtin@0.1.6)
+ version: 1.0.0-rc.5(cordis@4.0.0-rc.8)(node-addon-require-builtin@0.1.7)
'@deepseek-ai/cordis':
specifier: 4.0.4
version: 4.0.4(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)
@@ -173,10 +173,10 @@ importers:
version: 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-session@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-scope@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))))
'@deepseek-ai/dsh-settings':
specifier: 0.2.0-rc.1
- version: 0.2.0-rc.1(456d43703961be9dc43c6eb97f678f5f)
+ version: 0.2.0-rc.1(5f1fcf66c7753072b5d907c0a33cded1)
'@deepseek-ai/dsh-subagent':
specifier: 0.2.0-rc.1
- version: 0.2.0-rc.1(d9f95c1954848374687f6b307aebdc9a)
+ version: 0.2.0-rc.1(3c1167d952d9e54d05eacf0429d718a6)
'@deepseek-ai/dsh-system-prompt':
specifier: 0.2.0-rc.1
version: 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-llm@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-scope@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)))
@@ -197,7 +197,7 @@ importers:
version: 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)
'@eslint/js':
specifier: ^10.0.1
- version: 10.0.1(eslint@10.9.1)
+ version: 10.0.1(eslint@10.11.0)
'@huanlin/dsh-plugin-better-locale':
specifier: ^0.1.0
version: 0.1.0(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-client-locale@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-client-ui-primitives@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-client-ui-settings@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-client-ui-slots@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
@@ -233,13 +233,13 @@ importers:
version: 9.0.0
eslint:
specifier: ^10.9.1
- version: 10.9.1
+ version: 10.11.0
eslint-plugin-react-hooks:
specifier: ^7.1.1
- version: 7.1.1(eslint@10.9.1)
+ version: 7.1.1(eslint@10.11.0)
globals:
specifier: ^17.12.0
- version: 17.12.0
+ version: 17.13.0
immer:
specifier: ^10.1.1
version: 10.2.0
@@ -299,7 +299,7 @@ importers:
version: 4.4.3
simple-icons:
specifier: ^16.32.0
- version: 16.32.0
+ version: 16.33.0
tsdown:
specifier: ^0.22.2
version: 0.22.14(typescript@5.6.2)(unrun@0.2.39)
@@ -308,7 +308,7 @@ importers:
version: 5.6.2
typescript-eslint:
specifier: ^8.69.0
- version: 8.69.0(eslint@10.9.1)(typescript@5.6.2)
+ version: 8.71.0(eslint@10.11.0)(typescript@5.6.2)
unrun:
specifier: ^0.2.39
version: 0.2.39
@@ -389,8 +389,8 @@ packages:
resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.29.8':
- resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==}
+ '@babel/parser@7.29.9':
+ resolution: {integrity: sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -413,6 +413,12 @@ packages:
resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==}
hasBin: true
+ '@cacheable/memory@2.2.0':
+ resolution: {integrity: sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==}
+
+ '@cacheable/utils@2.5.0':
+ resolution: {integrity: sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==}
+
'@chevrotain/types@11.1.2':
resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==}
@@ -931,8 +937,8 @@ packages:
resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@eslint/plugin-kit@0.7.2':
- resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==}
+ '@eslint/plugin-kit@0.7.3':
+ resolution: {integrity: sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@exodus/bytes@1.15.1':
@@ -1001,16 +1007,8 @@ packages:
'@iconify/utils@3.1.4':
resolution: {integrity: sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==}
- '@isaacs/cliui@8.0.2':
- resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
- engines: {node: '>=12'}
-
- '@jridgewell/gen-mapping@0.3.12':
- resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
-
- '@jridgewell/gen-mapping@0.3.5':
- resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
- engines: {node: '>=6.0.0'}
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
'@jridgewell/remapping@2.3.5':
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
@@ -1019,19 +1017,21 @@ packages:
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
- '@jridgewell/set-array@1.2.1':
- resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
- engines: {node: '>=6.0.0'}
-
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
- '@jridgewell/sourcemap-codec@1.6.0':
- resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==}
-
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@keyv/bigmap@1.3.1':
+ resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ keyv: ^5.6.0
+
+ '@keyv/serialize@1.1.1':
+ resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==}
+
'@lezer/common@1.5.2':
resolution: {integrity: sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ==}
@@ -1099,10 +1099,6 @@ packages:
'@oxc-project/types@0.146.0':
resolution: {integrity: sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA==}
- '@pkgjs/parseargs@0.11.0':
- resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
- engines: {node: '>=14'}
-
'@playwright/test@1.62.1':
resolution: {integrity: sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==}
engines: {node: '>=20'}
@@ -1492,63 +1488,63 @@ packages:
'@types/ws@8.18.1':
resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
- '@typescript-eslint/eslint-plugin@8.69.0':
- resolution: {integrity: sha512-t5jQTKPIgVW1PE6dR6H6Qz5gm8zjMlX5/2gRaOGd9eO6V7J+tQc6iWKukEe7dY8u9HyYasQ0yfF0/FSSTEO2gA==}
+ '@typescript-eslint/eslint-plugin@8.71.0':
+ resolution: {integrity: sha512-pqcS9c1HxZTHt7End4nXqd0s5lJrrFzrgCkKFJrsbUnaL6M3+6oBFZaslg6Gjsl3argl2DDRFROnXARaZ2e4Nw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.69.0
+ '@typescript-eslint/parser': ^8.71.0
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/parser@8.69.0':
- resolution: {integrity: sha512-l4b0DhWioGg6Gt2ebGlvfkFMOjRsauxtsnDRwUSRX1qHq3HdTfQHV8wW9zEXeciai6HfeaKOedQn2Zoofx3WBw==}
+ '@typescript-eslint/parser@8.71.0':
+ resolution: {integrity: sha512-CG4nPk1f2zc8yw4pALqHsFYH2hdo+h1T9daSp21+Hnxi9LOE3GT9hAfTKJCBXVNM2GmYs1eMEP615wPoeOgk3A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/project-service@8.69.0':
- resolution: {integrity: sha512-yi4obFrHMmnsesWehHbkg9zMA7Jt8cXT+mKM08G999pH1yT6nqgsHx7MYm0uY1wAj8CqiBXYRJ7WAT0QdQHQXg==}
+ '@typescript-eslint/project-service@8.71.0':
+ resolution: {integrity: sha512-aABjw5rjBacYONVPaPiWOCjJu0vEF4a25iQuodlmQYL1trtLZ0X/y+2Vzl3BKI1odM4LnwLE1oUDXYp1wzx1TQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/scope-manager@8.69.0':
- resolution: {integrity: sha512-ewfspqWvSxKSOaplqAUNbaSFO0eB6w1EtQ+esfYFRm3614Ty4uNtExkcbgd6nWsXphbqKyf9ZYdbZdv2xEoWEQ==}
+ '@typescript-eslint/scope-manager@8.71.0':
+ resolution: {integrity: sha512-gWF0BhUcnjZxSpLE8ngS/59n2SB0J3YqRxvX1+2aoRJk9hNtHSLOV+TcarFiOr5ipXm3yc1QrI4c9YZc8zyCxw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.69.0':
- resolution: {integrity: sha512-xNqK7YTDZsLniQMV/4rpFR8Z5JlqeRvVjuG1YgF/mdPVH84HSD19L8CczMA0qg2RfwEV231GHH3VnToJDo4MfQ==}
+ '@typescript-eslint/tsconfig-utils@8.71.0':
+ resolution: {integrity: sha512-Z1UlWHADEK2Mlb9NpWfDeSjqoZ5EyrOv4R3eQpbkzqn/EwaIdOpXXupEA1+0ZIOSJSZZDBHG0BrQyN8zUG6Pwg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/type-utils@8.69.0':
- resolution: {integrity: sha512-ZfoJAVg3JZndQEpEl9petVlxau3lRuElc4HRMuAlLCf8to04/iHz692RUSNmXKDjEuJmIL+KZ2/BsOcBc16dsA==}
+ '@typescript-eslint/type-utils@8.71.0':
+ resolution: {integrity: sha512-i8uO1qbdxeKgRnS5sCRt6On3/nfo2d2DwQe3Yvjx543zLy7r8ySqRuPPiIIXAhS03U0v5NfAFx+rUgxFzKKwNw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/types@8.69.0':
- resolution: {integrity: sha512-K3VrubUPhlo9VDBS6QdI8YB5j7ClpqLRdefcz6PFrhnwicehBweqQ9Evhl4l+FYz0HdDmMqIiSX0aldGRYtDCA==}
+ '@typescript-eslint/types@8.71.0':
+ resolution: {integrity: sha512-cJ4OoxPGWvFnBTnSZyaU+qJzGTqPTGJY+gDchj6cRyLRdmIdt4rcsE4twj+zPfrNiWuVi38wijHzShL++Z9atQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.69.0':
- resolution: {integrity: sha512-AdFkgqck3Vudb/kWnxlyafU/4aBhHrbQ9locP2N4psXTy5mOBg0SHJumnLvx7r6g1gV4DKvUFwV2nJZBoqOD8w==}
+ '@typescript-eslint/typescript-estree@8.71.0':
+ resolution: {integrity: sha512-PEEF4G5sLLWAS5BpPrUvms4ySZkiBQQZM4z+3ReI46axK5Vqr/vXBQatJQIZZOYdGyPUAKTtsrWzpqKuU+3DEw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/utils@8.69.0':
- resolution: {integrity: sha512-tUbx60BBqQa31kXF5MCsOOLL5E/WzUuxIn7YpAvq+eaUlqvk8/NXnXMBNAdLCr0icjkzem7iUA5QqWHe/hJ1aw==}
+ '@typescript-eslint/utils@8.71.0':
+ resolution: {integrity: sha512-pKR/tEMVrXZG23UFKUn5BQf3zfmfk7KQceI2cGzywZ5nxM5Eu3hEJU1utjWzydtzBbcJAQhHN8iPCxobHpPcZQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/visitor-keys@8.69.0':
- resolution: {integrity: sha512-+rmdgPA+EXkNgKYvHvFfhrs35utXbwaC5PGpDquSXcoXQDKUA5UjV0LmTucG/4JXkM31BTu4TilHtrN8IVBe8w==}
+ '@typescript-eslint/visitor-keys@8.71.0':
+ resolution: {integrity: sha512-8eQ9R218XORK+KLosnf4bu/QsUXvUyVwTbArg7/0NMB1Pu87OJKvj4nhFblkYE8gQV73mW1dx1ptlPCkwRGa7A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.4.0':
@@ -1740,22 +1736,6 @@ packages:
anser@2.3.5:
resolution: {integrity: sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ==}
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
-
- ansi-regex@6.3.0:
- resolution: {integrity: sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==}
- engines: {node: '>=12'}
-
- ansi-styles@4.0.0:
- resolution: {integrity: sha512-8zjUtFJ3db/QoPXuuEMloS2AUf79/yeyttJ7Abr3hteopJu9HK8vsgGviGUMq+zyA6cZZO6gAyZoMTF6TgaEjA==}
- engines: {node: '>=8'}
-
- ansi-styles@6.1.0:
- resolution: {integrity: sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==}
- engines: {node: '>=12'}
-
ansis@4.3.1:
resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==}
engines: {node: '>=14'}
@@ -1767,30 +1747,24 @@ packages:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
- balanced-match@1.0.0:
- resolution: {integrity: sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==}
-
balanced-match@4.0.4:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
engines: {node: 18 || 20 || >=22}
- baseline-browser-mapping@2.11.20:
- resolution: {integrity: sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==}
+ baseline-browser-mapping@2.11.27:
+ resolution: {integrity: sha512-ElY12DaROGuan+lMmZ8Cvo/ZUbXPe7Enc/9VU/b1T3Kp4dwytRcNdR8DoSJN5SNJT/CuvcCA0DHDVmMOCePdRQ==}
engines: {node: '>=6.0.0'}
hasBin: true
bidi-js@1.0.3:
resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
- brace-expansion@2.1.4:
- resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==}
-
- brace-expansion@5.0.9:
- resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==}
+ brace-expansion@5.0.12:
+ resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==}
engines: {node: 20 || >=22}
- browserslist@4.28.8:
- resolution: {integrity: sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==}
+ browserslist@4.29.3:
+ resolution: {integrity: sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -1802,8 +1776,11 @@ packages:
resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
engines: {node: '>=20.19.0'}
- caniuse-lite@1.0.30001810:
- resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==}
+ cacheable@2.5.0:
+ resolution: {integrity: sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==}
+
+ caniuse-lite@1.0.30001814:
+ resolution: {integrity: sha512-/Uaf1lAzr59XcMpW0o96WoEfr+VXK2OX4U9AgFoiSHsVJ4HppnIFUjtYzsyDH2+tgANaQb2/oxYGwCPapN1FpA==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -1825,13 +1802,6 @@ packages:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
- color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
-
- color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
@@ -1847,8 +1817,8 @@ packages:
resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
engines: {node: '>= 0.6'}
- compression@1.8.2:
- resolution: {integrity: sha512-o8vI5RE5A6EVVOd9o41jKp41aJom+QTEO/Bx8MYNjexMo/Bv2WOjUfZr+aL0WnYSgymUy6zeguqLTsIhV0gMvQ==}
+ compression@1.8.1:
+ resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==}
engines: {node: '>= 0.8.0'}
content-type@2.1.0:
@@ -2092,10 +2062,6 @@ packages:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
- destroy@1.2.0:
- resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
@@ -2119,17 +2085,8 @@ packages:
oxc-resolver:
optional: true
- eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-
- electron-to-chromium@1.5.420:
- resolution: {integrity: sha512-2yD6XreGusOfNV+dUcvipJEXc3n/n7fgr7996aszTG+YY5E4mqM4tOq/3uhP129cazL9YHbVWSpc79ePotWtPA==}
-
- emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
- emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ electron-to-chromium@1.5.444:
+ resolution: {integrity: sha512-5ss/uJfoDYDHT0lfJzT6FbcskIzROIOPf0BbbFkGcvDzoJU7i//9GDrwwIHQVmIsrAGiF3ihpADBRIsrEFt1rQ==}
empathic@2.0.1:
resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==}
@@ -2175,8 +2132,8 @@ packages:
resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- eslint@10.9.1:
- resolution: {integrity: sha512-9VaAkDURekixUQJy0oJYl2DcN6oKMfxay7XzaGYAWQwsb6qfKf+x76R2k1L8kb1boc+FyCAaTA9GmiKaaiaF+A==}
+ eslint@10.11.0:
+ resolution: {integrity: sha512-P7a6UEEqb9G95MYAtqkmsTbVXIYyzIfl6NGOIJk162PaahFxFyeGcrlXYFSiagECg4sEm8IseJdZBKR3rx6MsQ==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
hasBin: true
peerDependencies:
@@ -2236,25 +2193,19 @@ packages:
picomatch:
optional: true
- file-entry-cache@8.0.0:
- resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
- engines: {node: '>=16.0.0'}
+ file-entry-cache@11.1.5:
+ resolution: {integrity: sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==}
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
- flat-cache@4.0.0:
- resolution: {integrity: sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==}
- engines: {node: '>=16'}
+ flat-cache@6.1.23:
+ resolution: {integrity: sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==}
flatted@3.4.4:
resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==}
- foreground-child@3.1.0:
- resolution: {integrity: sha512-lXeSPRCndWPaipZbtI4CkvTZpF6OPsy19dkvf7+5AHeJD+w+iAKPc9Q78xWBmX4SdR+8xrtY9jTXs/YDv8q+Ug==}
- engines: {node: '>=14'}
-
fsevents@2.3.2:
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -2277,18 +2228,17 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
- glob@10.5.0:
- resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
- deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
- hasBin: true
-
- globals@17.12.0:
- resolution: {integrity: sha512-cezEd/DTyyht9cvSSURyygXPfy04GtWO/5e6ZPvH7fCtjKz9PYOmuawphw1Ctd1f6C+5JypXfGD7ahNMXvevBA==}
+ globals@17.13.0:
+ resolution: {integrity: sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg==}
engines: {node: '>=18'}
hachure-fill@0.5.2:
resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==}
+ hashery@1.5.1:
+ resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==}
+ engines: {node: '>=20'}
+
hast-util-to-html@9.0.5:
resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
@@ -2304,6 +2254,12 @@ packages:
hookable@6.1.1:
resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==}
+ hookified@1.15.1:
+ resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==}
+
+ hookified@2.2.0:
+ resolution: {integrity: sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==}
+
html-encoding-sniffer@6.0.0:
resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
@@ -2315,12 +2271,12 @@ packages:
resolution: {integrity: sha512-43ZpGYZ9QtuutX5l6WC1DSO8ane9N+Ct5qPLF2OV7vM9abM69gnAbVkh66ibaZd3aOGkoP1ZmringlKhLBkw2Q==}
engines: {node: '>=0.10.0'}
- ignore@5.2.0:
- resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
- ignore@7.0.8:
- resolution: {integrity: sha512-YYNsSlXBjMk92SKnkwvB5LOVSa6OznlFUGcsvrFgNJbJCd0M1XKeFVRc8ZByeCqz32FivYNHJVooLmdqrmvp/Q==}
+ ignore@7.0.12:
+ resolution: {integrity: sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg==}
engines: {node: '>= 4'}
immer@10.2.0:
@@ -2348,10 +2304,6 @@ packages:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
- is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
-
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -2362,10 +2314,6 @@ packages:
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
- jackspeak@3.1.2:
- resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==}
- engines: {node: '>=14'}
-
js-tokens@3.0.0:
resolution: {integrity: sha512-poXEQHPMmTrYZuJgNRll2sbc3kJsSU1m/g1Q93IE6txNj3p6xOOOmdj1G/zCVGawYSPzTkSoWGg1otqbeqKJeg==}
@@ -2390,9 +2338,6 @@ packages:
engines: {node: '>=6'}
hasBin: true
- json-buffer@3.0.1:
- resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
-
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -2411,8 +2356,8 @@ packages:
resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==}
hasBin: true
- keyv@4.5.4:
- resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ keyv@5.6.0:
+ resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==}
khroma@2.1.0:
resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
@@ -2515,10 +2460,6 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
- lru-cache@10.2.0:
- resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==}
- engines: {node: 14 || >=16.14}
-
lru-cache@11.5.2:
resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==}
engines: {node: 20 || >=22}
@@ -2594,8 +2535,8 @@ packages:
micromark-extension-gfm-strikethrough@2.1.0:
resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
- micromark-extension-gfm-table@2.1.1:
- resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
+ micromark-extension-gfm-table@2.1.2:
+ resolution: {integrity: sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==}
micromark-extension-gfm-tagfilter@2.0.0:
resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
@@ -2677,14 +2618,6 @@ packages:
resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==}
engines: {node: 18 || 20 || >=22}
- minimatch@9.0.9:
- resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minipass@7.1.3:
- resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
- engines: {node: '>=16 || 14 >=14.17'}
-
ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
@@ -2707,60 +2640,74 @@ packages:
resolution: {integrity: sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==}
engines: {node: '>=18'}
- node-addon-native-custom-loader@0.1.6:
- resolution: {integrity: sha512-QaW7d8lTcGCXrpNVyFDtID3vrpa7vFdpcY9pql2/9FGFSe7tcSnhQOKZX+1aOWq+pB1d2ZwNnKAdQI5nD9wAXA==}
+ node-addon-native-custom-loader@0.1.7:
+ resolution: {integrity: sha512-mny2aBXuqWZLu8xFg0Azk6HZd8tlEBbpkOMhideAY3OABE9tp38VeKo8/sw5g/qeYAAdE8oEmsmeJ5IBJd6YHg==}
engines: {node: '>=20'}
- node-addon-require-builtin-darwin-arm64@0.1.6:
- resolution: {integrity: sha512-KpaAh0mDcIScoJs7gD/mjXREcENJ023/DgWW3GrlLXFVzCE6bK6wFrTFpNfnkxZZP8yWsEWOg1o5T+uQ7olgTQ==}
+ node-addon-require-builtin-darwin-arm64@0.1.7:
+ resolution: {integrity: sha512-3n5SgmD6S4lCyeFPumbwfUh+YLssWiSF8GuToHdr00hBPhDikyzHCy2UV5qJUTDNNtUpfw9QuFijsC+ulnvmog==}
engines: {node: '>=20'}
cpu: [arm64]
os: [darwin]
- node-addon-require-builtin-darwin-x64@0.1.6:
- resolution: {integrity: sha512-lh9o5rCvmkH8MZgBBmhyKzJRc1M1hJzgXLTFzB6iomRXNH9P1DKjN2nAJLmvGrdTij47Wcch1JVnlV5AG0cRCQ==}
+ node-addon-require-builtin-darwin-x64@0.1.7:
+ resolution: {integrity: sha512-ZelNDiBgGH//ZHw6FCv4VdWUxV2YwdZNa0za7nOJIYodGcow0rJX6san45iOI73/gd2qtyKBOrHgylDjnBblbg==}
engines: {node: '>=20'}
cpu: [x64]
os: [darwin]
- node-addon-require-builtin-linux-arm64-gnu@0.1.6:
- resolution: {integrity: sha512-DrQA3aS1LBn4NgrewbZkzSAWdSSRPD/fYO5AkQfvriQ/TQD3E2adB012sZ5eac6p9TAcTjUIYhk395AYVxo4Zw==}
+ node-addon-require-builtin-linux-arm64-gnu@0.1.7:
+ resolution: {integrity: sha512-osAdFdxBUeciYOAIMxxIZzVyPK73zex7xJvSAyfDPyY8cTxhGZVZGQnB0ZtZEy3TRQQ2psjWhu5HbcHXIXotXw==}
engines: {node: '>=20'}
cpu: [arm64]
os: [linux]
libc: [glibc]
- node-addon-require-builtin-linux-x64-gnu@0.1.6:
- resolution: {integrity: sha512-8wCxrFlB2Ld5DhxIm2P+nNFnQ0wjzDE5sXF68EUhLH0X+z313B07TUQFMBKCOkyhZIIBh590dBmhHCuA43No2A==}
+ node-addon-require-builtin-linux-arm64-musl@0.1.7:
+ resolution: {integrity: sha512-pN027xk8o64/i1evlncK3VoPGdnflHzMgD+MQ+vApMpu2U6XKc9KAqKiImTpMd+mtGxElkkhD/AXNybF0MscZw==}
+ engines: {node: '>=20'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ node-addon-require-builtin-linux-x64-gnu@0.1.7:
+ resolution: {integrity: sha512-HedJA3MGD7I3rH/mPuPIaGTTtSm61L5uHv/90xHPy0tHGlP5cxC9Dt9l/5iwIrTE04LrT0woiG8Ef2Eg2sRyuA==}
engines: {node: '>=20'}
cpu: [x64]
os: [linux]
libc: [glibc]
- node-addon-require-builtin-win32-arm64-msvc@0.1.6:
- resolution: {integrity: sha512-NET6DiLnKrK2DHuO4NNN+zJz0CFas+RwpJlGY0d3A3A3tc5dJQqZXgw8DzLOn4cSTAQCaDq6+LbPyYX7jE2F3Q==}
+ node-addon-require-builtin-linux-x64-musl@0.1.7:
+ resolution: {integrity: sha512-4SkkvMTQqwFRkNzWp8Jc+1e/wMzA893YYX6lhRFFXWcb+igpXq/KD92JEWI0RHr9rrQkwF51/9odyt0Jk9WnDA==}
+ engines: {node: '>=20'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ node-addon-require-builtin-win32-arm64-msvc@0.1.7:
+ resolution: {integrity: sha512-nooBYRrieUMClXU3HBM+9yfOEXC0EJS3kFGJzu7oXocOgADKmAwt3xpF3YunjnyN9bty9/QaoZRlHG5EBX4Usg==}
engines: {node: '>=20'}
cpu: [arm64]
os: [win32]
- node-addon-require-builtin-win32-ia32-msvc@0.1.6:
- resolution: {integrity: sha512-oj4G51r81kJ3E2t5KknKhBNb8TmTWzc/t9x7jkBF9JeRd+1a0kr99mVJVYwJNxq9d3jpt7dgBdI8mxaomuXOEQ==}
+ node-addon-require-builtin-win32-ia32-msvc@0.1.7:
+ resolution: {integrity: sha512-i3/cymlUwzReJTtFLC75m+Gabi1RWa4ym4KgVThGLySy4/EJ0QldTv5VWHg3i7HP/g8gIWXwFrxTFk5v2DGchA==}
engines: {node: '>=20 <23'}
cpu: [ia32]
os: [win32]
- node-addon-require-builtin-win32-x64-msvc@0.1.6:
- resolution: {integrity: sha512-ZQ+6thVzQBOFamW7s3t2YqHsw99EEPBNH1uAjvCx4QfnjFJTsu6I/H3prpN8i6cSt6gjnQtArfWc2LXN2ufcJQ==}
+ node-addon-require-builtin-win32-x64-msvc@0.1.7:
+ resolution: {integrity: sha512-iwYELawC0J+nKFTIfJumU53VzTVDshSFUZCU6oUb4Uw+JAfsXCCA2WaSQbtmHng6ub0HEFqWgfh/Wp+qsEVtNg==}
engines: {node: '>=20'}
cpu: [x64]
os: [win32]
- node-addon-require-builtin@0.1.6:
- resolution: {integrity: sha512-P9ZGMDkloktirLJSggfpxsJ9jog5FItE1Omxpj50UBn3LhD6TS6/yx0jEBXsCGK3P9EtW1EpQVA1QL5gb11GaQ==}
+ node-addon-require-builtin@0.1.7:
+ resolution: {integrity: sha512-2/yiwaMEpIJdrsjwY/09IoLMLKJtyJGlPhtJd80a+B4x0+SYsnAorg5GlDyJHfTb/UgiIYzbNOgL3HHrigFaAQ==}
engines: {node: '>=20'}
- node-releases@2.0.54:
- resolution: {integrity: sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==}
+ node-releases@2.0.57:
+ resolution: {integrity: sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==}
engines: {node: '>=18'}
obug@2.1.4:
@@ -2781,21 +2728,14 @@ packages:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
- p-limit@3.0.2:
- resolution: {integrity: sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==}
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
p-locate@5.0.0:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
- p-try@2.2.0:
- resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
- engines: {node: '>=6'}
-
- package-json-from-dist@1.0.1:
- resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
-
package-manager-detector@1.8.0:
resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==}
@@ -2813,10 +2753,6 @@ packages:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
- path-scurry@1.11.1:
- resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
- engines: {node: '>=16 || 14 >=14.18'}
-
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
@@ -2858,6 +2794,10 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
+ qified@0.10.1:
+ resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==}
+ engines: {node: '>=20'}
+
quansync@1.0.0:
resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==}
@@ -2895,11 +2835,6 @@ packages:
resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==}
engines: {node: '>=10'}
- rimraf@5.0.5:
- resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==}
- engines: {node: '>=14'}
- hasBin: true
-
robust-predicates@3.0.3:
resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==}
@@ -2978,12 +2913,8 @@ packages:
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
- signal-exit@4.1.0:
- resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
- engines: {node: '>=14'}
-
- simple-icons@16.32.0:
- resolution: {integrity: sha512-BwqATHxAulx7X6kNdTkecy7PBjLkgtAHcgrwYLd9iA+cD2At9DzhJwdwaSELk2+aZe01IfiM/Wxtyp68Dvup2A==}
+ simple-icons@16.33.0:
+ resolution: {integrity: sha512-z14u6A8ngAg9mgERRsNO8YkjIMefehIpBk7A8Dz3Gd91945qFP19MLPSHgV4z8P5u/MRYd5e07OTzaDoB4d6qA==}
engines: {node: '>=0.12.18'}
source-map-js@1.2.1:
@@ -3002,25 +2933,9 @@ packages:
strictdom@1.0.1:
resolution: {integrity: sha512-cEmp9QeXXRmjj/rVp9oyiqcvyocWab/HaoN4+bwFeZ7QzykJD6L3yD4v12K1x0tHpqRqVpJevN3gW7kyM39Bqg==}
- string-width@4.2.0:
- resolution: {integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==}
- engines: {node: '>=8'}
-
- string-width@5.1.2:
- resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
- engines: {node: '>=12'}
-
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
- strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
-
- strip-ansi@7.2.0:
- resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==}
- engines: {node: '>=12'}
-
style-mod@4.1.3:
resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==}
@@ -3118,8 +3033,8 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
- typescript-eslint@8.69.0:
- resolution: {integrity: sha512-B3MltX0VqjUBNEe3b3sSuiRbfa6XrfHFtBiPamjT5AsW/dfq+y+bc0wyuS9DxAS1LyzCxRp2+rxzpLUvqM2BvA==}
+ typescript-eslint@8.71.0:
+ resolution: {integrity: sha512-fBdHYiqQ14RW6mOMXD14Svn82ZsCYAoQSzGRzyEjR59S5A2Krh/l7fGTOQ7iCr8gGy/mHVXtEF7s5fgjEdV0Pw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
@@ -3168,8 +3083,8 @@ packages:
synckit:
optional: true
- update-browserslist-db@1.3.2:
- resolution: {integrity: sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==}
+ update-browserslist-db@1.3.3:
+ resolution: {integrity: sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
@@ -3303,8 +3218,8 @@ packages:
resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
- which@2.0.1:
- resolution: {integrity: sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w==}
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
hasBin: true
@@ -3317,14 +3232,6 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
- wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
-
- wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
-
ws@8.21.3:
resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==}
engines: {node: '>=10.0.0'}
@@ -3352,6 +3259,10 @@ packages:
engines: {node: '>= 14.6'}
hasBin: true
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
yuku-ast@0.8.7:
resolution: {integrity: sha512-h6+4bDfyootiMB9vckk5uKo5r5j0GHrkr17FQTDNfEsFT3DWlN9uu1HJwQwc64pgmLCI945fWM3lbTIqxjT3GQ==}
@@ -3430,7 +3341,7 @@ snapshots:
'@babel/helper-compilation-targets': 7.29.7
'@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7)
'@babel/helpers': 7.29.7
- '@babel/parser': 7.29.8
+ '@babel/parser': 7.29.9
'@babel/template': 7.29.7
'@babel/traverse': 7.29.8
'@babel/types': 7.29.8
@@ -3445,9 +3356,9 @@ snapshots:
'@babel/generator@7.29.8':
dependencies:
- '@babel/parser': 7.29.8
+ '@babel/parser': 7.29.9
'@babel/types': 7.29.8
- '@jridgewell/gen-mapping': 0.3.12
+ '@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
jsesc: 3.1.0
@@ -3455,7 +3366,7 @@ snapshots:
dependencies:
'@babel/compat-data': 7.29.7
'@babel/helper-validator-option': 7.29.7
- browserslist: 4.28.8
+ browserslist: 4.29.3
lru-cache: 5.1.1
semver: 6.3.1
@@ -3488,14 +3399,14 @@ snapshots:
'@babel/template': 7.29.7
'@babel/types': 7.29.8
- '@babel/parser@7.29.8':
+ '@babel/parser@7.29.9':
dependencies:
'@babel/types': 7.29.8
'@babel/template@7.29.7':
dependencies:
'@babel/code-frame': 7.29.7
- '@babel/parser': 7.29.8
+ '@babel/parser': 7.29.9
'@babel/types': 7.29.8
'@babel/traverse@7.29.8':
@@ -3503,7 +3414,7 @@ snapshots:
'@babel/code-frame': 7.29.7
'@babel/generator': 7.29.8
'@babel/helper-globals': 7.29.7
- '@babel/parser': 7.29.8
+ '@babel/parser': 7.29.9
'@babel/template': 7.29.7
'@babel/types': 7.29.8
debug: 4.4.3
@@ -3521,6 +3432,18 @@ snapshots:
dependencies:
css-tree: 3.2.1
+ '@cacheable/memory@2.2.0':
+ dependencies:
+ '@cacheable/utils': 2.5.0
+ '@keyv/bigmap': 1.3.1(keyv@5.6.0)
+ hookified: 1.15.1
+ keyv: 5.6.0
+
+ '@cacheable/utils@2.5.0':
+ dependencies:
+ hashery: 1.5.1
+ keyv: 5.6.0
+
'@chevrotain/types@11.1.2': {}
'@codemirror/autocomplete@6.20.3':
@@ -3694,12 +3617,12 @@ snapshots:
style-mod: 4.1.3
w3c-keyname: 2.2.8
- '@cordisjs/plugin-loader@1.0.0-rc.5(cordis@4.0.0-rc.8)(node-addon-require-builtin@0.1.6)':
+ '@cordisjs/plugin-loader@1.0.0-rc.5(cordis@4.0.0-rc.8)(node-addon-require-builtin@0.1.7)':
dependencies:
cordis: 4.0.0-rc.8(@cordisjs/plugin-loader@1.0.0-rc.5)
cosmokit: 1.8.1
optionalDependencies:
- node-addon-require-builtin: 0.1.6
+ node-addon-require-builtin: 0.1.7
'@csstools/color-helpers@6.1.1': {}
@@ -3728,22 +3651,22 @@ snapshots:
'@deepseek-ai/cordis-plugin-group@1.0.4(@deepseek-ai/cordis-plugin-loader@1.0.5)(@deepseek-ai/cordis@4.0.4)':
dependencies:
'@deepseek-ai/cordis': 4.0.4(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)
- '@deepseek-ai/cordis-plugin-loader': 1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.6)
+ '@deepseek-ai/cordis-plugin-loader': 1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.7)
'@deepseek-ai/cordis-plugin-include@1.0.9(@deepseek-ai/cordis-plugin-loader@1.0.5)(@deepseek-ai/cordis@4.0.4)':
dependencies:
'@deepseek-ai/cordis': 4.0.4(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)
- '@deepseek-ai/cordis-plugin-loader': 1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.6)
+ '@deepseek-ai/cordis-plugin-loader': 1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.7)
'@deepseek-ai/cosmokit': 1.8.5
js-yaml: 4.3.2
- '@deepseek-ai/cordis-plugin-loader@1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.6)':
+ '@deepseek-ai/cordis-plugin-loader@1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.7)':
dependencies:
'@deepseek-ai/cordis': 4.0.4(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)
'@deepseek-ai/cosmokit': 1.8.5
'@deepseek-ai/schemastery': 3.18.4
optionalDependencies:
- node-addon-require-builtin: 0.1.6
+ node-addon-require-builtin: 0.1.7
'@deepseek-ai/cordis@4.0.4(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)':
dependencies:
@@ -3751,7 +3674,7 @@ snapshots:
'@standard-schema/spec': 1.1.0
optionalDependencies:
'@deepseek-ai/cordis-plugin-include': 1.0.9(@deepseek-ai/cordis-plugin-loader@1.0.5)(@deepseek-ai/cordis@4.0.4)
- '@deepseek-ai/cordis-plugin-loader': 1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.6)
+ '@deepseek-ai/cordis-plugin-loader': 1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.7)
'@deepseek-ai/cosmokit@1.8.5': {}
@@ -3789,7 +3712,7 @@ snapshots:
'@deepseek-ai/cordis': 4.0.4(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)
'@deepseek-ai/cordis-plugin-group': 1.0.4(@deepseek-ai/cordis-plugin-loader@1.0.5)(@deepseek-ai/cordis@4.0.4)
'@deepseek-ai/cordis-plugin-include': 1.0.9(@deepseek-ai/cordis-plugin-loader@1.0.5)(@deepseek-ai/cordis@4.0.4)
- '@deepseek-ai/cordis-plugin-loader': 1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.6)
+ '@deepseek-ai/cordis-plugin-loader': 1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.7)
'@deepseek-ai/dsh-atomic-write': 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)
'@deepseek-ai/dsh-home-paths': 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)
'@deepseek-ai/dsh-launch-environment': 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)
@@ -3798,7 +3721,7 @@ snapshots:
'@eslint-community/regexpp': 4.12.2
ajv: 8.20.0
js-yaml: 4.3.2
- node-addon-require-builtin: 0.1.6
+ node-addon-require-builtin: 0.1.7
resolve.exports: 2.0.3
semver: 7.8.5
@@ -3855,7 +3778,7 @@ snapshots:
dependencies:
'@deepseek-ai/cordis': 4.0.4(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)
'@deepseek-ai/cordis-plugin-include': 1.0.9(@deepseek-ai/cordis-plugin-loader@1.0.5)(@deepseek-ai/cordis@4.0.4)
- '@deepseek-ai/cordis-plugin-loader': 1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.6)
+ '@deepseek-ai/cordis-plugin-loader': 1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.7)
'@deepseek-ai/dsh-app-boot': 0.2.0-rc.1(@deepseek-ai/cordis-plugin-group@1.0.4(@deepseek-ai/cordis-plugin-loader@1.0.5)(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-home-paths@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-launch-environment@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-system-prompt@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-llm@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-scope@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))))
'@deepseek-ai/dsh-atomic-write': 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)
js-yaml: 4.3.2
@@ -3869,7 +3792,7 @@ snapshots:
dependencies:
'@deepseek-ai/cordis': 4.0.4(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)
'@deepseek-ai/schemastery': 3.18.4
- compression: 1.8.2
+ compression: 1.8.1
negotiator: 1.1.0
transitivePeerDependencies:
- supports-color
@@ -3949,10 +3872,10 @@ snapshots:
'@deepseek-ai/dsh-scope': 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))
'@deepseek-ai/dsh-util-values': 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)
- '@deepseek-ai/dsh-settings@0.2.0-rc.1(456d43703961be9dc43c6eb97f678f5f)':
+ '@deepseek-ai/dsh-settings@0.2.0-rc.1(5f1fcf66c7753072b5d907c0a33cded1)':
dependencies:
'@deepseek-ai/cordis': 4.0.4(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)
- '@deepseek-ai/cordis-plugin-loader': 1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.6)
+ '@deepseek-ai/cordis-plugin-loader': 1.0.5(@deepseek-ai/cordis@4.0.4)(node-addon-require-builtin@0.1.7)
'@deepseek-ai/cosmokit': 1.8.5
'@deepseek-ai/dsh-brand': 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)
'@deepseek-ai/dsh-config-editor': 0.2.0-rc.1(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-app-boot@0.2.0-rc.1(@deepseek-ai/cordis-plugin-group@1.0.4(@deepseek-ai/cordis-plugin-loader@1.0.5)(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-home-paths@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-launch-environment@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-system-prompt@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-llm@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-scope@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)))))
@@ -3967,7 +3890,7 @@ snapshots:
- '@deepseek-ai/dsh-hmr'
- node-addon-require-builtin
- '@deepseek-ai/dsh-subagent@0.2.0-rc.1(d9f95c1954848374687f6b307aebdc9a)':
+ '@deepseek-ai/dsh-subagent@0.2.0-rc.1(3c1167d952d9e54d05eacf0429d718a6)':
dependencies:
'@deepseek-ai/cordis': 4.0.4(@deepseek-ai/cordis-plugin-include@1.0.9)(@deepseek-ai/cordis-plugin-loader@1.0.5)
'@deepseek-ai/dsh-agent': 0.2.0-rc.1(d61f3b086328d5683f77296febd0cfed)
@@ -3990,7 +3913,7 @@ snapshots:
'@deepseek-ai/dsh-sandbox-policy': 0.2.0-rc.1(35b0c3189def866d8002cf16990840ce)
'@deepseek-ai/dsh-session-persistence': 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-brand@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-session@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-scope@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))))(@deepseek-ai/dsh-timeout@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))
'@deepseek-ai/dsh-session-projection': 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-session@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-scope@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))))
- '@deepseek-ai/dsh-settings': 0.2.0-rc.1(456d43703961be9dc43c6eb97f678f5f)
+ '@deepseek-ai/dsh-settings': 0.2.0-rc.1(5f1fcf66c7753072b5d907c0a33cded1)
'@deepseek-ai/dsh-user-approval': 0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-agent@0.2.0-rc.1(d61f3b086328d5683f77296febd0cfed))(@deepseek-ai/dsh-brand@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-llm@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-scope@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)))(@deepseek-ai/dsh-session@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-scope@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))))(@deepseek-ai/dsh-system-prompt@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-llm@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-scope@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))))
'@deepseek-ai/dsh-system-prompt@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-llm@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4))(@deepseek-ai/dsh-scope@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)(@deepseek-ai/dsh-invariants@0.2.0-rc.1(@deepseek-ai/cordis@4.0.4)))':
@@ -4080,9 +4003,9 @@ snapshots:
tslib: 2.8.1
optional: true
- '@eslint-community/eslint-utils@4.10.1(eslint@10.9.1)':
+ '@eslint-community/eslint-utils@4.10.1(eslint@10.11.0)':
dependencies:
- eslint: 10.9.1
+ eslint: 10.11.0
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
@@ -4103,13 +4026,13 @@ snapshots:
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/js@10.0.1(eslint@10.9.1)':
+ '@eslint/js@10.0.1(eslint@10.11.0)':
optionalDependencies:
- eslint: 10.9.1
+ eslint: 10.11.0
'@eslint/object-schema@3.0.5': {}
- '@eslint/plugin-kit@0.7.2':
+ '@eslint/plugin-kit@0.7.3':
dependencies:
'@eslint/core': 1.2.1
levn: 0.4.1
@@ -4152,43 +4075,32 @@ snapshots:
'@iconify/types': 2.0.0
import-meta-resolve: 4.2.0
- '@isaacs/cliui@8.0.2':
+ '@jridgewell/gen-mapping@0.3.13':
dependencies:
- string-width: 5.1.2
- string-width-cjs: string-width@4.2.0
- strip-ansi: 7.2.0
- strip-ansi-cjs: strip-ansi@6.0.1
- wrap-ansi: 8.1.0
- wrap-ansi-cjs: wrap-ansi@7.0.0
-
- '@jridgewell/gen-mapping@0.3.12':
- dependencies:
- '@jridgewell/sourcemap-codec': 1.6.0
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/gen-mapping@0.3.5':
- dependencies:
- '@jridgewell/set-array': 1.2.1
- '@jridgewell/sourcemap-codec': 1.6.0
+ '@jridgewell/sourcemap-codec': 1.5.5
'@jridgewell/trace-mapping': 0.3.31
'@jridgewell/remapping@2.3.5':
dependencies:
- '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
'@jridgewell/resolve-uri@3.1.2': {}
- '@jridgewell/set-array@1.2.1': {}
-
'@jridgewell/sourcemap-codec@1.5.5': {}
- '@jridgewell/sourcemap-codec@1.6.0': {}
-
'@jridgewell/trace-mapping@0.3.31':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.6.0
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@keyv/bigmap@1.3.1(keyv@5.6.0)':
+ dependencies:
+ hashery: 1.5.1
+ hookified: 1.15.1
+ keyv: 5.6.0
+
+ '@keyv/serialize@1.1.1': {}
'@lezer/common@1.5.2': {}
@@ -4294,9 +4206,6 @@ snapshots:
'@oxc-project/types@0.146.0': {}
- '@pkgjs/parseargs@0.11.0':
- optional: true
-
'@playwright/test@1.62.1':
dependencies:
playwright: 1.62.1
@@ -4622,72 +4531,72 @@ snapshots:
dependencies:
'@types/node': 24.13.3
- '@typescript-eslint/eslint-plugin@8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.9.1)(typescript@5.6.2))(eslint@10.9.1)(typescript@5.6.2)':
+ '@typescript-eslint/eslint-plugin@8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.11.0)(typescript@5.6.2))(eslint@10.11.0)(typescript@5.6.2)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.69.0(eslint@10.9.1)(typescript@5.6.2)
- '@typescript-eslint/scope-manager': 8.69.0
- '@typescript-eslint/type-utils': 8.69.0(eslint@10.9.1)(typescript@5.6.2)
- '@typescript-eslint/utils': 8.69.0(eslint@10.9.1)(typescript@5.6.2)
- '@typescript-eslint/visitor-keys': 8.69.0
- eslint: 10.9.1
- ignore: 7.0.8
+ '@typescript-eslint/parser': 8.71.0(eslint@10.11.0)(typescript@5.6.2)
+ '@typescript-eslint/scope-manager': 8.71.0
+ '@typescript-eslint/type-utils': 8.71.0(eslint@10.11.0)(typescript@5.6.2)
+ '@typescript-eslint/utils': 8.71.0(eslint@10.11.0)(typescript@5.6.2)
+ '@typescript-eslint/visitor-keys': 8.71.0
+ eslint: 10.11.0
+ ignore: 7.0.12
natural-compare: 1.4.0
ts-api-utils: 2.5.0(typescript@5.6.2)
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.69.0(eslint@10.9.1)(typescript@5.6.2)':
+ '@typescript-eslint/parser@8.71.0(eslint@10.11.0)(typescript@5.6.2)':
dependencies:
- '@typescript-eslint/scope-manager': 8.69.0
- '@typescript-eslint/types': 8.69.0
- '@typescript-eslint/typescript-estree': 8.69.0(typescript@5.6.2)
- '@typescript-eslint/visitor-keys': 8.69.0
+ '@typescript-eslint/scope-manager': 8.71.0
+ '@typescript-eslint/types': 8.71.0
+ '@typescript-eslint/typescript-estree': 8.71.0(typescript@5.6.2)
+ '@typescript-eslint/visitor-keys': 8.71.0
debug: 4.4.3
- eslint: 10.9.1
+ eslint: 10.11.0
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.69.0(typescript@5.6.2)':
+ '@typescript-eslint/project-service@8.71.0(typescript@5.6.2)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.69.0(typescript@5.6.2)
- '@typescript-eslint/types': 8.69.0
+ '@typescript-eslint/tsconfig-utils': 8.71.0(typescript@5.6.2)
+ '@typescript-eslint/types': 8.71.0
debug: 4.4.3
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.69.0':
+ '@typescript-eslint/scope-manager@8.71.0':
dependencies:
- '@typescript-eslint/types': 8.69.0
- '@typescript-eslint/visitor-keys': 8.69.0
+ '@typescript-eslint/types': 8.71.0
+ '@typescript-eslint/visitor-keys': 8.71.0
- '@typescript-eslint/tsconfig-utils@8.69.0(typescript@5.6.2)':
+ '@typescript-eslint/tsconfig-utils@8.71.0(typescript@5.6.2)':
dependencies:
typescript: 5.6.2
- '@typescript-eslint/type-utils@8.69.0(eslint@10.9.1)(typescript@5.6.2)':
+ '@typescript-eslint/type-utils@8.71.0(eslint@10.11.0)(typescript@5.6.2)':
dependencies:
- '@typescript-eslint/types': 8.69.0
- '@typescript-eslint/typescript-estree': 8.69.0(typescript@5.6.2)
- '@typescript-eslint/utils': 8.69.0(eslint@10.9.1)(typescript@5.6.2)
+ '@typescript-eslint/types': 8.71.0
+ '@typescript-eslint/typescript-estree': 8.71.0(typescript@5.6.2)
+ '@typescript-eslint/utils': 8.71.0(eslint@10.11.0)(typescript@5.6.2)
debug: 4.4.3
- eslint: 10.9.1
+ eslint: 10.11.0
ts-api-utils: 2.5.0(typescript@5.6.2)
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.69.0': {}
+ '@typescript-eslint/types@8.71.0': {}
- '@typescript-eslint/typescript-estree@8.69.0(typescript@5.6.2)':
+ '@typescript-eslint/typescript-estree@8.71.0(typescript@5.6.2)':
dependencies:
- '@typescript-eslint/project-service': 8.69.0(typescript@5.6.2)
- '@typescript-eslint/tsconfig-utils': 8.69.0(typescript@5.6.2)
- '@typescript-eslint/types': 8.69.0
- '@typescript-eslint/visitor-keys': 8.69.0
+ '@typescript-eslint/project-service': 8.71.0(typescript@5.6.2)
+ '@typescript-eslint/tsconfig-utils': 8.71.0(typescript@5.6.2)
+ '@typescript-eslint/types': 8.71.0
+ '@typescript-eslint/visitor-keys': 8.71.0
debug: 4.4.3
minimatch: 10.2.6
semver: 7.8.5
@@ -4697,20 +4606,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.69.0(eslint@10.9.1)(typescript@5.6.2)':
+ '@typescript-eslint/utils@8.71.0(eslint@10.11.0)(typescript@5.6.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1)
- '@typescript-eslint/scope-manager': 8.69.0
- '@typescript-eslint/types': 8.69.0
- '@typescript-eslint/typescript-estree': 8.69.0(typescript@5.6.2)
- eslint: 10.9.1
+ '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0)
+ '@typescript-eslint/scope-manager': 8.71.0
+ '@typescript-eslint/types': 8.71.0
+ '@typescript-eslint/typescript-estree': 8.71.0(typescript@5.6.2)
+ eslint: 10.11.0
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.69.0':
+ '@typescript-eslint/visitor-keys@8.71.0':
dependencies:
- '@typescript-eslint/types': 8.69.0
+ '@typescript-eslint/types': 8.71.0
eslint-visitor-keys: 5.0.1
'@ungap/structured-clone@1.4.0': {}
@@ -4857,53 +4766,45 @@ snapshots:
anser@2.3.5: {}
- ansi-regex@5.0.1: {}
-
- ansi-regex@6.3.0: {}
-
- ansi-styles@4.0.0:
- dependencies:
- color-convert: 2.0.1
-
- ansi-styles@6.1.0: {}
-
ansis@4.3.1: {}
argparse@2.0.1: {}
assertion-error@2.0.1: {}
- balanced-match@1.0.0: {}
-
balanced-match@4.0.4: {}
- baseline-browser-mapping@2.11.20: {}
+ baseline-browser-mapping@2.11.27: {}
bidi-js@1.0.3:
dependencies:
require-from-string: 2.0.2
- brace-expansion@2.1.4:
- dependencies:
- balanced-match: 1.0.0
-
- brace-expansion@5.0.9:
+ brace-expansion@5.0.12:
dependencies:
balanced-match: 4.0.4
- browserslist@4.28.8:
+ browserslist@4.29.3:
dependencies:
- baseline-browser-mapping: 2.11.20
- caniuse-lite: 1.0.30001810
- electron-to-chromium: 1.5.420
- node-releases: 2.0.54
- update-browserslist-db: 1.3.2(browserslist@4.28.8)
+ baseline-browser-mapping: 2.11.27
+ caniuse-lite: 1.0.30001814
+ electron-to-chromium: 1.5.444
+ node-releases: 2.0.57
+ update-browserslist-db: 1.3.3(browserslist@4.29.3)
bytes@3.1.2: {}
cac@7.0.0: {}
- caniuse-lite@1.0.30001810: {}
+ cacheable@2.5.0:
+ dependencies:
+ '@cacheable/memory': 2.2.0
+ '@cacheable/utils': 2.5.0
+ hookified: 1.15.1
+ keyv: 5.6.0
+ qified: 0.10.1
+
+ caniuse-lite@1.0.30001814: {}
ccount@2.0.1: {}
@@ -4917,12 +4818,6 @@ snapshots:
clsx@2.1.1: {}
- color-convert@2.0.1:
- dependencies:
- color-name: 1.1.4
-
- color-name@1.1.4: {}
-
comma-separated-tokens@2.0.3: {}
commander@7.0.0: {}
@@ -4933,12 +4828,11 @@ snapshots:
dependencies:
mime-db: 1.54.0
- compression@1.8.2:
+ compression@1.8.1:
dependencies:
bytes: 3.1.2
compressible: 2.0.18
debug: 2.6.9
- destroy: 1.2.0
negotiator: 0.6.4
on-headers: 1.1.0
safe-buffer: 5.2.1
@@ -4955,7 +4849,7 @@ snapshots:
'@standard-schema/spec': 1.1.0
cosmokit: 1.8.1
optionalDependencies:
- '@cordisjs/plugin-loader': 1.0.0-rc.5(cordis@4.0.0-rc.8)(node-addon-require-builtin@0.1.6)
+ '@cordisjs/plugin-loader': 1.0.0-rc.5(cordis@4.0.0-rc.8)(node-addon-require-builtin@0.1.7)
cose-base@1.0.3:
dependencies:
@@ -4973,7 +4867,7 @@ snapshots:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
- which: 2.0.1
+ which: 2.0.2
css-tree@3.2.1:
dependencies:
@@ -5199,8 +5093,6 @@ snapshots:
dequal@2.0.3: {}
- destroy@1.2.0: {}
-
detect-libc@2.1.2: {}
devlop@1.1.0:
@@ -5215,13 +5107,7 @@ snapshots:
dts-resolver@3.0.0: {}
- eastasianwidth@0.2.0: {}
-
- electron-to-chromium@1.5.420: {}
-
- emoji-regex@8.0.0: {}
-
- emoji-regex@9.2.2: {}
+ electron-to-chromium@1.5.444: {}
empathic@2.0.1: {}
@@ -5237,11 +5123,11 @@ snapshots:
escape-string-regexp@5.0.0: {}
- eslint-plugin-react-hooks@7.1.1(eslint@10.9.1):
+ eslint-plugin-react-hooks@7.1.1(eslint@10.11.0):
dependencies:
'@babel/core': 7.29.7
- '@babel/parser': 7.29.8
- eslint: 10.9.1
+ '@babel/parser': 7.29.9
+ eslint: 10.11.0
hermes-parser: 0.25.1
zod: 4.4.3
zod-validation-error: 4.0.2(zod@4.4.3)
@@ -5259,14 +5145,14 @@ snapshots:
eslint-visitor-keys@5.0.1: {}
- eslint@10.9.1:
+ eslint@10.11.0:
dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1)
+ '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0)
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.23.5
'@eslint/config-helpers': 0.7.0
'@eslint/core': 1.2.1
- '@eslint/plugin-kit': 0.7.2
+ '@eslint/plugin-kit': 0.7.3
'@humanfs/node': 0.16.8
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
@@ -5281,10 +5167,10 @@ snapshots:
esquery: 1.7.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
- file-entry-cache: 8.0.0
+ file-entry-cache: 11.1.5
find-up: 5.0.0
glob-parent: 6.0.2
- ignore: 5.2.0
+ ignore: 5.3.2
imurmurhash: 0.1.4
is-glob: 4.0.3
json-stable-stringify-without-jsonify: 1.0.1
@@ -5334,28 +5220,23 @@ snapshots:
optionalDependencies:
picomatch: 4.0.5
- file-entry-cache@8.0.0:
+ file-entry-cache@11.1.5:
dependencies:
- flat-cache: 4.0.0
+ flat-cache: 6.1.23
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
path-exists: 4.0.0
- flat-cache@4.0.0:
+ flat-cache@6.1.23:
dependencies:
+ cacheable: 2.5.0
flatted: 3.4.4
- keyv: 4.5.4
- rimraf: 5.0.5
+ hookified: 1.15.1
flatted@3.4.4: {}
- foreground-child@3.1.0:
- dependencies:
- cross-spawn: 7.0.6
- signal-exit: 4.1.0
-
fsevents@2.3.2:
optional: true
@@ -5372,19 +5253,14 @@ snapshots:
dependencies:
is-glob: 4.0.3
- glob@10.5.0:
- dependencies:
- foreground-child: 3.1.0
- jackspeak: 3.1.2
- minimatch: 9.0.9
- minipass: 7.1.3
- package-json-from-dist: 1.0.1
- path-scurry: 1.11.1
-
- globals@17.12.0: {}
+ globals@17.13.0: {}
hachure-fill@0.5.2: {}
+ hashery@1.5.1:
+ dependencies:
+ hookified: 1.15.1
+
hast-util-to-html@9.0.5:
dependencies:
'@types/hast': 3.0.5
@@ -5411,6 +5287,10 @@ snapshots:
hookable@6.1.1: {}
+ hookified@1.15.1: {}
+
+ hookified@2.2.0: {}
+
html-encoding-sniffer@6.0.0:
dependencies:
'@exodus/bytes': 1.15.1
@@ -5423,9 +5303,9 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
- ignore@5.2.0: {}
+ ignore@5.3.2: {}
- ignore@7.0.8: {}
+ ignore@7.0.12: {}
immer@10.2.0: {}
@@ -5441,8 +5321,6 @@ snapshots:
is-extglob@2.1.1: {}
- is-fullwidth-code-point@3.0.0: {}
-
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
@@ -5451,12 +5329,6 @@ snapshots:
isexe@2.0.0: {}
- jackspeak@3.1.2:
- dependencies:
- '@isaacs/cliui': 8.0.2
- optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
-
js-tokens@3.0.0: {}
js-tokens@4.0.0: {}
@@ -5493,8 +5365,6 @@ snapshots:
jsesc@3.1.0: {}
- json-buffer@3.0.1: {}
-
json-schema-traverse@0.4.1: {}
json-schema-traverse@1.0.0: {}
@@ -5507,9 +5377,9 @@ snapshots:
dependencies:
commander: 8.3.0
- keyv@4.5.4:
+ keyv@5.6.0:
dependencies:
- json-buffer: 3.0.1
+ '@keyv/serialize': 1.1.1
khroma@2.1.0: {}
@@ -5583,8 +5453,6 @@ snapshots:
dependencies:
js-tokens: 3.0.0
- lru-cache@10.2.0: {}
-
lru-cache@11.5.2: {}
lru-cache@5.1.1:
@@ -5798,7 +5666,7 @@ snapshots:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
- micromark-extension-gfm-table@2.1.1:
+ micromark-extension-gfm-table@2.1.2:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.1
@@ -5823,7 +5691,7 @@ snapshots:
micromark-extension-gfm-autolink-literal: 2.1.0
micromark-extension-gfm-footnote: 2.1.0
micromark-extension-gfm-strikethrough: 2.1.0
- micromark-extension-gfm-table: 2.1.1
+ micromark-extension-gfm-table: 2.1.2
micromark-extension-gfm-tagfilter: 2.0.0
micromark-extension-gfm-task-list-item: 2.1.0
micromark-util-combine-extensions: 2.0.1
@@ -5957,13 +5825,7 @@ snapshots:
minimatch@10.2.6:
dependencies:
- brace-expansion: 5.0.9
-
- minimatch@9.0.9:
- dependencies:
- brace-expansion: 2.1.4
-
- minipass@7.1.3: {}
+ brace-expansion: 5.0.12
ms@2.0.0: {}
@@ -5979,56 +5841,68 @@ snapshots:
dependencies:
content-type: 2.1.0
- node-addon-native-custom-loader@0.1.6: {}
+ node-addon-native-custom-loader@0.1.7: {}
- node-addon-require-builtin-darwin-arm64@0.1.6:
+ node-addon-require-builtin-darwin-arm64@0.1.7:
dependencies:
- node-addon-native-custom-loader: 0.1.6
+ node-addon-native-custom-loader: 0.1.7
optional: true
- node-addon-require-builtin-darwin-x64@0.1.6:
+ node-addon-require-builtin-darwin-x64@0.1.7:
dependencies:
- node-addon-native-custom-loader: 0.1.6
+ node-addon-native-custom-loader: 0.1.7
optional: true
- node-addon-require-builtin-linux-arm64-gnu@0.1.6:
+ node-addon-require-builtin-linux-arm64-gnu@0.1.7:
dependencies:
- node-addon-native-custom-loader: 0.1.6
+ node-addon-native-custom-loader: 0.1.7
optional: true
- node-addon-require-builtin-linux-x64-gnu@0.1.6:
+ node-addon-require-builtin-linux-arm64-musl@0.1.7:
dependencies:
- node-addon-native-custom-loader: 0.1.6
+ node-addon-native-custom-loader: 0.1.7
optional: true
- node-addon-require-builtin-win32-arm64-msvc@0.1.6:
+ node-addon-require-builtin-linux-x64-gnu@0.1.7:
dependencies:
- node-addon-native-custom-loader: 0.1.6
+ node-addon-native-custom-loader: 0.1.7
optional: true
- node-addon-require-builtin-win32-ia32-msvc@0.1.6:
+ node-addon-require-builtin-linux-x64-musl@0.1.7:
dependencies:
- node-addon-native-custom-loader: 0.1.6
+ node-addon-native-custom-loader: 0.1.7
optional: true
- node-addon-require-builtin-win32-x64-msvc@0.1.6:
+ node-addon-require-builtin-win32-arm64-msvc@0.1.7:
dependencies:
- node-addon-native-custom-loader: 0.1.6
+ node-addon-native-custom-loader: 0.1.7
optional: true
- node-addon-require-builtin@0.1.6:
+ node-addon-require-builtin-win32-ia32-msvc@0.1.7:
dependencies:
- node-addon-native-custom-loader: 0.1.6
+ node-addon-native-custom-loader: 0.1.7
+ optional: true
+
+ node-addon-require-builtin-win32-x64-msvc@0.1.7:
+ dependencies:
+ node-addon-native-custom-loader: 0.1.7
+ optional: true
+
+ node-addon-require-builtin@0.1.7:
+ dependencies:
+ node-addon-native-custom-loader: 0.1.7
optionalDependencies:
- node-addon-require-builtin-darwin-arm64: 0.1.6
- node-addon-require-builtin-darwin-x64: 0.1.6
- node-addon-require-builtin-linux-arm64-gnu: 0.1.6
- node-addon-require-builtin-linux-x64-gnu: 0.1.6
- node-addon-require-builtin-win32-arm64-msvc: 0.1.6
- node-addon-require-builtin-win32-ia32-msvc: 0.1.6
- node-addon-require-builtin-win32-x64-msvc: 0.1.6
+ node-addon-require-builtin-darwin-arm64: 0.1.7
+ node-addon-require-builtin-darwin-x64: 0.1.7
+ node-addon-require-builtin-linux-arm64-gnu: 0.1.7
+ node-addon-require-builtin-linux-arm64-musl: 0.1.7
+ node-addon-require-builtin-linux-x64-gnu: 0.1.7
+ node-addon-require-builtin-linux-x64-musl: 0.1.7
+ node-addon-require-builtin-win32-arm64-msvc: 0.1.7
+ node-addon-require-builtin-win32-ia32-msvc: 0.1.7
+ node-addon-require-builtin-win32-x64-msvc: 0.1.7
- node-releases@2.0.54: {}
+ node-releases@2.0.57: {}
obug@2.1.4: {}
@@ -6051,17 +5925,13 @@ snapshots:
type-check: 0.4.0
word-wrap: 1.2.5
- p-limit@3.0.2:
+ p-limit@3.1.0:
dependencies:
- p-try: 2.2.0
+ yocto-queue: 0.1.0
p-locate@5.0.0:
dependencies:
- p-limit: 3.0.2
-
- p-try@2.2.0: {}
-
- package-json-from-dist@1.0.1: {}
+ p-limit: 3.1.0
package-manager-detector@1.8.0: {}
@@ -6075,11 +5945,6 @@ snapshots:
path-key@3.1.1: {}
- path-scurry@1.11.1:
- dependencies:
- lru-cache: 10.2.0
- minipass: 7.1.3
-
pathe@2.0.3: {}
picocolors@1.1.1: {}
@@ -6113,6 +5978,10 @@ snapshots:
punycode@2.3.1: {}
+ qified@0.10.1:
+ dependencies:
+ hookified: 2.2.0
+
quansync@1.0.0: {}
react-dom@18.2.0(react@18.2.0):
@@ -6145,10 +6014,6 @@ snapshots:
resolve.exports@2.0.3: {}
- rimraf@5.0.5:
- dependencies:
- glob: 10.5.0
-
robust-predicates@3.0.3: {}
rolldown-plugin-dts@0.27.14(rolldown@1.2.5)(typescript@5.6.2):
@@ -6255,9 +6120,7 @@ snapshots:
siginfo@2.0.0: {}
- signal-exit@4.1.0: {}
-
- simple-icons@16.32.0: {}
+ simple-icons@16.33.0: {}
source-map-js@1.2.1: {}
@@ -6269,31 +6132,11 @@ snapshots:
strictdom@1.0.1: {}
- string-width@4.2.0:
- dependencies:
- emoji-regex: 8.0.0
- is-fullwidth-code-point: 3.0.0
- strip-ansi: 6.0.1
-
- string-width@5.1.2:
- dependencies:
- eastasianwidth: 0.2.0
- emoji-regex: 9.2.2
- strip-ansi: 7.2.0
-
stringify-entities@4.0.4:
dependencies:
character-entities-html4: 2.1.0
character-entities-legacy: 3.0.0
- strip-ansi@6.0.1:
- dependencies:
- ansi-regex: 5.0.1
-
- strip-ansi@7.2.0:
- dependencies:
- ansi-regex: 6.3.0
-
style-mod@4.1.3: {}
stylis@4.4.0: {}
@@ -6367,13 +6210,13 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
- typescript-eslint@8.69.0(eslint@10.9.1)(typescript@5.6.2):
+ typescript-eslint@8.71.0(eslint@10.11.0)(typescript@5.6.2):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.9.1)(typescript@5.6.2))(eslint@10.9.1)(typescript@5.6.2)
- '@typescript-eslint/parser': 8.69.0(eslint@10.9.1)(typescript@5.6.2)
- '@typescript-eslint/typescript-estree': 8.69.0(typescript@5.6.2)
- '@typescript-eslint/utils': 8.69.0(eslint@10.9.1)(typescript@5.6.2)
- eslint: 10.9.1
+ '@typescript-eslint/eslint-plugin': 8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.11.0)(typescript@5.6.2))(eslint@10.11.0)(typescript@5.6.2)
+ '@typescript-eslint/parser': 8.71.0(eslint@10.11.0)(typescript@5.6.2)
+ '@typescript-eslint/typescript-estree': 8.71.0(typescript@5.6.2)
+ '@typescript-eslint/utils': 8.71.0(eslint@10.11.0)(typescript@5.6.2)
+ eslint: 10.11.0
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
@@ -6421,9 +6264,9 @@ snapshots:
dependencies:
rolldown: 1.0.0-rc.17
- update-browserslist-db@1.3.2(browserslist@4.28.8):
+ update-browserslist-db@1.3.3(browserslist@4.29.3):
dependencies:
- browserslist: 4.28.8
+ browserslist: 4.29.3
escalade: 3.2.0
picocolors: 1.1.1
@@ -6509,7 +6352,7 @@ snapshots:
transitivePeerDependencies:
- '@noble/hashes'
- which@2.0.1:
+ which@2.0.2:
dependencies:
isexe: 2.0.0
@@ -6520,18 +6363,6 @@ snapshots:
word-wrap@1.2.5: {}
- wrap-ansi@7.0.0:
- dependencies:
- ansi-styles: 4.0.0
- string-width: 4.2.0
- strip-ansi: 6.0.1
-
- wrap-ansi@8.1.0:
- dependencies:
- ansi-styles: 6.1.0
- string-width: 5.1.2
- strip-ansi: 7.2.0
-
ws@8.21.3: {}
xml-name-validator@5.0.0: {}
@@ -6542,6 +6373,8 @@ snapshots:
yaml@2.9.1: {}
+ yocto-queue@0.1.0: {}
+
yuku-ast@0.8.7:
dependencies:
'@yuku-toolchain/types': 0.8.7
diff --git a/scripts/switch.sh b/scripts/switch.sh
new file mode 100755
index 0000000..7648c7e
--- /dev/null
+++ b/scripts/switch.sh
@@ -0,0 +1,294 @@
+#!/usr/bin/env bash
+# =============================================================================
+# dsh-apes-sidebar 两线切换脚本(apes fork 线 ↔ upstream better-sidebar 线)
+#
+# 同一个 DSH profile 内**二选一**切换侧边栏插件——双装不可行(两条线都注册
+# 进 `ctx.betterSidebar`,cordis entry id 冲突,第二个被丢弃)。切换 =
+# 换 profile 依赖 + 换 dsh.profile.bundles + pnpm install + 提示重启。
+#
+# aps 本 fork 线(dsh-apes-sidebar,含 4 个 apes:* 信息层 tab)
+# 依赖:dsh-apes-sidebar:
(本地开发)或
+# dsh-apes-sidebar@<版本>(npm,发布后)
+# upstream upstream 线(dsh-better-sidebar,官方 8 tab + 生态)
+# 依赖:dsh-better-sidebar@<版本>(registry,默认 latest)
+#
+# 用法:
+# bash scripts/switch.sh aps # 切到本 fork 线(本地 file: 安装)
+# bash scripts/switch.sh upstream # 切到 upstream 线(registry 安装)
+# bash scripts/switch.sh upstream 0.18.0 # 指定 upstream 版本
+# bash scripts/switch.sh --status # 只看当前线,不改任何东西
+#
+# 通用 flag(两线均适用):
+# --profile <名> 目标 profile(缺省 desktop)
+# --dry-run 只打印将执行的操作,不写任何文件
+# -h/--help 打印本帮助
+#
+# 环境(均可省略,脚本自动探测):
+# DSH_HOME 默认 ~/.dsh
+# REGISTRY 默认 https://registry.npmjs.org
+# DSH_CMD 默认 PATH 上的 dsh,缺省 npx -y --package @deepseek-ai/dsh
+# APS_SRC aps 线本地源码路径(缺省 = 本仓库根,即 file: 指向自己)
+#
+# 机制(幂等,可重复跑):
+# 1. 探测当前线(依赖里哪个包在)
+# 2. 与目标线相同 → 提示后直接退出(不重装)
+# 3. 移除另一线的依赖 + 从 bundles 摘除另一线的 bundle
+# 4. 写入目标线依赖 + 确保 workspace 放行 node-pty/protobufjs 构建
+# 5. cd profile && pnpm install(reconcileProfilePnpmWorkspace 会重建
+# node_modules——这是预期行为,两线不共存)
+# 6. 确保 bundles 含目标线包名(bundle 通道挂载生效的判据)
+# 7. 幂等移除 cordis.patch.yml 里对手线的手动挂载行(避免双挂载)
+# 8. 提示重启 DSH
+#
+# 回滚:跑 `bash scripts/switch.sh <另一线>` 即可切回去。
+# =============================================================================
+set -euo pipefail
+
+for arg in "$@"; do
+ if [ "$arg" = "-h" ] || [ "$arg" = "--help" ]; then
+ cat <<'EOF'
+dsh-apes-sidebar 两线切换(同一 profile 内二选一)
+
+用法:
+ bash scripts/switch.sh [版本]
+ bash scripts/switch.sh --status
+
+ aps 切到本 fork 线(dsh-apes-sidebar,4 个 apes:* tab)
+ upstream 切到 upstream 线(dsh-better-sidebar,官方)
+ <版本> 仅对 upstream 生效(缺省 latest)
+ --status 只看当前线,不改动
+ --profile 目标 profile(缺省 desktop)
+ --dry-run 只打印操作,不写文件
+ -h/--help 本帮助
+
+环境变量:DSH_HOME、REGISTRY、DSH_CMD、APS_SRC(aps 本地源码路径)
+EOF
+ exit 0
+ fi
+done
+
+DSH_HOME="${DSH_HOME:-${HOME:-${USERPROFILE:-}}/.dsh}"
+REGISTRY="${REGISTRY:-https://registry.npmjs.org}"
+DSH_CMD="${DSH_CMD:-dsh}"
+# aps 线本地源码:缺省 = 本仓库根(脚本在 scripts/ 下,根 = 上一级)
+APS_SRC="${APS_SRC:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
+
+APS_PKG="dsh-apes-sidebar"
+UP_PKG="dsh-better-sidebar"
+
+DRY_RUN=false
+STATUS_ONLY=false
+TARGET=""
+UP_VERSION=""
+PROFILE_NAME="desktop"
+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ --status) STATUS_ONLY=true ;;
+ --dry-run) DRY_RUN=true ;;
+ --profile)
+ if [ $# -lt 2 ]; then echo "--profile 需要一个 profile 名(如 desktop)" >&2; exit 2; fi
+ PROFILE_NAME="$2"; shift ;;
+ aps|upstream) TARGET="$1" ;;
+ -h|--help) : ;;
+ -*) echo "未知参数: ${1}(用 -h 查看用法)" >&2; exit 2 ;;
+ *) UP_VERSION="$1" ;; # 版本参数(仅 upstream 用)
+ esac
+ shift
+done
+
+PROFILE_DIR="$DSH_HOME/profiles/$PROFILE_NAME"
+PKG_JSON="$PROFILE_DIR/package.json"
+WS_YML="$PROFILE_DIR/pnpm-workspace.yaml"
+PATCH_YML="$PROFILE_DIR/cordis.patch.yml"
+
+say() { printf '\033[32m[switch]\033[0m %s\n' "$*"; }
+warn() { printf '\033[33m[warn]\033[0m %s\n' "$*" >&2; }
+die() { printf '\033[31m[error]\033[0m %s\n' "$*" >&2; exit 1; }
+
+command -v node >/dev/null 2>&1 || die "未找到 node(DSH 运行需要 Node.js ≥ 20)。"
+[ -d "$PROFILE_DIR" ] || die "找不到 profile 目录:${PROFILE_DIR}(请先初始化 ${PROFILE_NAME} profile)"
+[ -f "$PKG_JSON" ] || die "找不到 ${PKG_JSON}(profile 未初始化)"
+
+# ── 探测当前线(依赖里哪个包在)─────────────────────────────────────────
+current_line() {
+ node -e '
+ const p = JSON.parse(require("fs").readFileSync(process.argv[1], "utf8"));
+ const deps = p.dependencies || {};
+ if (deps["dsh-apes-sidebar"]) console.log("aps");
+ else if (deps["dsh-better-sidebar"]) console.log("upstream");
+ else console.log("none");
+ ' "$PKG_JSON"
+}
+
+if [ "$STATUS_ONLY" = true ]; then
+ CUR="$(current_line)"
+ say "profile: ${PROFILE_NAME} (${PROFILE_DIR})"
+ case "$CUR" in
+ aps) say "当前线:aps(${APS_PKG})" ;;
+ upstream) say "当前线:upstream(${UP_PKG})" ;;
+ none) say "当前线:无(两条线都未装)" ;;
+ esac
+ # 附带显示 bundles 里的 sidebar 条目
+ node -e '
+ const p = JSON.parse(require("fs").readFileSync(process.argv[1], "utf8"));
+ const b = (p.dsh && p.dsh.profile && p.dsh.profile.bundles) || [];
+ const side = b.filter(x => /sidebar/.test(x));
+ console.log("bundles 里的 sidebar 条目: " + (side.length ? side.join(", ") : "(无)"));
+ ' "$PKG_JSON"
+ exit 0
+fi
+
+[ -n "$TARGET" ] || die "缺少目标线(aps | upstream)。用 --status 查看当前线。"
+
+CUR="$(current_line)"
+case "$TARGET" in
+ aps) T_PKG="$APS_PKG"; T_DEP="file:${APS_SRC}" ;;
+ upstream)
+ T_PKG="$UP_PKG"
+ # pnpm 从依赖 key 取包名,值只给版本 spec(不含包名,否则双 @)
+ case "${UP_VERSION:-latest}" in
+ latest) T_DEP="latest" ;;
+ *) T_DEP="$UP_VERSION" ;;
+ esac
+ ;;
+esac
+
+[ "$CUR" = "$TARGET" ] && {
+ say "当前已是 ${TARGET} 线(${T_PKG}),无需切换。"
+ say "如需强制重装:先跑 --status 确认,再手动移除依赖后重跑。"
+ exit 0
+}
+
+OTHER_PKG=""
+case "$TARGET" in
+ aps) OTHER_PKG="$UP_PKG" ;;
+ upstream) OTHER_PKG="$APS_PKG" ;;
+esac
+
+say "切换:${CUR} → ${TARGET}(profile: ${PROFILE_NAME})"
+say "目标依赖:${T_DEP}"
+
+if [ "$DRY_RUN" = true ]; then
+ say "[dry-run] 步骤 1:移除 ${OTHER_PKG:-(无)} 依赖 + 从 bundles 摘除 ${OTHER_PKG:-(无)}"
+ say "[dry-run] 步骤 2:写入 ${T_PKG} 依赖(${T_DEP})"
+ say "[dry-run] 步骤 3:确保 ${WS_YML} 放行 node-pty/protobufjs 构建"
+ say "[dry-run] 步骤 4:cd ${PROFILE_DIR} && pnpm install(重建 node_modules)"
+ say "[dry-run] 步骤 5:确保 bundles 含 ${T_PKG}"
+ say "[dry-run] 步骤 6:幂等移除 ${PATCH_YML} 里 ${OTHER_PKG:-对手线} 的手动挂载行"
+ say "[dry-run] 步骤 7:提示重启 DSH"
+ exit 0
+fi
+
+# ── 步骤 1+2+5 合并:一次 node 调用完成依赖 + bundles 的对称改写 ─────────
+# 移除对手线依赖 + bundle,写入目标线依赖 + 确保目标 bundle 在列。幂等。
+node -e '
+ const fs = require("fs");
+ const p = process.argv[1];
+ const keep = process.argv[2]; // 目标包名
+ const depSpec = process.argv[3]; // 目标依赖 spec(file:... 或 pkg@ver)
+ const remove = process.argv[4]; // 对手包名(可能为空串)
+ const t = JSON.parse(fs.readFileSync(p, "utf8"));
+ t.dependencies = t.dependencies || {};
+ // 移除对手线依赖
+ if (remove) { const had = t.dependencies[remove]; delete t.dependencies[remove]; if (had) console.log("removed dep: " + remove + "=" + had); }
+ // 写入目标线依赖
+ t.dependencies[keep] = depSpec;
+ // bundles:摘除对手线,确保目标线在列
+ const prof = (t.dsh && t.dsh.profile) || {};
+ const b = prof.bundles || [];
+ const nb = b.filter(x => x !== remove);
+ if (!nb.includes(keep)) nb.push(keep);
+ t.dsh = t.dsh || {}; t.dsh.profile = prof; prof.bundles = nb;
+ fs.writeFileSync(p, JSON.stringify(t, null, 2) + "\n");
+ console.log("deps now: " + JSON.stringify(t.dependencies));
+ console.log("bundles now: " + nb.join(", "));
+' "$PKG_JSON" "$T_PKG" "$T_DEP" "$OTHER_PKG"
+say "依赖 + bundles 已改写"
+
+# ── 步骤 3:确保 workspace 放行 node-pty/protobufjs 构建(幂等)─────────
+if [ -f "$WS_YML" ]; then
+ WS_RESULT="$(node -e '
+ const fs = require("fs");
+ const p = process.argv[1];
+ let t = fs.readFileSync(p, "utf8");
+ const before = t;
+ t = t.replace(/^(\s*)(node-pty|protobufjs):.*$/gm, "$1$2: true");
+ if (!/^\s*allowBuilds:\s*$/m.test(t)) {
+ t += "\nallowBuilds:\n node-pty: true\n protobufjs: true\n";
+ } else {
+ for (const k of ["node-pty", "protobufjs"]) {
+ if (!new RegExp("^\\s*" + k + ":\\s*true\\s*$", "m").test(t)) {
+ t = t.replace(/^(\s*allowBuilds:\s*)$/m, "$1\n " + k + ": true");
+ }
+ }
+ }
+ if (t !== before) fs.writeFileSync(p, t);
+ console.log(t === before ? "unchanged" : "updated");
+ ' "$WS_YML")"
+ [ "$WS_RESULT" = "updated" ] && say "已确保 ${WS_YML}:allowBuilds(node-pty/protobufjs: true)" \
+ || say "workspace 设置已就绪,跳过"
+else
+ warn "找不到 ${WS_YML},跳过 workspace 预写(若 pnpm install 报 ignored build scripts 需手动补)"
+fi
+
+# ── 步骤 4:pnpm install(重建 node_modules——两线不共存,这是预期)──────
+command -v pnpm >/dev/null 2>&1 || die "未找到 pnpm。请安装 pnpm 9+ 并加入 PATH。"
+say "执行 cd ${PROFILE_DIR} && pnpm install(reconcileProfilePnpmWorkspace 会重建 node_modules)..."
+if ! (cd "$PROFILE_DIR" && pnpm install); then
+ die "pnpm install 失败。请确认网络可用、依赖 spec 正确,然后重试。"
+fi
+
+# ── 步骤 5 校验:bundles 含目标包(挂载生效判据)────────────────────────
+if ! node -e '
+ const p = JSON.parse(require("fs").readFileSync(process.argv[1], "utf8"));
+ const b = (p.dsh && p.dsh.profile && p.dsh.profile.bundles) || [];
+ process.exit(b.includes(process.argv[2]) ? 0 : 1);
+' "$PKG_JSON" "$T_PKG"; then
+ warn "${T_PKG} 未出现在 dsh.profile.bundles——挂载未注册,请检查 ${PKG_JSON}。"
+ exit 1
+fi
+say "bundle 已注册:dsh.profile.bundles 含 ${T_PKG}(下次启动自动挂载)"
+
+# ── 步骤 6:幂等移除对手线在 cordis.patch.yml 里的手动挂载行 ─────────────
+if [ -f "$PATCH_YML" ]; then
+ MOUNT_RESULT="$(node -e '
+ const fs = require("fs");
+ const p = process.argv[1];
+ const removePkg = process.argv[2];
+ if (!removePkg) { console.log("none"); process.exit(0); }
+ const lines = fs.readFileSync(p, "utf8").split("\n");
+ const out = [];
+ let i = 0;
+ let removed = false;
+ while (i < lines.length) {
+ const line = lines[i];
+ if (/^[ \t]*- insert:\s*$/.test(line)) {
+ const block = [line];
+ let j = i + 1;
+ while (j < lines.length && lines[j].trim() !== "" && !/^- \s/.test(lines[j])) {
+ block.push(lines[j]);
+ j++;
+ }
+ if (block.some((l) => new RegExp("id:\\s*" + removePkg.replace(/[-/]/g, "\\$&") + "\\b").test(l))) {
+ while (out.length && /^[ \t]*#/.test(out[out.length - 1])) out.pop();
+ i = j;
+ removed = true;
+ continue;
+ }
+ }
+ out.push(line);
+ i++;
+ }
+ if (!removed) console.log("none");
+ else { const t = out.join("\n").replace(/\n{3,}/g, "\n\n"); fs.writeFileSync(p, t); console.log("removed"); }
+ ' "$PATCH_YML" "$OTHER_PKG")"
+ [ "$MOUNT_RESULT" = "removed" ] && say "已从 ${PATCH_YML} 移除 ${OTHER_PKG} 的手动挂载行" \
+ || say "无 ${OTHER_PKG} 手动挂载行,跳过"
+else
+ say "无 ${PATCH_YML},跳过手动挂载行清理"
+fi
+
+# ── 步骤 7:提示重启 ────────────────────────────────────────────────────
+say "切换完成:${CUR} → ${TARGET}(${T_PKG})"
+say "下一步:重启 DSH 并硬刷新(Cmd/Ctrl+Shift+R)使新副本生效。"
diff --git a/src/client/HtmlPreviewFrame.tsx b/src/client/HtmlPreviewFrame.tsx
new file mode 100644
index 0000000..fe08a65
--- /dev/null
+++ b/src/client/HtmlPreviewFrame.tsx
@@ -0,0 +1,78 @@
+/**
+ * The one HTML-preview frame both preview surfaces render.
+ *
+ * Why this is not a plain `src` to the `/sidebar/html` route: on DSH Desktop
+ * the host answers 403 `forbidden` to every request that does not carry the
+ * Electron renderer capability (`x-dsh-desktop-renderer`), and the shell
+ * attaches that header only to MAIN-frame and SAME-ORIGIN-subframe traffic
+ * (`requestComesFromRendererOrigin`). A frame sandboxed WITHOUT
+ * allow-same-origin is an opaque origin at request time, so its document
+ * request never carries the capability and the preview shows nothing but the
+ * bare refusal.
+ *
+ * So the document is fetched by the MAIN frame — which does carry it — and
+ * handed to the frame through `srcdoc`. The `sandbox` attribute stays exactly
+ * as before: the preview still runs in an opaque origin, and the route's own
+ * workspace fence still bounds what can be fetched.
+ *
+ * Two consequences worth knowing:
+ * - sandboxed: an opaque origin cannot make network requests either, so a
+ * self-contained document previews completely while a multi-file one shows
+ * its markup with the relative assets missing (inlining them is a separate
+ * job, not this component's);
+ * - unsandboxed (the warned per-surface unlock, or the setting): the srcdoc
+ * frame inherits the GUI's origin — which is precisely what that escape
+ * hatch already meant — and there its relative references resolve and load
+ * like any other same-origin request.
+ *
+ * A fetch that fails hands the frame the route URL instead, so the route's
+ * own answer (its JSON error, or the refusal) stays visible rather than being
+ * replaced by a blank pane.
+ */
+import { useEffect, useState, type ReactNode } from 'react'
+import { HTML_IFRAME_SANDBOX, withPreviewBase } from './html-preview.ts'
+
+/** One preview frame. */
+export function HtmlPreviewFrame(props: {
+ /** The `/sidebar/html//` route URL of the SAVED file. */
+ url: string
+ /** Whether the opaque-origin sandbox applies (the default for both surfaces). */
+ sandboxed: boolean
+ className?: string
+ title: string
+}): ReactNode {
+ const { url, sandboxed, className, title } = props
+ const [doc, setDoc] = useState(null)
+ const [failed, setFailed] = useState(false)
+ useEffect(() => {
+ const controller = new AbortController()
+ setDoc(null)
+ setFailed(false)
+ void fetch(url, { signal: controller.signal })
+ .then(async (response) => {
+ if (!response.ok) throw new Error(String(response.status))
+ return response.text()
+ })
+ .then((text) => { setDoc(text) })
+ .catch((error: unknown) => {
+ // An abort is this effect's own cleanup, not a failure.
+ if ((error as { name?: string }).name !== 'AbortError') setFailed(true)
+ })
+ return () => { controller.abort() }
+ }, [url])
+ // The delivery path depends only on what we have: the fetched markup, the
+ // route's own answer after a failed fetch, or an empty frame while loading.
+ const delivery = doc !== null
+ ? { srcDoc: withPreviewBase(doc, url) }
+ : failed ? { src: url } : { srcDoc: '' }
+ return (
+
+ )
+}
diff --git a/src/client/TextEditor.tsx b/src/client/TextEditor.tsx
index 125276f..1da2a7d 100644
--- a/src/client/TextEditor.tsx
+++ b/src/client/TextEditor.tsx
@@ -36,7 +36,7 @@ import { LazyMermaidMarkdown, MarkdownDocument, type MarkdownHtmlMedia } from '.
import { MdToc } from './md-toc.tsx'
import { splitMermaidBlocks } from './mermaid-blocks.ts'
import { t } from './locales.ts'
-import { HTML_IFRAME_SANDBOX } from './html-preview.ts'
+import { HtmlPreviewFrame } from './HtmlPreviewFrame.tsx'
import type { EditorToolbarState, FileViewerProps } from './service.ts'
import css from './sidebar.module.css'
@@ -551,16 +551,14 @@ export function TextEditor(props: FileViewerProps) {
onUnlock={() => { setLocalUnlock(true) }}
onRestore={() => { setLocalUnlock(false) }}
/>
- {/* Route-src (never srcdoc — a srcdoc frame inherits the parent
- origin when unsandboxed; the route URL keeps the frame
- cross-origin by construction). The preview shows the SAVED
- file; the draft is only visible in edit mode. */}
-