Files
dsh_ai1net_server/docs/交接单/接续入口_手机接入_20260928.md
T
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

44 lines
4.6 KiB
Markdown
Raw 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.
# 接续入口 · 手机操作 DSH 会话(Agents Anywhere 复用线)
> 🔴 **2026-09-28 环境变更(dsh → WorkBuddy)**:原 dsh 运行时 home `E:\ProgramDSH\.dsh` **已删除**,
> 环境已切到 **WorkBuddy**。⇒ 本文中凡指向 `E:\ProgramDSH\.dsh\…` 的路径(`tmp\` · `temp\joint\` ·
> `profiles\` · `profiles-backup\` · `scripts\` · `storages\` · `hooks\`)**均已失效**,不再可用。
> ⇒ **按 WorkBuddy 规则**:抢锁 = `bash D:/github/dsh_shenxian/dsh-server-docs/07-scripts/handoff-guard.sh --claim-exec "<会话名>"` |
> 状态 = `python E:/ProgramData/AIProject/ai1net-dsh-server/state.py` | 全局技能 = `E:/ProgramData/.workbuddy/skills/`。
> 交接包:`docs\交接单\接续包_手机接入_20260928.md`(正文 ≤3 KB,附录含内联状态)
> 本线台账:`E:\ProgramDSH\.dsh\temp\joint\手机看桌面会话与回复_路线_20260927.md`(约 240 KB,逐轮留痕)
> 🟢 **2026-09-28 23:2x · 外来回执(新 · 优先看)**:你们 21:1x 投给 `ai1net-dsh-anywhere`(手机接入线)的派活件
> `派活_棒3_Android按sessions实现_20260928.md` **已执行完毕**,回执 =
> **`docs\交接单\回执_棒3_AndroidMVP完成_平台线收_20260928.md`**(含逐项读数 + 全部复跑脚本 + 边界自证)。
> **三件你们要知道的事**(细节在回执):
> 1. ✅ **两条勘误已照做**:接口全程走 `sessions` 一套(⛔ 未用 `jobs`);端口全程由发现脚本取址(本轮又亲眼漂一次 `55395 → 63864`)。
> 2. 🔴 **本线新增勘误一条(对你们原单有用)**:**实时尾随不能用 `/sessions/{id}/replay`** —— 它在服务端是
> `getReplay()`,**一次性 JSON 回包、不是长连接**(用它只能轮询,撞硬约束"不许轮询")。**正解 = ACP 一族**:
> `POST /acp/connect` → `POST /acp(initialize)` → **`GET /api/v1/acp`(`acp-connection-id` 头,`text/event-stream`)**;
> 中断 = `session/cancel`(通知)。实测:长连 21ms 建立、16s 收 **548 帧 / 422KB**、服务端不主动断开。
> 3. 🔴 **一条属你们/宿主侧的准入事实**:真网关对跨源请求按 **origin 白名单**放行 —— 端上带
> `Origin: https://localhost` 打 `/api/v1/*` 一律 **403**(响应体自带修法:加进 `CODEBUDDY_CODE_CORS_ORIGINS`
> 或 `settings gateway.corsOrigins`)。**正式路径(设备入口同源)不受影响**,只挡"端上跨源连电脑网关做本地联调"。
> 本线⛔ 未改 WorkBuddy 配置(越界);要不要加白名单**归你们定**。
> 4. ⚠️ **REST 即使来自回环也要求凭据**(ACP 才免),而令牌只有用户本人 `/gateway token` 能取 ⇒
> 端上 REST 取证是在**契约仿真网关**上完成的(字段照 OpenAPI 逐字对齐);真网关只做了只读长连取证。
## §1 这条线在做什么
把「手机操作 DSH 会话」做成**可安装的底层插件能力**:复用开源 Agents Anywhere 的自托管实例(已在 `47.77.182.89` 上跑起来,域名 `desk.ai1net.com`),把这套能力打成 DSH 底层插件 —— 任何人装上插件,用手机打开我们的 Web 就能看会话并回复。⛔ 不改官方 dsh 主程序;⛔ 不建第二套中继/隧道;⛔ 不影响既有配对/登录链路。
## §2 本轮动作(接手方唯一执行依据)
1. 先跑状态单点:`python E:\ProgramData\AIProject\ai1net-dsh-server\state.py`,再读 `docs\交接单\接续包_手机接入_20260928.md`
2. 跑校验命令并比对期望输出(见接续包「校验命令」节):实例读数 `0/0/0/0/0`;线上整包 `?v=20260928v` 返回 200 且 793,823 B / sha256 前 16 `568a96261c70166d`
3. 校验通过后确认「未完成」三项仍在(其中第 1、2 项是**用户本人**在手机上做的两步:登录账号、重启客户端后连接并扫码)
4. 若读数已变(出现 accounts/connectors > 0)⇒ 说明用户已动手,直接进入端到端验证:跑 `check-phone-access.ps1`(A–E 段),再验证「手机上能看到桌面 DSH 会话最新消息 + 手机发出的内容能进桌面会话」
5. ⛔ 不要重装或重打包插件、不要给 `uv sync` 加 `--frozen`、不要改发布顺序(详见接续包「不要重做」节)
## §3 口令
- 状态与交接:`python E:\ProgramData\AIProject\ai1net-dsh-server\state.py`
- 线上实例读数:`ssh bt-server "curl -fsSL https://desk.ai1net.com/status-phone-access.sh | sh"`
- 交付面:`https://desk.ai1net.com/`(说明 `phone-access-README.md`、安装脚本 `install-aa-bridge.ps1`、整包 `phone-access-bundle.zip?v=20260928v`)