OH 应用能力接入审查(2026-10-26)¶
触发与根因¶
用户先后转述 OH「雨课堂没接入」「没有好友列表接口」,并要求同时检查组织、清小搭和暂存箱。
两类问题同时存在:雨课堂已有工具却被旧对话里的错误判断覆盖;通讯录、组织、技能广场和暂存箱则确实缺少完整的公共接口。原 skills_search 只能查已启用且可运行的技能,不能代表清小搭广场。扩展插件、技能与页面搜索都不是内建服务的完整目录。
统一入口¶
新增 app_services 与 app_call,复用已审核的 CLI 服务边界,包括参数校验、账号代次、结果去凭据和操作审批。每轮注入宿主实际注册的服务名;专用工具继续使用。当前静态目录 161 项,另外合入已有 Learn 与任务服务。
应用内部 OH 无需打开对外 CLI 监听。内部标记只由宿主组合代码设置,不能通过请求 JSON 指定。智能体授权关闭后读写均停止;后台任务仍受 CLI 开关约束。未知操作、任意命名空间、原始存储与网络透传不进入该目录。app_call 的写操作由服务端真实审批决定,模型不能用一句「已确认」绕过。
新增功能与调用边界见 docs/oh-app-services.md,英文见 docs/en/oh-app-services.md。
本轮功能覆盖¶
| 类别 | 接入结果 |
|---|---|
| 好友 | 当前账号的 OneTHU 通讯录列表、筛选、名片详情;默认个人好友,组织名片可选 |
| 组织 | 索引与详情、实时远程成员核验、项目、公告、关联云盘与 GitLab 引用;本地创建、资料编辑、项目与公告增改删 |
| 清小搭 | 登录状态、智能体、模型、余额、历史会话、技能广场分页搜索与详情、已安装技能、导入、启停、删除、经批准向真实智能体提问 |
| 暂存箱 | 箱子及条目查询、所选内容、UTF-8 分页读取;新建、改名、存文字、存原子引用、验证后存云盘文件、移除条目、生成或复用短口令、接收到新箱 |
| 旧版专用能力 | 学校查询、雨课堂、搜索与导航、白板、OnePage、OneGO、标签/工作区、主题、插件、OneFlow、常驻任务保留,并通过能力检索可发现 |
需要用户选择系统文件、扫码/NFC、修改组织成员角色或共享授权的流程继续打开真实页面。组织 create 只创建本地索引,不能汇报为已经创建并授权共享空间。暂存箱仅接收箱子口令,不顺带接受好友或组织邀请,也不替用户向其他人发送口令。
这批新增数据源属于运行中的 App;本轮没有把这些本地索引迁到独立 daemon。独立 CLI 的实际能力以自身目录为准。
数据与安全修补¶
- 八项独立权限:contacts:read、org:read/write、xiaoda:read/manage/chat、vault:read/write。同步两份内置 Harness 清单、插件验证白名单与中英文权限说明,保留已有设置。
- 好友及组织查询校验个人资料归属;完整模式、学校账号、原生会话代次与相关云盘凭据变化均核实。远程组织拒绝访问时保留错误,禁止用旧缓存假装成功。
- 名片结果排除图片、共享口令、通道与旧分享记录;组织结果排除邀请和共享凭据;暂存箱排除原始内部 payload、私有暂存路径与分享凭据。分享操作只显式返回所需短码。
- 组织写入复用实时角色检查和内容版本检查;在 GitLab 读取 CSRF 后、真正提交前再次执行本次 guard。原页面调用不传 guard 时保持既有行为。
- 清小搭提问先验证真实 agent id,确认后才创建会话和发送文本;导入/启停保留原生技能兼容性门禁。技能检索移除原有 30 项静默截断,广场保留显式页码和学校分页信息。
- 暂存箱文本返回总字符数和下一段位置。UTF-8 文件读取显式限制 8 MiB;旧交换读者的单条文字 4096 字符限制在分享前报错,避免接收时静默丢字。原文件和源对象不会因移除暂存条目而删除。
- 分享的创建资料库、上传文件和生成链接支持逐步 guard;取消或账号变化后不继续发布,也不把旧操作的分享记录写到另一账号。OH 接入适配器时关闭顺带的过期分享清理。
- 目录分享仅在明确的策略拒绝时退化为文件分享;HTTP5xx、超时等不确定结果不再再次创建另一链接。
- 任务说明修正为桌面常驻后台保持运行时,退出 App 仍可执行;手机不承诺退出后的常驻。
实际验收与限制¶
使用原 dev 的真实公共服务边界成功读取:1 个好友、1 个组织、1 个暂存箱(6 项);清小搭技能广场第一页返回 20 项、总计 273 项,本机已安装技能为空。真实姓名、组织内容和会话信息只存于用户私有临时证据,不写入仓库。
使用原问题调用真实 askOh 时,当前 MadModel 返回 HTTP502。随后用同一学校会话和模型发起不带工具、不带历史的最小请求,也返回 HTTP502、error.type=server_error。说明当前模型服务故障不依赖本轮工具参数或好友接口。未切换用户的模型提供方,未清历史、重装插件或要求重新扫码。
因此:真实数据接口已验通;当前无法宣称模型已正确回答原问题,微信下一条新查询也未验通。源代码中的临时验收模块与入口均已移除。未发送微信消息,未实际安装技能、修改组织或生成真实分享。
最终版本已加载原 dev,页面和既有 OH 历史正常恢复。资源与实际安装的 Harness 二进制 SHA256 一致:aa106b9eac0e10d0985e83f70383ee3b8efbc9491a37f467e30f5a98722e2b3f。
检查¶
- 应用接口与权限/账号/模式/目录覆盖:14 组。
- 暂存箱实际状态与交换/上传授权:6 组,涵盖提交前撤权、创建前撤权、上传后账号变化和不确定结果不重放。
- CLI 服务边界:49 项;最终写入守卫:6 组;GitLab 写入与不确定结果重放:15 组。
- 组织协作协议:38 项;独立 SDK:197 项;Harness core:71 项。
- Info-lib 构建、桌面类型检查、中英文文案生成及检查、前端生产构建、Harness release 构建。
- 新测试登记进
pnpm test:oh。新增命名空间所有公共方法必须登记审核目录,防止再次只做页面而漏接 OH。
代码继续保留原 CLI、SDK、通知附件和 PR58 的本地工作;没有发布安装包。