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

5.5 KiB
Raw Permalink Blame 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 不在本工作区)⇒ 按"⛔ 不替别线干活",这一步不擅自代干。