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,351 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.clarifyCommand = clarifyCommand;
37
- /**
38
- * clarify — 需求专业化命令
39
- *
40
- * 将用户原始需求描述(口语化/非专业)整理为 PRD 级专业需求文档,
41
- * 写入 010-requirements/converted/,供 analyze 使用。
42
- *
43
- * v6.76.0+
44
- *
45
- * 用法:
46
- * speccore clarify "我要加个购物车功能,能加商品、改数量、算总价"
47
- * speccore clarify --from docs/raw-notes.md --to Iteration-001
48
- * speccore clarify --from docs/raw-notes.md --prompt # 输出 prompt 给 AI
49
- * speccore clarify --apply "<AI 返回的 PRD>" --to Iteration-001
50
- */
51
- const logger_1 = require("../utils/logger");
52
- const context_1 = require("../core/context");
53
- const fs_extra_1 = require("fs-extra");
54
- const path_1 = require("path");
55
- const requirement_clarifier_1 = require("../core/requirement-clarifier");
56
- const workspace_manager_1 = require("../core/workspace-manager");
57
- async function clarifyCommand(options) {
58
- // ── v8.3.0+: --promote 模式:将工作区内容提升到迭代层 ──
59
- if (options.promote) {
60
- const iteration = options.to || await (0, context_1.getDefaultIteration)() || '';
61
- if (!iteration) {
62
- logger_1.logger.error('请指定目标迭代: --to <iteration>');
63
- return;
64
- }
65
- const iterDir = await (0, context_1.getIterationDir)(iteration);
66
- try {
67
- const written = await (0, workspace_manager_1.promoteToIteration)(process.cwd(), options.promote, iteration, iterDir);
68
- logger_1.logger.success(`✅ 已提升到迭代 ${iteration}:`);
69
- for (const p of written) {
70
- logger_1.logger.info(` ${(0, path_1.relative)(process.cwd(), p)}`);
71
- }
72
- }
73
- catch (e) {
74
- logger_1.logger.error(`提升失败: ${e.message}`);
75
- }
76
- return;
77
- }
78
- // ── 确定目标迭代(--local 模式下不强制要求) ──
79
- const isLocal = options.local || false;
80
- const iteration = isLocal ? '' : (options.to || await (0, context_1.getDefaultIteration)() || '');
81
- if (!isLocal && !iteration) {
82
- logger_1.logger.error('请指定目标迭代: --to <iteration> 或确保有默认迭代');
83
- logger_1.logger.info(' 或使用 --local 保存到临时工作区(不绑定迭代)');
84
- return;
85
- }
86
- const iterDir = iteration ? await (0, context_1.getIterationDir)(iteration) : '';
87
- // ── 获取原始需求内容 ──
88
- let rawContent = '';
89
- let sourceName = 'direct-input';
90
- if (options.from) {
91
- // 从文件读取
92
- if (!(await (0, fs_extra_1.pathExists)(options.from))) {
93
- logger_1.logger.error(`文件不存在: ${options.from}`);
94
- return;
95
- }
96
- rawContent = await (0, fs_extra_1.readFile)(options.from, 'utf-8');
97
- sourceName = (0, path_1.basename)(options.from);
98
- logger_1.logger.info(`📄 已读取: ${options.from} (${rawContent.length} 字符)`);
99
- }
100
- else if (options.input) {
101
- // 直接输入
102
- rawContent = options.input;
103
- sourceName = 'cli-input';
104
- }
105
- else if (options.check) {
106
- // 只检测专业度
107
- if (!(await (0, fs_extra_1.pathExists)(options.check))) {
108
- logger_1.logger.error(`文件不存在: ${options.check}`);
109
- return;
110
- }
111
- const result = await (0, requirement_clarifier_1.assessRequirementDoc)(options.check);
112
- logger_1.logger.info('');
113
- logger_1.logger.info(`📊 专业度评估: ${result.level.toUpperCase()}`);
114
- if (result.issues.length > 0) {
115
- logger_1.logger.info('📝 发现的问题:');
116
- for (const issue of result.issues) {
117
- logger_1.logger.info(` • ${issue}`);
118
- }
119
- }
120
- else {
121
- logger_1.logger.info('✅ 文档质量良好');
122
- }
123
- return;
124
- }
125
- else {
126
- logger_1.logger.error('请提供需求描述: clarify "描述" 或 --from <文件>');
127
- return;
128
- }
129
- // ── v8.2.0+: 功能单元聚焦澄清模式 ──
130
- if (options.extractUnits || options.unit || options.consolidate || options.resumeUnits) {
131
- const units = (0, requirement_clarifier_1.extractUnitsFromText)(rawContent);
132
- if (options.extractUnits) {
133
- logger_1.logger.info(`📋 功能单元清单已提取: ${units.length} 个`);
134
- for (const u of units) {
135
- logger_1.logger.info(` ${u.id}: ${u.name}`);
136
- }
137
- logger_1.logger.info('');
138
- logger_1.logger.info('📋 下一步: 逐个澄清功能单元');
139
- logger_1.logger.info(` speccore clarify --from "${sourceName}" --to ${iteration} --unit M-01 --prompt`);
140
- return;
141
- }
142
- // 汇总模式(--consolidate)
143
- if (options.consolidate) {
144
- // 从黄金需求目录读取已澄清的单元
145
- const goldenDir = (0, path_1.join)(iterDir, '020-specs', 'requirements');
146
- const clarifiedUnits = [];
147
- for (const u of units) {
148
- const unitFile = (0, path_1.join)(goldenDir, `unit-${u.id}.md`);
149
- if (await (0, fs_extra_1.pathExists)(unitFile)) {
150
- const content = await (0, fs_extra_1.readFile)(unitFile, 'utf-8');
151
- clarifiedUnits.push({ id: u.id, name: u.name, clarifiedContent: content, timestamp: new Date().toISOString() });
152
- }
153
- }
154
- if (clarifiedUnits.length === 0) {
155
- logger_1.logger.warn('⚠️ 尚未完成任何单元澄清,请先运行 --unit 模式');
156
- return;
157
- }
158
- const prd = (0, requirement_clarifier_1.consolidateClarifiedUnits)(clarifiedUnits, sourceName);
159
- if (options.apply) {
160
- const writtenPath = await (0, requirement_clarifier_1.writeClarifiedDoc)(prd, iterDir, sourceName);
161
- logger_1.logger.success(`✅ 统一 PRD 已写入: ${(0, path_1.relative)(process.cwd(), writtenPath)}`);
162
- return;
163
- }
164
- if (options.prompt) {
165
- process.stdout.write(prd);
166
- process.exitCode = 10;
167
- return;
168
- }
169
- logger_1.logger.info(`📋 统一 PRD 已生成(${clarifiedUnits.length}/${units.length} 个单元)`);
170
- return;
171
- }
172
- // 断点续跑(--resume-units)
173
- let targetUnit;
174
- if (options.resumeUnits) {
175
- const goldenDir = (0, path_1.join)(iterDir, '020-specs', 'requirements');
176
- const pending = [];
177
- for (const u of units) {
178
- const unitFile = (0, path_1.join)(goldenDir, `unit-${u.id}.md`);
179
- if (!await (0, fs_extra_1.pathExists)(unitFile))
180
- pending.push(u);
181
- }
182
- if (pending.length === 0) {
183
- logger_1.logger.success('🎉 所有功能单元澄清已完成!');
184
- logger_1.logger.info(' 运行 --consolidate 汇总为统一 PRD');
185
- return;
186
- }
187
- targetUnit = pending[0];
188
- logger_1.logger.info(`🔄 断点续跑: ${targetUnit.id} ${targetUnit.name}(剩余 ${pending.length} 个)`);
189
- }
190
- // 澄清单个单元(--unit M-01)
191
- if (options.unit) {
192
- targetUnit = units.find(u => u.id === options.unit);
193
- if (!targetUnit) {
194
- logger_1.logger.error(`未找到功能单元: ${options.unit}`);
195
- logger_1.logger.info(` 可用单元: ${units.map(u => u.id).join(', ')}`);
196
- return;
197
- }
198
- }
199
- if (targetUnit && options.prompt) {
200
- const prompt = await (0, requirement_clarifier_1.buildUnitClarifyPrompt)(targetUnit, rawContent, {
201
- iteration, sourceFile: sourceName, iterDir, allUnits: units,
202
- });
203
- process.stdout.write(prompt);
204
- process.exitCode = 10;
205
- return;
206
- }
207
- if (targetUnit && options.apply) {
208
- const goldenDir = (0, path_1.join)(iterDir, '020-specs', 'requirements');
209
- await (0, fs_extra_1.ensureDir)(goldenDir);
210
- const unitFile = (0, path_1.join)(goldenDir, `unit-${targetUnit.id}.md`);
211
- let finalContent = options.apply;
212
- // 提取 [UNIT:xxx] 标记中的内容
213
- const markerMatch = finalContent.match(/\[UNIT:[^\]]+\]([\s\S]*?)(?=\[UNIT:|$)/);
214
- if (markerMatch)
215
- finalContent = markerMatch[1].trim();
216
- if (!finalContent.startsWith('---'))
217
- finalContent = (0, requirement_clarifier_1.buildClarifiedHeader)(`${sourceName}#${targetUnit.id}`) + finalContent;
218
- await (0, fs_extra_1.writeFile)(unitFile, finalContent);
219
- logger_1.logger.success(`✅ 单元澄清已写入: 020-specs/requirements/unit-${targetUnit.id}.md`);
220
- return;
221
- }
222
- if (targetUnit) {
223
- logger_1.logger.info(`📋 功能单元: ${targetUnit.id} ${targetUnit.name}`);
224
- logger_1.logger.info(' 使用 --prompt 生成澄清 Prompt,或 --apply 写入澄清结果');
225
- return;
226
- }
227
- }
228
- // ── 检测专业度 ──
229
- const level = (0, requirement_clarifier_1.detectProfessionalLevel)(rawContent);
230
- logger_1.logger.info(`📊 专业度检测: ${level.toUpperCase()}`);
231
- if (level === 'high' && !options.force) {
232
- logger_1.logger.info('✅ 文档已足够专业,无需整理');
233
- logger_1.logger.info(' 如仍要整理,加 --force');
234
- return;
235
- }
236
- // ── Prompt 模式:输出整理 Prompt ──
237
- if (options.prompt) {
238
- const prompt = (0, requirement_clarifier_1.buildClarifyPrompt)(rawContent, {
239
- iteration,
240
- sourceFile: sourceName,
241
- });
242
- process.stdout.write(prompt);
243
- process.exitCode = 10;
244
- // v8.3.0+: local 模式下提示闭环命令
245
- if (isLocal) {
246
- const entryId = await (0, workspace_manager_1.stageContent)(process.cwd(), rawContent, {
247
- type: 'clarify',
248
- source: options.from ? 'file' : 'direct',
249
- sourcePath: options.from,
250
- });
251
- logger_1.logger.info('');
252
- logger_1.logger.info('📋 临时工作区条目已创建:');
253
- logger_1.logger.info(` ID: ${entryId}`);
254
- logger_1.logger.info('');
255
- logger_1.logger.info('下一步:');
256
- logger_1.logger.info(` 将 Prompt 发给 AI,获取整理后的 PRD`);
257
- logger_1.logger.info(` 然后执行: speccore clarify --apply '<PRD内容>' --local`);
258
- }
259
- return;
260
- }
261
- // ── Apply 模式:接收 AI 结果写入文件 ──
262
- if (options.apply) {
263
- const spinner = new logger_1.Spinner('正在写入整理后的需求文档...');
264
- spinner.start();
265
- try {
266
- const { content, hasOriginalSection } = (0, requirement_clarifier_1.parseClarifiedRequirement)(options.apply);
267
- // 如果 AI 没有附加原始输入章节,自动追加
268
- let finalContent = content;
269
- if (!hasOriginalSection) {
270
- finalContent += '\n\n---\n\n## 原始输入\n\n';
271
- finalContent += '> 以下内容为用户原始需求描述,保留用于溯源:\n\n';
272
- finalContent += '```\n' + rawContent + '\n```\n';
273
- }
274
- // 添加 frontmatter 头部
275
- finalContent = (0, requirement_clarifier_1.buildClarifiedHeader)(sourceName) + finalContent;
276
- if (isLocal) {
277
- // v8.3.0+: 临时工作区模式
278
- const entryId = await (0, workspace_manager_1.stageContent)(process.cwd(), rawContent, {
279
- type: 'clarify',
280
- source: options.from ? 'file' : 'direct',
281
- sourcePath: options.from,
282
- });
283
- await (0, workspace_manager_1.writeWorkspaceOutput)(process.cwd(), entryId, 'clarify', {
284
- 'PRD.md': finalContent,
285
- });
286
- spinner.stop('✅ 需求文档已整理并写入临时工作区');
287
- logger_1.logger.info('');
288
- logger_1.logger.info(`📄 工作区条目: ${entryId}`);
289
- logger_1.logger.info(`📁 位置: .speccore/local/workspace/clarify/${entryId}/`);
290
- logger_1.logger.info('');
291
- logger_1.logger.info('后续操作:');
292
- logger_1.logger.info(` 1. 查看文档内容确认无误`);
293
- logger_1.logger.info(` 2. 提升到迭代层: speccore clarify --promote ${entryId} --to <iteration>`);
294
- }
295
- else {
296
- const writtenPath = await (0, requirement_clarifier_1.writeClarifiedDoc)(finalContent, iterDir, sourceName);
297
- spinner.stop('✅ 需求文档已整理并写入');
298
- logger_1.logger.info('');
299
- logger_1.logger.info(`📄 文件: ${(0, path_1.relative)(process.cwd(), writtenPath)}`);
300
- logger_1.logger.info(`📁 位置: ${iteration}/020-specs/requirements/(黄金需求目录)`);
301
- logger_1.logger.info('');
302
- // v8.3.65+: 自动刷新知识图谱和 RAG 索引
303
- try {
304
- const { refreshKnowledgeGraph } = await Promise.resolve().then(() => __importStar(require('../core/knowledge-graph')));
305
- await refreshKnowledgeGraph(process.cwd(), iteration);
306
- logger_1.logger.info('🧠 知识图谱已刷新');
307
- }
308
- catch { }
309
- try {
310
- const { indexDirectoryDocuments } = await Promise.resolve().then(() => __importStar(require('../core/rag-engine')));
311
- const specsDir = (0, path_1.join)(iterDir, '020-specs');
312
- const reqDir = (0, path_1.join)(iterDir, '010-requirements');
313
- const dirs = [];
314
- if (await (0, fs_extra_1.pathExists)(specsDir))
315
- dirs.push(specsDir);
316
- if (await (0, fs_extra_1.pathExists)(reqDir))
317
- dirs.push(reqDir);
318
- if (dirs.length > 0) {
319
- await indexDirectoryDocuments(process.cwd(), dirs, `${iteration}_iteration_all`, `rag-index-${iteration}.json`);
320
- logger_1.logger.info('🔍 迭代 RAG 索引已刷新');
321
- }
322
- }
323
- catch { }
324
- logger_1.logger.info('下一步:');
325
- logger_1.logger.info(` 1. 查看并确认文档内容`);
326
- logger_1.logger.info(` 2. 如需调整,手动编辑或重新执行 clarify`);
327
- logger_1.logger.info(` 3. 确认无误后: speccore analyze --auto -I ${iteration}`);
328
- }
329
- }
330
- catch (error) {
331
- spinner.fail(`写入失败: ${error}`);
332
- throw error;
333
- }
334
- return;
335
- }
336
- // ── 默认模式:提示用户使用 prompt → AI → apply 流程 ──
337
- logger_1.logger.info('');
338
- logger_1.logger.info('📝 需求整理流程:');
339
- logger_1.logger.info('');
340
- logger_1.logger.info('Step 1: 生成整理 Prompt');
341
- logger_1.logger.info(` speccore clarify --from "${sourceName}" --to ${iteration} --prompt`);
342
- logger_1.logger.info('');
343
- logger_1.logger.info('Step 2: 将 Prompt 发给 AI,获取整理后的 PRD');
344
- logger_1.logger.info('');
345
- logger_1.logger.info('Step 3: 将 AI 返回的 PRD 写入文件');
346
- logger_1.logger.info(` speccore clarify --apply '<AI 返回的内容>' --to ${iteration}`);
347
- logger_1.logger.info('');
348
- logger_1.logger.info('💡 或直接一步完成(如果 AI 在你的环境中):');
349
- logger_1.logger.info(` speccore clarify "${rawContent.slice(0, 40)}..." --to ${iteration} --prompt | ai | speccore clarify --apply - --to ${iteration}`);
350
- }
351
- //# sourceMappingURL=clarify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clarify.js","sourceRoot":"","sources":["../../src/commands/clarify.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * code-index — 源码索引命令
3
- *
4
- * 用法:
5
- * speccore code-index # 增量更新(只扫变化文件)
6
- * speccore code-index --full # 全量重新扫描
7
- * speccore code-index --scope src/commands # 指定目录
8
- * speccore code-index --show # 只显示当前索引,不更新
9
- */
10
- import { Command } from 'commander';
11
- export interface CodeIndexOptions {
12
- full?: boolean;
13
- scope?: string;
14
- show?: boolean;
15
- graph?: boolean;
16
- incremental?: boolean;
17
- watch?: boolean;
18
- }
19
- export declare function codeIndexCommand(options: CodeIndexOptions): Promise<void>;
20
- export declare function registerCodeIndexCommand(program: Command): void;
21
- //# sourceMappingURL=code-index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"code-index.d.ts","sourceRoot":"","sources":["../../src/commands/code-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqH/E;AA2CD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqC/D"}
@@ -1,193 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.codeIndexCommand = codeIndexCommand;
4
- exports.registerCodeIndexCommand = registerCodeIndexCommand;
5
- const path_1 = require("path");
6
- const fs_extra_1 = require("fs-extra");
7
- const fs_1 = require("fs");
8
- const code_scanner_1 = require("../core/code-scanner");
9
- const code_index_markdown_1 = require("../core/code-index-markdown");
10
- const code_graph_1 = require("../core/code-graph");
11
- const logger_1 = require("../utils/logger");
12
- async function codeIndexCommand(options) {
13
- const cachePath = (0, path_1.join)('.speccore', 'cache', 'code-structure.json');
14
- // --watch: 监视源码变化自动增量更新图谱(优先级最高)
15
- if (options.watch) {
16
- const scope = options.scope || 'src';
17
- logger_1.logger.info(`👁️ 启动图谱监视模式: ${scope}`);
18
- logger_1.logger.info(' 按 Ctrl+C 停止');
19
- // 首次构建(有 --graph 则同源构建索引+图谱,否则构建代码索引)
20
- if (options.graph) {
21
- const scope = options.scope || 'src';
22
- const files = await (0, code_scanner_1.collectScanFiles)(scope);
23
- await (0, code_scanner_1.buildCodeIndex)(scope, false, files);
24
- await (0, code_graph_1.buildCodeKnowledgeGraphIncremental)({ scope, preScannedFiles: files });
25
- }
26
- else {
27
- await (0, code_scanner_1.buildCodeIndex)(scope, !options.full);
28
- }
29
- // 监视变化
30
- const watcher = (0, fs_1.watch)(scope, { recursive: true }, async (_event, filename) => {
31
- if (filename && /\.(ts|tsx|js|jsx|mts|cts|mjs|cjs)$/.test(filename)) {
32
- logger_1.logger.info(` 📝 文件变化: ${filename}`);
33
- try {
34
- if (options.graph) {
35
- await (0, code_graph_1.buildCodeKnowledgeGraphIncremental)({ scope });
36
- }
37
- else {
38
- await (0, code_scanner_1.buildCodeIndex)(scope, true);
39
- }
40
- logger_1.logger.info(' ✅ 增量更新完成');
41
- }
42
- catch (e) {
43
- logger_1.logger.error(` ❌ 更新失败: ${e.message}`);
44
- }
45
- }
46
- });
47
- // 保持进程运行
48
- await new Promise(() => { });
49
- watcher.close();
50
- return;
51
- }
52
- // --graph: 构建代码知识图谱(同源:一次扫描产出代码索引 + 图谱两份资产)
53
- if (options.graph) {
54
- const scope = options.scope || 'src';
55
- if (options.incremental) {
56
- await (0, code_graph_1.buildCodeKnowledgeGraphIncremental)({ scope });
57
- // 增量模式同步刷新代码索引(只扫变化文件)
58
- await (0, code_scanner_1.buildCodeIndex)(scope, true);
59
- }
60
- else {
61
- // v8.3.3xx+ 同源生成:一次 collectScanFiles,两份资产
62
- const files = await (0, code_scanner_1.collectScanFiles)(scope);
63
- const fileCount = await (0, code_scanner_1.buildCodeIndex)(scope, false, files);
64
- logger_1.logger.info(` ✅ 代码索引: ${fileCount} 个文件`);
65
- const index = await (0, code_scanner_1.loadFullIndex)();
66
- if (index) {
67
- await (0, code_index_markdown_1.generateMarkdownIndex)(index);
68
- logger_1.logger.info(` ✅ Markdown 索引已生成`);
69
- }
70
- await (0, code_graph_1.buildCodeKnowledgeGraph)({ scope, preScannedFiles: files });
71
- }
72
- return;
73
- }
74
- // --show: 只显示当前索引
75
- if (options.show) {
76
- if (!(await (0, fs_extra_1.pathExists)(cachePath))) {
77
- logger_1.logger.info('索引不存在,请先运行 speccore code-index 生成索引');
78
- return;
79
- }
80
- const index = await (0, code_scanner_1.loadFullIndex)();
81
- if (!index) {
82
- logger_1.logger.error('索引读取失败');
83
- return;
84
- }
85
- printIndexSummary(index);
86
- return;
87
- }
88
- const incremental = !options.full;
89
- const scope = options.scope;
90
- const mode = (incremental && await (0, fs_extra_1.pathExists)(cachePath)) ? '增量更新' : '全量扫描';
91
- const spinner = new logger_1.Spinner(`${mode}索引`);
92
- spinner.start();
93
- try {
94
- const fileCount = await (0, code_scanner_1.buildCodeIndex)(scope, incremental);
95
- spinner.stop(`扫描完成: ${fileCount} 个文件`);
96
- // 加载完整索引生成 Markdown
97
- const index = await (0, code_scanner_1.loadFullIndex)();
98
- if (!index) {
99
- logger_1.logger.error('索引生成失败');
100
- return;
101
- }
102
- const mdSpinner = new logger_1.Spinner('生成 Markdown 索引...');
103
- mdSpinner.start();
104
- const generated = await (0, code_index_markdown_1.generateMarkdownIndex)(index);
105
- mdSpinner.stop(`Markdown 索引已生成`);
106
- // 输出摘要
107
- printIndexSummary(index);
108
- logger_1.logger.info('');
109
- logger_1.logger.info(`📄 生成文件:`);
110
- for (const f of generated) {
111
- logger_1.logger.info(` ${f}`);
112
- }
113
- }
114
- catch (err) {
115
- spinner.fail('索引生成失败');
116
- logger_1.logger.error(err.message);
117
- }
118
- }
119
- function printIndexSummary(index) {
120
- logger_1.logger.info('');
121
- logger_1.logger.info('═══ 代码索引摘要 ═══');
122
- logger_1.logger.info(` 文件数: ${index.files.length}`);
123
- logger_1.logger.info(` 更新时间: ${new Date(index.updatedAt).toLocaleString('zh-CN')}`);
124
- logger_1.logger.info('');
125
- if (index.endpoints?.length > 0) {
126
- logger_1.logger.info(' 端识别:');
127
- for (const ep of index.endpoints) {
128
- logger_1.logger.info(` ${ep.name} (${ep.fileCount} 文件) — ${ep.techStack}`);
129
- }
130
- logger_1.logger.info('');
131
- }
132
- if (index.modules?.length > 0) {
133
- logger_1.logger.info(` 模块: ${index.modules.length} 个`);
134
- const top = index.modules.slice(0, 8);
135
- for (const mod of top) {
136
- logger_1.logger.info(` ${mod.name} (${mod.endpoint}, ${mod.fileCount} 文件)`);
137
- }
138
- if (index.modules.length > 8) {
139
- logger_1.logger.info(` ... 及其他 ${index.modules.length - 8} 个模块`);
140
- }
141
- logger_1.logger.info('');
142
- }
143
- if (index.correlations?.length > 0) {
144
- logger_1.logger.info(' 变更联动规律:');
145
- for (const corr of index.correlations.slice(0, 5)) {
146
- logger_1.logger.info(` ${corr.pattern}`);
147
- }
148
- logger_1.logger.info('');
149
- }
150
- if (index.gitStats) {
151
- logger_1.logger.info(` git 统计: 分析了 ${index.gitStats.analyzedCommits} / ${index.gitStats.totalCommits} 次提交`);
152
- logger_1.logger.info('');
153
- }
154
- }
155
- function registerCodeIndexCommand(program) {
156
- program
157
- .command('code-index')
158
- .alias('ci')
159
- .alias('idx')
160
- .description('扫描源码生成代码索引(多端识别 + 模块分组 + git 联动)')
161
- .option('--full', '全量重新扫描(默认增量更新)')
162
- .option('--scope <dirs>', '指定扫描目录(逗号分隔)')
163
- .option('--graph', '构建代码知识图谱(graph.html + graph.json + GRAPH_REPORT.md)')
164
- .option('--incremental', '增量更新图谱(只扫变化文件,配合 --graph)')
165
- .option('--watch', '监视源码变化自动增量更新图谱(配合 --graph)')
166
- .option('--show', '只显示当前索引摘要,不更新')
167
- .addHelpText('after', `
168
- \x1b[36m使用场景:\x1b[0m
169
- \x1b[33m首次使用\x1b[0m speccore code-index --full
170
- \x1b[33m日常更新\x1b[0m speccore code-index (增量,只扫变化文件)
171
- \x1b[33m查看摘要\x1b[0m speccore code-index --show
172
- \x1b[33m构建图谱\x1b[0m speccore code-index --graph
173
- \x1b[33m指定范围\x1b[0m speccore code-index --scope src/commands,src/core
174
-
175
- \x1b[36m索引价值:\x1b[0m
176
- • \x1b[32m多端识别\x1b[0m 自动检测 frontend/backend/mobile/cli/shared
177
- • \x1b[32m模块分组\x1b[0m 按目录分组,显示核心文件、导出接口、依赖关系
178
- • \x1b[32mgit 联动\x1b[0m 分析最近 100 次提交,找出高频共同变更的模块
179
- • \x1b[32m分析加速\x1b[0m analyze 命令默认使用索引智能匹配相关文件(省 90% token)
180
-
181
- \x1b[36m输出文件:\x1b[0m
182
- .speccore/cache/CODE_INDEX.md 总索引(端识别 + 模块概览 + git 联动)
183
- .speccore/cache/endpoints/<name>.md 各端详情(模块清单 + 导出 + 依赖)
184
- .speccore/cache/code-structure.json JSON 索引(analyze 引擎使用)
185
-
186
- \x1b[36m与 analyze 的关系:\x1b[0m
187
- • analyze 默认读源码(智能匹配,不是全量读)
188
- • 索引过期时 analyze 会自动重建(全量,1 小时缓存)
189
- • 手动 code-index 可以提前构建,避免 analyze 时等待
190
- • --no-source 跳过源码读取,--source-scope 指定扫描目录`)
191
- .action(codeIndexCommand);
192
- }
193
- //# sourceMappingURL=code-index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"code-index.js","sourceRoot":"","sources":["../../src/commands/code-index.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * context — 查看当前 Task 的上下文加载状态和 Spec 依赖链
3
- */
4
- export interface ContextOptions {
5
- task?: string;
6
- set?: boolean;
7
- iteration?: string;
8
- }
9
- export declare function contextCommand(options: ContextOptions): Promise<void>;
10
- //# sourceMappingURL=context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiF3E"}