@my-life-buddies/cli 0.26.1 → 0.26.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -277,15 +277,9 @@ buddy-cli init --mode create --directory ./study-buddy \
277
277
  → 基础技术自测 → 打开真实预览 → 开发者体验并反馈
278
278
  ```
279
279
 
280
- CLI 0.15.0 起,Creator 使用独立 npm 包 `@my-life-buddies/buddy-creator-skill`。新项目首次创作查询稳定版,校验后缓存到 `~/.cache/buddy-cli/creator-skills/buddy-creator-skill/<版本>/`,在 `.buddy/creator/skill-lock.json` 记录准确版本与完整性摘要。恢复项目优先使用固定版本缓存,不自动升级,已有缓存时 Skill 准备无需联网(平台身份校验仍需联网)。Skill 负责人独立发包,不再要求重发 CLI。
280
+ CLI 0.15.0 起,Creator 使用独立 npm 包 `@my-life-buddies/buddy-creator-skill`。每次进入或恢复创作都查询公共 npm latest 最新正式版,校验后缓存到 `~/.cache/buddy-cli/creator-skills/buddy-creator-skill/<版本>/`,在 `.buddy/creator/skill-lock.json` 记录本次准确版本与完整性摘要。只有查证缓存对应最新版后才复用;版本记录不会阻止升级,恢复时也需要联网。Skill 负责人独立发包,不再要求重发 CLI。
281
281
 
282
- 显式升级某个项目:
283
-
284
- ```bash
285
- buddy-cli init --mode create --directory ./study-buddy --creator-version 1.6.0
286
- ```
287
-
288
- CLI 只接受协议兼容的准确稳定版本,保留原始背景、身份与作品。未改动的旧版生成接续说明会备份后迁移;开发者自定义说明不覆盖。新项目下载失败会报错并保留登记身份,可在同目录重试。
282
+ 不再提供 `--creator-version` 固定版本入口。CLI 查询 latest 后验证协议及完整性,保留原始背景、身份与作品。未改动的旧版生成接续说明会备份后迁移;开发者自定义说明不覆盖。查询、下载或协议校验失败都会报错,不退回旧缓存;已有资料和登记身份保留,可在同目录重试。
289
283
 
290
284
  维护者本地联调:
291
285
 
@@ -294,11 +288,11 @@ BUDDY_CREATOR_SKILL_PATH=/absolute/path/buddy-creator-skill \
294
288
  buddy-cli init --mode create --directory ./study-buddy
295
289
  ```
296
290
 
297
- 本地来源同样记录在项目中,适合 Skill 开发,不要求发布。要切回 npm,清除环境变量并显式指定 `--creator-version`。Python 执行仍需 3.9+,不安装 Python 第三方依赖。阶段与创作规则由 Skill 的 `references/cli-workflow.md` 管理,CLI 只处理身份、目录和有效交付后的开发接续。
291
+ 本地来源同样记录在项目中,仅用于显式 Skill 联调,不要求发布。每次联调都需要提供该环境变量;清除后会查询公共 npm latest,不因旧的本地版本记录继续使用本地目录。Python 执行仍需 3.9+,不安装 Python 第三方依赖。阶段与创作规则由 Skill 的 `references/cli-workflow.md` 管理,CLI 只处理身份、目录和有效交付后的开发接续。
298
292
 
299
- 创作资料保存在 `.buddy/creator/`。CLI 支持 Creator 接入协议 1 和 2;Creator 2.1 的新作品使用 `workflowVersion=2` 的三册,旧作品继续原工作流,不自动迁移。按该作品工作流完成手册、小挂件清单、当前原型和设计验收,并通过交付校验,Skill 才返回 `directive=creator_complete`、`completion.status=ready` 和有效的 `completion.manualPath`;明确确认不使用小挂件时无需制造原型。完整创建任务中,当前 Coding Agent 退出采访,在同一轮重新读取 `HANDOFF.md`、真实手册、同目录实际 manifest、来源映射及小挂件设计与验收产物,自动开始开发,无需再说“继续”。不按旧四册文件名硬编码交付清单;手册确认或文件存在不能单独触发开发。只有影响实现的关键缺口才补问;仅设计、流程测试和暂停仍遵守原范围。
293
+ 创作资料保存在 `.buddy/creator/`。CLI 支持 Creator 接入协议 1 和 2;最新版 Creator 统一使用 `workflowVersion=2` 的三册(定位、知识与方法、付费服务);旧四册由 Creator 的 open 保存历史后迁移,复用资料与可用进度,补充缺口并重新确认发生变化的内容,不把旧完成标记直接当作新交付。按该作品工作流完成手册、小挂件清单、当前原型和设计验收,并通过交付校验,Skill 才返回 `directive=creator_complete`、`completion.status=ready` 和有效的 `completion.manualPath`;明确确认不使用小挂件时无需制造原型。完整创建任务中,当前 Coding Agent 退出采访,在同一轮重新读取 `HANDOFF.md`、真实手册、同目录实际 manifest、来源映射及小挂件设计与验收产物,自动开始开发,无需再说“继续”。不按旧四册文件名硬编码交付清单;手册确认或文件存在不能单独触发开发。只有影响实现的关键缺口才补问;仅设计、流程测试和暂停仍遵守原范围。
300
294
 
301
- 工作流 2 还需读取 `completion.capabilityContractPath` 指向的能力契约,按 Skill 的 `references/implementation-handoff.md` 保存 `implementation-report.json`,记录当前契约版本、逐需求实现和真实验证证据,再运行 `handoff-check`。该命令只核对报告结构、版本及覆盖,仍需实际 Runtime 验证;旧工作流不因升级 CLI 或 Skill 而强制补交新版契约和报告。「平台能力」中的方案来自 `service.blueprint.data.capabilityPlan`;旧作品仍可读取 `proactiveReminders`,方案展示不代表已经启用。
295
+ 新版三册还需读取 `completion.capabilityContractPath` 指向的能力契约,按 Skill 的 `references/implementation-handoff.md` 保存 `implementation-report.json`,记录当前契约版本、逐需求实现和真实验证证据,再运行 `handoff-check`。该命令只核对报告结构、版本及覆盖,仍需实际 Runtime 验证;迁移后的项目也须通过当前三册交付校验。「平台能力」中的方案来自 `service.blueprint.data.capabilityPlan`;旧资料迁移时可读取 `proactiveReminders`,方案展示不代表已经启用。
302
296
 
303
297
  手册中的角色、方法、处理路径和持续服务要求,都是开发依据。Coding Agent 按这些要求判断是否需要工具、专业方法、特定处理步骤、记忆与历史整理,技术选择不逐项交给开发者;完成后向开发者简要说明需求来源、实现位置、检查结果和缺口,不要求额外生成 README。已经明确的直接做,不能实现的如实说明;只有元数据或默认配置,不代表手册要求已经完成。
304
298
 
@@ -308,7 +302,7 @@ BUDDY_CREATOR_SKILL_PATH=/absolute/path/buddy-creator-skill \
308
302
  buddy-cli init --mode direct --directory ./study-buddy
309
303
  ```
310
304
 
311
- 创作阶段的 `package.json` 只有顶层 `buddyId`;CLI 用它从平台读取最新资料并重新校验归属,不另建搭子。创作中断后可以在原目录重试 `--mode create`,继续使用原作品;手册完成后执行 `--mode direct`,保留已有业务代码与数据声明,补齐 npm 字段和缺失的工程文件;缺失 `data-access.json` 时生成空 requirements 数组。旧 `--mode interview` 已停止使用。
305
+ 创作阶段的 `package.json` 只有顶层 `buddyId`;CLI 用它从平台读取最新资料并重新校验归属,不另建搭子。创作中断后在原目录重试 `--mode create`,检查最新 Creator 后接续原作品;手册完成后执行 `--mode direct`,保留已有业务代码与数据声明,补齐 npm 字段和缺失的工程文件;缺失 `data-access.json` 时生成空 requirements 数组。旧 `--mode interview` 已停止使用。
312
306
 
313
307
  两条主线都遵循同一个登记规则:名称、`tagline`(一句话介绍)、`intro`(完整介绍)先同步到平台,返回的 ID 写入 `package.json.buddyId`。公开资料不在本地留副本。若平台已创建成功、本地写盘失败,可用 `--buddy-id <平台返回的 ID>` 恢复;它不是自定义 ID 的入口。
314
308
 
@@ -322,7 +316,7 @@ Creator 例外保留首次创作背景快照,用于接续同一作品;恢复
322
316
 
323
317
  你明确要求自动体验或多场景回归时,Coding Agent 再按指定范围执行。`push` 仍需要明确授权。若你只要求初始化、修改某段代码或完成设计,也不会因为这套默认流程就自动启动预览。
324
318
 
325
- 这些规则通过 CLI 帮助、命令输出和 Creator 的 `HANDOFF.md` 交给 Coding Agent;CLI 不会在 `init` 内自动执行采访、编写业务代码或批量调用模型。重试创作时复用当前接续说明和作品,不覆盖开发者修改的文件。已有完整工程无需重新初始化,可从更新后的 CLI 帮助和 `preview` 输出读取交接规则。
319
+ 这些规则通过 CLI 帮助、命令输出和 Creator 的 `HANDOFF.md` 交给 Coding Agent;CLI 不会在 `init` 内自动执行采访、编写业务代码或批量调用模型。重试创作时查询最新 Creator 并刷新生成的接续说明,保留原作品和开发者修改的文件。已有完整工程且保留 Creator 记录时,也可执行 `init --mode create` 接续创作,业务文件不会重建;没有 Creator 历史的直接开发工程继续按已有需求开发。
326
320
 
327
321
  ## 查看和修改搭子资料
328
322
 
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
- const response = await (options.fetch ?? globalThis.fetch)(`${REGISTRY}${encodeURIComponent(definition3.name)}/${version}`, {
306
- headers: { Accept: "application/json" },
307
- redirect: "error",
308
- signal: options.signal ? AbortSignal.any([options.signal, AbortSignal.timeout(15e3)]) : AbortSignal.timeout(15e3)
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
- if (!validSkillLock(lock, definition3.protocolVersions) || pinned && (lock.integrity !== pinned.integrity || lock.protocolVersion !== pinned.protocolVersion)) throw new Error(`${definition3.label} Skill \u4E0B\u8F7D\u6821\u9A8C\u4FE1\u606F\u4E0D\u5339\u914D\u3002`);
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
- `\u9879\u76EE\u5DF2\u7ECF\u662F\u5B8C\u6574 Agent \u5DE5\u7A0B\uFF0C\u4E0D\u9700\u8981\u91CD\u65B0\u8FDB\u5165\u521B\u4F5C\u521D\u59CB\u5316\u3002`,
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:3 -->
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
- \u5B8C\u6574\u8BFB\u53D6 ${JSON.stringify(join14(skillRoot, "SKILL.md"))} \u4E0E ${JSON.stringify(join14(skillRoot, "references/cli-workflow.md"))}\uFF0C\u6309\u5F53\u524D\u4F5C\u54C1\u5DE5\u4F5C\u6D41\u4E0E Skill \u5B9A\u4E49\u7684\u9636\u6BB5\u63A5\u7EED\u3002\u5DF2\u6709\u4F5C\u54C1\u6CBF\u7528\u539F\u9636\u6BB5\uFF0C\u4E0D\u56E0 CLI \u6216 Skill \u5347\u7EA7\u8FC1\u79FB\u4F5C\u54C1\u3002
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\u3002workflowVersion=2 \u7684\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\u65E7\u5DE5\u4F5C\u6D41\u4EA4\u4ED8\u4E0D\u5F3A\u5236\u8865\u65B0\u7248\u5951\u7EA6\u6216\u62A5\u544A\uFF0C\u5373\u4F7F\u4F7F\u7528\u534F\u8BAE 2 \u7684 Skill \u63A5\u7EED\u4E5F\u4FDD\u7559\u539F\u89C4\u5219\u3002\u7ED3\u5408\u73B0\u6709\u5DE5\u7A0B\uFF0C\u6309\u5F00\u53D1\u6307\u5F15\u7EE7\u7EED\u5B9E\u73B0\u3002
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\u65B0\u4F5C\u54C1 workflowVersion=2 \u4F7F\u7528\u4E09\u518C\uFF1B\u7F3A\u5C11\u5DE5\u4F5C\u6D41\u7248\u672C\u6216\u7248\u672C\u4E3A 1 \u7684\u65E7\u4F5C\u54C1\u6309\u539F\u56DB\u518C\u7EE7\u7EED\uFF0C\u4E0D\u8FC1\u79FB\u4F5C\u54C1\uFF0C\u4E5F\u4E0D\u5F3A\u5236\u8865\u4EA4\u65B0\u7248\u5951\u7EA6\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\u3002workflowVersion=2 \u7684\u4EA4\u4ED8\u8FD8\u8BFB\u53D6 \`completion.capabilityContractPath\` \u6307\u5411\u7684\u80FD\u529B\u5951\u7EA6\uFF1B\u65E7\u5DE5\u4F5C\u6D41\u4EA4\u4ED8\u7F3A\u5C11\u65B0\u7248\u5951\u7EA6\u4E0D\u4EE3\u8868\u635F\u574F\uFF0C\u5373\u4F7F\u4F7F\u7528\u534F\u8BAE 2 \u7684 Skill \u63A5\u7EED\u4E5F\u4E0D\u5F3A\u52A0\u65B0\u8981\u6C42\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
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\u5DE5\u4F5C\u6D41\u7EE7\u7EED\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
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\u65E7\u5DE5\u4F5C\u6D41\u9879\u76EE\u4E0D\u56E0 CLI \u6216 Skill \u5347\u7EA7\u800C\u65B0\u589E\u8FD9\u4EFD\u62A5\u544A\u8981\u6C42\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
 
@@ -3393,12 +3404,12 @@ var INIT_HELP = `\u7528\u6CD5: buddy-cli init [\u53C2\u6570]
3393
3404
  --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
3405
  --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
3406
  --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
3407
 
3398
3408
  \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
3409
  \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
3410
  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
3411
  \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
3412
+ 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
3413
  \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
3414
 
3404
3415
  \u793A\u4F8B:
@@ -3451,9 +3462,9 @@ Coding Agent \u5E94\u76F4\u63A5\u6CBF\u7528\u7528\u6237\u660E\u786E\u63D0\u4F9B\
3451
3462
  \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
3463
  \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
3464
  \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\u4F7F\u7528 --creator-version <\u51C6\u786E\u7248\u672C> \u663E\u5F0F\u5347\u7EA7\uFF0C\u5DF2\u6709\u9879\u76EE\u9ED8\u8BA4\u590D\u7528\u56FA\u5B9A\u7248\u672C\u4E0E\u539F\u4F5C\u54C1\u5DE5\u4F5C\u6D41\uFF1B\u672C\u5730\u8054\u8C03\u53EF\u8BBE\u7F6E BUDDY_CREATOR_SKILL_PATH \u7EDD\u5BF9\u8DEF\u5F84\u3002
3465
+ --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
3466
  \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\uFF1BworkflowVersion=2 \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\u4F5C\u54C1\u4E0D\u5F3A\u5236\u8FC1\u79FB\u6216\u8865\u4EA4\u65B0\u7248\u5951\u7EA6\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
3467
+ \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
3468
  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
3469
  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
3470
  \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
@@ -8451,6 +8462,7 @@ function parseInitArguments(args) {
8451
8462
  parsed.confirmMeta = true;
8452
8463
  continue;
8453
8464
  }
8465
+ 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
8466
  const value = valueAfterFlag(args, index, flag2 ?? "\u53C2\u6570");
8455
8467
  index += 1;
8456
8468
  switch (flag2) {
@@ -8483,10 +8495,6 @@ function parseInitArguments(args) {
8483
8495
  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
8496
  parsed.avatarSkillVersion = setOnce2(parsed.avatarSkillVersion, value, flag2);
8485
8497
  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
8498
  case "--avatar":
8491
8499
  parsed.avatar = setOnce2(parsed.avatar, value, flag2);
8492
8500
  break;
@@ -8498,7 +8506,6 @@ function parseInitArguments(args) {
8498
8506
  }
8499
8507
  }
8500
8508
  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
8509
  return parsed;
8503
8510
  }
8504
8511
  function requirePrompt(io, flag2) {
@@ -8647,7 +8654,12 @@ async function runRoute(route, args, io, options) {
8647
8654
  );
8648
8655
  const rootDirectory = resolve19(cwd, directoryInput);
8649
8656
  await assertInitializableBuddyTarget(rootDirectory);
8650
- let plan = await planBuddyDraftInitialization(rootDirectory);
8657
+ const creatorSession = await lstat15(join24(rootDirectory, ".buddy/creator/session.json")).catch((cause) => {
8658
+ if (cause.code === "ENOENT") return void 0;
8659
+ throw cause;
8660
+ });
8661
+ const resumeCreator = !!creatorSession?.isFile() && !creatorSession.isSymbolicLink();
8662
+ let plan = await planBuddyDraftInitialization(rootDirectory, { resumeCreator });
8651
8663
  const existingBuddyId = plan.existingManifest?.buddyId;
8652
8664
  if (existingBuddyId !== void 0 && args.buddyId !== void 0 && existingBuddyId !== args.buddyId) {
8653
8665
  throw new CliUsageError(
@@ -8660,7 +8672,7 @@ async function runRoute(route, args, io, options) {
8660
8672
  writeApplicationDraftReady(io, buddyId, options, requestedBuddyId !== void 0);
8661
8673
  let draft;
8662
8674
  try {
8663
- plan = await planBuddyDraftInitialization(rootDirectory);
8675
+ plan = await planBuddyDraftInitialization(rootDirectory, { resumeCreator });
8664
8676
  draft = await applyBuddyDraftInitialization(plan, { buddyId });
8665
8677
  } catch (cause) {
8666
8678
  io.writeError(
@@ -8677,7 +8689,7 @@ async function runRoute(route, args, io, options) {
8677
8689
  projectRoot: draft.rootDirectory,
8678
8690
  manifestPath: draft.agentConfigPath
8679
8691
  };
8680
- const result = options.creator ? await options.creator(context, io) : await prepareCreatorSkill(context, io, { signal: options.cloud?.signal, version: args.creatorVersion });
8692
+ const result = options.creator ? await options.creator(context, io) : await prepareCreatorSkill(context, io, { signal: options.cloud?.signal });
8681
8693
  return { ...result, route: "create", draft, buddyId };
8682
8694
  }
8683
8695
  async function resumeProjectArguments(args, cwd, options, io) {