speccore 8.3.45 → 8.3.47

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 (37) hide show
  1. package/dist/cli.js +7 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/analyze.d.ts.map +1 -1
  4. package/dist/commands/analyze.js +6 -1
  5. package/dist/commands/analyze.js.map +1 -1
  6. package/dist/commands/init.d.ts +10 -1
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +227 -46
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/update.d.ts.map +1 -1
  11. package/dist/commands/update.js +2 -1
  12. package/dist/commands/update.js.map +1 -1
  13. package/dist/commands/verify.d.ts +6 -0
  14. package/dist/commands/verify.d.ts.map +1 -1
  15. package/dist/commands/verify.js +143 -0
  16. package/dist/commands/verify.js.map +1 -1
  17. package/dist/core/ui-verify/index.d.ts +8 -0
  18. package/dist/core/ui-verify/index.d.ts.map +1 -0
  19. package/dist/core/ui-verify/index.js +29 -0
  20. package/dist/core/ui-verify/index.js.map +1 -0
  21. package/dist/core/ui-verify/report-generator.d.ts +6 -0
  22. package/dist/core/ui-verify/report-generator.d.ts.map +1 -0
  23. package/dist/core/ui-verify/report-generator.js +209 -0
  24. package/dist/core/ui-verify/report-generator.js.map +1 -0
  25. package/dist/core/ui-verify/smoke-engine.d.ts +16 -0
  26. package/dist/core/ui-verify/smoke-engine.d.ts.map +1 -0
  27. package/dist/core/ui-verify/smoke-engine.js +297 -0
  28. package/dist/core/ui-verify/smoke-engine.js.map +1 -0
  29. package/dist/core/ui-verify/types.d.ts +100 -0
  30. package/dist/core/ui-verify/types.d.ts.map +1 -0
  31. package/dist/core/ui-verify/types.js +8 -0
  32. package/dist/core/ui-verify/types.js.map +1 -0
  33. package/dist/core/ui-verify/visual-engine.d.ts +21 -0
  34. package/dist/core/ui-verify/visual-engine.d.ts.map +1 -0
  35. package/dist/core/ui-verify/visual-engine.js +177 -0
  36. package/dist/core/ui-verify/visual-engine.js.map +1 -0
  37. package/package.json +3 -2
@@ -21,6 +21,14 @@ export declare function createToolIntegrations(projectRoot: string, toolFilter?:
21
21
  * 遍历所有工具目录和 .agents/skills/,移除当前版本不存在的文件。
22
22
  */
23
23
  export declare function cleanupStaleFiles(projectRoot: string, commands: [string, string, string][], skillNames: string[]): Promise<void>;
24
+ /**
25
+ * 创建示例迭代,展示标准目录结构
26
+ */
27
+ /**
28
+ * 生成 AGENTS.md — 跨工具通用上下文文件。
29
+ * Cursor / Copilot / Windsurf / Codex 原生支持,Claude Code 通过 CLAUDE.md 引用。
30
+ */
31
+ export declare function writeAgentsMd(projectRoot: string): Promise<void>;
24
32
  /**
25
33
  * v6.84.0+: 初始化 AGENTS 规范数据库
26
34
  * 将内置默认角色复制到 .speccore/AGENTS/ 目录
@@ -30,6 +38,7 @@ export declare function initAgentsDir(projectRoot: string): Promise<void>;
30
38
  /**
31
39
  * v6.85.0+: 初始化 RULES 规范库
32
40
  * 将内置默认编码规范复制到 .speccore/RULES/ 目录
41
+ * v8.3.46+: 增加智能过时检测,自动修复已知的过时 inline 模板
33
42
  */
34
43
  export declare function initRulesDir(projectRoot: string): Promise<void>;
35
44
  /**
@@ -52,7 +61,7 @@ export declare function initHooksDir(projectRoot: string): Promise<void>;
52
61
  * - `*.inline.md` → 内容内联到 AGENTS.md
53
62
  * - `*.md` → 只生成索引链接
54
63
  */
55
- export declare function syncAgentsMd(projectRoot: string): Promise<void>;
64
+ export declare function syncAgentsMd(projectRoot: string, force?: boolean): Promise<void>;
56
65
  /**
57
66
  * 检查受保护文件是否需要升级提示。
58
67
  * 文件已存在时不覆盖,但告诉用户模板有什么新变化。
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,gBAAgB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAO,CAAC;AAOvE,yDAAyD;AACzD,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7F;AAED,6BAA6B;AAC7B,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC1F;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrE;AAg0BD,eAAO,MAAM,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EA0BnD,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+HpG;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EACpC,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,IAAI,CAAC,CA6Ff;AAgGD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCtE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGrE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAatE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAarE;AAOD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4HrE;AAuID;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsI/F;AAKD,uBAAuB;AACvB,wBAAgB,sBAAsB,IAAI,MAAM,CAuF/C"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,gBAAgB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAO,CAAC;AAOvE,yDAAyD;AACzD,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7F;AAED,6BAA6B;AAC7B,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC1F;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrE;AAk3BD,eAAO,MAAM,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EA0BnD,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+HpG;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EACpC,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,IAAI,CAAC,CA6Ff;AAED;;GAEG;AAEH;;;GAGG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmHtE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCtE;AAwBD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkKrE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAatE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAarE;AAOD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAkIpF;AAiJD;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsI/F;AAKD,uBAAuB;AACvB,wBAAgB,sBAAsB,IAAI,MAAM,CAuF/C"}
@@ -39,6 +39,7 @@ exports.safeCopyDirWithBackup = safeCopyDirWithBackup;
39
39
  exports.initCommand = initCommand;
40
40
  exports.createToolIntegrations = createToolIntegrations;
41
41
  exports.cleanupStaleFiles = cleanupStaleFiles;
42
+ exports.writeAgentsMd = writeAgentsMd;
42
43
  exports.initAgentsDir = initAgentsDir;
43
44
  exports.initRulesDir = initRulesDir;
44
45
  exports.initCommandsDir = initCommandsDir;
@@ -603,25 +604,63 @@ async function createDefaultFiles(projectRoot, speccoreDir) {
603
604
  \`\`\`
604
605
  .speccore/templates/
605
606
  ├── global/ ← 全局分析文档模板(REQUIREMENT.md、TECH.md、FUNCTION_MAP.md 等)
607
+ │ ├── {platform}/ ← 按端名分层,如 h5-mobile/、admin-web/、booking-service/
608
+ │ └── *.md ← 通用模板(所有端共用)
606
609
  ├── iteration/ ← 迭代级文档模板(各端的 TECH.md、TEST.md、UI_SPEC.md 等)
610
+ │ ├── {platform}/ ← 按端名分层,如 h5-mobile/、admin-web/、booking-service/
611
+ │ └── *.md ← 通用模板(所有端共用)
607
612
  └── task/ ← 任务级文档模板(RISK.md、DEPS.md、MONITOR.md、REVIEW.md 等)
613
+ ├── {type}/ ← 按任务类型分层,如 feature/、bugfix/、refactor/
614
+ │ ├── {platform}/ ← 按端名分层,如 api/、h5/、admin/
615
+ │ ├── _shared/ ← 该类型通用模板
616
+ │ └── *.md
617
+ ├── _shared/ ← 所有任务通用模板
618
+ └── *.md ← 根目录 fallback
608
619
  \`\`\`
609
620
 
610
- ## 查找优先级(task 级别最细)
621
+ ## 查找优先级
611
622
 
612
- 对于 \`task/\` 下的模板,支持按**任务类型 + 端名**分层:
623
+ ### global 级别
624
+
625
+ 查找顺序:**\`[platform]/\` > 根目录** > 内置模板
613
626
 
614
627
  \`\`\`
615
- task/
616
- ├── {type}/ ← 如 feature/、bugfix/、refactor/
617
- │ ├── {platform}/ ← 如 api/、h5/、admin/
618
- │ ├── _shared/ ← 该类型通用模板
619
- │ └── *.md
620
- ├── _shared/ ← 所有任务通用模板
621
- └── *.md ← 根目录 fallback
628
+ global/
629
+ ├── h5-mobile/ ← 仅 H5 端全局分析使用
630
+ │ └── REQUIREMENT.md
631
+ ├── admin-web/ ← 仅 Admin 端全局分析使用
632
+ │ └── FUNCTION_MAP.md
633
+ └── TECH.md ← 所有端通用
622
634
  \`\`\`
623
635
 
624
- 查找顺序:**\`type/platform/\` > \`type/\` > \`_shared/\` > 根目录** > 内置模板
636
+ ### iteration 级别
637
+
638
+ 查找顺序:**\`[platform]/\` > 根目录** > 内置模板
639
+
640
+ \`\`\`
641
+ iteration/
642
+ ├── h5-mobile/ ← 仅 H5 端使用
643
+ │ └── TECH.md
644
+ ├── admin-web/ ← 仅 Admin 端使用
645
+ │ └── UI_SPEC.md
646
+ └── TEST.md ← 所有端通用
647
+ \`\`\`
648
+
649
+ ### task 级别
650
+
651
+ 查找顺序:**\`[type]/[platform]/\` > \`[type]/\` > \`_shared/\` > 根目录** > 内置模板
652
+
653
+ \`\`\`
654
+ task/
655
+ ├── feature/
656
+ │ ├── api/ ← feature 任务 + API 端
657
+ │ ├── h5-mobile/ ← feature 任务 + H5 端
658
+ │ └── _shared/ ← 所有 feature 任务通用
659
+ ├── bugfix/
660
+ │ └── _shared/ ← 所有 bugfix 任务通用
661
+ ├── _shared/ ← 所有任务通用
662
+ └── *.md ← 根目录 fallback
663
+ \`\`\`
625
664
 
626
665
  ## 示例
627
666
 
@@ -630,13 +669,25 @@ task/
630
669
  cp ~/my-template/REQUIREMENT.md .speccore/templates/global/REQUIREMENT.md
631
670
  \`\`\`
632
671
 
633
- 2. 仅 API 端的功能任务使用你的 TEST.md 模板:
672
+ 2. H5 端全局分析专用的 REQUIREMENT.md 模板:
673
+ \`\`\`bash
674
+ mkdir -p .speccore/templates/global/h5-mobile
675
+ cp ~/my-template/REQUIREMENT.md .speccore/templates/global/h5-mobile/REQUIREMENT.md
676
+ \`\`\`
677
+
678
+ 3. H5 端迭代专用的 UI_SPEC.md 模板:
679
+ \`\`\`bash
680
+ mkdir -p .speccore/templates/iteration/h5-mobile
681
+ cp ~/my-template/UI_SPEC.md .speccore/templates/iteration/h5-mobile/UI_SPEC.md
682
+ \`\`\`
683
+
684
+ 4. 仅 API 端的功能任务使用你的 TEST.md 模板:
634
685
  \`\`\`bash
635
686
  mkdir -p .speccore/templates/task/feature/api
636
687
  cp ~/my-template/TEST.md .speccore/templates/task/feature/api/TEST.md
637
688
  \`\`\`
638
689
 
639
- 3. 所有任务通用的 RISK.md 模板:
690
+ 5. 所有任务通用的 RISK.md 模板:
640
691
  \`\`\`bash
641
692
  cp ~/my-template/RISK.md .speccore/templates/task/_shared/RISK.md
642
693
  \`\`\`
@@ -1184,17 +1235,41 @@ SpecCore 规范驱动开发项目。
1184
1235
  ## 项目结构
1185
1236
  \`\`\`
1186
1237
  Iteration-NNN-name/ ← 迭代目录(名称从 context.json 获取)
1187
- ├── 000-overview/ ← 进度总览
1238
+ ├── 000-overview/ ← 进度总览与报告
1239
+ │ ├── PROJECT_GRAPH.md ← 项目任务图谱
1240
+ │ ├── task-summaries/ ← 任务总览报告
1241
+ │ ├── plans/ ← 执行计划
1242
+ │ ├── RETRO.md ← 迭代复盘
1243
+ │ └── PIPELINE_REPORT.md ← Pipeline 报告
1188
1244
  ├── 010-requirements/ ← 需求文档(按功能组织)
1245
+ │ ├── README.md ← 目录规范说明
1189
1246
  │ ├── INDEX.md ← 需求文档索引
1190
1247
  │ ├── sources/ ← [只读] 原始 PRD
1191
- │ └── features/ ← [手动维护] 按功能模块组织
1192
- ├── 020-specs/ ← 需求分析(全局文档在 global/ 子目录)
1248
+ │ ├── converted/ ← [自动生成] doc2spec 转换
1249
+ │ ├── features/ ← [手动维护] 按功能模块组织
1250
+ │ ├── prototypes/ ← 原型素材
1251
+ │ ├── assets/ ← 素材资源(extracted/prototypes/designs/screenshots)
1252
+ │ └── [bugs/refactors/research/REQUIREMENT.md/CLARIFY_REPORT.md] ← 可选
1253
+ ├── 020-specs/ ← 需求分析(analyze 输出)
1254
+ │ ├── overview/ ← 全局规格
1255
+ │ ├── {功能模块}/{端名}/ ← 端级规格
1256
+ │ ├── requirements/ ← 黄金需求
1257
+ │ ├── PLATFORMS.md ← 端列表
1258
+ │ └── QUALITY_AUDIT.md ← 质量审计
1193
1259
  ├── 030-tasks/ ← 开发任务
1194
1260
  │ └── Task-NNN-name/ ← 功能模块任务
1195
1261
  │ ├── .meta/ ← 任务元信息
1196
- │ ├── {platform}/ ← 所有端平铺(如 booking-service/h5-mobile)
1197
- │ │ └── {subtask}/ ← 子任务(代码写到 CONSTITUTION 源码路径)
1262
+ │ │ ├── feature ← 功能单元名
1263
+ │ │ ├── type ← 任务类型
1264
+ │ │ ├── status ← 状态
1265
+ │ │ ├── owner ← 负责人
1266
+ │ │ ├── created-at ← 创建时间
1267
+ │ │ └── estimated-hours ← 预估工时
1268
+ │ ├── _shared/ ← 共享契约(API_CONTRACT.yaml + CONTEXT.md)
1269
+ │ ├── 00-specs/ ← 模块级核心规格(analyze 写入)
1270
+ │ ├── {platform}/ ← 端平铺
1271
+ │ │ └── {subtask}/ ← 执行单元(.meta/ + 规格文档)
1272
+ │ │ └── [ROUTES.md/STATE.md] ← 仅前端
1198
1273
  │ └── .issues.md ← 问题追踪
1199
1274
  └── STAFFING.md ← 人员排期
1200
1275
  \`\`\`
@@ -1208,7 +1283,14 @@ Iteration-NNN-name/ ← 迭代目录(名称从 context.json 获取
1208
1283
  | \`[SPECCORE_ABOUT: <path>]\` | 版本信息页 | 用 present_files 展示 |
1209
1284
  | \`[SPECCORE_MODE: <mode>]\` | 意图模式 | 识别模式后进入对应流程 |
1210
1285
  | \`[SPECCORE_EXEC: <cmd>]\` | 自动执行命令 | 直接 execute_command |
1286
+ | \`[SPECCORE_CONFIRM]\` | 执行前确认 | 需用户确认后再执行(副作用命令) |
1287
+ | \`[SPECCORE_EXEC_STATUS: ok\\|fail(<code>)]\` | 命令执行结果 | 检查执行是否成功 |
1288
+ | \`[SPECCORE_EXEC_ERROR: <msg>]\` | 命令执行异常 | 查看错误详情 |
1211
1289
  | \`[SPECCORE_INTENT]\` | 意图确认块 | 展示给用户确认 |
1290
+ | \`[SPECCORE_CONFIRM_STEP: <order>/<total>] <cmd>\` | Pipeline 步骤信息 | 展示当前步骤详情 |
1291
+ | \`[SPECCORE_CONFIRM_ASK: ...]\` | Pipeline 步骤询问 | 等待用户输入 y(确认)/ s(跳过)/ q(停止) |
1292
+ | \`[SPECCORE_STEP_FAIL: <cmd>]\` | Pipeline 步骤失败 | 提示用户选择重试/跳过/停止 |
1293
+ | \`[SPECCORE_AMBIGUOUS: <cmd1> \\| <cmd2>]\` | 意图模糊 | 展示匹配选项让用户选择 |
1212
1294
  | \`[SPECCORE_CONTINUE: <path>]\` | 批次执行完成,需续批 | **必须开始新对话**,先读取 \`<path>\` 恢复上下文,再按提示命令继续下一批次 |
1213
1295
 
1214
1296
  ## 行为约束
@@ -1262,9 +1344,29 @@ async function initAgentsDir(projectRoot) {
1262
1344
  }
1263
1345
  logger_1.logger.info(' 🤖 已初始化 AGENTS 规范数据库: .speccore/AGENTS/');
1264
1346
  }
1347
+ // ── v8.3.46+: 智能过时检测 ──
1348
+ /** 已知过时标记:正则 + 描述 */
1349
+ const OBSOLETE_MARKERS = [
1350
+ { pattern: /^\s*[│├└].*10-backend\/|^\s*[│├└].*20-frontend\//m, desc: '旧端分类层(10-backend/20-frontend/)' },
1351
+ { pattern: /^\s*[│|]\s+.*src\/\s+←\s+AI\s+输出代码\s*$/m, desc: '子任务目录含 src/' },
1352
+ { pattern: /^\s*[│|]\s+.*tests\/\s+←\s+AI\s+输出测试\s*$/m, desc: '子任务目录含 tests/' },
1353
+ { pattern: /execute\s+-I\s+/, desc: 'execute -I(应为 -i)' },
1354
+ { pattern: /CONSTITUTION\.md\s+指定的源码路径(?!\s*\/\s*PROJECT\.yaml)/, desc: '缺少 PROJECT.yaml 引用' },
1355
+ { pattern: /禁止在迭代目录下创建\s+10-backend/, desc: '旧表述:迭代目录(应为任务目录)' },
1356
+ ];
1357
+ function detectObsoleteContent(content) {
1358
+ const markers = [];
1359
+ for (const marker of OBSOLETE_MARKERS) {
1360
+ if (marker.pattern.test(content)) {
1361
+ markers.push(marker.desc);
1362
+ }
1363
+ }
1364
+ return { hasObsolete: markers.length > 0, markers };
1365
+ }
1265
1366
  /**
1266
1367
  * v6.85.0+: 初始化 RULES 规范库
1267
1368
  * 将内置默认编码规范复制到 .speccore/RULES/ 目录
1369
+ * v8.3.46+: 增加智能过时检测,自动修复已知的过时 inline 模板
1268
1370
  */
1269
1371
  async function initRulesDir(projectRoot) {
1270
1372
  const rulesDir = (0, path_1.join)(projectRoot, '.speccore', 'RULES');
@@ -1277,7 +1379,8 @@ async function initRulesDir(projectRoot) {
1277
1379
  await (0, fs_extra_1.writeFile)(destPath, rule.content);
1278
1380
  }
1279
1381
  }
1280
- // v6.98.0+: 创建 AGENTS.md 投影用的 .inline.md 文件(不覆盖用户已自定义的)
1382
+ // v6.98.0+: 创建 AGENTS.md 投影用的 .inline.md 文件
1383
+ // v8.3.46+: 智能过时检测 — 发现已知过时标记时自动覆盖
1281
1384
  const inlineTemplates = [
1282
1385
  {
1283
1386
  name: '01-PROJECT_STRUCTURE.inline.md',
@@ -1285,44 +1388,90 @@ async function initRulesDir(projectRoot) {
1285
1388
 
1286
1389
  \`\`\`
1287
1390
  Iteration-NNN-name/ ← 迭代目录
1288
- ├── 000-overview/ ← 进度总览
1391
+ ├── 000-overview/ ← 进度总览与报告
1392
+ │ ├── PROJECT_GRAPH.md ← 项目任务图谱(split 后生成)
1393
+ │ ├── task-summaries/ ← 任务总览报告(TASK_SUMMARY-*.md)
1394
+ │ ├── plans/ ← 执行计划(PLAN.md + HTML 可视化)
1395
+ │ ├── RETRO.md ← 迭代复盘报告(done 后生成)
1396
+ │ └── PIPELINE_REPORT.md ← Pipeline 执行报告(dev 后生成)
1289
1397
  ├── 010-requirements/ ← 需求文档(按功能组织)
1290
1398
  │ ├── README.md ← 目录规范说明
1291
1399
  │ ├── INDEX.md ← 需求文档索引
1292
- │ ├── sources/ ← [只读] 原始 PRD
1400
+ │ ├── sources/ ← [只读] 原始 PRD(.docx/.pdf/.md)
1293
1401
  │ ├── converted/ ← [自动生成] doc2spec 转换后的 MD
1294
1402
  │ ├── features/ ← [手动维护] 按功能模块组织
1295
- │ │ └── {feature}/README.md
1403
+ │ │ └── {feature}/
1404
+ │ │ └── README.md
1296
1405
  │ ├── prototypes/ ← 原型(HTML/图片/链接,内容不限)
1297
- │ └── assets/ ← doc2spec 提取的图片
1298
- ├── 020-specs/ ← 需求分析
1406
+ │ ├── assets/ ← 素材资源
1407
+ │ │ ├── extracted/ ← doc2spec 提取的图片/媒体
1408
+ │ │ ├── prototypes/ ← 产品原型
1409
+ │ │ ├── designs/ ← UI 设计稿
1410
+ │ │ └── screenshots/ ← 参考截图
1411
+ │ ├── bugs/ ← [可选] bug 需求文档
1412
+ │ ├── refactors/ ← [可选] 重构需求文档
1413
+ │ ├── research/ ← [可选] 调研需求文档
1414
+ │ ├── REQUIREMENT.md ← [可选] 主需求文档
1415
+ │ └── CLARIFY_REPORT.md ← [可选] 需求澄清报告
1416
+ ├── 020-specs/ ← 需求分析(analyze 输出)
1417
+ │ ├── overview/ ← 全局规格(跨端共享)
1418
+ │ │ └── REQUIREMENT.md / ANALYSIS.md / TECH.md / DEV_GUIDE.md ...
1419
+ │ ├── {功能模块}/ ← 按功能模块组织
1420
+ │ │ └── {端名}/ ← 端级规格
1421
+ │ │ └── TECH.md / TEST.md / UI_SPEC.md / DEV_GUIDE.md ...
1422
+ │ ├── requirements/ ← 黄金需求(clarify 输出,analyze 读取)
1423
+ │ ├── PLATFORMS.md ← 端列表
1424
+ │ └── QUALITY_AUDIT.md ← 质量审计报告
1299
1425
  ├── 030-tasks/ ← 开发任务
1300
1426
  │ └── Task-*/ ← 功能模块分组(聚合相关子任务)
1301
- │ ├── _shared/ ← 共享契约(API_CONTRACT.yaml + CONTEXT.md)
1302
- │ ├── 00-specs/ ← 模块级核心规格(REQ/TECH/SCHEMA/CHANGELOG)
1427
+ │ ├── .meta/ ← 任务元信息
1428
+ │ │ ├── feature ← 功能单元名
1429
+ │ │ ├── type ← 任务类型(feature/bugfix/refactor/research)
1430
+ │ │ ├── status ← 状态(todo/doing/done)
1431
+ │ │ ├── owner ← 负责人
1432
+ │ │ ├── created-at ← 创建时间
1433
+ │ │ └── estimated-hours ← 预估工时
1434
+ │ ├── _shared/ ← 共享契约
1435
+ │ │ ├── API_CONTRACT.yaml
1436
+ │ │ └── CONTEXT.md
1437
+ │ ├── 00-specs/ ← 模块级核心规格(analyze 阶段写入)
1438
+ │ │ ├── REQ.md ← 需求规格
1439
+ │ │ ├── TECH.md ← 技术规格
1440
+ │ │ ├── SCHEMA.md ← 数据模型(条件创建)
1441
+ │ │ ├── CHANGELOG.md ← 变更记录
1442
+ │ │ └── CONTEXT.md ← [兼容] 任务上下文副本
1303
1443
  │ ├── {端名}/ ← 端平铺(如 booking-service / h5-mobile / admin-web)
1304
1444
  │ │ └── {子任务}/ ← 执行单元
1445
+ │ │ ├── .meta/ ← 子任务元信息
1446
+ │ │ │ ├── type
1447
+ │ │ │ ├── status
1448
+ │ │ │ ├── owner
1449
+ │ │ │ ├── created-at
1450
+ │ │ │ ├── estimated-hours ← 预估工时
1451
+ │ │ │ ├── feature ← 功能单元名
1452
+ │ │ │ └── git-config ← 子任务级 Git 配置
1453
+ │ │ ├── TASK.md ← 子任务追踪
1454
+ │ │ ├── TEST.md ← 测试用例
1455
+ │ │ ├── RISK.md ← 风险评估
1456
+ │ │ ├── DEPS.md ← 依赖分析
1457
+ │ │ ├── MONITOR.md ← 监控方案
1458
+ │ │ ├── REVIEW.md ← 评审清单
1459
+ │ │ ├── DEPLOY.md ← 部署清单
1460
+ │ │ ├── ERROR_CODES.md
1461
+ │ │ ├── COMPONENT_TREE.md ← 组件树(仅前端)
1462
+ │ │ ├── ROUTES.md ← 路由设计(仅前端)
1463
+ │ │ └── STATE.md ← 状态管理(仅前端)
1305
1464
  │ └── .issues.md ← 问题追踪
1306
1465
  │
1307
- │ 子任务目录结构({端名}/{子任务}/):
1308
- │ ├── .meta/ ← 子任务元信息(type/status/owner/created-at)
1309
- │ ├── git-config ← 子任务级 Git 配置
1310
- │ ├── TASK.md ← 子任务追踪
1311
- │ ├── TEST.md ← 测试用例
1312
- │ ├── RISK.md ← 风险评估
1313
- │ ├── DEPS.md ← 依赖分析
1314
- │ ├── MONITOR.md ← 监控方案
1315
- │ ├── REVIEW.md ← 评审清单
1316
- │ ├── DEPLOY.md ← 部署清单
1317
- │ ├── ERROR_CODES.md ← 错误码
1318
- │ └── COMPONENT_TREE.md ← 组件树(仅前端)
1319
- │
1320
1466
  │ > ⚠️ 代码输出位置:AI 生成的代码写入 CONSTITUTION.md/PROJECT.yaml 中声明的「源码路径」,
1321
1467
  │ > 禁止写入迭代目录内。子任务目录只存放规格文档(TASK.md/TEST.md/RISK.md 等)。
1322
1468
  │
1323
1469
  │ research 类型任务目录结构(无前后端分层):
1324
- │ ├── _shared/ ← 共享上下文
1325
- │ ├── 00-specs/ ← 核心规格(REQ.md/TECH.md)
1470
+ │ ├── _shared/
1471
+ │ │ └── CONTEXT.md
1472
+ │ ├── 00-specs/
1473
+ │ │ ├── REQ.md
1474
+ │ │ └── TECH.md
1326
1475
  │ ├── RESEARCH.md ← 调研报告
1327
1476
  │ ├── COMPARISON.md ← 方案对比
1328
1477
  │ └── .issues.md ← 问题追踪
@@ -1342,7 +1491,14 @@ Iteration-NNN-name/ ← 迭代目录
1342
1491
  | \`[SPECCORE_ABOUT: <path>]\` | 版本信息页 | 用 present_files 展示 |
1343
1492
  | \`[SPECCORE_MODE: <mode>]\` | 意图模式 | 识别模式后进入对应流程 |
1344
1493
  | \`[SPECCORE_EXEC: <cmd>]\` | 自动执行命令 | 直接 execute_command |
1494
+ | \`[SPECCORE_CONFIRM]\` | 执行前确认 | 需用户确认后再执行(副作用命令) |
1495
+ | \`[SPECCORE_EXEC_STATUS: ok\\|fail(<code>)]\` | 命令执行结果 | 检查执行是否成功 |
1496
+ | \`[SPECCORE_EXEC_ERROR: <msg>]\` | 命令执行异常 | 查看错误详情 |
1345
1497
  | \`[SPECCORE_INTENT]\` | 意图确认块 | 展示给用户确认 |
1498
+ | \`[SPECCORE_CONFIRM_STEP: <order>/<total>] <cmd>\` | Pipeline 步骤信息 | 展示当前步骤详情 |
1499
+ | \`[SPECCORE_CONFIRM_ASK: ...]\` | Pipeline 步骤询问 | 等待用户输入 y(确认)/ s(跳过)/ q(停止) |
1500
+ | \`[SPECCORE_STEP_FAIL: <cmd>]\` | Pipeline 步骤失败 | 提示用户选择重试/跳过/停止 |
1501
+ | \`[SPECCORE_AMBIGUOUS: <cmd1> \\| <cmd2>]\` | 意图模糊 | 展示匹配选项让用户选择 |
1346
1502
  | \`[SPECCORE_CONTINUE: <path>]\` | 批次执行完成,需续批 | **必须开始新对话**,先读取 \`<path>\` 恢复上下文,再按提示命令继续下一批次 |`,
1347
1503
  },
1348
1504
  {
@@ -1359,9 +1515,19 @@ speccore execute -i <迭代名> --all # 执行所有任务
1359
1515
  ];
1360
1516
  for (const tpl of inlineTemplates) {
1361
1517
  const destPath = (0, path_1.join)(rulesDir, tpl.name);
1362
- if (!(await (0, fs_extra_1.pathExists)(destPath))) {
1518
+ const exists = await (0, fs_extra_1.pathExists)(destPath);
1519
+ if (!exists) {
1363
1520
  await (0, fs_extra_1.writeFile)(destPath, tpl.content);
1364
1521
  }
1522
+ else if (tpl.name.endsWith('.inline.md')) {
1523
+ // v8.3.46+: 智能过时检测 — 发现已知过时标记时自动覆盖
1524
+ const existingContent = await (0, fs_extra_1.readFile)(destPath, 'utf-8');
1525
+ const { hasObsolete, markers } = detectObsoleteContent(existingContent);
1526
+ if (hasObsolete) {
1527
+ logger_1.logger.info(` 🔄 检测到过时内容 [${tpl.name}]: ${markers.join('、')},已自动更新`);
1528
+ await (0, fs_extra_1.writeFile)(destPath, tpl.content);
1529
+ }
1530
+ }
1365
1531
  }
1366
1532
  logger_1.logger.info(' 📋 已初始化 RULES 规范库: .speccore/RULES/');
1367
1533
  }
@@ -1422,8 +1588,13 @@ const AUTO_END = '<!-- SPECCORE_AUTO_INDEX_END -->';
1422
1588
  * - `*.inline.md` → 内容内联到 AGENTS.md
1423
1589
  * - `*.md` → 只生成索引链接
1424
1590
  */
1425
- async function syncAgentsMd(projectRoot) {
1591
+ async function syncAgentsMd(projectRoot, force = false) {
1426
1592
  const agentsMdPath = (0, path_1.join)(projectRoot, 'AGENTS.md');
1593
+ // v8.3.46+: force 模式 — 重新生成手动区,不保留旧内容
1594
+ // 用户自定义内容需手动备份,update 时直接采用最新内置模板
1595
+ if (force) {
1596
+ await writeAgentsMd(projectRoot);
1597
+ }
1427
1598
  // 1. 读取现有 AGENTS.md,提取手动区(AUTO_START 之前的部分)
1428
1599
  let manualPart = '';
1429
1600
  if (await (0, fs_extra_1.pathExists)(agentsMdPath)) {
@@ -1490,7 +1661,7 @@ async function syncAgentsMd(projectRoot) {
1490
1661
  if (ruleLinks.length > 0)
1491
1662
  ruleParts.push('### 更多规范\n' + ruleLinks.join('\n'));
1492
1663
  if (ruleParts.length > 0) {
1493
- sections.push('## 编码规范与规则\n\n' + ruleParts.join('\n\n'));
1664
+ sections.push('## 规范与参考\n\n' + ruleParts.join('\n\n'));
1494
1665
  }
1495
1666
  // 2c. 扫描 .agents/agents/(v6.99.0+: Agent 角色定义投影)
1496
1667
  const projectAgentsDir = (0, path_1.join)(projectRoot, '.agents', 'agents');
@@ -1591,8 +1762,16 @@ async function createSampleIteration(projectRoot) {
1591
1762
  '│ └── {feature}/',
1592
1763
  '│ └── README.md',
1593
1764
  '├── prototypes/ ← 原型(HTML/图片/链接,内容不限)',
1594
- '└── assets/',
1595
- ' └── extracted/ ← doc2spec 提取的图片/媒体文件',
1765
+ '├── assets/ ← 素材资源',
1766
+ '│ ├── extracted/ ← doc2spec 提取的图片/媒体文件',
1767
+ '│ ├── prototypes/ ← 产品原型',
1768
+ '│ ├── designs/ ← UI 设计稿',
1769
+ '│ └── screenshots/ ← 参考截图',
1770
+ '├── bugs/ ← [可选] bug 需求文档',
1771
+ '├── refactors/ ← [可选] 重构需求文档',
1772
+ '├── research/ ← [可选] 调研需求文档',
1773
+ '├── REQUIREMENT.md ← [可选] 主需求文档',
1774
+ '└── CLARIFY_REPORT.md ← [可选] 需求澄清报告',
1596
1775
  '```',
1597
1776
  '',
1598
1777
  '## 使用规范',
@@ -1601,7 +1780,9 @@ async function createSampleIteration(projectRoot) {
1601
1780
  '2. **converted/** — doc2spec 命令自动输出转换后的 MD,人工不修改',
1602
1781
  '3. **features/** — 按功能模块手动补充需求细节,每个模块一个子目录',
1603
1782
  '4. **prototypes/** — 原型文件,HTML/图片/链接均可,需求文档中链接到原型的会被主动读取',
1604
- '5. **assets/extracted/** — doc2spec 自动提取的图片,人工不修改',
1783
+ '5. **assets/** — 素材资源目录,包含 extracted(doc2spec 自动提取)、prototypes(产品原型)、designs(UI 设计稿)、screenshots(参考截图)',
1784
+ '6. **bugs/refactors/research/** — 可选目录,按类型组织补充需求',
1785
+ '7. **REQUIREMENT.md / CLARIFY_REPORT.md** — 可选的主需求文档和澄清报告',
1605
1786
  ].join('\n'));
1606
1787
  // 010-requirements/INDEX.md — 需求文档索引
1607
1788
  await (0, fs_extra_1.writeFile)((0, path_1.join)(prdDir, 'INDEX.md'), [