@xiaoso/dsh-tool-plus 0.1.10-beta.3 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.en.md CHANGED
@@ -30,19 +30,28 @@ Settings panel (Bash tab):
30
30
 
31
31
  ## Installation
32
32
 
33
- - **Agent presets**: two companion templates — Standard enhanced and PTC (Code Mode)
34
-
35
33
  ### Install from npm (recommended)
36
34
 
35
+ #### Web
36
+
37
37
  ```sh
38
- dsh plugin --profile web add --allow-build=@xiaoso/dsh-tool-plus @xiaoso/dsh-tool-plus
38
+ dsh plugin --profile web add --allow-build=@xiaoso/dsh-tool-plus --allow-build=koffi @xiaoso/dsh-tool-plus
39
39
  ```
40
40
 
41
- `--allow-build` lets this package's install script run; it requires pnpm ≥ 10.4, and on pnpm 11+ omitting it fails the install with `ERR_PNPM_IGNORED_BUILDS`. If your pnpm is too old for the flag, allow the script first and re-run:
41
+ `--allow-build` lets install scripts run (once for this package, once for `koffi`); it requires pnpm ≥ 10.4, and on pnpm 11+ omitting it fails the install with `ERR_PNPM_IGNORED_BUILDS`. If your pnpm is too old for the flag, allow the scripts first and re-run:
42
42
 
43
- - Append to `~/.dsh/profiles/web/pnpm-workspace.yaml`: `allowBuilds:` and ` '@xiaoso/dsh-tool-plus': true`
43
+ - Append to `~/.dsh/profiles/web/pnpm-workspace.yaml`: `allowBuilds:`, ` '@xiaoso/dsh-tool-plus': true` and ` koffi: true`
44
44
  - Or run `cd ~/.dsh/profiles/web && pnpm approve-builds --all` (pnpm ≥ 10.32)
45
45
 
46
+ #### Desktop
47
+
48
+ The profile is owned by the desktop app, so `dsh plugin --profile desktop` is refused; install inside the profile directory instead:
49
+
50
+ ```sh
51
+ cd ~/.dsh/profiles/desktop
52
+ pnpm add --allow-build=@xiaoso/dsh-tool-plus --allow-build=koffi @xiaoso/dsh-tool-plus
53
+ ```
54
+
46
55
  ### Local development
47
56
 
48
57
  ```sh
@@ -78,7 +87,7 @@ Works out of the box, no configuration needed. Common tweaks: background thresho
78
87
  - **dsh CLI**: installed globally, `npm i -g @deepseek-ai/dsh`
79
88
  - **Node.js** ≥ 22.19 or ≥ 24
80
89
  - **Git Bash** (recommended): serves as the bash execution environment on Windows
81
- - Targets DeepSeek Harness `dsh` v0.1.7-rc.2 (pre-release; interfaces may change)
90
+ - Targets DeepSeek Harness `dsh` v0.2.0-rc.1 (pre-release; interfaces may change)
82
91
 
83
92
  ## Notes
84
93
 
package/README.md CHANGED
@@ -30,19 +30,28 @@ DeepSeek Harness 基础工具增强:持久 bash、结构化 read、多模式 e
30
30
 
31
31
  ## 安装
32
32
 
33
- - **agent 预设**:标准增强版 / PTC(Code Mode)两套配套模板
34
-
35
33
  ### 从 npm 安装(推荐)
36
34
 
35
+ #### Web 端
36
+
37
37
  ```sh
38
- dsh plugin --profile web add --allow-build=@xiaoso/dsh-tool-plus @xiaoso/dsh-tool-plus
38
+ dsh plugin --profile web add --allow-build=@xiaoso/dsh-tool-plus --allow-build=koffi @xiaoso/dsh-tool-plus
39
39
  ```
40
40
 
41
- `--allow-build` 放行本包的安装脚本,需要 pnpm ≥ 10.4;pnpm 11 起不加会直接报 `ERR_PNPM_IGNORED_BUILDS` 装不上。用不了该参数(pnpm 版本过低)时,先任选一种放行方式,再重跑安装命令:
41
+ `--allow-build` 放行安装脚本(本包和 `koffi` 各一次),需要 pnpm ≥ 10.4;pnpm 11 起不加会直接报 `ERR_PNPM_IGNORED_BUILDS` 装不上。用不了该参数(pnpm 版本过低)时,先任选一种放行方式,再重跑安装命令:
42
42
 
43
- - 往 `~/.dsh/profiles/web/pnpm-workspace.yaml` 追加两行:`allowBuilds:` 与 ` '@xiaoso/dsh-tool-plus': true`
43
+ - 往 `~/.dsh/profiles/web/pnpm-workspace.yaml` 追加三行:`allowBuilds:`、` '@xiaoso/dsh-tool-plus': true`、` koffi: true`
44
44
  - 或执行 `cd ~/.dsh/profiles/web && pnpm approve-builds --all`(需 pnpm ≥ 10.32)
45
45
 
46
+ #### 桌面端
47
+
48
+ profile 由桌面应用独占,`dsh plugin --profile desktop` 会被拒;要装新版就进它自己的目录:
49
+
50
+ ```sh
51
+ cd ~/.dsh/profiles/desktop
52
+ pnpm add --allow-build=@xiaoso/dsh-tool-plus --allow-build=koffi @xiaoso/dsh-tool-plus
53
+ ```
54
+
46
55
  ### 本地开发
47
56
 
48
57
  ```sh
@@ -78,7 +87,7 @@ dsh plugin --profile web add link:<本仓库路径>
78
87
  - **dsh CLI**:需全局安装,`npm i -g @deepseek-ai/dsh`
79
88
  - **Node.js** ≥ 22.19 或 ≥ 24
80
89
  - **Git Bash**(推荐):Windows 上作为 bash 执行环境
81
- - 适用于 DeepSeek Harness `dsh` v0.1.7-rc.2(pre-release,接口可能变动)
90
+ - 适用于 DeepSeek Harness `dsh` v0.2.0-rc.1(pre-release,接口可能变动)
82
91
 
83
92
  ## 注意事项
84
93
 
package/lib/index.mjs CHANGED
@@ -3,7 +3,7 @@ __installBunShim();
3
3
  import { n as fs_promises_shim_exports, t as exists } from "./fs-promises-shim-B2YFWkcd.mjs";
4
4
  import { i as setRuntimeLogger, n as systemChromiumCandidatesForTest, r as runtimeLogger } from "./launch-BIWNyrBB.mjs";
5
5
  import { $ as isEnoent, A as formatCount, C as warn, D as installBunShim, F as $flag, N as $env, O as formatAge, P as $envpos, Q as hasFsCode, U as getAutoQaDbPath, V as VERSION, X as getRemoteDir, Y as getPuppeteerDir, at as findOnPath, b as debug, c as combineSignals, d as $which, et as isEnotdir, it as untilAborted, k as formatBytes$1, l as exec, m as readImageMetadata, nt as peekFile, q as getInstallId, tt as isProbablyBinary, u as render, x as error } from "./src-AELUUb5U.mjs";
6
- import { C as truncateToWidth$1, S as replaceTabs, _ as formatCodeFrameLine, a as fetchBinary, b as LRUCache, c as getParallelExtractContent, d as convertFileWithMarkit, f as Settings, g as capParseErrors, h as OMP_DEFAULTS, i as convertWithMarkit, l as ensureTool, m as settings, o as extractWithParallel, p as isSettingsInitialized, s as findParallelApiKey, u as CONVERTIBLE_EXTENSIONS, v as formatParseErrors, x as padding, y as shortenPath } from "./utils-BZWfyz9e.mjs";
6
+ import { C as truncateToWidth$1, S as replaceTabs, _ as formatCodeFrameLine, a as fetchBinary, b as LRUCache, c as getParallelExtractContent, d as convertFileWithMarkit, f as Settings, g as capParseErrors, h as OMP_DEFAULTS, i as convertWithMarkit, l as ensureTool, m as settings, o as extractWithParallel, p as isSettingsInitialized, s as findParallelApiKey, u as CONVERTIBLE_EXTENSIONS, v as formatParseErrors, x as padding, y as shortenPath } from "./utils-DEKneb49.mjs";
7
7
  import { t as sanitizeText } from "./sanitize-text-BCf5KmCf.mjs";
8
8
  import { n as isRecord$5 } from "./type-guards-CttAANEx.mjs";
9
9
  import { n as ToolError, r as throwIfAborted, t as ToolAbortError } from "./tool-errors-DoyxivAR.mjs";
@@ -23,7 +23,7 @@ import { spawn } from "node:child_process";
23
23
  import * as os from "node:os";
24
24
  import { homedir, tmpdir } from "node:os";
25
25
  import * as url from "node:url";
26
- import { fileURLToPath, pathToFileURL } from "node:url";
26
+ import { fileURLToPath } from "node:url";
27
27
  import { scheduler } from "node:timers/promises";
28
28
  import { randomBytes } from "node:crypto";
29
29
  import z from "@deepseek-ai/schemastery";
@@ -5773,30 +5773,16 @@ function installBrowserProbeRpc(ctx, deps) {
5773
5773
  //#endregion
5774
5774
  //#region src/host/win32-console.ts
5775
5775
  /**
5776
- * Windows:让宿主进程自己持有一个「不可见控制台」。
5776
+ * Windows:给宿主进程补一个**不可见**控制台,让它的 console 子进程去继承。
5777
5777
  *
5778
- * 为什么需要(2026-09-25 实测):桌面端宿主是 GUI 子系统镜像
5779
- * (`DeepSeek Harness.exe` + `ELECTRON_RUN_AS_NODE=1`),Windows 永远不会给它
5780
- * 分配控制台;于是它的每个 console 子进程(pi-shell 的 `where git` 探测、快照
5781
- * `bash.exe`、任何插件 spawn 的 CLI)都要**新建**一个控制台,而默认终端应用是
5782
- * Windows Terminal → 每条命令闪一个窗口。
5778
+ * 宿主是 GUI 子系统镜像(`DeepSeek Harness.exe` + `ELECTRON_RUN_AS_NODE=1`),
5779
+ * Windows 从不给它分配控制台;父进程没有控制台时子进程会**新建**一个,而默认
5780
+ * 终端是 Windows Terminal → 每条命令闪一个窗口。宿主自己 `AllocConsole()` +
5781
+ * `SW_HIDE` 之后,子进程就只是继承它,不再新建。
5783
5782
  *
5784
- * 控制台是「父进程有 → 子进程默认继承;父进程没有 → 子进程新建」:宿主自己先
5785
- * `AllocConsole()` 再立刻 `SW_HIDE`,之后所有 console 子进程都继承它,不再新建
5786
- * 窗口。实测(无控制台宿主里 spawn 一个 `where.exe`):不装 → 新开一个可见 WT
5787
- * 窗口(窗口里的进程正是那个 where.exe);装了 → 子进程报「继承了我的控制台」、
5788
- * 零新窗口。代价:分配那一刻会出现一个 WT 窗口、可见约 1.8s —— 默认终端是 WT 时
5789
- * `ShowWindow(GetConsoleWindow())` 只藏得住 conhost 侧那个窗口对象,藏不住
5790
- * wt.exe 宿主窗口。这一次性的窗口只能在源头消除(上游给 `where` 探测加
5791
- * `CREATE_NO_WINDOW`,或让宿主从 console 子系统父进程继承一个 CREATE_NO_WINDOW
5792
- * 的控制台)。
5793
- *
5794
- * 三条硬约束(都有测试钉住):
5795
- * - 只在 win32 生效;宿主**已经有**控制台(CLI 在终端里跑)时什么都不做,否则会
5796
- * 凭空多出一个控制台;
5797
- * - `AllocConsole` 会重指 STD_INPUT/OUTPUT/ERROR,而宿主的 stdio 是启动方给的
5798
- * pipe → 必须先存后还,否则可能污染宿主输出、弄断 shell 的管道;
5799
- * - 任何失败(没有 koffi、句柄取不到、`AllocConsole` 失败)都只降级,不抛。
5783
+ * 三条硬约束(都有测试钉住):只在 win32 生效、宿主已有控制台时零副作用;
5784
+ * `AllocConsole` 会重指标准句柄,必须先存后还(宿主 stdio 是启动方给的 pipe);
5785
+ * 任何失败只降级不抛。FFI 只从本包自己的依赖取,拿不到就降级。
5800
5786
  * @module @xiaoso/dsh-tool-plus/host/win32-console
5801
5787
  */
5802
5788
  /** 三个标准句柄的 Win32 编号,顺序即存取顺序。 */
@@ -5833,23 +5819,15 @@ function installHiddenHostConsole(platform, load) {
5833
5819
  function asCall(value) {
5834
5820
  return value;
5835
5821
  }
5836
- /** 从「宿主入口所在目录」解析依赖:打包运行时的 koffi 装在宿主 node_modules 里。 */
5837
- function hostRequire() {
5838
- const entry = process.argv[1];
5839
- if (entry === void 0 || entry.length === 0) return void 0;
5840
- try {
5841
- return createRequire(pathToFileURL(path$1.join(path$1.dirname(entry), "tool-plus-host-console.js")));
5842
- } catch {
5843
- return;
5844
- }
5845
- }
5846
- /** 真实加载:先本包依赖的 koffi,再宿主运行时自带的 koffi。 */
5822
+ /**
5823
+ * 真实加载:只从**本包自己的依赖**解析 koffi(`optionalDependencies`)。
5824
+ *
5825
+ * 刻意不去宿主运行时的 node_modules 里找:宿主的内部布局不是契约,跨包按路径解析
5826
+ * 是耦合。拿不到(没装、平台没有预编译包)就返回 undefined,功能降级。
5827
+ */
5847
5828
  function loadKoffiBindings() {
5848
- const requires = [createRequire(import.meta.url)];
5849
- const host = hostRequire();
5850
- if (host !== void 0) requires.push(host);
5851
- for (const requireKoffi of requires) try {
5852
- const koffi = requireKoffi("koffi");
5829
+ try {
5830
+ const koffi = createRequire(import.meta.url)("koffi");
5853
5831
  const kernel32 = koffi.load("kernel32.dll");
5854
5832
  const user32 = koffi.load("user32.dll");
5855
5833
  return {
@@ -5859,7 +5837,9 @@ function loadKoffiBindings() {
5859
5837
  getStdHandle: asCall(kernel32.func("void *GetStdHandle(int nStdHandle)")),
5860
5838
  setStdHandle: asCall(kernel32.func("bool SetStdHandle(int nStdHandle, void *h)"))
5861
5839
  };
5862
- } catch {}
5840
+ } catch {
5841
+ return;
5842
+ }
5863
5843
  }
5864
5844
  /**
5865
5845
  * 插件入口调用:win32 且能拿到 FFI 时才安装,结果只用于日志。
@@ -11499,7 +11479,7 @@ let specialHandlersPromise;
11499
11479
  * requires a special handler, so we keep them out of the cold-startup graph.
11500
11480
  */
11501
11481
  function loadSpecialHandlers() {
11502
- specialHandlersPromise ??= import("./scrapers-C6EY0T00.mjs").then((m) => m.specialHandlers);
11482
+ specialHandlersPromise ??= import("./scrapers-CGbC0tfO.mjs").then((m) => m.specialHandlers);
11503
11483
  return specialHandlersPromise;
11504
11484
  }
11505
11485
  /**
@@ -3,7 +3,7 @@ __installBunShim();
3
3
  import { n as fs_promises_shim_exports } from "./fs-promises-shim-B2YFWkcd.mjs";
4
4
  import { $ as isEnoent, B as USER_AGENT, C as warn, G as getDocsRsCacheDir, N as $env, c as combineSignals, j as formatNumber, k as formatBytes, l as exec, s as Snowflake, y as parseFrontmatter } from "./src-AELUUb5U.mjs";
5
5
  import { W as tryParseJson } from "./utils-cZX3f_Ls.mjs";
6
- import { a as fetchBinary, c as getParallelExtractContent, i as convertWithMarkit, l as ensureTool, m as settings, n as asRecord, o as extractWithParallel, r as asString, s as findParallelApiKey, t as asNumber } from "./utils-BZWfyz9e.mjs";
6
+ import { a as fetchBinary, c as getParallelExtractContent, i as convertWithMarkit, l as ensureTool, m as settings, n as asRecord, o as extractWithParallel, r as asString, s as findParallelApiKey, t as asNumber } from "./utils-DEKneb49.mjs";
7
7
  import { n as isRecord } from "./type-guards-CttAANEx.mjs";
8
8
  import { r as throwIfAborted, t as ToolAbortError } from "./tool-errors-DoyxivAR.mjs";
9
9
  import { c as getLocalizedText, d as looksLikeHtml, i as decodeHtmlEntities, l as htmlToBasicMarkdown, o as formatIsoDate, r as buildResult, s as formatMediaDuration, u as loadPage } from "./types-BLrLohwK.mjs";
@@ -1,28 +1,14 @@
1
1
  /**
2
- * Windows:让宿主进程自己持有一个「不可见控制台」。
2
+ * Windows:给宿主进程补一个**不可见**控制台,让它的 console 子进程去继承。
3
3
  *
4
- * 为什么需要(2026-09-25 实测):桌面端宿主是 GUI 子系统镜像
5
- * (`DeepSeek Harness.exe` + `ELECTRON_RUN_AS_NODE=1`),Windows 永远不会给它
6
- * 分配控制台;于是它的每个 console 子进程(pi-shell 的 `where git` 探测、快照
7
- * `bash.exe`、任何插件 spawn 的 CLI)都要**新建**一个控制台,而默认终端应用是
8
- * Windows Terminal → 每条命令闪一个窗口。
4
+ * 宿主是 GUI 子系统镜像(`DeepSeek Harness.exe` + `ELECTRON_RUN_AS_NODE=1`),
5
+ * Windows 从不给它分配控制台;父进程没有控制台时子进程会**新建**一个,而默认
6
+ * 终端是 Windows Terminal → 每条命令闪一个窗口。宿主自己 `AllocConsole()` +
7
+ * `SW_HIDE` 之后,子进程就只是继承它,不再新建。
9
8
  *
10
- * 控制台是「父进程有 → 子进程默认继承;父进程没有 → 子进程新建」:宿主自己先
11
- * `AllocConsole()` 再立刻 `SW_HIDE`,之后所有 console 子进程都继承它,不再新建
12
- * 窗口。实测(无控制台宿主里 spawn 一个 `where.exe`):不装 → 新开一个可见 WT
13
- * 窗口(窗口里的进程正是那个 where.exe);装了 → 子进程报「继承了我的控制台」、
14
- * 零新窗口。代价:分配那一刻会出现一个 WT 窗口、可见约 1.8s —— 默认终端是 WT 时
15
- * `ShowWindow(GetConsoleWindow())` 只藏得住 conhost 侧那个窗口对象,藏不住
16
- * wt.exe 宿主窗口。这一次性的窗口只能在源头消除(上游给 `where` 探测加
17
- * `CREATE_NO_WINDOW`,或让宿主从 console 子系统父进程继承一个 CREATE_NO_WINDOW
18
- * 的控制台)。
19
- *
20
- * 三条硬约束(都有测试钉住):
21
- * - 只在 win32 生效;宿主**已经有**控制台(CLI 在终端里跑)时什么都不做,否则会
22
- * 凭空多出一个控制台;
23
- * - `AllocConsole` 会重指 STD_INPUT/OUTPUT/ERROR,而宿主的 stdio 是启动方给的
24
- * pipe → 必须先存后还,否则可能污染宿主输出、弄断 shell 的管道;
25
- * - 任何失败(没有 koffi、句柄取不到、`AllocConsole` 失败)都只降级,不抛。
9
+ * 三条硬约束(都有测试钉住):只在 win32 生效、宿主已有控制台时零副作用;
10
+ * `AllocConsole` 会重指标准句柄,必须先存后还(宿主 stdio 是启动方给的 pipe);
11
+ * 任何失败只降级不抛。FFI 只从本包自己的依赖取,拿不到就降级。
26
12
  * @module @xiaoso/dsh-tool-plus/host/win32-console
27
13
  */
28
14
  /** Win32 调用集合;真实实现走 koffi,测试注入 fake。 */
@@ -6267,7 +6267,7 @@ const settings = {
6267
6267
  };
6268
6268
  //#endregion
6269
6269
  //#region package.json
6270
- var version = "0.1.10-beta.2";
6270
+ var version = "0.1.11";
6271
6271
  /** `.tmp` files older than this are treated as orphaned writes and swept. */
6272
6272
  const TMP_ORPHAN_MAX_AGE_MS = 3e5;
6273
6273
  function markitConversionCacheKey(bytes, extension) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@xiaoso/dsh-tool-plus",
3
3
  "description": "Oh My Pi bash runtime ported as a deepseek-harness tool plugin: persistent shell session, output minimizer, managed background jobs, command interception",
4
- "version": "0.1.10-beta.3",
4
+ "version": "0.1.11",
5
5
  "license": "MIT",
6
6
  "keywords": [
7
7
  "deepseek-harness",
@@ -84,32 +84,35 @@
84
84
  "test": "vitest run --config vitest.config.ts",
85
85
  "presets:build": "node scripts/build-preset-patches.mjs",
86
86
  "presets:check": "node scripts/build-preset-patches.mjs --check",
87
+ "e2e": "tsx tests/support/harness/dsh-e2e.ts",
88
+ "e2e:web": "tsx tests/support/harness/capture-web.ts",
89
+ "mock:llm": "tsx tests/support/mock-openai/cli.ts",
87
90
  "postinstall": "node scripts/patch-pi-natives.mjs"
88
91
  },
89
92
  "peerDependencies": {
90
93
  "@deepseek-ai/cordis": "~4.0.4",
91
- "@deepseek-ai/dsh-agent": "0.1.7-rc.2",
92
- "@deepseek-ai/dsh-agent-preset": "0.1.7-rc.2",
93
- "@deepseek-ai/dsh-agent-preset-registry": "0.1.7-rc.2",
94
- "@deepseek-ai/dsh-attachment": "0.1.7-rc.2",
95
- "@deepseek-ai/dsh-client-connection": "0.1.7-rc.2",
96
- "@deepseek-ai/dsh-fs": "0.1.7-rc.2",
97
- "@deepseek-ai/dsh-jobs": "0.1.7-rc.2",
98
- "@deepseek-ai/dsh-llm": "0.1.7-rc.2",
99
- "@deepseek-ai/dsh-sandbox": "0.1.7-rc.2",
100
- "@deepseek-ai/dsh-session": "0.1.7-rc.2",
101
- "@deepseek-ai/dsh-settings": "0.1.7-rc.2",
102
- "@deepseek-ai/dsh-shell": "0.1.7-rc.2",
103
- "@deepseek-ai/dsh-shell-env": "0.1.7-rc.2",
104
- "@deepseek-ai/dsh-system-prompt": "0.1.7-rc.2",
105
- "@deepseek-ai/dsh-tools": "0.1.7-rc.2"
94
+ "@deepseek-ai/dsh-agent": "0.2.0-rc.1",
95
+ "@deepseek-ai/dsh-agent-preset": "0.2.0-rc.1",
96
+ "@deepseek-ai/dsh-agent-preset-registry": "0.2.0-rc.1",
97
+ "@deepseek-ai/dsh-attachment": "0.2.0-rc.1",
98
+ "@deepseek-ai/dsh-client-connection": "0.2.0-rc.1",
99
+ "@deepseek-ai/dsh-fs": "0.2.0-rc.1",
100
+ "@deepseek-ai/dsh-jobs": "0.2.0-rc.1",
101
+ "@deepseek-ai/dsh-llm": "0.2.0-rc.1",
102
+ "@deepseek-ai/dsh-sandbox": "0.2.0-rc.1",
103
+ "@deepseek-ai/dsh-session": "0.2.0-rc.1",
104
+ "@deepseek-ai/dsh-settings": "0.2.0-rc.1",
105
+ "@deepseek-ai/dsh-shell": "0.2.0-rc.1",
106
+ "@deepseek-ai/dsh-shell-env": "0.2.0-rc.1",
107
+ "@deepseek-ai/dsh-system-prompt": "0.2.0-rc.1",
108
+ "@deepseek-ai/dsh-tools": "0.2.0-rc.1"
106
109
  },
107
110
  "optionalPeerDependencies": {
108
111
  "sharp": ">=0.33"
109
112
  },
110
113
  "dependencies": {
111
- "@deepseek-ai/dsh-brand": "0.1.7-rc.2",
112
- "@deepseek-ai/dsh-invariants": "0.1.7-rc.2",
114
+ "@deepseek-ai/dsh-brand": "0.2.0-rc.1",
115
+ "@deepseek-ai/dsh-invariants": "0.2.0-rc.1",
113
116
  "@deepseek-ai/schemastery": "~3.18.4",
114
117
  "@oh-my-pi/omptype": "18.1.17",
115
118
  "@oh-my-pi/pi-agent-core": "18.1.17",
@@ -125,33 +128,33 @@
125
128
  },
126
129
  "devDependencies": {
127
130
  "@deepseek-ai/cordis": "~4.0.4",
128
- "@deepseek-ai/dsh-agent": "0.1.7-rc.2",
129
- "@deepseek-ai/dsh-api-remotes": "0.1.7-rc.2",
130
- "@deepseek-ai/dsh-api-session-controller": "0.1.7-rc.2",
131
- "@deepseek-ai/dsh-client-connection": "0.1.7-rc.2",
132
- "@deepseek-ai/dsh-client-locale": "0.1.7-rc.2",
133
- "@deepseek-ai/dsh-client-store": "0.1.7-rc.2",
134
- "@deepseek-ai/dsh-client-ui-chat": "0.1.7-rc.2",
135
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.7-rc.2",
136
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.2",
137
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.2",
138
- "@deepseek-ai/dsh-client-ui-settings": "0.1.7-rc.2",
139
- "@deepseek-ai/dsh-client-ui-settings-plugins": "0.1.7-rc.2",
140
- "@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.2",
141
- "@deepseek-ai/dsh-client-ui-tool": "0.1.7-rc.2",
142
- "@deepseek-ai/dsh-fs-local": "0.1.7-rc.2",
143
- "@deepseek-ai/dsh-jobs": "0.1.7-rc.2",
144
- "@deepseek-ai/dsh-jobs-local": "0.1.7-rc.2",
145
- "@deepseek-ai/dsh-llm": "0.1.7-rc.2",
146
- "@deepseek-ai/dsh-session": "0.1.7-rc.2",
147
- "@deepseek-ai/dsh-settings": "0.1.7-rc.2",
148
- "@deepseek-ai/dsh-shell": "0.1.7-rc.2",
149
- "@deepseek-ai/dsh-shell-env": "0.1.7-rc.2",
150
- "@deepseek-ai/dsh-system-prompt": "0.1.7-rc.2",
151
- "@deepseek-ai/dsh-token-meter": "0.1.7-rc.2",
152
- "@deepseek-ai/dsh-tool-jobs": "0.1.7-rc.2",
153
- "@deepseek-ai/dsh-tool-str-replace-editor": "0.1.7-rc.2",
154
- "@deepseek-ai/dsh-tools": "0.1.7-rc.2",
131
+ "@deepseek-ai/dsh-agent": "0.2.0-rc.1",
132
+ "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.1",
133
+ "@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.1",
134
+ "@deepseek-ai/dsh-client-connection": "0.2.0-rc.1",
135
+ "@deepseek-ai/dsh-client-locale": "0.2.0-rc.1",
136
+ "@deepseek-ai/dsh-client-store": "0.2.0-rc.1",
137
+ "@deepseek-ai/dsh-client-ui-chat": "0.2.0-rc.1",
138
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.1",
139
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.1",
140
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.1",
141
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.1",
142
+ "@deepseek-ai/dsh-client-ui-settings-plugins": "0.2.0-rc.1",
143
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.1",
144
+ "@deepseek-ai/dsh-client-ui-tool": "0.2.0-rc.1",
145
+ "@deepseek-ai/dsh-fs-local": "0.2.0-rc.1",
146
+ "@deepseek-ai/dsh-jobs": "0.2.0-rc.1",
147
+ "@deepseek-ai/dsh-jobs-local": "0.2.0-rc.1",
148
+ "@deepseek-ai/dsh-llm": "0.2.0-rc.1",
149
+ "@deepseek-ai/dsh-session": "0.2.0-rc.1",
150
+ "@deepseek-ai/dsh-settings": "0.2.0-rc.1",
151
+ "@deepseek-ai/dsh-shell": "0.2.0-rc.1",
152
+ "@deepseek-ai/dsh-shell-env": "0.2.0-rc.1",
153
+ "@deepseek-ai/dsh-system-prompt": "0.2.0-rc.1",
154
+ "@deepseek-ai/dsh-token-meter": "0.2.0-rc.1",
155
+ "@deepseek-ai/dsh-tool-jobs": "0.2.0-rc.1",
156
+ "@deepseek-ai/dsh-tool-str-replace-editor": "0.2.0-rc.1",
157
+ "@deepseek-ai/dsh-tools": "0.2.0-rc.1",
155
158
  "@types/node": "^22.19.0",
156
159
  "@types/react": "^19.0.0",
157
160
  "@types/react-dom": "^19.0.0",