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

内网访问认证 henlii/dsh-plugins

DeepSeek Harnessv0.1.2
henlii14 天前有提交已提供中文文档扫描:含敏感能力

面向 DeepSeek Harness 的插件集合。

38.8/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/22 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add henlii/dsh-plugins
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-plugins @ 0.1.2
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 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 });
扫描于 2026/11/3(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-atomic-write
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 局域网访问密码认证
  • 批量安装插件
展开完整介绍(128 字)↓

DSH 插件合集:为 dsh web 的局域网/Tailscale 访问提供密码认证 + 信任(dsh-web-auth)等。用「dsh plugin --profile web add」逐个安装,或通过根目录 cordis.patch.yml 一次装齐。

README

由 DeepSeek 最新模型翻译生成
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(推荐)
展开完整文档(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
预览分享卡片长什么样 ↓henlii/dsh-plugins
分享 · DeepSeek Harness Hub
henlii/dsh-plugins

面向 DeepSeek Harness 的插件集合。

这是你的仓库?认领条目

回到顶部