@my-life-buddies/cli 0.26.3 → 0.27.0

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
@@ -95,19 +95,36 @@ import { lstat, mkdir, mkdtemp, readFile as readFile2, rename, rm, writeFile } f
95
95
  import { homedir } from "node:os";
96
96
  import { join } from "node:path";
97
97
  import { promisify } from "node:util";
98
- var RUNTIME_REGISTRY = "https://registry.npmjs.org/";
99
- var execute = promisify(execFile);
100
- async function latestRuntimeVersion(options = {}) {
98
+
99
+ // packages/cli-core/src/npm-registry.ts
100
+ var REGISTRY = "https://registry.npmjs.org/";
101
+ async function npmPackageManifest(name, selector, options = {}) {
101
102
  options.signal?.throwIfAborted();
102
- const timeout = AbortSignal.timeout(1e4);
103
+ const timeout = AbortSignal.timeout(options.timeoutMs ?? 1e4);
103
104
  const signal = options.signal ? AbortSignal.any([options.signal, timeout]) : timeout;
104
- const response = await (options.fetch ?? globalThis.fetch)(`${RUNTIME_REGISTRY}${encodeURIComponent(BUDDY_RUNTIME_PACKAGE)}/latest`, {
105
+ const response = await (options.fetch ?? globalThis.fetch)(`${REGISTRY}${encodeURIComponent(name)}`, {
105
106
  signal,
106
107
  headers: { Accept: "application/json" },
107
108
  redirect: "error"
108
109
  });
109
- if (!response.ok) throw new Error(`npm \u8FD4\u56DE HTTP ${response.status}`);
110
- const metadata = await response.json();
110
+ if (!response.ok) throw new Error(`npm HTTP ${response.status}`);
111
+ const text2 = await response.text();
112
+ if (text2.length > 8 * 1024 * 1024) throw new Error("npm \u5143\u6570\u636E\u8FC7\u5927");
113
+ const metadata = JSON.parse(text2);
114
+ if (metadata?.name !== name) throw new Error("npm \u8FD4\u56DE\u7684\u5305\u540D\u4E0D\u5339\u914D");
115
+ const version = Object.hasOwn(metadata["dist-tags"] ?? {}, selector) ? metadata["dist-tags"][selector] : selector;
116
+ const manifest = typeof version === "string" && Object.hasOwn(metadata.versions ?? {}, version) ? metadata.versions[version] : void 0;
117
+ if (!manifest || manifest.name !== name || manifest.version !== version) {
118
+ throw new Error(`npm ${selector} \u672A\u8FD4\u56DE\u6B64\u5305\u7684\u51C6\u786E\u7248\u672C`);
119
+ }
120
+ return manifest;
121
+ }
122
+
123
+ // packages/cli-core/src/config/runtime-package.ts
124
+ var RUNTIME_REGISTRY = "https://registry.npmjs.org/";
125
+ var execute = promisify(execFile);
126
+ async function latestRuntimeVersion(options = {}) {
127
+ const metadata = await npmPackageManifest(BUDDY_RUNTIME_PACKAGE, "latest", options);
111
128
  if (metadata?.name !== BUDDY_RUNTIME_PACKAGE || !isExactRuntimeVersion(metadata.version) || metadata.version.includes("-")) {
112
129
  throw new Error("npm latest \u672A\u8FD4\u56DE\u6B64 Runtime \u7684\u51C6\u786E\u7A33\u5B9A\u7248\u672C");
113
130
  }
@@ -231,7 +248,7 @@ import { lstat as lstat2, mkdir as mkdir2, mkdtemp as mkdtemp2, readFile as read
231
248
  import { homedir as homedir2 } from "node:os";
232
249
  import { isAbsolute, join as join2 } from "node:path";
233
250
  import { promisify as promisify2 } from "node:util";
234
- var REGISTRY = "https://registry.npmjs.org/";
251
+ var REGISTRY2 = "https://registry.npmjs.org/";
235
252
  var execute2 = promisify2(execFile2);
236
253
  var VERSION = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/u;
237
254
  function validSkillLock(value, protocolVersions2 = [1]) {
@@ -303,21 +320,14 @@ async function resolveSkillPackage(definition3, previous, options = {}) {
303
320
  options.signal?.throwIfAborted();
304
321
  const version = options.version ?? pinned?.version ?? "latest";
305
322
  options.report?.(`\u6B63\u5728\u67E5\u8BE2 ${definition3.label} Skill ${version}\u2026`);
306
- let response;
323
+ let pkg;
307
324
  try {
308
- response = await (options.fetch ?? globalThis.fetch)(`${REGISTRY}${encodeURIComponent(definition3.name)}/${version}`, {
309
- headers: { Accept: "application/json" },
310
- redirect: "error",
311
- signal: options.signal ? AbortSignal.any([options.signal, AbortSignal.timeout(15e3)]) : AbortSignal.timeout(15e3)
312
- });
313
- } catch {
325
+ pkg = await npmPackageManifest(definition3.name, version, { ...options, timeoutMs: 15e3 });
326
+ } catch (cause) {
314
327
  options.signal?.throwIfAborted();
315
- 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`);
328
+ 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`);
316
329
  }
317
- 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`);
318
- const text2 = await response.text();
319
- if (text2.length > 512 * 1024) throw new Error(`${definition3.label} npm \u5143\u6570\u636E\u8FC7\u5927\u3002`);
320
- const pkg = JSON.parse(text2);
330
+ if (JSON.stringify(pkg).length > 512 * 1024) throw new Error(`${definition3.label} npm \u5143\u6570\u636E\u8FC7\u5927\u3002`);
321
331
  checkProtocol(definition3, pkg);
322
332
  if (version !== "latest" && pkg.version !== version) throw new Error(`npm \u8FD4\u56DE\u4E86\u4E0D\u540C\u7684 ${definition3.label} \u7248\u672C\u3002`);
323
333
  const lock = { source: "npm", version: pkg.version, integrity: pkg.dist?.integrity, protocolVersion: pkg.buddySkill.protocolVersion };
@@ -331,7 +341,7 @@ async function resolveSkillPackage(definition3, previous, options = {}) {
331
341
  try {
332
342
  await writeFile2(join2(temporary, "package.json"), JSON.stringify({ name: "buddy-skill-cache", private: true, dependencies: { [definition3.name]: lock.version } }));
333
343
  const config = join2(temporary, ".npmrc");
334
- await writeFile2(config, `registry=${REGISTRY}
344
+ await writeFile2(config, `registry=${REGISTRY2}
335
345
  `);
336
346
  options.report?.(`\u6B63\u5728\u4E0B\u8F7D ${definition3.label} Skill ${lock.version}\u2026`);
337
347
  const run = options.runNpm ?? ((args, settings) => execute2("npm", args, { ...settings, encoding: "utf8", maxBuffer: 2 * 1024 * 1024 }));
@@ -343,8 +353,8 @@ async function resolveSkillPackage(definition3, previous, options = {}) {
343
353
  "--omit=dev",
344
354
  "--no-audit",
345
355
  "--no-fund",
346
- `--registry=${REGISTRY}`,
347
- ...definition3.name.startsWith("@") ? [`--${definition3.name.split("/")[0]}:registry=${REGISTRY}`] : [],
356
+ `--registry=${REGISTRY2}`,
357
+ ...definition3.name.startsWith("@") ? [`--${definition3.name.split("/")[0]}:registry=${REGISTRY2}`] : [],
348
358
  `--userconfig=${config}`,
349
359
  "--fetch-retries=0",
350
360
  "--fetch-timeout=20000"
@@ -2535,7 +2545,7 @@ ${DEVELOPMENT_HANDOFF_SUMMARY}
2535
2545
 
2536
2546
  \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
2537
2547
 
2538
- \u9700\u8981\u91CD\u65B0\u6253\u5F00\u65F6\uFF0C\u4F7F\u7528 \`buddy-cli 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 preview --local\` \u5907\u7528\u5165\u53E3\uFF0C\u5E76\u660E\u786E\u8BF4\u660E\u5907\u7528\u539F\u56E0\u3002
2548
+ \u9700\u8981\u91CD\u65B0\u6253\u5F00\u65F6\uFF0C\u4F7F\u7528 \`buddy-cli 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
2539
2549
 
2540
2550
  \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`;
2541
2551
 
@@ -8850,6 +8860,7 @@ export {
8850
8860
  isWindowsReservedPathSegment,
8851
8861
  latestRuntimeTemplate,
8852
8862
  normalizePlatformUrl,
8863
+ npmPackageManifest,
8853
8864
  openExternalUrl,
8854
8865
  parseBuddyAgentConfig,
8855
8866
  parseBuddyProjectManifest,