From f4e14d8513714e49545c2e0ab1283a3c8cc65062 Mon Sep 17 00:00:00 2001 From: jiangchen <1703935164@qq.com> Date: Wed, 2 Sep 2026 01:15:10 +0800 Subject: [PATCH] docs/install: AI-friendly one-command install (README + scripts/install.sh/.bat + fresh dist tgz) --- README.md | 125 ++++++++++++++++++++++++--------------- dist/dsh-watch-0.1.0.tgz | Bin 6018 -> 6168 bytes scripts/install.bat | 11 ++++ scripts/install.sh | 7 +++ 4 files changed, 95 insertions(+), 48 deletions(-) create mode 100644 scripts/install.bat create mode 100644 scripts/install.sh diff --git a/README.md b/README.md index ea31817..ce4e03c 100644 --- a/README.md +++ b/README.md @@ -1,82 +1,111 @@ # dsh-watch -DeepSeek Harness 插件:把当前 Harness 变成一个可被 DSHWatch 手机/手表远程控制的端点。 +DeepSeek Harness 插件:把当前 Harness 变成一个可被 **DSHWatch 手机 / 手表** 远程控制的端点。 +插件负责把 Harness 的会话/状态/事件**串**给 DSHWatch 客户端;客户端用 WebView 串 Harness 网页壳,数据由本插件填入。 -## 安装 +--- -像安装其他 DSH 插件一样,对 Harness 说"安装这个插件": +## ✅ 一条命令安装(给 AI / 他人) - dsh plugin --profile desktop add dsh-watch +> 你只需把本仓库链接给 AI(或用户),让它执行下面任意一种即可装好。 -或本地开发安装: +### 方式 A:克隆仓库后装打包好的插件(推荐) - dsh plugin --profile desktop add link:D:/project/DeepSeek_Harness_Watch/dsh-watch +```bash +git clone https://gitea.truestudio.cn/jiangchen/dsh-watch.git +cd dsh-watch +# 插件已打包在 dist/。用 DSH 的 dsh CLI 把它装到桌面 profile: +dsh plugin --profile desktop add "$(pwd)/dist/dsh-watch-0.1.0.tgz" +``` -然后在 profile 的 cordis.patch.yml 配置: +### 方式 B:本地 link 开发模式 - - id: dsh-watch - config: - mode: relay # relay | direct - serverUrl: "ws://你的服务器:8787" - userId: "dalong" - token: "与服务器/客户端一致的 token" - reconnectMs: 5000 - timeoutMs: 30000 +```bash +git clone https://gitea.truestudio.cn/jiangchen/dsh-watch.git +dsh plugin --profile desktop add link:$(pwd)/dsh-watch +``` -## 两种模式 +### 方式 C:直接在仓库里跑安装脚本 + +```bash +git clone https://gitea.truestudio.cn/jiangchen/dsh-watch.git +cd dsh-watch +./scripts/install.sh # macOS / Linux +scripts\install.bat # Windows +``` + +### 对 AI 的明确指令(可直接粘贴给它) + +```text +克隆仓库 https://gitea.truestudio.cn/jiangchen/dsh-watch.git, +在仓库目录运行 npm install 或 npm pack 确保 dist/dsh-watch-0.1.0.tgz 是最新, +然后用 DSH 的 CLI:dsh plugin --profile desktop add /dist/dsh-watch-0.1.0.tgz +安装完成后在 DSH 设置 -> 插件 中配置 dsh-watch(mode / serverUrl / userId / token / apiKey / host / port)。 +``` + +--- + +## 配置 + +装好后,在 DSH 的 profile cordis.patch.yml 或 设置 -> 插件 里加: + +```yaml +- id: dsh-watch + config: + mode: direct # direct | relay + host: "0.0.0.0" # direct 模式监听地址 + port: 18321 # direct 模式端口 + token: "你自己定的token" + apiKey: "" # 可选:DeepSeek API Key(harness.balance 直查余额) + reconnectMs: 5000 + timeoutMs: 30000 +``` ### 1. 直连模式(direct) +插件在本机起一个 WebSocket 服务,手机/手表直接填主机/端口/token 连进来(可配合 FRP / 内网穿透)。 -插件在本机起一个 WebSocket 服务,手机端直接填主机/端口/token 连进来(可配合内网穿透/NAT 转发)。 - - - id: dsh-watch - config: - mode: direct - host: "0.0.0.0" - port: 18321 - token: "你自己定的 token" - -手机端填:ws://主机IP:18321 和同一个 token。 +手机端填:`ws://主机IP:18321` + 同一个 token。 ### 2. 服务器中转模式(relay) +插件主动外连 DSHWatch_Server,手机端连同一台服务器,用同样的 userId/token。适合公网、无需给电脑开端口。 -插件主动外连 DSHWatch_Server(预设或手动填 serverUrl),手机端连同一个服务器,用同样的 userId/token。适合公网、不需要给电脑开端口。 +```yaml +- id: dsh-watch + config: + mode: relay + serverUrl: "wss://your-server:8787" + userId: "someone" + token: "shared-secret" +``` - - id: dsh-watch - config: - mode: relay - serverUrl: "wss://your-server:8787" - userId: "someone" - token: "shared-secret" +--- -## DSH 设置页(手表/手机设置) - -插件注册了 dsh-watch 设置命名空间。装好后,在 DSH 的 设置 -> 插件(或对应插件设置区)里可填: - -- mode: direct / relay -- serverUrl / userId / token -- apiKey(DeepSeek API Key,用于 harness.balance 直接查余额;留空则用 DEEPSEEK_API_KEY 环境变量/credentials) -- reconnectMs / timeoutMs -- host / port(direct 模式) - -## 暴露方法 +## 暴露方法(手机/手表端可调用) 透传 DSH apiProxy: - harness.status / harness.prompt / harness.cancel / harness.balance -- session.list create history prompt cancel rename fork models selectModel attachment +- session.list / session.history / session.create / session.prompt / session.cancel - goal.* subagent.* workspace.* host.* - skill.list agentPreset.* llm.* settings.* credentials.* 事件推送:session/event、session/projection、status。 -## 依赖 +--- +## 开发 + +```bash +npm install +npm pack # 生成 dist/dsh-watch-0.1.0.tgz +node --check lib/index.js +``` + +## 依赖 - node >= 18 - ws(装在 DSH 宿主里即可) -## 仓库 - +## 关联仓库 - 服务端:DSHWatch_Server - 手表端:DSHWatch - 手机端:DSHWatchPhone diff --git a/dist/dsh-watch-0.1.0.tgz b/dist/dsh-watch-0.1.0.tgz index 57f3a08eb11d9c1fa066b32a6ff28381e8661ef6..596f2b9b8ea62ac26aa9222e1ed39a212160e2b0 100644 GIT binary patch literal 6168 zcmV+z80Y67iwFP!00002|Lr{ecN0gF{5*d}MZAYbL>|e22~R#}PuL>X#mIh^ST4tL zd1FmWns_v$bdM|?@Ow@+*_Z?{+0EuQgw2KA=9XP@uy>me0%rMRV)^4I{|oo3yJx0H zA3*kYc`y4=-ixK~s_L%l>Z(X5lqOmVVMDi`+sEk4<7_UMr#FsMD7%^u2* z9fo~}$Bt%4M~@!O9)W$?(d?n4W3Vr~?H5StI6FYb|SD4g7}9fO$2)V^RX9Yk|p_SG7%_ zSYUb8c9Xci>En1c+aU~ezd;~TmKcc?AH*W2quDNCU(f{|+i!SnA1GlywW~-Y4Ypf# z+7`|s=yvR;Ek{6f&O6h5588~R`8?Cm^enrEe+g%+)n0IH)<}b8Bk6^B~C6o+TN>H4fMOZu=4XFeoGMH~B437LIgy6b z#me;TsS2FV&(G&el~-W)1msJvz{|zbR2mBZJU3q`mtl5ZE1sO2DHf*EP%KT(oSG_@ zUV`JNDo~oOz)bOEu~L|V$}Hf3l2ox!Mq(!m^OMv0QYC-9I8&^=lGaWXDxLQ-%CYvGh_Ik&(p!*wFSp`~3ZV zTGIbJ_Cm&XEppCyjXhQWf9QoV^!aiBKRT8@{LKG9jgQ?#^9|>rN{Q){GNDU^!V1)= z*My|&StQr+{Z?{Z3n5RFg|b&&Bz`*j+Jo0&5yBg??H?^dT8xmz5!24FYJ)UQ<`cTC zlD1vun~qZ^zHhsARwmMOGucown}oH@DhWr5QMFiOBmhm0Yg*NFnGdenBrpL2P6k?7;V?~T>Z=&1_#!YmQ6|3 zPo~lkHc{f3%gNN)lwpyY*><9)v<8sLz&!rq6g2?G1$v4)NF4(Wx2`Lg0;$aiEn1I) z@V!OiJ_^8W*)NmjM?p|h^<0-!{gVvA+;($;P(5WdZC4-5W+V8qY&I(fwVT9i4}u@f zstAX(0Y)YRQ(R&J`wfrzgXEeu_&*J!TIj4-`TnS=j{i#cW->Rw{dOjPdB?iztmm( zBTSX2A?W#fZ)0ui;`=){Zf3SFzQ1+-p6J-yxG1MmZBt5IA4lPn#CiF2nNJmlY%9T3 zshpO&9Wa=dSg3@4*=y4($$`%J7s*gGoM;}0m9)h1+{uRN))7Sjuka3J7+?jexUE1Z zDLDuV&++PYLXD0|T|Idw+ob@Dmvo>^e4WFg4Eb(6&AZx;6SSiBlh!TX(P6!yRmWq* zf(fXZ4kHm+xqm8lvyTY#O~1|JJsLo$eU4Yxn+$bMm6Yw)ytt%L76>;ED=In{X+M6y zq*Z*C05fZ(Ok7LvurzoJuLa9y*Ff(ulzN95l$h3X**ARx6B84WQ!r-d3Z+!2OxjE9^^bvDrWa27)Q9ZtUHQP2h5Dpw&q?Zi|n6$wi~q{R$U zVw@Eq4kOXl3Sgzy^#Bj#w9J)77drD8UIkDxEj8>%#w}`yarICZ zXlUeE{gRTSqztZGx=twN7-Abp0TD_)8nY>sa;rjV%&t(HQcR1&kTYjRTV$`rI-%D%Z~&c$f!L{lhS@P~KWsKE!m89>Ao}^0Q22qB zMMlp{K4ZX7$mqD-d5@SHBRqG&BIOBm(y@D{8-N&2}wa7dpud+IBJPmBL~A z`=4XRf@8XiN;ktqlAbb{M}1v4)3CrH7mRkx!o*nKhY>KNU#Tf!>RhD`oVS1a>F*(at411;EerRL9PcSicZL(44M z4v)+VXpX~uT(p3a*V{HFRx%Z#4lqOb8(pARi<_J}@rADoSW.n8JYeqP~aC8chz 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 literal 6018 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 + del /q dsh-watch-0.1.0.tgz +) +dsh plugin --profile desktop add "%TGZ%" +echo dsh-watch installed/updated diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100644 index 0000000..2a9767c --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -e +cd "$(dirname "$0")/.." +TGZ="$(pwd)/dist/dsh-watch-0.1.0.tgz" +if [ ! -f "$TGZ" ]; then npm install; npm pack; cp dsh-watch-0.1.0.tgz dist/; rm -f dsh-watch-0.1.0.tgz; fi +dsh plugin --profile desktop add "$TGZ" +echo "✅ dsh-watch 已安装/更新"