DeepSeek Harness Hub
← 返回列表

zljr/dsh-share

DeepSeek 客户端兼容 / 相关生态spec-screened在 GitHub 查看 ↗
⚠ 装前注意

通过局域网将 DeepSeek Harness 会话共享为只读、令牌保护的快照。

基本兼容但装前注意:未发布到 npm registry,仅可从源码安装 · 最近上游提交 2026/8/16 · 已提供中文文档
综合分
32.9
GitHub 分
32.9
用户评分
★ Stars
3
周下载量
兼容 / 相关生态插件(非 dsh 原生,请按其对应运行时安装)
git clone https://github.com/zljr/dsh-share.git
数据截至 2026/9/18(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查⚠ 装前注意

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

npm 包@zljr/dsh-share(未发布到 npm,仅可源码安装)
Node 引擎未声明 engines.node
dsh CLI 依赖未声明 dsh 版本约束
入口文件main/exports/bin 已声明

未发布到 npm registry,仅可从源码安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/18 18:56:38

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

README

dsh-share

通过局域网将 DeepSeek Harness 会话共享为只读、令牌保护的快照。

📖 中文文档

dsh-share 是一个 DeepSeek Harness 插件,它在会话标题栏中添加了一个 Share 按钮。一键即可将当前对话冻结为一个自包含的只读 HTML 页面,并打印出一个局域网 URL —— 例如 http://192.168.1.20:3081/s/ —— 同一网络上的任何设备都可以在浏览器中打开它。

主 harness 继续监听 127.0.0.1(因此永远不会暴露 agent 的命令执行)。共享由独立的只读 HTTP 服务器提供,它只会为有效令牌返回预渲染的快照页面。

功能特性

- 🔗 一键共享 —— 会话标题栏中的 Share 按钮(位于官方 "Session log" 操作旁边)。
- 🔒 只读且隔离 —— 共享服务器自行绑定 0.0.0.0:;它只暴露 GET /s/。没有 RPC,没有写入,查看时不读取会话。
- 🧊 冻结快照 —— 转录内容和会话统计在共享时被捕获;之后的编辑或压缩永远不会改变已共享的页面。
- 🔑 可撤销 + 可选过期 —— 128 位随机令牌;随时停止共享,或选择 1 小时 / 24 小时 / 7 天过期。
- 📝 Markdown 转录 —— 用户和助手消息以 Markdown 渲染(安全:原始 HTML 被转义,javascript: URL 被阻止)。
- 🪗 可读性 —— 长消息自动折叠在预览之后;连续的工具调用折叠为一个 "🛠 tool calls" 分组。
- 📊 会话统计标题栏 —— 轮次、步骤、实际耗时、工具调用时间、缓存命中、输入/输出令牌,以及当前上下文占用情况,并带有按类别划分的组成条。
- 🌗 深色与浅色主题 —— 共享页面遵循 prefers-color-scheme。
- 💾 跨重启持久化 —— 共享存储在 ~/.dsh/dsh-share.json 中。
- 📡 智能局域网地址 —— 过滤掉虚拟适配器(WSL / Hyper-V / Docker / VPN / …)并探测默认路由,以便手机可访问的 IP 排在首位。

工作原理

dsh-share 是一个双面 dsh 包,与其他 harness 插件一样:

| 部分 | 运行于 | 角色 |
|------|---------|------|
| Host (src/host) | Node(harness 进程) | 将会话事件日志折叠为转录内容 + 统计信息,存储冻结的快照,并通过独立的 node:http 服务器在 /s/ 上提供它。还暴露一个 /dsh-share RPC(create / revoke / list)。 |
| Client (src/client) | 浏览器 | 在 conversation.session.header.utilities 中注册 Share 按钮,并渲染对话框(过期选择器、复制 / 撤销 / 打开)。 |

上下文组成的令牌估算复用了 harness 自身的固定密度启发式方法(约 4 个字符 ≈ 1 个令牌),与 dsh-context 一致。

安装

从 npm 安装

dsh plugin --profile web add @zljr/dsh-share
dsh --profile web
就是这样——发布的包已经包含了构建好的 lib/,因此最终用户无需任何构建步骤。

从源码构建(本地开发)

1. 构建包产物(lib/)
pnpm install
pnpm build

2. 安装到 web profile(本地路径)
dsh plugin --profile web add /absolute/path/to/dsh-share

3. 重启 web UI
dsh --profile web

打开任意会话,点击标题栏中的 Share。共享服务器会在首次使用时惰性启动。

配置

环境变量(或通过 cordis.patch.yml 提供的配置对象):

| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| DSH_SHARE_HOST | 0.0.0.0 | 只读共享服务器的绑定地址。 |
| DSH_SHARE_PORT | 3081 | 共享服务器的端口。 |

在 Windows 上,首次监听 0.0.0.0 可能会触发防火墙提示——请允许它,以便其他设备可以访问该链接。

安全模型

- 主 harness 仅限回环访问;只有只读共享界面可以从局域网访问。
- 共享令牌为 128 位随机(不可猜测),并且可以撤销或设置为过期。
- 共享页面不包含 JavaScript,也不包含外部资源;消息文本以 Markdown 渲染,原始 HTML 会被转义,危险 URL 会被拒绝。
- 快照是冻结的——它不是会话的实时视图,并且在创建后绝不会从会话存储中重新读取。

开发

pnpm install     # 开发依赖(typescript、esbuild、react、jsdom……)
pnpm build       # 打包 host(lib/index.js)+ client(lib/client.js)
pnpm test        # 类型检查 + host/client 功能测试
pnpm typecheck   # 仅 tsc --noEmit

项目结构

src/
shared/          # 两半共享的通信契约(仅类型)
host/
index.ts       # /dsh-share RPC + 惰性共享服务器生命周期
server.ts      # 只读 HTTP 服务器 + 局域网地址选择
store.ts       # token → 快照注册表(持久化 JSON)
transcript.ts  # 事件日志 → 人类可读记录
stats.ts       # 事件日志 → 会话统计
pricing.ts     # token 估算启发式
markdown.ts    # 安全的 Markdown 渲染
html.ts        # 快照页面渲染
client/
index.ts       # 标题栏按钮注册
components/    # ShareButton + 对话框
scripts/build.mjs  # esbuild 构建(host ESM + client __ModuleLoader__ 打包)
tests/             # host/client 功能测试(jsdom + 真实 React)

发布

npm login --registry=https://registry.npmjs.org
npm publish --registry=https://registry.npmjs.org

prepublishOnly 脚本会在每次发布前重新构建 lib/,因此 tarball 始终包含最新的 host + client 打包产物。

许可证

MIT

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

💬 加入 DPharness 群聊

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

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群