@my-life-buddies/cli 0.24.1 → 0.25.0-dev.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/README.md +107 -74
- package/dist/bin/buddy.js +53 -41
- package/dist/bin/buddy.js.map +2 -2
- package/dist/bin/core.js +361 -397
- package/dist/bin/core.js.map +4 -4
- package/dist/bin/preview.js +535 -26
- package/dist/bin/preview.js.map +4 -4
- package/dist/web/app.css +34 -0
- package/dist/web/app.js +32 -9
- package/dist/web/chat-markdown.js +181 -0
- package/dist/web/diagnostics.js +14 -5
- package/dist/web/index.html +27 -0
- package/dist/web/tool-inventory.js +94 -0
- package/package.json +8 -7
package/dist/bin/buddy.js
CHANGED
|
@@ -20,7 +20,7 @@ import { readBuddyProjectManifest } from "./core.js";
|
|
|
20
20
|
|
|
21
21
|
// apps/cli/src/runtime-logs.ts
|
|
22
22
|
import { stripVTControlCharacters } from "node:util";
|
|
23
|
-
var MAX_LOG_LINE =
|
|
23
|
+
var MAX_LOG_LINE = 98304;
|
|
24
24
|
function createRuntimeLogForwarder(onLog, secrets) {
|
|
25
25
|
const streams = /* @__PURE__ */ new Map();
|
|
26
26
|
const emit = (source) => {
|
|
@@ -41,7 +41,7 @@ function createRuntimeLogForwarder(onLog, secrets) {
|
|
|
41
41
|
}
|
|
42
42
|
text = text.replace(/[\u0000-\u0008\u000b-\u001f\u007f]/gu, "").trimEnd();
|
|
43
43
|
if (!text) return;
|
|
44
|
-
text = text.slice(0, MAX_LOG_LINE) + (pending.truncated ? " \u2026[truncated]" : "");
|
|
44
|
+
text = text.slice(0, MAX_LOG_LINE) + (pending.truncated || text.length > MAX_LOG_LINE ? " \u2026[truncated]" : "");
|
|
45
45
|
try {
|
|
46
46
|
onLog({ source, text });
|
|
47
47
|
} catch {
|
|
@@ -68,7 +68,6 @@ function createRuntimeLogForwarder(onLog, secrets) {
|
|
|
68
68
|
// apps/cli/src/platform-host.ts
|
|
69
69
|
import {
|
|
70
70
|
CloudAuthenticator,
|
|
71
|
-
EcsSessionMigrationStore,
|
|
72
71
|
BuddyDevError,
|
|
73
72
|
checkRuntimeUpdate,
|
|
74
73
|
checkProjectGateway,
|
|
@@ -96,26 +95,28 @@ import {
|
|
|
96
95
|
connectPreviewBridge
|
|
97
96
|
} from "./preview.js";
|
|
98
97
|
var PREVIEW_COMMAND_HELP = `\u7528\u6CD5:
|
|
99
|
-
buddy-cli preview [--directory <\u9879\u76EE\u76EE\u5F55>] [--buddy-id <\u642D\u5B50 ID>] [--developer-web <\u540E\u53F0 URL>] [--app-server <App Server URL>] [--no-open]
|
|
100
|
-
buddy-cli preview --local [--directory <\u9879\u76EE\u76EE\u5F55>] [--port <\u672C\u5730\u7AEF\u53E3>]
|
|
98
|
+
buddy-cli-sit preview [--directory <\u9879\u76EE\u76EE\u5F55>] [--buddy-id <\u642D\u5B50 ID>] [--developer-web <\u540E\u53F0 URL>] [--app-server <App Server URL>] [--no-open]
|
|
99
|
+
buddy-cli-sit preview --local [--directory <\u9879\u76EE\u76EE\u5F55>] [--port <\u672C\u5730\u7AEF\u53E3>]
|
|
101
100
|
|
|
102
101
|
\u8BF4\u660E:
|
|
103
102
|
\u9ED8\u8BA4\u6253\u5F00\u5F53\u524D\u642D\u5B50\u7684\u521B\u9020\u8005\u540E\u53F0\u300C\u5F00\u53D1\u8C03\u8BD5\u300D\uFF0C\u8FDE\u63A5\u672C\u5730\u5DE5\u7A0B\uFF1B\u5728\u540E\u53F0\u542F\u52A8/\u505C\u6B62 DEV\u3001\u8BD5\u804A\u3001\u67E5\u770B Widget\u3001\u65F6\u95F4\u7EBF\u4E0E\u534F\u8BAE\u65E5\u5FD7\u3001\u771F\u673A\u9884\u89C8\u3002
|
|
104
103
|
--buddy-id \u6821\u9A8C\u5F53\u524D\u5DE5\u7A0B\u8EAB\u4EFD\uFF1B\u540E\u53F0\u300C\u83B7\u53D6\u8FDE\u63A5\u6307\u4EE4\u300D\u63D0\u4F9B\u642D\u5B50\u548C\u73AF\u5883\u5B8C\u6574\u53C2\u6570\u3002
|
|
105
104
|
\u540E\u53F0\u590D\u5236\u7684\u547D\u4EE4\u5E26 --no-open\uFF0C\u53EA\u8FDE\u63A5\u5DE5\u7A0B\uFF0C\u539F\u8C03\u8BD5\u9875\u81EA\u52A8\u63A5\u5165\uFF0C\u4E0D\u91CD\u590D\u6253\u5F00\u7F51\u9875\uFF1B\u9875\u9762\u5173\u95ED\u540E\u53EF\u6253\u5F00\u7EC8\u7AEF\u4E2D\u7684\u5730\u5740\u3002
|
|
105
|
+
\u8FDE\u63A5\u540E\u5373\u53EF\u67E5\u770B\u5DE5\u7A0B\u6A21\u578B\u548C\u5DE5\u5177\u5217\u8868\uFF0C\u65E0\u9700\u53D1\u9001\u6D88\u606F\uFF1BCLI \u53EA\u8BFB\u73B0\u6709\u6E90\u4EE3\u7801\uFF0C\u52A8\u6001\u914D\u7F6E\u6807\u6CE8\u5F85\u786E\u8BA4\uFF0C\u4FDD\u5B58\u540E\u81EA\u52A8\u5237\u65B0\u3002
|
|
106
|
+
\u4E0D\u6267\u884C\u4E1A\u52A1\u5DE5\u5382\u6765\u63A2\u6D4B\u914D\u7F6E\uFF0C\u4E0D\u65B0\u589E\u5DE5\u7A0B\u914D\u7F6E\u6587\u4EF6\uFF0C\u4E5F\u4E0D\u8981\u6C42\u4E3A\u6B64\u5347\u7EA7 Runtime\u3002\u6BCF\u6B21\u8C03\u7528\u7684\u5B9E\u9645\u6A21\u578B\u4E0E\u5DE5\u5177\u4EE5\u6A21\u578B\u8C03\u7528\u65E5\u5FD7\u4E3A\u51C6\u3002
|
|
106
107
|
--no-open \u4EC5\u7528\u4E8E\u540E\u53F0\u9884\u89C8\uFF1B\u76F4\u63A5\u6267\u884C preview \u4ECD\u81EA\u52A8\u6253\u5F00\u540E\u53F0\u3002
|
|
107
108
|
--local \u662F\u540E\u53F0\u4E0D\u53EF\u7528\u65F6\u7684\u72EC\u7ACB\u672C\u5730\u9884\u89C8\u5907\u7528\u5165\u53E3\uFF0C--port \u4EC5\u4E0E --local \u4E00\u8D77\u4F7F\u7528\u3002
|
|
108
109
|
\u4FDD\u6301\u7EC8\u7AEF\u8FD0\u884C\uFF1BCtrl+C \u6216\u5173\u95ED\u7EC8\u7AEF\u4F1A\u505C\u6B62 DEV \u5E76\u65AD\u5F00\u8FDE\u63A5\uFF0C\u5237\u65B0\u540E\u53F0\u4E0D\u4F1A\u81EA\u52A8\u542F\u52A8 DEV\u3002
|
|
109
110
|
DEV \u5931\u8D25\u5148\u67E5\u770B\u5177\u4F53\u9519\u8BEF\u548C\u8FD0\u884C\u65E5\u5FD7\uFF1B\u5347\u7EA7 CLI \u540E\u9000\u51FA\u65E7 preview \u8FDB\u7A0B\u5E76\u91CD\u65B0\u8FDE\u63A5\uFF0C\u518D\u542F\u52A8 DEV\u3002
|
|
110
|
-
\u540E\u53F0\u53EF\u5F3A\u5236\u65AD\u8FDE\uFF1B\u672C\u673A\u505C\u6B62\u672A\u786E\u8BA4\u65F6\uFF0C\u5728\u539F\u5DE5\u7A0B\u76EE\u5F55\u6267\u884C buddy-cli dev stop\u3002\u8BE5\u547D\u4EE4\u4E0D\u91CD\u8FDE\u3001\u4E0D\u91CD\u542F\u3002
|
|
111
|
-
\u672A\u914D\u7F6E\u5730\u5740\u65F6\u8FDE\u63A5 MLB \
|
|
112
|
-
\
|
|
113
|
-
CLI \u7EDF\u4E00\u542F\u52A8\u5E76\u7BA1\u7406\u5DE5\u7A0B\u4E2D\u7684\u5B98\u65B9 Runtime\uFF1B\u6BCF\u6B21\u542F\u52A8\u6216\u91CD\u8F7D\
|
|
111
|
+
\u540E\u53F0\u53EF\u5F3A\u5236\u65AD\u8FDE\uFF1B\u672C\u673A\u505C\u6B62\u672A\u786E\u8BA4\u65F6\uFF0C\u5728\u539F\u5DE5\u7A0B\u76EE\u5F55\u6267\u884C buddy-cli-sit dev stop\u3002\u8BE5\u547D\u4EE4\u4E0D\u91CD\u8FDE\u3001\u4E0D\u91CD\u542F\u3002
|
|
112
|
+
\u672A\u914D\u7F6E\u5730\u5740\u65F6\u8FDE\u63A5 MLB \u6D4B\u8BD5\u73AF\u5883 ${DEFAULT_MLB_TEST_URL}\uFF08HTTPS\uFF09\u3002
|
|
113
|
+
SIT \u5305\u56FA\u5B9A\u8FDE\u63A5 SIT\uFF1B\u5730\u5740\u53C2\u6570\u53EA\u6821\u9A8C\u56FA\u5B9A\u76EE\u6807\uFF0C\u4E0D\u80FD\u5207\u6362\u5E73\u53F0\u3002Runtime \u7F51\u5173\u7531 CLI \u6CE8\u5165\u3002
|
|
114
|
+
CLI \u7EDF\u4E00\u542F\u52A8\u5E76\u7BA1\u7406\u5DE5\u7A0B\u4E2D\u7684\u5B98\u65B9 Runtime\uFF1B\u6BCF\u6B21\u542F\u52A8\u6216\u91CD\u8F7D\u68C0\u67E5\u5DE5\u7A0B Runtime \u7684\u51C6\u786E\u7248\u672C\u3001\u5B89\u88C5\u548C\u9501\u6587\u4EF6\u4E0E npm dev \u6700\u65B0\u7248\u672C\u4E00\u81F4\u3002
|
|
114
115
|
\u8EAB\u4EFD\u8BFB\u53D6 package.json.buddyId\uFF1B.env \u4FDD\u5B58 Token\uFF0C\u542F\u52A8\u524D\u5411 Server \u6821\u9A8C\u6240\u5C5E\u642D\u5B50\u3002
|
|
115
|
-
\u8FDE\u63A5\u524D\u81EA\u68C0 .env \u7F51\u5173\uFF1B\
|
|
116
|
+
\u8FDE\u63A5\u524D\u81EA\u68C0 .env \u7F51\u5173\uFF1B\u53D1\u73B0\u5176\u4ED6\u73AF\u5883\u5730\u5740\u65F6\u505C\u6B62\uFF1B\u8BF7\u4F7F\u7528\u5BF9\u5E94 CLI\uFF0C\u8FC1\u79FB\u65F6\u65B0\u5EFA\u8EAB\u4EFD\u4E14\u4E0D\u590D\u5236\u51ED\u636E\u3002
|
|
116
117
|
--refresh-token \u91CD\u65B0\u9886\u53D6\u5DF2\u6709\u5F00\u53D1 Token\uFF0C\u66F4\u65B0\u540C\u4E00\u73AF\u5883\u7684\u5DE5\u7A0B .env\uFF1B\u4E0D\u80FD\u5207\u6362\u5E73\u53F0\uFF0C\u4E0D\u4F1A\u751F\u6210\u65B0\u5BC6\u94A5\u3002
|
|
117
118
|
Widget \u6D88\u606F\u5361\u7247\u4FDD\u7559\u6307\u5B9A\u8BB0\u5F55\u7684\u6253\u5F00\u76EE\u6807\uFF0C\u5C0F\u6302\u4EF6\u5217\u8868\u6253\u5F00\u9ED8\u8BA4\u89C6\u56FE\u3002
|
|
118
|
-
\u540E\u53F0\u652F\u6301\u6309 Schema \u7F16\u8F91 Widget \u8BB0\u5F55\u4E0E\u4E0A\u4F20\u56FE\u7247\uFF1B\u901A\u8FC7 window.dadaWidget \u8C03\u7528\uFF0C\u5173\u95ED\u540E\u805A\u5408\u53D8\u66F4\u901A\u77E5\u3002\u771F\u673A\u7F16\u8F91\u4ECD\u9700\u5BA2\u6237\u7AEF\u652F\u6301\u3002
|
|
119
|
+
SIT \u540E\u53F0\u652F\u6301\u6309 Schema \u7F16\u8F91 Widget \u8BB0\u5F55\u4E0E\u4E0A\u4F20\u56FE\u7247\uFF1B\u901A\u8FC7 window.dadaWidget \u8C03\u7528\uFF0C\u5173\u95ED\u540E\u805A\u5408\u53D8\u66F4\u901A\u77E5\u3002\u771F\u673A\u7F16\u8F91\u4ECD\u9700\u5BA2\u6237\u7AEF\u652F\u6301\u3002
|
|
119
120
|
\u6A21\u62DF\u5668\u4F7F\u7528\u5F53\u524D\u5F00\u53D1\u8005\u8D26\u53F7\u8BBF\u95EE <buddyId>-dev \u8C03\u8BD5\u5206\u8EAB\u3002`;
|
|
120
121
|
function valueAfter(args, index, flag) {
|
|
121
122
|
const value = args[index + 1];
|
|
@@ -308,6 +309,7 @@ var BuddyPlatformHost = class {
|
|
|
308
309
|
}).details({ signal });
|
|
309
310
|
}
|
|
310
311
|
});
|
|
312
|
+
await controller.refreshInspection();
|
|
311
313
|
const serverHandle = await startPreviewControlServer({ controller, port: parsed.port });
|
|
312
314
|
let bridge;
|
|
313
315
|
try {
|
|
@@ -441,16 +443,10 @@ var BuddyPlatformHost = class {
|
|
|
441
443
|
developerWebUrl,
|
|
442
444
|
openBrowser: this.#openUrl
|
|
443
445
|
}),
|
|
444
|
-
new
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
}),
|
|
449
|
-
new SystemCloudTokenStore({
|
|
450
|
-
account: `developer-session:${createHash("sha256").update("https://47.116.168.81").digest("hex")}`,
|
|
451
|
-
commandRunner: this.#credentialCommandRunner
|
|
452
|
-
})
|
|
453
|
-
)
|
|
446
|
+
new SystemCloudTokenStore({
|
|
447
|
+
account: `developer-session:${createHash("sha256").update(key).digest("hex")}`,
|
|
448
|
+
commandRunner: this.#credentialCommandRunner
|
|
449
|
+
})
|
|
454
450
|
);
|
|
455
451
|
this.#sessions.set(key, session);
|
|
456
452
|
}
|
|
@@ -461,7 +457,7 @@ var BuddyPlatformHost = class {
|
|
|
461
457
|
// apps/cli/src/platform-support.ts
|
|
462
458
|
var UnsupportedDeveloperPlatformError = class extends Error {
|
|
463
459
|
constructor(platform) {
|
|
464
|
-
super(`buddy-cli V1 \u76EE\u524D\u53EA\u652F\u6301 macOS\uFF0C\u5F53\u524D\u7CFB\u7EDF\u662F ${platform}`);
|
|
460
|
+
super(`buddy-cli-sit V1 \u76EE\u524D\u53EA\u652F\u6301 macOS\uFF0C\u5F53\u524D\u7CFB\u7EDF\u662F ${platform}`);
|
|
465
461
|
this.platform = platform;
|
|
466
462
|
this.name = "UnsupportedDeveloperPlatformError";
|
|
467
463
|
}
|
|
@@ -484,7 +480,7 @@ import { dirname, join } from "node:path";
|
|
|
484
480
|
import { homedir } from "node:os";
|
|
485
481
|
import { createHash as createHash2 } from "node:crypto";
|
|
486
482
|
import { setTimeout as delay } from "node:timers/promises";
|
|
487
|
-
var defaultUpdateCache = () => join(homedir(), ".cache", "buddy-cli", "updates");
|
|
483
|
+
var defaultUpdateCache = () => join(homedir(), ".cache", "buddy-cli-sit", "updates");
|
|
488
484
|
var globalUpdateLock = (cache, prefix) => join(cache, "locks", createHash2("sha256").update(prefix).digest("hex"));
|
|
489
485
|
async function withUpdateLock(path, signal, action) {
|
|
490
486
|
await mkdir(dirname(path), { recursive: true, mode: 448 });
|
|
@@ -573,22 +569,23 @@ async function globalInstallation(packageRoot, packageName) {
|
|
|
573
569
|
// apps/cli/src/self-update.ts
|
|
574
570
|
var PACKAGE = "@my-life-buddies/cli";
|
|
575
571
|
var REGISTRY = "https://registry.npmjs.org/";
|
|
576
|
-
var MANUAL_UPDATE = `npm install --global ${PACKAGE}@
|
|
572
|
+
var MANUAL_UPDATE = `npm install --global --prefix "$HOME/.local/share/buddy-cli/sit" ${PACKAGE}@dev --registry=${REGISTRY} --prefer-online`;
|
|
577
573
|
var execute = promisify(execFile);
|
|
578
574
|
var HELP = `\u7528\u6CD5:
|
|
579
|
-
buddy-cli --version [--json]
|
|
580
|
-
buddy-cli update --check [--json]
|
|
581
|
-
buddy-cli update [--json]
|
|
575
|
+
buddy-cli-sit --version [--json]
|
|
576
|
+
buddy-cli-sit update --check [--json]
|
|
577
|
+
buddy-cli-sit update [--json]
|
|
582
578
|
|
|
583
579
|
--version \u67E5\u770B\u5F53\u524D\u8FD0\u884C\u7684 CLI \u7248\u672C\uFF08\u65E0\u9700\u8054\u7F51\uFF09
|
|
584
|
-
--check \u68C0\u67E5\u516C\u5171 npm \u7684
|
|
580
|
+
--check \u68C0\u67E5\u516C\u5171 npm \u7684 dev \u7248\u672C\uFF0C\u4E0D\u5B89\u88C5
|
|
585
581
|
--json \u8F93\u51FA JSON\uFF0C\u4F9B Coding Agent \u6216\u811A\u672C\u8BFB\u53D6
|
|
586
582
|
|
|
587
583
|
\u65E0\u9700\u767B\u5F55\u642D\u642D\u8D26\u53F7\uFF0C\u4E5F\u65E0\u9700\u8FDB\u5165\u642D\u5B50\u5DE5\u7A0B\u3002
|
|
588
584
|
\u6B63\u5E38\u547D\u4EE4\uFF08\u542B guide\uFF09\u4F1A\u5148\u8054\u7F51\u81EA\u68C0\uFF0C\u81EA\u52A8\u66F4\u65B0\u540E\u7531\u65B0\u7248\u7EE7\u7EED\u6267\u884C\uFF1B\u7B49\u5F85\u5B8C\u6210\u5373\u53EF\u3002
|
|
589
585
|
\u5B89\u88C5\u4E3B\u52A8\u5237\u65B0 npm \u7248\u672C\u7F13\u5B58\uFF0C\u627E\u4E0D\u5230\u7248\u672C\uFF08ETARGET\uFF09\u65F6\u6700\u591A\u91CD\u8BD5\u4E00\u6B21\uFF1B\u5931\u8D25\u8BF4\u660E\u5177\u4F53\u539F\u56E0\u3002
|
|
590
586
|
--help\u3001\u5404\u547D\u4EE4 --help \u4E0E --version \u79BB\u7EBF\u53EF\u7528\uFF1B\u67E5\u8BE2\u6216\u66F4\u65B0\u5931\u8D25\u65F6\u505C\u6B62\u4E1A\u52A1\u64CD\u4F5C\u3002
|
|
591
|
-
update \u66F4\u65B0\u5F53\u524D CLI \u6240\u5728\u7684 npm \
|
|
587
|
+
update \u66F4\u65B0\u5F53\u524D CLI \u6240\u5728\u7684 npm \u5B89\u88C5\u76EE\u5F55\uFF08\u542B --global --prefix \u81EA\u5B9A\u4E49\u76EE\u5F55\uFF09\uFF0C\u4E0D\u4FEE\u6539\u5176\u4ED6\u5B89\u88C5\u6216\u5DE5\u7A0B Runtime \u4F9D\u8D56\u3002
|
|
588
|
+
\u540C\u4E00\u5305 latest/dev \u9700\u5206\u76EE\u5F55\u5B89\u88C5\u624D\u80FD\u5171\u5B58\uFF1BSIT \u547D\u4EE4\u4E3A buddy-cli-sit\uFF0C\u6B63\u5F0F\u547D\u4EE4\u4E3A buddy-cli\u3002
|
|
592
589
|
\u5DF2\u7ECF\u662F\u6700\u65B0\u7248\u6216\u5F53\u524D\u7248\u672C\u66F4\u9AD8\u65F6\u4E0D\u5B89\u88C5\u3001\u4E0D\u964D\u7EA7\u3002
|
|
593
590
|
\u6E90\u7801\u3001npm link\u3001\u5C40\u90E8\u5B89\u88C5\u6216 npx \u7684\u6B63\u5E38\u547D\u4EE4\u4F7F\u7528\u7F13\u5B58\u7684\u65B0\u7248\u6267\u884C\uFF0C\u4E0D\u8986\u76D6\u6E90\u7801\u6216\u5DE5\u7A0B\u4F9D\u8D56\u3002
|
|
594
591
|
\u4E0A\u8FF0\u5B89\u88C5\u65B9\u5F0F\u4E0D\u80FD\u7528 update \u5355\u72EC\u4FEE\u6539\u539F\u5B89\u88C5\uFF0C\u8BF7\u6CBF\u7528\u539F\u6765\u7684\u5B89\u88C5\u65B9\u5F0F\u66F4\u65B0\u3002
|
|
@@ -626,7 +623,7 @@ async function latestVersion(options) {
|
|
|
626
623
|
const timeout = AbortSignal.timeout(1e4);
|
|
627
624
|
const signal = options.signal ? AbortSignal.any([options.signal, timeout]) : timeout;
|
|
628
625
|
try {
|
|
629
|
-
const response = await (options.fetch ?? globalThis.fetch)(`${REGISTRY}${encodeURIComponent(PACKAGE)}/
|
|
626
|
+
const response = await (options.fetch ?? globalThis.fetch)(`${REGISTRY}${encodeURIComponent(PACKAGE)}/dev`, {
|
|
630
627
|
signal,
|
|
631
628
|
headers: { Accept: "application/json" },
|
|
632
629
|
redirect: "error"
|
|
@@ -634,7 +631,8 @@ async function latestVersion(options) {
|
|
|
634
631
|
if (!response.ok) throw new Error(`npm \u8FD4\u56DE HTTP ${response.status}`);
|
|
635
632
|
const metadata = await response.json();
|
|
636
633
|
if (metadata?.name !== PACKAGE) throw new Error("npm \u8FD4\u56DE\u7684\u5305\u540D\u4E0D\u5339\u914D");
|
|
637
|
-
|
|
634
|
+
parseVersion(metadata.version);
|
|
635
|
+
if (typeof metadata.version !== "string" || !/^\d+\.\d+\.\d+-dev\.\d+$/.test(metadata.version)) throw new Error("npm dev \u672A\u6307\u5411 x.y.z-dev.N \u7248\u672C\uFF1BSIT CLI \u4E0D\u4F1A\u8DE8\u6E20\u9053\u66F4\u65B0\uFF0C\u8BF7\u8054\u7CFB\u53D1\u5E03\u8005\u4FEE\u6B63 dev \u6807\u7B7E");
|
|
638
636
|
return metadata.version;
|
|
639
637
|
} catch (cause) {
|
|
640
638
|
if (options.signal?.aborted) throw new Error("\u64CD\u4F5C\u5DF2\u53D6\u6D88\u3002");
|
|
@@ -643,15 +641,20 @@ async function latestVersion(options) {
|
|
|
643
641
|
}
|
|
644
642
|
}
|
|
645
643
|
async function installUpdate(version, options) {
|
|
644
|
+
if (!/^\d+\.\d+\.\d+-dev\.\d+$/.test(version)) throw new Error("SIT CLI \u53EA\u80FD\u66F4\u65B0 x.y.z-dev.N \u7248\u672C\uFF0C\u4E0D\u4F1A\u8DE8\u6E20\u9053\u5B89\u88C5\u3002");
|
|
646
645
|
const runNpm = options.runNpm ?? ((args, settings2) => execute("npm", args, { ...settings2, encoding: "utf8", maxBuffer: 4 * 1024 * 1024 }));
|
|
647
646
|
const settings = { cwd: homedir2(), signal: options.signal, timeout: 1e4 };
|
|
648
647
|
const installation = await globalInstallation(options.packageRoot, PACKAGE);
|
|
649
648
|
if (!installation) {
|
|
650
|
-
throw new Error("\u5F53\u524D CLI \u662F\u6E90\u7801\u3001\u94FE\u63A5\u6216\u9879\u76EE\u5185\u5B89\u88C5\uFF0C\u4E0D\u80FD\u76F4\u63A5\u6539\u5199\u539F\u5B89\u88C5\u3002\u6B63\u5E38\u547D\u4EE4\u4F1A\u4ECE\u72EC\u7ACB\u7F13\u5B58\u8FD0\u884C\u65B0\u7248\uFF1B\u5355\u72EC\u66F4\u65B0\u8BF7\u6CBF\u7528\u539F\u6765\u7684\u5B89\u88C5\u65B9\u5F0F\u3002");
|
|
649
|
+
throw new Error("\u5F53\u524D CLI \u662F\u6E90\u7801\u3001\u94FE\u63A5\u6216\u9879\u76EE\u5185\u5B89\u88C5\uFF0C\u4E0D\u80FD\u76F4\u63A5\u6539\u5199\u539F\u5B89\u88C5\u3002\u6B63\u5E38\u547D\u4EE4\u4F1A\u4ECE SIT \u72EC\u7ACB\u7F13\u5B58\u8FD0\u884C\u65B0\u7248\uFF1B\u5355\u72EC\u66F4\u65B0\u8BF7\u6CBF\u7528\u539F\u6765\u7684\u5B89\u88C5\u65B9\u5F0F\u3002");
|
|
651
650
|
}
|
|
652
651
|
const { root: installedRoot, prefix } = installation;
|
|
652
|
+
const manualUpdate = `npm install --global --prefix '${prefix.replace(/'/gu, "'\\''")}' ${PACKAGE}@dev --registry=${REGISTRY} --prefer-online`;
|
|
653
653
|
await withUpdateLock(globalUpdateLock(options.cacheDirectory ?? defaultUpdateCache(), prefix), options.signal, async () => {
|
|
654
654
|
const current = JSON.parse(await readFile(join3(installedRoot, "package.json"), "utf8"));
|
|
655
|
+
if (current.name !== PACKAGE || !/^\d+\.\d+\.\d+-dev\.\d+$/.test(current.version)) {
|
|
656
|
+
throw new Error("\u5F53\u524D\u5B89\u88C5\u76EE\u5F55\u5DF2\u88AB\u5176\u4ED6\u6E20\u9053\u66FF\u6362\uFF0C\u5DF2\u505C\u6B62\u66F4\u65B0\u3002\u8BF7\u5C06 latest \u548C dev \u5B89\u88C5\u5230\u4E0D\u540C\u76EE\u5F55\uFF0C\u518D\u91CD\u65B0\u8FD0\u884C buddy-cli-sit\u3002");
|
|
657
|
+
}
|
|
655
658
|
if (current.name === PACKAGE && current.version === version) return;
|
|
656
659
|
if (current.name === PACKAGE && compareVersions(current.version, version) > 0) throw new Error("\u53E6\u4E00\u4E2A\u8FDB\u7A0B\u5DF2\u5B89\u88C5\u66F4\u65B0\u7684 CLI\uFF0C\u8BF7\u91CD\u65B0\u6267\u884C\u547D\u4EE4\u3002");
|
|
657
660
|
try {
|
|
@@ -668,13 +671,13 @@ async function installUpdate(version, options) {
|
|
|
668
671
|
"--no-fund"
|
|
669
672
|
], { ...settings, timeout: 18e4 }, runNpm);
|
|
670
673
|
} catch (cause) {
|
|
671
|
-
if (options.signal?.aborted) throw new Error("\u66F4\u65B0\u5DF2\u53D6\u6D88\uFF0C\u8BF7\u8FD0\u884C buddy-cli --version \u68C0\u67E5\u5B89\u88C5\u72B6\u6001\u3002");
|
|
674
|
+
if (options.signal?.aborted) throw new Error("\u66F4\u65B0\u5DF2\u53D6\u6D88\uFF0C\u8BF7\u8FD0\u884C buddy-cli-sit --version \u68C0\u67E5\u5B89\u88C5\u72B6\u6001\u3002");
|
|
672
675
|
throw new Error(`${cause instanceof Error ? cause.message : "npm \u5B89\u88C5\u672A\u5B8C\u6210\u3002"}
|
|
673
|
-
\u4E5F\u53EF\u624B\u52A8\u5B89\u88C5\uFF1A${
|
|
676
|
+
\u4E5F\u53EF\u624B\u52A8\u5B89\u88C5\uFF1A${manualUpdate}`);
|
|
674
677
|
}
|
|
675
678
|
const installed = JSON.parse(await readFile(join3(installedRoot, "package.json"), "utf8"));
|
|
676
679
|
if (installed.name !== PACKAGE || installed.version !== version) {
|
|
677
|
-
throw new Error(`npm \u5DF2\u7ED3\u675F\uFF0C\u4F46\u672A\u786E\u8BA4\u5B89\u88C5\u5230 ${version}\u3002\u8BF7\u8FD0\u884C buddy-cli --version \u68C0\u67E5\uFF0C\u5FC5\u8981\u65F6\u91CD\u8BD5\uFF1A${
|
|
680
|
+
throw new Error(`npm \u5DF2\u7ED3\u675F\uFF0C\u4F46\u672A\u786E\u8BA4\u5B89\u88C5\u5230 ${version}\u3002\u8BF7\u8FD0\u884C buddy-cli-sit --version \u68C0\u67E5\uFF0C\u5FC5\u8981\u65F6\u91CD\u8BD5\uFF1A${manualUpdate}`);
|
|
678
681
|
}
|
|
679
682
|
});
|
|
680
683
|
}
|
|
@@ -684,13 +687,13 @@ async function runSelfUpdateCommand(args, io, options) {
|
|
|
684
687
|
const json = args.includes("--json");
|
|
685
688
|
const fail = (message, exitCode) => {
|
|
686
689
|
if (json) io.write(JSON.stringify({ package: PACKAGE, currentVersion: options.version, error: message }));
|
|
687
|
-
else io.writeError(`buddy-cli: ${message}`);
|
|
690
|
+
else io.writeError(`buddy-cli-sit: ${message}`);
|
|
688
691
|
return { exitCode };
|
|
689
692
|
};
|
|
690
693
|
const flags = args.slice(1);
|
|
691
694
|
const allowed = versionOnly ? ["--json", "--help", "-h"] : ["--check", "--json", "--help", "-h"];
|
|
692
695
|
if (flags.some((flag) => !allowed.includes(flag)) || new Set(flags).size !== flags.length) {
|
|
693
|
-
return fail("\u53C2\u6570\u65E0\u6548\uFF0C\u8BF7\u8FD0\u884C buddy-cli update --help \u67E5\u770B\u7528\u6CD5\u3002", 2);
|
|
696
|
+
return fail("\u53C2\u6570\u65E0\u6548\uFF0C\u8BF7\u8FD0\u884C buddy-cli-sit update --help \u67E5\u770B\u7528\u6CD5\u3002", 2);
|
|
694
697
|
}
|
|
695
698
|
if (flags.includes("--help") || flags.includes("-h")) {
|
|
696
699
|
if (json) io.write(JSON.stringify({ help: HELP }));
|
|
@@ -703,6 +706,8 @@ async function runSelfUpdateCommand(args, io, options) {
|
|
|
703
706
|
io.write(json ? JSON.stringify({ package: PACKAGE, version: options.version }) : options.version);
|
|
704
707
|
return { exitCode: 0 };
|
|
705
708
|
}
|
|
709
|
+
const pin = process.env.BUDDY_CLI_PIN_VERSION;
|
|
710
|
+
if (pin !== void 0) throw new Error("\u5F53\u524D\u5DF2\u7528 BUDDY_CLI_PIN_VERSION \u9501\u5B9A CLI\uFF1B\u5982\u9700\u66F4\u65B0\uFF0C\u8BF7\u5148 unset BUDDY_CLI_PIN_VERSION\u3002");
|
|
706
711
|
const latest = await latestVersion(options);
|
|
707
712
|
const comparison = compareVersions(latest, options.version);
|
|
708
713
|
const check = flags.includes("--check");
|
|
@@ -722,8 +727,8 @@ async function runSelfUpdateCommand(args, io, options) {
|
|
|
722
727
|
...updated ? { installedVersion: latest } : {}
|
|
723
728
|
}));
|
|
724
729
|
} else if (updated) io.write(`CLI \u5DF2\u66F4\u65B0\uFF1A${options.version} \u2192 ${latest}\u3002`);
|
|
725
|
-
else if (comparison > 0) io.write(`\u53D1\u73B0\u65B0\u7248\u672C\uFF1A${options.version} \u2192 ${latest}\u3002\u8FD0\u884C buddy-cli update \u66F4\u65B0\u3002`);
|
|
726
|
-
else if (comparison < 0) io.write(`\u5F53\u524D\u7248\u672C ${options.version} \u9AD8\u4E8E npm
|
|
730
|
+
else if (comparison > 0) io.write(`\u53D1\u73B0\u65B0\u7248\u672C\uFF1A${options.version} \u2192 ${latest}\u3002\u8FD0\u884C buddy-cli-sit update \u66F4\u65B0\u3002`);
|
|
731
|
+
else if (comparison < 0) io.write(`\u5F53\u524D\u7248\u672C ${options.version} \u9AD8\u4E8E npm dev ${latest}\uFF0C\u65E0\u9700\u66F4\u65B0\u3002`);
|
|
727
732
|
else io.write(`\u5F53\u524D\u5DF2\u662F\u6700\u65B0\u7248\uFF1A${options.version}\u3002`);
|
|
728
733
|
return { exitCode: 0 };
|
|
729
734
|
} catch (cause) {
|
|
@@ -755,7 +760,7 @@ import { promisify as promisify2 } from "node:util";
|
|
|
755
760
|
var PACKAGE2 = "@my-life-buddies/cli";
|
|
756
761
|
var REGISTRY2 = "https://registry.npmjs.org/";
|
|
757
762
|
var execute2 = promisify2(execFile2);
|
|
758
|
-
var HANDOFF_ENV = "
|
|
763
|
+
var HANDOFF_ENV = "BUDDY_CLI_SIT_UPDATE_HANDOFF";
|
|
759
764
|
async function installedVersion(root) {
|
|
760
765
|
try {
|
|
761
766
|
const pkg = JSON.parse(await readFile2(join4(root, "package.json"), "utf8"));
|
|
@@ -848,6 +853,13 @@ async function runAutoUpdate(args, io, options) {
|
|
|
848
853
|
if (args[0] === "help" || args[0] === "update" || args[0] === "--version" || args[0] === "-v" || args.includes("--help") || args.includes("-h")) return void 0;
|
|
849
854
|
try {
|
|
850
855
|
const env = { ...options.env ?? process.env };
|
|
856
|
+
const pin = env.BUDDY_CLI_PIN_VERSION;
|
|
857
|
+
if (pin !== void 0) {
|
|
858
|
+
if (!/^\d+\.\d+\.\d+-dev\.\d+$/.test(pin) || pin !== options.version) {
|
|
859
|
+
throw new Error(`CLI \u7248\u672C\u9501\u5B9A\u4E0D\u5339\u914D\uFF1A\u8981\u6C42 ${pin}\uFF0C\u5F53\u524D ${options.version}\u3002\u8BF7\u5B89\u88C5 @my-life-buddies/cli@${pin} \u6216 unset BUDDY_CLI_PIN_VERSION\u3002`);
|
|
860
|
+
}
|
|
861
|
+
return void 0;
|
|
862
|
+
}
|
|
851
863
|
const handoff = env[HANDOFF_ENV];
|
|
852
864
|
if (handoff !== void 0) {
|
|
853
865
|
delete env[HANDOFF_ENV];
|
|
@@ -981,7 +993,7 @@ try {
|
|
|
981
993
|
process.exitCode = result.exitCode;
|
|
982
994
|
} catch (cause) {
|
|
983
995
|
const message = cause instanceof Error ? cause.message : String(cause);
|
|
984
|
-
terminal.writeError(`buddy-cli: ${message}`);
|
|
996
|
+
terminal.writeError(`buddy-cli-sit: ${message}`);
|
|
985
997
|
process.exitCode = 1;
|
|
986
998
|
} finally {
|
|
987
999
|
unbindTermination();
|