@heybox/hb-sdk 0.9.1-alpha.5 → 0.9.1-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 (32) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +22 -0
  3. package/dist/cli-chunks/browser-DUdEZCyq.cjs +15 -0
  4. package/dist/cli-chunks/{build-D91J_GAa.cjs → build-DYYWRiaY.cjs} +14 -8
  5. package/dist/cli-chunks/{context-Xdd45FFd.cjs → context-Bo4L-Cx_.cjs} +12 -12
  6. package/dist/cli-chunks/{create-BzpdRC5r.cjs → create-CKC4yp0J.cjs} +12 -5
  7. package/dist/cli-chunks/{dev-C7acO3Kt.cjs → dev-BMX6UXUe.cjs} +12 -13
  8. package/dist/cli-chunks/{doctor-BgHRDQmG.cjs → doctor-DqEYRo4I.cjs} +13 -6
  9. package/dist/cli-chunks/{index-CjhQXbxy.cjs → index-DmCWB_hF.cjs} +3 -3
  10. package/dist/cli-chunks/{index-TQwjvNjL.cjs → index-J4uQvKT_.cjs} +10810 -6510
  11. package/dist/cli-chunks/{index.esm-dgqkvowo.cjs → index.esm-eNPTDv6W.cjs} +18 -19
  12. package/dist/cli-chunks/{login-B14iGXHh.cjs → login-BL2OE6r9.cjs} +32 -33
  13. package/dist/cli-chunks/{project-vite-CN6mMjzX.cjs → project-vite-Du1m7Y_3.cjs} +1 -1
  14. package/dist/cli-chunks/{remote-C9RUiZxK.cjs → remote-ZHJUtx6l.cjs} +35 -32
  15. package/dist/cli-chunks/{runtime-gate-CfAkz0p-.cjs → runtime-gate-DedD3ynE.cjs} +2 -2
  16. package/dist/cli-chunks/{runtime-permission-env-L7OfyRcl.cjs → runtime-permission-env-DWaPlchd.cjs} +1 -1
  17. package/dist/cli-chunks/{skill-BHTVho1a.cjs → skill-D4z_a_BH.cjs} +14 -7
  18. package/dist/cli-chunks/{version-C_NaCZ8O.cjs → version-tzrFwpkl.cjs} +1 -1
  19. package/dist/cli.cjs +14 -6
  20. package/dist/devtools/browser-dev-host/assets/{browser-dev-host-KPFU0Lsa.js → browser-dev-host-BL1URvGR.js} +1 -1
  21. package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-BNF9Yk4P.js → desktop-app-launch-D6QZYpUq.js} +1 -1
  22. package/dist/devtools/browser-dev-host/assets/{index-DRRtB9Nm.js → index-Bqsp608m.js} +3 -3
  23. package/dist/devtools/browser-dev-host/index.html +2 -2
  24. package/dist/index.cjs.js +1 -1
  25. package/dist/index.esm.js +1 -1
  26. package/dist/vite.cjs.js +1 -1
  27. package/dist/vite.esm.js +1 -1
  28. package/package.json +3 -3
  29. package/skill/SKILL.md +15 -0
  30. package/skill/skill.json +5 -5
  31. package/dist/cli-chunks/browser-RAy8e8cV.cjs +0 -635
  32. package/dist/cli-chunks/session-DZrr6RYK.cjs +0 -3404
package/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  本文件随 `@heybox/hb-sdk` npm 包公开分发,只记录外部小程序开发者可观察到的变化。
4
4
 
5
+ ## 0.9.1-alpha.6 - 2026-10-15
6
+
7
+ ### 新增能力
8
+
9
+ - 新增 `hb-sdk feedback`,可打开小程序工坊反馈页面,或提交问题、复现步骤、日志与截图链接,进入现有私有客服工单。
10
+ - 新增 `hb-sdk feedback list`、`detail` 和 `reply`,查看本人小程序工坊工单并向未关闭的原工单追加信息。
11
+
12
+ ### 文档与工具
13
+
14
+ - 提交前后明确说明私有工单性质、编号与详情链接,并提示在 App「设置 → 帮助与反馈 → 我的反馈」跟进。
15
+ - 智能体新建前先查看已有工单,确认同一问题后优先补充;服务端未确认工单隔离时拒绝读取和回复。
16
+ - 补充开发常见问题及反馈入口。
17
+
5
18
  ## 0.9.1-alpha.5
6
19
 
7
20
  - 工作区卡片 Controller v2 支持在本地开发入口调试,并校验控制器依赖、权限及卡片参数。
package/README.md CHANGED
@@ -512,3 +512,25 @@ Controller 使用 `@heybox/hb-sdk/card-controller` 编写,普通页面使用
512
512
 
513
513
  卡片合同只在开发构建时依赖私有 `@ai-desktop/view-contract`,发布 JS 与声明已封装所需代码和类型。
514
514
  用户安装 hb-sdk 不需要该私有包;`check:bundled-contract` 阻止未内联引用进入发布制品。
515
+
516
+ ## 开发反馈
517
+
518
+ 小程序工坊开发者反馈统一进入现有私有客服工单。登录后只能查看自己的反馈,客服通过现有后台派单和回复。
519
+
520
+ ```bash
521
+ hb-sdk feedback # 打开现有反馈页面,预选开发者分类
522
+ hb-sdk feedback --no-open # 只输出地址
523
+ hb-sdk feedback submit --desc "调用失败" --app-id app123 --api hb.network.request
524
+ hb-sdk feedback submit --desc "调用失败" --screenshot https://cdn.example.com/error.png --json
525
+ hb-sdk feedback list --json # 先查看本人已有的小程序工坊工单
526
+ hb-sdk feedback detail 9527 --json # 查看内容和客服回复
527
+ hb-sdk feedback reply 9527 --desc "补充复现步骤" --json
528
+ ```
529
+
530
+ 问题描述必填;AppID、关联 API、SDK 版本、环境、复现步骤、日志及截图选填。使用 `--scene` 补充复现步骤,`--log-file` 读取日志文件。完整正文最多 5000 字符;截图参数接受已经上传的 HTTP(S) URL,可重复,最多 10 张。CLI 不会上传本地图片文件,网页图片上传复用现有反馈页。
531
+
532
+ 提交时从现有分类接口查找“小程序工坊”分类(兼容原“小程序工坊开发者”和“小程序工坊开发者反馈”名称)及“开发中的常见问题”问题项,再调用 `/bbs/web/feedback/user/post`。分类未配置时拒绝提交;上线前需配置分类、问题项,并绑定客服组和派单优先级。提交结果包含原有工单 ID 和详情链接,不再创建独立 SDK 反馈记录。提交前会明确提示将创建私有反馈工单;使用提交时的同一小黑盒账号,在 App「设置 → 帮助与反馈 → 我的反馈」查看进展、客服回复或补充信息,也可打开返回的工单详情链接。`--json` 的成功结果包含 `message` 和 `follow_up` 说明,提交前提示输出到 stderr,不影响 stdout JSON 解析。
533
+
534
+ 列表支持 `--offset` 和 `--limit`(最多 50 条),详情和回复只允许访问当前登录账号在小程序工坊分类 `71` 下的工单。回复复用原工单,不占新建额度;已解决或关闭的工单不能继续回复。新能力需要后端支持范围隔离;服务未更新时会明确报错,不回退为读取全部工单。
535
+
536
+ 新建前先用 `feedback list` 查看已有工单,必要时用 `detail` 确认是否为同一问题;同一问题优先 `reply`。CLI 不会自动进行语义查重或合并,不能确认时由用户判断。
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-J4uQvKT_.cjs');
4
+
5
+ async function openExternalUrl(url) {
6
+ try {
7
+ await index.open(url);
8
+ return true;
9
+ }
10
+ catch {
11
+ return false;
12
+ }
13
+ }
14
+
15
+ exports.openExternalUrl = openExternalUrl;
@@ -1,29 +1,35 @@
1
1
  'use strict';
2
2
 
3
- var runtimeGate = require('./runtime-gate-CfAkz0p-.cjs');
3
+ var runtimeGate = require('./runtime-gate-DedD3ynE.cjs');
4
4
  var fs$1 = require('node:fs');
5
5
  var fs = require('node:fs/promises');
6
6
  var path = require('node:path');
7
- var runtimePermissionEnv = require('./runtime-permission-env-L7OfyRcl.cjs');
7
+ var runtimePermissionEnv = require('./runtime-permission-env-DWaPlchd.cjs');
8
8
  require('node:crypto');
9
9
  require('node:zlib');
10
- var index = require('./index-TQwjvNjL.cjs');
11
- var projectVite = require('./project-vite-CN6mMjzX.cjs');
10
+ var index = require('./index-J4uQvKT_.cjs');
11
+ var projectVite = require('./project-vite-Du1m7Y_3.cjs');
12
12
  require('node:module');
13
13
  require('node:url');
14
14
  require('fs');
15
15
  require('path');
16
16
  require('os');
17
17
  require('inspector');
18
- require('./version-C_NaCZ8O.cjs');
18
+ require('./version-tzrFwpkl.cjs');
19
19
  require('node:async_hooks');
20
+ require('constants');
21
+ require('stream');
22
+ require('util');
23
+ require('assert');
20
24
  require('readline');
21
25
  require('tty');
22
- require('assert');
23
26
  require('events');
24
- require('stream');
25
27
  require('buffer');
26
- require('util');
28
+ require('node:process');
29
+ require('node:buffer');
30
+ require('node:util');
31
+ require('node:child_process');
32
+ require('node:os');
27
33
 
28
34
  function areStringArraysEqual(left, right) {
29
35
  return left.length === right.length && left.every((value, index) => value === right[index]);
@@ -3,10 +3,10 @@
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 runtimePermissionEnv = require('./runtime-permission-env-L7OfyRcl.cjs');
6
+ var runtimePermissionEnv = require('./runtime-permission-env-DWaPlchd.cjs');
7
7
  var fs$1 = require('node:fs');
8
8
  var sharp = require('sharp');
9
- var session = require('./session-DZrr6RYK.cjs');
9
+ var index = require('./index-J4uQvKT_.cjs');
10
10
 
11
11
  async function inspectBasicInfoImage(bytes, sourcePath, kind) {
12
12
  const inspected = await inspectDecodedBasicInfoImage(bytes, kind);
@@ -525,20 +525,20 @@ async function listUserMiniprogramVersions(options, runtime) {
525
525
  }
526
526
  async function remoteGet(path, query, runtime) {
527
527
  const pathWithQuery = createPathWithQuery(path, query);
528
- const context = session.createHeyboxOpenPlatformRequestContext(runtime.session, pathWithQuery);
528
+ const context = index.createHeyboxOpenPlatformRequestContext(runtime.session, pathWithQuery);
529
529
  const fetchImpl = runtime.fetchImpl ?? fetch;
530
- const response = await fetchImpl(session.createHeyboxApiUrl(runtime.baseUrl ?? context.baseUrl, pathWithQuery, context.platformParams), {
530
+ const response = await fetchImpl(index.createHeyboxApiUrl(runtime.baseUrl ?? context.baseUrl, pathWithQuery, context.platformParams), {
531
531
  method: 'GET',
532
532
  headers: context.headers,
533
533
  });
534
534
  return readRequiredResult(response, pathWithQuery);
535
535
  }
536
536
  async function remotePostForm(path, fields, runtime, options = {}) {
537
- const context = session.createHeyboxOpenPlatformRequestContext(runtime.session, path, {
537
+ const context = index.createHeyboxOpenPlatformRequestContext(runtime.session, path, {
538
538
  contentType: 'application/x-www-form-urlencoded',
539
539
  });
540
540
  const fetchImpl = runtime.fetchImpl ?? fetch;
541
- const response = await fetchImpl(session.createHeyboxApiUrl(runtime.baseUrl ?? context.baseUrl, path, context.platformParams), {
541
+ const response = await fetchImpl(index.createHeyboxApiUrl(runtime.baseUrl ?? context.baseUrl, path, context.platformParams), {
542
542
  method: 'POST',
543
543
  headers: context.headers,
544
544
  body: createFormBody(fields),
@@ -549,11 +549,11 @@ async function remotePostForm(path, fields, runtime, options = {}) {
549
549
  return readRequiredResult(response, path);
550
550
  }
551
551
  async function readRequiredResult(response, pathWithQuery) {
552
- const result = await session.readHeyboxApiEnvelope(response, { pathWithQuery, requireResult: true });
552
+ const result = await index.readHeyboxApiEnvelope(response, { pathWithQuery, requireResult: true });
553
553
  return result;
554
554
  }
555
555
  async function readOptionalResult(response, pathWithQuery) {
556
- return session.readHeyboxApiEnvelope(response, { pathWithQuery, requireResult: false });
556
+ return index.readHeyboxApiEnvelope(response, { pathWithQuery, requireResult: false });
557
557
  }
558
558
  function createPathWithQuery(path, query) {
559
559
  const params = new URLSearchParams();
@@ -586,16 +586,16 @@ function createFormBody(fields) {
586
586
 
587
587
  async function resolveRemoteEnvironment(options = {}, runtime = {}) {
588
588
  const env = options.env ?? process.env;
589
- const apiBaseUrl = session.resolveHeyboxApiBaseUrl({ ...options, env });
590
- const loginBaseUrl = session.resolveHeyboxLoginBaseUrl({ ...options, env });
591
- const session$1 = options.session ?? (await (runtime.requireAuthSession ?? session.requireHeyboxAuthSession)({ loginBaseUrl }));
589
+ const apiBaseUrl = index.resolveHeyboxApiBaseUrl({ ...options, env });
590
+ const loginBaseUrl = index.resolveHeyboxLoginBaseUrl({ ...options, env });
591
+ const session = options.session ?? (await (runtime.requireAuthSession ?? index.requireHeyboxAuthSession)({ loginBaseUrl }));
592
592
  return {
593
593
  apiBaseUrl,
594
594
  loginBaseUrl,
595
595
  allowUnsafeApiBaseUrl: options.allowUnsafeApiBaseUrl === true || isTruthyEnvFlag(env.HB_SDK_ALLOW_UNSAFE_API_BASE_URL),
596
596
  env,
597
597
  fetchImpl: runtime.fetchImpl ?? options.fetchImpl ?? fetch,
598
- session: session$1,
598
+ session,
599
599
  };
600
600
  }
601
601
  function createRemoteApiClientForEnvironment(environment) {
@@ -5,17 +5,24 @@ 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-TQwjvNjL.cjs');
8
+ var index = require('./index-J4uQvKT_.cjs');
9
9
  require('node:module');
10
10
  require('os');
11
- require('node:crypto');
11
+ require('constants');
12
+ require('stream');
13
+ require('util');
14
+ require('assert');
12
15
  require('readline');
13
16
  require('tty');
14
- require('assert');
15
17
  require('events');
16
- require('stream');
17
18
  require('buffer');
18
- require('util');
19
+ require('node:crypto');
20
+ require('node:process');
21
+ require('node:buffer');
22
+ require('node:url');
23
+ require('node:util');
24
+ require('node:child_process');
25
+ require('node:os');
19
26
 
20
27
  var ejs = {};
21
28
 
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var session = require('./session-DZrr6RYK.cjs');
4
- var context = require('./context-Xdd45FFd.cjs');
3
+ var index = require('./index-J4uQvKT_.cjs');
4
+ var context = require('./context-Bo4L-Cx_.cjs');
5
5
  var node_crypto = require('node:crypto');
6
6
  var fs = require('node:fs');
7
- var runtimePermissionEnv = require('./runtime-permission-env-L7OfyRcl.cjs');
7
+ var runtimePermissionEnv = require('./runtime-permission-env-DWaPlchd.cjs');
8
8
  var os = require('node:os');
9
9
  var path = require('node:path');
10
10
  var net = require('node:net');
@@ -13,12 +13,11 @@ var node_http = require('node:http');
13
13
  var node_module = require('node:module');
14
14
  var undici = require('undici');
15
15
  var fs$1 = require('node:fs/promises');
16
- var index = require('./index-TQwjvNjL.cjs');
17
16
  var require$$0$1 = require('crypto');
18
17
  var require$$0 = require('buffer');
19
- var browser = require('./browser-RAy8e8cV.cjs');
20
- var projectVite = require('./project-vite-CN6mMjzX.cjs');
21
- var version = require('./version-C_NaCZ8O.cjs');
18
+ var browser = require('./browser-DUdEZCyq.cjs');
19
+ var projectVite = require('./project-vite-Du1m7Y_3.cjs');
20
+ var version = require('./version-tzrFwpkl.cjs');
22
21
  require('node:zlib');
23
22
 
24
23
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
@@ -1993,8 +1992,8 @@ const DEFAULT_CHANNEL_TRANSPORT = {
1993
1992
  };
1994
1993
  const IPV4_LOOPBACK_ADDRESSES = new net.BlockList();
1995
1994
  IPV4_LOOPBACK_ADDRESSES.addSubnet('127.0.0.0', 8, 'ipv4');
1996
- 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-C7acO3Kt.cjs', document.baseURI).href)))('ws');
1997
- 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-C7acO3Kt.cjs', document.baseURI).href)))('parse5');
1995
+ 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-BMX6UXUe.cjs', document.baseURI).href)))('ws');
1996
+ 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-BMX6UXUe.cjs', document.baseURI).href)))('parse5');
1998
1997
  const BROWSER_DEV_HOST_ROOT_CANDIDATES = [
1999
1998
  path.resolve(__dirname, 'devtools/browser-dev-host'),
2000
1999
  path.resolve(__dirname, '../devtools/browser-dev-host'),
@@ -11094,7 +11093,7 @@ function assertNodeRuntimeCapabilities(ctx, settings) {
11094
11093
  function createNodeRealtimeDriverRegistry() {
11095
11094
  const registry = createRuntimeRealtimeDriverRegistry();
11096
11095
  registry.registerLazy('node-websocket', async () => {
11097
- const mod = await Promise.resolve().then(function () { return require('./index.esm-dgqkvowo.cjs'); });
11096
+ const mod = await Promise.resolve().then(function () { return require('./index.esm-eNPTDv6W.cjs'); });
11098
11097
  return mod.createNodeWebSocketRuntimeDriver();
11099
11098
  });
11100
11099
  return registry;
@@ -14905,7 +14904,7 @@ function createBrowserDevHostCliAuth(options = {}) {
14905
14904
  const fetchImpl = options.fetchImpl ?? fetch;
14906
14905
  const noRedirectFetch = (input, init) => fetchImpl(input, { ...init, redirect: 'manual' });
14907
14906
  const store = options.store ?? { env: options.env };
14908
- const readSession = options.readSession ?? (() => session.readHeyboxAuthSession(store));
14907
+ const readSession = options.readSession ?? (() => index.readHeyboxAuthSession(store));
14909
14908
  let lastKey = '';
14910
14909
  let revision = 0;
14911
14910
  let profileKey = '';
@@ -15810,7 +15809,7 @@ async function runDevCommand(options, runtime = {}) {
15810
15809
  let browserDevHost;
15811
15810
  try {
15812
15811
  browserDevHost = await runDevStartupTask(logger, '正在启动浏览器调试页服务', () => startBrowserDevHostServer({
15813
- openPlatformBaseUrl: session.resolveHeyboxOpenPlatformBaseUrl(runtime.env),
15812
+ openPlatformBaseUrl: index.resolveHeyboxOpenPlatformBaseUrl(runtime.env),
15814
15813
  appUrl,
15815
15814
  devSessionId,
15816
15815
  devContext: currentDevContext,
@@ -16035,7 +16034,7 @@ async function loadDevLaunchContext(options) {
16035
16034
  const anonymous = (warning) => ({ context: { source: 'anonymous', warning,
16036
16035
  declaredPermissions: localPermissions.permissions ?? {}, platforms,
16037
16036
  runtimePermissions: runtimePermissionEnv.composeMiniappRuntimePermissions(localPermissions, undefined).runtimePermissions }, miniProgram: null });
16038
- if (!(await session.readHeyboxAuthSession({ env: options.env })))
16037
+ if (!(await index.readHeyboxAuthSession({ env: options.env })))
16039
16038
  return anonymous('尚未登录 CLI,真实手机和 PC 调试不可用');
16040
16039
  const miniProgramId = await context.readBoundMiniProgramId(options.projectRoot);
16041
16040
  if (!miniProgramId)
@@ -3,19 +3,26 @@
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-TQwjvNjL.cjs');
6
+ var index = require('./index-J4uQvKT_.cjs');
7
7
  require('node:module');
8
- require('node:fs');
9
8
  require('path');
10
9
  require('os');
11
- require('node:crypto');
10
+ require('fs');
11
+ require('constants');
12
+ require('stream');
13
+ require('util');
14
+ require('assert');
12
15
  require('readline');
13
16
  require('tty');
14
- require('assert');
15
17
  require('events');
16
- require('stream');
17
18
  require('buffer');
18
- require('util');
19
+ require('node:crypto');
20
+ require('node:process');
21
+ require('node:buffer');
22
+ require('node:url');
23
+ require('node:util');
24
+ require('node:child_process');
25
+ require('node:fs');
19
26
 
20
27
  const CANDIDATES = [
21
28
  path.resolve(__dirname, '..', 'package.json'),
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var index$2 = require('./index-TQwjvNjL.cjs');
3
+ var index$2 = require('./index-J4uQvKT_.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-L7OfyRcl.cjs');
10
+ var runtimePermissionEnv = require('./runtime-permission-env-DWaPlchd.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');
@@ -16,7 +16,7 @@ var require$$0$8 = require('stream');
16
16
  var require$$0$a = require('zlib');
17
17
  var require$$1$3 = require('querystring');
18
18
  var require$$0$9 = require('buffer');
19
- var runtimeGate = require('./runtime-gate-CfAkz0p-.cjs');
19
+ var runtimeGate = require('./runtime-gate-DedD3ynE.cjs');
20
20
  var require$$4$3 = require('tls');
21
21
 
22
22
  function _mergeNamespaces(n, m) {