deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
DeepSeek Harness 的安全远程访问层与手机 Companion。
本项目不是"把 3080 端口开放到局域网"的小插件,而是在远程世界与 Harness localhost 信任域之间建立一个新的、明确的、可审计的 Remote Access Security Layer(详见
docs/四份规格文档与docs/HANDOVER.md交接文档)。
| 版本 | 能力 |
|---|---|
| V1 | 安全局域网:扫码配对 + 设备身份 + 签名认证 + Remote Gateway + 手机 Web UI |
| V2 | 公网 Relay:PC 主动出站 Tunnel + 端到端加密(E2EE)+ 公网配对 + 多电脑路由 |
| V2.5 | 手机端对标网页端:模型选择、排队发送/队列管理、批准(允许/拒绝)、Agent 提问、任务进度(轮次/步骤/token 速度)、会话统计 |
| V2.6 | 会话管理:新建会话(工作区+预设)、搜索、重命名、归档、todo 任务列表、Agent 预设 |
| V3 | P2P 基础:Signaling 服务端 + werift WebRTC 选型 + TransportOrchestrator 骨架 |
docs/ 四份规格文档 + compatibility.md(上游版本锁定)+ HANDOVER.md(交接)
packages/
protocol/ 协议层:DTO / 常量 / 错误码 / Canonical / SAS / Pairing / Transport(零依赖)
e2ee/ E2EE:ECDH/HKDF/AES-GCM,Node + 浏览器双实现(格式互通)
remote-host/ Host 插件:Gateway / Pairing / Auth / Policy / Adapter / Admin API / Relay / P2P
assets/mobile/ 手机 Web UI(原生 ES Modules,无构建)
remote-client/ PC 设置 UI(Client Plugin,settings.section「远程访问」)
bundle/ Harness Bundle(cordis.patch.yml 组合层)
apps/
relay-server/ 公网 Relay 服务器(独立服务,不依赖 Harness)
scripts/
pack.mjs 打包脚本(产出可安装 tarball,含中文路径修复)
e2e-real.mjs 真实环境 LAN 端到端验证
e2e-relay-real.mjs 真实环境 Relay 端到端验证(11 步)
phone-sim-real.mjs 手机模拟(LAN/Relay 配对 + E2EE 全链路)
admin-cli.mjs Admin 签名 CLI(配对创建/批准/Relay 管理)
admin-takeover.mjs 本机信任模式 Admin 密钥接管(开发用)
mobile-dev-proxy.mjs 手机 UI 开发代理(本机 http 模拟手机环境)
spike-p2p-node.mjs V3 WebRTC spike(werift 双端 DataChannel)
# 终端 1:Relay 服务器(V2 公网能力;只用局域网可跳过)
$env:RELAY_PORT=3090; node apps/relay-server/lib/index.js
# 终端 2:dsh(加载 @dshr 插件,Gateway 3180 + Relay 自动连接)
dsh web
# 终端 3(可选,开发调试):手机 UI 本机代理
node scripts/mobile-dev-proxy.mjs 192.168.0.203:3180 8080
# 浏览器打开 http://127.0.0.1:8080 即手机界面(localhost 是 Secure Context,Web Crypto 可用)
若 PC 面板 Relay 状态显示"错误:无法连接 Relay 服务器"——说明 relay-server 未启动,按上面终端 1 启动即可。
https://<LAN IP>:3180/pair#...(自签证书需点"继续访问")/pair#v=1&h=...(无需同一 Wi-Fi)relay-server 是自包含服务:一个地址同时提供手机页面(/、/pair 配对落地页)+ 全部 API(/v1/*),不需要数据库/Redis/额外 Web 服务器。
# 服务器上:只需 Node.js,克隆仓库后
cd apps/relay-server && npm install # 安装 ws 依赖
RELAY_PORT=443 node lib/index.js # 或由 Caddy/Nginx 反代到内部端口
| 需要 | 说明 |
|---|---|
| 一台公网服务器 | 任意云服务器,仅需 Node.js |
| 域名 + TLS(推荐) | 手机 Web Crypto 需要 HTTPS(Secure Context);可用 Caddy 自动签发 |
| 防火墙放行 443 | 手机与 PC 都连 wss://域名:443 |
然后把 PC 端 cordis.patch.yml 的 relayServerUrl 改成公网地址:
- id: dshr-remote-host
config:
relayEnabled: true
relayServerUrl: 'https://relay.example.com' # 改为你的域名
重启 dsh 后,PC 生成的 Relay 配对二维码前缀即变为公网地址,手机在任何网络扫码即可配对。
手机端:我的电脑 → 在线主机 → 会话列表/详情;会话内可选模型、发消息(运行中自动排队)、批准工具、回答问题、查看任务进度。
# 构建(按依赖顺序)
node node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/tsc -p packages/protocol/tsconfig.json
node .../tsc -p packages/e2ee/tsconfig.json
node .../tsc -p packages/remote-host/tsconfig.json
node .../tsc -p apps/relay-server/tsconfig.json
# 测试(各包目录,共 120 项)
node --test --experimental-test-isolation=none "test/*.test.ts"
# 打包 + 安装到用户 profile(HANDOVER §7.4 有完整流程)
node scripts/pack.mjs
# 复制 dist-packages/*.tgz 到 C:\Users\<user>\.dsh\profiles\web\ 后:
pnpm add "./dshr-bundle-0.1.0.tgz" --force # 或手动解包(见 HANDOVER §7.4)
# LAN 全流程(bootstrap → 配对 → 批准 → 签名访问)
node scripts/e2e-real.mjs <bootstrapSecret>
# Relay 全流程(11 步,需先启动 relay-server)
node scripts/e2e-relay-real.mjs <bootstrapSecret>
# 手机模拟(配合 PC 浏览器批准)
node scripts/phone-sim-real.mjs "<配对链接>" [--verify-relay http://127.0.0.1:3090]
/api 一律 404/api/pet/state 404 等来自 @linxin666 第三方插件,与 Remote 无关docs/HANDOVER.mdCLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。