@my-life-buddies/cli 0.26.1 → 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 +12 -30
- package/dist/bin/core.js +72 -179
- package/dist/bin/core.js.map +3 -3
- package/package.json +3 -3
- package/resources/README.md +2 -2
package/dist/bin/core.js
CHANGED
|
@@ -242,7 +242,7 @@ function validSkillLock(value, protocolVersions2 = [1]) {
|
|
|
242
242
|
function checkProtocol(definition3, pkg) {
|
|
243
243
|
const protocol = pkg.buddySkill;
|
|
244
244
|
if (pkg.name !== definition3.name || !VERSION.test(pkg.version) || !protocol || !definition3.protocolVersions.includes(protocol.protocolVersion) || Object.entries(definition3.protocol).some(([key, value]) => protocol[key] !== value)) {
|
|
245
|
-
throw new Error(`${definition3.label} Skill \u7684\u63A5\u5165\u534F\u8BAE\u4E0D\u517C\u5BB9\uFF0C\u8BF7\u5347\u7EA7 CLI \u6216\u9009\u62E9\u517C\u5BB9\u7248\u672C\u3002`);
|
|
245
|
+
throw new Error(`${definition3.label} Skill \u7684\u63A5\u5165\u534F\u8BAE\u4E0D\u517C\u5BB9\uFF0C${definition3.alwaysLatest ? "\u8BF7\u5347\u7EA7 CLI \u540E\u91CD\u8BD5\uFF0C\u4E0D\u80FD\u9000\u56DE\u65E7\u7248\u672C" : "\u8BF7\u5347\u7EA7 CLI \u6216\u9009\u62E9\u517C\u5BB9\u7248\u672C"}\u3002`);
|
|
246
246
|
}
|
|
247
247
|
if ([pkg.dependencies, pkg.optionalDependencies].some((dependencies2) => dependencies2 && Object.keys(dependencies2).length)) {
|
|
248
248
|
throw new Error(`${definition3.label} Skill \u5FC5\u987B\u662F\u65E0\u5B89\u88C5\u4F9D\u8D56\u7684\u8D44\u6E90\u5305\u3002`);
|
|
@@ -281,9 +281,10 @@ async function cached(definition3, root, lock) {
|
|
|
281
281
|
}
|
|
282
282
|
async function resolveSkillPackage(definition3, previous, options = {}) {
|
|
283
283
|
if (previous && !validSkillLock(previous, definition3.protocolVersions)) throw new Error(`${definition3.label} \u7248\u672C\u8BB0\u5F55\u635F\u574F\uFF0C\u5DF2\u4FDD\u7559\u9879\u76EE\uFF0C\u8BF7\u68C0\u67E5 skill-lock.json\u3002`);
|
|
284
|
+
if (definition3.alwaysLatest && options.version !== void 0) throw new Error(`${definition3.versionFlag} \u5DF2\u505C\u6B62\u4F7F\u7528\uFF1B${definition3.label} \u6BCF\u6B21\u8FDB\u5165\u6216\u6062\u590D\u90FD\u4F7F\u7528\u516C\u5171 npm latest \u6700\u65B0\u6B63\u5F0F\u7248\u3002`);
|
|
284
285
|
if (options.version !== void 0 && !VERSION.test(options.version)) throw new Error(`${definition3.versionFlag} \u5FC5\u987B\u662F\u51C6\u786E\u7684\u7A33\u5B9A\u7248\u672C\u3002`);
|
|
285
286
|
if (options.localRoot && options.version) throw new Error(`\u672C\u5730 Skill \u8DEF\u5F84\u4E0E ${definition3.versionFlag} \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528\u3002`);
|
|
286
|
-
const local = options.localRoot ?? (!options.version && previous?.source === "local" ? previous.path : void 0);
|
|
287
|
+
const local = options.localRoot ?? (!definition3.alwaysLatest && !options.version && previous?.source === "local" ? previous.path : void 0);
|
|
287
288
|
if (local) {
|
|
288
289
|
if (!isAbsolute(local)) throw new Error(`${definition3.pathEnvironment} \u5FC5\u987B\u662F\u7EDD\u5BF9\u8DEF\u5F84\u3002`);
|
|
289
290
|
const root = await realpath2(local);
|
|
@@ -294,7 +295,7 @@ async function resolveSkillPackage(definition3, previous, options = {}) {
|
|
|
294
295
|
return { root, lock: { source: "local", path: root, version: pkg2.version, protocolVersion } };
|
|
295
296
|
}
|
|
296
297
|
const cache = options.cacheDirectory ?? join2(homedir2(), ".cache", "buddy-cli", definition3.cacheFolder);
|
|
297
|
-
const pinned = !options.version || options.version === previous?.version ? previous : void 0;
|
|
298
|
+
const pinned = !definition3.alwaysLatest && (!options.version || options.version === previous?.version) ? previous : void 0;
|
|
298
299
|
if (pinned?.source === "npm") {
|
|
299
300
|
const root = await cached(definition3, join2(cache, pinned.version), pinned);
|
|
300
301
|
if (root) return { root, lock: pinned };
|
|
@@ -302,11 +303,17 @@ async function resolveSkillPackage(definition3, previous, options = {}) {
|
|
|
302
303
|
options.signal?.throwIfAborted();
|
|
303
304
|
const version = options.version ?? pinned?.version ?? "latest";
|
|
304
305
|
options.report?.(`\u6B63\u5728\u67E5\u8BE2 ${definition3.label} Skill ${version}\u2026`);
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
306
|
+
let response;
|
|
307
|
+
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 {
|
|
314
|
+
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`);
|
|
316
|
+
}
|
|
310
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`);
|
|
311
318
|
const text2 = await response.text();
|
|
312
319
|
if (text2.length > 512 * 1024) throw new Error(`${definition3.label} npm \u5143\u6570\u636E\u8FC7\u5927\u3002`);
|
|
@@ -314,7 +321,8 @@ async function resolveSkillPackage(definition3, previous, options = {}) {
|
|
|
314
321
|
checkProtocol(definition3, pkg);
|
|
315
322
|
if (version !== "latest" && pkg.version !== version) throw new Error(`npm \u8FD4\u56DE\u4E86\u4E0D\u540C\u7684 ${definition3.label} \u7248\u672C\u3002`);
|
|
316
323
|
const lock = { source: "npm", version: pkg.version, integrity: pkg.dist?.integrity, protocolVersion: pkg.buddySkill.protocolVersion };
|
|
317
|
-
|
|
324
|
+
const expected = pinned ?? (previous?.source === "npm" && previous.version === lock.version ? previous : void 0);
|
|
325
|
+
if (!validSkillLock(lock, definition3.protocolVersions) || expected && (lock.integrity !== expected.integrity || lock.protocolVersion !== expected.protocolVersion)) throw new Error(`${definition3.label} Skill \u4E0B\u8F7D\u6821\u9A8C\u4FE1\u606F\u4E0D\u5339\u914D\u3002`);
|
|
318
326
|
const destination = join2(cache, lock.version);
|
|
319
327
|
const existing = await cached(definition3, destination, lock);
|
|
320
328
|
if (existing) return { root: existing, lock };
|
|
@@ -947,7 +955,7 @@ async function readExistingManifest(agentConfigPath) {
|
|
|
947
955
|
);
|
|
948
956
|
}
|
|
949
957
|
}
|
|
950
|
-
async function planBuddyDraftInitialization(directory) {
|
|
958
|
+
async function planBuddyDraftInitialization(directory, options = {}) {
|
|
951
959
|
const rootDirectory = resolve3(directory);
|
|
952
960
|
const agentConfigPath = join6(rootDirectory, BUDDY_PACKAGE_FILENAME);
|
|
953
961
|
const state2 = await pathState(rootDirectory);
|
|
@@ -959,10 +967,10 @@ async function planBuddyDraftInitialization(directory) {
|
|
|
959
967
|
);
|
|
960
968
|
}
|
|
961
969
|
const existingManifest = state2.kind === "directory" ? await readExistingManifest(agentConfigPath) : void 0;
|
|
962
|
-
if (existingManifest !== void 0 && (await missingBuddyAgentFiles(rootDirectory)).length === 0) {
|
|
970
|
+
if (!options.resumeCreator && existingManifest !== void 0 && (await missingBuddyAgentFiles(rootDirectory)).length === 0) {
|
|
963
971
|
throw new ProjectInitializationError(
|
|
964
972
|
"ALREADY_INITIALIZED",
|
|
965
|
-
|
|
973
|
+
"\u9879\u76EE\u5DF2\u7ECF\u662F\u5B8C\u6574 Agent \u5DE5\u7A0B\uFF0C\u4E14\u6CA1\u6709\u53EF\u6062\u590D\u7684 Creator \u8BB0\u5F55\uFF1B\u8BF7\u6309\u5DF2\u6709\u9700\u6C42\u7EE7\u7EED\u5F00\u53D1\uFF0C\u4E0D\u91CD\u65B0\u521D\u59CB\u5316\u3002",
|
|
966
974
|
agentConfigPath
|
|
967
975
|
);
|
|
968
976
|
}
|
|
@@ -972,7 +980,8 @@ async function planBuddyDraftInitialization(directory) {
|
|
|
972
980
|
agentConfigPath,
|
|
973
981
|
createRootDirectory: state2.kind === "missing",
|
|
974
982
|
...state2.kind === "directory" ? { expectedDirectoryIdentity: state2.identity } : {},
|
|
975
|
-
...existingManifest === void 0 ? {} : { existingManifest }
|
|
983
|
+
...existingManifest === void 0 ? {} : { existingManifest },
|
|
984
|
+
...options.resumeCreator ? { resumeCreator: true } : {}
|
|
976
985
|
};
|
|
977
986
|
}
|
|
978
987
|
async function planBuddyProjectInitialization(options) {
|
|
@@ -1121,7 +1130,7 @@ async function applyBuddyDraftInitialization(plan, draft) {
|
|
|
1121
1130
|
const directoryIdentity = await prepareInitializationDirectory(plan);
|
|
1122
1131
|
if (plan.existingManifest !== void 0) {
|
|
1123
1132
|
const current = await readExistingManifest(plan.agentConfigPath);
|
|
1124
|
-
if (current === void 0 || current.buddyId !== draft.buddyId || (await missingBuddyAgentFiles(plan.rootDirectory)).length === 0) {
|
|
1133
|
+
if (current === void 0 || current.buddyId !== draft.buddyId || !plan.resumeCreator && (await missingBuddyAgentFiles(plan.rootDirectory)).length === 0) {
|
|
1125
1134
|
throw new ProjectInitializationError(
|
|
1126
1135
|
"ALREADY_INITIALIZED",
|
|
1127
1136
|
`\u5DF2\u6709 ${BUDDY_PACKAGE_FILENAME} \u7ED1\u5B9A\u7684 buddyId \u4E0E\u672C\u6B21\u4E91\u7AEF\u642D\u5B50\u4E0D\u4E00\u81F4\u3002`,
|
|
@@ -2501,6 +2510,7 @@ var definition2 = {
|
|
|
2501
2510
|
cacheFolder: "creator-skills/buddy-creator-skill",
|
|
2502
2511
|
pathEnvironment: "BUDDY_CREATOR_SKILL_PATH",
|
|
2503
2512
|
versionFlag: "--creator-version",
|
|
2513
|
+
alwaysLatest: true,
|
|
2504
2514
|
protocolVersions,
|
|
2505
2515
|
protocol: { entrypoint: "scripts/buddy.py", skill: "SKILL.md", workflow: "references/cli-workflow.md", workspaceFormat: "buddy-creator-1" },
|
|
2506
2516
|
requiredFiles: ["SKILL.md", "scripts/buddy.py", "references/cli-workflow.md", "references/host-guide.md"]
|
|
@@ -2782,7 +2792,7 @@ function handoffMarkdown(context, skillRoot, session, workspacePath) {
|
|
|
2782
2792
|
];
|
|
2783
2793
|
return `# Buddy \u521B\u5EFA\u63A5\u7EED\u8BF4\u660E
|
|
2784
2794
|
|
|
2785
|
-
<!-- buddy-cli creator-handoff:
|
|
2795
|
+
<!-- buddy-cli creator-handoff:4 -->
|
|
2786
2796
|
|
|
2787
2797
|
\u5148\u6267\u884C \`buddy-cli guide\` \u5E76\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u5F00\u53D1\u6307\u5F15\uFF1BCLI \u4F1A\u5148\u81EA\u68C0\u5E76\u5728\u9700\u8981\u65F6\u81EA\u52A8\u66F4\u65B0\uFF0C\u7B49\u5F85\u547D\u4EE4\u5B8C\u6210\uFF0C\u4E0D\u91CD\u590D\u53D1\u8D77\u3002
|
|
2788
2798
|
\u672C\u6587\u4EF6\u53EA\u63D0\u4F9B\u672C\u6B21\u5DE5\u7A0B\u4E0E Skill \u7684\u63A5\u7EED\u4FE1\u606F\uFF1B\u901A\u7528\u5F00\u53D1\u548C\u4EA4\u4ED8\u89C4\u5219\u4EE5 guide \u4E3A\u51C6\u3002
|
|
@@ -2794,7 +2804,8 @@ function handoffMarkdown(context, skillRoot, session, workspacePath) {
|
|
|
2794
2804
|
|
|
2795
2805
|
## \u7531\u5F53\u524D\u4E3B\u5BF9\u8BDD\u6267\u884C\u521B\u4F5C
|
|
2796
2806
|
|
|
2797
|
-
\
|
|
2807
|
+
\u672C\u6587\u4EF6\u8BB0\u5F55\u672C\u6B21\u9009\u7528\u7684 Creator\uFF1B\u6BCF\u6B21\u91CD\u65B0\u8FDB\u5165\u6216\u6062\u590D\u521B\u4F5C\uFF0C\u5148\u5728\u540C\u76EE\u5F55\u6267\u884C \`buddy-cli init --mode create\` \u67E5\u8BE2\u516C\u5171 npm latest\uFF0C\u518D\u8BFB\u53D6\u66F4\u65B0\u540E\u7684 HANDOFF\uFF0C\u4E0D\u76F4\u63A5\u8C03\u7528\u65E7\u7F13\u5B58\u76EE\u5F55\u3002\u672C\u8F6E\u547D\u4EE4\u5DF2\u6210\u529F\u65F6\u4E0D\u91CD\u590D\u6267\u884C\uFF0C\u540C\u4E00\u8F6E\u8BBF\u8C08\u7684\u540E\u7EED\u5DE5\u5177\u8C03\u7528\u4F7F\u7528\u672C\u6B21\u9009\u5B9A\u7248\u672C\u3002
|
|
2808
|
+
\u5B8C\u6574\u8BFB\u53D6 ${JSON.stringify(join14(skillRoot, "SKILL.md"))} \u4E0E ${JSON.stringify(join14(skillRoot, "references/cli-workflow.md"))}\uFF0C\u7531\u6700\u65B0\u7248 Creator \u7684 open \u8BFB\u53D6\u65E7\u8D44\u6599\u5E76\u8FC1\u79FB\u5230 workflowVersion=2 \u7684\u4E09\u518C\uFF1A\u5B9A\u4F4D\u3001\u77E5\u8BC6\u4E0E\u65B9\u6CD5\u3001\u4ED8\u8D39\u670D\u52A1\u3002\u5148\u4FDD\u5B58\u65E7\u6210\u679C\uFF0C\u518D\u6309\u8FC1\u79FB\u7ED3\u679C\u8865\u9F50\u7F3A\u53E3\u6216\u91CD\u65B0\u786E\u8BA4\u53D1\u751F\u53D8\u5316\u7684\u5185\u5BB9\uFF1B\u4E0D\u80FD\u76F4\u63A5\u4FEE\u6539\u72B6\u6001\u7248\u672C\u3001\u4F2A\u9020\u786E\u8BA4\u6216\u6CBF\u7528\u65E7\u4EA4\u4ED8\u7684\u5B8C\u6210\u6807\u8BB0\u3002
|
|
2798
2809
|
\u4F7F\u7528\u5BBF\u4E3B\u5B9E\u9645\u53EF\u7528\u7684 Python 3.9+\uFF0C\u6240\u6709\u8C03\u7528\u52A0 -B\uFF0C\u8FDB\u7A0B\u73AF\u5883\u8BBE\u7F6E PYTHONDONTWRITEBYTECODE=1\u3002\u4FDD\u6301 creation-key \u4E0E workspace \u4E0D\u53D8\uFF0C\u4E0D\u91CD\u7F6E\u4F5C\u54C1\u3002
|
|
2799
2810
|
\u9996\u6B21 open \u7684 argv\uFF1A
|
|
2800
2811
|
|
|
@@ -2806,7 +2817,7 @@ ${JSON.stringify(openArgs, null, 2)}
|
|
|
2806
2817
|
|
|
2807
2818
|
\u4EC5 directive=creator_complete \u4E14 completion.status=ready\u3001manualPath \u5B58\u5728\u4E14\u4EA4\u4ED8\u6709\u6548\u65F6\u8FDB\u5165\u5F00\u53D1\u3002directive=finalize_required \u65F6\u5148\u4FEE\u590D\u4EA4\u4ED8\u3002\u5DF2\u5B8C\u6210\u4F5C\u54C1\u76F4\u63A5\u63A5\u56DE\u5F00\u53D1\uFF1B\u7528\u6237\u660E\u786E\u4EC5\u505A\u8BBE\u8BA1\u6216\u6682\u505C\u65F6\u9075\u5B88\u8BE5\u8303\u56F4\u3002
|
|
2808
2819
|
|
|
2809
|
-
\u91CD\u65B0\u6267\u884C \`buddy-cli guide\` \u83B7\u53D6\u5F53\u524D\u89C4\u5219\uFF0C\u8BFB\u53D6 completion.manualPath \u6307\u5411\u7684\u771F\u5B9E\u624B\u518C\u3001\u540C\u76EE\u5F55\u5B9E\u9645 manifest\u3001sources.json \u4E0E\u6765\u6E90\u6620\u5C04\u53CA\u5C0F\u6302\u4EF6\u4EA7\u7269\uFF0C\u4E0D\u6309\u65E7\u56DB\u518C\u6587\u4EF6\u540D\u786C\u7F16\u7801\u6E05\u5355\
|
|
2820
|
+
\u91CD\u65B0\u6267\u884C \`buddy-cli guide\` \u83B7\u53D6\u5F53\u524D\u89C4\u5219\uFF0C\u8BFB\u53D6 completion.manualPath \u6307\u5411\u7684\u771F\u5B9E\u624B\u518C\u3001\u540C\u76EE\u5F55\u5B9E\u9645 manifest\u3001sources.json \u4E0E\u6765\u6E90\u6620\u5C04\u53CA\u5C0F\u6302\u4EF6\u4EA7\u7269\uFF0C\u4E0D\u6309\u65E7\u56DB\u518C\u6587\u4EF6\u540D\u786C\u7F16\u7801\u6E05\u5355\u3002\u65B0\u7248\u4E09\u518C\u4EA4\u4ED8\u8FD8\u8BFB\u53D6 completion.capabilityContractPath\uFF0C\u5E76\u6309 Skill \u7684 references/implementation-handoff.md \u4FDD\u5B58 implementation-report.json\u3001\u6267\u884C handoff-check\u3002\u8BE5\u68C0\u67E5\u4E0D\u66FF\u4EE3\u771F\u5B9E Runtime \u9A8C\u8BC1\uFF1B\u8FC1\u79FB\u540E\u7684\u4E09\u518C\u3001\u80FD\u529B\u5951\u7EA6\u53CA\u4EA4\u4ED8\u987B\u901A\u8FC7\u5F53\u524D Skill \u7684\u6821\u9A8C\uFF0C\u4E0D\u80FD\u4EE5\u65E7\u56DB\u518C\u4EA4\u4ED8\u4EE3\u66FF\u3002\u7ED3\u5408\u73B0\u6709\u5DE5\u7A0B\uFF0C\u6309\u5F00\u53D1\u6307\u5F15\u7EE7\u7EED\u5B9E\u73B0\u3002
|
|
2810
2821
|
|
|
2811
2822
|
\u4F7F\u7528\u5B98\u65B9 Runtime \u521D\u59CB\u5316\u5DE5\u7A0B\uFF0C\u8C03\u7528 buddy-cli\uFF0Cargv \u4E3A\uFF1A
|
|
2812
2823
|
|
|
@@ -2960,9 +2971,9 @@ ${IMPLEMENTATION_GUIDE_SUMMARY}
|
|
|
2960
2971
|
|
|
2961
2972
|
### \u5148\u770B\u9700\u6C42\uFF0C\u4E0D\u91CD\u65B0\u91C7\u8BBF
|
|
2962
2973
|
|
|
2963
|
-
Creator \u8DEF\u7EBF\u6309\u5F53\u524D\u4F5C\u54C1\u7684\u5DE5\u4F5C\u6D41\u5B8C\u6210\u9700\u6C42\u3001\u5C0F\u6302\u4EF6\u6E05\u5355\u3001\u539F\u578B\u53CA\u8BBE\u8BA1\u9A8C\u6536\uFF0C\u4E14\u4EA4\u4ED8\u6821\u9A8C\u8FD4\u56DE \`directive=creator_complete\`\u3001\`completion.status=ready\`\u3001\u4EA4\u4ED8\u7248\u672C\u6709\u6548\u3001\`completion.manualPath\` \u5B58\u5728\u540E\uFF0C\u518D\u8FDB\u5165\u5F00\u53D1\u3002\u4EC5\u624B\u518C\u786E\u8BA4\u6216\u5B58\u5728\u624B\u518C\u6587\u4EF6\u5747\u4E0D\u8DB3\u4EE5\u89E6\u53D1\u5F00\u53D1\uFF1B\`directive=finalize_required\` \u65F6\u5148\u6062\u590D\u6709\u6548\u4EA4\u4ED8\u3002\
|
|
2974
|
+
Creator \u8DEF\u7EBF\u6309\u5F53\u524D\u4F5C\u54C1\u7684\u5DE5\u4F5C\u6D41\u5B8C\u6210\u9700\u6C42\u3001\u5C0F\u6302\u4EF6\u6E05\u5355\u3001\u539F\u578B\u53CA\u8BBE\u8BA1\u9A8C\u6536\uFF0C\u4E14\u4EA4\u4ED8\u6821\u9A8C\u8FD4\u56DE \`directive=creator_complete\`\u3001\`completion.status=ready\`\u3001\u4EA4\u4ED8\u7248\u672C\u6709\u6548\u3001\`completion.manualPath\` \u5B58\u5728\u540E\uFF0C\u518D\u8FDB\u5165\u5F00\u53D1\u3002\u4EC5\u624B\u518C\u786E\u8BA4\u6216\u5B58\u5728\u624B\u518C\u6587\u4EF6\u5747\u4E0D\u8DB3\u4EE5\u89E6\u53D1\u5F00\u53D1\uFF1B\`directive=finalize_required\` \u65F6\u5148\u6062\u590D\u6709\u6548\u4EA4\u4ED8\u3002\u6BCF\u6B21\u8FDB\u5165\u6216\u6062\u590D\u521B\u4F5C\u90FD\u5148\u5728\u5DE5\u7A0B\u76EE\u5F55\u6267\u884C \`buddy-cli init --mode create\`\uFF0C\u67E5\u8BE2\u516C\u5171 npm latest \u5E76\u5237\u65B0 HANDOFF\uFF0C\u4E0D\u76F4\u63A5\u8C03\u7528\u65E7\u9501\u8BB0\u5F55\u6216\u7F13\u5B58\u4E2D\u7684 Skill\u3002\u6700\u65B0\u7248 Creator \u7EDF\u4E00\u4F7F\u7528 workflowVersion=2 \u7684\u4E09\u518C\uFF1A\u5B9A\u4F4D\u3001\u77E5\u8BC6\u4E0E\u65B9\u6CD5\u3001\u4ED8\u8D39\u670D\u52A1\uFF1B\u65E7\u56DB\u518C\u7531 Creator \u7684 open \u4FDD\u5B58\u5386\u53F2\u540E\u8FC1\u79FB\uFF0C\u4FDD\u7559\u8EAB\u4EFD\u3001\u539F\u59CB\u8D44\u6599\u548C\u53EF\u590D\u7528\u8FDB\u5EA6\uFF0C\u8865\u9F50\u7F3A\u53E3\u5E76\u91CD\u65B0\u786E\u8BA4\u53D1\u751F\u53D8\u5316\u7684\u5185\u5BB9\u3002\u4E0D\u8981\u81EA\u884C\u6539\u5DE5\u4F5C\u6D41\u7248\u672C\u6216\u628A\u65E7\u5B8C\u6210\u6807\u8BB0\u5F53\u4F5C\u65B0\u4EA4\u4ED8\u3002
|
|
2964
2975
|
|
|
2965
|
-
\u5728\u5DF2\u6388\u6743\u7684\u5B8C\u6574\u521B\u5EFA\u4EFB\u52A1\u4E2D\uFF0C\u5F53\u524D Coding Agent \u9000\u51FA Skill \u540E\u4E8E\u540C\u4E00\u8F6E\u8BFB\u53D6 \`completion.manualPath\`\u3001\u540C\u76EE\u5F55\u5B9E\u9645 manifest\u3001\`sources.json\` \u4E0E\u6765\u6E90\u6620\u5C04\u53CA\u5C0F\u6302\u4EF6\u5B9E\u9645\u4EA7\u7269\uFF0C\u4E0D\u6309\u65E7\u56DB\u518C\u6587\u4EF6\u540D\u786C\u7F16\u7801\u4EA4\u4ED8\u6E05\u5355\
|
|
2976
|
+
\u5728\u5DF2\u6388\u6743\u7684\u5B8C\u6574\u521B\u5EFA\u4EFB\u52A1\u4E2D\uFF0C\u5F53\u524D Coding Agent \u9000\u51FA Skill \u540E\u4E8E\u540C\u4E00\u8F6E\u8BFB\u53D6 \`completion.manualPath\`\u3001\u540C\u76EE\u5F55\u5B9E\u9645 manifest\u3001\`sources.json\` \u4E0E\u6765\u6E90\u6620\u5C04\u53CA\u5C0F\u6302\u4EF6\u5B9E\u9645\u4EA7\u7269\uFF0C\u4E0D\u6309\u65E7\u56DB\u518C\u6587\u4EF6\u540D\u786C\u7F16\u7801\u4EA4\u4ED8\u6E05\u5355\u3002\u65B0\u7248\u4E09\u518C\u4EA4\u4ED8\u8FD8\u8BFB\u53D6 \`completion.capabilityContractPath\` \u6307\u5411\u7684\u80FD\u529B\u5951\u7EA6\uFF1B\u8FC1\u79FB\u540E\u7684\u9879\u76EE\u4E5F\u6309\u5F53\u524D\u4E09\u518C\u4E0E\u5951\u7EA6\u4EA4\u4ED8\uFF0C\u4E0D\u80FD\u8DF3\u8FC7\u65B0\u4EA4\u4ED8\u6821\u9A8C\u3002\u5B8C\u6574\u7406\u89E3\u5B9A\u4E49\u3001\u77E5\u8BC6\u3001\u65B9\u6CD5\u3001\u670D\u52A1\u3001\u8BBE\u8BA1\u9A8C\u6536\u8BB0\u5F55\u53CA\u5F85\u8865\u5145\u9879\uFF0C\u68C0\u67E5\u73B0\u6709\u5DE5\u7A0B\u5E76\u76F4\u63A5\u5F00\u59CB\u5B9E\u73B0\uFF0C\u4E0D\u518D\u7B49\u5F85\u4E00\u6B21\u5F00\u53D1\u786E\u8BA4\u3002\u624B\u518C\u51B3\u5B9A\u642D\u5B50\u5E94\u8BE5\u600E\u4E48\u505A\uFF0CCoding Agent \u8D1F\u8D23\u9009\u62E9\u5408\u9002\u7684\u5B9E\u73B0\uFF1B\u624B\u518C\u4E0D\u9700\u8981\u5217\u51FA Tool\u3001Skill\u3001Hook \u7B49\u6280\u672F\u540D\u8BCD\u3002
|
|
2966
2977
|
|
|
2967
2978
|
\u76F4\u63A5\u5F00\u53D1\u65F6\uFF0C\u4F7F\u7528\u5F00\u53D1\u8005\u5DF2\u63D0\u4F9B\u5E76\u786E\u8BA4\u7684\u9700\u6C42\uFF0C\u4E0D\u5F3A\u5236\u8865\u505A Creator \u6216\u5236\u9020\u4E00\u4EFD\u201C\u5DF2\u786E\u8BA4\u624B\u518C\u201D\u3002\u6240\u6709\u5DE5\u7A0B\u7EDF\u4E00\u4F7F\u7528\u5B98\u65B9 Runtime\u3002\u5DF2\u6709\u5B98\u65B9\u5DE5\u7A0B\u5148\u68C0\u67E5\u5F53\u524D\u4EE3\u7801\u548C\u914D\u7F6E\uFF0C\u590D\u7528\u6EE1\u8DB3\u8981\u6C42\u7684\u5B9E\u73B0\uFF1B\u5DE5\u7A0B\u5B8C\u6574\u65F6\u4E0D\u91CD\u590D init\uFF0C\u7F3A\u5C11\u6A21\u677F\u6587\u4EF6\u65F6\u7528 init --mode direct \u8865\u9F50\u3002
|
|
2968
2979
|
|
|
@@ -3006,7 +3017,7 @@ DEV \u542F\u52A8\u6216\u8FD0\u884C\u5931\u8D25\u65F6\uFF0C\u5148\u8BFB\u53D6\u98
|
|
|
3006
3017
|
|
|
3007
3018
|
### \u4E3B\u52A8\u63D0\u9192\u4E0E\u6570\u636E\u6743\u9650
|
|
3008
3019
|
|
|
3009
|
-
Creator \u5DE5\u4F5C\u6D41 2 \u7684 Booklet \u63D0\u4F9B\u300C\u5E73\u53F0\u80FD\u529B\u300D\u9875\u7B7E\uFF0C\u65B9\u6848\u552F\u4E00\u6765\u6E90\u662F\u670D\u52A1\u84DD\u56FE \`service.blueprint.data.capabilityPlan\`\u3002\u6309\u6709\u6548\u4EA4\u4ED8\u7684\u80FD\u529B\u5951\u7EA6\u5B9E\u73B0\u4E0E\u9A8C\u8BC1\u4E3B\u52A8\u63D0\u9192\u7684\u89E6\u53D1\u3001\u9891\u7387\u3001\u9759\u9ED8\u548C\u505C\u6B62\u7EA6\u5B9A\uFF0C\u4E0D\u56E0\u9875\u9762\u5C55\u793A\u5DF2\u91C7\u7528\u5C31\u5BA3\u79F0\u5DF2\u542F\u7528\u3002\u65E7\
|
|
3020
|
+
Creator \u5DE5\u4F5C\u6D41 2 \u7684 Booklet \u63D0\u4F9B\u300C\u5E73\u53F0\u80FD\u529B\u300D\u9875\u7B7E\uFF0C\u65B9\u6848\u552F\u4E00\u6765\u6E90\u662F\u670D\u52A1\u84DD\u56FE \`service.blueprint.data.capabilityPlan\`\u3002\u6309\u6709\u6548\u4EA4\u4ED8\u7684\u80FD\u529B\u5951\u7EA6\u5B9E\u73B0\u4E0E\u9A8C\u8BC1\u4E3B\u52A8\u63D0\u9192\u7684\u89E6\u53D1\u3001\u9891\u7387\u3001\u9759\u9ED8\u548C\u505C\u6B62\u7EA6\u5B9A\uFF0C\u4E0D\u56E0\u9875\u9762\u5C55\u793A\u5DF2\u91C7\u7528\u5C31\u5BA3\u79F0\u5DF2\u542F\u7528\u3002\u65E7\u8D44\u6599\u8FC1\u79FB\u65F6\u53EF\u8BFB\u53D6\u4EA4\u4ED8\u76EE\u5F55 \`service-blueprint.json\` \u7684 \`data.proactiveReminders\`\uFF1B\u5B57\u6BB5\u7F3A\u5931\u8868\u793A\u5C1A\u672A\u6574\u7406\uFF0C\u4E0D\u80FD\u64C5\u81EA\u6DFB\u52A0\u9ED8\u8BA4\u63D0\u9192\uFF0C\u4E5F\u4E0D\u81EA\u52A8\u8F6C\u6362\u6210\u65B0\u7248\u5951\u7EA6\u3002
|
|
3010
3021
|
|
|
3011
3022
|
\u5E73\u53F0\u6570\u636E\u6743\u9650\u76F4\u63A5\u8BFB\u53D6\u5F53\u524D\u5DE5\u7A0B\u7684 \`data-access.json.requirements\`\uFF1B\u6309\u5B9E\u9645\u9700\u8981\u7EF4\u62A4 ID \u548C\u7528\u9014\uFF0C\u4FDD\u5B58\u540E\u9875\u9762\u540C\u6B65\u3002\u80FD\u529B\u65B9\u6848\u4E0D\u7B49\u4E8E\u5B9E\u9645\u58F0\u660E\u6216\u7528\u6237\u6388\u6743\uFF1B\u7F3A\u5C11\u58F0\u660E\u6587\u4EF6\u3001\u58F0\u660E\u635F\u574F\u4E0E\u6709\u6548\u7A7A\u6570\u7EC4\u987B\u5206\u522B\u5904\u7406\u3002\u4E0D\u8981\u590D\u5236\u4E00\u4EFD\u5C55\u793A\u7528\u6743\u9650\u6E05\u5355\uFF0C\u4E5F\u4E0D\u8981\u628A\u4E1A\u52A1\u8BB0\u5F55\u6DF7\u4F5C\u5E73\u53F0\u6388\u6743\u3002
|
|
3012
3023
|
|
|
@@ -3101,7 +3112,7 @@ DEV \u5FC5\u987B\u7B49\u5230 Runtime \u521D\u59CB\u5316\u5B8C\u6210\u4E14\u5E73\
|
|
|
3101
3112
|
|
|
3102
3113
|
### \u6838\u5BF9\u5B9E\u73B0\uFF0C\u518D\u4EA4\u7ED9\u5F00\u53D1\u8005\u4F53\u9A8C
|
|
3103
3114
|
|
|
3104
|
-
Creator workflowVersion=2 \u7684\u80FD\u529B\u5951\u7EA6\u6309\u7A33\u5B9A\u9700\u6C42 ID \u843D\u5B9E\u3002\u8BFB\u53D6\u8BE5 Skill \u7684 \`references/implementation-handoff.md\`\uFF0C\u5728\u5DE5\u7A0B\u4E2D\u4FDD\u5B58 \`implementation-report.json\`\uFF0C\u7ED1\u5B9A\u5F53\u524D \`contractRevision\` \u4E0E \`sourceArtifact\`\uFF0C\u9010\u9879\u8BB0\u5F55\u5B9E\u9645\u5B9E\u73B0\u3001\u9A8C\u8BC1\u8BC1\u636E\u6216\u963B\u585E\u539F\u56E0\u3002\u4F7F\u7528 Skill \u7684 \`scripts/buddy.py handoff-check --contract <\u5B9E\u9645\u5951\u7EA6\u8DEF\u5F84> --report <\u5DE5\u7A0B\u62A5\u544A\u8DEF\u5F84>\` \u6838\u5BF9\uFF1B\u6CBF\u7528\u771F\u5B9E Python 3.9+\u3001\`-B\` \u4E0E \`PYTHONDONTWRITEBYTECODE=1\`\u3002\u8BE5\u547D\u4EE4\u53EA\u68C0\u67E5\u7248\u672C\u3001\u8986\u76D6\u548C\u62A5\u544A\u7ED3\u6784\uFF0C\u4E0D\u6267\u884C\u5DE5\u7A0B\uFF0C\u4E5F\u4E0D\u66FF\u4EE3\u771F\u5B9E Runtime \u9A8C\u8BC1\uFF1B\u7ED3\u6784\u5B8C\u6574\u4ECD\u53EF\u80FD\u6709 \`blockedIds\`\u3002\u5EF6\u671F\u6216\u4E0D\u9700\u8981\u7684\u80FD\u529B\u4E0D\u80FD\u5199\u6210\u672C\u671F\u5DF2\u542F\u7528\uFF0C\u8BBE\u8BA1\u53D8\u5316\u540E\u987B\u91CD\u65B0\u7ED1\u5B9A\u5F53\u524D\u5951\u7EA6\u3002\
|
|
3115
|
+
Creator workflowVersion=2 \u7684\u80FD\u529B\u5951\u7EA6\u6309\u7A33\u5B9A\u9700\u6C42 ID \u843D\u5B9E\u3002\u8BFB\u53D6\u8BE5 Skill \u7684 \`references/implementation-handoff.md\`\uFF0C\u5728\u5DE5\u7A0B\u4E2D\u4FDD\u5B58 \`implementation-report.json\`\uFF0C\u7ED1\u5B9A\u5F53\u524D \`contractRevision\` \u4E0E \`sourceArtifact\`\uFF0C\u9010\u9879\u8BB0\u5F55\u5B9E\u9645\u5B9E\u73B0\u3001\u9A8C\u8BC1\u8BC1\u636E\u6216\u963B\u585E\u539F\u56E0\u3002\u4F7F\u7528 Skill \u7684 \`scripts/buddy.py handoff-check --contract <\u5B9E\u9645\u5951\u7EA6\u8DEF\u5F84> --report <\u5DE5\u7A0B\u62A5\u544A\u8DEF\u5F84>\` \u6838\u5BF9\uFF1B\u6CBF\u7528\u771F\u5B9E Python 3.9+\u3001\`-B\` \u4E0E \`PYTHONDONTWRITEBYTECODE=1\`\u3002\u8BE5\u547D\u4EE4\u53EA\u68C0\u67E5\u7248\u672C\u3001\u8986\u76D6\u548C\u62A5\u544A\u7ED3\u6784\uFF0C\u4E0D\u6267\u884C\u5DE5\u7A0B\uFF0C\u4E5F\u4E0D\u66FF\u4EE3\u771F\u5B9E Runtime \u9A8C\u8BC1\uFF1B\u7ED3\u6784\u5B8C\u6574\u4ECD\u53EF\u80FD\u6709 \`blockedIds\`\u3002\u5EF6\u671F\u6216\u4E0D\u9700\u8981\u7684\u80FD\u529B\u4E0D\u80FD\u5199\u6210\u672C\u671F\u5DF2\u542F\u7528\uFF0C\u8BBE\u8BA1\u53D8\u5316\u540E\u987B\u91CD\u65B0\u7ED1\u5B9A\u5F53\u524D\u5951\u7EA6\u3002\u8FC1\u79FB\u540E\u7684\u9879\u76EE\u4F7F\u7528\u5F53\u524D\u80FD\u529B\u5951\u7EA6\u4E0E\u62A5\u544A\uFF0C\u65E7\u56DB\u518C\u4EA4\u4ED8\u53EA\u4F5C\u5386\u53F2\u53C2\u8003\u3002
|
|
3105
3116
|
|
|
3106
3117
|
\u5B8C\u6210\u5F00\u53D1\u540E\u5411\u5F00\u53D1\u8005\u7B80\u8981\u8BF4\u660E\uFF1A\u9700\u6C42\u6240\u5728\u7AE0\u8282\u6216\u6765\u6E90\u3001\u5BF9\u5E94\u5B9E\u73B0\u548C\u68C0\u67E5\u7ED3\u679C\u3001\u4ECD\u5B58\u5728\u7684\u7F3A\u53E3\uFF1B\u5185\u5BB9\u7B80\u5355\u65F6\u7528\u77ED\u6E05\u5355\u5373\u53EF\u3002\u9664\u4E0A\u8FF0\u5DE5\u4F5C\u6D41 2 \u5B9E\u65BD\u62A5\u544A\u5916\uFF0C\u4E0D\u8981\u6C42\u989D\u5916\u751F\u6210 README\u3001\u786E\u8BA4\u8868\u6216\u72B6\u6001\u6587\u4EF6\u3002\u533A\u5206\u5DF2\u5B9E\u73B0\u3001\u5F85\u5B9E\u73B0\u548C\u7F3A\u5C11\u6761\u4EF6\uFF0C\u4E0D\u628A\u8BA1\u5212\u5199\u6210\u5B8C\u6210\uFF1B\u4E0D\u8981\u590D\u5236\u79C1\u4EBA\u804A\u5929\u3001\u5065\u5EB7\u539F\u59CB\u8BB0\u5F55\u6216\u51ED\u636E\u3002\u6062\u590D\u5F00\u53D1\u65F6\u6309\u624B\u518C\u4E0E\u4EE3\u7801\u6838\u5BF9\uFF0C\u4E0D\u628A\u65E7\u8BF4\u660E\u5F53\u4F5C\u5F53\u524D\u5B9E\u73B0\u7684\u8BC1\u636E\u3002
|
|
3107
3118
|
|
|
@@ -3360,7 +3371,6 @@ var CLI_HELP = `\u642D\u642D Developer Platform CLI
|
|
|
3360
3371
|
preview \u8FDE\u63A5\u5DE5\u7A0B\u5E76\u6253\u5F00\u540E\u53F0\u5F00\u53D1\u8C03\u8BD5
|
|
3361
3372
|
push \u4E0A\u4F20\u7A0B\u5E8F\u5305\uFF0C\u53EF\u7528 --product \u540C\u6B65\u63D0\u4EA4\u5546\u54C1\u5BA1\u6838
|
|
3362
3373
|
products \u4E3A\u5DF2\u6709\u7248\u672C\u8865\u63D0\u5546\u54C1\uFF0C\u6216\u6062\u590D\u539F\u63D0\u5BA1\u8BF7\u6C42
|
|
3363
|
-
release \u4ECE\u660E\u786E\u56DE\u6267\u53D1\u5E03\uFF0C\u67E5\u8BE2\u3001\u6062\u590D\u3001\u91CD\u8BD5\u6216\u53D6\u6D88\u53D1\u5E03
|
|
3364
3374
|
status \u67E5\u770B\u4E91\u7AEF\u7248\u672C\u3001\u8FD0\u884C\u3001\u5BA1\u6838\u548C\u6784\u5EFA\u72B6\u6001
|
|
3365
3375
|
meta \u67E5\u770B\u4E91\u7AEF\u8D44\u6599\uFF1Bmeta update \u4FEE\u6539\u8D44\u6599\u6216\u66FF\u6362\u5934\u50CF
|
|
3366
3376
|
avatar \u65E7\u5934\u50CF\u547D\u4EE4\u517C\u5BB9\u5165\u53E3\uFF0C\u63A8\u8350 meta update --avatar
|
|
@@ -3393,12 +3403,12 @@ var INIT_HELP = `\u7528\u6CD5: buddy-cli init [\u53C2\u6570]
|
|
|
3393
3403
|
--confirm-meta \u58F0\u660E\u7528\u6237\u5DF2\u786E\u8BA4\u672C\u6B21\u8D44\u6599\u548C\u5B9E\u9645\u5934\u50CF\uFF1B\u672A\u786E\u8BA4\u4E0D\u5F97\u4F20\u5165
|
|
3394
3404
|
--buddy-id <\u642D\u5B50 ID> \u6062\u590D\u5F53\u524D\u8D26\u53F7\u5DF2\u6709\u642D\u5B50\uFF0C\u4E0D\u80FD\u81EA\u884C\u6307\u5B9A\u65B0\u8EAB\u4EFD
|
|
3395
3405
|
--avatar-skill-version <\u7248\u672C> \u5934\u50CF\u51C6\u5907\u65F6\u6307\u5B9A\u51C6\u786E Skill \u7248\u672C\uFF1B\u5DF2\u6709\u56FE\u7247\u53EF\u76F4\u63A5\u786E\u8BA4\u4E0A\u4F20
|
|
3396
|
-
--creator-version <\u7248\u672C> create \u6A21\u5F0F\u6307\u5B9A\u51C6\u786E Skill \u7248\u672C\uFF1B\u5DF2\u6709\u9879\u76EE\u9ED8\u8BA4\u590D\u7528\u56FA\u5B9A\u7248\u672C
|
|
3397
3406
|
|
|
3398
3407
|
\u65B0\u5EFA\u9700\u51C6\u5907\u540D\u79F0\u3001\u4ECB\u7ECD\u548C\u5934\u50CF\uFF0C\u786E\u8BA4\u540E\u624D\u5199\u5165\u5E73\u53F0\uFF1B\u672A\u5B8C\u6210\u65F6\u4FDD\u5B58 .buddy/meta/ \u8349\u7A3F\uFF0C\u8FD4\u56DE\u9000\u51FA\u7801 2\u3002
|
|
3399
3408
|
\u4EA4\u4E92\u65F6\u8BE2\u95EE\u7F3A\u5C11\u7684\u8D44\u6599\uFF1B\u975E\u4EA4\u4E92\u8C03\u7528\u9700\u663E\u5F0F\u63D0\u4F9B\u6A21\u5F0F\u548C\u65B0\u5EFA\u8D44\u6599\uFF0C\u53EF\u4ECE\u539F\u76EE\u5F55\u6062\u590D\u8349\u7A3F\u6216\u4E91\u7AEF\u8D44\u6599\u3002
|
|
3400
3409
|
direct \u751F\u6210\u65B0\u4E1A\u52A1\u5DE5\u5382\u524D\uFF0C\u6309\u5DE5\u7A0B Runtime \u5217\u51FA\u53EF\u7528\u6A21\u578B\u5E76\u7531\u5F00\u53D1\u8005\u786E\u8BA4\uFF1B\u5DF2\u6709\u4E1A\u52A1\u5DE5\u5382\u4FDD\u7559\u539F\u6A21\u578B\uFF0C\u4E0D\u4F20 --model\u3002
|
|
3401
3410
|
\u540C\u76EE\u5F55\u6062\u590D\u4FDD\u7559\u5DF2\u6709\u4E1A\u52A1\u6587\u4EF6\u3002create \u540E\u6309 .buddy/creator/HANDOFF.md \u7EE7\u7EED\uFF0Cdirect \u540E\u5B89\u88C5\u4F9D\u8D56\u5E76\u5B9E\u73B0\u4E1A\u52A1\u3002
|
|
3411
|
+
Creator \u6BCF\u6B21\u8FDB\u5165\u6216\u6062\u590D\u90FD\u67E5\u8BE2\u516C\u5171 npm latest\uFF1B\u6709 Creator \u8BB0\u5F55\u7684\u5B8C\u6574\u5DE5\u7A0B\u4E5F\u53EF\u6267\u884C create \u63A5\u7EED\u521B\u4F5C\uFF0C\u4E0D\u91CD\u5EFA\u4E1A\u52A1\u6587\u4EF6\u3002
|
|
3402
3412
|
\u5DF2\u767B\u8BB0\u642D\u5B50\u7684\u540D\u79F0\u3001\u4ECB\u7ECD\u6216\u5934\u50CF\u7528 buddy-cli meta update \u4FEE\u6539\uFF1Binit \u4E0D\u8986\u76D6\u4E91\u7AEF\u8D44\u6599\u3002
|
|
3403
3413
|
|
|
3404
3414
|
\u793A\u4F8B:
|
|
@@ -3451,9 +3461,9 @@ Coding Agent \u5E94\u76F4\u63A5\u6CBF\u7528\u7528\u6237\u660E\u786E\u63D0\u4F9B\
|
|
|
3451
3461
|
\u5934\u50CF Skill \u7248\u672C\u8BB0\u5F55\u5728 .buddy/meta/skill-lock.json\uFF1B--avatar-skill-version <\u51C6\u786E\u7248\u672C> \u663E\u5F0F\u9009\u62E9\u7248\u672C\uFF0C\u672C\u5730\u8054\u8C03\u8BBE\u7F6E BUDDY_AVATAR_SKILL_PATH \u7EDD\u5BF9\u8DEF\u5F84\u3002
|
|
3452
3462
|
\u666E\u901A\u7EC8\u7AEF\u53EF\u9009\u62E9\u5DF2\u6709\u56FE\u7247\uFF1BCLI \u4E0D\u6267\u884C\u56FE\u7247\u751F\u6210\uFF0C\u4E5F\u4E0D\u8981\u6C42\u5B89\u88C5 Coding Agent\u3002\u4F7F\u7528 --avatar <\u56FE\u7247\u6587\u4EF6> \u6307\u5B9A\u5019\u9009\u5934\u50CF\uFF0C\u7EC8\u7AEF\u9884\u89C8\u5E76\u786E\u8BA4\u540E\u767B\u8BB0\u3002
|
|
3453
3463
|
\u975E\u4EA4\u4E92\u8C03\u7528\u987B\u5728\u5F00\u53D1\u8005\u660E\u786E\u786E\u8BA4\u5B9E\u9645\u5934\u50CF\u548C\u8D44\u6599\u540E\u4F20 --avatar <\u5DF2\u786E\u8BA4\u56FE\u7247> --confirm-meta\u3002\u672A\u786E\u8BA4\u4E0D\u5F97\u4F20\u8BE5\u6807\u5FD7\uFF1B\u7F3A\u5C11\u56FE\u7247\u6216\u786E\u8BA4\u65F6\u9000\u51FA\u7801\u4E3A 2\uFF0C\u8349\u7A3F\u4FDD\u7559\uFF0C\u53EF\u4EE5\u5728\u539F\u76EE\u5F55\u7EE7\u7EED\u3002
|
|
3454
|
-
--mode create \u5B8C\u6210\u8D44\u6599\u548C\u5934\u50CF\u767B\u8BB0\u540E\uFF0C\u52A8\u6001\u83B7\u53D6\u72EC\u7ACB Creator Skill \u5E76\u751F\u6210\u63A5\u7EED\u8BF4\u660E\uFF0C\u652F\u6301 Creator \u63A5\u5165\u534F\u8BAE 1 \u548C 2\uFF1B\u9879\u76EE .buddy/creator/ \u4FDD\u5B58\u521B\u4F5C\u8D44\u6599\u4E0E skill-lock.json \u7248\u672C\u8BB0\u5F55\u3002\
|
|
3464
|
+
--mode create \u5B8C\u6210\u8D44\u6599\u548C\u5934\u50CF\u767B\u8BB0\u540E\uFF0C\u52A8\u6001\u83B7\u53D6\u72EC\u7ACB Creator Skill \u5E76\u751F\u6210\u63A5\u7EED\u8BF4\u660E\uFF0C\u652F\u6301 Creator \u63A5\u5165\u534F\u8BAE 1 \u548C 2\uFF1B\u9879\u76EE .buddy/creator/ \u4FDD\u5B58\u521B\u4F5C\u8D44\u6599\u4E0E skill-lock.json \u7248\u672C\u8BB0\u5F55\u3002\u6BCF\u6B21\u8FDB\u5165\u6216\u6062\u590D\u90FD\u67E5\u8BE2\u516C\u5171 npm latest\uFF0C\u786E\u8BA4\u662F\u6700\u65B0\u7248\u540E\u624D\u590D\u7528\u7F13\u5B58\uFF1Bskill-lock.json \u53EA\u8BB0\u5F55\u672C\u6B21\u7248\u672C\uFF0C\u4E0D\u56FA\u5B9A\u65E7\u7248\u672C\u3002\u67E5\u8BE2\u3001\u4E0B\u8F7D\u6216\u534F\u8BAE\u6821\u9A8C\u5931\u8D25\u65F6\u660E\u786E\u62A5\u9519\uFF0C\u4E0D\u9000\u56DE\u65E7\u7248\u3002\u672C\u5730\u8054\u8C03\u53EF\u663E\u5F0F\u8BBE\u7F6E BUDDY_CREATOR_SKILL_PATH \u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u6E05\u9664\u540E\u6062\u590D\u67E5\u8BE2 latest\u3002
|
|
3455
3465
|
\u7531\u5F53\u524D Coding Agent \u8BFB\u53D6 .buddy/creator/HANDOFF.md \u5E76\u6267\u884C\u5176\u4E2D\u6307\u5411\u7684 Skill\uFF1B\u9700\u8981 Python 3.9+\uFF0C\u4E0D\u542F\u52A8\u65E7\u91C7\u8BBF Web \u6216\u72EC\u7ACB\u6A21\u578B\u3002
|
|
3456
|
-
\u6309\u5F53\u524D\u4F5C\u54C1\u5DE5\u4F5C\u6D41\u5B8C\u6210\u9700\u6C42\u3001\u5C0F\u6302\u4EF6\u6E05\u5355\u3001\u539F\u578B\u548C\u8BBE\u8BA1\u9A8C\u6536\uFF1B\u53EA\u6709\u4EA4\u4ED8\u6821\u9A8C\u8FD4\u56DE creator_complete\u3001completion.status=ready \u4E14\u4EA4\u4ED8\u6709\u6548\u540E\uFF0C\u624D\u7531 Coding Agent \u81EA\u52A8\u8854\u63A5\u5F00\u53D1\u3002\u8BFB\u53D6\u5B9E\u9645 manifest\uFF0C\u4E0D\u786C\u7F16\u7801\u624B\u518C\u6570\u91CF\u6216\u6587\u4EF6\u540D\
|
|
3466
|
+
\u6309\u5F53\u524D\u4F5C\u54C1\u5DE5\u4F5C\u6D41\u5B8C\u6210\u9700\u6C42\u3001\u5C0F\u6302\u4EF6\u6E05\u5355\u3001\u539F\u578B\u548C\u8BBE\u8BA1\u9A8C\u6536\uFF1B\u53EA\u6709\u4EA4\u4ED8\u6821\u9A8C\u8FD4\u56DE creator_complete\u3001completion.status=ready \u4E14\u4EA4\u4ED8\u6709\u6548\u540E\uFF0C\u624D\u7531 Coding Agent \u81EA\u52A8\u8854\u63A5\u5F00\u53D1\u3002\u8BFB\u53D6\u5B9E\u9645 manifest\uFF0C\u4E0D\u786C\u7F16\u7801\u624B\u518C\u6570\u91CF\u6216\u6587\u4EF6\u540D\uFF1B\u65B0\u7248\u4E09\u518C\u8FD8\u6309\u80FD\u529B\u5951\u7EA6\u5B8C\u6210\u5B9E\u65BD\u62A5\u544A\u548C handoff-check\uFF0C\u7ED3\u6784\u6821\u9A8C\u4E0D\u7B49\u4E8E\u771F\u5B9E Runtime \u9A8C\u8BC1\u3002\u65E7\u56DB\u518C\u7531\u6700\u65B0\u7248 Creator \u4FDD\u5B58\u5386\u53F2\u540E\u8FC1\u79FB\u4E3A\u4E09\u518C\uFF0C\u590D\u7528\u8D44\u6599\u548C\u8FDB\u5EA6\uFF0C\u8865\u9F50\u7F3A\u53E3\u5E76\u91CD\u65B0\u786E\u8BA4\u53D8\u5316\u5185\u5BB9\uFF1B\u4E0D\u76F4\u63A5\u6CBF\u7528\u65E7\u4EA4\u4ED8\u7684\u5B8C\u6210\u6807\u8BB0\u3002\u9700\u8981\u521D\u59CB\u5316\u65F6\u6267\u884C init --mode direct \u751F\u6210\u5B98\u65B9 Runtime \u5DE5\u7A0B\u3002\u751F\u6210\u65B0\u5DE5\u5382\u524D\u5217\u51FA\u6240\u9009 Runtime \u652F\u6301\u7684\u6A21\u578B\uFF0C\u5148\u8BF7\u5F00\u53D1\u8005\u660E\u786E\u9009\u62E9\uFF0C\u518D\u4F20 --model\uFF1B\u5DF2\u6709\u660E\u786E\u9009\u62E9\u4E0D\u91CD\u590D\u8BE2\u95EE\uFF0C\u4E0D\u80FD\u7531 Coding Agent \u81EA\u884C\u9ED8\u8BA4\u3002\u5DF2\u6709\u4E1A\u52A1\u5DE5\u5382\u6CBF\u7528\u539F\u6A21\u578B\uFF0C\u4E0D\u4F20 --model\u3002\u540C\u76EE\u5F55\u6062\u590D\u65F6\u4ECE package.json \u8BFB\u53D6 buddyId\uFF0C\u5E76\u4F7F\u7528\u5E73\u53F0\u6700\u65B0 Meta\u3002
|
|
3457
3467
|
Coding Agent \u5E94\u4F20\u5165\u6309\u4E0A\u8FF0\u89C4\u5219\u786E\u5B9A\u7684\u8D44\u6599\uFF0C\u811A\u672C\u4F7F\u7528\u5F00\u53D1\u8005\u63D0\u4F9B\u7684\u53C2\u6570\uFF0C\u907F\u514D\u7B49\u5F85\u7EC8\u7AEF\u8F93\u5165\u3002CLI \u6821\u9A8C\u53C2\u6570\uFF0C\u4E0D\u5224\u65AD\u5BF9\u8BDD\u4E2D\u662F\u5426\u5DF2\u7ECF\u786E\u8BA4\uFF1B\u53C2\u6570\u9F50\u5168\u4E0D\u7B49\u4E8E\u7528\u6237\u786E\u8BA4\u3002
|
|
3458
3468
|
Coding Agent \u6839\u636E\u5DF2\u786E\u8BA4\u624B\u518C\u6216\u9700\u6C42\u63A8\u8FDB\u5B9E\u73B0\uFF1B\u53EA\u4E3A\u5173\u952E\u7F3A\u53E3\u8BE2\u95EE\uFF0C\u4E0D\u56FA\u5B9A\u8FFD\u52A0\u7B56\u7565\u786E\u8BA4\u3002
|
|
3459
3469
|
\u6240\u6709\u642D\u5B50\u7EDF\u4E00\u4F7F\u7528\u5B98\u65B9 Runtime\uFF1B\u9700\u6C42\u660E\u786E\u65F6\u4F7F\u7528 --mode direct\uFF0C\u9700\u8981\u68B3\u7406\u9700\u6C42\u65F6\u4F7F\u7528 --mode create\u3002
|
|
@@ -5369,21 +5379,12 @@ function parsePackagePush(value) {
|
|
|
5369
5379
|
if (operationId(p.pushId) !== metadata.pushId) invalid2("\u4E0A\u4F20\u56DE\u6267 ID \u4E0E\u5143\u6570\u636E\u4E0D\u5339\u914D");
|
|
5370
5380
|
return { pushId: metadata.pushId, uploadVersion: p.uploadVersion, status: p.status, metadata, reviewIds: selectedReviewIds(p.reviewIds), failure: p.failure ?? null };
|
|
5371
5381
|
}
|
|
5372
|
-
function parseProductRelease(value) {
|
|
5373
|
-
const r = record(value);
|
|
5374
|
-
if (r.mode !== "with_buddy" && r.mode !== "products_only") invalid2("\u53D1\u5E03\u6A21\u5F0F\u65E0\u6548");
|
|
5375
|
-
if (!["accepted", "activating", "active", "failed", "cancelled"].includes(String(r.status))) invalid2("\u53D1\u5E03\u64CD\u4F5C\u72B6\u6001\u65E0\u6548");
|
|
5376
|
-
if (typeof r.buddyVersion !== "string" || !r.buddyVersion.trim() || /[\u0000-\u001f\u007f]/u.test(r.buddyVersion)) invalid2("\u53D1\u5E03\u7248\u672C\u65E0\u6548");
|
|
5377
|
-
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 } };
|
|
5378
|
-
}
|
|
5379
5382
|
var CloudOperationError = class extends CloudLifecycleError {
|
|
5380
|
-
constructor(code2, message, details, push
|
|
5383
|
+
constructor(code2, message, details, push) {
|
|
5381
5384
|
super(code2, message, details);
|
|
5382
5385
|
this.push = push;
|
|
5383
|
-
this.release = release;
|
|
5384
5386
|
}
|
|
5385
5387
|
push;
|
|
5386
|
-
release;
|
|
5387
5388
|
};
|
|
5388
5389
|
function sameReviewIds(a, b) {
|
|
5389
5390
|
return [...a].sort().join("\0") === [...b].sort().join("\0");
|
|
@@ -5421,7 +5422,7 @@ var OperationStore = class {
|
|
|
5421
5422
|
}
|
|
5422
5423
|
async save(record3) {
|
|
5423
5424
|
const prior = await this.read(record3.id, record3.kind);
|
|
5424
|
-
const input = (r) => r.kind === "push" ? r.metadata :
|
|
5425
|
+
const input = (r) => r.kind === "push" ? r.metadata : { version: r.version, reviews: r.reviews };
|
|
5425
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");
|
|
5426
5427
|
const temporary = this.path(`${record3.id}_${randomUUID8()}`);
|
|
5427
5428
|
await writeFile8(temporary, JSON.stringify({ identity: this.identity, operation: record3 }), { flag: "wx", mode: 384 });
|
|
@@ -5437,11 +5438,6 @@ var OperationStore = class {
|
|
|
5437
5438
|
if (r.metadata.pushId !== id) throw new Error("push mismatch");
|
|
5438
5439
|
if (r.receipt) parsePackagePush(r.receipt);
|
|
5439
5440
|
}
|
|
5440
|
-
if (r.kind === "release") {
|
|
5441
|
-
parseProductRelease({ ...r.request, status: "accepted" });
|
|
5442
|
-
if (r.request.releaseId !== id) throw new Error("release mismatch");
|
|
5443
|
-
if (r.receipt) parseProductRelease(r.receipt);
|
|
5444
|
-
}
|
|
5445
5441
|
if (r.kind === "submission") {
|
|
5446
5442
|
if (typeof r.version !== "string" || !r.version.trim() || typeof r.confirmed !== "boolean" || r.reviews.length === 0) throw new Error("submission invalid");
|
|
5447
5443
|
parsePushMetadata({ pushId: id, commit: "validate", sourceSha256: "0".repeat(64), productReviews: r.reviews });
|
|
@@ -5466,7 +5462,7 @@ var OperationStore = class {
|
|
|
5466
5462
|
var PRODUCT_HELP = {
|
|
5467
5463
|
push: `\u7528\u6CD5: buddy-cli push --commit <\u6539\u52A8\u8BF4\u660E> [--product <\u5546\u54C1 ID> ...] [--directory <\u76EE\u5F55>]
|
|
5468
5464
|
buddy-cli push --resume <pushId> | --status <pushId> [--directory <\u76EE\u5F55>]
|
|
5469
|
-
\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\
|
|
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
|
|
5470
5466
|
\u5546\u54C1 ID \u793A\u4F8B\uFF1Aprd_12345678\uFF1B\u5DF2\u6709 ps_ \u5546\u54C1 ID \u7EE7\u7EED\u517C\u5BB9\u3002
|
|
5471
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
|
|
5472
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`,
|
|
@@ -5474,13 +5470,7 @@ var PRODUCT_HELP = {
|
|
|
5474
5470
|
buddy-cli products submit --resume <submissionId> [--directory <\u76EE\u5F55>]
|
|
5475
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
|
|
5476
5472
|
\u5546\u54C1 ID \u793A\u4F8B\uFF1Aprd_12345678\uFF1B\u5DF2\u6709 ps_ \u5546\u54C1 ID \u7EE7\u7EED\u517C\u5BB9\u3002
|
|
5477
|
-
\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
|
|
5478
|
-
release: `\u7528\u6CD5: buddy-cli release (--from-push <pushId> | --from-submission <submissionId>) [--products-only] [--directory <\u76EE\u5F55>]
|
|
5479
|
-
buddy-cli release --version <\u7248\u672C> --code-only [--directory <\u76EE\u5F55>]
|
|
5480
|
-
buddy-cli release (--resume | --status | --retry | --cancel) <releaseId> [--directory <\u76EE\u5F55>]
|
|
5481
|
-
\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
|
|
5482
|
-
\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
|
|
5483
|
-
\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`
|
|
5484
5474
|
};
|
|
5485
5475
|
function parse2(command, args) {
|
|
5486
5476
|
if (command === "products") {
|
|
@@ -5489,15 +5479,11 @@ function parse2(command, args) {
|
|
|
5489
5479
|
}
|
|
5490
5480
|
const values = /* @__PURE__ */ new Map();
|
|
5491
5481
|
const products = [];
|
|
5492
|
-
const allowed = command === "push" ? ["--commit", "--resume", "--status", "--product"] :
|
|
5482
|
+
const allowed = command === "push" ? ["--commit", "--resume", "--status", "--product"] : ["--version", "--resume", "--product"];
|
|
5493
5483
|
for (let i = 0; i < args.length; i++) {
|
|
5494
5484
|
const flag2 = args[i];
|
|
5495
5485
|
if (flag2 !== "--directory" && !allowed.includes(flag2)) throw new CloudCommandUsageError(`\u672A\u77E5\u53C2\u6570 ${flag2}`);
|
|
5496
5486
|
if (flag2 !== "--product" && values.has(flag2)) throw new CloudCommandUsageError(`${flag2} \u4E0D\u80FD\u91CD\u590D`);
|
|
5497
|
-
if (["--code-only", "--products-only"].includes(flag2)) {
|
|
5498
|
-
values.set(flag2, "true");
|
|
5499
|
-
continue;
|
|
5500
|
-
}
|
|
5501
5487
|
const value = args[++i];
|
|
5502
5488
|
if (!value?.trim() || value.startsWith("--") || /[\u0000-\u001f\u007f]/u.test(value)) throw new CloudCommandUsageError(`${flag2} \u7F3A\u5C11\u6709\u6548\u503C`);
|
|
5503
5489
|
if (flag2 === "--product") {
|
|
@@ -5506,12 +5492,12 @@ function parse2(command, args) {
|
|
|
5506
5492
|
} else values.set(flag2, value.trim());
|
|
5507
5493
|
}
|
|
5508
5494
|
if (products.length > 10) throw new CloudCommandUsageError("\u4E00\u6B21\u6700\u591A\u9009\u62E9 10 \u4E2A\u5546\u54C1");
|
|
5509
|
-
const recovery = ["--resume", "--status"
|
|
5495
|
+
const recovery = ["--resume", "--status"].filter((f) => values.has(f));
|
|
5510
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");
|
|
5511
5497
|
return { values, products };
|
|
5512
5498
|
}
|
|
5513
5499
|
function required(value) {
|
|
5514
|
-
if (!value) throw new CloudCommandUsageError("\u5E73\u53F0 Adapter \u5C1A\u672A\u652F\u6301\u5546\u54C1\u4E0A\u4F20\u548C\
|
|
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");
|
|
5515
5501
|
return value;
|
|
5516
5502
|
}
|
|
5517
5503
|
function responseError(message) {
|
|
@@ -5547,10 +5533,10 @@ function showPush(io, push) {
|
|
|
5547
5533
|
if (failureMessage(push.failure)) io.writeError(`\u539F\u56E0\uFF1A${failureMessage(push.failure)}`);
|
|
5548
5534
|
if (push.reviewIds.length) io.write(`\u5546\u54C1\u5BA1\u6838\u7F16\u53F7\uFF1A${push.reviewIds.join(", ")}`);
|
|
5549
5535
|
if (push.status === "completed") {
|
|
5550
|
-
io.write(
|
|
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");
|
|
5551
5537
|
return 0;
|
|
5552
5538
|
}
|
|
5553
|
-
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\
|
|
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`);
|
|
5554
5540
|
else io.writeError(`\u4E0A\u4F20\u672A\u5B8C\u6210\uFF0C\u4F7F\u7528 buddy-cli push --resume ${push.pushId} \u6062\u590D\u539F\u8BF7\u6C42\u3002`);
|
|
5555
5541
|
return 1;
|
|
5556
5542
|
}
|
|
@@ -5590,23 +5576,6 @@ async function executePush(record3, sourceBundle, store, client, id, io, options
|
|
|
5590
5576
|
throw cause;
|
|
5591
5577
|
}
|
|
5592
5578
|
}
|
|
5593
|
-
function matchRelease(request, release) {
|
|
5594
|
-
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");
|
|
5595
|
-
}
|
|
5596
|
-
function showRelease(io, release) {
|
|
5597
|
-
io.write(`\u53D1\u5E03\u7F16\u53F7\uFF1A${release.releaseId}`);
|
|
5598
|
-
io.write(`\u53D1\u5E03\u72B6\u6001\uFF1A${release.status}`);
|
|
5599
|
-
io.write(`\u76EE\u6807\u7248\u672C\uFF1A${release.buddyVersion}`);
|
|
5600
|
-
if (failureMessage(release.failure)) io.writeError(`\u539F\u56E0\uFF1A${failureMessage(release.failure)}`);
|
|
5601
|
-
if (release.status === "active") {
|
|
5602
|
-
io.write("\u53D1\u5E03\u5DF2\u751F\u6548\u3002");
|
|
5603
|
-
return 0;
|
|
5604
|
-
}
|
|
5605
|
-
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`);
|
|
5606
|
-
else if (release.status === "cancelled") io.write("\u8BE5\u53D1\u5E03\u5DF2\u53D6\u6D88\u3002");
|
|
5607
|
-
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`);
|
|
5608
|
-
return 1;
|
|
5609
|
-
}
|
|
5610
5579
|
async function runProductLifecycle(command, args, io, options) {
|
|
5611
5580
|
if (args.length === 1 && ["--help", "-h"].includes(args[0]) || command === "products" && args.length === 2 && args[0] === "submit" && args[1] === "--help") {
|
|
5612
5581
|
io.write(PRODUCT_HELP[command]);
|
|
@@ -5614,7 +5583,7 @@ async function runProductLifecycle(command, args, io, options) {
|
|
|
5614
5583
|
}
|
|
5615
5584
|
const p = parse2(command, args);
|
|
5616
5585
|
const v = p.values;
|
|
5617
|
-
if (options.mode === "local-mock") throw new CloudCommandUsageError("\u672C\u5730\u6A21\u62DF\u6A21\u5F0F\u4E0D\u4F1A\u4F2A\u9020\u6B63\u5F0F push \u6216\
|
|
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");
|
|
5618
5587
|
const freshPush = command === "push" && !v.has("--resume") && !v.has("--status");
|
|
5619
5588
|
const root = await (options.resolveProjectRoot ?? (freshPush ? requireBuddyAgentProjectRoot : requireBuddyProjectRoot))(resolve15(options.cwd ?? process.cwd(), v.get("--directory") ?? "."));
|
|
5620
5589
|
const platform = resolvePlatformUrl({ env: options.runtimeUpdate?.env });
|
|
@@ -5655,83 +5624,25 @@ async function runProductLifecycle(command, args, io, options) {
|
|
|
5655
5624
|
io.write(`\u6062\u590D\u7F16\u53F7\uFF1A${pushId}`);
|
|
5656
5625
|
return executePush(record4, bundle, store, client, id, io, options);
|
|
5657
5626
|
}
|
|
5658
|
-
if (command === "products") {
|
|
5659
|
-
let record4;
|
|
5660
|
-
if (v.has("--resume")) record4 = await store.read(v.get("--resume"), "submission");
|
|
5661
|
-
else {
|
|
5662
|
-
const version = v.get("--version");
|
|
5663
|
-
if (!version || !p.products.length) throw new CloudCommandUsageError(PRODUCT_HELP.products);
|
|
5664
|
-
const chosen = await selection(client, id, p.products, io);
|
|
5665
|
-
record4 = { kind: "submission", id: `sub_${randomUUID9()}`, version, reviews: chosen.reviews, confirmed: false };
|
|
5666
|
-
await store.create(record4);
|
|
5667
|
-
}
|
|
5668
|
-
io.write(`\u5546\u54C1\u63D0\u4EA4\u7F16\u53F7\uFF1A${record4.id}`);
|
|
5669
|
-
try {
|
|
5670
|
-
const receipt = await required(client.submitPackageProducts).call(client, { id, version: record4.version, reviews: record4.reviews });
|
|
5671
|
-
if (!sameReviewIds(receipt.reviewIds, record4.reviews.map((r) => r.reviewId))) responseError("\u5E73\u53F0\u672A\u786E\u8BA4\u5B8C\u6574\u5546\u54C1\u5BA1\u6838\u96C6\u5408");
|
|
5672
|
-
await store.save({ ...record4, confirmed: true });
|
|
5673
|
-
io.write(`\u5546\u54C1\u5DF2\u63D0\u4EA4\u5BA1\u6838\uFF1A${receipt.reviewIds.join(", ")}`);
|
|
5674
|
-
io.write(`\u5BA1\u6838\u901A\u8FC7\u540E\uFF1Abuddy-cli release --from-submission ${record4.id}`);
|
|
5675
|
-
return { exitCode: 0, buddyId: id, version: record4.version };
|
|
5676
|
-
} catch (cause) {
|
|
5677
|
-
io.writeError(`\u4FDD\u7559\u539F\u8BF7\u6C42\u91CD\u8BD5\uFF1Abuddy-cli products submit --resume ${record4.id}`);
|
|
5678
|
-
throw cause;
|
|
5679
|
-
}
|
|
5680
|
-
}
|
|
5681
|
-
const action = ["--resume", "--status", "--retry", "--cancel"].find((f) => v.has(f));
|
|
5682
5627
|
let record3;
|
|
5683
|
-
if (
|
|
5684
|
-
|
|
5685
|
-
|
|
5686
|
-
|
|
5687
|
-
|
|
5688
|
-
|
|
5689
|
-
}
|
|
5690
|
-
record3 = await store.read(releaseId, "release");
|
|
5691
|
-
} else {
|
|
5692
|
-
const sources = ["--from-push", "--from-submission", "--version"].filter((f) => v.has(f));
|
|
5693
|
-
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);
|
|
5694
|
-
let version;
|
|
5695
|
-
let reviewIds;
|
|
5696
|
-
if (v.has("--from-push")) {
|
|
5697
|
-
const pushRecord = await store.read(v.get("--from-push"), "push");
|
|
5698
|
-
const receipt = await required(client.getPackagePush).call(client, { id, pushId: pushRecord.id });
|
|
5699
|
-
confirmPush(pushRecord, receipt);
|
|
5700
|
-
await store.save({ ...pushRecord, receipt });
|
|
5701
|
-
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");
|
|
5702
|
-
version = receipt.uploadVersion;
|
|
5703
|
-
reviewIds = receipt.reviewIds;
|
|
5704
|
-
} else if (v.has("--from-submission")) {
|
|
5705
|
-
const submission = await store.read(v.get("--from-submission"), "submission");
|
|
5706
|
-
if (!submission.confirmed) throw new CloudCommandUsageError(`\u8865\u63D0\u7ED3\u679C\u5C1A\u672A\u786E\u8BA4\uFF0C\u8BF7\u5148 products submit --resume ${submission.id}`);
|
|
5707
|
-
version = submission.version;
|
|
5708
|
-
reviewIds = submission.reviews.map((r) => r.reviewId);
|
|
5709
|
-
} else {
|
|
5710
|
-
version = v.get("--version");
|
|
5711
|
-
reviewIds = [];
|
|
5712
|
-
}
|
|
5713
|
-
if (v.has("--products-only")) {
|
|
5714
|
-
if (!reviewIds.length) throw new CloudCommandUsageError("--products-only \u9700\u8981\u660E\u786E\u7684\u5546\u54C1\u5BA1\u6838\u96C6\u5408");
|
|
5715
|
-
const buddy2 = await client.getBuddy({ id });
|
|
5716
|
-
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");
|
|
5717
|
-
}
|
|
5718
|
-
const releaseId = `rel_${randomUUID9()}`;
|
|
5719
|
-
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 };
|
|
5720
5634
|
await store.create(record3);
|
|
5721
5635
|
}
|
|
5722
|
-
io.write(`\
|
|
5636
|
+
io.write(`\u5546\u54C1\u63D0\u4EA4\u7F16\u53F7\uFF1A${record3.id}`);
|
|
5723
5637
|
try {
|
|
5724
|
-
const receipt =
|
|
5725
|
-
|
|
5726
|
-
await store.save({ ...record3,
|
|
5727
|
-
|
|
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 };
|
|
5728
5644
|
} catch (cause) {
|
|
5729
|
-
|
|
5730
|
-
matchRelease(record3.request, cause.release);
|
|
5731
|
-
await store.save({ ...record3, receipt: cause.release });
|
|
5732
|
-
showRelease(io, cause.release);
|
|
5733
|
-
}
|
|
5734
|
-
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}`);
|
|
5735
5646
|
throw cause;
|
|
5736
5647
|
}
|
|
5737
5648
|
}
|
|
@@ -6109,7 +6020,7 @@ function serverError(response, body) {
|
|
|
6109
6020
|
return new CloudOperationError(code2, message, {
|
|
6110
6021
|
httpStatus: response.status,
|
|
6111
6022
|
retryable: response.status === 408 || response.status === 429 || response.status >= 500
|
|
6112
|
-
}, source?.push === void 0 ? void 0 : parsePackagePush(source.push)
|
|
6023
|
+
}, source?.push === void 0 ? void 0 : parsePackagePush(source.push));
|
|
6113
6024
|
}
|
|
6114
6025
|
var HttpDeveloperPlatformClient = class {
|
|
6115
6026
|
#baseUrl;
|
|
@@ -6276,24 +6187,6 @@ var HttpDeveloperPlatformClient = class {
|
|
|
6276
6187
|
const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/packages/${encodeURIComponent(request.version)}/product-reviews`, "POST", { json: { reviews: request.reviews } }), "response");
|
|
6277
6188
|
return { reviewIds: selectedReviewIds(source.reviewIds) };
|
|
6278
6189
|
}
|
|
6279
|
-
async createProductRelease(request) {
|
|
6280
|
-
const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/product-releases`, "POST", { json: request.release }), "response");
|
|
6281
|
-
return parseProductRelease(source.release);
|
|
6282
|
-
}
|
|
6283
|
-
async getProductRelease(request) {
|
|
6284
|
-
const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/product-releases/${encodeURIComponent(request.releaseId)}`, "GET"), "response");
|
|
6285
|
-
const release = parseProductRelease(source.release);
|
|
6286
|
-
if (release.releaseId !== request.releaseId) throw invalid3("\u53D1\u5E03\u56DE\u6267 ID \u4E0D\u5339\u914D");
|
|
6287
|
-
return release;
|
|
6288
|
-
}
|
|
6289
|
-
async retryProductRelease(request) {
|
|
6290
|
-
const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/product-releases/${encodeURIComponent(request.releaseId)}/retry`, "POST"), "response");
|
|
6291
|
-
return parseProductRelease(source.release);
|
|
6292
|
-
}
|
|
6293
|
-
async cancelProductRelease(request) {
|
|
6294
|
-
const source = object3(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/product-releases/${encodeURIComponent(request.releaseId)}/cancel`, "POST"), "response");
|
|
6295
|
-
return parseProductRelease(source.release);
|
|
6296
|
-
}
|
|
6297
6190
|
async getPackageBuild(request) {
|
|
6298
6191
|
return parseBuild(await this.#request(`/cli/buddies/${encodeURIComponent(request.id)}/packages/${encodeURIComponent(request.version)}/build`, "GET"));
|
|
6299
6192
|
}
|
|
@@ -6424,7 +6317,6 @@ var HELP = Object.freeze({
|
|
|
6424
6317
|
logout: "\u7528\u6CD5: buddy-cli logout",
|
|
6425
6318
|
push: PRODUCT_HELP.push,
|
|
6426
6319
|
products: PRODUCT_HELP.products,
|
|
6427
|
-
release: PRODUCT_HELP.release,
|
|
6428
6320
|
status: "\u7528\u6CD5: buddy-cli status [--directory <\u9879\u76EE\u76EE\u5F55>]",
|
|
6429
6321
|
meta: `\u7528\u6CD5: buddy-cli meta [--directory <\u9879\u76EE\u76EE\u5F55> | --buddy-id <\u642D\u5B50 ID>]
|
|
6430
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>]
|
|
@@ -6608,7 +6500,7 @@ async function runMeta(parsed, io, options, legacyAvatar = false) {
|
|
|
6608
6500
|
}
|
|
6609
6501
|
async function runCloudCommand(command, args, io, options = {}) {
|
|
6610
6502
|
try {
|
|
6611
|
-
if (command === "push" || command === "products"
|
|
6503
|
+
if (command === "push" || command === "products") return await runProductLifecycle(command, args, io, options);
|
|
6612
6504
|
const parsed = parse3(args, command);
|
|
6613
6505
|
if (parsed.help) {
|
|
6614
6506
|
io.write(HELP[command]);
|
|
@@ -6653,7 +6545,7 @@ async function runCloudCommand(command, args, io, options = {}) {
|
|
|
6653
6545
|
exitCode: cause instanceof CloudCommandUsageError || cause instanceof BuddyProjectContextError ? 2 : 1
|
|
6654
6546
|
};
|
|
6655
6547
|
}
|
|
6656
|
-
if (["push", "products"
|
|
6548
|
+
if (["push", "products"].includes(command)) {
|
|
6657
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"}`);
|
|
6658
6550
|
return { exitCode: 1 };
|
|
6659
6551
|
}
|
|
@@ -8451,6 +8343,7 @@ function parseInitArguments(args) {
|
|
|
8451
8343
|
parsed.confirmMeta = true;
|
|
8452
8344
|
continue;
|
|
8453
8345
|
}
|
|
8346
|
+
if (flag2 === "--creator-version") throw new CliUsageError("--creator-version \u5DF2\u505C\u6B62\u4F7F\u7528\uFF1BCreator \u6BCF\u6B21\u8FDB\u5165\u6216\u6062\u590D\u90FD\u4F7F\u7528\u516C\u5171 npm latest \u6700\u65B0\u6B63\u5F0F\u7248\u3002");
|
|
8454
8347
|
const value = valueAfterFlag(args, index, flag2 ?? "\u53C2\u6570");
|
|
8455
8348
|
index += 1;
|
|
8456
8349
|
switch (flag2) {
|
|
@@ -8483,10 +8376,6 @@ function parseInitArguments(args) {
|
|
|
8483
8376
|
if (!/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/u.test(value)) throw new CliUsageError("--avatar-skill-version \u5FC5\u987B\u662F\u51C6\u786E\u7248\u672C\uFF0C\u4F8B\u5982 1.0.0");
|
|
8484
8377
|
parsed.avatarSkillVersion = setOnce2(parsed.avatarSkillVersion, value, flag2);
|
|
8485
8378
|
break;
|
|
8486
|
-
case "--creator-version":
|
|
8487
|
-
if (!/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/u.test(value)) throw new CliUsageError("--creator-version \u5FC5\u987B\u662F\u51C6\u786E\u7248\u672C\uFF0C\u4F8B\u5982 1.6.0");
|
|
8488
|
-
parsed.creatorVersion = setOnce2(parsed.creatorVersion, value, flag2);
|
|
8489
|
-
break;
|
|
8490
8379
|
case "--avatar":
|
|
8491
8380
|
parsed.avatar = setOnce2(parsed.avatar, value, flag2);
|
|
8492
8381
|
break;
|
|
@@ -8498,7 +8387,6 @@ function parseInitArguments(args) {
|
|
|
8498
8387
|
}
|
|
8499
8388
|
}
|
|
8500
8389
|
if (parsed.model !== void 0 && parsed.mode !== "direct") throw new CliUsageError("--model \u4EC5\u7528\u4E8E --mode direct\uFF1Bcreate \u68B3\u7406\u5B8C\u6210\u540E\u5728\u8FDB\u5165\u5DE5\u7A0B\u5F00\u53D1\u65F6\u786E\u8BA4\u6A21\u578B\u3002");
|
|
8501
|
-
if (parsed.creatorVersion && parsed.mode !== "create") throw new CliUsageError("--creator-version \u4EC5\u7528\u4E8E --mode create");
|
|
8502
8390
|
return parsed;
|
|
8503
8391
|
}
|
|
8504
8392
|
function requirePrompt(io, flag2) {
|
|
@@ -8647,7 +8535,12 @@ async function runRoute(route, args, io, options) {
|
|
|
8647
8535
|
);
|
|
8648
8536
|
const rootDirectory = resolve19(cwd, directoryInput);
|
|
8649
8537
|
await assertInitializableBuddyTarget(rootDirectory);
|
|
8650
|
-
|
|
8538
|
+
const creatorSession = await lstat15(join24(rootDirectory, ".buddy/creator/session.json")).catch((cause) => {
|
|
8539
|
+
if (cause.code === "ENOENT") return void 0;
|
|
8540
|
+
throw cause;
|
|
8541
|
+
});
|
|
8542
|
+
const resumeCreator = !!creatorSession?.isFile() && !creatorSession.isSymbolicLink();
|
|
8543
|
+
let plan = await planBuddyDraftInitialization(rootDirectory, { resumeCreator });
|
|
8651
8544
|
const existingBuddyId = plan.existingManifest?.buddyId;
|
|
8652
8545
|
if (existingBuddyId !== void 0 && args.buddyId !== void 0 && existingBuddyId !== args.buddyId) {
|
|
8653
8546
|
throw new CliUsageError(
|
|
@@ -8660,7 +8553,7 @@ async function runRoute(route, args, io, options) {
|
|
|
8660
8553
|
writeApplicationDraftReady(io, buddyId, options, requestedBuddyId !== void 0);
|
|
8661
8554
|
let draft;
|
|
8662
8555
|
try {
|
|
8663
|
-
plan = await planBuddyDraftInitialization(rootDirectory);
|
|
8556
|
+
plan = await planBuddyDraftInitialization(rootDirectory, { resumeCreator });
|
|
8664
8557
|
draft = await applyBuddyDraftInitialization(plan, { buddyId });
|
|
8665
8558
|
} catch (cause) {
|
|
8666
8559
|
io.writeError(
|
|
@@ -8677,7 +8570,7 @@ async function runRoute(route, args, io, options) {
|
|
|
8677
8570
|
projectRoot: draft.rootDirectory,
|
|
8678
8571
|
manifestPath: draft.agentConfigPath
|
|
8679
8572
|
};
|
|
8680
|
-
const result = options.creator ? await options.creator(context, io) : await prepareCreatorSkill(context, io, { signal: options.cloud?.signal
|
|
8573
|
+
const result = options.creator ? await options.creator(context, io) : await prepareCreatorSkill(context, io, { signal: options.cloud?.signal });
|
|
8681
8574
|
return { ...result, route: "create", draft, buddyId };
|
|
8682
8575
|
}
|
|
8683
8576
|
async function resumeProjectArguments(args, cwd, options, io) {
|
|
@@ -8776,7 +8669,7 @@ async function runBuddyCli(args, io, options = {}) {
|
|
|
8776
8669
|
...options.dev
|
|
8777
8670
|
});
|
|
8778
8671
|
}
|
|
8779
|
-
if (command === "login" || command === "logout" || command === "push" || command === "products" || command === "
|
|
8672
|
+
if (command === "login" || command === "logout" || command === "push" || command === "products" || command === "status" || command === "meta" || command === "avatar") {
|
|
8780
8673
|
return await runCloudCommand(command, rest, io, {
|
|
8781
8674
|
cwd: options.cwd,
|
|
8782
8675
|
runtimeUpdate: options.runtimeCatalog,
|