在聊天输入区开关插件、改设置并按会话隐藏工具
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Eveneve-night/dsh-plugin-steward该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · market
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 11 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 38 处,展示前 26 条)
- 读取本地文件lib/index.js:40
await access(target) - 读取本地文件lib/index.js:68
const raw = await readFile(path.join(profileDir, 'package.json'), 'utf8') - 读取本地文件lib/index.js:134
const parsed = JSON.parse(await readFile(file, 'utf8')) - 写入本地文件lib/index.js:157
await mkdir(path.dirname(file), { recursive: true }) - 写入本地文件lib/index.js:158
await writeFile(file, `${JSON.stringify(state, null, 2)}\n`, 'utf8') - 读取本地文件lib/index.js:570
const parsed = JSON.parse(await readFile(await tagsPath(), 'utf8')) - 写入本地文件lib/index.js:588
await mkdir(path.dirname(file), { recursive: true }) - 写入本地文件lib/index.js:589
await writeFile(file, `${JSON.stringify(data, null, 2)}\n`, 'utf8') - 读取本地文件lib/index.js:596
const text = await readFile(file, 'utf8') - 发起网络请求lib/client.js:65
const response = await fetch(`${API}/catalog${options.ack ? '?ack=1' : ''}`, { headers: { accept: 'application/json' } }) - 发起网络请求lib/client.js:79
const response = await fetch(`${API}/status`, { headers: { accept: 'application/json' } }) - 发起网络请求lib/client.js:90
const response = await fetch(`${API}/toggle`, { - 发起网络请求lib/client.js:113
await fetch(`${API}/ack`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: '{}' }) - 发起网络请求lib/client.js:127
const response = await fetch(`${API}/describe?id=${encodeURIComponent(packageName)}&refresh=1`, { headers: { accept: 'application/json' } }) - 发起网络请求lib/client.js:153
const response = await fetch(`${API}/tags`, { - 写入本地文件lib/gates.js:95
await mkdir(dir, { recursive: true }) - 读取本地文件lib/gates.js:106
const raw = JSON.parse(await readFile(policyPath(dir, sessionId), 'utf8')) - 写入本地文件lib/gates.js:119
await writeFile(policyPath(dir, sessionId), `${JSON.stringify(policy, null, 2)}\n`, 'utf8') - 读取本地文件lib/gates.js:125
return (await readdir(dir)).filter(name => name.endsWith('.json')) - 删除本地文件lib/gates.js:393
await rm(policyPath(dir, id), { force: true }) - 读取本地文件lib/describe.js:171
const info = await stat(file) - 读取本地文件lib/describe.js:173
return await readFile(file, 'utf8') - 读取本地文件lib/describe.js:181
const names = await readdir(dir) - 读取本地文件lib/describe.js:193
const info = await stat(file) - 读取本地文件lib/toolmap.js:23
entries = await readdir(dir, { withFileTypes: true }) - 读取本地文件lib/toolmap.js:48
text = await readFile(file, 'utf8')
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
在聊天输入框里管理 DeepSeek Harness 插件:按会话列出、切换、配置插件,并控制工具的启用范围。
README
由 DeepSeek 最新模型翻译生成dsh-plugin-steward · 插件管家
English · 中文
DeepSeek Harness 的插件管理,从聊天输入区就能打开:列出所有已安装的 bundle,开关插件,编辑每个插件的设置,还能在单个会话里隐藏某个插件的工具和 MCP 服务器。
English · 中文
dsh-plugin-steward 在输入区加一个按钮(🧩 插件),再加一个设置页。宿主端在运行中的 harness 进程里注册几条同源 HTTP 路由;客户端是 web UI 加载的单个未打包模块。它不启动额外进程,也不存任何凭据。
icon
功能
| 功能 | 行为 |
| 目录 | 列出所有已安装的 bundle(第三方和内置)以及每条 loader 记录,含标题、版本、描述、包名和当前状态。 |
| 全局开关 | bundle 走 pluginManager.setBundleEnabled,loader 记录走 setPluginEnabled。结果会报告为已生效 / 需重启 / 被覆盖 / 失败。插件拒绝禁用自己(HTTP 409),入口点不会消失。 |
| 单插件设置 | 每行旁边的 ⚙ 打开设置抽屉。
展开完整文档(README 剩余 1 节)
dsh-plugin-steward · 插件管家
English · 中文
DeepSeek Harness 的插件管理,从聊天输入区就能打开:列出所有已安装的 bundle,开关插件,编辑每个插件的设置,还能在单个会话里隐藏某个插件的工具和 MCP 服务器。
English · 中文
dsh-plugin-steward 在输入区加一个按钮(🧩 插件),再加一个设置页。宿主端在运行中的 harness 进程里注册几条同源 HTTP 路由;客户端是 web UI 加载的单个未打包模块。它不启动额外进程,也不存任何凭据。
icon
功能
| 功能 | 行为 |
| 目录 | 列出所有已安装的 bundle(第三方和内置)以及每条 loader 记录,含标题、版本、描述、包名和当前状态。 |
| 全局开关 | bundle 走 pluginManager.setBundleEnabled,loader 记录走 setPluginEnabled。结果会报告为已生效 / 需重启 / 被覆盖 / 失败。插件拒绝禁用自己(HTTP 409),入口点不会消失。 |
| 单插件设置 | 每行旁边的 ⚙ 打开设置抽屉。宿主读取该行的 schemastery Config 并推导表单:string、number(带 min/max)、boolean、enum 和 JSON 控件,每项都带默认值;字段易变时还会标 reload。保存时只把改动过的字段通过 configEditor.edit() 发出去。 |
| 按会话限制 | 本对话标签页在单个会话里对模型隐藏某个插件的工具或整个 MCP 服务器。它对该智能体调用 agent.ctx.tools.restrict(),所以对已在运行的会话从下一次请求起生效。策略按会话保存,重载或重启后重新应用。 |
| 自动描述 | 插件没提供 meta.description 时,宿主从插件自己的 README、客户端 slot id 或 package.json 里提炼一句话(≤ 90 字符)。作者写的描述永远优先;✨ 按需重新生成,并标注来源。 |
| 新插件发现 | 每 5 分钟静默扫描一次,把新出现的 bundle 和 loader 记录记为待确认。按钮上显示橙点;面板里一键确认。 |
| 内核区 | DSH 自带、且在当前配置档里实际装配的 bundle,单独列在只读的 内核 标签页里,带 🔒。它们的启用逻辑在后端与第三方插件隔离。 |
| 共存 | 如果装了能力面板类插件(dsh-capability-panel、dsh-capability-composer、@super_camel/dsh-plugin-panel),面板会显示一条提示指向它,不重复实现它的实时上下文状态。 |
入口:
- 输入区工具行左侧(conversation.input.left)的 🧩 插件 → 浮动面板,含 全局 和 本对话 两个标签页。
- Settings → 插件管家(settings.section)→ 发现设置、配置档路径、按会话的策略列表。
安装
from GitHub
dsh plugin add github:Eveneve-night/dsh-plugin-steward
from npm (if published)
dsh plugin add dsh-plugin-steward
也可以用插件管理器把目录本身作为 bundle 安装:
plugin_manager action: install_bundle
target: <path to this checkout>
bundle 会在组合里加一行:
- insert:
- id: plugin-console
name: 'dsh-plugin-steward'
重载一次 Web UI(客户端那一半在页面加载时注入)。改完源码后,对 include:plugin-console 执行 set_plugin,先 enabled: false 再 true。
HTTP 路由
所有路由同源,都在 /plugin-console/api 下,由客户端那一半调用。
| 方法 | 路径 | 用途 |
| GET | /catalog | 完整目录、发现状态、kernel 段、profileBundles;带 ?ack=1 时同时确认 |
| GET | /status | 待处理数量(橙点)和客户端那一半的加载状态 |
| POST | /toggle | {kind:'bundle'\|'row', id, enabled} |
| POST | /ack | 把当前插件集记为已知 |
| GET | /config?id=<entryId> | 某条 loader 行的推导表单描述和显式值 |
| POST | /config | {id, config} → 校验、持久化,再由 Loader 重载 |
| GET | /sessions | 运行中的会话,加上所有已保存的按会话策略 |
| GET | /session?id=<sessionId> | 单个会话的门控视图:可见工具、按插件分组的工具、MCP 服务器、拒绝列表 |
| POST | /session | {id, disabled: string[], disabledMcp: string[]} → 保存并立即生效 |
| DELETE | /session?id=<sessionId> | 清除某个会话的策略并撤销其限制 |
| GET/POST | /settings | 发现设置(自动确认) |
| GET | /describe?id=<package>&refresh=1 | 从插件自己的文件推导描述 |
写入的文件
- <profile>/.plugin-console/state.json — 已知的 bundle/行、待处理的发现项、设置。
- <profile>/.plugin-console/sessions/<sessionId>.json — 按会话的策略(disabled、disabledMcp)。
不改动其他任何东西;全局开关走平台自己的插件管理器。
限制
- 纯 UI 插件(壁纸、小组件、侧边栏)无法按会话开关。 客户端插件在配置档层面加载,槽位注册是全局的。这类插件,管家提供全局开关和打开其设置的方式。
- 按会话门控只覆盖全局注册的工具。 在智能体作用域内注册的工具(由预设或组合注册)仍然可见 —— tools.restrict() 触及不到它们。全局注册的插件和 MCP 服务器都在覆盖范围内。
- 设置表单按 loader 行划分。 一个 bundle 有多行时,可以切换行;没有 Config 的行显示「无可配置项」。
- 嵌套的对象/数组字段回退为 JSON 文本区。
- 自动描述采用启发式规则。 先看 README,再看客户端 slot id,最后看 package.json;来源会标注出来,也可以重新生成。
测试
node dev/smoke-client.mjs # client half: load, 3 slot registrations, panel / this-conversation / settings render
node dev/test-describe.mjs # description derivation against 6 installed plugins
node --check lib/index.js # host half syntax
它做什么
| 功能 | 行为 |
| 统一目录 | 列出全部已安装 bundle(第三方与内建)和全部 loader 行,带标题、版本、描述、包名与当前状态。 |
| 全局启停 | bundle 走 setBundleEnabled,行走 setPluginEnabled,结果区分「已生效 / 需重启 / 被覆盖 / 失败」。插件管家不允许关掉自己(HTTP 409),免得入口消失。 |
| 单插件设置 | 每行右侧 ⚙ 打开设置抽屉:宿主自省该行的 schemastery Config 生成表单(字符串、数字带范围、布尔、枚举、JSON 五类控件,带默认值与「需重载」标记)。保存只提交改动过的字段,经 configEditor.edit() 校验并写回。 |
| 按对话放行 | 面板「本对话」页把某个插件的工具、或某个 MCP 服务器,在这一轮对话里对模型隐藏。它在该 Agent 上调 agent.ctx.tools.restrict(),所以对已开始的对话也生效,下一个请求即可见。策略按会话保存,重载或重启后自动补应用。 |
| 自动描述 | 插件没写 meta.description 时,按它自己的 README、客户端 slot id、package.json 生成一句话(≤90 字);作者写的描述永远优先,✨ 可手动重新生成,并标注来源。 |
| 自动发现 | 每 5 分钟静默扫描一次,把新出现的 bundle / 行记成「待纳入管理」,按钮上出现橙点,面板里一键认领。 |
| 内核分区 | DSH 本体自带、且当前 profile 真正组装的包单独列成只读「内核」页(🔒);它们的启用逻辑在后端与第三方插件完全隔离。 |
| 与能力面板共存 | 检测到 dsh-capability-panel / dsh-capability-composer / @super_camel/dsh-plugin-panel 时只显示一条指向提示,不重复实现它的实时上下文状态,也不做双向同步。 |
入口:
- 输入框工具行左侧的 🧩 插件(conversation.input.left)→ 浮层面板,含「全局 / 本对话」两档。
- 设置 → 插件管家(settings.section)→ 发现设置、目录路径、按对话策略清单。
安装
dsh plugin add github:Eveneve-night/dsh-plugin-steward
或者用插件管理器把本目录当作 bundle 安装:
plugin_manager action: install_bundle
target: <本仓库的路径>
组合里会插入一行 plugin-console(见上文 YAML)。刷新一次 Web UI 使客户端半生效;改源码后用 set_plugin 把 include:plugin-console 先设 false 再设 true 即可重载。
接口与写入的文件
接口表同上,全部挂在 /plugin-console/api 下。持久化只有两处: <profile>/.plugin-console/state.json(已知集合、待认领项、设置)与 <profile>/.plugin-console/sessions/<sessionId>.json(按对话策略)。其余不做改动——全局开关走平台自己的插件管理器。
已知边界
- 纯 UI 插件(壁纸 / 挂件 / 侧栏)无法按对话开关:客户端插件在 profile 级加载,slot 注册是全局的。这类插件只提供全局启停与「打开它的设置」。
- 按对话放行只覆盖全局注册的工具:preset / composition 在 agent scope 里注册的工具,tools.restrict() 本身也限制不到。
- 设置表单是按 loader 行的:多行 bundle 可在头部切换行;没有 Config 的行显示「没有可配置项」。
- 嵌套对象 / 数组字段退化为 JSON 文本域。
- 自动描述是启发式的:可能不准,所以标注来源并可手动重生成。
自测
node dev/smoke-client.mjs
node dev/test-describe.mjs
node --check lib/index.js
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Eveneve-night/dsh-plugin-steward
在聊天输入区开关插件、改设置并按会话隐藏工具
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目