speccore 6.97.0 → 7.1.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 (59) hide show
  1. package/.agents/agents/README.md +79 -0
  2. package/.agents/agents/spec-analyzer.md +41 -0
  3. package/.agents/agents/spec-architect.md +57 -0
  4. package/.agents/agents/spec-change-detector.md +55 -0
  5. package/.agents/agents/spec-clarifier.md +83 -0
  6. package/.agents/agents/spec-executor.md +41 -0
  7. package/.agents/agents/spec-gatekeeper.md +84 -0
  8. package/.agents/agents/spec-global-analyzer.md +111 -0
  9. package/.agents/agents/spec-knowledge-curator.md +54 -0
  10. package/.agents/agents/spec-reviewer.md +46 -0
  11. package/.agents/agents/spec-security-auditor.md +56 -0
  12. package/.agents/agents/spec-tester.md +120 -0
  13. package/README.md +25 -1
  14. package/dist/cli.js +55 -0
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/analyze.d.ts.map +1 -1
  17. package/dist/commands/analyze.js +179 -40
  18. package/dist/commands/analyze.js.map +1 -1
  19. package/dist/commands/config.js +15 -4
  20. package/dist/commands/config.js.map +1 -1
  21. package/dist/commands/graph.d.ts +25 -0
  22. package/dist/commands/graph.d.ts.map +1 -0
  23. package/dist/commands/graph.js +523 -0
  24. package/dist/commands/graph.js.map +1 -0
  25. package/dist/commands/init.d.ts +8 -0
  26. package/dist/commands/init.d.ts.map +1 -1
  27. package/dist/commands/init.js +229 -0
  28. package/dist/commands/init.js.map +1 -1
  29. package/dist/commands/iteration-from-global.js +2 -2
  30. package/dist/commands/update.d.ts.map +1 -1
  31. package/dist/commands/update.js +2 -0
  32. package/dist/commands/update.js.map +1 -1
  33. package/dist/core/ask-engine.d.ts.map +1 -1
  34. package/dist/core/ask-engine.js +12 -5
  35. package/dist/core/ask-engine.js.map +1 -1
  36. package/dist/core/code-graph/parser.d.ts.map +1 -1
  37. package/dist/core/code-graph/parser.js +21 -1
  38. package/dist/core/code-graph/parser.js.map +1 -1
  39. package/dist/core/graph-semantic.d.ts +51 -0
  40. package/dist/core/graph-semantic.d.ts.map +1 -0
  41. package/dist/core/graph-semantic.js +371 -0
  42. package/dist/core/graph-semantic.js.map +1 -0
  43. package/dist/core/incremental-analyzer.js +1 -1
  44. package/dist/core/incremental-analyzer.js.map +1 -1
  45. package/dist/core/knowledge-graph.d.ts +3 -0
  46. package/dist/core/knowledge-graph.d.ts.map +1 -1
  47. package/dist/core/knowledge-graph.js +190 -0
  48. package/dist/core/knowledge-graph.js.map +1 -1
  49. package/dist/core/platform-addition.js +3 -3
  50. package/dist/core/platform-addition.js.map +1 -1
  51. package/dist/core/rag-engine.d.ts +30 -0
  52. package/dist/core/rag-engine.d.ts.map +1 -1
  53. package/dist/core/rag-engine.js +78 -0
  54. package/dist/core/rag-engine.js.map +1 -1
  55. package/dist/utils/mermaid-render.d.ts +39 -0
  56. package/dist/utils/mermaid-render.d.ts.map +1 -0
  57. package/dist/utils/mermaid-render.js +284 -0
  58. package/dist/utils/mermaid-render.js.map +1 -0
  59. package/package.json +1 -1
@@ -0,0 +1,25 @@
1
+ interface GraphQueryOptions {
2
+ iteration?: string;
3
+ type?: 'all' | 'knowledge' | 'code';
4
+ limit?: number;
5
+ /** v7.0.0+: 启用 LLM 语义增强(默认 true) */
6
+ smart?: boolean;
7
+ }
8
+ /** graph query — 自然语言查询 */
9
+ export declare function graphQueryCommand(question: string, options: GraphQueryOptions): Promise<void>;
10
+ /** graph render — 渲染 Mermaid 图表 */
11
+ export declare function graphRenderCommand(filePath: string | undefined, options: {
12
+ all?: boolean;
13
+ extract?: boolean;
14
+ output?: string;
15
+ }): Promise<void>;
16
+ /** graph entity — 查询特定实体 */
17
+ export declare function graphEntityCommand(entityId: string, options: GraphQueryOptions): Promise<void>;
18
+ /** graph related — 查询关联实体 */
19
+ export declare function graphRelatedCommand(entityId: string, options: GraphQueryOptions): Promise<void>;
20
+ /** graph stats — 图谱统计 */
21
+ export declare function graphStatsCommand(options: GraphQueryOptions): Promise<void>;
22
+ /** graph path — 查找两实体间路径 */
23
+ export declare function graphPathCommand(from: string, to: string, options: GraphQueryOptions): Promise<void>;
24
+ export {};
25
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAyBA,UAAU,iBAAiB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAkQD,2BAA2B;AAC3B,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnG;AAED,mCAAmC;AACnC,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED,4BAA4B;AAC5B,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwEpG;AAED,6BAA6B;AAC7B,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCrG;AAED,yBAAyB;AACzB,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDjF;AAED,4BAA4B;AAC5B,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD1G"}
@@ -0,0 +1,523 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.graphQueryCommand = graphQueryCommand;
4
+ exports.graphRenderCommand = graphRenderCommand;
5
+ exports.graphEntityCommand = graphEntityCommand;
6
+ exports.graphRelatedCommand = graphRelatedCommand;
7
+ exports.graphStatsCommand = graphStatsCommand;
8
+ exports.graphPathCommand = graphPathCommand;
9
+ /**
10
+ * graph — 统一图谱查询命令
11
+ * v7.0.0: 支持知识图谱(KnowledgeGraph) + 代码图谱(CodeGraph) 统一查询
12
+ *
13
+ * 用法:
14
+ * speccore graph query <question> 自然语言查询两种图谱
15
+ * speccore graph entity <id> 查询特定实体详情
16
+ * speccore graph related <id> 查询关联实体(一阶邻居)
17
+ * speccore graph stats 输出两种图谱统计
18
+ * speccore graph path <from> <to> 查找两实体间最短路径
19
+ */
20
+ const logger_1 = require("../utils/logger");
21
+ const fs_extra_1 = require("fs-extra");
22
+ const path_1 = require("path");
23
+ const knowledge_graph_1 = require("../core/knowledge-graph");
24
+ const code_graph_1 = require("../core/code-graph");
25
+ const graph_semantic_1 = require("../core/graph-semantic");
26
+ const mermaid_render_1 = require("../utils/mermaid-render");
27
+ // ═══════════════════════════════════════════════════════════
28
+ // 知识图谱查询引擎
29
+ // ═══════════════════════════════════════════════════════════
30
+ /** 在知识图谱中搜索实体(关键词匹配 + 语义标签匹配) */
31
+ function searchKnowledgeEntities(graph, keywords, limit = 10) {
32
+ const results = [];
33
+ for (const entity of Object.values(graph.entities)) {
34
+ const text = `${entity.title} ${entity.type} ${entity.tags?.join(' ') || ''} ${entity.semanticTags?.join(' ') || ''} ${entity.description || ''} ${entity.businessRole || ''}`.toLowerCase();
35
+ let score = 0;
36
+ for (const kw of keywords) {
37
+ const lowerKw = kw.toLowerCase();
38
+ // 标题匹配权重最高
39
+ if (entity.title.toLowerCase().includes(lowerKw))
40
+ score += 5;
41
+ // ID 精确匹配
42
+ else if (entity.id.toLowerCase().includes(lowerKw))
43
+ score += 4;
44
+ // 语义标签匹配(v7.0.0+)
45
+ else if (entity.semanticTags?.some(t => t.toLowerCase().includes(lowerKw)))
46
+ score += 3;
47
+ // 业务角色匹配(v7.0.0+)
48
+ else if (entity.businessRole?.toLowerCase().includes(lowerKw))
49
+ score += 3;
50
+ // 类型匹配
51
+ else if (entity.type.toLowerCase().includes(lowerKw))
52
+ score += 2;
53
+ // 通用文本匹配
54
+ else if (text.includes(lowerKw))
55
+ score += 1;
56
+ }
57
+ if (score > 0) {
58
+ results.push({ entity, score });
59
+ }
60
+ }
61
+ return results.sort((a, b) => b.score - a.score).slice(0, limit);
62
+ }
63
+ /** 获取实体的关联实体(一阶邻居) */
64
+ function getRelatedEntities(graph, entityId) {
65
+ const results = [];
66
+ for (const rel of graph.relations) {
67
+ if (rel.from === entityId) {
68
+ const target = graph.entities[rel.to];
69
+ if (target)
70
+ results.push({ entity: target, relation: rel });
71
+ }
72
+ else if (rel.to === entityId) {
73
+ const source = graph.entities[rel.from];
74
+ if (source)
75
+ results.push({ entity: source, relation: rel });
76
+ }
77
+ }
78
+ return results;
79
+ }
80
+ /** 查找知识图谱中两实体间的路径(BFS) */
81
+ function findKnowledgePath(graph, fromId, toId, maxDepth = 5) {
82
+ const queue = [
83
+ { id: fromId, path: [graph.entities[fromId]], rels: [] },
84
+ ];
85
+ const visited = new Set([fromId]);
86
+ while (queue.length > 0) {
87
+ const current = queue.shift();
88
+ if (current.path.length > maxDepth)
89
+ continue;
90
+ if (current.id === toId && current.path.length > 1) {
91
+ return { path: current.path, relations: current.rels };
92
+ }
93
+ for (const rel of graph.relations) {
94
+ let nextId;
95
+ if (rel.from === current.id)
96
+ nextId = rel.to;
97
+ else if (rel.to === current.id)
98
+ nextId = rel.from;
99
+ if (nextId && !visited.has(nextId)) {
100
+ visited.add(nextId);
101
+ const nextEntity = graph.entities[nextId];
102
+ if (nextEntity) {
103
+ queue.push({
104
+ id: nextId,
105
+ path: [...current.path, nextEntity],
106
+ rels: [...current.rels, rel],
107
+ });
108
+ }
109
+ }
110
+ }
111
+ }
112
+ return null;
113
+ }
114
+ // ═══════════════════════════════════════════════════════════
115
+ // 统一查询:融合知识图谱 + 代码图谱
116
+ // ═══════════════════════════════════════════════════════════
117
+ /** 统一查询两种图谱 */
118
+ async function unifiedQuery(question, options) {
119
+ const type = options.type || 'all';
120
+ const limit = options.limit || 10;
121
+ const smart = options.smart !== false; // 默认启用语义增强
122
+ const cwd = process.cwd();
123
+ logger_1.logger.info(`\n🔍 查询: "${question}"`);
124
+ logger_1.logger.info(` 范围: ${type}${smart ? ' | 模式: 语义增强 (LLM)' : ' | 模式: 快速匹配'}`);
125
+ // v7.0.0+: 语义扩展查询词
126
+ let keywords = [];
127
+ let semanticInfo = {};
128
+ if (smart) {
129
+ try {
130
+ const expansion = await (0, graph_semantic_1.expandQuerySemantically)(question, { useLlm: true });
131
+ keywords = expansion.keywords;
132
+ semanticInfo = {
133
+ intent: expansion.intent,
134
+ domain: expansion.domain,
135
+ queryType: expansion.queryType,
136
+ };
137
+ logger_1.logger.info(` 语义扩展: ${keywords.slice(0, 8).join(', ')}${keywords.length > 8 ? `... (${keywords.length} 个)` : ''}`);
138
+ if (expansion.domain)
139
+ logger_1.logger.info(` 业务域: ${expansion.domain}`);
140
+ if (expansion.queryType)
141
+ logger_1.logger.info(` 查询类型: ${expansion.queryType}`);
142
+ }
143
+ catch {
144
+ // 降级到原始关键词
145
+ keywords = extractRawKeywords(question);
146
+ logger_1.logger.info(` 关键词: ${keywords.join(', ')} (本地提取)`);
147
+ }
148
+ }
149
+ else {
150
+ keywords = extractRawKeywords(question);
151
+ logger_1.logger.info(` 关键词: ${keywords.join(', ')}`);
152
+ }
153
+ if (keywords.length === 0) {
154
+ logger_1.logger.error('查询词太短,请提供更具体的关键词');
155
+ return;
156
+ }
157
+ logger_1.logger.info('');
158
+ let hasResults = false;
159
+ // 1. 查询知识图谱(含语义排序)
160
+ if (type === 'all' || type === 'knowledge') {
161
+ const kg = await (0, knowledge_graph_1.loadKnowledgeGraph)(cwd);
162
+ if (kg) {
163
+ const kgLocalResults = searchKnowledgeEntities(kg, keywords, limit * 3); // 先取更多候选
164
+ if (kgLocalResults.length > 0 && smart) {
165
+ // LLM 语义排序
166
+ const candidates = kgLocalResults.map(r => ({ entity: r.entity, localScore: r.score }));
167
+ const ranked = await (0, graph_semantic_1.semanticRank)(question, candidates, { topK: limit * 2, useLlm: true });
168
+ const finalResults = ranked.slice(0, limit);
169
+ if (finalResults.length > 0) {
170
+ hasResults = true;
171
+ logger_1.logger.info(`📚 知识图谱匹配 (${finalResults.length} 个实体,语义排序):`);
172
+ logger_1.logger.info('─'.repeat(60));
173
+ for (const { entity, localScore, semanticScore, finalScore, reason } of finalResults) {
174
+ const tags = entity.tags?.join(', ') || '';
175
+ const semantic = entity.semanticTags?.join(', ') || '';
176
+ const status = entity.status ? `[${entity.status}]` : '';
177
+ logger_1.logger.info(` [综合:${finalScore.toFixed(1)} 本地:${localScore.toFixed(1)} 语义:${semanticScore.toFixed(1)}] ${entity.id}`);
178
+ logger_1.logger.info(` 类型: ${entity.type} ${status}`);
179
+ logger_1.logger.info(` 标题: ${entity.title}`);
180
+ if (tags)
181
+ logger_1.logger.info(` 标签: ${tags}`);
182
+ if (semantic)
183
+ logger_1.logger.info(` 语义: ${semantic}`);
184
+ if (entity.businessRole)
185
+ logger_1.logger.info(` 职责: ${entity.businessRole}`);
186
+ if (reason)
187
+ logger_1.logger.info(` 匹配理由: ${reason}`);
188
+ if (entity.file)
189
+ logger_1.logger.info(` 文件: ${entity.file}`);
190
+ logger_1.logger.info('');
191
+ }
192
+ }
193
+ }
194
+ else if (kgLocalResults.length > 0) {
195
+ hasResults = true;
196
+ logger_1.logger.info(`📚 知识图谱匹配 (${kgLocalResults.length} 个实体):`);
197
+ logger_1.logger.info('─'.repeat(60));
198
+ for (const { entity, score } of kgLocalResults.slice(0, limit)) {
199
+ const tags = entity.tags?.join(', ') || '';
200
+ const semantic = entity.semanticTags?.join(', ') || '';
201
+ const status = entity.status ? `[${entity.status}]` : '';
202
+ logger_1.logger.info(` [${score.toFixed(1)}] ${entity.id}`);
203
+ logger_1.logger.info(` 类型: ${entity.type} ${status}`);
204
+ logger_1.logger.info(` 标题: ${entity.title}`);
205
+ if (tags)
206
+ logger_1.logger.info(` 标签: ${tags}`);
207
+ if (semantic)
208
+ logger_1.logger.info(` 语义: ${semantic}`);
209
+ if (entity.businessRole)
210
+ logger_1.logger.info(` 职责: ${entity.businessRole}`);
211
+ if (entity.file)
212
+ logger_1.logger.info(` 文件: ${entity.file}`);
213
+ logger_1.logger.info('');
214
+ }
215
+ }
216
+ }
217
+ }
218
+ // 2. 查询代码图谱
219
+ if (type === 'all' || type === 'code') {
220
+ const cg = await (0, code_graph_1.loadCodeGraph)(cwd);
221
+ if (cg) {
222
+ const cgResult = (0, code_graph_1.queryGraph)(cg, question);
223
+ if (cgResult.nodes.length > 0) {
224
+ hasResults = true;
225
+ logger_1.logger.info(`💻 代码图谱匹配 (${cgResult.nodes.length} 个节点):`);
226
+ logger_1.logger.info('─'.repeat(60));
227
+ for (const node of cgResult.nodes.slice(0, limit)) {
228
+ logger_1.logger.info(` • ${node.name} (${node.type})`);
229
+ logger_1.logger.info(` 文件: ${node.filePath}:${node.line}`);
230
+ if (node.snippet) {
231
+ const snippet = node.snippet.length > 100
232
+ ? node.snippet.slice(0, 100) + '...'
233
+ : node.snippet;
234
+ logger_1.logger.info(` 片段: ${snippet}`);
235
+ }
236
+ logger_1.logger.info('');
237
+ }
238
+ if (cgResult.nodes.length > limit) {
239
+ logger_1.logger.info(` ... 及其他 ${cgResult.nodes.length - limit} 个节点`);
240
+ }
241
+ }
242
+ }
243
+ }
244
+ if (!hasResults) {
245
+ logger_1.logger.info('\n⚠️ 未在图谱中找到匹配结果,建议:');
246
+ logger_1.logger.info(' 1. 先运行 speccore knowledge 构建知识图谱');
247
+ logger_1.logger.info(' 2. 先运行 speccore code-index --graph 构建代码图谱');
248
+ logger_1.logger.info(' 3. 使用更具体的关键词重试');
249
+ if (!smart) {
250
+ logger_1.logger.info(' 4. 尝试使用 --smart 模式启用语义增强查询');
251
+ }
252
+ }
253
+ }
254
+ /** 提取原始关键词 */
255
+ function extractRawKeywords(question) {
256
+ return question
257
+ .toLowerCase()
258
+ .replace(/[^\u4e00-\u9fa5a-z0-9\s]/g, ' ')
259
+ .split(/\s+/)
260
+ .filter(w => w.length >= 2);
261
+ }
262
+ // ═══════════════════════════════════════════════════════════
263
+ // 子命令实现
264
+ // ═══════════════════════════════════════════════════════════
265
+ /** graph query — 自然语言查询 */
266
+ async function graphQueryCommand(question, options) {
267
+ await unifiedQuery(question, options);
268
+ }
269
+ /** graph render — 渲染 Mermaid 图表 */
270
+ async function graphRenderCommand(filePath, options) {
271
+ const cwd = process.cwd();
272
+ const outputDir = options.output ? (0, path_1.join)(cwd, options.output) : undefined;
273
+ // 模式1: 批量渲染 diagrams/ 目录下所有 .mmd
274
+ if (options.all) {
275
+ const diagramsDir = (0, path_1.join)(cwd, '.speccore', 'GLOBAL', 'diagrams');
276
+ logger_1.logger.info(`\n🎨 批量渲染 Mermaid 图表: ${diagramsDir}\n`);
277
+ const mmdResults = await (0, mermaid_render_1.renderAllMmdInDir)(diagramsDir, { outputDir });
278
+ if (mmdResults.length === 0) {
279
+ logger_1.logger.info(' 未找到 .mmd 文件');
280
+ }
281
+ else {
282
+ logger_1.logger.info(`\n 共渲染 ${mmdResults.length} 个 .mmd 文件`);
283
+ }
284
+ return;
285
+ }
286
+ // 模式2: 从 Markdown 提取并渲染
287
+ if (options.extract && filePath) {
288
+ const fullPath = filePath.startsWith('/') ? filePath : (0, path_1.join)(cwd, filePath);
289
+ logger_1.logger.info(`\n🎨 从 Markdown 提取 Mermaid: ${fullPath}\n`);
290
+ const html = await (0, mermaid_render_1.renderFromMarkdown)(fullPath, { outputDir });
291
+ if (html) {
292
+ const outputName = (0, path_1.basename)(filePath, (0, path_1.extname)(filePath)) + '-diagrams.html';
293
+ const outputPath = outputDir ? (0, path_1.join)(outputDir, outputName) : (0, path_1.join)((0, path_1.dirname)(fullPath), outputName);
294
+ await (0, fs_extra_1.writeFile)(outputPath, html, 'utf-8');
295
+ logger_1.logger.info(` ✓ 已生成: ${outputPath}`);
296
+ }
297
+ return;
298
+ }
299
+ // 模式3: 渲染单个 .mmd 文件
300
+ if (filePath) {
301
+ const fullPath = filePath.startsWith('/') ? filePath : (0, path_1.join)(cwd, filePath);
302
+ logger_1.logger.info(`\n🎨 渲染 Mermaid: ${fullPath}\n`);
303
+ const html = await (0, mermaid_render_1.renderMmdFile)(fullPath, { outputDir });
304
+ if (html) {
305
+ const outputName = (0, path_1.basename)(filePath, (0, path_1.extname)(filePath)) + '.html';
306
+ const outputPath = outputDir ? (0, path_1.join)(outputDir, outputName) : (0, path_1.join)((0, path_1.dirname)(fullPath), outputName);
307
+ await (0, fs_extra_1.writeFile)(outputPath, html, 'utf-8');
308
+ logger_1.logger.info(` ✓ 已生成: ${outputPath}`);
309
+ }
310
+ return;
311
+ }
312
+ logger_1.logger.error('请提供文件路径,或使用 --all 批量渲染');
313
+ logger_1.logger.info('用法:');
314
+ logger_1.logger.info(' speccore graph render <file.mmd>');
315
+ logger_1.logger.info(' speccore graph render --all');
316
+ logger_1.logger.info(' speccore graph render --extract <file.md>');
317
+ }
318
+ /** graph entity — 查询特定实体 */
319
+ async function graphEntityCommand(entityId, options) {
320
+ const cwd = process.cwd();
321
+ const type = options.type || 'all';
322
+ logger_1.logger.info(`\n📍 实体详情: ${entityId}\n`);
323
+ // 知识图谱
324
+ if (type === 'all' || type === 'knowledge') {
325
+ const kg = await (0, knowledge_graph_1.loadKnowledgeGraph)(cwd);
326
+ if (kg && kg.entities[entityId]) {
327
+ const e = kg.entities[entityId];
328
+ logger_1.logger.info('📚 知识图谱实体:');
329
+ logger_1.logger.info('─'.repeat(50));
330
+ logger_1.logger.info(` ID: ${e.id}`);
331
+ logger_1.logger.info(` 类型: ${e.type}`);
332
+ logger_1.logger.info(` 标题: ${e.title}`);
333
+ if (e.status)
334
+ logger_1.logger.info(` 状态: ${e.status}`);
335
+ if (e.platform)
336
+ logger_1.logger.info(` 端: ${e.platform}`);
337
+ if (e.tags?.length)
338
+ logger_1.logger.info(` 标签: ${e.tags.join(', ')}`);
339
+ if (e.semanticTags?.length)
340
+ logger_1.logger.info(` 语义标签: ${e.semanticTags.join(', ')}`);
341
+ if (e.businessRole)
342
+ logger_1.logger.info(` 业务职责: ${e.businessRole}`);
343
+ if (e.description)
344
+ logger_1.logger.info(` 描述: ${e.description}`);
345
+ if (e.file)
346
+ logger_1.logger.info(` 文件: ${e.file}`);
347
+ // 关联实体
348
+ const related = getRelatedEntities(kg, entityId);
349
+ if (related.length > 0) {
350
+ logger_1.logger.info(`\n 🔗 关联实体 (${related.length} 个):`);
351
+ for (const { entity, relation } of related) {
352
+ const dir = relation.from === entityId ? '-->' : '<--';
353
+ logger_1.logger.info(` ${dir} ${entity.id} [${relation.type}]`);
354
+ }
355
+ }
356
+ logger_1.logger.info('');
357
+ return;
358
+ }
359
+ }
360
+ // 代码图谱
361
+ if (type === 'all' || type === 'code') {
362
+ const cg = await (0, code_graph_1.loadCodeGraph)(cwd);
363
+ if (cg) {
364
+ const result = (0, code_graph_1.explainNode)(cg, entityId);
365
+ if (result.nodes.length > 0) {
366
+ const target = result.nodes.find(n => n.id === entityId || n.name === entityId);
367
+ logger_1.logger.info('💻 代码图谱节点:');
368
+ logger_1.logger.info('─'.repeat(50));
369
+ logger_1.logger.info(` 名称: ${target?.name || entityId}`);
370
+ logger_1.logger.info(` 类型: ${target?.type}`);
371
+ logger_1.logger.info(` 文件: ${target?.filePath}:${target?.line}`);
372
+ if (target?.snippet)
373
+ logger_1.logger.info(` 片段: ${target.snippet.slice(0, 150)}...`);
374
+ logger_1.logger.info(` 度数: ${target?.degree || 'N/A'}`);
375
+ logger_1.logger.info(` 社区: ${target?.community || 'N/A'}`);
376
+ if (result.edges.length > 0) {
377
+ logger_1.logger.info(`\n 🔗 连接 (${result.edges.length} 条):`);
378
+ for (const edge of result.edges.slice(0, 15)) {
379
+ const other = edge.source === target?.id
380
+ ? result.nodes.find(n => n.id === edge.target)
381
+ : result.nodes.find(n => n.id === edge.source);
382
+ const dir = edge.source === target?.id ? '-->' : '<--';
383
+ logger_1.logger.info(` ${dir} ${other?.name || '...'} [${edge.type}] (${edge.confidence})`);
384
+ }
385
+ }
386
+ logger_1.logger.info('');
387
+ return;
388
+ }
389
+ }
390
+ }
391
+ logger_1.logger.error(`未找到实体: ${entityId}`);
392
+ logger_1.logger.info('提示: 使用 speccore graph query <关键词> 搜索实体 ID');
393
+ }
394
+ /** graph related — 查询关联实体 */
395
+ async function graphRelatedCommand(entityId, options) {
396
+ const cwd = process.cwd();
397
+ const kg = await (0, knowledge_graph_1.loadKnowledgeGraph)(cwd);
398
+ if (!kg || !kg.entities[entityId]) {
399
+ logger_1.logger.error(`知识图谱中未找到实体: ${entityId}`);
400
+ return;
401
+ }
402
+ const related = getRelatedEntities(kg, entityId);
403
+ if (related.length === 0) {
404
+ logger_1.logger.info(`实体 ${entityId} 没有关联实体`);
405
+ return;
406
+ }
407
+ logger_1.logger.info(`\n🔗 ${entityId} 的关联实体 (${related.length} 个):\n`);
408
+ // 按关系类型分组
409
+ const byType = new Map();
410
+ for (const item of related) {
411
+ const list = byType.get(item.relation.type) || [];
412
+ list.push(item);
413
+ byType.set(item.relation.type, list);
414
+ }
415
+ for (const [relType, items] of byType) {
416
+ logger_1.logger.info(` [${relType}] (${items.length} 个):`);
417
+ for (const { entity } of items) {
418
+ logger_1.logger.info(` • ${entity.id} — ${entity.title}`);
419
+ if (entity.semanticTags?.length) {
420
+ logger_1.logger.info(` 语义: ${entity.semanticTags.join(', ')}`);
421
+ }
422
+ }
423
+ logger_1.logger.info('');
424
+ }
425
+ }
426
+ /** graph stats — 图谱统计 */
427
+ async function graphStatsCommand(options) {
428
+ const cwd = process.cwd();
429
+ const type = options.type || 'all';
430
+ logger_1.logger.info('\n📊 知识图谱统计\n');
431
+ logger_1.logger.info('─'.repeat(50));
432
+ if (type === 'all' || type === 'knowledge') {
433
+ const kg = await (0, knowledge_graph_1.loadKnowledgeGraph)(cwd);
434
+ if (kg) {
435
+ const entityCount = Object.keys(kg.entities).length;
436
+ const withSemantic = Object.values(kg.entities).filter(e => e.semanticTags && e.semanticTags.length > 0).length;
437
+ const withDesc = Object.values(kg.entities).filter(e => e.description).length;
438
+ logger_1.logger.info('📚 知识图谱 (Knowledge Graph):');
439
+ logger_1.logger.info(` 实体总数: ${entityCount}`);
440
+ logger_1.logger.info(` 关系总数: ${kg.relations.length}`);
441
+ logger_1.logger.info(` 迭代: ${kg.iteration}`);
442
+ logger_1.logger.info(` 生成时间: ${kg.generated}`);
443
+ logger_1.logger.info(` 需求: ${kg.stats.requirements}`);
444
+ logger_1.logger.info(` 规格: ${kg.stats.specs}`);
445
+ logger_1.logger.info(` 任务: ${kg.stats.tasks}`);
446
+ logger_1.logger.info(` 子任务: ${kg.stats.subtasks}`);
447
+ logger_1.logger.info(` 源码文件: ${kg.stats.sourceFiles}`);
448
+ logger_1.logger.info(` 全局文档: ${kg.stats.globalDocs}`);
449
+ logger_1.logger.info(` 业务模块: ${kg.stats.businessModules}`);
450
+ logger_1.logger.info(` 含语义标签: ${withSemantic} (${Math.round(withSemantic / entityCount * 100)}%)`);
451
+ logger_1.logger.info(` 含描述: ${withDesc} (${Math.round(withDesc / entityCount * 100)}%)`);
452
+ }
453
+ else {
454
+ logger_1.logger.info('📚 知识图谱: 未构建 (运行 speccore knowledge)');
455
+ }
456
+ }
457
+ if (type === 'all' || type === 'code') {
458
+ const cg = await (0, code_graph_1.loadCodeGraph)(cwd);
459
+ if (cg) {
460
+ logger_1.logger.info('\n💻 代码图谱 (Code Graph):');
461
+ logger_1.logger.info(` 节点总数: ${cg.metadata.totalNodes}`);
462
+ logger_1.logger.info(` 边总数: ${cg.metadata.totalEdges}`);
463
+ logger_1.logger.info(` 扫描文件: ${cg.metadata.scannedFiles}`);
464
+ logger_1.logger.info(` 社区数: ${cg.communities.length}`);
465
+ logger_1.logger.info(` God 节点: ${cg.godNodes.length}`);
466
+ logger_1.logger.info(` 生成时间: ${cg.metadata.generatedAt}`);
467
+ }
468
+ else {
469
+ logger_1.logger.info('\n💻 代码图谱: 未构建 (运行 speccore code-index --graph)');
470
+ }
471
+ }
472
+ logger_1.logger.info('');
473
+ }
474
+ /** graph path — 查找两实体间路径 */
475
+ async function graphPathCommand(from, to, options) {
476
+ const cwd = process.cwd();
477
+ const type = options.type || 'all';
478
+ logger_1.logger.info(`\n🛤️ 路径查询: ${from} → ${to}\n`);
479
+ // 优先查知识图谱
480
+ if (type === 'all' || type === 'knowledge') {
481
+ const kg = await (0, knowledge_graph_1.loadKnowledgeGraph)(cwd);
482
+ if (kg) {
483
+ const result = findKnowledgePath(kg, from, to);
484
+ if (result) {
485
+ logger_1.logger.info('📚 知识图谱路径:');
486
+ logger_1.logger.info('─'.repeat(50));
487
+ for (let i = 0; i < result.path.length; i++) {
488
+ const entity = result.path[i];
489
+ logger_1.logger.info(` ${i + 1}. ${entity.id} (${entity.type})`);
490
+ logger_1.logger.info(` ${entity.title}`);
491
+ if (i < result.path.length - 1) {
492
+ const rel = result.relations[i];
493
+ logger_1.logger.info(` [${rel.type}]${rel.metadata ? ` {${Object.entries(rel.metadata).map(([k, v]) => `${k}=${v}`).join(', ')}}` : ''}`);
494
+ }
495
+ }
496
+ logger_1.logger.info(`\n 总步数: ${result.path.length - 1}\n`);
497
+ return;
498
+ }
499
+ }
500
+ }
501
+ // 回退到代码图谱
502
+ if (type === 'all' || type === 'code') {
503
+ const cg = await (0, code_graph_1.loadCodeGraph)(cwd);
504
+ if (cg) {
505
+ const result = (0, code_graph_1.findPath)(cg, from, to);
506
+ if (result.path && result.path.length > 0) {
507
+ logger_1.logger.info('💻 代码图谱路径:');
508
+ logger_1.logger.info('─'.repeat(50));
509
+ for (let i = 0; i < result.path.length; i++) {
510
+ const node = result.nodes.find(n => n.id === result.path[i]);
511
+ logger_1.logger.info(` ${i + 1}. ${node?.name || result.path[i]} (${node?.type})`);
512
+ if (i < result.path.length - 1 && result.edges[i]) {
513
+ logger_1.logger.info(` [${result.edges[i].type}] (${result.edges[i].confidence})`);
514
+ }
515
+ }
516
+ logger_1.logger.info(`\n 总步数: ${result.path.length - 1}\n`);
517
+ return;
518
+ }
519
+ }
520
+ }
521
+ logger_1.logger.error(`未找到从 ${from} 到 ${to} 的路径`);
522
+ }
523
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,14 @@ export declare function initSkillsDir(projectRoot: string): Promise<void>;
45
45
  * v6.88.0+: 初始化 HOOKS 生命周期钩子
46
46
  */
47
47
  export declare function initHooksDir(projectRoot: string): Promise<void>;
48
+ /**
49
+ * 同步 AGENTS.md — 将 .speccore/AGENTS/ 和 .speccore/RULES/ 下的规范投影到 AGENTS.md
50
+ *
51
+ * 文件名约定:
52
+ * - `*.inline.md` → 内容内联到 AGENTS.md
53
+ * - `*.md` → 只生成索引链接
54
+ */
55
+ export declare function syncAgentsMd(projectRoot: string): Promise<void>;
48
56
  /**
49
57
  * 检查受保护文件是否需要升级提示。
50
58
  * 文件已存在时不覆盖,但告诉用户模板有什么新变化。
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,gBAAgB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAO,CAAC;AAOvE,yDAAyD;AACzD,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7F;AAED,6BAA6B;AAC7B,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC1F;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrE;AA2vBD,eAAO,MAAM,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EA0BnD,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+IpG;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EACpC,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,IAAI,CAAC,CA6Ff;AA8FD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCtE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAatE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAarE;AAuID;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsI/F;AAGD,uBAAuB;AACvB,wBAAgB,uBAAuB,IAAI,MAAM,CA2ChD;AAED,uBAAuB;AACvB,wBAAgB,sBAAsB,IAAI,MAAM,CAuF/C"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,gBAAgB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAO,CAAC;AAOvE,yDAAyD;AACzD,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7F;AAED,6BAA6B;AAC7B,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC1F;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrE;AAiwBD,eAAO,MAAM,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EA0BnD,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+IpG;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EACpC,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,IAAI,CAAC,CA6Ff;AA8FD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCtE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqGrE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAatE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAarE;AAOD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4HrE;AAuID;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsI/F;AAGD,uBAAuB;AACvB,wBAAgB,uBAAuB,IAAI,MAAM,CA2ChD;AAED,uBAAuB;AACvB,wBAAgB,sBAAsB,IAAI,MAAM,CAuF/C"}