🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

nonmean/dsh-lan-access

DeepSeek Harnessspec-screened扫描:中风险在 GitHub 查看 ↗
⚠ 装前注意

一个 DeepSeek Harness Web 插件,为 DSH 设置外壳设置 → 通用添加一个 LAN 访问…

基本兼容但装前注意:npm 同名包「dsh-lan-access」归属 leon0555/dsh-lan-access,装到的可能不是本插件 · 最近上游提交 2026/9/23 · 已提供中文文档

为 DeepSeek Harness 添加局域网访问的 Web 插件

综合分
36.4
GitHub 分
36.4
用户评分
—
★ Stars
2
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add nonmean/dsh-lan-access
npm 同名包「dsh-lan-access」归属 leon0555/dsh-lan-access,装到的可能不是本插件,改用 GitHub 源安装
信任档位:已验证本站已于 4 天前真实安装成功(L4 · 真实安装)
是什么
dsh 原生插件 · tool
装得上吗
本站已真实安装成功(L4 · 真实安装,非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 3 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/21
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/24(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查⚠ 装前注意

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

✓npm 包dsh-lan-access @ 0.1.3
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

npm 同名包「dsh-lan-access」归属 leon0555/dsh-lan-access,装到的可能不是本插件

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/21 08:58:20

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-credentials@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-settings@deepseek-ai/schemastery
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
dsh-lan-access

一个 DeepSeek Harness Web 插件,为 DSH 设置外壳(设置 → 通用)添加一个 LAN 访问 开关。它取代了手动修改 cordis.patch.yml 的 webserver 覆盖方式:

已在 DeepSeek Harness v0.1.7-alpha.2 上测试 —— 本插件已验证可在该 harness 版本上运行。

- 开启 —— Web GUI 绑定到 0.0.0.0,因此同一网络中的其他机器可以通过 http://:3080/?token=… 打开它。dsh web 启动时会为 LAN 地址打印完整 URL(带有每进程的 ?token= 启动令牌)—— 新的 LAN 浏览器需要在 URL 中带上该令牌才能通过认证。/api 信任围栏会实时更新,因此 LAN 机器上的浏览器可以完整使用(聊天、工具、工作区)。
- 关闭 —— GUI 重新绑定到 127.0.0.1(仅回环 —— 安全默认值)。

截图

从同一网络中的另一台机器打开的 DSH Web GUI
(http://192.168.0.101:3080):

通过 LAN 打开的 DSH Web GUI

设置 → 通用中的 LAN 访问 开关,显示其他设备可以打开的地址:

设置 → 通用 LAN 访问开关

工作原理

| 部分 | 文件 | 作用 |
| --- | --- | --- |
| 宿主 | src/index.ts | 拥有插件本地的持久化标志($DSH_HOME/lan-access.json)、受围栏保护的 /lan-access JSON 路由(GET 获取状态 / POST 设置状态)、绑定控制器,以及 lanAccess 绑定宿主服务。webserver 行中组合出的 host 表达式会读取该服务,因此每次 webserver(重新)启动 —— 启动、切换开关,或启动后重新应用用户补丁 —— 都会收敛到持久化的设置。仅当绑定不同时,切换开关才会重启 webserver fiber,使用 fiber.update(config, noSave):no-save 路径会避免将组合后的树写入 cordis.yml,否则会触发 HMR 子树重载。 |
| 客户端 | src/client/ | 注册通用设置行(settings.general.item,顺序 15),带有原生复选框开关、LAN URL(主地址在前,显示所有活动网卡地址,复制按钮)、中英文文案,以及可容忍重启的轮询。 |

路由围栏接受回环地址或部署的可信授权方,这些信息从连接行解析后的配置中实时读取 —— 与 /api 网关使用相同的边界。跨站请求会被拒绝。

从 GitHub 安装

构建产物(lib/)已提交,因此安装无需构建步骤,也无需修改 DeepSeek Harness 检出目录:

从 GitHub 安装
dsh plugin --profile web add git+https://github.com/nonmean/dsh-lan-access.git

...或者克隆并安装本地检出(link: 可让你的重新构建保持生效)
git clone https://github.com/nonmean/dsh-lan-access.git
dsh plugin --profile web add link:/path/to/dsh-lan-access

重启 GUI
dsh web

安装会将 dsh-lan-access 追加到 dsh.profile.bundles;其
dsh.bundle.patch 会插入宿主行,并覆盖 webserver 行的
带有 lanAccess 服务表达式的 host。客户端那一半由 client-modules 扫描器自动拾取。核心功能无需修改 harness——开关、LAN 绑定以及实时的 /api 信任围栏都随插件一起发布。

本地开发——修改 src/ 后使用 pnpm build(或 npm run build)重新构建,然后重新安装/重启。仓库的 node_modules 镜像了 DSH profile 的包农场(TypeScript/tsdown 来自 harness 检出)。

从手动补丁迁移——从 profile 的 cordis.patch.yml(以及 bundle 补丁层)中移除任何 webserver 的 host: 0.0.0.0 覆盖,使插件成为绑定主机的唯一所有者。

使用

1. 打开 GUI,进入 Settings(侧边栏页脚)→ General。
2. 切换 局域网访问 / LAN access。
- 启用后会显示其他设备可以打开的唯一地址——拥有默认路由的接口的 IPv4(http://192.168.x.x:3080)——并带有一个复制按钮。
- 从另一台机器打开时,该地址必须包含浏览器会话的 ?token=…。dsh web 在启动时会打印回环地址和 LAN 地址的完整 URL(含 token)——复制 LAN 那个,例如 http://192.168.0.101:3080/?token=ICKD2317KYP…。该 token 是每进程的启动 token,用于换取会话 cookie;全新的 LAN 浏览器没有它就无法通过认证。
- Web 服务器会重启以重新绑定;该行会等待它完成并重新读取状态(重启过程中的网络错误不会被报告为失败)。
- 该插件还会在纯 HTTP 的 LAN 源上安装一个 crypto.randomUUID polyfill(该 Web API 仅存在于安全上下文中,而 DSH API 客户端用它来生成每个 RPC id——没有该 polyfill,远程浏览器会失败并报错 "crypto.randomUUID is not a function")。
3. 该选择由插件持久化在 $DSH_HOME/lan-access.json 中(默认是 ~/.dsh/lan-access.json):

{
"enabled": true
}

从 0.1.x 升级

完整升级需要两半(host + client)以及一次 dsh web 重启。host 那一半现在拥有自己的持久化,因此不再使用 harness 设置命名空间:

- 开关值已移至 $DSH_HOME/lan-access.json。~/.dsh/settings.yaml.imported 中旧的 lan-access: 部分不会被读取;升级后请切换一次开关。
- 重新安装(或重新构建 lib/),使 host 和 client 两半匹配;客户端 bundle 会一直缓存到下一次 dsh web。

远程 Settings 页面和工作区——无需修改 harness

插件所提供的一切都能从 LAN 浏览器正常工作,且对 DSH 检出零修改:

- 当前的 /api 网关信任所服务的 LAN 权威,因此配置平面(settings.、credentials.)可直接到达 host——Host/Origin 围栏允许 LAN 主机,而普通的浏览器会话认证会对其进行认证。Models 页面提供商目录,
插件配置卡片以及 Language/Appearance 行因此可以远程工作,无需额外跳转。
- 在非回环源上,客户端设置持久化会降级为内存模式(界面渲染为空)。浏览器 bundle 在运行时将
connection.isLoopback 扩展为“回环或所服务的 LAN 权威”。客户端入口注入 connection 并标记为
dsh.client.immediately,因此其 bundle 会被预取,其 apply 会在 connection 行提供句柄之后立即运行——早于任何设置界面(其等待 remote)读取
remote.$host.isLoopback。正是这种按 inject 顺序进行的扩展,使得在 LAN 页面上作用域保持在主机模式:没有它,早期绑定的界面会看到未打补丁的 isLoopback,其持久化会停留在内存模式——插件配置卡片不会渲染任何内容。
- crypto.randomUUID 在纯 HTTP LAN 源上不存在。 bundle 安装了一个基于 getRandomValues 的 polyfill(相同的 CSPRNG)。

本插件跟踪的 Harness API 变更

Harness 在 v0.1.7-alpha.1 中用基于 profile 的 Config 表单替换了其独立的、基于文件的设置提供程序:

- @deepseek-ai/dsh-settings 移除了 settings.register(ns, schema) /
SettingsScope(以及 dsh-settings-file 包),转而采用
SettingsForms,它投影每个插件条目的易变 Config。设置写入在 HMR 事务内运行(configEditor.edit →
hmr.runExclusive),该事务会协调整个 profile。由于本插件必须重启 Web 服务器才能更改绑定,将开关路由到该平面会在事务内重启服务器并污染其异步上下文。因此,本插件持久化自己的标志
($DSH_HOME/lan-access.json)并直接重启 Web 服务器 fiber
(fiber.update(config, true)),从而避开 harness 设置平面。

更早之前,harness 在
0.1.0-rc.5 和 0.1.5-alpha.1 之间演进了设置/连接 API;插件也相应更新:

- @deepseek-ai/dsh-settings 移除了 settingsNamespace(ns) 辅助函数——
settings.register / .update / .replace / .mutate 现在接受原始命名空间字符串(在运行时以及通过编译时守卫进行验证)。
- 客户端 ConnectionHandle 不再携带 api 成员——远程方法通过
connection.rpc.call('/api', '/', …) 调用——因此插件不再修补 connection.api.settings. /
connection.api.credentials.。
- /api 网关不再将配置平面固定到回环:它现在信任所服务的 LAN 权威,因此设置/凭据 RPC 可以直接到达主机。因此,插件会提前扩展 connection.isLoopback
(通过 inject: ['connection'] 加上同步补丁),以在 LAN 页面上保持客户端设置持久化处于主机模式;远程 Settings 界面不再需要受围栏保护的 /lan-access/rpc
代理。
仅剩回环(硬编码在 harness 中,无法从插件修补):host.pickDirectory / host.openPath(原生对话框和宿主文件打开)以及 llm.discoverModels(Models 页面的“discover”按钮)。工作区自身的添加/浏览流程不需要它们,聊天文件打开会路由到侧边栏编辑器。

调试辅助

宿主暴露了 GET /lan-access/diag(与其他路由一样受围栏保护),其中包含最新的浏览器启动报告:槽位注册计数、连接补丁是否处于活动状态,以及插件项槽位台账。在启动后的第一分钟内,浏览器还会每 2 秒轮询一次 Plugins 卡片自身注入的快照(available 标志)、槽位台账视图和声明的 spec——当 Settings 页面在远程机器上行为异常时,正是这些数据区分了“卡片消失”、“卡片被放弃”和“卡片存在但渲染为 null”。

可选:dsh-better-sidebar 兼容性补丁

dsh-better-sidebar 的信任围栏用错误的名称匹配连接行,并读取了原始的 !!js 配置,因此其面板(explorer / editor / terminal / git)只接受回环连接。仓库以 profile 级 pnpm 补丁的形式提供了修复(无需更改 harness):

./scripts/install-patches.sh web

这会将 patches/dsh-better-sidebar.patch 复制到 profile 的 patches/ 目录中,在 pnpm-workspace.yaml 的 patchedDependencies 下注册它,并运行 pnpm install。

安全说明

- 默认是关闭(回环)。DSH 启动器本身拒绝 --host 0.0.0.0,原因相同:绑定所有接口会将 agent 的工具暴露到网络。仅在受信任的网络上启用它。
- 该开关只能通过受围栏保护的路由访问,从远程机器禁用会切断该机器的连接(预期行为——请在本地重新启用)。
- 该绑定在插件重载和补丁重新应用后仍然存在;完整进程重启会在启动时重新应用持久化的值。

开发

pnpm build        # tsdown: lib/index.js (host) + lib/client.js (browser bundle)
pnpm typecheck    # tsc --noEmit

客户端 bundle 是一个 __ModuleLoader__.load 闭包工厂产物(与 DSH monorepo 的 tsdown 客户端预设格式相同);只有冻结的平台模块表词汇保持为外部依赖。更改客户端代码后,重新构建并重启 dsh web(客户端模块包的元数据缓存仅在重启时过期)。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群