dsh-gov-portal:政务风独立 WebUI,1:1 对接 DSH Agent 能力

前言

DeepSeek Harness(DSH)的主控台默认在 3080 端口提供通用 Web 界面。若你需要一套独立端口、视觉风格贴近中国地方政务网站的办事大厅界面,同时又不希望在插件里硬编码业务逻辑,就需要一个能透过宿主 apiProxy 网关对接会话、模型、权限、统计等全部真实 Agent 能力的 WebUI 插件。

下面介绍 ExElectron 维护的 dsh-gov-portal:在默认端口 3081 提供政务风办事大厅,界面按地方政务网站视觉规范设计,后端能力全部来自宿主进程,零业务硬编码。

这是什么

dsh-gov-portal(GitHub:ExElectron/dsh-gov-portal)是 DSH 的 Cordis 插件包。它在独立端口(默认 3081)运行静态前端与 API 桥,通过宿主内的 apiProxy 网关 1:1 对接 DSH 的会话、模型、模式、权限、统计等能力。

插件采用 MIT 许可证,要求 Node.js ^22.19.0 || >=24.0.0。完整设计规范见仓库 docs/design-system.md,宿主集成面调研见 docs/harness-integration.md

页面架构与界面能力

界面严格按政务服务门户设计语言组织,主要区域如下。

顶部工具条:深蓝底白字,使用 Windows XP 原版像素点阵宋体 12px(关闭抗锯齿)。包含「设为首页」「加入收藏」「无障碍浏览」、居中红色标语(可配置)、右侧实时日期时间(精确到秒),以及访问次数统计「本站已被访问:xxxxxx 次」。计数由服务端持久化,6 位补零,通过 /plugin/visits 端点读写,存于 ~/.dsh/gov-portal.json

主 Header:红色公章徽标(预设红/蓝/绿/金印章或上传图片)、平台名与副标题、政务搜索框(蓝色「查询」按钮)、绿色状态圆点显示「系统状态: 正常运行」。

主导航:经典深蓝渐变(#1874cd → #0d47a1)白字黑体,包含平台首页、业务大厅、电子卷宗、督办流水、参数配置、政策法规等入口,Hover 高亮。

双通道跑马灯:左侧「重要通知」与右侧「行情指数」反向滚动,速度、方向、内容与真实轮询 API 均可配置。

80/20 主布局:左侧为直办大厅(工单编号条、交互回执窗口、统计行、公文输入表单),右侧为支撑侧栏(常用办事通道、便民服务提示)。

动态飘窗:两个匀速碰撞反弹的飘窗(悬停暂停,「×」可销毁)——红头重要通知弹窗与官方矩阵二维码弹窗。

办结盖章:流式输出完成时,右上角可显示半透明「【准予办结】」红色印章动画,可在参数配置中关闭。

与 DSH 宿主的真实对接

插件不硬编码 Agent 业务,界面元素与宿主能力一一映射:

界面元素 宿主能力 说明
模型下拉 + 推理强度 session.models / session.selectModel 按 provider 分组动态枚举,推理强度随模型刷新
模式下拉 agentPreset.list / agentPreset.select 全量动态枚举,创建工单时随 session.create 传入
权限下拉 settings.describe + settings.update('permission', {defaultPreset}) 从 settings schema 动态枚举;所选权限写入宿主「新会话默认」
回执流 events.muxsession/event 与主 GUI 同一事件源
统计行 sessionStats 投影 + assistant/message usage 聚合 轮/步/LLM 时长/工具时长/首 token/速度/缓存命中/输入输出/TPS 等实时计算
沙箱审批弹窗 approval/requested 帧 + POST /api/respond 与权限预设联动
系统咨询弹窗 question/requested 帧 + respond 支持多选
电子卷宗 session.list / session.history / session.search / GET /api/session.export 会话索引、查阅、导出 JSONL
督办流水 session/event 实时追加 chunk 级可过滤
DSH 原生系统设置 settings.describe / settings.update schemastery schema 驱动表单,覆盖模型、凭据、沙箱等全部命名空间

README 中记录的已验证枚举包括:模式下拉出现 standard 标准模式 / code PTC 模式 / minimal 极简模式 / cordis 创造模式 / liangshen 梁神模式;权限下拉出现 read-only / workspace-write / danger-full-access 三档;settings.describe 动态渲染 11 个宿主命名空间表单;真实对话事件链 turn/start → user/message → assistant/chunk → assistant/message → turn/end(completed)sessionStats 投影全部通过。

参数配置面板

参数配置面板支持全维度热修改与持久化,涵盖:

  1. 漂浮弹窗与公告控制
  2. 跑马灯与滚动条
  3. 界面视觉与个性化(4 套预设主题、自定义全站主色/渐变/边框色、单位落款与文案、徽标上传)
  4. Agent 运行与通信(端口、WS、工单前缀、默认模型、温度、上下文轮数、权限确认等级、盖章开关)
  5. DSH 原生系统参数
  6. 存储与重置(保存、导出 JSON 卷宗、导入、恢复出厂)

前端配置存于 localStorage(键 dsh.govPortal.v1),插件端口等存于 ~/.dsh/gov-portal.json

安装与启用

插件通过 dsh plugin 安装到 web profile,安装后需重启 dsh web 生效。

# 1. 安装到 web profile(pnpm link + 自动 reconcile 进 dsh.profile.bundles)
cd <本目录>
dsh plugin --profile web add link:<本目录绝对路径>

# (如遇 pnpm 写入 package.json 的 EPERM,可手动补:
#   dependencies: "dsh-gov-portal": "link:../../../Desktop/test/Dsh_GovUI"(按实际相对路径)
#   dsh.profile.bundles 末尾追加 "dsh-gov-portal")

# 2. 重启 dsh web(插件在 dsh 进程内,需重启生效)
dsh web

# 3. 访问
#    http://127.0.0.1:3081/         政务办事大厅(本插件)
#    http://127.0.0.1:3080/         DeepSeek Harness 主控台

修改端口后需重启 dsh,监听参数在插件启动时读取。

验证与测试

仓库提供四类测试脚本,可按需运行:

node test/server-smoke.mjs      # 静态资源 + API 桥分发 + SSE + respond + 导出(mock ctx)
node test/e2e-check.mjs         # 浏览器运行时 17 项检查(需 3081 在线)
node test/e2e-chat.mjs          # 真实对话:创建会话→提交→事件链→统计(消耗少量 API 额度)
node test/screenshot.mjs        # 各面板截图(输出 shots/*.png)

e2e-chat.mjs 会真实写入 ~/.dsh/sessions,可在电子卷宗中查阅或删除。

适用场景与注意事项

适合谁

  • 需要在 DSH 上提供政务风办事大厅界面的开发者或团队
  • 希望保留 DSH 全部 Agent 能力(模型、模式、权限、审批、统计),仅替换前端呈现的场景
  • 需要独立端口(3081)与主控台(3080)并行访问的场景

注意事项

  1. 插件仅在宿主进程(dsh web)内运行;3081 页面不能脱离 dsh 单独使用。
  2. 事件通道默认使用本插件与宿主同进程的 SSE 桥;配置面板保留 WebSocket 地址与重试间隔项。
  3. 插件以当前 dsh 进程权限运行,安装前应检查源码与 MIT 许可证。
  4. 测试会话会真实写入本地会话存储,注意清理。

结尾

dsh-gov-portal 把 DSH 的 Agent 能力装进一套可配置的政务风 WebUI,不重复实现业务逻辑,界面与宿主通过 apiProxy 保持 1:1 对接。若你正在 DSH 生态中寻找替代主控台界面的方案,可从下面链接查看详情。

  • SkillHub 目录页:https://www.skillhub.cn/plugins/ExElectron/dsh-gov-portal
  • GitHub 仓库:https://github.com/ExElectron/dsh-gov-portal
羽毛球分组比赛记分
小程序二维码

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

小夜