speccore 8.3.333 → 8.3.341

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 (309) hide show
  1. package/.agents/skills/spec-ask/SKILL.md +4 -0
  2. package/.agents/skills/spec-unitize/SKILL.md +9 -1
  3. package/.agents/skills/speccore-router/SKILL.md +12 -11
  4. package/README.en.md +3 -11
  5. package/README.md +3 -13
  6. package/dist/cli.js +64 -206
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/analyze.d.ts.map +1 -1
  9. package/dist/commands/analyze.js +530 -481
  10. package/dist/commands/analyze.js.map +1 -1
  11. package/dist/commands/ask.d.ts.map +1 -1
  12. package/dist/commands/ask.js +6 -0
  13. package/dist/commands/ask.js.map +1 -1
  14. package/dist/commands/completion.d.ts.map +1 -1
  15. package/dist/commands/completion.js +9 -7
  16. package/dist/commands/completion.js.map +1 -1
  17. package/dist/commands/doc2spec.d.ts +44 -1
  18. package/dist/commands/doc2spec.d.ts.map +1 -1
  19. package/dist/commands/doc2spec.js +257 -5
  20. package/dist/commands/doc2spec.js.map +1 -1
  21. package/dist/commands/doctor.js +3 -3
  22. package/dist/commands/doctor.js.map +1 -1
  23. package/dist/commands/done.js +1 -5
  24. package/dist/commands/done.js.map +1 -1
  25. package/dist/commands/execute.js +118 -66
  26. package/dist/commands/execute.js.map +1 -1
  27. package/dist/commands/help.js +6 -54
  28. package/dist/commands/help.js.map +1 -1
  29. package/dist/commands/init.d.ts.map +1 -1
  30. package/dist/commands/init.js +71 -47
  31. package/dist/commands/init.js.map +1 -1
  32. package/dist/commands/iteration/create.d.ts.map +1 -1
  33. package/dist/commands/iteration/create.js +72 -10
  34. package/dist/commands/iteration/create.js.map +1 -1
  35. package/dist/commands/iteration/taskify.d.ts.map +1 -1
  36. package/dist/commands/iteration/taskify.js +133 -35
  37. package/dist/commands/iteration/taskify.js.map +1 -1
  38. package/dist/commands/pr.d.ts.map +1 -1
  39. package/dist/commands/pr.js +24 -2
  40. package/dist/commands/pr.js.map +1 -1
  41. package/dist/commands/prompts.d.ts +6 -0
  42. package/dist/commands/prompts.d.ts.map +1 -1
  43. package/dist/commands/prompts.js +19 -10
  44. package/dist/commands/prompts.js.map +1 -1
  45. package/dist/commands/search.js +1 -1
  46. package/dist/commands/search.js.map +1 -1
  47. package/dist/commands/status-panel.d.ts.map +1 -1
  48. package/dist/commands/status-panel.js +23 -34
  49. package/dist/commands/status-panel.js.map +1 -1
  50. package/dist/commands/unitize.d.ts +3 -0
  51. package/dist/commands/unitize.d.ts.map +1 -1
  52. package/dist/commands/unitize.js +32 -9
  53. package/dist/commands/unitize.js.map +1 -1
  54. package/dist/commands/update-env-configs.d.ts.map +1 -1
  55. package/dist/commands/update-env-configs.js +2 -1
  56. package/dist/commands/update-env-configs.js.map +1 -1
  57. package/dist/commands/update.d.ts +4 -0
  58. package/dist/commands/update.d.ts.map +1 -1
  59. package/dist/commands/update.js +41 -1
  60. package/dist/commands/update.js.map +1 -1
  61. package/dist/commands/welcome.d.ts.map +1 -1
  62. package/dist/commands/welcome.js +41 -0
  63. package/dist/commands/welcome.js.map +1 -1
  64. package/dist/core/analyze-engine.js +3 -3
  65. package/dist/core/analyze-engine.js.map +1 -1
  66. package/dist/core/arbitration/l3-human-arbiter.js +1 -1
  67. package/dist/core/arbitration/l3-human-arbiter.js.map +1 -1
  68. package/dist/core/arbitration/verdict-generator.js +1 -1
  69. package/dist/core/arbitration/verdict-generator.js.map +1 -1
  70. package/dist/core/ask-context.d.ts.map +1 -1
  71. package/dist/core/ask-context.js +14 -3
  72. package/dist/core/ask-context.js.map +1 -1
  73. package/dist/core/ask-engine.d.ts.map +1 -1
  74. package/dist/core/ask-engine.js +55 -49
  75. package/dist/core/ask-engine.js.map +1 -1
  76. package/dist/core/code-graph/reporter.d.ts.map +1 -1
  77. package/dist/core/code-graph/reporter.js +3 -12
  78. package/dist/core/code-graph/reporter.js.map +1 -1
  79. package/dist/core/code-graph/requirement-linker.js +1 -1
  80. package/dist/core/code-graph/requirement-linker.js.map +1 -1
  81. package/dist/core/code-scanner.js +1 -1
  82. package/dist/core/code-scanner.js.map +1 -1
  83. package/dist/core/deploy/engine.d.ts.map +1 -1
  84. package/dist/core/deploy/engine.js +58 -44
  85. package/dist/core/deploy/engine.js.map +1 -1
  86. package/dist/core/environment-config.d.ts +13 -0
  87. package/dist/core/environment-config.d.ts.map +1 -1
  88. package/dist/core/environment-config.js +28 -1
  89. package/dist/core/environment-config.js.map +1 -1
  90. package/dist/core/error-diagnosis.js +2 -2
  91. package/dist/core/error-diagnosis.js.map +1 -1
  92. package/dist/core/git-integration.d.ts +5 -7
  93. package/dist/core/git-integration.d.ts.map +1 -1
  94. package/dist/core/git-integration.js +137 -12
  95. package/dist/core/git-integration.js.map +1 -1
  96. package/dist/core/global-knowledge.d.ts.map +1 -1
  97. package/dist/core/global-knowledge.js +25 -11
  98. package/dist/core/global-knowledge.js.map +1 -1
  99. package/dist/core/handoff-generator.d.ts.map +1 -1
  100. package/dist/core/handoff-generator.js +3 -1
  101. package/dist/core/handoff-generator.js.map +1 -1
  102. package/dist/core/index-guard.d.ts.map +1 -1
  103. package/dist/core/index-guard.js +4 -26
  104. package/dist/core/index-guard.js.map +1 -1
  105. package/dist/core/intent-recognition.d.ts +1 -1
  106. package/dist/core/intent-recognition.d.ts.map +1 -1
  107. package/dist/core/intent-recognition.js +68 -68
  108. package/dist/core/intent-recognition.js.map +1 -1
  109. package/dist/core/knowledge-graph.d.ts.map +1 -1
  110. package/dist/core/knowledge-graph.js +6 -4
  111. package/dist/core/knowledge-graph.js.map +1 -1
  112. package/dist/core/name-validator.d.ts.map +1 -1
  113. package/dist/core/name-validator.js +41 -20
  114. package/dist/core/name-validator.js.map +1 -1
  115. package/dist/core/pinyin-initials.d.ts +10 -0
  116. package/dist/core/pinyin-initials.d.ts.map +1 -0
  117. package/dist/core/pinyin-initials.js +44 -0
  118. package/dist/core/pinyin-initials.js.map +1 -0
  119. package/dist/core/prompt-builder.js +1 -1
  120. package/dist/core/prompt-builder.js.map +1 -1
  121. package/dist/core/prompt-plugins/analyze-graph-plugin.js +1 -1
  122. package/dist/core/prompt-plugins/analyze-graph-plugin.js.map +1 -1
  123. package/dist/core/reindex-engine.js +4 -4
  124. package/dist/core/reindex-engine.js.map +1 -1
  125. package/dist/core/skeleton-residue.d.ts +13 -0
  126. package/dist/core/skeleton-residue.d.ts.map +1 -1
  127. package/dist/core/skeleton-residue.js +83 -14
  128. package/dist/core/skeleton-residue.js.map +1 -1
  129. package/dist/core/spec-merger.d.ts.map +1 -1
  130. package/dist/core/spec-merger.js +3 -2
  131. package/dist/core/spec-merger.js.map +1 -1
  132. package/dist/core/state.d.ts +10 -0
  133. package/dist/core/state.d.ts.map +1 -1
  134. package/dist/core/state.js +20 -1
  135. package/dist/core/state.js.map +1 -1
  136. package/dist/core/structured-extractor.d.ts +6 -0
  137. package/dist/core/structured-extractor.d.ts.map +1 -1
  138. package/dist/core/structured-extractor.js +6 -0
  139. package/dist/core/structured-extractor.js.map +1 -1
  140. package/dist/core/task-paths.d.ts +12 -0
  141. package/dist/core/task-paths.d.ts.map +1 -1
  142. package/dist/core/task-paths.js +33 -1
  143. package/dist/core/task-paths.js.map +1 -1
  144. package/dist/core/unified-config.d.ts +7 -1
  145. package/dist/core/unified-config.d.ts.map +1 -1
  146. package/dist/core/unified-config.js +70 -21
  147. package/dist/core/unified-config.js.map +1 -1
  148. package/dist/core/unit-staffing.d.ts +21 -4
  149. package/dist/core/unit-staffing.d.ts.map +1 -1
  150. package/dist/core/unit-staffing.js +59 -12
  151. package/dist/core/unit-staffing.js.map +1 -1
  152. package/dist/core/usage-analytics.js +1 -1
  153. package/dist/core/usage-analytics.js.map +1 -1
  154. package/dist/core/validator.d.ts.map +1 -1
  155. package/dist/core/validator.js +45 -5
  156. package/dist/core/validator.js.map +1 -1
  157. package/dist/core/verify-report-aggregator.d.ts.map +1 -1
  158. package/dist/core/verify-report-aggregator.js +19 -2
  159. package/dist/core/verify-report-aggregator.js.map +1 -1
  160. package/dist/utils/task-utils.d.ts +4 -1
  161. package/dist/utils/task-utils.d.ts.map +1 -1
  162. package/dist/utils/task-utils.js +30 -4
  163. package/dist/utils/task-utils.js.map +1 -1
  164. package/package.json +4 -3
  165. package/templates/deploy-examples.yaml +33 -5
  166. package/templates/html/speccore-ask-explain.html +1 -1
  167. package/templates/html/speccore-ask-guide.html +1 -1
  168. package/templates/html/speccore-ask-match.html +1 -1
  169. package/templates/html/speccore-ask-pipeline.html +1 -1
  170. package/templates/html/speccore-ask-result.html +1 -1
  171. package/templates/html/speccore-help.html +2 -2
  172. package/templates/speccore-yml-example.yml +174 -54
  173. package/templates/verify-spec-example.yaml +66 -1
  174. package/dist/commands/audit.d.ts +0 -12
  175. package/dist/commands/audit.d.ts.map +0 -1
  176. package/dist/commands/audit.js +0 -540
  177. package/dist/commands/audit.js.map +0 -1
  178. package/dist/commands/backup.d.ts +0 -18
  179. package/dist/commands/backup.d.ts.map +0 -1
  180. package/dist/commands/backup.js +0 -102
  181. package/dist/commands/backup.js.map +0 -1
  182. package/dist/commands/baseline.d.ts +0 -13
  183. package/dist/commands/baseline.d.ts.map +0 -1
  184. package/dist/commands/baseline.js +0 -227
  185. package/dist/commands/baseline.js.map +0 -1
  186. package/dist/commands/chain.d.ts +0 -55
  187. package/dist/commands/chain.d.ts.map +0 -1
  188. package/dist/commands/chain.js +0 -501
  189. package/dist/commands/chain.js.map +0 -1
  190. package/dist/commands/clarify.d.ts +0 -17
  191. package/dist/commands/clarify.d.ts.map +0 -1
  192. package/dist/commands/clarify.js +0 -351
  193. package/dist/commands/clarify.js.map +0 -1
  194. package/dist/commands/code-index.d.ts +0 -21
  195. package/dist/commands/code-index.d.ts.map +0 -1
  196. package/dist/commands/code-index.js +0 -193
  197. package/dist/commands/code-index.js.map +0 -1
  198. package/dist/commands/context.d.ts +0 -10
  199. package/dist/commands/context.d.ts.map +0 -1
  200. package/dist/commands/context.js +0 -213
  201. package/dist/commands/context.js.map +0 -1
  202. package/dist/commands/current.d.ts +0 -10
  203. package/dist/commands/current.d.ts.map +0 -1
  204. package/dist/commands/current.js +0 -53
  205. package/dist/commands/current.js.map +0 -1
  206. package/dist/commands/dev.d.ts +0 -18
  207. package/dist/commands/dev.d.ts.map +0 -1
  208. package/dist/commands/dev.js +0 -854
  209. package/dist/commands/dev.js.map +0 -1
  210. package/dist/commands/diff.d.ts +0 -10
  211. package/dist/commands/diff.d.ts.map +0 -1
  212. package/dist/commands/diff.js +0 -160
  213. package/dist/commands/diff.js.map +0 -1
  214. package/dist/commands/global-status.d.ts +0 -9
  215. package/dist/commands/global-status.d.ts.map +0 -1
  216. package/dist/commands/global-status.js +0 -135
  217. package/dist/commands/global-status.js.map +0 -1
  218. package/dist/commands/graph.d.ts +0 -25
  219. package/dist/commands/graph.d.ts.map +0 -1
  220. package/dist/commands/graph.js +0 -523
  221. package/dist/commands/graph.js.map +0 -1
  222. package/dist/commands/handover.d.ts +0 -11
  223. package/dist/commands/handover.d.ts.map +0 -1
  224. package/dist/commands/handover.js +0 -170
  225. package/dist/commands/handover.js.map +0 -1
  226. package/dist/commands/health.d.ts +0 -7
  227. package/dist/commands/health.d.ts.map +0 -1
  228. package/dist/commands/health.js +0 -80
  229. package/dist/commands/health.js.map +0 -1
  230. package/dist/commands/history.d.ts +0 -9
  231. package/dist/commands/history.d.ts.map +0 -1
  232. package/dist/commands/history.js +0 -117
  233. package/dist/commands/history.js.map +0 -1
  234. package/dist/commands/impact.d.ts +0 -12
  235. package/dist/commands/impact.d.ts.map +0 -1
  236. package/dist/commands/impact.js +0 -238
  237. package/dist/commands/impact.js.map +0 -1
  238. package/dist/commands/import.d.ts +0 -19
  239. package/dist/commands/import.d.ts.map +0 -1
  240. package/dist/commands/import.js +0 -673
  241. package/dist/commands/import.js.map +0 -1
  242. package/dist/commands/knowledge.d.ts +0 -6
  243. package/dist/commands/knowledge.d.ts.map +0 -1
  244. package/dist/commands/knowledge.js +0 -94
  245. package/dist/commands/knowledge.js.map +0 -1
  246. package/dist/commands/lifecycle.d.ts +0 -9
  247. package/dist/commands/lifecycle.d.ts.map +0 -1
  248. package/dist/commands/lifecycle.js +0 -288
  249. package/dist/commands/lifecycle.js.map +0 -1
  250. package/dist/commands/merge-check.d.ts +0 -10
  251. package/dist/commands/merge-check.d.ts.map +0 -1
  252. package/dist/commands/merge-check.js +0 -183
  253. package/dist/commands/merge-check.js.map +0 -1
  254. package/dist/commands/notify.d.ts +0 -13
  255. package/dist/commands/notify.d.ts.map +0 -1
  256. package/dist/commands/notify.js +0 -63
  257. package/dist/commands/notify.js.map +0 -1
  258. package/dist/commands/rag-index.d.ts +0 -19
  259. package/dist/commands/rag-index.d.ts.map +0 -1
  260. package/dist/commands/rag-index.js +0 -286
  261. package/dist/commands/rag-index.js.map +0 -1
  262. package/dist/commands/recommend.d.ts +0 -13
  263. package/dist/commands/recommend.d.ts.map +0 -1
  264. package/dist/commands/recommend.js +0 -37
  265. package/dist/commands/recommend.js.map +0 -1
  266. package/dist/commands/refresh.d.ts +0 -21
  267. package/dist/commands/refresh.d.ts.map +0 -1
  268. package/dist/commands/refresh.js +0 -211
  269. package/dist/commands/refresh.js.map +0 -1
  270. package/dist/commands/rollback.d.ts +0 -8
  271. package/dist/commands/rollback.d.ts.map +0 -1
  272. package/dist/commands/rollback.js +0 -113
  273. package/dist/commands/rollback.js.map +0 -1
  274. package/dist/commands/status.d.ts +0 -7
  275. package/dist/commands/status.d.ts.map +0 -1
  276. package/dist/commands/status.js +0 -262
  277. package/dist/commands/status.js.map +0 -1
  278. package/dist/commands/trace.d.ts +0 -12
  279. package/dist/commands/trace.d.ts.map +0 -1
  280. package/dist/commands/trace.js +0 -163
  281. package/dist/commands/trace.js.map +0 -1
  282. package/dist/commands/tracker.d.ts +0 -2
  283. package/dist/commands/tracker.d.ts.map +0 -1
  284. package/dist/commands/tracker.js +0 -28
  285. package/dist/commands/tracker.js.map +0 -1
  286. package/dist/commands/verdict.d.ts +0 -16
  287. package/dist/commands/verdict.d.ts.map +0 -1
  288. package/dist/commands/verdict.js +0 -189
  289. package/dist/commands/verdict.js.map +0 -1
  290. package/dist/commands/workspace.d.ts +0 -20
  291. package/dist/commands/workspace.d.ts.map +0 -1
  292. package/dist/commands/workspace.js +0 -142
  293. package/dist/commands/workspace.js.map +0 -1
  294. package/dist/core/constraint-set.d.ts +0 -67
  295. package/dist/core/constraint-set.d.ts.map +0 -1
  296. package/dist/core/constraint-set.js +0 -151
  297. package/dist/core/constraint-set.js.map +0 -1
  298. package/dist/core/smart-recommend.d.ts +0 -16
  299. package/dist/core/smart-recommend.d.ts.map +0 -1
  300. package/dist/core/smart-recommend.js +0 -149
  301. package/dist/core/smart-recommend.js.map +0 -1
  302. package/dist/core/task-type-registry.d.ts +0 -110
  303. package/dist/core/task-type-registry.d.ts.map +0 -1
  304. package/dist/core/task-type-registry.js +0 -334
  305. package/dist/core/task-type-registry.js.map +0 -1
  306. package/dist/utils/mermaid-render.d.ts +0 -39
  307. package/dist/utils/mermaid-render.d.ts.map +0 -1
  308. package/dist/utils/mermaid-render.js +0 -284
  309. package/dist/utils/mermaid-render.js.map +0 -1
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.recommendCommand = recommendCommand;
4
- exports.registerRecommendCommand = registerRecommendCommand;
5
- const logger_1 = require("../utils/logger");
6
- const smart_recommend_1 = require("../core/smart-recommend");
7
- const usage_analytics_1 = require("../core/usage-analytics");
8
- const error_diagnosis_1 = require("../core/error-diagnosis");
9
- async function recommendCommand(options) {
10
- const cwd = process.cwd();
11
- // --diagnose: 诊断指定错误信息
12
- if (options.diagnose) {
13
- (0, error_diagnosis_1.diagnoseAndPrint)(options.diagnose);
14
- return;
15
- }
16
- // --analytics: 显示使用分析报告
17
- if (options.analytics) {
18
- const period = parseInt(options.period || '14', 10);
19
- const report = await (0, usage_analytics_1.generateUsageReport)(cwd, period);
20
- logger_1.logger.info((0, usage_analytics_1.formatUsageReport)(report));
21
- return;
22
- }
23
- // 默认:生成智能推荐
24
- const recommendations = await (0, smart_recommend_1.generateRecommendations)(cwd);
25
- (0, smart_recommend_1.printRecommendations)(recommendations);
26
- }
27
- function registerRecommendCommand(program) {
28
- program
29
- .command('recommend')
30
- .alias('rec')
31
- .description('智能推荐:基于项目状态给出操作建议')
32
- .option('--analytics', '显示使用模式分析报告')
33
- .option('--period <days>', '报告时间范围(天)', '14')
34
- .option('--diagnose <error>', '诊断错误信息并给出修复建议')
35
- .action(recommendCommand);
36
- }
37
- //# sourceMappingURL=recommend.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recommend.js","sourceRoot":"","sources":["../../src/commands/recommend.ts"],"names":[],"mappings":";;AAgBA,4CAoBC;AAED,4DASC;AA1CD,4CAAyC;AACzC,6DAAwF;AACxF,6DAAiF;AACjF,6DAA2D;AAQpD,KAAK,UAAU,gBAAgB,CAAC,OAAyB;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,uBAAuB;IACvB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,IAAA,kCAAgB,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAmB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtD,eAAM,CAAC,IAAI,CAAC,IAAA,mCAAiB,EAAC,MAAM,CAAC,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,YAAY;IACZ,MAAM,eAAe,GAAG,MAAM,IAAA,yCAAuB,EAAC,GAAG,CAAC,CAAC;IAC3D,IAAA,sCAAoB,EAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,wBAAwB,CAAC,OAAgB;IACvD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,KAAK,CAAC,KAAK,CAAC;SACZ,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC;SACnC,MAAM,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAC;SAC5C,MAAM,CAAC,oBAAoB,EAAE,eAAe,CAAC;SAC7C,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC9B,CAAC"}
@@ -1,21 +0,0 @@
1
- /**
2
- * refresh — 统一刷新所有检索层
3
- *
4
- * 用法:
5
- * speccore refresh # 刷新所有检索层
6
- * speccore refresh --code # 只刷新代码索引
7
- * speccore refresh --rag # 只刷新文档 RAG
8
- * speccore refresh --graph # 只刷新知识图谱
9
- * speccore refresh --task Task-001 # 指定任务
10
- */
11
- import { Command } from 'commander';
12
- export interface RefreshOptions {
13
- code?: boolean;
14
- rag?: boolean;
15
- graph?: boolean;
16
- task?: string;
17
- iteration?: string;
18
- }
19
- export declare function refreshCommand(options: RefreshOptions): Promise<void>;
20
- export declare function registerRefreshCommand(program: Command): void;
21
- //# sourceMappingURL=refresh.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../src/commands/refresh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiK3E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4B7D"}
@@ -1,211 +0,0 @@
1
- "use strict";
2
- /**
3
- * refresh — 统一刷新所有检索层
4
- *
5
- * 用法:
6
- * speccore refresh # 刷新所有检索层
7
- * speccore refresh --code # 只刷新代码索引
8
- * speccore refresh --rag # 只刷新文档 RAG
9
- * speccore refresh --graph # 只刷新知识图谱
10
- * speccore refresh --task Task-001 # 指定任务
11
- */
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.refreshCommand = refreshCommand;
14
- exports.registerRefreshCommand = registerRefreshCommand;
15
- const path_1 = require("path");
16
- const fs_extra_1 = require("fs-extra");
17
- const logger_1 = require("../utils/logger");
18
- const code_scanner_1 = require("../core/code-scanner");
19
- const rag_engine_1 = require("../core/rag-engine");
20
- const knowledge_graph_1 = require("../core/knowledge-graph");
21
- const context_1 = require("../core/context");
22
- const change_impact_global_1 = require("../core/change-impact-global");
23
- async function refreshCommand(options) {
24
- const cwd = process.cwd();
25
- // 如果没指定任何类型,默认刷新全部
26
- const refreshAll = !options.code && !options.rag && !options.graph;
27
- const refreshCode = refreshAll || options.code;
28
- const refreshRagFlag = refreshAll || options.rag;
29
- const refreshGraph = refreshAll || options.graph;
30
- // 确定任务和迭代
31
- let iteration = options.iteration || await (0, context_1.getDefaultIteration)(cwd);
32
- let taskDir = '';
33
- if (options.task && iteration) {
34
- taskDir = (0, path_1.join)(`Iteration-${iteration}`, '030-tasks', options.task);
35
- }
36
- logger_1.logger.info('═══ 统一刷新检索层 ═══');
37
- logger_1.logger.info(` 迭代: ${iteration || '未指定'}`);
38
- logger_1.logger.info(` 任务: ${options.task || '自动推断'}`);
39
- logger_1.logger.info(` 刷新项: ${[
40
- refreshCode ? '代码索引' : '',
41
- refreshRagFlag ? '文档RAG' : '',
42
- refreshGraph ? '知识图谱' : '',
43
- ].filter(Boolean).join(' + ')}`);
44
- logger_1.logger.info('');
45
- const results = [];
46
- // ── 1. 刷新代码索引 ──
47
- if (refreshCode) {
48
- const spinner = new logger_1.Spinner('刷新代码索引...');
49
- spinner.start();
50
- try {
51
- const fileCount = await (0, code_scanner_1.buildCodeIndex)(undefined, true);
52
- spinner.stop('代码索引刷新完成');
53
- results.push({ name: '代码索引', status: 'success', detail: `${fileCount} 个文件` });
54
- }
55
- catch (err) {
56
- spinner.fail('代码索引刷新失败');
57
- results.push({ name: '代码索引', status: 'fail', detail: err.message });
58
- }
59
- }
60
- // ── 2. 刷新文档 RAG ──
61
- if (refreshRagFlag) {
62
- const spinner = new logger_1.Spinner('刷新文档 RAG...');
63
- spinner.start();
64
- try {
65
- const refreshedFiles = [];
66
- // 2.1 刷新 task 级索引(默认文件名)
67
- if (taskDir && await (0, fs_extra_1.pathExists)(taskDir)) {
68
- const before = await (0, rag_engine_1.loadRagIndex)(cwd);
69
- await (0, rag_engine_1.refreshRagIndex)(cwd, taskDir, iteration);
70
- const after = await (0, rag_engine_1.loadRagIndex)(cwd);
71
- if (!before || before.updatedAt !== after?.updatedAt) {
72
- refreshedFiles.push('task');
73
- }
74
- }
75
- // 2.2 刷新 iteration 级索引(v8.3.65+ 扩展:同时索引 010-requirements/)
76
- if (iteration) {
77
- const iterFileName = `rag-index-${iteration}.json`;
78
- const iterSpecsDir = (0, path_1.join)(`Iteration-${iteration}`, '020-specs');
79
- const iterReqDir = (0, path_1.join)(`Iteration-${iteration}`, '010-requirements');
80
- const dirs = [];
81
- if (await (0, fs_extra_1.pathExists)(iterSpecsDir))
82
- dirs.push(iterSpecsDir);
83
- if (await (0, fs_extra_1.pathExists)(iterReqDir))
84
- dirs.push(iterReqDir);
85
- if (dirs.length > 0) {
86
- const before = await (0, rag_engine_1.loadRagIndex)(cwd, iterFileName);
87
- const scope = `${iteration}_iteration_all`;
88
- await (0, rag_engine_1.indexDirectoryDocuments)(cwd, dirs, scope, iterFileName);
89
- const after = await (0, rag_engine_1.loadRagIndex)(cwd, iterFileName);
90
- if (!before || before.updatedAt !== after?.updatedAt) {
91
- refreshedFiles.push(`iteration-${iteration}`);
92
- }
93
- }
94
- }
95
- // 2.3 刷新全局索引(v8.3.134+ 四层架构:RAG 全覆盖 RULES/SKILLS/PATTERNS)
96
- const globalFileName = 'rag-index-global.json';
97
- const beforeGlobal = await (0, rag_engine_1.loadRagIndex)(cwd, globalFileName);
98
- const globalDir = (0, path_1.join)(cwd, '.speccore', 'GLOBAL');
99
- const fallbackDir = (0, path_1.join)(cwd, '.speccore');
100
- const targetDir = await (0, fs_extra_1.pathExists)(globalDir) ? globalDir : fallbackDir;
101
- if (await (0, fs_extra_1.pathExists)(targetDir)) {
102
- const dirs = [targetDir];
103
- const rulesDir = (0, path_1.join)(cwd, '.speccore', 'RULES');
104
- const skillsDir = (0, path_1.join)(cwd, '.speccore', 'SKILLS');
105
- const patternsDir = (0, path_1.join)(cwd, '.speccore', 'PATTERNS');
106
- if (await (0, fs_extra_1.pathExists)(rulesDir))
107
- dirs.push(rulesDir);
108
- if (await (0, fs_extra_1.pathExists)(skillsDir))
109
- dirs.push(skillsDir);
110
- if (await (0, fs_extra_1.pathExists)(patternsDir))
111
- dirs.push(patternsDir);
112
- await (0, rag_engine_1.indexDirectoryDocuments)(cwd, dirs, 'GLOBAL_all_all_aggregated', globalFileName);
113
- const afterGlobal = await (0, rag_engine_1.loadRagIndex)(cwd, globalFileName);
114
- if (!beforeGlobal || beforeGlobal.updatedAt !== afterGlobal?.updatedAt) {
115
- refreshedFiles.push('global');
116
- }
117
- }
118
- if (refreshedFiles.length > 0) {
119
- spinner.stop(`文档 RAG 刷新完成 (${refreshedFiles.join(', ')})`);
120
- results.push({ name: '文档 RAG', status: 'success', detail: refreshedFiles.join(', ') });
121
- }
122
- else {
123
- spinner.stop('文档 RAG 已是最新');
124
- results.push({ name: '文档 RAG', status: 'skip', detail: '已是最新' });
125
- }
126
- }
127
- catch (err) {
128
- spinner.fail('文档 RAG 刷新失败');
129
- results.push({ name: '文档 RAG', status: 'fail', detail: err.message });
130
- }
131
- }
132
- // ── 3. 刷新知识图谱 ──
133
- if (refreshGraph) {
134
- const spinner = new logger_1.Spinner('刷新知识图谱...');
135
- spinner.start();
136
- try {
137
- const graph = await (0, knowledge_graph_1.refreshKnowledgeGraph)(cwd, iteration);
138
- if (graph) {
139
- spinner.stop('知识图谱刷新完成');
140
- results.push({
141
- name: '知识图谱',
142
- status: 'success',
143
- detail: `${Object.keys(graph.entities).length} 实体 / ${graph.relations.length} 关系`,
144
- });
145
- }
146
- else {
147
- spinner.stop('知识图谱无数据');
148
- results.push({ name: '知识图谱', status: 'skip', detail: '无数据' });
149
- }
150
- }
151
- catch (err) {
152
- spinner.fail('知识图谱刷新失败');
153
- results.push({ name: '知识图谱', status: 'fail', detail: err.message });
154
- }
155
- }
156
- // ── 汇总 ──
157
- logger_1.logger.info('');
158
- logger_1.logger.info('═══ 刷新结果 ═══');
159
- for (const r of results) {
160
- const icon = r.status === 'success' ? '✅' : r.status === 'skip' ? '⏭️' : '❌';
161
- logger_1.logger.info(` ${icon} ${r.name}: ${r.detail}`);
162
- }
163
- const successCount = results.filter(r => r.status === 'success').length;
164
- const failCount = results.filter(r => r.status === 'fail').length;
165
- logger_1.logger.info('');
166
- if (failCount === 0) {
167
- logger_1.logger.success(`✅ 全部刷新完成(${successCount} 项成功)`);
168
- }
169
- else {
170
- logger_1.logger.warn(`⚠️ 刷新完成(${successCount} 成功, ${failCount} 失败)`);
171
- }
172
- // ── 4. 检测全局文档过期(v8.3.187+ 接线 change-impact-global)──
173
- // 刷新索引后,顺带检测哪些全局分析文档在源码变更后未更新,提示用户增量重建
174
- try {
175
- const staleDocs = await (0, change_impact_global_1.detectStaleGlobalDocs)(cwd);
176
- (0, change_impact_global_1.printStaleDocReport)(staleDocs);
177
- }
178
- catch (err) {
179
- logger_1.logger.debug(`全局文档过期检测跳过: ${err.message}`);
180
- }
181
- }
182
- function registerRefreshCommand(program) {
183
- program
184
- .command('refresh')
185
- .alias('rf')
186
- .description('统一刷新所有检索层(代码索引 + 文档 RAG + 知识图谱)')
187
- .option('--code', '只刷新代码索引')
188
- .option('--rag', '只刷新文档 RAG')
189
- .option('--graph', '只刷新知识图谱')
190
- .option('-t, --task <task>', '指定任务(如 Task-001)')
191
- .option('-i, --iteration <iteration>', '指定迭代(默认当前迭代)')
192
- .addHelpText('after', `
193
- \x1b[36m使用场景:\x1b[0m
194
- \x1b[33m刷新全部\x1b[0m speccore refresh
195
- \x1b[33m只刷代码\x1b[0m speccore refresh --code
196
- \x1b[33m只刷文档\x1b[0m speccore refresh --rag --task Task-001
197
- \x1b[33m只刷图谱\x1b[0m speccore refresh --graph
198
-
199
- \x1b[36m何时使用:\x1b[0m
200
- • 你手动修改了源码 → refresh --code
201
- • 你手动修改了 TECH.md/REQ.md → refresh --rag
202
- • 你添加了新任务/需求 → refresh --graph
203
- • 不确定改了什么 → refresh(全部刷新)
204
-
205
- \x1b[36m各检索层说明:\x1b[0m
206
- • 代码索引: .speccore/cache/code-structure.json(findRelevantCode 使用)
207
- • 文档 RAG: .speccore/cache/rag-index.json(unifiedSearch 使用)
208
- • 知识图谱: .speccore/cache/knowledge-graph.json(任务关联链)`)
209
- .action(refreshCommand);
210
- }
211
- //# sourceMappingURL=refresh.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../src/commands/refresh.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- export interface RollbackOptions {
2
- task?: string;
3
- iteration?: string;
4
- list?: boolean;
5
- confirm?: boolean;
6
- }
7
- export declare function rollbackCommand(options: RollbackOptions): Promise<void>;
8
- //# sourceMappingURL=rollback.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkE7E"}
@@ -1,113 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rollbackCommand = rollbackCommand;
4
- /**
5
- * rollback — 从 .bak 备份恢复 Spec 文件
6
- */
7
- const logger_1 = require("../utils/logger");
8
- const context_1 = require("../core/context");
9
- const state_1 = require("../core/state");
10
- const fs_extra_1 = require("fs-extra");
11
- const path_1 = require("path");
12
- async function rollbackCommand(options) {
13
- const spinner = new logger_1.Spinner('正在查找备份...');
14
- spinner.start();
15
- try {
16
- const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
17
- // 全局模式:查找所有 .bak 文件
18
- if (!options.task) {
19
- spinner.stop();
20
- await listAllBackups(iteration);
21
- return;
22
- }
23
- // 查找指定 Task 下的备份文件
24
- const tasks = await (0, state_1.scanTasks)(iteration);
25
- const task = tasks.find(t => t.id === options.task || t.id.startsWith(options.task + '-'));
26
- if (!task) {
27
- spinner.fail(`未找到 Task: ${options.task}`);
28
- return;
29
- }
30
- const cwd = process.cwd();
31
- const iterDir = (0, path_1.join)(cwd, iteration ? `Iteration-${iteration}` : '');
32
- const taskDir = (0, path_1.join)(iterDir, task.id);
33
- const backups = await findBackupFiles(taskDir);
34
- if (backups.length === 0) {
35
- spinner.stop(`无备份文件 (Task: ${task.id})`);
36
- return;
37
- }
38
- spinner.stop(`找到 ${backups.length} 个备份文件`);
39
- // 列出备份
40
- logger_1.logger.info('');
41
- for (const b of backups) {
42
- const relative = b.replace(cwd + '/', '');
43
- logger_1.logger.info(` ${relative}`);
44
- }
45
- // 只列出
46
- if (options.list)
47
- return;
48
- // 确认恢复
49
- if (!options.confirm) {
50
- logger_1.logger.info('');
51
- logger_1.logger.warn('如需恢复,请使用: speccore rollback --task=' + (options.task) + ' --confirm');
52
- return;
53
- }
54
- // 执行恢复
55
- const rollbackSpinner = new logger_1.Spinner('正在恢复...');
56
- rollbackSpinner.start();
57
- let restored = 0;
58
- for (const bak of backups) {
59
- const original = bak.replace(/\.bak$/, '');
60
- await (0, fs_extra_1.writeFile)(original, await (0, fs_extra_1.readFile)(bak, 'utf-8'));
61
- await (0, fs_extra_1.unlink)(bak);
62
- restored++;
63
- }
64
- rollbackSpinner.stop(`已恢复 ${restored} 个文件 (备份已清理)`);
65
- }
66
- catch (error) {
67
- spinner.fail(`回滚失败: ${error}`);
68
- throw error;
69
- }
70
- }
71
- async function findBackupFiles(dir) {
72
- const results = [];
73
- if (!(await (0, fs_extra_1.pathExists)(dir)))
74
- return results;
75
- async function scan(d) {
76
- const entries = await (0, fs_extra_1.readdir)(d, { withFileTypes: true });
77
- for (const e of entries) {
78
- if (e.isDirectory() && !e.name.startsWith('.')) {
79
- await scan((0, path_1.join)(d, e.name));
80
- }
81
- else if (e.name.endsWith('.bak')) {
82
- results.push((0, path_1.join)(d, e.name));
83
- }
84
- }
85
- }
86
- await scan(dir);
87
- return results;
88
- }
89
- async function listAllBackups(iteration) {
90
- const cwd = process.cwd();
91
- const dirs = ['.speccore'];
92
- if (iteration)
93
- dirs.push(`Iteration-${iteration}`);
94
- let total = 0;
95
- for (const d of dirs) {
96
- const backups = await findBackupFiles((0, path_1.join)(cwd, d));
97
- if (backups.length > 0) {
98
- logger_1.logger.info(`\n${d}/`);
99
- for (const b of backups) {
100
- logger_1.logger.info(` ${b.replace(cwd + '/', '')}`);
101
- }
102
- total += backups.length;
103
- }
104
- }
105
- if (total === 0) {
106
- logger_1.logger.info('无任何备份文件');
107
- }
108
- else {
109
- logger_1.logger.info(`\n共 ${total} 个备份文件`);
110
- logger_1.logger.info('恢复: speccore rollback --task=<Task编号> --confirm');
111
- }
112
- }
113
- //# sourceMappingURL=rollback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export interface StatusOptions {
2
- iteration?: string;
3
- assignee?: string;
4
- type?: string;
5
- }
6
- export declare function statusCommand(options: StatusOptions): Promise<void>;
7
- //# sourceMappingURL=status.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCzE"}