dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
一站式管理 MCP 服务器、技能与工具——真实的在上下文状态(已加载/已截断/已挤出),并按会话开关。
一站式管理 MCP 服务器、技能(Skills)与工具(Tools):看清 DeepSeek Harness agent 此刻真正能触达什么,并随时开关——按会话或按 preset。
一个技能与 MCP 管理面板:每个技能、每个 MCP 服务器、每个系统工具,都有真实的"在不在上下文里"状态,和一个从下一步模型调用就生效的开关。

| 是什么 | DeepSeek Harness(dsh)的 web 插件:一个技能与 MCP 管理面板,列出当前会话的技能(skills)、MCP 服务器(MCP servers)与系统工具(tools)及其真实的在不在上下文状态,并能逐项开关 |
| 什么时候用 | 回答"为什么 agent 不知道这个技能";看一个加载过的技能是否挺过了剪枝/压缩;只在当前会话里关掉某个工具或 MCP 服务器;为 preset 设置默认能力集合;统计关闭后被拦截的调用次数 |
| 安装 | dsh plugin --profile web add dsh-capability-panel(然后重启 dsh) |
| 要求 | dsh web profile,dsh ≥ 0.1.2-alpha.4(更早版本可运行,但加载状态降级显示;0.1.7+ 起预设目录打开随宿主 API 演进降级);@deepseek-ai/* peer 全部由宿主提供 |
| 数据 | 设置区段:dsh 0.1.7+ 存在当前 profile 补丁中本插件条目的 Config(按条目 id 寻址),≤ 0.1.6 在 $DSH_HOME/settings.yaml 的 capability-panel 命名空间;统计在 $DSH_HOME/capability-panel/stats.jsonl;loopback API /api/capability-panel |
| 包 | npm 上的 dsh-capability-panel;bundle id capability-panel |
技能"装好了"和技能"此刻在模型的上下文里"是两件事——而只有后者能回答"为什么 agent 不知道这个"。两者之间隔着上下文管理:工具结果剪枝器会截断过长的返回,压缩会把整段历史换成一条摘要。你眼看着五分钟前加载过的技能,可能已经部分或全部离开了模型的视野,而它的加载记录还永久躺在日志里,假装一切如常。
有时你也只是想让模型在这一个对话里别再碰某个工具——不是卸载插件,不是改配置文件重启,就只是这一个会话、从下一步开始。
这个插件把这两件事变成输入框右侧的一个面板。
已加载(完整指令在上下文里)/ 已截断(剪枝器留下首尾、挖掉中间)/ 已挤出(被压缩整体吞掉)/ 未加载——外加累计加载次数,被挤出后重新加载的技能读作"已加载 ×2"。~/.dsh/skills、项目相对路径,过长时中间省略)——"这个技能是从哪来的"一眼即有答案。/skill-name 放进输入框,等你自己的回车。$DSH_HOME(见"数据存放")。tools.restrict、system-prompt/assemble、settings 命名空间、UI slots),没有猴子补丁,宿主升级时更不容易碎。从插件市场,或直接从仓库安装:
dsh plugin --profile web add dsh-capability-panel
# 或
dsh plugin --profile web add github:pure-craft/dsh-capability-panel
安装后需要重启 dsh 才生效。
要求 DeepSeek Harness 的 web profile(dsh web),dsh ≥ 0.1.2-alpha.4(更早版本可运行,加载状态降级显示)。同一构建兼容到最新 0.1.7;仅「按预设名打开其目录」在 0.1.7+ 不可用(新版花名册不再携带路径),其余功能全量保留。所有 @deepseek-ai/* 运行时件都由宿主以 peer 依赖形式提供——没有别的要装。
安装即用,不需要任何配置——插件没有配置项。重启后你会在两个地方看到它:
--profile web 就是 dsh web GUI 使用的配置档;如果你平时用 dsh web 启动界面,照抄命令即可。也可以在插件市场里搜索 "capability panel" 一键安装。卸载用 dsh plugin --profile web remove dsh-capability-panel;设置和统计会保留在 $DSH_HOME(见"数据存放")。
打开任意对话,点输入框右侧的面板图标,面板向上展开。
X / Y 命中计数run_code 是保留的 Code Mode 传输通道——注册表禁止遮罩它,所以它的开关锁定为开。
两个作用域,同一组开关:输入框里的面板绑定你眼前的会话(重启后随它恢复);设置 → 能力面板决定之后每个会话从什么状态开始。Preset 默认在会话 agent 创建时读取——不改写 preset 文件,也不改变已经在运行的 agent。

生而轻量。 插件零运行时依赖——React、UI 组件和全部 @deepseek-ai/* 都由宿主提供——读取也是零拷贝:加载状态来自 live session 的内存 surface(模型下一次将看到的内容),从不对持久日志重新折叠,打开面板的代价是一次引用扫描,而不是解析历史。
开关是下一次提示组装上的薄覆盖层——技能用同名影子、工具用注册表遮罩——外加一条组装时现算的"你关了什么"的告知。会话开关以会话自己的 id 持久化在插件设置命名空间里,恢复的会话恰好拿回自己的开关,对话日志永不被写入。
~/.dsh/profiles/<profile>/cordis.patch.yml)中本插件条目的 Config(按条目 id 寻址);dsh ≤ 0.1.6 存在 $DSH_HOME/settings.yaml 的 capability-panel 命名空间。会话开关在 sessions.<sessionId> 下,最多保留 200 个会话、最旧的先淘汰。宿主从不丢弃未加载插件的分节,所以卸载后它们还在,直到你手动删除该段。$DSH_HOME/capability-panel/stats.jsonl,可直接读取:curl 'http://127.0.0.1:3080/api/capability-panel/stats'。数据路由只接受 loopback 请求,判定依据是连接对端地址。
pnpm install
pnpm dev # watch 构建
pnpm build # 构建 host 与 client 两半
pnpm test # 跑测试
pnpm typecheck # 类型检查
pnpm lint # oxlint(含 type-aware 规则)
pnpm check # typecheck + lint + test(100% 覆盖率门槛)
pnpm scan:dead-code # 死代码巡检报告(仅提示,不做门禁)
改动 host 半需要重启 dsh;client 半在 dsh web 与 watch 构建同时运行时热替换。
如果这个面板帮你省过一次排查,点个 star 让更多人能找到它;也欢迎顺手分享给同样在折腾 dsh 的朋友。Issue 和 PR 都欢迎——详见贡献指南。
版本变更记录见 CHANGELOG.md。