@trench-craft/sds 1.0.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 (276) hide show
  1. package/README.en.md +522 -0
  2. package/README.md +566 -0
  3. package/dist/bin/sds.d.ts +3 -0
  4. package/dist/bin/sds.d.ts.map +1 -0
  5. package/dist/bin/sds.js +50 -0
  6. package/dist/bin/sds.js.map +1 -0
  7. package/dist/src/__tests__/cli.test.d.ts +2 -0
  8. package/dist/src/__tests__/cli.test.d.ts.map +1 -0
  9. package/dist/src/__tests__/cli.test.js +37 -0
  10. package/dist/src/__tests__/cli.test.js.map +1 -0
  11. package/dist/src/__tests__/e2e.test.d.ts +5 -0
  12. package/dist/src/__tests__/e2e.test.d.ts.map +1 -0
  13. package/dist/src/__tests__/e2e.test.js +143 -0
  14. package/dist/src/__tests__/e2e.test.js.map +1 -0
  15. package/dist/src/__tests__/graph.test.d.ts +5 -0
  16. package/dist/src/__tests__/graph.test.d.ts.map +1 -0
  17. package/dist/src/__tests__/graph.test.js +423 -0
  18. package/dist/src/__tests__/graph.test.js.map +1 -0
  19. package/dist/src/__tests__/openspec.test.d.ts +5 -0
  20. package/dist/src/__tests__/openspec.test.d.ts.map +1 -0
  21. package/dist/src/__tests__/openspec.test.js +172 -0
  22. package/dist/src/__tests__/openspec.test.js.map +1 -0
  23. package/dist/src/commands/apply.d.ts +4 -0
  24. package/dist/src/commands/apply.d.ts.map +1 -0
  25. package/dist/src/commands/apply.js +14 -0
  26. package/dist/src/commands/apply.js.map +1 -0
  27. package/dist/src/commands/archive.d.ts +4 -0
  28. package/dist/src/commands/archive.d.ts.map +1 -0
  29. package/dist/src/commands/archive.js +20 -0
  30. package/dist/src/commands/archive.js.map +1 -0
  31. package/dist/src/commands/cache.d.ts +4 -0
  32. package/dist/src/commands/cache.d.ts.map +1 -0
  33. package/dist/src/commands/cache.js +31 -0
  34. package/dist/src/commands/cache.js.map +1 -0
  35. package/dist/src/commands/config.d.ts +4 -0
  36. package/dist/src/commands/config.d.ts.map +1 -0
  37. package/dist/src/commands/config.js +29 -0
  38. package/dist/src/commands/config.js.map +1 -0
  39. package/dist/src/commands/e2e.d.ts +4 -0
  40. package/dist/src/commands/e2e.d.ts.map +1 -0
  41. package/dist/src/commands/e2e.js +65 -0
  42. package/dist/src/commands/e2e.js.map +1 -0
  43. package/dist/src/commands/graph.d.ts +4 -0
  44. package/dist/src/commands/graph.d.ts.map +1 -0
  45. package/dist/src/commands/graph.js +783 -0
  46. package/dist/src/commands/graph.js.map +1 -0
  47. package/dist/src/commands/init.d.ts +4 -0
  48. package/dist/src/commands/init.d.ts.map +1 -0
  49. package/dist/src/commands/init.js +15 -0
  50. package/dist/src/commands/init.js.map +1 -0
  51. package/dist/src/commands/project.d.ts +4 -0
  52. package/dist/src/commands/project.d.ts.map +1 -0
  53. package/dist/src/commands/project.js +6 -0
  54. package/dist/src/commands/project.js.map +1 -0
  55. package/dist/src/commands/propose.d.ts +4 -0
  56. package/dist/src/commands/propose.d.ts.map +1 -0
  57. package/dist/src/commands/propose.js +26 -0
  58. package/dist/src/commands/propose.js.map +1 -0
  59. package/dist/src/commands/registry.d.ts +4 -0
  60. package/dist/src/commands/registry.d.ts.map +1 -0
  61. package/dist/src/commands/registry.js +6 -0
  62. package/dist/src/commands/registry.js.map +1 -0
  63. package/dist/src/commands/skills-install.d.ts +4 -0
  64. package/dist/src/commands/skills-install.d.ts.map +1 -0
  65. package/dist/src/commands/skills-install.js +158 -0
  66. package/dist/src/commands/skills-install.js.map +1 -0
  67. package/dist/src/commands/skills.d.ts +4 -0
  68. package/dist/src/commands/skills.d.ts.map +1 -0
  69. package/dist/src/commands/skills.js +19 -0
  70. package/dist/src/commands/skills.js.map +1 -0
  71. package/dist/src/commands/verify.d.ts +4 -0
  72. package/dist/src/commands/verify.d.ts.map +1 -0
  73. package/dist/src/commands/verify.js +31 -0
  74. package/dist/src/commands/verify.js.map +1 -0
  75. package/dist/src/core/engine.d.ts +33 -0
  76. package/dist/src/core/engine.d.ts.map +1 -0
  77. package/dist/src/core/engine.js +87 -0
  78. package/dist/src/core/engine.js.map +1 -0
  79. package/dist/src/core/engine.test.d.ts +2 -0
  80. package/dist/src/core/engine.test.d.ts.map +1 -0
  81. package/dist/src/core/engine.test.js +13 -0
  82. package/dist/src/core/engine.test.js.map +1 -0
  83. package/dist/src/core/session-state.d.ts +18 -0
  84. package/dist/src/core/session-state.d.ts.map +1 -0
  85. package/dist/src/core/session-state.js +55 -0
  86. package/dist/src/core/session-state.js.map +1 -0
  87. package/dist/src/core/session-state.test.d.ts +2 -0
  88. package/dist/src/core/session-state.test.d.ts.map +1 -0
  89. package/dist/src/core/session-state.test.js +90 -0
  90. package/dist/src/core/session-state.test.js.map +1 -0
  91. package/dist/src/core/subagent-timeout.d.ts +18 -0
  92. package/dist/src/core/subagent-timeout.d.ts.map +1 -0
  93. package/dist/src/core/subagent-timeout.js +61 -0
  94. package/dist/src/core/subagent-timeout.js.map +1 -0
  95. package/dist/src/core/subagent-timeout.test.d.ts +2 -0
  96. package/dist/src/core/subagent-timeout.test.d.ts.map +1 -0
  97. package/dist/src/core/subagent-timeout.test.js +57 -0
  98. package/dist/src/core/subagent-timeout.test.js.map +1 -0
  99. package/dist/src/core/task-sync.d.ts +19 -0
  100. package/dist/src/core/task-sync.d.ts.map +1 -0
  101. package/dist/src/core/task-sync.js +62 -0
  102. package/dist/src/core/task-sync.js.map +1 -0
  103. package/dist/src/core/task-sync.test.d.ts +2 -0
  104. package/dist/src/core/task-sync.test.d.ts.map +1 -0
  105. package/dist/src/core/task-sync.test.js +84 -0
  106. package/dist/src/core/task-sync.test.js.map +1 -0
  107. package/dist/src/graph/advanced-performance.d.ts +137 -0
  108. package/dist/src/graph/advanced-performance.d.ts.map +1 -0
  109. package/dist/src/graph/advanced-performance.js +375 -0
  110. package/dist/src/graph/advanced-performance.js.map +1 -0
  111. package/dist/src/graph/database.d.ts +79 -0
  112. package/dist/src/graph/database.d.ts.map +1 -0
  113. package/dist/src/graph/database.js +305 -0
  114. package/dist/src/graph/database.js.map +1 -0
  115. package/dist/src/graph/engine.d.ts +43 -0
  116. package/dist/src/graph/engine.d.ts.map +1 -0
  117. package/dist/src/graph/engine.js +334 -0
  118. package/dist/src/graph/engine.js.map +1 -0
  119. package/dist/src/graph/exporter.d.ts +56 -0
  120. package/dist/src/graph/exporter.d.ts.map +1 -0
  121. package/dist/src/graph/exporter.js +273 -0
  122. package/dist/src/graph/exporter.js.map +1 -0
  123. package/dist/src/graph/index.d.ts +21 -0
  124. package/dist/src/graph/index.d.ts.map +1 -0
  125. package/dist/src/graph/index.js +14 -0
  126. package/dist/src/graph/index.js.map +1 -0
  127. package/dist/src/graph/layouts.d.ts +77 -0
  128. package/dist/src/graph/layouts.d.ts.map +1 -0
  129. package/dist/src/graph/layouts.js +368 -0
  130. package/dist/src/graph/layouts.js.map +1 -0
  131. package/dist/src/graph/parser.d.ts +47 -0
  132. package/dist/src/graph/parser.d.ts.map +1 -0
  133. package/dist/src/graph/parser.js +228 -0
  134. package/dist/src/graph/parser.js.map +1 -0
  135. package/dist/src/graph/performance.d.ts +90 -0
  136. package/dist/src/graph/performance.d.ts.map +1 -0
  137. package/dist/src/graph/performance.js +275 -0
  138. package/dist/src/graph/performance.js.map +1 -0
  139. package/dist/src/graph/semantic.d.ts +151 -0
  140. package/dist/src/graph/semantic.d.ts.map +1 -0
  141. package/dist/src/graph/semantic.js +402 -0
  142. package/dist/src/graph/semantic.js.map +1 -0
  143. package/dist/src/graph/types.d.ts +114 -0
  144. package/dist/src/graph/types.d.ts.map +1 -0
  145. package/dist/src/graph/types.js +5 -0
  146. package/dist/src/graph/types.js.map +1 -0
  147. package/dist/src/graph/visualizer.d.ts +50 -0
  148. package/dist/src/graph/visualizer.d.ts.map +1 -0
  149. package/dist/src/graph/visualizer.js +869 -0
  150. package/dist/src/graph/visualizer.js.map +1 -0
  151. package/dist/src/openspec/apply.d.ts +16 -0
  152. package/dist/src/openspec/apply.d.ts.map +1 -0
  153. package/dist/src/openspec/apply.js +140 -0
  154. package/dist/src/openspec/apply.js.map +1 -0
  155. package/dist/src/openspec/archive.d.ts +3 -0
  156. package/dist/src/openspec/archive.d.ts.map +1 -0
  157. package/dist/src/openspec/archive.js +17 -0
  158. package/dist/src/openspec/archive.js.map +1 -0
  159. package/dist/src/openspec/e2e-generate.d.ts +39 -0
  160. package/dist/src/openspec/e2e-generate.d.ts.map +1 -0
  161. package/dist/src/openspec/e2e-generate.js +315 -0
  162. package/dist/src/openspec/e2e-generate.js.map +1 -0
  163. package/dist/src/openspec/e2e-runner.d.ts +32 -0
  164. package/dist/src/openspec/e2e-runner.d.ts.map +1 -0
  165. package/dist/src/openspec/e2e-runner.js +208 -0
  166. package/dist/src/openspec/e2e-runner.js.map +1 -0
  167. package/dist/src/openspec/explore.d.ts +3 -0
  168. package/dist/src/openspec/explore.d.ts.map +1 -0
  169. package/dist/src/openspec/explore.js +20 -0
  170. package/dist/src/openspec/explore.js.map +1 -0
  171. package/dist/src/openspec/propose.d.ts +8 -0
  172. package/dist/src/openspec/propose.d.ts.map +1 -0
  173. package/dist/src/openspec/propose.js +124 -0
  174. package/dist/src/openspec/propose.js.map +1 -0
  175. package/dist/src/openspec/verify.d.ts +13 -0
  176. package/dist/src/openspec/verify.d.ts.map +1 -0
  177. package/dist/src/openspec/verify.js +156 -0
  178. package/dist/src/openspec/verify.js.map +1 -0
  179. package/dist/src/platform/claudecode.d.ts +2 -0
  180. package/dist/src/platform/claudecode.d.ts.map +1 -0
  181. package/dist/src/platform/claudecode.js +7 -0
  182. package/dist/src/platform/claudecode.js.map +1 -0
  183. package/dist/src/platform/codex.d.ts +2 -0
  184. package/dist/src/platform/codex.d.ts.map +1 -0
  185. package/dist/src/platform/codex.js +7 -0
  186. package/dist/src/platform/codex.js.map +1 -0
  187. package/dist/src/platform/opencode.d.ts +2 -0
  188. package/dist/src/platform/opencode.d.ts.map +1 -0
  189. package/dist/src/platform/opencode.js +7 -0
  190. package/dist/src/platform/opencode.js.map +1 -0
  191. package/dist/src/platform/router.d.ts +13 -0
  192. package/dist/src/platform/router.d.ts.map +1 -0
  193. package/dist/src/platform/router.js +57 -0
  194. package/dist/src/platform/router.js.map +1 -0
  195. package/dist/src/skills/cache.d.ts +16 -0
  196. package/dist/src/skills/cache.d.ts.map +1 -0
  197. package/dist/src/skills/cache.js +53 -0
  198. package/dist/src/skills/cache.js.map +1 -0
  199. package/dist/src/skills/discovery.d.ts +12 -0
  200. package/dist/src/skills/discovery.d.ts.map +1 -0
  201. package/dist/src/skills/discovery.js +61 -0
  202. package/dist/src/skills/discovery.js.map +1 -0
  203. package/dist/src/skills/loader.d.ts +12 -0
  204. package/dist/src/skills/loader.d.ts.map +1 -0
  205. package/dist/src/skills/loader.js +69 -0
  206. package/dist/src/skills/loader.js.map +1 -0
  207. package/dist/src/skills/registry.d.ts +23 -0
  208. package/dist/src/skills/registry.d.ts.map +1 -0
  209. package/dist/src/skills/registry.js +68 -0
  210. package/dist/src/skills/registry.js.map +1 -0
  211. package/dist/src/utils/fs.d.ts +5 -0
  212. package/dist/src/utils/fs.d.ts.map +1 -0
  213. package/dist/src/utils/fs.js +23 -0
  214. package/dist/src/utils/fs.js.map +1 -0
  215. package/dist/src/utils/logger.d.ts +7 -0
  216. package/dist/src/utils/logger.d.ts.map +1 -0
  217. package/dist/src/utils/logger.js +8 -0
  218. package/dist/src/utils/logger.js.map +1 -0
  219. package/dist/src/utils/yaml.d.ts +3 -0
  220. package/dist/src/utils/yaml.d.ts.map +1 -0
  221. package/dist/src/utils/yaml.js +8 -0
  222. package/dist/src/utils/yaml.js.map +1 -0
  223. package/package.json +62 -0
  224. package/registry/skills-registry.yaml +218 -0
  225. package/skills/core/brainstorming/SKILL.md +259 -0
  226. package/skills/core/brainstorming/scripts/frame-template.html +214 -0
  227. package/skills/core/brainstorming/scripts/helper.js +88 -0
  228. package/skills/core/brainstorming/scripts/server.cjs +338 -0
  229. package/skills/core/brainstorming/scripts/start-server.sh +153 -0
  230. package/skills/core/brainstorming/scripts/stop-server.sh +55 -0
  231. package/skills/core/brainstorming/skill.yaml +12 -0
  232. package/skills/core/brainstorming/spec-document-reviewer-prompt.md +48 -0
  233. package/skills/core/brainstorming/visual-companion.md +286 -0
  234. package/skills/core/claude-code-core/SKILL.md +164 -0
  235. package/skills/core/claude-code-core/skill.yaml +14 -0
  236. package/skills/core/claude-code-prompt/SKILL.md +283 -0
  237. package/skills/core/claude-code-prompt/skill.yaml +14 -0
  238. package/skills/core/claude-code-subagent/SKILL.md +168 -0
  239. package/skills/core/claude-code-subagent/skill.yaml +14 -0
  240. package/skills/core/e2e-generate/SKILL.md +147 -0
  241. package/skills/core/e2e-generate/skill.yaml +12 -0
  242. package/skills/core/ecc-agents-md-router/SKILL.md +90 -0
  243. package/skills/core/ecc-agents-md-router/skill.yaml +12 -0
  244. package/skills/core/ecc-context-injector/SKILL.md +69 -0
  245. package/skills/core/ecc-context-injector/skill.yaml +12 -0
  246. package/skills/core/existing-code-caveman/SKILL.md +340 -0
  247. package/skills/core/existing-code-caveman/skill.yaml +12 -0
  248. package/skills/core/opsx-apply/SKILL.md +121 -0
  249. package/skills/core/opsx-apply/skill.yaml +12 -0
  250. package/skills/core/opsx-archive/SKILL.md +83 -0
  251. package/skills/core/opsx-archive/skill.yaml +12 -0
  252. package/skills/core/opsx-explore/SKILL.md +101 -0
  253. package/skills/core/opsx-explore/skill.yaml +12 -0
  254. package/skills/core/opsx-propose/SKILL.md +131 -0
  255. package/skills/core/opsx-propose/skill.yaml +16 -0
  256. package/skills/core/opsx-verify/SKILL.md +109 -0
  257. package/skills/core/opsx-verify/skill.yaml +12 -0
  258. package/skills/core/subagent-driven-development/SKILL.md +157 -0
  259. package/skills/core/subagent-driven-development/code-quality-reviewer-prompt.md +64 -0
  260. package/skills/core/subagent-driven-development/implementer-prompt.md +122 -0
  261. package/skills/core/subagent-driven-development/skill.yaml +12 -0
  262. package/skills/core/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  263. package/skills/core/writing-plans/SKILL.md +268 -0
  264. package/skills/core/writing-plans/plan-document-reviewer-prompt.md +63 -0
  265. package/skills/core/writing-plans/skill.yaml +12 -0
  266. package/skills/locale/chinese-code-review/SKILL.md +17 -0
  267. package/skills/locale/chinese-code-review/skill.yaml +16 -0
  268. package/skills/locale/chinese-commit-conventions/SKILL.md +17 -0
  269. package/skills/locale/chinese-commit-conventions/skill.yaml +16 -0
  270. package/skills/locale/chinese-documentation/SKILL.md +17 -0
  271. package/skills/locale/chinese-documentation/skill.yaml +16 -0
  272. package/skills/locale/chinese-git-workflow/SKILL.md +17 -0
  273. package/skills/locale/chinese-git-workflow/skill.yaml +16 -0
  274. package/templates/agents-md.md +42 -0
  275. package/templates/claude-md.md +44 -0
  276. package/templates/codex-md.md +49 -0
@@ -0,0 +1,151 @@
1
+ /**
2
+ * SemanticAnalyzer - 语义分析器
3
+ * 封装 Understand Anything LLM 流水线
4
+ */
5
+ import type { GraphDatabase } from './database.js';
6
+ import type { FileInfo } from './types.js';
7
+ export interface SemanticGraph {
8
+ version: string;
9
+ generatedAt: string;
10
+ model: string;
11
+ projectSummary: ProjectSummary;
12
+ files: Record<string, FileSemantics>;
13
+ modules: Record<string, ModuleSemantics>;
14
+ tours: Tour[];
15
+ domainMap: Record<string, string[]>;
16
+ }
17
+ export interface ProjectSummary {
18
+ description: string;
19
+ techStack: string[];
20
+ architecturePattern: string;
21
+ }
22
+ export interface FileSemantics {
23
+ semanticId: string;
24
+ summary: string;
25
+ responsibility: string;
26
+ inputs: string[];
27
+ outputs: string[];
28
+ keyAlgorithms: string[];
29
+ businessDomain: string;
30
+ dataFlow: {
31
+ upstream: string[];
32
+ downstream: string[];
33
+ sideEffects: string[];
34
+ };
35
+ }
36
+ export interface ModuleSemantics {
37
+ description: string;
38
+ files: string[];
39
+ publicApi: string[];
40
+ dependencies: string[];
41
+ }
42
+ export interface Tour {
43
+ name: string;
44
+ description: string;
45
+ steps: TourStep[];
46
+ }
47
+ export interface TourStep {
48
+ file: string;
49
+ focus: string;
50
+ explain: string;
51
+ }
52
+ export interface SamplingConfig {
53
+ maxFiles: number;
54
+ entryFilesWeight: number;
55
+ hubFilesWeight: number;
56
+ domainFilesWeight: number;
57
+ }
58
+ export interface EnhanceOptions {
59
+ files?: string[];
60
+ depth: 'lite' | 'standard' | 'deep';
61
+ model?: string;
62
+ budgetTokens: number;
63
+ dryRun: boolean;
64
+ }
65
+ export interface EnhanceResult {
66
+ status: 'completed' | 'partial' | 'failed';
67
+ filesAnalyzed: number;
68
+ tokensUsed: number;
69
+ durationMs: number;
70
+ outputPath: string;
71
+ errors: string[];
72
+ }
73
+ export declare class SemanticAnalyzer {
74
+ private db;
75
+ private projectDir;
76
+ private apiKey?;
77
+ private provider;
78
+ constructor(projectDir: string, db: GraphDatabase, options?: {
79
+ provider?: string;
80
+ apiKey?: string;
81
+ });
82
+ /**
83
+ * 从环境变量获取 API Key
84
+ */
85
+ private getApiKeyFromEnv;
86
+ /**
87
+ * 检查是否可用
88
+ */
89
+ isAvailable(): boolean;
90
+ /**
91
+ * 自动采样核心文件
92
+ */
93
+ sampleFiles(config: SamplingConfig): FileInfo[];
94
+ /**
95
+ * 映射数据库行到 FileInfo
96
+ */
97
+ private mapFileRow;
98
+ /**
99
+ * 预览采样结果(dry-run)
100
+ */
101
+ previewSampling(options: EnhanceOptions): {
102
+ files: FileInfo[];
103
+ estimatedTokens: number;
104
+ estimatedCost: number;
105
+ };
106
+ /**
107
+ * 获取每千 Token 成本
108
+ */
109
+ private getCostPer1kTokens;
110
+ /**
111
+ * 执行语义增强
112
+ */
113
+ enhance(options: EnhanceOptions): Promise<EnhanceResult>;
114
+ /**
115
+ * 执行 5 阶段流水线
116
+ */
117
+ private executePipeline;
118
+ /**
119
+ * 分析项目概览
120
+ */
121
+ private analyzeProject;
122
+ /**
123
+ * 分析单个文件
124
+ */
125
+ private analyzeFile;
126
+ /**
127
+ * 推断文件职责
128
+ */
129
+ private inferResponsibility;
130
+ /**
131
+ * 推断业务领域
132
+ */
133
+ private inferBusinessDomain;
134
+ /**
135
+ * 分析架构
136
+ */
137
+ private analyzeArchitecture;
138
+ /**
139
+ * 构建学习路径
140
+ */
141
+ private buildTours;
142
+ /**
143
+ * 构建领域映射
144
+ */
145
+ private buildDomainMap;
146
+ /**
147
+ * 获取模型名称
148
+ */
149
+ private getModelName;
150
+ }
151
+ //# sourceMappingURL=semantic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../../src/graph/semantic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,402 @@
1
+ /**
2
+ * SemanticAnalyzer - 语义分析器
3
+ * 封装 Understand Anything LLM 流水线
4
+ */
5
+ import { readFile, writeFile } from 'fs/promises';
6
+ import { resolve } from 'path';
7
+ export class SemanticAnalyzer {
8
+ db;
9
+ projectDir;
10
+ apiKey;
11
+ provider;
12
+ constructor(projectDir, db, options = {}) {
13
+ this.projectDir = projectDir;
14
+ this.db = db;
15
+ this.provider = options.provider || 'openai';
16
+ this.apiKey = options.apiKey || this.getApiKeyFromEnv();
17
+ }
18
+ /**
19
+ * 从环境变量获取 API Key
20
+ */
21
+ getApiKeyFromEnv() {
22
+ if (this.provider === 'openai') {
23
+ return process.env.OPENAI_API_KEY;
24
+ }
25
+ else if (this.provider === 'anthropic') {
26
+ return process.env.ANTHROPIC_API_KEY;
27
+ }
28
+ return undefined;
29
+ }
30
+ /**
31
+ * 检查是否可用
32
+ */
33
+ isAvailable() {
34
+ return !!this.apiKey;
35
+ }
36
+ /**
37
+ * 自动采样核心文件
38
+ */
39
+ sampleFiles(config) {
40
+ const allFiles = this.db.getAllFiles();
41
+ if (allFiles.length === 0) {
42
+ return [];
43
+ }
44
+ // 1. 入口文件(被引用最多、无上游依赖的模块)
45
+ const entryFiles = this.db.query(`
46
+ SELECT f.*, COUNT(cg.id) as ref_count
47
+ FROM files f
48
+ LEFT JOIN call_graph cg ON f.id = cg.callee_file_id
49
+ WHERE f.path LIKE '%main%'
50
+ OR f.path LIKE '%index%'
51
+ OR f.path LIKE '%app%'
52
+ GROUP BY f.id
53
+ ORDER BY ref_count DESC
54
+ LIMIT ?
55
+ `, [Math.ceil(config.maxFiles * 0.2)]);
56
+ // 2. 核心枢纽(高 out-degree 的模块)
57
+ const hubFiles = this.db.query(`
58
+ SELECT f.*, COUNT(cg.id) as out_degree
59
+ FROM files f
60
+ LEFT JOIN call_graph cg ON f.id = cg.caller_file_id
61
+ GROUP BY f.id
62
+ ORDER BY out_degree DESC
63
+ LIMIT ?
64
+ `, [Math.ceil(config.maxFiles * 0.3)]);
65
+ // 3. 业务领域代表(目录分布均匀)
66
+ const domainFiles = this.db.query(`
67
+ SELECT f.*
68
+ FROM files f
69
+ WHERE f.id IN (
70
+ SELECT MIN(f2.id)
71
+ FROM files f2
72
+ GROUP BY SUBSTR(f2.path, 1, INSTR(f2.path, '/') - 1)
73
+ )
74
+ LIMIT ?
75
+ `, [Math.ceil(config.maxFiles * 0.5)]);
76
+ // 合并去重
77
+ const fileMap = new Map();
78
+ for (const file of entryFiles) {
79
+ fileMap.set(file.id, this.mapFileRow(file));
80
+ }
81
+ for (const file of hubFiles) {
82
+ fileMap.set(file.id, this.mapFileRow(file));
83
+ }
84
+ for (const file of domainFiles) {
85
+ fileMap.set(file.id, this.mapFileRow(file));
86
+ }
87
+ return Array.from(fileMap.values()).slice(0, config.maxFiles);
88
+ }
89
+ /**
90
+ * 映射数据库行到 FileInfo
91
+ */
92
+ mapFileRow(row) {
93
+ return {
94
+ id: row.id,
95
+ path: row.path,
96
+ lang: row.lang,
97
+ lines: row.lines,
98
+ hash: row.hash,
99
+ lastModified: row.last_modified,
100
+ inDegree: row.in_degree,
101
+ outDegree: row.out_degree
102
+ };
103
+ }
104
+ /**
105
+ * 预览采样结果(dry-run)
106
+ */
107
+ previewSampling(options) {
108
+ let files;
109
+ if (options.files && options.files.length > 0) {
110
+ // 使用指定文件
111
+ files = options.files.map(path => this.db.getFile(path)).filter(Boolean);
112
+ }
113
+ else {
114
+ // 自动采样
115
+ files = this.sampleFiles({
116
+ maxFiles: 50,
117
+ entryFilesWeight: 0.2,
118
+ hubFilesWeight: 0.3,
119
+ domainFilesWeight: 0.5
120
+ });
121
+ }
122
+ // 估算 Token 消耗
123
+ const totalLines = files.reduce((sum, f) => sum + f.lines, 0);
124
+ const estimatedTokens = Math.ceil(totalLines * 2.5); // 每行约 2.5 tokens
125
+ // 估算成本(基于模型)
126
+ const costPer1kTokens = this.getCostPer1kTokens(options.depth);
127
+ const estimatedCost = (estimatedTokens / 1000) * costPer1kTokens;
128
+ return { files, estimatedTokens, estimatedCost };
129
+ }
130
+ /**
131
+ * 获取每千 Token 成本
132
+ */
133
+ getCostPer1kTokens(depth) {
134
+ const costs = {
135
+ 'lite': 0.001,
136
+ 'standard': 0.003,
137
+ 'deep': 0.01
138
+ };
139
+ return costs[depth] || 0.003;
140
+ }
141
+ /**
142
+ * 执行语义增强
143
+ */
144
+ async enhance(options) {
145
+ const startTime = Date.now();
146
+ const errors = [];
147
+ if (!this.isAvailable()) {
148
+ return {
149
+ status: 'failed',
150
+ filesAnalyzed: 0,
151
+ tokensUsed: 0,
152
+ durationMs: Date.now() - startTime,
153
+ outputPath: '',
154
+ errors: ['API Key not configured']
155
+ };
156
+ }
157
+ // 预览采样
158
+ const preview = this.previewSampling(options);
159
+ if (preview.estimatedTokens > options.budgetTokens) {
160
+ errors.push(`Estimated tokens (${preview.estimatedTokens}) exceeds budget (${options.budgetTokens})`);
161
+ return {
162
+ status: 'failed',
163
+ filesAnalyzed: 0,
164
+ tokensUsed: 0,
165
+ durationMs: Date.now() - startTime,
166
+ outputPath: '',
167
+ errors
168
+ };
169
+ }
170
+ if (options.dryRun) {
171
+ return {
172
+ status: 'completed',
173
+ filesAnalyzed: preview.files.length,
174
+ tokensUsed: 0,
175
+ durationMs: Date.now() - startTime,
176
+ outputPath: '',
177
+ errors: []
178
+ };
179
+ }
180
+ // 执行 5 阶段流水线
181
+ try {
182
+ const semanticGraph = await this.executePipeline(preview.files, options.depth);
183
+ // 写入语义图谱
184
+ const outputPath = resolve(this.projectDir, '.sds/semantic-graph.json');
185
+ await writeFile(outputPath, JSON.stringify(semanticGraph, null, 2), "utf-8");
186
+ return {
187
+ status: 'completed',
188
+ filesAnalyzed: preview.files.length,
189
+ tokensUsed: preview.estimatedTokens,
190
+ durationMs: Date.now() - startTime,
191
+ outputPath,
192
+ errors
193
+ };
194
+ }
195
+ catch (error) {
196
+ errors.push(error.message);
197
+ return {
198
+ status: 'failed',
199
+ filesAnalyzed: 0,
200
+ tokensUsed: 0,
201
+ durationMs: Date.now() - startTime,
202
+ outputPath: '',
203
+ errors
204
+ };
205
+ }
206
+ }
207
+ /**
208
+ * 执行 5 阶段流水线
209
+ */
210
+ async executePipeline(files, depth) {
211
+ // Phase 1: 项目扫描
212
+ const projectSummary = await this.analyzeProject(files);
213
+ // Phase 2: 文件级语义分析
214
+ const fileSemantics = {};
215
+ for (const file of files) {
216
+ try {
217
+ fileSemantics[file.path] = await this.analyzeFile(file);
218
+ }
219
+ catch (error) {
220
+ console.warn(`Failed to analyze ${file.path}: ${error}`);
221
+ }
222
+ }
223
+ // Phase 3: 架构级语义分析
224
+ const modules = await this.analyzeArchitecture(fileSemantics);
225
+ // Phase 4: 游览构建
226
+ const tours = await this.buildTours(fileSemantics, modules);
227
+ // Phase 5: 图谱校验与融合
228
+ const domainMap = this.buildDomainMap(fileSemantics);
229
+ return {
230
+ version: '1.0',
231
+ generatedAt: new Date().toISOString(),
232
+ model: this.getModelName(depth),
233
+ projectSummary,
234
+ files: fileSemantics,
235
+ modules,
236
+ tours,
237
+ domainMap
238
+ };
239
+ }
240
+ /**
241
+ * 分析项目概览
242
+ */
243
+ async analyzeProject(files) {
244
+ // 基于文件信息推断项目特征
245
+ const languages = new Set(files.map(f => f.lang));
246
+ const techStack = Array.from(languages);
247
+ // 检测架构模式
248
+ const hasControllers = files.some(f => f.path.includes('controller'));
249
+ const hasServices = files.some(f => f.path.includes('service'));
250
+ const hasRepositories = files.some(f => f.path.includes('repository'));
251
+ let architecturePattern = 'Unknown';
252
+ if (hasControllers && hasServices && hasRepositories) {
253
+ architecturePattern = 'MVC / Clean Architecture';
254
+ }
255
+ else if (hasServices) {
256
+ architecturePattern = 'Service Layer';
257
+ }
258
+ return {
259
+ description: `Project with ${files.length} files`,
260
+ techStack,
261
+ architecturePattern
262
+ };
263
+ }
264
+ /**
265
+ * 分析单个文件
266
+ */
267
+ async analyzeFile(file) {
268
+ // 读取文件内容
269
+ const filePath = resolve(this.projectDir, file.path);
270
+ let content = '';
271
+ try {
272
+ content = await readFile(filePath, 'utf-8');
273
+ }
274
+ catch {
275
+ content = '';
276
+ }
277
+ // 获取文件符号
278
+ const symbols = this.db.getFileSymbols(file.id);
279
+ const symbolNames = symbols.map(s => s.name);
280
+ // 基于文件路径和内容推断职责
281
+ const responsibility = this.inferResponsibility(file.path, content);
282
+ const businessDomain = this.inferBusinessDomain(file.path);
283
+ return {
284
+ semanticId: file.path.replace(/[^a-zA-Z0-9]/g, '-'),
285
+ summary: `${responsibility} module with ${symbols.length} symbols`,
286
+ responsibility,
287
+ inputs: symbolNames.filter(n => n.startsWith('get') || n.startsWith('find')),
288
+ outputs: symbolNames.filter(n => n.startsWith('create') || n.startsWith('update') || n.startsWith('delete')),
289
+ keyAlgorithms: [],
290
+ businessDomain,
291
+ dataFlow: {
292
+ upstream: [],
293
+ downstream: [],
294
+ sideEffects: []
295
+ }
296
+ };
297
+ }
298
+ /**
299
+ * 推断文件职责
300
+ */
301
+ inferResponsibility(path, content) {
302
+ if (path.includes('controller'))
303
+ return 'API Controller';
304
+ if (path.includes('service'))
305
+ return 'Business Service';
306
+ if (path.includes('repository'))
307
+ return 'Data Access';
308
+ if (path.includes('model') || path.includes('entity'))
309
+ return 'Data Model';
310
+ if (path.includes('middleware'))
311
+ return 'Middleware';
312
+ if (path.includes('util') || path.includes('helper'))
313
+ return 'Utility';
314
+ if (path.includes('config'))
315
+ return 'Configuration';
316
+ if (path.includes('test'))
317
+ return 'Test';
318
+ return 'Module';
319
+ }
320
+ /**
321
+ * 推断业务领域
322
+ */
323
+ inferBusinessDomain(path) {
324
+ const parts = path.split('/');
325
+ if (parts.length > 1) {
326
+ return parts[0]; // 使用第一级目录作为领域
327
+ }
328
+ return 'core';
329
+ }
330
+ /**
331
+ * 分析架构
332
+ */
333
+ async analyzeArchitecture(fileSemantics) {
334
+ const modules = {};
335
+ // 按目录分组
336
+ const dirGroups = {};
337
+ for (const path of Object.keys(fileSemantics)) {
338
+ const dir = path.substring(0, path.lastIndexOf('/'));
339
+ if (!dirGroups[dir]) {
340
+ dirGroups[dir] = [];
341
+ }
342
+ dirGroups[dir].push(path);
343
+ }
344
+ // 为每个目录创建模块
345
+ for (const [dir, files] of Object.entries(dirGroups)) {
346
+ const moduleName = dir.split('/').pop() || 'root';
347
+ modules[moduleName] = {
348
+ description: `Module containing ${files.length} files`,
349
+ files,
350
+ publicApi: [],
351
+ dependencies: []
352
+ };
353
+ }
354
+ return modules;
355
+ }
356
+ /**
357
+ * 构建学习路径
358
+ */
359
+ async buildTours(fileSemantics, modules) {
360
+ const tours = [];
361
+ // 新手入门路径
362
+ const entryFiles = Object.keys(fileSemantics).filter(f => f.includes('main') || f.includes('index') || f.includes('app'));
363
+ if (entryFiles.length > 0) {
364
+ tours.push({
365
+ name: '新手入门',
366
+ description: '从入口文件开始了解项目',
367
+ steps: entryFiles.slice(0, 3).map(file => ({
368
+ file,
369
+ focus: '入口点',
370
+ explain: fileSemantics[file]?.summary || '项目入口'
371
+ }))
372
+ });
373
+ }
374
+ return tours;
375
+ }
376
+ /**
377
+ * 构建领域映射
378
+ */
379
+ buildDomainMap(fileSemantics) {
380
+ const domainMap = {};
381
+ for (const [path, semantics] of Object.entries(fileSemantics)) {
382
+ const domain = semantics.businessDomain;
383
+ if (!domainMap[domain]) {
384
+ domainMap[domain] = [];
385
+ }
386
+ domainMap[domain].push(path);
387
+ }
388
+ return domainMap;
389
+ }
390
+ /**
391
+ * 获取模型名称
392
+ */
393
+ getModelName(depth) {
394
+ const models = {
395
+ 'lite': 'gpt-3.5-turbo',
396
+ 'standard': 'gpt-4o',
397
+ 'deep': 'claude-opus-4'
398
+ };
399
+ return models[depth] || 'gpt-4o';
400
+ }
401
+ }
402
+ //# sourceMappingURL=semantic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../../src/graph/semantic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Graph 模块类型定义
3
+ */
4
+ export interface FileInfo {
5
+ id?: number;
6
+ path: string;
7
+ lang: string;
8
+ lines: number;
9
+ hash: string;
10
+ lastModified: number;
11
+ inDegree: number;
12
+ outDegree: number;
13
+ }
14
+ export type SymbolType = 'function' | 'class' | 'interface' | 'type' | 'variable';
15
+ export interface SymbolInfo {
16
+ id?: number;
17
+ fileId: number;
18
+ name: string;
19
+ type: SymbolType;
20
+ lineStart: number;
21
+ lineEnd: number;
22
+ signature: string;
23
+ }
24
+ export type RelationType = 'call' | 'import' | 'extend' | 'implement';
25
+ export interface CallEdge {
26
+ id?: number;
27
+ callerFileId: number;
28
+ callerSymbolId: number;
29
+ calleeFileId: number;
30
+ calleeSymbolId: number;
31
+ relationType: RelationType;
32
+ lineNumber: number;
33
+ }
34
+ export interface ModuleInfo {
35
+ id?: number;
36
+ name: string;
37
+ path: string;
38
+ fileCount: number;
39
+ symbolCount: number;
40
+ entryPointFileId?: number;
41
+ }
42
+ export interface IndexStats {
43
+ filesIndexed: number;
44
+ functions: number;
45
+ classes: number;
46
+ interfaces: number;
47
+ types: number;
48
+ variables: number;
49
+ callEdges: number;
50
+ importEdges: number;
51
+ extendEdges: number;
52
+ implementEdges: number;
53
+ durationMs: number;
54
+ cacheHit: boolean;
55
+ }
56
+ export interface GraphConfig {
57
+ project: {
58
+ name: string;
59
+ lang: string;
60
+ root: string;
61
+ };
62
+ graph: {
63
+ dbPath: string;
64
+ semanticPath: string;
65
+ include: string[];
66
+ exclude: string[];
67
+ };
68
+ enhance: {
69
+ enabled: 'auto' | 'true' | 'false';
70
+ provider: string;
71
+ model: string;
72
+ depth: 'lite' | 'standard' | 'deep';
73
+ maxFiles: number;
74
+ budgetTokens: number;
75
+ };
76
+ cache: {
77
+ l1Ttl: number;
78
+ l2Path: string;
79
+ };
80
+ platform: {
81
+ target: 'claude-code' | 'opencode';
82
+ };
83
+ }
84
+ export interface QueryResult {
85
+ columns: string[];
86
+ rows: any[];
87
+ rowCount: number;
88
+ durationMs: number;
89
+ }
90
+ export interface DiffResult {
91
+ status: 'incremental_updated' | 'no_changes';
92
+ changedFiles: number;
93
+ reindexedNodes: number;
94
+ reindexedEdges: number;
95
+ semanticInvalidated: string[];
96
+ suggestion?: string;
97
+ }
98
+ export type ExportFormat = 'claude-md' | 'agents-md' | 'json';
99
+ export interface ExportOptions {
100
+ format: ExportFormat;
101
+ outputPath?: string;
102
+ }
103
+ export interface GraphStatus {
104
+ exists: boolean;
105
+ dbPath?: string;
106
+ lastUpdated?: string;
107
+ filesCount?: number;
108
+ symbolsCount?: number;
109
+ edgesCount?: number;
110
+ coveragePercent?: number;
111
+ semanticEnabled?: boolean;
112
+ semanticLastUpdated?: string;
113
+ }
114
+ //# sourceMappingURL=types.d.ts.map