DSH 插件市场
 
面向 DeepSeek Harness Web GUI 的持久化 Cordis 插件市场。它在“工作区”标题右侧、搜索/筛选/添加工作区之后放置一个 VS Code 风格的扩展图标,点击后从 GitHub 搜索 DSH 插件。
选择仓库并点击“安装”后,市场不会自行执行陌生仓库代码。它会在当前工作区创建一个新会话,把仓库地址、简介和一段 fail-closed 安装提示发送给 DSH 智能体,由智能体先审计 README 和插件结构,再执行并验证安装。
界面预览
插件市场以第 4 个动作图标进入,不占用工作区列表,也不会在 Settings 上方增加常驻按钮。
面板直接搜索 GitHub 仓库,并展示简介、Star 数、语言、预览和安装入口。
点击仓库名称或“预览”后,会在同一个右侧抽屉中读取仓库元数据与 README;不跳离 DSH。详情页保留 GitHub/安装入口,点“返回插件市场”会恢复原搜索结果和列表滚动位置。
安装工作流
“安装”不会直接执行仓库代码,而是把仓库信息和约束提示交给当前工作区的新 DSH 会话。
安装
从 npm registry 安装到 Web profile:
pnpm dsh plugin --profile web add @hydrogenoxide18/dsh-plugin-market安装只修改 $DSH_HOME/profiles/web 的依赖和 bundle 列表。验证组合:
pnpm dsh --profile web --dump-config随后重启 dsh web。刷新或新开的 GUI 页面中,“工作区”标题行最右侧应出现“插件市场”图标。
卸载:
pnpm dsh plugin --profile web remove @hydrogenoxide18/dsh-plugin-market为什么发布到 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 适配器,锚定原生“搜索会话”动作组;侧栏重渲染时自动重挂,插件卸载时恢复原宽度并删除按钮。市场面板仍通过正式的 shell.overlay Slot 注入。
开发验证
npm install
npm test
npm pack --dry-runnpm 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,并确认“返回插件市场”会恢复查询、结果与滚动位置;不截图,也不采集无障碍树。测试结束后应关闭临时调试端口并正常重启桌面壳。