Back to marketplace

dsh-webui

Agent & Workflow

statem-li/dsh-webui

A comprehensive DeepSeek Harness plugin suite enhancing sessions with view tiles, message navigation, rewind, tool aggregation, Markdown rendering, web search, memory, usage dashboard, skills management, file browser, provider settings, AI browser, image generation, email verification, network proxy, sounds, and more.

  • deepseek-harness
  • dsh-plugin
GitHub Stars
10GitHub
Views
0DSH Plugin Hub
Forks
0GitHub
Open issues
0GitHub Issues
Manifest version
0.5.1@dsh-external/dsh-webui
Latest push
Aug 23, 2026GitHub
License
NOASSERTIONJavaScript
Plugin type
Host + ClientRuns in both Host and Web Client

README

View source

dsh-webui — DeepSeek Harness 会话增强全家桶

一个插件融合视图切换、消息导航、技能管理、供应商管理、辅助视觉、生图/生视频、记忆、AI 浏览器、文件浏览器、Markdown 渲染与图表、工具聚合、用量统计、网页搜索、自动化、PlanWeave 计划项目、提示音、壳管理更新、网络代理、对话退回、消息截图、中文思考等能力。纯插件实现,不改动 DSH 源码。

一句话安装(DSH)

dsh plugin --profile web add github:statem-li/dsh-webui

重启 DeepSeek Harness 即可。

本包在 package.json 声明了 dsh.bundle.patch(DSH rc.2 起的 bundle 契约),dsh plugin add 安装完成后 reconcile 会自动把它加入 profile 的 dsh.profile.bundles 层,挂载声明由包内 cordis.patch.yml 自带——无需再手动往 ~/.dsh/profiles/web/cordis.patch.yml 追加 insert。若你从旧版本升级且之前手动追加过同 id 条目,按 last-write-wins 合并,删除或保留均无害;已安装用户执行一次 dsh plugin update 即会自动激活。

注:webui 接管了技能 slash 源(/ 菜单),安装后需在 ~/.dsh/profiles/web/cordis.patch.yml 禁用内核 ui-skill 插件以避免同名源冲突:

- id: ui-skill
  name: "@deepseek-ai/dsh-client-ui-skill"
  disabled: true

按需启停功能模块

dsh-webui 是全家桶,但每个功能模块都可以单独关闭——不需要的功能不装配(host 不注册对应工具 / provider / HTTP API,client 不注册对应 UI 槽位),界面更干净、加载更轻。

配置方法(二选一,改完重启 DSH 生效):

  1. 编辑 ~/.dsh/profiles/web/settings.yaml,加 webui-modules 命名空间,把想关的模块显式写为 false(没写的模块全部保持启用,升级新增模块时老配置自动兼容):
webui-modules:
  browser: false      # 不需要 AI 浏览器
  automation: false   # 不需要自动化
  planweave: false    # 不需要 PlanWeave 计划项目
  peakValley: false   # 不需要峰谷时刻卡片
  1. 调 HTTP API(适合脚本批量开关,部分覆盖合并写入):
curl -X POST http://127.0.0.1:3080/api/webui-modules \
  -H "content-type: application/json" \
  -d '{"modules": {"browser": false, "automation": false}}'

生效机制:host 半身在插件加载时一次性装配,改动后需重启 DSH;client 半身启动时同步读本地缓存立即裁剪,并后台拉取 /api/webui-modules 校正缓存——重启后刷新页面,两端即按同一份配置生效。

模块 key 一览false = 关闭;缺省全部启用):

分组key控制的功能
对话体验messageWidth消息气泡宽度设置
doneSound回合结束提示音 + 完成卡片
donePill对话完成胶囊 + 记录面板
approvalNotify审批等待 toast 提醒
ctrlEnter输入框 Ctrl+Enter 换行
sessionMotion会话切换柔和过渡
sessionPin会话置顶 / 归档 / 右键菜单
rewind对话退回
screenshot单条消息截图 / 会话长图
promptOptimize提示词优化图标
zhThinking中文思考开关
peakValleyDeepSeek 峰谷时刻卡片
chatStats会话统计条
toolSummary工具调用聚合 + 活动抽屉
模型与供应商reasoningSyncwebui_sync_reasoning 推理等级补全工具
modelSeats模型座位接管 + 推理等级弹出
providerHub供应商管理设置页
vision辅助视觉 + 生图 + 生视频 + 生图画廊
webSearchAnySearch 网页搜索
mail邮箱验证码
技能skills技能 slash 两级导航源 + 技能开关路由
AI 浏览器browser浏览器工具 + dock UI + 设置开关
自动化与计划automation自动化任务 + 真实执行引擎
planweavePlanWeave 计划项目
记忆memory记忆引擎 + Memory Dream
用量与统计usage用量工作台
文件与工作区fileExplorer文件浏览器
dirPicker工作区目录选择器
外观与系统appearance玻璃质感主题
sidebarFloat悬浮侧边栏
updater壳管理更新
proxy网络代理

注意事项

  • 关闭 skills 后会失去内置 slash 两级导航源,此时应删除 cordis.patch.yml 里对内核 ui-skill 的 disabled: true 以恢复官方 / 菜单。
  • 关闭 providerHub 将失去供应商/视觉/生图/生视频模型的配置入口(已保存的配置仍生效)。
  • 核心能力不提供开关、始终启用:视图图块与消息导航、markstream 基础 Markdown 渲染、供应商标签、移动端响应式。

功能总览

对话体验

功能说明
右上角视图图块 + 消息导航对话/轨迹切换图块、消息徽标/弹窗列表、右侧消息横条、弹窗内手动加载更早消息
会话置顶侧边栏会话右键菜单:置顶(置顶组排最前)/ 归档按钮 / 重命名;localStorage 持久化,跨标签页实时同步
对话退回每条用户消息加退回按钮,一键回退工作区文件到该消息发送前 + 原地回退上下文(fork 到该消息之前 turn 边界 → 归档原会话 → 打开子会话)
单条消息截图assistant 消息 actions 行截图按钮(渲染会话长图 / 单条樱花主题截图);host 端 markdown-it + Shiki 渲染管线,支持代码高亮 / emoji 短码 / 任务清单 / 表格对齐 / 图片白名单,浅色 / 深色 / 玻璃 / 玻璃深色四主题
对话完成胶囊顶部悬浮胶囊(常驻、可拖拽、位置持久化)——完成提醒 + 点击直达最新会话 + 运行中任务实时时长;悬停滑出记录面板;健康提醒徽章(时段可配);空闲轮播开心话术与 AI 小知识;内置文件浏览器入口;胶囊大小 / 字体 / 显隐可调
提示音 + 完成卡片回合结束提示音 + 对话完成卡片
审批提醒有工具调用等待审批时顶部弹 toast
会话切换柔和过渡内容区淡入上浮、面包屑轻淡入、侧边栏高亮 FLIP 式滑动;prefers-reduced-motion 自动禁用
消息气泡宽度「发送对话宽度」拖动条(px/% 单位,settings.yaml 持久化),只作用于本人消息气泡
输入框增强Ctrl+Enter 换行;移动端响应式
提示词优化对话框「自动优化提示词」图标,用当前选中模型流式优化草稿(loopback-only API,仅本地可调)
中文思考开关设置页「中文思考」

模型与供应商

功能说明
供应商管理设置 →「供应商」页,统一管理对话供应商(任意 OpenAI 兼容)/ 辅助视觉 / 生图 / 生视频模型
辅助视觉 + 生图vision_describe(图片→文本)、generate_image(提示词→图片)、非多模态贴图降级、浏览器截图兜底
生视频generate_video 工具(遵循 OpenAI /videos 规范:创建异步任务 → 轮询至完成返回 url);设置页两级下拉选供应商/模型(标注「支持生视频」的模型)
生图画廊generate_image 结果并排缩略图 + Lightbox + 保存
模型选择增强接管模型座位(纯模型弹出)+ 推理等级滑动式弹出;供应商标签显示当前模型
上下文窗口/最大输出预设模型上下文窗口 / 最大输出 token 改为预设下拉选择(倒序档位,支持手输)
推理等级自动补全webui_sync_reasoning 工具按供应商模板补全 reasoningEfforts
网页搜索AnySearch provider + 设置卡
邮箱验证码mail_get_code 工具 + 设置卡(QQ 邮箱验证码提取,支持字母数字混合)

技能

功能说明
slash 两级导航替代内核 ui-skill 平铺:输入 / 先展示技能集合(bundle),选中集合后再选技能;支持集合名过滤、散装技能入口、/name chip 装饰
技能开关技能面板中每个技能可单独启用/禁用,整包一键开关;直接改写 SKILL.md frontmatter,模型目录、skill 工具、/name 手势同步生效
技能管理面板bundle 分组、上传安装、删除

Markdown 渲染

markstream 流式渲染 + Shiki 代码高亮 + 悬浮目录(TOC)/ 标题锚点 + 提示块(admonition)/ 脚注 / 定义列表 / 任务列表 / 数学公式(KaTeX)+ 思考 chip。

  • 提示块:::note / :::tip / :::warning / :::danger / :::error 围栏容器,支持自定义标题(:::warning 注意)。
  • 目录 / 锚点:正文标题 ≥ 3 个时自动在顶部生成可折叠目录,点击平滑滚动。

AI 浏览器(壳内多标签,零独立浏览器进程)

浏览器不再是独立的 Edge/Chrome 进程,而是 DeepSeek Harness 壳子内部的多标签 WebContentsView——桌面永远不会弹出浏览器窗口,任务栏无图标,AI 操作的页面实时内嵌在对话面板右侧滑出的抽屉里(原生渲染 + 鼠标键盘直接命中)。

架构

  • 壳子(main.js)内置视图宿主:每会话一个 persist: 分区(登录态隔离),每标签一个 WebContentsView
  • 控制通道 http://127.0.0.1:3081(仅回环):/view/create-tab|attach|detach|close-tab|close
  • CDP 调试端口动态协商:壳子启动时从 9224 起挑空闲端口并写入 D:\AI\Dsh\.shell-cdp-port,插件启动后读取该文件连接(不要写死端口——异常退出的壳子会留下僵尸监听)
  • 标签 ↔ CDP target 映射:创建时用 URL hash 匹配,再用 window.name 持久标记——服务/壳子重启后视图存活可复用
  • 抽屉打开 = 视图挂载到画面区(激活标签关闭 JS 节流,全速);抽屉关闭 = 视图卸下(visible=false + 恢复节流,空闲 CPU 趋近 0)

工具速查

工具用途
browser_batch一次调用按顺序执行最多 10 个动作(click/type/select/hover/press/scroll/navigate),只返回最终快照
browser_navigate / _click / _type / _select / _hover / _press / _scroll单步操作(作用于当前激活标签)
browser_back / _forward历史导航
browser_snapshot文本 ref 树(元素以 [ref] 定位)
browser_see / browser_screenshot截图 + 视觉描述(自动降级 renderer 截图,detached 视图不卡死)
browser_evaluate页面执行 JS(处理 ref 定位不到的场景)
browser_status / browser_stop状态查询 / 关闭全部标签

效率技巧:连续操作用 browser_batch

逐个调用 browser_click / browser_type 时,每个动作都要一整轮 LLM 推理(2040 秒),注册表单这类 1020 步的任务会拖到 6 分钟以上。改用 browser_batch 把整段流程压成一次调用:

{"action": "browser_batch", "actions": [
  {"action": "click", "ref": 12},
  {"action": "type", "ref": 15, "text": "me@example.com"},
  {"action": "type", "ref": 18, "text": "密码123", "pressEnter": false},
  {"action": "click", "ref": 22},
  {"action": "click", "ref": 30}
]}

任一步失败立即中止并报「第 N 步失败 + 原因」;全部成功返回最终快照。给 AI 的指令里写一句「用 browser_batch 批量完成」即可触发。

元素选取

dock 工具条「选取元素」按钮进入选取模式,点击预览画面任意元素,自动采集唯一 CSS 选择器 + 元素摘要并回填对话框草稿(再点一次或 Esc 退出)。详见 docs/ELEMENT-PICKER.md

抽屉 UI

  • 标题右侧为标签页栏:切换 / 悬停关闭 / + 新建
  • 第二行左侧是快捷站点(点一下新开标签打开,+ 可添加/删除,全局共享持久化);右侧是当前网址 + 一键复制
  • 底部悬浮条显示最新一条 AI 操作(一句话),点击展开完整时间线
  • 左侧留白区点击或 Esc 收起抽屉;收起后浏览器视图卸下、不占任何资源

自动化

左侧导航「新会话」下方菜单项,点开从菜单右侧滑出 TAB 式卡片(窄屏回退底部 sheet),卡片宽高随 TAB 平滑过渡。

  • 执行任务:按分类管理任务;居中模态框新建/编辑任务,可选模型与推理强度(数据来自 DSH 模型目录),为每个任务配置执行计划(间隔/每天/每周/每月/单次五种模式)+ 执行步骤(有序动作序列,每步可设失败分支「停止/跳过」、保存到文件)+ 失败自动重试次数;任务行一键「立即执行」
  • 真实执行引擎(host 半身 /api/webui-automation):定时条件满足或手动触发时,host 用 ctx.llm 真实调用模型逐步执行——按每步失败分支(stop/skip)与重试次数推进,可把输出写入工作区文件,最后返回结构化结果(每步成功/失败/跳过 + 输出摘要 + 文件清单);同任务同日去重;文件下载 / 打开所在文件夹接口路径严格限制在工作区内
  • 执行日志:大卡片按日期倒序展示每次执行记录,支持按任务/状态筛选、展开查看单次执行的步骤结果与生成的文件清单(文件名/完整路径/大小 + 下载/复制路径/打开所在文件夹),失败可重跑
  • 数据 localStorage 持久化(v1/v2/v3 配置自动迁移);240ms 淡入淡出 + 内容错落渐显

PlanWeave 计划项目

PlanWeave 的「计划 → 任务图 → 认领/执行/评审/反馈」循环接入 DSH,作为本地任务图跟踪实现/评审进度:

工具用途
planweave_init初始化(或打开)一个计划项目,首次调用创建空计划,同名项目可复用
planweave_status查看执行状态:任务/块状态、当前可认领项、反馈与计数
planweave_run按就绪顺序认领并执行实现/评审块、处理评审反馈,最多循环若干步
  • settings 命名空间 planweave:默认项目名 + 执行模型 + 每轮步数
  • HTTP API:GET /api/planweave/status(loopback,供 client 面板轮询)
  • 核心引擎复用 @planweave-ai/runtime;执行器走 ctx.llm

记忆

  • 记忆引擎:侧边栏记忆面板 + 会话记忆注入 + 注入开关 + 手动写入长期记忆
  • Memory Dream 记忆巩固:每天(或手动触发)用 LLM 对记忆做语义化整理——合并近重复/强相关条目、精炼重写、删除过时/低价值、提升长期;与每日规则化衰减/折叠(处理「分数」)正交叠加,本引擎处理「语义」
  • 安全设计:输入排除 pinned 条目(保护用户明确标记的内容),apply 时按 id 锚定防误删;整理前写入 revisions 快照支持一键回滚;LLM 失败/超时/解析失败一律空结果,绝不阻塞每日编译

用量与统计

功能说明
用量工作台「趋势」tab:概要统计 + 面积图 + 环图 + 模型/供应商消耗排行榜;时间范围预设选择器(今日/昨日/近7天/近30天/本月/上月/今年/全部/自定义),粒度自适应(≤31 天按日、≤120 天按周、更长按月)
热力图用量热力分布
账户/订阅账户余额与订阅状态展示
对话统计条会话流下方统计条(缓存命中率精确到小数点后两位)
DeepSeek 峰谷时刻卡片侧边栏 footer 首行显示峰时/谷时状态与切换倒计时(工作日 09:00–12:00 / 14:00–18:00 计峰;周末全天空闲价,2026-08-23 起新规,生效前按旧规则每日计峰)

文件与工作区

功能说明
文件浏览器右上角入口 + 树形目录 + 双击编辑(CodeMirror 语法高亮)+ 保存
工作区目录选择器自写弹窗(添加工作区时选文件夹,shadow 官方 native 选择器)

外观与系统

功能说明
玻璃质感主题「通用」分区开关 + 不透明度滑块(40–95%,步进 5)——半透明毛玻璃材质(背景模糊 + 高光细边 + 柔和投影),与官方浅色/深色任意组合,拖动即时预览、松手落盘(settings.yaml + localStorage 双通道持久化)
悬浮侧边栏「固定侧边栏」(默认开启=原生固定;关闭=悬浮模式,左侧常驻热区悬停展开、移出自动折叠,overlay 覆盖不挤压主内容;即时切换 + 持久化)
壳管理更新宽度/自启/版本/一键更新
网络代理代理设置行
工具调用聚合工具 call shadow + 活动抽屉

构建(Windows)

node D:\AI\deepseek-harness\node_modules\tsdown\dist\run.mjs   # host + client bundle

Linux/macOS:DSH_CHECKOUT=<checkout> bash scripts/build.sh

结构

src/
├── index.ts                  — host 半身入口:各能力模块装配(按模块开关裁剪)
├── modules.ts                — 功能模块 key 清单与开关解析(host / client 共用)
├── modules-host.ts           — 模块开关 host(settings 命名空间 webui-modules + GET/POST /api/webui-modules)
├── planweave/                — PlanWeave 计划项目(engine / executor / host / workspace)
├── automation-host.ts        — 自动化执行引擎 host(/api/webui-automation)
├── markdown-html.ts          — 截图用 Markdown 渲染管线(markdown-it + shiki,四主题)
├── memory/                   — 记忆引擎(engine/consolidate.ts 为 Memory Dream 语义整理)
├── vision-helper.ts          — 辅助视觉 + 生图 + 生视频能力与 HTTP 接口
├── skill-toggles.ts          — 技能开关路由(读写 SKILL.md frontmatter)
├── usage-host.ts             — 用量统计 + 技能管理 host
├── sidebar-float.ts          — 悬浮侧边栏设置
├── message-width.ts          — 消息气泡宽度设置
├── prompt-optimize.ts        — 提示词优化 host 路由(loopback-only)
├── appearance.ts             — 玻璃质感设置(/api/webui-appearance)
├── done-pill.ts              — 对话完成胶囊 host
├── rewind.ts / screenshot.ts — 对话退回 / 消息截图 host
├── workspace-dir-picker.ts   — 工作区目录选择器
├── browser/                  — AI 浏览器 host(壳内多标签对接 + CDP 原语)
└── client/
    ├── index.ts              — client 入口:注册各 UI 槽位(按模块开关裁剪)
    ├── modules.ts            — 模块开关 client(localStorage 同步读 + /api/webui-modules 校正)
    ├── skill-source/         — 技能 slash 两级导航源 + 技能工具行
    ├── session-pin/          — 会话置顶 / 归档 / 右键菜单 / 重命名
    ├── provider-hub/         — 供应商设置页(chat / vision / image / video)
    ├── automation/           — 自动化面板(scheduler / TaskEditorModal / 执行日志)
    ├── markdown/             — markstream 渲染(Shiki 高亮 / stub 替换层)
    ├── memory/ browser/ file-explorer/ image-gallery/ tool-summary/
    ├── usage/                — 用量工作台(TrendTab / RangePicker / Heatmap / AreaChart)
    ├── done-pill.tsx         — 完成胶囊 client
    ├── glass.ts / glass-row.tsx — 玻璃质感 client
    ├── session-motion.ts     — 会话切换柔和过渡
    ├── sidebar-float*.ts(x)  — 悬浮侧边栏 client
    ├── shell-titlebar.ts     — 壳子窗口控制按钮共存样式
    └── styles.ts             — 注入样式
docs/
└── ELEMENT-PICKER.md         — 浏览器元素选取设计文档

许可

BSD-3-Clause

Comments

0
Newest first