@heybox/hb-sdk 0.9.4-alpha.4 → 0.9.4-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +10 -5
  3. package/dist/cli-chunks/{artifact-B--9XAIs.cjs → artifact-D5nba0ma.cjs} +3 -3
  4. package/dist/cli-chunks/{build-CAfDVJee.cjs → build-DQc32VJQ.cjs} +5 -5
  5. package/dist/cli-chunks/{create-vb9O6sKj.cjs → create-ffrMHEIA.cjs} +1 -1
  6. package/dist/cli-chunks/{deploy-lock-Bw3DtFVd.cjs → deploy-lock-hFiYSm4l.cjs} +1 -1
  7. package/dist/cli-chunks/{dev-7b8mHN_k.cjs → dev--vpWNxvZ.cjs} +8 -8
  8. package/dist/cli-chunks/{dev-context-CUoKTolJ.cjs → dev-context-Bo54XJVn.cjs} +2 -2
  9. package/dist/cli-chunks/{doctor-PqYtjWlp.cjs → doctor-ljmHE-Eu.cjs} +1 -1
  10. package/dist/cli-chunks/{games-Dwk0LnWJ.cjs → games-DBa_MNAm.cjs} +2 -2
  11. package/dist/cli-chunks/{index-CODS_-j0.cjs → index-CD-u4YfP.cjs} +1 -1
  12. package/dist/cli-chunks/{index-BGczaZen.cjs → index-DyDrs_NZ.cjs} +17 -18
  13. package/dist/cli-chunks/{index.esm-BCZUlOrb.cjs → index.esm-DnWSYrc7.cjs} +6 -6
  14. package/dist/cli-chunks/{login-CCFzWeNC.cjs → login-BEBMdi8r.cjs} +1 -1
  15. package/dist/cli-chunks/{project-vite-ZnlUOO53.cjs → project-vite-C25k1a7K.cjs} +1 -1
  16. package/dist/cli-chunks/{remote-B_IBeqPj.cjs → remote-BsZbVhxa.cjs} +10 -8
  17. package/dist/cli-chunks/{runtime-permission-env-DiefxH9S.cjs → runtime-permission-env-G4lQMcP7.cjs} +18 -4
  18. package/dist/cli-chunks/{skill-Dq2_U9GQ.cjs → skill-Cv69hni4.cjs} +2 -2
  19. package/dist/cli-chunks/{version-D_8aSq1N.cjs → version-Bn3O0RsH.cjs} +1 -1
  20. package/dist/cli.cjs +1 -1
  21. package/dist/devtools/browser-dev-host/assets/browser-dev-host-BMNxqJ6H.js +102 -0
  22. package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-ClEksEun.js → desktop-app-launch-Bz4IpjvW.js} +1 -1
  23. package/dist/devtools/browser-dev-host/assets/{index-CA6I62EB.js → index-pi7EhdbU.js} +3 -3
  24. package/dist/devtools/browser-dev-host/index.html +2 -2
  25. package/dist/index.cjs.js +77 -4
  26. package/dist/index.esm.js +77 -5
  27. package/dist/miniapp-publish.cjs.js +16 -2
  28. package/dist/miniapp-publish.esm.js +16 -2
  29. package/dist/protocol.cjs.js +19 -3
  30. package/dist/protocol.esm.js +19 -3
  31. package/dist/vite.cjs.js +17 -3
  32. package/dist/vite.esm.js +17 -3
  33. package/package.json +4 -4
  34. package/skill/skill.json +4 -4
  35. package/types/index.d.ts +80 -4
  36. package/types/miniapp-publish/index.d.ts +1 -1
  37. package/dist/devtools/browser-dev-host/assets/browser-dev-host-hk_58kmi.js +0 -102
package/CHANGELOG.md CHANGED
@@ -2,6 +2,30 @@
2
2
 
3
3
  本文件随 `@heybox/hb-sdk` npm 包公开分发,只记录外部小程序开发者可观察到的变化。
4
4
 
5
+ ## 0.9.4-alpha.6 - 2026-10-28
6
+
7
+ ### 行为调整
8
+
9
+ - [游戏存档 API](https://docs.xiaoheihe.cn/hb_sdk/guide/game-saves) 不再弹出独立的用户授权确认;仍需声明 `gameSaves`、登录小黑盒并使用正式发布版本,需要 Host 与后端配套更新。
10
+
11
+ ### 新增能力
12
+
13
+ - 新增 `gameSaves.list()`、`gameSaves.sync()`,以及列表文件对象的 `downloadFile()`,用于查询、同步和读取当前用户的 Steam 游戏存档;`list(gameId)` 直接返回存档数组,`sync(gameId, { signal? })` 等待同步完成;游戏 ID 直接传字符串,账号由 Runtime 内部处理;`sync()` 无需先查询,等待成功后正常完成 `Promise<void>`,支持取消等待,不暴露内部任务阶段,文件通过受控沙箱读取;使用前须声明 `gameSaves` 权限,需要 Host 配套更新。
14
+ - 列表文件对象的 `downloadFile()` 自动沿用查询时的游戏、账号和文件,无需重复传入 ID,返回只读 ZIP 文件,解压及游戏数据解析由开发者负责;切换账号或运行资格变化后,已有存档文件句柄失效。
15
+ - 宿主持久存储可用时,取消等待或退出小程序后再次调用 [gameSaves.sync()](https://docs.xiaoheihe.cn/hb_sdk/guide/game-saves),可恢复上次同步任务的等待并获取结果;不包含文件下载断点续传,需要 Host 配套更新。
16
+
17
+ - 独立接口 `gameSaves.getLatestStructuredData(gameId)` 读取悟空和任务栏英雄的完整结构化业务数据,成功返回 `{ status: 'ready', data: {...} }`;不触发解析,解析数据暂不可用时仍可使用文件清单,需要 Host 与后端配套更新。
18
+
19
+ ### 文档与工具
20
+
21
+ - 新增[游戏存档接入指南](https://docs.xiaoheihe.cn/hb_sdk/guide/game-saves),说明错误处理、单文件大小和会话累计额度限制。
22
+
23
+ ## 0.9.4-alpha.5 - 2026-10-28
24
+
25
+ ### 问题修复
26
+
27
+ - 修复部分 Android WebView 中小程序截图的品牌引导标记被横向压缩的问题;需要宿主配套更新,小程序无需修改截图调用。
28
+
5
29
  ## 0.9.4-alpha.4 - 2026-10-28
6
30
 
7
31
  ### 问题修复
package/README.md CHANGED
@@ -187,6 +187,8 @@ console.log(info.sdk.version);
187
187
 
188
188
  ## 文件与传输
189
189
 
190
+ `gameSaves.list / sync` 只需传入 `gameId` 即可查询与同步当前绑定 Steam 账号的存档;列表文件对象通过 `downloadFile({ signal? })` 下载,无需重复传入游戏、账号、存档或文件 ID;`sync` 返回 `Promise<void>`,等待成功并支持取消,Host 私有存储可用时再次调用可恢复上次未结束的同步等待,仍以服务端状态为准。需声明 `gameSaves`,无需单独的用户确认弹窗;返回只读 ZIP 文件,开发者调用 `readBytes()` 后自行解压、解析。首期为新版 Steam 云同步结果,单文件上限 8 MiB、会话上限 32 MiB;需要配套后端和受信 Host。详见[游戏存档](https://docs.xiaoheihe.cn/hb_sdk/guide/game-saves)。
191
+
190
192
  `network.upload()` 接收一个可读 `FileHandle`,由 Host 直接流式上传到开发者指定 URL。raw 支持 PUT(默认)/POST,multipart 固定 POST 并可携带字符串字段;支持进度、取消、空闲超时、可选大小限制和标准 HTTP 响应。文件字节不经过 iframe,上传期间应保持源文件不变;首版不自动重试、分片、续传或复制快照。PC、Android、iOS、OHOS 按真实 Host primitive 启用,旧 Host 明确拒绝。完整示例见[文件能力与沙箱](https://docs.xiaoheihe.cn/hb_sdk/guide/files-and-sandbox)。
191
193
 
192
194
  `files` 提供当前小程序私有 sandbox 和由用户选择授予的外部 File/Directory;
@@ -229,6 +231,8 @@ console.log(await downloaded.readText());
229
231
 
230
232
  `remove()` 只允许删除 sandbox 对象;外部 picker、`saveFile()` 及其派生项即使是 `readwrite` 也返回 `FILE_ACCESS_DENIED`。单个 Runtime session 最多保留 1024 个外部 direct handle,超限返回 `FILE_QUOTA_EXCEEDED`。Host 文件错误只向 SDK 暴露稳定 code 与 canonical 安全文案,业务不要依赖平台原始 message 或附加 data。
231
233
 
234
+ `const result = await gameSaves.list(gameId)` 只查询文件清单;独立调用 `await gameSaves.getLatestStructuredData(gameId)` 读取悟空、任务栏英雄的完整结构化业务数据;成功返回 `{ status: 'ready', data: {...} }`,其余情况通过 `status` 区分,不会触发解析或预下载文件。详见[游戏存档指南](https://docs.xiaoheihe.cn/hb_sdk/guide/game-saves)。
235
+
232
236
  ## 受管桌面程序
233
237
 
234
238
  真实 PC 的本地临时 Companion 还要求 Host 支持私有 local-dev lease;该 lease 由 Host 原子记录 prepare、Session 与进程树 provenance,并在 H5/CLI 失联后自行清理。缺少该 capability 的旧 PC Host 会安全拒绝真实临时 Companion,Browser Fake 和普通 network 调试仍可用。
@@ -288,8 +292,8 @@ const stopViewport = hbSDK.on('viewport_change', (windowInfo) => {
288
292
 
289
293
  ```ts
290
294
  const stopDisplay = hbSDK.on('display_change', ({ orientation, fullscreen }) => {
291
- console.log('当前方向', orientation, '当前全屏状态', fullscreen)
292
- })
295
+ console.log('当前方向', orientation, '当前全屏状态', fullscreen);
296
+ });
293
297
 
294
298
  // 页面销毁时调用 stopDisplay()。
295
299
  ```
@@ -320,9 +324,9 @@ window.addEventListener('unload', stopHandshakeState, { once: true });
320
324
 
321
325
  SDK 还提供 `getHandshakeState()` / `onHandshakeStateChange()` 管理持久握手状态,并通过 `on()` / `off()` 处理前后台、登录态等生命周期事件。
322
326
 
323
- | 模块 | 用途 |
324
- | ------------ | ----------------------------------------------- |
325
- | `auth` | 获取交给开发者服务端交换的短期授权码 |
327
+ | 模块 | 用途 |
328
+ | ------------- | ----------------------------------------------- |
329
+ | `auth` | 获取交给开发者服务端交换的短期授权码 |
326
330
  | `environment` | 读取当前实例的冻结环境快照 |
327
331
  | `user` | 读取 Host 当前用户资料、隔离身份或撤销授权 |
328
332
  | `share` | 打开分享、复制链接或截图分享流程 |
@@ -336,6 +340,7 @@ SDK 还提供 `getHandshakeState()` / `onHandshakeStateChange()` 管理持久握
336
340
  | `cloud` | 使用小程序云端排行榜与用户私有云端存储 |
337
341
  | `network` | 发起经过平台授权的网络请求及受控文件传输 |
338
342
  | `companion` | 准备、启动并控制当前版本审核过的桌面辅助应用 |
343
+ | `gameSaves` | 查询、同步并读取当前用户的 Steam 游戏存档 |
339
344
 
340
345
  `share.screenshot()` 每次调用都会在 SDK 侧输出行为变更 warning,提醒升级后的布局与配色要求;日志失败不阻断调用。截图从正式 SDK `0.9.1` 起默认添加水印。新 Runtime 对低于 `0.9.1` 的 SDK(包含 `0.9.1-alpha.*`)或缺少 SDK 版本记录的兼容模式静默保持无水印截图;升级前需同步调整布局。启用水印时,会在截图区域底部添加当前小程序名称的品牌搜索胶囊及灰色「小黑盒工坊小程序」。请在目标区域底部预留至少 57 个逻辑像素的空白背景,避免遮挡重要内容,并保证背景与水印有足够对比度。`watermarkTheme: 'light'` 适合浅色背景(黑色水印),`'dark'` 适合深色背景(白色水印,默认);不自动跟随系统主题。水印仅在 SDK 截图期间展示,不增加图片尺寸;系统按键截图暂不支持。截图等待不受 SDK 普通请求超时限制;排队和延迟期间会响应会话终止,Mobile Host 从投递原生截图起最多等待 15 秒成图回调。详见 [截图分享布局要求](https://docs.xiaoheihe.cn/hb_sdk/recipes/community-share#截图分享)。
341
346
 
@@ -3,9 +3,9 @@
3
3
  var fs = require('node:fs');
4
4
  var fs$1 = require('node:fs/promises');
5
5
  var path = require('node:path');
6
- var runtimePermissionEnv = require('./runtime-permission-env-DiefxH9S.cjs');
7
- require('./version-D_8aSq1N.cjs');
8
- var index = require('./index-BGczaZen.cjs');
6
+ var runtimePermissionEnv = require('./runtime-permission-env-G4lQMcP7.cjs');
7
+ require('./version-Bn3O0RsH.cjs');
8
+ var index = require('./index-DyDrs_NZ.cjs');
9
9
  var node_crypto = require('node:crypto');
10
10
  require('node:zlib');
11
11
  require('node:module');
@@ -2,14 +2,14 @@
2
2
 
3
3
  var fs = require('node:fs/promises');
4
4
  var path = require('node:path');
5
- var runtimePermissionEnv = require('./runtime-permission-env-DiefxH9S.cjs');
6
- var index = require('./index-BGczaZen.cjs');
5
+ var runtimePermissionEnv = require('./runtime-permission-env-G4lQMcP7.cjs');
6
+ var index = require('./index-DyDrs_NZ.cjs');
7
7
  require('node:crypto');
8
8
  require('node:fs');
9
9
  require('node:zlib');
10
- var artifact = require('./artifact-B--9XAIs.cjs');
11
- var projectVite = require('./project-vite-ZnlUOO53.cjs');
12
- require('./version-D_8aSq1N.cjs');
10
+ var artifact = require('./artifact-D5nba0ma.cjs');
11
+ var projectVite = require('./project-vite-C25k1a7K.cjs');
12
+ require('./version-Bn3O0RsH.cjs');
13
13
  require('node:async_hooks');
14
14
  require('node:module');
15
15
  require('readline');
@@ -5,7 +5,7 @@ var fs = require('node:fs/promises');
5
5
  var path = require('node:path');
6
6
  var require$$0 = require('fs');
7
7
  var require$$1 = require('path');
8
- var index = require('./index-BGczaZen.cjs');
8
+ var index = require('./index-DyDrs_NZ.cjs');
9
9
  require('node:module');
10
10
  require('readline');
11
11
  require('os');
@@ -3,7 +3,7 @@
3
3
  var node_crypto = require('node:crypto');
4
4
  var fs = require('node:fs/promises');
5
5
  var path = require('node:path');
6
- var index = require('./index-BGczaZen.cjs');
6
+ var index = require('./index-DyDrs_NZ.cjs');
7
7
 
8
8
  const DEPLOY_LOCKED_MESSAGE = '当前设备已有同版本产物正在上传,请等待完成后重试';
9
9
  const DEPLOY_LOCK_DIRECTORY_NAME = 'deploy-locks';
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-BGczaZen.cjs');
3
+ var index = require('./index-DyDrs_NZ.cjs');
4
4
  var node_crypto = require('node:crypto');
5
5
  var fs = require('node:fs');
6
6
  var path = require('node:path');
7
- var runtimePermissionEnv = require('./runtime-permission-env-DiefxH9S.cjs');
8
- var version = require('./version-D_8aSq1N.cjs');
7
+ var runtimePermissionEnv = require('./runtime-permission-env-G4lQMcP7.cjs');
8
+ var version = require('./version-Bn3O0RsH.cjs');
9
9
  require('node:zlib');
10
- var devContext = require('./dev-context-CUoKTolJ.cjs');
10
+ var devContext = require('./dev-context-Bo54XJVn.cjs');
11
11
  var os = require('node:os');
12
12
  var net = require('node:net');
13
13
  var promises = require('node:dns/promises');
@@ -18,7 +18,7 @@ var fs$1 = require('node:fs/promises');
18
18
  var require$$0$1 = require('crypto');
19
19
  var require$$0 = require('buffer');
20
20
  var browser = require('./browser-RAy8e8cV.cjs');
21
- var projectVite = require('./project-vite-ZnlUOO53.cjs');
21
+ var projectVite = require('./project-vite-C25k1a7K.cjs');
22
22
 
23
23
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
24
24
  const DEFAULT_DEV_CONTEXT_TIMEOUT_MS = 3000;
@@ -3056,8 +3056,8 @@ const DEFAULT_CHANNEL_TRANSPORT = {
3056
3056
  };
3057
3057
  const IPV4_LOOPBACK_ADDRESSES = new net.BlockList();
3058
3058
  IPV4_LOOPBACK_ADDRESSES.addSubnet('127.0.0.0', 8, 'ipv4');
3059
- const { WebSocket, WebSocketServer } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-7b8mHN_k.cjs', document.baseURI).href)))('ws');
3060
- const { parse: parseHtml } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-7b8mHN_k.cjs', document.baseURI).href)))('parse5');
3059
+ const { WebSocket, WebSocketServer } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev--vpWNxvZ.cjs', document.baseURI).href)))('ws');
3060
+ const { parse: parseHtml } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev--vpWNxvZ.cjs', document.baseURI).href)))('parse5');
3061
3061
  const BROWSER_DEV_HOST_ROOT_CANDIDATES = [
3062
3062
  path.resolve(__dirname, 'devtools/browser-dev-host'),
3063
3063
  path.resolve(__dirname, '../devtools/browser-dev-host'),
@@ -12183,7 +12183,7 @@ function assertNodeRuntimeCapabilities(ctx, settings) {
12183
12183
  function createNodeRealtimeDriverRegistry() {
12184
12184
  const registry = createRuntimeRealtimeDriverRegistry();
12185
12185
  registry.registerLazy('node-websocket', async () => {
12186
- const mod = await Promise.resolve().then(function () { return require('./index.esm-BCZUlOrb.cjs'); });
12186
+ const mod = await Promise.resolve().then(function () { return require('./index.esm-DnWSYrc7.cjs'); });
12187
12187
  return mod.createNodeWebSocketRuntimeDriver();
12188
12188
  });
12189
12189
  return registry;
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-BGczaZen.cjs');
4
- var runtimePermissionEnv = require('./runtime-permission-env-DiefxH9S.cjs');
3
+ var index = require('./index-DyDrs_NZ.cjs');
4
+ var runtimePermissionEnv = require('./runtime-permission-env-G4lQMcP7.cjs');
5
5
  var node_crypto = require('node:crypto');
6
6
  var fs = require('node:fs/promises');
7
7
  var path = require('node:path');
@@ -3,7 +3,7 @@
3
3
  var fs = require('node:fs/promises');
4
4
  var os = require('node:os');
5
5
  var path = require('node:path');
6
- var index = require('./index-BGczaZen.cjs');
6
+ var index = require('./index-DyDrs_NZ.cjs');
7
7
  require('node:module');
8
8
  require('readline');
9
9
  require('os');
@@ -3,8 +3,8 @@
3
3
  var node_crypto = require('node:crypto');
4
4
  var fs = require('node:fs/promises');
5
5
  var path = require('node:path');
6
- var index = require('./index-BGczaZen.cjs');
7
- var deployLock = require('./deploy-lock-Bw3DtFVd.cjs');
6
+ var index = require('./index-DyDrs_NZ.cjs');
7
+ var deployLock = require('./deploy-lock-hFiYSm4l.cjs');
8
8
  require('node:module');
9
9
  require('readline');
10
10
  require('os');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index$2 = require('./index-BGczaZen.cjs');
3
+ var index$2 = require('./index-DyDrs_NZ.cjs');
4
4
  var require$$0$3 = require('fs');
5
5
  var require$$0$2 = require('crypto');
6
6
  var require$$1$2 = require('path');
@@ -238,19 +238,19 @@ function requireArgument () {
238
238
 
239
239
  var command = {};
240
240
 
241
- const require$5 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-BGczaZen.cjs', document.baseURI).href)));
241
+ const require$5 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-DyDrs_NZ.cjs', document.baseURI).href)));
242
242
  function __require$4() { return require$5("node:events"); }
243
243
 
244
- const require$4 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-BGczaZen.cjs', document.baseURI).href)));
244
+ const require$4 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-DyDrs_NZ.cjs', document.baseURI).href)));
245
245
  function __require$3() { return require$4("node:child_process"); }
246
246
 
247
- const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-BGczaZen.cjs', document.baseURI).href)));
247
+ const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-DyDrs_NZ.cjs', document.baseURI).href)));
248
248
  function __require$2() { return require$3("node:path"); }
249
249
 
250
- const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-BGczaZen.cjs', document.baseURI).href)));
250
+ const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-DyDrs_NZ.cjs', document.baseURI).href)));
251
251
  function __require$1() { return require$2("node:fs"); }
252
252
 
253
- const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-BGczaZen.cjs', document.baseURI).href)));
253
+ const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-DyDrs_NZ.cjs', document.baseURI).href)));
254
254
  function __require() { return require$1("node:process"); }
255
255
 
256
256
  var help = {};
@@ -17249,7 +17249,7 @@ async function inspectFeedbackLog(file, size) {
17249
17249
  return { mimeType: 'text/plain', width: 0, height: 0 };
17250
17250
  }
17251
17251
  async function createFeedbackCosClient(getToken) {
17252
- const { default: COS } = await Promise.resolve().then(function () { return require('./index-CODS_-j0.cjs'); }).then(function (n) { return n.index; });
17252
+ const { default: COS } = await Promise.resolve().then(function () { return require('./index-CD-u4YfP.cjs'); }).then(function (n) { return n.index; });
17253
17253
  const cos = new COS({
17254
17254
  getAuthorization(_options, callback) {
17255
17255
  void getToken().then((token) => callback({
@@ -20900,7 +20900,7 @@ function readEnvNameArgFromArgv(argv) {
20900
20900
  }
20901
20901
 
20902
20902
  const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
20903
- const BUILT_CLI_VERSION = '0.9.4-alpha.4';
20903
+ const BUILT_CLI_VERSION = '0.9.4-alpha.6';
20904
20904
  const PACKAGE_JSON_CANDIDATES = [
20905
20905
  path.resolve(__dirname, '..', '..', 'package.json'),
20906
20906
  path.resolve(__dirname, '..', 'package.json'),
@@ -21284,39 +21284,39 @@ function createCommandLoggerResolver(options) {
21284
21284
  };
21285
21285
  }
21286
21286
  const defaultClearLoginStatus = async (...args) => {
21287
- const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-CCFzWeNC.cjs'); });
21287
+ const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-BEBMdi8r.cjs'); });
21288
21288
  return clearLoginStatus(...args);
21289
21289
  };
21290
21290
  const defaultLoginToHeybox = async (...args) => {
21291
- const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-CCFzWeNC.cjs'); });
21291
+ const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-BEBMdi8r.cjs'); });
21292
21292
  return loginToHeybox(...args);
21293
21293
  };
21294
21294
  const defaultPrintLoginStatus = async (...args) => {
21295
- const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-CCFzWeNC.cjs'); });
21295
+ const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-BEBMdi8r.cjs'); });
21296
21296
  return printLoginStatus(...args);
21297
21297
  };
21298
21298
  const defaultRunBuildCommand = async (...args) => {
21299
- const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-CAfDVJee.cjs'); });
21299
+ const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-DQc32VJQ.cjs'); });
21300
21300
  return runBuildCommand(...args);
21301
21301
  };
21302
21302
  const defaultRunCreateCommand = async (...args) => {
21303
- const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-vb9O6sKj.cjs'); });
21303
+ const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-ffrMHEIA.cjs'); });
21304
21304
  return runCreateCommand(...args);
21305
21305
  };
21306
21306
  const defaultRunDevCommand = async (...args) => {
21307
- const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-7b8mHN_k.cjs'); }).then(function (n) { return n.dev; });
21307
+ const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev--vpWNxvZ.cjs'); }).then(function (n) { return n.dev; });
21308
21308
  return runDevCommand(...args);
21309
21309
  };
21310
21310
  const defaultRunDoctorCommand = async (...args) => {
21311
- const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-PqYtjWlp.cjs'); });
21311
+ const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-ljmHE-Eu.cjs'); });
21312
21312
  return runDoctorCommand(...args);
21313
21313
  };
21314
21314
  const defaultRunSkillInstallCommand = async (...args) => {
21315
- const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-Dq2_U9GQ.cjs'); });
21315
+ const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-Cv69hni4.cjs'); });
21316
21316
  return runSkillInstallCommand(...args);
21317
21317
  };
21318
21318
  const defaultRunRemoteCommand = async (...args) => {
21319
- const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-B_IBeqPj.cjs'); });
21319
+ const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-BsZbVhxa.cjs'); });
21320
21320
  return runRemoteCommand(...args);
21321
21321
  };
21322
21322
  function resolveStandaloneLogger(options, verbose) {
@@ -21408,14 +21408,13 @@ function parseNonNegativeInteger(value) {
21408
21408
  return parsed;
21409
21409
  }
21410
21410
  const defaultRunGameSearchCommand = async (...args) => {
21411
- const { runGameSearchCommand } = await Promise.resolve().then(function () { return require('./games-Dwk0LnWJ.cjs'); });
21411
+ const { runGameSearchCommand } = await Promise.resolve().then(function () { return require('./games-DBa_MNAm.cjs'); });
21412
21412
  return runGameSearchCommand(...args);
21413
21413
  };
21414
21414
 
21415
21415
  exports.CliError = CliError;
21416
21416
  exports.HB_SDK_PACKAGE_NAME = HB_SDK_PACKAGE_NAME;
21417
21417
  exports.HB_SDK_SKILL_NAME = HB_SDK_SKILL_NAME;
21418
- exports.HEYBOX_API_BASE_URL = HEYBOX_API_BASE_URL;
21419
21418
  exports.applyMiniProgramServiceTagIfNeeded = applyMiniProgramServiceTagIfNeeded;
21420
21419
  exports.clearHeyboxAuthSession = clearHeyboxAuthSession;
21421
21420
  exports.commonjsGlobal = commonjsGlobal;
@@ -11,8 +11,8 @@ var require$$0$3 = require('url');
11
11
  var require$$5 = require('zlib');
12
12
  var require$$0 = require('buffer');
13
13
  var require$$1 = require('util');
14
- var index = require('./index-BGczaZen.cjs');
15
- var dev = require('./dev-7b8mHN_k.cjs');
14
+ var index = require('./index-DyDrs_NZ.cjs');
15
+ var dev = require('./dev--vpWNxvZ.cjs');
16
16
  require('node:module');
17
17
  require('readline');
18
18
  require('os');
@@ -26,10 +26,10 @@ require('constants');
26
26
  require('node:fs');
27
27
  require('node:fs/promises');
28
28
  require('node:zlib');
29
- require('./runtime-permission-env-DiefxH9S.cjs');
30
- require('./version-D_8aSq1N.cjs');
29
+ require('./runtime-permission-env-G4lQMcP7.cjs');
30
+ require('./version-Bn3O0RsH.cjs');
31
31
  require('node:async_hooks');
32
- require('./dev-context-CUoKTolJ.cjs');
32
+ require('./dev-context-Bo54XJVn.cjs');
33
33
  require('sharp');
34
34
  require('node:os');
35
35
  require('node:net');
@@ -42,7 +42,7 @@ require('node:buffer');
42
42
  require('node:url');
43
43
  require('node:util');
44
44
  require('node:child_process');
45
- require('./project-vite-ZnlUOO53.cjs');
45
+ require('./project-vite-C25k1a7K.cjs');
46
46
 
47
47
  var bufferUtil = {exports: {}};
48
48
 
@@ -3,7 +3,7 @@
3
3
  var promises = require('node:readline/promises');
4
4
  var node_crypto = require('node:crypto');
5
5
  var node_http = require('node:http');
6
- var index = require('./index-BGczaZen.cjs');
6
+ var index = require('./index-DyDrs_NZ.cjs');
7
7
  var browser = require('./browser-RAy8e8cV.cjs');
8
8
  require('node:module');
9
9
  require('readline');
@@ -5,7 +5,7 @@ var fs$1 = require('node:fs/promises');
5
5
  var node_module = require('node:module');
6
6
  var path = require('node:path');
7
7
  var node_url = require('node:url');
8
- var index = require('./index-BGczaZen.cjs');
8
+ var index = require('./index-DyDrs_NZ.cjs');
9
9
 
10
10
  function findProjectRoot(startDir) {
11
11
  let current = path.resolve(startDir);
@@ -1,18 +1,18 @@
1
1
  'use strict';
2
2
 
3
- var runtimePermissionEnv = require('./runtime-permission-env-DiefxH9S.cjs');
4
- var devContext = require('./dev-context-CUoKTolJ.cjs');
3
+ var runtimePermissionEnv = require('./runtime-permission-env-G4lQMcP7.cjs');
4
+ var devContext = require('./dev-context-Bo54XJVn.cjs');
5
5
  var promises = require('node:readline/promises');
6
- var index = require('./index-BGczaZen.cjs');
6
+ var index = require('./index-DyDrs_NZ.cjs');
7
7
  var childProcess = require('node:child_process');
8
8
  var fs = require('node:fs');
9
9
  var fs$1 = require('node:fs/promises');
10
10
  var path = require('node:path');
11
11
  var node_crypto = require('node:crypto');
12
12
  require('node:zlib');
13
- var artifact = require('./artifact-B--9XAIs.cjs');
14
- var deployLock = require('./deploy-lock-Bw3DtFVd.cjs');
15
- require('./version-D_8aSq1N.cjs');
13
+ var artifact = require('./artifact-D5nba0ma.cjs');
14
+ var deployLock = require('./deploy-lock-hFiYSm4l.cjs');
15
+ require('./version-Bn3O0RsH.cjs');
16
16
  require('node:async_hooks');
17
17
  require('sharp');
18
18
  require('node:module');
@@ -308,7 +308,7 @@ function createDefaultCosClient(uploadToken, COS) {
308
308
  };
309
309
  }
310
310
  async function loadCosConstructor() {
311
- const cosModule = await Promise.resolve().then(function () { return require('./index-CODS_-j0.cjs'); }).then(function (n) { return n.index; });
311
+ const cosModule = await Promise.resolve().then(function () { return require('./index-CD-u4YfP.cjs'); }).then(function (n) { return n.index; });
312
312
  return cosModule.default;
313
313
  }
314
314
  function formatSize(bytes) {
@@ -640,7 +640,9 @@ async function runDeployCommand(options, runtime = {}) {
640
640
  miniProgramId,
641
641
  version,
642
642
  uploadSessionId,
643
- }, { baseUrl: apiBaseUrl, cdnBaseUrl: index.HEYBOX_API_BASE_URL, fetchImpl: runtime.fetchImpl, logger });
643
+ },
644
+ // 上传鉴权必须与当前 API / 登录环境一致;个人服务 tag 仍由 CDN adapter 移除。
645
+ { baseUrl: apiBaseUrl, cdnBaseUrl: apiBaseUrl, fetchImpl: runtime.fetchImpl, logger });
644
646
  }
645
647
  }
646
648
  catch (error) {
@@ -2,9 +2,9 @@
2
2
 
3
3
  var fs = require('node:fs');
4
4
  var path = require('node:path');
5
- var version$1 = require('./version-D_8aSq1N.cjs');
5
+ var version$1 = require('./version-Bn3O0RsH.cjs');
6
6
  require('node:crypto');
7
- var index = require('./index-BGczaZen.cjs');
7
+ var index = require('./index-DyDrs_NZ.cjs');
8
8
  var node_async_hooks = require('node:async_hooks');
9
9
 
10
10
  /**
@@ -20,6 +20,7 @@ const MINI_PROGRAM_PERMISSION_KEYS = [
20
20
  'share',
21
21
  'storage',
22
22
  'cloud_storage',
23
+ 'gameSaves',
23
24
  'filesystem',
24
25
  'media',
25
26
  'clipboard',
@@ -30,6 +31,16 @@ const MINI_PROGRAM_PERMISSION_KEYS = [
30
31
  'workspaceCards',
31
32
  ];
32
33
  const MINI_PROGRAM_PERMISSION_CATALOG = [
34
+ {
35
+ key: 'gameSaves',
36
+ name: '游戏存档',
37
+ description: '获取和同步当前用户指定游戏的 Steam 云存档,并读取存档文件,无需单独弹窗确认。',
38
+ access: 'declaration',
39
+ risk: 'high',
40
+ config: {},
41
+ methods: ['gameSaves.list', 'gameSaves.sync', 'gameSaves.getFile', 'gameSaves.readParsedData'],
42
+ conditions: ['需要用户明确授权、有效 Steam 登录和支持文件读取的宿主;可按需读取受支持游戏的已有解析概览,不触发解析。'],
43
+ },
33
44
  {
34
45
  key: 'userInfo',
35
46
  name: '用户信息',
@@ -195,9 +206,12 @@ const MINI_PROGRAM_PERMISSION_CATALOG = [
195
206
  conditions: ['最高危险权限:批准后该入口可执行任意协议,并绕过其他 SDK 能力权限及专用授权流程。'],
196
207
  },
197
208
  {
198
- key: 'workspaceCards', name: '工作区卡片',
209
+ key: 'workspaceCards',
210
+ name: '工作区卡片',
199
211
  description: '在已绑定游戏的桌面工作区展示受审核卡片。',
200
- access: 'platform-approval', risk: 'high', config: {},
212
+ access: 'platform-approval',
213
+ risk: 'high',
214
+ config: {},
201
215
  methods: ['workspaceCards.requestRefresh'],
202
216
  conditions: ['需平台批准、Host 支持与有效执行租约;不隐式授予网络或存储权限。'],
203
217
  },
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var version = require('./version-D_8aSq1N.cjs');
3
+ var version = require('./version-Bn3O0RsH.cjs');
4
4
  var fs = require('node:fs/promises');
5
5
  var path = require('node:path');
6
6
  var childProcess = require('node:child_process');
7
- var index = require('./index-BGczaZen.cjs');
7
+ var index = require('./index-DyDrs_NZ.cjs');
8
8
  require('node:module');
9
9
  require('readline');
10
10
  require('os');
@@ -3,6 +3,6 @@
3
3
  /** 构建时替换为当前发布包的实际版本。 */
4
4
  const HB_SDK_VERSION = typeof undefined === 'string'
5
5
  ? undefined
6
- : '0.9.4-alpha.4';
6
+ : '0.9.4-alpha.6';
7
7
 
8
8
  exports.HB_SDK_VERSION = HB_SDK_VERSION;
package/dist/cli.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./cli-chunks/index-BGczaZen.cjs');
3
+ var index = require('./cli-chunks/index-DyDrs_NZ.cjs');
4
4
  require('node:module');
5
5
  require('readline');
6
6
  require('os');