DSH 插件市场
面向 DeepSeek Harness Web GUI 的持久化 Cordis 插件市场。它在“工作区”标题右侧、搜索/筛选/添加工作区之后放置一个 VS Code 风格的扩展图标,点击后从 GitHub 搜索 DSH 插件。
当前源码版本为 0.4.0,已按官方 DSH 0.1.1-rc.2(提交 b150a551b8)完成适配和实测,并保留对 0.1.0-rc.5 的旧布局回退。
选择仓库并点击“安装”后,市场不会自行执行陌生仓库代码。它会在当前工作区创建一个新会话,把仓库地址、简介和一段 fail-closed 安装提示发送给 DSH 智能体,由智能体先审计 README 和插件结构,再执行并验证安装。
界面预览
插件市场以第 4 个动作图标进入,不占用工作区列表,也不会在 Settings 上方增加常驻按钮。
工作区标题栏中的插件市场入口
面板直接搜索 GitHub 仓库,并展示简介、Star 数、语言、预览和安装入口。
插件市场搜索面板
点击仓库名称或“预览”后,会在同一个右侧抽屉中读取仓库元数据与 README;不跳离 DSH。详情页保留 GitHub/安装入口,点“返回插件市场”会恢复原搜索结果和列表滚动位置。
插件市场中的 GitHub 仓库预览
安装工作流
“安装”不会直接执行仓库代码,而是把仓库信息和约束提示交给当前工作区的新 DSH 会话。
插件市场安装工作流
安装
从 npm registry 安装到 Web profile:
dsh plugin --profile web add @hydrogenoxide18/dsh-plugin-market
如 npm 尚未发布 0.4.0,可在本仓库执行 npm install、npm test、npm pack,再把生成的 hydrogenoxide18-dsh-plugin-market-0.4.0.tgz 绝对路径交给同一条 dsh plugin --profile web add 命令。
安装只修改 $DSH_HOME/profiles/web 的依赖和 bundle 列表。验证组合:
dsh --profile web --dump-config
随后用 dsh web --no-open 重启 Web Host,或重新打开 DSH Desktop。刷新或新开的 GUI 页面中,“工作区”标题行最右侧应出现“插件市场”图标。
卸载:
dsh plugin --profile web remove @hydrogenoxide18/dsh-plugin-market
DSH 版本兼容
0.4.0 的主验证目标是 DSH 0.1.1-rc.2。
- 包的兼容范围仍覆盖
>=0.1.0-rc.5 <0.2.0;同一个 Client bundle 内保留旧版标题行回退,不需要维护两套包。
- rc.2 把侧栏外壳拆到
@deepseek-ai/dsh-client-ui-sidebar。本包已经把它写入 dsh.client.inject,并继续通过正式的 shell.overlay Slot 渲染右侧抽屉。
- rc.2 的
sidebar.footer.action 位于 Settings 上方,并不是用户要求的工作区标题动作区;sidebar.workspaces 又是单占位,注册它会替换整个原生工作区浏览器。因此第 4 个图标仍使用受 Cordis 生命周期管理的语义 DOM 适配器。
为什么发布到 npm
npm 包内已经包含预构建的 lib/client.js。profile 从 registry 安装时不需要运行构建脚本,也不会创建指向另一个盘符的本地 link: 依赖,因此避开 Windows/pnpm 对跨盘本地路径处理不一致的问题。
直接从 GitHub 安装的是源码 checkout;除非先构建并允许安装期脚本,否则不会产生浏览器 bundle。日常使用应优先安装 npm 包。
持久化边界
cordis_define / cordis_run 创建的动态插件存在于当前 Host 进程内,重启即消失。
- 本包声明
dsh.bundle,通过 dsh plugin --profile web add 进入 profile manifest;重启后由 Loader 再次挂载,因此常驻。
- 市场本身不把搜索词、结果、README 或仓库代码写入磁盘。搜索结果和仓库预览只存在于面板内存;安装状态保留在新建的 DSH 会话日志里。
结构
src/index.js:Host Loader 占位行,让 Client 模块表发现浏览器半段。
src/client.js:市场入口、GitHub Search/仓库预览、安全 README 渲染和新会话 prompt 投递。
cordis.patch.yml:插入 plugin-market 组合行。
tsdown.config.mjs:生成 DSH lazy-CJS 浏览器 bundle。
当前 DSH 尚未公开“工作区标题动作” Slot。因此入口使用受 Cordis effect 生命周期管理的 DOM 适配器,同时锚定原生“搜索会话”和“添加工作区”控件,不依赖哈希 CSS 类名;侧栏重渲染时自动重挂,插件卸载时恢复原宽度并删除按钮。市场面板仍通过正式的 shell.overlay Slot 注入。
开发验证
npm install
npm test
npm pack --dry-run
npm test 会构建 Host/Client 产物,并验证标题动作定位、按钮挂载/清理、安装 prompt、仓库详情规范化、README 解码/安全链接处理和客户端 bundle 注册格式。
需要对正在运行的 DSH Desktop 做低开销 UI 回归时,可临时以 --remote-debugging-port=9333 --remote-debugging-address=127.0.0.1 启动桌面壳,然后运行:
$env:DSH_CDP_PORT = '9333'
npm run test:cdp
该脚本直接使用 Chrome DevTools Protocol:通过 Input.insertText 验证搜索框,读取列表/详情 DOM,并确认“返回插件市场”会恢复查询、结果与滚动位置;不截图,也不采集无障碍树。测试结束后应关闭临时调试端口并正常重启桌面壳。