DeepSeek Harness Web Bundle 插件:dsher 社区面板

前言

DeepSeek Harness (DSH) 的设计理念之一是“一切皆插件”。在本地运行 dsh web 进程时,我们可以通过插件扩展界面能力。针对 bbs.dsher.cn 论坛,开发了一个 bundle 插件,旨在将论坛的浏览、搜索、发帖等功能集成到 DSH 的 Web 面板中,避免在浏览器标签页和 DSH 界面之间频繁切换。

插件介绍

这是一个 DeepSeek Harness Web 的 bundle 插件,由 kimirong 维护。安装后,它在 dsh web 界面右下角生成一个常驻的悬浮按钮(“dsher 社区”),点击即可打开面板,直接与 bbs.dsher.cn 交互。

安装与启用

前提:机器上已安装 DeepSeek Harness(带 dsh 命令),并已启动 dsh web。

1. 安装插件

从 GitHub 仓库直接安装,无需先发布到 npm:

# 将插件加入 web profile bundles
dsh plugin --profile web add github:kimirong/dsher-bbs-plugin

2. 重启服务

安装完成后,必须完全重启 dsh web 进程(不是刷新浏览器页面),插件才会生效。

dsh web

重启后,页面右下角会出现一个蓝色的胶囊按钮,点击即可进入社区面板。

3. 常见问题

如果安装时遇到 ERR_PNPM_ADDING_TO_ROOT 错误,这是因为 pnpm 8+ 对 workspace 根目录的 add 操作进行了校验。可以在 ~/.dsh/profiles/web/.npmrc 中添加一行配置解决:

echo 'ignore-workspace-root-check=true' >> ~/.dsh/profiles/web/.npmrc
dsh plugin --profile web add github:kimirong/dsher-bbs-plugin

4. 更新与卸载

dsh plugin --profile web update @kimirong/dsher-bbs-plugin   # 更新到新版本
dsh plugin --profile web remove @kimirong/dsher-bbs-plugin   # 卸载(自动从 bundles 剔除)

功能特性

  • 右下角悬浮入口:蓝色胶囊按钮常驻页面右下角,不占用侧栏空间,随时可点。
  • 浏览与搜索:支持版块分类浏览、帖子列表(分页)、帖子详情查看。搜索框直接集成在浏览页顶部。
  • 发帖与互动:面板内支持发帖、回帖和点赞,正文支持 Markdown 渲染。
  • 图片上传:支持在正文或回复框直接粘贴截图(自动转码上传),或点击“🖼 上传图片”按钮。
  • 一键登录:通过弹窗走论坛的 GitHub / Google OAuth 流程,会话自动接入,无需手动复制 Cookie。

典型用法

安装并重启 dsh web 后,直接点击右下角的悬浮按钮即可使用。典型操作流如下:

  1. 点击悬浮按钮,浏览或搜索帖子。
  2. 点击“发帖”或回复框,输入 Markdown 内容。
  3. 粘贴截图或点击上传按钮发布内容。
  4. 点击“一键登录”按钮,完成 OAuth 认证。

架构与技术实现

该插件采用 Host/Client 分离架构,通过 HTTP 路由实现通信,而非 DSH 官方的 @Remote 机制。

Host 半(服务端)

负责与论坛交互,暴露 JSON RPC 接口。
- 文件位置:src/host/index.ts、src/host/forum.ts
- 职责:
- src/host/index.ts:注册 ctx.webServer 路由 /api/dsher-bbs/*,将论坛能力暴露为本机 JSON RPC。
- src/host/forum.ts:使用 Node 全局 fetch 访问论坛,通过 HTML 正则解析帖子列表和详情(论坛为 Hono + htmx 服务端渲染,无公开 JSON API)。

Client 半(浏览器端)

负责 UI 渲染与用户交互。
- 文件位置:src/client/index.ts、src/client/Panel.tsx、src/client/rpc.ts
- 职责:
- src/client/index.ts:插件入口,通过 ctx.inject(['slots']) 注册 shell.overlay 槽位。
- src/client/Panel.tsx:React 组件,渲染悬浮按钮和面板 UI,通过同源 fetch('/api/dsher-bbs/<method>') 调用 Host。
- src/client/rpc.ts:对 fetch 进行封装。

通信模式

不使用 @deepseek-ai/dsh-api-remotes 的 @Remote 机制,原因在于官方的客户端装配是静态白名单(只 import 官方包的 /remote),第三方独立包的 remote 不会被自动挂载。因此本包采用自建 HTTP 路由:Host 半注册 webserver 前缀路由,Client 半同源 fetch,这是独立 bundle 插件的通用可交付模式。

限制与注意事项

  1. 限流规则:论坛对写操作有限流限制,请注意:
    - 5 帖/小时
    - 30 回帖/小时
    - 60 点赞/小时
    - 20 上传/小时
  2. HTML 解析脆弱性:论坛正文用 marked 渲染且未 sanitize,存在 XSS 风险。虽然 forum.ts 做了基础净化,但渲染第三方内容仍有风险。且论坛改版后,正则解析逻辑可能失效,需同步更新。
  3. 鉴权与安全:
    - /api/dsher-bbs 路由无鉴权,与 DSH 页面同源同权限。任何能访问该 DSH 页面的人都能调用。
    - 会话 Cookie 仅存在于 Host 进程内存,不落盘、不外发。
    - 一键登录依赖论坛侧部署 src/routes/dsh-login.tsx,且该页只接受 localhost / 127.0.0.1 来源。
  4. 开发构建:
    - 运行 npm install 安装依赖。
    - 执行 npm run build 编译(产物为 lib/index.mjs 和 lib/client.js)。
    - 执行 npm run typecheck 进行类型检查。

许可证

MIT。

项目地址:https://github.com/kimirong/dsher-bbs-plugin

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜