- 变更规模:新增 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/ 知识文件,按口径入库)
5.5 KiB
5.5 KiB
手机接入 · 架构(业务件)
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 不在本工作区)⇒ 按"⛔ 不替别线干活",这一步不擅自代干。