🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

插件管家 Eveneve-night/dsh-plugin-steward

DeepSeek Harness
Eveneve-night11 天前有提交已提供中文文档扫描:含敏感能力

在聊天输入区开关插件、改设置并按会话隐藏工具

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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 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
预览分享卡片长什么样 ↓Eveneve-night/dsh-plugin-steward
分享 · DeepSeek Harness Hub
Eveneve-night/dsh-plugin-steward

在聊天输入区开关插件、改设置并按会话隐藏工具

这是你的仓库?认领条目

回到顶部