dsh-web-search-ddg
aooyoo
Zero-token DuckDuckGo search provider for the DeepSeek Harness (DSH) web seam — local headless browser, no API key, no m…
PROJECT TOPICS
PROJECT README
DeepSeek Harness(dsh)的
桌面安装包:Windows exe 和 macOS dmg。本仓库只包含打包用的 Electron 壳和
CI 配置,不包含上游源码——构建时直接安装 npm 发布版 @deepseek-ai/dsh。
应用启动时用 Electron 内置 Node(加 --expose-internals)在本机
127.0.0.1 的随机端口拉起 dsh web,窗口加载 Web UI,关窗即停服务。
数据与配置在用户目录 .dsh 下,与命令行版通用。
main.js — Electron 主进程:拉起/守护 dsh 服务、解析就绪行、窗口与菜单、
外链转系统浏览器、退出清理。Windows 上通过 --patch 覆盖层把目录选择器
固定为 browse 组合(原生 Win32 弹窗的子进程在 Electron 打包环境下起不来)。splash.html — 启动等待页。stage-dsh.mjs — 把 @deepseek-ai/dsh 安装进 staging/<platform>-<arch>/dsh
并裁剪(node-pty 只留本平台预编译、去掉 sharp wasm 回退、删 sourcemap/pdb)。afterPack.js — electron-builder 钩子,把 staging 的运行时拷进应用 resources。
(不用 extraResources 是因为它默认排除 node_modules。)build/ — 图标(由上游仓库的 favicon.svg 生成)。node stage-dsh.mjs # 需要时用 DSH_VERSION=x.y.z 锁版本
npm install
npx electron-builder --win --x64 # Windows 上
npx electron-builder --mac --arm64 # macOS 上
产物在 dist/。开发调试:staging 后直接 npm start。
推送标签即触发 .github/workflows/release.yml:
git tag v0.1.0
git push origin v0.1.0
Windows/macOS runner 各自原生构建,产物连同 SHA256SUMS.txt 发布到
GitHub Release。版本号以标签为准:CI 会把 vX.Y.Z 写进
package.json 再构建,发版只需打标签,无需手动改文件(仓库里的
version 字段仅作为手动触发构建时的默认值)。
升级内置的 dsh 只需等 npm 出新版后重新打标签(或用 DSH_VERSION 锁定)。
每个平台出两种安装包(CI matrix 的 flavor 维度):常规版只含官方
dsh;文件名带 -full 的版本额外预置
@linxin666/dsh-web-ui-all
插件全家桶(任务看板、SSH、皮肤中心、宠物等),首次启动自动挂载进
用户配置层,之后可像普通插件一样在配置中心移除(移除后不会被重新
塞回来)。两种版本共享 ~/.dsh 数据,可互相覆盖安装切换:换到常规
版时预置插件自动停用,换回 full 版自动恢复。
dsh 一切皆插件,桌面版留了两个定制入口,改完重新打标签出包即可:
desktop-patch.yml — 插件组合覆盖层,应用启动时经 dsh web --patch 生效。
禁用内置插件(条目 id 用 npx @deepseek-ai/dsh web --dump-config 查)、
覆盖插件配置、挂载新插件都在这里写,语法见文件内注释。用户侧的
~/.dsh/profiles/web/cordis.patch.yml 是同样的语法,改动在它之后应用,
所以用户仍能覆盖打包默认值。
plugins.json / plugins-<flavor>.json — 要预置进安装包的插件
npm 包列表,例如 {"packages": ["some-dsh-plugin@1.2.0"]};stage 脚本
按 DSH_FLAVOR 环境变量选清单(默认 plugins.json,
DSH_FLAVOR=full 读 plugins-full.json,CI 两种都构建)。声明了
dsh.bundle 的插件包走这条路即可:stage 脚本把它装进运行时并注册进
内置 dsh 的依赖清单,应用首次启动把它写进用户 profile 的 bundles
自动挂载。不带 bundle 的散装插件才需要在 desktop-patch.yml 里
insert 挂载条目;带界面的双面插件要把 host 和 client-ui 两半都挂上
(参考 main.js 里目录选择器的写法)。
注意选与内置 dsh 版本匹配的插件版本:peer 依赖指向旧版 dsh 的插件包
会让 npm 安装极慢且运行时也不兼容。不重新打包的话,用户也可以自己编辑
~/.dsh/profiles/web/cordis.patch.yml,或用 dsh plugin 命令
(需要 pnpm)往自己的 profile 里装插件。
package.json 的 updateRepo),有新版弹窗引导下载安装包;
菜单「帮助 → 检查应用更新…」可手动查。@deepseek-ai/dsh,
发现新版可一键"下载并升级"——用内置 pnpm 装到用户数据目录的
runtimes/<版本>/,重启应用生效,无需重装应用;新内核启动失败会自动
隔离并回退到内置版本。菜单「帮助 → 检查内核更新…」可手动查,
「帮助」菜单第一项显示当前生效的内核版本。pnpm install;「从 .tgz 安装」装 npm pack 打出的成品包)、MCP 服务器(左列表 + 右详情的
主从布局:列表显示每台服务器与启用状态、测试结果指示灯,详情页
编辑名称、地址、请求头,含启用开关与「测试连接」;目前仅支持
streamable-http 一种传输方式。配置写入用户配置层的标记托管区块,
保存即热生效无需重启,不碰用户手写条目)、技能(安装 zip 技能
包——单技能或多技能合集均可,列表删除、打开目录,装删即时生效无需
重启;目录固定为 dsh 约定的 ~/.dsh/skills)。dsh、pnpm、node 已在 PATH 上、
跑在应用内置的 Node 上,机器无需安装 Node/pnpm。想在自己的终端里
长期使用,可把用户数据目录下的 bin/ 加进 PATH。需要执行构建脚本
的插件(GitHub 源码分发、触发 pnpm allowBuilds 门禁)不在图形界面
代为放行——按 dsh 报错提示在命令行窗口里自行处理,这是有意的安全
边界。xattr -cr "/Applications/DeepSeek Harness.app" 或右键打开。
要消除提示需在 electron-builder 配置里接入证书
(Windows 代码签名证书 / Apple Developer ID + 公证)。^22.19.0 || >=24.0.0;Electron 43 内置 Node 24)。参与开发(人或 agent)请先读 AGENTS.md:架构、无头环境下的验证手段、踩坑清单都在那里。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。