# 手机接入 · 架构(**业务件**) > 2026-09-29 · **本件只讲"手机访问 WorkBuddy"这件事**。 > 🔴 **与"多会话协作机制"是两件事,⛔ 不混写**: > - **本件(A · 业务)**:手机怎么经覆盖网络操作桌面 WorkBuddy 会话(目标 V1–V7)。 > - **B · 协作机制**(怎么组织主会话/子会话/程序把活干完):**通用方法论,与手机接入无本质关系** ⇒ 见技能 **`multi-session-collab`**(`~/.workbuddy/skills/multi-session-collab/`)。 > - **两者的连接方式**:A 这个项目**用** B 的机制推进(任务图/队列/证据分级都是在 B 里定义的);**A 的文档只留"用了哪条机制"的指针,⛔ 不抄 B 的正文**。 --- ## 一、链路(手机 → 桌面会话) ``` ┌─ 手机(真机 / Android App「com.dsh.client」)────────────────────┐ │ ai1net 设备入口 https://<门户>/u//desk//… │ │ (443 + 覆盖网络;平台侧「四道闸」准入) │ │ │ │ │ ├─ ④ 闸「设备可达性」 🔴 **503 device-unreachable** │ ★ 当前唯一卡点 │ │ 根因:设备取址器只用**冻结快照** │ (任务图 N12) │ │ 平台自 2026-09-27 22:16 起**没再拉** relay /status │ │ │ (presence 订阅新鲜 ⇒ 轮询反被挂起) │ │ │ ⇒ 与设备是否在线**无关** │ │ │ │ │ └─ relay(覆盖网络) │ │ · 设备**续租成功** ⇒ relay 上 `online`、 │ │ `ports=[20090]` │ │ · 从 47 打 relay 落点 `127.0.0.1:32891`sessions │ │ ⇒ **200**,**9 条会话 id 与本机垫片逐 id 一致** │ └────────────────────────┼─────────────────────────────────────┘ ▼ ┌─ 电脑(本机)──────────────────────────────────────────────────┐ │ 中继来连 → **垫片 M6**(并入 `@dsh-local/ai1net`) │ │ · 只绑 `127.0.0.1:20090`(回环,⛔ 不开对外口) │ │ · 注入本机服务凭据 `x-access-token`(来自 env) │ │ · **剥掉 Origin / Referer**(否则写操作 403) │ │ · **动态发现** gateway 端口(端口每次重启都变) │ │ │ │ │ ▼ │ │ WorkBuddy gateway(`127.0.0.1:<动态口>`) │ │ │ │ │ ▼ │ │ 桌面会话(sessions / automation_runs) │ └───────────────────────────────────────────────────────────────┘ ``` --- ## 二、现状(逐段可核对) | 段 | 状态 | 读数 / 出处 | |---|---|---| | 垫片 M6 真装 + 常驻 | ✅ | selfcheck `ok:true`、口令 `present:true`;**连打 20 次 200×20**;动态发现跟随端口漂移(upstream 曾漂到 54814、57160 均自跟) | | 设备侧 | ✅ | 设备续租成功(hostId 逐字不变);relay 上 `online`、`ports=[20090]` | | **中继侧真链** | ✅ | 从 47 打 relay 落点 `:32891/api/v1/sessions` → **200**;**9 条会话 id 与本机垫片逐 id 一致**(出处 `ai1net-dsh-anywhere/docs/实测单_端到端_20260929.md`) | | **平台入口 ④ 闸** | 🔴 **卡** | `503 device-unreachable` ⇒ **归 N12** | | 实时通道 WS 101 | ⚠️ **未取证** | 经平台入口 nginx **502**;经 relay 落点裸探垫片**未完成升级**(读数不稳)⇒ 两种断点**未分离** | --- ## 三、各线职责(业务侧) | 线 | 地盘 | |---|---| | **桌面/客户端线**(`ai1net-dsh-desktop`) | desktop profile、客户端启动入口、M6 常驻与长时保持 | | **插件线**(`ai1net_ui`) | 垫片 M6 归并入 `@dsh-local/ai1net`、client 半(卡片) | | **手机接入线**(`ai1net-dsh-anywhere`) | 端侧契约、设备入口联通性、端到端取证 | | **覆盖网络线 / 平台线** | **设备取址器 / relay 服务 / 四道闸** ⇒ **N12 在这里** ⚠️ 其工作区不在本工作区 | | 本工作区(`ai1net-dsh-server`) | 目标与验收、协同入口(**用 B 的机制**)、架构定稿 | --- ## 四、剩下一件事 **`N12`:设备取址器加 presence 兜底 + 快照 TTL**(并查清"为何 presence 订阅新鲜导致 `/status` 轮询被挂起")。修法方向由手机接入线实测给出,归**覆盖网络线/平台线**。 ⇒ 除它之外,V1 的每一段**都有读数**。 ⚠️ **派 `N12` 需要先确认覆盖网络线的工作区**(其 `接续入口_覆盖网络线_*.md` 不在本工作区)⇒ 按"⛔ 不替别线干活",**这一步不擅自代干**。