Files
dsh_ai1net_server/交付物/手机接入-进度看板.md
T

147 lines
14 KiB
Markdown
Raw Normal View History

# 手机接入 · 进度看板
> 🔴 **本看板=「手机接入」的唯一进度汇总入口**(用户只需看这里)
> 收敛条件 = **V1–V7 全过**
> 更新时间:**2026-09-30 08:2x**(监管轮 · 会话 `手机接入-监管-0815` · 域锁 `ai1net-dsh-server/`)
---
## 0. 一句话(先看这三行)
1. 🟢 **判据层面仍是 6 过 1 差一格** —— **V2/V3/V4/V5/V6/V7 有机器读数**;**V1 只差「真机腿」**(要你在手机上点一次 USB 授权)。
2. 🟢🆕 **R1(链路能活多久)本轮拿下一半** —— **中继客户端半边已治本**:不再挂在会话名下,改由 **Windows 计划任务**持有(父链 `powershell←svchost←services←wininit`,**无 bash / 无沙箱 / 无 WorkBuddy**),我本轮**独立复核**通过(注册语义行 4→5,新增 `08:07:16`)。
3. 🔴 **20090 半边判「结构性不可行」** —— 它活在 DSH 宿主进程内;要脱离会话就必须交给计划任务,而计划任务上下文**读不到网关口令**(现场复测 `envPresent=false / envLen=0`,入口 `fail-closed rc=3`)。⇒ **需你在三条路里放行一条**(§五 ②)。**此刻链路仍不可用**(20090 无监听 ⇒ 手机拿 503)。
---
## 一、验收判据逐项(V1–V7)
| # | 判据 | 状态 | 依据(机器读数 · 产物) |
|---|---|---|---|
| V1 | 手机(真机、非 USB)能看到桌面会话列表与最新消息 | 🟡 **未完全过(只差真机腿)** | 端侧腿在**真 WebView**(模拟器真壳 APK + CDP)全通:无 cookie 6 探针全 `401` 真响应、带 cookie 6 探针全 `200`、列表 `可操作 11 · 不可发 53` 且 id 序列 ≡ 直连垫片、`/history` 200 渲染 8 条(`ai1net-dsh-anywhere/docs/实测单_N17_端侧同源与凭据载体_20260929.md`)。**真机腿未验**(需你 USB 授权)—— 增量,非新缺陷 |
| V2 | 手机发出的消息**进入桌面会话** | ✅ **过** | 经真设备入口 `POST …/reply` **200 `{delivered:true}`**,目标会话 `replay` 出现 `user_message_chunk`、文本**逐字全等**;1 h 窗口内 **5/5 段复现命中**(N9/N10) |
| V3 | 桌面正在用的会话不被夺走 | ✅ **过** | `live` 前后**同值**、`writerOccupied=true`,**全程走 `reply`,⛔ 未做 `session/load`**;**83/83** 次非空采样零漂移 |
| V4 | `src/net/relay/**` 零协议改动 | ✅ **过** | 该目录全部文件 mtime ∈ 09-16 ~ 09-26;**本轮 desktop 棒只"运行"其 `relay/main.js`,未改一行**(R1 实测单 §8 自检) |
| V5 | 权限面不扩大:不开对外端口、准入四闸、默认关 | ✅ **过** | 非回环监听集 **33 条前后 `diff` 为空**;`20090` 恒只绑 `127.0.0.1`;`device_web_enabled` 默认 = 0;入口四闸 401 / 403(他人) / 403(user-switch-off) / 200 逐级正确 |
| V6 | 插件形态正确:垫片是 **DSH 客户端插件**(并入 ai1net 包第 6 模块),⛔ 不是独立进程 | ✅ **过** | 包内模块⑥ `lib/device-access.js`;在用 profile = `C:\Users\Administrator\.dsh\profiles\desktop`,`bundles = [dsh-base, dsh-web-app, @dsh-local/ai1net]`(md5 `2ca1321c…`);`20090` 由 DSH 客户端**自己的 host 子进程**持有;全机扫 `device-access\|ai1net` **零独立进程** |
| V7 | 🔴 绝不影响 WorkBuddy 本身的运行(T1–T7) | ✅ **过** | N10:同一连续 1 h 窗口内六项同时成立(三基线 pid **84/84** `present`、宿主回 idle、当前对话零漂移、**200 次操作 0×429**、对外端口 33→33、配置目录哈希零差异);**本棒再加一笔**:desktop 棒全线**经脚本 spawn**、未装 hook、未写 settings、未 kill/restart WorkBuddy;主进程 `#3176`(09-28 13:55 起)**仍在** |
> 🔴 **V6 的覆写说明(用户 07:4x 明令)**:09-29 那版 V6 判 `fail`,其依据来自**两处非在用目录** ⇒ 旧判**作废**,以本行为准。
### 1.1 口径与增量(如实登记)
| 项 | 说明 |
|---|---|
| V1 的「真机腿」 | 需用户**点一次 USB 授权**;⛔ AI 侧做不到。不影响其余六项。 |
| V1 的判据口径 | 本线经 N8/N17 协商后以「**真 WebView 为准,真机腿为增量**」收口。 |
| 垫片作用域(R3) | 垫片 `/info.cwd = mcn-short-video` ⇒ 手机端可见会话由 **22+ 条降到 1 条**。**是不是本意**需你定(见 §五 ③)。 |
| 🆕 **R1 主判据的 ≥10 分钟口径** | 由**本棒在会话内自证**(详见 §三),⛔ 不再单独排"复核棒"去取这一格。 |
---
## 二、三线本轮产出(已按物品核对,不认自述)
| 线 | 本轮产物 | 结论 |
|---|---|---|
| **客户端线** `ai1net-dsh-desktop` | 🆕 `docs/实测单_R1链路持续性_20260930.md`(08:04–08:0x)· `docs/实测单_前置恢复_2026-09-30.md`(07:57)· `docs/README.md`(08:08)· 宿主 run `4953e96d` = `ACCEPTED` | 🟢🆕 **R1 中继半边治本(我独立复核通过);20090 半边判结构性不可行** ⇒ 如实登记 + 三条候选上抛 |
| **手机接入线** `ai1net-dsh-anywhere` | 今日无新产物(最近 = 02:14 的 N10 长时稳定性) | ⚪ 关键路径 `N8→N9→N10` 全收口 ⇒ 无缺口 |
| **插件线** `ai1net_ui` | 今日无新产物(最近 = 09-29 13:19 的棒1f) | ⚪ 无缺口待办 |
---
## 三、本棒现场实测(2026-09-30 08:15–08:2x · 只读)
| 面 | 读数 | 判 |
|---|---|---|
| 中继守护 | `powershell.exe#3212`(CREATED `08:07:13`)父链 = **`svchost.exe#3008 ← services.exe#1980 ← wininit.exe#1824`** | ✅ **真脱离会话** |
| 中继客户端 | `relay/main.js --client`(`#60196`,`08:07:14`)· 日志 `state=up(for 478470ms)` · `attempts=0 restarts=0 reconnects=0` | ✅ **在册且持续** |
| 语义行(口径=**只比语义行**) | `overlay-daemon.log` 的 `UP -- registered` 行数 **4 → 5**,新增行 = `2026-09-30 08:07:16 … accepted=[20090] session=4624335519876c48`(前一条是 09-29 22:26:58) | ✅ **本轮新增** |
| 垫片 `127.0.0.1:20090` | `netstat` 无 `LISTENING`;`tasklist \| grep -ci electron` = **0** | 🔴 **不通**(**如实状态**,未做"照起无口令的 20090"这类假绿) |
| WorkBuddy 主进程 | `WorkBuddy.exe#3176` 仍在;进程数未减 | ✅ **未受影响** |
| 守护进程(协作程序) | `collabd.py --supervise` pid **55332**(起 `06:02:07`)在跑 · `交付物/手机接入-实时状态.md` mtime = 08:15:01(10s 心跳) | ✅ **KEEPER_UP** |
| 平台域锁 | 本棒 `--claim-exec` **RC=0** | ✅ |
> 🆕 **口径更正(本轮实测 · 登记)**:SOP §9.4 的"`bind :20099` 失败即 KEEPER_DOWN"**有假阴性** —— 本棒实测它报 `KEEPER_DOWN`,而 `collabd.py --supervise` **实际一直在跑**(pid 55332)⇒ 正确判据 = **进程命令行含 `collabd.py` + 状态文件 mtime < 30 s**,⛔ 不用 bind 探针单独下结论。⇒ **本棒据此未做任何"重起守护"动作**(避免重复起第二个实例)。
### 3.1 🔴 另一笔**域锁泄漏**(沿用登记 · 本棒复核仍在 · ⛔ 未动)
| 项 | 读数 |
|---|---|
| 锁路径 | `dsh-server-docs/05-交接单/.locks/________N9______-2248-224852526` |
| 占的域 | **`ai1net-dsh-anywhere`**(=手机接入线的域) |
| 持有者 | `[协作]N9复测-2248`(**开始 09-29 22:48**) |
| mtime | **09-30 08:15 复核:仍在**(已 **≈13.5 小时**未动,持有者会话早已收口) |
| 影响 | 任何声明 `ai1net-dsh-anywhere` 的棒都会抢不到锁 ⇒ 按 R9 只能停手(09-29 22:5x 已实际发生:会话 `a7fcfc52` 第 0 步被挡、零产出) |
| ⛔ 本棒处置 | **按 R9 未删、未接管**(处置权只属持有者本人/用户) |
> 建议:**由用户本人删掉该目录**(与 09-29 11:30 那笔全域锁同类)。在那之前,手机接入线派棒应**声明更窄的显式域**,别声明整个 `ai1net-dsh-anywhere/`。
### 3.2 ⚠️ 一次性自动化积压(沿用登记 · 本棒只计数)
`automations` 表 **ACTIVE 81 条**,其中 **`once` 且已过期(`scheduled_at < 09-30 08:00`)= 76 条**(多为 09-27/09-28/09-29 的哑火棒)。
⛔ **本棒未删**(属批量改动,命中 R7「>10 条先出清单 + 确认」)⇒ 见 §五 ④。
---
## 四、下一棒(已挂 · 一棒一线)
| 对象 | 内容(本棒所派) | 时刻 |
|---|---|---|
| `ai1net-dsh-desktop`(客户端线) | **R1 中继半边「≥30 分钟长时观察」(只读复核)**:① 只读比**语义行**(`overlay-daemon.log` 的 `UP -- registered` 行数、客户端日志 `state=up` 行数,⛔ **不比总行数**)② 判守护/客户端父链是否仍为 `powershell←svchost`、`restarts/reconnects` 是否仍为 0 ③ 顺手记 `20090` 实况(**预期仍无监听,如实记**)。⛔ **不要起 20090 临时恢复、⛔ 不改任何脚本/任务定义**。判据=**收口后 ≥30 分钟仍在册**、`state=up` 持续、父链不变。 | **08:40**(一次性 · 属白名单「接续会话」) |
**为什么只派这一棒**:其余缺口**全部在用户手上**(20090 三条路径、真机腿 USB 授权),⛔ 无合规可自决的下一棒 —— 派了就是"为派活而派活"。
**关键路径状态**:`N5 → N8 → N9 → N10` **已全部 done** ⇒ 关键路径**没有剩余节点**。
---
## 五、待用户(边界外 · 逐条编号)
**① 真机腿(V1 的最后一格)** —— **为什么问你**:**需要你在手机上操作**(USB 授权),AI 侧做不到。**要什么**:手机连数据线后**点一次「允许 USB 调试」**,此后真机验收本线自动跑完。
**② 链路持续性(R1)走哪条路**(=本轮 desktop 棒 §7 的三条候选,**倾向 A 案**)—— **为什么问你**:这条决定「这功能平时到底能不能用」,且三选一**没有客观优劣**,还牵涉你愿不愿意为它放行一条现有红线。三条都**不**改官方 dsh、**不**碰平台仓、**不**影响正在跑的 WorkBuddy:
- **A 案(推荐)|给垫片开一条「口令入站」通道** —— 常驻垫片(计划任务)+ 会话侧一个极薄推送者,把**当前**口令经**回环**推给垫片(只进内存、不落盘)。
**优点**:全部硬约束都能满足(不落盘、只回环、不夺会话、口令恒新),手机侧行为与今天完全一致。
**缺点**:要**改 M6 垫片本体**(凭据面扩大 ⇒ 须走评审),另需一条周期性会话侧动作。
- **B 案|让 WorkBuddy 在「应用生命周期」里拉起客户端** —— 不经任何会话,由 WorkBuddy 自己在启动阶段拉起。
**优点**:最干净 —— 口令天然可读、生命周期天然正确、**不需要任何新通道**。
**缺点**:现行规则**明确禁止**改 WorkBuddy 的配置与进程 ⇒ **要你先放行这条红线**,且属平台侧能力,本线做不了。
- **C 案|让口令在磁盘上有"你自己指定的"稳定副本**(用户级持久环境变量或 WorkBuddy 的 `gateway` 设置)。
**优点**:**不改任何代码、不加新通道**,机制已就位,现在就能用。
**缺点**:口令**落盘**(与本线「令牌不落盘」红线相冲,须你明确豁免);口令不再随重启轮换;要重启一次 WorkBuddy 才生效。
**③ 垫片作用域是不是本意** —— **为什么问你**:垫片当前工作目录 = `mcn-short-video` ⇒ **手机上只能看到 1 条会话**(此前是 22+ 条)。是"只让手机看这一个项目"的本意,还是应该放开到全部会话?(**影响你能在手机上操作多少东西**。)
**④ 是否清理 76 条哑火的一次性自动化** —— **为什么问你**:属**批量改动**(命中 R7),涉及面超出单条棒,且部分是你自己排的棒。**默认动作(本棒已采用)=不删,只计数**。
**⑤ 域锁泄漏 `[协作]N9复测-2248`(域 `ai1net-dsh-anywhere`,已 ~13.5 h)** —— **为什么问你**:按 R9 **只有持有者本人或你能释放**,AI 删锁=违规。**要什么**:由你删掉 `05-交接单/.locks/________N9______-2248-224852526/` 目录(或告知可释放)。
---
## 六、本棒动作记录(监管轮 · 08:15–08:2x)
| 动作 | 对象 | 说明 |
|---|---|---|
| ✅ 抢域锁 | `ai1net-dsh-server/` | `手机接入-监管-0815`,**RC=0** |
| ✅ 跑状态 + 探守护 | `state.py` · `collabd.py` 进程 · 20099 | KEEPER_UP(并更正 bind 探针假阴性) |
| ✅ 收三线产出并**独立复核** | desktop 的 R1 实测单(+前置恢复/README)· anywhere/ai1net_ui 无新件 | **不认自述**:亲读宿主 run、亲查父链与语义行、亲查端口 |
| ✅ 判 V1–V7 + 覆写本看板 | 全表 | 见 §一(V1 仍「只差真机腿」,其余不变) |
| ✅ 现场取证 | 父链 · 语义行 · `20090` · WorkBuddy 进程 · 域锁 · automation 积压计数 | 见 §三 |
| ✅ 派 1 棒 | `ai1net-dsh-desktop` | 一次性 **08:40**(R1 中继半边 ≥30 min 只读复核) |
| ✅ 更正 `goal.json` 的 `acceptance_state` 注记 | `_更新` / `_依据` | V1 仍 `fail`;其余 `pass` 不变(状态本身**未变**,只刷新注记) |
| ⛔ 未新增其它自动化 | — | 本棒自身跑完即止 |
| ⛔ 未替别线动手 | — | 未起垫片/web 客户端、未 `restart dshs`、未改 WorkBuddy 配置、未删任何锁 |
| ⛔ 未起会话后台任务 / 未跑超时命令 | — | 全程前台只读,单条命令均短 |
---
## 七、机械层误报(沿用 + 本轮新增)
| 机械层原话 | 实况 |
|---|---|
| 「服务探针:不通」/ `collabd-state.kp.shim_20090` | ⚠️ **既有假阳性**(持续报不通而实况曾 200)⇒ 判垫片死活一律**连测 ≥3 次** + 进程起始时间,⛔ 不用单次读数 |
| 🆕 SOP §9.4「`bind :20099` 失败 ⇒ KEEPER_DOWN」 | 🔴 **假阴性(本轮实测)**:报 DOWN 而 `collabd.py` 实际在跑 ⇒ 判据改为**进程命令行 + 状态文件 mtime** |
| 「关键路径 N5→N8→N9→N10」 | ⚠️ 该四节点**已全 done**;机械层仍显示为"关键路径" ⇒ 看板此列已更新为「无剩余节点」 |
| `ai1net_ui`「棒1b/1c 实测缺」 | ❌ 误报(产物在 `ai1net_ui/docs/执行单_棒1c_真装与验通_20260929.md`,仅文件名前缀不符) |
| 「有自动化已过 validUntil(心跳会断)」 | ❌ 误报(过期的是已废的 `004f6bc2`) |