@heybox/hb-sdk 0.8.1-alpha.6 → 0.8.1-alpha.8

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 (35) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/README.md +3 -3
  3. package/dist/cli-chunks/{build-B0X9pazW.cjs → build-BYWPo2MY.cjs} +4 -4
  4. package/dist/cli-chunks/{context-DVfWZ6d1.cjs → context-B4tBsR6l.cjs} +11 -2
  5. package/dist/cli-chunks/{create-CyQWVxCA.cjs → create-Dct-INxs.cjs} +1 -1
  6. package/dist/cli-chunks/{dev-DP7WtQOo.cjs → dev-6N5ruKiC.cjs} +172 -49
  7. package/dist/cli-chunks/{doctor-D6l-ONq-.cjs → doctor-9HtdddBL.cjs} +1 -1
  8. package/dist/cli-chunks/{index-CDwwaNvP.cjs → index-Bc4AXYHM.cjs} +15 -15
  9. package/dist/cli-chunks/{index-DvOPzPxS.cjs → index-Cl5cfUqJ.cjs} +2 -2
  10. package/dist/cli-chunks/{index.esm-B8pX0BrZ.cjs → index.esm-DhXN7XjE.cjs} +7 -7
  11. package/dist/cli-chunks/{login-Dt-FHzpL.cjs → login-CTZgu8Q-.cjs} +2 -2
  12. package/dist/cli-chunks/{project-vite-CE7kyqxl.cjs → project-vite--h2M6eBb.cjs} +1 -1
  13. package/dist/cli-chunks/{remote-Be6PeR-n.cjs → remote-0hw42fDG.cjs} +6 -6
  14. package/dist/cli-chunks/{runtime-permission-env-DWSscWBT.cjs → runtime-permission-env-Bvggu6mn.cjs} +1 -1
  15. package/dist/cli-chunks/{session-DZXRQ4Dp.cjs → session-5fnHlEGO.cjs} +1 -1
  16. package/dist/cli-chunks/{skill-B8GWL2KT.cjs → skill-DrFEqmdD.cjs} +2 -2
  17. package/dist/cli-chunks/{version-D19lZmYN.cjs → version-CccOA4so.cjs} +1 -1
  18. package/dist/cli.cjs +1 -1
  19. package/dist/devtools/browser-dev-host/assets/browser-dev-host-BQ9v4rI1.js +101 -0
  20. package/dist/devtools/browser-dev-host/assets/{index-Dh5wRj5c.js → index-8LTH05np.js} +2 -2
  21. package/dist/devtools/browser-dev-host/index.html +1 -1
  22. package/dist/index.cjs.js +1 -10
  23. package/dist/index.esm.js +1 -10
  24. package/dist/vite.cjs.js +1 -1
  25. package/dist/vite.esm.js +1 -1
  26. package/package.json +7 -7
  27. package/skill/SKILL.md +1 -1
  28. package/skill/references/api-root.md +1 -1
  29. package/skill/references/cli.md +2 -0
  30. package/skill/references/safety-boundaries.md +2 -2
  31. package/skill/skill.json +5 -5
  32. package/types/modules/network/index.d.ts +1 -4
  33. package/types/modules/network/observability.d.ts +0 -1
  34. package/types/protocol/dev-session.d.ts +2 -1
  35. package/dist/devtools/browser-dev-host/assets/browser-dev-host-Bb43BPMS.js +0 -101
package/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  本文件随 `@heybox/hb-sdk` npm 包公开分发,只记录外部小程序开发者可观察到的变化。内部集成、实现策略和审查证据不在此维护。
4
4
 
5
+ ## 0.8.1-alpha.8
6
+
7
+ - 手机 Dev Session 仅使用当前版本声明与平台批准结果求交后的有效权限;两者均允许 `useOfficialDomain: true` 时,真机扫码调试可访问官方域名,本地调试状态不能扩大该权限。
8
+ - 创建手机调试会话前会刷新远端批准结果;读取失败时拒绝签发新会话,已创建会话仍按短期有效期自动失效。
9
+ - 保持升级或回滚 CLI 时的新旧调试页兼容,并继续拒绝官方账号敏感路径、敏感请求头和自动重定向。
10
+
11
+ ## 0.8.1-alpha.7
12
+
13
+ - `network.request` 已标记为废弃,但仍可调用,目前没有替代接口。请移除 `withCredentials`;旧版 SDK 的 wire 字段由 Runtime 兼容忽略。Mobile 对官方 HTTPS 默认端口目标自动携带 Native Cookie,第三方不自动携带。需要第三方会话时可显式提供应用 `Cookie` 或 `Authorization`;Web Host 受浏览器 Fetch 限制,不支持显式 `Cookie`。`Origin`、`Referer`、`User-Agent` 由 Host 管理,路由/分帧/逐跳请求头不能由小程序设置。
14
+
5
15
  ## 0.8.1-alpha.6
6
16
 
7
17
  - 修复远端权限快照包含未知权限且 `config` 为 `null` 时,`hb-sdk remote info` 把已批准的网络权限和官方域名配置误判为未批准的问题。
@@ -30,7 +40,6 @@
30
40
 
31
41
  - 目标平台声明统一迁移到 `package.json#heybox.platforms`;`miniappManifest()` 恢复无参调用,并在构建时将该声明写入 `dist/manifest.json`。
32
42
  - `hb-sdk dev`、`hb-sdk build` 和普通 `hb-sdk remote deploy` 会拒绝缺失或非法的平台声明;build/deploy 也会拒绝与项目配置不一致的 Manifest。已有项目升级时需把原 Vite 参数中的 `platforms` 移入 `package.json#heybox`。
33
-
34
43
  ## 0.8.1-alpha.2
35
44
 
36
45
  - 新增 `environment.getInfo()` 与 `environment.getInfoSync()`,用于读取运行模式、小黑盒 App 版本、canonical 小程序 ID/版本、操作系统和 SDK 版本的冻结快照。
package/README.md CHANGED
@@ -258,12 +258,12 @@ SDK 还提供 `getHandshakeState()` / `onHandshakeStateChange()` 管理持久握
258
258
  - `auth.login()`、`user.getInfo()` 和 `user.getSteamGameList()` 的可用性不由 `network` 决定;它们分别要求 `userInfo` 或 `steamLibrary`,并继续遵循各自的用户授权和数据规则。
259
259
  - `user.revokeAuthorization()` 在两种网络模式下都要求可信用户手势;成功后必须停止使用并清理业务缓存的旧身份、资料和服务端会话。
260
260
  - `on()` 返回取消监听函数,组件卸载或页面销毁时需要调用。
261
- - 业务网络请求使用 `network.request()`,不要依赖浏览器原生网络出口。
261
+ - 现有业务网络请求仍使用 `network.request()`;该 API 已标记废弃,但目前没有替代调用入口,不要依赖浏览器原生网络出口。
262
262
  - 公开 `network.request()` 与 `network.download()` 均使用 no-follow redirect policy;3xx 不会在 Host 内静默跳转。
263
263
  - `network.request()` 不能访问平台保留的 runtime auth 与 OpenAPI 内部路径;页面不得持有或交换服务端应用凭据。
264
264
  - `network.request` 不支持 `multipart/form-data`;App Host 仅支持 form(`application/x-www-form-urlencoded`)与 JSON。表单请用 `URLSearchParams#toString()` 作为 `data`,文件上传请走专用上传能力。
265
265
  - 新 PC 开放持久 sandbox、单文件/目录 picker、精确 File 保存与公网 `network.download()`;多选和小黑盒域名流式下载暂不支持。Mobile、Web 与 Browser Dev Host 仍未开放这些 primitive。
266
- - PC 支持 `network.request`,但会忽略 `withCredentials`;它不改变请求路由或凭据行为。其他平台继续遵循各自的 Host 语义。
266
+ - `withCredentials` 不再是支持的配置字段,也不会进入新 SDK、协议或 Host contract;旧 SDK 构建产物的 wire 字段仅由 Runtime 兼容忽略。Mobile 对官方 HTTPS 默认端口目标自动启用 Native Cookie,第三方关闭;应用可显式提供 `Cookie`、`Authorization` 等请求头。`Origin`、`Referer`、`User-Agent` Host 接管;`Host`、分帧及逐跳请求头由传输层管理,不能由小程序设置。Web Host 使用浏览器 Fetch,无法发送显式 `Cookie` 等浏览器禁止的头,会返回 `REQUEST_UNSUPPORTED`;需要第三方 Cookie 会话时请在支持原始请求头的 Mobile/PC Host 验收。
267
267
  - 新 PC 不支持振动、分享菜单和截图分享;`navigation.openAppPage` 仅支持 `game_detail`,用户/帖子详情会明确失败。调用平台相关能力时应处理 `METHOD_FORBIDDEN` 或 `REQUEST_UNSUPPORTED`。
268
268
  - picker 必须来自可信用户手势;取消选择返回 `FILE_PICKER_CANCELLED`。`saveFile()` 只接受 `suggestedName`,不接受 `accept`。
269
269
  - `pickFiles()` / `pickDirectory()` 默认只读;`pickFiles()` 仅在显式传入 `multiple: true` 时允许 Host 返回多个文件。要写入或作为下载目标时显式请求 `mode: 'readwrite'`。
@@ -355,7 +355,7 @@ hb-sdk remote deploy --release-note "本次更新说明"
355
355
 
356
356
  右上角的桌面图标与二维码按钮使用相同样式。点击桌面图标后选择小黑盒正式版或 Debug 版,选择会立即请求客户端打开当前本地页面并在本地记忆,不需要二次确认。桌面端只接受无凭据的 `http://127.0.0.1:<port>`,拒绝 `localhost`、IPv6 和 LAN 地址,不提供地址选择或手工 URL;手机二维码继续独立选择局域网地址。入口仅在项目已绑定且本地调试启动票有效时可用,统一 URI 只携带 `mini_program_id` 和 `mini_url`,启动票继续由 detail 从同源 `launch.json` 发现并交给后端验证。浏览器无法确认客户端是否真正打开,因此调试台只记录“已请求打开”,不会自动切换正式版或 Debug 版。
357
357
 
358
- 浏览器调试入口不要求 CLI 登录或项目绑定;需要账号或远端配置的能力会按当前可用上下文返回结果或明确失败。调试台不提供权限修改入口,远端权限快照始终是 Runtime 的规范输入。手机验收统一从右上角二维码入口进入,选择手机可达的局域网网卡后扫码;二维码使用 `open_inapp` 与 `heybox://` `openWindow` 包装的短链。完整操作见 [CLI 指南](https://docs.xiaoheihe.cn/hb_sdk/guide/cli),实现与安全边界由 [Runtime Host 迁移](./docs/runtime-host-migration.md) 维护。
358
+ 浏览器调试入口不要求 CLI 登录或项目绑定;需要账号或远端配置的能力会按当前可用上下文返回结果或明确失败。调试台不提供权限修改入口,远端权限快照始终是 Runtime 的规范输入。手机 Dev Session 只使用当前版本声明与平台批准结果求交后的有效权限;两者均允许 `useOfficialDomain: true` 时会保留官方域名权限,浏览器端不能本地覆盖。手机验收统一从右上角二维码入口进入,选择手机可达的局域网网卡后扫码;二维码使用 `open_inapp` 与 `heybox://` `openWindow` 包装的短链。完整操作见 [CLI 指南](https://docs.xiaoheihe.cn/hb_sdk/guide/cli),实现与安全边界由 [Runtime Host 迁移](./docs/runtime-host-migration.md) 维护。
359
359
 
360
360
  远端提交前需要完成 CLI 登录和小程序绑定。完整的登录、绑定、预览、版本与发布流程见 [CLI 指南](https://docs.xiaoheihe.cn/hb_sdk/guide/cli)。
361
361
 
@@ -3,13 +3,13 @@
3
3
  var fs$1 = require('node:fs');
4
4
  var fs = require('node:fs/promises');
5
5
  var path = require('node:path');
6
- var runtimePermissionEnv = require('./runtime-permission-env-DWSscWBT.cjs');
6
+ var runtimePermissionEnv = require('./runtime-permission-env-Bvggu6mn.cjs');
7
7
  require('node:crypto');
8
8
  require('node:zlib');
9
9
  var runtimeGate = require('./runtime-gate-BWb8QIcX.cjs');
10
- var index = require('./index-CDwwaNvP.cjs');
11
- var projectVite = require('./project-vite-CE7kyqxl.cjs');
12
- require('./version-D19lZmYN.cjs');
10
+ var index = require('./index-Bc4AXYHM.cjs');
11
+ var projectVite = require('./project-vite--h2M6eBb.cjs');
12
+ require('./version-CccOA4so.cjs');
13
13
  require('node:async_hooks');
14
14
  require('node:module');
15
15
  require('path');
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var runtimePermissionEnv = require('./runtime-permission-env-DWSscWBT.cjs');
4
- var session = require('./session-DZXRQ4Dp.cjs');
3
+ var runtimePermissionEnv = require('./runtime-permission-env-Bvggu6mn.cjs');
4
+ var session = require('./session-5fnHlEGO.cjs');
5
5
  var fs$1 = require('node:fs');
6
6
  var fs = require('node:fs/promises');
7
7
  var path = require('node:path');
@@ -32,6 +32,14 @@ function createBrowserDevPermissionState(context) {
32
32
  function createBrowserDevRuntimePermissions(snapshot, state) {
33
33
  return createDevRuntimePermissions(snapshot, state, state.networkRequest.useOfficialDomain);
34
34
  }
35
+ /** Mobile Dev Session 只接受线上远端权限快照,不读取 Browser 本地权限状态。 */
36
+ function createMobileDevSessionRuntimePermissions(context) {
37
+ if (context.source !== 'remote') {
38
+ return { schema_version: 1, entries: [] };
39
+ }
40
+ const state = createBrowserDevPermissionState(context);
41
+ return createDevRuntimePermissions(context.runtimePermissions, state, state.networkRequest.useOfficialDomain);
42
+ }
35
43
  function cloneDefaultPermissionState() {
36
44
  return {
37
45
  networkRequest: { ...DEFAULT_PERMISSION_STATE.networkRequest },
@@ -388,6 +396,7 @@ exports.MiniProgramProjectBindingError = MiniProgramProjectBindingError;
388
396
  exports.createBrowserDevPermissionState = createBrowserDevPermissionState;
389
397
  exports.createBrowserDevRuntimePermissions = createBrowserDevRuntimePermissions;
390
398
  exports.createLocalDevLaunchToken = createLocalDevLaunchToken;
399
+ exports.createMobileDevSessionRuntimePermissions = createMobileDevSessionRuntimePermissions;
391
400
  exports.createRemoteApiClientForEnvironment = createRemoteApiClientForEnvironment;
392
401
  exports.getBoundMiniProgram = getBoundMiniProgram;
393
402
  exports.readBoundMiniProgramId = readBoundMiniProgramId;
@@ -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-CDwwaNvP.cjs');
8
+ var index = require('./index-Bc4AXYHM.cjs');
9
9
  require('node:module');
10
10
  require('os');
11
11
  require('readline');
@@ -8,17 +8,17 @@ var net = require('node:net');
8
8
  var promises = require('node:dns/promises');
9
9
  var node_http = require('node:http');
10
10
  var node_module = require('node:module');
11
- var context = require('./context-DVfWZ6d1.cjs');
12
- var runtimePermissionEnv = require('./runtime-permission-env-DWSscWBT.cjs');
11
+ var context = require('./context-B4tBsR6l.cjs');
12
+ var runtimePermissionEnv = require('./runtime-permission-env-Bvggu6mn.cjs');
13
13
  var undici = require('undici');
14
14
  var fs$1 = require('node:fs/promises');
15
- var index = require('./index-CDwwaNvP.cjs');
15
+ var index = require('./index-Bc4AXYHM.cjs');
16
16
  var require$$0$1 = require('crypto');
17
17
  var require$$0 = require('buffer');
18
- var session = require('./session-DZXRQ4Dp.cjs');
18
+ var session = require('./session-5fnHlEGO.cjs');
19
19
  var browser = require('./browser-RAy8e8cV.cjs');
20
- var projectVite = require('./project-vite-CE7kyqxl.cjs');
21
- var version = require('./version-D19lZmYN.cjs');
20
+ var projectVite = require('./project-vite--h2M6eBb.cjs');
21
+ var version = require('./version-CccOA4so.cjs');
22
22
  require('node:zlib');
23
23
 
24
24
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
@@ -623,10 +623,100 @@ function readErrorMessage(error) {
623
623
  return error instanceof Error ? error.message : String(error);
624
624
  }
625
625
 
626
+ const PATHNAME_MAX_DECODE_ROUNDS = 4;
627
+ const OFFICIAL_ROOT_DOMAINS = ['xiaoheihe.cn', 'max-c.com', 'debugmode.cn', 'maxjia.com'];
628
+ const DENIED_REQUEST_HEADERS = new Set([
629
+ 'connection',
630
+ 'content-length',
631
+ 'host',
632
+ 'keep-alive',
633
+ 'proxy-connection',
634
+ 'te',
635
+ 'trailer',
636
+ 'transfer-encoding',
637
+ 'upgrade',
638
+ ]);
639
+ /** 任意 origin 都不得通过公开 network.request 访问的 Runtime 私有路径。 */
640
+ const PUBLIC_NETWORK_PROTECTED_PATH_PREFIXES = ['/user_miniprogram/runtime/auth', '/user_miniprogram/openapi/v1'];
641
+ /** 官方 origin 上会签发、恢复或校验账号 credential 的私有路径。 */
642
+ const PUBLIC_NETWORK_OFFICIAL_ACCOUNT_SENSITIVE_PATH_PREFIXES = [
643
+ '/account/restore_login',
644
+ '/account/check_login',
645
+ '/account/login',
646
+ '/account/get_login_code',
647
+ '/account/login_code',
648
+ '/account/get_qrcode_url',
649
+ '/account/qr_state',
650
+ '/account/google_2fa_verify',
651
+ '/account/open/login',
652
+ '/account/captcha',
653
+ '/account/get_verify_code',
654
+ '/account/send_verify_code',
655
+ '/account/verify_code',
656
+ ];
657
+ /** 判断公开网络能力是否命中 Runtime 或官方账号敏感路径。 */
658
+ function isProtectedMiniProgramNetworkPath(pathname, official) {
659
+ const normalized = normalizePublicNetworkPathname(pathname);
660
+ if (normalized === null)
661
+ return true;
662
+ if (matchesPathPrefix(normalized, PUBLIC_NETWORK_PROTECTED_PATH_PREFIXES))
663
+ return true;
664
+ return official && matchesPathPrefix(normalized, PUBLIC_NETWORK_OFFICIAL_ACCOUNT_SENSITIVE_PATH_PREFIXES);
665
+ }
666
+ /** 使用 Runtime 唯一的官方域名分类规则判断请求目标。 */
667
+ function isOfficialMiniProgramNetworkUrl(url) {
668
+ const hostname = url.hostname.toLowerCase().replace(/\.$/, '');
669
+ return OFFICIAL_ROOT_DOMAINS.some((rootDomain) => hostname === rootDomain || hostname.endsWith(`.${rootDomain}`));
670
+ }
671
+ /** 判断公开网络能力是否禁止调用方设置该请求头。 */
672
+ function isForbiddenMiniProgramNetworkRequestHeader(name) {
673
+ const normalized = name.trim().toLowerCase();
674
+ return DENIED_REQUEST_HEADERS.has(normalized) || /^(?:x-heybox|x-xhh)-(?:access-token|auth|authorization|pkey|session|token)$/.test(normalized);
675
+ }
676
+ function normalizePublicNetworkPathname(pathname) {
677
+ let decoded = pathname;
678
+ for (let round = 0; round < PATHNAME_MAX_DECODE_ROUNDS; round += 1) {
679
+ let next;
680
+ try {
681
+ next = decodeURIComponent(decoded);
682
+ }
683
+ catch {
684
+ return null;
685
+ }
686
+ if (next === decoded)
687
+ return normalizeDecodedPathname(decoded);
688
+ decoded = next;
689
+ }
690
+ try {
691
+ if (decodeURIComponent(decoded) !== decoded)
692
+ return null;
693
+ }
694
+ catch {
695
+ return null;
696
+ }
697
+ return normalizeDecodedPathname(decoded);
698
+ }
699
+ function matchesPathPrefix(pathname, prefixes) {
700
+ return prefixes.some((prefix) => pathname === prefix || pathname.startsWith(`${prefix}/`));
701
+ }
702
+ function normalizeDecodedPathname(pathname) {
703
+ const segments = [];
704
+ for (const segment of pathname.replace(/\\/g, '/').split('/')) {
705
+ if (!segment || segment === '.')
706
+ continue;
707
+ if (segment === '..')
708
+ segments.pop();
709
+ else
710
+ segments.push(segment);
711
+ }
712
+ return `/${segments.join('/')}`;
713
+ }
714
+
626
715
  const MAX_BROWSER_DEV_HOST_NETWORK_REQUEST_BODY = 2 * 1024 * 1024;
627
716
  const MAX_BROWSER_DEV_HOST_NETWORK_RESPONSE_BODY = 5 * 1024 * 1024;
628
717
  const DENIED_NETWORK_TARGETS = createDeniedNetworkTargets();
629
- const CREDENTIAL_HEADER_RE$1 = /^(?:authentication-info|authorization|cookie|cookie2|proxy-authenticate|proxy-authentication-info|proxy-authorization|set-cookie|set-cookie2|www-authenticate|pkey|x-pkey|x-access-token|x-auth-token|x-api-key)$/i;
718
+ const CREDENTIAL_RESPONSE_HEADER_RE = /^(?:authentication-info|authorization|cookie|cookie2|proxy-authenticate|proxy-authentication-info|proxy-authorization|set-cookie|set-cookie2|www-authenticate|pkey|x-pkey|x-access-token|x-auth-token|x-api-key)$/i;
719
+ const HOST_CONTROLLED_REQUEST_HEADERS = new Set(['origin', 'referer', 'user-agent']);
630
720
  async function handleBrowserDevHostNetworkProxy(request, response, fetchImpl, lookupHostname, options) {
631
721
  const cors = options.cors === true;
632
722
  if (request.method === 'OPTIONS') {
@@ -645,7 +735,7 @@ async function handleBrowserDevHostNetworkProxy(request, response, fetchImpl, lo
645
735
  payload = await readJsonRequestBody(request);
646
736
  const requestAbort = createBrowserDevHostRequestAbortScope(request, response);
647
737
  try {
648
- const result = await requestBrowserDevHostNetwork(payload, fetchImpl, lookupHostname, options.allowedHttpOrigins, requestAbort.signal);
738
+ const result = await requestBrowserDevHostNetwork(payload, fetchImpl, lookupHostname, options.allowedHttpOrigins, requestAbort.signal, options.permission);
649
739
  if (typeof result.status === 'number' && (result.status < 200 || result.status >= 300)) {
650
740
  logBrowserDevHostNetworkProxyDiagnostic('http_status', payload, result);
651
741
  }
@@ -701,11 +791,12 @@ function writeNetworkJsonResponse(response, status, body, cors) {
701
791
  writeJsonResponse(response, status, body);
702
792
  }
703
793
  const BROWSER_DEV_HOST_NETWORK_MULTIPART_UNSUPPORTED_MESSAGE = 'network.request 不支持 multipart/form-data。App Host 客户端代发仅支持 application/x-www-form-urlencoded(form)与 application/json;请将 data 编码为 form 字符串(例如 new URLSearchParams({...}).toString())并设置 Content-Type: application/x-www-form-urlencoded。文件上传请使用专用上传能力,勿手写 multipart boundary。';
704
- async function requestBrowserDevHostNetwork(payload, fetchImpl, lookupHostname, allowedHttpOrigins, requestSignal) {
794
+ async function requestBrowserDevHostNetwork(payload, fetchImpl, lookupHostname, allowedHttpOrigins, requestSignal, permission) {
705
795
  if (!isRecord$2(payload) || typeof payload.url !== 'string' || !payload.url.trim()) {
706
796
  throw createBrowserDevHostError(400, 'INVALID_NETWORK_REQUEST', 'network.request url 必须是非空字符串');
707
797
  }
708
798
  const url = createBrowserDevHostNetworkUrl(payload.url, payload.params);
799
+ assertMiniProgramNetworkPolicy(url, permission);
709
800
  const method = typeof payload.method === 'string' && payload.method.trim() ? payload.method.trim().toUpperCase() : 'GET';
710
801
  const headers = normalizeBrowserDevHostNetworkHeaders(payload.headers);
711
802
  assertSupportedBrowserDevHostNetworkRequestShape(headers, payload.data);
@@ -738,7 +829,7 @@ async function requestBrowserDevHostNetwork(payload, fetchImpl, lookupHostname,
738
829
  data: contentType.includes('application/json') ? safeJsonParse(text) : text,
739
830
  status: response.status,
740
831
  statusText: response.statusText,
741
- headers: Object.fromEntries([...response.headers.entries()].filter(([name]) => !isCredentialHeader$1(name))),
832
+ headers: Object.fromEntries([...response.headers.entries()].filter(([name]) => !isCredentialResponseHeader(name))),
742
833
  };
743
834
  }
744
835
  catch (error) {
@@ -833,9 +924,9 @@ function isDeniedNetworkAddress(address, family) {
833
924
  }
834
925
  return true;
835
926
  }
836
- function isCredentialHeader$1(name) {
927
+ function isCredentialResponseHeader(name) {
837
928
  const normalized = name.trim().toLowerCase();
838
- return CREDENTIAL_HEADER_RE$1.test(normalized) || normalized.startsWith('x-heybox-') || normalized.startsWith('x-xhh-');
929
+ return CREDENTIAL_RESPONSE_HEADER_RE.test(normalized) || normalized.startsWith('x-heybox-') || normalized.startsWith('x-xhh-');
839
930
  }
840
931
  function createPinnedNetworkDispatcher(pinnedTargets) {
841
932
  const connect = undici.buildConnector({});
@@ -908,31 +999,29 @@ function normalizeBrowserDevHostNetworkHeaders(headers) {
908
999
  return normalized;
909
1000
  }
910
1001
  Object.entries(headers).forEach(([key, value]) => {
911
- if (isSensitiveBrowserDevHostNetworkHeader(key)) {
1002
+ if (isForbiddenMiniProgramNetworkRequestHeader(key)) {
912
1003
  throw createBrowserDevHostError(400, 'INVALID_NETWORK_REQUEST', `network.request 不允许设置敏感请求头: ${key}`);
913
1004
  }
914
- if (typeof value === 'string' && !isBlockedBrowserDevHostNetworkHeader(key)) {
1005
+ if (typeof value === 'string' && !isHostManagedRequestHeader(key)) {
915
1006
  normalized.set(key, value);
916
1007
  }
917
1008
  });
918
1009
  return normalized;
919
1010
  }
920
- function isSensitiveBrowserDevHostNetworkHeader(key) {
921
- return ['authorization', 'cookie', 'proxy-authorization'].includes(key.toLowerCase());
1011
+ function isHostManagedRequestHeader(name) {
1012
+ const normalized = name.trim().toLowerCase();
1013
+ return HOST_CONTROLLED_REQUEST_HEADERS.has(normalized);
922
1014
  }
923
- function isBlockedBrowserDevHostNetworkHeader(key) {
924
- return [
925
- 'connection',
926
- 'content-length',
927
- 'host',
928
- 'keep-alive',
929
- 'proxy-authenticate',
930
- 'proxy-authorization',
931
- 'te',
932
- 'trailer',
933
- 'transfer-encoding',
934
- 'upgrade',
935
- ].includes(key.toLowerCase());
1015
+ function assertMiniProgramNetworkPolicy(url, permission) {
1016
+ if (!permission)
1017
+ return;
1018
+ const official = isOfficialMiniProgramNetworkUrl(url);
1019
+ if (official && !permission.useOfficialDomain) {
1020
+ throw createBrowserDevHostError(403, 'PERMISSION_DENIED', '当前小程序暂不支持访问官方域名');
1021
+ }
1022
+ if (isProtectedMiniProgramNetworkPath(url.pathname, official)) {
1023
+ throw createBrowserDevHostError(403, 'PERMISSION_DENIED', 'network.request 不允许访问 Runtime 或账号敏感接口');
1024
+ }
936
1025
  }
937
1026
  /**
938
1027
  * 与 App Host 对齐:Mock 不再放行 multipart,避免“本地成功、上线失败”。
@@ -1071,7 +1160,8 @@ function createDevSessionRoutes(options) {
1071
1160
  }
1072
1161
  try {
1073
1162
  const payload = await readJsonRequestBody(request);
1074
- const validated = validateDevSessionCreatePayload(payload, options.allowedMiniUrlOrigins);
1163
+ const runtimePermissions = context.createMobileDevSessionRuntimePermissions(await options.readDevContext());
1164
+ const validated = validateDevSessionCreatePayload(payload, options.allowedMiniUrlOrigins, runtimePermissions);
1075
1165
  reapExpiredDevSessions(devSessions, expiredDevSessions, options.now());
1076
1166
  const replacedTokens = findDevSessionTokensForOrigin(devSessions, validated.miniUrlOrigin);
1077
1167
  if (devSessions.size - replacedTokens.length >= MAX_ACTIVE_DEV_SESSIONS) {
@@ -1090,6 +1180,7 @@ function createDevSessionRoutes(options) {
1090
1180
  expiresAt,
1091
1181
  miniUrlOrigin: validated.miniUrlOrigin,
1092
1182
  networkRequestEnabled: validated.networkRequestEnabled,
1183
+ useOfficialDomain: validated.useOfficialDomain,
1093
1184
  serialized: JSON.stringify(snapshot),
1094
1185
  });
1095
1186
  try {
@@ -1138,7 +1229,7 @@ function createDevSessionRoutes(options) {
1138
1229
  },
1139
1230
  };
1140
1231
  }
1141
- function validateDevSessionCreatePayload(payload, allowedMiniUrlOrigins) {
1232
+ function validateDevSessionCreatePayload(payload, allowedMiniUrlOrigins, runtimePermissions) {
1142
1233
  if (!isRecord$2(payload) || Object.keys(payload).some((key) => !['mini_url_origin', 'runtime_permissions'].includes(key))) {
1143
1234
  throw new TypeError('Dev Session body is invalid');
1144
1235
  }
@@ -1158,18 +1249,16 @@ function validateDevSessionCreatePayload(payload, allowedMiniUrlOrigins) {
1158
1249
  !allowedMiniUrlOrigins.has(miniUrlOrigin.origin)) {
1159
1250
  throw new TypeError('mini_url_origin must be an allowed LAN origin');
1160
1251
  }
1161
- const parsedPermissions = runtimePermissionEnv.parseMiniProgramRuntimePermissions(payload.runtime_permissions);
1252
+ const parsedPermissions = runtimePermissionEnv.parseMiniProgramRuntimePermissions(runtimePermissions);
1162
1253
  if (!parsedPermissions.valid) {
1163
1254
  throw new TypeError('runtime_permissions is invalid');
1164
1255
  }
1165
1256
  const networkPermission = parsedPermissions.permissions.network;
1166
- if (networkPermission?.config.useOfficialDomain !== false) {
1167
- throw new TypeError('Dev Session does not allow official domains');
1168
- }
1169
1257
  return {
1170
1258
  miniUrlOrigin: miniUrlOrigin.origin,
1171
- networkRequestEnabled: networkPermission.status === 'enabled',
1172
- runtimePermissions: JSON.parse(JSON.stringify(payload.runtime_permissions)),
1259
+ networkRequestEnabled: networkPermission?.status === 'enabled',
1260
+ useOfficialDomain: networkPermission?.status === 'enabled' && networkPermission.config.useOfficialDomain === true,
1261
+ runtimePermissions: JSON.parse(JSON.stringify(runtimePermissions)),
1173
1262
  };
1174
1263
  }
1175
1264
  async function handleTokenNetworkProxy(request, response, token, runtime) {
@@ -1199,6 +1288,7 @@ async function handleTokenNetworkProxy(request, response, token, runtime) {
1199
1288
  await handleBrowserDevHostNetworkProxy(request, response, runtime.fetchImpl, runtime.lookupHostname, {
1200
1289
  allowedHttpOrigins: new Set([resolved.session.miniUrlOrigin]),
1201
1290
  cors: true,
1291
+ permission: { useOfficialDomain: resolved.session.useOfficialDomain },
1202
1292
  });
1203
1293
  }
1204
1294
  function resolveDevSession(token, devSessions, expiredDevSessions, now) {
@@ -1860,8 +1950,8 @@ const DEFAULT_CHANNEL_TRANSPORT = {
1860
1950
  };
1861
1951
  const IPV4_LOOPBACK_ADDRESSES = new net.BlockList();
1862
1952
  IPV4_LOOPBACK_ADDRESSES.addSubnet('127.0.0.0', 8, 'ipv4');
1863
- 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-DP7WtQOo.cjs', document.baseURI).href)))('ws');
1864
- 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-DP7WtQOo.cjs', document.baseURI).href)))('parse5');
1953
+ 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-6N5ruKiC.cjs', document.baseURI).href)))('ws');
1954
+ 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-6N5ruKiC.cjs', document.baseURI).href)))('parse5');
1865
1955
  const BROWSER_DEV_HOST_ROOT_CANDIDATES = [
1866
1956
  path.resolve(__dirname, 'devtools/browser-dev-host'),
1867
1957
  path.resolve(__dirname, '../devtools/browser-dev-host'),
@@ -1916,6 +2006,8 @@ async function startBrowserDevHostServer(options) {
1916
2006
  loginAvailable: options.loginService !== undefined,
1917
2007
  cliAuth: options.cliAuth,
1918
2008
  readDevContext: () => bootstrap.devContext ?? { source: 'anonymous', runtimePermissions: bootstrap.runtimePermissions },
2009
+ readMobileDevSessionContext: options.readMobileDevSessionContext ??
2010
+ (() => Promise.resolve(bootstrap.devContext ?? { source: 'anonymous', runtimePermissions: bootstrap.runtimePermissions })),
1919
2011
  readLanAddresses: () => bootstrap.lanAddresses,
1920
2012
  mobileLaunchRedirectRegistry,
1921
2013
  onMobileDevSessionCreated: options.onMobileDevSessionCreated,
@@ -2085,6 +2177,7 @@ function createBrowserDevHostServer(root, runtime) {
2085
2177
  fetchImpl: runtime.fetchImpl,
2086
2178
  lookupHostname: runtime.lookupHostname,
2087
2179
  now: runtime.now,
2180
+ readDevContext: runtime.readMobileDevSessionContext,
2088
2181
  onCreated: ({ expiresAt, miniUrlOrigin, token }, request) => {
2089
2182
  const origin = new URL(readRequestOrigin(request));
2090
2183
  const hostname = origin.hostname.startsWith('[') && origin.hostname.endsWith(']') ? origin.hostname.slice(1, -1) : origin.hostname;
@@ -10952,7 +11045,7 @@ function assertNodeRuntimeCapabilities(ctx, settings) {
10952
11045
  function createNodeRealtimeDriverRegistry() {
10953
11046
  const registry = createRuntimeRealtimeDriverRegistry();
10954
11047
  registry.registerLazy('node-websocket', async () => {
10955
- const mod = await Promise.resolve().then(function () { return require('./index.esm-B8pX0BrZ.cjs'); });
11048
+ const mod = await Promise.resolve().then(function () { return require('./index.esm-DhXN7XjE.cjs'); });
10956
11049
  return mod.createNodeWebSocketRuntimeDriver();
10957
11050
  });
10958
11051
  return registry;
@@ -15072,6 +15165,7 @@ async function runDevCommand(options, runtime = {}) {
15072
15165
  projectRoot,
15073
15166
  timeoutMs: runtime.devContextTimeoutMs ?? DEFAULT_DEV_CONTEXT_TIMEOUT_MS,
15074
15167
  });
15168
+ let currentDevContext = devLaunchContext;
15075
15169
  let launchRuntimePermissions = context.createBrowserDevRuntimePermissions(devLaunchContext.runtimePermissions, context.createBrowserDevPermissionState(devLaunchContext));
15076
15170
  const mobileDevContextUrlsByOrigin = new Map();
15077
15171
  let currentCompanionManifestSha256;
@@ -15142,7 +15236,7 @@ async function runDevCommand(options, runtime = {}) {
15142
15236
  try {
15143
15237
  browserDevHost = await runDevStartupTask(logger, '正在启动浏览器调试页服务', () => startBrowserDevHostServer({
15144
15238
  appUrl,
15145
- devContext: devLaunchContext,
15239
+ devContext: currentDevContext,
15146
15240
  fetchImpl,
15147
15241
  getPort: getPortImpl,
15148
15242
  defaultLanAddressId: lanAddresses[0]?.id,
@@ -15157,6 +15251,30 @@ async function runDevCommand(options, runtime = {}) {
15157
15251
  lanAddresses: buildLanAddresses(),
15158
15252
  });
15159
15253
  },
15254
+ readMobileDevSessionContext: async () => {
15255
+ try {
15256
+ const refreshed = await loadDevLaunchContext({
15257
+ env: runtime.env,
15258
+ fetchImpl,
15259
+ logger,
15260
+ projectRoot,
15261
+ timeoutMs: runtime.devContextTimeoutMs ?? DEFAULT_DEV_CONTEXT_TIMEOUT_MS,
15262
+ });
15263
+ currentDevContext = withCurrentLocalDevLaunchToken(refreshed.context, currentLocalDevLaunchToken);
15264
+ launchRuntimePermissions = context.createMobileDevSessionRuntimePermissions(currentDevContext);
15265
+ browserDevHost.updateBootstrap({
15266
+ devContext: currentDevContext,
15267
+ miniProgram: refreshed.miniProgram,
15268
+ });
15269
+ return currentDevContext;
15270
+ }
15271
+ catch (error) {
15272
+ currentDevContext = { source: 'anonymous' };
15273
+ launchRuntimePermissions = { schema_version: 1, entries: [] };
15274
+ browserDevHost.updateBootstrap({ devContext: currentDevContext });
15275
+ throw error;
15276
+ }
15277
+ },
15160
15278
  port: options.browserDevHostPort ?? DEFAULT_BROWSER_DEV_HOST_PORT,
15161
15279
  root: runtime.browserDevHostRoot,
15162
15280
  rootCandidates: runtime.browserDevHostRootCandidates,
@@ -15183,22 +15301,18 @@ async function runDevCommand(options, runtime = {}) {
15183
15301
  if (refreshed.context.miniProgramId !== devLaunchContext.miniProgramId)
15184
15302
  throw new Error('项目绑定已变更,请重新启动调试');
15185
15303
  devLaunchContext.runtimePermissions = refreshed.context.runtimePermissions;
15304
+ currentDevContext = withCurrentLocalDevLaunchToken(devLaunchContext, currentLocalDevLaunchToken);
15186
15305
  launchRuntimePermissions = context.createBrowserDevRuntimePermissions(devLaunchContext.runtimePermissions, context.createBrowserDevPermissionState(devLaunchContext));
15187
- browserDevHost.updateBootstrap({ devContext: { ...devLaunchContext, localDevLaunchToken: currentLocalDevLaunchToken } });
15306
+ browserDevHost.updateBootstrap({ devContext: currentDevContext });
15188
15307
  return hasCompanionApproval(devLaunchContext.runtimePermissions);
15189
15308
  },
15190
15309
  onToken: (localDevLaunchToken, companionManifestSha256, expiresAt) => {
15191
15310
  currentExpiresAt = expiresAt;
15192
15311
  currentCompanionManifestSha256 = companionManifestSha256;
15193
15312
  currentLocalDevLaunchToken = localDevLaunchToken;
15194
- const tokenContext = {
15195
- source: 'remote',
15196
- miniProgramId: devLaunchContext.miniProgramId,
15197
- ...(localDevLaunchToken ? { localDevLaunchToken } : {}),
15198
- runtimePermissions: devLaunchContext.runtimePermissions,
15199
- };
15313
+ currentDevContext = withCurrentLocalDevLaunchToken(currentDevContext, localDevLaunchToken);
15200
15314
  browserDevHost.updateBootstrap({
15201
- devContext: tokenContext,
15315
+ devContext: currentDevContext,
15202
15316
  lanAddresses: buildLanAddresses(),
15203
15317
  });
15204
15318
  },
@@ -15228,6 +15342,15 @@ async function runDevCommand(options, runtime = {}) {
15228
15342
  }
15229
15343
  installShutdownHandlers(closers, runtime.process ?? process);
15230
15344
  }
15345
+ function withCurrentLocalDevLaunchToken(context, localDevLaunchToken) {
15346
+ return {
15347
+ source: context.source,
15348
+ ...(context.miniProgramId ? { miniProgramId: context.miniProgramId } : {}),
15349
+ ...(localDevLaunchToken ? { localDevLaunchToken } : {}),
15350
+ ...(context.runtimePermissions !== undefined ? { runtimePermissions: context.runtimePermissions } : {}),
15351
+ ...(context.warning ? { warning: context.warning } : {}),
15352
+ };
15353
+ }
15231
15354
  function runDevStartupTask(logger, text, action, successText) {
15232
15355
  if (!logger.verbose) {
15233
15356
  return action();
@@ -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-CDwwaNvP.cjs');
6
+ var index = require('./index-Bc4AXYHM.cjs');
7
7
  require('node:module');
8
8
  require('node:fs');
9
9
  require('path');
@@ -234,19 +234,19 @@ function requireArgument () {
234
234
 
235
235
  var command = {};
236
236
 
237
- 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-CDwwaNvP.cjs', document.baseURI).href)));
237
+ 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-Bc4AXYHM.cjs', document.baseURI).href)));
238
238
  function __require$4() { return require$5("node:events"); }
239
239
 
240
- 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-CDwwaNvP.cjs', document.baseURI).href)));
240
+ 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-Bc4AXYHM.cjs', document.baseURI).href)));
241
241
  function __require$3() { return require$4("node:child_process"); }
242
242
 
243
- 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-CDwwaNvP.cjs', document.baseURI).href)));
243
+ 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-Bc4AXYHM.cjs', document.baseURI).href)));
244
244
  function __require$2() { return require$3("node:path"); }
245
245
 
246
- 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-CDwwaNvP.cjs', document.baseURI).href)));
246
+ 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-Bc4AXYHM.cjs', document.baseURI).href)));
247
247
  function __require$1() { return require$2("node:fs"); }
248
248
 
249
- 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-CDwwaNvP.cjs', document.baseURI).href)));
249
+ 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-Bc4AXYHM.cjs', document.baseURI).href)));
250
250
  function __require() { return require$1("node:process"); }
251
251
 
252
252
  var help = {};
@@ -13424,7 +13424,7 @@ function getPathname(pathWithQuery) {
13424
13424
  }
13425
13425
 
13426
13426
  const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
13427
- const BUILT_CLI_VERSION = '0.8.1-alpha.6';
13427
+ const BUILT_CLI_VERSION = '0.8.1-alpha.8';
13428
13428
  const PACKAGE_JSON_CANDIDATES = [
13429
13429
  path.resolve(__dirname, '..', '..', 'package.json'),
13430
13430
  path.resolve(__dirname, '..', 'package.json'),
@@ -13773,39 +13773,39 @@ function createCommandLoggerResolver(options) {
13773
13773
  };
13774
13774
  }
13775
13775
  const defaultClearLoginStatus = async (...args) => {
13776
- const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-Dt-FHzpL.cjs'); });
13776
+ const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-CTZgu8Q-.cjs'); });
13777
13777
  return clearLoginStatus(...args);
13778
13778
  };
13779
13779
  const defaultLoginToHeybox = async (...args) => {
13780
- const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-Dt-FHzpL.cjs'); });
13780
+ const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-CTZgu8Q-.cjs'); });
13781
13781
  return loginToHeybox(...args);
13782
13782
  };
13783
13783
  const defaultPrintLoginStatus = async (...args) => {
13784
- const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-Dt-FHzpL.cjs'); });
13784
+ const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-CTZgu8Q-.cjs'); });
13785
13785
  return printLoginStatus(...args);
13786
13786
  };
13787
13787
  const defaultRunBuildCommand = async (...args) => {
13788
- const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-B0X9pazW.cjs'); });
13788
+ const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-BYWPo2MY.cjs'); });
13789
13789
  return runBuildCommand(...args);
13790
13790
  };
13791
13791
  const defaultRunCreateCommand = async (...args) => {
13792
- const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-CyQWVxCA.cjs'); });
13792
+ const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-Dct-INxs.cjs'); });
13793
13793
  return runCreateCommand(...args);
13794
13794
  };
13795
13795
  const defaultRunDevCommand = async (...args) => {
13796
- const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-DP7WtQOo.cjs'); }).then(function (n) { return n.dev; });
13796
+ const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-6N5ruKiC.cjs'); }).then(function (n) { return n.dev; });
13797
13797
  return runDevCommand(...args);
13798
13798
  };
13799
13799
  const defaultRunDoctorCommand = async (...args) => {
13800
- const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-D6l-ONq-.cjs'); });
13800
+ const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-9HtdddBL.cjs'); });
13801
13801
  return runDoctorCommand(...args);
13802
13802
  };
13803
13803
  const defaultRunSkillInstallCommand = async (...args) => {
13804
- const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-B8GWL2KT.cjs'); });
13804
+ const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-DrFEqmdD.cjs'); });
13805
13805
  return runSkillInstallCommand(...args);
13806
13806
  };
13807
13807
  const defaultRunRemoteCommand = async (...args) => {
13808
- const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-Be6PeR-n.cjs'); });
13808
+ const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-0hw42fDG.cjs'); });
13809
13809
  return runRemoteCommand(...args);
13810
13810
  };
13811
13811
  function resolveStandaloneLogger(options, verbose) {
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var index$2 = require('./index-CDwwaNvP.cjs');
3
+ var index$2 = require('./index-Bc4AXYHM.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');
7
7
  var require$$0$5 = require('assert');
8
8
  var require$$0$4 = require('events');
9
9
  var require$$1$1 = require('util');
10
- var runtimePermissionEnv = require('./runtime-permission-env-DWSscWBT.cjs');
10
+ var runtimePermissionEnv = require('./runtime-permission-env-Bvggu6mn.cjs');
11
11
  var require$$0$7 = require('net');
12
12
  var require$$0$6 = require('url');
13
13
  var require$$2$1 = require('http');