@my-life-buddies/cli 0.26.2 → 0.26.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.
package/README.md CHANGED
@@ -502,27 +502,15 @@ buddy-cli products submit --resume <submissionId>
502
502
 
503
503
  提交结果包含准确的审核快照 ID。只有曾上架商品(包括已下架商品)才可独立选择已有版本提交修改;当前线上代码支持本次修改时,可以选择当前已发布版本,之后单独发布修改。首次商品仅可通过此命令恢复原上传的商品提交失败,仍须与关联搭子版本一起发布。
504
504
 
505
- ### 确认发布
505
+ ### 在后台确认发布
506
506
 
507
- ```bash
508
- buddy-cli release --from-push <pushId>
509
- buddy-cli release --from-submission <submissionId>
510
- buddy-cli release --from-submission <submissionId> --products-only
511
- buddy-cli release --version <版本> --code-only
512
- ```
513
-
514
- 前两种方式使用原回执中的版本与获批快照。`--products-only` 仅用于曾上架商品的修改,要求目标仍为当前已发布搭子版本;首次商品不能使用此选项,必须随关联搭子版本一起发布。已下架商品发布修改后仍保持下架。只希望更新代码时,明确使用 `--code-only`,商品内容保持原样。读取回执失败或商品提交失败不会被自动当成空商品清单继续发布。也可以到后台“版本与发布”确认本次发布内容。
507
+ CLI 负责上传代码、提交明确选中的商品以及查询或恢复这些操作。上传、审核和构建成功后,在开发者后台“版本与发布”核对本次版本与获批商品快照,再确认发布;CLI 不提供最终发布命令。
515
508
 
516
- ```bash
517
- buddy-cli release --status <releaseId>
518
- buddy-cli release --resume <releaseId>
519
- buddy-cli release --retry <releaseId>
520
- buddy-cli release --cancel <releaseId>
521
- ```
509
+ 首次商品必须随关联搭子版本一起发布。曾上架商品的修改可以在当前线上代码支持时,从后台单独发布;已下架商品发布修改后仍保持下架。只希望更新代码时,在后台明确选择仅发布代码,商品内容保持原样。
522
510
 
523
- 发布结果未知时先查询或恢复原任务;明确失败后可重试。取消阻止本任务后续激活商品,但不回滚已经开始的代码部署。仅 `active` 表示本次发布与商品激活完成。状态和恢复记录按平台、账号、搭子隔离,保存在本机私有操作目录;记录不包含登录凭据,恢复使用当前账号重新鉴权。
511
+ 发布任务的状态查询、重试和取消也在后台操作。取消阻止本任务后续激活商品,但不回滚已经开始的代码部署。后台显示发布成功后,仍需确认实际服务体验。下架仍在后台操作。
524
512
 
525
- 本期沿用平台已有的发布成功标准,没有新增 Runtime 初始化完成回报。页面或 CLI 显示发布成功,不等于实际服务已通过人工体验。下架仍在后台操作。
513
+ CLI 的上传和商品补提恢复记录按平台、账号、搭子隔离,保存在本机私有操作目录;记录不包含登录凭据,恢复使用当前账号重新鉴权。
526
514
 
527
515
  ### 上传前检查
528
516
 
package/dist/bin/core.js CHANGED
@@ -3371,7 +3371,6 @@ var CLI_HELP = `\u642D\u642D Developer Platform CLI
3371
3371
  preview \u8FDE\u63A5\u5DE5\u7A0B\u5E76\u6253\u5F00\u540E\u53F0\u5F00\u53D1\u8C03\u8BD5
3372
3372
  push \u4E0A\u4F20\u7A0B\u5E8F\u5305\uFF0C\u53EF\u7528 --product \u540C\u6B65\u63D0\u4EA4\u5546\u54C1\u5BA1\u6838
3373
3373
  products \u4E3A\u5DF2\u6709\u7248\u672C\u8865\u63D0\u5546\u54C1\uFF0C\u6216\u6062\u590D\u539F\u63D0\u5BA1\u8BF7\u6C42
3374
- release \u4ECE\u660E\u786E\u56DE\u6267\u53D1\u5E03\uFF0C\u67E5\u8BE2\u3001\u6062\u590D\u3001\u91CD\u8BD5\u6216\u53D6\u6D88\u53D1\u5E03
3375
3374
  status \u67E5\u770B\u4E91\u7AEF\u7248\u672C\u3001\u8FD0\u884C\u3001\u5BA1\u6838\u548C\u6784\u5EFA\u72B6\u6001
3376
3375
  meta \u67E5\u770B\u4E91\u7AEF\u8D44\u6599\uFF1Bmeta update \u4FEE\u6539\u8D44\u6599\u6216\u66FF\u6362\u5934\u50CF
3377
3376
  avatar \u65E7\u5934\u50CF\u547D\u4EE4\u517C\u5BB9\u5165\u53E3\uFF0C\u63A8\u8350 meta update --avatar
@@ -5380,21 +5379,12 @@ function parsePackagePush(value) {
5380
5379
  if (operationId(p.pushId) !== metadata.pushId) invalid2("\u4E0A\u4F20\u56DE\u6267 ID \u4E0E\u5143\u6570\u636E\u4E0D\u5339\u914D");
5381
5380
  return { pushId: metadata.pushId, uploadVersion: p.uploadVersion, status: p.status, metadata, reviewIds: selectedReviewIds(p.reviewIds), failure: p.failure ?? null };
5382
5381
  }
5383
- function parseProductRelease(value) {
5384
- const r = record(value);
5385
- if (r.mode !== "with_buddy" && r.mode !== "products_only") invalid2("\u53D1\u5E03\u6A21\u5F0F\u65E0\u6548");
5386
- if (!["accepted", "activating", "active", "failed", "cancelled"].includes(String(r.status))) invalid2("\u53D1\u5E03\u64CD\u4F5C\u72B6\u6001\u65E0\u6548");
5387
- if (typeof r.buddyVersion !== "string" || !r.buddyVersion.trim() || /[\u0000-\u001f\u007f]/u.test(r.buddyVersion)) invalid2("\u53D1\u5E03\u7248\u672C\u65E0\u6548");
5388
- return { releaseId: operationId(r.releaseId), mode: r.mode, buddyVersion: r.buddyVersion, reviewIds: selectedReviewIds(r.reviewIds), status: r.status, ...r.failure === void 0 ? {} : { failure: r.failure } };
5389
- }
5390
5382
  var CloudOperationError = class extends CloudLifecycleError {
5391
- constructor(code2, message, details, push, release) {
5383
+ constructor(code2, message, details, push) {
5392
5384
  super(code2, message, details);
5393
5385
  this.push = push;
5394
- this.release = release;
5395
5386
  }
5396
5387
  push;
5397
- release;
5398
5388
  };
5399
5389
  function sameReviewIds(a, b) {
5400
5390
  return [...a].sort().join("\0") === [...b].sort().join("\0");
@@ -5432,7 +5422,7 @@ var OperationStore = class {
5432
5422
  }
5433
5423
  async save(record3) {
5434
5424
  const prior = await this.read(record3.id, record3.kind);
5435
- const input = (r) => r.kind === "push" ? r.metadata : r.kind === "release" ? r.request : { version: r.version, reviews: r.reviews };
5425
+ const input = (r) => r.kind === "push" ? r.metadata : { version: r.version, reviews: r.reviews };
5436
5426
  if (JSON.stringify(input(prior)) !== JSON.stringify(input(record3))) throw new CloudLifecycleError("INVALID_REQUEST", "\u6062\u590D\u8BB0\u5F55\u7684\u539F\u59CB\u8BF7\u6C42\u4E0D\u80FD\u66F4\u6539");
5437
5427
  const temporary = this.path(`${record3.id}_${randomUUID8()}`);
5438
5428
  await writeFile8(temporary, JSON.stringify({ identity: this.identity, operation: record3 }), { flag: "wx", mode: 384 });
@@ -5448,11 +5438,6 @@ var OperationStore = class {
5448
5438
  if (r.metadata.pushId !== id) throw new Error("push mismatch");
5449
5439
  if (r.receipt) parsePackagePush(r.receipt);
5450
5440
  }
5451
- if (r.kind === "release") {
5452
- parseProductRelease({ ...r.request, status: "accepted" });
5453
- if (r.request.releaseId !== id) throw new Error("release mismatch");
5454
- if (r.receipt) parseProductRelease(r.receipt);
5455
- }
5456
5441
  if (r.kind === "submission") {
5457
5442
  if (typeof r.version !== "string" || !r.version.trim() || typeof r.confirmed !== "boolean" || r.reviews.length === 0) throw new Error("submission invalid");
5458
5443
  parsePushMetadata({ pushId: id, commit: "validate", sourceSha256: "0".repeat(64), productReviews: r.reviews });
@@ -5477,7 +5462,7 @@ var OperationStore = class {
5477
5462
  var PRODUCT_HELP = {
5478
5463
  push: `\u7528\u6CD5: buddy-cli push --commit <\u6539\u52A8\u8BF4\u660E> [--product <\u5546\u54C1 ID> ...] [--directory <\u76EE\u5F55>]
5479
5464
  buddy-cli push --resume <pushId> | --status <pushId> [--directory <\u76EE\u5F55>]
5480
- \u4E0A\u4F20\u4EE3\u7801\u5E76\u63D0\u4EA4\u660E\u786E\u9009\u4E2D\u7684\u5546\u54C1\uFF1B\u4E0D\u6307\u5B9A --product \u53EA\u4E0A\u4F20\u4EE3\u7801\u3002\u4E0D\u4F1A\u81EA\u52A8\u53D1\u5E03\u3002
5465
+ \u4E0A\u4F20\u4EE3\u7801\u5E76\u63D0\u4EA4\u660E\u786E\u9009\u4E2D\u7684\u5546\u54C1\uFF1B\u4E0D\u6307\u5B9A --product \u53EA\u4E0A\u4F20\u4EE3\u7801\u3002\u53D1\u5E03\u5728\u5F00\u53D1\u8005\u540E\u53F0\u64CD\u4F5C\u3002
5481
5466
  \u5546\u54C1 ID \u793A\u4F8B\uFF1Aprd_12345678\uFF1B\u5DF2\u6709 ps_ \u5546\u54C1 ID \u7EE7\u7EED\u517C\u5BB9\u3002
5482
5467
  \u9996\u6B21\u4E0A\u4F20\u5FC5\u987B\u5B89\u88C5 npm latest \u6700\u65B0\u7A33\u5B9A Runtime \u7684\u51C6\u786E\u7248\u672C\uFF1B\u91CD\u8BD5\u56FA\u5B9A\u4F7F\u7528\u539F\u59CB\u5305\u3001\u8349\u7A3F\u7248\u672C\u548C\u5BA1\u6838 ID\u3002
5483
5468
  \u7F51\u7EDC\u7ED3\u679C\u672A\u77E5\u65F6\u8BF7\u4F7F\u7528\u8F93\u51FA\u7684 --resume\uFF1B--status \u53EA\u67E5\u8BE2\u3002\u4E0D\u8981\u91CD\u65B0\u4E0A\u4F20\u3002`,
@@ -5485,13 +5470,7 @@ var PRODUCT_HELP = {
5485
5470
  buddy-cli products submit --resume <submissionId> [--directory <\u76EE\u5F55>]
5486
5471
  \u7528\u4E8E\u5DF2\u4E0A\u4F20\u7248\u672C\u8865\u63D0\u5546\u54C1\uFF1B\u6B63\u5E38 push --product \u5DF2\u81EA\u52A8\u63D0\u5BA1\uFF0C\u65E0\u9700\u91CD\u590D\u6267\u884C\u3002
5487
5472
  \u5546\u54C1 ID \u793A\u4F8B\uFF1Aprd_12345678\uFF1B\u5DF2\u6709 ps_ \u5546\u54C1 ID \u7EE7\u7EED\u517C\u5BB9\u3002
5488
- \u6062\u590D\u4F7F\u7528\u9996\u6B21\u6301\u4E45\u4FDD\u5B58\u7684\u5546\u54C1\u96C6\u5408\u3001\u5BA1\u6838 ID \u548C\u8349\u7A3F\u7248\u672C\u3002`,
5489
- release: `\u7528\u6CD5: buddy-cli release (--from-push <pushId> | --from-submission <submissionId>) [--products-only] [--directory <\u76EE\u5F55>]
5490
- buddy-cli release --version <\u7248\u672C> --code-only [--directory <\u76EE\u5F55>]
5491
- buddy-cli release (--resume | --status | --retry | --cancel) <releaseId> [--directory <\u76EE\u5F55>]
5492
- \u53D1\u5E03\u53EA\u91C7\u7528\u6307\u5B9A\u6210\u529F\u56DE\u6267\u4E2D\u7684\u5BA1\u6838\u96C6\u5408\uFF1B\u5546\u54C1\u5931\u8D25\u4E0D\u4F1A\u81EA\u52A8\u964D\u7EA7\u4E3A\u7EAF\u4EE3\u7801\u53D1\u5E03\u3002
5493
- \u9ED8\u8BA4\u968F\u642D\u5B50\u7248\u672C\u4E00\u8D77\u53D1\u5E03\uFF1B--products-only \u53EA\u6FC0\u6D3B\u5546\u54C1\u5E76\u6838\u5BF9\u5F53\u524D\u7EBF\u4E0A\u7248\u672C\u3002
5494
- \u4EC5 active \u8868\u793A\u5DF2\u751F\u6548\uFF1Baccepted/activating \u8BF7\u7528 --status \u67E5\u8BE2\u3002`
5473
+ \u6062\u590D\u4F7F\u7528\u9996\u6B21\u6301\u4E45\u4FDD\u5B58\u7684\u5546\u54C1\u96C6\u5408\u3001\u5BA1\u6838 ID \u548C\u8349\u7A3F\u7248\u672C\u3002\u5BA1\u6838\u901A\u8FC7\u540E\u5728\u5F00\u53D1\u8005\u540E\u53F0\u53D1\u5E03\u3002`
5495
5474
  };
5496
5475
  function parse2(command, args) {
5497
5476
  if (command === "products") {
@@ -5500,15 +5479,11 @@ function parse2(command, args) {
5500
5479
  }
5501
5480
  const values = /* @__PURE__ */ new Map();
5502
5481
  const products = [];
5503
- const allowed = command === "push" ? ["--commit", "--resume", "--status", "--product"] : command === "products" ? ["--version", "--resume", "--product"] : ["--from-push", "--from-submission", "--version", "--code-only", "--products-only", "--resume", "--status", "--retry", "--cancel"];
5482
+ const allowed = command === "push" ? ["--commit", "--resume", "--status", "--product"] : ["--version", "--resume", "--product"];
5504
5483
  for (let i = 0; i < args.length; i++) {
5505
5484
  const flag2 = args[i];
5506
5485
  if (flag2 !== "--directory" && !allowed.includes(flag2)) throw new CloudCommandUsageError(`\u672A\u77E5\u53C2\u6570 ${flag2}`);
5507
5486
  if (flag2 !== "--product" && values.has(flag2)) throw new CloudCommandUsageError(`${flag2} \u4E0D\u80FD\u91CD\u590D`);
5508
- if (["--code-only", "--products-only"].includes(flag2)) {
5509
- values.set(flag2, "true");
5510
- continue;
5511
- }
5512
5487
  const value = args[++i];
5513
5488
  if (!value?.trim() || value.startsWith("--") || /[\u0000-\u001f\u007f]/u.test(value)) throw new CloudCommandUsageError(`${flag2} \u7F3A\u5C11\u6709\u6548\u503C`);
5514
5489
  if (flag2 === "--product") {
@@ -5517,12 +5492,12 @@ function parse2(command, args) {
5517
5492
  } else values.set(flag2, value.trim());
5518
5493
  }
5519
5494
  if (products.length > 10) throw new CloudCommandUsageError("\u4E00\u6B21\u6700\u591A\u9009\u62E9 10 \u4E2A\u5546\u54C1");
5520
- const recovery = ["--resume", "--status", "--retry", "--cancel"].filter((f) => values.has(f));
5495
+ const recovery = ["--resume", "--status"].filter((f) => values.has(f));
5521
5496
  if (recovery.length && (recovery.length !== 1 || products.length || [...values.keys()].some((f) => f !== "--directory" && !recovery.includes(f)))) throw new CloudCommandUsageError("\u6062\u590D\u6216\u67E5\u8BE2\u547D\u4EE4\u4E0D\u80FD\u540C\u65F6\u66F4\u6539\u539F\u59CB\u8BF7\u6C42");
5522
5497
  return { values, products };
5523
5498
  }
5524
5499
  function required(value) {
5525
- if (!value) throw new CloudCommandUsageError("\u5E73\u53F0 Adapter \u5C1A\u672A\u652F\u6301\u5546\u54C1\u4E0A\u4F20\u548C\u53D1\u5E03\u534F\u8BAE\uFF0C\u8BF7\u5347\u7EA7 Adapter");
5500
+ if (!value) throw new CloudCommandUsageError("\u5E73\u53F0 Adapter \u5C1A\u672A\u652F\u6301\u5546\u54C1\u4E0A\u4F20\u548C\u63D0\u5BA1\u534F\u8BAE\uFF0C\u8BF7\u5347\u7EA7 Adapter");
5526
5501
  return value;
5527
5502
  }
5528
5503
  function responseError(message) {
@@ -5558,10 +5533,10 @@ function showPush(io, push) {
5558
5533
  if (failureMessage(push.failure)) io.writeError(`\u539F\u56E0\uFF1A${failureMessage(push.failure)}`);
5559
5534
  if (push.reviewIds.length) io.write(`\u5546\u54C1\u5BA1\u6838\u7F16\u53F7\uFF1A${push.reviewIds.join(", ")}`);
5560
5535
  if (push.status === "completed") {
5561
- io.write(`\u672C\u6B21 push \u4E0D\u4F1A\u53D1\u5E03\u642D\u5B50\uFF1B\u786E\u8BA4\u4EE3\u7801\u53CA\u6240\u9009\u5546\u54C1\u5BA1\u6838\u7ED3\u679C\u540E\u4F7F\u7528 buddy-cli release --from-push ${push.pushId}\u3002`);
5536
+ io.write("\u672C\u6B21 push \u4E0D\u4F1A\u53D1\u5E03\u642D\u5B50\uFF1B\u6784\u5EFA\u6210\u529F\u540E\uFF0C\u8BF7\u5230\u5F00\u53D1\u8005\u540E\u53F0\u201C\u7248\u672C\u4E0E\u53D1\u5E03\u201D\u786E\u8BA4\u4EE3\u7801\u53CA\u6240\u9009\u5546\u54C1\u5BA1\u6838\u7ED3\u679C\u540E\u53D1\u5E03\u3002");
5562
5537
  return 0;
5563
5538
  }
5564
- if (push.status === "product_reviews_failed") io.writeError(`\u4EE3\u7801\u5305\u5DF2\u4FDD\u5B58\uFF0C\u5546\u54C1\u672A\u5B8C\u6574\u63D0\u5BA1\u3002\u4FEE\u6B63\u5546\u54C1\u540E\u4F7F\u7528 products submit --version ${push.uploadVersion} --product <\u5546\u54C1 ID> \u8865\u63D0\uFF1B\u7EAF\u4EE3\u7801\u53D1\u5E03\u987B\u660E\u786E --code-only\u3002`);
5539
+ if (push.status === "product_reviews_failed") io.writeError(`\u4EE3\u7801\u5305\u5DF2\u4FDD\u5B58\uFF0C\u5546\u54C1\u672A\u5B8C\u6574\u63D0\u5BA1\u3002\u4FEE\u6B63\u5546\u54C1\u540E\u4F7F\u7528 buddy-cli products submit --version ${push.uploadVersion} --product <\u5546\u54C1 ID> \u8865\u63D0\uFF1B\u53D1\u5E03\u8BF7\u5230\u5F00\u53D1\u8005\u540E\u53F0\u201C\u7248\u672C\u4E0E\u53D1\u5E03\u201D\u64CD\u4F5C\u3002`);
5565
5540
  else io.writeError(`\u4E0A\u4F20\u672A\u5B8C\u6210\uFF0C\u4F7F\u7528 buddy-cli push --resume ${push.pushId} \u6062\u590D\u539F\u8BF7\u6C42\u3002`);
5566
5541
  return 1;
5567
5542
  }
@@ -5601,23 +5576,6 @@ async function executePush(record3, sourceBundle, store, client, id, io, options
5601
5576
  throw cause;
5602
5577
  }
5603
5578
  }
5604
- function matchRelease(request, release) {
5605
- if (request.releaseId !== release.releaseId || request.mode !== release.mode || request.buddyVersion !== release.buddyVersion || !sameReviewIds(request.reviewIds, release.reviewIds)) responseError("\u53D1\u5E03\u56DE\u6267\u4E0E\u56FA\u5B9A\u8BF7\u6C42\u4E0D\u4E00\u81F4");
5606
- }
5607
- function showRelease(io, release) {
5608
- io.write(`\u53D1\u5E03\u7F16\u53F7\uFF1A${release.releaseId}`);
5609
- io.write(`\u53D1\u5E03\u72B6\u6001\uFF1A${release.status}`);
5610
- io.write(`\u76EE\u6807\u7248\u672C\uFF1A${release.buddyVersion}`);
5611
- if (failureMessage(release.failure)) io.writeError(`\u539F\u56E0\uFF1A${failureMessage(release.failure)}`);
5612
- if (release.status === "active") {
5613
- io.write("\u53D1\u5E03\u5DF2\u751F\u6548\u3002");
5614
- return 0;
5615
- }
5616
- if (release.status === "failed") io.writeError(`\u53D1\u5E03\u672A\u751F\u6548\u3002\u4FEE\u6B63\u539F\u56E0\u540E buddy-cli release --retry ${release.releaseId}\uFF1B\u653E\u5F03\u5219 --cancel ${release.releaseId}\u3002`);
5617
- else if (release.status === "cancelled") io.write("\u8BE5\u53D1\u5E03\u5DF2\u53D6\u6D88\u3002");
5618
- else io.write(`\u53D1\u5E03\u4ECD\u5728\u5904\u7406\uFF0C\u8BF7\u8FD0\u884C buddy-cli release --status ${release.releaseId} \u786E\u8BA4\u662F\u5426\u751F\u6548\u3002`);
5619
- return 1;
5620
- }
5621
5579
  async function runProductLifecycle(command, args, io, options) {
5622
5580
  if (args.length === 1 && ["--help", "-h"].includes(args[0]) || command === "products" && args.length === 2 && args[0] === "submit" && args[1] === "--help") {
5623
5581
  io.write(PRODUCT_HELP[command]);
@@ -5625,7 +5583,7 @@ async function runProductLifecycle(command, args, io, options) {
5625
5583
  }
5626
5584
  const p = parse2(command, args);
5627
5585
  const v = p.values;
5628
- if (options.mode === "local-mock") throw new CloudCommandUsageError("\u672C\u5730\u6A21\u62DF\u6A21\u5F0F\u4E0D\u4F1A\u4F2A\u9020\u6B63\u5F0F push \u6216\u53D1\u5E03\uFF0C\u8BF7\u8FDE\u63A5\u771F\u5B9E MLB Server");
5586
+ if (options.mode === "local-mock") throw new CloudCommandUsageError("\u672C\u5730\u6A21\u62DF\u6A21\u5F0F\u4E0D\u4F1A\u4F2A\u9020\u6B63\u5F0F push \u6216\u5546\u54C1\u63D0\u5BA1\uFF0C\u8BF7\u8FDE\u63A5\u771F\u5B9E MLB Server");
5629
5587
  const freshPush = command === "push" && !v.has("--resume") && !v.has("--status");
5630
5588
  const root = await (options.resolveProjectRoot ?? (freshPush ? requireBuddyAgentProjectRoot : requireBuddyProjectRoot))(resolve15(options.cwd ?? process.cwd(), v.get("--directory") ?? "."));
5631
5589
  const platform = resolvePlatformUrl({ env: options.runtimeUpdate?.env });
@@ -5666,83 +5624,25 @@ async function runProductLifecycle(command, args, io, options) {
5666
5624
  io.write(`\u6062\u590D\u7F16\u53F7\uFF1A${pushId}`);
5667
5625
  return executePush(record4, bundle, store, client, id, io, options);
5668
5626
  }
5669
- if (command === "products") {
5670
- let record4;
5671
- if (v.has("--resume")) record4 = await store.read(v.get("--resume"), "submission");
5672
- else {
5673
- const version = v.get("--version");
5674
- if (!version || !p.products.length) throw new CloudCommandUsageError(PRODUCT_HELP.products);
5675
- const chosen = await selection(client, id, p.products, io);
5676
- record4 = { kind: "submission", id: `sub_${randomUUID9()}`, version, reviews: chosen.reviews, confirmed: false };
5677
- await store.create(record4);
5678
- }
5679
- io.write(`\u5546\u54C1\u63D0\u4EA4\u7F16\u53F7\uFF1A${record4.id}`);
5680
- try {
5681
- const receipt = await required(client.submitPackageProducts).call(client, { id, version: record4.version, reviews: record4.reviews });
5682
- if (!sameReviewIds(receipt.reviewIds, record4.reviews.map((r) => r.reviewId))) responseError("\u5E73\u53F0\u672A\u786E\u8BA4\u5B8C\u6574\u5546\u54C1\u5BA1\u6838\u96C6\u5408");
5683
- await store.save({ ...record4, confirmed: true });
5684
- io.write(`\u5546\u54C1\u5DF2\u63D0\u4EA4\u5BA1\u6838\uFF1A${receipt.reviewIds.join(", ")}`);
5685
- io.write(`\u5BA1\u6838\u901A\u8FC7\u540E\uFF1Abuddy-cli release --from-submission ${record4.id}`);
5686
- return { exitCode: 0, buddyId: id, version: record4.version };
5687
- } catch (cause) {
5688
- io.writeError(`\u4FDD\u7559\u539F\u8BF7\u6C42\u91CD\u8BD5\uFF1Abuddy-cli products submit --resume ${record4.id}`);
5689
- throw cause;
5690
- }
5691
- }
5692
- const action = ["--resume", "--status", "--retry", "--cancel"].find((f) => v.has(f));
5693
5627
  let record3;
5694
- if (action) {
5695
- const releaseId = v.get(action);
5696
- if (action === "--status") {
5697
- const release = await required(client.getProductRelease).call(client, { id, releaseId });
5698
- if (release.releaseId !== releaseId) responseError("\u53D1\u5E03\u7F16\u53F7\u4E0D\u5339\u914D");
5699
- return { exitCode: showRelease(io, release), buddyId: id, version: release.buddyVersion };
5700
- }
5701
- record3 = await store.read(releaseId, "release");
5702
- } else {
5703
- const sources = ["--from-push", "--from-submission", "--version"].filter((f) => v.has(f));
5704
- if (sources.length !== 1 || v.has("--code-only") !== v.has("--version") || v.has("--code-only") && v.has("--products-only")) throw new CloudCommandUsageError(PRODUCT_HELP.release);
5705
- let version;
5706
- let reviewIds;
5707
- if (v.has("--from-push")) {
5708
- const pushRecord = await store.read(v.get("--from-push"), "push");
5709
- const receipt = await required(client.getPackagePush).call(client, { id, pushId: pushRecord.id });
5710
- confirmPush(pushRecord, receipt);
5711
- await store.save({ ...pushRecord, receipt });
5712
- if (receipt.status !== "completed" || !receipt.uploadVersion) throw new CloudCommandUsageError("\u6307\u5B9A\u4E0A\u4F20\u5C1A\u672A\u5B8C\u6574\u63D0\u5BA1\uFF0C\u4E0D\u80FD\u81EA\u52A8\u7701\u7565\u5931\u8D25\u5546\u54C1\uFF1B\u8BF7\u8865\u63D0\u6216\u660E\u786E --version <\u7248\u672C> --code-only");
5713
- version = receipt.uploadVersion;
5714
- reviewIds = receipt.reviewIds;
5715
- } else if (v.has("--from-submission")) {
5716
- const submission = await store.read(v.get("--from-submission"), "submission");
5717
- if (!submission.confirmed) throw new CloudCommandUsageError(`\u8865\u63D0\u7ED3\u679C\u5C1A\u672A\u786E\u8BA4\uFF0C\u8BF7\u5148 products submit --resume ${submission.id}`);
5718
- version = submission.version;
5719
- reviewIds = submission.reviews.map((r) => r.reviewId);
5720
- } else {
5721
- version = v.get("--version");
5722
- reviewIds = [];
5723
- }
5724
- if (v.has("--products-only")) {
5725
- if (!reviewIds.length) throw new CloudCommandUsageError("--products-only \u9700\u8981\u660E\u786E\u7684\u5546\u54C1\u5BA1\u6838\u96C6\u5408");
5726
- const buddy2 = await client.getBuddy({ id });
5727
- if (buddy2.id !== id || !buddy2.released || buddy2.version !== version) throw new CloudCommandUsageError("\u4EC5\u5546\u54C1\u53D1\u5E03\u8981\u6C42\u56DE\u6267\u7248\u672C\u4E0E\u5F53\u524D\u5DF2\u53D1\u5E03\u642D\u5B50\u7248\u672C\u4E00\u81F4");
5728
- }
5729
- const releaseId = `rel_${randomUUID9()}`;
5730
- record3 = { kind: "release", id: releaseId, request: { releaseId, mode: v.has("--products-only") ? "products_only" : "with_buddy", buddyVersion: version, reviewIds } };
5628
+ if (v.has("--resume")) record3 = await store.read(v.get("--resume"), "submission");
5629
+ else {
5630
+ const version = v.get("--version");
5631
+ if (!version || !p.products.length) throw new CloudCommandUsageError(PRODUCT_HELP.products);
5632
+ const chosen = await selection(client, id, p.products, io);
5633
+ record3 = { kind: "submission", id: `sub_${randomUUID9()}`, version, reviews: chosen.reviews, confirmed: false };
5731
5634
  await store.create(record3);
5732
5635
  }
5733
- io.write(`\u6062\u590D\u7F16\u53F7\uFF1A${record3.id}`);
5636
+ io.write(`\u5546\u54C1\u63D0\u4EA4\u7F16\u53F7\uFF1A${record3.id}`);
5734
5637
  try {
5735
- const receipt = action === "--retry" ? await required(client.retryProductRelease).call(client, { id, releaseId: record3.id }) : action === "--cancel" ? await required(client.cancelProductRelease).call(client, { id, releaseId: record3.id }) : await required(client.createProductRelease).call(client, { id, release: record3.request });
5736
- matchRelease(record3.request, receipt);
5737
- await store.save({ ...record3, receipt });
5738
- return { exitCode: showRelease(io, receipt), buddyId: id, version: receipt.buddyVersion };
5638
+ const receipt = await required(client.submitPackageProducts).call(client, { id, version: record3.version, reviews: record3.reviews });
5639
+ if (!sameReviewIds(receipt.reviewIds, record3.reviews.map((r) => r.reviewId))) responseError("\u5E73\u53F0\u672A\u786E\u8BA4\u5B8C\u6574\u5546\u54C1\u5BA1\u6838\u96C6\u5408");
5640
+ await store.save({ ...record3, confirmed: true });
5641
+ io.write(`\u5546\u54C1\u5DF2\u63D0\u4EA4\u5BA1\u6838\uFF1A${receipt.reviewIds.join(", ")}`);
5642
+ io.write("\u5BA1\u6838\u901A\u8FC7\u540E\uFF0C\u8BF7\u5230\u5F00\u53D1\u8005\u540E\u53F0\u786E\u8BA4\u5E76\u53D1\u5E03\u3002");
5643
+ return { exitCode: 0, buddyId: id, version: record3.version };
5739
5644
  } catch (cause) {
5740
- if (cause instanceof CloudOperationError && cause.release) {
5741
- matchRelease(record3.request, cause.release);
5742
- await store.save({ ...record3, receipt: cause.release });
5743
- showRelease(io, cause.release);
5744
- }
5745
- io.writeError(`\u53D1\u5E03\u7ED3\u679C\u9700\u786E\u8BA4\uFF1Abuddy-cli release --status ${record3.id}\uFF1B\u539F\u8BF7\u6C42\u6062\u590D\uFF1Abuddy-cli release --resume ${record3.id}`);
5645
+ io.writeError(`\u4FDD\u7559\u539F\u8BF7\u6C42\u91CD\u8BD5\uFF1Abuddy-cli products submit --resume ${record3.id}`);
5746
5646
  throw cause;
5747
5647
  }
5748
5648
  }
@@ -6120,7 +6020,7 @@ function serverError(response, body) {
6120
6020
  return new CloudOperationError(code2, message, {
6121
6021
  httpStatus: response.status,
6122
6022
  retryable: response.status === 408 || response.status === 429 || response.status >= 500
6123
- }, source?.push === void 0 ? void 0 : parsePackagePush(source.push), source?.release === void 0 ? void 0 : parseProductRelease(source.release));
6023
+ }, source?.push === void 0 ? void 0 : parsePackagePush(source.push));
6124
6024
  }
6125
6025
  var HttpDeveloperPlatformClient = class {
6126
6026
  #baseUrl;
@@ -6287,24 +6187,6 @@ var HttpDeveloperPlatformClient = class {
6287
6187
  const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/packages/${encodeURIComponent(request.version)}/product-reviews`, "POST", { json: { reviews: request.reviews } }), "response");
6288
6188
  return { reviewIds: selectedReviewIds(source.reviewIds) };
6289
6189
  }
6290
- async createProductRelease(request) {
6291
- const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/product-releases`, "POST", { json: request.release }), "response");
6292
- return parseProductRelease(source.release);
6293
- }
6294
- async getProductRelease(request) {
6295
- const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/product-releases/${encodeURIComponent(request.releaseId)}`, "GET"), "response");
6296
- const release = parseProductRelease(source.release);
6297
- if (release.releaseId !== request.releaseId) throw invalid3("\u53D1\u5E03\u56DE\u6267 ID \u4E0D\u5339\u914D");
6298
- return release;
6299
- }
6300
- async retryProductRelease(request) {
6301
- const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/product-releases/${encodeURIComponent(request.releaseId)}/retry`, "POST"), "response");
6302
- return parseProductRelease(source.release);
6303
- }
6304
- async cancelProductRelease(request) {
6305
- const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/product-releases/${encodeURIComponent(request.releaseId)}/cancel`, "POST"), "response");
6306
- return parseProductRelease(source.release);
6307
- }
6308
6190
  async getPackageBuild(request) {
6309
6191
  return parseBuild(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/packages/${encodeURIComponent(request.version)}/build`, "GET"));
6310
6192
  }
@@ -6435,7 +6317,6 @@ var HELP = Object.freeze({
6435
6317
  logout: "\u7528\u6CD5: buddy-cli logout",
6436
6318
  push: PRODUCT_HELP.push,
6437
6319
  products: PRODUCT_HELP.products,
6438
- release: PRODUCT_HELP.release,
6439
6320
  status: "\u7528\u6CD5: buddy-cli status [--directory <\u9879\u76EE\u76EE\u5F55>]",
6440
6321
  meta: `\u7528\u6CD5: buddy-cli meta [--directory <\u9879\u76EE\u76EE\u5F55> | --buddy-id <\u642D\u5B50 ID>]
6441
6322
  buddy-cli meta update [--name <\u540D\u79F0>] [--tagline <\u4E00\u53E5\u8BDD\u4ECB\u7ECD>] [--intro <\u5B8C\u6574\u4ECB\u7ECD>] [--avatar <\u56FE\u7247\u6587\u4EF6>] [--directory <\u9879\u76EE\u76EE\u5F55> | --buddy-id <\u642D\u5B50 ID>]
@@ -6619,7 +6500,7 @@ async function runMeta(parsed, io, options, legacyAvatar = false) {
6619
6500
  }
6620
6501
  async function runCloudCommand(command, args, io, options = {}) {
6621
6502
  try {
6622
- if (command === "push" || command === "products" || command === "release") return await runProductLifecycle(command, args, io, options);
6503
+ if (command === "push" || command === "products") return await runProductLifecycle(command, args, io, options);
6623
6504
  const parsed = parse3(args, command);
6624
6505
  if (parsed.help) {
6625
6506
  io.write(HELP[command]);
@@ -6664,7 +6545,7 @@ async function runCloudCommand(command, args, io, options = {}) {
6664
6545
  exitCode: cause instanceof CloudCommandUsageError || cause instanceof BuddyProjectContextError ? 2 : 1
6665
6546
  };
6666
6547
  }
6667
- if (["push", "products", "release"].includes(command)) {
6548
+ if (["push", "products"].includes(command)) {
6668
6549
  io.writeError(`buddy-cli: ${cause instanceof Error ? cause.message : "\u64CD\u4F5C\u672A\u5B8C\u6210\uFF0C\u8BF7\u6309\u8F93\u51FA\u7F16\u53F7\u67E5\u8BE2\u6216\u6062\u590D"}`);
6669
6550
  return { exitCode: 1 };
6670
6551
  }
@@ -8788,7 +8669,7 @@ async function runBuddyCli(args, io, options = {}) {
8788
8669
  ...options.dev
8789
8670
  });
8790
8671
  }
8791
- if (command === "login" || command === "logout" || command === "push" || command === "products" || command === "release" || command === "status" || command === "meta" || command === "avatar") {
8672
+ if (command === "login" || command === "logout" || command === "push" || command === "products" || command === "status" || command === "meta" || command === "avatar") {
8792
8673
  return await runCloudCommand(command, rest, io, {
8793
8674
  cwd: options.cwd,
8794
8675
  runtimeUpdate: options.runtimeCatalog,