Files
dsh_ai1net_server/docs/交接单/接续入口_手机接入_20260928.md
T

43 lines
4.6 KiB
Markdown
Raw Normal View History

# 接续入口 · 手机操作 DSH 会话(Agents Anywhere 复用线)
> 🔴 **2026-09-28 环境变更(dsh → WorkBuddy)**:原 dsh 运行时 home `E:\ProgramDSH\.dsh` **已删除**,
> 环境已切到 **WorkBuddy**。⇒ 本文中凡指向 `E:\ProgramDSH\.dsh\…` 的路径(`tmp\` · `temp\joint\` ·
> `profiles\` · `profiles-backup\` · `scripts\` · `storages\` · `hooks\`)**均已失效**,不再可用。
> ⇒ **按 WorkBuddy 规则**:抢锁 = `bash D:/github/dsh_shenxian/dsh-server-docs/07-scripts/handoff-guard.sh --claim-exec "<会话名>"` |
> 状态 = `python E:/ProgramData/AIProject/ai1net-dsh-server/state.py` | 全局技能 = `E:/ProgramData/.workbuddy/skills/`。
> 交接包:`docs\交接单\接续包_手机接入_20260928.md`(正文 ≤3 KB,附录含内联状态)
> 本线台账:`E:\ProgramDSH\.dsh\temp\joint\手机看桌面会话与回复_路线_20260927.md`(约 240 KB,逐轮留痕)
> 🟢 **2026-09-28 23:2x · 外来回执(新 · 优先看)**:你们 21:1x 投给 `ai1net-dsh-anywhere`(手机接入线)的派活件
> `派活_棒3_Android按sessions实现_20260928.md` **已执行完毕**,回执 =
> **`docs\交接单\回执_棒3_AndroidMVP完成_平台线收_20260928.md`**(含逐项读数 + 全部复跑脚本 + 边界自证)。
> **三件你们要知道的事**(细节在回执):
> 1. ✅ **两条勘误已照做**:接口全程走 `sessions` 一套(⛔ 未用 `jobs`);端口全程由发现脚本取址(本轮又亲眼漂一次 `55395 → 63864`)。
> 2. 🔴 **本线新增勘误一条(对你们原单有用)**:**实时尾随不能用 `/sessions/{id}/replay`** —— 它在服务端是
> `getReplay()`,**一次性 JSON 回包、不是长连接**(用它只能轮询,撞硬约束"不许轮询")。**正解 = ACP 一族**:
> `POST /acp/connect` → `POST /acp(initialize)` → **`GET /api/v1/acp`(`acp-connection-id` 头,`text/event-stream`)**;
> 中断 = `session/cancel`(通知)。实测:长连 21ms 建立、16s 收 **548 帧 / 422KB**、服务端不主动断开。
> 3. 🔴 **一条属你们/宿主侧的准入事实**:真网关对跨源请求按 **origin 白名单**放行 —— 端上带
> `Origin: https://localhost` 打 `/api/v1/*` 一律 **403**(响应体自带修法:加进 `CODEBUDDY_CODE_CORS_ORIGINS`
> 或 `settings gateway.corsOrigins`)。**正式路径(设备入口同源)不受影响**,只挡"端上跨源连电脑网关做本地联调"。
> 本线⛔ 未改 WorkBuddy 配置(越界);要不要加白名单**归你们定**。
> 4. ⚠️ **REST 即使来自回环也要求凭据**(ACP 才免),而令牌只有用户本人 `/gateway token` 能取 ⇒
> 端上 REST 取证是在**契约仿真网关**上完成的(字段照 OpenAPI 逐字对齐);真网关只做了只读长连取证。
## §1 这条线在做什么
把「手机操作 DSH 会话」做成**可安装的底层插件能力**:复用开源 Agents Anywhere 的自托管实例(已在 `47.77.182.89` 上跑起来,域名 `desk.ai1net.com`),把这套能力打成 DSH 底层插件 —— 任何人装上插件,用手机打开我们的 Web 就能看会话并回复。⛔ 不改官方 dsh 主程序;⛔ 不建第二套中继/隧道;⛔ 不影响既有配对/登录链路。
## §2 本轮动作(接手方唯一执行依据)
1. 先跑状态单点:`python E:\ProgramData\AIProject\ai1net-dsh-server\state.py`,再读 `docs\交接单\接续包_手机接入_20260928.md`
2. 跑校验命令并比对期望输出(见接续包「校验命令」节):实例读数 `0/0/0/0/0`;线上整包 `?v=20260928v` 返回 200 且 793,823 B / sha256 前 16 `568a96261c70166d`
3. 校验通过后确认「未完成」三项仍在(其中第 1、2 项是**用户本人**在手机上做的两步:登录账号、重启客户端后连接并扫码)
4. 若读数已变(出现 accounts/connectors > 0)⇒ 说明用户已动手,直接进入端到端验证:跑 `check-phone-access.ps1`(A–E 段),再验证「手机上能看到桌面 DSH 会话最新消息 + 手机发出的内容能进桌面会话」
5. ⛔ 不要重装或重打包插件、不要给 `uv sync` 加 `--frozen`、不要改发布顺序(详见接续包「不要重做」节)
## §3 口令
- 状态与交接:`python E:\ProgramData\AIProject\ai1net-dsh-server\state.py`
- 线上实例读数:`ssh bt-server "curl -fsSL https://desk.ai1net.com/status-phone-access.sh | sh"`
- 交付面:`https://desk.ai1net.com/`(说明 `phone-access-README.md`、安装脚本 `install-aa-bridge.ps1`、整包 `phone-access-bundle.zip?v=20260928v`)