@my-life-buddies/cli 0.27.1-dev.2 → 0.28.0-dev.1

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/dist/bin/core.js CHANGED
@@ -24,28 +24,40 @@ function runtimeUsesEnvironmentIdentity(pkg) {
24
24
  return major > 0 || minor >= 16;
25
25
  }
26
26
 
27
+ // packages/cli-core/src/npm-registry.ts
28
+ var REGISTRY = "https://registry.npmjs.org/";
29
+ async function npmPackageManifest(name, selector, options = {}) {
30
+ options.signal?.throwIfAborted();
31
+ const timeout = AbortSignal.timeout(options.timeoutMs ?? 1e4);
32
+ const signal = options.signal ? AbortSignal.any([options.signal, timeout]) : timeout;
33
+ const response = await (options.fetch ?? globalThis.fetch)(`${REGISTRY}${encodeURIComponent(name)}`, {
34
+ signal,
35
+ headers: { Accept: "application/json" },
36
+ redirect: "error"
37
+ });
38
+ if (!response.ok) throw new Error(`npm HTTP ${response.status}`);
39
+ const text2 = await response.text();
40
+ if (text2.length > 8 * 1024 * 1024) throw new Error("npm \u5143\u6570\u636E\u8FC7\u5927");
41
+ const metadata = JSON.parse(text2);
42
+ if (metadata?.name !== name) throw new Error("npm \u8FD4\u56DE\u7684\u5305\u540D\u4E0D\u5339\u914D");
43
+ const version = Object.hasOwn(metadata["dist-tags"] ?? {}, selector) ? metadata["dist-tags"][selector] : selector;
44
+ const manifest = typeof version === "string" && Object.hasOwn(metadata.versions ?? {}, version) ? metadata.versions[version] : void 0;
45
+ if (!manifest || manifest.name !== name || manifest.version !== version) {
46
+ throw new Error(`npm ${selector} \u672A\u8FD4\u56DE\u6B64\u5305\u7684\u51C6\u786E\u7248\u672C`);
47
+ }
48
+ return manifest;
49
+ }
50
+
27
51
  // packages/cli-core/src/config/runtime-package.ts
28
52
  var RUNTIME_REGISTRY = "https://registry.npmjs.org/";
29
53
  var execute = promisify(execFile);
30
54
  async function latestRuntimeVersion(options = {}) {
31
- const metadata = await runtimeMetadata("/dev", options);
55
+ const metadata = await npmPackageManifest(BUDDY_RUNTIME_PACKAGE, "dev", options);
32
56
  if (metadata?.name !== BUDDY_RUNTIME_PACKAGE || !isExactRuntimeVersion(metadata.version)) {
33
57
  throw new Error("npm dev \u672A\u8FD4\u56DE\u6B64 Runtime \u7684\u51C6\u786E\u7248\u672C");
34
58
  }
35
59
  return metadata.version;
36
60
  }
37
- async function runtimeMetadata(suffix, options) {
38
- options.signal?.throwIfAborted();
39
- const timeout = AbortSignal.timeout(1e4);
40
- const signal = options.signal ? AbortSignal.any([options.signal, timeout]) : timeout;
41
- const response = await (options.fetch ?? globalThis.fetch)(`${RUNTIME_REGISTRY}${encodeURIComponent(BUDDY_RUNTIME_PACKAGE)}${suffix}`, {
42
- signal,
43
- headers: { Accept: "application/json" },
44
- redirect: "error"
45
- });
46
- if (!response.ok) throw new Error(`npm \u8FD4\u56DE HTTP ${response.status}`);
47
- return response.json();
48
- }
49
61
  async function cachedRuntimeRoot(version, options = {}) {
50
62
  if (!isExactRuntimeVersion(version)) throw new Error("Runtime \u7F13\u5B58\u9700\u8981\u51C6\u786E\u7248\u672C");
51
63
  const cache = options.cacheDirectory ?? join(homedir(), ".cache", "buddy-cli-sit", "runtimes");
@@ -229,7 +241,7 @@ import { lstat as lstat2, mkdir as mkdir2, mkdtemp as mkdtemp2, readFile as read
229
241
  import { homedir as homedir2 } from "node:os";
230
242
  import { isAbsolute, join as join2 } from "node:path";
231
243
  import { promisify as promisify2 } from "node:util";
232
- var REGISTRY = "https://registry.npmjs.org/";
244
+ var REGISTRY2 = "https://registry.npmjs.org/";
233
245
  var execute2 = promisify2(execFile2);
234
246
  var VERSION = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/u;
235
247
  function validSkillLock(value, protocolVersions2 = [1]) {
@@ -301,21 +313,14 @@ async function resolveSkillPackage(definition3, previous, options = {}) {
301
313
  options.signal?.throwIfAborted();
302
314
  const version = options.version ?? pinned?.version ?? "latest";
303
315
  options.report?.(`\u6B63\u5728\u67E5\u8BE2 ${definition3.label} Skill ${version}\u2026`);
304
- let response;
316
+ let pkg;
305
317
  try {
306
- response = await (options.fetch ?? globalThis.fetch)(`${REGISTRY}${encodeURIComponent(definition3.name)}/${version}`, {
307
- headers: { Accept: "application/json" },
308
- redirect: "error",
309
- signal: options.signal ? AbortSignal.any([options.signal, AbortSignal.timeout(15e3)]) : AbortSignal.timeout(15e3)
310
- });
311
- } catch {
318
+ pkg = await npmPackageManifest(definition3.name, version, { ...options, timeoutMs: 15e3 });
319
+ } catch (cause) {
312
320
  options.signal?.throwIfAborted();
313
- throw new Error(`\u65E0\u6CD5\u67E5\u8BE2 ${definition3.label} Skill ${version}\uFF0C\u8BF7\u68C0\u67E5 npm \u7F51\u7EDC\u540E\u91CD\u8BD5\uFF1B\u672A\u4F7F\u7528\u65E7\u7248\u672C\uFF0C\u5DF2\u6709\u4F5C\u54C1\u4F1A\u4FDD\u7559\u3002`);
321
+ throw new Error(`\u65E0\u6CD5\u67E5\u8BE2 ${definition3.label} Skill ${version}\uFF08${cause instanceof Error ? cause.message : "npm \u8BF7\u6C42\u5931\u8D25"}\uFF09\uFF0C\u8BF7\u68C0\u67E5 npm \u7F51\u7EDC\u540E\u91CD\u8BD5\uFF1B\u672A\u4F7F\u7528\u65E7\u7248\u672C\uFF0C\u5DF2\u6709\u4F5C\u54C1\u4F1A\u4FDD\u7559\u3002`);
314
322
  }
315
- if (!response.ok) throw new Error(`\u65E0\u6CD5\u83B7\u53D6 ${definition3.label} Skill\uFF08npm HTTP ${response.status}\uFF09\u3002\u8BF7\u68C0\u67E5\u7F51\u7EDC\u540E\u91CD\u8BD5\uFF0C\u5DF2\u6709\u4F5C\u54C1\u4F1A\u4FDD\u7559\u3002`);
316
- const text2 = await response.text();
317
- if (text2.length > 512 * 1024) throw new Error(`${definition3.label} npm \u5143\u6570\u636E\u8FC7\u5927\u3002`);
318
- const pkg = JSON.parse(text2);
323
+ if (JSON.stringify(pkg).length > 512 * 1024) throw new Error(`${definition3.label} npm \u5143\u6570\u636E\u8FC7\u5927\u3002`);
319
324
  checkProtocol(definition3, pkg);
320
325
  if (version !== "latest" && pkg.version !== version) throw new Error(`npm \u8FD4\u56DE\u4E86\u4E0D\u540C\u7684 ${definition3.label} \u7248\u672C\u3002`);
321
326
  const lock = { source: "npm", version: pkg.version, integrity: pkg.dist?.integrity, protocolVersion: pkg.buddySkill.protocolVersion };
@@ -329,7 +334,7 @@ async function resolveSkillPackage(definition3, previous, options = {}) {
329
334
  try {
330
335
  await writeFile2(join2(temporary, "package.json"), JSON.stringify({ name: "buddy-skill-cache", private: true, dependencies: { [definition3.name]: lock.version } }));
331
336
  const config = join2(temporary, ".npmrc");
332
- await writeFile2(config, `registry=${REGISTRY}
337
+ await writeFile2(config, `registry=${REGISTRY2}
333
338
  `);
334
339
  options.report?.(`\u6B63\u5728\u4E0B\u8F7D ${definition3.label} Skill ${lock.version}\u2026`);
335
340
  const run = options.runNpm ?? ((args, settings) => execute2("npm", args, { ...settings, encoding: "utf8", maxBuffer: 2 * 1024 * 1024 }));
@@ -341,8 +346,8 @@ async function resolveSkillPackage(definition3, previous, options = {}) {
341
346
  "--omit=dev",
342
347
  "--no-audit",
343
348
  "--no-fund",
344
- `--registry=${REGISTRY}`,
345
- ...definition3.name.startsWith("@") ? [`--${definition3.name.split("/")[0]}:registry=${REGISTRY}`] : [],
349
+ `--registry=${REGISTRY2}`,
350
+ ...definition3.name.startsWith("@") ? [`--${definition3.name.split("/")[0]}:registry=${REGISTRY2}`] : [],
346
351
  `--userconfig=${config}`,
347
352
  "--fetch-retries=0",
348
353
  "--fetch-timeout=20000"
@@ -2546,7 +2551,7 @@ ${DEVELOPMENT_HANDOFF_SUMMARY}
2546
2551
 
2547
2552
  \u5F00\u53D1\u8005\u660E\u786E\u8981\u6C42\u81EA\u52A8\u4F53\u9A8C\u6216\u591A\u573A\u666F\u56DE\u5F52\u65F6\uFF0C\u6309\u6307\u5B9A\u8303\u56F4\u6267\u884C\uFF0C\u62A5\u544A\u7ED3\u679C\uFF0C\u4E0D\u628A\u6D4B\u8BD5\u6388\u6743\u6269\u5927\u4E3A\u6539\u9700\u6C42\u6216\u63D0\u5BA1\u6388\u6743\u3002push\u3001\u53D1\u5E03\u548C\u6536\u8D39\u64CD\u4F5C\u4E0D\u5C5E\u4E8E\u9ED8\u8BA4\u4EA4\u63A5\uFF0C\u9700\u8981\u53E6\u884C\u660E\u786E\u6388\u6743\u3002
2548
2553
 
2549
- \u9700\u8981\u91CD\u65B0\u6253\u5F00\u65F6\uFF0C\u4F7F\u7528 \`buddy-cli-sit preview\`\uFF0C\u6216\u4ECE\u540E\u53F0\u300C\u83B7\u53D6\u8FDE\u63A5\u6307\u4EE4\u300D\u53D6\u5F97\u5E26\u642D\u5B50 ID \u548C\u73AF\u5883\u7684\u5B8C\u6574\u547D\u4EE4\uFF0C\u5728\u6B63\u786E\u5DE5\u7A0B\u76EE\u5F55\u6267\u884C\u3002\u540E\u53F0\u590D\u5236\u7684\u547D\u4EE4\u5E26 \`--no-open\`\uFF0C\u6267\u884C\u540E\u8FD4\u56DE\u539F\u8C03\u8BD5\u9875\uFF0C\u4E0D\u91CD\u590D\u6253\u5F00\u7F51\u9875\uFF1B\u9875\u9762\u5DF2\u5173\u95ED\u65F6\u6253\u5F00\u7EC8\u7AEF\u6253\u5370\u7684\u5730\u5740\u3002\u540E\u53F0\u663E\u793A\u300C\u672A\u8FDE\u63A5\u672C\u5730\u5DE5\u7A0B\u300D\u300C\u5DF2\u8FDE\u63A5\u4F46 DEV \u672A\u542F\u52A8\u300D\u300CDEV \u8FD0\u884C\u4E2D\u300D\u3002\u5237\u65B0\u4E0D\u4F1A\u542F\u52A8 DEV\uFF1BCLI \u9000\u51FA\u4F1A\u505C\u6B62 DEV\u3002\u53EA\u6709\u540E\u53F0\u4E0D\u53EF\u7528\u65F6\u4F7F\u7528 \`buddy-cli-sit preview --local\` \u5907\u7528\u5165\u53E3\uFF0C\u5E76\u660E\u786E\u8BF4\u660E\u5907\u7528\u539F\u56E0\u3002
2554
+ \u9700\u8981\u91CD\u65B0\u6253\u5F00\u65F6\uFF0C\u4F7F\u7528 \`buddy-cli-sit preview\`\uFF0C\u6216\u4ECE\u540E\u53F0\u300C\u83B7\u53D6\u8FDE\u63A5\u6307\u4EE4\u300D\u53D6\u5F97\u5E26\u642D\u5B50 ID \u548C\u73AF\u5883\u7684\u5B8C\u6574\u547D\u4EE4\uFF0C\u5728\u6B63\u786E\u5DE5\u7A0B\u76EE\u5F55\u6267\u884C\u3002\u540E\u53F0\u590D\u5236\u7684\u547D\u4EE4\u5E26 \`--no-open\`\uFF0C\u6267\u884C\u540E\u8FD4\u56DE\u539F\u8C03\u8BD5\u9875\uFF0C\u4E0D\u91CD\u590D\u6253\u5F00\u7F51\u9875\uFF1B\u9875\u9762\u5DF2\u5173\u95ED\u65F6\u6253\u5F00\u7EC8\u7AEF\u6253\u5370\u7684\u5730\u5740\u3002\u540E\u53F0\u663E\u793A\u300C\u672A\u8FDE\u63A5\u672C\u5730\u5DE5\u7A0B\u300D\u300C\u5DF2\u8FDE\u63A5\u4F46 DEV \u672A\u542F\u52A8\u300D\u300CDEV \u8FD0\u884C\u4E2D\u300D\u3002\u5237\u65B0\u4E0D\u4F1A\u542F\u52A8 DEV\uFF1BCLI \u9000\u51FA\u4F1A\u505C\u6B62 DEV\u3002\u8C03\u8BD5\u9875\u9762\u7EDF\u4E00\u7531\u540E\u53F0\u63D0\u4F9B\uFF0C\u4E0D\u518D\u652F\u6301\u72EC\u7ACB\u672C\u5730\u7F51\u9875\uFF1B\u540E\u53F0\u4E0D\u53EF\u7528\u65F6\u4FDD\u7559\u5DE5\u7A0B\u4E0E\u73B0\u6709\u8FDE\u63A5\u4FE1\u606F\uFF0C\u4F7F\u7528\u7EC8\u7AEF DEV \u548C\u65E5\u5FD7\u6392\u67E5\u3002
2550
2555
 
2551
2556
  \u7528\u6237\u660E\u786E\u53EA\u505A\u8BBE\u8BA1\u3001\u521D\u59CB\u5316\u3001\u4EE3\u7801\u4FEE\u6539\u6216\u8981\u6C42\u6682\u505C\u65F6\uFF0C\u4EE5\u8BE5\u8303\u56F4\u4E3A\u51C6\uFF0C\u4E0D\u5F3A\u5236\u542F\u52A8\u9884\u89C8\u3002`;
2552
2557
 
@@ -3380,7 +3385,6 @@ var CLI_HELP = `\u642D\u642D Developer Platform CLI
3380
3385
  preview \u8FDE\u63A5\u5DE5\u7A0B\u5E76\u6253\u5F00\u540E\u53F0\u5F00\u53D1\u8C03\u8BD5
3381
3386
  push \u4E0A\u4F20\u7A0B\u5E8F\u5305\uFF0C\u53EF\u7528 --product \u540C\u6B65\u63D0\u4EA4\u5546\u54C1\u5BA1\u6838
3382
3387
  products \u4E3A\u5DF2\u6709\u7248\u672C\u8865\u63D0\u5546\u54C1\uFF0C\u6216\u6062\u590D\u539F\u63D0\u5BA1\u8BF7\u6C42
3383
- release \u4ECE\u660E\u786E\u56DE\u6267\u53D1\u5E03\uFF0C\u67E5\u8BE2\u3001\u6062\u590D\u3001\u91CD\u8BD5\u6216\u53D6\u6D88\u53D1\u5E03
3384
3388
  status \u67E5\u770B\u4E91\u7AEF\u7248\u672C\u3001\u8FD0\u884C\u3001\u5BA1\u6838\u548C\u6784\u5EFA\u72B6\u6001
3385
3389
  meta \u67E5\u770B\u4E91\u7AEF\u8D44\u6599\uFF1Bmeta update \u4FEE\u6539\u8D44\u6599\u6216\u66FF\u6362\u5934\u50CF
3386
3390
  avatar \u65E7\u5934\u50CF\u547D\u4EE4\u517C\u5BB9\u5165\u53E3\uFF0C\u63A8\u8350 meta update --avatar
@@ -5393,21 +5397,12 @@ function parsePackagePush(value) {
5393
5397
  if (operationId(p.pushId) !== metadata.pushId) invalid2("\u4E0A\u4F20\u56DE\u6267 ID \u4E0E\u5143\u6570\u636E\u4E0D\u5339\u914D");
5394
5398
  return { pushId: metadata.pushId, uploadVersion: p.uploadVersion, status: p.status, metadata, reviewIds: selectedReviewIds(p.reviewIds), failure: p.failure ?? null };
5395
5399
  }
5396
- function parseProductRelease(value) {
5397
- const r = record(value);
5398
- if (r.mode !== "with_buddy" && r.mode !== "products_only") invalid2("\u53D1\u5E03\u6A21\u5F0F\u65E0\u6548");
5399
- if (!["accepted", "activating", "active", "failed", "cancelled"].includes(String(r.status))) invalid2("\u53D1\u5E03\u64CD\u4F5C\u72B6\u6001\u65E0\u6548");
5400
- if (typeof r.buddyVersion !== "string" || !r.buddyVersion.trim() || /[\u0000-\u001f\u007f]/u.test(r.buddyVersion)) invalid2("\u53D1\u5E03\u7248\u672C\u65E0\u6548");
5401
- 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 } };
5402
- }
5403
5400
  var CloudOperationError = class extends CloudLifecycleError {
5404
- constructor(code2, message, details, push, release) {
5401
+ constructor(code2, message, details, push) {
5405
5402
  super(code2, message, details);
5406
5403
  this.push = push;
5407
- this.release = release;
5408
5404
  }
5409
5405
  push;
5410
- release;
5411
5406
  };
5412
5407
  function sameReviewIds(a, b) {
5413
5408
  return [...a].sort().join("\0") === [...b].sort().join("\0");
@@ -5445,7 +5440,7 @@ var OperationStore = class {
5445
5440
  }
5446
5441
  async save(record3) {
5447
5442
  const prior = await this.read(record3.id, record3.kind);
5448
- const input = (r) => r.kind === "push" ? r.metadata : r.kind === "release" ? r.request : { version: r.version, reviews: r.reviews };
5443
+ const input = (r) => r.kind === "push" ? r.metadata : { version: r.version, reviews: r.reviews };
5449
5444
  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");
5450
5445
  const temporary = this.path(`${record3.id}_${randomUUID8()}`);
5451
5446
  await writeFile8(temporary, JSON.stringify({ identity: this.identity, operation: record3 }), { flag: "wx", mode: 384 });
@@ -5461,11 +5456,6 @@ var OperationStore = class {
5461
5456
  if (r.metadata.pushId !== id) throw new Error("push mismatch");
5462
5457
  if (r.receipt) parsePackagePush(r.receipt);
5463
5458
  }
5464
- if (r.kind === "release") {
5465
- parseProductRelease({ ...r.request, status: "accepted" });
5466
- if (r.request.releaseId !== id) throw new Error("release mismatch");
5467
- if (r.receipt) parseProductRelease(r.receipt);
5468
- }
5469
5459
  if (r.kind === "submission") {
5470
5460
  if (typeof r.version !== "string" || !r.version.trim() || typeof r.confirmed !== "boolean" || r.reviews.length === 0) throw new Error("submission invalid");
5471
5461
  parsePushMetadata({ pushId: id, commit: "validate", sourceSha256: "0".repeat(64), productReviews: r.reviews });
@@ -5490,7 +5480,7 @@ var OperationStore = class {
5490
5480
  var PRODUCT_HELP = {
5491
5481
  push: `\u7528\u6CD5: buddy-cli-sit push --commit <\u6539\u52A8\u8BF4\u660E> [--product <\u5546\u54C1 ID> ...] [--directory <\u76EE\u5F55>]
5492
5482
  buddy-cli-sit push --resume <pushId> | --status <pushId> [--directory <\u76EE\u5F55>]
5493
- \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
5483
+ \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
5494
5484
  \u5546\u54C1 ID \u793A\u4F8B\uFF1Aprd_12345678\uFF1B\u5DF2\u6709 ps_ \u5546\u54C1 ID \u7EE7\u7EED\u517C\u5BB9\u3002
5495
5485
  \u9996\u6B21\u4E0A\u4F20\u5FC5\u987B\u5B89\u88C5 npm dev \u6700\u65B0 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
5496
5486
  \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`,
@@ -5498,13 +5488,7 @@ var PRODUCT_HELP = {
5498
5488
  buddy-cli-sit products submit --resume <submissionId> [--directory <\u76EE\u5F55>]
5499
5489
  \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
5500
5490
  \u5546\u54C1 ID \u793A\u4F8B\uFF1Aprd_12345678\uFF1B\u5DF2\u6709 ps_ \u5546\u54C1 ID \u7EE7\u7EED\u517C\u5BB9\u3002
5501
- \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`,
5502
- release: `\u7528\u6CD5: buddy-cli-sit release (--from-push <pushId> | --from-submission <submissionId>) [--products-only] [--directory <\u76EE\u5F55>]
5503
- buddy-cli-sit release --version <\u7248\u672C> --code-only [--directory <\u76EE\u5F55>]
5504
- buddy-cli-sit release (--resume | --status | --retry | --cancel) <releaseId> [--directory <\u76EE\u5F55>]
5505
- \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
5506
- \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
5507
- \u4EC5 active \u8868\u793A\u5DF2\u751F\u6548\uFF1Baccepted/activating \u8BF7\u7528 --status \u67E5\u8BE2\u3002`
5491
+ \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`
5508
5492
  };
5509
5493
  function parse2(command, args) {
5510
5494
  if (command === "products") {
@@ -5513,15 +5497,11 @@ function parse2(command, args) {
5513
5497
  }
5514
5498
  const values = /* @__PURE__ */ new Map();
5515
5499
  const products = [];
5516
- 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"];
5500
+ const allowed = command === "push" ? ["--commit", "--resume", "--status", "--product"] : ["--version", "--resume", "--product"];
5517
5501
  for (let i = 0; i < args.length; i++) {
5518
5502
  const flag2 = args[i];
5519
5503
  if (flag2 !== "--directory" && !allowed.includes(flag2)) throw new CloudCommandUsageError(`\u672A\u77E5\u53C2\u6570 ${flag2}`);
5520
5504
  if (flag2 !== "--product" && values.has(flag2)) throw new CloudCommandUsageError(`${flag2} \u4E0D\u80FD\u91CD\u590D`);
5521
- if (["--code-only", "--products-only"].includes(flag2)) {
5522
- values.set(flag2, "true");
5523
- continue;
5524
- }
5525
5505
  const value = args[++i];
5526
5506
  if (!value?.trim() || value.startsWith("--") || /[\u0000-\u001f\u007f]/u.test(value)) throw new CloudCommandUsageError(`${flag2} \u7F3A\u5C11\u6709\u6548\u503C`);
5527
5507
  if (flag2 === "--product") {
@@ -5530,12 +5510,12 @@ function parse2(command, args) {
5530
5510
  } else values.set(flag2, value.trim());
5531
5511
  }
5532
5512
  if (products.length > 10) throw new CloudCommandUsageError("\u4E00\u6B21\u6700\u591A\u9009\u62E9 10 \u4E2A\u5546\u54C1");
5533
- const recovery = ["--resume", "--status", "--retry", "--cancel"].filter((f) => values.has(f));
5513
+ const recovery = ["--resume", "--status"].filter((f) => values.has(f));
5534
5514
  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");
5535
5515
  return { values, products };
5536
5516
  }
5537
5517
  function required(value) {
5538
- 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");
5518
+ 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");
5539
5519
  return value;
5540
5520
  }
5541
5521
  function responseError(message) {
@@ -5571,10 +5551,10 @@ function showPush(io, push) {
5571
5551
  if (failureMessage(push.failure)) io.writeError(`\u539F\u56E0\uFF1A${failureMessage(push.failure)}`);
5572
5552
  if (push.reviewIds.length) io.write(`\u5546\u54C1\u5BA1\u6838\u7F16\u53F7\uFF1A${push.reviewIds.join(", ")}`);
5573
5553
  if (push.status === "completed") {
5574
- 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-sit release --from-push ${push.pushId}\u3002`);
5554
+ 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");
5575
5555
  return 0;
5576
5556
  }
5577
- 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`);
5557
+ 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-sit 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`);
5578
5558
  else io.writeError(`\u4E0A\u4F20\u672A\u5B8C\u6210\uFF0C\u4F7F\u7528 buddy-cli-sit push --resume ${push.pushId} \u6062\u590D\u539F\u8BF7\u6C42\u3002`);
5579
5559
  return 1;
5580
5560
  }
@@ -5614,23 +5594,6 @@ async function executePush(record3, sourceBundle, store, client, id, io, options
5614
5594
  throw cause;
5615
5595
  }
5616
5596
  }
5617
- function matchRelease(request, release) {
5618
- 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");
5619
- }
5620
- function showRelease(io, release) {
5621
- io.write(`\u53D1\u5E03\u7F16\u53F7\uFF1A${release.releaseId}`);
5622
- io.write(`\u53D1\u5E03\u72B6\u6001\uFF1A${release.status}`);
5623
- io.write(`\u76EE\u6807\u7248\u672C\uFF1A${release.buddyVersion}`);
5624
- if (failureMessage(release.failure)) io.writeError(`\u539F\u56E0\uFF1A${failureMessage(release.failure)}`);
5625
- if (release.status === "active") {
5626
- io.write("\u53D1\u5E03\u5DF2\u751F\u6548\u3002");
5627
- return 0;
5628
- }
5629
- if (release.status === "failed") io.writeError(`\u53D1\u5E03\u672A\u751F\u6548\u3002\u4FEE\u6B63\u539F\u56E0\u540E buddy-cli-sit release --retry ${release.releaseId}\uFF1B\u653E\u5F03\u5219 --cancel ${release.releaseId}\u3002`);
5630
- else if (release.status === "cancelled") io.write("\u8BE5\u53D1\u5E03\u5DF2\u53D6\u6D88\u3002");
5631
- else io.write(`\u53D1\u5E03\u4ECD\u5728\u5904\u7406\uFF0C\u8BF7\u8FD0\u884C buddy-cli-sit release --status ${release.releaseId} \u786E\u8BA4\u662F\u5426\u751F\u6548\u3002`);
5632
- return 1;
5633
- }
5634
5597
  async function runProductLifecycle(command, args, io, options) {
5635
5598
  if (args.length === 1 && ["--help", "-h"].includes(args[0]) || command === "products" && args.length === 2 && args[0] === "submit" && args[1] === "--help") {
5636
5599
  io.write(PRODUCT_HELP[command]);
@@ -5638,7 +5601,7 @@ async function runProductLifecycle(command, args, io, options) {
5638
5601
  }
5639
5602
  const p = parse2(command, args);
5640
5603
  const v = p.values;
5641
- 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");
5604
+ 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");
5642
5605
  const freshPush = command === "push" && !v.has("--resume") && !v.has("--status");
5643
5606
  const root = await (options.resolveProjectRoot ?? (freshPush ? requireBuddyAgentProjectRoot : requireBuddyProjectRoot))(resolve15(options.cwd ?? process.cwd(), v.get("--directory") ?? "."));
5644
5607
  const platform = resolvePlatformUrl({ env: options.runtimeUpdate?.env });
@@ -5679,83 +5642,25 @@ async function runProductLifecycle(command, args, io, options) {
5679
5642
  io.write(`\u6062\u590D\u7F16\u53F7\uFF1A${pushId}`);
5680
5643
  return executePush(record4, bundle, store, client, id, io, options);
5681
5644
  }
5682
- if (command === "products") {
5683
- let record4;
5684
- if (v.has("--resume")) record4 = await store.read(v.get("--resume"), "submission");
5685
- else {
5686
- const version = v.get("--version");
5687
- if (!version || !p.products.length) throw new CloudCommandUsageError(PRODUCT_HELP.products);
5688
- const chosen = await selection(client, id, p.products, io);
5689
- record4 = { kind: "submission", id: `sub_${randomUUID9()}`, version, reviews: chosen.reviews, confirmed: false };
5690
- await store.create(record4);
5691
- }
5692
- io.write(`\u5546\u54C1\u63D0\u4EA4\u7F16\u53F7\uFF1A${record4.id}`);
5693
- try {
5694
- const receipt = await required(client.submitPackageProducts).call(client, { id, version: record4.version, reviews: record4.reviews });
5695
- if (!sameReviewIds(receipt.reviewIds, record4.reviews.map((r) => r.reviewId))) responseError("\u5E73\u53F0\u672A\u786E\u8BA4\u5B8C\u6574\u5546\u54C1\u5BA1\u6838\u96C6\u5408");
5696
- await store.save({ ...record4, confirmed: true });
5697
- io.write(`\u5546\u54C1\u5DF2\u63D0\u4EA4\u5BA1\u6838\uFF1A${receipt.reviewIds.join(", ")}`);
5698
- io.write(`\u5BA1\u6838\u901A\u8FC7\u540E\uFF1Abuddy-cli-sit release --from-submission ${record4.id}`);
5699
- return { exitCode: 0, buddyId: id, version: record4.version };
5700
- } catch (cause) {
5701
- io.writeError(`\u4FDD\u7559\u539F\u8BF7\u6C42\u91CD\u8BD5\uFF1Abuddy-cli-sit products submit --resume ${record4.id}`);
5702
- throw cause;
5703
- }
5704
- }
5705
- const action = ["--resume", "--status", "--retry", "--cancel"].find((f) => v.has(f));
5706
5645
  let record3;
5707
- if (action) {
5708
- const releaseId = v.get(action);
5709
- if (action === "--status") {
5710
- const release = await required(client.getProductRelease).call(client, { id, releaseId });
5711
- if (release.releaseId !== releaseId) responseError("\u53D1\u5E03\u7F16\u53F7\u4E0D\u5339\u914D");
5712
- return { exitCode: showRelease(io, release), buddyId: id, version: release.buddyVersion };
5713
- }
5714
- record3 = await store.read(releaseId, "release");
5715
- } else {
5716
- const sources = ["--from-push", "--from-submission", "--version"].filter((f) => v.has(f));
5717
- 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);
5718
- let version;
5719
- let reviewIds;
5720
- if (v.has("--from-push")) {
5721
- const pushRecord = await store.read(v.get("--from-push"), "push");
5722
- const receipt = await required(client.getPackagePush).call(client, { id, pushId: pushRecord.id });
5723
- confirmPush(pushRecord, receipt);
5724
- await store.save({ ...pushRecord, receipt });
5725
- 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");
5726
- version = receipt.uploadVersion;
5727
- reviewIds = receipt.reviewIds;
5728
- } else if (v.has("--from-submission")) {
5729
- const submission = await store.read(v.get("--from-submission"), "submission");
5730
- if (!submission.confirmed) throw new CloudCommandUsageError(`\u8865\u63D0\u7ED3\u679C\u5C1A\u672A\u786E\u8BA4\uFF0C\u8BF7\u5148 products submit --resume ${submission.id}`);
5731
- version = submission.version;
5732
- reviewIds = submission.reviews.map((r) => r.reviewId);
5733
- } else {
5734
- version = v.get("--version");
5735
- reviewIds = [];
5736
- }
5737
- if (v.has("--products-only")) {
5738
- if (!reviewIds.length) throw new CloudCommandUsageError("--products-only \u9700\u8981\u660E\u786E\u7684\u5546\u54C1\u5BA1\u6838\u96C6\u5408");
5739
- const buddy2 = await client.getBuddy({ id });
5740
- 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");
5741
- }
5742
- const releaseId = `rel_${randomUUID9()}`;
5743
- record3 = { kind: "release", id: releaseId, request: { releaseId, mode: v.has("--products-only") ? "products_only" : "with_buddy", buddyVersion: version, reviewIds } };
5646
+ if (v.has("--resume")) record3 = await store.read(v.get("--resume"), "submission");
5647
+ else {
5648
+ const version = v.get("--version");
5649
+ if (!version || !p.products.length) throw new CloudCommandUsageError(PRODUCT_HELP.products);
5650
+ const chosen = await selection(client, id, p.products, io);
5651
+ record3 = { kind: "submission", id: `sub_${randomUUID9()}`, version, reviews: chosen.reviews, confirmed: false };
5744
5652
  await store.create(record3);
5745
5653
  }
5746
- io.write(`\u6062\u590D\u7F16\u53F7\uFF1A${record3.id}`);
5654
+ io.write(`\u5546\u54C1\u63D0\u4EA4\u7F16\u53F7\uFF1A${record3.id}`);
5747
5655
  try {
5748
- 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 });
5749
- matchRelease(record3.request, receipt);
5750
- await store.save({ ...record3, receipt });
5751
- return { exitCode: showRelease(io, receipt), buddyId: id, version: receipt.buddyVersion };
5656
+ const receipt = await required(client.submitPackageProducts).call(client, { id, version: record3.version, reviews: record3.reviews });
5657
+ if (!sameReviewIds(receipt.reviewIds, record3.reviews.map((r) => r.reviewId))) responseError("\u5E73\u53F0\u672A\u786E\u8BA4\u5B8C\u6574\u5546\u54C1\u5BA1\u6838\u96C6\u5408");
5658
+ await store.save({ ...record3, confirmed: true });
5659
+ io.write(`\u5546\u54C1\u5DF2\u63D0\u4EA4\u5BA1\u6838\uFF1A${receipt.reviewIds.join(", ")}`);
5660
+ io.write("\u5BA1\u6838\u901A\u8FC7\u540E\uFF0C\u8BF7\u5230\u5F00\u53D1\u8005\u540E\u53F0\u786E\u8BA4\u5E76\u53D1\u5E03\u3002");
5661
+ return { exitCode: 0, buddyId: id, version: record3.version };
5752
5662
  } catch (cause) {
5753
- if (cause instanceof CloudOperationError && cause.release) {
5754
- matchRelease(record3.request, cause.release);
5755
- await store.save({ ...record3, receipt: cause.release });
5756
- showRelease(io, cause.release);
5757
- }
5758
- io.writeError(`\u53D1\u5E03\u7ED3\u679C\u9700\u786E\u8BA4\uFF1Abuddy-cli-sit release --status ${record3.id}\uFF1B\u539F\u8BF7\u6C42\u6062\u590D\uFF1Abuddy-cli-sit release --resume ${record3.id}`);
5663
+ io.writeError(`\u4FDD\u7559\u539F\u8BF7\u6C42\u91CD\u8BD5\uFF1Abuddy-cli-sit products submit --resume ${record3.id}`);
5759
5664
  throw cause;
5760
5665
  }
5761
5666
  }
@@ -6077,7 +5982,7 @@ function serverError(response, body) {
6077
5982
  return new CloudOperationError(code2, message, {
6078
5983
  httpStatus: response.status,
6079
5984
  retryable: response.status === 408 || response.status === 429 || response.status >= 500
6080
- }, source?.push === void 0 ? void 0 : parsePackagePush(source.push), source?.release === void 0 ? void 0 : parseProductRelease(source.release));
5985
+ }, source?.push === void 0 ? void 0 : parsePackagePush(source.push));
6081
5986
  }
6082
5987
  var HttpDeveloperPlatformClient = class {
6083
5988
  #baseUrl;
@@ -6244,24 +6149,6 @@ var HttpDeveloperPlatformClient = class {
6244
6149
  const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/packages/${encodeURIComponent(request.version)}/product-reviews`, "POST", { json: { reviews: request.reviews } }), "response");
6245
6150
  return { reviewIds: selectedReviewIds(source.reviewIds) };
6246
6151
  }
6247
- async createProductRelease(request) {
6248
- const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/product-releases`, "POST", { json: request.release }), "response");
6249
- return parseProductRelease(source.release);
6250
- }
6251
- async getProductRelease(request) {
6252
- const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/product-releases/${encodeURIComponent(request.releaseId)}`, "GET"), "response");
6253
- const release = parseProductRelease(source.release);
6254
- if (release.releaseId !== request.releaseId) throw invalid3("\u53D1\u5E03\u56DE\u6267 ID \u4E0D\u5339\u914D");
6255
- return release;
6256
- }
6257
- async retryProductRelease(request) {
6258
- const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/product-releases/${encodeURIComponent(request.releaseId)}/retry`, "POST"), "response");
6259
- return parseProductRelease(source.release);
6260
- }
6261
- async cancelProductRelease(request) {
6262
- const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/product-releases/${encodeURIComponent(request.releaseId)}/cancel`, "POST"), "response");
6263
- return parseProductRelease(source.release);
6264
- }
6265
6152
  async getPackageBuild(request) {
6266
6153
  return parseBuild(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/packages/${encodeURIComponent(request.version)}/build`, "GET"));
6267
6154
  }
@@ -6392,7 +6279,6 @@ var HELP = Object.freeze({
6392
6279
  logout: "\u7528\u6CD5: buddy-cli-sit logout",
6393
6280
  push: PRODUCT_HELP.push,
6394
6281
  products: PRODUCT_HELP.products,
6395
- release: PRODUCT_HELP.release,
6396
6282
  status: "\u7528\u6CD5: buddy-cli-sit status [--directory <\u9879\u76EE\u76EE\u5F55>]",
6397
6283
  meta: `\u7528\u6CD5: buddy-cli-sit meta [--directory <\u9879\u76EE\u76EE\u5F55> | --buddy-id <\u642D\u5B50 ID>]
6398
6284
  buddy-cli-sit 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>]
@@ -6576,7 +6462,7 @@ async function runMeta(parsed, io, options, legacyAvatar = false) {
6576
6462
  }
6577
6463
  async function runCloudCommand(command, args, io, options = {}) {
6578
6464
  try {
6579
- if (command === "push" || command === "products" || command === "release") return await runProductLifecycle(command, args, io, options);
6465
+ if (command === "push" || command === "products") return await runProductLifecycle(command, args, io, options);
6580
6466
  const parsed = parse3(args, command);
6581
6467
  if (parsed.help) {
6582
6468
  io.write(HELP[command]);
@@ -6621,7 +6507,7 @@ async function runCloudCommand(command, args, io, options = {}) {
6621
6507
  exitCode: cause instanceof CloudCommandUsageError || cause instanceof BuddyProjectContextError ? 2 : 1
6622
6508
  };
6623
6509
  }
6624
- if (["push", "products", "release"].includes(command)) {
6510
+ if (["push", "products"].includes(command)) {
6625
6511
  io.writeError(`buddy-cli-sit: ${cause instanceof Error ? cause.message : "\u64CD\u4F5C\u672A\u5B8C\u6210\uFF0C\u8BF7\u6309\u8F93\u51FA\u7F16\u53F7\u67E5\u8BE2\u6216\u6062\u590D"}`);
6626
6512
  return { exitCode: 1 };
6627
6513
  }
@@ -8748,7 +8634,7 @@ async function runBuddyCli(args, io, options = {}) {
8748
8634
  ...options.dev
8749
8635
  });
8750
8636
  }
8751
- if (command === "login" || command === "logout" || command === "push" || command === "products" || command === "release" || command === "status" || command === "meta" || command === "avatar") {
8637
+ if (command === "login" || command === "logout" || command === "push" || command === "products" || command === "status" || command === "meta" || command === "avatar") {
8752
8638
  return await runCloudCommand(command, rest, io, {
8753
8639
  cwd: options.cwd,
8754
8640
  runtimeUpdate: options.runtimeCatalog,
@@ -8933,6 +8819,7 @@ export {
8933
8819
  isWindowsReservedPathSegment,
8934
8820
  latestRuntimeTemplate,
8935
8821
  normalizePlatformUrl,
8822
+ npmPackageManifest,
8936
8823
  openExternalUrl,
8937
8824
  parseBuddyAgentConfig,
8938
8825
  parseBuddyProjectManifest,