@michengai/dsh-codex-ui 1.1.23 → 1.1.24

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/CHANGELOG.md CHANGED
@@ -4,6 +4,29 @@
4
4
 
5
5
  This changelog records recent releases of DSH Codex UI and its one-click installer. Earlier changes remain available in the [Git history](https://github.com/MichengAI/dsh-codex-ui/commits/main).
6
6
 
7
+ ## 1.1.24 - 2026-09-30
8
+
9
+ - About-page installs on official Desktop now use the host's bundled pnpm instead of launching the dsh command inside the app archive.
10
+ - Host support includes DSH `0.2.0-rc.2`. The sidebar, layout, and slot contracts match `0.2.0-rc.1`; without this declaration the new Desktop disables the plugin. Development dependencies are pinned to `0.2.0-rc.2`.
11
+
12
+ ## suite-installer-v1.0.30 - 2026-09-29
13
+
14
+ Install or maintain 11 first-party plugins in one step. Included plugins and versions:
15
+
16
+ - `@michengai/dsh-archive-manager@1.0.7`
17
+ - `@michengai/dsh-codex-ui@1.1.22`
18
+ - `@michengai/dsh-skills-manager@1.1.5`
19
+ - `@michengai/dsh-agency-agents@1.0.6`
20
+ - `@michengai/dsh-im-connect@0.1.57`
21
+ - `@michengai/dsh-automation@0.1.52`
22
+ - `@michengai/dsh-btw@0.1.14`
23
+ - `@michengai/dsh-simplify@0.1.11`
24
+ - `@michengai/dsh-pua@0.3.19`
25
+ - `@michengai/dsh-code-review@0.1.8`
26
+ - `@michengai/dsh-codex-pet@0.1.11`
27
+
28
+ The installer uses these exact versions for reproducible installation.
29
+
7
30
  ## 1.1.23 - 2026-09-29
8
31
 
9
32
  - Installing or updating other plugins from the About page in official DeepSeek Harness Desktop no longer crashes the desktop host.
@@ -4,6 +4,29 @@
4
4
 
5
5
  本日志记录 DSH Codex UI 及其一键安装器的最近发布;更早的变更可查看 [Git 提交历史](https://github.com/MichengAI/dsh-codex-ui/commits/main)。
6
6
 
7
+ ## 1.1.24 - 2026-09-30
8
+
9
+ - 官方桌面端关于页安装其他插件时,改用宿主自带的 pnpm,不再去启动 asar 里的 dsh 命令。
10
+ - 宿主兼容范围加入 DSH `0.2.0-rc.2`。侧栏、布局和插槽合约与 `0.2.0-rc.1` 相同;不声明这个版本时,新桌面端会因兼容检查停用本插件。开发依赖钉到 `0.2.0-rc.2`。
11
+
12
+ ## suite-installer-v1.0.30 - 2026-09-29
13
+
14
+ 一键维护安装 11 个自研插件。包含以下插件及版本:
15
+
16
+ - `@michengai/dsh-archive-manager@1.0.7`
17
+ - `@michengai/dsh-codex-ui@1.1.22`
18
+ - `@michengai/dsh-skills-manager@1.1.5`
19
+ - `@michengai/dsh-agency-agents@1.0.6`
20
+ - `@michengai/dsh-im-connect@0.1.57`
21
+ - `@michengai/dsh-automation@0.1.52`
22
+ - `@michengai/dsh-btw@0.1.14`
23
+ - `@michengai/dsh-simplify@0.1.11`
24
+ - `@michengai/dsh-pua@0.3.19`
25
+ - `@michengai/dsh-code-review@0.1.8`
26
+ - `@michengai/dsh-codex-pet@0.1.11`
27
+
28
+ 安装器使用这些精确版本执行安装,确保可复现。
29
+
7
30
  ## 1.1.23 - 2026-09-29
8
31
 
9
32
  - 在官方 DeepSeek Harness 桌面端的关于页安装或更新其他插件时,不再把桌面宿主打崩。
package/README.md CHANGED
@@ -24,7 +24,7 @@ Working across several projects and conversations in DSH Web? DSH Codex UI helps
24
24
 
25
25
  ## Host compatibility
26
26
 
27
- This working tree explicitly declares DSH `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, `0.1.7-rc.2`, and `0.2.0-rc.1`. Development dependencies are pinned to `0.2.0-rc.1`. No code references `@deepseek-ai/dsh-client-runtime`: it is not a peer, not a client inject, and no longer a development dependency now that the settings-lifecycle spec mounts the production `SlotRegistry` from the official `@deepseek-ai/dsh-client-ui-renderer/client` bundle. Isolated host checks cover `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, `0.1.7-rc.2`, and `0.2.0-rc.1`.
27
+ This working tree explicitly declares DSH `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, `0.1.7-rc.2`, `0.2.0-rc.1`, and `0.2.0-rc.2`. Development dependencies are pinned to `0.2.0-rc.2`. No code references `@deepseek-ai/dsh-client-runtime`: it is not a peer, not a client inject, and no longer a development dependency now that the settings-lifecycle spec mounts the production `SlotRegistry` from the official `@deepseek-ai/dsh-client-ui-renderer/client` bundle. Isolated host checks cover `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, `0.1.7-rc.2`, `0.2.0-rc.1`, and `0.2.0-rc.2`.
28
28
 
29
29
  ## What you can do
30
30
 
package/README.zh-CN.md CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  ## 宿主兼容性
26
26
 
27
- 当前工作区已显式声明支持 DSH `0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2` 或 `0.2.0-rc.1`。开发依赖钉在 `0.2.0-rc.1`。代码已不再引用 `@deepseek-ai/dsh-client-runtime`:它既不是 peer、也不写入客户端 inject;设置生命周期用例改用官方 `@deepseek-ai/dsh-client-ui-renderer/client` 装配包里的生产 `SlotRegistry` 后,这条开发依赖也已移除。隔离宿主检查覆盖 `0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2` 或 `0.2.0-rc.1`。
27
+ 当前工作区已显式声明支持 DSH `0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2`、`0.2.0-rc.1` 或 `0.2.0-rc.2`。开发依赖钉在 `0.2.0-rc.2`。代码已不再引用 `@deepseek-ai/dsh-client-runtime`:它既不是 peer、也不写入客户端 inject;设置生命周期用例改用官方 `@deepseek-ai/dsh-client-ui-renderer/client` 装配包里的生产 `SlotRegistry` 后,这条开发依赖也已移除。隔离宿主检查覆盖 `0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2`、`0.2.0-rc.1` 或 `0.2.0-rc.2`。
28
28
 
29
29
  ## 你可以用它做什么
30
30
 
package/lib/index.mjs CHANGED
@@ -3,7 +3,7 @@ import { spawn } from "node:child_process";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  import { lstat, mkdir, open, readFile, readdir, realpath, rename, rm, unlink, writeFile } from "node:fs/promises";
5
5
  import { homedir } from "node:os";
6
- import { basename, dirname, isAbsolute, join, relative, resolve, sep, win32 } from "node:path";
6
+ import { basename, delimiter, dirname, isAbsolute, join, relative, resolve, sep, win32 } from "node:path";
7
7
  import { fileURLToPath } from "node:url";
8
8
  import { randomBytes, randomUUID } from "node:crypto";
9
9
  //#region src/business-api.ts
@@ -221,13 +221,41 @@ function resolveDependencyRuntime(ctx, options = {}) {
221
221
  cliRuntimeRoot
222
222
  ].filter((root) => root !== void 0 && root !== "");
223
223
  const pluginEnv = stringEnvironment(launched?.packageManager?.env);
224
+ const packageManager = profilePackageManager(launched?.packageManager) ?? desktopPackageManagerFromArgv(argv);
224
225
  return {
225
226
  environmentKind: "cli",
226
227
  profileName,
227
228
  profileDir,
228
229
  runtimeRoots,
229
230
  ...cliEntry === void 0 ? {} : { cliEntry },
230
- ...pluginEnv === void 0 ? {} : { pluginEnv }
231
+ ...pluginEnv === void 0 ? {} : { pluginEnv },
232
+ ...packageManager === void 0 ? {} : { packageManager }
233
+ };
234
+ }
235
+ function profilePackageManager(value) {
236
+ if (typeof value?.command !== "string" || value.command === "") return void 0;
237
+ if (!Array.isArray(value.args) || !value.args.every((item) => typeof item === "string")) return void 0;
238
+ const env = stringEnvironment(value.env);
239
+ return {
240
+ command: value.command,
241
+ args: value.args,
242
+ ...env === void 0 ? {} : { env }
243
+ };
244
+ }
245
+ /** 官方 Desktop Host 把 pnpm 入口放在 argv[5],bin 放在 argv[6],不提供 desktopPnpm。 */
246
+ function desktopPackageManagerFromArgv(argv, command = process.execPath) {
247
+ if (!isOfficialDesktopHostEntry(argv[1])) return void 0;
248
+ const pnpm = argv[5];
249
+ if (typeof pnpm !== "string" || !isAbsolute(pnpm) || !existsSync(pnpm)) return void 0;
250
+ const bin = argv[6];
251
+ const path = typeof bin === "string" && bin !== "" ? `${bin}${delimiter}${process.env.PATH ?? ""}` : process.env.PATH;
252
+ return {
253
+ command,
254
+ args: ["--expose-internals", pnpm],
255
+ env: {
256
+ ELECTRON_RUN_AS_NODE: "1",
257
+ ...typeof path === "string" && path !== "" ? { PATH: path } : {}
258
+ }
231
259
  };
232
260
  }
233
261
  function stringEnvironment(value) {
@@ -559,6 +587,28 @@ async function removePendingUpdate(packageName, runtime) {
559
587
  if (error.code !== "ENOENT") throw error;
560
588
  }
561
589
  }
590
+ /** pnpm add 不会写 bundles。官方 Desktop 直接调宿主 pnpm 时,要自己把插件挂进 profile。 */
591
+ async function declareProfileBundle(packageName, runtime) {
592
+ if (isOfficialRuntimePackage(packageName)) return;
593
+ const manifestPath = resolve(profileDirectory(runtime), "package.json");
594
+ let manifest;
595
+ try {
596
+ manifest = JSON.parse(await readFile(manifestPath, "utf8"));
597
+ } catch (error) {
598
+ if (error.code !== "ENOENT") throw error;
599
+ manifest = {};
600
+ }
601
+ const bundles = manifest.dsh?.profile?.bundles ?? [];
602
+ if (bundles.includes(packageName)) return;
603
+ manifest.dsh = {
604
+ ...manifest.dsh,
605
+ profile: {
606
+ ...manifest.dsh?.profile,
607
+ bundles: [...bundles, packageName]
608
+ }
609
+ };
610
+ await writeFile(manifestPath, `${JSON.stringify(manifest, void 0, 2)}\n`, "utf8");
611
+ }
562
612
  async function recordDeclaredVersion(packageName, version, runtime) {
563
613
  const manifestPath = resolve(profileDirectory(runtime), "package.json");
564
614
  let manifest;
@@ -846,6 +896,21 @@ function monitorDesktopPlugin(handle, timeoutMs = PLUGIN_INSTALL_TIMEOUT_MS) {
846
896
  function runDshPlugin(args, runtime = resolveDependencyRuntime(), timeoutMs = PLUGIN_INSTALL_TIMEOUT_MS) {
847
897
  const desktopPnpm = runtime.desktopPnpm;
848
898
  if (desktopPnpm !== void 0) return monitorDesktopPlugin(withPnpmEntry(() => desktopPnpm.runPlugin(args, runtime.profileDir)), timeoutMs);
899
+ const packageManager = runtime.packageManager;
900
+ if (packageManager !== void 0) return monitorPluginChild(spawn(packageManager.command, [...packageManager.args, ...args], {
901
+ cwd: runtime.profileDir,
902
+ env: {
903
+ ...pluginSpawnEnv(),
904
+ ...runtime.pluginEnv,
905
+ ...packageManager.env
906
+ },
907
+ windowsHide: true,
908
+ stdio: [
909
+ "ignore",
910
+ "pipe",
911
+ "pipe"
912
+ ]
913
+ }), timeoutMs, "desktop");
849
914
  const entry = runtime.cliEntry ?? resolveDshCliEntry();
850
915
  if (isOfficialDesktopHostEntry(entry)) throw new Error("无法定位 DSH CLI。请从 DSH 命令启动 Web 服务后重试。");
851
916
  return monitorPluginChild(spawn(process.execPath, [
@@ -961,6 +1026,7 @@ async function installDependenciesLocked(ids, requestHotUpdate, runtime) {
961
1026
  "--registry=https://registry.npmjs.org/"
962
1027
  ], runtime);
963
1028
  for (const target of batch) {
1029
+ if (runtime.packageManager !== void 0) await declareProfileBundle(target.packageName, runtime);
964
1030
  await waitUntilPluginMounted(target.packageName, target.version, runtime);
965
1031
  if (!isOfficialRuntimePackage(target.packageName)) await recordDeclaredVersion(target.packageName, target.version, runtime);
966
1032
  await removePendingUpdate(target.packageName, runtime);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michengai/dsh-codex-ui",
3
- "version": "1.1.23",
3
+ "version": "1.1.24",
4
4
  "description": "DSH Codex UI — 为 DeepSeek Harness Web 提供 Codex 风格侧栏、工作区会话树、全局搜索和轮次导航 · A Codex-style sidebar, workspace session tree, global search, and turn navigation for DSH Web",
5
5
  "license": "Apache-2.0",
6
6
  "publishConfig": {
@@ -74,47 +74,47 @@
74
74
  },
75
75
  "peerDependencies": {
76
76
  "@deepseek-ai/cordis": ">=4.0.2 <5.0.0",
77
- "@deepseek-ai/dsh-client-connection": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
78
- "@deepseek-ai/dsh-client-locale": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
79
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
80
- "@deepseek-ai/dsh-client-ui-input-trigger": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
81
- "@deepseek-ai/dsh-client-ui-layout": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
82
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
83
- "@deepseek-ai/dsh-client-ui-settings": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
84
- "@deepseek-ai/dsh-client-ui-settings-general": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
85
- "@deepseek-ai/dsh-client-ui-sidebar": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
86
- "@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
87
- "@deepseek-ai/dsh-client-ui-workspace": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
77
+ "@deepseek-ai/dsh-client-connection": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2",
78
+ "@deepseek-ai/dsh-client-locale": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2",
79
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2",
80
+ "@deepseek-ai/dsh-client-ui-input-trigger": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2",
81
+ "@deepseek-ai/dsh-client-ui-layout": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2",
82
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2",
83
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2",
84
+ "@deepseek-ai/dsh-client-ui-settings-general": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2",
85
+ "@deepseek-ai/dsh-client-ui-sidebar": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2",
86
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2",
87
+ "@deepseek-ai/dsh-client-ui-workspace": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2",
88
88
  "react": "^18.2.0",
89
89
  "react-dom": "^18.2.0"
90
90
  },
91
91
  "devDependencies": {
92
92
  "@deepseek-ai/cordis": "4.0.4",
93
- "@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.1",
94
- "@deepseek-ai/dsh-api-workspace-controller": "0.2.0-rc.1",
95
- "@deepseek-ai/dsh-attachment": "0.2.0-rc.1",
96
- "@deepseek-ai/dsh-client-connection": "0.2.0-rc.1",
97
- "@deepseek-ai/dsh-client-locale": "0.2.0-rc.1",
98
- "@deepseek-ai/dsh-client-store": "0.2.0-rc.1",
93
+ "@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.2",
94
+ "@deepseek-ai/dsh-api-workspace-controller": "0.2.0-rc.2",
95
+ "@deepseek-ai/dsh-attachment": "0.2.0-rc.2",
96
+ "@deepseek-ai/dsh-client-connection": "0.2.0-rc.2",
97
+ "@deepseek-ai/dsh-client-locale": "0.2.0-rc.2",
98
+ "@deepseek-ai/dsh-client-store": "0.2.0-rc.2",
99
99
  "@deepseek-ai/dsh-client-test-runtime": "0.2.0-rc.1",
100
- "@deepseek-ai/dsh-client-ui-chat": "0.2.0-rc.1",
101
- "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.1",
102
- "@deepseek-ai/dsh-client-ui-input-trigger": "0.2.0-rc.1",
103
- "@deepseek-ai/dsh-client-ui-layout": "0.2.0-rc.1",
104
- "@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.1",
105
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.1",
106
- "@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.1",
107
- "@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.1",
108
- "@deepseek-ai/dsh-client-ui-settings-general": "0.2.0-rc.1",
109
- "@deepseek-ai/dsh-client-ui-sidebar": "0.2.0-rc.1",
110
- "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.1",
111
- "@deepseek-ai/dsh-client-ui-workspace": "0.2.0-rc.1",
112
- "@deepseek-ai/dsh-session": "0.2.0-rc.1",
113
- "@deepseek-ai/dsh-scope": "0.2.0-rc.1",
114
- "@deepseek-ai/dsh-subagent": "0.2.0-rc.1",
115
- "@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.1",
116
- "@deepseek-ai/dsh-util-workspace-path": "0.2.0-rc.1",
117
- "@deepseek-ai/dsh-workspace": "0.2.0-rc.1",
100
+ "@deepseek-ai/dsh-client-ui-chat": "0.2.0-rc.2",
101
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.2",
102
+ "@deepseek-ai/dsh-client-ui-input-trigger": "0.2.0-rc.2",
103
+ "@deepseek-ai/dsh-client-ui-layout": "0.2.0-rc.2",
104
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.2",
105
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2",
106
+ "@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.2",
107
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.2",
108
+ "@deepseek-ai/dsh-client-ui-settings-general": "0.2.0-rc.2",
109
+ "@deepseek-ai/dsh-client-ui-sidebar": "0.2.0-rc.2",
110
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2",
111
+ "@deepseek-ai/dsh-client-ui-workspace": "0.2.0-rc.2",
112
+ "@deepseek-ai/dsh-session": "0.2.0-rc.2",
113
+ "@deepseek-ai/dsh-scope": "0.2.0-rc.2",
114
+ "@deepseek-ai/dsh-subagent": "0.2.0-rc.2",
115
+ "@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.2",
116
+ "@deepseek-ai/dsh-util-workspace-path": "0.2.0-rc.2",
117
+ "@deepseek-ai/dsh-workspace": "0.2.0-rc.2",
118
118
  "diff": "^9.0.0",
119
119
  "shiki": "^4.3.1",
120
120
  "simple-icons": "16.31.0",