← 返回列表
✓ 可直接安装
🛡️ dsh-permission-rules
自动检查通过:npm 包已发布且 engines 声明满足基线(声明 Node ^22.19.0 || >=24.0.0);该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/9/19 · 已提供中文文档
为 DeepSeek Harness 实现 Claude Code 风格的声明式权限规则:在 tools/pre-execute 瀑布流上按顺序执行 allow/deny/ask 规则,支持工具名、参数(glob/regex)和工作区路径匹配,并具备会话日志审计和 HMR 重载功能。
综合分
58.1
GitHub 分
58.1
用户评分
—
★ Stars
112
周下载量
1,115
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add dsh-permission-rulesnpm 包 dsh-permission-rules 已校验归属本仓库,走 npm 安装最省事
🟢实装验证通过· 2026/9/18
由 dsh-plugin-verify(GitHub Actions)在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-permission-rules @ 0.7.2
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/17 04:56:41
⚠ 该插件运行需访问外部网络 / 远程 API,部署在国内无外网环境时可能无法正常使用。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-attachment@deepseek-ai/cordis@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-agent@deepseek-ai/dsh-brand@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-client-web@deepseek-ai/dsh-commands用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
🛡️ dsh-permission-rules
- 1024 商店渠道:先执行一次 npm i -g dsh1024,然后执行 dsh1024 plugin --profile web add dsh-permission-rules(计入 deepseek1024.com 安装排名)。
Gitee
面向 DeepSeek Harness 的 Claude Code 风格声明式权限规则。
规则决定什么是已知的。审查模型决定什么不是。
License
DSH plugin
dsh-doctor
Node
CI
Version
npm version
npm downloads
English · 简体中文 · Español · Português · हिन्दी
兼容性
| 层面 | 状态 |
|---|---|
| Harness | DeepSeek Harness dsh-v0.1.5-rc.2(适配于 2026-09-09,完整门控链 + profile 安装冒烟测试):其 Session.append 仍无法标记 ignorable 标记——已在发布的 0.1.5-rc.2 包上验证,其中第三个参数被静默丢弃,信封字段仅对存储日志读取保留——因此整个 0.1.5-alpha 系列都被预先检查为未标记,会话日志审计默认保持禁用。0.1.3-alpha 系列保持相同的仅表面追加签名。两个系列的日志迁移都会拒绝未分类的插件事件,即使已标记,因此在 0.1.3-alpha 主机打开日志之前需 strip v1 审计行,在 0.1.5-alpha 主机迁移日志之前需 strip v2 审计行(原生 v3 日志只需 repair)。 |
| Node | ^22.19.0 || >=24.0.0 |
| 平台 | 全部(主机 + Web 设置客户端) |
| 模型 | 任意(deny/ask 原因通过工具结果呈现) |
你将获得
dsh-permission-rules 在 tools/pre-execute 瀑布流的每次工具调用前放置一个有序的 allow / deny / ask 规则列表——确定性、即时、可审计,并由你以纯 YAML 编写:
- deny 阻止调用;规则的 reason 成为模型可见的错误。
- ask 走官方审批接缝(挂载 dsh-auto-review 以启用第二模型应答者,或由人工应答;两者都没有时,harness 会失败关闭)。
- allow(以及无匹配)严格通过 next() 委托——下游监听器绝不会被短路。
每一次命中以及每一次透传都会作为 permissionRules/decision 会话事件记录到审计日志中(仅记录——不会向模型上下文注入任何额外内容)。
- 丰富的匹配——工具名 glob(包括 mcp__)、代理身份选择器(main / subagent / preset:)、参数键/值 glob 或正则(支持 !pattern 取反以及 absent 键维度)、任意嵌套深度的工作区相对路径 glob、when 主机条件(环境变量、平台),以及用于令牌级精确命令匹配的 shell 命令分解(argv:命令词、参数令牌、管道签名)。
- 内置高风险基线——随附的 deny/ask 规则集(破坏性命令、权限提升、下载并执行、敏感路径)默认启用,并追加在用户规则之后,因此更靠近的用户规则可以覆盖它;通过 builtin.enabled 切换。
- 分层规则文件——可选的 searchUp 会从会话 cwd 到文件系统根目录合并每一个 .dsh/rules.yaml,最近的优先。
- 试运行推广——enforce: false 会审计该策略将会做什么,同时放行每一次调用。
- 热重载——使用 Chokidar 监听并带防抖;编辑出错时保留之前的规则,绝不崩溃。在 WSL 主机上,或对于 /mnt/ 下的规则文件,监听会切换为轮询,因为那里的原生变更事件不可靠。
- 大声失败——无效的 YAML、未知的操作/字段、错误的 glob/正则、容易回溯的模式,或规则数超过 maxRules,都会导致加载失败。
规则语法
/.dsh/rules.yaml
rules:
- match: { tools: [bash, pwsh], params: { command: "git push" }, paths: ["/secrets/"] }
action: deny
reason: "No pushes from protected paths"
- match: { tools: [edit, write] }
action: ask
reason: "File writes need confirmation"
- 匹配维度——tools(glob,包括 mcp__)、agents(main / subagent / preset:;未知身份永不匹配——失败关闭)、params(键/值 glob 或正则、!pattern 取反、absent 键维度)、paths(在任意嵌套深度提取的工作区相对 glob)、when(env 变量 glob/正则 + 封闭的 platform 列表),以及 network(domains / ips / ports / schemes——glob、通配符、CIDR、端口范围)。
- 操作——allow / deny / ask,按文件顺序求值,首个匹配者胜出。
- 规则元数据——enabled: false(可见但无效)、description、tags;未知字段会导致加载失败。
- Schema — 一个 JSON Schema 随附于 docs/rules-format.schema.json(通过 # yaml-language-server: $schema=... 实现编辑器补全);完整的词汇表和 5 条规则的安全基线位于 docs/rules-format.en.md。
网络策略
一种 Codex 风格的进程级网络策略:shell 子进程流量流经内置的本地 HTTP/CONNECT 代理,每个连接都由有序的网络规则或由映射到官方沙箱预设的三种模式决定:
- deny-all — 只读沙箱预设:阻止所有出站。
- whitelist — 工作区写入预设:允许列出的目标,其余目标 unlisted: ask(或 deny)。
- allow-all — 危险完全访问预设:允许一切。
- auto(默认)— 遵循沙箱预设;在没有沙箱策略服务的主机上,它解析为 autoFallback(allow-all)。
- 匹配 — match.network 使用 domains / ips / ports / schemes(glob、通配符、CIDR、端口范围;接受数字形式的 YAML 端口)。在 tools/pre-execute 热路径上的 URL 候选提取会在 web 工具参数以及嵌入 bash/pwsh 命令文本中的 URL 上触发;回环目标可以根据 loopback 策略短路规则。IPv4 映射的 IPv6 字面量在匹配前被规范化为其 IPv4 形式,并且代理在做出决策的地址上进行连接——绝不进行第二次 DNS 解析——裁决未解析出任何地址的连接会失败关闭(502),而不是拨号该名称。
- 上游链式代理 — network.upstreamProxy(默认 off)将此代理允许的连接发送到上游代理:CONNECT 向上游请求隧道(CONNECT host:port),纯 HTTP 请求以绝对形式转发给它。被阻止的目标永远不会到达上游——它仍然会收到此插件的结构化 403。即使配置了上游,有两种情况也绝不链式代理:回环目标(此主机之外的代理无法路由其回环)以及任何由 ips 作用域规则产生的决策(链式代理会将主机名交给上游,因此“连接落在规则所看到的地址上”——issue #21——将恰好在规则关心地址的地方不再成立;这些决策保持直接拨号裁决后的地址),外加其 scheme 没有可用上游的目标。上游自身的主机名是操作员配置,而非代理输入,并且不由这些规则裁决。携带凭据的 URL 绝不会原样输出:警告、/rules network 和设置快照会掩码密码(http://user:@host:port)。不可达的上游、超时(10 秒)或非 2xx 应答都会产生 502——刻意没有静默回退到直接拨号,因此配置错误会保持可见。
- 审计 — 被拒绝的连接会将 permissionRules/network 追加到所属会话(同样经过自适应的 ignorable 门控),并在 /rules network 和设置页面中显示阻止计数器和最近的拦截记录。
- 诊断 — 被阻止的连接会携带一条 [network: …] 消息,指明被阻止的目标、做出决定的模式或规则,以及补救措施。
- 从设置页面允许 — 每次最近的拦截都会提供一个 允许 操作。它会在实际判定该连接的最近规则文件的顶部(索引 0)写入一条最小的 match: { network: { domains: [] } } / action: allow 规则:即该阻止所归属工作区的项目文件(当配置了绝对 rulesFile 时使用该文件),或者,对于无会话的主机级阻止,使用主机链解析出的文件(绝对 rulesFile → 已存在的 / → 配置的 fallbackPath → /,若不存在则创建)——并且当加载了多个工作区时,页面会先提供一个选择器,因为任何已加载的工作区链的优先级都高于主机链。之所以放在索引 0,是因为规则采用首个匹配优先:若追加在已有的 deny 之后,该规则将成为无效文本。仅使用 domains,因为该维度包含子域且与端口/协议无关,因此该主机不会在其下一个端口上被再次阻止;已有的注释和未改动的规则会保留,且文本会经过与手动编辑相同的验证门控。更改立即生效——缓存的各工作区链以及无会话的主机链都会被重新读取,因此无需重启,也无需 /rules reload——并且会重新计算判定,因此通知会报告真实结果,绝不会在连接仍被阻止时声称成功。对于未知工作区、已知规则源之外的目标、只读的内置基线,以及无法读取或解析的文件,它会拒绝操作并保持文件不变;对于已被允许的连接,则不会写入任何内容。network.allowHostAction: false 会隐藏该按钮并使 RPC 拒绝执行。
快速开始
1. install the bundle into your profile
dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#main"
or from npm (published releases)
dsh plugin --profile web add dsh-permission-rules
2. restart and verify the row
dsh --profile web --dump-config | grep -A4 'id: permission-rules'
安装与卸载
- git 渠道(最新的 main):dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#main" —— prepare 脚本仅使用生产依赖进行构建。
- npm 渠道(已发布的版本):dsh plugin --profile web add dsh-permission-rules。
- tarball 渠道:在本仓库中运行 pnpm pack,然后执行 dsh plugin --profile web add ./dsh-permission-rules-.tgz。
- 卸载:dsh plugin --profile web remove dsh-permission-rules。
配置
所有可调项都是 Schemastery Config 字段(可从 cordis.yml 更改)。以 id 为目标的覆盖会替换整行——请重新声明你需要的每一个键。
| 键 | 默认值 | 含义 |
|---|---|---|
| rulesFile | .dsh/rules.yaml | 规则文件位置;相对路径 = 相对于调用会话的 cwd 解析,绝对路径 = 全局并在挂载时校验 |
| fallbackPath | (无)* | 当按 cwd 发现未找到任何内容时使用的规则文件;在挂载时校验 |
| badFilePolicy | fail | 坏规则文件:fail 会大声报错并使待处理的工具调用失败;ignore-with-warning 会发出警告并继续以空规则运行 |
| maxRules | 256 | 有效来源链中规则数量的硬上限 |
| maxCachedWorkspaces | 512 | 缓存的按工作区规则加载数量的硬上限(LRU 淘汰) |
| patternMode | glob | params/paths/when.env 模式风格:glob 或 regex(工具名始终为 glob) |
| watch | true | Chokidar 监听并在变更时重新加载 |
| watchStabilityThresholdMs | 200 | 重新加载防抖窗口(毫秒) |
| language | en | /rules 输出语言:en、zh、es、pt、hi |
| caseInsensitivePaths | (win32) | paths 模式和工作区根目录比较忽略 ASCII 大小写;在 Windows 上为 true |
| audit | all | 审计粒度:all 记录每次命中以及放行;hits 跳过放行事件 |
| searchUp | false | 从会话 cwd 向上遍历父目录,并合并找到的每个规则文件,最近的优先 |
| maxGlobStars | 2 | 每个 glob 模式中无界 / 量词的硬上限 |
| enforce | true | false = 试运行模式:拒绝/询问命中会以 dryRun 标记记录到审计日志,并且每次调用都会放行 |
| allowUnmarkedAudit | false | 标记前宿主会丢弃 ignorable 标记;插件会禁用会话日志审计并发出警告。设置为 true 可重新启用 |
| network.enabled | true | 代理、环境变量注入和 Web 工具模式默认值的主开关 |
| network.mode | auto | 策略模式:auto 遵循沙箱预设,或 deny-all / whitelist / allow-all |
| network.autoFallback | allow-all | 当 auto 没有沙箱策略服务时使用的模式 |
| network.unlisted | ask | 白名单模式下对没有规则匹配的目标的处理:ask 或 deny |
| network.proxyBind | 127.0.0.1 | 本地代理绑定地址(仅限回环) |
| network.proxyPort | 0 | 本地代理端口;0 会选择一个空闲的临时端口 |
| network.proxyMaxRecent | 100 | 为设置页面保留的最近阻止记录数量上限 |
| network.loopback | allow | 回环目标:allow(与 Codex 一致)或 policy |
| network.injectEnv | true | 是否为子进程注入代理环境变量 |
| network.noProxy | clear | 子进程 NO_PROXY 处理:clear 强制执行策略,或 preserve |
| network.upstreamProxy | off | 此插件允许的连接的上游代理:off 直接拨号,inherit 复用启动环境中的代理名称,或显式的 http(s):// 代理 URL |
| network.allowHostAction | true | 设置页中每个拦截块的“允许此主机”操作:false 会隐藏“允许”按钮,并让 permissionRules/allowHost RPC 拒绝执行(规则编辑器不受影响) |
| builtin.enabled | true | 内置高风险基线:false 会完全禁用随附的拒绝/询问规则集 |
| builtin.path | (随附)* | 替换基线文件(绝对路径,或相对于 process.cwd());在挂载时校验 |
工具与界面
| 界面 | 类型 | 说明 |
|---|---|---|
| tools/pre-execute | 监听器 | 首个匹配的允许/拒绝/询问规则 + 网络 URL 候选提取 |
| /rules | 命令 | list · reload · decisions [n] · test |
| permissionRules/decision | 事件 | 对每次命中和透传进行仅日志审计 |
| permissionRules/network | 事件 | 对已阻止连接进行代理层审计 |
| HTTP/CONNECT 代理 | 服务 | 内置本地代理,管控 shell 子进程流量 |
| 设置页 | 客户端 | 网络模式编辑器、规则编辑器、拦截计数器、最近拦截记录,并带有针对每个拦截块的允许操作 |
/rules 列出活动规则、其源文件以及任何上次重载错误
/rules list 裸列表命令的显式别名
/rules reload 为此工作区重新读取规则文件链
/rules decisions [n] 显示本次会话最近 n 条权限决策(默认 10)
/rules test 针对假设调用对规则进行试运行评估
/rules test 还接受前置标志:--cwd 、--env KEY=VALUE(可重复)、--agent (可重复)以及 --platform 。在多文件链(例如 searchUp)中,每条列出的规则行都会归属到其各自的源文件。
权限与数据
- 权限:在其 workshop 清单中声明 files:read、files:watch、files:write、session:append 和 network:outbound。ask 决策走官方审批接缝——不会重新实现或绕过任何内容。
- 数据:规则文件从磁盘读取;不写入任何规则数据。无模型调用,无审查子代理。
- 会话日志:permissionRules/decision 绝不会注入模型上下文,并会以信封的 ignorable: true 标记追加,因此任何 harness 构建都会加载该日志。
安全边界
- 策略,而非内核。 paths 候选仅来自一组已记录的参数键(可位于任意嵌套深度,有深度上限),且只有工作区相对路径会匹配。
- 此处无审查器。 该插件绝不会生成子代理或调用模型——产生 ask 决策即其工作的终点。
- 无沙箱更改。 操作系统级沙箱策略属于沙箱接缝,而非此插件。
- 配置错误会大声报错。 未知 YAML 字段、未知操作和错误模式会在加载时被拒绝。
- 回溯边界。 Glob 模式最多允许 maxGlobStars 次无界星号展开;正则模式会拒绝嵌套的无界量词,以及带量词的、重叠的字面量交替。
- 故障关闭式拨号。 纯 HTTP 转发和 CONNECT 隧道只连接到经裁决的地址;若某个 allow 的裁决未解析出任何地址,则以 502 故障关闭,而不是直接拨号该名称(issue #23)。
已知限制
- 在标记前的主机和拒绝型主机上的审计标记。 permissionRules/decision 会以 ignorable: true 追加;Session.append 早于该标记的主机(0.1.0-rc.1–rc.7 和 0.1.1-rc.1–rc.7 系列)会静默丢弃它,0.1.2-rc 系列发布的是 alpha.5 接口(没有任何 append 选项会写入该标记),0.1.2-alpha 系列在读取时即使带有标记也会拒绝插件事件,而 0.1.3-alpha 和 0.1.5-alpha 系列保持相同的仅接口 append 签名(已在发布的 0.1.3-alpha.1/0.1.5-alpha.1 包上验证)——运行时会在首次 append 前预先检查所有这些情况,并禁用会话日志审计,同时给出一次性警告。跨代迁移也会拒绝带标记的审计行:0.1.3-alpha 的 v1→v2 门禁会拒绝未知的 v1 事件,而 0.1.5-alpha 的 v2→v3 门禁会拒绝所有未分类事件(其清单被冻结为已发布的 v2 词汇表),因此在 0.1.3 主机打开日志前需 strip v1 行,在升级到 0.1.5 主机前需 strip v2 行。原生 v3 日志接受带标记的插件行,因此它们只需 repair。设置 allowUnmarkedAudit: true 可重新启用;使用 scripts/repair-session-logs.mjs 修复已写入的日志(其 strip 模式会移除标记无法起作用的审计行)。
- 路径候选是启发式的。 只有文档化的参数键会参与路径匹配,并且仅当 caseInsensitivePaths 开启时,工作区相对匹配才按 ASCII 大小写不敏感。
- Glob 是一个保守的子集。 不支持花括号展开——请写两个模式,或使用正则模式。
- 正则回溯防护是结构性的,而非穷尽性的。 对不受信任的文件,优先使用 glob 模式。
- 主机自身的出站请求不经过此代理。 注入的代理环境覆盖的是派生的 shell 子进程——这正是注入的目的——以及任何在请求时读取代理名称的消费者。它不覆盖主机进程自身基于 fetch 的流量:启动器会在第一个插件挂载之前,从启动环境安装 undici 的全局 dispatcher,该 dispatcher 按其策略而非环境进行路由,并且 Node 在启动时采样代理环境——因此之后挂载的插件无法重定向它。后果:提供方端点不需要 allow 规则,并且 network.injectEnv: false 不会使主机进程脱离任何东西。测量于 2026-09-10,Node 22;使用 scripts/host-egress-probe.mjs 复现。
- 上游链式代理只覆盖到达此代理的流量。 在 dsh-v0.1.3-alpha.1 及更高版本上,harness 自身的启动时代理策略及其子进程环境覆盖可能优先于本插件注入的代理名称,因此 network.upstreamProxy 描述的是此代理所处理的连接会发生什么——它并非对宿主进程中每一条出站路径的声明。
与 dsh-auto-review 协作
- dsh-permission-rules 产生 ask;dsh-auto-review 在 approval/request 瀑布流上以只读的第二模型裁决(或委托给人类)作答。同时挂载两者以实现完整的闭环。
- 已通过集成测试:permissionRules/decision → approval/asked → autoReview/verdict → approval/decided,其中审查者由脚本化 mock 替代。
- never 审批策略以及官方 harness 的每一项故障关闭(fail-closed)保证均保持不变。
会话日志修复
在 ignorable 标记存在之前写入的会话日志可能会被较新的 harness 构建拒绝(SessionFormatUnsupportedError)。随附的 scripts/repair-session-logs.mjs 仅重写目标审计行以携带 ignorable: true,保持帧结构不变,并带有备份:
node scripts/repair-session-logs.mjs scan [--home DIR] # report foreign rows, change nothing
node scripts/repair-session-logs.mjs repair [--home DIR] [--dry-run]
node scripts/repair-session-logs.mjs strip [--home DIR] [--dry-run]
--home 默认为 $DSH_HOME/sessions(或 ~/.dsh/sessions)。每个按代寻址的日志都通过其规范基名被发现——session.jsonl、session.v2.jsonl、session.v3.jsonl,每个都可选地以 .zstd 压缩——因此请按代选择模式:
- v3(session.v3.jsonl,由 0.1.5-alpha 系列原生写入)——读取路径接受带标记的插件行,因此 repair 就足够了。
- v2(session.v2.jsonl,由 0.1.3-alpha 系列写入)——repair 可在写入它的宿主上打开它,但 0.1.5-alpha 的 v2→v3 迁移会拒绝每一个未分类事件,即使已标记:在升级到 0.1.5-alpha 宿主之前对 v2 日志运行 strip。
- v1(session.jsonl)——0.1.3-alpha 的 v1→v2 迁移会拒绝未知的 v1 事件,即使已标记:在 0.1.3 或更高版本的宿主首次打开该日志之前运行 strip。
开发
pnpm install # node ^22.19 || >=24
pnpm run typecheck # tsc, src + tests
pnpm run lint # eslint, src + tests + scripts
pnpm test # vitest: 24 spec files
pnpm run test:coverage # coverage gate (90/80/90/90)
pnpm run build # tsc declarations + tsdown bundles (lib/)
pnpm run pack:check # build + pack (the published artifact)
node scripts/check-readme-sync.mjs # five-language README sync gate (also in CI)
有关无头端到端验证记录,请参见 VERIFICATION.md。
主题
dsh、dsh-plugin、deepseek-harness、permission、policy、allow-deny-ask、approval、safety、network、network-policy、proxy
贡献者
- @PerryLink — 创建者与维护者:规则词汇与求值、运行时、HMR 监听、会话日志审计、网络策略 + 代理,以及五种语言的文档。
- @22xuan — 关于 rc.6 宿主静默丢弃审计事件 ignorable 标记的详细报告(#2)以及上游 harness 讨论;v0.4.1 的运行时宿主能力检测与文档更正直接源自该分析。
- @sjh9714 — 提出了共享规则语法测试向量语料库(#4、#5),在 v0.5.1 中以 docs/rule-test-vectors/ 形式发布,并在设计讨论中提供了 AST 分解的边界用例。
- @weipeng1999 — 基于 AST 的命令分解功能提案(#8),该设计讨论的基础。
- @alexchenzl — DSH Directory 列表请求(#7)。
- @zl190 — 报告并验证了 0.1.0-rc.7 harness 兼容性缺口(PR #9)。
- @cuohua — 报告了 0.1.1-rc 系列仍然丢弃 ignorable 标记,尽管版本门控仅覆盖 0.1.0(#11);放宽后的门控直接源自该分析。
PerryLink DSH 插件家族
本项目是由 PerryLink 维护的 40 个 DeepSeek Harness 插件之一。如果这个插件对你有帮助,其他的很可能也会:
| 插件 | 一句话简介 |
|---|---|
| dsh-auto-review | 审批链上的第二模型自动审查,默认故障关闭 | |
| dsh-background-agents | 持久后台子代理,带 Web UI 侧边栏、消息传递与中断 | |
| dsh-budget | DeepSeek Harness 的成本治理:预算、碳排放与延迟集于一个面板。 | |
| dsh-checkpoint-rewind | 等同于 Claude Code /rewind:快照、会话分叉、一次性恢复 | |
| dsh-claude-move | 将 Claude Code 会话、记忆、技能和 CLAUDE.md 迁移到 DSH | |
| dsh-click | 面向 DeepSeek Harness 的跨平台原生桌面控制——Windows 优先。 | |
| dsh-composer-history | 为 Web 输入框提供终端风格的输入历史:方向键、Ctrl+R 搜索 | |
| dsh-data-quality | 数据集质量检查与引用交叉核对(此处消费的可选数值桥接) | |
| dsh-defend | 面向 DeepSeek Harness 的提示注入、越狱和密钥泄露防御。 | |
| dsh-doublecheck | 工程纪律守卫:需求拷问、测试门禁、对抗式审查 | |
| dsh-draw | 面向 DeepSeek Harness 的统一静态图像生成路由。 | |
| dsh-fast | 面向 DeepSeek Harness 的只读性能诊断。 | |
| dsh-fund-research | 面向中国公募基金的确定性研究报告 | |
| dsh-github | 面向 DSH 的 GitHub PR/issue 集成,每次写入均需审批 | |
| dsh-industry-research | 行业研究编排,通过本插件的 ctx.researchReport.assemble 封存其交付物 | |
| dsh-library | 面向 DeepSeek Harness 的本地文档知识库。 | |
| dsh-local-ai | 面向 DeepSeek Harness 的本地模型(Ollama)集成。 | |
| dsh-lsp-actions | 基于语言服务器的 LSP 诊断、格式化、补全、代码操作和重命名 | |
| dsh-mask | PII 脱敏中间件:在模型边界匿名化,在展示层还原 | |
| dsh-mcp-panel | 只读 MCP 运行时面板:/mcp 命令 + 设置选项卡,含状态、工具和错误 | |
| dsh-memento | 需审批的跨会话记忆:ctx.memory 接缝 + SQLite + memory 工具 | |
| dsh-observe | 面向 DeepSeek Harness 的 OpenTelemetry 和 Langfuse 可观测性导出器。 | |
| dsh-output-styles | 等效于 Claude Code outputStyles 的运行时样式切换 | |
| dsh-personal-directive | 带顶栏开关的个人指令注入器(框架版) | |
| dsh-plugin-guide | 以按需智能体技能形式提供的插件开发知识库 | |
| dsh-plugin-doctor | 面向 DSH 插件的零依赖静态 + 沙箱冒烟检测器 | |
| dsh-reach | 多渠道审批/提问桥接:微信/Telegram/飞书,会话控制台 |
| dsh-research-report | 可验证的研究报告引擎:内容寻址的证据账本与密封版本 | |
| dsh-score | 面向 DeepSeek Harness 插件的多维度质量评分。 | |
| dsh-session-pin | 在 Web 侧边栏中固定会话,并保持持久排序 | |
| dsh-session-sync | 面向 DeepSeek Harness 的跨设备会话同步——你的会话存储的专用 git 镜像。 | |
| dsh-skill-pack-security | 安全审计技能包:密钥扫描、依赖与供应链审查 | |
| dsh-talk | 面向 DeepSeek Harness 的语音优先会话循环:对它说话,听它回答。 | |
| dsh-test-drive | 面向 DeepSeek Harness 插件的隔离式安装与冒烟测试试驾。 | |
| dsh-ticktick | TickTick/滴答清单任务桥接:会话头部面板 + 11 个工具 | |
| dsh-translate | 面向 DeepSeek Harness 的厂商参数转换与确定性 JSON 修复。 | |
| dsh-wechat | 微信 ↔ DSH 桥接(腾讯 iLink 机器人):文本/图片/文件/语音,在聊天中审批 | |
| dsh-autotier | 自动的强/廉价模型层级路由,带确定性风险防护和 /tier 命令 | |
| dsh-catalog | PerryLink 系列的 DSH Desktop Market 标准目录源 | |
| dsh-cert-mcp | 只读 MCP 服务器,暴露认证注册表:等级、快照与五维证据 | |
| dsh-kit | 一条命令安装核心系列的入门包 | |
| dsh-plugin-certification | 社区认证注册表,带可复现检查的等级与徽章 | |
| dsh-plugin-kit | 面向 PerryLink DSH 插件的共享零运行时依赖工具包 | |
| dsh-plugin-portal | 将整个插件系列渲染为单个页面的零依赖静态门户 | |
| dsh-plugin-upgrade-015 | 合并了 0.1.3-alpha.1 → 0.1.5-rc.1 升级通道卡片,外加一个零依赖接缝扫描器 | |
| dsh-team-rooms | 跨会话团队房间:共享消息总线、任务板和时间线 | |
从 DSH Desktop Market 安装
所有 PerryLink 插件均可在内置的 DSH Desktop Market 中浏览:Market → Sources → add source → 粘贴 https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → 选择它。安装仍需通过 Market 的 npm 身份验证以及你的确认。
许可证
Apache License 2.0 © 2026 dsh-permission-rules contributors扫码进群