dsh-tailnet-admin

DSH PLUGIN浏览器与联网

仓库 he0119/dsh-tailnet-admin

浏览器与联网 L4 · 沙盒安装通过 安全审查:低风险 可信度:银 可安装插件
安装这个插件

让 DSH 在 Tailnet 或反向代理域名下也能正常使用:把指定页面主机按「本机」处理以启用设置页持久化,并可选择性关闭浏览器会话校验。

一句话选型结论

按资料字段整理

dsh-tailnet-admin 是浏览器与联网类的 DSH 可安装插件,验证等级 L4 · 沙盒安装通过,安全审查为低风险,列出 5 项功能,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类浏览器与联网 收录类型可安装插件 验证等级L4 · 沙盒安装通过 安全审查低风险
验证等级 L4 L4 · 沙盒安装通过
GitHub 星标 1 复刻 0 · 未关闭 issue 0
最近更新 2026-10-10 创建于 2026-09-30
README 8.9 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add @he0119/dsh-tailnet-admin@0.1.0
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-tailnet-admin:让 DeepSeek Harness 在 Tailnet 域名下也能用设置页

  • 非回环域名下启用设置页
  • 按后缀或通配匹配页面主机
  • 可选关闭浏览器会话校验
  • 环境变量优先于配置
  • 保留 Host/Origin 栅栏

适用场景

存储

上游标签

deepseek-harnessdshdsh-pluginreverse-proxytailnettailscale

验证等级与安全审查

L4 · 沙盒安装通过
自动化流程结论,不是人工审核
验证等级L4 · 沙盒安装通过安装命令在隔离沙盒内真实执行成功,无依赖错误
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度银综合仓库活跃度与验证结果

上面的结论来自上游最近一次自动化验证(2026-10-08): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
L5 · 运行已测 ✕ 未通过
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 插件目录树加载失败
  • L5.3_HTTP_SERVED HTTP 服务响应

风险详情

  • 审查结论 通过
  • 结论说明 vet 静态分析未发现可疑行为,判定为干净(clean)。
  • 风险计数 严重 0 / 高 0 / 中 0
  • 风险详情 未发现严重或警告级问题。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L4:在沙盒里真实装过,依赖能装上,不是纸面声明。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。
  • 列出了 5 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在浏览器与联网场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-tailnet-admin当前 L4 · 沙盒安装通过 低风险 1 未标注 有
dsh-our-free-model L3 · 安装规范通过 低风险 8,796 未标注 有
dsh-web L3 · 安装规范通过 低风险 8,549 未标注 无
BrowserSkill L4 · 沙盒安装通过 低风险 8,456 未标注 有
dsh-pocket L5 · 运行验证通过 低风险 1,656 0.2.0-rc.2 等 12 个 有
Browser4 L4 · 沙盒安装通过 中风险 1,152 未标注 有

仓库档案

浏览器与联网
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方he0119仓库 dsh-tailnet-admin · 默认分支 main
分类浏览器与联网network
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言TypeScript仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue1 / 0 / 0收录时的数值,非实时
创建 / 更新2026-09-30 · 2026-10-10最后推送 2026-10-10
本站收录2026-10-02首次进入本站目录的时间

README 全文

8.9 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-tailnet-admin

把 Tailnet / 反向代理页面当作「本机」来用:让 DSH 的设置页在非回环地址上可用,并按需关掉浏览器会话校验
(Host/Origin 栅栏保持不动)。

> ⚠️ 这个插件会动到认证边界:两个开关默认都关着,装上去不改变任何行为。打开第二个之前,请先读
> 安全边界。

它解决什么

从 https://dsh.example.ts.net(任何 Tailnet 服务名或反向代理域名)打开 DSH 时会撞上两件独立的事:

① 设置页用不了:模型与提供商目录、凭据、配置文件编辑器报
settings are unavailable in this browser。原因是 DSH 的浏览器端只把两种情况当作「本机」——由桌面壳
注入的 globalThis.__DSH_TRANSPORT__ = { ownsHost: true },或页面自身的 location.hostname 属于回环
(localhost / 127.0.0.0/8 / [::1])。域名进来的页面两者都不满足,于是设置走「进程内」持久化并直接
报不可用。这条判定在浏览器端,服务端的 --trusted-host 管不到它。

② 每次重启都要重新换 token:宿主的 /api 判定是「Host/Origin 栅栏 + 浏览器会话认证」两层。认证那层
要一个由 ?token= 换来的、按 authority 绑定的 cookie;token 每次启动都重新生成,cookie 换地址即失效。

插件把这两件事拆成两个独立开关:pageHosts 解决 ①,disableBrowserAuth 解决 ②。为什么这么默认、
代价是什么,见 .agents/notes/implemented/(中文)。

安装

前提:Node ^22.19.0 || >=24.0.0(与官方 DSH 一致)。

1. 装包

npx @deepseek-ai/dsh plugin --profile web add @he0119/dsh-tailnet-admin

发布产物里带着编译好的 lib/,安装时不需要授权任何构建脚本。本地改代码时直接装仓库目录(先
pnpm run build):

npx @deepseek-ai/dsh plugin --profile web add link:/path/to/dsh-tailnet-admin

2. 注册为 bundle

dsh plugin add 只做 pnpm add。DSH 启动时只读 profile 清单里的 dsh.profile.bundles,所以还要把
包名加进去:

// ~/.dsh/profiles/web/package.json
"dsh": {
"profile": {
"bundles": [
// …
"@he0119/dsh-tailnet-admin"
]
}
}

用图形界面也行:设置 → 插件里会列出「已安装但未启用」的包,启用一次做的是同一件事。

改完重启 DSH(systemd 部署的话:systemctl --user restart dsh-web)。启动日志里会出现
[dsh-tailnet-admin] … 那两行,说明插件到位了。

3. 打开开关(配置页)

设置 → 插件 → dsh-tailnet-admin:本插件那张包页的描述下面就是配置表单,两个开关都在那儿。

  • 按「本机」处理的页面主机:一行一条。. 开头 = 后缀匹配(.ts.net 命中 a.ts.net,不命中裸
    ts.net),也可以写精确主机名,或写 * 命中全部。
  • 关闭浏览器会话校验:开关,默认关;打开前先读安全边界。

改完点保存。disableBrowserAuth 立刻生效,pageHosts 在下一次打开页面时生效(刷新一次即可),
两者都不需要重启 DSH。

> 第一次要绕个弯:pageHosts 还没命中当前页面的主机名时,浏览器端不把这些设置当作可持久化(原因见
> 它解决什么),配置页会明说「只写进这个浏览器」。所以第一个主机要么从回环地址打开
> DSH
(http://localhost:3080 这种)在配置页里填,要么直接写 profile 的 cordis.patch.yml:

# ~/.dsh/profiles/web/cordis.patch.yml
- id: tailnet-admin            # 这一行的 id 是本插件的固定约定:配置页按它取这一段设置,别改
name: '@he0119/dsh-tailnet-admin'
config:
pageHosts:
- .ts.net              # 也可以写精确主机名,或 `*`
disableBrowserAuth: true # 默认 false;打开前先读「安全边界」

开关

开关 默认 作用
pageHosts [] 哪些页面主机按「本机」处理。. 开头 = 后缀匹配;* = 全部
disableBrowserAuth false 是否关闭浏览器会话校验(token/cookie)

两处写的是同一份配置:插件配置页(设置 → 插件 → dsh-tailnet-admin)保存时落到的就是 profile 里
cordis.patch.yml 那一行的 config;手工写文件与在页面上改完全等价,没有优先级之分。

  • 规则表一行一条;配置页里也认逗号,从本文档抄一行过去不用改。
  • 命不中的写法(*.ts.net、带协议或端口、带空格)在配置页里当场挡住保存:注入脚本只认 *、. 开头的
    后缀、精确主机名这三种,其余写进去只会静默不生效。
  • 布尔量只认真正的布尔(YAML 的 true / false)。写成 'true' 这类字符串会被 Loader 拒绝加载,
    而不是变成一个「打开」——一个手滑不该变成关掉认证。

systemd 部署只负责栅栏那一层,两个开关不走环境变量(见
.agents/notes/implemented/ 里的那条决策):

[Service]
ExecStart=%h/.npm/_npx//node_modules/.bin/dsh web --host 127.0.0.1 --port 3080 \
--trusted-host dsh.example.ts.net --public-url https://dsh.example.ts.net/ --no-open

> --trusted-host(或 profile 里 connection 插件的 trustedHosts)是另一条独立要求:/api 的
> Host/Origin 栅栏只认回环或声明过的 authority。只开本插件的开关、不给 --trusted-host,请求会在栅栏
> 那一步就被 403 掉。
>
> --public-url(DSH 0.2.1-alpha.1 起)是纯广告位:它只改 DSH 报出去的地址 —— 打印与打开的启动
> URL、DSH_WEB_URL、给模型的方位提示;不配置监听、路由或 cookie 作用域,也不放宽信任,所以替不掉
> 本插件的任何一个开关。它的用处是让 ?token= 换 cookie 落在你真正使用的 authority 上,不必再手工把
> token 搬到对外地址。

安全边界(必读)

disableBrowserAuth: true 关掉的是「谁可以进这个界面」的认证。打开之后:

  • 任何能打开这个页面的人就等于拿到这台机器的控制权 —— 读写文件、执行命令、动用你在 DSH 里配置的
    API key。暴露面取决于 Tailscale ACL / 反向代理的访问控制,不再取决于 token。
  • 保留下来的是 Host/Origin 栅栏:只认回环 Host 或 --trusted-host / trustedHosts 声明过的
    authority,并拒绝 Sec-Fetch-Site: cross-site。它挡的是 DNS 重绑定与跨站请求,不挡「知道地址的人」。
  • 反过来,pageHosts 只影响浏览器端的设置持久化与界面可用性,它不改变服务端的任何判定。

建议的组合:pageHosts 按需开,disableBrowserAuth 只在真的被 token 反复打断时开;开了就顺手确认一下
Tailscale ACL 只放行你自己的设备。想撤回:在配置页把开关关掉(或把 cordis.patch.yml 里那两行改回去)
即可 —— disableBrowserAuth 立刻恢复,pageHosts 下一次打开页面时恢复,没有任何状态需要清理。

排障

现象 原因
设置页仍报 settings are unavailable in this browser pageHosts 没命中当前页面的主机名(后缀匹配要带点:.ts.net),或改完还没刷新页面
请求直接 403 Host/Origin 栅栏没过:给 dsh web 加 --trusted-host
仍然要 ?token= disableBrowserAuth 没开(配置页里那个开关是关着的状态)
启动日志里没有 [dsh-tailnet-admin] 包名没写进 dsh.profile.bundles,或包没装上(dsh --profile web --dump-config \| grep tailnet-admin 可确认)
配置页说「只写进这个浏览器」、保存后 profile 没变 当前页面没被当作「本机」:先从回环地址打开一次,或直接改 cordis.patch.yml
配置页整段说「读不到这一节」 cordis.patch.yml 里那一行的 id 不是 tailnet-admin,或者那一行没被启用

开发

构建、测试、以及「装进一个专用 profile 再看页面」的手动路径写在
docs/development.md;为什么这么实现、踩过什么坑在
docs/internals.md;发布流程(含首版为什么必须手动发)在
docs/releasing.md。

pnpm install     # 会顺带跑 prepare,也就是一次完整构建
pnpm test        # 单元测试(离线)
pnpm run typecheck
pnpm run build

License

MIT

常见问题

7 问
答案由本站依据条目字段整理,不引用上游原文
dsh-tailnet-admin 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add @he0119/dsh-tailnet-admin@0.1.0` 即可。

dsh-tailnet-admin 的验证等级是什么意思?

L4 · 沙盒安装通过。安装命令在隔离沙盒内真实执行成功,无依赖错误

dsh-tailnet-admin 安全吗?

低风险。vet 静态分析未发现可疑行为,判定为干净(clean)。

dsh-tailnet-admin 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-tailnet-admin 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dsh-tailnet-admin 有哪些功能?

非回环域名下启用设置页、按后缀或通配匹配页面主机、可选关闭浏览器会话校验、环境变量优先于配置、保留 Host/Origin 栅栏。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

浏览器与联网
按星标排序,可作替代方案

dsh-our-free-model

dsh-our-free-model

在 DeepSeek Harness 中装上这个 DSH plugin,无需登录、注册或填 API Key,即可直接调用 DeepSeek

L3 · 安装规范通过 8,796 星

dsh-web

dsh-web

侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。

L3 · 安装规范通过 8,549 星

BrowserSkill

BrowserSkill

BrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edg

L4 · 沙盒安装通过 8,456 星

dsh-pocket

dsh-pocket

DSH Pocket 让 DeepSeek Harness 装进口袋:电脑跑 dsh web,手机扫码即实时同步访问(局域网+公网),人在外

L5 · 运行验证通过 1,656 星

Browser4

Browser4

L4 · 沙盒安装通过 1,152 星

agentrq

agentrq

L4 · 沙盒安装通过 1,140 星

he0119 的其它插件

2 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 2026-10-08。