跳转至

校园代理:共享会话接入与 Mac dev 验收

日期:2026-10-31。分支:web。本轮不发布安装包,main 与 dev3 保持原状。

接入路径

代理管理器挂在已有 SDK 实例上,使用当前 NodeSession 的请求、Cookie 仓、账号 epoch 和退出生命周期。桌面经受限的原生 cli_daemon_request 调用私有 gateway.control;外部 CLI / MCP 权限开关与代理开关独立。onethu gateway 只连接已有 daemon,缺少运行时会明确报错。

桌面入口:完整模式设置齿轮 → Harness → 高级配置 → 模型 / MCP / 日志 → 校园超级代理。先启动代理,再打开校园浏览器。该浏览器使用独立临时配置、私有 CDP pipe 和本次 CA 公钥的进程内例外;不会安装扩展、修改默认浏览器资料、信任系统证书或覆盖系统代理。

系统接入另提供证书信任、PAC 启用及恢复操作。平台适配器拒绝覆盖正在使用的代理,采用写前记录和逐字段比较恢复,保留用户后来修改的值。账号退出与切换先撤销代理输出;即使恢复系统配置失败,旧账号也不能继续被使用。

实测中发现并修复的问题

  1. WebVPN 的 vpn_eval 包装在原网址下无法运行。适配器以有界字节流移除已知函数源码包装,保留脚本内容;HTML 使用 raw-text 状态解析,避免误改注释、字符串、模板和非 JavaScript 数据块。未加入执行远程代码的 eval 帮助函数。
  2. 网络学堂脚本需要读取其防伪 Cookie 才会向课程接口发送有效请求。网关仅投影 Learn 精确作用域、明确非 HttpOnly 的 XSRF-TOKEN,固定 Secure / SameSite / Path;认证 Cookie 保持在共享会话内。未知属性的 bootstrap 导入不能作为浏览器披露依据。令牌失效或不再允许披露时,清除浏览器旧值。
  3. 校园网页弹出原生 JavaScript 对话框时,等待 Page.navigate 会使打开浏览器操作超时。现在窗口及认证处理准备好即完成打开操作;可见浏览器保留正常对话框,只有无界面的自动验收会拒绝对话框。
  4. 代理独立开关需要与外部 CLI / MCP 权限分离。调整权限时保留已启动代理;退出账号、切换账号与移除运行时仍撤销代理。
  5. 旧 HTTP 校园地址在 Chromium 中缺少来源元数据。仅对已配置映射且无请求体的 GET / HEAD 先跳到 HTTPS 门面,再进行正常来源校验;写请求不会自动重放。
  6. 启动代理时重复调用 CLI 安装后的移交流程,可能覆盖后台更新过的同账号 Cookie。启动准备现在直接使用已就绪的同账号权威会话;只允许向具备 bootstrap 资格的空运行时移交,并将账号与 epoch 传到 SDK 的串行控制队列中再次核对。启动不改动外部 CLI 权限或任务配置。
  7. 浏览器直接访问统一认证、注销与票据换取接口可能改变权威 Cookie,却没有经过 SDK 的账号生命周期。适配层在网络请求之前拦截这些账号控制入口,仍由 OneTHU 的登录入口完成认证;普通业务读写保留。

验证记录

  • 网关协议、CA、管理器与平台恢复:53 项通过,覆盖真实 loopback HTTP/TLS 套接字、账号变更、超时、取消、二进制流、来源与 Cookie 隔离、已存在代理冲突及异常恢复。
  • 独立 Chromium 管理器 fixture:通过 PAC、私有代理认证、临时 CA、CDP pipe 取得模拟共享会话 HTML;停止时关闭临时浏览器。
  • SDK 全量 239 / 239、CLI 全量 80 / 80 通过;SDK 和桌面 TypeScript 检查通过;中英字典各 7,746 项,错误 0,Android 的 62 项 fallback 模板匹配。
  • 桌面组件 fixture:22 项通过,覆盖忙碌状态、错误和恢复入口、凭据主动读取/隐藏、手机不可用、英文窄窗。
  • 启动准备的账号隔离测试:18 项通过,覆盖匹配会话直接使用、空运行时移交、跨账号、退出标记、二次验证与异步期间账号变化。
  • 真实账号:使用用户当前已登录的 Mac dev 及同一后台。网络学堂显示 11 张课程卡片,页面的 17 次 XHR 均返回 200,无密码输入框和 JavaScript 错误。继续从卡片进入课程,课程页返回 200,显示 10 个作业/文件/通知导航入口,8 次课程接口请求均为 200(通知、讨论、作业列表与课件)。没有输出账号、课程名、课程 ID、Cookie 或票据。
  • 真实页面中的两个 alert 被无界面验收浏览器拒绝;这项记录只说明自动验收可以继续,不宣称可见浏览器的弹窗体验已经验收。
  • 本轮只检查网页与只读接口;未下载真实附件,未提交作业、预约、消息或业务表单。

当前 dev 的实例处理

检查本机应用时曾误启动 /Applications/OneTHU.app 安装版,造成一个额外未登录窗口。已关闭这一实例,保留用户原有的缓存 dev 应用。之后更新只替换现有 CLI 运行时代码并连接同一资料目录,不复制账号文件、不另建账号运行时。用户已经完成登录,不需要再次登录来完成此次验收。

最终验证的运行时构建标识:f5c002823d1240b6cadd26877a910a3731aa067c66352642fff59c5201c2829a。更新后共享账号仍为 ready / authenticated,GUI 未重启。

覆盖边界

已完成的是桌面当前会话、受控本机代理、校园浏览器和平台控制代码。实际系统证书信任与全机 PAC 没有在本轮改变;Windows 系统操作使用模拟平台测试,未作 Windows 实机验收。各校园站点需要分别验证网页、业务身份、附件与写操作。

手机系统入口、微信小程序、局域网配对、TUN、WebSocket 和 HTTP/2/3 尚未完成。系统代理也不能保证第三方网络库采用它。现阶段不能以网络学堂单站成功推断整个设备的全部校园服务已经接管。

Cookie 历史迁移边界:新的 SDK/core bootstrap 已保留未知 HttpOnly 属性,但旧版 native snapshot 曾将缺失属性导出为 false。投影仍严格限于 Learn 精确作用域的 XSRF-TOKEN;旧 native 合成记录的属性来源无法仅凭现存快照反推,后续 native 属性迁移需要单独覆盖。