dsh-plugin-guardian
Verified@chenlipingjian-alt/dsh-plugin-guardian · v0.1.0 · Apache-2.0
Searches community DSH plugins, audits each pinned commit against a fixed security checklist, installs only approved candidates, and verifies the result with evidence, for DeepSeek Harness.
Install
dsh plugin add @chenlipingjian-alt/dsh-plugin-guardian Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
Plugin Guardian
简体中文 | English
一句话:给 DSH 装上"插件采购员 + 安检员"——按需求搜候选、对固定 commit 逐项排雷、只在批准后安装、装完逐项核验,每一步都给出可核对的证据。
功能
- 搜索有边界:只在 GitHub
topic:dsh-plugin内按关键词搜索,一次最多 3 个候选;命中总数多于返回数时明确标注truncated: true,绝不把切片当成全集。每个候选带 repo 全名、描述、stars、最后 push、默认分支、HEAD commit SHA 与来源 URL。 - 排查有清单:对锁定 commit 执行固定的十项检查——来源与可疑抢注、许可证、维护状态、依赖漏洞(OSV 实时查询)、安装期脚本(逐字原文引用)、权限与能力(shell/eval/文件写入/凭证读取)、数据外传域名、代码混淆与二进制、commit 可固定性、DSH 引擎与 bundle 兼容性。每项都给出
文件:行号或 API URL。 - 判定有闸门:结论为「推荐 / 谨慎 / 拒绝」。出现凭证读取、可疑外传、混淆代码、提权等红线直接判「拒绝」,此后任何安装调用都会被拒绝。
- 安装有授权:先输出安装预览(候选、commit、审计摘要、命令、预计变更)并发放一次性令牌;真正安装必须同时提供该令牌、同一个
auditId与同一个 commit SHA。工具永不批准安装期脚本,需要构建脚本的包会失败并保持失败,不重试、不提权、不绕过。 - 校核有证据:装完检查六项——依赖完整性、来源与审计 commit 是否一致、配置层是否挂载、插件是否真正激活、可选的功能冒烟、实际权限是否超出声明。任一项失败即
ok: false,并给出失败证据。
安装
环境要求:DeepSeek Harness 版本满足 0.2.1-rc.3。本插件为 host-only bundle,可在任意 profile 中使用(已在 desktop 验证)。
从 GitHub 安装
固定到某个 Release tag:
dsh plugin --profile desktop add github:local/dsh-plugin-guardian#v0.1.0
安装后重启 DSH(桌面版请重启应用),刷新页面。命令会装到你平时使用的 DSH;如果你设置了自己的 DSH_HOME,请在同一个环境中运行。
本地目录安装
dsh plugin --profile desktop add /绝对路径/dsh-plugin-guardian
从源码安装用于开发调试,见 docs/development.md。
使用
四个工具构成一条链路,按顺序调用即可;也可以只调用其中一步。
- 用一句话说明需求,例如"我想要一个能在会话里显示插件市场的插件"。
- Agent 调用
guardian_search,得到不超过 3 个候选(带 HEAD SHA)。 - Agent 对候选调用
guardian_audit,得到十项清单、auditId与锁定的installSpec。- 结论「拒绝」→ 到此为止,只报告失败项与证据。
- 决定安装时,Agent 先用
guardian_install的dryRun: true拿到预览与令牌,把候选、commit、审计摘要、命令、预计变更展示给你。 - 你明确批准后,Agent 才用同一个
auditId、同一个 commit SHA 和该令牌执行安装。 - Agent 调用
guardian_verify逐项校核;提供smokeTool时可再做一次功能冒烟(请给临时数据)。
配置
| 键 | 默认值 | 说明 |
|---|---|---|
enabled |
true |
启用插件。 |
githubToken |
"" |
可选 GitHub token;留空则读取环境变量 GITHUB_TOKEN。 |
maxCandidates |
3 |
单次搜索返回的候选上限,规范上限为 3。 |
downloadTimeoutSeconds |
120 |
固定 commit 归档的下载期限;超时即标 download_truncated + audit_incomplete,不给通过结论。 |
installSource |
github |
审计时假定的安装来源:github(源码直装)或 npm(发布包)。决定 prepare 是否算安装期脚本。 |
归档下载器尊重 HTTPS_PROXY / HTTP_PROXY(含 https_proxy / http_proxy 小写形式,支持 user:pass@),因为 Node 的全局 fetch 不读这些变量;GitHub API 与 OSV 仍走 fetch。
配置保存在 profile 的 cordis.patch.yml(bundle 默认值在安装包的 cordis.patch.yml 中)。githubToken 以明文保存在该文件里;未认证时 GitHub 每小时仅 60 次 API 调用,搜索 3 个候选约用 4 次。
审计与安装记录写入 $DSH_HOME/guardian/ledger.json(默认 ~/.dsh/guardian/ledger.json),用于把审批令牌绑定到"某个 commit + 某次判定"。
更新、回滚与卸载
版本变更与升级说明见 更新日志。
更新或回滚时请写明版本号,然后重启 DSH(新版本发布后 24 小时内,不带版本号的安装命令可能仍会装到旧版本):
dsh plugin --profile desktop add github:local/dsh-plugin-guardian#vX.Y.Z
卸载:
dsh plugin --profile desktop remove @chenlipingjian-alt/dsh-plugin-guardian
卸载后不留下任何运行时数据;如需清除审计记录,可手动删除 ~/.dsh/guardian/ledger.json。
隐私与数据
- 本插件不出站任何遥测。联网目的地只有:
api.github.com(搜索、仓库元数据、tags)、codeload.github.com(下载锁定 commit 的归档用于内存扫描)、api.osv.dev(依赖漏洞查询)。 - 审计时归档只解压到内存,不落盘、不执行;代码只做文本匹配。
- 不读取
~/.ssh、~/.aws、.npmrc、id_rsa等凭证文件,也不读取任何密钥型环境变量(只有可选的GITHUB_TOKEN用于提高 API 配额)。 - 本地写入只有
$DSH_HOME/guardian/ledger.json。
兼容性
见 docs/compatibility.md。已知限制:dsh --profile desktop --dump-config 因 profile 由 Electron 应用独占管理而不可用,校核改用运行中的 plugin manager 视图,并在报告中注明。
开发
见 docs/development.md 与 CONTRIBUTING.md。使用 AI agent 开发、发布或维护时,让它先读 AGENTS.md。
pnpm install
pnpm verify # typecheck + build + tests + package check