@heybox/hb-sdk API Reference - v0.9.5
    正在准备搜索索引...
    • 取得指定 alias 当前活动 Session 的控制权。

      参数

      • alias: string

        package.json#heybox.companions 中声明的 Companion alias。必须完整匹配 [a-z][a-z0-9-]{0,31}:长度为 1 至 32,第一个字符是小写 ASCII 字母,其余字符 只能是小写字母、数字或连字符;SDK 不会 trim 或改变大小写。

      返回 Promise<CompanionSession | undefined>

      Host 没有该 alias 的活动进程时返回 undefined;否则返回取得当前 controller 的 CompanionSession proxy。undefined 只表示没有正在运行的进程,可能是尚未 启动、已经退出或从未启动,不表示产物未准备。

      HbMiniProgramSDKError alias 不符合格式时在请求前以 INVALID_PARAMS 拒绝;当前审核版本未声明 alias、目标平台不匹配或 Host 不支持时可能以 COMPANION_NOT_DECLARED、COMPANION_TARGET_UNSUPPORTED、COMPANION_UNSUPPORTED 或 METHOD_FORBIDDEN 拒绝。当前运行快照缺少或未启用 companion 权限时分别以 PERMISSION_NOT_IN_SNAPSHOT、PERMISSION_DENIED 拒绝;Host 返回非法 Session 快照时以 COMPANION_HOST_FAILED 拒绝,同一 Session ID 的 alias、target 或 capability 集合发生 不兼容变化时以 COMPANION_SESSION_VERSION_MISMATCH 拒绝。握手失败、SDK/Runtime 已 销毁、bridge 超时及其他 Host 失败会保留对应 SDK 错误码。

      这不是只读状态查询。Host 成功返回活动 Session 时会把该 Session 的 controller 转移 给当前 Runtime,并使用递增的私有 generation 使旧 controller 失效;generation 不会暴露 在 CompanionSession 上。其他页面或 Runtime 后续取得控制权时,当前 proxy 的 CompanionSession.onOwnershipLost 会收到通知,之后 write()、closeStdin()、 terminate()、附件和通知等控制操作以 COMPANION_SESSION_OWNERSHIP_LOST 失败。

      SDK 每次调用都会询问 Host,不会因为本地已有 proxy 而跳过请求。同一 SDK 页面内按 Session id 缓存 proxy:若 companion.launch 或本方法再次返回同一个 Session ID 和更新的 generation,SDK 更新同一个对象并返回原 引用,因此 === 保持成立,已注册的输出、状态、退出与 ownership listener,以及 CompanionSession.waitForExit 都继续有效。低于或等于当前值的旧 generation 不会 让已丢失控制权的 proxy 重新获得控制。页面 reload 会创建新的 SDK 和 proxy,不保证 JavaScript 对象身份跨页面保持。

      返回的 proxy 公开稳定的 id、alias、target、只读 capabilities 和 state,不暴露 PID、物理路径、原生句柄或 generation。只有 Host 快照实际包含对应 capability 时, stdio、attachments、notifications 才存在;调用前应按属性是否存在分支,不能只按 操作系统猜测。

      失去控制权不会让进程退出,state 仍可为 running, CompanionSession.waitForExit 也会继续等待同一进程的退出事件。需要继续控制时, 可在明确的恢复动作中重新调用本方法;不要轮询抢占 controller。该方法本身不会准备或 启动进程,也不需要可信用户手势或 Host 授权弹窗;创建新进程仍应由新的用户操作调用 launch()。

      import hbSDK from '@heybox/hb-sdk'

      const session = await hbSDK.companion.getActiveSession('runner')
      if (!session) {
      const preparation = await hbSDK.companion.getPreparationStatus('runner')
      renderIdleState(preparation)
      } else {
      const stopOwnership = session.onOwnershipLost(() => {
      disableCompanionControls()
      })

      try {
      const exit = await session.waitForExit()
      renderExit(exit)
      } finally {
      stopOwnership()
      }
      }

      0.8.1

      windows

      macos

      windows none

      macos none