@lijian-ui/dsh-file-manager 0.1.20

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.
Files changed (169) hide show
  1. package/LICENSE +38 -0
  2. package/README.i18n.yaml +6 -0
  3. package/README.md +66 -0
  4. package/README.zh.md +66 -0
  5. package/cordis.patch.yml +13 -0
  6. package/lib/assets/mermaid.min.js +3587 -0
  7. package/lib/client.js +7621 -0
  8. package/lib/client.js.map +1 -0
  9. package/lib/index.js +3207 -0
  10. package/lib/tsconfig.client.tsbuildinfo +1 -0
  11. package/lib/tsconfig.host.tsbuildinfo +1 -0
  12. package/lib/types/client/FileManagerSettingsCard.d.ts +56 -0
  13. package/lib/types/client/FileManagerSettingsCard.d.ts.map +1 -0
  14. package/lib/types/client/PluginSettingsCard.d.ts +104 -0
  15. package/lib/types/client/PluginSettingsCard.d.ts.map +1 -0
  16. package/lib/types/client/api.d.ts +75 -0
  17. package/lib/types/client/api.d.ts.map +1 -0
  18. package/lib/types/client/chat/AttachedFilesDock.d.ts +51 -0
  19. package/lib/types/client/chat/AttachedFilesDock.d.ts.map +1 -0
  20. package/lib/types/client/chat/file-ref.d.ts +35 -0
  21. package/lib/types/client/chat/file-ref.d.ts.map +1 -0
  22. package/lib/types/client/chat/mermaid-chat.d.ts +30 -0
  23. package/lib/types/client/chat/mermaid-chat.d.ts.map +1 -0
  24. package/lib/types/client/chat/placeholder-hint.d.ts +16 -0
  25. package/lib/types/client/chat/placeholder-hint.d.ts.map +1 -0
  26. package/lib/types/client/components/ExplorerPanel.d.ts +26 -0
  27. package/lib/types/client/components/ExplorerPanel.d.ts.map +1 -0
  28. package/lib/types/client/components/FileIcon.d.ts +15 -0
  29. package/lib/types/client/components/FileIcon.d.ts.map +1 -0
  30. package/lib/types/client/components/ScmPanel.d.ts +23 -0
  31. package/lib/types/client/components/ScmPanel.d.ts.map +1 -0
  32. package/lib/types/client/components/a11y.d.ts +12 -0
  33. package/lib/types/client/components/a11y.d.ts.map +1 -0
  34. package/lib/types/client/components/icons.d.ts +41 -0
  35. package/lib/types/client/components/icons.d.ts.map +1 -0
  36. package/lib/types/client/components/overlay.d.ts +45 -0
  37. package/lib/types/client/components/overlay.d.ts.map +1 -0
  38. package/lib/types/client/drag/DragFileInlay.d.ts +31 -0
  39. package/lib/types/client/drag/DragFileInlay.d.ts.map +1 -0
  40. package/lib/types/client/drag/file-drag.d.ts +47 -0
  41. package/lib/types/client/drag/file-drag.d.ts.map +1 -0
  42. package/lib/types/client/drag.d.ts +31 -0
  43. package/lib/types/client/drag.d.ts.map +1 -0
  44. package/lib/types/client/file-source.d.ts +29 -0
  45. package/lib/types/client/file-source.d.ts.map +1 -0
  46. package/lib/types/client/fileType.d.ts +31 -0
  47. package/lib/types/client/fileType.d.ts.map +1 -0
  48. package/lib/types/client/floating.d.ts +27 -0
  49. package/lib/types/client/floating.d.ts.map +1 -0
  50. package/lib/types/client/hooks/useResizableSplit.d.ts +37 -0
  51. package/lib/types/client/hooks/useResizableSplit.d.ts.map +1 -0
  52. package/lib/types/client/hooks/useStore.d.ts +10 -0
  53. package/lib/types/client/hooks/useStore.d.ts.map +1 -0
  54. package/lib/types/client/index.d.ts +57 -0
  55. package/lib/types/client/index.d.ts.map +1 -0
  56. package/lib/types/client/layout.d.ts +104 -0
  57. package/lib/types/client/layout.d.ts.map +1 -0
  58. package/lib/types/client/locales.d.ts +125 -0
  59. package/lib/types/client/locales.d.ts.map +1 -0
  60. package/lib/types/client/maximize.d.ts +24 -0
  61. package/lib/types/client/maximize.d.ts.map +1 -0
  62. package/lib/types/client/mention.d.ts +44 -0
  63. package/lib/types/client/mention.d.ts.map +1 -0
  64. package/lib/types/client/mount.d.ts +22 -0
  65. package/lib/types/client/mount.d.ts.map +1 -0
  66. package/lib/types/client/persist.d.ts +55 -0
  67. package/lib/types/client/persist.d.ts.map +1 -0
  68. package/lib/types/client/picker/FilePickerModal.d.ts +47 -0
  69. package/lib/types/client/picker/FilePickerModal.d.ts.map +1 -0
  70. package/lib/types/client/picker/file-picker.d.ts +62 -0
  71. package/lib/types/client/picker/file-picker.d.ts.map +1 -0
  72. package/lib/types/client/preview/PreviewPanel.d.ts +17 -0
  73. package/lib/types/client/preview/PreviewPanel.d.ts.map +1 -0
  74. package/lib/types/client/preview/PreviewTabs.d.ts +30 -0
  75. package/lib/types/client/preview/PreviewTabs.d.ts.map +1 -0
  76. package/lib/types/client/preview/PreviewToolbar.d.ts +37 -0
  77. package/lib/types/client/preview/PreviewToolbar.d.ts.map +1 -0
  78. package/lib/types/client/preview/content.d.ts +43 -0
  79. package/lib/types/client/preview/content.d.ts.map +1 -0
  80. package/lib/types/client/preview/markdown.d.ts +60 -0
  81. package/lib/types/client/preview/markdown.d.ts.map +1 -0
  82. package/lib/types/client/preview/mermaid.d.ts +78 -0
  83. package/lib/types/client/preview/mermaid.d.ts.map +1 -0
  84. package/lib/types/client/preview/selection.d.ts +26 -0
  85. package/lib/types/client/preview/selection.d.ts.map +1 -0
  86. package/lib/types/client/reference.d.ts +75 -0
  87. package/lib/types/client/reference.d.ts.map +1 -0
  88. package/lib/types/client/settings-form.d.ts +206 -0
  89. package/lib/types/client/settings-form.d.ts.map +1 -0
  90. package/lib/types/client/store.d.ts +279 -0
  91. package/lib/types/client/store.d.ts.map +1 -0
  92. package/lib/types/core/types.d.ts +132 -0
  93. package/lib/types/core/types.d.ts.map +1 -0
  94. package/lib/types/host/fs-service.d.ts +96 -0
  95. package/lib/types/host/fs-service.d.ts.map +1 -0
  96. package/lib/types/host/gate.d.ts +45 -0
  97. package/lib/types/host/gate.d.ts.map +1 -0
  98. package/lib/types/host/git-runner.d.ts +80 -0
  99. package/lib/types/host/git-runner.d.ts.map +1 -0
  100. package/lib/types/host/git-service.d.ts +130 -0
  101. package/lib/types/host/git-service.d.ts.map +1 -0
  102. package/lib/types/host/loopback.d.ts +25 -0
  103. package/lib/types/host/loopback.d.ts.map +1 -0
  104. package/lib/types/host/poll-guard.d.ts +55 -0
  105. package/lib/types/host/poll-guard.d.ts.map +1 -0
  106. package/lib/types/host/routes.d.ts +54 -0
  107. package/lib/types/host/routes.d.ts.map +1 -0
  108. package/lib/types/index.d.ts +35 -0
  109. package/lib/types/index.d.ts.map +1 -0
  110. package/lib/types/mount-once.d.ts +25 -0
  111. package/lib/types/mount-once.d.ts.map +1 -0
  112. package/package.json +85 -0
  113. package/src/client/FileManagerSettingsCard.tsx +117 -0
  114. package/src/client/PluginSettingsCard.tsx +337 -0
  115. package/src/client/api.ts +141 -0
  116. package/src/client/chat/file-ref.ts +144 -0
  117. package/src/client/chat/mermaid-chat.tsx +102 -0
  118. package/src/client/chat/placeholder-hint.tsx +46 -0
  119. package/src/client/components/ExplorerPanel.tsx +534 -0
  120. package/src/client/components/FileIcon.tsx +46 -0
  121. package/src/client/components/ScmPanel.tsx +480 -0
  122. package/src/client/components/a11y.ts +20 -0
  123. package/src/client/components/icons.tsx +274 -0
  124. package/src/client/components/overlay.tsx +225 -0
  125. package/src/client/css-modules.d.ts +5 -0
  126. package/src/client/drag/DragFileInlay.tsx +89 -0
  127. package/src/client/drag/file-drag.ts +67 -0
  128. package/src/client/drag.ts +154 -0
  129. package/src/client/file-source.ts +58 -0
  130. package/src/client/fileType.ts +129 -0
  131. package/src/client/floating.ts +63 -0
  132. package/src/client/hooks/useResizableSplit.ts +91 -0
  133. package/src/client/hooks/useStore.ts +15 -0
  134. package/src/client/index.ts +389 -0
  135. package/src/client/layout.ts +546 -0
  136. package/src/client/locales.ts +247 -0
  137. package/src/client/maximize.ts +34 -0
  138. package/src/client/mount.tsx +74 -0
  139. package/src/client/persist.ts +194 -0
  140. package/src/client/picker/FilePickerModal.tsx +506 -0
  141. package/src/client/picker/file-picker.ts +86 -0
  142. package/src/client/preview/PreviewPanel.tsx +233 -0
  143. package/src/client/preview/PreviewTabs.tsx +159 -0
  144. package/src/client/preview/PreviewToolbar.tsx +160 -0
  145. package/src/client/preview/content.tsx +617 -0
  146. package/src/client/preview/markdown.ts +351 -0
  147. package/src/client/preview/mermaid.ts +274 -0
  148. package/src/client/preview/selection.ts +82 -0
  149. package/src/client/reference.ts +161 -0
  150. package/src/client/settings-card.module.css +316 -0
  151. package/src/client/settings-form.ts +451 -0
  152. package/src/client/store.ts +1290 -0
  153. package/src/client/styles/chip.module.css +38 -0
  154. package/src/client/styles/drag.module.css +30 -0
  155. package/src/client/styles/explorer.module.css +371 -0
  156. package/src/client/styles/picker.module.css +344 -0
  157. package/src/client/styles/preview.module.css +904 -0
  158. package/src/client/styles/scm.module.css +380 -0
  159. package/src/client/styles/tokens.module.css +480 -0
  160. package/src/core/types.ts +162 -0
  161. package/src/host/fs-service.ts +513 -0
  162. package/src/host/gate.ts +74 -0
  163. package/src/host/git-runner.ts +116 -0
  164. package/src/host/git-service.ts +395 -0
  165. package/src/host/loopback.ts +63 -0
  166. package/src/host/poll-guard.ts +109 -0
  167. package/src/host/routes.ts +695 -0
  168. package/src/index.ts +97 -0
  169. package/src/mount-once.ts +48 -0
package/LICENSE ADDED
@@ -0,0 +1,38 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2026, dsh-web-ui contributors
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice,
9
+ this list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its contributors
16
+ may be used to endorse or promote products derived from this software
17
+ without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ ---
32
+
33
+ Attribution notice: this package is a re-implementation of the right-panel
34
+ system of AionUi (iOfficeAI/AionUi, https://github.com/iOfficeAI/AionUi),
35
+ licensed under the Apache License 2.0. Pixel measurements, layout parameters
36
+ and interaction behavior were re-derived from AionUi v2.1.53 during research;
37
+ no substantial portions of AionUi source code are copied. The upstream
38
+ project's copyright and license remain with its authors.
@@ -0,0 +1,6 @@
1
+ # Bilingual-pair consistency record (docs/i18n.md): the git blob hash of each
2
+ # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
+ # after editing either side, bring the other along and re-record with:
4
+ # node scripts/verify-docs.mjs --write <dir>
5
+ README.md: f1a7fe1e4759e1cf24fa4e13092304417c5c5306
6
+ README.zh.md: 6c599be2f2a408f2be327a6b4cc1b12e355c352c
package/README.md ADDED
@@ -0,0 +1,66 @@
1
+ # dsh-file-manager — Right-panel file manager + `@` file references for the DSH web GUI
2
+
3
+ [English](README.md) | 中文 ([README.zh.md](README.zh.md))
4
+
5
+ > A plugin for the DeepSeek Harness desktop shell (`dsh web`): an **Explorer file panel + Preview panel** on the right of the chat area (a pixel-faithful re-implementation of FileManager, Apache-2.0 reference, not a copy), plus **`@` file references** in the composer (tree multi-select modal + in-composer chips with line numbers). Everything is driven by the real filesystem and real git — no mocks.
6
+
7
+ ## Features
8
+
9
+ ### Right panels
10
+
11
+ - **Explorer (rightmost column)**: `Files / Changes` tabs.
12
+ - File tree: click to expand/collapse folders, open files; filename search on top (150ms debounce, click-to-locate).
13
+ - Git changes: real `git status` (porcelain v1 -z) with stage / unstage / discard (untracked → delete, tracked → restore; batch discard requires confirmation).
14
+ - Tree context menu: copy path, copy name, reveal in file manager, open with default app, rename, new file, new folder, delete (double-confirmed).
15
+ - Drag a file row into the composer to insert its relative path into the draft.
16
+ - **Preview (second-right column)**: multi-tab preview for markdown / html / code / diff / csv / pdf / word / excel / ppt / image / text / url. Source/preview toggle, split editing (persisted ratio), save (mtime conflict detection), download, refresh, middle-click close, right-click batch close.
17
+ - **Mermaid**: ```mermaid blocks in markdown preview render as charts; the runtime ships inside the plugin (same-origin, offline-capable, follows the theme).
18
+ - Dark/light themes, per-project persisted preferences, master switch (Settings → Web UI plugins).
19
+
20
+ ### `@` file references (highlight)
21
+
22
+ Typing `@` in the composer opens a **pi-desktop-style tree multi-select modal** (lazy directory tree + filename search + checkboxes):
23
+
24
+ - Picked files/directories land as **in-composer chips** (green `</>` glyph + basename + line range); the reference text stays hidden and is only serialized to `@<relative-path>:<lines>` plain text on send.
25
+ - **Line numbers**: a full-file reference carries the file's line count (`@path:1-N`); selecting a code range in the preview and clicking **Add to chat** produces a chip with just that range (`@path:start-end`).
26
+ - Chips are native dsh reference objects (not text decoration): Backspace deletes the whole chip, copy/paste keeps semantics, submit serializes through the plugin's registered `file` reference codec.
27
+ - Directory references use plain `@path/ ` text (no line concept).
28
+
29
+ ## Install
30
+
31
+ ```sh
32
+ # From npm (once published)
33
+ dsh plugin --profile web add @lijian-ui/dsh-file-manager
34
+
35
+ # Direct link from this repo (dev/onboarding; lib/ is committed, clone-and-use)
36
+ git clone https://github.com/lijian-ui/dsh-file-manager.git
37
+ cd dsh-file-manager
38
+ dsh plugin --profile web add link:$(pwd)
39
+ ```
40
+
41
+ Restart `dsh web` after installing; open a project session to see the panels, and type `@` in the composer for file references.
42
+
43
+ > The desktop shell (dsh-desktop) develops against this via a local symlink (`node_modules/@lijian-ui/dsh-file-manager → extensions/file-manager`); after editing the source, `npm run build` regenerates `lib/`, then restart dev.
44
+
45
+ ## Architecture
46
+
47
+ - **Host half** (`src/index.ts` + `src/host/`): a cordis plugin exposing `/filemgr/*` HTTP routes — directory listing, file read (80k char text cap / image data URLs), write (mtime conflict detection), filename search, git status / stage / unstage / discard, and an SSE change stream. Every operation passes a **workspace gate** (realpath normalization + prefix check) and is **loopback-only**.
48
+ - **Browser half** (`src/client/`): framework-free state core (`store.ts`), drag engine (`drag.ts`), DOM layout controller (`layout.ts` — appends panel tracks to the shell's 3-column grid), React components (explorer / scm / preview / picker).
49
+ - `picker/FilePickerModal.tsx` — the `@` tree multi-select modal (bridge + modal; opens on a bare `@` in the composer).
50
+ - `file-source.ts` — registers the `file` input-trigger source (codec only; inert in the trigger menu).
51
+ - `reference.ts` — chip insertion (`slash/input-insert-reference` bail; `@path:lines` serialization).
52
+ - `preview/selection.ts` — preview selection → line-range mapping.
53
+ - `styles/chip.module.css` — chip visuals (muted rounded pill + green `</>` glyph, global override of `[data-decoration="chip"]`).
54
+ - **Workflow**: after editing, `npm run build` (regenerates `lib/`) AND a dev restart are both required — neither substitutes for the other.
55
+
56
+ ## Build
57
+
58
+ ```sh
59
+ npm install
60
+ npm run build # tsc -b + tsdown → lib/
61
+ npm run test # vitest
62
+ ```
63
+
64
+ ## Attribution
65
+
66
+ This project is a re-implementation of FileManager (iOfficeAI/FileManager, Apache-2.0): dimensions, colors, motion, and interaction parameters were measured from v2.1.53; the implementation is new code and does not reproduce upstream source. Upstream copyright belongs to the FileManager project; this project retains attribution per the Apache-2.0 license.
package/README.zh.md ADDED
@@ -0,0 +1,66 @@
1
+ # dsh-file-manager — DSH Web GUI 右侧文件管理面板 + `@` 文件引用
2
+
3
+ [English](README.md) | 中文
4
+
5
+ > 为 DeepSeek Harness 桌面端(`dsh web`)开发的插件:聊天区右侧的 **Explorer 文件面板 + Preview 预览面板**(FileManager 风格,Apache-2.0 参考实现非抄录),以及输入框 **`@` 引用项目文件**(树形多选弹窗 + 输入框内胶囊 + 行号)。数据全部来自真实文件系统与真实 git 仓库,无 mock。
6
+
7
+ ## 功能
8
+
9
+ ### 右侧面板
10
+
11
+ - **Explorer(最右栏)**:`文件 / 变更` 双 tab。
12
+ - 文件树:整行点击展开/收起目录、打开文件;顶部文件名搜索(150ms 防抖,点击结果定位到树)。
13
+ - Git 变更:读取真实 git status(porcelain v1 -z),支持 stage / unstage / discard(untracked 走删除、tracked 走 restore,批量放弃有确认)。
14
+ - 文件树右键菜单:复制路径、复制名称、在文件管理器中显示、用默认应用打开、重命名、新建文件、新建文件夹、删除(二次确认)。
15
+ - 拖拽文件行到聊天输入框,即把相对路径插入草稿。
16
+ - **Preview(右二栏)**:多 tab 预览,支持 markdown / html / code / diff / csv / pdf / word / excel / ppt / 图片 / 文本 / url。源码/预览切换、分屏编辑(比例持久化)、保存(mtime 冲突检测)、下载、刷新、中键关闭、右键批量关闭。
17
+ - **Mermaid 图表**:markdown 预览中的 ```mermaid 代码块渲染为图表,运行时打包在插件内(同源提供、离线可用、跟随主题)。
18
+ - 明暗主题跟随、偏好按项目隔离持久化、总开关(设置 → Web UI 插件)。
19
+
20
+ ### `@` 文件引用(重点)
21
+
22
+ 在聊天输入框输入 `@` 打开 **pi-desktop 风格树形多选弹窗**(懒加载目录树 + 文件名搜索 + 复选框多选):
23
+
24
+ - 选中文件/目录 → 输入框内出现**胶囊**(绿色 `</>` 图标 + 文件名 + 行号),引用文字隐藏,发送时才还原为 `@相对路径:行号` 纯文本发给模型。
25
+ - **行号**:文件引用自动携带整个文件的行数(`@path:1-N`);在预览面板**选中代码片段**再点「添加到对话」,胶囊只携带选中区域的行号(`@path:start-end`)。
26
+ - 胶囊是 dsh 原生引用对象(非文字装饰):Backspace 整删、复制/粘贴保留语义、发送时经插件注册的 `file` 引用 codec 序列化。
27
+ - 目录引用为 `@路径/` 纯文本(目录无行号概念)。
28
+
29
+ ## 安装
30
+
31
+ ```sh
32
+ # 从 npm(发布后)
33
+ dsh plugin --profile web add @lijian-ui/dsh-file-manager
34
+
35
+ # 从仓库直接 link(开发/联调,clone 即可用,lib 已构建入库)
36
+ git clone https://github.com/lijian-ui/dsh-file-manager.git
37
+ cd dsh-file-manager
38
+ dsh plugin --profile web add link:$(pwd)
39
+ ```
40
+
41
+ 安装后**重启 `dsh web`**,打开项目会话即可看到聊天区右侧面板;在输入框输入 `@` 体验文件引用。
42
+
43
+ > 桌面壳(dsh-desktop)开发期以本地 symlink 联调:`node_modules/@lijian-ui/dsh-file-manager → extensions/file-manager`,源码改动后 `npm run build` 重新生成 `lib/`,重启 dev 生效。
44
+
45
+ ## 架构
46
+
47
+ - **host 半区**(`src/index.ts` + `src/host/`):cordis 插件,经 `/filemgr/*` HTTP 路由提供目录列举、文件读取(文本 80k 字符上限 / 图片 data URL)、写入(mtime 冲突检测)、文件名搜索、git status / stage / unstage / discard、SSE 变更流;所有操作过**工作区门卫**(realpath 规范化 + 前缀校验)且**仅限 loopback**。
48
+ - **browser 半区**(`src/client/`):框架无关状态核心(`store.ts`)、拖拽引擎(`drag.ts`)、DOM 布局控制器(`layout.ts`,向 shell 三栏 grid 追加面板轨道)、React 组件(explorer / scm / preview / picker)。
49
+ - `picker/FilePickerModal.tsx` — `@` 树形多选弹窗(bridge + modal,监听输入框裸 `@` 打开)。
50
+ - `file-source.ts` — 注册 `file` 输入触发 source(仅提供引用 codec,惰性菜单参与者)。
51
+ - `reference.ts` — 引用胶囊插入(`slash/input-insert-reference` bail,`@path:lines` 序列化)。
52
+ - `preview/selection.ts` — 预览选区 → 行号区间换算。
53
+ - `styles/chip.module.css` — 胶囊视觉(浅灰圆角 + 绿色 `</>` 图标,全局覆盖 `[data-decoration="chip"]`)。
54
+ - **工作流约定**:改插件后必须 `npm run build`(重生成 `lib/`)再重启 dev,二者缺一不可。
55
+
56
+ ## 构建
57
+
58
+ ```sh
59
+ npm install
60
+ npm run build # tsc -b + tsdown → lib/
61
+ npm run test # vitest
62
+ ```
63
+
64
+ ## 署名
65
+
66
+ 本项目是 FileManager(iOfficeAI/FileManager,Apache-2.0)右侧面板系统的复刻实现:尺寸、颜色、动效、交互参数来自对 v2.1.53 的实测调研,实现为全新代码,未大段抄录源码。上游版权归 FileManager 项目所有,本项目按 Apache-2.0 约定保留署名。
@@ -0,0 +1,13 @@
1
+ # dsh-filemgr bundle patch: inserts the dual-face plugin row into the web
2
+ # profile roster. Applied as a profile bundle layer (the `dsh.bundle.patch`
3
+ # manifest field); install with
4
+ # `dsh plugin --profile web add link:<repo>/packages/dsh-filemgr`.
5
+ #
6
+ # The row is a bare plugin by package name: the node half (exports ".") runs
7
+ # in the host process (workspace-gated fs/git services + /filemgr routes),
8
+ # and the `dsh.client` declaration in package.json makes the browser half
9
+ # (exports "./client", served at /plugins/ui-dsh-filemgr/client.js) load
10
+ # in the web GUI.
11
+ - insert:
12
+ - id: ui-dsh-filemgr
13
+ name: '@lijian-ui/dsh-file-manager'