dsh-kit
Page capability kit for DeepSeek Harness (dsh): terminal dock, file tree, source control, skills manager, phone access, background jobs and keyless web search in the browser UI
- Stars
- 5
- Language
- JavaScript
- Created
- Aug 13, 2026
- Updated
- Oct 5, 2026
Introduction
English | 中文
dsh-kit
面向 DeepSeek Harness (dsh) 的页面能力套件插件:给 DSH 的浏览器界面加装可选能力, 每个能力独立、互不依赖;全部关闭时 DSH 保持原版。
功能
工作台住在官方右侧边栏(官方 sidebar.right 服务),形态与官方一致:一个内容一张
签——一个 diff、一个知识库页、一个浏览器页各占一张 dock 签,切换器就是官方签条(日程
仍是单张功能签)。每个能力都是插件页里可单独
开关的组件行——行关掉 = 该能力的端点、agent 工具与界面入口一起退场,全部关掉即
DSH 原版形态;插件页里本插件十行组件 + 列表最末一行载体行(载体行不伺服任何能力,只是浏览器半边的挂载点——宿主把包的客户端半边挂在「行名 = 包名」的那一行上,删掉它页面能力会整片消失,所以它排在功能行之后留在列表里,别关)。工作区文件的查看
走官方文件预览(kit 在其头部补一枚「下载到本机」);工作区文件不做插件内编辑——
编辑走 VS Code 或让 agent 改。
索引类视图(文件树、源代码管理、知识库 · 日程)共用左侧边栏一格,对话列常驻。
- 终端(工具行开关 / 默认 Ctrl+Alt+`):底部多标签终端坞,绑定开启时所在会话(宽度跟随 对话列),隐藏时后台 shell 继续运行;引擎为官方 webTerminals 服务(PTY 归宿主: 系统用户权限、刷新页面进程不断、shell 选择)
- 文件树(工具行开关 / 默认 Ctrl+Alt+,):以会话工作区为根浏览、新建/重命名/删除 (回收站)/复制路径 / @ 到对话;点文件交官方右栏文件预览打开,库内的 md 页 则直达知识库编辑签(所见即所得)
- 源代码管理(工具行开关 / 默认 Ctrl+Alt+.):页内 git 工作台——暂存/取消暂存/ 放弃/提交、点文件在右栏「差异」签看逐行对比(只显示改动附近,带行号,可切双栏, 头部一键在侧边栏打开整个文件)、分支切换与新建删除、 ↑↓ 同步(先拉后推)、提交图谱(只读浏览,悬停看作者/时间/说明); 非 git 目录可一键初始化
- 知识库 · 日程(一个组件行;行开关 = 总开关,关掉即目录索引、两张 dock 签、
左栏底部入口钮与快捷键命令一起退场)
- 知识库(左栏底部入口钮 / 默认 Ctrl+Alt+/):默认地址开箱即用(数据目录下
dsh-kit\vault,可在本行配置页改绝对路径)——左栏一行式搜索 + 目录树选页,右栏「知识库」 签里每页一个文档签(可多开、✕ 单关),[[双链]]页内跳转([[页#标题]]落到对应 小节)+ 阅读条「目录/反链」;搜索一次搜两侧(笔记全文 + 笔记目录 + 库根library/资料库里的文件与目录按名字匹配),资料库文件点开走官方右栏文件签(PDF 默认也不在面板里 渲染,见本行的「库内 PDF 阅读器」开关);笔记目录行 Ctrl+点击(或搜索结果点目录)把树根换到该目录、树头 ← 回库根 (只影响显示,不动设置),资料库那一行任何根下都在、只浏览不换根; 目录树本身就是文件管理器:树头/目录行的+新建页面或目录(\开头建目录, 可含/多级),行⋯里重命名(页改名会按双链解析改写全库引用并回执页数)、 移动到…(撞名可选跳过/覆盖/自动加序号)、导入(浏览器选文件上传,或粘贴本机绝对 路径直拷——md 页连带把页内引用的本地图片收进attachments/并改写引用)、复制绝对 路径、删除(Windows 进回收站);资料库那一支同菜单,只是导的是任意格式文献、撞名一律 自动加序号;页签(一页一张右栏签)随改名/移动/删除同步换地址或关闭; 与对话互通——聊天里的 vault 路径点击直达、树上「@」把页面/选区插进输入框; 页面本体是所见即所得编辑器(TipTap 富文本,无源码/预览两态):/唤出两级命令菜单 (标题与正文 / 特殊块 / 列表 / 数学公式与代码 / 图表 / 附件),选中文字 浮出行内格式条(含色板与链接),选区落在表内再浮出表格条(行列增删 / 左中右对齐 / 表头列 / 删表);菜单里双链弹页面选择框挑页(只列已有页)、表格弹行列对话框(默认 3×3 带表头)、 流程图插 mermaid 围栏(自带渲染器,点开改源码)、图片走系统文件选择器;粘贴截图与选图 同样自动压缩后按内容寻址进attachments/并插入;Tab在列表里升降级(表格跳格、代码块 插两空格,其余吃掉不把焦点带出编辑器),Ctrl+Enter从引用块跳到块外正文;页内相对链接指向库内 md 按页打开、指向文献/图片交给官方文件右栏;页条给撤销/重做、 未保存脏点与 sticky 阅读条「目录/反链」;保存 2s 防抖自动落盘(Ctrl+S立即存、切签/卸载 保底),同一页的多次保存串行排队(并发写会撞同一版 mtime,报出自己造成的假冲突), 走 mtime CAS——盘上被 agent 或外部编辑器改过就暂停自动保存并出冲突条,由人裁决 「用我的覆盖盘上 / 读盘上的」(插件不静默覆盖、也不碰 git);盘上无本地改动时的外部修改 仍自动静默重读;插件不建骨架目录、不碰 git - 库内 PDF 阅读器(本组件行配置页的开关,默认关):打开后资料库里的 PDF 开成知识库 页签而不是官方文件签——自带页码框跳转、记住上次读到哪一页(刷新、切会话、关掉 再开都还在),且不受官方文件预览的整文件字节上限约束。只有适宽一档:页宽跟着 右栏宽度走(拖分栏等于换字号),不做缩放档;拖分栏时页码不动、光标停住的那一页也 不动,页间距与页面边缘都留白不带框。文字可选中复制
- 对照阅读:页内双链 / 反链 / 相对链接点开优先开在右栏的另一格,出发那页原地不动—— 拿两格对着读同一篇文献;树上单击与搜索命中仍在当前格打开
- 日程(与知识库共用左栏底部那一枚入口钮和快捷键 Ctrl+Alt+/,开的是左侧边栏那一格,顶部 tab 条切 知识库 / 日程):
待办清单占左栏那一格(近三日/近一周/全部范围档),周网格在右栏「日程」签里;表头的统计
跟着周导航走(翻到哪一周报哪一周),拉取失败会挂提示而不是继续显示旧数;表头下的全天带放
「只到日的待办」,同一天多条逐条堆叠、跨周的堆在周一列并在提示里写明原截止日。
块颜色只表达状态(未到橙/进行中绿/已过蓝/逾期红);面板里就能改:清单行可勾完成、点标题
改条目(含重复规则与地点/备注),网格块点开即改(事件块改条目、计时段块改那一段),
顶部「新建」建待办或日程。
计时是全局一只表:侧栏日程 tab 顶部「开始计时」可挂一条未完成待办或填标题起独立计时,
右下角悬浮球走秒、展开后停表(面板全关也在);停了的那段上网格、进统计。
agent 侧没有日程工具:编辑走技能池的技能,按同一份结构直接读写
$DSH_HOME/dsh-kit/schedule/(一条一文件:events/+entries/+timer.json), 与面板写同一处——别处写进来的条目与计时一样进面板,两边都不覆盖对方的改动
- 知识库(左栏底部入口钮 / 默认 Ctrl+Alt+/):默认地址开箱即用(数据目录下
- 对话小窗(本组件行开关 = 总开关):屏幕边缘常驻一枚把手,可贴左或贴右、纵向停在哪都行(拖到哪边就贴哪边,刷新后还在原处),点开是一扇浮窗对话——内核是官方对话工厂的 embedded 变体(消息流、工具调用、附件都走官方),小窗自己保留一条会话,与主面各看各的(两边永不同一条:宿主一条会话只有一个输入框,同一条会互相抢);标题条的 ⇄ 把两边互换——主面接手小窗这条、小窗接手主面那条。快捷键 Ctrl+Alt+; 开关小窗(收起态按它展开,展开时按它收起)。本行配置页两个开关:记不记住浮窗的位置与尺寸、记不记住上次用的工作区与会话
- 内置浏览器(右栏签,一个页一张签、签名即页标题,切换器就是官方签条;本组件行开关 = 总开关,关掉即工具与面板整体退场、
只剩官方浏览器入口):agent 以 7 个
browser_*工具驱动系统 Edge (vendored playwright-core,专用持久 profile)——快照→动作→断言的 GUI 测试循环、 截图(多模态模型直看,否则落盘);面板显示 agent 浏览器的实时画面 (画面按面板尺寸取像素密度,帧率封顶 30fps,拖动面板即时跟上), 点击/滚轮/键入直接作用于这一签对应的页面(人机共驾);工具栏「+」新开一页即新开一张签,关签即关页;agent 每次导航自动把那一页的签拽到眼前 - 技能管理(设置面板新页):工作区/用户级/技能池三组展示,支持移动、删除、
禁用/启用;被同名技能覆盖者打虚线徽标;技能只有移动、没有复制(副本与本体分叉);
技能池里的技能可挂载到工作区共用(池那一份是本体,平铺
.md搬进池会包成同名目录, 行上显示被几个工作区挂着),并带版本记录:写下这次改了什么记一版、点开某次提交看它 改了什么、回滚到某一版 - 手机访问(设置面板新页;本组件行开关 = 总开关,关掉即网关与页面整体退场): 手机扫码连上本机 dsh web——令牌鉴权网关(端口可改),默认每次启动关闭;局域网与远程 双通道,HTTP/WS 全量透传;远程视图下把只能在电脑上生效的入口(在应用中打开、添加 工作区、打开配置文件)置灰并提示「请在电脑端操作」
- 网页搜索(自 dsh-free-search 并入;本组件行开关 = 总开关,关掉即回官方搜索):免 key
引擎链替换付费的
deepseek-official——专用引擎(GitHub / arXiv / StackExchange / HN,按 查询特征参与)优先,其后通用引擎 Tavily(免 key)→ Bing → Sogou 逐个故障转移;本行配置页 只有「搜索结果条数」 - 输出复读守卫(默认开):模型输出若在结尾连续重复同一句话、或连续几句话绕圈——
同一句连说 3 遍先向模型注入一条换思路的提醒(并在当前会话提示),继续重复到 5 遍才
自动停止该回合(档位可在本组件配置页改)。判据按句子而不是字符:长但不重复的正常输出、结构相同但内容不同的
列表 / 表格 / 代码都不会命中,「说三遍」这类正常强调只提示不停止。对所有会话生效,
关掉网页也在跑(判定在宿主进程里,不依赖浏览器页面)。管的是输出侧复读(文本与
思考),工具调用循环由官方的
repeat-tool-reminder负责(它只提醒不停止) - 会话通知(默认开,一个开关管全部提醒):回合收尾、上下文压缩完成、或 agent 提问 / 等你批准工具调用 /
提交计划待批时弹桌面通知(浏览器 Notification API,点击通知回到对应会话)——页面切到
后台标签/别的窗口、或事件发生在你没打开的那个会话时提醒;人正看着该会话时不打扰。
回合收尾按官方
turn/end的结束原因分成完成 / 出错 / 已中止 / 卡住 / 撞上输出上限 / 检测到死循环已停止六种文案,不再一律报「完成」;压缩通知覆盖打开过的会话 (官方只为当前会话拉历史,没打开过的会话看不到它的压缩)。通知走浏览器 Notification API,未授权就不出通知(需在站点设置里允许) - 余额与用量(默认开,可在本组件行的配置页关):composer 下方状态带最右端显示一张芯片,
跟随当前会话选中的模型 provider——DeepSeek 出余额,OpenCode Go 出全部窗口用量
(
1% · 32% · 84%,顺序为 5 小时/周/月),超 80% / 欠费变红;DeepSeek 芯片在 高峰时段(工作日 9:00–12:00、14:00–18:00)显示红色「峰」标提示限流风险,周六日 全天、调休上班的周末与法定节假日全天(官方按空闲时段计费)不标; 点芯片在正上方弹出官方风格浮层看明细(各窗口进度、重置倒计时)并附官方用量页链接。 回合收尾即刷新,另每分钟轮询 + 手动刷新。 API key 复用 dsh 模型配置里的凭证引用(llm-pi-aiproviders), 插件不做任何 key 录入;OpenCode Go 的用量端点为非官方契约,上游改动只影响该芯片 - 快捷键:五条命令(终端 / 文件树 / 源代码管理 / 知识库 · 日程 / 对话小窗)注册进宿主「快捷键」页 (Ctrl+/)——按下即录制、冲突标红、跨设备默认值、持久化都归宿主;左右栏开合用宿主自带键 (web 左栏 Ctrl+Alt+B、右栏 Ctrl+Shift+B)。改键去官方页,插件配置页不管键位。 插件里悬停提示统一是官方气泡 (方向按官方口径:面板头/工具条朝下、底部 dock 与输入行朝上、行尾动作钮右对齐;有命令的带 当前键位,改键后跟着变),纯文本截断提示仍走原生 title
- 排查日志(无开关,始终在写):宿主半边与浏览器半边的日志合流到
<DSH_HOME>/dsh-kit/logs/kit.log(按 2MB × 5 轮转),一行一事——时间、级别、组件、 正在做的操作、消息与字段;报错那行自己就带着它发生在哪个操作里,它前面那几行就是 出错前在做什么。浏览器侧的未捕获异常与接口报错也进同一个文件(页面白屏、按钮没反应 这类只在页面侧的现象也留得下痕)。默认级别 info,环境变量DSH_KIT_LOG可调 (off/error/warn/info/debug);查日志用仓库里的pnpm logs(--err只看失败 并带上文)。 - 配置:插件页(侧栏「插件」)里需要可调参数的组件行各带自己的「配置」页——
手机访问行管对外端口、手机远程域名与网关常驻(行开关 = 总开关);
知识库 · 日程行管知识库根目录与「库内 PDF 走自带阅读器」(行开关 = 总开关);
对话小窗行管记不记住浮窗位置尺寸、记不记住上次的工作区与会话;
网页搜索行只有搜索结果条数(行开关 = 总开关,关掉即回官方搜索);
内置浏览器行管「对话链接改投内置浏览器」与「隐藏官方『浏览器』入口」(行开关 = 总开关);
用量与监视行管余额与用量芯片开关、复读提示/停止档位、桌面通知与 OpenCode Go 会话头注入;文件树 · 源代码管理行
管文件树 / 源代码管理开关与「隐藏官方『工作区文件』入口」;终端与技能两行没有配置
字段(行开关 = 唯一开关,关掉即入口消失),运行日志行同样没有配置字段(写不写日志文件就是它的行开关,级别仍走
DSH_KIT_LOG环境变量);载体行没有配置字段也不该被关(关掉 = 本插件界面整体消失);保存即写入 profile 并热生效(部分启动期门控在重启 dsh 后生效)
安装与更新
安装最新 release(推荐):
dsh plugin --profile web add "github:zhouzhencheng07/dsh-kit#semver:*"
或跟踪 main 分支最新提交:
dsh plugin --profile web add "github:zhouzhencheng07/dsh-kit"
更新到最新版:
dsh plugin --profile web update dsh-kit
本包声明了 dsh.bundle.patch,会被激活为 profile 的 bundle 层。安装/更新后重启
dsh web:工具行出现文件树/源代码管理/终端三个开关,工作台以官方右侧边栏
承载(文件 / 知识库 / 日程 / 浏览器四类 dock 签),AI 的 web_search 同时切到免费多源搜索。
宿主版本要求:dsh ≥ 0.2.0-rc.2(组件行与插件页行配置、官方 shortcuts 服务、
官方 webTerminals 都在这一版;桌面版同版本可用,面板实时画面走宿主注入的 WS 基址)。
工作原理
src/*.ts→dist/(tsc 构建产物入库):宿主半边——文件树 (/tree、/read、/raw、/fs/op、/upload、/git/*)、技能池、知识库 (/vault/*)、日程(/schedule/*)、浏览器等端点各归组件;/vendor/*静态资源也按 用它的组件行走(xterm → 终端行,二维码 → 手机访问行,TipTap / KaTeX / mermaid / pdf.js → 知识库行)client/bundle.js:浏览器半边(手写 ModuleLoader bundle,零构建)——根包只剩跨槽 共享底座(kitUi 开合状态、配置页骨架、入口座、文件预览下载钮);文件树·源代码管理、终端、 技能、用量监视、网页搜索、内置浏览器、知识库·日程、手机访问、对话小窗、运行日志十个组件的 client 半边同住本 bundle (各带module/exports隔离壳,右栏 pane 正文经sidebar.right.pane.tab提供、 配置页经plugins.row.config;终端坞引擎为官方webTerminals服务)src/core、src/files、src/chat、src/skills、src/terminal、src/monitor、src/browser、src/vault、src/phone:组件按目录分边界(0.5.3 单包组件化,组件 = patch 行而非独立包)——core宿主共享库 (同源校验、回收站删除、文本解码、dsh-tools 加载、日志);files挂 tree/ read/raw/fs-op/git 端点 + 文件树·源代码管理面板;chat只挂/dsh-kit-chat/config探针(对话内核与外壳都在 client 半边,会话/工作区全走官方服务);skills挂/dsh-kit/skills与/dsh-kit/skills/op+/dsh-kit-skills/config探针(技能池管理页);terminal挂/dsh-kit-terminal/config探针(终端入口与坞);monitor挂/dsh-kit/usage+ 用量 芯片 / 输出复读守卫 / 会话通知 + OpenCode Go 会话头按会话注入(配置页「模型请求」页签可关);browser挂 7 个browser_*工具 +/dsh-kit/browser(面板 WS)、/dsh-kit/browser/open与/dsh-kit-browser/config探针(右栏浏览器签、人机共驾、链接改投);vault挂/dsh-kit/vault/*(索引 / 搜索 / 单页 mtime / 目录级文件管理 / 正文写回 mtime CAS / 粘贴图片入库 //dsh-kit/vault/file库内 PDF 字节通道)、/dsh-kit/schedule/*(数据、统计与面板写路径)与/dsh-kit-vault/config探针(知识库·日程行;日程编辑走技能池的schedule-editing技能);phone挂/dsh-kit/phone/*(状态 / 链接 / 轮换 / 启停)与/dsh-kit-phone/config探针,并起对外网关(手机访问行)。 行经根包exports子路径(dsh-kit/files等)由cordis.patch.yml物化client/vendor/*:xterm / TipTap 富文本 / KaTeX / mermaid / qrcode / pdf.js,全部按需懒加载, 由/dsh-kit/vendor/*静态伺服(mermaid 只在页内出现流程图时下载,pdf.js 只在打开库内 PDF 时下载,宿主与 app.asar 都不带这两个库),路由按用它的组件行注册:关掉某一行 = 它那份 静态资源一起没有src/search/:网页搜索组件——web-search.ts把 web seam 的 provider 指向free-search并注册免 key 引擎链(engine-chain.ts+engines/*);组件行关掉 = 不接管 seam = base 钉的官方搜索原样生效cordis.patch.yml:十个组件行(files / chat / vault / terminal / browser / skills / phone / monitor / search / logs,行序即插件页显示顺序)insert 进 bundle 层(组件 = 本包的 exports 子路径,见dsh-kit/terminal等),末尾跟一行载体行(name: dsh-kit,浏览器半边的挂载点,不伺服任何能力,故排在功能行之后); 不 patch 任何官方行(每行 id 显式且稳定: 匿名行的随机 id 每次 profile 写入都会换 → 该行重挂 → 浏览器半边整包重载)- 宿主侧
node-pty/ws/@deepseek-ai/*不声明依赖:运行时从 profile fallback node_modules 解析(声明了 pnpm 会装出第二份实例)
环境要求
- dsh ≥ 0.2.0-rc.2
- Node.js ≥ 22(dsh 自身要求)
- 零 dependencies 声明;宿主半边 TS 源码 + 预构建
dist,浏览器半边零构建
许可证
MIT