diff --git a/.github/ISSUE_TEMPLATE/issue_report.yml b/.github/ISSUE_TEMPLATE/issue_report.yml index 2279d27..2edf56f 100644 --- a/.github/ISSUE_TEMPLATE/issue_report.yml +++ b/.github/ISSUE_TEMPLATE/issue_report.yml @@ -37,9 +37,9 @@ body: attributes: label: DSH Web 版本 + 浏览器 / DSH Web version + Browser description: | - 例:DSH 0.1.0-rc.7 + Chrome 151(macOS)。 - Example: DSH 0.1.0-rc.7 + Chrome 151 (macOS). - placeholder: "DSH 版本 / version + 浏览器 / browser(如 0.1.0-rc.7 + Chrome 151)" + 例:DSH 0.1.0-rc.8 + Chrome 151(macOS)。 + Example: DSH 0.1.0-rc.8 + Chrome 151 (macOS). + placeholder: "DSH 版本 / version + 浏览器 / browser(如 0.1.0-rc.8 + Chrome 151)" validations: required: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e91adf6..ae1b5ed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -82,7 +82,7 @@ jobs: # (dsh-base / dsh-web-app) resolves from this installation. Keep in # step with the plugin's @deepseek-ai/* peer range when bumping. - name: Install dsh CLI (pinned) - run: npm install -g @deepseek-ai/dsh@0.1.0-rc.7 + run: npm install -g @deepseek-ai/dsh@0.1.0-rc.8 # lib/ is gitignored; the tarball is produced from this build. - name: Build and pack the npm tarball diff --git a/AGENTS.md b/AGENTS.md index 1067cef..1911f09 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -19,9 +19,9 @@ better-sidebar 从 v0.4.0 起暴露 `ctx.betterSidebar` 服务(Cordis context 1. `pnpm build && pnpm pack` 产出 tarball(与发布产物一致)。 2. `scripts/e2e-mount.sh` 用官方 CLI 把它装进一个**全新 scratch profile**(`dsh plugin --profile web add file:`,触发 `dsh.profile.bundles` 协调),然后启动真实 `dsh web`(keyless,`--port 0`)。 -3. `tests/e2e/mount.e2e.ts`(Playwright Chromium)加载页面,断言外壳与 `[data-dsh-better-sidebar]` 挂载、无 `dsh-better-sidebar:` 错误条、无 pageerror/插件 console 错误,显式展开面板(`openByDefault` 默认关)后通过「+ 菜单」逐个打开内置 tab(含终端懒加载 chunk)深扫,再经 Files 文件窗口的内嵌树打开 seed 文件强制加载 editor 懒加载 chunk(`client-editor.js`,原地模式:seed 的 home tab 原地切换到文件)——缺失的内置 tab 或 chunk 都会使门禁变红。 +3. `tests/e2e/mount.e2e.ts`(Playwright Chromium)加载页面,断言外壳与 `[data-dsh-better-sidebar]` 挂载、无 `dsh-better-sidebar:` 错误条、无 pageerror/插件 console 错误,显式展开面板(`openByDefault` 默认关)后通过「+ 菜单」逐个打开内置 tab(含终端懒加载 chunk)深扫,再经 Files 文件窗口的树打开 seed 文件强制加载 editor 懒加载 chunk(`client-editor.js`,独立模式:每个文件新开 tab,seed 的 home tab 保持资源管理器)——缺失的内置 tab 或 chunk 都会使门禁变红。 -本地跑:`pnpm build && pnpm pack && pnpm exec playwright install chromium && pnpm test:mount`(需 PATH 上有 `dsh` 或可经 npx 拉取)。DSH CLI 版本在 CI 钉住 `@deepseek-ai/dsh@0.1.0-rc.7`(与插件 peer 范围同步)。`tests/e2e` 的 spec 命名 `*.e2e.ts` + vitest `exclude` 双保险与 vitest 隔离;**改动 vitest `exclude` 时必须保留默认排除项**(`exclude` 会整体替换默认值)。 +本地跑:`pnpm build && pnpm pack && pnpm exec playwright install chromium && pnpm test:mount`(需 PATH 上有 `dsh` 或可经 npx 拉取)。DSH CLI 版本在 CI 钉住 `@deepseek-ai/dsh@0.1.0-rc.8`(与插件 peer 范围同步)。`tests/e2e` 的 spec 命名 `*.e2e.ts` + vitest `exclude` 双保险与 vitest 隔离;**改动 vitest `exclude` 时必须保留默认排除项**(`exclude` 会整体替换默认值)。 ### npm 发版(GitHub Release → npm publish) @@ -53,7 +53,7 @@ better-sidebar 从 v0.4.0 起暴露 `ctx.betterSidebar` 服务(Cordis context { "name": "my-plugin", "peerDependencies": { - "cordis": "^4.0.0-rc.7", + "cordis": "^4.0.0-rc.8", "dsh-better-sidebar": "workspace:*" }, "peerDependenciesMeta": { @@ -350,7 +350,7 @@ ctx.effect(() => { | id | order | single | hidden | 用途 | |---|---|---|---|---| -| `editor` | 10 | 否(按 path 去重) | 否 | 唯一的「文件窗口」(文件编辑/预览 + 文件资源管理):文件 tab(有 path)在两种 `editorExplorer` 模式下 chrome 恒为合并形态——头部路径输入框 + 文本编辑器预览/编辑/保存控件 + 可开关的内嵌文件树面板(含全局文件名搜索,走 host `fs.search` 路由;左缘拖拽调宽),状态存 `tab.meta.treeOpen` / `tab.meta.treeWidth`;pref 控制**打开行为与无路径窗口形态**:开(默认,合并)= 树点击/输入框 Enter 原地切换当前 tab(`updateTab` 重写 path/title,id 与 meta 不变),无路径窗口 = 带 chrome 的空文件窗口(树默认展开);关(独立)= 走 `openSidebarFile` 按 path 新开,**无路径窗口即独立资源管理器——只渲染文件树面板**(搜索 + FileTree 撑满全窗,无编辑器 chrome)。树右键菜单提供「在新 Tab 中打开」「在侧边打开」(后者在当前 pane 右侧 split 出新 editor tab)。新会话在两种模式下都默认 seed 空文件窗口(`title: 'Files'`,无 path,树面板展开);持久化的旧 `explorer` tab 经 `sanitizeState` 迁移为该 home tab | +| `editor` | 10 | 否(按 path 去重) | 否 | 唯一的「文件窗口」(文件编辑/预览 + 文件资源管理):文件 tab(有 path)在两种 `editorExplorer` 模式下 chrome 恒为合并形态——头部路径输入框 + 文本编辑器预览/编辑/保存控件 + 可开关的内嵌文件树面板(含全局文件名搜索,走 host `fs.search` 路由;左缘拖拽调宽),状态存 `tab.meta.treeOpen` / `tab.meta.treeWidth`;pref 控制**打开行为与无路径窗口形态**:关(默认,独立)= 走 `openSidebarFile` 按 path 新开,**无路径窗口即独立资源管理器——只渲染文件树面板**(搜索 + FileTree 撑满全窗,无编辑器 chrome);开(合并)= 树点击/输入框 Enter 原地切换当前 tab(`updateTab` 重写 path/title,id 与 meta 不变),无路径窗口 = 带 chrome 的空文件窗口(树默认展开)。树右键菜单提供「在新 Tab 中打开」「在侧边打开」(后者在当前 pane 右侧 split 出新 editor tab)。新会话在两种模式下都默认 seed 空文件窗口(`title: 'Files'`,无 path,树面板展开);持久化的旧 `explorer` tab 经 `sanitizeState` 迁移为该 home tab | | `git` | 20 | 是 | 否 | Git 面板 | | `subagent` | 30 | 是 | 否 | 子代理拓扑 | | `terminal` | 40 | 否 | 否 | 终端(nextTerminal 自增) | @@ -605,9 +605,10 @@ interface OpenTabSeed { - **面板表面**:右/底面板背景 = `var(--dsw-alias-bg-layer-1)`(通用卡片表面)。**绝不消费 `--dsw-specific-sidebar-fill`**——那是宿主左侧导航列专属令牌,皮肤系统按左导航语义覆盖它(dsh-web-ui 皮肤把它做成半透明玻璃或主题色,Aqua 设成 `transparent`),面板消费它会失去填充或与标签令牌冲突。皮肤要整体换面板表面:覆写 `--dsw-alias-bg-layer-1` 即可(dsh-web-ui 10 款皮肤都已覆盖,无需任何额外工作)。 - **终端/编辑器表面**:经 `effectiveTokenValue` 读取 `--dsw-alias-bg-base`——`transparent` 与 alpha < 0.9 的半透明玻璃值(dsh-web-ui 皮肤用 rgba 0.16–0.7)一律回退不透明底色,文字永不叠在皮肤背景画上滚动(issue #90);≥ 0.9 的近不透明值(如皮肤作用域内 0.96 的瓷器玻璃)放行,皮肤仍能控制终端表面。 -- **根锚点**:宿主 div 带 `data-dsh-better-sidebar` 属性(append 到 `document.body`),面板是其 fixed 直接子级。皮肤若要做作用域覆盖(deep-whale 的做法),限定在 `[data-dsh-better-sidebar]` 内即可,避免全局改写影响宿主。 -- **布局变量**(写在 `` 上,面板打开时有效):`--dsh-sidebar-width` / `--dsh-sidebar-height`(面板几何;拖拽期间逐帧更新)。 -- **z-index**:面板 40、折叠按钮簇 45(角手柄在面板内层叠,z-index 2 仅面板内有效)——全部低于 DSH 浮层栈(100/1000+),任何浮层天然盖住侧边栏。 +- **根锚点**:宿主 div 带 `data-dsh-better-sidebar` 属性(append 到 `document.body`)。其内是**统一面板宿主层** `[data-dsh-panel-host]`(`position:fixed; inset:0; z-index:40; pointer-events:none`,v0.13.1+):面板/开关簇在其内 **absolute** 定位(层 inset:0 即视口坐标),免疫桌面套壳中间层 transform 对 fixed 含块的劫持;页面级 transform(罕见)触发 `data-dsh-panel-host-degraded` 降级同步。皮肤若要做作用域覆盖(deep-whale 的做法),限定在 `[data-dsh-better-sidebar]` 内即可,避免全局改写影响宿主。 +- **布局变量**(写在 `` 上,面板打开时有效):`--dsh-sidebar-width` / `--dsh-sidebar-height`(面板几何;拖拽期间逐帧更新)。宿主推挤 = `#root` 的 `margin-right/width: calc(100% - var)`(v0.13.1+ 防桌面壳加性溢出)与 centerCol 的 `margin-bottom`;推挤锚点是 **`#root [data-dsh-frame] > [data-pane="conversation"]`**(稳定 data 属性,**禁止**退回 `nth-child` 位置锚定)。 +- **桌面信号**(v0.13.1+):DSH Desktop 壳在 URL 注入 `dsh-desktop-mode` / `dsh-desktop-platform`(preload 另暴露 `__DSH_DESKTOP_FILE_PATH__`);win32 `advanced` 壳右上角有 32px 窗口控制 overlay,插件自动启用标题栏兼容(`body[data-dsh-title-bar-compat]` + `--dsh-title-bar-strip: 32px`),手动 pref 可覆盖;`compatibility` 模式与无信号环境不避让。 +- **z-index**:面板宿主层 40、折叠按钮簇 45(角手柄在面板内层叠,z-index 2 仅面板内有效)——全部低于 DSH 浮层栈(100/1000+),任何浮层天然盖住侧边栏。 ### 8.2 注意事项 @@ -631,7 +632,7 @@ interface OpenTabSeed { "./client": { "types": "./lib/types/client/index.d.ts", "default": "./lib/client.js" } }, "peerDependencies": { - "cordis": "^4.0.0-rc.7", + "cordis": "^4.0.0-rc.8", "dsh-better-sidebar": "workspace:*", "@deepseek-ai/dsh-client-runtime": "^0.0.1", "react": "^18.2.0" diff --git a/README.md b/README.md index 5261f83..a12ae4f 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,25 @@ 添加插件截图 +### v0.14.0 + +> ⚠️ **本版适配 DSH 0.1.0-rc.8**:全部 `@deepseek-ai/*` peer / devDependencies 升至 `^0.1.0-rc.8`(含传递依赖,lockfile 零 rc.7 残留),`cordis` 同步 `^4.0.0-rc.8`,CI 挂载冒烟钉版 `@deepseek-ai/dsh@0.1.0-rc.8`。**rc.7 及更早的 DSH 环境将无法解析本版依赖,请先升级 DSH**。自 v0.13.1 以来的全部更改: + +**✨ 新功能** + +- 🖼️ **统一面板宿主注入重构**([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)):面板/开关簇迁入 `[data-dsh-panel-host]` 固定含块层(`fixed inset-0 z-40`),免疫桌面套壳中间层 transform 对 fixed 含块的劫持;挂载自检(页面级 transform → `data-dsh-panel-host-degraded` 降级同步,按未修正几何判定、祖先变换消失才退出);推挤锚点改 `#root [data-dsh-frame] > [data-pane="conversation"]` + `#root` calc 宽度防桌面壳加性溢出;chunk 激活重验证(HEAD+ETag 保留未变 chunk,5s 超时兜底 fail-open);桌面信号自动探测(win32 advanced 标题栏兼容 32px 避让,手动 pref 可覆盖);`visualViewport` 键盘 inset + `env(safe-area-inset-*)` 移动端适配 +- 📂 **文件打开方式默认独立**([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)):`editorExplorer` 默认从「合并」改为「独立」——新会话树点击 / 打开文件按路径**新开**文件 tab,无路径窗口即纯资源管理器;合并模式保留为可选手动开启 +- 🖥️ **终端 shell / shellArgs 设置页可配**([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)):终端卡齿轮二级页面新增「Shell 路径」「Shell 参数」两行配置(此前只能通过 `cordis.patch.yml` 配置)——设置页写入后对**之后打开的** UI 终端与模型终端(`terminal_create`)即时生效;留空保持 yaml → `$SHELL` / 登录 shell / `powershell.exe` 的既有解析顺序 +- 🏷️ **设置页版本徽标**([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)):侧边卡片设置页顶部新增 `DSH-better-sidebar v0.14.0` 身份徽标(版本与服务实例同步,由测试守护) +- 🔍 **添加插件目录搜索 / 分组 / 独立滚动**([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)):为插件生态增长做准备——目录列表顶部加实时搜索(按名称 / id / 描述过滤),条目支持可选 `category` 分组渲染,列表独立滚动(弹窗不再随条目数无限增长) + +**🐛 修复** + +- 🔧 **适配 DSH 0.1.0-rc.8**([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)):13 个 `@deepseek-ai/*` peer / devDependencies 升至 `^0.1.0-rc.8`(含传递链,lockfile 零 rc.7 残留),`cordis` 同步 `^4.0.0-rc.8`;移除随 rc.8 消失的 `dsh-client-web-react` / `dsh-client-schema-form`(壳模块表不再提供、插件零引用);CI 挂载冒烟钉版 `@deepseek-ai/dsh@0.1.0-rc.8`;pnpm 11.8 supply-chain 校验适配 +- 🧩 **rc.8 模块系统迁移**([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)):rc.8 不再暴露 `window.__DSH_MODULES__` 页面全局(改由 `ctx.modules` 服务提供),懒加载 chunk 的外部依赖解析全面失效——client 注入 `modules` 服务 + 插件自有全局共享给 chunk 副本(终端 / 编辑器 / Mermaid 恢复正常按需加载) +- 🧩 **chunk 重验证屏障健壮性**([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)):HEAD 重验证加 5s 超时兜底(路由挂起时 fail-open 重取,屏障不再可能无限期阻塞懒加载);`resetChunks` 清挂起的重验证屏障 +- 🖱️ **拖拽健壮性**([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)):快速释放(浏览器合并 / 丢失 pointermove 突发)时提交最后已知拖动位置而非回退;`pointercancel` / 捕获丢失中断同样保留拖动结果;提交后立即重测中心列(消除底栏宽度中间帧抖动);HMR 重激活后中心列重定位兜底(`` 样式观察 + 底栏打开重测),修复热更新后底栏空白 / 输入框位移 + ### v0.13.1 **✨ 新功能** @@ -58,7 +77,7 @@ **✨ 新功能** -- 📁 **文件窗口与资源管理器二合一**([#151](https://github.com/omdsh-dev/DSH-better-sidebar/pull/151)):新 `editorExplorer` 设置(默认开,编辑器卡齿轮)——文件 tab 增加路径输入框头部 + 可开关的右侧停靠文件树(每 tab 记忆展开/宽度,左缘拖拽调宽 160~480px,全局文件名搜索走 host `fs.search` 路由,预算封顶并跳过 `.git` / 符号链接目录);合并模式下树点击 / 输入框 Enter **原地切换**当前 tab,独立模式按路径新开;新会话默认 seed 空文件窗口(`Files`)替代 explorer tab,无路径窗口在合并模式为带 chrome 的空文件窗口、独立模式为纯资源管理器;树右键提供「在新 Tab 中打开」「在侧边打开」(split) +- 📁 **文件窗口与资源管理器二合一**([#151](https://github.com/omdsh-dev/DSH-better-sidebar/pull/151)):新 `editorExplorer` 设置(编辑器卡齿轮)——文件 tab 增加路径输入框头部 + 可开关的右侧停靠文件树(每 tab 记忆展开/宽度,左缘拖拽调宽 160~480px,全局文件名搜索走 host `fs.search` 路由,预算封顶并跳过 `.git` / 符号链接目录);独立模式(默认)树点击 / 输入框 Enter **按路径新开**文件 tab,合并模式**原地切换**当前 tab;新会话默认 seed 空文件窗口(`Files`)替代 explorer tab,无路径窗口在独立模式为纯资源管理器、合并模式为带 chrome 的空文件窗口;树右键提供「在新 Tab 中打开」「在侧边打开」(split) - 🎛️ **声明式设置 select 行**([#151](https://github.com/omdsh-dev/DSH-better-sidebar/pull/151)):设置项新增 `type: 'select'`(`options` 支持 value/title/desc/icon,`multi` 多选存数组);带图标的选项渲染大图标选项卡、收起态同样显示图标;`editorExplorer` 改为图标化下拉(合并 / 独立);能力清单新增 `settingSelect` - 🔀 **与 dsh-web-ui 家族右侧面板互斥**([#181](https://github.com/omdsh-dev/DSH-better-sidebar/pull/181)):读取 `aionui-panel` 设置命名空间的提供方选择——当选择「使用 aionui-panel」时,整个 better-sidebar(右侧栏 / 底部面板 / 浮动入口 / 各类接管)不再挂载;选择 DSH-better-sidebar(或未安装 aionui)时正常。设置页保存后实时生效(settings-document 推送),无需刷新 @@ -199,7 +218,7 @@ v0.12.1 补齐基座能力(完整类型导出、能力探测、状态订阅、 ## 🛠️ 开发与构建 ```sh -pnpm install # @deepseek-ai/* 已发布到 npm(^0.1.0-rc.7),直接解析、无需令牌 +pnpm install # @deepseek-ai/* 已发布到 npm(^0.1.0-rc.8),直接解析、无需令牌 pnpm typecheck # tsc --noEmit pnpm build # → lib/index.js + lib/invariant.js + lib/client.js + lib/client-registry.js + lib/types pnpm test # vitest(含 manifest 一致性守卫,需先 build) diff --git a/README_EN.md b/README_EN.md index 176a788..dbfd797 100644 --- a/README_EN.md +++ b/README_EN.md @@ -41,7 +41,26 @@ Add Plugins screenshot -### v0.13.1 +### v0.14.0 + +> ⚠️ **This release adapts to DSH 0.1.0-rc.8**: every `@deepseek-ai/*` peer/devDependency is raised to `^0.1.0-rc.8` (transitives included — zero rc.7 leftovers in the lockfile), `cordis` to `^4.0.0-rc.8`, and the CI mount lane pins `@deepseek-ai/dsh@0.1.0-rc.8`. **DSH environments on rc.7 or earlier can no longer resolve this release's dependencies — upgrade DSH first.** All changes since v0.13.1: + +**✨ New features** + +- 🖼️ **Unified panel-host injection refactor** ([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)): panels/toggle clusters moved into a `[data-dsh-panel-host]` fixed containing block (`fixed inset-0 z-40`), immune to desktop-shell intermediate transforms hijacking `fixed`; mount self-check (page-level transform → `data-dsh-panel-host-degraded` degraded sync, judged on uncorrected geometry, exits only when the ancestor transform is gone); push anchor switched to `#root [data-dsh-frame] > [data-pane="conversation"]` + `#root` calc width against desktop-shell additive overflow; chunk revalidation on activation (HEAD+ETag keeps unchanged chunks, 5s timeout fails open); desktop signal auto-detection (win32 advanced title-bar compat 32px avoidance, manual pref overrides); `visualViewport` keyboard inset + `env(safe-area-inset-*)` mobile adaptation +- 📂 **Separate file windows by default** ([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)): `editorExplorer` now defaults to **separate** — tree clicks / file opens create a new tab per path and the path-less window is a pure file manager; merged mode stays available as an opt-in +- 🖥️ **Terminal shell / shellArgs configurable from the settings page** ([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)): the terminal card's gear popup gains "Shell path" and "Shell arguments" rows (previously yaml-only via `cordis.patch.yml`) — saved values take effect immediately for terminals opened afterwards (UI terminals and model `terminal_create` alike); empty keeps the existing yaml → `$SHELL` / login shell / `powershell.exe` resolution order +- 🏷️ **Version badge on the settings page** ([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)): the side-card settings section now opens with a `DSH-better-sidebar v0.14.0` identity badge (version synced with the service instance, test-guarded) +- 🔍 **Add-plugin catalog: search / grouping / independent scroll** ([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)): built for a growing plugin ecosystem — a live search box (filters by name / id / description), optional `category` grouping for entries, and an independently scrolling list (the modal no longer grows unbounded with catalog size) + +**🐛 Fixes** + +- 🔧 **Adapted to DSH 0.1.0-rc.8** ([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)): all 13 `@deepseek-ai/*` peer/devDependencies raised to `^0.1.0-rc.8` (transitives included; zero rc.7 leftovers in the lockfile), `cordis` to `^4.0.0-rc.8`; `dsh-client-web-react` / `dsh-client-schema-form` removed (no rc.8 publish, no longer in the shell module table, zero plugin references); CI mount lane pins `@deepseek-ai/dsh@0.1.0-rc.8`; pnpm 11.8 supply-chain verification adapted +- 🧩 **rc.8 module-system migration** ([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)): rc.8 no longer exposes the `window.__DSH_MODULES__` page global (it moved to the `ctx.modules` service), which broke every lazy chunk's externals resolution — the client now injects the `modules` service and shares it with chunk-bundle copies through a plugin-owned global (terminal / editor / Mermaid on-demand loading restored) +- 🧩 **Chunk revalidation barrier hardening** ([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)): HEAD revalidation gains a 5s timeout (fails open on a stuck route so the barrier can never wedge lazy loads); `resetChunks` clears a pending revalidation barrier +- 🖱️ **Drag robustness** ([#232](https://github.com/omdsh-dev/DSH-better-sidebar/pull/232)): fast releases (browsers merge/lose pointermove bursts) commit the last known dragged position instead of rolling back; `pointercancel` / lost-capture interruptions keep the drag result too; the center column is re-measured right after commit (no mid-frame bottom-panel width jump); HMR re-activation re-locates the center column via an `` style observer plus a retry when the bottom panel opens (fixes the blank bottom panel / shifted input bar after a hot reload) + +### v0.13.1### v0.13.1 **✨ New features** @@ -57,7 +76,7 @@ **✨ New features** -- 📁 **Files window merged with the explorer** ([#151](https://github.com/omdsh-dev/DSH-better-sidebar/pull/151)): new `editorExplorer` setting (default on, editor card gear) — file tabs gain a path-input header plus a toggleable right-docked file tree (per-tab open/width memory, drag-resize 160–480px from the left edge, global filename search via the host `fs.search` route with a hard budget, skipping `.git` and symlink dirs); in merged mode tree clicks / Enter in the path input switch the current tab **in place**, separate mode opens by path; fresh sessions seed an empty Files window instead of the explorer tab, and a path-less window is a chrome'd empty file window in merged mode / a bare file manager in separate mode; the tree context menu offers "Open in new tab" and "Open to the side" (split) +- 📁 **Files window merged with the explorer** ([#151](https://github.com/omdsh-dev/DSH-better-sidebar/pull/151)): new `editorExplorer` setting (editor card gear) — file tabs gain a path-input header plus a toggleable right-docked file tree (per-tab open/width memory, drag-resize 160–480px from the left edge, global filename search via the host `fs.search` route with a hard budget, skipping `.git` and symlink dirs); in separate mode (default) tree clicks / Enter in the path input open each file **in its own new tab**, merged mode switches the current tab **in place**; fresh sessions seed an empty Files window instead of the explorer tab, and a path-less window is a bare file manager in separate mode / a chrome'd empty file window in merged mode; the tree context menu offers "Open in new tab" and "Open to the side" (split) - 🎛️ **Select rows for declarative settings** ([#151](https://github.com/omdsh-dev/DSH-better-sidebar/pull/151)): settings rows gain `type: 'select'` (`options` with value/title/desc/icon, `multi` stores the picked values as an array); options with icons render big-icon option cards and keep the icon in the closed anchor; `editorExplorer` became an iconed select (merged vs separate); the capability list gained `settingSelect` - 🔀 **Mutual exclusion with the dsh-web-ui family right panel** ([#181](https://github.com/omdsh-dev/DSH-better-sidebar/pull/181)): reads the `aionui-panel` settings namespace's provider choice — when "Use aionui-panel" is selected, the whole better-sidebar (right sidebar / bottom panel / floating entry / all takeovers) does not mount; with DSH-better-sidebar (or no aionui installed) it behaves as before. Takes effect live after a settings save (settings-document push), no reload needed @@ -230,7 +249,7 @@ The dashed cards at the end of the "Sidebar content" / "File viewers" grids in t ## 🛠️ Development & Build ```sh -pnpm install # @deepseek-ai/* resolved from npm (^0.1.0-rc.7, published) — no token needed +pnpm install # @deepseek-ai/* resolved from npm (^0.1.0-rc.8, published) — no token needed pnpm typecheck # tsc --noEmit pnpm build # → lib/index.js + lib/invariant.js + lib/client.js + lib/client-registry.js + lib/types pnpm test # vitest (includes manifest consistency guard; build first) diff --git a/docs/external-plugin-guide.md b/docs/external-plugin-guide.md index cb3cea7..b0cbf30 100644 --- a/docs/external-plugin-guide.md +++ b/docs/external-plugin-guide.md @@ -40,7 +40,7 @@ import type {} from 'dsh-better-sidebar' // 触发 declare module 'cordis' 类 { "name": "my-plugin", "peerDependencies": { - "cordis": "^4.0.0-rc.7", + "cordis": "^4.0.0-rc.8", "dsh-better-sidebar": "workspace:*" }, "peerDependenciesMeta": { @@ -690,7 +690,7 @@ ctx.effect(() => "./client": { "types": "./lib/types/client/index.d.ts", "default": "./lib/client.js" } }, "peerDependencies": { - "cordis": "^4.0.0-rc.7", + "cordis": "^4.0.0-rc.8", "dsh-better-sidebar": "workspace:*", "@deepseek-ai/dsh-client-runtime": "^0.0.1", "react": "^18.2.0" diff --git a/docs/plans/2026-08-11-service-registry-design.md b/docs/plans/2026-08-11-service-registry-design.md index 355b026..9777b6d 100644 --- a/docs/plans/2026-08-11-service-registry-design.md +++ b/docs/plans/2026-08-11-service-registry-design.md @@ -267,7 +267,7 @@ return ```jsonc { "peerDependencies": { - "cordis": "^4.0.0-rc.7", + "cordis": "^4.0.0-rc.8", "dsh-better-sidebar": "workspace:*" }, "peerDependenciesMeta": { diff --git a/docs/plans/2026-08-19-sidebar-injection-unified-host-design.md b/docs/plans/2026-08-19-sidebar-injection-unified-host-design.md index 56e24b7..28eafe6 100644 --- a/docs/plans/2026-08-19-sidebar-injection-unified-host-design.md +++ b/docs/plans/2026-08-19-sidebar-injection-unified-host-design.md @@ -75,14 +75,15 @@ ``` 路线 A(主线,本仓库可控)┐ - 统一面板宿主:body 固定含块包裹层 ├─ 现在 → v0.13.x - + 桌面信号自动适配 + rAF 几何批处理 │ -路线 B(北极星,依赖上游)┘ - ui-sidebar 模式:占用官方槽位(grid 内渲染) ─ 上游落地后 → 迁移(浮层部分保留) + 统一面板宿主:body 固定含块包裹层 ├─ 现在 → v0.13.x(已实施,分支 feat/injection-unified-host) + + 桌面信号自动适配 + 几何写路径统一 │ +路线 B(已关闭)┘ + ui-sidebar 模式:占用官方槽位(grid 内渲染) ─ 2026-08-19 用户决策关闭:无法向官方提 issue, + 纯插件侧自己优化注入方式(调研结论保留于 §6) ``` -- **路线 A 立即做**:不依赖 DSH 新能力,纯插件侧,直接吸收桌面/移动/性能问题。 -- **路线 B 并行提官方 issue**:请求上游提供「可替换/可接管的右侧面板槽」(details 支持外部替换或新增 bottom-panel 槽),落地后 better-sidebar 主体迁入 grid,body 浮层收敛为纯浮层(菜单/弹窗/右键,与官方 ui-primitives 同姿势)。 +- **路线 A 已实施**:不依赖 DSH 新能力,纯插件侧,直接吸收桌面/移动/性能问题。 +- **路线 B 已关闭**(2026-08-19 用户决策):不提交上游 issue;§6 的槽位可行性调研保留为后续参考,但不再推进。 ## 5. 路线 A 详细设计:统一面板宿主 @@ -140,15 +141,18 @@ document.body - **契约文档化**:挂载点(`data-dsh-better-sidebar` / `data-dsh-panel-host`)、z-index 栈、CSS 变量(`--dsh-sidebar-width/height` 保持对外)、桌面信号(URL/全局标记)、推挤锚点策略 —— 同步 AGENTS.md §8 与本文档。 - **服务契约不变**:`ctx.betterSidebar` API 零变化;#135 的 service 读取问题(dsh-web-mobile 下 `ctx.betterSidebar` 直接读抛错)由「注入层与服务的解耦」顺带收敛(面板渲染不再假设服务存在即可读)。 -### 5.4 性能清单(验收口径) +### 5.4 性能清单(验收口径 + 实测基线) -| 指标 | 现状 | 目标 | +基线(2026-08-19 真实页面探针,本机 3080,拖拽 12 步 ≈192ms):**40 帧、帧均 8.36ms / p95 10.2ms、1 帧超 16ms;62 次 `setProperty`(5 种几何属性:panel width / bottom height / bottom right / 两个 html 变量)**——即每帧 5 次写同一组元素,浏览器合并为单次样式重算。 + +| 指标 | 现状 | 目标(v0.13.1 实施后) | |---|---|---| -| 拖拽期宿主 layout 次数 | 每帧 1 次批写(`applyDrag` rAF,已达标) | 保持;拖拽 0 次 reflow 读 | -| 懒加载 chunk 二次打开 | 不重下载(304)但重注入+重执行 | 内容哈希不变 → 内存缓存命中,0 脚本执行 | +| 拖拽期宿主 layout 次数 | 每帧 1 次批写(`applyDrag` rAF),帧均 8.36ms | 保持帧率 ≥ 基线;面板 `contain: layout style` 隔离内部重排;拖拽期 `will-change` 提升合成层 | +| 几何写路径 | 拖拽(`applyDrag`)与打开态(effect)两条路径写同一组变量 | 统一 `writeGeometry` 单写入器(已实施) | +| 懒加载 chunk 二次打开 | 不重下载(304)但重注入+重执行 | ETag 未变 → 内存缓存命中,0 脚本执行(已实施) | | 会话切换 | 面板 DOM 不重建(已满足) | 保持 + 重组件懒挂载 | -| 面板显隐动画 | transform+width/margin 过渡 | transform 优先(overlay 模式),推挤模式过渡保留 | -| 观察器 | ResizeObserver 已 rAF 节流(已达标) | 保持;新增挂载自检/MutationObserver 守卫均为一次性廉价检查 | +| 面板显隐动画 | transform+width/margin 过渡 | transform 优先(overlay 模式),推挤模式过渡保留(`#root` width/margin 锁步过渡) | +| 观察器 | ResizeObserver 已 rAF 节流 | 保持;挂载自检/MutationObserver 守卫均为一次性廉价检查 | ## 6. 路线 B 详细设计:官方槽位迁移(ui-sidebar 模式) @@ -204,19 +208,15 @@ document.body ### 8.1 拆分(文件级改动清单) -- **PR1(核心注入 + 性能,外部契约零变化)** - - `src/client/index.tsx`:挂载结构升级——`host` 内新增 `data-dsh-panel-host` 固定含块层(`position:fixed; inset:0; pointer-events:none; z-index:40`),面板子级 `pointer-events:auto`;挂载后一次性自检(`host.getBoundingClientRect()` vs 视口,偏差阈值内通过;否则降级 absolute+同步模式并 warn 一次);`MutationObserver`(仅 body childList)守卫锚点被宿主清空时重挂。 - - `src/client/Sidebar.tsx`:抽取 `writeGeometry` 统一两条写路径(`applyDrag` + 打开态 effect);拖拽/折叠行为不变。 - - `src/client/chunk-loader.ts` + `index.tsx`:缓存键加内容哈希,激活时哈希未变保留内存缓存(跳过重注入)。 - - `src/client/layout.css`:底部推挤锚点 `nth-child(2)` → `#root [data-dsh-frame] > [data-pane="conversation"]`(§3.4 实证的稳定锚点,注释更新);`#root` 增加 `width: calc(100% - var(--dsh-sidebar-width, 0px))` 消除桌面壳 margin 溢出(#226 目标以根因方式吸收;web 环境实测无溢出、改动无副作用,Desktop 实测待 PR1 验证);面板根 `contain: layout style` + 拖拽期 `will-change`。 - - 测试:`tests/` 新增几何写入器单测(fake timers 断言单帧单写)、挂载自检降级单测;`tests/e2e/mount.e2e.ts` 深扫不变并新增 `data-dsh-panel-host` 断言。 -- **PR2(桌面/移动自动适配 + 契约文档)** - - 新增 `src/client/desktop-env.ts`:解析 URL `dsh-desktop-mode/platform` + `__DSH_DESKTOP_FILE_PATH__` → 类型化 `DesktopEnv`(win32-advanced / darwin / compatibility / web / unknown)。 - - `Sidebar.tsx` + CSS:win32-advanced → `--dsh-desktop-top-inset: 32px`(折叠按钮簇/面板顶部内边距避让);darwin → 左侧红绿灯区避让(~78px,仅左侧贴边控件);现有 `titleBarCompat/titleBarStripPx`(`lib/types/prefs-shared.d.ts:77-84`)降级为手动覆盖位,默认「自动」。 - - 移动端:`visualViewport` 键盘弹起时底部面板上移(`resize` 事件 + rAF 节流,沿用 `useNarrowViewport` 模式);CSS 加 `env(safe-area-inset-*)` 内边距。 - - 契约文档:AGENTS.md §8 同步(挂载点/`data-dsh-panel-host`/z-index/桌面信号/推挤锚点策略)。 -- **PR3(可选)**:路线 B 上游 issue 提交(§6.2 草案已备)+ 槽位渲染后端原型(feature-flag 后)。 -- 各 PR 独立可验证;PR1 不依赖 PR2。 +**实施方式(2026-08-19 定稿)**:单分支 `feat/injection-unified-host`、按步骤顺序提交(每步 CI 绿);原 PR1/PR2 拆分为内部步骤,合并为**一个 PR** 交付(改动彼此耦合,且路线 B 关闭后无外部依赖)。各步骤: + +1. **挂载层**(`src/client/index.tsx`、`src/client/Sidebar.tsx`、`src/client/sidebar.module.css`):`Sidebar` 渲染根包 `data-dsh-panel-host`(`position:fixed; inset:0; pointer-events:none; z-index:40`);`.panel/.toggleCluster/.bottomPanel` 由 fixed 改 absolute(层 inset:0 即视口坐标)+ `pointer-events:auto`;挂载后一次性几何自检(偏差 >8px → `data-dsh-panel-host-degraded` + rAF 视口同步 + warn 一次);`MutationObserver`(body childList)守卫锚点被清空时重挂。✅ 已实施(commit 9a4c160) +2. **几何层**(`Sidebar.tsx`、`sidebar.module.css`):`writeGeometry` 统一拖拽/打开态两条推挤写路径;面板 `contain: layout style`;拖拽期(`body[data-dsh-sidebar-dragging]`)`will-change: transform`。✅ 已实施(commit 553e650) +3. **chunk 缓存**(`chunk-loader.ts`、`index.tsx`):`revalidateChunksOnReactivate()`——激活时 HEAD 每个已加载 chunk 对比 ETag,未变保留已解析 exports(跳过重注入/重执行),变更/不可达 fail-open 重取;测试夹具与孤儿缓存不跨激活存活。✅ 已实施(commit 0264625) +4. **锚点与防溢出**(`layout.css`):底部推挤锚点 `nth-child(2)` → `#root [data-dsh-frame] > [data-pane="conversation"]`(§3.4 实证);`#root` 加 `width: calc(100% - var(...))` 与 margin 锁步过渡(实测 1140+300=1440 无溢出;#226 桌面溢出根因吸收)。✅ 已实施(commit 9c9515d) +5. **桌面/移动适配**(新增 `desktop-env.ts`、`Sidebar.tsx`、CSS):解析 `dsh-desktop-mode/platform` + `__DSH_DESKTOP_FILE_PATH__`;win32 advanced 自动 `titleBarCompat`(32px overlay,手动 pref 覆盖);`visualViewport` 键盘 inset(底部面板/窄屏抽屉上移);`env(safe-area-inset-*)`。✅ 已实施(commit a1906c5,单测 7 例) +6. **测试与文档**:`tests/desktop-env.spec.ts`(7 例)、chunk-loader 重验证 4 例、`mount.e2e.ts` 增 `data-dsh-panel-host` 断言 + 桌面参数场景、AGENTS.md §8 契约同步、本文档更新。🔄 进行中 +7. **交付**:CI 全绿(含 plugin-mount)→ `gh pr create`。⏳ 待执行 ### 8.2 验证 @@ -247,6 +247,14 @@ document.body ## 11. 决策记录与实施偏差记录 - 2026-08-19(第一轮):方案定稿——路线 A(统一面板宿主)为主线、路线 B(官方槽位)并行提 issue;先出设计文档,实现拆 PR1/PR2 待批准。 -- 2026-08-19(第二轮,实施就绪打磨):对照源码核实现状——拖拽 rAF 批处理/窄屏不推挤/观察器节流/header 弱锚点**已具备**(§3.1 已标注「实施勿重做」);chunk 缺口精确为「激活后内存缓存清空重注入」(HTTP 已 304);§8.1 落到文件级改动清单;§6.2 备好上游 issue 草案。**等待用户批准后开 PR1**。 -- 2026-08-19(第三轮,实证核对):真实 dsh web 页面 Playwright 探针(§3.4)——frame 子项已含 overlay/handle(nth-child 脆弱性实锤);`data-pane="conversation"` 为新弱锚点(`[data-slot=conversation]` display:contents 作废);推挤在 web 无溢出(calc 改动无害);host 本体 static(fixed 在内层面板,含块层为新元素)。设计文档据此更新 §5.3/§8.1。 -- 实施偏差记录:待实施时按既有文档惯例补充。 +- 2026-08-19(第二轮,实施就绪打磨):对照源码核实现状——拖拽 rAF 批处理/窄屏不推挤/观察器节流/header 弱锚点**已具备**(§3.1 已标注「实施勿重做」);chunk 缺口精确为「激活后内存缓存清空重注入」(HTTP 已 304);§8.1 落到文件级改动清单;§6.2 备好上游 issue 草案。 +- 2026-08-19(第三轮,实证核对):真实 dsh web 页面 Playwright 探针(§3.4)——frame 子项已含 overlay/handle(nth-child 脆弱性实锤);`data-pane="conversation"` 为新弱锚点(`[data-slot=conversation]` display:contents 作废);推挤在 web 无溢出(calc 改动无害);host 本体 static(fixed 在内层面板,含块层为新元素)。 +- 2026-08-19(第四轮,用户决策):**路线 B 关闭**——无法向官方提 issue,纯插件侧自己优化注入方式;实现合并为单 PR(分支 `feat/injection-unified-host`),按 §8.1 步骤顺序落地。 +- **实施偏差记录**: + - 挂载自检降级实现为「`data-dsh-panel-host-degraded` 属性 + rAF 视口同步」(非独立 absolute 模式,见 §5.1 注释)。 + - chunk 缓存实现为 **ETag HEAD 重验证**而非内容哈希(bundle 路由已发 ETag,HEAD 更廉价);`resetChunks()` 保留(测试隔离),激活路径改用 `revalidateChunksOnReactivate()`。 + - `#root` 防溢出采用 `width: calc(100% - var)` + width/margin **锁步过渡**(避免动画断裂),并实测 1140+300=1440。 + - 桌面避让复用既有 `titleBarCompat/titleBarStripPx` 通道(未新增 `--dsh-desktop-top-inset` 变量);darwin 红绿灯区仅预留(当前无左侧贴边控件)。 + - 测试环境为 Node + 手写 shim(非 jsdom):`browser-globals.ts` 补 `location`;desktop-env 剥除 `location.search` 前导 `?`(真实 bug,顺带修复)。 + - 本地 Node 24 跑 `test:mount` 需 `node --expose-internals` 启动 dsh CLI(HMR 服务要求,CI Node 22 无此问题)——本地用 DSH_CMD 包装,不改仓库脚本。 + - **CR #232 修复(2026-08-19)**:① 降级同步改为按**未修正几何**判定(跟踪自身补偿量,祖先 transform 消失才退出循环);② chunk 重验证成为 `loadChunk` 屏障(重验证挂起期间不提供缓存,杜绝 HMR 竞态陈旧 exports);③ 键盘 inset 公式补 `visualViewport.offsetTop` 并监听 `scroll`。 diff --git a/dsh.plugin.json b/dsh.plugin.json index bc0d6b7..fe47d4d 100644 --- a/dsh.plugin.json +++ b/dsh.plugin.json @@ -1,6 +1,6 @@ { "id": "dsh-external/dsh-better-sidebar", - "version": "0.13.1", + "version": "0.14.0", "main": "./lib/index.js", "description": "VSCode 风格右侧侧边栏:文件资源管理器 / 编辑器 / 终端 / Git / 浏览器,按会话隔离。暴露服务供其他插件注册侧边栏页面和文件预览器", "engines": { diff --git a/package.json b/package.json index e03ade6..c372819 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dsh-better-sidebar", - "version": "0.13.1", + "version": "0.14.0", "description": "DSH web plugin: a VSCode-like right sidebar (explorer / editor / terminal / git / browser), isolated per conversation session. Exposes a service for other plugins to register sidebar tabs and file viewers.", "type": "module", "repository": { @@ -48,7 +48,8 @@ "@deepseek-ai/dsh-client-runtime", "@deepseek-ai/dsh-client-locale", "@deepseek-ai/dsh-client-ui-slots", - "@deepseek-ai/dsh-client-ui-conversation" + "@deepseek-ai/dsh-client-ui-conversation", + "@deepseek-ai/dsh-client-modules" ], "platform": "web" } @@ -84,22 +85,20 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", - "@deepseek-ai/dsh-client-schema-form": "^0.1.0-rc.7", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.7", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", - "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.7", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.7", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", - "@deepseek-ai/dsh-session": "^0.1.0-rc.7", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", - "cordis": "^4.0.0-rc.7", + "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.8", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.8", + "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", + "cordis": "^4.0.0-rc.8", "react": "^18.2.0", "react-dom": "^18.2.0" }, @@ -139,21 +138,19 @@ }, "devDependencies": { "@cordisjs/plugin-loader": "^1.0.0-rc.5", - "@deepseek-ai/dsh-agent": "0.1.0-rc.7", - "@deepseek-ai/dsh-client-locale": "0.1.0-rc.7", - "@deepseek-ai/dsh-client-runtime": "0.1.0-rc.7", - "@deepseek-ai/dsh-client-schema-form": "0.1.0-rc.7", - "@deepseek-ai/dsh-client-ui-conversation": "0.1.0-rc.7", - "@deepseek-ai/dsh-client-ui-primitives": "0.1.0-rc.7", - "@deepseek-ai/dsh-client-ui-settings": "0.1.0-rc.7", - "@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.7", - "@deepseek-ai/dsh-client-web-react": "0.1.0-rc.7", - "@deepseek-ai/dsh-host-webserver": "0.1.0-rc.7", - "@deepseek-ai/dsh-invariants": "0.1.0-rc.7", - "@deepseek-ai/dsh-llm": "0.1.0-rc.7", - "@deepseek-ai/dsh-session": "0.1.0-rc.7", - "@deepseek-ai/dsh-settings": "0.1.0-rc.7", - "@deepseek-ai/dsh-tools": "0.1.0-rc.7", + "@deepseek-ai/dsh-agent": "0.1.0-rc.8", + "@deepseek-ai/dsh-client-locale": "0.1.0-rc.8", + "@deepseek-ai/dsh-client-runtime": "0.1.0-rc.8", + "@deepseek-ai/dsh-client-ui-conversation": "0.1.0-rc.8", + "@deepseek-ai/dsh-client-ui-primitives": "0.1.0-rc.8", + "@deepseek-ai/dsh-client-ui-settings": "0.1.0-rc.8", + "@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.8", + "@deepseek-ai/dsh-host-webserver": "0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "0.1.0-rc.8", + "@deepseek-ai/dsh-session": "0.1.0-rc.8", + "@deepseek-ai/dsh-settings": "0.1.0-rc.8", + "@deepseek-ai/dsh-tools": "0.1.0-rc.8", "@playwright/test": "^1.62.1", "@types/node": "^24.0.0", "@types/react": "~18.3.1", @@ -161,7 +158,7 @@ "@types/ws": "^8.5.10", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^5.5.0", - "cordis": "^4.0.0-rc.7", + "cordis": "^4.0.0-rc.8", "jsdom": "^29.1.1", "lightningcss": "^1.32.0", "react": "^18.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cc841f7..4ab952b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -97,50 +97,44 @@ importers: specifier: ^1.0.0-rc.5 version: 1.0.0-rc.5(cordis@4.0.0-rc.8) '@deepseek-ai/dsh-agent': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) '@deepseek-ai/dsh-client-locale': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(ff15266f3c6ac85c9cb81f326da4b266) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(0d76f8562b3b268788250ff876a0ff04) '@deepseek-ai/dsh-client-runtime': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(18f137ce0d99ed41b8282f4e6c952969) - '@deepseek-ai/dsh-client-schema-form': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f) '@deepseek-ai/dsh-client-ui-conversation': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(cff82baedfeff89dfa629ec31dec62d0) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(c73e0406935812dd141782ed5ab5ed04) '@deepseek-ai/dsh-client-ui-primitives': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) '@deepseek-ai/dsh-client-ui-settings': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-api-remotes@0.1.0-rc.7(022498c733cc9b813e36f108b907ce4c))(@deepseek-ai/dsh-client-connection@0.1.0-rc.7)(@deepseek-ai/dsh-client-runtime@0.1.0-rc.7(18f137ce0d99ed41b8282f4e6c952969))(@deepseek-ai/dsh-client-schema-form@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-client-ui-slots@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-settings@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1))(react@18.2.0) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-api-remotes@0.1.0-rc.8(595254fcd6f0e2eefb415cb6827720e3))(@deepseek-ai/dsh-client-connection@0.1.0-rc.8)(@deepseek-ai/dsh-client-runtime@0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-settings@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1)) '@deepseek-ai/dsh-client-ui-slots': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-client-web-react': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) '@deepseek-ai/dsh-host-webserver': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) '@deepseek-ai/dsh-invariants': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) '@deepseek-ai/dsh-llm': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) '@deepseek-ai/dsh-session': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) '@deepseek-ai/dsh-settings': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) '@deepseek-ai/dsh-tools': - specifier: 0.1.0-rc.7 - version: 0.1.0-rc.7(38c91eb2d47c5b4ba2c8ead86dfcb4aa) + specifier: 0.1.0-rc.8 + version: 0.1.0-rc.8(ac9081d1e007de8a90a707560a8ae1c3) '@playwright/test': specifier: ^1.62.1 version: 1.62.1 @@ -163,7 +157,7 @@ importers: specifier: ^5.5.0 version: 5.5.0 cordis: - specifier: ^4.0.0-rc.7 + specifier: ^4.0.0-rc.8 version: 4.0.0-rc.8(@cordisjs/plugin-loader@1.0.0-rc.5) jsdom: specifier: ^29.1.1 @@ -185,7 +179,7 @@ importers: version: 5.6.2 vitest: specifier: ^4.1.8 - version: 4.1.10(@types/node@24.13.3)(jsdom@29.1.1)(vite@8.2.1(@types/node@24.13.3)) + version: 4.1.11(@types/node@24.13.3)(jsdom@29.1.1)(vite@8.2.1(@types/node@24.13.3)) packages: @@ -358,466 +352,570 @@ packages: '@deepseek-ai/cosmokit@1.8.2': resolution: {integrity: sha512-muBOKtSrUKU5m/xpq8ZXWL6hQ/jgd4PhU2PqH97bcxIiLEJfNwZOGQEx4t/aS/GgxRAR+ra9pMHPMtTHU4sqqA==} - '@deepseek-ai/dsh-agent-default-model@0.1.0-rc.7': - resolution: {integrity: sha512-zHtD4FAqxzidyNiyx1bpvLHdOTTsKnmjlHRqDS1KegIMSTNFmmp1B2bHdAUXp/OH7fPDmv+1ZXzDoJhBNUY9jA==} + '@deepseek-ai/dsh-agent-default-model@0.1.0-rc.8': + resolution: {integrity: sha512-FSmgVy8yeVYx3krUwfWZR3JokLD202FSuEd/ZfGdxA+BhOKAOfhNv539kujatVqXyzCG3XiRNda7zWxCh2h7/A==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-settings': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-settings': ^0.1.0-rc.8 - '@deepseek-ai/dsh-agent-presets@0.1.0-rc.7': - resolution: {integrity: sha512-T/VcMV7lrXCFmRKrtoMTAz5DAdUmku6hz95wbikRvRc0WizIwQ3R04ke9KIeDiQcxK8xkE8cx+IYqEWa9C5gPg==} + '@deepseek-ai/dsh-agent-presets@0.1.0-rc.8': + resolution: {integrity: sha512-7h+kE0KDrJCk2Y8GAqF4fu4YqZmFi5U8/AarFkGUqRI3HDugD6oYf05c7ZWNF7lQXh1OmwmrSbuPhT/YXJapOg==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 '@deepseek-ai/cordis-plugin-include': ^1.0.6 '@deepseek-ai/cordis-plugin-loader': ^1.0.2 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-atomic-write': ^0.1.0-rc.7 - '@deepseek-ai/dsh-home-paths': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-scope': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-settings': ^0.1.0-rc.7 - '@deepseek-ai/dsh-system-prompt': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-atomic-write': ^0.1.0-rc.8 + '@deepseek-ai/dsh-home-paths': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-scope': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-settings': ^0.1.0-rc.8 + '@deepseek-ai/dsh-system-prompt': ^0.1.0-rc.8 - '@deepseek-ai/dsh-agent@0.1.0-rc.7': - resolution: {integrity: sha512-AqBQavJYgbCUUYBHP7OGCaw8WN5082NXYQOoOfNRO72bub3E+/nWkl8b4B7BAJdFfyLo9ce+Kgb1BCHSJU/JLg==} + '@deepseek-ai/dsh-agent@0.1.0-rc.8': + resolution: {integrity: sha512-fOl46ZvzoYHalrlyfOJAHNhzyKeVDTUnZZKNSJEr9GY/98WJTjcV21agVEofTXldkJ7a/ws2HpJkVNJVFMtslg==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-scope': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-system-prompt': ^0.1.0-rc.7 - '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-scope': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-system-prompt': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.8 - '@deepseek-ai/dsh-api-gateway@0.1.0-rc.7': - resolution: {integrity: sha512-tcoOuHMSqYqCtMxLjWBHKN+glS56XaUo3ImphvDvUkB84FyU3btHNJbYeAt2oXoWbHfOedcIRWpfNN4tSmhPwQ==} + '@deepseek-ai/dsh-api-gateway@0.1.0-rc.8': + resolution: {integrity: sha512-rNA9+Sq3lXFDmyoFLpXNbcuWg7iFeepCwDi+jt1oGjwZTdZJ2nEWpU6GKlOiqadQjHYzfwEbCqmcuJy32qke/A==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-client-connection': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-typert-registry': ^0.1.0-rc.7 + '@deepseek-ai/dsh-client-connection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-registry': ^0.1.0-rc.8 - '@deepseek-ai/dsh-api-remotes@0.1.0-rc.7': - resolution: {integrity: sha512-dsP69u0avHRcJTPzngudqCm73UaTxNvGi/557DNPi3cOSoIh1SyPzPgk8W8rQQEFTL07rkwt8KfdQoMU5ga1fg==} + '@deepseek-ai/dsh-api-remotes@0.1.0-rc.8': + resolution: {integrity: sha512-s/zmFmU6R+dDxUWbHucIyfVgJG4v8kXa3YRjwjMO+Bu871ZG5Zsht6cvRqeSyu0A/Gs06ZfKYeKE0sdbCZ1NiA==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-agent-presets': ^0.1.0-rc.7 - '@deepseek-ai/dsh-api-gateway': ^0.1.0-rc.7 - '@deepseek-ai/dsh-commands': ^0.1.0-rc.7 - '@deepseek-ai/dsh-cordis-host-runner': ^0.1.0-rc.7 - '@deepseek-ai/dsh-credentials': ^0.1.0-rc.7 - '@deepseek-ai/dsh-goal': ^0.1.0-rc.7 - '@deepseek-ai/dsh-host-plugin-inventory': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-message-feedback': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-persistence': ^0.1.0-rc.7 - '@deepseek-ai/dsh-settings': ^0.1.0-rc.7 - '@deepseek-ai/dsh-typert-registry': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-agent-presets': ^0.1.0-rc.8 + '@deepseek-ai/dsh-api-gateway': ^0.1.0-rc.8 + '@deepseek-ai/dsh-commands': ^0.1.0-rc.8 + '@deepseek-ai/dsh-cordis-host-runner': ^0.1.0-rc.8 + '@deepseek-ai/dsh-credentials': ^0.1.0-rc.8 + '@deepseek-ai/dsh-file-reference': ^0.1.0-rc.8 + '@deepseek-ai/dsh-goal': ^0.1.0-rc.8 + '@deepseek-ai/dsh-host-plugin-inventory': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-message-feedback': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-persistence': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-reference': ^0.1.0-rc.8 + '@deepseek-ai/dsh-settings': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-registry': ^0.1.0-rc.8 - '@deepseek-ai/dsh-atomic-write@0.1.0-rc.7': - resolution: {integrity: sha512-LxRx6K8FJ8bXZHiNhH6Rvj+jh/ZIpolmsmi138XrvMUGvbOBWE6QLbdzcgTgwrYZm5GP2kqqLe/3gQlgtt2bXA==} + '@deepseek-ai/dsh-atomic-write@0.1.0-rc.8': + resolution: {integrity: sha512-SWP+NAat3oteaPi47zLPz4vxeYCHNVmFpN1aeKDuPHpe/ouNTl+WcyIONAJ+1MbZ+8APWhSaJIVu6ORJEUhVGw==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-attachment@0.1.0-rc.7': - resolution: {integrity: sha512-rsR/xVNOGIig8gXxhrKnkd6YD7aYliGtA/e7b4DlPawMpLhsItAh0HQ832n8LJn1aGZxKf68y9PRgzfljsveOQ==} + '@deepseek-ai/dsh-attachment@0.1.0-rc.8': + resolution: {integrity: sha512-cCrg4WWiav7pGtbdU8dJTpAG28cPnkWVB2YPOrlBCgBbhQziGcG9Dv67Ti6L3PI4OQKC55gYBFinQghFO/7FGg==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-brand@0.1.0-rc.7': - resolution: {integrity: sha512-P7+w0fN40yXXQkV360p6jQi63pcl68OOWebNGN5gf8w8sguvni2mA1cU8RLZzDkRNFSZD+BCw3D4uWYM+hhh7A==} + '@deepseek-ai/dsh-brand@0.1.0-rc.8': + resolution: {integrity: sha512-402aUAfHxIZJrArBV4gDf0I/A/69A/By26FX6HTIOyFmCnB4wUBKh8jnglz1CorKWdZy8AKldAhh8HQhQEbGOQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-client-connection@0.1.0-rc.7': - resolution: {integrity: sha512-JZWDKCbwKHOUcm7+JadKA3aJCSEB34XfPycCtPgdWfABIiHMaSpnmSVy/8Jed4hw6hxhnR6A3rnvW02Xr2yqwA==} + '@deepseek-ai/dsh-client-connection@0.1.0-rc.8': + resolution: {integrity: sha512-O1Y1NmkvJjpR/rCYkzulRrKbFwUbpMlINR4G6fbpGXaLy0VzTqN+ptk0b3wJ4RrnKPi4WWLKNNdV647Fg/1sCw==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-host-webserver': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-attachment': ^0.1.0-rc.8 + '@deepseek-ai/dsh-commands': ^0.1.0-rc.8 + '@deepseek-ai/dsh-host-apiproxy': ^0.1.0-rc.8 + '@deepseek-ai/dsh-host-webserver': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-tools': ^0.1.0-rc.8 - '@deepseek-ai/dsh-client-locale@0.1.0-rc.7': - resolution: {integrity: sha512-1onX79wXJfAzdwIJPUI9jEVYeVQJfWwyQvyL/OmGrnkCs8srJHIXBdYtsUC7ILlR13y5nOY4j6bifBOAoGRn6w==} + '@deepseek-ai/dsh-client-locale@0.1.0-rc.8': + resolution: {integrity: sha512-S8ztym/oFU1aWPDtSZLTGWfprUBIuhfOrRNlw/qMAwhavJiQU/Ag0plg19JffGiOMAQuz2BU2n2mW/xhbpA5Vw==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-api-remotes': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-connection': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-runtime': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-ui-primitives': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-ui-settings': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-ui-slots': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - react: ^18.2.0 + '@deepseek-ai/dsh-api-remotes': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-connection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-runtime': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-ui-settings': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-settings': ^0.1.0-rc.8 - '@deepseek-ai/dsh-client-runtime@0.1.0-rc.7': - resolution: {integrity: sha512-Ish2uFML2FibTpzo7QyVSt29jf/iG4j9BFQ41ychVMPRR3trJGM3h8CMuam3oKWlvB8OXVXFd6gO929w6PI0Ew==} + '@deepseek-ai/dsh-client-runtime@0.1.0-rc.8': + resolution: {integrity: sha512-wW/nktO/GVbGO/k163NlyJab/rK4D6xS5EL0bhYw4ojF1mxmWfrb3RUEYR5LcEUpFx/yXUHsUSgeO1ezmgIrvw==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-api-remotes': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.7 - '@deepseek-ai/dsh-typert-registry': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-api-remotes': ^0.1.0-rc.8 + '@deepseek-ai/dsh-attachment': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-connection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-commands': ^0.1.0-rc.8 + '@deepseek-ai/dsh-host-apiproxy': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm-retry': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-title': ^0.1.0-rc.8 + '@deepseek-ai/dsh-tools': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-registry': ^0.1.0-rc.8 - '@deepseek-ai/dsh-client-schema-form@0.1.0-rc.7': - resolution: {integrity: sha512-acGeXjGl2lMqCO+jY1z9/FKbIiskk7FZO266OSBOwHJQP6yBd5MBnrvtPJUB3glP6xsQK8neFLLtRwVgRJ+GqQ==} + '@deepseek-ai/dsh-client-ui-conversation@0.1.0-rc.8': + resolution: {integrity: sha512-GnQSE47/goSm1UzxQpYQrQnMJLyTmYFH6NENdrOxrVJxQnB55ruactgM1kVwfFnc/WUQVYy0599AK7pxjbxjMg==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-api-remotes': ^0.1.0-rc.8 + '@deepseek-ai/dsh-attachment': ^0.1.0-rc.8 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-connection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-locale': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-runtime': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-ui-input-trigger': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-ui-layout': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-ui-settings': ^0.1.0-rc.8 + '@deepseek-ai/dsh-commands': ^0.1.0-rc.8 + '@deepseek-ai/dsh-compaction': ^0.1.0-rc.8 + '@deepseek-ai/dsh-goal': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm-retry': ^0.1.0-rc.8 + '@deepseek-ai/dsh-permission-presets': ^0.1.0-rc.8 + '@deepseek-ai/dsh-plan-mode': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-stats': ^0.1.0-rc.8 + '@deepseek-ai/dsh-settings': ^0.1.0-rc.8 + '@deepseek-ai/dsh-token-meter': ^0.1.0-rc.8 + '@deepseek-ai/dsh-tool-todo': ^0.1.0-rc.8 + '@deepseek-ai/dsh-tools': ^0.1.0-rc.8 - '@deepseek-ai/dsh-client-ui-attachment@0.1.0-rc.7': - resolution: {integrity: sha512-IRA778yZpOaoJEkODlfydd6yuASf7hF229s64IY5zaY+22K7D+X1cmDo8D13UylxQXFPAomTlHtQtQpCtghKXw==} + '@deepseek-ai/dsh-client-ui-input-trigger@0.1.0-rc.8': + resolution: {integrity: sha512-uVJEZ1ftUdMemLvNf17gzB6ThYw0DL4k+0kcQrUPc6LHNQ2ZeuuvOz/931OlqzzUKMtlAGZgy0LvWyJ62LlSog==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-client-locale': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-runtime': ^0.1.0-rc.8 + '@deepseek-ai/dsh-file-reference': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-client-ui-conversation@0.1.0-rc.7': - resolution: {integrity: sha512-CyjFjP+oRJQ4ydX8WVrKUeloQnAJRA/fN6RRY6NAHldFC9pd1l8YogmTcR1JuCIlqzMnLRyYlGODQBYz8WOjmA==} + '@deepseek-ai/dsh-client-ui-layout@0.1.0-rc.8': + resolution: {integrity: sha512-tbHawbf8FsJqdwnXrU46V8u13bfAFVQQf0hA0OXH4k0PiLiThdZgQFn/T94+56JMUzD1QLqe7DLmNz29cwmjvQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-api-remotes': ^0.1.0-rc.7 - '@deepseek-ai/dsh-attachment': ^0.1.0-rc.7 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-connection': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-locale': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-runtime': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-ui-attachment': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-ui-input-trigger': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-ui-primitives': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-ui-settings': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-ui-slots': ^0.1.0-rc.7 - '@deepseek-ai/dsh-commands': ^0.1.0-rc.7 - '@deepseek-ai/dsh-compaction': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm-retry': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-stats': ^0.1.0-rc.7 - '@deepseek-ai/dsh-token-meter': ^0.1.0-rc.7 - '@deepseek-ai/dsh-tools': ^0.1.0-rc.7 - react: ^18.2.0 + '@deepseek-ai/dsh-client-runtime': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-ui-theme': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-client-ui-input-trigger@0.1.0-rc.7': - resolution: {integrity: sha512-Sfn4YlS6dKm/ojGRyZL5oq34+GSeyirzGkmqhtoX7hpjHAhBVmugz2jku2ijYEjjFtD6YKYdWwvQxHdRaHFZ+w==} + '@deepseek-ai/dsh-client-ui-primitives@0.1.0-rc.8': + resolution: {integrity: sha512-P3/n4jWT5kp4kTH67h+nmLu8LhKl9KsbFn8plumQFPXKGj2ythwmVoK3Nc329ANcYlxKXVtnoLPwYrTxkSeIpA==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-client-locale': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-runtime': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-ui-primitives': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-ui-slots': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - react: ^18.2.0 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-client-ui-primitives@0.1.0-rc.7': - resolution: {integrity: sha512-x3cnIAeOdDMd7no8JwP65q7J9Fj4xQWAZPPJY4MzgfQAAOcHJb0T0d5Uo4FXMiCcTeU/73n7BssS5PE7jjgiDg==} + '@deepseek-ai/dsh-client-ui-settings@0.1.0-rc.8': + resolution: {integrity: sha512-qSOjpmglOPsLzx6Q5yysrU4c4W6QWFOkyVyqePA5lNPOdny2MH19qbuNleQHbiBo4Zadh/dtBn/SuNRfSp+pjw==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-api-remotes': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-connection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-runtime': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-settings': ^0.1.0-rc.8 - '@deepseek-ai/dsh-client-ui-settings@0.1.0-rc.7': - resolution: {integrity: sha512-I02BGKw3/yG25yf5omsMwmwJ2CnFyxTvbxqgRgSmTCUxATkLT87K8SxcemRZqXnFXQZhm6Il6bwVCpVfRfmNoA==} + '@deepseek-ai/dsh-client-ui-slots@0.1.0-rc.8': + resolution: {integrity: sha512-mwmSDuUG2BTcmPSL/o6esCYmjiwlW+uV3+ZZKIHzCxNVZ0AFMsfPQNZLhNSC2SYYw3SuIPb2R1W9DorB++KVyQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-api-remotes': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-connection': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-runtime': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-schema-form': ^0.1.0-rc.7 - '@deepseek-ai/dsh-client-ui-slots': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-settings': ^0.1.0-rc.7 - react: ^18.2.0 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-client-ui-slots@0.1.0-rc.7': - resolution: {integrity: sha512-5rPP/6IWZflhiegVHU56IOPGHtrhLgBV44mOFn2JNVwiwxxmKeIhEcnYD4M0eKkI+pRiJIO5WvkRYokIGgyFiA==} + '@deepseek-ai/dsh-client-ui-theme@0.1.0-rc.8': + resolution: {integrity: sha512-orLl5eoWOnvjj76lI6xucE+lT+o+ouniRMSFsuYwF1DNH2pbyfVPQYJWL3iM55gE28yyZJGgmtmABnQBiEF5iA==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-api-remotes': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-connection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-locale': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-runtime': ^0.1.0-rc.8 + '@deepseek-ai/dsh-client-ui-settings': ^0.1.0-rc.8 + '@deepseek-ai/dsh-host-webserver': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-settings': ^0.1.0-rc.8 - '@deepseek-ai/dsh-client-web-react@0.1.0-rc.7': - resolution: {integrity: sha512-aw8s6RgMVJNNPTHB4TzVmKsuROp9yZDMKKXsMEEha8CESlHhCF1c+qxLsjAcilwY5CYCwin2T/3lot88k+ITiw==} + '@deepseek-ai/dsh-code-runtime@0.1.0-rc.8': + resolution: {integrity: sha512-6ZKyEE7dHH1UkKe5b0lg18Byww/7ocZyrNMVjAoUWEWp5i96Brf9Eavu9q3zepBMDMZJErCfV0pyt7KDhBJSig==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-code-runtime@0.1.0-rc.7': - resolution: {integrity: sha512-vzW82eU4so0qJQ/XS7BGBUSguJMAgEOW3GaJJW0g+W5ysBJg+UC/Jjo1Np8mPjSpjjl4eoyXpshJzrwjoxCpRg==} + '@deepseek-ai/dsh-commands@0.1.0-rc.8': + resolution: {integrity: sha512-/i99EDLrUyd4bUVn4d7XS46vg09ZE0ervbE/aQaVUWLjDYKrarb7hPx9slADAg5/cUlJsN6L6CP544h9qlUo4g==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-attachment': ^0.1.0-rc.8 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-scope': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.8 - '@deepseek-ai/dsh-commands@0.1.0-rc.7': - resolution: {integrity: sha512-SYrQpJZQ4fvfyfw3IJ5j0goUiOFZb1ZhcANgUp99HVlhhN/l1oEOAvEZL1efaSE7KIG6qp4JEn7iLtNdo8+mEA==} + '@deepseek-ai/dsh-compaction@0.1.0-rc.8': + resolution: {integrity: sha512-sWNqZqejzpKsnEMPsNVA/WYK4S59XlYJtnWw8wCPushzQdUt5zhf+g7LVx0cStSozEfwurxRvaZdOmNaa4WhNQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-scope': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.7 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-commands': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 - '@deepseek-ai/dsh-compaction@0.1.0-rc.7': - resolution: {integrity: sha512-9SDsfhfOzriMw4AF/md6MDOjl+YOwtE9BKFwunCGzfyWZnOUljoKEZxjtU0w1sIESSAjJnTicqb2NBOAIV9YQQ==} + '@deepseek-ai/dsh-cordis-host-runner@0.1.0-rc.8': + resolution: {integrity: sha512-DCJr6INHCI0Dypr1JAJj/BnvN31tpIt3Y8+KQ3GDfHW6pUBsc9GnXHpKsuQ4sK/fTj80GjaDYPGdWeB/uKMMdw==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-commands': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-scope': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-tools': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.8 - '@deepseek-ai/dsh-cordis-host-runner@0.1.0-rc.7': - resolution: {integrity: sha512-A7R39cSNsLwjm+P54bUFBUd5+YbdyKkC5cLQqYt12STt0Z06az10Qt5rsL25rnWkxW7x7Ql0wVA83tOmO2oy0g==} + '@deepseek-ai/dsh-credentials@0.1.0-rc.8': + resolution: {integrity: sha512-VopOhtUEa/fSmJr3fyKbsEG043kX1oGuBrmELAbkhmuDigl1cN88g0VPb9rMG2/dJ1h08wg+h0RJP+Ex4LjRWw==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-scope': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-tools': ^0.1.0-rc.7 - '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.7 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-credentials@0.1.0-rc.7': - resolution: {integrity: sha512-24oY36x90GN3QG2BASlryjzsO5eLA1U9vsvH1tPtBRJ1pBC6JqnW2v0SfDI/pcMT0ZbWo0uEATiik8rrv6xRpA==} + '@deepseek-ai/dsh-file-reference@0.1.0-rc.8': + resolution: {integrity: sha512-SoU4Zm7L8E9ud5nTs1tVAINFrgKvIKypCdOOMLBjJkjLUvXMYmKFxfCM7xaJjOmK/C5suEVUtpukZhZZvZALNA==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.8 - '@deepseek-ai/dsh-goal@0.1.0-rc.7': - resolution: {integrity: sha512-/pI2o0YcP21ReT+OQx7aA8SyUsnuEHxTQtMbu3DvN9ChvaFeptCTXGvHWocwVtzEEi48mdvAXF4Mx0Ptj1LJYA==} + '@deepseek-ai/dsh-goal@0.1.0-rc.8': + resolution: {integrity: sha512-PR/9JjRn2H/33eyAVbtYBxzRWQhFO5N0S/188eAV9gjUTtHe5oSOnPxYy8iNkkMXxr+VE8Nno25Sun8WYmS8lQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-scope': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.7 - '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-scope': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.8 - '@deepseek-ai/dsh-home-paths@0.1.0-rc.7': - resolution: {integrity: sha512-9Bu0eAbPw/FfCNpiX9hvyP5wedMUUQBc2sVTtU+xtH27/iUPxXoamFtBt3ydBJUeuVhja/leuhJ/d3MRhXO9fQ==} + '@deepseek-ai/dsh-home-paths@0.1.0-rc.8': + resolution: {integrity: sha512-9cQhH9CZsw7Zi73VnZk7CcuEVA6yR/Ox+7lp3VHq53fFYSPi0RL+kMWmh5XCrZB4U1OM3+PVsWsA5II9tB+t0Q==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-host-apiproxy@0.1.0-rc.7': - resolution: {integrity: sha512-oBCIJzzvVXijtxAPqSlQUlYTywEmkn3JEpMB2PM8W4UafnxNhqvDh8ikGE7/1y6KWoFUS4jHGwerUzyp3C6oWw==} + '@deepseek-ai/dsh-host-apiproxy@0.1.0-rc.8': + resolution: {integrity: sha512-viq2CoS6bRavSe1t9sLjgunykO+Vn/m83uSgONMH8O7QN0Pk3+FnZGHlPZ1lQ4auNJTwQjxFG6w372cGq9usWw==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent-presets': ^0.1.0-rc.7 - '@deepseek-ai/dsh-cordis-host-runner': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent-presets': ^0.1.0-rc.8 + '@deepseek-ai/dsh-cordis-host-runner': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-host-directory-picker@0.1.0-rc.7': - resolution: {integrity: sha512-CamVZ4wOjGcgzOiRFQtG0J0hy4EY3nXJBRFs0S397+H7b9eJUTtaMdOxP5w7VhMQ0Aq2ND7gpadwIcFaqINsMw==} + '@deepseek-ai/dsh-host-directory-picker@0.1.0-rc.8': + resolution: {integrity: sha512-aOUaUX0MTl8oLIuL27OkATMm+x2oTANuhhHpeGizn7+kfOX5bRKB3tyi7h6lGZ9O7WDiDLl2JajRqzBXlIPAAg==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-host-plugin-inventory@0.1.0-rc.7': - resolution: {integrity: sha512-B8ITfMnBAdgkkuvoMrBdVgydhsCYGnP8XIGXIouOQyT9/eWbD3WqO76XG+u+e2G36ACXu2NaIxsRh3ijzyorwg==} + '@deepseek-ai/dsh-host-plugin-inventory@0.1.0-rc.8': + resolution: {integrity: sha512-knPtxCDZn1jbwRfOUnskjaj8hSXUCfBcjD9LPFXnKffsM6TFOeQrFGhkNKlZteXAMSChtY6pV9bpJj17y3SPNg==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 '@deepseek-ai/cordis-plugin-loader': ^1.0.2 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.7 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.8 - '@deepseek-ai/dsh-host-webserver@0.1.0-rc.7': - resolution: {integrity: sha512-ip6HeN9YpWJXgWKAWsL3JUrI8j+MHEvbQ/m3U5ubP/Pc0AQ9x+6xZ/nYe+22112I12rihiwb85ykFwFfx0QbKQ==} + '@deepseek-ai/dsh-host-webserver@0.1.0-rc.8': + resolution: {integrity: sha512-MEKFrhvsYfj970QHLaKPpF/sIBpCe8NuSA0HGiWYJctX6TM9N3rLRhXx5p3zATDmXZclu1rbYhIbsqWw/twPig==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-invariants@0.1.0-rc.7': - resolution: {integrity: sha512-PnO1F4aZGUmqZPyuPJpBUfQ4DZmjCGCNGr0yuN2iURTP/e6h0kGnTNTYgR2NqMvAtpP66WNiHhvH2LMqumk1+A==} + '@deepseek-ai/dsh-invariants@0.1.0-rc.8': + resolution: {integrity: sha512-u0lYqyxOYwfsVnbsfGXZos5vFvA4cqFnBEW3/ezgljNwkYwzeUP/Y5wjPnQjP+ZzBn3CnVeIF6s2N2Vk3iA5mQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-jobs@0.1.0-rc.7': - resolution: {integrity: sha512-+omM89dEsaiAL1XtsSTMmRF46POp5g25Qs5KVj+Zfrk7whlXjLXwFiaukt/htdVdHIOM51qM+tCleqlHOU0Chw==} + '@deepseek-ai/dsh-jobs@0.1.0-rc.8': + resolution: {integrity: sha512-HqQudOA4VkjCMpxWiqTCMmuiTa/pehW6yG7dDsctO1vW5K48hWQ/h7czdJKgrh4SMuK4kchv3IipS1KaJmdaog==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 - '@deepseek-ai/dsh-llm-retry@0.1.0-rc.7': - resolution: {integrity: sha512-yyn5Yqth6vdScgmcYDF7L3a1jbfcu2y205HyTx9d84H+eU+h9m8k0Mc+1l8VCJbv9GILPCvoijP8wFTPDas7gQ==} + '@deepseek-ai/dsh-llm-retry@0.1.0-rc.8': + resolution: {integrity: sha512-DmcOajgiku5l7aa5hU9DtwnIZu+i/XCGdb+Wego5W9bAswYeBAwbceloRNE3O6+jdRzy+K5U7KQ9V+olBsNqRQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-timeout': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-timeout': ^0.1.0-rc.8 - '@deepseek-ai/dsh-llm@0.1.0-rc.7': - resolution: {integrity: sha512-VaB9kQ8XOA+R5jtsWf92QMc1WpaatEAFUvQePGUYrzQ7Z86b9VhQQzmchh5VmknT4oRSSdn0re5tReCvfcYNXQ==} + '@deepseek-ai/dsh-llm@0.1.0-rc.8': + resolution: {integrity: sha512-hf6RmX2Stn1UtzpktSHQLkIktQkBm9i/3yFfJlbGSkwyw5Cv9sTYJbyoHzsSnnh6i8nRRcMcBhvMgm23I00oIw==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-attachment': ^0.1.0-rc.7 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-timeout': ^0.1.0-rc.7 + '@deepseek-ai/dsh-attachment': ^0.1.0-rc.8 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-timeout': ^0.1.0-rc.8 - '@deepseek-ai/dsh-message-feedback@0.1.0-rc.7': - resolution: {integrity: sha512-P/Inw7dQMZCC6I6NC6G0UF9SeOVlpQxOBg2+LoCdvyTt40itDow2wmlThqkQDIt4UMHLT4yRc0Gd6a4gmTNJ2w==} + '@deepseek-ai/dsh-message-feedback@0.1.0-rc.8': + resolution: {integrity: sha512-5DYXVLcnvTRs74Att52LGNR+x+RCf1X5s5+gOSUddsjnQ0wn4f3pzfc0o4F+91aE2zX3xzQ3/LhlW5UOJdkB0Q==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-persistence': ^0.1.0-rc.7 - '@deepseek-ai/dsh-storage-domain': ^0.1.0-rc.7 - '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.7 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-persistence': ^0.1.0-rc.8 + '@deepseek-ai/dsh-storage-domain': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.8 - '@deepseek-ai/dsh-native-command@0.1.0-rc.7': - resolution: {integrity: sha512-c7NiAYPx5Ho2ZYOODRvt0yTZ9l00n7QvRh8paiyLaYBOuzo30KDo5wTJXGLxMkfzi6EQsWw1tljd8MnpGL2P4Q==} + '@deepseek-ai/dsh-native-command@0.1.0-rc.8': + resolution: {integrity: sha512-bRaT8LOb2xmWQ88oSzM4+Y3N4Yy4J0tf15/kQTP53PY1FnOA5hGYWoRglQgfxIcJCrw4fEdUPie8Fff0dCOwdQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-scope@0.1.0-rc.7': - resolution: {integrity: sha512-8gn+sANXhpv+9egbNwq49/uI3XhbmB33obo9yMyzyzruan3zFoxeH4UV54jTC2hjbu8gFNPsyNam9AAtRV8/Cg==} + '@deepseek-ai/dsh-output-retention@0.1.0-rc.8': + resolution: {integrity: sha512-DeVjqZ9TtH2AEG57GBsHYT68274VygzuP9EqQLL01Ht1TrdK75xlVet1l3jdEbA7Eik4aSGDjAZD9/MsnlUIXg==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-session-persistence@0.1.0-rc.7': - resolution: {integrity: sha512-NFH1uIGQDgMFOijgAv8lLWRiY3eHFEZW2alwuHlu4C32P4+jdChh9fjPlzBar3ZZTq0ZW0qWCdbYZS02DNxsvA==} + '@deepseek-ai/dsh-permission-presets@0.1.0-rc.8': + resolution: {integrity: sha512-EeTn8Av5kmb1Qj53D7myRnKcNQrrupGrM2m9LVUO8ieWvlIaYX7n2g0y8kg14SUpcD2YzaT40oGJ6VeDuhTZAA==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-timeout': ^0.1.0-rc.7 + '@deepseek-ai/dsh-commands': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-sandbox': ^0.1.0-rc.8 + '@deepseek-ai/dsh-sandbox-policy': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-settings': ^0.1.0-rc.8 + '@deepseek-ai/dsh-shell': ^0.1.0-rc.8 + '@deepseek-ai/dsh-user-approval': ^0.1.0-rc.8 - '@deepseek-ai/dsh-session-projection-cache@0.1.0-rc.7': - resolution: {integrity: sha512-qWf7p2Xgr0LnY4o466ei3L/81QbGFQcCbEi+4XX9rxLKgnU+RvlQzwmIilrgz9N2hK/RqwS1Nb03bFRisxVeaw==} + '@deepseek-ai/dsh-plan-mode@0.1.0-rc.8': + resolution: {integrity: sha512-/SY/iil7KLDvveqKRUZxO4HiADwDlOX9u3xyG/93h785mWSfRXooiv4Zp2tiBjU+pJB0tJXMsQNAXDdg7DWtwA==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-persistence': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.7 - '@deepseek-ai/dsh-storage-domain': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-commands': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-system-prompt': ^0.1.0-rc.8 + '@deepseek-ai/dsh-tools': ^0.1.0-rc.8 + '@deepseek-ai/dsh-user-questions': ^0.1.0-rc.8 + peerDependenciesMeta: + '@deepseek-ai/dsh-commands': + optional: true - '@deepseek-ai/dsh-session-projection@0.1.0-rc.7': - resolution: {integrity: sha512-BXehLYt6wYnV0PNNhv5GECePkH1w+1yuu/R63d2tdYdUQ7XVrd6tu5hMwfTH0P9AnBDxJir08FRu2WKO69JypA==} + '@deepseek-ai/dsh-sandbox-policy@0.1.0-rc.8': + resolution: {integrity: sha512-xQOlYWbUr1Oj6cnRd5aHZIz52EOEAdSO1HJIfeDkQrVaOgohFsiiCIp6PNFumuGNWdCEnf4Q18ebafLNtazYlA==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-sandbox': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-system-prompt': ^0.1.0-rc.8 - '@deepseek-ai/dsh-session-query@0.1.0-rc.7': - resolution: {integrity: sha512-JKlEpByllYQU9JZLadrS3ClWCVZMcKRB4nc6iCWuNExyRi/Whwa5GicKFs+jXwGKe/rdSbTCom/jYLwkqipjuw==} + '@deepseek-ai/dsh-sandbox@0.1.0-rc.8': + resolution: {integrity: sha512-dJpy5p/KjKkHG9AnMKU4+/ilj/4DCglsq3kof/jhIwtsZJCix07TEXP9vV8LCv4fU8af7cK3antXw4eVMqkwuQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-persistence': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-title': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + + '@deepseek-ai/dsh-scope@0.1.0-rc.8': + resolution: {integrity: sha512-/o+PxkVV2zUy9lYlMFr4TWSb+ESW4DE+fI891yIbsLzOJdFgfbmmLpGrlWgnz8/unIGJZxjeXdwyppV04Z277Q==} + peerDependencies: + '@deepseek-ai/cordis': ^4.0.1 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + + '@deepseek-ai/dsh-session-persistence@0.1.0-rc.8': + resolution: {integrity: sha512-JujorG/UCern0+zxJzNswyWl2tFG9sLzfVNvA5YkTLaRLZt7ZsEhxG4DxWZ6uj+3RJ8sf4bqdKqvpIn9t1pwUw==} + peerDependencies: + '@deepseek-ai/cordis': ^4.0.1 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-timeout': ^0.1.0-rc.8 + + '@deepseek-ai/dsh-session-projection-cache@0.1.0-rc.8': + resolution: {integrity: sha512-IPvO7k9FlekOJXn4XLWUwU5+JDQn7khu8Oa04GFDystU3c1CnOwoa7SGMHOfJau3r177M4ncXApwN5Ra6uhyXw==} + peerDependencies: + '@deepseek-ai/cordis': ^4.0.1 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-persistence': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-storage-domain': ^0.1.0-rc.8 + + '@deepseek-ai/dsh-session-projection@0.1.0-rc.8': + resolution: {integrity: sha512-q00B+rl7WAuK0Bgh93SY2+ZpqaH2kJhfJ9n6Jg6R/m4plnH0Ip4oCAHl6u8rBzDgb1mniQGEQDz/7BN5Q3It8Q==} + peerDependencies: + '@deepseek-ai/cordis': ^4.0.1 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + + '@deepseek-ai/dsh-session-query@0.1.0-rc.8': + resolution: {integrity: sha512-q8eyfpgPuJx24l1fEevDkc3Dux3lNp/yDzVkDL4nSTGNaDx/h9Y6iG7SZdqWM5nxOET3iwxi4AkPM7lYyLg3cQ==} + peerDependencies: + '@deepseek-ai/cordis': ^4.0.1 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-persistence': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-title': ^0.1.0-rc.8 peerDependenciesMeta: '@deepseek-ai/dsh-session-persistence': optional: true - '@deepseek-ai/dsh-session-stats@0.1.0-rc.7': - resolution: {integrity: sha512-ryf7HSYdmLbrTv4HQmeW/h0bHLiCNnSZYiY9RoBrzg2qh89MU8S+Q/a9CLVWA06TRXKt7tNbizF82dCj2/O0bQ==} + '@deepseek-ai/dsh-session-reference@0.1.0-rc.8': + resolution: {integrity: sha512-meNS02BOkLc2SnF2qWvl5X1Psk59t0Q1vvwjfCkczD29g4nm7Y02EZ089HJKii0VAsSB39RYA2rf6MCSl6vhow==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-compaction': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-output-retention': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-query': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.8 - '@deepseek-ai/dsh-session-title@0.1.0-rc.7': - resolution: {integrity: sha512-jhFiZa/C58zchuJkBodnkiPil7AEK8mHfB/hMOAW3N/7tUg5nbMLBERNqHdDMbIrvhTndrF4SN9qy+ltUf0cOQ==} + '@deepseek-ai/dsh-session-stats@0.1.0-rc.8': + resolution: {integrity: sha512-T+SEzBkMxZpQ31MaeJCjaLN3/xu8yyZ3Va5u6osfq0nsJz1tvuZ53MHMbApdwERHVV0t/1eILTUo1J6XdksUEA==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.8 - '@deepseek-ai/dsh-session@0.1.0-rc.7': - resolution: {integrity: sha512-02WVTkqIH+TyDL7dhMN3Hm+qcTEdhD0fVDC0aIAyND2fBdXj3CagEXXvpmt3mzwWfKwOTGL1RdxtC6pMA4Bl1A==} + '@deepseek-ai/dsh-session-title@0.1.0-rc.8': + resolution: {integrity: sha512-OFG9kHFGnM5ND4LCkqg8oZr57qgF6xMkBxR/4MRaJJ42QrPI9QKzoZVRpNpXEl3v3uw8oR7Jj0jbc7WClNl3ow==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-scope': ^0.1.0-rc.7 - '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.7 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.8 - '@deepseek-ai/dsh-settings@0.1.0-rc.7': - resolution: {integrity: sha512-cS1+StK2xIVykrskw+KrO+hKJxYaVVgY2Jex2we5zASTNLHYCj74WQluPlaFjFgnXoZ1RYz8HNXL5/Ho6h1Ynw==} + '@deepseek-ai/dsh-session@0.1.0-rc.8': + resolution: {integrity: sha512-Qs5Mgn32WPPVB4rKHjsZBgLOkh0TQurUAcc9GaDVudK4dUkpno2HDh++qu/PrwRA3CZ/iwPAoFHCpB3AMMaoLg==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-scope': ^0.1.0-rc.8 + '@deepseek-ai/dsh-typert-protocol': ^0.1.0-rc.8 + + '@deepseek-ai/dsh-settings@0.1.0-rc.8': + resolution: {integrity: sha512-pqbMoiSP+Ieww9/4gcHYXcBCDlno1zYDu2OPq+5xdZ+McnK+5YBtHsiRpnR9cHQxGTH7lkfIv+adkOueQW0utg==} + peerDependencies: + '@deepseek-ai/cordis': ^4.0.1 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 '@deepseek-ai/schemastery': ^3.18.1 - '@deepseek-ai/dsh-skill@0.1.0-rc.7': - resolution: {integrity: sha512-tDaqB1TOs27fSt6FZdjvPs4THXAFKoKOEgQG+iFUv63O5bm+glyLY3K1LTK8JeofB4lg3+4JIAeWRslnLJH57w==} + '@deepseek-ai/dsh-shell@0.1.0-rc.8': + resolution: {integrity: sha512-RNhp7Y25DXUH7o36X4GcN0lnOLg6NXTlWZpYNURT7aDj3UHcLLajRsyddiAh1EbwQnl0GRKRZhLaZHrrG6gMIw==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-scope': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-sandbox': ^0.1.0-rc.8 + '@deepseek-ai/dsh-settings': ^0.1.0-rc.8 + '@deepseek-ai/dsh-subprocess': ^0.1.0-rc.8 - '@deepseek-ai/dsh-storage-domain@0.1.0-rc.7': - resolution: {integrity: sha512-UxXwoCB0q4+/F+zddvi8I4LknTIlGD/1ec57Ym52kWRb7a8qGgrcIYrOC3yPCozn8rkirAuhEAkyAhR6AO5QDw==} + '@deepseek-ai/dsh-skill@0.1.0-rc.8': + resolution: {integrity: sha512-MqcOzl4Y5pQEvFBNVAi5w0IZWH5kVbXmp1RYScrl+8HpVATZbgumDhztVnEc2kUrZu+o6LKb1hnbunK6JHUE5g==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-storage': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-scope': ^0.1.0-rc.8 - '@deepseek-ai/dsh-storage@0.1.0-rc.7': - resolution: {integrity: sha512-M+6+SOjWWcfYoGASBMx+b1sHmWPFAHXF57rE/Mew9k5tHC5bEV8+owWwYOWQfv41eO1FfRMibZd0rH6mwPNApg==} + '@deepseek-ai/dsh-storage-domain@0.1.0-rc.8': + resolution: {integrity: sha512-rHphQ0jveKoCurwh9TX+VAVFsMQivBgghQBOAsWdVDZ3W6boeXNhMZWuGWZ7WjMPD3iJKgiFCx+650hhsao+LQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-storage': ^0.1.0-rc.8 - '@deepseek-ai/dsh-subagent@0.1.0-rc.7': - resolution: {integrity: sha512-PEpA9XT6E4hg7N8m7GYQyDLwFUwoqWTz0Cm9SrdAoNcju4byG08qy4+muDZbG0a1tm3PR4rxNB5zKcobDhDocg==} + '@deepseek-ai/dsh-storage@0.1.0-rc.8': + resolution: {integrity: sha512-KcxiNFAC1X0GhbS9yWGo7FLARBNsxoyU9JatxQtA23MuqOZaN4Nzy3bsMViK4/snzpPGwm//I+wfUywSjM6uBA==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-agent-presets': ^0.1.0-rc.7 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-jobs': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-sandbox': ^0.1.0-rc.7 - '@deepseek-ai/dsh-sandbox-policy': ^0.1.0-rc.7 - '@deepseek-ai/dsh-scope': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-persistence': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-projection-cache': ^0.1.0-rc.7 - '@deepseek-ai/dsh-tools': ^0.1.0-rc.7 - '@deepseek-ai/dsh-user-approval': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + + '@deepseek-ai/dsh-subagent@0.1.0-rc.8': + resolution: {integrity: sha512-EI94+hYMfAe8BQkkH/FTcciGxajFfAdQe66Jhy2/eyR3dssRAZ+oJsV6SzU20x3m2yd0gmMaXzO1iV3gwYhY+g==} + peerDependencies: + '@deepseek-ai/cordis': ^4.0.1 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-agent-presets': ^0.1.0-rc.8 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-jobs': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-sandbox': ^0.1.0-rc.8 + '@deepseek-ai/dsh-sandbox-policy': ^0.1.0-rc.8 + '@deepseek-ai/dsh-scope': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-persistence': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-projection-cache': ^0.1.0-rc.8 + '@deepseek-ai/dsh-tools': ^0.1.0-rc.8 + '@deepseek-ai/dsh-user-approval': ^0.1.0-rc.8 peerDependenciesMeta: '@deepseek-ai/dsh-agent-presets': optional: true @@ -836,85 +934,101 @@ packages: '@deepseek-ai/dsh-user-approval': optional: true - '@deepseek-ai/dsh-system-prompt@0.1.0-rc.7': - resolution: {integrity: sha512-Rair2ZkzgoIIr+UstYVYeqeUgORNPIW1LNcsXz3Zjglx4FGjsmzs0UALdNYvSBpBvCLNmt4E6+XQIrBbS/s9jw==} + '@deepseek-ai/dsh-subprocess@0.1.0-rc.8': + resolution: {integrity: sha512-rTWwWCq/WrBTjaXhApu7gaho6UHwMZq0+l7nZ06YMUreNZoCHfg67pAXopMqTgr/iotphmXQdChrLgBabzL1gA==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-scope': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-timeout@0.1.0-rc.7': - resolution: {integrity: sha512-Ufl9G7zP7Tky/zkXscavEiolEfAwutfbPeLb5sUU/tPQlDykhh1NwGrarNJ11fdR723zmA/3co4LgxtDtWCOEQ==} + '@deepseek-ai/dsh-system-prompt@0.1.0-rc.8': + resolution: {integrity: sha512-yk8Z85rzX2EwpKNWA5i+K3I3mqsIIUc9niwbDpXO8vlHvpC2qR3RNHjJIJN2EZYDqfSzTVtkbxHFsuMzDXIbew==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-scope': ^0.1.0-rc.8 - '@deepseek-ai/dsh-token-meter@0.1.0-rc.7': - resolution: {integrity: sha512-i2WOx26otsAt3sTFOoXjo2xsdvUyC5CAuNiJyRQoo6yn1smx+NX541clIOYdx1uneZFmV0T6bK46JpdXasxaAA==} + '@deepseek-ai/dsh-timeout@0.1.0-rc.8': + resolution: {integrity: sha512-RwOC/qHribE6b+LStAO7aAgweefLE5sqDO7Uz6/mnTDyJxCt7HNQnE/Op8sAvRa33d752aUkPfO9S0mgzVAoFQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-compaction': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-tools@0.1.0-rc.7': - resolution: {integrity: sha512-7Kq3EEv354aNcxbS0NRfxxyJiZhCsvFV/03a3MdkYO/gG2eM9+E4xQum0N2FL5bw7JiGlgw8jdLMkcNGmavEaA==} + '@deepseek-ai/dsh-token-meter@0.1.0-rc.8': + resolution: {integrity: sha512-ZcS6vuuJhoqjUrbyROuiiYk4nrvChkkYEfIoj7CjGbNArWOhbStmBaiPyahtcB1kThcnUKdu7vv7DaZJdLw8Lg==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-code-runtime': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-scope': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-system-prompt': ^0.1.0-rc.7 - '@deepseek-ai/dsh-user-approval': ^0.1.0-rc.7 + '@deepseek-ai/dsh-compaction': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.8 - '@deepseek-ai/dsh-typert-protocol@0.1.0-rc.7': - resolution: {integrity: sha512-R7qdvaRRHbz5xijoVOxueeBB/VT0eDzuQNQN4iNEBUbI/L9xG9bZutktTQlgrIlBSn1sPH4pLqiCiM6ErQPTaQ==} + '@deepseek-ai/dsh-tool-todo@0.1.0-rc.8': + resolution: {integrity: sha512-eWxwTeX5WsQPSsz1qyJq+UMiASYB5UHLdObVd4vFLYKbFOoglUK0X+Ie5OjlAkFTP+OzCQMAzUl2gJMwJPWKig==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-projection': ^0.1.0-rc.8 + '@deepseek-ai/dsh-tools': ^0.1.0-rc.8 - '@deepseek-ai/dsh-typert-registry@0.1.0-rc.7': - resolution: {integrity: sha512-7AQNJLNZTw7/5DzjbfBy4dRqr6VSwc74HBOSPpxm0zzzbmXOEqRCRzMps25IByoAeltRz1ZyY4fzN3tcYa+XwQ==} + '@deepseek-ai/dsh-tools@0.1.0-rc.8': + resolution: {integrity: sha512-tvuGAVUS4yoPW9zH7CGWJgMlAzGjfu2UlRiricldlcwSKAaJZPZx/K/YfTivUyDTER6aK1DJUnIpVG7RD/DoHQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-code-runtime': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-scope': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-system-prompt': ^0.1.0-rc.8 + '@deepseek-ai/dsh-user-approval': ^0.1.0-rc.8 - '@deepseek-ai/dsh-user-approval@0.1.0-rc.7': - resolution: {integrity: sha512-kYMpU6eg1m1BcfSC4FLWUcNH/QAE8tcu0WRkQzqzoCw8bK/Nl3dqHtd2qSVzI/emIviTulM5I230e4wPi/kuVg==} + '@deepseek-ai/dsh-typert-protocol@0.1.0-rc.8': + resolution: {integrity: sha512-scwEAefRBL7gRpaXiEdiHRMvlr8dLmUbiEvy0LOAX/8X3FZBd/5tHQ/8lCppAQNTDZMI/LSiSMpu5XrFId+7cQ==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 - '@deepseek-ai/dsh-scope': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-system-prompt': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-user-questions@0.1.0-rc.7': - resolution: {integrity: sha512-dfT6pj84lJdhrtbW2pV6hRftoKDkqx0aJevrhUhOy7Lv3CqTOheuLwwyT69Lww+n/q80Z+yp41qJq9loCkrOaw==} + '@deepseek-ai/dsh-typert-registry@0.1.0-rc.8': + resolution: {integrity: sha512-pxfRE5f1y81h2lNqj0uooYrErTVgpzKfYm4W+ppRafN5s/+1jlLIYWiG3wWD3bnxyoD2NLcTEhi/GXoaqiwdaw==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-agent': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-llm': ^0.1.0-rc.7 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 - '@deepseek-ai/dsh-workspace@0.1.0-rc.7': - resolution: {integrity: sha512-0czW0bI+uFFOS8h8eJ9SGZSdv+StEsa/+E1WEjZQXVeIOxo520Pv47dq+Z3mTyBfV8gJB+UcY0AQ3F0FddYohg==} + '@deepseek-ai/dsh-user-approval@0.1.0-rc.8': + resolution: {integrity: sha512-6SFCxp7dgNFEyzQIcs5i9C+5djgXsAeV0iKmZUCLlcIeVM1chcCMHyGcoXlw8yyB14qFMrMs+TPvhvpu2WWxAw==} peerDependencies: '@deepseek-ai/cordis': ^4.0.1 - '@deepseek-ai/dsh-brand': ^0.1.0-rc.7 - '@deepseek-ai/dsh-invariants': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session': ^0.1.0-rc.7 - '@deepseek-ai/dsh-session-persistence': ^0.1.0-rc.7 - '@deepseek-ai/dsh-storage': ^0.1.0-rc.7 - '@deepseek-ai/dsh-storage-domain': ^0.1.0-rc.7 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + '@deepseek-ai/dsh-scope': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-system-prompt': ^0.1.0-rc.8 + + '@deepseek-ai/dsh-user-questions@0.1.0-rc.8': + resolution: {integrity: sha512-kiOAlpKKfB89iObWiiVpueD4XCaday203LGUs7+eGb2isolY6VppoGb7ZmcJQqsW63bjbAA7wZeJuN3CoxcvSQ==} + peerDependencies: + '@deepseek-ai/cordis': ^4.0.1 + '@deepseek-ai/dsh-agent': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-llm': ^0.1.0-rc.8 + + '@deepseek-ai/dsh-workspace@0.1.0-rc.8': + resolution: {integrity: sha512-Uyw44WcYvXRQjb0kUstTEJmL83hkGQbWnJzglaGWcAvsZBjQHeBgKuLzOZin1yc/dRX2pKuk1InFwxKXpaHjBA==} + peerDependencies: + '@deepseek-ai/cordis': ^4.0.1 + '@deepseek-ai/dsh-brand': ^0.1.0-rc.8 + '@deepseek-ai/dsh-invariants': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session': ^0.1.0-rc.8 + '@deepseek-ai/dsh-session-persistence': ^0.1.0-rc.8 + '@deepseek-ai/dsh-storage': ^0.1.0-rc.8 + '@deepseek-ai/dsh-storage-domain': ^0.1.0-rc.8 '@deepseek-ai/schemastery@3.18.1': resolution: {integrity: sha512-Qn0FCSwCQnpnj6SB31I6i2sIKgKWnkbJM8O0EU91Gv2UsYVvtZTl6IA0sCwk2e2MZf5S8w5hpq9QkeVvK9qwxg==} @@ -1276,11 +1390,11 @@ packages: '@upsetjs/venn.js@2.0.0': resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} - '@vitest/expect@4.1.10': - resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} + '@vitest/expect@4.1.11': + resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==} - '@vitest/mocker@4.1.10': - resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} + '@vitest/mocker@4.1.11': + resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1290,20 +1404,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.10': - resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} + '@vitest/pretty-format@4.1.11': + resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==} - '@vitest/runner@4.1.10': - resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} + '@vitest/runner@4.1.11': + resolution: {integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==} - '@vitest/snapshot@4.1.10': - resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} + '@vitest/snapshot@4.1.11': + resolution: {integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==} - '@vitest/spy@4.1.10': - resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} + '@vitest/spy@4.1.11': + resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==} - '@vitest/utils@4.1.10': - resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} + '@vitest/utils@4.1.11': + resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==} '@xterm/addon-fit@0.11.0': resolution: {integrity: sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g==} @@ -2449,20 +2563,20 @@ packages: yaml: optional: true - vitest@4.1.10: - resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} + vitest@4.1.11: + resolution: {integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.10 - '@vitest/browser-preview': 4.1.10 - '@vitest/browser-webdriverio': 4.1.10 - '@vitest/coverage-istanbul': 4.1.10 - '@vitest/coverage-v8': 4.1.10 - '@vitest/ui': 4.1.10 + '@vitest/browser-playwright': 4.1.11 + '@vitest/browser-preview': 4.1.11 + '@vitest/browser-webdriverio': 4.1.11 + '@vitest/coverage-istanbul': 4.1.11 + '@vitest/coverage-v8': 4.1.11 + '@vitest/ui': 4.1.11 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2811,240 +2925,187 @@ snapshots: '@deepseek-ai/cosmokit@1.8.2': {} - '@deepseek-ai/dsh-agent-default-model@0.1.0-rc.7(1eb7ceb2998733be9eba21a37a3dc291)': + '@deepseek-ai/dsh-agent-default-model@0.1.0-rc.8(d611ebd21e3e0813c50cdd15791bd486)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-settings': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) '@deepseek-ai/schemastery': 3.18.1 - '@deepseek-ai/dsh-agent-presets@0.1.0-rc.7(c0f9f44edab94cddae92cd4b4f319bab)': + '@deepseek-ai/dsh-agent-presets@0.1.0-rc.8(20c3ff7f747776d9e6629d98881e3397)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) '@deepseek-ai/cordis-plugin-include': 1.0.6(@deepseek-ai/cordis-plugin-loader@1.0.2)(@deepseek-ai/cordis@4.0.1) '@deepseek-ai/cordis-plugin-loader': 1.0.2(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-atomic-write': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-home-paths': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-scope': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-settings': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) - '@deepseek-ai/dsh-system-prompt': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-atomic-write': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-home-paths': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-scope': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) + '@deepseek-ai/dsh-system-prompt': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) '@deepseek-ai/schemastery': 3.18.1 js-yaml: 4.3.1 - '@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08)': + '@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-scope': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-system-prompt': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-scope': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-system-prompt': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-api-gateway@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-client-connection@0.1.0-rc.7)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-registry@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))': + '@deepseek-ai/dsh-api-gateway@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-client-connection@0.1.0-rc.8)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-registry@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-client-connection': 0.1.0-rc.7(18ff0c05ab41670b8daa2e2e166479db) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-typert-registry': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-client-connection': 0.1.0-rc.8(fe206655156830a934a8c1ad4c553629) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-typert-registry': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-api-remotes@0.1.0-rc.7(022498c733cc9b813e36f108b907ce4c)': + '@deepseek-ai/dsh-api-remotes@0.1.0-rc.8(595254fcd6f0e2eefb415cb6827720e3)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-agent-presets': 0.1.0-rc.7(c0f9f44edab94cddae92cd4b4f319bab) - '@deepseek-ai/dsh-api-gateway': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-client-connection@0.1.0-rc.7)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-registry@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-commands': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-cordis-host-runner': 0.1.0-rc.7(2a80d56ba6af58ca8075e00e0fa2157b) - '@deepseek-ai/dsh-credentials': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-goal': 0.1.0-rc.7(9616cea51a4bea931c5522310292a042) - '@deepseek-ai/dsh-host-plugin-inventory': 0.1.0-rc.7(@deepseek-ai/cordis-plugin-loader@1.0.2)(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-message-feedback': 0.1.0-rc.7(1fcfefbbf5e365eda1a59fadd94056b9) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-settings': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) - '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-typert-registry': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-agent-presets': 0.1.0-rc.8(20c3ff7f747776d9e6629d98881e3397) + '@deepseek-ai/dsh-api-gateway': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-client-connection@0.1.0-rc.8)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-registry@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-commands': 0.1.0-rc.8(72bbe6fdb3741b872b5fbe4132676802) + '@deepseek-ai/dsh-cordis-host-runner': 0.1.0-rc.8(03e01c9faefddc38a366243748f7c4c9) + '@deepseek-ai/dsh-credentials': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-file-reference': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-goal': 0.1.0-rc.8(ee40b9fe89b358f0d6e7a82951758559) + '@deepseek-ai/dsh-host-plugin-inventory': 0.1.0-rc.8(@deepseek-ai/cordis-plugin-loader@1.0.2)(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-message-feedback': 0.1.0-rc.8(fa979bf26319855e9b452d904429d004) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session-reference': 0.1.0-rc.8(f51c232efade5c3623d42978a673b647) + '@deepseek-ai/dsh-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-typert-registry': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-atomic-write@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-atomic-write@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-client-connection@0.1.0-rc.7(18ff0c05ab41670b8daa2e2e166479db)': + '@deepseek-ai/dsh-client-connection@0.1.0-rc.8(fe206655156830a934a8c1ad4c553629)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-attachment': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-commands': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-host-apiproxy': 0.1.0-rc.7(227e91a6307a4a5d4a380ed795ce9271) - '@deepseek-ai/dsh-host-webserver': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-tools': 0.1.0-rc.7(38c91eb2d47c5b4ba2c8ead86dfcb4aa) + '@deepseek-ai/dsh-attachment': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-commands': 0.1.0-rc.8(72bbe6fdb3741b872b5fbe4132676802) + '@deepseek-ai/dsh-host-apiproxy': 0.1.0-rc.8(8d2dfe139bc73f2726eab881d5f42494) + '@deepseek-ai/dsh-host-webserver': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-tools': 0.1.0-rc.8(ac9081d1e007de8a90a707560a8ae1c3) '@deepseek-ai/schemastery': 3.18.1 ws: 8.21.3 transitivePeerDependencies: - - '@deepseek-ai/dsh-agent' - - '@deepseek-ai/dsh-agent-presets' - - '@deepseek-ai/dsh-api-gateway' - - '@deepseek-ai/dsh-brand' - - '@deepseek-ai/dsh-code-runtime' - - '@deepseek-ai/dsh-cordis-host-runner' - - '@deepseek-ai/dsh-host-plugin-inventory' - - '@deepseek-ai/dsh-message-feedback' - - '@deepseek-ai/dsh-sandbox' - - '@deepseek-ai/dsh-sandbox-policy' - - '@deepseek-ai/dsh-scope' - - '@deepseek-ai/dsh-storage' - - '@deepseek-ai/dsh-storage-domain' - - '@deepseek-ai/dsh-system-prompt' - - '@deepseek-ai/dsh-timeout' - - '@deepseek-ai/dsh-typert-protocol' - - '@deepseek-ai/dsh-typert-registry' - - '@deepseek-ai/dsh-user-approval' - bufferutil - utf-8-validate - '@deepseek-ai/dsh-client-locale@0.1.0-rc.7(ff15266f3c6ac85c9cb81f326da4b266)': + '@deepseek-ai/dsh-client-locale@0.1.0-rc.8(0d76f8562b3b268788250ff876a0ff04)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-api-remotes': 0.1.0-rc.7(022498c733cc9b813e36f108b907ce4c) - '@deepseek-ai/dsh-client-connection': 0.1.0-rc.7(18ff0c05ab41670b8daa2e2e166479db) - '@deepseek-ai/dsh-client-runtime': 0.1.0-rc.7(18f137ce0d99ed41b8282f4e6c952969) - '@deepseek-ai/dsh-client-ui-primitives': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-client-ui-settings': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-api-remotes@0.1.0-rc.7(022498c733cc9b813e36f108b907ce4c))(@deepseek-ai/dsh-client-connection@0.1.0-rc.7)(@deepseek-ai/dsh-client-runtime@0.1.0-rc.7(18f137ce0d99ed41b8282f4e6c952969))(@deepseek-ai/dsh-client-schema-form@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-client-ui-slots@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-settings@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1))(react@18.2.0) - '@deepseek-ai/dsh-client-ui-slots': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-settings': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) + '@deepseek-ai/dsh-api-remotes': 0.1.0-rc.8(595254fcd6f0e2eefb415cb6827720e3) + '@deepseek-ai/dsh-client-connection': 0.1.0-rc.8(fe206655156830a934a8c1ad4c553629) + '@deepseek-ai/dsh-client-runtime': 0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f) + '@deepseek-ai/dsh-client-ui-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-api-remotes@0.1.0-rc.8(595254fcd6f0e2eefb415cb6827720e3))(@deepseek-ai/dsh-client-connection@0.1.0-rc.8)(@deepseek-ai/dsh-client-runtime@0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-settings@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) '@deepseek-ai/schemastery': 3.18.1 - react: 18.2.0 - transitivePeerDependencies: - - '@deepseek-ai/dsh-brand' - '@deepseek-ai/dsh-client-runtime@0.1.0-rc.7(18f137ce0d99ed41b8282f4e6c952969)': + '@deepseek-ai/dsh-client-runtime@0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-api-remotes': 0.1.0-rc.7(022498c733cc9b813e36f108b907ce4c) - '@deepseek-ai/dsh-attachment': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-client-connection': 0.1.0-rc.7(18ff0c05ab41670b8daa2e2e166479db) - '@deepseek-ai/dsh-client-ui-slots': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-commands': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-host-apiproxy': 0.1.0-rc.7(227e91a6307a4a5d4a380ed795ce9271) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-llm-retry': 0.1.0-rc.7(f6ee553b5544017c93f5bcbec0012ce3) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-session-projection': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346)) - '@deepseek-ai/dsh-session-title': 0.1.0-rc.7(54a387d0d580a07b8dbef208df0b04c2) - '@deepseek-ai/dsh-tools': 0.1.0-rc.7(38c91eb2d47c5b4ba2c8ead86dfcb4aa) - '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-typert-registry': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-api-remotes': 0.1.0-rc.8(595254fcd6f0e2eefb415cb6827720e3) + '@deepseek-ai/dsh-attachment': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-client-connection': 0.1.0-rc.8(fe206655156830a934a8c1ad4c553629) + '@deepseek-ai/dsh-commands': 0.1.0-rc.8(72bbe6fdb3741b872b5fbe4132676802) + '@deepseek-ai/dsh-host-apiproxy': 0.1.0-rc.8(8d2dfe139bc73f2726eab881d5f42494) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-llm-retry': 0.1.0-rc.8(ff4d2d0de8af4e8b9da0c8574536c23a) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-projection': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-session-title': 0.1.0-rc.8(91b31584ff9779c6cd69a9db13c5ad7e) + '@deepseek-ai/dsh-tools': 0.1.0-rc.8(ac9081d1e007de8a90a707560a8ae1c3) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-typert-registry': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) immer: 10.1.1 - react: 18.2.0 zustand: 4.4.7(@types/react@18.3.31)(immer@10.1.1)(react@18.2.0) transitivePeerDependencies: - - '@deepseek-ai/dsh-agent-presets' - - '@deepseek-ai/dsh-api-gateway' - - '@deepseek-ai/dsh-brand' - - '@deepseek-ai/dsh-code-runtime' - - '@deepseek-ai/dsh-cordis-host-runner' - - '@deepseek-ai/dsh-host-plugin-inventory' - - '@deepseek-ai/dsh-host-webserver' - - '@deepseek-ai/dsh-message-feedback' - - '@deepseek-ai/dsh-sandbox' - - '@deepseek-ai/dsh-sandbox-policy' - - '@deepseek-ai/dsh-scope' - - '@deepseek-ai/dsh-storage' - - '@deepseek-ai/dsh-storage-domain' - - '@deepseek-ai/dsh-system-prompt' - - '@deepseek-ai/dsh-timeout' - - '@deepseek-ai/dsh-user-approval' - '@types/react' - - bufferutil - - utf-8-validate + - react - '@deepseek-ai/dsh-client-schema-form@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-client-ui-conversation@0.1.0-rc.8(c73e0406935812dd141782ed5ab5ed04)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/schemastery': 3.18.1 - - '@deepseek-ai/dsh-client-ui-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-attachment': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-client-ui-primitives': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - clsx: 2.1.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - '@deepseek-ai/dsh-brand' - - supports-color - - '@deepseek-ai/dsh-client-ui-conversation@0.1.0-rc.7(cff82baedfeff89dfa629ec31dec62d0)': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-api-remotes': 0.1.0-rc.7(022498c733cc9b813e36f108b907ce4c) - '@deepseek-ai/dsh-attachment': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-client-connection': 0.1.0-rc.7(18ff0c05ab41670b8daa2e2e166479db) - '@deepseek-ai/dsh-client-locale': 0.1.0-rc.7(ff15266f3c6ac85c9cb81f326da4b266) - '@deepseek-ai/dsh-client-runtime': 0.1.0-rc.7(18f137ce0d99ed41b8282f4e6c952969) - '@deepseek-ai/dsh-client-ui-attachment': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-client-ui-input-trigger': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-client-locale@0.1.0-rc.7(ff15266f3c6ac85c9cb81f326da4b266))(@deepseek-ai/dsh-client-runtime@0.1.0-rc.7(18f137ce0d99ed41b8282f4e6c952969))(@deepseek-ai/dsh-client-ui-primitives@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-client-ui-slots@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(react@18.2.0) - '@deepseek-ai/dsh-client-ui-primitives': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-client-ui-settings': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-api-remotes@0.1.0-rc.7(022498c733cc9b813e36f108b907ce4c))(@deepseek-ai/dsh-client-connection@0.1.0-rc.7)(@deepseek-ai/dsh-client-runtime@0.1.0-rc.7(18f137ce0d99ed41b8282f4e6c952969))(@deepseek-ai/dsh-client-schema-form@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-client-ui-slots@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-settings@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1))(react@18.2.0) - '@deepseek-ai/dsh-client-ui-slots': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-commands': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-compaction': 0.1.0-rc.7(ac3d6d77b7cdaaa87ab91cb7b4cb6c97) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm-retry': 0.1.0-rc.7(f6ee553b5544017c93f5bcbec0012ce3) - '@deepseek-ai/dsh-session-stats': 0.1.0-rc.7(162e09a00c830c72cf271bc0dbd64697) - '@deepseek-ai/dsh-settings': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) - '@deepseek-ai/dsh-token-meter': 0.1.0-rc.7(2fa39e651d6b4d00840b5133c167cc09) - '@deepseek-ai/dsh-tools': 0.1.0-rc.7(38c91eb2d47c5b4ba2c8ead86dfcb4aa) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-api-remotes': 0.1.0-rc.8(595254fcd6f0e2eefb415cb6827720e3) + '@deepseek-ai/dsh-attachment': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-client-connection': 0.1.0-rc.8(fe206655156830a934a8c1ad4c553629) + '@deepseek-ai/dsh-client-locale': 0.1.0-rc.8(0d76f8562b3b268788250ff876a0ff04) + '@deepseek-ai/dsh-client-runtime': 0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f) + '@deepseek-ai/dsh-client-ui-input-trigger': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-client-locale@0.1.0-rc.8(0d76f8562b3b268788250ff876a0ff04))(@deepseek-ai/dsh-client-runtime@0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f))(@deepseek-ai/dsh-file-reference@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-client-ui-layout': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-client-runtime@0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f))(@deepseek-ai/dsh-client-ui-theme@0.1.0-rc.8(4b5d976e800fa3962f24a2939321c7e9))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-client-ui-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-api-remotes@0.1.0-rc.8(595254fcd6f0e2eefb415cb6827720e3))(@deepseek-ai/dsh-client-connection@0.1.0-rc.8)(@deepseek-ai/dsh-client-runtime@0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-settings@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1)) + '@deepseek-ai/dsh-commands': 0.1.0-rc.8(72bbe6fdb3741b872b5fbe4132676802) + '@deepseek-ai/dsh-compaction': 0.1.0-rc.8(3cc0be3a739161751497b5d470122ec7) + '@deepseek-ai/dsh-goal': 0.1.0-rc.8(ee40b9fe89b358f0d6e7a82951758559) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm-retry': 0.1.0-rc.8(ff4d2d0de8af4e8b9da0c8574536c23a) + '@deepseek-ai/dsh-permission-presets': 0.1.0-rc.8(79092f373de8f3cb4f50c9f60514c823) + '@deepseek-ai/dsh-plan-mode': 0.1.0-rc.8(2be47fd308fbfc0e10a3ebd3a2fb2862) + '@deepseek-ai/dsh-session-stats': 0.1.0-rc.8(200e2dcb959662a87005cdf835cfa062) + '@deepseek-ai/dsh-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) + '@deepseek-ai/dsh-token-meter': 0.1.0-rc.8(526283d1ad8e7e70580fdcc3cf71a50f) + '@deepseek-ai/dsh-tool-todo': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session-projection@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))(@deepseek-ai/dsh-tools@0.1.0-rc.8(ac9081d1e007de8a90a707560a8ae1c3)) + '@deepseek-ai/dsh-tools': 0.1.0-rc.8(ac9081d1e007de8a90a707560a8ae1c3) '@deepseek-ai/schemastery': 3.18.1 clsx: 2.1.1 - react: 18.2.0 - '@deepseek-ai/dsh-client-ui-input-trigger@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-client-locale@0.1.0-rc.7(ff15266f3c6ac85c9cb81f326da4b266))(@deepseek-ai/dsh-client-runtime@0.1.0-rc.7(18f137ce0d99ed41b8282f4e6c952969))(@deepseek-ai/dsh-client-ui-primitives@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-client-ui-slots@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(react@18.2.0)': + '@deepseek-ai/dsh-client-ui-input-trigger@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-client-locale@0.1.0-rc.8(0d76f8562b3b268788250ff876a0ff04))(@deepseek-ai/dsh-client-runtime@0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f))(@deepseek-ai/dsh-file-reference@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-client-locale': 0.1.0-rc.7(ff15266f3c6ac85c9cb81f326da4b266) - '@deepseek-ai/dsh-client-runtime': 0.1.0-rc.7(18f137ce0d99ed41b8282f4e6c952969) - '@deepseek-ai/dsh-client-ui-primitives': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-client-ui-slots': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-client-locale': 0.1.0-rc.8(0d76f8562b3b268788250ff876a0ff04) + '@deepseek-ai/dsh-client-runtime': 0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f) + '@deepseek-ai/dsh-file-reference': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) clsx: 2.1.1 - react: 18.2.0 - '@deepseek-ai/dsh-client-ui-primitives@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-client-ui-layout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-client-runtime@0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f))(@deepseek-ai/dsh-client-ui-theme@0.1.0-rc.8(4b5d976e800fa3962f24a2939321c7e9))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-client-runtime': 0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f) + '@deepseek-ai/dsh-client-ui-theme': 0.1.0-rc.8(4b5d976e800fa3962f24a2939321c7e9) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + + '@deepseek-ai/dsh-client-ui-primitives@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) '@shikijs/langs': 4.4.3 '@types/mdast': 4.0.4 anser: 2.3.5 @@ -3068,137 +3129,153 @@ snapshots: transitivePeerDependencies: - supports-color - '@deepseek-ai/dsh-client-ui-settings@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-api-remotes@0.1.0-rc.7(022498c733cc9b813e36f108b907ce4c))(@deepseek-ai/dsh-client-connection@0.1.0-rc.7)(@deepseek-ai/dsh-client-runtime@0.1.0-rc.7(18f137ce0d99ed41b8282f4e6c952969))(@deepseek-ai/dsh-client-schema-form@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-client-ui-slots@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-settings@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1))(react@18.2.0)': + '@deepseek-ai/dsh-client-ui-settings@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-api-remotes@0.1.0-rc.8(595254fcd6f0e2eefb415cb6827720e3))(@deepseek-ai/dsh-client-connection@0.1.0-rc.8)(@deepseek-ai/dsh-client-runtime@0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-settings@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-api-remotes': 0.1.0-rc.7(022498c733cc9b813e36f108b907ce4c) - '@deepseek-ai/dsh-client-connection': 0.1.0-rc.7(18ff0c05ab41670b8daa2e2e166479db) - '@deepseek-ai/dsh-client-runtime': 0.1.0-rc.7(18f137ce0d99ed41b8282f4e6c952969) - '@deepseek-ai/dsh-client-schema-form': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-client-ui-slots': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-settings': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) - react: 18.2.0 + '@deepseek-ai/dsh-api-remotes': 0.1.0-rc.8(595254fcd6f0e2eefb415cb6827720e3) + '@deepseek-ai/dsh-client-connection': 0.1.0-rc.8(fe206655156830a934a8c1ad4c553629) + '@deepseek-ai/dsh-client-runtime': 0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) + '@deepseek-ai/schemastery': 3.18.1 - '@deepseek-ai/dsh-client-ui-slots@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-client-ui-slots@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-client-web-react@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-client-ui-theme@0.1.0-rc.8(4b5d976e800fa3962f24a2939321c7e9)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-client-ui-slots': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - react: 18.2.0 - use-sync-external-store: 1.2.0(react@18.2.0) + '@deepseek-ai/dsh-api-remotes': 0.1.0-rc.8(595254fcd6f0e2eefb415cb6827720e3) + '@deepseek-ai/dsh-client-connection': 0.1.0-rc.8(fe206655156830a934a8c1ad4c553629) + '@deepseek-ai/dsh-client-locale': 0.1.0-rc.8(0d76f8562b3b268788250ff876a0ff04) + '@deepseek-ai/dsh-client-runtime': 0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f) + '@deepseek-ai/dsh-client-ui-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-api-remotes@0.1.0-rc.8(595254fcd6f0e2eefb415cb6827720e3))(@deepseek-ai/dsh-client-connection@0.1.0-rc.8)(@deepseek-ai/dsh-client-runtime@0.1.0-rc.8(c133b35fb4edb8c9fc94b602ac4d589f))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-settings@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1)) + '@deepseek-ai/dsh-host-webserver': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) + '@deepseek-ai/schemastery': 3.18.1 + clsx: 2.1.1 - '@deepseek-ai/dsh-code-runtime@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-code-runtime@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-commands@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))': + '@deepseek-ai/dsh-commands@0.1.0-rc.8(72bbe6fdb3741b872b5fbe4132676802)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-scope': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-attachment': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-scope': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) zod: 4.4.3 - '@deepseek-ai/dsh-compaction@0.1.0-rc.7(ac3d6d77b7cdaaa87ab91cb7b4cb6c97)': + '@deepseek-ai/dsh-compaction@0.1.0-rc.8(3cc0be3a739161751497b5d470122ec7)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-commands': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-commands': 0.1.0-rc.8(72bbe6fdb3741b872b5fbe4132676802) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) - '@deepseek-ai/dsh-cordis-host-runner@0.1.0-rc.7(2a80d56ba6af58ca8075e00e0fa2157b)': + '@deepseek-ai/dsh-cordis-host-runner@0.1.0-rc.8(03e01c9faefddc38a366243748f7c4c9)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-scope': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-tools': 0.1.0-rc.7(38c91eb2d47c5b4ba2c8ead86dfcb4aa) - '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-scope': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-tools': 0.1.0-rc.8(ac9081d1e007de8a90a707560a8ae1c3) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) '@deepseek-ai/schemastery': 3.18.1 zod: 4.4.3 - '@deepseek-ai/dsh-credentials@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-credentials@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-goal@0.1.0-rc.7(9616cea51a4bea931c5522310292a042)': + '@deepseek-ai/dsh-file-reference@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-scope': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-session-projection': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346)) - '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + zod: 4.4.3 + + '@deepseek-ai/dsh-goal@0.1.0-rc.8(ee40b9fe89b358f0d6e7a82951758559)': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-scope': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-projection': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) '@deepseek-ai/schemastery': 3.18.1 zod: 4.4.3 - '@deepseek-ai/dsh-home-paths@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-home-paths@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-host-apiproxy@0.1.0-rc.7(227e91a6307a4a5d4a380ed795ce9271)': + '@deepseek-ai/dsh-host-apiproxy@0.1.0-rc.8(8d2dfe139bc73f2726eab881d5f42494)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-agent-default-model': 0.1.0-rc.7(1eb7ceb2998733be9eba21a37a3dc291) - '@deepseek-ai/dsh-agent-presets': 0.1.0-rc.7(c0f9f44edab94cddae92cd4b4f319bab) - '@deepseek-ai/dsh-api-remotes': 0.1.0-rc.7(022498c733cc9b813e36f108b907ce4c) - '@deepseek-ai/dsh-attachment': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-commands': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-cordis-host-runner': 0.1.0-rc.7(2a80d56ba6af58ca8075e00e0fa2157b) - '@deepseek-ai/dsh-credentials': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-goal': 0.1.0-rc.7(9616cea51a4bea931c5522310292a042) - '@deepseek-ai/dsh-host-directory-picker': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-jobs': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346)) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-native-command': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-session-projection': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346)) - '@deepseek-ai/dsh-session-projection-cache': 0.1.0-rc.7(5ae699d01eec9f3ccaa1e8c13f88dd36) - '@deepseek-ai/dsh-session-query': 0.1.0-rc.7(fa24861d08a9d735fc78888af6ddf326) - '@deepseek-ai/dsh-session-title': 0.1.0-rc.7(54a387d0d580a07b8dbef208df0b04c2) - '@deepseek-ai/dsh-settings': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) - '@deepseek-ai/dsh-skill': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-subagent': 0.1.0-rc.7(17b22c2aa5d99096c13835bb226cad51) - '@deepseek-ai/dsh-tools': 0.1.0-rc.7(38c91eb2d47c5b4ba2c8ead86dfcb4aa) - '@deepseek-ai/dsh-user-approval': 0.1.0-rc.7(6b8cefd624fd84694a941b103cc9b3fb) - '@deepseek-ai/dsh-user-questions': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))) - '@deepseek-ai/dsh-workspace': 0.1.0-rc.7(52d55750df813bb508c3c8815dfcc2bd) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-agent-default-model': 0.1.0-rc.8(d611ebd21e3e0813c50cdd15791bd486) + '@deepseek-ai/dsh-agent-presets': 0.1.0-rc.8(20c3ff7f747776d9e6629d98881e3397) + '@deepseek-ai/dsh-api-remotes': 0.1.0-rc.8(595254fcd6f0e2eefb415cb6827720e3) + '@deepseek-ai/dsh-attachment': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-commands': 0.1.0-rc.8(72bbe6fdb3741b872b5fbe4132676802) + '@deepseek-ai/dsh-cordis-host-runner': 0.1.0-rc.8(03e01c9faefddc38a366243748f7c4c9) + '@deepseek-ai/dsh-credentials': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-goal': 0.1.0-rc.8(ee40b9fe89b358f0d6e7a82951758559) + '@deepseek-ai/dsh-host-directory-picker': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-jobs': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-native-command': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session-projection': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-session-projection-cache': 0.1.0-rc.8(80a7956f091cdf0c220b226dd100fe03) + '@deepseek-ai/dsh-session-query': 0.1.0-rc.8(e87dfefb8b6f6903ab3a7d4d893e4616) + '@deepseek-ai/dsh-session-title': 0.1.0-rc.8(91b31584ff9779c6cd69a9db13c5ad7e) + '@deepseek-ai/dsh-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) + '@deepseek-ai/dsh-skill': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-subagent': 0.1.0-rc.8(52d3162df9a65923cc941f3a328408da) + '@deepseek-ai/dsh-tools': 0.1.0-rc.8(ac9081d1e007de8a90a707560a8ae1c3) + '@deepseek-ai/dsh-user-approval': 0.1.0-rc.8(380a43f4d6510c4a5dfadf54dc7f17a7) + '@deepseek-ai/dsh-user-questions': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))) + '@deepseek-ai/dsh-workspace': 0.1.0-rc.8(b22e0d48f5e81af272cd56aac64d0d48) '@deepseek-ai/schemastery': 3.18.1 fflate: 0.8.3 zod: 4.4.3 transitivePeerDependencies: - '@deepseek-ai/dsh-api-gateway' - '@deepseek-ai/dsh-code-runtime' + - '@deepseek-ai/dsh-file-reference' - '@deepseek-ai/dsh-host-plugin-inventory' - '@deepseek-ai/dsh-message-feedback' - '@deepseek-ai/dsh-sandbox' - '@deepseek-ai/dsh-sandbox-policy' - '@deepseek-ai/dsh-scope' + - '@deepseek-ai/dsh-session-reference' - '@deepseek-ai/dsh-storage' - '@deepseek-ai/dsh-storage-domain' - '@deepseek-ai/dsh-system-prompt' @@ -3206,272 +3283,364 @@ snapshots: - '@deepseek-ai/dsh-typert-protocol' - '@deepseek-ai/dsh-typert-registry' - '@deepseek-ai/dsh-host-directory-picker@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-host-directory-picker@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-host-plugin-inventory@0.1.0-rc.7(@deepseek-ai/cordis-plugin-loader@1.0.2)(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))': + '@deepseek-ai/dsh-host-plugin-inventory@0.1.0-rc.8(@deepseek-ai/cordis-plugin-loader@1.0.2)(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-typert-protocol@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) '@deepseek-ai/cordis-plugin-loader': 1.0.2(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) zod: 4.4.3 - '@deepseek-ai/dsh-host-webserver@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-host-webserver@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) '@deepseek-ai/schemastery': 3.18.1 - '@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)': + '@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) '@deepseek-ai/schemastery': 3.18.1 - '@deepseek-ai/dsh-jobs@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))': + '@deepseek-ai/dsh-jobs@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) - '@deepseek-ai/dsh-llm-retry@0.1.0-rc.7(f6ee553b5544017c93f5bcbec0012ce3)': + '@deepseek-ai/dsh-llm-retry@0.1.0-rc.8(ff4d2d0de8af4e8b9da0c8574536c23a)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-timeout': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-timeout': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) '@deepseek-ai/schemastery': 3.18.1 - '@deepseek-ai/dsh-llm@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))': + '@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-attachment': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-timeout': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-attachment': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-timeout': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) '@deepseek-ai/schemastery': 3.18.1 - '@deepseek-ai/dsh-message-feedback@0.1.0-rc.7(1fcfefbbf5e365eda1a59fadd94056b9)': + '@deepseek-ai/dsh-message-feedback@0.1.0-rc.8(fa979bf26319855e9b452d904429d004)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-storage-domain': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-storage@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-storage-domain': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-storage@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) '@deepseek-ai/schemastery': 3.18.1 zod: 4.4.3 - '@deepseek-ai/dsh-native-command@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-native-command@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-output-retention@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-session-persistence@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))': + '@deepseek-ai/dsh-permission-presets@0.1.0-rc.8(79092f373de8f3cb4f50c9f60514c823)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-timeout': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - - '@deepseek-ai/dsh-session-projection-cache@0.1.0-rc.7(5ae699d01eec9f3ccaa1e8c13f88dd36)': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-session-projection': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346)) - '@deepseek-ai/dsh-storage-domain': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-storage@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-commands': 0.1.0-rc.8(72bbe6fdb3741b872b5fbe4132676802) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-sandbox': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-sandbox-policy': 0.1.0-rc.8(89f2459a5c8f6954b5e2bd86338a89a7) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-projection': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) + '@deepseek-ai/dsh-shell': 0.1.0-rc.8(cf0ef1256d81cd604a972a35a4bab0bc) + '@deepseek-ai/dsh-user-approval': 0.1.0-rc.8(380a43f4d6510c4a5dfadf54dc7f17a7) '@deepseek-ai/schemastery': 3.18.1 zod: 4.4.3 - '@deepseek-ai/dsh-session-projection@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))': + '@deepseek-ai/dsh-plan-mode@0.1.0-rc.8(2be47fd308fbfc0e10a3ebd3a2fb2862)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - zod: 4.4.3 - - '@deepseek-ai/dsh-session-query@0.1.0-rc.7(fa24861d08a9d735fc78888af6ddf326)': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-session-title': 0.1.0-rc.7(54a387d0d580a07b8dbef208df0b04c2) - optionalDependencies: - '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - - '@deepseek-ai/dsh-session-stats@0.1.0-rc.7(162e09a00c830c72cf271bc0dbd64697)': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-session-projection': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346)) - zod: 4.4.3 - - '@deepseek-ai/dsh-session-title@0.1.0-rc.7(54a387d0d580a07b8dbef208df0b04c2)': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-session-projection': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346)) - '@deepseek-ai/schemastery': 3.18.1 - zod: 4.4.3 - - '@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346)': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-scope': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - - '@deepseek-ai/dsh-settings@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1)': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/schemastery': 3.18.1 - - '@deepseek-ai/dsh-skill@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-scope': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/schemastery': 3.18.1 - - '@deepseek-ai/dsh-storage-domain@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-storage@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-storage': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/schemastery': 3.18.1 - zod: 4.4.3 - - '@deepseek-ai/dsh-storage@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - - '@deepseek-ai/dsh-subagent@0.1.0-rc.7(17b22c2aa5d99096c13835bb226cad51)': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-scope': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-tools': 0.1.0-rc.7(38c91eb2d47c5b4ba2c8ead86dfcb4aa) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-projection': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-system-prompt': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-tools': 0.1.0-rc.8(ac9081d1e007de8a90a707560a8ae1c3) + '@deepseek-ai/dsh-user-questions': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))) zod: 4.4.3 optionalDependencies: - '@deepseek-ai/dsh-agent-presets': 0.1.0-rc.7(c0f9f44edab94cddae92cd4b4f319bab) - '@deepseek-ai/dsh-jobs': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346)) - '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-session-projection': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346)) - '@deepseek-ai/dsh-session-projection-cache': 0.1.0-rc.7(5ae699d01eec9f3ccaa1e8c13f88dd36) - '@deepseek-ai/dsh-user-approval': 0.1.0-rc.7(6b8cefd624fd84694a941b103cc9b3fb) + '@deepseek-ai/dsh-commands': 0.1.0-rc.8(72bbe6fdb3741b872b5fbe4132676802) - '@deepseek-ai/dsh-system-prompt@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))': + '@deepseek-ai/dsh-sandbox-policy@0.1.0-rc.8(89f2459a5c8f6954b5e2bd86338a89a7)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-scope': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-sandbox': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-system-prompt': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) '@deepseek-ai/schemastery': 3.18.1 - '@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': + '@deepseek-ai/dsh-sandbox@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) - '@deepseek-ai/dsh-token-meter@0.1.0-rc.7(2fa39e651d6b4d00840b5133c167cc09)': + '@deepseek-ai/dsh-scope@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-compaction': 0.1.0-rc.7(ac3d6d77b7cdaaa87ab91cb7b4cb6c97) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-session-projection': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + + '@deepseek-ai/dsh-session-persistence@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-timeout': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + + '@deepseek-ai/dsh-session-projection-cache@0.1.0-rc.8(80a7956f091cdf0c220b226dd100fe03)': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session-projection': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-storage-domain': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-storage@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) '@deepseek-ai/schemastery': 3.18.1 zod: 4.4.3 - '@deepseek-ai/dsh-tools@0.1.0-rc.7(38c91eb2d47c5b4ba2c8ead86dfcb4aa)': + '@deepseek-ai/dsh-session-projection@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-code-runtime': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-scope': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-system-prompt': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-user-approval': 0.1.0-rc.7(6b8cefd624fd84694a941b103cc9b3fb) - '@deepseek-ai/schemastery': 3.18.1 - - '@deepseek-ai/dsh-typert-protocol@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - - '@deepseek-ai/dsh-typert-registry@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))': - dependencies: - '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) zod: 4.4.3 - '@deepseek-ai/dsh-user-approval@0.1.0-rc.7(6b8cefd624fd84694a941b103cc9b3fb)': + '@deepseek-ai/dsh-session-query@0.1.0-rc.8(e87dfefb8b6f6903ab3a7d4d893e4616)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-scope': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-system-prompt': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-title': 0.1.0-rc.8(91b31584ff9779c6cd69a9db13c5ad7e) + optionalDependencies: + '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + + '@deepseek-ai/dsh-session-reference@0.1.0-rc.8(f51c232efade5c3623d42978a673b647)': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-compaction': 0.1.0-rc.8(3cc0be3a739161751497b5d470122ec7) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-output-retention': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-query': 0.1.0-rc.8(e87dfefb8b6f6903ab3a7d4d893e4616) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/schemastery': 3.18.1 + zod: 4.4.3 + + '@deepseek-ai/dsh-session-stats@0.1.0-rc.8(200e2dcb959662a87005cdf835cfa062)': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-projection': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + zod: 4.4.3 + + '@deepseek-ai/dsh-session-title@0.1.0-rc.8(91b31584ff9779c6cd69a9db13c5ad7e)': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-projection': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/schemastery': 3.18.1 + zod: 4.4.3 + + '@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-scope': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + + '@deepseek-ai/dsh-settings@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1)': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) '@deepseek-ai/schemastery': 3.18.1 - '@deepseek-ai/dsh-user-questions@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))))': + '@deepseek-ai/dsh-shell@0.1.0-rc.8(cf0ef1256d81cd604a972a35a4bab0bc)': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-agent': 0.1.0-rc.7(1e28fca6adb316c000fd361f8e5f3a08) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-llm': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-sandbox': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-settings': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/schemastery@3.18.1) + '@deepseek-ai/dsh-subprocess': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-workspace@0.1.0-rc.7(52d55750df813bb508c3c8815dfcc2bd)': + '@deepseek-ai/dsh-skill@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))': dependencies: '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) - '@deepseek-ai/dsh-brand': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-invariants': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1) - '@deepseek-ai/dsh-session': 0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346) - '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.7(1dcde9bfc9fa0140c66648fbcb67b346))(@deepseek-ai/dsh-timeout@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) - '@deepseek-ai/dsh-storage': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)) - '@deepseek-ai/dsh-storage-domain': 0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-storage@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.7(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-scope': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/schemastery': 3.18.1 + + '@deepseek-ai/dsh-storage-domain@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-storage@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-storage': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/schemastery': 3.18.1 + zod: 4.4.3 + + '@deepseek-ai/dsh-storage@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + + '@deepseek-ai/dsh-subagent@0.1.0-rc.8(52d3162df9a65923cc941f3a328408da)': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-scope': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-tools': 0.1.0-rc.8(ac9081d1e007de8a90a707560a8ae1c3) + zod: 4.4.3 + optionalDependencies: + '@deepseek-ai/dsh-agent-presets': 0.1.0-rc.8(20c3ff7f747776d9e6629d98881e3397) + '@deepseek-ai/dsh-jobs': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-sandbox': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-sandbox-policy': 0.1.0-rc.8(89f2459a5c8f6954b5e2bd86338a89a7) + '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session-projection': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-session-projection-cache': 0.1.0-rc.8(80a7956f091cdf0c220b226dd100fe03) + '@deepseek-ai/dsh-user-approval': 0.1.0-rc.8(380a43f4d6510c4a5dfadf54dc7f17a7) + + '@deepseek-ai/dsh-subprocess@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + + '@deepseek-ai/dsh-system-prompt@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-scope': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/schemastery': 3.18.1 + + '@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + + '@deepseek-ai/dsh-token-meter@0.1.0-rc.8(526283d1ad8e7e70580fdcc3cf71a50f)': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-compaction': 0.1.0-rc.8(3cc0be3a739161751497b5d470122ec7) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-projection': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/schemastery': 3.18.1 + zod: 4.4.3 + + '@deepseek-ai/dsh-tool-todo@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session-projection@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))(@deepseek-ai/dsh-tools@0.1.0-rc.8(ac9081d1e007de8a90a707560a8ae1c3))': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-projection': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293)) + '@deepseek-ai/dsh-tools': 0.1.0-rc.8(ac9081d1e007de8a90a707560a8ae1c3) + '@deepseek-ai/schemastery': 3.18.1 + zod: 4.4.3 + + '@deepseek-ai/dsh-tools@0.1.0-rc.8(ac9081d1e007de8a90a707560a8ae1c3)': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-code-runtime': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-scope': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-system-prompt': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-user-approval': 0.1.0-rc.8(380a43f4d6510c4a5dfadf54dc7f17a7) + '@deepseek-ai/schemastery': 3.18.1 + + '@deepseek-ai/dsh-typert-protocol@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + + '@deepseek-ai/dsh-typert-registry@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-typert-protocol': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + zod: 4.4.3 + + '@deepseek-ai/dsh-user-approval@0.1.0-rc.8(380a43f4d6510c4a5dfadf54dc7f17a7)': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-scope': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-system-prompt': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))(@deepseek-ai/dsh-scope@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/schemastery': 3.18.1 + + '@deepseek-ai/dsh-user-questions@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-agent@0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-llm@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))))': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-agent': 0.1.0-rc.8(92f269661ea5e195fab72177f1a12db7) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-llm': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-attachment@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + + '@deepseek-ai/dsh-workspace@0.1.0-rc.8(b22e0d48f5e81af272cd56aac64d0d48)': + dependencies: + '@deepseek-ai/cordis': 4.0.1(@deepseek-ai/cordis-plugin-include@1.0.6)(@deepseek-ai/cordis-plugin-loader@1.0.2) + '@deepseek-ai/dsh-brand': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-invariants': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1) + '@deepseek-ai/dsh-session': 0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293) + '@deepseek-ai/dsh-session-persistence': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-brand@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)))(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-session@0.1.0-rc.8(fbdb1d988541b64ff002d18c4ded7293))(@deepseek-ai/dsh-timeout@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) + '@deepseek-ai/dsh-storage': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)) + '@deepseek-ai/dsh-storage-domain': 0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))(@deepseek-ai/dsh-storage@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1)(@deepseek-ai/dsh-invariants@0.1.0-rc.8(@deepseek-ai/cordis@4.0.1))) zod: 4.4.3 '@deepseek-ai/schemastery@3.18.1': @@ -3855,44 +4024,44 @@ snapshots: d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) - '@vitest/expect@4.1.10': + '@vitest/expect@4.1.11': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.10 - '@vitest/utils': 4.1.10 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 chai: 6.2.2 tinyrainbow: 3.1.1 - '@vitest/mocker@4.1.10(vite@8.2.1(@types/node@24.13.3))': + '@vitest/mocker@4.1.11(vite@8.2.1(@types/node@24.13.3))': dependencies: - '@vitest/spy': 4.1.10 + '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 8.2.1(@types/node@24.13.3) - '@vitest/pretty-format@4.1.10': + '@vitest/pretty-format@4.1.11': dependencies: tinyrainbow: 3.1.1 - '@vitest/runner@4.1.10': + '@vitest/runner@4.1.11': dependencies: - '@vitest/utils': 4.1.10 + '@vitest/utils': 4.1.11 pathe: 2.0.3 - '@vitest/snapshot@4.1.10': + '@vitest/snapshot@4.1.11': dependencies: - '@vitest/pretty-format': 4.1.10 - '@vitest/utils': 4.1.10 + '@vitest/pretty-format': 4.1.11 + '@vitest/utils': 4.1.11 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.10': {} + '@vitest/spy@4.1.11': {} - '@vitest/utils@4.1.10': + '@vitest/utils@4.1.11': dependencies: - '@vitest/pretty-format': 4.1.10 + '@vitest/pretty-format': 4.1.11 convert-source-map: 2.0.0 tinyrainbow: 3.1.1 @@ -5114,15 +5283,15 @@ snapshots: '@types/node': 24.13.3 fsevents: 2.3.3 - vitest@4.1.10(@types/node@24.13.3)(jsdom@29.1.1)(vite@8.2.1(@types/node@24.13.3)): + vitest@4.1.11(@types/node@24.13.3)(jsdom@29.1.1)(vite@8.2.1(@types/node@24.13.3)): dependencies: - '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.2.1(@types/node@24.13.3)) - '@vitest/pretty-format': 4.1.10 - '@vitest/runner': 4.1.10 - '@vitest/snapshot': 4.1.10 - '@vitest/spy': 4.1.10 - '@vitest/utils': 4.1.10 + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(vite@8.2.1(@types/node@24.13.3)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 es-module-lexer: 2.3.2 expect-type: 1.4.0 magic-string: 0.30.21 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 61564c0..3215c13 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,6 +9,7 @@ allowBuilds: protobufjs: true minimumReleaseAgeExclude: + - '@deepseek-ai/*' - '@deepseek-ai/cordis-plugin-include@1.0.5-rc.1' - '@deepseek-ai/cordis-plugin-loader@1.0.1-rc.1' - '@deepseek-ai/cordis@4.0.1-rc.1' @@ -69,62 +70,4 @@ minimumReleaseAgeExclude: - '@deepseek-ai/cordis-plugin-loader@1.0.2' - '@deepseek-ai/cordis@4.0.1' - '@deepseek-ai/cosmokit@1.8.2' - - '@deepseek-ai/dsh-agent-default-model@0.1.0-rc.7' - - '@deepseek-ai/dsh-agent-presets@0.1.0-rc.7' - - '@deepseek-ai/dsh-agent@0.1.0-rc.7' - - '@deepseek-ai/dsh-api-gateway@0.1.0-rc.7' - - '@deepseek-ai/dsh-api-remotes@0.1.0-rc.7' - - '@deepseek-ai/dsh-atomic-write@0.1.0-rc.7' - - '@deepseek-ai/dsh-attachment@0.1.0-rc.7' - - '@deepseek-ai/dsh-brand@0.1.0-rc.7' - - '@deepseek-ai/dsh-client-connection@0.1.0-rc.7' - - '@deepseek-ai/dsh-client-locale@0.1.0-rc.7' - - '@deepseek-ai/dsh-client-runtime@0.1.0-rc.7' - - '@deepseek-ai/dsh-client-schema-form@0.1.0-rc.7' - - '@deepseek-ai/dsh-client-ui-attachment@0.1.0-rc.7' - - '@deepseek-ai/dsh-client-ui-conversation@0.1.0-rc.7' - - '@deepseek-ai/dsh-client-ui-input-trigger@0.1.0-rc.7' - - '@deepseek-ai/dsh-client-ui-primitives@0.1.0-rc.7' - - '@deepseek-ai/dsh-client-ui-settings@0.1.0-rc.7' - - '@deepseek-ai/dsh-client-ui-slots@0.1.0-rc.7' - - '@deepseek-ai/dsh-client-web-react@0.1.0-rc.7' - - '@deepseek-ai/dsh-code-runtime@0.1.0-rc.7' - - '@deepseek-ai/dsh-commands@0.1.0-rc.7' - - '@deepseek-ai/dsh-compaction@0.1.0-rc.7' - - '@deepseek-ai/dsh-cordis-host-runner@0.1.0-rc.7' - - '@deepseek-ai/dsh-credentials@0.1.0-rc.7' - - '@deepseek-ai/dsh-goal@0.1.0-rc.7' - - '@deepseek-ai/dsh-home-paths@0.1.0-rc.7' - - '@deepseek-ai/dsh-host-apiproxy@0.1.0-rc.7' - - '@deepseek-ai/dsh-host-directory-picker@0.1.0-rc.7' - - '@deepseek-ai/dsh-host-plugin-inventory@0.1.0-rc.7' - - '@deepseek-ai/dsh-host-webserver@0.1.0-rc.7' - - '@deepseek-ai/dsh-invariants@0.1.0-rc.7' - - '@deepseek-ai/dsh-jobs@0.1.0-rc.7' - - '@deepseek-ai/dsh-llm-retry@0.1.0-rc.7' - - '@deepseek-ai/dsh-llm@0.1.0-rc.7' - - '@deepseek-ai/dsh-message-feedback@0.1.0-rc.7' - - '@deepseek-ai/dsh-native-command@0.1.0-rc.7' - - '@deepseek-ai/dsh-scope@0.1.0-rc.7' - - '@deepseek-ai/dsh-session-persistence@0.1.0-rc.7' - - '@deepseek-ai/dsh-session-projection-cache@0.1.0-rc.7' - - '@deepseek-ai/dsh-session-projection@0.1.0-rc.7' - - '@deepseek-ai/dsh-session-query@0.1.0-rc.7' - - '@deepseek-ai/dsh-session-stats@0.1.0-rc.7' - - '@deepseek-ai/dsh-session-title@0.1.0-rc.7' - - '@deepseek-ai/dsh-session@0.1.0-rc.7' - - '@deepseek-ai/dsh-settings@0.1.0-rc.7' - - '@deepseek-ai/dsh-skill@0.1.0-rc.7' - - '@deepseek-ai/dsh-storage-domain@0.1.0-rc.7' - - '@deepseek-ai/dsh-storage@0.1.0-rc.7' - - '@deepseek-ai/dsh-subagent@0.1.0-rc.7' - - '@deepseek-ai/dsh-system-prompt@0.1.0-rc.7' - - '@deepseek-ai/dsh-timeout@0.1.0-rc.7' - - '@deepseek-ai/dsh-token-meter@0.1.0-rc.7' - - '@deepseek-ai/dsh-tools@0.1.0-rc.7' - - '@deepseek-ai/dsh-typert-protocol@0.1.0-rc.7' - - '@deepseek-ai/dsh-typert-registry@0.1.0-rc.7' - - '@deepseek-ai/dsh-user-approval@0.1.0-rc.7' - - '@deepseek-ai/dsh-user-questions@0.1.0-rc.7' - - '@deepseek-ai/dsh-workspace@0.1.0-rc.7' - '@deepseek-ai/schemastery@3.18.1' diff --git a/src/agent-pty.ts b/src/agent-pty.ts index ce54ca3..7e4030e 100644 --- a/src/agent-pty.ts +++ b/src/agent-pty.ts @@ -214,10 +214,12 @@ export class AgentPtyRegistry { cwd: string, cols = 80, rows = 24, + shell?: string, + shellArgs?: string[], ): string { const uuid = randomUUID() const dims = clampDims(cols, rows) - const pty = this.nodePty.spawn(this.shell, shellSpawnArgs(this.shellArgs), { + const pty = this.nodePty.spawn(shell ?? this.shell, shellSpawnArgs(shellArgs ?? this.shellArgs), { name: 'xterm-256color', cols: dims.cols, rows: dims.rows, diff --git a/src/client/SideCardSection.module.css b/src/client/SideCardSection.module.css index ae47045..293307c 100644 --- a/src/client/SideCardSection.module.css +++ b/src/client/SideCardSection.module.css @@ -713,3 +713,83 @@ transition: none; } } + +/* The managing plugin's identity badge: name + version pill, token-driven + (labels via --dsw-alias-label-*, surface via --dsw-alias-bg-layer-2). */ +.versionBadge { + display: inline-flex; + align-items: center; + gap: 8px; + align-self: flex-start; + padding: 4px 12px 4px 14px; + border-radius: 999px; + border: 1px solid var(--dsw-alias-border-l2); + background: var(--dsw-alias-bg-layer-2); + font-size: 12px; + line-height: 18px; +} + +.versionBadgeName { + color: var(--dsw-alias-label-primary); + font-weight: 600; +} + +.versionBadgeTag { + padding: 1px 8px; + border-radius: 999px; + background: var(--dsw-alias-accent-soft, var(--dsw-alias-border-l2)); + color: var(--dsw-alias-label-secondary); + font-variant-numeric: tabular-nums; +} + +/* Catalog search input: a compact text field above the list (token-driven). + The entries list below it scrolls INDEPENDENTLY — with many plugins the + modal stays navigable instead of growing unbounded. */ +.pluginSearch { + width: 100%; + box-sizing: border-box; + appearance: none; + border: 1px solid var(--dsw-alias-border-l2); + border-radius: 8px; + padding: 6px 10px; + font: inherit; + font-size: 12px; + line-height: 18px; + color: var(--dsw-alias-label-primary); + background: var(--dsw-alias-bg-layer-1); +} + +.pluginSearch::placeholder { + color: var(--dsw-alias-label-tertiary); +} + +.pluginSearch:focus-visible { + outline: 2px solid var(--dsw-alias-border-l4); + outline-offset: 1px; +} + +/* The entries area scrolls within the modal once the catalog grows past + the viewport (max-height + own scrollbar keeps the modal shell fixed). */ +.pluginEntries { + display: flex; + flex-direction: column; + gap: 10px; + max-height: 46vh; + overflow-y: auto; + padding-right: 2px; +} + +/* One catalog group: optional category heading above its stacked entries. */ +.pluginGroup { + display: flex; + flex-direction: column; + gap: 8px; +} + +.pluginGroupHeading { + font-size: 12px; + line-height: 18px; + font-weight: 600; + color: var(--dsw-alias-label-secondary); + padding: 2px 2px 0; +} diff --git a/src/client/SideCardSection.tsx b/src/client/SideCardSection.tsx index 1da35d3..4da11c7 100644 --- a/src/client/SideCardSection.tsx +++ b/src/client/SideCardSection.tsx @@ -736,6 +736,15 @@ export function SideCardSection({ store, service }: SideCardSectionProps) {

{t('settingsIntro')}

+ {/* The managing plugin's own identity: name + version badge, so the + section is attributable at a glance (the version is the service + instance's, kept in lockstep with package.json by + tests/service.spec.ts). */} +
+ DSH-better-sidebar + v{service.version} +
+ {/* 常规: the DSH settings-row recipe — title/desc left, control right. */}
{t('settingsGeneralTitle')}
diff --git a/src/client/Sidebar.tsx b/src/client/Sidebar.tsx index 5773559..887e3a3 100644 --- a/src/client/Sidebar.tsx +++ b/src/client/Sidebar.tsx @@ -1,16 +1,19 @@ /** - * The sidebar shell: fixed-position panels portalled onto document.body - * (the core AppFrame owns the left sidebar / center / details columns and - * has no right-side hole for plugins). The right panel hosts the original - * workbench; the bottom panel hosts a second, independent workbench. The - * bottom panel squeezes ONLY the center column (the agent output area): it - * spans from the app shell's own left sidebar to the right panel's left - * edge, so neither sidebar gives up any position (the right panel keeps its - * full height). A persistent two-button cluster at the top-right corner - * toggles each panel; the right panel's width drags from its left edge, the - * bottom panel's height from its top edge, and the shared corner drags both - * at once. The whole layout lives in the per-session store, so switching - * conversations swaps the sidebar. + * The sidebar shell: panels mounted inside the unified panel host — a + * fixed, viewport-sized containing block ([data-dsh-panel-host]) appended + * to document.body — instead of individual fixed-position elements, so a + * desktop shell's intermediate wrapper transforms can never hijack the + * panels' fixed containing block (the core AppFrame owns the left sidebar / + * center / details columns and has no right-side hole for plugins). The + * right panel hosts the original workbench; the bottom panel hosts a + * second, independent workbench. The bottom panel squeezes ONLY the center + * column (the agent output area): it spans from the app shell's own left + * sidebar to the right panel's left edge, so neither sidebar gives up any + * position (the right panel keeps its full height). A persistent two-button + * cluster at the top-right corner toggles each panel; the right panel's + * width drags from its left edge, the bottom panel's height from its top + * edge, and the shared corner drags both at once. The whole layout lives in + * the per-session store, so switching conversations swaps the sidebar. * * The shell binds the workbench actions to the store and dispatches tab * content to the views. New tabs come from the + menu (explorer / git / @@ -40,6 +43,7 @@ import { import { IconPanelBottomOutline16, IconPanelRightOutline16 } from './icons.tsx' import { Workbench, type WorkbenchActions } from './split-pane.tsx' import { useNarrowViewport } from './breakpoints.ts' +import { parseDesktopEnv } from './desktop-env.ts' import type { NewTabOption } from './TabBar.tsx' import type { TabDragPayload } from './TabBar.tsx' import { relativeTo } from './paths.ts' @@ -137,6 +141,37 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { // keep living in the right tree. const narrow = useNarrowViewport() + // On-screen keyboard / visual-viewport inset (mobile, split-screen, …): + // when the visual viewport shrinks below the layout viewport, bottom- + // anchored panels would hide under the keyboard. Track the inset and + // offset the bottom-anchored surfaces by it. The obscured bottom strip is + // innerHeight − (vv.height + vv.offsetTop): offsetTop is nonzero while + // the visual viewport is scrolled/zoomed under browser chrome, so + // omitting it would over-lift the panels (CR #232 P2). offsetTop changes + // through the viewport's scroll event too, so both events are listened. + // Guarded: browsers without visualViewport (older WebViews, jsdom) stay + // at 0. rAF-throttled, same pattern as useNarrowViewport. + const [keyboardInset, setKeyboardInset] = useState(0) + useEffect(() => { + const vv = window.visualViewport + if (vv === null || vv === undefined) return + let frame: number | null = null + const measure = (): void => { + frame = null + const inset = Math.max(0, window.innerHeight - (vv.height + vv.offsetTop)) + setKeyboardInset(inset > 1 ? Math.round(inset) : 0) + } + const onResize = (): void => { if (frame === null) frame = requestAnimationFrame(measure) } + vv.addEventListener('resize', onResize) + vv.addEventListener('scroll', onResize) + measure() + return () => { + vv.removeEventListener('resize', onResize) + vv.removeEventListener('scroll', onResize) + if (frame !== null) cancelAnimationFrame(frame) + } + }, []) + // Current conversation (the sessions list feed). const sessionList = useSyncExternalStore( useMemo(() => (callback: () => void) => ctx.sessions.list.subscribe(callback), [ctx]), @@ -169,16 +204,23 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { // Position compatibility mode (titleBarCompat pref): Windows frameless // windows draw the native title bar (minimize/maximize/close) at the - // window's top-right corner, OVER the web content. When the user enables - // the pref, the body attribute lets sidebar.module.css drop the toggle - // cluster below the strip and push the right panel's content below it. - // The strip height is user-tunable (titleBarStripPx) and rides a CSS - // variable so the rules stay declarative. The attribute rides the + // window's top-right corner, OVER the web content. When enabled, the body + // attribute lets sidebar.module.css drop the toggle cluster below the + // strip and push the right panel's content below it. Auto-enabled in the + // win32 advanced desktop shell (the shell stamps the URL — see + // desktop-env.ts — and reserves a 32px overlay for the window controls); + // the manual pref and its strip height still win when the user sets them, + // and the manual switch only ever ADDS compat. The strip height rides a + // CSS variable so the rules stay declarative; the attribute rides the // snapshot's prefs, so flipping the setting re-renders and re-applies // immediately; the cleanup removes both on unmount/boundary swap so a // crashed sidebar never leaves them behind. - const titleBarCompat = snapshot.prefs.titleBarCompat - const titleBarStrip = snapshot.prefs.titleBarStripPx + const desktopEnv = parseDesktopEnv() + const autoTitleBarCompat = desktopEnv.win32OverlayTop > 0 + const titleBarCompat = snapshot.prefs.titleBarCompat || autoTitleBarCompat + const titleBarStrip = snapshot.prefs.titleBarCompat + ? snapshot.prefs.titleBarStripPx + : desktopEnv.win32OverlayTop useEffect(() => { const root = document.documentElement if (titleBarCompat) { @@ -415,13 +457,28 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { const watcher = new MutationObserver(locate) const root = document.getElementById('root') if (root !== null) watcher.observe(root, { childList: true }) + // The layout push writes --dsh-sidebar-* on . A HMR re-activation + // clears those variables on teardown and re-writes them on setup — and + // that is also the moment the shell may have re-created the center + // column under a REUSED #root child (React swaps nodes in place, so + // #root's childList never changes and the watcher above never fires). + // Watching 's style attribute catches that re-sync: the push + // rewrite re-locates and re-measures, so the bottom panel recovers + // instead of staying hidden on a stale {0,0} center rect. + const htmlStyleWatcher = new MutationObserver(locate) + htmlStyleWatcher.observe(document.documentElement, { attributes: true, attributeFilter: ['style'] }) return () => { disposed = true observer?.disconnect() watcher.disconnect() + htmlStyleWatcher.disconnect() centerColRef.current = null } - }, [measureCenter]) + // Opening the bottom panel re-runs the whole locate/measure chain: a + // panel opened before the center column was ever found must not stay + // invisible forever (the HMR recovery path depends on the observers + // above, this is the belt-and-braces retry for the open moment itself). + }, [measureCenter, state?.bottomOpen]) /** * Bottom-panel first-expansion auto terminal: the FIRST time the user @@ -486,10 +543,24 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { const clampHeight = (height: number): number => Math.min(Math.max(BOTTOM_MIN, Math.round(height)), Math.max(BOTTOM_MIN, window.innerHeight - PANEL_MIN)) + /** Single writer for the layout-push variables: the app shell gives up + * the panel's width/height while open (0 while collapsed) through + * layout.css's margins. Every size change — drag frames and committed + * state — flows through here so the push never forks between paths. */ + const writeGeometry = (width: number, height: number): void => { + document.documentElement.style.setProperty('--dsh-sidebar-width', `${width}px`) + document.documentElement.style.setProperty('--dsh-sidebar-height', `${height}px`) + // The corner handle positions itself relative to the panel (CSS + // `bottom: calc(var(--dsh-sidebar-height) + 6px)`), so these two layout + // variables are all it needs — no viewport coordinates written here + // (issue #106: skins that inset the panels must not fight JS coords). + } + /** Apply a drag size to the DOM without touching React state or the store. * The bottom panel's right edge tracks the right panel's left edge HERE * too — React state only updates on release, so the inline right must be - * written directly or the bottom panel would lag the sidebar mid-drag. */ + * written directly or the bottom panel would lag the sidebar mid-drag. + * The layout push rides the shared writer (writeGeometry). */ const applyDrag = (width: number, height: number): void => { panelRef.current?.style.setProperty('width', `${width}px`) bottomRef.current?.style.setProperty('height', `${height}px`) @@ -498,12 +569,7 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { // `width + detailsWidth` — derived from the measured column, keeping the // drag write-only (no React re-render mid-drag). bottomRef.current?.style.setProperty('right', `${(window.innerWidth - centerRect.right) + (width - (state?.width ?? 0))}px`) - document.documentElement.style.setProperty('--dsh-sidebar-width', `${width}px`) - document.documentElement.style.setProperty('--dsh-sidebar-height', `${height}px`) - // The corner handle positions itself relative to the panel (CSS - // `bottom: calc(var(--dsh-sidebar-height) + 6px)`), so these two layout - // variables are all it needs — no viewport coordinates written here - // (issue #106: skins that inset the panels must not fight JS coords). + writeGeometry(width, height) } // Drags write at most once per frame: pointer events fire several times @@ -535,23 +601,88 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { pendingDrag.current = null } + /** + * Finalize a drag on pointer up: flush the LAST drag frame to the DOM + * synchronously, then commit the SAME clamped values to the store. A fast + * release cancels the rAF before it ran — without the flush the DOM would + * sit at the pre-drag size until React re-renders with the committed + * value, and a value that never made it into a move handler would never + * be applied at all. The measurement pause ends here too: the center + * column is re-measured BEFORE the committed re-render lands, so the + * bottom panel's React-rendered right edge already reflects the new + * width (otherwise the re-render would re-apply the stale rect — the + * bottom panel visibly jumps for one frame). + */ + const commitDrag = ( + width: number, + height: number, + reduce: (state: SidebarState) => SidebarState, + ): void => { + stopDragScheduling() + applyDrag(width, height) + draggingRef.current = false + measureCenter() + store.reduce(reduce) + } + /** Set once a drag's pointerup handler commits — premature capture loss * (pointercancel / lostpointercapture without pointerup) must then be told * apart from a normal release. */ const dragCommitted = useRef(false) - /** Abort a drag whose pointer stream was interrupted (pointercancel, or - * capture lost before pointerup): no pointerup will arrive, so without - * this the dragging state would stick true and center-column measurement - * would stay paused forever — the bottom panel freezes at stale edges and - * stops tracking sidebar/app-rail layout changes. Reverts the DOM and the - * layout variables to the store's committed sizes. */ - const abortDrag = (reset: () => void): void => { + /** + * Abort a drag whose pointer stream was interrupted (pointercancel, or + * capture lost before pointerup): no pointerup will arrive, so without + * this the dragging state would stick true and center-column measurement + * would stay paused forever — the bottom panel freezes at stale edges and + * stops tracking sidebar/app-rail layout changes. + * + * A FAST release is the common trigger: browsers merge pointermove bursts, + * and an ultra-fast flick can cancel the stream before ANY move lands. + * The commit order is therefore: the LAST KNOWN dragged size (the rAF + * pending value) first, then the interrupting event's own pointer + * position (pointercancel / lostpointercapture still carry coordinates), + * and only a drag that produced neither (pure down+up at the same spot) + * reverts to the store's committed sizes. + */ + const abortDrag = (reset: () => void, event?: { clientX: number; clientY: number }): void => { if (dragCommitted.current) return - stopDragScheduling() - applyDrag( - !narrow && state?.panelOpen === true ? Math.min(state?.width ?? 0, window.innerWidth) : 0, - !narrow && state?.bottomOpen === true ? Math.min(state.bottomHeight, window.innerHeight) : 0, - ) + const pending = pendingDrag.current + let width: number | undefined + let height: number | undefined + if (pending !== null) { + width = pending.width + height = pending.height + } else if (event !== undefined) { + // No move ever landed: the cancel/lost-capture position is all we + // have — commit it (clamped) instead of rolling back the flick. + if (draggingWidth) { + width = clampWidth(widthDrag.current.startWidth + (widthDrag.current.startX - event.clientX)) + height = state?.bottomOpen === true ? Math.min(state.bottomHeight, window.innerHeight) : 0 + } else if (draggingBottom) { + width = Math.min(state?.width ?? 0, window.innerWidth) + height = clampHeight(bottomDrag.current.startHeight + (bottomDrag.current.startY - event.clientY)) + } else if (draggingCorner) { + width = clampWidth(cornerDrag.current.startWidth + (cornerDrag.current.startX - event.clientX)) + height = clampHeight(cornerDrag.current.startHeight + (cornerDrag.current.startY - event.clientY)) + } + } + if (width !== undefined && height !== undefined) { + pendingDrag.current = null + if (dragFrame.current !== null) { + cancelAnimationFrame(dragFrame.current) + dragFrame.current = null + } + applyDrag(width, height) + draggingRef.current = false + measureCenter() + store.reduce(s => setBottomHeight(setWidth(s, width), height)) + } else { + stopDragScheduling() + applyDrag( + !narrow && state?.panelOpen === true ? Math.min(state?.width ?? 0, window.innerWidth) : 0, + !narrow && state?.bottomOpen === true ? Math.min(state.bottomHeight, window.innerHeight) : 0, + ) + } reset() } @@ -569,8 +700,7 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { const height = !narrow && snapshot.state?.bottomOpen === true ? Math.min(snapshot.state.bottomHeight, window.innerHeight) : 0 - document.documentElement.style.setProperty('--dsh-sidebar-width', `${width}px`) - document.documentElement.style.setProperty('--dsh-sidebar-height', `${height}px`) + writeGeometry(width, height) // Unmount must release the push (issue #31): when the boundary swaps the // whole sidebar after a render crash (or the plugin fiber is disposed / // HMR), the CSS variables would otherwise stay on and layout.css @@ -660,19 +790,21 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { if (state === undefined || sessionId === undefined) { return ( -
- {!narrow && ( +
+
+ {!narrow && ( + + + + )} - )} - - - +
) } @@ -744,7 +876,7 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { ) return ( - <> +
{/* The persistent toggle cluster at the top-right corner: the bottom panel's button (bottom glyph) LEFT of the right panel's (side glyph). @@ -793,7 +925,13 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) {
0 ? `${keyboardInset}px` : undefined, + }} data-dragging={anyDragging || undefined} > @@ -820,8 +958,16 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { dragCommitted.current = true event.currentTarget.releasePointerCapture(event.pointerId) const { startX, startWidth } = widthDrag.current - stopDragScheduling() - store.reduce(s => setWidth(s, startWidth + (startX - event.clientX))) + // A very fast release can merge/lose pointermove bursts: + // prefer the LAST KNOWN dragged width (already clamped by + // the move handler) over the up position, which may equal + // the down position when no move landed. + const pending = pendingDrag.current + const width = pending !== null + ? pending.width + : clampWidth(startWidth + (startX - event.clientX)) + const height = state.bottomOpen ? Math.min(state.bottomHeight, window.innerHeight) : 0 + commitDrag(width, height, s => setWidth(s, width)) setDraggingWidth(false) }} onPointerCancel={() => { abortDrag(() => setDraggingWidth(false)) }} @@ -878,8 +1024,16 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { dragCommitted.current = true event.currentTarget.releasePointerCapture(event.pointerId) const { startX, startY, startWidth, startHeight } = cornerDrag.current - stopDragScheduling() - store.reduce(s => setBottomHeight(setWidth(s, startWidth + (startX - event.clientX)), startHeight + (startY - event.clientY))) + // Last known dragged size wins over the up position (fast + // releases can merge/lose pointermove bursts). + const pending = pendingDrag.current + const width = pending !== null + ? pending.width + : clampWidth(startWidth + (startX - event.clientX)) + const height = pending !== null + ? pending.height + : clampHeight(startHeight + (startY - event.clientY)) + commitDrag(width, height, s => setBottomHeight(setWidth(s, width), height)) setDraggingCorner(false) }} onPointerCancel={() => { abortDrag(() => setDraggingCorner(false)) }} @@ -896,6 +1050,13 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { down like the right panel. On NARROW viewports it does not exist — the bottom workbench lives inside the drawer (MobileWorkbench). */} + {/* The bottom panel only becomes VISIBLE once the center column is + measured: before that, `centerRect` is the {0,0} fallback and + `right` computes to the full viewport width — the panel (and its + overflow content) would flash full-width for a frame until the + first measurement lands. Rendering stays unconditional so the + mount/render chain (auto-terminal etc.) is never gated on + geometry. */} {!narrow && (
0 ? `${keyboardInset}px` : undefined, // Direct from the center column's measured right edge: the bottom // panel spans ONLY the center column, ending exactly at the // details column's left edge (the details column sits between the @@ -913,6 +1077,9 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { // (the right panel's border-left alone is covered by this panel's // fill — without it the corner looks cut off). borderRight: state.panelOpen ? '1px solid var(--dsw-alias-border-l2)' : undefined, + // Unmeasured center column → keep the panel invisible (zero-size + // geometry would flash full-width overflow instead). + visibility: centerRect.right > 0 ? undefined : 'hidden', }} data-dragging={(draggingBottom || draggingCorner) || undefined} @@ -938,8 +1105,13 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) { dragCommitted.current = true event.currentTarget.releasePointerCapture(event.pointerId) const { startY, startHeight } = bottomDrag.current - stopDragScheduling() - store.reduce(s => setBottomHeight(s, startHeight + (startY - event.clientY))) + // Last known dragged height wins over the up position (fast + // releases can merge/lose pointermove bursts). + const pending = pendingDrag.current + const height = pending !== null + ? pending.height + : clampHeight(startHeight + (startY - event.clientY)) + commitDrag(Math.min(state.width, window.innerWidth), height, s => setBottomHeight(s, height)) setDraggingBottom(false) }} onPointerCancel={() => { abortDrag(() => setDraggingBottom(false)) }} @@ -974,6 +1146,6 @@ export function Sidebar(props: { ctx: Context; store: SidebarStore }) {
)} - +
) } diff --git a/src/client/add-plugin-modal.tsx b/src/client/add-plugin-modal.tsx index 762353f..fa6351a 100644 --- a/src/client/add-plugin-modal.tsx +++ b/src/client/add-plugin-modal.tsx @@ -19,7 +19,7 @@ * Modal must never be renderToString'd (same rule as the settingsFor popup * in SideCardSection); the modal itself mounts only while open. */ -import { useState } from 'react' +import { useState, type ReactNode } from 'react' import { Modal, writeClipboard } from '@deepseek-ai/dsh-client-ui-primitives' import type { BetterSidebarService } from './service.ts' import { PLUGIN_TOPIC_URL, type PluginEntry } from './plugins-shared.ts' @@ -46,6 +46,31 @@ export function PluginListBody(props: { service: BetterSidebarService; kind: Plu const { service, kind } = props // Which entry's copy button currently shows the "已复制" feedback. const [copiedId, setCopiedId] = useState(null) + // Live catalog filter (name / id / description). A free-text search keeps + // the list usable once the catalogs grow beyond a handful of entries: + // every keystroke narrows the rendered rows, so a long catalog never + // becomes a wall of scrolling. + const [query, setQuery] = useState('') + + const catalog = catalogOf(kind) + const needle = query.trim().toLowerCase() + const matches = (entry: PluginEntry): boolean => { + if (needle === '') return true + const description = typeof entry.description === 'function' ? entry.description() : entry.description + return entry.name.toLowerCase().includes(needle) + || entry.id.toLowerCase().includes(needle) + || description.toLowerCase().includes(needle) + } + const filtered = catalog.filter(matches) + // Group by the optional category (stable order: category order of first + // appearance, uncategorized entries last under the plain list). + const groups = new Map() + for (const entry of filtered) { + const key = entry.category === undefined ? undefined : (typeof entry.category === 'function' ? entry.category() : entry.category) + const list = groups.get(key) + if (list === undefined) groups.set(key, [entry]) + else list.push(entry) + } /** Copy the entry's install script to the clipboard and flash the button's * "已复制" label for a moment. The feedback ONLY appears after a @@ -68,6 +93,48 @@ export function PluginListBody(props: { service: BetterSidebarService; kind: Plu window.open(entry.url, '_blank', 'noopener') } + /** One catalog row (extracted so the group render stays flat). */ + const renderEntry = (entry: PluginEntry): ReactNode => ( +
+
+ {/* The name is a BUTTON on the same window.open path as the + jump button: as an anchor it would be caught by the + document-capture link takeover (which ignores + target=_blank) and land in the sidebar browser. */} + + + + + +
+
+ {typeof entry.description === 'function' ? entry.description() : entry.description} +
+ {entry.install} +
+ ) + return (
+ { setQuery(event.currentTarget.value) }} + />
{t('addPluginsRecommended')} - {catalogOf(kind).length} + {filtered.length}
- {catalogOf(kind).length === 0 ? ( + {catalog.length === 0 ? (
{t('addPluginsEmpty')}
+ ) : filtered.length === 0 ? ( +
{t('addPluginsNoMatch')}
) : (
- {catalogOf(kind).map(entry => ( -
-
- {/* The name is a BUTTON on the same window.open path as the - jump button: as an anchor it would be caught by the - document-capture link takeover (which ignores - target=_blank) and land in the sidebar browser. */} - - - - - -
-
- {typeof entry.description === 'function' ? entry.description() : entry.description} -
- {entry.install} + {[...groups.entries()].map(([category, entries]) => ( +
+ {category !== undefined && ( +
{category}
+ )} + {entries.map(renderEntry)}
))}
diff --git a/src/client/builtins/tabs.tsx b/src/client/builtins/tabs.tsx index 1eca8d3..c30007e 100644 --- a/src/client/builtins/tabs.tsx +++ b/src/client/builtins/tabs.tsx @@ -185,6 +185,18 @@ export function builtinTabs(ctx: Context, options: BuiltinTabOptions = {}): read key: 'bottomPanelAutoTerminal', title: () => t('settingsBottomTerminalTitle'), desc: () => t('settingsBottomTerminalDesc'), + }, { + key: 'terminalShell', + type: 'text', + title: () => t('settingsShellTitle'), + desc: () => t('settingsShellDesc'), + placeholder: t('settingsShellPlaceholder'), + }, { + key: 'terminalShellArgs', + type: 'text', + title: () => t('settingsShellArgsTitle'), + desc: () => t('settingsShellArgsDesc'), + placeholder: t('settingsShellArgsPlaceholder'), }, { key: 'terminalFontFamily', type: 'text', diff --git a/src/client/chunk-loader.ts b/src/client/chunk-loader.ts index c355168..30f0a9a 100644 --- a/src/client/chunk-loader.ts +++ b/src/client/chunk-loader.ts @@ -29,7 +29,10 @@ * Caching contract (three layers, each with a failure path): * - In-memory: one in-flight promise per chunk, memoized until * {@link resetChunks}; a failed load removes its entry so the next call - * retries from scratch. + * retries from scratch. HMR re-activation keeps the resolved exports of + * unchanged chunks (ETag revalidation via + * {@link revalidateChunksOnReactivate}) — the next lazy open skips the + * re-inject / re-execute. * - Script execution: each re-execution overwrites the global registry slot * (assignment, never registration) — no "duplicate factory registration" * class of errors; a failed materialization clears the cache so the retry @@ -38,11 +41,13 @@ * no-cache` + ETag, 304 when unchanged), so page refreshes and HMR * re-activations never re-download a multi-MB chunk that did not change. * - * HMR: each plugin activation calls {@link resetChunks}, which drops the - * in-memory cache (and any test registry), so a hot-reloaded core bundle - * re-fetches and re-executes the current chunk scripts on the next lazy - * open. Chunk-only source edits still need a manual page refresh (the HMR - * poll watches only client.js). + * HMR: each plugin activation calls {@link revalidateChunksOnReactivate}, + * which HEADs every loaded chunk against the bundle route and keeps the + * in-memory cache for the ones whose ETag is unchanged (a hot-reloaded core + * bundle therefore does not re-execute multi-MB chunk scripts). Chunk-only + * source edits still need a manual page refresh (the HMR poll watches only + * client.js); an edit that does land while a core HMR happens is caught by + * the ETag comparison on the next activation. */ export type ChunkName = 'terminal' | 'editor' | 'mermaid' @@ -56,7 +61,12 @@ type ChunkFactory = (require: (spec: string) => unknown) => ChunkExports * The platform externals a chunk bundle may require (mirror of * CLIENT_EXTERNALS in tsdown.config.ts — the chunk builds keep these * external and the loader resolves them here). A superset is safe: the - * require only answers what the chunk actually asks for. + * require only answers what the chunk actually asks for. The shell's static + * module table seeds React, Cordis, and the UI libraries (primitives/slots); + * `dsh-client-runtime/client` normalizes onto the runtime package row + * (stripClientSuffix). dsh-client-web-react / dsh-client-schema-form were + * dropped in DSH 0.1.0-rc.8 (no rc.8 publish, nothing requires them) — the + * chunks never asked for them, so they no longer belong here. */ export const CHUNK_EXTERNALS: readonly string[] = [ 'react', @@ -65,23 +75,61 @@ export const CHUNK_EXTERNALS: readonly string[] = [ 'react-dom/client', 'cordis', '@deepseek-ai/dsh-client-ui-slots', - '@deepseek-ai/dsh-client-web-react', '@deepseek-ai/dsh-client-ui-primitives', - '@deepseek-ai/dsh-client-schema-form', '@deepseek-ai/dsh-client-runtime/client', ] /** Chunk script endpoint served by the plugin host half (src/bundle-route.ts). */ const CHUNK_URL = (name: ChunkName): string => `/sidebar/bundle/${name}.js` -/** The client module system surface this loader needs (window.__DSH_MODULES__). */ -interface ChunkModuleSystem { +/** Bound on the revalidation HEAD round-trip. A timeout fails open (drop + + * re-fetch on the next open) so a stuck bundle route can never wedge lazy + * chunk loads behind the revalidation barrier. */ +const CHUNK_REVALIDATE_TIMEOUT_MS = 5_000 + +/** + * The client module system surface this loader needs to resolve externals. + * DSH 0.1.0-rc.8 provides it as the `ctx.modules` service (no page global + * anymore); the plugin injects it at activation via + * {@link setChunkModuleSystem}. The rc.7-era `window.__DSH_MODULES__` global + * remains as a fallback so older hosts and the test harness keep working. + */ +export interface ChunkModuleSystem { import(specifier: string): Promise } -/** Resolve the shell-installed module system (set before any plugin activates). */ +/** The module system injected by the client half at activation (rc.8+). */ +let injectedModuleSystem: ChunkModuleSystem | undefined + +/** + * Plugin-owned page global carrying the injected module system across + * bundle copies: the lazy chunk bundles (client-editor.js etc.) inline their + * own chunk-loader instance, and rc.8 no longer exposes the shell module + * system as a page global — so the core bundle's injection must be visible + * to the chunk copies through a namespace of our own. + */ +const MODULE_SYSTEM_GLOBAL = '__dshSidebarModuleSystem__' + +/** + * Inject the client module system the chunk externals resolve through. + * Called by the client half's apply() with `ctx.modules` (rc.8+); pass + * undefined to clear (tests). Survives {@link resetChunks} — the module + * system is shell state, not chunk state, and stays live across HMR. + */ +export function setChunkModuleSystem(system: ChunkModuleSystem | undefined): void { + injectedModuleSystem = system + const g = globalThis as Record + if (system === undefined) delete g[MODULE_SYSTEM_GLOBAL] + else g[MODULE_SYSTEM_GLOBAL] = system +} + +/** Resolve the shell-installed module system (injected, then the plugin + * global shared with chunk-bundle copies, then the rc.7 page global). */ function moduleSystem(): ChunkModuleSystem | undefined { - return (globalThis as { __DSH_MODULES__?: ChunkModuleSystem }).__DSH_MODULES__ + const g = globalThis as Record + return injectedModuleSystem + ?? g[MODULE_SYSTEM_GLOBAL] as ChunkModuleSystem | undefined + ?? (g as { __DSH_MODULES__?: ChunkModuleSystem }).__DSH_MODULES__ } /** The plugin-owned chunk factory registry the chunk scripts populate. */ @@ -155,6 +203,35 @@ async function buildExternalsRequire(modules: ChunkModuleSystem): Promise<(spec: /** In-flight/memoized chunk loads; a failure removes its entry so a retry re-fetches. */ const cache = new Map>() +/** Chunk names whose exports are currently cached (loaded successfully). */ +const loadedChunks = new Set() + +/** ETags observed for loaded chunks (HEAD revalidation, see + * {@link revalidateChunksOnReactivate}). */ +const chunkEtags = new Map() + +/** Pending revalidation barrier: while set, {@link loadChunk} awaits it + * before serving cache (see revalidateChunksOnReactivate). */ +let revalidation: Promise | null = null + +/** Best-effort ETag capture for revalidation. The script tag itself exposes + * no response headers, so after a successful load we HEAD the bundle route + * once. Failures (including a stuck route — bounded by the timeout) are + * ignored — revalidation then fails open (re-fetch). */ +async function recordEtag(name: ChunkName): Promise { + try { + const res = await fetch(CHUNK_URL(name), { + method: 'HEAD', + cache: 'no-cache', + signal: AbortSignal.timeout(CHUNK_REVALIDATE_TIMEOUT_MS), + }) + const etag = res.headers.get('etag') + if (etag !== null && etag !== '') chunkEtags.set(name, etag) + } catch { + chunkEtags.delete(name) + } +} + /** * Load (once) and materialize a lazy chunk, returning its module exports. * Concurrent callers share one in-flight load; a failure clears the cache @@ -162,10 +239,14 @@ const cache = new Map>() * global registry slot — assignments are idempotent). * @param name - the chunk to load. */ -export function loadChunk(name: ChunkName): Promise { +export async function loadChunk(name: ChunkName): Promise { + // Barrier: never serve a cache entry that a pending revalidation is about + // to inspect — a stale chunk could otherwise render mid-HMR (CR #232 P1). + if (revalidation !== null) await revalidation const cached = cache.get(name) if (cached !== undefined) return cached - const task = (async (): Promise => { + let task: Promise + task = (async (): Promise => { const test = testLoaders.get(name) if (test !== undefined) return test() const modules = moduleSystem() @@ -178,10 +259,23 @@ export function loadChunk(name: ChunkName): Promise { throw new Error(`[dsh-better-sidebar] chunk "${name}" script did not register its factory`) } const require = await buildExternalsRequire(modules) - return factory(require) + const exports = factory(require) + // Only track production loads whose cache entry survived (a revalidation + // sweep may have dropped it mid-flight; the caller still gets these + // exports, they just are not memoized for the next open). Test-registry + // loads return above and never reach this tracking. + if (cache.get(name) !== undefined) { + loadedChunks.add(name) + void recordEtag(name) + } + return exports })() cache.set(name, task) - void task.catch(() => { cache.delete(name) }) + void task.catch(() => { + cache.delete(name) + loadedChunks.delete(name) + chunkEtags.delete(name) + }) return task } @@ -189,10 +283,69 @@ export function loadChunk(name: ChunkName): Promise { * Drop all chunk state for a fresh plugin activation (HMR-safe): clear the * in-memory cache and any test-registry entries, so the next lazy open * re-fetches and re-executes the current chunk scripts (the registry slots - * are overwritten by the re-execution — no cleanup needed). + * are overwritten by the re-execution — no cleanup needed). A pending + * revalidation barrier is cleared too: it was only guarding the cache reads + * of the state being dropped, so the next load must not wait on it (the + * orphaned task still settles and its identity-guarded `finally` no-ops). */ export function resetChunks(): void { cache.clear() + loadedChunks.clear() + chunkEtags.clear() testLoaders.clear() externalsRequire = undefined + revalidation = null +} + +/** + * HMR-safe re-activation hook (index.tsx calls this instead of a full + * reset): keep the resolved exports of every loaded chunk and drop only the + * ones whose script changed on disk — the bundle route revalidates every + * request (cache-control: no-cache + ETag), so an unchanged chunk keeps its + * memory cache and the next lazy open skips the re-inject / re-execute. + * Fail-open: an unreachable, ETag-less, or timed-out chunk is dropped + * (re-fetch on next open). Test-registry entries are always cleared + * (per-test fixtures). + * A page refresh remains the authoritative reset (the HMR poll watches only + * client.js; chunk-only edits surface here on the next core re-activation). + * + * The returned promise is also a BARRIER for {@link loadChunk}: while a + * revalidation is pending, every chunk load awaits it before serving cache, + * so a lazy tab opening mid-revalidation can never render stale exports + * that the sweep is about to invalidate (CR #232 P1). + */ +export function revalidateChunksOnReactivate(): Promise { + testLoaders.clear() + const task = (async (): Promise => { + // Entries not tracked as production-loaded (test fixtures, orphans) never + // survive a re-activation — their resolved exports came from per-test + // stubs, not from the bundle route. + for (const name of [...cache.keys()]) { + if (!loadedChunks.has(name)) cache.delete(name) + } + if (loadedChunks.size === 0) return + const stale: ChunkName[] = [] + await Promise.all([...loadedChunks].map(async (name) => { + try { + const res = await fetch(CHUNK_URL(name), { + method: 'HEAD', + cache: 'no-cache', + signal: AbortSignal.timeout(CHUNK_REVALIDATE_TIMEOUT_MS), + }) + const etag = res.headers.get('etag') + if (etag !== null && etag !== '' && chunkEtags.get(name) === etag) return + } catch { + // Fail open below (network errors and timeouts alike). + } + stale.push(name) + })) + for (const name of stale) { + cache.delete(name) + loadedChunks.delete(name) + chunkEtags.delete(name) + } + })() + revalidation = task + void task.finally(() => { if (revalidation === task) revalidation = null }) + return task } diff --git a/src/client/desktop-env.ts b/src/client/desktop-env.ts new file mode 100644 index 0000000..751f67f --- /dev/null +++ b/src/client/desktop-env.ts @@ -0,0 +1,58 @@ +/** + * Desktop-shell detection for the sidebar. The official DSH Desktop shell + * (Electron) stamps every render URL with `dsh-desktop-mode` and + * `dsh-desktop-platform` and exposes `window.__DSH_DESKTOP_FILE_PATH__` + * through its preload; community Tauri shells keep the native system frame + * (no stamps — plain-browser semantics). Parsed once per page and memoized + * (the URL never changes mid-session); `resetDesktopEnvForTests` clears the + * memo for unit tests. + * + * Geometry facts the sidebar adapts to (from the Electron runtime): + * - win32 `advanced` mode draws the window controls in a 32px overlay strip + * at the top-right of the web content (`titleBarOverlay: { height: 32 }`) + * — exactly where the toggle cluster sits, so it must drop below the + * strip and the right panel's content must clear it. + * - darwin `advanced` mode keeps the traffic lights at (16,16) in the + * top-left; nothing on the plugin's side touches that corner today, but + * the platform is still reported so left-edge controls can avoid it. + * - `compatibility` mode keeps the native frame — no adaptation needed. + */ +export interface DesktopEnv { + /** Running inside a desktop shell (any URL stamp or preload marker). */ + readonly desktop: boolean + /** `advanced` = frameless/custom-titlebar shell; `compatibility` = native frame. */ + readonly mode: 'compatibility' | 'advanced' | null + /** Shell platform stamp ('darwin' | 'win32' | …), lowercased, or null. */ + readonly platform: string | null + /** Pixels the win32 advanced shell reserves at the top-right for window + * controls (0 elsewhere). */ + readonly win32OverlayTop: number +} + +let cached: DesktopEnv | undefined + +/** Read the shell's desktop stamps (memoized per page). */ +export function parseDesktopEnv(): DesktopEnv { + if (cached !== undefined) return cached + // location.search includes the leading '?', which URLSearchParams does NOT + // strip (it would become part of the first key) — drop it explicitly. + const params = new URLSearchParams(window.location.search.replace(/^\?/, '')) + const modeParam = params.get('dsh-desktop-mode') + const mode = modeParam === 'compatibility' || modeParam === 'advanced' ? modeParam : null + const platformParam = params.get('dsh-desktop-platform') + const platform = platformParam !== null && platformParam !== '' ? platformParam.toLowerCase() : null + const desktop = mode !== null + || typeof (window as { __DSH_DESKTOP_FILE_PATH__?: unknown }).__DSH_DESKTOP_FILE_PATH__ !== 'undefined' + cached = { + desktop, + mode, + platform, + win32OverlayTop: desktop && mode === 'advanced' && platform === 'win32' ? 32 : 0, + } + return cached +} + +/** Test hook: drop the memo so the next parse re-reads the URL/globals. */ +export function resetDesktopEnvForTests(): void { + cached = undefined +} diff --git a/src/client/index.tsx b/src/client/index.tsx index 04a263e..c87fbd1 100644 --- a/src/client/index.tsx +++ b/src/client/index.tsx @@ -13,7 +13,7 @@ import { createRoot, type Root } from 'react-dom/client' import type { Context } from '../context-types.ts' import { allLeaves, createSidebarStore, isAgentTabId } from './state.ts' import { createBetterSidebarService, matchUrlTarget } from './service.ts' -import { resetChunks } from './chunk-loader.ts' +import { revalidateChunksOnReactivate, setChunkModuleSystem } from './chunk-loader.ts' import { registerBuiltins } from './builtins/index.ts' import { Sidebar } from './Sidebar.tsx' import { RenderBoundary } from './RenderBoundary.tsx' @@ -29,8 +29,10 @@ import css from './sidebar.module.css' import './layout.css' /** Services required before mounting (provided by the client runtime; the - * locale service backs the sidebar's copy — see locales.ts). */ -export const inject = ['slots', 'sessions', 'connection', 'workspaces', 'locale'] + * locale service backs the sidebar's copy — see locales.ts). `modules` + * (rc.8+) is the client module system the chunk loader resolves its + * externals through — Cordis guards service access without inject. */ +export const inject = ['slots', 'sessions', 'connection', 'workspaces', 'locale', 'modules'] /** * Error boundary over the sidebar tree (root scope): a render error in the @@ -110,23 +112,96 @@ export function apply(ctx: Context): void { } } try { - // Fresh chunk state for this activation: invalidate any chunk factories - // registered by a previous fiber (HMR) and drop the in-memory load cache - // so the next lazy open re-fetches the current chunk scripts. - resetChunks() + // rc.8+ exposes the client module system as the `ctx.modules` service + // (no window.__DSH_MODULES__ page global anymore); the chunk loader needs + // it to resolve its externals, so inject it before anything can load a + // lazy chunk. The loader falls back to the rc.7 global when absent. + setChunkModuleSystem(ctx.modules) + // Fresh chunk state for this activation: drop per-test fixtures and + // revalidate loaded chunk scripts against the bundle route's ETags — + // unchanged chunks keep their resolved exports (no re-inject / + // re-execute on HMR), changed ones are dropped for a clean re-fetch. + void revalidateChunksOnReactivate() ctx.effect(() => { let disposed = false let root: Root | undefined let host: HTMLDivElement | undefined let mounted = false + let bodyObserver: MutationObserver | undefined + let hostCheckFrame: number | null = null const unmount = (): void => { if (!mounted) return mounted = false + bodyObserver?.disconnect() + bodyObserver = undefined + if (hostCheckFrame !== null) { + cancelAnimationFrame(hostCheckFrame) + hostCheckFrame = null + } root?.unmount() root = undefined host?.remove() host = undefined } + /** Re-attach the host if the page (a desktop shell wrapper, SPA + * navigation, …) ever removes it from . Cheap: childList only, + * no subtree, no attribute filtering. */ + const guardAnchor = (): void => { + if (bodyObserver !== undefined) return + bodyObserver = new MutationObserver(() => { + if (host !== undefined && !document.body.contains(host)) { + document.body.appendChild(host) + } + }) + bodyObserver.observe(document.body, { childList: true }) + } + /** One-shot geometry self-check: if the host page transforms + * / itself (exotic shells), a fixed panel host would + * track the transformed box instead of the viewport. Flip the + * degraded mode and pin the host to the viewport every frame until + * the ancestor transform is actually gone. The normal path (no + * page-level transform) never runs the sync loop. */ + const scheduleHostCheck = (): void => { + hostCheckFrame ??= requestAnimationFrame(() => { + hostCheckFrame = null + const layer = host?.querySelector('[data-dsh-panel-host]') + if (layer === null || layer === undefined) return + const rect = layer.getBoundingClientRect() + const mismatched = Math.abs(rect.left) > 8 || Math.abs(rect.top) > 8 + || Math.abs(rect.width - window.innerWidth) > 8 || Math.abs(rect.height - window.innerHeight) > 8 + if (!mismatched) { + layer.removeAttribute('data-dsh-panel-host-degraded') + layer.style.transform = '' + return + } + layer.setAttribute('data-dsh-panel-host-degraded', '') + console.warn('[dsh-better-sidebar] panel host geometry mismatch — a page-level transform was detected; using degraded viewport sync') + // Track our own compensating translation so the loop judges the + // UNCORRECTED geometry: clearing degraded mode must wait for the + // ancestor transform to actually disappear — the frame right after + // our correction applies would otherwise look "fixed" and the + // offset would return immediately (CR #232 P1). + let applied = { x: 0, y: 0 } + const sync = (): void => { + const r = layer.getBoundingClientRect() + const rawLeft = r.left - applied.x + const rawTop = r.top - applied.y + if (Math.abs(rawLeft) <= 1 && Math.abs(rawTop) <= 1 + && Math.abs(r.width - window.innerWidth) <= 1 && Math.abs(r.height - window.innerHeight) <= 1) { + layer.removeAttribute('data-dsh-panel-host-degraded') + layer.style.transform = '' + return + } + const next = { x: -rawLeft, y: -rawTop } + if (next.x !== applied.x || next.y !== applied.y) { + applied = next + layer.style.transform = `translate(${applied.x}px, ${applied.y}px)` + } + hostCheckFrame = requestAnimationFrame(sync) + } + hostCheckFrame = requestAnimationFrame(sync) + }) + } const mount = (): void => { if (mounted || disposed) return try { @@ -136,6 +211,8 @@ export function apply(ctx: Context): void { root = createRoot(host) root.render(createElement(RenderBoundary, { className: css.boundaryError }, createElement(Sidebar, { ctx, store: sidebarStore }))) mounted = true + guardAnchor() + scheduleHostCheck() } catch (error) { fail('mount', error) } diff --git a/src/client/layout.css b/src/client/layout.css index b1c483f..20b4f1f 100644 --- a/src/client/layout.css +++ b/src/client/layout.css @@ -5,14 +5,22 @@ * panel's width squeeze (margin-right on #root) lands exactly on the * conversation output and the input bar, like a VSCode sidebar. * + * The width rides `calc(100% - var(...))` instead of a bare margin on a + * full-width box: some desktop shells (DSH Desktop, #208) set #root to + * width:100%, where a margin would overflow the viewport additively — + * the calc keeps the box at exactly 100% minus the push in every shell. + * Width and margin transition in lockstep (same variable, same duration + * and easing), so expand/collapse animates the content width exactly as + * the bare-margin version did. + * * The bottom panel squeezes ONLY the center column — it must not cover the - * app's own left sidebar or the right panel. DSH 0.1.x wraps slot hosts in - * [data-slot] containers, so the AppFrame grid lives one level deeper: - * #root > div[data-slot="root"] > div (the frame). Its grid items are - * (frame > div:nth-child(1..3)): sidebarCol, centerCol, detailsCol, so the - * vertical push lands on the center column alone. The fixed panels cover - * the vacated strips, which looks seamless because #root's background is - * the theme base. + * app's own left sidebar or the right panel. The anchor is the frame's + * center grid item via its stable data attribute ([data-pane="conversation"] + * on the centerCol inside [data-dsh-frame]), not a positional path: the + * frame's child order also contains an overlay layer and drag handles + * (verified against a live DSH 0.1.x page), so nth-child is brittle. A + * stretched grid item shrinks by its margins, so the conversation content + * (output + input bar) lifts without touching the sidebars. * * The sizes ride CSS variables updated by the Sidebar shell (0 while * collapsed); expand/collapse animates both the margins and the panel @@ -21,14 +29,14 @@ */ #root { margin-right: var(--dsh-sidebar-width, 0px); - transition: margin-right var(--ds-transition-duration-slow) var(--ds-ease-in-out); + width: calc(100% - var(--dsh-sidebar-width, 0px)); + transition: + margin-right var(--ds-transition-duration-slow) var(--ds-ease-in-out), + width var(--ds-transition-duration-slow) var(--ds-ease-in-out); } -/* The AppFrame's grid items are sidebarCol, centerCol, detailsCol (children - 1-3 of #root > div[data-slot="root"] > div) — nth-child(2) is the center - column. A stretched grid item shrinks by its margins, so the conversation - content (output + input bar) lifts without touching the sidebars. */ -#root > div[data-slot="root"] > div > div:nth-child(2) { +/* The AppFrame's center column, anchored by data attributes (see above). */ +#root [data-dsh-frame] > [data-pane="conversation"] { margin-bottom: var(--dsh-sidebar-height, 0px); transition: margin-bottom var(--ds-transition-duration-slow) var(--ds-ease-in-out); } @@ -47,7 +55,7 @@ body[data-dsh-sidebar-collapsed] [data-slot="conversation.session.header"] > hea } body[data-dsh-sidebar-dragging] #root, -body[data-dsh-sidebar-dragging] #root > div[data-slot="root"] > div > div:nth-child(2) { +body[data-dsh-sidebar-dragging] #root [data-dsh-frame] > [data-pane="conversation"] { transition: none; } @@ -72,7 +80,7 @@ body[data-dsh-sidebar-dragging] #root > div[data-slot="root"] > div > div:nth-ch @media (prefers-reduced-motion: reduce) { #root, - #root > div[data-slot="root"] > div > div:nth-child(2) { + #root [data-dsh-frame] > [data-pane="conversation"] { transition: none; } } diff --git a/src/client/locales.ts b/src/client/locales.ts index 246e6f6..d89900d 100644 --- a/src/client/locales.ts +++ b/src/client/locales.ts @@ -162,6 +162,12 @@ export const zh = { settingsFontSizeTitle: '终端字号', settingsFontSizeDesc: '终端字号(9–32,默认 13)', settingsFontSizeSuffix: 'px', + settingsShellTitle: 'Shell 路径', + settingsShellDesc: 'UI 与模型终端启动的 shell(绝对路径或可执行名)。留空按既有顺序解析:yaml 的 config.shell → $SHELL / 登录 shell / Windows 的 powershell.exe。对之后打开的终端生效', + settingsShellPlaceholder: '如 /bin/zsh(留空自动解析)', + settingsShellArgsTitle: 'Shell 参数', + settingsShellArgsDesc: '显式 shell 启动参数,空格分隔;非空时完全替换默认参数(与 yaml 的 shellArgs 契约一致)', + settingsShellArgsPlaceholder: '如 -l(留空用默认参数)', settingsTabsTitle: '侧边栏内容', settingsViewersTitle: '文件预览', settingsGeneralTitle: '常规', @@ -245,6 +251,8 @@ export const zh = { addPluginsTabDesc: '侧边栏页面(Tab)可以由插件扩展。插件通过 ctx.betterSidebar 服务注册;点击「安装」复制安装命令,粘贴到 DSH 所在环境的终端执行。', addPluginsViewerDesc: '文件预览器可以由插件扩展。插件通过 ctx.betterSidebar 服务注册;点击「安装」复制安装命令,粘贴到 DSH 所在环境的终端执行。', addPluginsBrowseMore: '在 GitHub 上浏览更多插件(topic: dsh-better-sidebar)', + addPluginsSearch: '搜索插件名称 / 描述…', + addPluginsNoMatch: '没有匹配的插件', addPluginsRecommended: '推荐插件', addPluginsEmpty: '暂未收录插件,欢迎在 GitHub topic 下发布你的插件', openPlugin: '跳转', @@ -407,6 +415,12 @@ export const en: Record = { settingsFontFamilyDesc: 'Custom terminal font family (a CSS font-family stack like "JetBrains Mono", monospace; leave empty to follow the theme\'s monospace font)', settingsFontFamilyPlaceholder: '"JetBrains Mono", monospace', settingsFontSizeTitle: 'Terminal font size', + settingsShellTitle: 'Shell path', + settingsShellDesc: 'Shell spawned for UI and model terminals (absolute path or bare executable). Empty keeps the legacy order: yaml config.shell → $SHELL / login shell / Windows powershell.exe. Applies to terminals opened afterwards', + settingsShellPlaceholder: 'e.g. /bin/zsh (empty = auto)', + settingsShellArgsTitle: 'Shell arguments', + settingsShellArgsDesc: 'Explicit shell arguments, space-separated; when non-empty they fully replace the defaults (same contract as the yaml shellArgs)', + settingsShellArgsPlaceholder: 'e.g. -l (empty = defaults)', settingsFontSizeDesc: 'Terminal font size in px (9–32, default 13)', settingsFontSizeSuffix: 'px', settingsTabsTitle: 'Sidebar content', @@ -492,6 +506,8 @@ export const en: Record = { addPluginsTabDesc: 'Sidebar pages (tabs) can be extended by plugins. Plugins register through the ctx.betterSidebar service; clicking Install copies the install command — paste it into a terminal where your DSH profile lives and run it.', addPluginsViewerDesc: 'File previewers can be extended by plugins. Plugins register through the ctx.betterSidebar service; clicking Install copies the install command — paste it into a terminal where your DSH profile lives and run it.', addPluginsBrowseMore: 'Browse more plugins on GitHub (topic: dsh-better-sidebar)', + addPluginsSearch: 'Search by plugin name or description…', + addPluginsNoMatch: 'No plugins match', addPluginsRecommended: 'Recommended plugins', addPluginsEmpty: 'No plugins curated yet — publish yours under the GitHub topic', openPlugin: 'Open', diff --git a/src/client/plugins-shared.ts b/src/client/plugins-shared.ts index f3f4c90..44df762 100644 --- a/src/client/plugins-shared.ts +++ b/src/client/plugins-shared.ts @@ -20,6 +20,9 @@ export interface PluginEntry { url: string /** One-line description (i18n friendly: string or () => string). */ description: string | (() => string) + /** Optional catalog group heading (i18n friendly); entries without one + * render under the plain list (a flat catalog stays flat). */ + category?: string | (() => string) /** The full shell command pre-filled into the install terminal (not * executed until the user presses Enter). */ install: string diff --git a/src/client/prefs.ts b/src/client/prefs.ts index 80cc601..f172fb6 100644 --- a/src/client/prefs.ts +++ b/src/client/prefs.ts @@ -54,6 +54,12 @@ export function parsePrefs(value: unknown): SidebarPrefs { terminalFontFamily: typeof record.terminalFontFamily === 'string' ? record.terminalFontFamily : SIDEBAR_PREFS_DEFAULTS.terminalFontFamily, + terminalShell: typeof record.terminalShell === 'string' + ? record.terminalShell + : SIDEBAR_PREFS_DEFAULTS.terminalShell, + terminalShellArgs: typeof record.terminalShellArgs === 'string' + ? record.terminalShellArgs + : SIDEBAR_PREFS_DEFAULTS.terminalShellArgs, terminalFontSize: typeof record.terminalFontSize === 'number' && Number.isFinite(record.terminalFontSize) ? clampTerminalFontSize(record.terminalFontSize) : SIDEBAR_PREFS_DEFAULTS.terminalFontSize, diff --git a/src/client/service.ts b/src/client/service.ts index 6bfd1db..13f1934 100644 --- a/src/client/service.ts +++ b/src/client/service.ts @@ -470,7 +470,7 @@ export function matchUrlTarget(tabs: readonly TabDescriptor[], url: URL): TabDes * The plugin version this service instance reports. Keep in lockstep with * `package.json`'s version — `tests/service.spec.ts` asserts the pair. */ -export const SIDEBAR_SERVICE_VERSION = '0.13.1' +export const SIDEBAR_SERVICE_VERSION = '0.14.0' /** * Monotonic capability list consumers use to gate new API usage (features diff --git a/src/client/sidebar.module.css b/src/client/sidebar.module.css index 8acf8d0..e53c109 100644 --- a/src/client/sidebar.module.css +++ b/src/client/sidebar.module.css @@ -20,6 +20,28 @@ switching skins in the dsh-web-ui skin center re-skins the sidebar panels automatically (see AGENTS.md §8). */ +/* The unified panel host: a fixed, viewport-sized, click-transparent + containing block for every panel element. Panels are ABSOLUTE within it + (not fixed), so a desktop shell's intermediate wrapper transform can + never hijack their containing block — the host itself is the only fixed + element, appended directly to document.body. The layer sits at z-index 40 + (below the app's overlay stack at 100+); each panel re-enables pointer + events on itself. Degraded mode ([data-dsh-panel-host-degraded]) covers + the rare shell that transforms / itself: the host becomes + absolute and the mount self-check pins it to the viewport every frame. */ +:global([data-dsh-panel-host]) { + position: fixed; + inset: 0; + z-index: 40; + pointer-events: none; +} + +:global([data-dsh-panel-host][data-dsh-panel-host-degraded]) { + position: absolute; + top: 0; + left: 0; +} + /* The persistent expand/collapse cluster at the top-right corner: two rail controls side by side (bottom panel's glyph LEFT of the right panel's). Always pinned to the viewport corner — inside the right panel's top-right @@ -27,15 +49,18 @@ top: 3) whose right end it really squeezes. z-index 45: above the panels (40) but below the app's overlay stack (menus/tooltips/modals sit at 100+), so a cordis approval popup is never hidden behind the workbench - (issue #52). */ + (issue #52). Absolute within the panel host (the host's inset: 0 makes + viewport coordinates identical). */ .toggleCluster { - position: fixed; - top: 3px; + position: absolute; + /* env() resolves to 0 on devices without a top inset (desktops). */ + top: calc(3px + env(safe-area-inset-top)); right: 10px; z-index: 45; display: flex; flex-direction: row; gap: 4px; + pointer-events: auto; } /* The tab strip of the OPEN right panel reserves the cluster's width at its @@ -77,7 +102,7 @@ } .panel { - position: fixed; + position: absolute; top: 0; right: 0; /* Full height: the bottom panel squeezes only the center column, so the @@ -90,12 +115,17 @@ z-index: 40; display: flex; flex-direction: column; + /* Re-enable interaction inside the click-transparent panel host. */ + pointer-events: auto; /* The generic card surface (see the root contract above). Never `--dsw-specific-sidebar-fill` — skin plugins restyle that token for the app's own left nav and a panel consuming it loses its fill or clashes with labels (#60/#105/#106). */ background: var(--dsw-alias-bg-layer-1); border-left: 1px solid var(--dsw-alias-border-l2); + /* Bottom safe-area (notched phones): the drawer's bottom content clears + the home indicator; 0 on desktops. */ + padding-bottom: env(safe-area-inset-bottom); /* Expand/collapse slides the panel; fullscreen animates the width. */ transition: transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), @@ -152,13 +182,17 @@ (issue #52: below the app's overlay stack so popups win over the workbench). */ .bottomPanel { - position: fixed; + position: absolute; bottom: 0; z-index: 40; display: flex; flex-direction: column; background: var(--dsw-alias-bg-layer-1); border-top: 1px solid var(--dsw-alias-border-l2); + /* Re-enable interaction inside the click-transparent panel host. */ + pointer-events: auto; + /* Bottom safe-area (notched phones); 0 on desktops. */ + padding-bottom: env(safe-area-inset-bottom); /* Expand/collapse slides the panel; height drags animate the height. */ transition: transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), @@ -181,6 +215,22 @@ transition: none; } +/* Layout isolation: panel-internal reflows (tabs, editors, terminals) never + leak into the app shell's layout, and the app shell's layout changes + never cascade through the panel subtree — the drag stays confined. + will-change: transform is only live while a drag is (the body attribute + toggles with the drag state), promoting the panels to their own layer + without paying the compositing cost at rest. */ +.panel, +.bottomPanel { + contain: layout style; +} + +body[data-dsh-sidebar-dragging] .panel, +body[data-dsh-sidebar-dragging] .bottomPanel { + will-change: transform; +} + /* The bottom panel's height drag: the top edge strip (mirror of the right panel's width strip), centered on the border like the width strip. */ .bottomResize { diff --git a/src/config.ts b/src/config.ts index 614e592..5baa590 100644 --- a/src/config.ts +++ b/src/config.ts @@ -121,7 +121,9 @@ export const PrefsSchema: z = z.object({ terminalFontFamily: z.string().default(''), terminalFontSize: z.number().step(1).min(TERMINAL_FONT_SIZE_MIN).max(TERMINAL_FONT_SIZE_MAX).default(TERMINAL_FONT_SIZE_DEFAULT), interceptOpenPath: z.boolean().default(true), - editorExplorer: z.boolean().default(true), + editorExplorer: z.boolean().default(false), + terminalShell: z.string().default(''), + terminalShellArgs: z.string().default(''), titleBarCompat: z.boolean().default(false), titleBarStripPx: z.number().step(1).min(TITLE_BAR_STRIP_MIN).max(TITLE_BAR_STRIP_MAX).default(TITLE_BAR_STRIP_DEFAULT), htmlViewerNoSandbox: z.boolean().default(false), diff --git a/src/context-types.ts b/src/context-types.ts index 1f84a2a..31ed0be 100644 --- a/src/context-types.ts +++ b/src/context-types.ts @@ -428,6 +428,13 @@ declare module 'cordis' { * dictionaries under the `betterSidebar` namespace. Client side only. */ locale: SidebarLocaleService + /** + * The client module system (rc.8+): resolves module-table specifiers + * (seed words, graph rows) — the chunk loader's externals go through it + * (`ctx.modules.import`). rc.7 exposed the same surface as the + * `window.__DSH_MODULES__` page global; the loader keeps that fallback. + */ + modules: { import(specifier: string): Promise } /** * The host background-job registry (`ctx.get('jobs')`; optional — the * sidebar routes degrade to a 503 when the deployment lacks it). diff --git a/src/index.ts b/src/index.ts index 0ae8f4f..baeb387 100644 --- a/src/index.ts +++ b/src/index.ts @@ -192,6 +192,26 @@ export interface SidebarSettingsFace { } /** Build the API method table bound to the plugin context, pty manager, agent pty registry, resolved config, and effective terminal shell. */ +/** + * Resolve the settings-page terminal shell overrides (the terminal card's + * gear rows). Empty fields mean "unset": keep the yaml `config.shell` / + * `shellArgs` (or the platform auto-resolution). The settings page is the + * runtime complement to the boot-time yaml — same contract, later binding: + * the values here win for terminals opened afterwards. + */ +function shellOverridesOf(getSettings: () => SidebarSettingsFace | undefined): { shell?: string; shellArgs?: string[] } { + const settings = getSettings() + const value = settings?.get().value + if (value === null || typeof value !== 'object') return {} + const record = value as Record + const shell = typeof record.terminalShell === 'string' ? record.terminalShell.trim() : '' + const args = typeof record.terminalShellArgs === 'string' ? record.terminalShellArgs.trim() : '' + return { + shell: shell === '' ? undefined : shell, + shellArgs: args === '' ? undefined : args.split(/\s+/).filter(Boolean), + } +} + function buildApi( ctx: Context, ptyManager: PtyManager | null, @@ -518,7 +538,7 @@ export function apply(ctx: Context, config?: SidebarConfig): void { // Degraded mode (node-pty unavailable): never register the terminal // tools — every one of them would fail at spawn time. if (agentPtyRegistry === null) return - toolsDisposers = registerTools(ctx, agentPtyRegistry, (sessionId) => sessionCwdOf(ctx, sessionId)) + toolsDisposers = registerTools(ctx, agentPtyRegistry, (sessionId) => sessionCwdOf(ctx, sessionId), () => shellOverridesOf(() => settingsFace)) } } else if (toolsDisposers !== null) { toolsDisposers() @@ -740,7 +760,7 @@ export function apply(ctx: Context, config?: SidebarConfig): void { // The structural request/socket/head faces satisfy the shared fence; // the `ws` package wants the real Node types — cast at this boundary. wss.handleUpgrade(req as unknown as IncomingMessage, socket as unknown as Duplex, head as Buffer, (ws) => { - void attachTerminal(ctx, ptyManager, agentPtyRegistry, ws, req, resolved) + void attachTerminal(ctx, ptyManager, agentPtyRegistry, ws, req, resolved, () => settingsFace) }) }, }), 'dsh-better-sidebar: terminal WebSocket') @@ -824,6 +844,7 @@ async function attachTerminal( ws: WebSocket, req: SidebarHttpRequest, resolved: ResolvedSidebarConfig, + getSettings: () => SidebarSettingsFace | undefined, ): Promise { try { const url = new URL(req.url ?? '/', 'http://dsh.internal') @@ -857,7 +878,10 @@ async function attachTerminal( return } const cwd = sessionCwdOf(ctx, sessionId, url.searchParams.get('cwd') ?? undefined) - const handle = ptyManager.open(sessionId, tabId, cwd, 80, 24) + // Settings-page shell overrides win over the yaml/auto shell for + // terminals opened from now on (existing pty handles keep their shell). + const overrides = shellOverridesOf(getSettings) + const handle = ptyManager.open(sessionId, tabId, cwd, 80, 24, overrides.shell, overrides.shellArgs) // Replay the transcript, then follow live output. if (handle.transcript !== '') ws.send(handle.transcript) const onData = (data: string): void => { diff --git a/src/prefs-shared.ts b/src/prefs-shared.ts index 5d6c6a2..a9f5514 100644 --- a/src/prefs-shared.ts +++ b/src/prefs-shared.ts @@ -69,6 +69,21 @@ export interface SidebarPrefs { * Side card settings; off restores the pre-merge editor exactly. */ editorExplorer: boolean + /** + * The shell the UI and agent terminals spawn (absolute path or bare + * executable name). Empty (default) keeps the legacy resolution order: + * `cordis.patch.yml` `config.shell`, then `$SHELL` / login shell / + * `powershell.exe` on Windows. Set it from the terminal card's gear in + * the Side card settings (or the yaml) to pin a specific shell — takes + * effect for terminals opened afterwards. + */ + terminalShell: string + /** + * Explicit arguments for `terminalShell`, space-separated (empty keeps + * the platform defaults; when set, they fully replace them — same + * contract as the yaml `shellArgs`). + */ + terminalShellArgs: string /** * Position compatibility mode: reserves space at the top for the native * Windows title bar (drawn at the window's top-right corner over the web @@ -188,7 +203,9 @@ export const SIDEBAR_PREFS_DEFAULTS: SidebarPrefs = { terminalFontFamily: '', terminalFontSize: TERMINAL_FONT_SIZE_DEFAULT, interceptOpenPath: true, - editorExplorer: true, + editorExplorer: false, + terminalShell: '', + terminalShellArgs: '', titleBarCompat: false, titleBarStripPx: TITLE_BAR_STRIP_DEFAULT, htmlViewerNoSandbox: false, diff --git a/src/pty-manager.ts b/src/pty-manager.ts index ae86168..67e553a 100644 --- a/src/pty-manager.ts +++ b/src/pty-manager.ts @@ -104,7 +104,15 @@ export class PtyManager { * @returns the live handle. * @throws {SidebarError} pty-error when the per-session cap is reached. */ - open(sessionId: string, tabId: string, cwd: string, cols: number, rows: number): SidebarPty { + open( + sessionId: string, + tabId: string, + cwd: string, + cols: number, + rows: number, + shell?: string, + shellArgs?: string[], + ): SidebarPty { const key = `${sessionId}:${tabId}` this.cancelClose(key) const existing = this.sessions.get(key) @@ -123,7 +131,7 @@ export class PtyManager { sessionId, tabId, cwd, - pty: this.nodePty.spawn(this.shell, shellSpawnArgs(this.shellArgs), { + pty: this.nodePty.spawn(shell ?? this.shell, shellSpawnArgs(shellArgs ?? this.shellArgs), { name: 'xterm-256color', cols: Math.max(2, Math.floor(cols)), rows: Math.max(2, Math.floor(rows)), diff --git a/src/tools.ts b/src/tools.ts index 559bb4d..a23467e 100644 --- a/src/tools.ts +++ b/src/tools.ts @@ -81,6 +81,7 @@ export function registerTools( ctx: Context, registry: AgentPtyRegistry, resolveCwd: (sessionId: string) => string, + readShellOverrides: () => { shell?: string; shellArgs?: string[] }, ): () => void { const disposers: Array<() => void> = [] const register = (tool: ReturnType): void => { @@ -127,7 +128,8 @@ export function registerTools( exec.signal.throwIfAborted() const sessionId = sessionIdOf(exec) const cwd = resolveCwd(sessionId) - const uuid = registry.create(sessionId, args.title, args.command, cwd, 80, 24) + const { shell, shellArgs } = readShellOverrides() + const uuid = registry.create(sessionId, args.title, args.command, cwd, 80, 24, shell, shellArgs) return Promise.resolve({ uuid, title: args.title }) }, })) diff --git a/tests/browser-globals.ts b/tests/browser-globals.ts index a7aae4a..8310670 100644 --- a/tests/browser-globals.ts +++ b/tests/browser-globals.ts @@ -55,6 +55,9 @@ if (g.window === undefined) { innerWidth: 1024, innerHeight: 768, getComputedStyle: () => ({ getPropertyValue: () => '' }), + // desktop-env.ts reads the shell's URL stamps from location.search + // (Sidebar renders with parseDesktopEnv even in specs). + location: { search: '' }, } } diff --git a/tests/builtins.spec.ts b/tests/builtins.spec.ts index c556b2f..3d01ca0 100644 --- a/tests/builtins.spec.ts +++ b/tests/builtins.spec.ts @@ -67,19 +67,25 @@ describe('built-in tab registrations', () => { expect(options.every(o => o.icon !== undefined && o.title !== undefined)).toBe(true) }) - it('the terminal tab declares the model terminal-tools, auto-terminal and custom-font settings', () => { + it('the terminal tab declares the model terminal-tools, auto-terminal, shell and custom-font settings', () => { const { service } = setup() const toggles = service.getTab('terminal')?.settings?.toggles ?? [] - expect(toggles.map(t => t.key)).toEqual(['agentTerminalTools', 'bottomPanelAutoTerminal', 'terminalFontFamily', 'terminalFontSize']) - // The font rows are text/number inputs (not switches), with the size - // row bounded by the shared 9–32 contract. + expect(toggles.map(t => t.key)).toEqual(['agentTerminalTools', 'bottomPanelAutoTerminal', 'terminalShell', 'terminalShellArgs', 'terminalFontFamily', 'terminalFontSize']) + // The shell rows are text inputs (empty = yaml/auto resolution), the + // font rows text/number inputs (not switches), with the size row bounded + // by the shared 9–32 contract. expect(toggles[2]?.type).toBe('text') expect(toggles[2]?.title).toBeDefined() expect(toggles[2]?.placeholder).toBeDefined() - expect(toggles[3]?.type).toBe('number') - expect(toggles[3]?.min).toBe(9) - expect(toggles[3]?.max).toBe(32) - expect(toggles[3]?.unit).toBe('px') + expect(toggles[3]?.type).toBe('text') + expect(toggles[3]?.title).toBeDefined() + expect(toggles[4]?.type).toBe('text') + expect(toggles[4]?.title).toBeDefined() + expect(toggles[4]?.placeholder).toBeDefined() + expect(toggles[5]?.type).toBe('number') + expect(toggles[5]?.min).toBe(9) + expect(toggles[5]?.max).toBe(32) + expect(toggles[5]?.unit).toBe('px') // The first two rows stay plain boolean switches. expect(toggles[0]?.type ?? 'switch').toBe('switch') expect(toggles[1]?.type ?? 'switch').toBe('switch') diff --git a/tests/chunk-loader.spec.ts b/tests/chunk-loader.spec.ts index b1ddc92..154100a 100644 --- a/tests/chunk-loader.spec.ts +++ b/tests/chunk-loader.spec.ts @@ -18,13 +18,15 @@ import { CHUNK_EXTERNALS, loadChunk, registerChunkForTests, + revalidateChunksOnReactivate, resetChunks, + setChunkModuleSystem, setChunkScriptLoaderForTests, } from '../src/client/chunk-loader.ts' import type { ChunkExports } from '../src/client/chunk-loader.ts' interface FakeModuleSystem { - import: ReturnType + import: (specifier: string) => Promise } function installModuleSystem(): FakeModuleSystem { @@ -53,6 +55,7 @@ function simulateScript(name: string, factory: (require: (spec: string) => unkno beforeEach(() => { removeModuleSystem() + setChunkModuleSystem(undefined) delete (globalThis as Record).__dshChunks__ resetChunks() setChunkScriptLoaderForTests(null) @@ -89,6 +92,34 @@ describe('test-registry path (vitest / jsdom-less environments)', () => { }) describe('production path (script injection + global registry + externals require)', () => { + it('resolves externals through an injected ctx.modules system (rc.8 — no page global)', async () => { + const modules = installModuleSystem() + // rc.8 drops window.__DSH_MODULES__; the client half injects ctx.modules. + removeModuleSystem() + setChunkModuleSystem(modules) + const loaded: string[] = [] + setChunkScriptLoaderForTests(async (src) => { + loaded.push(src) + simulateScript('editor', (require) => ({ TextEditor: `view:${String(require('react'))}` })) + }) + const exports = await loadChunk('editor') + expect(loaded).toEqual(['/sidebar/bundle/editor.js']) + expect(exports).toEqual({ TextEditor: 'view:[object Object]' }) + expect(modules.import).toHaveBeenCalledTimes(CHUNK_EXTERNALS.length) + // The injection also lands on a plugin-owned global so chunk-bundle + // copies of this loader (which inline their own module instance and + // never run apply()) can resolve externals too — rc.8 has no shell + // page global anymore. + expect((globalThis as Record).__dshSidebarModuleSystem__).toBe(modules) + // The injection survives resetChunks (shell state, not chunk state). + resetChunks() + setChunkScriptLoaderForTests(async () => { + simulateScript('editor', () => ({ TextEditor: 'editor-view' })) + }) + await loadChunk('editor') + expect(modules.import).toHaveBeenCalledTimes(CHUNK_EXTERNALS.length * 2) + }) + it('injects the chunk script, then materializes the factory with externals from the module table', async () => { const modules = installModuleSystem() const loaded: string[] = [] @@ -192,6 +223,190 @@ describe('production path (script injection + global registry + externals requir }) }) +describe('revalidateChunksOnReactivate (HMR re-activation keeps unchanged chunks)', () => { + /** Stub the bundle route's HEAD endpoint with per-name ETags (Error = unreachable). */ + function stubBundleHead(etagFor: (name: string) => string | null | Error): void { + vi.stubGlobal('fetch', vi.fn(async (input: unknown) => { + const url = String(input) + const name = url.endsWith('terminal.js') ? 'terminal' : 'editor' + const etag = etagFor(name) + if (etag instanceof Error) throw etag + return { + headers: { get: (key: string) => (key.toLowerCase() === 'etag' ? etag : null) }, + } as unknown as Response + })) + } + + /** Let the fire-and-forget ETag recorder (recordEtag) settle. */ + const settleEtag = (): Promise => new Promise((resolve) => setTimeout(resolve, 5)) + + it('keeps the resolved exports of an unchanged chunk — no re-inject / re-execute', async () => { + installModuleSystem() + let scriptCalls = 0 + setChunkScriptLoaderForTests(async () => { + scriptCalls += 1 + simulateScript('editor', () => ({ TextEditor: 'editor-view' })) + }) + stubBundleHead(() => '"v1"') + const first = await loadChunk('editor') + expect(scriptCalls).toBe(1) + await settleEtag() + await revalidateChunksOnReactivate() + const second = await loadChunk('editor') + expect(second).toBe(first) + expect(scriptCalls).toBe(1) + }) + + it('drops a chunk whose ETag changed on disk — the next open re-injects and re-executes', async () => { + installModuleSystem() + let scriptCalls = 0 + setChunkScriptLoaderForTests(async () => { + scriptCalls += 1 + simulateScript('editor', () => ({ TextEditor: `editor-view:${scriptCalls}` })) + }) + let etag = '"v1"' + stubBundleHead(() => etag) + const first = await loadChunk('editor') + await settleEtag() + etag = '"v2"' + await revalidateChunksOnReactivate() + const second = await loadChunk('editor') + expect(second).not.toBe(first) + expect(scriptCalls).toBe(2) + }) + + it('fails open when revalidation cannot reach the bundle route', async () => { + installModuleSystem() + let scriptCalls = 0 + setChunkScriptLoaderForTests(async () => { + scriptCalls += 1 + simulateScript('terminal', () => ({ TerminalView: 'tv' })) + }) + stubBundleHead(() => new Error('HEAD unreachable')) + await loadChunk('terminal') + await settleEtag() + await revalidateChunksOnReactivate() + await loadChunk('terminal') + expect(scriptCalls).toBe(2) + }) + + it('loadChunk is a barrier: a pending revalidation never serves stale exports (CR P1)', async () => { + installModuleSystem() + let scriptCalls = 0 + setChunkScriptLoaderForTests(async () => { + scriptCalls += 1 + simulateScript('editor', () => ({ TextEditor: `editor-view:${scriptCalls}` })) + }) + // First load: etag "v1", recorded after settlement. + let etag = '"v1"' + stubBundleHead(() => etag) + const first = await loadChunk('editor') + await settleEtag() + expect(scriptCalls).toBe(1) + // The chunk changed on disk; the revalidation HEAD is gated (pending). + etag = '"v2"' + let release: (() => void) | undefined + const gate = new Promise((resolve) => { release = resolve }) + vi.stubGlobal('fetch', vi.fn(async () => { + await gate + return { headers: { get: () => etag } } as unknown as Response + })) + const revalidating = revalidateChunksOnReactivate() + // A lazy open DURING the pending revalidation must NOT get the old cache. + let resolved = false + let pendingLoad: Promise | null = null + pendingLoad = loadChunk('editor').then((exports) => { resolved = true; return exports }) + await new Promise((resolve) => setTimeout(resolve, 5)) + expect(resolved, 'loadChunk must await the pending revalidation').toBe(false) + // Release the HEAD; the barrier lifts and the load re-injects fresh exports. + release?.() + await revalidating + const after = await pendingLoad + expect(after).not.toBe(first) + expect(scriptCalls).toBe(2) + }) + + it('a HEAD that never answers is bounded by a timeout signal and fails open (barrier cannot wedge loads forever)', async () => { + installModuleSystem() + let scriptCalls = 0 + setChunkScriptLoaderForTests(async () => { + scriptCalls += 1 + simulateScript('editor', () => ({ TextEditor: `editor-view:${scriptCalls}` })) + }) + // First load settles an ETag under a healthy HEAD route. + stubBundleHead(() => '"v1"') + const first = await loadChunk('editor') + await settleEtag() + expect(scriptCalls).toBe(1) + // The revalidation HEAD now hangs. The loader must hand the fetch a + // timeout signal and, when it fires, fail open (drop + re-fetch) — the + // barrier must never block lazy loads indefinitely. + const controller = new AbortController() + const timeoutSpy = vi.spyOn(AbortSignal, 'timeout').mockReturnValue(controller.signal) + vi.stubGlobal('fetch', vi.fn(async (_input, init?: RequestInit) => { + await new Promise((_resolve, reject) => { + init?.signal?.addEventListener('abort', () => reject(new DOMException('timed out', 'AbortError'))) + }) + })) + const revalidating = revalidateChunksOnReactivate() + let resolved = false + const pendingLoad = loadChunk('editor').then((exports) => { resolved = true; return exports }) + await new Promise((resolve) => setTimeout(resolve, 5)) + expect(resolved, 'loadChunk must await the pending revalidation').toBe(false) + controller.abort() // the timeout fires + await revalidating + const after = await pendingLoad + expect(after).not.toBe(first) + expect(scriptCalls).toBe(2) + expect(timeoutSpy).toHaveBeenCalledWith(expect.any(Number)) + timeoutSpy.mockRestore() + }) + + it('resetChunks clears a pending revalidation barrier (the next load does not wait on the orphaned task)', async () => { + installModuleSystem() + let scriptCalls = 0 + setChunkScriptLoaderForTests(async () => { + scriptCalls += 1 + simulateScript('editor', () => ({ TextEditor: `editor-view:${scriptCalls}` })) + }) + let etag = '"v1"' + stubBundleHead(() => etag) + await loadChunk('editor') + await settleEtag() + // Gate the revalidation HEAD so the barrier stays pending. + let release: (() => void) | undefined + const gate = new Promise((resolve) => { release = resolve }) + vi.stubGlobal('fetch', vi.fn(async () => { + await gate + return { headers: { get: () => etag } } as unknown as Response + })) + const revalidating = revalidateChunksOnReactivate() + // resetChunks mid-revalidation: the barrier guarded only the state being + // dropped, so the next load must proceed without waiting for the HEAD. + resetChunks() + const after = await loadChunk('editor') + expect(after).toEqual({ TextEditor: 'editor-view:2' }) + expect(scriptCalls).toBe(2) + // The orphaned task still settles; its identity-guarded finally no-ops. + // (Its sweep may later drop the freshly loaded entry — chunkEtags was + // cleared by resetChunks, so the old ETag no longer matches. That is the + // fail-safe direction: never serve stale, at worst one redundant fetch.) + release?.() + await revalidating + }) + + it('clears test-registry fixtures on re-activation (per-test stubs never leak)', async () => { + let testCalls = 0 + registerChunkForTests('editor', async () => { testCalls += 1; return { TextEditor: 'test-view' } }) + await loadChunk('editor') + expect(testCalls).toBe(1) + await revalidateChunksOnReactivate() + // Test fixture gone: the production path runs and fails fast (no module system). + await expect(loadChunk('editor')).rejects.toThrow('client module system unavailable') + expect(testCalls).toBe(1) + }) +}) + describe('externals contract', () => { it('the loader resolves exactly the platform externals the chunk builds keep external', () => { expect(CHUNK_EXTERNALS).toEqual([ @@ -201,9 +416,7 @@ describe('externals contract', () => { 'react-dom/client', 'cordis', '@deepseek-ai/dsh-client-ui-slots', - '@deepseek-ai/dsh-client-web-react', '@deepseek-ai/dsh-client-ui-primitives', - '@deepseek-ai/dsh-client-schema-form', '@deepseek-ai/dsh-client-runtime/client', ]) }) diff --git a/tests/desktop-env.spec.ts b/tests/desktop-env.spec.ts new file mode 100644 index 0000000..87bfe61 --- /dev/null +++ b/tests/desktop-env.spec.ts @@ -0,0 +1,72 @@ +/** + * Desktop-shell detection tests: URL stamps (dsh-desktop-mode/platform) + * from the official Electron shell, the preload marker + * (__DSH_DESKTOP_FILE_PATH__), and the win32 advanced overlay adaptation. + */ +import { beforeEach, describe, expect, it } from 'vitest' +import './browser-globals.ts' +import { parseDesktopEnv, resetDesktopEnvForTests } from '../src/client/desktop-env.ts' + +function setSearch(search: string): void { + ;(window.location as { search: string }).search = search +} + +beforeEach(() => { + resetDesktopEnvForTests() + delete (window as unknown as Record).__DSH_DESKTOP_FILE_PATH__ + setSearch('/') +}) + +describe('parseDesktopEnv', () => { + it('reports a plain browser page as non-desktop', () => { + expect(parseDesktopEnv()).toEqual({ desktop: false, mode: null, platform: null, win32OverlayTop: 0 }) + }) + + it('parses win32 advanced stamps with the 32px window-control overlay', () => { + setSearch('?dsh-desktop-mode=advanced&dsh-desktop-platform=win32') + const env = parseDesktopEnv() + expect(env.desktop).toBe(true) + expect(env.mode).toBe('advanced') + expect(env.platform).toBe('win32') + expect(env.win32OverlayTop).toBe(32) + }) + + it('parses darwin advanced stamps without an overlay (traffic lights are top-left)', () => { + setSearch('?dsh-desktop-mode=advanced&dsh-desktop-platform=darwin') + const env = parseDesktopEnv() + expect(env.desktop).toBe(true) + expect(env.platform).toBe('darwin') + expect(env.win32OverlayTop).toBe(0) + }) + + it('parses compatibility mode as desktop with the native frame (no adaptation)', () => { + setSearch('?dsh-desktop-mode=compatibility&dsh-desktop-platform=win32') + const env = parseDesktopEnv() + expect(env.desktop).toBe(true) + expect(env.mode).toBe('compatibility') + expect(env.win32OverlayTop).toBe(0) + }) + + it('detects the desktop preload marker even without URL stamps', () => { + ;(window as unknown as Record).__DSH_DESKTOP_FILE_PATH__ = { getPathForFile: () => '' } + const env = parseDesktopEnv() + expect(env.desktop).toBe(true) + expect(env.mode).toBeNull() + expect(env.win32OverlayTop).toBe(0) + }) + + it('ignores unknown mode values (exotic shells keep plain-browser semantics)', () => { + setSearch('?dsh-desktop-mode=weird&dsh-desktop-platform=win32') + expect(parseDesktopEnv().mode).toBeNull() + expect(parseDesktopEnv().desktop).toBe(false) + }) + + it('memoizes across calls until the test hook resets', () => { + setSearch('?dsh-desktop-mode=advanced&dsh-desktop-platform=win32') + const first = parseDesktopEnv() + setSearch('/') + expect(parseDesktopEnv()).toBe(first) + resetDesktopEnvForTests() + expect(parseDesktopEnv().desktop).toBe(false) + }) +}) diff --git a/tests/e2e/drag-layout.e2e.ts b/tests/e2e/drag-layout.e2e.ts index 5b2c54a..422593e 100644 --- a/tests/e2e/drag-layout.e2e.ts +++ b/tests/e2e/drag-layout.e2e.ts @@ -256,3 +256,106 @@ test('width drag tracks the shell 1:1 with transitions disabled (issue #92)', as const convoTravel = first!.convoRight - last!.convoRight expect(Math.abs(convoTravel - stripTravel), 'conversation must track the panel edge 1:1').toBeLessThanOrEqual(8) }) + +test('a very fast width drag still commits the dragged position (no rollback on quick release)', async ({ page }) => { + await page.goto(BASE_URL, { waitUntil: 'domcontentloaded' }) + await expect(page.locator('#root > *')).not.toHaveCount(0, { timeout: 90_000 }) + const sidebar = page.locator('[data-dsh-better-sidebar]') + await expect(sidebar).toBeAttached({ timeout: 90_000 }) + + // Dismiss whatever onboarding takeover is present (same dance as the + // main lane) so the pointer can reach the strip. + try { + await expect + .poll(() => page.getByRole('button', { name: /^(Continue|Configure later)$/ }).count(), { timeout: 60_000 }) + .toBeGreaterThan(0) + } catch { + console.warn('[e2e-drag-fast] no onboarding takeover appeared; proceeding') + } + for (let round = 0; round < 8; round++) { + let dismissed = false + for (const name of ['Continue', 'Configure later']) { + const button = page.getByRole('button', { name, exact: true }).first() + if ((await button.count()) === 0) continue + try { + await button.click({ timeout: 4_000 }) + dismissed = true + await page.waitForTimeout(1_000) + } catch { + // Masked by a takeover stacked above; retry in the next round. + } + } + if (!dismissed) break + } + + const expandButton = sidebar.getByRole('button', { name: 'Expand sidebar' }) + await expect(expandButton, 'the collapsed toggle cluster must offer the expand button').toHaveCount(1) + await expandButton.click() + await expect + .poll(async () => { + const value = await page.evaluate(() => document.documentElement.style.getPropertyValue('--dsh-sidebar-width')) + return value !== '' && value !== '0px' + }, { timeout: 90_000 }) + .toBe(true) + + const readWidth = (): Promise => page.evaluate(() => { + const value = parseFloat(document.documentElement.style.getPropertyValue('--dsh-sidebar-width')) + return Number.isNaN(value) ? 0 : value + }) + const widthBefore = await readWidth() + + const stripBox = await page.evaluate(() => { + const host = document.querySelector('[data-dsh-better-sidebar]') + if (host === null) return null + const boxes = [...host.querySelectorAll('*')] + .filter(el => getComputedStyle(el).cursor === 'col-resize') + .map(el => el.getBoundingClientRect()) + .filter(r => r.width > 0 && r.height > 0) + .sort((a, b) => a.x - b.x) + const r = boxes[0] + if (r === undefined) return null + const varWidth = parseFloat(document.documentElement.style.getPropertyValue('--dsh-sidebar-width')) + return { + x: r.x, y: r.y, width: r.width, height: r.height, + varWidth: Number.isNaN(varWidth) ? 0 : varWidth, + innerWidth: window.innerWidth, + } + }) + expect(stripBox, 'the width drag strip must be present').not.toBeNull() + await expect + .poll(async () => { + const box = await page.evaluate(() => { + const host = document.querySelector('[data-dsh-better-sidebar]') + const el = [...host!.querySelectorAll('*')] + .filter(e => getComputedStyle(e).cursor === 'col-resize') + .map(e => e.getBoundingClientRect()) + .filter(r => r.width > 0 && r.height > 0) + .sort((a, b) => a.x - b.x)[0] + return el === undefined ? null : { x: el.x + el.width, innerWidth: window.innerWidth } + }) + if (box === null) return false + const varWidth = await page.evaluate(() => parseFloat(document.documentElement.style.getPropertyValue('--dsh-sidebar-width')) || 0) + return Math.abs(box.x - (box.innerWidth - varWidth)) <= 8 + }, { timeout: 30_000 }) + .toBe(true) + + const startX = stripBox!.x + stripBox!.width / 2 + const startY = stripBox!.y + Math.min(120, stripBox!.height / 2 + 60) + + // FAST release: a single move and an immediate up — no per-frame waits, + // so the last pointermove may never reach a requestAnimationFrame before + // the release (the exact quick-flick that used to roll back to the + // pre-drag width). + await page.mouse.move(startX, startY) + await page.mouse.down() + await page.mouse.move(startX - 140, startY, { steps: 1 }) + await page.mouse.up() + + // The committed width must reflect the drag — and stay there (no rollback + // once React settles). + await expect + .poll(async () => await readWidth(), { timeout: 10_000 }) + .toBeGreaterThan(widthBefore + 100) + await page.waitForTimeout(600) + expect(await readWidth(), 'the fast drag must not roll back after settling').toBeGreaterThan(widthBefore + 100) +}) diff --git a/tests/e2e/mount.e2e.ts b/tests/e2e/mount.e2e.ts index 5f3e5cf..a7dbf2c 100644 --- a/tests/e2e/mount.e2e.ts +++ b/tests/e2e/mount.e2e.ts @@ -16,11 +16,11 @@ * 4. expands the collapsed panel (openByDefault defaults off), sweeps every * built-in tab (Files / Source Control / Tasks / Terminal / Browser) — * including the lazily-fetched terminal chunk — and then opens seeded - * files through the Files window's tree (in-place mode: the seeded home - * tab itself switches to the file, no new tab), while response waits - * armed before goto prove the lazily-fetched editor chunk - * (client-editor.js) and the mermaid chunk (client-mermaid.js, rendered - * SVG diagram + zoom modal) loaded. + * files through the Files window's tree (separate mode: each file opens + * its own new tab, the seeded home "Files" tab stays the explorer), + * while response waits armed before goto prove the lazily-fetched editor + * chunk (client-editor.js) and the mermaid chunk (client-mermaid.js, + * rendered SVG diagram + zoom modal) loaded. * * Deterministic by construction: every wait is on a DOM/network marker, the * suite is serial (one server instance), and any crash trips the very next @@ -133,6 +133,9 @@ test('plugin mounts into the DSH shell and survives a built-in tab sweep', async await expect(page.locator('#root > *')).not.toHaveCount(0, { timeout: 90_000 }) const sidebar = page.locator('[data-dsh-better-sidebar]') await expect(sidebar).toBeAttached({ timeout: 90_000 }) + // The unified panel host: the fixed containing block every panel lives in + // (data-dsh-panel-host). Its presence is part of the injection contract. + await expect(page.locator('[data-dsh-panel-host]')).toBeAttached({ timeout: 90_000 }) // A keyless boot stacks onboarding takeovers that mask the whole shell: a // versioned welcome notice ("Continue", persists its acknowledgement to @@ -193,14 +196,16 @@ test('plugin mounts into the DSH shell and survives a built-in tab sweep', async await expect .poll(async () => pageErrors, { timeout: 5_000 }) .toEqual([]) - const strips = await sidebar.locator('div').evaluateAll( + // Fail with the actual strip text so a regression is diagnosable from + // the test report alone (a strip renders the client fail() message). + const stripTexts = await sidebar.locator('div').evaluateAll( (nodes, patterns) => nodes.filter((node) => { const text = (node.textContent ?? '').trim() return patterns.some((pattern) => pattern.test(text)) - }).length, + }).map((node) => (node.textContent ?? '').trim()), CRASH_STRIP_PATTERNS, ) - expect(strips, 'a dsh-better-sidebar error strip is present in the sidebar').toBe(0) + expect(stripTexts, 'a dsh-better-sidebar error strip is present in the sidebar').toEqual([]) } // Sweep every built-in tab through the "+" menu (the sidebar's own open-tab @@ -236,7 +241,7 @@ test('plugin mounts into the DSH shell and survives a built-in tab sweep', async await expect(filesTab, 'the seeded files-window home tab must be in the tab strip').toHaveCount(1) await filesTab.click() // Inactive tabs stay mounted (display:none); only the ACTIVE files - // window's embedded tree is visible — match the visible row. + // window's tree is visible — match the visible row. const fileRow = sidebar.locator(`[role="button"][title$="${SEEDED_FILE}"]:visible`) await expect(fileRow, `the seeded "${SEEDED_FILE}" file must appear in the files window's tree`).toHaveCount(1, { timeout: 30_000 }) // Click near the row's LEFT edge: hovering reveals an @-reference button at @@ -244,31 +249,53 @@ test('plugin mounts into the DSH shell and survives a built-in tab sweep', async // (referencing the file into the composer instead of opening it). await fileRow.click({ position: { x: 8, y: 8 } }) await editorChunk - // In-place mode (editorExplorer default): the SAME tab switches to the - // file — its title is rewritten, no new tab appears. One "Files" tab - // remains: the second files window the sweep opened via the + menu. + // Separate-mode default (editorExplorer off): the tree click OPENS A NEW + // file tab (openSidebarFile, id `editor:`) instead of rewriting the + // home tab in place. The seeded "Files" home tab stays put — it is the + // standalone explorer now, not a file window. await expect( - sidebar.locator('[title="Files"][draggable="true"]'), - 'in-place mode rewrites the activated home tab instead of opening a new one', + sidebar.locator(`[title="${SEEDED_FILE}"][draggable="true"]`), + 'separate mode opens a new file tab for the tree click', + ).toHaveCount(1) + // The seeded home tab survives (separate mode never rewrites it). The + // sweep's + menu opened a SECOND path-less Files window (each is its own + // explorer in separate mode), so assert presence, not an exact count. + await expect( + sidebar.locator('[title="Files"][draggable="true"]').first(), + 'the seeded files-window home tab must survive the file open', ).toHaveCount(1) const pathInput = sidebar.locator('input[placeholder^="File path"]:visible') - await expect(pathInput, 'the files window header path input shows the opened file').toHaveValue(new RegExp(`${SEEDED_FILE}$`)) + await expect(pathInput, 'the file tab header path input shows the opened file').toHaveValue(new RegExp(`${SEEDED_FILE}$`)) await page.waitForTimeout(1_500) await assertNoCrash() // The mermaid chunk (client-mermaid.js) only loads when a previewed // markdown file contains a mermaid fence. Open the seeded diagram file - // from the files window's tree (the embedded tree stays pinned while - // hello.txt is open) and require the full round-trip: chunk fetch + - // sanitized SVG diagram in the preview, so a missing/corrupt mermaid - // chunk or a broken render fails the lane. + // from the files window's tree and require the full round-trip: chunk + // fetch + sanitized SVG diagram in the preview, so a missing/corrupt + // mermaid chunk or a broken render fails the lane. In separate mode the + // tree click above activated the hello.txt tab, so switch back to the + // Files explorer first (its tree is the only one visible while active). const mermaidChunk = page.waitForResponse( (response) => response.url().includes('/sidebar/bundle/mermaid.js'), { timeout: 30_000 }, ) + await sidebar.locator('[title="Files"][draggable="true"]').first().click() const mdRow = sidebar.locator(`[role="button"][title$="${SEEDED_MD_FILE}"]:visible`) await expect(mdRow, `the seeded "${SEEDED_MD_FILE}" file must appear in the files window's tree`).toHaveCount(1, { timeout: 30_000 }) await mdRow.click({ position: { x: 8, y: 8 } }) + // Separate mode: the md file opens its own tab (like hello.txt above). + await expect( + sidebar.locator(`[title="${SEEDED_MD_FILE}"][draggable="true"]`), + 'separate mode opens a new tab for the markdown file', + ).toHaveCount(1, { timeout: 30_000 }) + // The markdown PREVIEW must render before the mermaid chunk can be + // requested — this assertion separates a preview/render regression from a + // chunk-loading one. (sidebar is already scoped to [data-dsh-better-sidebar].) + await expect( + sidebar.getByText('tail text'), + 'the markdown preview must render the seeded document', + ).toHaveCount(1, { timeout: 30_000 }) await mermaidChunk await expect( sidebar.locator('[data-mermaid-diagram] svg'), @@ -313,3 +340,21 @@ test('plugin mounts into the DSH shell and survives a built-in tab sweep', async // Final screenshot: the rendered panel with a session is the lane's proof. await page.screenshot({ path: 'test-results/mount-final.png' }) }) + +test('desktop shell stamps auto-enable the win32 title-bar compatibility mode', async ({ page }) => { + // The official DSH Desktop shell stamps every render URL with + // dsh-desktop-mode / dsh-desktop-platform (and exposes a preload marker). + // The win32 advanced shell reserves a 32px overlay for the window + // controls where the toggle cluster sits — the sidebar must auto-drop + // below it (body[data-dsh-title-bar-compat]) without any manual pref. + await page.goto(`${BASE_URL}?dsh-desktop-mode=advanced&dsh-desktop-platform=win32`, { waitUntil: 'domcontentloaded' }) + await expect(page.locator('[data-dsh-better-sidebar]')).toBeAttached({ timeout: 90_000 }) + await expect( + page.locator('body[data-dsh-title-bar-compat]'), + 'win32 advanced shell must auto-enable title-bar compatibility', + ).toBeAttached({ timeout: 90_000 }) + // The strip variable must be sized to the shell's 32px overlay. + await expect + .poll(() => page.evaluate(() => document.documentElement.style.getPropertyValue('--dsh-title-bar-strip'))) + .toBe('32px') +}) diff --git a/tests/editor-host.spec.tsx b/tests/editor-host.spec.tsx index f01bb01..1e060e7 100644 --- a/tests/editor-host.spec.tsx +++ b/tests/editor-host.spec.tsx @@ -21,7 +21,8 @@ import { allLeaves, createSidebarStore, type SidebarTab } from '../src/client/st // The act() environment flag (React 18.2 reads it before flushing effects). ;(globalThis as Record).IS_REACT_ACT_ENVIRONMENT = true -/** A store with the seeded editor-home tab (default prefs: in-place mode). */ +/** A store with the seeded editor-home tab (default prefs: separate mode; + * merged-mode scenarios re-enable editorExplorer explicitly). */ function setup(): { store: ReturnType ctx: Context @@ -91,6 +92,7 @@ function typeAndCommit(input: HTMLInputElement, value: string): void { describe('EditorHost (files window)', () => { it('a path-less tab renders the empty-state hint with the tree panel open', () => { const { store, ctx, homeTab } = setup() + store.setPrefs({ ...store.getPrefs(), editorExplorer: true }) const { container, unmount } = mountHost(ctx, store, homeTab) try { const html = container.innerHTML @@ -112,6 +114,7 @@ describe('EditorHost (files window)', () => { it('the tree toggle persists meta.treeOpen through updateTab', () => { const { store, ctx, homeTab } = setup() + store.setPrefs({ ...store.getPrefs(), editorExplorer: true }) expect(homeTab().meta).toEqual({ treeOpen: true }) const { container, rerender, unmount } = mountHost(ctx, store, homeTab) try { @@ -136,6 +139,7 @@ describe('EditorHost (files window)', () => { it('in-place mode: the path input Enter switches the CURRENT tab (stable id, meta kept)', () => { const { store, ctx, homeTab } = setup() + store.setPrefs({ ...store.getPrefs(), editorExplorer: true }) const { container, unmount } = mountHost(ctx, store, homeTab) try { const before = homeTab() @@ -217,6 +221,7 @@ describe('EditorHost (files window)', () => { it('dragging the panel edge resizes the dock and persists meta.treeWidth on release', () => { const { store, ctx, homeTab } = setup() + store.setPrefs({ ...store.getPrefs(), editorExplorer: true }) const { container, unmount } = mountHost(ctx, store, homeTab) try { const handle = container.querySelector('[role="separator"]')! diff --git a/tests/manifest-consistency.spec.ts b/tests/manifest-consistency.spec.ts index f466c16..66168d1 100644 --- a/tests/manifest-consistency.spec.ts +++ b/tests/manifest-consistency.spec.ts @@ -50,9 +50,7 @@ const CLIENT_REQUIRE_ALLOWED = new Set([ 'react-dom/client', 'cordis', '@deepseek-ai/dsh-client-ui-slots', - '@deepseek-ai/dsh-client-web-react', '@deepseek-ai/dsh-client-ui-primitives', - '@deepseek-ai/dsh-client-schema-form', '@deepseek-ai/dsh-client-runtime/client', ]) diff --git a/tests/plugin-shape.spec.ts b/tests/plugin-shape.spec.ts index a46f7dc..72f20e3 100644 --- a/tests/plugin-shape.spec.ts +++ b/tests/plugin-shape.spec.ts @@ -76,14 +76,15 @@ describe('dsh-better-sidebar plugin export shape', () => { // The enable-switch maps resolve to {} (everything on) for old documents. expect(resolved.tabsEnabled).toEqual({}) expect(resolved.viewersEnabled).toEqual({}) - // The merged editor-explorer mode defaults ON. - expect(resolved.editorExplorer).toBe(true) + // The separate file-window mode is the default (each file opens its own + // tab; the merged editor-explorer is opt-in). + expect(resolved.editorExplorer).toBe(false) // A stored overridden value resolves through (the range contract is // enforced by the settings service on write); the new pref keeps its // default when the stored document predates it. const overridden = (PrefsSchema as unknown as { (input: Record | undefined): Record })({ openByDefault: false, defaultWidthPercent: 45 }) - expect(overridden).toEqual({ openByDefault: false, defaultWidthPercent: 45, autoOpenSubagent: true, autoOpenJobs: true, agentTerminalTools: false, bottomPanelAutoTerminal: true, terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, editorExplorer: true, titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, htmlViewerDefaultUnsafe: false, browserNoSandbox: false, browserInterceptLinks: true, browserInterceptHttp: true, browserInterceptHttps: false, tabsEnabled: {}, viewersEnabled: {}, pluginSettings: {} }) + expect(overridden).toEqual({ openByDefault: false, defaultWidthPercent: 45, autoOpenSubagent: true, autoOpenJobs: true, agentTerminalTools: false, bottomPanelAutoTerminal: true, terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, editorExplorer: false, terminalShell: '', terminalShellArgs: '', titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, htmlViewerDefaultUnsafe: false, browserNoSandbox: false, browserInterceptLinks: true, browserInterceptHttp: true, browserInterceptHttps: false, tabsEnabled: {}, viewersEnabled: {}, pluginSettings: {} }) }) }) diff --git a/tests/prefs.spec.ts b/tests/prefs.spec.ts index 3f8a54d..45a700c 100644 --- a/tests/prefs.spec.ts +++ b/tests/prefs.spec.ts @@ -42,7 +42,9 @@ describe('side card preferences', () => { terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, - editorExplorer: true, + editorExplorer: false, + terminalShell: '', + terminalShellArgs: '', titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, @@ -69,7 +71,9 @@ describe('side card preferences', () => { terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, - editorExplorer: true, + editorExplorer: false, + terminalShell: '', + terminalShellArgs: '', titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, @@ -96,7 +100,9 @@ describe('side card preferences', () => { terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, - editorExplorer: true, + editorExplorer: false, + terminalShell: '', + terminalShellArgs: '', titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, @@ -135,11 +141,11 @@ describe('side card preferences', () => { expect((await loadPrefs(wire({ interceptOpenPath: true }))).interceptOpenPath).toBe(true) }) - it('defaults editorExplorer to true; only an explicit false restores the plain editor', async () => { - // Absent or malformed → on (the merged editor-explorer is the default). - expect((await loadPrefs(wire({}))).editorExplorer).toBe(true) - expect((await loadPrefs(wire({ editorExplorer: 'yes' }))).editorExplorer).toBe(true) - expect((await loadPrefs(wire({ editorExplorer: 0 }))).editorExplorer).toBe(true) + it('defaults editorExplorer to false; only an explicit true enables the merged editor-explorer', async () => { + // Absent or malformed → off (separate file windows are the default). + expect((await loadPrefs(wire({}))).editorExplorer).toBe(false) + expect((await loadPrefs(wire({ editorExplorer: 'yes' }))).editorExplorer).toBe(false) + expect((await loadPrefs(wire({ editorExplorer: 1 }))).editorExplorer).toBe(false) // Explicit booleans survive verbatim. expect((await loadPrefs(wire({ editorExplorer: false }))).editorExplorer).toBe(false) expect((await loadPrefs(wire({ editorExplorer: true }))).editorExplorer).toBe(true) @@ -217,9 +223,9 @@ describe('side card preferences', () => { const store = createSidebarStore() // Node environment: no window → the width falls back to PANEL_DEFAULT, // while the open flag still follows the preference. - store.setPrefs({ openByDefault: false, defaultWidthPercent: 45, autoOpenSubagent: true, autoOpenJobs: true, agentTerminalTools: false, bottomPanelAutoTerminal: true, terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, editorExplorer: true, titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, htmlViewerDefaultUnsafe: false, browserNoSandbox: false, browserInterceptLinks: true, browserInterceptHttp: true, browserInterceptHttps: false, tabsEnabled: {}, viewersEnabled: {}, pluginSettings: {} }) + store.setPrefs({ openByDefault: false, defaultWidthPercent: 45, autoOpenSubagent: true, autoOpenJobs: true, agentTerminalTools: false, bottomPanelAutoTerminal: true, terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, editorExplorer: true, terminalShell: '', terminalShellArgs: '', titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, htmlViewerDefaultUnsafe: false, browserNoSandbox: false, browserInterceptLinks: true, browserInterceptHttp: true, browserInterceptHttps: false, tabsEnabled: {}, viewersEnabled: {}, pluginSettings: {} }) store.setSession('fresh-session') - expect(store.getPrefs()).toEqual({ openByDefault: false, defaultWidthPercent: 45, autoOpenSubagent: true, autoOpenJobs: true, agentTerminalTools: false, bottomPanelAutoTerminal: true, terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, editorExplorer: true, titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, htmlViewerDefaultUnsafe: false, browserNoSandbox: false, browserInterceptLinks: true, browserInterceptHttp: true, browserInterceptHttps: false, tabsEnabled: {}, viewersEnabled: {}, pluginSettings: {} }) + expect(store.getPrefs()).toEqual({ openByDefault: false, defaultWidthPercent: 45, autoOpenSubagent: true, autoOpenJobs: true, agentTerminalTools: false, bottomPanelAutoTerminal: true, terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, editorExplorer: true, terminalShell: '', terminalShellArgs: '', titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, htmlViewerDefaultUnsafe: false, browserNoSandbox: false, browserInterceptLinks: true, browserInterceptHttp: true, browserInterceptHttps: false, tabsEnabled: {}, viewersEnabled: {}, pluginSettings: {} }) const snapshot = store.getSnapshot() expect(snapshot.sessionId).toBe('fresh-session') expect(snapshot.state?.panelOpen).toBe(false) @@ -255,7 +261,7 @@ describe('side card preferences', () => { it('skips the default seed tab when the editor (files window) type is disabled', () => { const store = createSidebarStore() - store.setPrefs({ openByDefault: true, defaultWidthPercent: 30, autoOpenSubagent: true, autoOpenJobs: true, agentTerminalTools: false, bottomPanelAutoTerminal: true, terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, editorExplorer: true, titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, htmlViewerDefaultUnsafe: false, browserNoSandbox: false, browserInterceptLinks: true, browserInterceptHttp: true, browserInterceptHttps: false, tabsEnabled: { editor: false }, viewersEnabled: {}, pluginSettings: {} }) + store.setPrefs({ openByDefault: true, defaultWidthPercent: 30, autoOpenSubagent: true, autoOpenJobs: true, agentTerminalTools: false, bottomPanelAutoTerminal: true, terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, editorExplorer: true, terminalShell: '', terminalShellArgs: '', titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, htmlViewerDefaultUnsafe: false, browserNoSandbox: false, browserInterceptLinks: true, browserInterceptHttp: true, browserInterceptHttps: false, tabsEnabled: { editor: false }, viewersEnabled: {}, pluginSettings: {} }) store.setSession('no-editor') const state = store.getSnapshot().state! const tabs = allLeaves(state.splits).flatMap(leaf => leaf.tabs) @@ -265,7 +271,7 @@ describe('side card preferences', () => { // editorExplorer modes. for (const editorExplorer of [true, false]) { const openStore = createSidebarStore() - openStore.setPrefs({ openByDefault: true, defaultWidthPercent: 30, autoOpenSubagent: true, autoOpenJobs: true, agentTerminalTools: false, bottomPanelAutoTerminal: true, terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, editorExplorer, titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, htmlViewerDefaultUnsafe: false, browserNoSandbox: false, browserInterceptLinks: true, browserInterceptHttp: true, browserInterceptHttps: false, tabsEnabled: {}, viewersEnabled: {}, pluginSettings: {} }) + openStore.setPrefs({ openByDefault: true, defaultWidthPercent: 30, autoOpenSubagent: true, autoOpenJobs: true, agentTerminalTools: false, bottomPanelAutoTerminal: true, terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, editorExplorer, terminalShell: '', terminalShellArgs: '', titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, htmlViewerDefaultUnsafe: false, browserNoSandbox: false, browserInterceptLinks: true, browserInterceptHttp: true, browserInterceptHttps: false, tabsEnabled: {}, viewersEnabled: {}, pluginSettings: {} }) openStore.setSession(`with-editor-${editorExplorer}`) const openTabs = allLeaves(openStore.getSnapshot().state!.splits).flatMap(leaf => leaf.tabs) expect(openTabs.map(tab => tab.type)).toEqual(['editor']) @@ -275,7 +281,7 @@ describe('side card preferences', () => { it('seeds the empty editor home tab (files window) in both editorExplorer modes', () => { for (const editorExplorer of [true, false]) { const store = createSidebarStore() - store.setPrefs({ openByDefault: true, defaultWidthPercent: 30, autoOpenSubagent: true, autoOpenJobs: true, agentTerminalTools: false, bottomPanelAutoTerminal: true, terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, editorExplorer, titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, htmlViewerDefaultUnsafe: false, browserNoSandbox: false, browserInterceptLinks: true, browserInterceptHttp: true, browserInterceptHttps: false, tabsEnabled: {}, viewersEnabled: {}, pluginSettings: {} }) + store.setPrefs({ openByDefault: true, defaultWidthPercent: 30, autoOpenSubagent: true, autoOpenJobs: true, agentTerminalTools: false, bottomPanelAutoTerminal: true, terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, editorExplorer, terminalShell: '', terminalShellArgs: '', titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, htmlViewerDefaultUnsafe: false, browserNoSandbox: false, browserInterceptLinks: true, browserInterceptHttp: true, browserInterceptHttps: false, tabsEnabled: {}, viewersEnabled: {}, pluginSettings: {} }) store.setSession(`fresh-${editorExplorer}`) const tabs = allLeaves(store.getSnapshot().state!.splits).flatMap(leaf => leaf.tabs) expect(tabs).toHaveLength(1) diff --git a/tests/side-card-section-rows.spec.tsx b/tests/side-card-section-rows.spec.tsx index 0706b1a..a873266 100644 --- a/tests/side-card-section-rows.spec.tsx +++ b/tests/side-card-section-rows.spec.tsx @@ -200,7 +200,9 @@ describe('FeatureSettingsRows select rows (interactive)', () => { } const { container, unmount } = mount(createElement(FeatureSettingsRows, { toggles: [toggle], - prefs, + // Merged is the selected option for this scenario (the default is now + // separate — the anchor must render whatever value the prefs carry). + prefs: { ...prefs, editorExplorer: true }, onToggle: () => {}, onSelectValue: (t, next) => { commits.push([t.key, next]) }, })) diff --git a/tests/side-card-section.spec.tsx b/tests/side-card-section.spec.tsx index ecdb9df..11d2605 100644 --- a/tests/side-card-section.spec.tsx +++ b/tests/side-card-section.spec.tsx @@ -14,10 +14,19 @@ * Rendered with renderToString (mount effects — the settings RPC sync — do * not run in SSR; the initial store prefs are the render input). */ -import { describe, expect, it } from 'vitest' +import { beforeAll, describe, expect, it } from 'vitest' import { renderToString } from 'react-dom/server' import { createElement } from 'react' import { createSidebarStore, type SidebarStore } from '../src/client/state.ts' +// The copy assertions below are English; pin the browser language so the +// module-level t()/isZh() resolve en regardless of the host system locale +// (vitest 4.1.11+/jsdom follow the OS locale — zh-CN on this machine). +beforeAll(() => { + Object.defineProperty(navigator, 'language', { + value: 'en-US', + configurable: true, + }) +}) import { createBetterSidebarService, type BetterSidebarService } from '../src/client/service.ts' import { SIDEBAR_PREFS_DEFAULTS } from '../src/prefs-shared.ts' import { FeatureSettingsRows, mergePluginSetting, SideCardSection, type SideCardSectionProps } from '../src/client/SideCardSection.tsx' diff --git a/tests/smoke.spec.ts b/tests/smoke.spec.ts index e160b39..93eb438 100644 --- a/tests/smoke.spec.ts +++ b/tests/smoke.spec.ts @@ -604,7 +604,9 @@ describe('side card settings routes', () => { terminalFontFamily: '', terminalFontSize: 13, interceptOpenPath: true, - editorExplorer: true, + editorExplorer: false, + terminalShell: '', + terminalShellArgs: '', titleBarCompat: false, titleBarStripPx: 40, htmlViewerNoSandbox: false, diff --git a/tests/tools.spec.ts b/tests/tools.spec.ts index be7ce66..b1c1ed8 100644 --- a/tests/tools.spec.ts +++ b/tests/tools.spec.ts @@ -87,7 +87,7 @@ function mount(): { captured: CapturedTool[]; registry: FakeRegistry; dispose: ( }, } as unknown as Context const registry = new FakeRegistry() - const dispose = registerTools(ctx, registry as unknown as AgentPtyRegistry, () => '/cwd') + const dispose = registerTools(ctx, registry as unknown as AgentPtyRegistry, () => '/cwd', () => ({})) return { captured, registry, dispose: () => { dispose(); return disposeCount } } } diff --git a/tsdown.config.ts b/tsdown.config.ts index e098429..e0376a1 100644 --- a/tsdown.config.ts +++ b/tsdown.config.ts @@ -63,9 +63,7 @@ const CLIENT_EXTERNALS = [ 'react-dom/client', 'cordis', '@deepseek-ai/dsh-client-ui-slots', - '@deepseek-ai/dsh-client-web-react', '@deepseek-ai/dsh-client-ui-primitives', - '@deepseek-ai/dsh-client-schema-form', '@deepseek-ai/dsh-client-runtime/client', ]