Files
dsh_ai1net_server/交付物/架构总览-20260929.md
admin c1b5e4d966 chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)
- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次)
- .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…),
  目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪
- .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/)
- .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*)
- .gitignore 补:备份件(*.bak-*)
- 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
2026-10-10 23:13:22 +08:00

78 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 手机接入 · 架构(**业务件**)
> 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` 不在本工作区)⇒ 按"⛔ 不替别线干活",**这一步不擅自代干**。