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 页
则直达知识库编辑签(所见即所得)
- 知识库 · 日程(一个组件行;行开关 = 总开关,关掉即目录索引、两张 dock 签、
左下角形态钮与快捷键命令一起退场)
- 知识库(左下角形态钮 / 默认 Ctrl+Alt+/):默认地址开箱即用(数据目录下
dsh-kit\vault,可在本行配置页改绝对路径)——左栏一行式搜索 + 目录树选页,右栏「知识库」
签里每页一个文档签(可多开、✕ 单关),[[双链]] 页内跳转([[页#标题]] 落到对应
小节)+ 阅读条「目录/反链」;搜索一次搜两侧(笔记全文 + 笔记目录 + 库根 library/
资料库里的文件按名字匹配),资料库文件点开走官方右栏文件签(PDF 默认也不在面板里
渲染,见本行的「库内 PDF 阅读器」开关);知识集=任意笔记目录挂载库内资料
(目录行 ⋯「设为知识集」/「添加资料…」,清单存目录体内的 .refs.json),展开先出
「资料 (N)」子行;树顶「资料」段与树头「添加资料」同一归属——只看当前树根(树根自己是
知识集就算它,否则往上找最近的;回库根则整段不出现);笔记目录行 Ctrl+点击(或搜索结果
点目录)把树根换到该目录、树头 ← 回库根(只影响显示,不动设置);
目录树本身就是文件管理器:树头三枚平铺(+ 新建 /「添加资料」——树根属于知识集时
出现 / ⤓ 导入),目录行的 + 新建页面或目录(\ 开头建目录,
可含 / 多级),行 ⋯ 里重命名(页改名会按双链解析改写全库引用并回执页数)、
移动到…(撞名可选跳过/覆盖/自动加序号)、导入(浏览器选文件上传,或粘贴本机绝对
路径直拷——md 页连带把页内引用的本地图片收进 attachments/ 并改写引用,源目录之外的
引用不收、原样留着)、复制绝对
路径、删除(Windows 进回收站);资料经知识集的「添加资料…」导入(任意格式文献按内容
哈希落库去重,撞名自动加序号,资料行 ⋯ 可重命名/移除/删除);页签(一页一张右栏签)
随改名/移动/删除同步换地址或关闭;
与对话互通——聊天里的 vault 路径点击直达、树上「@」把页面/选区插进输入框(选区过长只带前 12 行 / 600 字并标「…(已截断)」,整页由引用芯片指向);
页面本体是所见即所得编辑器(TipTap 富文本,无源码/预览两态):/ 唤出两级命令菜单
(标题与正文 / 特殊块 / 列表 / 数学公式与代码 / 图表 / 附件),选中文字
浮出行内格式条(含色板与链接),选区落在表内再浮出表格条(行列增删 / 左中右对齐 / 表头列 /
删表);菜单里双链弹选择框(页面与全库标题一次搜出,标题行直插 [[页#标题]],| 后写别名)、表格弹行列对话框(默认 3×3 带表头)——格内只留文字(粘进来的标题/引用/列表/嵌套表格当场摊平成文字,行首永远是表头行;md 管道表存得下什么就显示什么)、
流程图插 mermaid 围栏(自带渲染器,点开改源码)、图片走系统文件选择器;粘贴截图与选图
同样自动压缩后按内容寻址进 attachments/ 并插入;Tab 在列表里升降级(表格跳格、代码块
插两空格,其余吃掉不把焦点带出编辑器),Ctrl+Enter 从引用块跳到块外正文;页内相对链接指向库内 md 按页打开、指向文献/图片交给官方文件右栏;页条给撤销/重做、
未保存脏点与 sticky 阅读条「目录/反链」;保存 2s 防抖自动落盘(Ctrl+S 立即存、切签/卸载
保底),同一页的多次保存串行排队(并发写会撞同一版 mtime,报出自己造成的假冲突),
走 mtime CAS——盘上被 agent 或外部编辑器改过就暂停自动保存并出冲突条,由人裁决
「用我的覆盖盘上 / 读盘上的」(插件不静默覆盖、也不碰 git);盘上无本地改动时的外部修改
仍自动静默重读;插件不建骨架目录、不碰 git
- 库内 PDF 阅读器(本组件行配置页的开关,默认关):打开后资料库里的 PDF 开成知识库
页签而不是官方文件签——自带页码框跳转、记住上次读到哪一页(刷新、切会话、关掉
再开都还在),且不受官方文件预览的整文件字节上限约束。只有适宽一档:页宽跟着
右栏宽度走(拖分栏等于换字号),不做缩放档;拖分栏时页码不动、光标停住的那一页也
不动,页间距与页面边缘都留白不带框。文字可选中复制
- 对照阅读:页内双链 / 反链 / 相对链接点开优先开在右栏的另一格,出发那页原地不动——
拿两格对着读同一篇文献;树上单击与搜索命中仍在当前格打开
- 首页(右栏第三张签,面板工具条
⌂ 进入):知识集段(前 8 条:书图标 + 名字 +
「资料 N · 题目 已掌握/总」+ 在学 / 今日数 + 行内「学习计划」(开这一集的学习总览)与「测验」两键;超过 8 条给「全部知识集 ›」的签内全量视图)
与最近更新段(全库按 mtime 倒序前 8,右端标所属目录)。点知识集行 = 左栏树换根到它
(左栏没在知识库形态时也给个提示),点页行 = 开页
- 测验(数据与桌面端同一份
.quiz):页条「测验」钮(徽标=已掌握 / 题数)与树行 ⋯
「测验」(页 = 单页,知识集行 = 递归范围,普通文件夹不给入口);浮层里勾页面 / 掌握状态 / 题型 / 数量 → 逐题作答即时
判题 → 小结,页面入口另有「编辑题目」(增删改全量写回,可保留掌握进度)。掌握度按连续答对
≥ 阈值记,阈值存库根 .quiz-state/settings.json(面板可改)
- 学习 / 复习(数据与桌面端同一份
.study,一页一条记录):页条右端固定簇(左→右)
@ · 学习 · 测验 · 反链 · 目录;「学习」钮按状态变成「复习 · 今天 / N 天后 / 逾期 N 天」或「已完成」——
首次学习排明天第一次复习;学习记录浮层给当前状态、下次日期、所属知识集与历史,动作是
「调整下次 / 提前复习 / 完成 / 重启 / 移出学习」(间隔档位 1/2/4/7/15/30/60/120 天,单次可自定义 1–3650 天)。
学习记录与测验是两份独立数据:掌握度不决定复习日,复习次数也不改测验进度
- 日程(与知识库共用左下角那一枚形态钮和快捷键 Ctrl+Alt+/,开的是左侧边栏那一格,顶部 tab 条切 知识库 / 日程):
待办清单占左栏那一格(今日/近三日/全部范围档),周网格在右栏「日程」签里;表头的统计
跟着周导航走(翻到哪一周报哪一周),拉取失败会挂提示而不是继续显示旧数;表头下的全天带放
「只到日的待办」,做成一条待办轨:每天只列一条(未完成优先、已完成沉底),行首小方框直接勾完成
(复习待办勾了照旧推进复习记录);其余折成一行浅色的「+N」,点开当天全部待办(清单里同样能勾、点条目
开条目浮层);没有待办的日子悬停出「+ 待办」,点了给那天新建;跨周的堆在周一列并在提示里写明原截止日。
块颜色只表达状态(未到橙/进行中绿/已过蓝/逾期红);面板里就能改:清单行可勾完成、点标题
改条目(含重复规则与地点/备注),网格块点开即改(事件块改条目、计时段块改那一段),
顶部「新建」建待办或日程。带
studyRel 的条目是复习待办(学习页在日程里的真实待办):
标题下第二行给父目录,行尾有「打开页面」,勾选即完成本次复习(推进记录、建下一条待办并归档旧条,
归档条截止改到实际完成日);完成提示里带「调整下次」「结束学习」两个快捷动作——结束学习 = 不再安排
复习,记录保留、可重启;新排的那条待办直接删掉,不会记成又完成一次。点标题开只读视图——改日期或类型会让记录与待办
各存一套真源;启动时自动补齐在学页的复习待办。
计时是全局一只表:侧栏日程 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 搬进池会包成同名目录;
池组只列还没挂到本工作区的,已挂的那条在「工作区」组里、行上给「卸载」;实体技能排在上面、
挂载链接排在下面;池技能可编成组合(如 word/excel/ppt 编成「办公」,清单存插件数据)
整组挂载/卸载——批量按钮按状态翻转(挂满只有「卸载全部」,没挂满只有「挂载全部」并只补齐缺的那些),
一个技能只属于一个组合——归属只在「技能组合」里改:编辑器里点选成员,选中已在别组的即从原组摘出来;
组合行还标「已挂载 x/y」(被单独卸载一个也看得出来));
技能自带的仓库与历史归技能自己(插件不动池里的 git),每个技能行
一枚「在应用里打开」把这一份交给本机应用——看历史、写提交、回滚都在那儿做
- 手机访问(设置面板新页;本组件行开关 = 总开关,关掉即网关与页面整体退场):
手机扫码连上本机 dsh web——令牌鉴权网关(端口可改),默认每次启动关闭;局域网与远程
双通道,HTTP/WS 全量透传;远程视图下把只能在电脑上生效的入口(在应用中打开、添加
工作区、打开配置文件)置灰并提示「请在电脑端操作」
- 网页搜索(自 dsh-free-search 并入;本组件行开关 = 总开关,关掉即回官方搜索):免 key
引擎链替换付费的
deepseek-official——专用引擎(GitHub / arXiv / StackExchange / HN,按
查询特征参与)优先,其后通用引擎 Tavily(免 key)→ Bing → Sogou 逐个故障转移;本行配置页
只有「搜索结果条数」
- 会话通知(默认开,一个开关管全部提醒):回合收尾、上下文压缩完成、或 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)、技能池、知识库
(/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 端点 + 文件树面板;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 都不带这两个库),路由按用它的组件行注册:关掉某一行 = 它那份
静态资源一起没有
环境要求
- dsh ≥ 0.2.0-rc.2
- Node.js ≥ 22(dsh 自身要求)
- 零 dependencies 声明;宿主半边 TS 源码 + 预构建
dist,浏览器半边零构建
许可证
MIT