speccore 6.6.0 → 6.10.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 (100) hide show
  1. package/.agents/skills/spec-ask/SKILL.md +6 -0
  2. package/dist/cli.js +9 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/about.d.ts.map +1 -1
  5. package/dist/commands/about.js +10 -3
  6. package/dist/commands/about.js.map +1 -1
  7. package/dist/commands/analyze.d.ts +2 -0
  8. package/dist/commands/analyze.d.ts.map +1 -1
  9. package/dist/commands/analyze.js +141 -0
  10. package/dist/commands/analyze.js.map +1 -1
  11. package/dist/commands/change.d.ts.map +1 -1
  12. package/dist/commands/change.js +3 -0
  13. package/dist/commands/change.js.map +1 -1
  14. package/dist/commands/doc2spec.d.ts +1 -0
  15. package/dist/commands/doc2spec.d.ts.map +1 -1
  16. package/dist/commands/doc2spec.js +175 -0
  17. package/dist/commands/doc2spec.js.map +1 -1
  18. package/dist/commands/execute.d.ts.map +1 -1
  19. package/dist/commands/execute.js +20 -6
  20. package/dist/commands/execute.js.map +1 -1
  21. package/dist/commands/help.js +32 -5
  22. package/dist/commands/help.js.map +1 -1
  23. package/dist/commands/iteration/create.d.ts.map +1 -1
  24. package/dist/commands/iteration/create.js +38 -10
  25. package/dist/commands/iteration/create.js.map +1 -1
  26. package/dist/commands/iteration/split.d.ts.map +1 -1
  27. package/dist/commands/iteration/split.js +125 -9
  28. package/dist/commands/iteration/split.js.map +1 -1
  29. package/dist/commands/rag-index.d.ts +19 -0
  30. package/dist/commands/rag-index.d.ts.map +1 -0
  31. package/dist/commands/rag-index.js +272 -0
  32. package/dist/commands/rag-index.js.map +1 -0
  33. package/dist/commands/refresh.d.ts +21 -0
  34. package/dist/commands/refresh.d.ts.map +1 -0
  35. package/dist/commands/refresh.js +185 -0
  36. package/dist/commands/refresh.js.map +1 -0
  37. package/dist/commands/sync-global.js +41 -0
  38. package/dist/commands/sync-global.js.map +1 -1
  39. package/dist/core/ai-context-generator.d.ts +2 -0
  40. package/dist/core/ai-context-generator.d.ts.map +1 -1
  41. package/dist/core/ai-context-generator.js +8 -6
  42. package/dist/core/ai-context-generator.js.map +1 -1
  43. package/dist/core/analyze-engine.d.ts +19 -0
  44. package/dist/core/analyze-engine.d.ts.map +1 -1
  45. package/dist/core/analyze-engine.js +326 -9
  46. package/dist/core/analyze-engine.js.map +1 -1
  47. package/dist/core/ask-engine.d.ts.map +1 -1
  48. package/dist/core/ask-engine.js +113 -4
  49. package/dist/core/ask-engine.js.map +1 -1
  50. package/dist/core/ask-host-ai.d.ts.map +1 -1
  51. package/dist/core/ask-host-ai.js +9 -6
  52. package/dist/core/ask-host-ai.js.map +1 -1
  53. package/dist/core/code-scanner.d.ts +24 -2
  54. package/dist/core/code-scanner.d.ts.map +1 -1
  55. package/dist/core/code-scanner.js +235 -5
  56. package/dist/core/code-scanner.js.map +1 -1
  57. package/dist/core/context-builder.d.ts.map +1 -1
  58. package/dist/core/context-builder.js +20 -1
  59. package/dist/core/context-builder.js.map +1 -1
  60. package/dist/core/decay-detector.d.ts +2 -2
  61. package/dist/core/decay-detector.d.ts.map +1 -1
  62. package/dist/core/decay-detector.js +135 -6
  63. package/dist/core/decay-detector.js.map +1 -1
  64. package/dist/core/git-integration.d.ts +50 -2
  65. package/dist/core/git-integration.d.ts.map +1 -1
  66. package/dist/core/git-integration.js +217 -27
  67. package/dist/core/git-integration.js.map +1 -1
  68. package/dist/core/global-knowledge.d.ts +25 -0
  69. package/dist/core/global-knowledge.d.ts.map +1 -0
  70. package/dist/core/global-knowledge.js +228 -0
  71. package/dist/core/global-knowledge.js.map +1 -0
  72. package/dist/core/index-guard.d.ts +57 -0
  73. package/dist/core/index-guard.d.ts.map +1 -0
  74. package/dist/core/index-guard.js +202 -0
  75. package/dist/core/index-guard.js.map +1 -0
  76. package/dist/core/intent-cache.d.ts +3 -1
  77. package/dist/core/intent-cache.d.ts.map +1 -1
  78. package/dist/core/intent-cache.js +33 -3
  79. package/dist/core/intent-cache.js.map +1 -1
  80. package/dist/core/knowledge-graph.d.ts +7 -1
  81. package/dist/core/knowledge-graph.d.ts.map +1 -1
  82. package/dist/core/knowledge-graph.js +208 -22
  83. package/dist/core/knowledge-graph.js.map +1 -1
  84. package/dist/core/platform-registry.d.ts +5 -0
  85. package/dist/core/platform-registry.d.ts.map +1 -1
  86. package/dist/core/platform-registry.js +52 -0
  87. package/dist/core/platform-registry.js.map +1 -1
  88. package/dist/core/prompt-builder.d.ts +3 -2
  89. package/dist/core/prompt-builder.d.ts.map +1 -1
  90. package/dist/core/prompt-builder.js +220 -71
  91. package/dist/core/prompt-builder.js.map +1 -1
  92. package/dist/core/rag-engine.d.ts +152 -0
  93. package/dist/core/rag-engine.d.ts.map +1 -0
  94. package/dist/core/rag-engine.js +816 -0
  95. package/dist/core/rag-engine.js.map +1 -0
  96. package/dist/core/unified-retrieval.d.ts +140 -0
  97. package/dist/core/unified-retrieval.d.ts.map +1 -0
  98. package/dist/core/unified-retrieval.js +466 -0
  99. package/dist/core/unified-retrieval.js.map +1 -0
  100. package/package.json +1 -1
@@ -0,0 +1,152 @@
1
+ /**
2
+ * RAG Engine — 轻量级检索增强生成
3
+ *
4
+ * 设计目标:不引入向量数据库,用规则分块 + 关键词匹配实现文档检索
5
+ * 适用场景:SpecCore CLI 在构建 Prompt 时,从长文档中提取最相关的片段
6
+ *
7
+ * 流程:
8
+ * 分析阶段: 读取文档 → 按标题分块 → 提取摘要/关键词 → 存入 rag-index.json
9
+ * 执行阶段: 根据 task/需求关键词 → 检索相关块 → 按分数排序 → 组装进 Prompt
10
+ */
11
+ export interface DocumentChunk {
12
+ /** 唯一标识: hash(文件路径 + 标题) */
13
+ id: string;
14
+ /** 源文件路径 */
15
+ filePath: string;
16
+ /** 源文件名称 */
17
+ fileName: string;
18
+ /** 块标题 */
19
+ title: string;
20
+ /** 标题级别 (2=##, 3=###, 4=####) */
21
+ level: number;
22
+ /** 块原始内容 */
23
+ content: string;
24
+ /** 自动提取的摘要 */
25
+ summary: string;
26
+ /** 关键词标签 */
27
+ keywords: string[];
28
+ /** 字数 */
29
+ charCount: number;
30
+ /** 起始行号(1-based,用于精确读取) */
31
+ startLine?: number;
32
+ /** 结束行号(1-based,含) */
33
+ endLine?: number;
34
+ /** 相关性分数(检索时动态计算) */
35
+ relevanceScore?: number;
36
+ }
37
+ export interface RagIndex {
38
+ version: string;
39
+ updatedAt: string;
40
+ /** 索引来源的迭代/任务标识 */
41
+ scope: string;
42
+ /** 所有分块 */
43
+ chunks: DocumentChunk[];
44
+ /** 文件摘要映射: filePath → 文件级摘要 */
45
+ fileSummaries: Record<string, string>;
46
+ /** 源文件修改时间: filePath → mtimeMs */
47
+ fileMtimes: Record<string, number>;
48
+ }
49
+ export interface RetrievalOptions {
50
+ /** 查询语句(task名称/需求关键词) */
51
+ query: string;
52
+ /** 最多返回几块 */
53
+ topK?: number;
54
+ /** 相关性分数阈值(0~1) */
55
+ minScore?: number;
56
+ /** 单块字数上限 */
57
+ maxChunkChars?: number;
58
+ /** 总字数上限 */
59
+ maxTotalChars?: number;
60
+ /** 按端过滤(backend/web/h5/admin/...) */
61
+ platforms?: string[];
62
+ }
63
+ /**
64
+ * 按 Markdown 标题层级分块
65
+ * 规则:## / ### / #### 作为分块边界,一级标题 # 作为文档开头(不切分)
66
+ */
67
+ export declare function chunkByHeaders(content: string, filePath: string): DocumentChunk[];
68
+ /**
69
+ * 为多个文档构建 RAG 索引
70
+ */
71
+ export declare function buildRagIndex(documents: {
72
+ filePath: string;
73
+ content: string;
74
+ mtime?: number;
75
+ }[], scope: string): Promise<RagIndex>;
76
+ /**
77
+ * 获取 RAG 索引文件路径
78
+ * 支持按 scope 分文件存储,避免 task/iteration/global 互相覆盖
79
+ */
80
+ export declare function getRagIndexPath(cwd: string, fileName?: string): string;
81
+ export declare function saveRagIndex(cwd: string, index: RagIndex, fileName?: string): Promise<void>;
82
+ export declare function loadRagIndex(cwd: string, fileName?: string): Promise<RagIndex | null>;
83
+ /**
84
+ * 检查索引是否匹配当前 scope(迭代/任务变更后需重建)
85
+ */
86
+ export declare function isRagIndexStale(index: RagIndex, currentScope: string): boolean;
87
+ /**
88
+ * 根据查询语句检索最相关的文档块
89
+ *
90
+ * 评分逻辑:
91
+ * - 标题关键词命中:+3 分/词
92
+ * - 内容关键词命中:+1 分/词
93
+ * - 摘要关键词命中:+2 分/词
94
+ * - 高级别标题(##)bonus:+0.5 分
95
+ * - 文件路径关键词命中:+1 分/词
96
+ */
97
+ export declare function retrieveRelevantChunks(index: RagIndex, options: RetrievalOptions): DocumentChunk[];
98
+ /**
99
+ * 将检索结果组装为 extraSpecs 格式(兼容现有 prompt-builder 接口)
100
+ */
101
+ export declare function assembleChunksForPrompt(chunks: DocumentChunk[], options?: {
102
+ maxCharsPerChunk?: number;
103
+ maxTotalChars?: number;
104
+ }): {
105
+ name: string;
106
+ path: string;
107
+ content: string;
108
+ }[];
109
+ /**
110
+ * 获取文件级摘要(用于快速了解文档全貌)
111
+ */
112
+ export declare function getFileSummaries(index: RagIndex): string;
113
+ /**
114
+ * 扫描任务目录下的所有参考文档,构建 RAG 索引
115
+ */
116
+ export declare function indexTaskDocuments(cwd: string, taskDir: string, iteration?: string, platform?: string, fileName?: string): Promise<RagIndex>;
117
+ /**
118
+ * 检查 RAG 索引是否新鲜(对比源文件 mtime)
119
+ * 返回: { fresh: boolean; staleFiles: string[] }
120
+ */
121
+ export declare function checkRagIndexFreshness(cwd: string, fileName?: string): Promise<{
122
+ fresh: boolean;
123
+ staleFiles: string[];
124
+ newFiles: string[];
125
+ }>;
126
+ /**
127
+ * 为任意目录构建 RAG 索引(通用版本,不限于任务目录)
128
+ * 扫描目录下所有 .md 文件,自动分块建索引
129
+ */
130
+ export declare function indexDirectoryDocuments(cwd: string, dirPath: string, scope: string, fileName?: string): Promise<RagIndex>;
131
+ /**
132
+ * 增量刷新 RAG 索引:只重建有变更的文件
133
+ */
134
+ export declare function refreshRagIndex(cwd: string, taskDir: string, iteration?: string, platform?: string, fileName?: string): Promise<RagIndex>;
135
+ /**
136
+ * 按 chunk 的行号范围精确读取源文件对应章节
137
+ *
138
+ * 用途:AI 拿到 chunk 的 startLine/endLine 后,用 Read 工具的
139
+ * offset/limit 只读目标章节,节省 80-95% Token
140
+ *
141
+ * @param chunk 带有 startLine/endLine 的 DocumentChunk
142
+ * @returns 精确读取的文本,若无行号则回退到 chunk.content
143
+ */
144
+ export declare function readChunkPrecise(chunk: DocumentChunk): Promise<string>;
145
+ /**
146
+ * 批量精确读取多个 chunk
147
+ */
148
+ export declare function readChunksPrecise(chunks: DocumentChunk[]): Promise<{
149
+ chunk: DocumentChunk;
150
+ content: string;
151
+ }[]>;
152
+ //# sourceMappingURL=rag-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-engine.d.ts","sourceRoot":"","sources":["../../src/core/rag-engine.ts"],"names":[],"mappings":"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"}