speccore 8.3.340 → 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 (226) hide show
  1. package/.agents/skills/speccore-router/SKILL.md +0 -2
  2. package/README.en.md +3 -11
  3. package/README.md +3 -13
  4. package/dist/cli.js +1 -187
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/analyze.d.ts.map +1 -1
  7. package/dist/commands/analyze.js +530 -481
  8. package/dist/commands/analyze.js.map +1 -1
  9. package/dist/commands/completion.d.ts.map +1 -1
  10. package/dist/commands/completion.js +9 -7
  11. package/dist/commands/completion.js.map +1 -1
  12. package/dist/commands/doctor.js +3 -3
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/done.js +1 -5
  15. package/dist/commands/done.js.map +1 -1
  16. package/dist/commands/execute.js +2 -2
  17. package/dist/commands/execute.js.map +1 -1
  18. package/dist/commands/help.js +5 -54
  19. package/dist/commands/help.js.map +1 -1
  20. package/dist/commands/init.d.ts.map +1 -1
  21. package/dist/commands/init.js +0 -7
  22. package/dist/commands/init.js.map +1 -1
  23. package/dist/commands/pr.d.ts.map +1 -1
  24. package/dist/commands/pr.js +3 -5
  25. package/dist/commands/pr.js.map +1 -1
  26. package/dist/commands/search.js +1 -1
  27. package/dist/commands/search.js.map +1 -1
  28. package/dist/commands/update-env-configs.d.ts.map +1 -1
  29. package/dist/commands/update-env-configs.js +2 -1
  30. package/dist/commands/update-env-configs.js.map +1 -1
  31. package/dist/commands/update.d.ts +4 -0
  32. package/dist/commands/update.d.ts.map +1 -1
  33. package/dist/commands/update.js +41 -1
  34. package/dist/commands/update.js.map +1 -1
  35. package/dist/core/analyze-engine.js +3 -3
  36. package/dist/core/analyze-engine.js.map +1 -1
  37. package/dist/core/arbitration/l3-human-arbiter.js +1 -1
  38. package/dist/core/arbitration/l3-human-arbiter.js.map +1 -1
  39. package/dist/core/arbitration/verdict-generator.js +1 -1
  40. package/dist/core/arbitration/verdict-generator.js.map +1 -1
  41. package/dist/core/ask-engine.d.ts.map +1 -1
  42. package/dist/core/ask-engine.js +16 -42
  43. package/dist/core/ask-engine.js.map +1 -1
  44. package/dist/core/code-graph/reporter.d.ts.map +1 -1
  45. package/dist/core/code-graph/reporter.js +3 -12
  46. package/dist/core/code-graph/reporter.js.map +1 -1
  47. package/dist/core/code-graph/requirement-linker.js +1 -1
  48. package/dist/core/code-graph/requirement-linker.js.map +1 -1
  49. package/dist/core/code-scanner.js +1 -1
  50. package/dist/core/code-scanner.js.map +1 -1
  51. package/dist/core/deploy/engine.d.ts.map +1 -1
  52. package/dist/core/deploy/engine.js +58 -44
  53. package/dist/core/deploy/engine.js.map +1 -1
  54. package/dist/core/environment-config.d.ts +2 -0
  55. package/dist/core/environment-config.d.ts.map +1 -1
  56. package/dist/core/environment-config.js +6 -1
  57. package/dist/core/environment-config.js.map +1 -1
  58. package/dist/core/error-diagnosis.js +2 -2
  59. package/dist/core/error-diagnosis.js.map +1 -1
  60. package/dist/core/git-integration.d.ts +6 -0
  61. package/dist/core/git-integration.d.ts.map +1 -1
  62. package/dist/core/git-integration.js +11 -0
  63. package/dist/core/git-integration.js.map +1 -1
  64. package/dist/core/global-knowledge.js +1 -1
  65. package/dist/core/index-guard.d.ts.map +1 -1
  66. package/dist/core/index-guard.js +4 -26
  67. package/dist/core/index-guard.js.map +1 -1
  68. package/dist/core/intent-recognition.d.ts +1 -1
  69. package/dist/core/intent-recognition.d.ts.map +1 -1
  70. package/dist/core/intent-recognition.js +5 -63
  71. package/dist/core/intent-recognition.js.map +1 -1
  72. package/dist/core/prompt-builder.js +1 -1
  73. package/dist/core/prompt-builder.js.map +1 -1
  74. package/dist/core/prompt-plugins/analyze-graph-plugin.js +1 -1
  75. package/dist/core/prompt-plugins/analyze-graph-plugin.js.map +1 -1
  76. package/dist/core/structured-extractor.d.ts +6 -0
  77. package/dist/core/structured-extractor.d.ts.map +1 -1
  78. package/dist/core/structured-extractor.js +6 -0
  79. package/dist/core/structured-extractor.js.map +1 -1
  80. package/dist/core/unified-config.d.ts.map +1 -1
  81. package/dist/core/unified-config.js +29 -19
  82. package/dist/core/unified-config.js.map +1 -1
  83. package/dist/core/usage-analytics.js +1 -1
  84. package/dist/core/usage-analytics.js.map +1 -1
  85. package/package.json +1 -1
  86. package/templates/html/speccore-ask-guide.html +1 -1
  87. package/templates/html/speccore-ask-pipeline.html +1 -1
  88. package/templates/html/speccore-ask-result.html +1 -1
  89. package/templates/html/speccore-help.html +2 -2
  90. package/templates/speccore-yml-example.yml +24 -24
  91. package/dist/commands/audit.d.ts +0 -12
  92. package/dist/commands/audit.d.ts.map +0 -1
  93. package/dist/commands/audit.js +0 -540
  94. package/dist/commands/audit.js.map +0 -1
  95. package/dist/commands/backup.d.ts +0 -18
  96. package/dist/commands/backup.d.ts.map +0 -1
  97. package/dist/commands/backup.js +0 -102
  98. package/dist/commands/backup.js.map +0 -1
  99. package/dist/commands/baseline.d.ts +0 -13
  100. package/dist/commands/baseline.d.ts.map +0 -1
  101. package/dist/commands/baseline.js +0 -227
  102. package/dist/commands/baseline.js.map +0 -1
  103. package/dist/commands/chain.d.ts +0 -55
  104. package/dist/commands/chain.d.ts.map +0 -1
  105. package/dist/commands/chain.js +0 -501
  106. package/dist/commands/chain.js.map +0 -1
  107. package/dist/commands/clarify.d.ts +0 -17
  108. package/dist/commands/clarify.d.ts.map +0 -1
  109. package/dist/commands/clarify.js +0 -351
  110. package/dist/commands/clarify.js.map +0 -1
  111. package/dist/commands/code-index.d.ts +0 -21
  112. package/dist/commands/code-index.d.ts.map +0 -1
  113. package/dist/commands/code-index.js +0 -193
  114. package/dist/commands/code-index.js.map +0 -1
  115. package/dist/commands/context.d.ts +0 -10
  116. package/dist/commands/context.d.ts.map +0 -1
  117. package/dist/commands/context.js +0 -213
  118. package/dist/commands/context.js.map +0 -1
  119. package/dist/commands/current.d.ts +0 -10
  120. package/dist/commands/current.d.ts.map +0 -1
  121. package/dist/commands/current.js +0 -53
  122. package/dist/commands/current.js.map +0 -1
  123. package/dist/commands/dev.d.ts +0 -18
  124. package/dist/commands/dev.d.ts.map +0 -1
  125. package/dist/commands/dev.js +0 -854
  126. package/dist/commands/dev.js.map +0 -1
  127. package/dist/commands/diff.d.ts +0 -10
  128. package/dist/commands/diff.d.ts.map +0 -1
  129. package/dist/commands/diff.js +0 -160
  130. package/dist/commands/diff.js.map +0 -1
  131. package/dist/commands/global-status.d.ts +0 -9
  132. package/dist/commands/global-status.d.ts.map +0 -1
  133. package/dist/commands/global-status.js +0 -135
  134. package/dist/commands/global-status.js.map +0 -1
  135. package/dist/commands/graph.d.ts +0 -25
  136. package/dist/commands/graph.d.ts.map +0 -1
  137. package/dist/commands/graph.js +0 -523
  138. package/dist/commands/graph.js.map +0 -1
  139. package/dist/commands/handover.d.ts +0 -11
  140. package/dist/commands/handover.d.ts.map +0 -1
  141. package/dist/commands/handover.js +0 -170
  142. package/dist/commands/handover.js.map +0 -1
  143. package/dist/commands/health.d.ts +0 -7
  144. package/dist/commands/health.d.ts.map +0 -1
  145. package/dist/commands/health.js +0 -80
  146. package/dist/commands/health.js.map +0 -1
  147. package/dist/commands/history.d.ts +0 -9
  148. package/dist/commands/history.d.ts.map +0 -1
  149. package/dist/commands/history.js +0 -117
  150. package/dist/commands/history.js.map +0 -1
  151. package/dist/commands/impact.d.ts +0 -12
  152. package/dist/commands/impact.d.ts.map +0 -1
  153. package/dist/commands/impact.js +0 -238
  154. package/dist/commands/impact.js.map +0 -1
  155. package/dist/commands/import.d.ts +0 -19
  156. package/dist/commands/import.d.ts.map +0 -1
  157. package/dist/commands/import.js +0 -673
  158. package/dist/commands/import.js.map +0 -1
  159. package/dist/commands/knowledge.d.ts +0 -6
  160. package/dist/commands/knowledge.d.ts.map +0 -1
  161. package/dist/commands/knowledge.js +0 -94
  162. package/dist/commands/knowledge.js.map +0 -1
  163. package/dist/commands/lifecycle.d.ts +0 -9
  164. package/dist/commands/lifecycle.d.ts.map +0 -1
  165. package/dist/commands/lifecycle.js +0 -288
  166. package/dist/commands/lifecycle.js.map +0 -1
  167. package/dist/commands/merge-check.d.ts +0 -10
  168. package/dist/commands/merge-check.d.ts.map +0 -1
  169. package/dist/commands/merge-check.js +0 -183
  170. package/dist/commands/merge-check.js.map +0 -1
  171. package/dist/commands/notify.d.ts +0 -13
  172. package/dist/commands/notify.d.ts.map +0 -1
  173. package/dist/commands/notify.js +0 -63
  174. package/dist/commands/notify.js.map +0 -1
  175. package/dist/commands/rag-index.d.ts +0 -19
  176. package/dist/commands/rag-index.d.ts.map +0 -1
  177. package/dist/commands/rag-index.js +0 -286
  178. package/dist/commands/rag-index.js.map +0 -1
  179. package/dist/commands/recommend.d.ts +0 -13
  180. package/dist/commands/recommend.d.ts.map +0 -1
  181. package/dist/commands/recommend.js +0 -37
  182. package/dist/commands/recommend.js.map +0 -1
  183. package/dist/commands/refresh.d.ts +0 -21
  184. package/dist/commands/refresh.d.ts.map +0 -1
  185. package/dist/commands/refresh.js +0 -211
  186. package/dist/commands/refresh.js.map +0 -1
  187. package/dist/commands/rollback.d.ts +0 -8
  188. package/dist/commands/rollback.d.ts.map +0 -1
  189. package/dist/commands/rollback.js +0 -113
  190. package/dist/commands/rollback.js.map +0 -1
  191. package/dist/commands/status.d.ts +0 -7
  192. package/dist/commands/status.d.ts.map +0 -1
  193. package/dist/commands/status.js +0 -262
  194. package/dist/commands/status.js.map +0 -1
  195. package/dist/commands/trace.d.ts +0 -12
  196. package/dist/commands/trace.d.ts.map +0 -1
  197. package/dist/commands/trace.js +0 -163
  198. package/dist/commands/trace.js.map +0 -1
  199. package/dist/commands/tracker.d.ts +0 -2
  200. package/dist/commands/tracker.d.ts.map +0 -1
  201. package/dist/commands/tracker.js +0 -28
  202. package/dist/commands/tracker.js.map +0 -1
  203. package/dist/commands/verdict.d.ts +0 -16
  204. package/dist/commands/verdict.d.ts.map +0 -1
  205. package/dist/commands/verdict.js +0 -189
  206. package/dist/commands/verdict.js.map +0 -1
  207. package/dist/commands/workspace.d.ts +0 -20
  208. package/dist/commands/workspace.d.ts.map +0 -1
  209. package/dist/commands/workspace.js +0 -142
  210. package/dist/commands/workspace.js.map +0 -1
  211. package/dist/core/constraint-set.d.ts +0 -67
  212. package/dist/core/constraint-set.d.ts.map +0 -1
  213. package/dist/core/constraint-set.js +0 -151
  214. package/dist/core/constraint-set.js.map +0 -1
  215. package/dist/core/smart-recommend.d.ts +0 -16
  216. package/dist/core/smart-recommend.d.ts.map +0 -1
  217. package/dist/core/smart-recommend.js +0 -149
  218. package/dist/core/smart-recommend.js.map +0 -1
  219. package/dist/core/task-type-registry.d.ts +0 -110
  220. package/dist/core/task-type-registry.d.ts.map +0 -1
  221. package/dist/core/task-type-registry.js +0 -334
  222. package/dist/core/task-type-registry.js.map +0 -1
  223. package/dist/utils/mermaid-render.d.ts +0 -39
  224. package/dist/utils/mermaid-render.d.ts.map +0 -1
  225. package/dist/utils/mermaid-render.js +0 -284
  226. package/dist/utils/mermaid-render.js.map +0 -1
@@ -1,189 +0,0 @@
1
- "use strict";
2
- /**
3
- * verdict — 契约冲突裁决命令
4
- *
5
- * v8.3.24+: 查看待裁决冲突、进行人工裁决、查看裁决书
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.verdictCommand = verdictCommand;
9
- const fs_extra_1 = require("fs-extra");
10
- const path_1 = require("path");
11
- const logger_1 = require("../utils/logger");
12
- const context_1 = require("../core/context");
13
- const task_paths_1 = require("../core/task-paths");
14
- async function verdictCommand(options) {
15
- // 1. 查看裁决书
16
- if (options.report) {
17
- await showReport(options.report, options.iteration);
18
- return;
19
- }
20
- // 2. 列出待裁决冲突
21
- if (options.list) {
22
- await listPendingConflicts(options.task, options.iteration);
23
- return;
24
- }
25
- // 3. 人工裁决
26
- if (options.conflict && options.decide) {
27
- await makeDecision(options.conflict, options.decide, options.reason, options.task, options.iteration);
28
- return;
29
- }
30
- // 默认:帮助信息
31
- logger_1.logger.info('');
32
- logger_1.logger.info('⚖️ 契约冲突裁决命令');
33
- logger_1.logger.info('');
34
- logger_1.logger.info('用法:');
35
- logger_1.logger.info(' speccore verdict --list [--task <Task-ID>]');
36
- logger_1.logger.info(' speccore verdict --conflict <ID> --decide <pass|pass-with-conditions|reject|defer> [--reason <说明>]');
37
- logger_1.logger.info(' speccore verdict --report <Task-ID>');
38
- logger_1.logger.info('');
39
- logger_1.logger.info('示例:');
40
- logger_1.logger.info(' speccore verdict --list');
41
- logger_1.logger.info(' speccore verdict --conflict L3-security-xxx --decide pass --reason "已改为参数化查询"');
42
- logger_1.logger.info(' speccore verdict --report Task-001');
43
- }
44
- /** 查看裁决书 */
45
- async function showReport(taskId, iteration) {
46
- const iter = iteration || await (0, context_1.getDefaultIteration)();
47
- const iterDir = await (0, context_1.getIterationDir)(iter);
48
- const tasksRoot = (0, path_1.join)(iterDir, '030-tasks');
49
- const taskDir = await (0, task_paths_1.findTaskDir)(tasksRoot, taskId);
50
- if (!taskDir) {
51
- logger_1.logger.error(`未找到 Task: ${taskId}`);
52
- return;
53
- }
54
- const reportPath = (0, path_1.join)(taskDir, 'ARBITRATION_REPORT.md');
55
- if (await (0, fs_extra_1.pathExists)(reportPath)) {
56
- const content = await (0, fs_extra_1.readFile)(reportPath, 'utf-8');
57
- logger_1.logger.info('');
58
- logger_1.logger.info(content);
59
- }
60
- else {
61
- logger_1.logger.warn(`未找到裁决书: ${reportPath}`);
62
- logger_1.logger.info('提示: 该任务尚未执行裁决流程');
63
- }
64
- }
65
- /** 列出待裁决冲突 */
66
- async function listPendingConflicts(taskId, iteration) {
67
- const iter = iteration || await (0, context_1.getDefaultIteration)();
68
- const iterDir = await (0, context_1.getIterationDir)(iter);
69
- const tasksRoot = (0, path_1.join)(iterDir, '030-tasks');
70
- if (taskId) {
71
- const taskDir = await (0, task_paths_1.findTaskDir)(tasksRoot, taskId);
72
- if (taskDir) {
73
- await showTaskConflicts(taskId, taskDir);
74
- }
75
- else {
76
- logger_1.logger.error(`未找到 Task: ${taskId}`);
77
- }
78
- return;
79
- }
80
- // 扫描所有任务
81
- const fs = require('fs-extra');
82
- const entries = await fs.readdir(tasksRoot, { withFileTypes: true }).catch(() => []);
83
- let foundAny = false;
84
- for (const entry of entries) {
85
- if (!entry.isDirectory() || entry.name.startsWith('.'))
86
- continue;
87
- const taskDir = (0, path_1.join)(tasksRoot, entry.name);
88
- const hasPending = await showTaskConflicts(entry.name, taskDir, true);
89
- if (hasPending)
90
- foundAny = true;
91
- }
92
- if (!foundAny) {
93
- logger_1.logger.info('');
94
- logger_1.logger.info('✅ 当前迭代无待裁决冲突');
95
- }
96
- }
97
- /** 显示单个任务的待裁决冲突 */
98
- async function showTaskConflicts(taskId, taskDir, silentOnEmpty = false) {
99
- const reportPath = (0, path_1.join)(taskDir, 'ARBITRATION_REPORT.md');
100
- if (!(await (0, fs_extra_1.pathExists)(reportPath)))
101
- return false;
102
- const content = await (0, fs_extra_1.readFile)(reportPath, 'utf-8');
103
- // 简单解析:查找 pending-review 和 pending-fix
104
- const pendingL3 = content.match(/待裁决/g) || [];
105
- const pendingL2 = content.match(/待确认/g) || [];
106
- const hasPending = pendingL3.length > 0 || pendingL2.length > 0;
107
- if (!hasPending && silentOnEmpty)
108
- return false;
109
- logger_1.logger.info('');
110
- logger_1.logger.info(`📋 ${taskId}:`);
111
- if (pendingL3.length > 0) {
112
- logger_1.logger.info(` ⏳ ${pendingL3.length} 项 L3 冲突待人工裁决`);
113
- }
114
- if (pendingL2.length > 0) {
115
- logger_1.logger.info(` 💡 ${pendingL2.length} 项 L2 冲突待确认修复`);
116
- }
117
- if (!hasPending) {
118
- logger_1.logger.info(' ✅ 无待裁决冲突');
119
- }
120
- return hasPending;
121
- }
122
- /** 人工做出裁决 */
123
- async function makeDecision(conflictId, outcome, reason, taskId, iteration) {
124
- const iter = iteration || await (0, context_1.getDefaultIteration)();
125
- const iterDir = await (0, context_1.getIterationDir)(iter);
126
- const tasksRoot = (0, path_1.join)(iterDir, '030-tasks');
127
- // 如果没指定 taskId,尝试从 conflictId 推断
128
- const targetTaskId = taskId || await findTaskByConflict(tasksRoot, conflictId);
129
- if (!targetTaskId) {
130
- logger_1.logger.error(`无法定位冲突所属任务。请使用 --task 指定 Task-ID`);
131
- return;
132
- }
133
- const taskDir = await (0, task_paths_1.findTaskDir)(tasksRoot, targetTaskId);
134
- if (!taskDir) {
135
- logger_1.logger.error(`未找到 Task: ${targetTaskId}`);
136
- return;
137
- }
138
- const reportPath = (0, path_1.join)(taskDir, 'ARBITRATION_REPORT.md');
139
- if (!(await (0, fs_extra_1.pathExists)(reportPath))) {
140
- logger_1.logger.error(`未找到裁决书。该任务可能尚未执行裁决流程。`);
141
- return;
142
- }
143
- // 读取现有裁决书,找到对应冲突
144
- const reportContent = await (0, fs_extra_1.readFile)(reportPath, 'utf-8');
145
- if (!reportContent.includes(conflictId)) {
146
- logger_1.logger.error(`未在裁决书中找到冲突: ${conflictId}`);
147
- return;
148
- }
149
- // 构建裁决理由
150
- const finalReason = reason || `人工裁决: ${outcome}`;
151
- // 在裁决书中追加裁决记录
152
- const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
153
- const verdictEntry = `
154
-
155
- ---
156
-
157
- > **人工裁决记录** | ${now}
158
- > - 冲突: ${conflictId}
159
- > - 裁决: ${outcome}
160
- > - 理由: ${finalReason}
161
- > - 裁决者: Human
162
- `;
163
- const updatedContent = reportContent + verdictEntry;
164
- await require('fs-extra').writeFile(reportPath, updatedContent, 'utf-8');
165
- logger_1.logger.success(`已记录裁决: ${conflictId} → ${outcome}`);
166
- logger_1.logger.info(` 理由: ${finalReason}`);
167
- logger_1.logger.info(` 裁决书已更新: ${reportPath}`);
168
- if (outcome === 'pass-with-conditions') {
169
- logger_1.logger.info('');
170
- logger_1.logger.info('⚠️ 有条件通过,请确保满足所有附加条件后再执行 done');
171
- }
172
- }
173
- /** 通过扫描裁决书查找冲突所属任务 */
174
- async function findTaskByConflict(tasksRoot, conflictId) {
175
- const fs = require('fs-extra');
176
- const entries = await fs.readdir(tasksRoot, { withFileTypes: true }).catch(() => []);
177
- for (const entry of entries) {
178
- if (!entry.isDirectory() || entry.name.startsWith('.'))
179
- continue;
180
- const reportPath = (0, path_1.join)(tasksRoot, entry.name, 'ARBITRATION_REPORT.md');
181
- if (await (0, fs_extra_1.pathExists)(reportPath)) {
182
- const content = await (0, fs_extra_1.readFile)(reportPath, 'utf-8');
183
- if (content.includes(conflictId))
184
- return entry.name;
185
- }
186
- }
187
- return null;
188
- }
189
- //# sourceMappingURL=verdict.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verdict.js","sourceRoot":"","sources":["../../src/commands/verdict.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- /**
2
- * workspace — 临时工作区管理命令
3
- *
4
- * v8.3.0+: 查看、管理临时工作区中的独立内容处理产出
5
- *
6
- * 用法:
7
- * speccore workspace list # 列出所有条目
8
- * speccore workspace list --type clarify
9
- * speccore workspace show <entryId> # 查看条目详情
10
- * speccore workspace clean --days 30 # 清理 30 天前的条目
11
- */
12
- export interface WorkspaceOptions {
13
- list?: boolean;
14
- show?: string;
15
- clean?: boolean;
16
- days?: number;
17
- type?: string;
18
- }
19
- export declare function workspaceCommand(options: WorkspaceOptions): Promise<void>;
20
- //# sourceMappingURL=workspace.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwI/E"}
@@ -1,142 +0,0 @@
1
- "use strict";
2
- /**
3
- * workspace — 临时工作区管理命令
4
- *
5
- * v8.3.0+: 查看、管理临时工作区中的独立内容处理产出
6
- *
7
- * 用法:
8
- * speccore workspace list # 列出所有条目
9
- * speccore workspace list --type clarify
10
- * speccore workspace show <entryId> # 查看条目详情
11
- * speccore workspace clean --days 30 # 清理 30 天前的条目
12
- */
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.workspaceCommand = workspaceCommand;
15
- const logger_1 = require("../utils/logger");
16
- const workspace_manager_1 = require("../core/workspace-manager");
17
- const fs_extra_1 = require("fs-extra");
18
- const path_1 = require("path");
19
- async function workspaceCommand(options) {
20
- const cwd = process.cwd();
21
- // ── list 模式 ──
22
- if (options.list || (!options.show && !options.clean)) {
23
- const entries = await (0, workspace_manager_1.listWorkspaceEntries)(cwd, {
24
- type: options.type,
25
- });
26
- if (entries.length === 0) {
27
- logger_1.logger.info('📭 临时工作区为空');
28
- logger_1.logger.info(' 使用 speccore req-doc --local 或 speccore research 创建条目');
29
- return;
30
- }
31
- logger_1.logger.info('');
32
- logger_1.logger.info(`📦 临时工作区 (${entries.length} 个条目):`);
33
- logger_1.logger.info('');
34
- for (const e of entries.sort((a, b) => b.createdAt.localeCompare(a.createdAt))) {
35
- const typeIcon = e.type === 'clarify' ? '📝' : '🔬';
36
- const statusIcon = e.status === 'done' ? '✅' : e.status === 'promoted' ? '⬆️' : '⏳';
37
- const date = e.createdAt.slice(0, 10);
38
- const source = e.sourcePath ? e.sourcePath.split('/').pop() : '直接输入';
39
- logger_1.logger.info(` ${typeIcon} ${e.id} ${statusIcon}`);
40
- logger_1.logger.info(` 类型: ${e.type} | 日期: ${date} | 来源: ${source}`);
41
- if (e.promotedTo) {
42
- logger_1.logger.info(` 已提升到: ${e.promotedTo}`);
43
- }
44
- logger_1.logger.info('');
45
- }
46
- logger_1.logger.info('操作:');
47
- logger_1.logger.info(' speccore workspace show <entryId> 查看详情');
48
- logger_1.logger.info(' speccore workspace clean --days 30 清理旧条目');
49
- return;
50
- }
51
- // ── show 模式 ──
52
- if (options.show) {
53
- const index = await (0, workspace_manager_1.loadIndex)(cwd);
54
- const entry = index.entries.find(e => e.id === options.show || e.id.startsWith(options.show));
55
- if (!entry) {
56
- logger_1.logger.error(`未找到条目: ${options.show}`);
57
- return;
58
- }
59
- logger_1.logger.info('');
60
- logger_1.logger.info(`📋 条目详情: ${entry.id}`);
61
- logger_1.logger.info('');
62
- logger_1.logger.info(` 类型: ${entry.type}`);
63
- logger_1.logger.info(` 来源: ${entry.source}${entry.sourcePath ? ` (${entry.sourcePath})` : ''}`);
64
- logger_1.logger.info(` 创建时间: ${entry.createdAt}`);
65
- logger_1.logger.info(` 字数: ${entry.wordCount}`);
66
- logger_1.logger.info(` 状态: ${entry.status}`);
67
- if (entry.promotedTo) {
68
- logger_1.logger.info(` 已提升到迭代: ${entry.promotedTo}`);
69
- }
70
- logger_1.logger.info('');
71
- // 显示产出文件
72
- const paths = (0, workspace_manager_1.getWorkspacePaths)(cwd);
73
- const outDir = (0, path_1.join)(paths[entry.type], entry.id);
74
- if (await (0, fs_extra_1.pathExists)(outDir)) {
75
- const files = await (0, fs_extra_1.readdir)(outDir);
76
- if (files.length > 0) {
77
- logger_1.logger.info(' 产出文件:');
78
- for (const f of files) {
79
- const fpath = (0, path_1.join)(outDir, f);
80
- const content = await (0, fs_extra_1.readFile)(fpath, 'utf-8');
81
- const lines = content.split('\n').length;
82
- logger_1.logger.info(` 📄 ${f} (${lines} 行)`);
83
- }
84
- }
85
- }
86
- // 显示原始输入
87
- const inboxDir = (0, path_1.join)(paths.inbox, entry.id);
88
- if (await (0, fs_extra_1.pathExists)(inboxDir)) {
89
- const sourcePath = (0, path_1.join)(inboxDir, 'source.md');
90
- if (await (0, fs_extra_1.pathExists)(sourcePath)) {
91
- logger_1.logger.info('');
92
- logger_1.logger.info(' 原始输入摘要:');
93
- const source = await (0, fs_extra_1.readFile)(sourcePath, 'utf-8');
94
- const preview = source.slice(0, 200).replace(/\n/g, ' ');
95
- logger_1.logger.info(` ${preview}${source.length > 200 ? '...' : ''}`);
96
- }
97
- }
98
- logger_1.logger.info('');
99
- logger_1.logger.info('操作:');
100
- logger_1.logger.info(` speccore req-doc --promote ${entry.id} --to <iteration> 提升到迭代层`);
101
- return;
102
- }
103
- // ── clean 模式 ──
104
- if (options.clean) {
105
- const days = options.days || 30;
106
- const cutoff = new Date();
107
- cutoff.setDate(cutoff.getDate() - days);
108
- const index = await (0, workspace_manager_1.loadIndex)(cwd);
109
- const toRemove = [];
110
- const toKeep = [];
111
- for (const e of index.entries) {
112
- const created = new Date(e.createdAt);
113
- if (created < cutoff && e.status !== 'promoted') {
114
- toRemove.push(e);
115
- }
116
- else {
117
- toKeep.push(e);
118
- }
119
- }
120
- if (toRemove.length === 0) {
121
- logger_1.logger.info(`✅ ${days} 天前没有可清理的条目`);
122
- return;
123
- }
124
- const paths = (0, workspace_manager_1.getWorkspacePaths)(cwd);
125
- for (const e of toRemove) {
126
- // 删除 inbox
127
- const inboxDir = (0, path_1.join)(paths.inbox, e.id);
128
- if (await (0, fs_extra_1.pathExists)(inboxDir))
129
- await (0, fs_extra_1.remove)(inboxDir);
130
- // 删除产出
131
- const outDir = (0, path_1.join)(paths[e.type], e.id);
132
- if (await (0, fs_extra_1.pathExists)(outDir))
133
- await (0, fs_extra_1.remove)(outDir);
134
- }
135
- // 更新索引
136
- await (0, fs_extra_1.writeFile)(paths.index, JSON.stringify({ entries: toKeep }, null, 2));
137
- logger_1.logger.success(`🗑️ 已清理 ${toRemove.length} 个条目(${days} 天前的未提升条目)`);
138
- logger_1.logger.info(` 保留 ${toKeep.length} 个条目`);
139
- return;
140
- }
141
- }
142
- //# sourceMappingURL=workspace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"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"}
@@ -1,67 +0,0 @@
1
- /**
2
- * constraint-set.ts — TaskChain 约束集加载器(v8.3.307+)
3
- *
4
- * 「共同前提约束」的落地机制:用户在任务 spec 中声明约束集(如
5
- * constraints: [common-rules, frontend-rules]),同类任务每次执行时都
6
- * 重新加载这些约束文件并注入执行 prompt,保证上下文不随会话漂移。
7
- *
8
- * 约束来源(按优先级):
9
- * 1. 任务 spec 显式声明(00-specs/REQ.md 或 TASK.md 中的 constraints 字段)
10
- * 2. 任务类型默认约束(task-type-registry.ts 的 defaultConstraints)
11
- *
12
- * 约束文件位置:.speccore/GLOBAL/CONSTRAINTS/{约束名}.md
13
- * - init 时生成内置约束(coding-standards / doc-standards / script-standards /
14
- * data-standards / research-standards)
15
- * - 用户可按团队规范增改(如 common-rules.md、frontend-rules.md)
16
- *
17
- * 与业务规则(business-rules.ts)的分工:
18
- * - BUSINESS_RULES = 项目事实(协议、报价规则),分析阶段读
19
- * - CONSTRAINTS = 执行纪律(怎么做事),执行阶段每次重新注入
20
- */
21
- export interface ConstraintItem {
22
- /** 约束名(文件名去 .md) */
23
- name: string;
24
- /** 相对项目根的路径(展示 + 追溯用) */
25
- path: string;
26
- /** 约束内容(截断至 maxChars) */
27
- content: string;
28
- }
29
- export interface LoadConstraintSetOptions {
30
- /** 项目根,默认 getProjectRoot() */
31
- cwd?: string;
32
- /** 任务类型(如 doc/feature),用于加载类型默认约束 */
33
- taskType?: string;
34
- /** 任务 spec 显式声明的约束名列表 */
35
- declared?: string[];
36
- /** 每约束最大注入字符数,默认 2000 */
37
- maxChars?: number;
38
- }
39
- /** 约束文件目录(相对项目根) */
40
- export declare const CONSTRAINTS_DIR = ".speccore/GLOBAL/CONSTRAINTS";
41
- /**
42
- * 从任务 spec 文本中解析声明的约束集
43
- *
44
- * 支持两种声明格式:
45
- * - YAML frontmatter: constraints: [common-rules, frontend-rules]
46
- * - 行内声明: - 约束集: common-rules, frontend-rules
47
- */
48
- export declare function parseDeclaredConstraints(specContent: string): string[];
49
- /**
50
- * 加载约束集 — 任务声明 ∪ 类型默认(按声明顺序去重)
51
- *
52
- * 声明文件不存在时静默跳过(约束集是「锦上添花」的纪律注入,缺失不应阻断执行),
53
- * 但会通过 missing 返回值让调用方决定是否提示。
54
- */
55
- export declare function loadConstraintSet(options: LoadConstraintSetOptions): Promise<{
56
- items: ConstraintItem[];
57
- missing: string[];
58
- }>;
59
- /** 列出已安装的全部约束集(chain status / help 展示用) */
60
- export declare function listConstraintSets(cwd?: string): Promise<string[]>;
61
- /**
62
- * 格式化约束集为 prompt 注入文本
63
- *
64
- * 标题刻意强调「每次执行前重新读取」——这是长任务链防记忆漂移的关键信号。
65
- */
66
- export declare function formatConstraints(items: ConstraintItem[]): string;
67
- //# sourceMappingURL=constraint-set.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraint-set.d.ts","sourceRoot":"","sources":["../../src/core/constraint-set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,8BAA8B;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,oBAAoB;AACpB,eAAO,MAAM,eAAe,iCAAiC,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAoCtE;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAiCzD;AAED,2CAA2C;AAC3C,wBAAsB,kBAAkB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAYxE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,CAWjE"}
@@ -1,151 +0,0 @@
1
- "use strict";
2
- /**
3
- * constraint-set.ts — TaskChain 约束集加载器(v8.3.307+)
4
- *
5
- * 「共同前提约束」的落地机制:用户在任务 spec 中声明约束集(如
6
- * constraints: [common-rules, frontend-rules]),同类任务每次执行时都
7
- * 重新加载这些约束文件并注入执行 prompt,保证上下文不随会话漂移。
8
- *
9
- * 约束来源(按优先级):
10
- * 1. 任务 spec 显式声明(00-specs/REQ.md 或 TASK.md 中的 constraints 字段)
11
- * 2. 任务类型默认约束(task-type-registry.ts 的 defaultConstraints)
12
- *
13
- * 约束文件位置:.speccore/GLOBAL/CONSTRAINTS/{约束名}.md
14
- * - init 时生成内置约束(coding-standards / doc-standards / script-standards /
15
- * data-standards / research-standards)
16
- * - 用户可按团队规范增改(如 common-rules.md、frontend-rules.md)
17
- *
18
- * 与业务规则(business-rules.ts)的分工:
19
- * - BUSINESS_RULES = 项目事实(协议、报价规则),分析阶段读
20
- * - CONSTRAINTS = 执行纪律(怎么做事),执行阶段每次重新注入
21
- */
22
- Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.CONSTRAINTS_DIR = void 0;
24
- exports.parseDeclaredConstraints = parseDeclaredConstraints;
25
- exports.loadConstraintSet = loadConstraintSet;
26
- exports.listConstraintSets = listConstraintSets;
27
- exports.formatConstraints = formatConstraints;
28
- const path_1 = require("path");
29
- const fs_extra_1 = require("fs-extra");
30
- const task_utils_1 = require("../utils/task-utils");
31
- const task_type_registry_1 = require("./task-type-registry");
32
- /** 约束文件目录(相对项目根) */
33
- exports.CONSTRAINTS_DIR = '.speccore/GLOBAL/CONSTRAINTS';
34
- /**
35
- * 从任务 spec 文本中解析声明的约束集
36
- *
37
- * 支持两种声明格式:
38
- * - YAML frontmatter: constraints: [common-rules, frontend-rules]
39
- * - 行内声明: - 约束集: common-rules, frontend-rules
40
- */
41
- function parseDeclaredConstraints(specContent) {
42
- const result = [];
43
- // YAML frontmatter
44
- const fmMatch = specContent.match(/^---\n([\s\S]*?)\n---\n/);
45
- if (fmMatch) {
46
- const fm = fmMatch[1];
47
- const inline = fm.match(/^constraints?\s*:\s*\[(.+?)\]/m);
48
- if (inline) {
49
- for (const name of inline[1].split(',')) {
50
- const trimmed = name.trim().replace(/['"]/g, '');
51
- if (trimmed)
52
- result.push(trimmed);
53
- }
54
- return result;
55
- }
56
- // 每项以 \n 或字符串尾结束(frontmatter 最后一项后可能无换行,被 `\n---` 消费)
57
- const listMatch = fm.match(/^constraints?\s*:\s*\n((?:\s+-\s+.+(?:\n|$))+)/m);
58
- if (listMatch) {
59
- for (const line of listMatch[1].matchAll(/^\s+-\s+(.+)$/gm)) {
60
- const name = line[1].trim().replace(/['"]/g, '');
61
- if (name)
62
- result.push(name);
63
- }
64
- return result;
65
- }
66
- }
67
- // 行内声明(正文中)
68
- const inlineMatch = specContent.match(/^[-•]\s*\*{0,2}约束集\*{0,2}\s*[::]\s*(.+)$/m);
69
- if (inlineMatch) {
70
- for (const name of inlineMatch[1].split(/[,,]/)) {
71
- const trimmed = name.trim();
72
- if (trimmed && !trimmed.includes('{'))
73
- result.push(trimmed);
74
- }
75
- }
76
- return result;
77
- }
78
- /**
79
- * 加载约束集 — 任务声明 ∪ 类型默认(按声明顺序去重)
80
- *
81
- * 声明文件不存在时静默跳过(约束集是「锦上添花」的纪律注入,缺失不应阻断执行),
82
- * 但会通过 missing 返回值让调用方决定是否提示。
83
- */
84
- async function loadConstraintSet(options) {
85
- const cwd = options.cwd || (0, task_utils_1.getProjectRoot)();
86
- const maxChars = options.maxChars || 2000;
87
- const items = [];
88
- const missing = [];
89
- // 合并声明 + 类型默认(v8.3.308: resolveTaskTypeDefinition 支持用户自定义类型),保持顺序去重
90
- const typeDef = await (0, task_type_registry_1.resolveTaskTypeDefinition)(options.taskType || '', cwd);
91
- const names = [];
92
- for (const name of [...(options.declared || []), ...typeDef.defaultConstraints]) {
93
- if (name && !names.includes(name))
94
- names.push(name);
95
- }
96
- const constraintsDir = (0, path_1.join)(cwd, exports.CONSTRAINTS_DIR);
97
- for (const name of names) {
98
- const filePath = (0, path_1.join)(constraintsDir, `${name}.md`);
99
- if (!(await (0, fs_extra_1.pathExists)(filePath))) {
100
- missing.push(name);
101
- continue;
102
- }
103
- try {
104
- const content = await (0, fs_extra_1.readFile)(filePath, 'utf-8');
105
- items.push({
106
- name,
107
- path: `${exports.CONSTRAINTS_DIR}/${name}.md`,
108
- content: content.slice(0, maxChars),
109
- });
110
- }
111
- catch {
112
- missing.push(name);
113
- }
114
- }
115
- return { items, missing };
116
- }
117
- /** 列出已安装的全部约束集(chain status / help 展示用) */
118
- async function listConstraintSets(cwd) {
119
- const constraintsDir = (0, path_1.join)(cwd || (0, task_utils_1.getProjectRoot)(), exports.CONSTRAINTS_DIR);
120
- if (!(await (0, fs_extra_1.pathExists)(constraintsDir)))
121
- return [];
122
- try {
123
- const files = await (0, fs_extra_1.readdir)(constraintsDir);
124
- return files
125
- .filter(f => f.endsWith('.md') && !f.startsWith('_'))
126
- .map(f => f.replace(/\.md$/, ''))
127
- .sort();
128
- }
129
- catch {
130
- return [];
131
- }
132
- }
133
- /**
134
- * 格式化约束集为 prompt 注入文本
135
- *
136
- * 标题刻意强调「每次执行前重新读取」——这是长任务链防记忆漂移的关键信号。
137
- */
138
- function formatConstraints(items) {
139
- if (items.length === 0)
140
- return '';
141
- const lines = [
142
- '### 📐 执行前提约束(本次执行已重新加载,请严格遵守)',
143
- '',
144
- ];
145
- for (const item of items) {
146
- lines.push(`#### 约束: ${item.name} \`${item.path}\``, '');
147
- lines.push(item.content.trim(), '');
148
- }
149
- return lines.join('\n');
150
- }
151
- //# sourceMappingURL=constraint-set.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraint-set.js","sourceRoot":"","sources":["../../src/core/constraint-set.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- export interface Recommendation {
2
- priority: 'high' | 'medium' | 'low';
3
- icon: string;
4
- title: string;
5
- description: string;
6
- action: string;
7
- }
8
- /**
9
- * 基于项目状态生成智能推荐
10
- */
11
- export declare function generateRecommendations(cwd: string): Promise<Recommendation[]>;
12
- /**
13
- * 打印推荐列表
14
- */
15
- export declare function printRecommendations(recommendations: Recommendation[]): void;
16
- //# sourceMappingURL=smart-recommend.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smart-recommend.d.ts","sourceRoot":"","sources":["../../src/core/smart-recommend.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA8GpF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,cAAc,EAAE,GAAG,IAAI,CAiB5E"}