DeepSHPlugins
dsh-capability-toggle-plugin 项目预览
GITHUB / COMMUNITY PROJECT

dsh-capability-toggle-plugin

工具与集成TypeScriptMIT

在 DSH WebUI 中为技能、MCP 服务器、工具、提示词注入、审批升权和安全守卫提供会话、项目与全局三级控制,并在当前 agent 作用域内强制执行。

3 Starslifeopsgo 更新时间 2026-09-10
访问 GitHub 仓库
dsh-capability-toggle-plugin 项目预览

项目介绍

中文

在 DSH WebUI 中为技能、MCP 服务器、工具、提示词注入、审批升权和安全守卫提供会话、项目与全局三级控制,并在当前 agent 作用域内强制执行。

English

Adds session, project, and global controls in the DSH WebUI for skills, MCP servers, tools, prompt injections, approval escalation, and safety guards; enforcement is scoped to the current agent.

项目信息与收录信号

快照 2026-09-11
作者 / 组织
lifeopsgo
仓库
lifeopsgo/dsh-capability-toggle-plugin
GitHub Stars
3
Forks
1
开发语言
TypeScript
许可证
MIT
最近推送
2026-09-10
Manifest
数据中检测到声明

公开仓库不自动等于可商用;许可证与当前兼容性以原项目文档为准。Manifest 和数据评分不构成安装安全认证。

数据评分

65/ 100
维护活跃
100
文档与实用信息
100
生态关注度
25
安装便捷信号
75
项目声明信号
100

近 1 天仍在更新;README 含完整安装与使用说明;关注度尚低(3)。

评分来自已有数据快照的五维模型,仅作浏览参考,不是实际使用评测或安全检测结论。

安装与使用

所有项目资料与许可均以对应 GitHub 仓库为准。

dsh plugin --profile web add github:lifeopsgo/dsh-capability-toggle-plugin

复制命令不会自动执行。请先阅读仓库文档,确认环境要求与许可证。

项目截图

仓库 README

GitHub 原文

已保存的仓库文档快照;文档抓取时间未记录,可能与上方目录介绍处于不同版本。安装前请核对当前仓库说明。

dsh-capability-toggle-plugin

Control agent capabilities from the DSH WebUI — with real runtime enforcement.

platform tests release license

English · 简体中文

Capability controls for Skills, MCP, Tools, Prompt, and Security

Session · Project · Global — blue check = on, red cross = off, dashed dash = unset.

What it is

A DeepSeek Harness (DSH) WebUI plugin for controlling skills, MCP servers, tools, prompt injections, approval escalation, and safety guards at session, project, or global scope. Depending on the family, disabling removes, suppresses, rejects, or intercepts the capability on the agent's next step.

Compatible DSH versions

One build serves the whole 0.1.x line. The composer slot's owner share changed at DSH 0.1.2 — the session snapshot object was dropped in favor of the framework's sessionId prop and useSession hook — and this plugin reads both shapes.

DSH versionStatusHow it was checked
0.1.1-rc.2supportedunit tests, typecheck, build, and a real browser session (panel rendered, toggles written)
0.1.2-rc.1supportedunit tests, typecheck (Host and Client faces), and a load check against an installed 0.1.2 host; the browser run above was on 0.1.1 only
0.1.3-alpha.1 / -alpha.2supportedevery DSH symbol this plugin consumes was diffed from 0.1.2-rc.1 to current HEAD and is unchanged; not built or run against an installed 0.1.3 host

The declared peerDependencies admit all of the above, including the prereleases npm publishes as next (0.1.2-rc.1) and alpha (0.1.3-alpha.x), and reject 0.2.0 and later.

Quick start

Requires Node.js ≥ 22.6.

dsh plugin --profile web add github:lifeopsgo/dsh-capability-toggle-plugin#v1.3.0

Restart the existing DSH Web GUI process, then refresh the page. Start it with the command below when it is stopped:

dsh --profile web web

Open the control beside the ➕ button while the agent is idle. Replace web with another profile name when needed.

Upgrade or remove

# Upgrade or downgrade: use any tag listed on the releases page
dsh plugin --profile web add github:lifeopsgo/dsh-capability-toggle-plugin#v1.3.0

# Remove
dsh plugin --profile web remove dsh-capability-toggle-plugin

Features

Three-level resolution

Each capability has three independent levels:

session  ›  project  ›  global  ›  default (enabled)

The nearest explicit value wins. Unset defers to the next level; with every level unset, the capability remains enabled. The row badge always shows the resolved result.

The button displays only its current state: click to toggle on ↔ off, or use its small clear badge to return to unset.

Capability families

TabControls
SkillsIndividual model-invocable skills, including project-level skills discovered from the session's workspace (.dsh/skills, .agents/skills)
MCPMCP servers; expand a row to inspect member tools
ToolsIndividual model-visible tools and their guidance sections
PromptA safe, presence-checked allowlist of prompt injections
SecurityApproval escalation and five opt-in safety guards

Enforcement

Every mechanism is scoped to the current agent; global registrations are not mutated.

FamilyEnforcement
tool / mcpRemoved with ctx.tools.restrict({ deny }); forced calls are refused
skillShadowed by a same-named modelInvocable:false runtime skill
promptShadowed with empty text, or suppressed with suppressRuntimeContext()
approvalScoped approval requests resolve to rejected
guardtools/pre-execute blocks or requests confirmation for matching calls

Security controls

Turning off Approval escalation rejects every approval request from that agent without changing the system /permission setting.

Safety guards are opt-in:

GuardAction
Read-only modeBlock file writes, creates, and edits
Protect secretsBlock access to common secret files and credentials
Dangerous shellConfirm high-risk shell commands
Destructive gitConfirm history- or work-losing git commands
Outbound networkConfirm network tools and outbound shell actions

Usage stats

Skills, MCP servers, and tools carry a small badge showing how many times the model called them this session (called 7). Counts update when a turn ends while the panel is open, live for one agent's lifetime, and are never persisted — the same retention as a safety guard's matched N badge.

The tally counts requests, not successful runs: a call a guard blocked or sent to confirmation still counts, because the model asking for a capability is the signal worth seeing. Guards are matched against rather than called, so they keep their own badge and show no usage count; prompt and approval rows show none either.

Panel preferences

A disclosure arrow beside the panel title opens three display preferences, stored in localStorage so they survive page reloads and restarts:

PreferenceEffect
Show “enabled / total” on tabsRenders each tab badge as a fraction (67/106) instead of a bare total, so the strip reports how much of each family is active at a glance. The tooltip states both numbers in words either way.
Show call statsHides or shows the per-row usage badge described above.
Level columns to showNarrows the grid to Session, Session + Project, or all three columns.

The fraction counts a guard as enabled only while it is active. A guard row reuses the same disabled field to mean ACTIVE — the inverse of every default-on family — so a Security tab with the approval gate open and all five guards inactive reads 1/6, not 6/6.

Narrowing the level columns is display-only: the three-level resolution keeps running exactly as before, so a hidden project or global override still applies. Each row's badge and level switches always reflect the resolved state — a default-on family reads Active/Disabled, a guard reads Guarding/Inactive — which is why hiding a column cannot hide an effect. The name column absorbs the freed width, and the layout is driven by CSS variables so it stays aligned with the narrow-screen adaptation.

Additional behavior: switches lock while the agent runs, state survives popup close and turn boundaries, and the UI follows the WebUI language.

Roadmap

Planned, not yet implemented:

  • Cross-project config sync — copy or link project-level settings from another project instead of configuring each project from scratch.
  • Capability invocation stats — shipped in v1.2.0: skills, MCP servers, and tools badge how many times the model called them this session.
  • Fraction-format tab counts — shipped in v1.3.0: each tab badge renders as enabled / total, and the panel's disclosure arrow holds three display preferences. A guard counts as enabled only while active, so its inverted disabled flag never inflates the Security numerator.
  • Settings menu for customizable defaults — expose the plugin's own options in a settings menu, such as the default stance for newly discovered capabilities (today a capability with all three levels unset resolves to enabled, except the opt-in safety guards, which stay inactive).
  • Show only enabled / only disabled — add a state filter next to the search box, which today matches names and descriptions only. Guards need the same care the fraction counts need: a guard reuses disabled to mean ACTIVE, so "only disabled" must not list a guard that is actually enforcing. The filter would also narrow what bulk actions apply to, since they act on every currently visible row.
  • Filter and select-all — shipped in v1.1.0: the toolbar's search box filters rows, and each level's bulk menu applies enable/disable/clear to every currently visible row.
  • Bulk actions on a filtered selection — shipped in v1.1.0 together with the filter (search narrows, bulk acts on what's shown).

MIT — see LICENSE

使用前核对

安装步骤、兼容版本与授权范围以原项目当前文档为准。Stars 和评分是快照中的导航信号。

安装与排错 · 项目问题反馈

同类项目