← Back to home@zhouzhencheng07

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
GitHub repo

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), 与面板写同一处——别处写进来的条目与计时一样进面板,两边都不覆盖对方的改动
  • 对话小窗(本组件行开关 = 总开关):屏幕边缘常驻一枚把手,可贴左或贴右、纵向停在哪都行(拖到哪边就贴哪边,刷新后还在原处),点开是一扇浮窗对话——内核是官方对话工厂的 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-ai providers), 插件不做任何 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