PKU harness

能力需求

插件在 `requires` 里声明它需要手机提供哪些能力。手机满足不了时,框架会隐藏这个插件,并告诉用户原因。

手机和电脑不同。插件在手机上没有 shell,也没有用户可见的文件系统,后台运行的时间也有限。另外,有些校园网站只能在校园网内访问。

所以,每个插件都要说明自己需要手机提供哪些能力。插件在 PluginDef.requires 里列出这些能力,注册表条目里的 requires 也一样。框架会把这份列表和手机实际提供的能力做比较。只要有一项不满足,插件就会对助手隐藏,它的工具调用会被拒绝,设置页会显示原因。

例如,财务插件需要已登录的校园会话,还需要校园网:

definePlugin({
  id: 'finance',
  // …
  requires: ['campus-session', 'campus-network'],
});

能力列表

能力含义目前是否提供
network普通的互联网访问是
campus-network只能在北大校园网内访问的网站是(见下文)
campus-session通过宿主发出的、已登录的校园请求仅 Android
notifications本地通知是
background定期在后台运行是
cloud已配置 PKU harness Cloud 服务配置了服务时提供
ongoing常驻通知或前台服务仅 Android
phone-control操作手机上的其他 App(Copilot,通过 services.phone)Android 12 及以上
shell命令行 shell手机上永远没有
filesystem文件系统不向插件开放

下面是几项需要补充说明的能力。

  • network 指直接用 fetch 访问互联网。
  • campus-network 在 App 里始终声明为可用。但如果手机不在校园网内,请求会失败。
  • campus-session 指通过宿主的 services.campus 发出已登录的校园请求,账号密码不会暴露给插件。它依赖原生的 campus-http 模块,所以目前只在 Android 上提供。iOS 要等这个模块移植到 Swift 之后才能提供。
  • cloud 会随你的配置实时变化。你配置了 Cloud 服务,它就可用;你移除配置,它就不可用。
  • ongoing 对应 services.ongoing,用来显示常驻通知或运行前台服务。
  • shell 在手机上永远不会提供。需要 shell 的插件只能做成远程插件。
  • filesystem 不向插件开放。如果需要用户选择的文件,请使用 services.files.pick。

规则

  • 必须列出插件的工具依赖的每一项能力。调用 services.campus.request 的插件需要 campus-session。如果它还访问只在校园网内可用的网站,还需要 campus-network。
  • 内置插件不得要求 shell 或 filesystem。繁重的工作,例如抓取大量页面、文字识别(OCR)或长时间运行的任务,应该放到远程插件里。
  • 远程插件运行在服务器上,所以 shell 对它们来说不是手机需要提供的能力。注册表的校验工具会拒绝远程插件条目里的 requires: ['shell']。
  • 应当在使用可选服务之前先检查它是否存在。没有 ongoing 能力时,services.ongoing 为 undefined。宿主不支持云服务时,ctx.cloud 为 undefined。
  • 如果插件不依赖云服务也能工作,应当声明 cloud.optional: true,而不是要求 cloud。使用前请检查 ctx.cloud?.available。

本页目录