dsh-web
zhu1090093659
DeepSeek Harness (DSH) Web 插件聚合生态 · 万物皆插件,通过创意工坊分发||DeepSeek Harness (DSH) Web Plugin Aggregation Ecosystem · Everything is a plugin, distributed via the Creative Workshop
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:kaijia323/dsh-sidebar
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
DSH Web Client 的 VSCode 风格文件树侧栏。作为 #root 的兄弟节点挂载在 document.body 上,通过 CSS layout push 让 DSH 原生界面让出右侧空间;不占用 DSH 原生 details slot,因此 blank 会话也能打开。特性:
× 关闭X-Frame-Options / frame-ancestors 拒绝被 iframe 嵌入)node_modules 和 .git 等目录.html / .htm 文件时,自动切换到“浏览器”视图,并在浏览器中新建标签页打开该本地文件,不会覆盖当前已打开的网站;本地文件由插件自身的 loopback HTTP 路由提供,HTML 引用的相对资源(CSS / JS / 图片等)也会从同目录加载chokidar 监听当前工作区文件变化,文件/目录的新增、修改、删除会自动刷新文件树,并自动重读当前激活的文件预览;未激活的 tab 在切换时读取最新内容,因此面板内不再保留手动刷新按钮node_modules 等大目录靠懒加载 + 虚拟化抗压;文件监听默认忽略 node_modules 和 .git,并自动遵循工作区 .gitignore 声明的忽略路径,避免监听构建产物等大目录;可通过 watchIgnored 追加忽略规则)插件分两半:
src/index.ts):注入 fs、connection 与 webServer,在 /dsh-sidebar 注册一个仅 loopback 可访问的 Connection RPC channel,提供 meta / list / read / html-files / git-status / git-diff / git-log / git-show / git-branches / git-switch / git-pull / git-push 等端点;同时在 /dsh-sidebar/events 注册同源 SSE 通道,用 chokidar 监听当前工作区并把文件变化推送给浏览器,并额外监听 .git 元数据(HEAD、index、refs、logs 等),推送 git-change 事件用于刷新 Git 状态、历史与分支;还在 /dsh-sidebar/files 注册仅 loopback 可访问的本地文件路由,供浏览器视图直接加载 HTML 及相对资源。src/client.tsx):注入 sessions、workspaces、connection,在 document.body 上创建自己的 React root 并挂载右侧栏;通过 EventSource 订阅文件变化事件,自动失效并重载受影响的目录,同时重读当前激活的预览。右侧栏是 #root 的兄弟节点,不注册任何 DSH slot:--dsh-sidebar-width 让 #root 让出宽度,形成“真占位”的 VSCode 式侧栏,而不是 overlay;收起时至少让出 40px 给常驻 Activity Bar;ctx.layout.openDetails(),所以 blank / 无消息会话也能打开。不修改 DSH 源码,也不替换 DSH 原生
details面板;原生details是否打开与本插件互不影响。
源码按职责拆分,入口文件只保留插件注册逻辑:
src/index.ts:Host 插件入口;RPC、文件系统、Git、配置等逻辑在 src/host/(config / fs / git / handlers / html-files / local-files / rpc / result / utils)。src/client.tsx:Browser 插件入口;React 组件、状态与 API 封装在 src/client/(api / activity-bar / browser-panel / git-panel / diff-view / tree / preview / sidebar-shell / styles 等)。src/client-model.ts:与 React 无关的纯模型(路径、扁平化、树交互 reducer),可独立单测。前端样式直接消费 DSH 的主题 alias token(--dsw-alias-*),不维护独立色板;组件使用 Tailwind CSS 编写,构建时由 tailwindcss 从 src/client.css 生成 utility CSS 并内联进客户端 bundle。
要求 DSH 0.1.2-alpha.2 或更新版本、pnpm 10+ 与 Node.js 20+。
从仓库或本地源码安装:
git clone https://github.com/kaijia323/dsh-sidebar.git
cd dsh-sidebar
pnpm install
dsh plugin --profile web add .
pnpm install 会通过 prepare 脚本自动构建 lib/(在 Windows / Linux / macOS 上行为一致);之后如果修改了源码,再执行一次 pnpm build 即可。
重启 dsh web 后,右侧文件树会自动作为 body 兄弟节点打开并展示;即使当前会话是 blank 也能打开。侧栏最右侧的 Activity Bar 常驻:点击当前视图图标可收起/展开,点击另一个图标切换视图;展开状态下左侧边缘可拖拽调整宽度。
正式版已发布到 npm,直接安装:
dsh plugin --profile web add @kaijia/dsh-sidebar
dsh plugin 会将该包安装到 $DSH_HOME/profiles/web,识别 dsh.bundle 配置并自动激活插件层。如果不想依赖 npm registry,也可以先用 pnpm pack 生成 tarball 来做正式分发(文件名中的版本号以当前 package.json 的 version 为准):
pnpm build
pnpm pack
dsh plugin --profile web add ./kaijia-dsh-sidebar-0.1.9.tgz
两种方式安装后,都可以用以下命令确认配置层已生效:
dsh --profile web --dump-config
输出中应能看到 # == @kaijia/dsh-sidebar 层;随后重启 dsh web 即可使用。卸载时执行:
dsh plugin --profile web remove @kaijia/dsh-sidebar
npm 发布包名为
@kaijia/dsh-sidebar。
本地开发时修改源码后重跑 pnpm build,然后重启 dsh web。只改 cordis.yml 里的 config 时 DSH 会热替换插件实例。
src/client.css 是 Tailwind 入口:只开启 components + utilities,不注入 base preflight,避免污染 DSH 宿主样式。var(--dsw-alias-*),随 DSH 明暗主题自动切换。pnpm build 会优先调用 Tailwind CLI 生成 lib/client.css 并内联到 lib/client.js;如果当前环境尚未安装 Tailwind(如未执行 pnpm install),会自动回退到 src/client.fallback.css,保证本地构建可用。<style data-dsh-sidebar-style> 节点,disposer 只移除自己创建的那个,因此热替换重叠期间不会互相删除样式,也不会残留旧样式。- insert:
- id: dsh-sidebar
name: '@kaijia/dsh-sidebar'
config:
maxTextBytes: 2097152
maxImageBytes: 8388608
maxEntriesPerDirectory: 2000
maxTreeRows: 100000
watchEnabled: true
watchDebounceMs: 200
watchIgnored:
- '**/node_modules/**'
- '**/.git/**'
| 配置 | 默认值 | 说明 |
|---|---|---|
maxTextBytes |
2097152 |
单次文本预览上限(UTF-8 字节) |
maxImageBytes |
8388608 |
单张图片预览上限(字节,经 base64 返回) |
maxEntriesPerDirectory |
2000 |
单目录最多返回的条目数;超出时截断并在树上提示 |
maxTreeRows |
100000 |
客户端展开后可扁平化的最大树行数,防止超大目录打爆内存 |
watchEnabled |
true |
是否开启文件监听实时刷新(文件树与当前激活预览);关闭后侧栏不再自动刷新(当前不提供内置手动刷新按钮) |
watchDebounceMs |
200 |
chokidar 写入稳定后触发通知的等待时间(同时是客户端批量刷新窗口) |
watchIgnored |
['**/node_modules/**', '**/.git/**'] |
文件监听忽略的 glob 列表;仅影响自动刷新通知,不影响文件树展示 |
pnpm test
覆盖:
meta / list / read 成功路径、截断、二进制回退、超大文件、非法路径;Git 的 status / diff / log / show / branches / switch 与远端分支检出details / shell.overlay、必须通过 #root margin-right 做 layout push、lazy-CJS bundle 可物化dsh-fs 的文本语义。maxImageBytes。git 命令;当前工作区目录需要处于 Git 仓库内,才能显示分支、改动和 diff。#root 作为 DSH 原生根节点和 --dsh-sidebar-width 做 layout push;升级后若 DSH 调整根节点结构,先检查 #root 的 margin-right 是否仍生效。MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: dsh-sidebar、file-tree、markdown-preview、sidebar、vscode-style。