面向 DeepSeek Harness 的插件集合。
数据截至 2026/10/22 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
dsh plugin --profile web add henlii/dsh-plugins状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 03:45:10
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
查看扫描证据(共 62 处,展示前 48 条)
- 发起网络请求plugins/dsh-update/src/client.js:95
const res = await fetch(`${ROUTE}${path}`, { - 发起网络请求plugins/dsh-update/src/client.js:106
const res = await fetch(`${ROUTE}${path}`, { method: "GET", credentials: "same-origin" }); - 读取本地文件plugins/dsh-update/src/index.js:92
const raw = readFileSync(file, "utf8").replace(/^ FEFF/, ""); - 写入本地文件plugins/dsh-update/src/index.js:104
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件plugins/dsh-update/src/index.js:106
writeFileSync(tmp, `${JSON.stringify(value, null, 2)}\n`, "utf8"); - 写入本地文件plugins/dsh-update/src/index.js:107
renameSync(tmp, file); - 发起网络请求plugins/dsh-update/src/index.js:194
const res = await fetch(url, { - 读取本地文件plugins/dsh-update/src/index.js:324
if (existsSync(join(nodeDir, "..", "lib", "node_modules", PACKAGE_NAME, "package.json"))) { - 读取本地文件plugins/dsh-update/src/index.js:353
if (existsSync(cli)) return { argv: [process.execPath], cliJs: cli, display: `node ${cli}` }; - 读取本地文件plugins/dsh-update/src/index.js:356
if (existsSync(sibling)) return { argv: [process.execPath], cliJs: sibling, display: `node ${sibling}` }; - 执行外部命令来自配置/变量plugins/dsh-update/src/index.js:366
const out = execFileSync(probe, [name], { encoding: "utf8", timeout: 10000, stdio: ["ignore", "pipe", "ignore"] }) - 执行外部命令来自配置/变量plugins/dsh-update/src/index.js:448
const out = execFileSync(bin.argv[0], [...args, ...tail], { - 读取本地文件plugins/dsh-update/src/index.js:479
if (existsSync(join(container, "pnpm-lock.yaml")) && /(^|[ /])global([ /]|$)/.test(container)) { - 读取本地文件plugins/dsh-update/src/index.js:541
if (existsSync(join(dir, "pnpm-workspace.yaml")) && existsSync(join(dir, ".git"))) return dir; - 执行外部命令来自配置/变量plugins/dsh-update/src/index.js:619
const out = execFileSync(resolved.argv[0], [...args, "config", "get", "registry"], { - 执行外部命令来自配置/变量plugins/dsh-update/src/index.js:975
child = spawn(argv[0], argv.slice(1), { - 删除本地文件递归plugins/dsh-update/src/index.js:1154
rmSync(previous, { recursive: true, force: true }); - 写入本地文件plugins/dsh-update/src/index.js:1160
renameSync(live, previous); - 写入本地文件plugins/dsh-update/src/index.js:1165
renameSync(stagedRoot, live); - 写入本地文件plugins/dsh-update/src/index.js:1169
renameSync(previous, live); - 删除本地文件递归plugins/dsh-update/src/index.js:1217
rmSync(staging, { recursive: true, force: true }); - 执行外部命令固定命令plugins/dsh-update/src/index.js:1273
const pid = execFileSync("systemctl", ["--user", "show", "-p", "MainPID", "--value", unit], { - 执行外部命令来自配置/变量plugins/dsh-update/src/index.js:1294
const child = spawn(argv[0], argv.slice(1), { - 删除本地文件递归plugins/dsh-update/src/index.js:1412
rmSync(dir, { recursive: true, force: true }); - 发起网络请求plugins/dsh-web-auth/src/client.js:617
fetch("/api/dsh-web-auth/settings-document", { credentials: "same-origin" }) - 发起网络请求plugins/dsh-web-auth/src/client.js:640
fetch("/api/dsh-web-auth/settings-document/write", { - 写入剪贴板plugins/dsh-web-auth/src/client.js:658
navigator.clipboard.writeText(doc.content).then(done).catch(() => fallbackCopy(doc.content, done)); - 发起网络请求plugins/dsh-web-auth/src/client.js:707
return fetch(ACCESS_ENDPOINT, { credentials: "same-origin", cache: "no-store" }) - 发起网络请求plugins/dsh-web-auth/src/client.js:735
fetch(ACCESS_ENDPOINT, { - 写入剪贴板plugins/dsh-web-auth/src/client.js:759
navigator.clipboard.writeText(url).then( - 发起网络请求plugins/dsh-web-auth/src/client.js:820
return fetch("/api/auth/status", { credentials: "same-origin" }) - 发起网络请求plugins/dsh-web-auth/src/client.js:830
return fetch("/api/auth/sessions", { credentials: "same-origin" }) - 读取本地文件plugins/dsh-web-auth/src/index.js:418
const raw = readFileSync(passwordFile, "utf8").trim(); - 读取本地文件plugins/dsh-web-auth/src/index.js:432
const raw = readFileSync(tokenFile, "utf8"); - 写入本地文件plugins/dsh-web-auth/src/index.js:452
mkdirSync(dirname(tokenFile), { recursive: true }); - 写入本地文件plugins/dsh-web-auth/src/index.js:453
writeFileSync(tokenFile, JSON.stringify(obj), { mode: 0o600 }); - 写入本地文件plugins/dsh-web-auth/src/index.js:622
mkdirSync(dirname(passwordFile), { recursive: true }); - 写入本地文件plugins/dsh-web-auth/src/index.js:623
writeFileSync(passwordFile, `${next}\n`, { mode: 0o600 }); - 读取本地文件plugins/dsh-web-auth/src/index.js:948
const raw = readFileSync(clientPath, "utf8"); - 读取本地文件plugins/dsh-web-auth/src/index.js:1095
content = readFileSync(path, "utf8"); - 读取本地文件plugins/dsh-web-auth/src/proxy.js:52
const value = readFileSync(file); - 写入本地文件plugins/dsh-web-auth/src/proxy.js:58
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件plugins/dsh-web-auth/src/proxy.js:59
writeFileSync(file, secret, { mode: 0o600 }); - 读取密钥环境变量plugins/dsh-web-mobile/src/index.js:49
const fromEnv = process.env.DSH_MOBILE_PASSWORD; - 读取本地文件plugins/dsh-web-mobile/src/index.js:54
const value = readFileSync(file, "utf8").trim(); - 读取本地文件plugins/dsh-web-mobile/src/proxy.js:52
const value = readFileSync(file); - 写入本地文件plugins/dsh-web-mobile/src/proxy.js:58
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件plugins/dsh-web-mobile/src/proxy.js:59
writeFileSync(file, secret, { mode: 0o600 });
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
@deepseek-ai/dsh-atomic-write给这个插件打分还没有人投票↓
功能亮点
- 局域网访问密码认证
- 批量安装插件
展开完整介绍(128 字)↓
DSH 插件合集:为 dsh web 的局域网/Tailscale 访问提供密码认证 + 信任(dsh-web-auth)等。用「dsh plugin --profile web add」逐个安装,或通过根目录 cordis.patch.yml 一次装齐。
README
由 DeepSeek 最新模型翻译生成展开完整文档(README 剩余 1 节)
dsh-plugins DeepSeek Harness (dsh) 插件集合 — 插件以独立 npm 包发布,自带给 profile 的挂载层,官方 CLI 一条命令装好即用。 简介 面向 DeepSeek Harness 的插件集合。 每个插件都是独立的 npm 包(纯 cordis 插件形态,0811 官方规范),包内自带 dsh.bundle.patch 挂载层,装完自动挂上,无需手改 profile。 插件目录 | 插件 | 功能 | | dsh-web-auth | 内网 / LAN / Tailscale 访问的密码认证 + 信任:非回环 /api 与 WebSocket 需密码登录,认证后设置、凭据等特权页在内网可用;插件页与设置内的 tab 页可改绑定地址 / 端口 | | dsh-web-mobile | 手机端 UI:去掉常驻细轨,左右侧栏改覆盖层抽屉,设置改成两级页(列表 → 详情),处理安全区、16px 输入框,并按手机可视高度与软键盘校正布局;桌面布局不变 | | dsh-update | dsh 更新器:检查 npm dist-tags 与 GitHub release 两个来源、浏览并检索版本历史、升级到通道最新版或指定版本,升级与重启服务为两个独立按钮 | 安装 官方 CLI(推荐) dsh plugin --profile web add /path/to/dsh-plugins/plugins/<name> 或从 npm dsh plugin --profile web add <包名> CLI 会把包加进 profile 的 dsh.profile.bundles,启动时自动合并包内的 patch 层,插件随之出现在「插件」页的「已安装」里。部署自己的配置在 $DSH_HOME/profiles/web/cordis.patch.yml 里按行 id 覆盖,配置 HMR 实时生效(详见各插件 README)。 集合 patch(手动挂) dsh web --patch /path/to/dsh-plugins/cordis.patch.yml 或把 cordis.patch.yml 的内容并入 profile 的 $DSH_HOME/profiles/web/cordis.patch.yml。 两种方式二选一:包已经进了 dsh.profile.bundles,再用集合 patch 的 insert 行挂一次,就是同一个插件装两遍,插件树会因重复注册启动失败。 插件依赖的 @deepseek-ai/* / cordis 由 dsh 官方运行时经 profile 的 pnpm 闭包注入,不要在插件 package.json 里声明这些依赖(官方未发布到公共 npm,声明反而解析失败)。 例外是工具类包(如 @deepseek-ai/dsh-atomic-write):它不作为服务注入,可以正常声明。 平台兼容 - Linux / macOS / Windows:路径经 node:path / homedir / XDG / %APPDATA% 解析,无 /root 等硬编码; - dsh-desktop:插件作为普通 dsh 插件在桌面壳内照常工作。 仓库结构 dsh-plugins/ ├── cordis.patch.yml # 手动挂法(insert 行);与 CLI 安装二选一 ├── docs/ │ ├── INSTALL.md # 安装指南 │ └── CONTRIBUTING.md # 新增插件规范 ├── examples/ # 各插件独立安装示例 └── plugins/ └── <name>/ # 每个插件 = 独立 npm 包 ├── package.json # main/exports + dsh.bundle / dsh.client 声明 ├── cordis.patch.yml # bundle 挂载层(insert 自己那一行) ├── src/index.js # Node half(cordis entry) ├── src/client.js # Client half(__ModuleLoader__.load;纯客户端插件可省) └── README.md # 该插件文档 开发 / 新增插件 新增插件遵循官方 0811 插件规范(纯 cordis 或 bundle 形态),详见 docs/CONTRIBUTING.md 与官方 make-dsh-plugin 引导。 License MIT © 2026 Henry Li
预览分享卡片长什么样 ↓
面向 DeepSeek Harness 的插件集合。
相关插件 · 市场 / 管理
这是你的仓库?认领条目