@heybox/hb-sdk 0.9.5-alpha.1 → 0.9.5-alpha.3

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 +20 -0
  2. package/README.md +1 -1
  3. package/dist/cli-chunks/{artifact-CevKlc1g.cjs → artifact-qcqjww0s.cjs} +3 -3
  4. package/dist/cli-chunks/{build-CF1-28D8.cjs → build-DCgpTg32.cjs} +7 -5
  5. package/dist/cli-chunks/{create-Q50un0Bg.cjs → create-B1R3GzUJ.cjs} +3 -1
  6. package/dist/cli-chunks/{dev-Bsa-tW7L.cjs → dev-BktX-Knf.cjs} +32 -8
  7. package/dist/cli-chunks/{dev-context-D007Z2-c.cjs → dev-context-CE4HgJig.cjs} +2 -2
  8. package/dist/cli-chunks/{doctor-CIWDaPfi.cjs → doctor-ahqYzMjt.cjs} +3 -1
  9. package/dist/cli-chunks/{games-CNjfXQjT.cjs → games-DeOUz5bI.cjs} +5 -4
  10. package/dist/cli-chunks/{index-xZw-b2po.cjs → index-C3p93h2e.cjs} +502 -66
  11. package/dist/cli-chunks/{index-CYTciTqL.cjs → index-Ca7rRS2Z.cjs} +1 -1
  12. package/dist/cli-chunks/{index.esm-hwkHnZhi.cjs → index.esm-BjwRn4Dl.cjs} +8 -6
  13. package/dist/cli-chunks/{login-ClnBJiRJ.cjs → login-DuOq0Gm9.cjs} +2 -1
  14. package/dist/cli-chunks/{project-vite-CgMLPNS6.cjs → project-vite-C48AvOrg.cjs} +1 -1
  15. package/dist/cli-chunks/{remote-D-N5Gj1e.cjs → remote-BqbatO77.cjs} +8 -8
  16. package/dist/cli-chunks/{runtime-permission-env-BF-Jw5-T.cjs → runtime-permission-env-BfP6motG.cjs} +2 -2
  17. package/dist/cli-chunks/{skill-ba1VHnEN.cjs → skill-CN-_HmPx.cjs} +4 -2
  18. package/dist/cli-chunks/{version-CArGts-T.cjs → version-DyS8HIuU.cjs} +1 -1
  19. package/dist/cli.cjs +3 -1
  20. package/dist/devtools/browser-dev-host/assets/brand-watermark-FfehWVaf.svg +8 -0
  21. package/dist/devtools/browser-dev-host/assets/browser-dev-host-CPoh6wpa.js +102 -0
  22. package/dist/devtools/browser-dev-host/assets/desktop-app-launch-KWxMdRrR.js +6 -0
  23. package/dist/devtools/browser-dev-host/assets/index-B0sWGR7o.js +567 -0
  24. package/dist/devtools/browser-dev-host/assets/index-DSTlrpnQ.css +1 -0
  25. package/dist/devtools/browser-dev-host/index.html +3 -3
  26. package/dist/index.cjs.js +1 -1
  27. package/dist/index.esm.js +1 -1
  28. package/dist/vite.cjs.js +1 -1
  29. package/dist/vite.esm.js +1 -1
  30. package/package.json +4 -4
  31. package/skill/SKILL.md +2 -0
  32. package/skill/skill.json +5 -5
  33. package/dist/cli-chunks/deploy-lock-CpdL3s9E.cjs +0 -148
  34. package/dist/devtools/browser-dev-host/assets/browser-dev-host-D9zSDJJ8.js +0 -102
  35. package/dist/devtools/browser-dev-host/assets/desktop-app-launch-BXS6eaj9.js +0 -6
  36. package/dist/devtools/browser-dev-host/assets/index-Bn6Xr40h.js +0 -567
  37. package/dist/devtools/browser-dev-host/assets/index-h-fYisyX.css +0 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  本文件随 `@heybox/hb-sdk` npm 包公开分发,只记录外部小程序开发者可观察到的变化。
4
4
 
5
+ ## 0.9.5-alpha.3 - 2026-10-30
6
+
7
+ ### 新增能力
8
+
9
+ - [hb-sdk dev](https://docs.xiaoheihe.cn/hb_sdk/guide/cli) 调试台新增“桌面”预览,按[窗口尺寸声明](https://docs.xiaoheihe.cn/hb_sdk/guide/window-size.html)初始化窗口,支持拖拽缩放、最大化与还原、最小化后恢复同一实例,以及关闭后重新打开;系统信息跟随运行 CLI 的本机,`viewport.setDisplay()` 返回不支持。
10
+
11
+ ### 文档与工具
12
+
13
+ - 桌面预览使用深色标题栏和胶囊窗口操作区,“更多”中支持复制链接与刷新;修复刷新按钮被工具栏挤压成椭圆的问题。
14
+
15
+ ## 0.9.5-alpha.2 - 2026-10-29
16
+
17
+ ### 文档与工具
18
+
19
+ - [CLI 版本提醒](https://docs.xiaoheihe.cn/hb_sdk/guide/cli#%E7%89%88%E6%9C%AC%E6%8F%90%E9%86%92)支持在交互终端启动时展示已审核的重点更新;直接回车继续,同一版本按本地日期每天最多提醒一次,输入 `y` 并回车后不再展示该版本公告,后续 npm 升级提示仍保留,新版本公告仍可提醒;提醒独立分块,以「行为变更,请关注」为标题并用颜色强调确认选项;已安装更高版本时提示核对已升级版本的行为变更。
20
+ - 重点提醒获取失败不影响命令执行,按 `Ctrl+C` 会取消本次命令;非交互环境、CI 和 JSON 输出不展示重点提醒。
21
+ - SDK Skill 补充已审核更新通知的读取指引,开发和升级时结合项目版本及实际使用能力检查相关变更。
22
+ - [更新提醒](https://docs.xiaoheihe.cn/hb_sdk/guide/update-notices)按稳定版展示人工编写的重大提示;没有重大更新时可保留空正文。
23
+
24
+
5
25
  ## 0.9.5-alpha.1 - 2026-10-29
6
26
 
7
27
  ### 文档与工具
package/README.md CHANGED
@@ -505,7 +505,7 @@ CLI 会复用已验证产物、跳过该 ZIP 的网络上传;Web 文件及发
505
505
 
506
506
  `hb-sdk create` 默认生成可直接删除的 Vanilla JavaScript + Vite HelloWorld,只保留 SDK Toast 示例、三端 Manifest 和开发/构建/部署命令,不绑定业务框架或项目内测试工具。
507
507
 
508
- `hb-sdk dev` 会启动 Vue 3 Browser Dev Host。左侧诊断面板集中展示结构化日志、当前小程序作用域内的 Storage 快照和问题;日志区分 App、SDK、Network、Runtime、Host 来源,支持毫秒级时间、结果、耗时、重复计数、脱敏详情展开以及来源/级别筛选。右侧设备预览可在 iPhone 16 Pro Max(`440 x 956`)与 Pixel 9 Pro(`410 x 914`)间切换。切换预设只改变设备外框和 viewport,不会重新加载 iframe 或重启 Runtime;授权与操作弹窗、Toast、Loading 和振动反馈都限制在预览框内。
508
+ `hb-sdk dev` 会启动 Vue 3 Browser Dev Host。左侧诊断面板集中展示结构化日志、当前小程序作用域内的 Storage 快照和问题;日志区分 App、SDK、Network、Runtime、Host 来源,支持毫秒级时间、结果、耗时、重复计数、脱敏详情展开以及来源/级别筛选。右侧设备预览可在 iPhone 16 Pro Max(`440 x 956`)、Pixel 9 Pro(`410 x 914`)与“桌面”间切换。手机预设只改变设备外框和 viewport,不会重新加载 iframe 或重启 Runtime;切换手机与桌面会重新加载小程序并建立新实例。桌面模式按 `package.json#heybox.window` 初始化可缩放窗口,支持拖拽缩放、最大化/还原、最小化后恢复同一实例、关闭后重新打开新实例;系统信息与视口按运行 `hb-sdk dev` 的本机与窗口内容尺寸上报,`viewport.setDisplay()` 返回不支持,不模拟旋转或全屏。授权与操作弹窗、Toast、Loading 和振动反馈都限制在预览框内。
509
509
 
510
510
  配置 `package.json#heybox.companions`(平台写在 `package.json#heybox.platforms`)并启用无参 `miniappManifest()` 后,dev server 只向 loopback 提供 canonical Companion Manifest 和固定 ZIP 路由。CLI 在每次签发或刷新本地启动票前绑定 Manifest 摘要;普通 Web HMR 不改变 snapshot,权限声明、Companion 配置或产物变化会触发新快照与 Runtime 重建。调试台不展示 Browser、手机和 PC 的汇总就绪状态;真实入口不可用时只在对应入口内说明原因,并继续保留本地临时权限与线上未批准警告。未配置 Companion 时真实 PC Companion 保持不可用,Browser Fake 可继续做状态联调。
511
511
 
@@ -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-BF-Jw5-T.cjs');
7
- require('./version-CArGts-T.cjs');
8
- var index = require('./index-xZw-b2po.cjs');
6
+ var runtimePermissionEnv = require('./runtime-permission-env-BfP6motG.cjs');
7
+ require('./version-DyS8HIuU.cjs');
8
+ var index = require('./index-C3p93h2e.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-BF-Jw5-T.cjs');
6
- var index = require('./index-xZw-b2po.cjs');
5
+ var runtimePermissionEnv = require('./runtime-permission-env-BfP6motG.cjs');
6
+ var index = require('./index-C3p93h2e.cjs');
7
7
  require('node:crypto');
8
8
  require('node:fs');
9
9
  require('node:zlib');
10
- var artifact = require('./artifact-CevKlc1g.cjs');
11
- var projectVite = require('./project-vite-CgMLPNS6.cjs');
12
- require('./version-CArGts-T.cjs');
10
+ var artifact = require('./artifact-qcqjww0s.cjs');
11
+ var projectVite = require('./project-vite-C48AvOrg.cjs');
12
+ require('./version-DyS8HIuU.cjs');
13
13
  require('node:async_hooks');
14
14
  require('node:module');
15
15
  require('readline');
@@ -23,6 +23,8 @@ require('util');
23
23
  require('path');
24
24
  require('fs');
25
25
  require('constants');
26
+ require('node:readline/promises');
27
+ require('node:timers/promises');
26
28
  require('node:url');
27
29
  require('./_commonjs-dynamic-modules-DUamuDzp.cjs');
28
30
  require('inspector');
@@ -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-xZw-b2po.cjs');
8
+ var index = require('./index-C3p93h2e.cjs');
9
9
  require('node:module');
10
10
  require('readline');
11
11
  require('os');
@@ -18,6 +18,8 @@ require('util');
18
18
  require('node:crypto');
19
19
  require('constants');
20
20
  require('node:zlib');
21
+ require('node:readline/promises');
22
+ require('node:timers/promises');
21
23
 
22
24
  var ejs = {};
23
25
 
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-xZw-b2po.cjs');
3
+ var index = require('./index-C3p93h2e.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-BF-Jw5-T.cjs');
8
- var version = require('./version-CArGts-T.cjs');
7
+ var runtimePermissionEnv = require('./runtime-permission-env-BfP6motG.cjs');
8
+ var version = require('./version-DyS8HIuU.cjs');
9
9
  require('node:zlib');
10
- var devContext = require('./dev-context-D007Z2-c.cjs');
10
+ var devContext = require('./dev-context-CE4HgJig.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-CgMLPNS6.cjs');
21
+ var projectVite = require('./project-vite-C48AvOrg.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-Bsa-tW7L.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-Bsa-tW7L.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-BktX-Knf.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-BktX-Knf.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'),
@@ -3093,6 +3093,8 @@ async function startBrowserDevHostServer(options) {
3093
3093
  miniProgram: options.miniProgram,
3094
3094
  miniProgramSupportsDesktop: options.miniProgramSupportsDesktop,
3095
3095
  workspaceCardsEnabled: options.workspaceCardsEnabled === true,
3096
+ windowForm: options.windowForm,
3097
+ hostPlatform: options.hostPlatform,
3096
3098
  mobileLaunchRedirect: initialMobileLaunchRedirect,
3097
3099
  nativeAppLaunchUnavailableReason: options.nativeAppLaunchUnavailableReason,
3098
3100
  miniProgramManifestAccessToken: options.miniProgramManifestAccessToken,
@@ -12183,7 +12185,7 @@ function assertNodeRuntimeCapabilities(ctx, settings) {
12183
12185
  function createNodeRealtimeDriverRegistry() {
12184
12186
  const registry = createRuntimeRealtimeDriverRegistry();
12185
12187
  registry.registerLazy('node-websocket', async () => {
12186
- const mod = await Promise.resolve().then(function () { return require('./index.esm-hwkHnZhi.cjs'); });
12188
+ const mod = await Promise.resolve().then(function () { return require('./index.esm-BjwRn4Dl.cjs'); });
12187
12189
  return mod.createNodeWebSocketRuntimeDriver();
12188
12190
  });
12189
12191
  return registry;
@@ -16517,12 +16519,30 @@ const COMPANION_ARTIFACT_ACCESS_TOKEN_ENV = 'HB_SDK_COMPANION_ARTIFACT_ACCESS_TO
16517
16519
  // 本地 PC 调试 manifest 的专用令牌:开窗时扩展还没拿到 LocalDevelopmentBinding,只能靠启动 URI 带来。
16518
16520
  const MINI_PROGRAM_MANIFEST_ACCESS_TOKEN_ENV = 'HB_SDK_MINI_PROGRAM_MANIFEST_ACCESS_TOKEN';
16519
16521
  const COMPANION_ARTIFACT_ACCESS_TOKEN_HEADER = 'x-hb-sdk-companion-dev-token';
16522
+ /**
16523
+ * 把 Node 的 `process.platform` 归一为桌面预览使用的系统名。
16524
+ *
16525
+ * 桌面模式下 SDK `environment.getInfo()` 返回的是**运行 CLI 的电脑**,而不是浏览器看到的系统;
16526
+ * 未知平台回落到 `'unknown'`,不猜测成 Windows。
16527
+ */
16528
+ function resolveHostPlatform(platform) {
16529
+ if (platform === 'darwin')
16530
+ return 'macos';
16531
+ if (platform === 'win32')
16532
+ return 'windows';
16533
+ if (platform === 'linux')
16534
+ return 'linux';
16535
+ return 'unknown';
16536
+ }
16520
16537
  async function runDevCommand(options, runtime = {}) {
16521
16538
  const logger = runtime.logger ?? index.createCliLogger();
16522
16539
  const fetchImpl = runtime.fetchImpl ?? fetch;
16523
16540
  const openUrl = runtime.openExternalUrl ?? browser.openExternalUrl;
16524
16541
  const projectRoot = projectVite.findProjectRoot(runtime.cwd ?? process.cwd());
16525
16542
  const workspaceCardsDeclared = runtimePermissionEnv.readMiniappWorkspaceCardsFromPackageJson(projectRoot).declaration !== undefined;
16543
+ // 与 build 使用同一个声明校验入口:非法声明直接冒泡,避免调试台用错误尺寸静默预览。
16544
+ const windowForm = runtimePermissionEnv.readMiniappWindowFromPackageJson(projectRoot);
16545
+ const hostPlatform = runtime.hostPlatform ?? resolveHostPlatform(process.platform);
16526
16546
  const companionArtifactAccessToken = (runtime.randomBytes ?? node_crypto.randomBytes)(32).toString('base64url');
16527
16547
  const miniProgramManifestAccessToken = (runtime.randomBytes ?? node_crypto.randomBytes)(32).toString('base64url');
16528
16548
  const devSessionId = node_crypto.randomBytes(16).toString('hex');
@@ -16703,6 +16723,9 @@ async function runDevCommand(options, runtime = {}) {
16703
16723
  // 只在项目声明了桌面平台时向调试台暴露「在桌面端打开」入口。
16704
16724
  miniProgramSupportsDesktop: sessionView.miniProgramSupportsDesktop,
16705
16725
  workspaceCardsEnabled: workspaceCardsDeclared,
16726
+ // 桌面预览按项目声明初始化窗口尺寸,并按运行 CLI 的真实系统生成环境信息。
16727
+ windowForm,
16728
+ hostPlatform,
16706
16729
  cliAuth: runtime.cliAuth ?? createBrowserDevHostCliAuth({ env: runtime.env, fetchImpl }),
16707
16730
  onMobileDevSessionCreated: ({ devContextUrl, miniUrlOrigin }) => {
16708
16731
  mobileDevContextUrlsByOrigin.set(miniUrlOrigin, devContextUrl);
@@ -17078,6 +17101,7 @@ function isPrivateIPv4(address) {
17078
17101
  var dev = /*#__PURE__*/Object.freeze({
17079
17102
  __proto__: null,
17080
17103
  createMiniProgramDevLaunchVitePlugin: createMiniProgramDevLaunchVitePlugin,
17104
+ resolveHostPlatform: resolveHostPlatform,
17081
17105
  runDevCommand: runDevCommand
17082
17106
  });
17083
17107
 
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-xZw-b2po.cjs');
4
- var runtimePermissionEnv = require('./runtime-permission-env-BF-Jw5-T.cjs');
3
+ var index = require('./index-C3p93h2e.cjs');
4
+ var runtimePermissionEnv = require('./runtime-permission-env-BfP6motG.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-xZw-b2po.cjs');
6
+ var index = require('./index-C3p93h2e.cjs');
7
7
  require('node:module');
8
8
  require('readline');
9
9
  require('os');
@@ -19,6 +19,8 @@ require('fs');
19
19
  require('constants');
20
20
  require('node:fs');
21
21
  require('node:zlib');
22
+ require('node:readline/promises');
23
+ require('node:timers/promises');
22
24
 
23
25
  const CANDIDATES = [
24
26
  path.resolve(__dirname, '..', 'package.json'),
@@ -3,8 +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-xZw-b2po.cjs');
7
- var deployLock = require('./deploy-lock-CpdL3s9E.cjs');
6
+ var index = require('./index-C3p93h2e.cjs');
8
7
  require('node:module');
9
8
  require('readline');
10
9
  require('os');
@@ -19,6 +18,8 @@ require('fs');
19
18
  require('constants');
20
19
  require('node:fs');
21
20
  require('node:zlib');
21
+ require('node:readline/promises');
22
+ require('node:timers/promises');
22
23
 
23
24
  const WINDOW_MS = 30 * 60 * 1000;
24
25
  const MAX_REQUESTS = 50;
@@ -29,10 +30,10 @@ async function reserveGameSearchRequest(account, apiBaseUrl, options = {}) {
29
30
  const scope = node_crypto.createHash('sha256').update(`${apiBaseUrl}\0${account}`).digest('hex');
30
31
  let lock;
31
32
  try {
32
- lock = await deployLock.acquireDeployLock({ apiBaseUrl, miniProgramId: `game-search:${scope}`, version: 'rate-limit-v1' }, { cacheRoot });
33
+ lock = await index.acquireDeployLock({ apiBaseUrl, miniProgramId: `game-search:${scope}`, version: 'rate-limit-v1' }, { cacheRoot });
33
34
  }
34
35
  catch (error) {
35
- if (error instanceof Error && error.message === deployLock.DEPLOY_LOCKED_MESSAGE) {
36
+ if (error instanceof Error && error.message === index.DEPLOY_LOCKED_MESSAGE) {
36
37
  throw new Error('游戏搜索请求正在处理中,请稍后重试');
37
38
  }
38
39
  throw error;