speccore 6.6.0 → 6.11.0

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 (121) hide show
  1. package/.agents/skills/spec-ask/SKILL.md +24 -4
  2. package/README.md +10 -0
  3. package/dist/cli.js +18 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/about.d.ts.map +1 -1
  6. package/dist/commands/about.js +10 -3
  7. package/dist/commands/about.js.map +1 -1
  8. package/dist/commands/analyze.d.ts +3 -0
  9. package/dist/commands/analyze.d.ts.map +1 -1
  10. package/dist/commands/analyze.js +178 -11
  11. package/dist/commands/analyze.js.map +1 -1
  12. package/dist/commands/change.d.ts.map +1 -1
  13. package/dist/commands/change.js +16 -4
  14. package/dist/commands/change.js.map +1 -1
  15. package/dist/commands/doc2spec.d.ts +1 -0
  16. package/dist/commands/doc2spec.d.ts.map +1 -1
  17. package/dist/commands/doc2spec.js +175 -0
  18. package/dist/commands/doc2spec.js.map +1 -1
  19. package/dist/commands/done.js +25 -5
  20. package/dist/commands/done.js.map +1 -1
  21. package/dist/commands/execute.d.ts.map +1 -1
  22. package/dist/commands/execute.js +20 -6
  23. package/dist/commands/execute.js.map +1 -1
  24. package/dist/commands/help.js +32 -5
  25. package/dist/commands/help.js.map +1 -1
  26. package/dist/commands/iteration/create.d.ts.map +1 -1
  27. package/dist/commands/iteration/create.js +40 -15
  28. package/dist/commands/iteration/create.js.map +1 -1
  29. package/dist/commands/iteration/split.d.ts.map +1 -1
  30. package/dist/commands/iteration/split.js +309 -36
  31. package/dist/commands/iteration/split.js.map +1 -1
  32. package/dist/commands/knowledge.d.ts +6 -0
  33. package/dist/commands/knowledge.d.ts.map +1 -0
  34. package/dist/commands/knowledge.js +94 -0
  35. package/dist/commands/knowledge.js.map +1 -0
  36. package/dist/commands/rag-index.d.ts +19 -0
  37. package/dist/commands/rag-index.d.ts.map +1 -0
  38. package/dist/commands/rag-index.js +272 -0
  39. package/dist/commands/rag-index.js.map +1 -0
  40. package/dist/commands/refresh.d.ts +21 -0
  41. package/dist/commands/refresh.d.ts.map +1 -0
  42. package/dist/commands/refresh.js +185 -0
  43. package/dist/commands/refresh.js.map +1 -0
  44. package/dist/commands/sync-global.d.ts.map +1 -1
  45. package/dist/commands/sync-global.js +59 -0
  46. package/dist/commands/sync-global.js.map +1 -1
  47. package/dist/core/ai-context-generator.d.ts +2 -0
  48. package/dist/core/ai-context-generator.d.ts.map +1 -1
  49. package/dist/core/ai-context-generator.js +8 -6
  50. package/dist/core/ai-context-generator.js.map +1 -1
  51. package/dist/core/analyze-engine.d.ts +19 -0
  52. package/dist/core/analyze-engine.d.ts.map +1 -1
  53. package/dist/core/analyze-engine.js +326 -9
  54. package/dist/core/analyze-engine.js.map +1 -1
  55. package/dist/core/ask-engine.d.ts.map +1 -1
  56. package/dist/core/ask-engine.js +134 -4
  57. package/dist/core/ask-engine.js.map +1 -1
  58. package/dist/core/ask-host-ai.d.ts.map +1 -1
  59. package/dist/core/ask-host-ai.js +9 -6
  60. package/dist/core/ask-host-ai.js.map +1 -1
  61. package/dist/core/code-scanner.d.ts +24 -2
  62. package/dist/core/code-scanner.d.ts.map +1 -1
  63. package/dist/core/code-scanner.js +310 -9
  64. package/dist/core/code-scanner.js.map +1 -1
  65. package/dist/core/context-builder.d.ts.map +1 -1
  66. package/dist/core/context-builder.js +28 -9
  67. package/dist/core/context-builder.js.map +1 -1
  68. package/dist/core/decay-detector.d.ts +2 -2
  69. package/dist/core/decay-detector.d.ts.map +1 -1
  70. package/dist/core/decay-detector.js +135 -6
  71. package/dist/core/decay-detector.js.map +1 -1
  72. package/dist/core/git-integration.d.ts +50 -2
  73. package/dist/core/git-integration.d.ts.map +1 -1
  74. package/dist/core/git-integration.js +217 -27
  75. package/dist/core/git-integration.js.map +1 -1
  76. package/dist/core/global-knowledge.d.ts +25 -0
  77. package/dist/core/global-knowledge.d.ts.map +1 -0
  78. package/dist/core/global-knowledge.js +228 -0
  79. package/dist/core/global-knowledge.js.map +1 -0
  80. package/dist/core/index-guard.d.ts +57 -0
  81. package/dist/core/index-guard.d.ts.map +1 -0
  82. package/dist/core/index-guard.js +202 -0
  83. package/dist/core/index-guard.js.map +1 -0
  84. package/dist/core/intent-cache.d.ts +3 -1
  85. package/dist/core/intent-cache.d.ts.map +1 -1
  86. package/dist/core/intent-cache.js +33 -3
  87. package/dist/core/intent-cache.js.map +1 -1
  88. package/dist/core/intent-recognition.d.ts.map +1 -1
  89. package/dist/core/intent-recognition.js +21 -2
  90. package/dist/core/intent-recognition.js.map +1 -1
  91. package/dist/core/knowledge-graph.d.ts +18 -3
  92. package/dist/core/knowledge-graph.d.ts.map +1 -1
  93. package/dist/core/knowledge-graph.js +539 -42
  94. package/dist/core/knowledge-graph.js.map +1 -1
  95. package/dist/core/knowledge-visualizer.d.ts +19 -0
  96. package/dist/core/knowledge-visualizer.d.ts.map +1 -0
  97. package/dist/core/knowledge-visualizer.js +528 -0
  98. package/dist/core/knowledge-visualizer.js.map +1 -0
  99. package/dist/core/next-steps.js +6 -0
  100. package/dist/core/next-steps.js.map +1 -1
  101. package/dist/core/platform-registry.d.ts +5 -0
  102. package/dist/core/platform-registry.d.ts.map +1 -1
  103. package/dist/core/platform-registry.js +52 -0
  104. package/dist/core/platform-registry.js.map +1 -1
  105. package/dist/core/prompt-builder.d.ts +3 -2
  106. package/dist/core/prompt-builder.d.ts.map +1 -1
  107. package/dist/core/prompt-builder.js +361 -72
  108. package/dist/core/prompt-builder.js.map +1 -1
  109. package/dist/core/rag-engine.d.ts +152 -0
  110. package/dist/core/rag-engine.d.ts.map +1 -0
  111. package/dist/core/rag-engine.js +816 -0
  112. package/dist/core/rag-engine.js.map +1 -0
  113. package/dist/core/spec-merger.d.ts +133 -0
  114. package/dist/core/spec-merger.d.ts.map +1 -0
  115. package/dist/core/spec-merger.js +735 -0
  116. package/dist/core/spec-merger.js.map +1 -0
  117. package/dist/core/unified-retrieval.d.ts +141 -0
  118. package/dist/core/unified-retrieval.d.ts.map +1 -0
  119. package/dist/core/unified-retrieval.js +471 -0
  120. package/dist/core/unified-retrieval.js.map +1 -0
  121. package/package.json +1 -1
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ /**
3
+ * rag-index — RAG 索引管理命令
4
+ *
5
+ * 用法:
6
+ * speccore rag-index # 显示当前 RAG 索引状态
7
+ * speccore rag-index --refresh # 增量刷新(只重建变更文件)
8
+ * speccore rag-index --full # 全量重建(删除旧索引,重新扫描)
9
+ * speccore rag-index --task Task-001 # 指定任务目录
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ragIndexCommand = ragIndexCommand;
13
+ exports.registerRagIndexCommand = registerRagIndexCommand;
14
+ const path_1 = require("path");
15
+ const fs_extra_1 = require("fs-extra");
16
+ const logger_1 = require("../utils/logger");
17
+ const rag_engine_1 = require("../core/rag-engine");
18
+ const context_1 = require("../core/context");
19
+ async function ragIndexCommand(options) {
20
+ const cwd = process.cwd();
21
+ // 模式判断
22
+ const isRefresh = options.refresh;
23
+ const isFull = options.full;
24
+ // 确定任务目录
25
+ let taskDir = '';
26
+ let iteration = options.iteration;
27
+ if (options.task) {
28
+ // 用户指定了任务
29
+ if (!iteration) {
30
+ iteration = await (0, context_1.getDefaultIteration)(cwd);
31
+ }
32
+ taskDir = (0, path_1.join)(`Iteration-${iteration}`, '030-tasks', options.task);
33
+ if (!(await (0, fs_extra_1.pathExists)(taskDir))) {
34
+ logger_1.logger.error(`❌ 任务目录不存在: ${taskDir}`);
35
+ logger_1.logger.info(' 💡 可用任务列表: speccore task list');
36
+ return;
37
+ }
38
+ }
39
+ else {
40
+ // 尝试自动推断当前任务
41
+ const currentIndex = await (0, rag_engine_1.loadRagIndex)(cwd);
42
+ if (currentIndex) {
43
+ // 从 scope 解析 iteration 和 taskDir
44
+ const scopeParts = currentIndex.scope.split('_');
45
+ if (scopeParts.length >= 2) {
46
+ iteration = scopeParts[0];
47
+ taskDir = scopeParts[1].replace(/_/g, '/');
48
+ }
49
+ }
50
+ }
51
+ // ── 显示模式(无 --refresh/--full)──
52
+ if (!isRefresh && !isFull) {
53
+ await showAllRagStatus(cwd);
54
+ return;
55
+ }
56
+ // ── 刷新/重建模式 ──
57
+ const mode = isFull ? '全量重建' : '增量刷新';
58
+ const spinner = new logger_1.Spinner(`${mode} RAG 索引...`);
59
+ spinner.start();
60
+ try {
61
+ let result = null;
62
+ const refreshedFiles = [];
63
+ // 1. task 级索引
64
+ if (taskDir && iteration) {
65
+ if (isFull) {
66
+ const indexPath = (0, path_1.join)(cwd, '.speccore', 'cache', 'rag-index.json');
67
+ if (await (0, fs_extra_1.pathExists)(indexPath))
68
+ await (0, fs_extra_1.remove)(indexPath);
69
+ result = await (0, rag_engine_1.indexTaskDocuments)(cwd, taskDir, iteration);
70
+ }
71
+ else {
72
+ result = await (0, rag_engine_1.refreshRagIndex)(cwd, taskDir, iteration);
73
+ }
74
+ refreshedFiles.push('task');
75
+ }
76
+ // 2. iteration 级索引
77
+ if (iteration) {
78
+ const iterFileName = `rag-index-${iteration}.json`;
79
+ const iterSpecsDir = (0, path_1.join)(`Iteration-${iteration}`, '020-specs');
80
+ if (await (0, fs_extra_1.pathExists)(iterSpecsDir)) {
81
+ if (isFull) {
82
+ const indexPath = (0, path_1.join)(cwd, '.speccore', 'cache', iterFileName);
83
+ if (await (0, fs_extra_1.pathExists)(indexPath))
84
+ await (0, fs_extra_1.remove)(indexPath);
85
+ await (0, rag_engine_1.indexDirectoryDocuments)(cwd, iterSpecsDir, `${iteration}_020-specs_iteration_all`, iterFileName);
86
+ }
87
+ refreshedFiles.push(`iteration-${iteration}`);
88
+ }
89
+ }
90
+ // 3. 全局索引
91
+ const globalFileName = 'rag-index-global.json';
92
+ const globalSpecsDir = (0, path_1.join)(cwd, '.speccore', 'GLOBAL', '020-specs');
93
+ const fallbackDir = (0, path_1.join)(cwd, '.speccore');
94
+ const targetDir = await (0, fs_extra_1.pathExists)(globalSpecsDir) ? globalSpecsDir : fallbackDir;
95
+ if (await (0, fs_extra_1.pathExists)(targetDir)) {
96
+ if (isFull) {
97
+ const indexPath = (0, path_1.join)(cwd, '.speccore', 'cache', globalFileName);
98
+ if (await (0, fs_extra_1.pathExists)(indexPath))
99
+ await (0, fs_extra_1.remove)(indexPath);
100
+ await (0, rag_engine_1.indexDirectoryDocuments)(cwd, targetDir, 'GLOBAL_all_all_aggregated', globalFileName);
101
+ }
102
+ refreshedFiles.push('global');
103
+ }
104
+ spinner.stop(`${mode}完成`);
105
+ if (refreshedFiles.length === 0) {
106
+ logger_1.logger.warn(' ⚠️ 未找到可刷新的索引');
107
+ return;
108
+ }
109
+ // 输出摘要
110
+ logger_1.logger.info('');
111
+ logger_1.logger.info(`═══ RAG 索引${mode}结果 ═══`);
112
+ logger_1.logger.info(` 已刷新: ${refreshedFiles.join(', ')}`);
113
+ if (result) {
114
+ logger_1.logger.info(` 作用域: ${result.scope}`);
115
+ logger_1.logger.info(` 文档块: ${result.chunks.length} 个`);
116
+ logger_1.logger.info(` 源文件: ${Object.keys(result.fileSummaries).length} 个`);
117
+ // 显示文件级摘要
118
+ if (Object.keys(result.fileSummaries).length > 0) {
119
+ logger_1.logger.info('');
120
+ logger_1.logger.info(' 已索引文件:');
121
+ for (const [fp, summary] of Object.entries(result.fileSummaries)) {
122
+ const fileName = fp.split('/').pop() || fp;
123
+ const chunkCount = result.chunks.filter(c => c.filePath === fp).length;
124
+ logger_1.logger.info(` 📄 ${fileName} (${chunkCount} 块)`);
125
+ }
126
+ }
127
+ // 显示 top-level 块标题
128
+ const topChunks = result.chunks
129
+ .filter(c => c.level <= 3)
130
+ .slice(0, 10);
131
+ if (topChunks.length > 0) {
132
+ logger_1.logger.info('');
133
+ logger_1.logger.info(' 主要章节:');
134
+ for (const chunk of topChunks) {
135
+ logger_1.logger.info(` ${'#'.repeat(chunk.level)} ${chunk.title}`);
136
+ }
137
+ if (result.chunks.length > 10) {
138
+ logger_1.logger.info(` ... 及其他 ${result.chunks.length - 10} 个块`);
139
+ }
140
+ }
141
+ }
142
+ logger_1.logger.info('');
143
+ logger_1.logger.success(`✅ RAG 索引已${isFull ? '重建' : '刷新'}: ${refreshedFiles.join(', ')}`);
144
+ }
145
+ catch (err) {
146
+ spinner.fail(`${mode}失败`);
147
+ logger_1.logger.error(err.message);
148
+ }
149
+ }
150
+ /**
151
+ * 显示所有 RAG 索引文件状态
152
+ */
153
+ async function showAllRagStatus(cwd) {
154
+ const cacheDir = (0, path_1.join)(cwd, '.speccore', 'cache');
155
+ if (!(await (0, fs_extra_1.pathExists)(cacheDir))) {
156
+ logger_1.logger.info('═══ RAG 索引状态 ═══');
157
+ logger_1.logger.info(' ❌ 暂无 RAG 索引');
158
+ return;
159
+ }
160
+ const files = await (0, fs_extra_1.readdir)(cacheDir);
161
+ const indexFiles = files.filter(f => f.startsWith('rag-index') && f.endsWith('.json'));
162
+ if (indexFiles.length === 0) {
163
+ logger_1.logger.info('═══ RAG 索引状态 ═══');
164
+ logger_1.logger.info(' ❌ 暂无 RAG 索引');
165
+ logger_1.logger.info('');
166
+ logger_1.logger.info(' 💡 生成方式:');
167
+ logger_1.logger.info(' speccore analyze --task <task> # 分析时自动生成');
168
+ logger_1.logger.info(' speccore rag-index --refresh --task <task> # 手动刷新');
169
+ logger_1.logger.info(' speccore rag-index --full --task <task> # 全量重建');
170
+ return;
171
+ }
172
+ logger_1.logger.info('═══ RAG 索引状态 ═══');
173
+ logger_1.logger.info(` 发现 ${indexFiles.length} 个索引文件:`);
174
+ logger_1.logger.info('');
175
+ for (const fileName of indexFiles.sort()) {
176
+ const index = await (0, rag_engine_1.loadRagIndex)(cwd, fileName);
177
+ if (!index)
178
+ continue;
179
+ const label = fileName === 'rag-index.json' ? 'task' :
180
+ fileName === 'rag-index-global.json' ? 'global' :
181
+ fileName.replace('rag-index-', '').replace('.json', '');
182
+ const { fresh, staleFiles } = await (0, rag_engine_1.checkRagIndexFreshness)(cwd, fileName);
183
+ const status = fresh ? '✅' : '⚠️';
184
+ logger_1.logger.info(` ${status} [${label}] ${fileName}`);
185
+ logger_1.logger.info(` 作用域: ${index.scope}`);
186
+ logger_1.logger.info(` 块数: ${index.chunks.length} | 源文件: ${Object.keys(index.fileSummaries).length}`);
187
+ logger_1.logger.info(` 更新: ${new Date(index.updatedAt).toLocaleString('zh-CN')}`);
188
+ if (!fresh && staleFiles.length > 0) {
189
+ logger_1.logger.info(` 过期文件: ${staleFiles.length} 个`);
190
+ }
191
+ logger_1.logger.info('');
192
+ }
193
+ }
194
+ /**
195
+ * 显示当前 RAG 索引状态
196
+ */
197
+ async function showRagStatus(cwd, taskDir, iteration) {
198
+ const index = await (0, rag_engine_1.loadRagIndex)(cwd);
199
+ if (!index) {
200
+ logger_1.logger.info('═══ RAG 索引状态 ═══');
201
+ logger_1.logger.info(' ❌ 暂无 RAG 索引');
202
+ logger_1.logger.info('');
203
+ logger_1.logger.info(' 💡 生成方式:');
204
+ logger_1.logger.info(' speccore analyze --task <task> # 分析时自动生成');
205
+ logger_1.logger.info(' speccore rag-index --refresh --task <task> # 手动刷新');
206
+ logger_1.logger.info(' speccore rag-index --full --task <task> # 全量重建');
207
+ return;
208
+ }
209
+ // 检查新鲜度
210
+ const { fresh, staleFiles } = await (0, rag_engine_1.checkRagIndexFreshness)(cwd);
211
+ logger_1.logger.info('═══ RAG 索引状态 ═══');
212
+ logger_1.logger.info(` 作用域: ${index.scope}`);
213
+ logger_1.logger.info(` 版本: ${index.version}`);
214
+ logger_1.logger.info(` 更新时间: ${new Date(index.updatedAt).toLocaleString('zh-CN')}`);
215
+ logger_1.logger.info(` 文档块: ${index.chunks.length} 个`);
216
+ logger_1.logger.info(` 源文件: ${Object.keys(index.fileSummaries).length} 个`);
217
+ if (fresh) {
218
+ logger_1.logger.info(' 状态: ✅ 新鲜(所有源文件未变更)');
219
+ }
220
+ else {
221
+ logger_1.logger.info(` 状态: ⚠️ 过期(${staleFiles.length} 个文件已变更)`);
222
+ logger_1.logger.info('');
223
+ logger_1.logger.info(' 变更文件:');
224
+ for (const fp of staleFiles.slice(0, 5)) {
225
+ logger_1.logger.info(` 📝 ${fp.split('/').pop() || fp}`);
226
+ }
227
+ if (staleFiles.length > 5) {
228
+ logger_1.logger.info(` ... 及其他 ${staleFiles.length - 5} 个`);
229
+ }
230
+ logger_1.logger.info('');
231
+ logger_1.logger.info(' 💡 刷新命令:');
232
+ logger_1.logger.info(' speccore rag-index --refresh');
233
+ }
234
+ // 显示源文件列表
235
+ logger_1.logger.info('');
236
+ logger_1.logger.info(' 已索引文件:');
237
+ for (const [fp, summary] of Object.entries(index.fileSummaries)) {
238
+ const fileName = fp.split('/').pop() || fp;
239
+ const chunkCount = index.chunks.filter(c => c.filePath === fp).length;
240
+ const isStale = staleFiles.includes(fp);
241
+ const status = isStale ? '⚠️' : '✅';
242
+ logger_1.logger.info(` ${status} ${fileName} (${chunkCount} 块)`);
243
+ }
244
+ }
245
+ function registerRagIndexCommand(program) {
246
+ program
247
+ .command('rag-index')
248
+ .alias('ri')
249
+ .description('RAG 索引管理(文档分块 + 摘要 + 关键词索引)')
250
+ .option('--refresh', '增量刷新(只重建变更文件)')
251
+ .option('--full', '全量重建(删除旧索引,重新扫描)')
252
+ .option('-t, --task <task>', '指定任务目录(如 Task-001)')
253
+ .option('-i, --iteration <iteration>', '指定迭代(默认当前迭代)')
254
+ .addHelpText('after', `
255
+ \x1b[36m使用场景:\x1b[0m
256
+ \x1b[33m查看状态\x1b[0m speccore rag-index
257
+ \x1b[33m增量刷新\x1b[0m speccore rag-index --refresh --task Task-001
258
+ \x1b[33m全量重建\x1b[0m speccore rag-index --full --task Task-001
259
+ \x1b[33m分析时自动\x1b[0m speccore analyze --task Task-001(自动建索引)
260
+
261
+ \x1b[36m何时需要手动刷新:\x1b[0m
262
+ • 你手动修改了 TECH.md / REQ.md / SCHEMA.md 等参考文档
263
+ • analyze 后文档又更新了,但还没到下次 analyze
264
+ • 统一检索层提示 "📄 传统模式"(说明 RAG 索引缺失或过期)
265
+
266
+ \x1b[36m索引内容:\x1b[0m
267
+ • 按 Markdown 标题分块(## / ### / ####)
268
+ • 每块提取摘要、关键词标签
269
+ • 缓存位置: .speccore/cache/rag-index.json`)
270
+ .action(ragIndexCommand);
271
+ }
272
+ //# sourceMappingURL=rag-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-index.js","sourceRoot":"","sources":["../../src/commands/rag-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
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
@@ -0,0 +1 @@
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;AASpC,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,CA6I3E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4B7D"}
@@ -0,0 +1,185 @@
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
+ async function refreshCommand(options) {
23
+ const cwd = process.cwd();
24
+ // 如果没指定任何类型,默认刷新全部
25
+ const refreshAll = !options.code && !options.rag && !options.graph;
26
+ const refreshCode = refreshAll || options.code;
27
+ const refreshRagFlag = refreshAll || options.rag;
28
+ const refreshGraph = refreshAll || options.graph;
29
+ // 确定任务和迭代
30
+ let iteration = options.iteration || await (0, context_1.getDefaultIteration)(cwd);
31
+ let taskDir = '';
32
+ if (options.task && iteration) {
33
+ taskDir = (0, path_1.join)(`Iteration-${iteration}`, '030-tasks', options.task);
34
+ }
35
+ logger_1.logger.info('═══ 统一刷新检索层 ═══');
36
+ logger_1.logger.info(` 迭代: ${iteration || '未指定'}`);
37
+ logger_1.logger.info(` 任务: ${options.task || '自动推断'}`);
38
+ logger_1.logger.info(` 刷新项: ${[
39
+ refreshCode ? '代码索引' : '',
40
+ refreshRagFlag ? '文档RAG' : '',
41
+ refreshGraph ? '知识图谱' : '',
42
+ ].filter(Boolean).join(' + ')}`);
43
+ logger_1.logger.info('');
44
+ const results = [];
45
+ // ── 1. 刷新代码索引 ──
46
+ if (refreshCode) {
47
+ const spinner = new logger_1.Spinner('刷新代码索引...');
48
+ spinner.start();
49
+ try {
50
+ const fileCount = await (0, code_scanner_1.buildCodeIndex)(undefined, true);
51
+ spinner.stop('代码索引刷新完成');
52
+ results.push({ name: '代码索引', status: 'success', detail: `${fileCount} 个文件` });
53
+ }
54
+ catch (err) {
55
+ spinner.fail('代码索引刷新失败');
56
+ results.push({ name: '代码索引', status: 'fail', detail: err.message });
57
+ }
58
+ }
59
+ // ── 2. 刷新文档 RAG ──
60
+ if (refreshRagFlag) {
61
+ const spinner = new logger_1.Spinner('刷新文档 RAG...');
62
+ spinner.start();
63
+ try {
64
+ const refreshedFiles = [];
65
+ // 2.1 刷新 task 级索引(默认文件名)
66
+ if (taskDir && await (0, fs_extra_1.pathExists)(taskDir)) {
67
+ const before = await (0, rag_engine_1.loadRagIndex)(cwd);
68
+ await (0, rag_engine_1.refreshRagIndex)(cwd, taskDir, iteration);
69
+ const after = await (0, rag_engine_1.loadRagIndex)(cwd);
70
+ if (!before || before.updatedAt !== after?.updatedAt) {
71
+ refreshedFiles.push('task');
72
+ }
73
+ }
74
+ // 2.2 刷新 iteration 级索引
75
+ if (iteration) {
76
+ const iterFileName = `rag-index-${iteration}.json`;
77
+ const iterSpecsDir = (0, path_1.join)(`Iteration-${iteration}`, '020-specs');
78
+ if (await (0, fs_extra_1.pathExists)(iterSpecsDir)) {
79
+ const before = await (0, rag_engine_1.loadRagIndex)(cwd, iterFileName);
80
+ const scope = `${iteration}_020-specs_iteration_all`;
81
+ await (0, rag_engine_1.indexDirectoryDocuments)(cwd, iterSpecsDir, scope, iterFileName);
82
+ const after = await (0, rag_engine_1.loadRagIndex)(cwd, iterFileName);
83
+ if (!before || before.updatedAt !== after?.updatedAt) {
84
+ refreshedFiles.push(`iteration-${iteration}`);
85
+ }
86
+ }
87
+ }
88
+ // 2.3 刷新全局索引
89
+ const globalFileName = 'rag-index-global.json';
90
+ const beforeGlobal = await (0, rag_engine_1.loadRagIndex)(cwd, globalFileName);
91
+ const globalSpecsDir = (0, path_1.join)(cwd, '.speccore', 'GLOBAL', '020-specs');
92
+ const fallbackDir = (0, path_1.join)(cwd, '.speccore');
93
+ const targetDir = await (0, fs_extra_1.pathExists)(globalSpecsDir) ? globalSpecsDir : fallbackDir;
94
+ if (await (0, fs_extra_1.pathExists)(targetDir)) {
95
+ await (0, rag_engine_1.indexDirectoryDocuments)(cwd, targetDir, 'GLOBAL_all_all_aggregated', globalFileName);
96
+ const afterGlobal = await (0, rag_engine_1.loadRagIndex)(cwd, globalFileName);
97
+ if (!beforeGlobal || beforeGlobal.updatedAt !== afterGlobal?.updatedAt) {
98
+ refreshedFiles.push('global');
99
+ }
100
+ }
101
+ if (refreshedFiles.length > 0) {
102
+ spinner.stop(`文档 RAG 刷新完成 (${refreshedFiles.join(', ')})`);
103
+ results.push({ name: '文档 RAG', status: 'success', detail: refreshedFiles.join(', ') });
104
+ }
105
+ else {
106
+ spinner.stop('文档 RAG 已是最新');
107
+ results.push({ name: '文档 RAG', status: 'skip', detail: '已是最新' });
108
+ }
109
+ }
110
+ catch (err) {
111
+ spinner.fail('文档 RAG 刷新失败');
112
+ results.push({ name: '文档 RAG', status: 'fail', detail: err.message });
113
+ }
114
+ }
115
+ // ── 3. 刷新知识图谱 ──
116
+ if (refreshGraph) {
117
+ const spinner = new logger_1.Spinner('刷新知识图谱...');
118
+ spinner.start();
119
+ try {
120
+ const graph = await (0, knowledge_graph_1.refreshKnowledgeGraph)(cwd, iteration);
121
+ if (graph) {
122
+ spinner.stop('知识图谱刷新完成');
123
+ results.push({
124
+ name: '知识图谱',
125
+ status: 'success',
126
+ detail: `${Object.keys(graph.entities).length} 实体 / ${graph.relations.length} 关系`,
127
+ });
128
+ }
129
+ else {
130
+ spinner.stop('知识图谱无数据');
131
+ results.push({ name: '知识图谱', status: 'skip', detail: '无数据' });
132
+ }
133
+ }
134
+ catch (err) {
135
+ spinner.fail('知识图谱刷新失败');
136
+ results.push({ name: '知识图谱', status: 'fail', detail: err.message });
137
+ }
138
+ }
139
+ // ── 汇总 ──
140
+ logger_1.logger.info('');
141
+ logger_1.logger.info('═══ 刷新结果 ═══');
142
+ for (const r of results) {
143
+ const icon = r.status === 'success' ? '✅' : r.status === 'skip' ? '⏭️' : '❌';
144
+ logger_1.logger.info(` ${icon} ${r.name}: ${r.detail}`);
145
+ }
146
+ const successCount = results.filter(r => r.status === 'success').length;
147
+ const failCount = results.filter(r => r.status === 'fail').length;
148
+ logger_1.logger.info('');
149
+ if (failCount === 0) {
150
+ logger_1.logger.success(`✅ 全部刷新完成(${successCount} 项成功)`);
151
+ }
152
+ else {
153
+ logger_1.logger.warn(`⚠️ 刷新完成(${successCount} 成功, ${failCount} 失败)`);
154
+ }
155
+ }
156
+ function registerRefreshCommand(program) {
157
+ program
158
+ .command('refresh')
159
+ .alias('rf')
160
+ .description('统一刷新所有检索层(代码索引 + 文档 RAG + 知识图谱)')
161
+ .option('--code', '只刷新代码索引')
162
+ .option('--rag', '只刷新文档 RAG')
163
+ .option('--graph', '只刷新知识图谱')
164
+ .option('-t, --task <task>', '指定任务(如 Task-001)')
165
+ .option('-i, --iteration <iteration>', '指定迭代(默认当前迭代)')
166
+ .addHelpText('after', `
167
+ \x1b[36m使用场景:\x1b[0m
168
+ \x1b[33m刷新全部\x1b[0m speccore refresh
169
+ \x1b[33m只刷代码\x1b[0m speccore refresh --code
170
+ \x1b[33m只刷文档\x1b[0m speccore refresh --rag --task Task-001
171
+ \x1b[33m只刷图谱\x1b[0m speccore refresh --graph
172
+
173
+ \x1b[36m何时使用:\x1b[0m
174
+ • 你手动修改了源码 → refresh --code
175
+ • 你手动修改了 TECH.md/REQ.md → refresh --rag
176
+ • 你添加了新任务/需求 → refresh --graph
177
+ • 不确定改了什么 → refresh(全部刷新)
178
+
179
+ \x1b[36m各检索层说明:\x1b[0m
180
+ • 代码索引: .speccore/cache/code-structure.json(findRelevantCode 使用)
181
+ • 文档 RAG: .speccore/cache/rag-index.json(unifiedSearch 使用)
182
+ • 知识图谱: .speccore/cache/knowledge-graph.json(任务关联链)`)
183
+ .action(refreshCommand);
184
+ }
185
+ //# sourceMappingURL=refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../src/commands/refresh.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync-global.d.ts","sourceRoot":"","sources":["../../src/commands/sync-global.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBjF"}
1
+ {"version":3,"file":"sync-global.d.ts","sourceRoot":"","sources":["../../src/commands/sync-global.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBjF"}
@@ -3,12 +3,46 @@
3
3
  * sync-global - 迭代与全量层双向同步命令
4
4
  * 支持 to_global(迭代→全量层)和 from_global(全量层→迭代)两个方向
5
5
  */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
6
39
  Object.defineProperty(exports, "__esModule", { value: true });
7
40
  exports.syncGlobalCommand = syncGlobalCommand;
8
41
  const logger_1 = require("../utils/logger");
9
42
  const fs_extra_1 = require("fs-extra");
10
43
  const path_1 = require("path");
11
44
  const global_layer_1 = require("../core/global-layer");
45
+ const spec_merger_1 = require("../core/spec-merger");
12
46
  async function syncGlobalCommand(options) {
13
47
  const direction = options.direction || 'to_global';
14
48
  const spinner = new logger_1.Spinner('检测变更...');
@@ -137,6 +171,31 @@ async function syncToGlobal(options) {
137
171
  logger_1.logger.info(` 同步需求: ${changes.length} 条`);
138
172
  logger_1.logger.info(` 涉及项目: ${[...updatedProjects].join(', ')}`);
139
173
  logger_1.logger.info(` 全量层版本: ${index.version} → ${newVersion}`);
174
+ // ── 8b. Spec 文件局部合并(section 级,不全覆盖)──
175
+ try {
176
+ const globalDir = (0, path_1.join)(process.cwd(), '.speccore');
177
+ const mergeResult = await (0, spec_merger_1.syncIterationToGlobal)(iterDir, globalDir);
178
+ if (mergeResult.filesUpdated > 0) {
179
+ logger_1.logger.info('');
180
+ logger_1.logger.success(`📝 Spec 局部合并: ${mergeResult.filesUpdated} 个文件已更新`);
181
+ for (const change of mergeResult.changes) {
182
+ if (change.action !== 'skipped') {
183
+ logger_1.logger.info(` ${change.action === 'created' ? '✨' : '✅'} ${change.file}: ${change.sectionsPatched.length} 个段落`);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ catch (e) {
189
+ logger_1.logger.debug('Spec 局部合并失败(非关键):', e);
190
+ }
191
+ // ── 9. 全局知识沉淀(RAG 索引 + SUMMARY.md)──
192
+ try {
193
+ const { syncGlobalKnowledge } = await Promise.resolve().then(() => __importStar(require('../core/global-knowledge')));
194
+ await syncGlobalKnowledge({ iteration: iterationName });
195
+ }
196
+ catch (e) {
197
+ logger_1.logger.debug('全局知识沉淀失败(非关键):', e);
198
+ }
140
199
  }
141
200
  /**
142
201
  * 全量层 → 迭代同步
@@ -1 +1 @@
1
- {"version":3,"file":"sync-global.js","sourceRoot":"","sources":["../../src/commands/sync-global.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-global.js","sourceRoot":"","sources":["../../src/commands/sync-global.ts"],"names":[],"mappings":"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"}