Files

77 lines
5.5 KiB
Markdown
Raw Permalink Normal View History

# 手机接入 · 架构(**业务件**)
> 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/<uid>/desk/<hostId>/… │
│ (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` 不在本工作区)⇒ 按"⛔ 不替别线干活",**这一步不擅自代干**。