前言¶
在智能体开发或日常调试中,经常需要将本地工作区的产物快速分享给手机、平板或同事的电脑。现有的 DSH 插件方案各有侧重:dsh-lan-gate 或 dsh-plugin-remote-access 代理的是 DSH 网页端,访问需要登录或设备审批;dsh-ssh 针对远程服务器执行与 SFTP;dsh-webfile 则连接远程存储(如 S3、FTP)。
dsh-lan-share 解决的是本机工作区文件的纯局域网 HTTP 共享问题。它不依赖额外的服务端,利用 Node.js 原生模块,让同一局域网内的设备通过浏览器直接浏览、下载或上传文件,无需登录 DSH 系统。
核心功能¶
该插件提供了一套完整的文件共享能力:
- HTTP 共享:将本地工作区通过 HTTP 协议暴露,支持手机、平板或其他电脑的浏览器直接访问。
- 零依赖:仅使用 Node.js 原生
node:http模块,无需安装额外服务。 - 安全门禁:支持 Token 门禁,防止未授权访问。可配置固定口令,每个口令可独立设置角色(只读/读写)和过期时间。
- 路径边界:通过解析机制防止
../绝对路径越界攻击。 - 只读模式:可开启只读模式,限制上传、删除和移动操作。
- 限流保护:默认每 IP 每分钟 120 请求,超限返回 429 状态码。
- 敏感文件隐藏:自动过滤
.env、凭据类文件(credentials.yaml、.netrc)、密钥(*.pem、*.key、*.pfx)、node_modules、.git等目录和文件。
安装与启用¶
在 DeepSeek Harness 的配置文件(如 dsh.profile 或 cordis.yml)中添加以下条目:
plugins:
- id: tool-lan-share
name: 'dsh-lan-share'
典型用法¶
插件提供了三个核心命令来控制共享服务。
1. 启动共享¶
执行 lan_share_start 命令启动服务。你可以通过参数指定端口、Token、只读模式或子目录。
lan_share_start → {
"ok": true,
"running": true,
"port": 3980,
"root": "F:/work",
"readOnly": false,
"urls": ["http://192.168.1.5:3980/?token=9f2c...", "..."],
"token": "9f2c..."
}
2. 查看状态¶
使用 lan_share_status 查看当前共享服务的运行状态、访问地址、Token 以及文件统计信息。
3. 停止共享¶
使用 lan_share_stop 停止服务。
4. 访问与操作¶
在局域网内任意设备的浏览器输入返回的 URL(包含 token)。在读写模式下,支持拖拽上传、点击下载;在只读模式下,仅支持浏览目录树和下载文件。
5. 配置固定口令¶
除了启动时生成的随机 Token,还可以配置固定口令。在 lan_share_start 中传入 passwords 数组:
lan_share_start → { passwords: [
{ password: "family", role: "read", expiresIn: "3d" },
{ password: "admin", role: "write", expiresIn: "long" },
] }
浏览器访问时,可在 URL 参数 ?password= 或请求头 X-Password 中传入对应口令。
配置项¶
在 DSH 的 settings 中可以配置 lan-share 命名空间下的参数:
lan-share:
port: 3980 # 监听端口
host: 0.0.0.0 # 监听地址,0.0.0.0 为全局域网,127.0.0.1 仅本机
readOnly: false # 默认只读模式
rateLimitPerMin: 120 # 每 IP 限流(请求次数)
hideSensitive: true # 是否隐藏敏感文件
注意事项¶
- Node 版本要求:插件需要 Node.js 版本
^22.19.0 || >=24.0.0。 - 代码路径:核心逻辑位于
src/lan-share-core.ts。 - 访问控制默认:默认
allowOpenAccess: false,即必须通过 Token 或固定口令验证才能访问。若需局域网内任何设备免口令访问,需手动开启该选项。 - 权限范围:插件以当前 DSH 进程的权限运行,请确保配置好相关目录的读写权限。
生态背景¶
DeepSeek Harness(DSH)采用“一切皆插件”的理念。dsh-lan-share 是社区维护的插件,其目录页与 GitHub 仓库可参考下方链接。