speccore 8.3.121 → 8.3.126

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.
Files changed (143) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/about.d.ts.map +1 -1
  4. package/dist/commands/about.js +16 -0
  5. package/dist/commands/about.js.map +1 -1
  6. package/dist/commands/analyze.d.ts +1 -0
  7. package/dist/commands/analyze.d.ts.map +1 -1
  8. package/dist/commands/analyze.js +198 -70
  9. package/dist/commands/analyze.js.map +1 -1
  10. package/dist/commands/change.js +14 -7
  11. package/dist/commands/change.js.map +1 -1
  12. package/dist/commands/context.js +25 -31
  13. package/dist/commands/context.js.map +1 -1
  14. package/dist/commands/deploy.d.ts.map +1 -1
  15. package/dist/commands/deploy.js +6 -1
  16. package/dist/commands/deploy.js.map +1 -1
  17. package/dist/commands/done.js +29 -28
  18. package/dist/commands/done.js.map +1 -1
  19. package/dist/commands/execute.d.ts.map +1 -1
  20. package/dist/commands/execute.js +281 -20
  21. package/dist/commands/execute.js.map +1 -1
  22. package/dist/commands/import.js +1 -1
  23. package/dist/commands/import.js.map +1 -1
  24. package/dist/commands/init.d.ts.map +1 -1
  25. package/dist/commands/init.js +512 -28
  26. package/dist/commands/init.js.map +1 -1
  27. package/dist/commands/iteration/create.js +1 -1
  28. package/dist/commands/iteration/split.d.ts.map +1 -1
  29. package/dist/commands/iteration/split.js +158 -70
  30. package/dist/commands/iteration/split.js.map +1 -1
  31. package/dist/commands/iteration-from-global.js +1 -2
  32. package/dist/commands/iteration-from-global.js.map +1 -1
  33. package/dist/commands/pattern.js +30 -16
  34. package/dist/commands/pattern.js.map +1 -1
  35. package/dist/commands/pipeline.d.ts.map +1 -1
  36. package/dist/commands/pipeline.js +15 -4
  37. package/dist/commands/pipeline.js.map +1 -1
  38. package/dist/commands/retro.d.ts.map +1 -1
  39. package/dist/commands/retro.js +15 -8
  40. package/dist/commands/retro.js.map +1 -1
  41. package/dist/commands/status-panel.js +1 -1
  42. package/dist/commands/status-panel.js.map +1 -1
  43. package/dist/commands/sync.js +15 -8
  44. package/dist/commands/sync.js.map +1 -1
  45. package/dist/commands/trace.js +27 -24
  46. package/dist/commands/trace.js.map +1 -1
  47. package/dist/commands/update-env-configs.d.ts.map +1 -1
  48. package/dist/commands/update-env-configs.js +33 -5
  49. package/dist/commands/update-env-configs.js.map +1 -1
  50. package/dist/commands/update.d.ts.map +1 -1
  51. package/dist/commands/update.js +29 -0
  52. package/dist/commands/update.js.map +1 -1
  53. package/dist/commands/verify.d.ts +1 -1
  54. package/dist/commands/verify.d.ts.map +1 -1
  55. package/dist/commands/verify.js +25 -0
  56. package/dist/commands/verify.js.map +1 -1
  57. package/dist/core/ai-context-generator.js +35 -22
  58. package/dist/core/ai-context-generator.js.map +1 -1
  59. package/dist/core/ai-impact-analyzer.d.ts.map +1 -1
  60. package/dist/core/ai-impact-analyzer.js +1 -1
  61. package/dist/core/ai-impact-analyzer.js.map +1 -1
  62. package/dist/core/analyze-engine.d.ts +2 -1
  63. package/dist/core/analyze-engine.d.ts.map +1 -1
  64. package/dist/core/analyze-engine.js +217 -53
  65. package/dist/core/analyze-engine.js.map +1 -1
  66. package/dist/core/ask-engine.d.ts.map +1 -1
  67. package/dist/core/ask-engine.js +31 -13
  68. package/dist/core/ask-engine.js.map +1 -1
  69. package/dist/core/change-detection.d.ts.map +1 -1
  70. package/dist/core/change-detection.js +21 -5
  71. package/dist/core/change-detection.js.map +1 -1
  72. package/dist/core/code-scanner.d.ts +12 -3
  73. package/dist/core/code-scanner.d.ts.map +1 -1
  74. package/dist/core/code-scanner.js +376 -10
  75. package/dist/core/code-scanner.js.map +1 -1
  76. package/dist/core/context-builder.d.ts +2 -1
  77. package/dist/core/context-builder.d.ts.map +1 -1
  78. package/dist/core/context-builder.js +104 -25
  79. package/dist/core/context-builder.js.map +1 -1
  80. package/dist/core/deploy/engine.d.ts.map +1 -1
  81. package/dist/core/deploy/engine.js +21 -6
  82. package/dist/core/deploy/engine.js.map +1 -1
  83. package/dist/core/git-integration.d.ts +5 -1
  84. package/dist/core/git-integration.d.ts.map +1 -1
  85. package/dist/core/git-integration.js +52 -15
  86. package/dist/core/git-integration.js.map +1 -1
  87. package/dist/core/knowledge-graph.d.ts +2 -0
  88. package/dist/core/knowledge-graph.d.ts.map +1 -1
  89. package/dist/core/knowledge-graph.js +246 -232
  90. package/dist/core/knowledge-graph.js.map +1 -1
  91. package/dist/core/name-validator.js +1 -1
  92. package/dist/core/name-validator.js.map +1 -1
  93. package/dist/core/pipeline-test.d.ts.map +1 -1
  94. package/dist/core/pipeline-test.js +7 -4
  95. package/dist/core/pipeline-test.js.map +1 -1
  96. package/dist/core/prompt-builder.d.ts +3 -0
  97. package/dist/core/prompt-builder.d.ts.map +1 -1
  98. package/dist/core/prompt-builder.js +629 -77
  99. package/dist/core/prompt-builder.js.map +1 -1
  100. package/dist/core/rag-engine.d.ts +10 -5
  101. package/dist/core/rag-engine.d.ts.map +1 -1
  102. package/dist/core/rag-engine.js +134 -16
  103. package/dist/core/rag-engine.js.map +1 -1
  104. package/dist/core/spec-paths.d.ts +42 -2
  105. package/dist/core/spec-paths.d.ts.map +1 -1
  106. package/dist/core/spec-paths.js +207 -11
  107. package/dist/core/spec-paths.js.map +1 -1
  108. package/dist/core/structured-extractor.d.ts +67 -0
  109. package/dist/core/structured-extractor.d.ts.map +1 -1
  110. package/dist/core/structured-extractor.js +1298 -23
  111. package/dist/core/structured-extractor.js.map +1 -1
  112. package/dist/core/test-config.d.ts +1 -1
  113. package/dist/core/test-config.d.ts.map +1 -1
  114. package/dist/core/test-config.js +85 -65
  115. package/dist/core/test-config.js.map +1 -1
  116. package/dist/core/ui-verify/report-generator.d.ts.map +1 -1
  117. package/dist/core/ui-verify/report-generator.js +7 -3
  118. package/dist/core/ui-verify/report-generator.js.map +1 -1
  119. package/dist/core/ui-verify/smoke-engine.js +7 -1
  120. package/dist/core/ui-verify/smoke-engine.js.map +1 -1
  121. package/dist/core/unified-config.d.ts +43 -3
  122. package/dist/core/unified-config.d.ts.map +1 -1
  123. package/dist/core/unified-config.js +133 -13
  124. package/dist/core/unified-config.js.map +1 -1
  125. package/dist/core/unified-retrieval.d.ts.map +1 -1
  126. package/dist/core/unified-retrieval.js +41 -15
  127. package/dist/core/unified-retrieval.js.map +1 -1
  128. package/dist/core/unit-context-assembler.js +2 -2
  129. package/dist/core/unit-context-assembler.js.map +1 -1
  130. package/dist/core/validator.d.ts.map +1 -1
  131. package/dist/core/validator.js +59 -44
  132. package/dist/core/validator.js.map +1 -1
  133. package/dist/core/verify-engine.d.ts +9 -2
  134. package/dist/core/verify-engine.d.ts.map +1 -1
  135. package/dist/core/verify-engine.js +274 -108
  136. package/dist/core/verify-engine.js.map +1 -1
  137. package/dist/core/verify-report-aggregator.js +9 -20
  138. package/dist/core/verify-report-aggregator.js.map +1 -1
  139. package/dist/utils/synonyms.d.ts +24 -0
  140. package/dist/utils/synonyms.d.ts.map +1 -0
  141. package/dist/utils/synonyms.js +114 -0
  142. package/dist/utils/synonyms.js.map +1 -0
  143. package/package.json +1 -1
@@ -327,11 +327,12 @@ async function doInit(projectRoot, options, spinner) {
327
327
  spinner.stop('SpecCore initialized successfully!');
328
328
  logger_1.logger.info('');
329
329
  logger_1.logger.info('Next steps:');
330
- logger_1.logger.info(' 1. Edit .speccore/CONSTITUTION.md to define your tech stack');
331
- logger_1.logger.info(' 2. Edit .speccore/PROJECT/TEAM.md to add team members');
332
- logger_1.logger.info(' 3. Run: speccore analyze --scope global to analyze your codebase');
333
- logger_1.logger.info(' 4. Run: speccore iteration create --name=Q1 to start an iteration');
334
- logger_1.logger.info(' 5. Run: speccore doc2spec -f requirements.docx to import docs');
330
+ logger_1.logger.info(' 1. 👀 View examples: .speccore/examples/config/CONSTITUTION-EXAMPLE.md');
331
+ logger_1.logger.info(' 2. ✏️ Edit .speccore/CONSTITUTION.md to define your tech stack');
332
+ logger_1.logger.info(' 3. 👥 Edit .speccore/PROJECT/TEAM.md to add team members');
333
+ logger_1.logger.info(' 4. 🔬 Run: speccore analyze --scope global to analyze your codebase');
334
+ logger_1.logger.info(' 5. 📁 Run: speccore iteration create --name=Q1 to start an iteration');
335
+ logger_1.logger.info(' 6. 📄 Run: speccore doc2spec -f requirements.docx to import docs');
335
336
  logger_1.logger.info('');
336
337
  logger_1.logger.info('💡 WorkBuddy Integration: .workbuddy/ files created.');
337
338
  logger_1.logger.info(' Reopen this project in WorkBuddy to enable Speccore commands.');
@@ -364,6 +365,40 @@ async function createDefaultFiles(projectRoot, speccoreDir) {
364
365
  > 本文档是 SpecCore 与 AI 的**最高优先级契约**。analyze/split/execute 均据此执行。
365
366
  > AI 读取顺序:CONSTITUTION → context.json → 迭代目录
366
367
 
368
+ ## 字段对照总表
369
+
370
+ > **AI 必读**:以下表格明确 CONSTITUTION.md 各字段与 PROJECT.yaml 的对应关系,以及每个字段的准确语义。请勿混淆。
371
+
372
+ ### 项目信息表字段
373
+
374
+ | CONSTITUTION 列 | PROJECT.yaml 字段 | 语义说明 | 示例 |
375
+ |:---|:---|:---|:---|
376
+ | 工程标识 | \`name\` | 全局唯一技术标识,用于目录名、命令参数 | \`admin-web\`、\`backend-service\` |
377
+ | 工程类型 | \`type\` | AI 据此生成针对性内容 | \`Java服务\`、\`H5移动端\` |
378
+ | 工程名 | \`description\` | 人类可读的业务名称 | \`预订服务\`、\`后台管理\` |
379
+ | 项目名称 | \`project_name\` | 给人和 AI 看的业务名称 | \`食堂后台管理\`、\`商户入驻系统\` |
380
+ | 项目描述 | \`project_desc\` | 工程的详细说明、补充信息 | \`核心业务服务,处理订单全生命周期\` |
381
+ | 工程源码路径 | \`code_path\` | 相对于项目根目录的代码位置 | \`./packages/backend\` |
382
+ | **涉及需求端** | \`requirement_unit\` | **需求文档名称/标识,仅作 AI 参考,不做任何校验** | \`订单系统PRD\`、\`后台管理端需求文档\` |
383
+ | 备注 | \`notes\` | 额外信息、特殊说明、TODO | \`核心业务\`、\`待上架\` |
384
+
385
+ > ⚠️ **特别提醒 AI**:「涉及需求端」的值是**需求文档名**(如"订单系统PRD"),不是技术端标识(如 app/h5/admin)。技术端列表见下方「端列表」。
386
+
387
+ ### Git 配置表字段
388
+
389
+ | CONSTITUTION 列 | PROJECT.yaml 字段 | 语义说明 | 示例 |
390
+ |:---|:---|:---|:---|
391
+ | Git 仓库 | \`git_repo\` | 仓库地址 | \`git@github.com:org/repo.git\` |
392
+ | 默认分支 | \`default_branch\` | 默认分支名 | \`main\`、\`develop\` |
393
+ | 保护分支 | \`protected_branches\` | 禁止直接 push 的分支列表 | \`main,release/*\` |
394
+ | 分支前缀 | \`branch_prefix\` | 功能分支前缀 | \`feature/\`、\`feature/api-\` |
395
+
396
+ ### 公共默认值机制
397
+
398
+ - 「Git 公共配置」章节定义公共默认值
399
+ - 「Git 配置」表中用 \`—\` 表示使用该字段的公共默认值
400
+ - 各工程只写和公共配置不同的字段
401
+
367
402
  ## 端列表(全局权威)
368
403
 
369
404
  > ⚠️ **工程标识是全项目唯一的端标识符**,所有命令(analyze/split/execute)、目录名(020-specs/{端}/)、模板目录(templates/{level}/{端}/)均使用此处声明的端名。
@@ -376,11 +411,11 @@ async function createDefaultFiles(projectRoot, speccoreDir) {
376
411
  | admin | 后台管理端 | Web管理后台 |
377
412
 
378
413
  > **端名规则**:
379
- > - 工程标识 = 工程名,一一对应(一个端 = 一个完整的服務/应用 = 一个 git 仓库)
414
+ > - 工程标识 ≠ 工程名:工程标识是唯一技术标识(如 app/h5/admin),工程名是业务名称(如 "预订服务")
380
415
  > - 全小写、无空格、用短横线分隔(如 order-service)
381
416
  > - 工程类型:AI 据此生成针对性内容(见下方工程类型枚举)
382
417
  > - 此列表是 analyze/split/execute 的唯一端名来源
383
- > - 「对应端」列引用此列表中的工程标识,每行只填一个
418
+ > - 「对应需求端」列引用此列表中的工程标识,每行只填一个
384
419
 
385
420
  > **工程类型枚举**(可自定义):
386
421
  > - 后端:Java服务 / Node服务 / Go服务 / Python服务
@@ -390,26 +425,111 @@ async function createDefaultFiles(projectRoot, speccoreDir) {
390
425
 
391
426
  ## 项目信息
392
427
 
393
- | 工程标识 | 项目名称 | 源码路径 | Git 仓库 | 默认分支 | 对应端 |
394
- | :--- | :--- | :--- | :--- | :--- | :--- |
395
- | ${projectName} | 待填写 | ./ | ${gitUrl || '待配置'} | main | 待填写 |
428
+ | 工程标识 | 工程类型 | 工程名 | 项目名称 | 项目描述 | 工程源码路径 | 涉及需求端 | 备注 |
429
+ | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
430
+ | ${projectName} | 待填写 | 待填写 | 待填写 | 待填写 | ./ | 待填写 | 待填写 |
396
431
 
397
- > ⚠️ **项目名称** 是给人和 AI 看的业务名称(如"食堂后台管理"、"商户入驻系统"),不同于技术上的工程标识。
398
- > AI 会据此理解项目业务范围,在分析/拆分/生成代码时作为上下文参考。
432
+ > **字段说明**:
433
+ > - **工程标识**:全局唯一技术标识(如 app/h5/admin),全小写、无空格、短横线分隔
434
+ > - **工程类型**:AI 据此生成针对性内容(如 Java服务、H5移动端、Web管理后台)
435
+ > - **工程名**:人类可读的业务名称(如 "预订服务"、"后台管理")
436
+ > - **项目名称**:给人和 AI 看的业务名称(如"食堂后台管理"、"商户入驻系统")
437
+ > - **项目描述**:工程的详细说明、补充信息(如"核心业务服务,处理订单全生命周期")
438
+ > - **工程源码路径**:相对于项目根目录的代码位置(如 ./packages/backend)
439
+ > - **涉及需求端**:需求文档名称/标识,仅作参考(如"后台管理端需求文档"、"订单系统PRD")。说明本工程大概会出现在哪些需求文档中
440
+ > - **备注**:额外信息、特殊说明、TODO 等
399
441
 
400
442
  > 多工程示例(每个端 = 一个独立工程):
401
443
  >
402
- > | 工程标识 | 项目名称 | 源码路径 | Git 仓库 | 默认分支 | 对应端 |
444
+ > | 工程标识 | 工程类型 | 工程名 | 项目名称 | 项目描述 | 工程源码路径 | 涉及需求端 | 备注 |
445
+ > | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
446
+ > | admin-web | Web管理后台 | admin | 后台管理端 | 运营后台管理系统 | ./packages/admin | 后台管理端需求文档 | 核心系统 |
447
+ > | h5-app | H5移动端 | h5 | 移动H5端 | 用户端H5页面 | ./packages/h5 | 移动端需求文档 | 高优先级 |
448
+ > | android-app | Android移动端 | android | Android端 | 原生Android APP | ./packages/android | APP端需求文档 | 待上架 |
449
+ > | backend-service | Java服务 | backend | 后台服务 | 订单与支付核心服务 | ./packages/backend | 订单系统PRD | 核心业务 |
450
+ >
451
+ > **关键规则**:
452
+ > - 「涉及需求端」仅作为 AI 参考上下文,说明工程与哪些需求文档相关,不做任何校验
453
+ > - 一一对应:每行一个工程对应一个工程标识(不填多个)
454
+ > - 如果一个服务拆成多个工程,应在「端列表」中分别声明
455
+
456
+ ## Git 公共配置
457
+
458
+ > 公共默认值。各工程在「Git 配置」表中只写与公共配置不同的字段,未填写的字段自动使用此处默认值。
459
+ > 用 \`—\` 表示使用公共默认值。
460
+
461
+ ### 默认配置
462
+
463
+ | 默认分支 | 保护分支 |
464
+ | :--- | :--- |
465
+ | main | main,release/* |
466
+
467
+ ### 分支类型
468
+
469
+ > 定义各种分支类型及其创建源分支。**分支名格式:\`{类型}/{前缀}{任务名}{后缀}\`**
470
+ > - \`{类型}/\` = 类型自带(如 hotfix/、feature/)
471
+ > - \`{前缀}\` = 任务名前的前缀(可选,**包含分隔符**),如 \`api-\`、\`backend_\`、\`v2.\`
472
+ > - \`{任务名}\` = 如 Task-001-修复登录
473
+ > - \`{后缀}\` = 任务名后的后缀(可选,**包含分隔符**),如 \`-urgent\`、\`_review\`
474
+ >
475
+ > ⚠️ **注意**:前缀/后缀的值请包含你想用的分隔符,代码不再自动添加任何符号。
476
+ >
477
+ > 示例 1(\`-\` 分隔):前缀=\`api-\`、后缀=\`-urgent\` → 分支名=\`hotfix/api-Task-001-urgent\`
478
+ > 示例 2(\`_\` 分隔):前缀=\`api_\`、后缀=\`_urgent\` → 分支名=\`hotfix/api_Task-001_urgent\`
479
+ > 示例 3(无分隔):前缀=\`api\`、后缀=\`urgent\` → 分支名=\`hotfix/apiTask-001urgent\`
480
+
481
+ | 类型 | 前缀(可选) | 后缀(可选) | 创建源 | 说明 |
482
+ | :--- | :--- | :--- | :--- | :--- |
483
+ | feature | — | — | develop | 新功能开发 |
484
+ | bugfix | — | — | develop | 修复开发环境 Bug |
485
+ | release | — | — | develop | 版本发布准备 |
486
+ | hotfix | — | — | main | 生产环境紧急修复 |
487
+ | support | — | — | main | 长期支持旧版本 |
488
+
489
+ > **分支类型说明**:
490
+ > - **分支名格式**:\`{类型}/{前缀}{任务名}{后缀}\`,前缀和后缀均可选
491
+ > - **前缀列**:任务名前的前缀(**包含分隔符**),如 \`api-\`、\`backend_\`。不填则无
492
+ > - **后缀列**:任务名后的后缀(**包含分隔符**),如 \`-urgent\`、\`_review\`。不填则无
493
+ > - **feature**:日常功能开发,从 develop 创建,完成后合并回 develop
494
+ > - **bugfix**:修复开发中的 Bug,从 develop 创建,完成后合并回 develop
495
+ > - **release**:准备发布版本,从 develop 创建,完成后合并到 main + develop
496
+ > - **hotfix**:生产环境紧急修复,从 main 创建,完成后合并到 main + develop
497
+ > - **support**:长期支持旧版本,从 main 创建,用于维护历史版本
498
+ > - 可自定义添加其他类型(如 refactor、docs、test 等)
499
+
500
+ ## Git 配置
501
+
502
+ > 按工程标识对应。未配置的字段使用「Git 公共配置」中的默认值。
503
+
504
+ | 工程标识 | Git 仓库 | 默认分支 | 保护分支 | 分支前缀 | 备注 |
505
+ | :--- | :--- | :--- | :--- | :--- | :--- |
506
+ | ${projectName} | ${gitUrl || '待配置'} | — | — | — | 待填写 |
507
+
508
+ > **字段说明**:
509
+ > - **工程标识**:引用「项目信息」表中的工程标识,一一对应
510
+ > - **Git 仓库**:仓库地址(如 git@github.com:org/repo.git、https://...)
511
+ > - **默认分支**:如 main、master、develop。填 \`—\` 表示使用公共默认值
512
+ > - **保护分支**:禁止直接 push,只能通过 PR 合并(支持通配符如 release/*)。填 \`—\` 表示使用公共默认值
513
+ > - **分支前缀**:功能分支前缀(如 feature/、bugfix/、hotfix/)。填 \`—\` 表示使用公共默认值
514
+ > - **备注**:特殊 Git 策略说明
515
+
516
+ > 多工程示例:
517
+ >
518
+ > | 工程标识 | Git 仓库 | 默认分支 | 保护分支 | 分支前缀 | 备注 |
403
519
  > | :--- | :--- | :--- | :--- | :--- | :--- |
404
- > | admin-web | 后台管理端 | ./packages/admin | git@xxx/admin.git | main | admin |
405
- > | h5-app | 移动H5端 | ./packages/h5 | git@xxx/h5.git | main | h5 |
406
- > | android-app | Android端 | ./packages/android | git@xxx/android.git | main | android |
407
- > | backend-service | 后台服务 | ./packages/backend | git@xxx/backend.git | main | backend |
520
+ > | admin-web | git@xxx/admin.git | — | main,release/* | feature/admin- | 前端统一前缀 |
521
+ > | h5-app | git@xxx/h5.git | — | — | feature/h5- | 使用公共默认 |
522
+ > | backend-service | git@xxx/backend.git | develop | develop,release/* | feature/api- | 后端用 develop 分支 |
523
+ >
524
+ > 上例中:
525
+ > - \`admin-web\`:默认分支使用公共 \`main\`,保护分支自定义 \`main,release/*\`
526
+ > - \`h5-app\`:默认分支、保护分支均使用公共默认值,分支前缀自定义 \`feature/h5-\`
527
+ > - \`backend-service\`:默认分支覆盖为 \`develop\`,保护分支覆盖为 \`develop,release/*\`
408
528
  >
409
529
  > **关键规则**:
410
- > - 「对应端」列的值必须引用「端列表」中已声明的端名
411
- > - 一一对应:每行一个工程对应一个端名(不填多个)
412
- > - 如果一个服务拆成多个工程(如 user-service + order-service 都属于 backend),应在「端列表」中分别声明
530
+ > - 工程标识必须和「项目信息」表中的工程标识完全一致
531
+ > - 用 \`—\`( em dash )表示使用该字段的公共默认值
532
+ > - 保护分支支持精确匹配和通配符(如 release/*)
413
533
 
414
534
  ## 技术栈
415
535
 
@@ -438,12 +558,16 @@ async function createDefaultFiles(projectRoot, speccoreDir) {
438
558
  | ... | ... | ... |
439
559
 
440
560
  ## Git 分支策略
441
- - 默认分支: main (可选: master / develop / trunk / release)
442
- - 任务分支: feature/{Task-ID}
443
- - 发布分支: release/{version}
444
- - 保护分支: main, master, release/*, production
445
- > 保护分支上禁止直接 commit 和 push,只能通过 PR 合并
446
- > 支持精确匹配和通配符(如 release/*)
561
+
562
+ > 公共默认策略。各工程可在「Git 配置」表中覆盖。
563
+
564
+ - **默认分支**: main(可选: master / develop / trunk)
565
+ - **任务分支**: {branch_prefix}{Task-ID}(如 feature/Task-001)
566
+ - **发布分支**: release/{version}
567
+ - **热修复分支**: hotfix/{description}
568
+ - **保护分支**: main, master, release/*, production
569
+ - 保护分支上禁止直接 commit 和 push,只能通过 PR 合并
570
+ - 支持精确匹配和通配符(如 release/*)
447
571
  `);
448
572
  } // if CONSTITUTION.md 不存在
449
573
  // PROJECT files
@@ -479,6 +603,8 @@ async function createDefaultFiles(projectRoot, speccoreDir) {
479
603
  // .speccore/PROJECT.yaml — 项目配置(v8.3.25+)
480
604
  const projectName = require('path').basename(projectRoot);
481
605
  await (0, unified_config_1.initProjectConfig)(projectName);
606
+ // v8.3.115+: 生成示例配置文件,供用户仿照修改
607
+ await generateExampleConfigs(projectRoot);
482
608
  // Ask 引擎配置
483
609
  await (0, fs_extra_1.writeFile)((0, path_1.join)(speccoreDir, 'config', 'ask.json'), JSON.stringify({
484
610
  routing: {
@@ -1462,7 +1588,13 @@ Iteration-NNN-name/ ← 迭代目录
1462
1588
  │ │ │ ├── created-at
1463
1589
  │ │ │ ├── estimated-hours ← 预估工时
1464
1590
  │ │ │ ├── feature ← 功能单元名
1465
- │ │ │ └── git-config ← 子任务级 Git 配置
1591
+ │ │ │ └── git-config ← 子任务级 Git 配置(v8.3.114+)
1592
+ │ │ │ 格式示例:
1593
+ │ │ │ 分支类型: hotfix
1594
+ │ │ │ 前缀: api-
1595
+ │ │ │ 后缀: urgent
1596
+ │ │ │ 源分支: main
1597
+ │ │ │ → 分支名: hotfix/api-子任务名-urgent
1466
1598
  │ │ ├── TASK.md ← 子任务追踪
1467
1599
  │ │ ├── TEST.md ← 测试用例
1468
1600
  │ │ ├── RISK.md ← 风险评估
@@ -1917,7 +2049,7 @@ async function checkUpgradeHints(projectRoot, speccoreDir) {
1917
2049
  const projShort = extractField('项目短名');
1918
2050
  const repo = extractField('代码仓库');
1919
2051
  // 替换整个"项目标识"章节为"项目信息"(从 ## 项目标识 到下一个 ## 之间)
1920
- updated = updated.replace(new RegExp('##\\s*\u9879\u76ee\u6807\u8bc6[\\s\\S]*?(?=##\\s|\\Z)'), `## 项目信息\n\n| 工程 | 项目名称 | 源码路径 | Git 仓库 | 默认分支 | 对应端 |\n| :--- | :--- | :--- | :--- | :--- | :--- |\n| ${projShort} | ${projName} | ./ | ${repo} | main | 待填写 |\n`);
2052
+ updated = updated.replace(new RegExp('##\\s*\u9879\u76ee\u6807\u8bc6[\\s\\S]*?(?=##\\s|\\Z)'), `## 项目信息\n\n| 工程标识 | 工程类型 | 工程名 | 项目名称 | 源码路径 | Git 仓库 | 默认分支 | 对应需求端 |\n| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |\n| ${projShort} | 待填写 | 待填写 | ${projName} | ./ | ${repo} | main | 待填写 |\n`);
1921
2053
  migrations.push(`旧版「项目标识」纵向表 → 新版「项目信息」横向表(项目名称: ${projName})`);
1922
2054
  }
1923
2055
  // ── 自动迁移:补充缺失的「保护分支」配置 ──
@@ -2152,4 +2284,356 @@ async function writeSetupGuide(projectRoot, _speccoreDir) {
2152
2284
  await (0, fs_extra_1.writeFile)(outputPath, html);
2153
2285
  return outputPath;
2154
2286
  }
2287
+ // ─────────────────────────────────────────
2288
+ // v8.3.115+: 生成示例配置文件
2289
+ // ─────────────────────────────────────────
2290
+ async function generateExampleConfigs(projectRoot) {
2291
+ const examplesDir = (0, path_1.join)(projectRoot, '.speccore', 'examples');
2292
+ const configDir = (0, path_1.join)(examplesDir, 'config');
2293
+ await (0, fs_extra_1.ensureDir)(configDir);
2294
+ // 示例目录 README
2295
+ const readmeContent = `# SpecCore 示例目录
2296
+
2297
+ > 本目录存放各类配置示例,供用户仿照修改。
2298
+ > 这些文件仅供人类参考,AI 不会读取。
2299
+
2300
+ ## 目录结构
2301
+
2302
+ \`\`\`
2303
+ examples/
2304
+ ├── README.md ← 本文件
2305
+ ├── config/ ← 配置文件示例
2306
+ │ ├── CONSTITUTION-EXAMPLE.md ← CONSTITUTION.md 完整示例(多工程)
2307
+ │ ├── PROJECT-EXAMPLE.yaml ← PROJECT.yaml 完整示例(多工程)
2308
+ │ ├── GIT-CONFIG-EXAMPLE.txt ← 子任务 .meta/git-config 格式示例
2309
+ │ ├── DEPLOY-EXAMPLE.yaml ← 部署配置示例(speccore deploy 使用)
2310
+ │ └── VERIFY-EXAMPLE.yaml ← 测试验证配置示例(speccore verify 使用)
2311
+ └── project/ ← 完整项目示例(预留,未来扩展)
2312
+ \`\`\`
2313
+
2314
+ ## 使用方式
2315
+
2316
+ 1. 查看 \`config/CONSTITUTION-EXAMPLE.md\`,仿照修改你的 \`.speccore/CONSTITUTION.md\`
2317
+ 2. 查看 \`config/PROJECT-EXAMPLE.yaml\`,了解 YAML 结构和字段对应关系
2318
+ 3. 查看 \`config/GIT-CONFIG-EXAMPLE.txt\`,了解子任务级 Git 配置格式
2319
+ 4. 查看 \`config/DEPLOY-EXAMPLE.yaml\`,了解部署配置格式(用于 \`speccore deploy\`)
2320
+ 5. 查看 \`config/VERIFY-EXAMPLE.yaml\`,了解测试验证配置格式(用于 \`speccore verify --config\`)
2321
+ 6. 修改后运行 \`speccore update\` 自动同步到 PROJECT.yaml
2322
+
2323
+ ## 注意事项
2324
+
2325
+ - 示例文件中的值为演示用途,请根据实际项目修改
2326
+ - 示例文件更新随 CLI 版本升级,如需最新示例可重新运行 \`speccore init\`
2327
+ `;
2328
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(examplesDir, 'README.md'), readmeContent);
2329
+ // CONSTITUTION.md 完整示例(多工程)
2330
+ const constitutionExample = `## 字段对照总表
2331
+
2332
+ > **AI 必读**:以下表格明确 CONSTITUTION.md 各字段与 PROJECT.yaml 的对应关系。
2333
+ > 人类只需填写 CONSTITUTION.md,PROJECT.yaml 由 CLI 自动生成/同步。
2334
+
2335
+ ### 项目信息表字段
2336
+
2337
+ | CONSTITUTION 列 | PROJECT.yaml 字段 | 语义说明 | 示例 |
2338
+ |:---|:---|:---|:---|
2339
+ | 工程标识 | \`name\` | 全局唯一技术标识 | \`admin-web\` |
2340
+ | 工程类型 | \`type\` | AI 据此生成针对性内容 | \`Java服务\` |
2341
+ | 工程名 | \`description\` | 人类可读的业务名称 | \`预订服务\` |
2342
+ | 项目名称 | \`project_name\` | 给人和 AI 看的业务名称 | \`食堂后台管理\` |
2343
+ | 项目描述 | \`project_desc\` | 工程的详细说明 | \`核心业务服务...\` |
2344
+ | 工程源码路径 | \`code_path\` | 相对项目根目录 | \`./packages/backend\` |
2345
+ | **涉及需求端** | \`requirement_unit\` | **需求文档名称/标识,仅作 AI 参考** | \`订单系统PRD\` |
2346
+ | 备注 | \`notes\` | 额外信息 | \`核心业务\` |
2347
+
2348
+ ### Git 配置表字段
2349
+
2350
+ | CONSTITUTION 列 | PROJECT.yaml 字段 | 语义说明 | 示例 |
2351
+ |:---|:---|:---|:---|
2352
+ | Git 仓库 | \`git_repo\` | 仓库地址 | \`git@github.com:org/repo.git\` |
2353
+ | 默认分支 | \`default_branch\` | 默认分支名 | \`main\`、\`develop\` |
2354
+ | 保护分支 | \`protected_branches\` | 禁止直接 push 的分支列表 | \`main,release/*\` |
2355
+
2356
+ ### 公共默认值机制
2357
+
2358
+ - 「Git 公共配置」章节定义公共默认值
2359
+ - 「Git 配置」表中用 \`—\` 表示使用该字段的公共默认值
2360
+ - 各工程只写和公共配置不同的字段
2361
+
2362
+ ---
2363
+
2364
+ ## 端列表(全局权威)
2365
+
2366
+ > ⚠️ **工程标识是全项目唯一的端标识符**,所有命令(analyze/split/execute)、目录名(020-specs/{端}/)、模板目录(templates/{level}/{端}/)均使用此处声明的端名。
2367
+
2368
+ | 工程标识 | 描述 | 工程类型 |
2369
+ | :--- | :--- | :--- |
2370
+ | admin-web | 后台管理端 | Web管理后台 |
2371
+ | h5-mobile | 移动 H5 端 | H5移动端 |
2372
+ | miniapp | 小程序端 | 微信小程序 |
2373
+ | backend-api | 后台 API 服务 | Java服务 |
2374
+
2375
+ > **端名规则**:
2376
+ > - 工程标识 ≠ 工程名:工程标识是唯一技术标识(如 admin-web),工程名是业务名称(如 "预订服务")
2377
+ > - 全小写、无空格、用短横线分隔(如 order-service)
2378
+ > - 工程类型:AI 据此生成针对性内容(见下方工程类型枚举)
2379
+ > - 此列表是 analyze/split/execute 的唯一端名来源
2380
+
2381
+ ---
2382
+
2383
+ ## 项目信息
2384
+
2385
+ | 工程标识 | 工程类型 | 工程名 | 项目名称 | 项目描述 | 工程源码路径 | 涉及需求端 | 备注 |
2386
+ | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
2387
+ | admin-web | Web管理后台 | 后台管理 | 运营后台 | 运营人员使用的后台管理系统 | ./packages/admin | 后台管理端需求文档 | 核心系统 |
2388
+ | h5-mobile | H5移动端 | H5商城 | 移动商城 | 用户端H5购物页面 | ./packages/h5 | 移动端需求文档 | 高优先级 |
2389
+ | miniapp | 微信小程序 | 小程序 | 微信小程序 | 微信内嵌小程序商城 | ./packages/miniapp | 小程序端需求文档 | 待上架 |
2390
+ | backend-api | Java服务 | 订单服务 | 订单与支付 | 订单创建、支付、退款核心服务 | ./packages/backend | 订单系统PRD | 核心业务 |
2391
+
2392
+ > **字段说明**:
2393
+ > - **工程标识**:全局唯一技术标识(如 admin-web),全小写、无空格、短横线分隔
2394
+ > - **工程类型**:AI 据此生成针对性内容(如 Java服务、H5移动端、Web管理后台)
2395
+ > - **工程名**:人类可读的业务名称(如 "预订服务"、"后台管理")
2396
+ > - **项目名称**:给人和 AI 看的业务名称(如"食堂后台管理"、"商户入驻系统")
2397
+ > - **项目描述**:工程的详细说明、补充信息(如"核心业务服务,处理订单全生命周期")
2398
+ > - **工程源码路径**:相对于项目根目录的代码位置(如 ./packages/backend)
2399
+ > - **涉及需求端**:需求文档名称/标识,仅作 AI 参考(如"后台管理端需求文档"、"订单系统PRD")。说明本工程大概会出现在哪些需求文档中
2400
+ > - **备注**:额外信息、特殊说明、TODO 等
2401
+
2402
+ ---
2403
+
2404
+ ## Git 公共配置
2405
+
2406
+ > 公共默认值。各工程在「Git 配置」表中只写与公共配置不同的字段,未填写的字段自动使用此处默认值。
2407
+ > 用 \`—\` 表示使用公共默认值。
2408
+
2409
+ ### 默认配置
2410
+
2411
+ | 默认分支 | 保护分支 |
2412
+ | :--- | :--- |
2413
+ | main | main,release/* |
2414
+
2415
+ ### 分支类型
2416
+
2417
+ > 定义各种分支类型及其创建源分支。**分支名格式:\`{类型}/{前缀}-{任务名}-{后缀}\`**
2418
+ > - \`{类型}/\` = 类型自带(如 hotfix/、feature/)
2419
+ > - \`{前缀}\` = 任务名前的前缀(可选)
2420
+ > - \`{任务名}\` = 如 Task-001-修复登录
2421
+ > - \`{后缀}\` = 任务名后的后缀(可选)
2422
+ >
2423
+ > 示例:配置了前缀 \`api-\`、后缀 \`-urgent\`,任务名为 \`Task-001\`,则分支名为 \`hotfix/api-Task-001-urgent\`
2424
+
2425
+ | 类型 | 前缀(可选) | 后缀(可选) | 创建源 | 说明 |
2426
+ | :--- | :--- | :--- | :--- | :--- |
2427
+ | feature | — | — | develop | 新功能开发 |
2428
+ | bugfix | — | — | develop | 修复开发环境 Bug |
2429
+ | release | — | — | develop | 版本发布准备 |
2430
+ | hotfix | — | — | main | 生产环境紧急修复 |
2431
+ | support | — | — | main | 长期支持旧版本 |
2432
+
2433
+ > **分支类型说明**:
2434
+ > - **分支名格式**:\`{类型}/{前缀}-{任务名}-{后缀}\`,前缀和后缀均可选
2435
+ > - **前缀列**:任务名前的前缀(如 \`api-\`、\`backend-\`),不填则无
2436
+ > - **后缀列**:任务名后的后缀(如 \`-urgent\`、\`-review\`),不填则无
2437
+ > - **feature**:日常功能开发,从 develop 创建,完成后合并回 develop
2438
+ > - **bugfix**:修复开发中的 Bug,从 develop 创建,完成后合并回 develop
2439
+ > - **release**:准备发布版本,从 develop 创建,完成后合并到 main + develop
2440
+ > - **hotfix**:生产环境紧急修复,从 main 创建,完成后合并到 main + develop
2441
+ > - **support**:长期支持旧版本,从 main 创建,用于维护历史版本
2442
+ > - 可自定义添加其他类型(如 refactor、docs、test 等)
2443
+
2444
+ ---
2445
+
2446
+ ## Git 配置
2447
+
2448
+ > 按工程标识对应。未配置的字段使用「Git 公共配置」中的默认值。
2449
+ > 用 \`—\` 表示使用公共默认值。
2450
+
2451
+ | 工程标识 | Git 仓库 | 默认分支 | 保护分支 | 分支前缀 | 备注 |
2452
+ | :--- | :--- | :--- | :--- | :--- | :--- |
2453
+ | admin-web | git@github.com:myorg/admin-web.git | — | — | — | 核心系统 |
2454
+ | h5-mobile | git@github.com:myorg/h5-mobile.git | — | — | — | 高优先级 |
2455
+ | miniapp | git@github.com:myorg/miniapp.git | — | — | — | 待上架 |
2456
+ | backend-api | git@github.com:myorg/backend.git | — | — | — | 核心业务 |
2457
+
2458
+ > **字段说明**:
2459
+ > - **工程标识**:引用「项目信息」表中的工程标识,一一对应
2460
+ > - **Git 仓库**:仓库地址(如 git@github.com:org/repo.git、https://...)
2461
+ > - **默认分支**:如 main、master、develop。填 \`—\` 表示使用公共默认值
2462
+ > - **保护分支**:禁止直接 push,只能通过 PR 合并(支持通配符如 release/*)。填 \`—\` 表示使用公共默认值
2463
+ > - **分支前缀**:功能分支前缀(如 feature/)。填 \`—\` 表示使用公共默认值
2464
+ > - **备注**:额外说明
2465
+
2466
+ ---
2467
+
2468
+ > 📌 **使用说明**:
2469
+ > 1. 复制本示例内容到 \`CONSTITUTION.md\`,根据实际项目修改
2470
+ > 2. 修改后运行 \`speccore update\` 自动同步到 PROJECT.yaml
2471
+ > 3. 子任务目录下的 \`.meta/git-config\` 可覆盖全局配置(见目录结构说明)
2472
+ `;
2473
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(configDir, 'CONSTITUTION-EXAMPLE.md'), constitutionExample);
2474
+ // PROJECT.yaml 完整示例(多工程)
2475
+ const projectExample = `# PROJECT.yaml — 项目配置(由 CLI 自动生成,不建议手动编辑)
2476
+ # 如需修改,请编辑 CONSTITUTION.md 后运行 speccore update
2477
+ # ─────────────────────────────────────────────────────────────────────────────
2478
+
2479
+ schema_version: 1
2480
+
2481
+ # ─────────────────────────────────────────────────────────────────────────────
2482
+ # 项目基本信息
2483
+ # ─────────────────────────────────────────────────────────────────────────────
2484
+ project:
2485
+ # 项目名称(全局标识)
2486
+ name: my-project
2487
+
2488
+ # ─────────────────────────────────────────────────────────────────────────────
2489
+ # 端列表(每个端 = 一个独立工程)
2490
+ # ─────────────────────────────────────────────────────────────────────────────
2491
+ # 工程标识:全小写、无空格、短横线分隔,全局唯一
2492
+ # 工程类型:AI 据此生成针对性内容(Java服务/H5移动端/Web管理后台等)
2493
+ # code_path:相对于项目根目录的源码位置
2494
+ # project_name:给人和 AI 看的业务名称
2495
+ # project_desc:工程的详细说明
2496
+ # requirement_unit:需求文档名称/标识,仅作 AI 参考,不做校验
2497
+ # notes:额外信息
2498
+ # ─────────────────────────────────────────────────────────────────────────────
2499
+ platforms:
2500
+ - name: admin-web
2501
+ type: Web管理后台
2502
+ description: 后台管理
2503
+ code_path: ./packages/admin
2504
+ project_name: 运营后台
2505
+ project_desc: 运营人员使用的后台管理系统
2506
+ requirement_unit: 后台管理端需求文档
2507
+ notes: 核心系统
2508
+
2509
+ - name: h5-mobile
2510
+ type: H5移动端
2511
+ description: H5商城
2512
+ code_path: ./packages/h5
2513
+ project_name: 移动商城
2514
+ project_desc: 用户端H5购物页面
2515
+ requirement_unit: 移动端需求文档
2516
+ notes: 高优先级
2517
+
2518
+ - name: miniapp
2519
+ type: 微信小程序
2520
+ description: 小程序
2521
+ code_path: ./packages/miniapp
2522
+ project_name: 微信小程序
2523
+ project_desc: 微信内嵌小程序商城
2524
+ requirement_unit: 小程序端需求文档
2525
+ notes: 待上架
2526
+
2527
+ - name: backend-api
2528
+ type: Java服务
2529
+ description: 订单服务
2530
+ code_path: ./packages/backend
2531
+ project_name: 订单与支付
2532
+ project_desc: 订单创建、支付、退款核心服务
2533
+ requirement_unit: 订单系统PRD
2534
+ notes: 核心业务
2535
+
2536
+ # ─────────────────────────────────────────────────────────────────────────────
2537
+ # Git 配置
2538
+ # ─────────────────────────────────────────────────────────────────────────────
2539
+ # default_base:默认基础分支(PR 合并目标)
2540
+ # branch_prefix:功能分支前缀
2541
+ # protected_branches:受保护分支(禁止直接 push,只能通过 PR 合并)
2542
+ # branch_types:分支类型定义
2543
+ # - 类型名自带前缀(如 hotfix/、feature/)
2544
+ # - prefix:任务名前的前缀(可选),如 api-、backend-
2545
+ # - suffix:任务名后的后缀(可选),如 urgent、review
2546
+ # - source:创建源分支,如 develop、main
2547
+ # ─────────────────────────────────────────────────────────────────────────────
2548
+ git:
2549
+ # 默认基础分支(PR 合并目标)
2550
+ default_base: main
2551
+ # 功能分支前缀
2552
+ branch_prefix: feature/
2553
+ # 受保护分支(禁止直接 push,只能通过 PR 合并)
2554
+ protected_branches:
2555
+ - main
2556
+ - master
2557
+ # 分支类型定义。prefix=任务前前缀, suffix=任务后后缀, 均可选
2558
+ branch_types:
2559
+ feature:
2560
+ source: develop
2561
+ bugfix:
2562
+ source: develop
2563
+ release:
2564
+ source: develop
2565
+ hotfix:
2566
+ source: main
2567
+
2568
+ # ─────────────────────────────────────────────────────────────────────────────
2569
+ # 代码扫描范围
2570
+ # ─────────────────────────────────────────────────────────────────────────────
2571
+ # AI 全局分析时扫描的源码目录
2572
+ # ─────────────────────────────────────────────────────────────────────────────
2573
+ code_scope:
2574
+ - src/
2575
+
2576
+ # ─────────────────────────────────────────────────────────────────────────────
2577
+ # 端级 Git 覆盖示例(如需为某个端单独配置)
2578
+ # ─────────────────────────────────────────────────────────────────────────────
2579
+ # 在 platforms 对应端下增加以下字段:
2580
+ # default_branch: develop # 覆盖全局 git.default_base
2581
+ # branch_prefix: hotfix/ # 覆盖全局 git.branch_prefix
2582
+ # protected_branches: # 覆盖全局 git.protected_branches
2583
+ # - main
2584
+ # branch_types: # 覆盖/扩展全局 git.branch_types
2585
+ # hotfix:
2586
+ # prefix: api-
2587
+ # suffix: urgent
2588
+ # source: main
2589
+ # ─────────────────────────────────────────────────────────────────────────────
2590
+ `;
2591
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(configDir, 'PROJECT-EXAMPLE.yaml'), projectExample);
2592
+ // 子任务 git-config 示例
2593
+ const gitConfigExample = `# 子任务级 Git 配置示例(.meta/git-config)
2594
+ # ─────────────────────────────────────────────────────────────────────────────
2595
+ # 配置优先级:子任务 > 迭代级 > 全局 CONSTITUTION.md > 默认值
2596
+ # 未配置的字段自动从上级继承
2597
+ # ─────────────────────────────────────────────────────────────────────────────
2598
+
2599
+ # 分支类型:覆盖默认 feature(如 hotfix、bugfix、release)
2600
+ 分支类型: hotfix
2601
+
2602
+ # 前缀:任务名前的前缀(可选),如 api-、backend-
2603
+ 前缀: api-
2604
+
2605
+ # 后缀:任务名后的后缀(可选),如 urgent、review
2606
+ 后缀: urgent
2607
+
2608
+ # 源分支:从哪个分支创建(如 main、develop)
2609
+ 源分支: main
2610
+
2611
+ # 分支格式:自定义分支名模板(可选,一般不配置)
2612
+ # 支持变量: {type} {prefix} {taskId} {name} {date} {hash4}
2613
+ # 分支格式: {type}/{prefix}{taskId}
2614
+
2615
+ # 自动拉取:创建分支前是否自动 git pull(true/false)
2616
+ 自动拉取: false
2617
+
2618
+ # 远程名称:远程仓库名称(默认 origin)
2619
+ 远程名称: origin
2620
+ `;
2621
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(configDir, 'GIT-CONFIG-EXAMPLE.txt'), gitConfigExample);
2622
+ // v8.3.122+: 复制部署和测试示例配置文件
2623
+ const templateDir = (0, path_1.join)(__dirname, '..', '..', 'templates');
2624
+ const deployExampleSrc = (0, path_1.join)(templateDir, 'deploy-examples.yaml');
2625
+ const verifyExampleSrc = (0, path_1.join)(templateDir, 'verify-spec-example.yaml');
2626
+ try {
2627
+ if (await (0, fs_extra_1.pathExists)(deployExampleSrc)) {
2628
+ const deployContent = await (0, fs_extra_1.readFile)(deployExampleSrc, 'utf-8');
2629
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(configDir, 'DEPLOY-EXAMPLE.yaml'), deployContent);
2630
+ }
2631
+ if (await (0, fs_extra_1.pathExists)(verifyExampleSrc)) {
2632
+ const verifyContent = await (0, fs_extra_1.readFile)(verifyExampleSrc, 'utf-8');
2633
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(configDir, 'VERIFY-EXAMPLE.yaml'), verifyContent);
2634
+ }
2635
+ }
2636
+ catch { /* 模板文件可选 */ }
2637
+ logger_1.logger.info(' 📋 已生成示例配置: .speccore/examples/');
2638
+ }
2155
2639
  //# sourceMappingURL=init.js.map