@dsh-xhl/dsh-file-explorer 0.1.9 → 0.2.0

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.md CHANGED
@@ -43,9 +43,27 @@ src/
43
43
 
44
44
  ```bash
45
45
  pnpm install
46
- pnpm build # lib/index.js(host)+ lib/client.js(client bundle,CodeMirror 内联)
46
+ pnpm build # lib/index.js(host)+ lib/client.js(client bundle,CodeMirror 内联)+ 图标校验
47
47
  ```
48
48
 
49
+ > **图标命名陷阱(务必先读)**:宿主 `@deepseek-ai/dsh-client-ui-primitives`
50
+ > 的图标导出已从**尺寸后缀**(`Icon*16` / `Icon*14`)改为**字重后缀**
51
+ > (`Icon*Regular` / `Icon*Medium`),旧名在宿主里**一个都不存在**。
52
+ >
53
+ > 这个失败模式极其隐蔽:客户端 bundle 通过冻结的模块表解析原语,缺失的名字
54
+ > 拿到的是 `undefined`,React 在渲染时抛 "Element type is invalid",而槽位的
55
+ > 错误边界会**静默退位(abdicate)**——插件看起来已安装、已注册,却什么都不渲染。
56
+ >
57
+ > 曾经的坑在于开发依赖停留在 `0.1.0-rc.6`(仍是旧命名),于是 `tsc` 放行、
58
+ > 构建成功,只有运行时才炸。现在 `pnpm build` 末尾的
59
+ > [`scripts/check-icons.mjs`](scripts/check-icons.mjs) 会把产物引用的图标与
60
+ > **宿主真实导出**逐一比对,对不上直接构建失败。
61
+ >
62
+ > 若 `pnpm typecheck` 报某图标不存在,多半是本地 `node_modules` 里的原语包
63
+ > 落后于宿主:把 `node_modules/@deepseek-ai/dsh-client-ui-primitives` 指向
64
+ > 宿主实际安装的那份(`$env:LOCALAPPDATA\Volta\tools\image\packages\@deepseek-ai\dsh\node_modules\@deepseek-ai\dsh\node_modules\@deepseek-ai\dsh-client-ui-primitives`)
65
+ > 再重试。
66
+
49
67
  > 构建采用**原地覆盖**(不再先删除 `lib/`)。宿主半在进程启动时载入内存,而 profile
50
68
  > 若 link 到本工作区则会直读磁盘:构建中途清空目录会让 HMR 读到空 bundle,导致
51
69
  > `/filex` 路由与客户端 import 瞬时失败(表现为 `unknown filex API method ...`)。
package/lib/client.js CHANGED
@@ -36902,7 +36902,7 @@ window.__ModuleLoader__.load({
36902
36902
  children: ctxMenu.empty ? "请先在编辑器中选中文本" : reference(ctxMenu)
36903
36903
  })]
36904
36904
  }),
36905
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutline16, {}),
36905
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, {}),
36906
36906
  disabled: ctxMenu.empty
36907
36907
  }, {
36908
36908
  id: "insertFile",
@@ -36913,7 +36913,7 @@ window.__ModuleLoader__.load({
36913
36913
  children: reference()
36914
36914
  })]
36915
36915
  }),
36916
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutline16, {})
36916
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, {})
36917
36917
  }] : [];
36918
36918
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
36919
36919
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -36993,7 +36993,7 @@ window.__ModuleLoader__.load({
36993
36993
  }),
36994
36994
  insertError !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
36995
36995
  text: `插入聊天框失败:${insertError}`,
36996
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutline16, {}),
36996
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {}),
36997
36997
  onDone: () => setInsertError("")
36998
36998
  }, toastKey)
36999
36999
  ] });
@@ -37290,7 +37290,7 @@ window.__ModuleLoader__.load({
37290
37290
  onContextMenu(node.relPath, e.clientX, e.clientY);
37291
37291
  },
37292
37292
  children: [
37293
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutline14, { className: "filex-chev" }),
37293
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutlineRegular, { className: "filex-chev" }),
37294
37294
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FileIcon, {
37295
37295
  kind: "dir",
37296
37296
  name: node.name,
@@ -37553,7 +37553,7 @@ window.__ModuleLoader__.load({
37553
37553
  children: `@file:${sideMenu.relPath} lines:${sideMenu.line}`
37554
37554
  })]
37555
37555
  }),
37556
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutline16, {})
37556
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, {})
37557
37557
  }] : [], {
37558
37558
  id: "insertFile",
37559
37559
  label: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
@@ -37563,7 +37563,7 @@ window.__ModuleLoader__.load({
37563
37563
  children: `@file:${sideMenu.relPath}`
37564
37564
  })]
37565
37565
  }),
37566
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutline16, {})
37566
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, {})
37567
37567
  }] : [];
37568
37568
  let sideContent;
37569
37569
  if (searchMode === "name") {
@@ -37756,7 +37756,7 @@ window.__ModuleLoader__.load({
37756
37756
  type: "button",
37757
37757
  size: "sm",
37758
37758
  variant: "ghost",
37759
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFullscreenOutline16, { className: fullscreen ? "filex-fs-on" : void 0 }),
37759
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFullscreenOutlineRegular, { className: fullscreen ? "filex-fs-on" : void 0 }),
37760
37760
  title: fullscreen ? "退出全屏" : "全屏",
37761
37761
  "aria-label": fullscreen ? "退出全屏" : "全屏",
37762
37762
  onClick: () => setFullscreen((v) => !v)
@@ -37765,7 +37765,7 @@ window.__ModuleLoader__.load({
37765
37765
  type: "button",
37766
37766
  size: "sm",
37767
37767
  variant: "ghost",
37768
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutline16, {}),
37768
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutlineRegular, {}),
37769
37769
  title: "关闭(Esc)",
37770
37770
  "aria-label": "关闭",
37771
37771
  onClick: handleClose
@@ -37803,7 +37803,7 @@ window.__ModuleLoader__.load({
37803
37803
  type: "button",
37804
37804
  size: "sm",
37805
37805
  variant: "outline",
37806
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutline14, {}),
37806
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, {}),
37807
37807
  disabled: loading,
37808
37808
  onClick: () => void refresh(),
37809
37809
  title: "刷新文件列表",
@@ -37964,7 +37964,7 @@ window.__ModuleLoader__.load({
37964
37964
  }),
37965
37965
  sideToast !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
37966
37966
  text: `插入聊天框失败:${sideToast}`,
37967
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutline16, {}),
37967
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {}),
37968
37968
  onDone: () => setSideToast("")
37969
37969
  }, toastKey)
37970
37970
  ] });
@@ -38072,6 +38072,25 @@ window.__ModuleLoader__.load({
38072
38072
  * the framework-resolved sessionId; Ctrl+P falls back to the currently
38073
38073
  * selected session (`useSessions` → `state.current`).
38074
38074
  */
38075
+ /**
38076
+ * Icon primitives are resolved through the host's frozen module table, so a
38077
+ * name the host no longer exports arrives as `undefined` and React throws
38078
+ * "Element type is invalid" at render time. Inside a slot that throw is
38079
+ * swallowed by the slot error boundary, which silently abdicates the seat —
38080
+ * the plugin looks installed and registered while rendering nothing. Fail
38081
+ * loudly at load instead, where the message is still visible.
38082
+ */
38083
+ function assertPrimitives() {
38084
+ const missing = Object.entries({
38085
+ Button: _deepseek_ai_dsh_client_ui_primitives.Button,
38086
+ Menu: _deepseek_ai_dsh_client_ui_primitives.Menu,
38087
+ Tooltip: _deepseek_ai_dsh_client_ui_primitives.Tooltip,
38088
+ IconChevronDownOutlineRegular: _deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular,
38089
+ IconEditOutlineRegular: _deepseek_ai_dsh_client_ui_primitives.IconEditOutlineRegular,
38090
+ IconFolderOpenRegular: _deepseek_ai_dsh_client_ui_primitives.IconFolderOpenRegular
38091
+ }).filter(([, v]) => v === void 0).map(([k]) => k);
38092
+ if (missing.length > 0) throw new Error(`[dsh-file-explorer] 宿主 @deepseek-ai/dsh-client-ui-primitives 缺少: ${missing.join(", ")}。图标导出命名已从尺寸后缀(16/14)改为字重后缀(Regular/Medium),请同步更新源码引用。`);
38093
+ }
38075
38094
  /** Services required before mounting. */
38076
38095
  const inject = [
38077
38096
  "slots",
@@ -38292,12 +38311,12 @@ window.__ModuleLoader__.load({
38292
38311
  {
38293
38312
  id: "editor",
38294
38313
  label: "编辑器",
38295
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutline16, {})
38314
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutlineRegular, {})
38296
38315
  },
38297
38316
  {
38298
38317
  id: "folder",
38299
38318
  label: "文件夹",
38300
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpen16, {})
38319
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpenRegular, {})
38301
38320
  },
38302
38321
  {
38303
38322
  id: "vscode",
@@ -38317,7 +38336,7 @@ window.__ModuleLoader__.load({
38317
38336
  className: "filex-header-btn",
38318
38337
  size: "sm",
38319
38338
  variant: "outline",
38320
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutline16, {}),
38339
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutlineRegular, {}),
38321
38340
  title,
38322
38341
  "aria-label": "文件预览 / 编辑",
38323
38342
  onClick: (e) => {
@@ -38346,7 +38365,7 @@ window.__ModuleLoader__.load({
38346
38365
  const sessionCwd = useSessions((s) => sessionId !== void 0 ? s.byId?.[sessionId]?.cwd : void 0);
38347
38366
  const mode = state.mode;
38348
38367
  const items = state.vscode ? MODE_ITEMS : MODE_ITEMS.filter((item) => item.id !== "vscode");
38349
- const mainIcon = mode === "folder" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpen16, {}) : mode === "vscode" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(VscodeIcon, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutline16, {});
38368
+ const mainIcon = mode === "folder" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpenRegular, {}) : mode === "vscode" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(VscodeIcon, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutlineRegular, {});
38350
38369
  const mainTitle = mode === "folder" ? "打开系统文件夹" : mode === "vscode" ? "用 VSCode 打开工作区" : "文件预览 / 编辑(Ctrl+P)";
38351
38370
  const onMainClick = (e) => {
38352
38371
  e.stopPropagation();
@@ -38396,7 +38415,7 @@ window.__ModuleLoader__.load({
38396
38415
  e.stopPropagation();
38397
38416
  setMenuOpen((v) => !v);
38398
38417
  },
38399
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, {})
38418
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, {})
38400
38419
  })]
38401
38420
  })
38402
38421
  })
@@ -38456,6 +38475,7 @@ window.__ModuleLoader__.load({
38456
38475
  } catch {}
38457
38476
  };
38458
38477
  try {
38478
+ assertPrimitives();
38459
38479
  const tagId = "dsh-file-explorer/styles";
38460
38480
  ctx.effect(() => {
38461
38481
  const dark = detectDark();
@@ -111,6 +111,7 @@ export interface FilexSlotsService {
111
111
  id?: string;
112
112
  key?: string;
113
113
  order?: number;
114
+ priority?: number;
114
115
  label?: string | (() => string);
115
116
  inject?: (...args: unknown[]) => Record<string, unknown>;
116
117
  }, component: unknown): () => void;
package/package.json CHANGED
@@ -1,113 +1,114 @@
1
- {
2
- "name": "@dsh-xhl/dsh-file-explorer",
3
- "version": "0.1.9",
4
- "description": "DSH 外部编译型插件:工作区文件预览 / 编辑(CodeMirror 6 编辑器 + 文件树 + 全文搜索 + Markdown/HTML/图片/PDF 预览)。移植自同目录下的动态 Cordis 插件版本。",
5
- "type": "module",
6
- "main": "lib/index.js",
7
- "types": "lib/types/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./lib/types/index.d.ts",
11
- "default": "./lib/index.js"
12
- },
13
- "./client": "./lib/client.js",
14
- "./package.json": "./package.json"
15
- },
16
- "engines": {
17
- "node": ">=20"
18
- },
19
- "publishConfig": {
20
- "access": "public",
21
- "registry": "https://registry.npmjs.org"
22
- },
23
- "dsh": {
24
- "bundle": {
25
- "patch": "./cordis.patch.yml"
26
- },
27
- "client": {
28
- "inject": [
29
- "@deepseek-ai/dsh-client-runtime",
30
- "@deepseek-ai/dsh-client-ui-slots",
31
- "@deepseek-ai/dsh-client-web-react"
32
- ],
33
- "platform": "web"
34
- }
35
- },
36
- "files": [
37
- "lib/index.js",
38
- "lib/client.js",
39
- "lib/types/**/*.d.ts",
40
- "cordis.patch.yml",
41
- "README.md"
42
- ],
43
- "scripts": {
44
- "build": "tsc -p tsconfig.build.json && tsdown",
45
- "typecheck": "tsc --noEmit",
46
- "bundle": "tsdown",
47
- "prepare": "tsdown"
48
- },
49
- "license": "MIT",
50
- "peerDependencies": {
51
- "@deepseek-ai/cordis": "^4.0.1",
52
- "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
53
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6",
54
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
55
- "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.6",
56
- "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6",
57
- "@deepseek-ai/dsh-session": "^0.1.0-rc.6",
58
- "cordis": "^4.0.0-rc.7",
59
- "react": "^18.2.0",
60
- "react-dom": "^18.2.0"
61
- },
62
- "peerDependenciesMeta": {
63
- "cordis": {
64
- "optional": true
65
- }
66
- },
67
- "dependencies": {
68
- "@codemirror/commands": "^6.10.4",
69
- "@codemirror/lang-cpp": "^6.0.3",
70
- "@codemirror/lang-css": "^6.3.1",
71
- "@codemirror/lang-go": "^6.0.1",
72
- "@codemirror/lang-html": "^6.4.12",
73
- "@codemirror/lang-java": "^6.0.2",
74
- "@codemirror/lang-javascript": "^6.2.5",
75
- "@codemirror/lang-json": "^6.0.2",
76
- "@codemirror/lang-markdown": "^6.5.2",
77
- "@codemirror/lang-php": "^6.0.2",
78
- "@codemirror/lang-python": "^6.2.1",
79
- "@codemirror/lang-rust": "^6.0.2",
80
- "@codemirror/lang-sql": "^6.10.0",
81
- "@codemirror/lang-vue": "^0.1.3",
82
- "@codemirror/lang-xml": "^6.1.0",
83
- "@codemirror/lang-yaml": "^6.1.3",
84
- "@codemirror/language": "^6.12.4",
85
- "@codemirror/legacy-modes": "^6.5.3",
86
- "@codemirror/search": "6.7.1",
87
- "@codemirror/state": "^6.7.1",
88
- "@codemirror/view": "^6.43.8",
89
- "@lezer/highlight": "^1.2.3",
90
- "vscode-icons-js": "^11.6.1"
91
- },
92
- "devDependencies": {
93
- "@deepseek-ai/cordis": "^4.0.1",
94
- "@deepseek-ai/dsh-agent": "^0.1.0-rc.6",
95
- "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6",
96
- "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
97
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6",
98
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6",
99
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
100
- "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.6",
101
- "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6",
102
- "@deepseek-ai/dsh-session": "^0.1.0-rc.6",
103
- "@deepseek-ai/dsh-tools": "^0.1.0-rc.6",
104
- "@types/node": "^22.0.0",
105
- "@types/react": "~18.3.1",
106
- "@types/react-dom": "~18.3.1",
107
- "cordis": "^4.0.0-rc.7",
108
- "react": "^18.2.0",
109
- "react-dom": "^18.2.0",
110
- "tsdown": "^0.22.2",
111
- "typescript": "^5.6.0"
112
- }
113
- }
1
+ {
2
+ "name": "@dsh-xhl/dsh-file-explorer",
3
+ "version": "0.2.0",
4
+ "description": "DSH 外部编译型插件:工作区文件预览 / 编辑(CodeMirror 6 编辑器 + 文件树 + 全文搜索 + Markdown/HTML/图片/PDF 预览)。移植自同目录下的动态 Cordis 插件版本。",
5
+ "type": "module",
6
+ "main": "lib/index.js",
7
+ "types": "lib/types/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/types/index.d.ts",
11
+ "default": "./lib/index.js"
12
+ },
13
+ "./client": "./lib/client.js",
14
+ "./package.json": "./package.json"
15
+ },
16
+ "engines": {
17
+ "node": ">=20"
18
+ },
19
+ "publishConfig": {
20
+ "access": "public",
21
+ "registry": "https://registry.npmjs.org"
22
+ },
23
+ "dsh": {
24
+ "bundle": {
25
+ "patch": "./cordis.patch.yml"
26
+ },
27
+ "client": {
28
+ "inject": [
29
+ "@deepseek-ai/dsh-client-runtime",
30
+ "@deepseek-ai/dsh-client-ui-slots",
31
+ "@deepseek-ai/dsh-client-web-react"
32
+ ],
33
+ "platform": "web"
34
+ }
35
+ },
36
+ "files": [
37
+ "lib/index.js",
38
+ "lib/client.js",
39
+ "lib/types/**/*.d.ts",
40
+ "cordis.patch.yml",
41
+ "README.md"
42
+ ],
43
+ "scripts": {
44
+ "build": "tsc -p tsconfig.build.json && tsdown && node scripts/check-icons.mjs",
45
+ "typecheck": "tsc --noEmit",
46
+ "bundle": "tsdown",
47
+ "check:icons": "node scripts/check-icons.mjs",
48
+ "prepare": "tsdown"
49
+ },
50
+ "license": "MIT",
51
+ "peerDependencies": {
52
+ "@deepseek-ai/cordis": "^4.0.1",
53
+ "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
54
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6",
55
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
56
+ "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.6",
57
+ "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6",
58
+ "@deepseek-ai/dsh-session": "^0.1.0-rc.6",
59
+ "cordis": "^4.0.0-rc.7",
60
+ "react": "^18.2.0",
61
+ "react-dom": "^18.2.0"
62
+ },
63
+ "peerDependenciesMeta": {
64
+ "cordis": {
65
+ "optional": true
66
+ }
67
+ },
68
+ "dependencies": {
69
+ "@codemirror/commands": "^6.10.4",
70
+ "@codemirror/lang-cpp": "^6.0.3",
71
+ "@codemirror/lang-css": "^6.3.1",
72
+ "@codemirror/lang-go": "^6.0.1",
73
+ "@codemirror/lang-html": "^6.4.12",
74
+ "@codemirror/lang-java": "^6.0.2",
75
+ "@codemirror/lang-javascript": "^6.2.5",
76
+ "@codemirror/lang-json": "^6.0.2",
77
+ "@codemirror/lang-markdown": "^6.5.2",
78
+ "@codemirror/lang-php": "^6.0.2",
79
+ "@codemirror/lang-python": "^6.2.1",
80
+ "@codemirror/lang-rust": "^6.0.2",
81
+ "@codemirror/lang-sql": "^6.10.0",
82
+ "@codemirror/lang-vue": "^0.1.3",
83
+ "@codemirror/lang-xml": "^6.1.0",
84
+ "@codemirror/lang-yaml": "^6.1.3",
85
+ "@codemirror/language": "^6.12.4",
86
+ "@codemirror/legacy-modes": "^6.5.3",
87
+ "@codemirror/search": "6.7.1",
88
+ "@codemirror/state": "^6.7.1",
89
+ "@codemirror/view": "^6.43.8",
90
+ "@lezer/highlight": "^1.2.3",
91
+ "vscode-icons-js": "^11.6.1"
92
+ },
93
+ "devDependencies": {
94
+ "@deepseek-ai/cordis": "^4.0.1",
95
+ "@deepseek-ai/dsh-agent": "^0.1.0-rc.6",
96
+ "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6",
97
+ "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
98
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6",
99
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6",
100
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
101
+ "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.6",
102
+ "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6",
103
+ "@deepseek-ai/dsh-session": "^0.1.0-rc.6",
104
+ "@deepseek-ai/dsh-tools": "^0.1.0-rc.6",
105
+ "@types/node": "^22.0.0",
106
+ "@types/react": "~18.3.1",
107
+ "@types/react-dom": "~18.3.1",
108
+ "cordis": "^4.0.0-rc.7",
109
+ "react": "^18.2.0",
110
+ "react-dom": "^18.2.0",
111
+ "tsdown": "^0.22.2",
112
+ "typescript": "^5.6.0"
113
+ }
114
+ }