@heybox/hb-sdk API Reference - v0.9.5
    正在准备搜索索引...
    • 启动指定 alias 的 Companion,或取得已经活动的同 alias Session。

      参数

      • alias: string

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

      返回 Promise<CompanionSession>

      Host 确认进程处于 running 并把当前 controller 交给本 Runtime 后返回 CompanionSession proxy。如果同 alias 已有活动 Session,则返回该进程而不是 创建第二个;同一 SDK 页面内相同 Session ID 会复用同一个 proxy 对象。

      HbMiniProgramSDKError alias 不符合格式时在请求前以 INVALID_PARAMS 拒绝。真正创建新进程时,缺少新的可信用户手势以 USER_GESTURE_REQUIRED 拒绝,用户 取消 Host 授权以 COMPANION_USER_CANCELLED 拒绝,产物尚未 ready 以 COMPANION_NOT_PREPARED 拒绝;描述符不可用、操作系统阻止、启动失败或未来管理员权限 被拒绝时,可能以 COMPANION_DESCRIPTOR_UNAVAILABLE、COMPANION_OS_BLOCKED、 COMPANION_LAUNCH_FAILED、COMPANION_ELEVATION_DENIED 拒绝。

      当前版本未声明 alias、当前平台没有匹配 target、预览 Host 不支持 Companion 或当前 Host 未开放能力时,可能以 COMPANION_NOT_DECLARED、COMPANION_TARGET_UNSUPPORTED、 COMPANION_PREVIEW_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 错误码。

      launch() 不会隐式调用 companion.prepare, 也不会下载、校验或解压产物。没有活动 Session 时,产物必须已通过原子提交进入 ready;应先用 companion.getPreparationStatus 展示准备状态,并由单独的用户操作完成准备。

      真正创建新进程的 launch() 与开始新准备的 prepare() 必须来自两次独立的可信用户 手势和两次 Host 授权。不要在一个点击回调中 await prepare() 后串联 launch,也不要在 页面挂载、定时器或 Promise continuation 中自动启动。调用 launch() 时应把它作为用户 回调中的第一个异步操作;SDK/Runtime 会自行处理握手。

      同一小程序 identity 与 alias 同时最多有一个活动 Session。Runtime 会先查询活动进程; 若存在,则直接取得并返回它,不要求新的手势、不显示 launch 授权,也不调用 Host 的新 进程启动原语。页面 reload 后只需恢复现有进程时,优先使用 companion.getActiveSession,更清楚地 表达“重新取得 controller”而不是“启动”。

      返回的 proxy 公开稳定的 id、alias、target、只读 capabilities 与初始 state: 'running',以及 terminate()、waitForExit()、onStateChange()、onExit()、 onOwnershipLost()。它不暴露 PID、物理路径、命令行、原生句柄或 controller generation。只有 Host 返回的 capability 集合包含对应项时,stdio、attachments、 notifications 才存在;调用方必须按属性是否存在分支。

      进程由 Host 持有,页面隐藏或 reload 不会结束它。当前受支持的新 PC Host 提供 Session event source;其他 Runtime 取得 controller 后,当前 proxy 会触发 onOwnershipLost(),控制类操作随后以 COMPANION_SESSION_OWNERSHIP_LOST 失败,但 waitForExit() 仍等待同一进程退出。退出后 state 变为 exited,onExit() 与 waitForExit() 获得同一份退出结果。自定义 Host 若未提供 可选的 Session 事件源,则这些本地监听不会主动更新,waitForExit() 也可能一直 pending;集成方应补齐事件源。

      该调用需要 Manifest 声明且平台批准 companion 权限。V1 真实启动仅支持新 PC Host 的 windows-x64 与 macos-arm64;Browser Dev Host 只启动确定性 Fake,不下载、不解压、 不执行本机程序,不能替代目标系统验收。可先用 companion.getInfo 展示 target、capability、签名 与产物来源,但这些元数据本身不表示已经 ready。

      import hbSDK from '@heybox/hb-sdk'

      launchButton.addEventListener('click', () => {
      // launch() 是点击回调中的第一个异步操作,不复用 prepare() 的手势。
      void launchRunner().catch(showLaunchError)
      })

      async function launchRunner() {
      const session = await hbSDK.companion.launch('runner')
      const stopOwnership = session.onOwnershipLost(disableCompanionControls)
      const stopOutput = session.stdio?.onStdout(handleCompanionBytes)

      const exit = await session.waitForExit()
      stopOutput?.()
      stopOwnership()
      renderCompanionExit(exit)
      }

      0.8.1

      windows

      macos

      windows none

      macos none