package.json#heybox.companions 中声明的 Companion alias。必须完整匹配
[a-z][a-z0-9-]{0,31}:长度为 1 至 32,第一个字符是小写 ASCII 字母,其余字符
只能是小写字母、数字或连字符;SDK 不会 trim 或改变大小写。
Host 当前保存的冻结 CompanionPreparationStatus 快照,以 state 区分
not-prepared、preparing、ready 与 failed。
HbMiniProgramSDKError alias 不符合格式时在请求前以 INVALID_PARAMS
拒绝;当前版本未声明 alias、当前平台没有匹配 target、预览 Host 不支持 Companion、
描述符暂不可用或 Host 不支持该能力时,可能以 COMPANION_NOT_DECLARED、
COMPANION_TARGET_UNSUPPORTED、COMPANION_PREVIEW_UNSUPPORTED、
COMPANION_DESCRIPTOR_UNAVAILABLE、COMPANION_UNSUPPORTED 或 METHOD_FORBIDDEN 拒绝。
当前运行快照缺少或未启用 companion 权限时分别以 PERMISSION_NOT_IN_SNAPSHOT、
PERMISSION_DENIED 拒绝;Host 返回未知 state、非法进度、非法 preparedAt 或失败摘要
时以 COMPANION_HOST_FAILED 拒绝。握手失败、SDK/Runtime 已销毁、bridge 超时及其他
Host 失败会保留对应 SDK 错误码。
该方法是只读查询:不会开始、加入或取消准备,不会下载、校验、解压或启动程序。
它不要求可信用户手势,也不展示 prepare/launch 的 Host 授权弹窗,但仍需要 Manifest
声明且平台批准 companion 权限。V1 真实能力仅支持新 PC Host 的 windows-x64 与
macos-arm64;Browser Dev Host 的固定 Fake 状态只用于恢复流程联调。
not-prepared:当前版本与 target 没有已提交产物,也没有在途操作。需要由新的可信
用户操作调用 companion.prepare。preparing:Host 持有在途操作,progress 是查询时的最近快照。页面 reload、最小化
或进入后台不会取消它;需要持续进度时可再次调用 prepare() 加入同一操作并传
onProgress,而不是轮询本方法模拟事件流。ready:产物已完成原子提交;preparedAt 是 Host 时间戳,不是过期时间或版本号。
启动仍需新的可信用户手势和独立 Host 授权。failed:error.code 是稳定分支字段,message 是 Runtime 规范化文案;
retryable 只建议一次新的 prepare 是否可能成功,不会自动重试或绕过门禁。状态由 Host 按当前小程序 identity、版本、target 与 alias 持有,页面 reload 后可以重新
查询恢复 UI。快照不随状态变化自动更新:调用 prepare()、
companion.cancelPreparation 或发生
原子提交竞态后,应再次查询对账。取消意图不保证赢得提交竞态,因此取消后仍可能得到
ready,不能直接在页面本地假设 not-prepared。
companion.getInfo 读取当前产物的名称、target、 capability、大小、签名与来源,但不包含准备 state;两者不能互相替代。
import hbSDK from '@heybox/hb-sdk'
const status = await hbSDK.companion.getPreparationStatus('runner')
switch (status.state) {
case 'not-prepared':
showPrepareButton()
break
case 'preparing':
renderProgress(status.progress)
break
case 'ready':
showLaunchButton(status.preparedAt)
break
case 'failed':
renderPreparationError(status.error.code, status.error.retryable)
}
查询指定 alias 的准备状态;页面 reload 后可据此重新加入在途准备。