spec-gen-cli 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 (303) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1078 -0
  3. package/dist/api/analyze.d.ts +17 -0
  4. package/dist/api/analyze.d.ts.map +1 -0
  5. package/dist/api/analyze.js +109 -0
  6. package/dist/api/analyze.js.map +1 -0
  7. package/dist/api/drift.d.ts +21 -0
  8. package/dist/api/drift.d.ts.map +1 -0
  9. package/dist/api/drift.js +145 -0
  10. package/dist/api/drift.js.map +1 -0
  11. package/dist/api/generate.d.ts +18 -0
  12. package/dist/api/generate.d.ts.map +1 -0
  13. package/dist/api/generate.js +251 -0
  14. package/dist/api/generate.js.map +1 -0
  15. package/dist/api/index.d.ts +39 -0
  16. package/dist/api/index.d.ts.map +1 -0
  17. package/dist/api/index.js +32 -0
  18. package/dist/api/index.js.map +1 -0
  19. package/dist/api/init.d.ts +18 -0
  20. package/dist/api/init.d.ts.map +1 -0
  21. package/dist/api/init.js +82 -0
  22. package/dist/api/init.js.map +1 -0
  23. package/dist/api/run.d.ts +19 -0
  24. package/dist/api/run.d.ts.map +1 -0
  25. package/dist/api/run.js +291 -0
  26. package/dist/api/run.js.map +1 -0
  27. package/dist/api/specs.d.ts +49 -0
  28. package/dist/api/specs.d.ts.map +1 -0
  29. package/dist/api/specs.js +136 -0
  30. package/dist/api/specs.js.map +1 -0
  31. package/dist/api/types.d.ts +176 -0
  32. package/dist/api/types.d.ts.map +1 -0
  33. package/dist/api/types.js +9 -0
  34. package/dist/api/types.js.map +1 -0
  35. package/dist/api/verify.d.ts +20 -0
  36. package/dist/api/verify.d.ts.map +1 -0
  37. package/dist/api/verify.js +117 -0
  38. package/dist/api/verify.js.map +1 -0
  39. package/dist/cli/commands/analyze.d.ts +27 -0
  40. package/dist/cli/commands/analyze.d.ts.map +1 -0
  41. package/dist/cli/commands/analyze.js +485 -0
  42. package/dist/cli/commands/analyze.js.map +1 -0
  43. package/dist/cli/commands/drift.d.ts +9 -0
  44. package/dist/cli/commands/drift.d.ts.map +1 -0
  45. package/dist/cli/commands/drift.js +540 -0
  46. package/dist/cli/commands/drift.js.map +1 -0
  47. package/dist/cli/commands/generate.d.ts +9 -0
  48. package/dist/cli/commands/generate.d.ts.map +1 -0
  49. package/dist/cli/commands/generate.js +633 -0
  50. package/dist/cli/commands/generate.js.map +1 -0
  51. package/dist/cli/commands/init.d.ts +9 -0
  52. package/dist/cli/commands/init.d.ts.map +1 -0
  53. package/dist/cli/commands/init.js +171 -0
  54. package/dist/cli/commands/init.js.map +1 -0
  55. package/dist/cli/commands/mcp.d.ts +638 -0
  56. package/dist/cli/commands/mcp.d.ts.map +1 -0
  57. package/dist/cli/commands/mcp.js +574 -0
  58. package/dist/cli/commands/mcp.js.map +1 -0
  59. package/dist/cli/commands/run.d.ts +24 -0
  60. package/dist/cli/commands/run.d.ts.map +1 -0
  61. package/dist/cli/commands/run.js +546 -0
  62. package/dist/cli/commands/run.js.map +1 -0
  63. package/dist/cli/commands/verify.d.ts +9 -0
  64. package/dist/cli/commands/verify.d.ts.map +1 -0
  65. package/dist/cli/commands/verify.js +417 -0
  66. package/dist/cli/commands/verify.js.map +1 -0
  67. package/dist/cli/commands/view.d.ts +9 -0
  68. package/dist/cli/commands/view.d.ts.map +1 -0
  69. package/dist/cli/commands/view.js +511 -0
  70. package/dist/cli/commands/view.js.map +1 -0
  71. package/dist/cli/index.d.ts +9 -0
  72. package/dist/cli/index.d.ts.map +1 -0
  73. package/dist/cli/index.js +83 -0
  74. package/dist/cli/index.js.map +1 -0
  75. package/dist/core/analyzer/architecture-writer.d.ts +67 -0
  76. package/dist/core/analyzer/architecture-writer.d.ts.map +1 -0
  77. package/dist/core/analyzer/architecture-writer.js +209 -0
  78. package/dist/core/analyzer/architecture-writer.js.map +1 -0
  79. package/dist/core/analyzer/artifact-generator.d.ts +222 -0
  80. package/dist/core/analyzer/artifact-generator.d.ts.map +1 -0
  81. package/dist/core/analyzer/artifact-generator.js +726 -0
  82. package/dist/core/analyzer/artifact-generator.js.map +1 -0
  83. package/dist/core/analyzer/call-graph.d.ts +83 -0
  84. package/dist/core/analyzer/call-graph.d.ts.map +1 -0
  85. package/dist/core/analyzer/call-graph.js +827 -0
  86. package/dist/core/analyzer/call-graph.js.map +1 -0
  87. package/dist/core/analyzer/code-shaper.d.ts +33 -0
  88. package/dist/core/analyzer/code-shaper.d.ts.map +1 -0
  89. package/dist/core/analyzer/code-shaper.js +149 -0
  90. package/dist/core/analyzer/code-shaper.js.map +1 -0
  91. package/dist/core/analyzer/dependency-graph.d.ts +179 -0
  92. package/dist/core/analyzer/dependency-graph.d.ts.map +1 -0
  93. package/dist/core/analyzer/dependency-graph.js +574 -0
  94. package/dist/core/analyzer/dependency-graph.js.map +1 -0
  95. package/dist/core/analyzer/duplicate-detector.d.ts +52 -0
  96. package/dist/core/analyzer/duplicate-detector.d.ts.map +1 -0
  97. package/dist/core/analyzer/duplicate-detector.js +279 -0
  98. package/dist/core/analyzer/duplicate-detector.js.map +1 -0
  99. package/dist/core/analyzer/embedding-service.d.ts +50 -0
  100. package/dist/core/analyzer/embedding-service.d.ts.map +1 -0
  101. package/dist/core/analyzer/embedding-service.js +104 -0
  102. package/dist/core/analyzer/embedding-service.js.map +1 -0
  103. package/dist/core/analyzer/file-walker.d.ts +78 -0
  104. package/dist/core/analyzer/file-walker.d.ts.map +1 -0
  105. package/dist/core/analyzer/file-walker.js +531 -0
  106. package/dist/core/analyzer/file-walker.js.map +1 -0
  107. package/dist/core/analyzer/import-parser.d.ts +91 -0
  108. package/dist/core/analyzer/import-parser.d.ts.map +1 -0
  109. package/dist/core/analyzer/import-parser.js +720 -0
  110. package/dist/core/analyzer/import-parser.js.map +1 -0
  111. package/dist/core/analyzer/index.d.ts +10 -0
  112. package/dist/core/analyzer/index.d.ts.map +1 -0
  113. package/dist/core/analyzer/index.js +10 -0
  114. package/dist/core/analyzer/index.js.map +1 -0
  115. package/dist/core/analyzer/refactor-analyzer.d.ts +80 -0
  116. package/dist/core/analyzer/refactor-analyzer.d.ts.map +1 -0
  117. package/dist/core/analyzer/refactor-analyzer.js +339 -0
  118. package/dist/core/analyzer/refactor-analyzer.js.map +1 -0
  119. package/dist/core/analyzer/repository-mapper.d.ts +150 -0
  120. package/dist/core/analyzer/repository-mapper.d.ts.map +1 -0
  121. package/dist/core/analyzer/repository-mapper.js +731 -0
  122. package/dist/core/analyzer/repository-mapper.js.map +1 -0
  123. package/dist/core/analyzer/signature-extractor.d.ts +31 -0
  124. package/dist/core/analyzer/signature-extractor.d.ts.map +1 -0
  125. package/dist/core/analyzer/signature-extractor.js +387 -0
  126. package/dist/core/analyzer/signature-extractor.js.map +1 -0
  127. package/dist/core/analyzer/significance-scorer.d.ts +79 -0
  128. package/dist/core/analyzer/significance-scorer.d.ts.map +1 -0
  129. package/dist/core/analyzer/significance-scorer.js +407 -0
  130. package/dist/core/analyzer/significance-scorer.js.map +1 -0
  131. package/dist/core/analyzer/subgraph-extractor.d.ts +43 -0
  132. package/dist/core/analyzer/subgraph-extractor.d.ts.map +1 -0
  133. package/dist/core/analyzer/subgraph-extractor.js +129 -0
  134. package/dist/core/analyzer/subgraph-extractor.js.map +1 -0
  135. package/dist/core/analyzer/vector-index.d.ts +63 -0
  136. package/dist/core/analyzer/vector-index.d.ts.map +1 -0
  137. package/dist/core/analyzer/vector-index.js +169 -0
  138. package/dist/core/analyzer/vector-index.js.map +1 -0
  139. package/dist/core/drift/drift-detector.d.ts +102 -0
  140. package/dist/core/drift/drift-detector.d.ts.map +1 -0
  141. package/dist/core/drift/drift-detector.js +597 -0
  142. package/dist/core/drift/drift-detector.js.map +1 -0
  143. package/dist/core/drift/git-diff.d.ts +55 -0
  144. package/dist/core/drift/git-diff.d.ts.map +1 -0
  145. package/dist/core/drift/git-diff.js +356 -0
  146. package/dist/core/drift/git-diff.js.map +1 -0
  147. package/dist/core/drift/index.d.ts +12 -0
  148. package/dist/core/drift/index.d.ts.map +1 -0
  149. package/dist/core/drift/index.js +9 -0
  150. package/dist/core/drift/index.js.map +1 -0
  151. package/dist/core/drift/spec-mapper.d.ts +73 -0
  152. package/dist/core/drift/spec-mapper.d.ts.map +1 -0
  153. package/dist/core/drift/spec-mapper.js +353 -0
  154. package/dist/core/drift/spec-mapper.js.map +1 -0
  155. package/dist/core/generator/adr-generator.d.ts +32 -0
  156. package/dist/core/generator/adr-generator.d.ts.map +1 -0
  157. package/dist/core/generator/adr-generator.js +192 -0
  158. package/dist/core/generator/adr-generator.js.map +1 -0
  159. package/dist/core/generator/index.d.ts +9 -0
  160. package/dist/core/generator/index.d.ts.map +1 -0
  161. package/dist/core/generator/index.js +12 -0
  162. package/dist/core/generator/index.js.map +1 -0
  163. package/dist/core/generator/mapping-generator.d.ts +54 -0
  164. package/dist/core/generator/mapping-generator.d.ts.map +1 -0
  165. package/dist/core/generator/mapping-generator.js +239 -0
  166. package/dist/core/generator/mapping-generator.js.map +1 -0
  167. package/dist/core/generator/openspec-compat.d.ts +160 -0
  168. package/dist/core/generator/openspec-compat.d.ts.map +1 -0
  169. package/dist/core/generator/openspec-compat.js +523 -0
  170. package/dist/core/generator/openspec-compat.js.map +1 -0
  171. package/dist/core/generator/openspec-format-generator.d.ts +111 -0
  172. package/dist/core/generator/openspec-format-generator.d.ts.map +1 -0
  173. package/dist/core/generator/openspec-format-generator.js +817 -0
  174. package/dist/core/generator/openspec-format-generator.js.map +1 -0
  175. package/dist/core/generator/openspec-writer.d.ts +131 -0
  176. package/dist/core/generator/openspec-writer.d.ts.map +1 -0
  177. package/dist/core/generator/openspec-writer.js +379 -0
  178. package/dist/core/generator/openspec-writer.js.map +1 -0
  179. package/dist/core/generator/prompts.d.ts +35 -0
  180. package/dist/core/generator/prompts.d.ts.map +1 -0
  181. package/dist/core/generator/prompts.js +212 -0
  182. package/dist/core/generator/prompts.js.map +1 -0
  183. package/dist/core/generator/spec-pipeline.d.ts +94 -0
  184. package/dist/core/generator/spec-pipeline.d.ts.map +1 -0
  185. package/dist/core/generator/spec-pipeline.js +474 -0
  186. package/dist/core/generator/spec-pipeline.js.map +1 -0
  187. package/dist/core/generator/stages/stage1-survey.d.ts +19 -0
  188. package/dist/core/generator/stages/stage1-survey.d.ts.map +1 -0
  189. package/dist/core/generator/stages/stage1-survey.js +105 -0
  190. package/dist/core/generator/stages/stage1-survey.js.map +1 -0
  191. package/dist/core/generator/stages/stage2-entities.d.ts +11 -0
  192. package/dist/core/generator/stages/stage2-entities.d.ts.map +1 -0
  193. package/dist/core/generator/stages/stage2-entities.js +67 -0
  194. package/dist/core/generator/stages/stage2-entities.js.map +1 -0
  195. package/dist/core/generator/stages/stage3-services.d.ts +11 -0
  196. package/dist/core/generator/stages/stage3-services.d.ts.map +1 -0
  197. package/dist/core/generator/stages/stage3-services.js +75 -0
  198. package/dist/core/generator/stages/stage3-services.js.map +1 -0
  199. package/dist/core/generator/stages/stage4-api.d.ts +11 -0
  200. package/dist/core/generator/stages/stage4-api.d.ts.map +1 -0
  201. package/dist/core/generator/stages/stage4-api.js +65 -0
  202. package/dist/core/generator/stages/stage4-api.js.map +1 -0
  203. package/dist/core/generator/stages/stage5-architecture.d.ts +10 -0
  204. package/dist/core/generator/stages/stage5-architecture.d.ts.map +1 -0
  205. package/dist/core/generator/stages/stage5-architecture.js +62 -0
  206. package/dist/core/generator/stages/stage5-architecture.js.map +1 -0
  207. package/dist/core/generator/stages/stage6-adr.d.ts +8 -0
  208. package/dist/core/generator/stages/stage6-adr.d.ts.map +1 -0
  209. package/dist/core/generator/stages/stage6-adr.js +41 -0
  210. package/dist/core/generator/stages/stage6-adr.js.map +1 -0
  211. package/dist/core/services/chat-agent.d.ts +45 -0
  212. package/dist/core/services/chat-agent.d.ts.map +1 -0
  213. package/dist/core/services/chat-agent.js +310 -0
  214. package/dist/core/services/chat-agent.js.map +1 -0
  215. package/dist/core/services/chat-tools.d.ts +32 -0
  216. package/dist/core/services/chat-tools.d.ts.map +1 -0
  217. package/dist/core/services/chat-tools.js +270 -0
  218. package/dist/core/services/chat-tools.js.map +1 -0
  219. package/dist/core/services/config-manager.d.ts +61 -0
  220. package/dist/core/services/config-manager.d.ts.map +1 -0
  221. package/dist/core/services/config-manager.js +143 -0
  222. package/dist/core/services/config-manager.js.map +1 -0
  223. package/dist/core/services/gitignore-manager.d.ts +29 -0
  224. package/dist/core/services/gitignore-manager.d.ts.map +1 -0
  225. package/dist/core/services/gitignore-manager.js +106 -0
  226. package/dist/core/services/gitignore-manager.js.map +1 -0
  227. package/dist/core/services/index.d.ts +8 -0
  228. package/dist/core/services/index.d.ts.map +1 -0
  229. package/dist/core/services/index.js +8 -0
  230. package/dist/core/services/index.js.map +1 -0
  231. package/dist/core/services/llm-service.d.ts +336 -0
  232. package/dist/core/services/llm-service.d.ts.map +1 -0
  233. package/dist/core/services/llm-service.js +1155 -0
  234. package/dist/core/services/llm-service.js.map +1 -0
  235. package/dist/core/services/mcp-handlers/analysis.d.ts +42 -0
  236. package/dist/core/services/mcp-handlers/analysis.d.ts.map +1 -0
  237. package/dist/core/services/mcp-handlers/analysis.js +300 -0
  238. package/dist/core/services/mcp-handlers/analysis.js.map +1 -0
  239. package/dist/core/services/mcp-handlers/graph.d.ts +65 -0
  240. package/dist/core/services/mcp-handlers/graph.d.ts.map +1 -0
  241. package/dist/core/services/mcp-handlers/graph.js +509 -0
  242. package/dist/core/services/mcp-handlers/graph.js.map +1 -0
  243. package/dist/core/services/mcp-handlers/semantic.d.ts +38 -0
  244. package/dist/core/services/mcp-handlers/semantic.d.ts.map +1 -0
  245. package/dist/core/services/mcp-handlers/semantic.js +172 -0
  246. package/dist/core/services/mcp-handlers/semantic.js.map +1 -0
  247. package/dist/core/services/mcp-handlers/utils.d.ts +21 -0
  248. package/dist/core/services/mcp-handlers/utils.d.ts.map +1 -0
  249. package/dist/core/services/mcp-handlers/utils.js +62 -0
  250. package/dist/core/services/mcp-handlers/utils.js.map +1 -0
  251. package/dist/core/services/project-detector.d.ts +32 -0
  252. package/dist/core/services/project-detector.d.ts.map +1 -0
  253. package/dist/core/services/project-detector.js +111 -0
  254. package/dist/core/services/project-detector.js.map +1 -0
  255. package/dist/core/verifier/index.d.ts +5 -0
  256. package/dist/core/verifier/index.d.ts.map +1 -0
  257. package/dist/core/verifier/index.js +5 -0
  258. package/dist/core/verifier/index.js.map +1 -0
  259. package/dist/core/verifier/verification-engine.d.ts +226 -0
  260. package/dist/core/verifier/verification-engine.d.ts.map +1 -0
  261. package/dist/core/verifier/verification-engine.js +681 -0
  262. package/dist/core/verifier/verification-engine.js.map +1 -0
  263. package/dist/types/index.d.ts +252 -0
  264. package/dist/types/index.d.ts.map +1 -0
  265. package/dist/types/index.js +5 -0
  266. package/dist/types/index.js.map +1 -0
  267. package/dist/types/pipeline.d.ts +148 -0
  268. package/dist/types/pipeline.d.ts.map +1 -0
  269. package/dist/types/pipeline.js +5 -0
  270. package/dist/types/pipeline.js.map +1 -0
  271. package/dist/utils/errors.d.ts +51 -0
  272. package/dist/utils/errors.d.ts.map +1 -0
  273. package/dist/utils/errors.js +128 -0
  274. package/dist/utils/errors.js.map +1 -0
  275. package/dist/utils/logger.d.ts +149 -0
  276. package/dist/utils/logger.d.ts.map +1 -0
  277. package/dist/utils/logger.js +331 -0
  278. package/dist/utils/logger.js.map +1 -0
  279. package/dist/utils/progress.d.ts +142 -0
  280. package/dist/utils/progress.d.ts.map +1 -0
  281. package/dist/utils/progress.js +280 -0
  282. package/dist/utils/progress.js.map +1 -0
  283. package/dist/utils/prompts.d.ts +53 -0
  284. package/dist/utils/prompts.d.ts.map +1 -0
  285. package/dist/utils/prompts.js +199 -0
  286. package/dist/utils/prompts.js.map +1 -0
  287. package/dist/utils/shutdown.d.ts +89 -0
  288. package/dist/utils/shutdown.d.ts.map +1 -0
  289. package/dist/utils/shutdown.js +237 -0
  290. package/dist/utils/shutdown.js.map +1 -0
  291. package/package.json +114 -0
  292. package/src/viewer/InteractiveGraphViewer.jsx +1486 -0
  293. package/src/viewer/app/index.html +17 -0
  294. package/src/viewer/app/main.jsx +13 -0
  295. package/src/viewer/components/ArchitectureView.jsx +177 -0
  296. package/src/viewer/components/ChatPanel.jsx +448 -0
  297. package/src/viewer/components/ClusterGraph.jsx +441 -0
  298. package/src/viewer/components/FilterBar.jsx +179 -0
  299. package/src/viewer/components/FlatGraph.jsx +275 -0
  300. package/src/viewer/components/MicroComponents.jsx +83 -0
  301. package/src/viewer/hooks/usePanZoom.js +79 -0
  302. package/src/viewer/utils/constants.js +47 -0
  303. package/src/viewer/utils/graph-helpers.js +291 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,mDAAmD;AACnD,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACxC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,eAAe,CAAC;QACd,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK;QAC1B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK;QAC9B,OAAO,EAAE,IAAI,CAAC,KAAK,KAAK,KAAK;QAC7B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK;KAC9D,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CACV,uEAAuE;IACrE,4EAA4E;IAC5E,iEAAiE,CACpE;KACA,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,aAAa,EAAE,8BAA8B,EAAE,KAAK,CAAC;KAC5D,MAAM,CAAC,eAAe,EAAE,wBAAwB,EAAE,KAAK,CAAC;KACxD,MAAM,CAAC,YAAY,EAAE,kDAAkD,CAAC;KACxE,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,uBAAuB,CAAC;KACzE,MAAM,CACL,kBAAkB,EAClB,0EAA0E,CAC3E;KACA,MAAM,CAAC,YAAY,EAAE,uEAAuE,CAAC;KAC7F,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BH,CACE,CAAC;AAEJ,uBAAuB;AACvB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Architecture Writer
3
+ *
4
+ * Shared logic for building a high-level architecture overview from cached
5
+ * static analysis artifacts (dependency-graph.json + llm-context.json).
6
+ *
7
+ * Used by:
8
+ * - MCP tool `get_architecture_overview` (mcp.ts)
9
+ * - `spec-gen analyze` — writes ARCHITECTURE.md to the project root
10
+ */
11
+ import type { DependencyGraphResult } from './dependency-graph.js';
12
+ import type { LLMContext } from './artifact-generator.js';
13
+ export interface ClusterSummary {
14
+ id: string;
15
+ name: string;
16
+ fileCount: number;
17
+ role: string;
18
+ entryPointCount: number;
19
+ hubCount: number;
20
+ dependsOn: string[];
21
+ keyFiles: string[];
22
+ }
23
+ export interface ArchitectureOverview {
24
+ generatedAt: string;
25
+ summary: {
26
+ totalFiles: number;
27
+ totalClusters: number;
28
+ totalEdges: number;
29
+ cycles: number;
30
+ layerViolations: number;
31
+ };
32
+ clusters: ClusterSummary[];
33
+ globalEntryPoints: Array<{
34
+ name: string;
35
+ file: string;
36
+ language: string;
37
+ }>;
38
+ criticalHubs: Array<{
39
+ name: string;
40
+ file: string;
41
+ fanIn: number;
42
+ fanOut: number;
43
+ }>;
44
+ }
45
+ /**
46
+ * Infer a module cluster's architectural role from aggregate metrics.
47
+ */
48
+ export declare function inferClusterRole(entryCount: number, hubCount: number, fileCount: number): string;
49
+ /**
50
+ * Build an ArchitectureOverview from pre-loaded dependency graph and LLM context.
51
+ * Both can be null if one artifact is missing; at least one must be non-null.
52
+ *
53
+ * @param depGraph Parsed dependency-graph.json (or null)
54
+ * @param ctx Parsed llm-context.json (or null)
55
+ * @param absDir Absolute project root path — used to normalize cluster file paths
56
+ */
57
+ export declare function buildArchitectureOverview(depGraph: DependencyGraphResult | null, ctx: LLMContext | null, absDir: string): ArchitectureOverview;
58
+ /**
59
+ * Render an ArchitectureOverview as a Markdown document (ARCHITECTURE.md).
60
+ */
61
+ export declare function renderArchitectureMarkdown(overview: ArchitectureOverview): string;
62
+ /**
63
+ * Write ARCHITECTURE.md to the project root.
64
+ * Returns the path written.
65
+ */
66
+ export declare function writeArchitectureMd(rootPath: string, overview: ArchitectureOverview): Promise<string>;
67
+ //# sourceMappingURL=architecture-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architecture-writer.d.ts","sourceRoot":"","sources":["../../../src/core/analyzer/architecture-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAM1D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,iBAAiB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3E,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpF;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CAMR;AAMD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,EACtC,GAAG,EAAE,UAAU,GAAG,IAAI,EACtB,MAAM,EAAE,MAAM,GACb,oBAAoB,CA4EtB;AAcD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAmFjF;AAMD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAIjB"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Architecture Writer
3
+ *
4
+ * Shared logic for building a high-level architecture overview from cached
5
+ * static analysis artifacts (dependency-graph.json + llm-context.json).
6
+ *
7
+ * Used by:
8
+ * - MCP tool `get_architecture_overview` (mcp.ts)
9
+ * - `spec-gen analyze` — writes ARCHITECTURE.md to the project root
10
+ */
11
+ import { writeFile } from 'node:fs/promises';
12
+ import { join } from 'node:path';
13
+ // ============================================================================
14
+ // HELPERS
15
+ // ============================================================================
16
+ /**
17
+ * Infer a module cluster's architectural role from aggregate metrics.
18
+ */
19
+ export function inferClusterRole(entryCount, hubCount, fileCount) {
20
+ if (entryCount > fileCount * 0.5)
21
+ return 'entry_layer'; // most files are entry points
22
+ if (hubCount > 0 && entryCount > 0)
23
+ return 'orchestrator'; // both hubs and entries
24
+ if (hubCount > 0)
25
+ return 'core_utilities'; // heavily depended-on helpers
26
+ if (entryCount > 0)
27
+ return 'api_layer'; // exposed but not hub-heavy
28
+ return 'internal'; // implementation detail
29
+ }
30
+ // ============================================================================
31
+ // BUILD
32
+ // ============================================================================
33
+ /**
34
+ * Build an ArchitectureOverview from pre-loaded dependency graph and LLM context.
35
+ * Both can be null if one artifact is missing; at least one must be non-null.
36
+ *
37
+ * @param depGraph Parsed dependency-graph.json (or null)
38
+ * @param ctx Parsed llm-context.json (or null)
39
+ * @param absDir Absolute project root path — used to normalize cluster file paths
40
+ */
41
+ export function buildArchitectureOverview(depGraph, ctx, absDir) {
42
+ // Cluster files use absolute paths; call graph uses relative paths.
43
+ // Normalise both to relative using absDir as base.
44
+ const toRel = (p) => p.startsWith(absDir) ? p.slice(absDir.length + 1) : p;
45
+ // Build sets of relative filePaths for hubs / entry points from call graph
46
+ const hubFiles = new Set((ctx?.callGraph?.hubFunctions ?? []).map(h => toRel(h.filePath)));
47
+ const entryFiles = new Set((ctx?.callGraph?.entryPoints ?? []).map(e => toRel(e.filePath)));
48
+ // Build inter-cluster dependency edges from dep graph edges
49
+ const clusterOfFile = new Map(); // absolute path → cluster id
50
+ for (const cl of depGraph?.clusters ?? []) {
51
+ for (const fileId of cl.files) {
52
+ clusterOfFile.set(fileId, cl.id);
53
+ }
54
+ }
55
+ const clusterEdges = new Map();
56
+ for (const edge of depGraph?.edges ?? []) {
57
+ const from = clusterOfFile.get(edge.source);
58
+ const to = clusterOfFile.get(edge.target);
59
+ if (from && to && from !== to) {
60
+ if (!clusterEdges.has(from))
61
+ clusterEdges.set(from, new Set());
62
+ clusterEdges.get(from).add(to);
63
+ }
64
+ }
65
+ // Summarize clusters
66
+ const clusters = (depGraph?.clusters ?? [])
67
+ .map(cl => {
68
+ const relFiles = cl.files.map(toRel);
69
+ const clusterHubCount = relFiles.filter(f => hubFiles.has(f)).length;
70
+ const clusterEntryCount = relFiles.filter(f => entryFiles.has(f)).length;
71
+ const role = inferClusterRole(clusterEntryCount, clusterHubCount, cl.files.length);
72
+ const dependsOn = [...(clusterEdges.get(cl.id) ?? [])];
73
+ return {
74
+ id: cl.id,
75
+ name: cl.name ?? cl.id,
76
+ fileCount: cl.files.length,
77
+ role,
78
+ entryPointCount: clusterEntryCount,
79
+ hubCount: clusterHubCount,
80
+ dependsOn,
81
+ keyFiles: relFiles
82
+ .filter(f => hubFiles.has(f) || entryFiles.has(f))
83
+ .slice(0, 5),
84
+ };
85
+ })
86
+ .sort((a, b) => b.fileCount - a.fileCount);
87
+ const globalEntryPoints = (ctx?.callGraph?.entryPoints ?? [])
88
+ .slice(0, 20)
89
+ .map(n => ({ name: n.name, file: n.filePath, language: n.language }));
90
+ const criticalHubs = (ctx?.callGraph?.hubFunctions ?? [])
91
+ .slice(0, 10)
92
+ .map(n => ({ name: n.name, file: n.filePath, fanIn: n.fanIn, fanOut: n.fanOut }));
93
+ return {
94
+ generatedAt: new Date().toISOString(),
95
+ summary: {
96
+ totalFiles: depGraph?.statistics.nodeCount ?? 0,
97
+ totalClusters: clusters.length,
98
+ totalEdges: depGraph?.statistics.edgeCount ?? 0,
99
+ cycles: depGraph?.cycles.length ?? 0,
100
+ layerViolations: ctx?.callGraph?.layerViolations?.length ?? 0,
101
+ },
102
+ clusters,
103
+ globalEntryPoints,
104
+ criticalHubs,
105
+ };
106
+ }
107
+ // ============================================================================
108
+ // MARKDOWN RENDERER
109
+ // ============================================================================
110
+ const ROLE_BADGE = {
111
+ entry_layer: 'entry layer',
112
+ orchestrator: 'orchestrator',
113
+ core_utilities: 'core utilities',
114
+ api_layer: 'API layer',
115
+ internal: 'internal',
116
+ };
117
+ /**
118
+ * Render an ArchitectureOverview as a Markdown document (ARCHITECTURE.md).
119
+ */
120
+ export function renderArchitectureMarkdown(overview) {
121
+ const { summary, clusters, globalEntryPoints, criticalHubs } = overview;
122
+ const lines = [];
123
+ lines.push('# Architecture Overview');
124
+ lines.push('');
125
+ lines.push(`> Generated by \`spec-gen analyze\` on ${overview.generatedAt.slice(0, 10)}.`);
126
+ lines.push('> Re-run `spec-gen analyze` to refresh.');
127
+ lines.push('');
128
+ // Summary table
129
+ lines.push('## Summary');
130
+ lines.push('');
131
+ lines.push('| Metric | Value |');
132
+ lines.push('|--------|-------|');
133
+ lines.push(`| Files | ${summary.totalFiles} |`);
134
+ lines.push(`| Module clusters | ${summary.totalClusters} |`);
135
+ lines.push(`| Dependency edges | ${summary.totalEdges} |`);
136
+ if (summary.cycles > 0) {
137
+ lines.push(`| ⚠️ Cycles | ${summary.cycles} |`);
138
+ }
139
+ if (summary.layerViolations > 0) {
140
+ lines.push(`| ⚠️ Layer violations | ${summary.layerViolations} |`);
141
+ }
142
+ lines.push('');
143
+ // Cluster map
144
+ lines.push('## Module Clusters');
145
+ lines.push('');
146
+ lines.push('Clusters are groups of tightly coupled files detected by static dependency analysis.');
147
+ lines.push('');
148
+ lines.push('| Cluster | Role | Files | Depends on |');
149
+ lines.push('|---------|------|-------|------------|');
150
+ for (const cl of clusters) {
151
+ const role = ROLE_BADGE[cl.role] ?? cl.role;
152
+ const deps = cl.dependsOn.length > 0
153
+ ? cl.dependsOn.map(id => clusters.find(c => c.id === id)?.name ?? id).join(', ')
154
+ : '—';
155
+ lines.push(`| **${cl.name}** | \`${role}\` | ${cl.fileCount} | ${deps} |`);
156
+ }
157
+ lines.push('');
158
+ // Per-cluster detail (only for clusters with key files)
159
+ const withKeys = clusters.filter(cl => cl.keyFiles.length > 0);
160
+ if (withKeys.length > 0) {
161
+ lines.push('### Key files per cluster');
162
+ lines.push('');
163
+ for (const cl of withKeys) {
164
+ lines.push(`**${cl.name}** (\`${ROLE_BADGE[cl.role] ?? cl.role}\`)`);
165
+ for (const f of cl.keyFiles) {
166
+ lines.push(`- \`${f}\``);
167
+ }
168
+ lines.push('');
169
+ }
170
+ }
171
+ // Entry points
172
+ if (globalEntryPoints.length > 0) {
173
+ lines.push('## Entry Points');
174
+ lines.push('');
175
+ lines.push('Functions with no internal callers — the public-facing roots of the codebase.');
176
+ lines.push('');
177
+ for (const ep of globalEntryPoints) {
178
+ lines.push(`- \`${ep.name}\` — \`${ep.file}\` (${ep.language})`);
179
+ }
180
+ lines.push('');
181
+ }
182
+ // Critical hubs
183
+ if (criticalHubs.length > 0) {
184
+ lines.push('## Critical Hubs');
185
+ lines.push('');
186
+ lines.push('High fan-in functions — many callers depend on them. Modify with care.');
187
+ lines.push('');
188
+ lines.push('| Function | File | Fan-in | Fan-out |');
189
+ lines.push('|----------|------|--------|---------|');
190
+ for (const hub of criticalHubs) {
191
+ lines.push(`| \`${hub.name}\` | \`${hub.file}\` | ${hub.fanIn} | ${hub.fanOut} |`);
192
+ }
193
+ lines.push('');
194
+ }
195
+ return lines.join('\n');
196
+ }
197
+ // ============================================================================
198
+ // FILE WRITER
199
+ // ============================================================================
200
+ /**
201
+ * Write ARCHITECTURE.md to the project root.
202
+ * Returns the path written.
203
+ */
204
+ export async function writeArchitectureMd(rootPath, overview) {
205
+ const outPath = join(rootPath, 'ARCHITECTURE.md');
206
+ await writeFile(outPath, renderArchitectureMarkdown(overview), 'utf-8');
207
+ return outPath;
208
+ }
209
+ //# sourceMappingURL=architecture-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architecture-writer.js","sourceRoot":"","sources":["../../../src/core/analyzer/architecture-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Analysis Artifact Generator
3
+ *
4
+ * Takes all analysis results and generates structured output files
5
+ * that will be consumed by the LLM generation phase and optionally by humans.
6
+ */
7
+ import type { RepositoryMap } from './repository-mapper.js';
8
+ import type { DependencyGraphResult } from './dependency-graph.js';
9
+ /**
10
+ * Heuristic to detect test/spec files across languages.
11
+ * Excludes them from call graph analysis — test helpers inflate fanIn,
12
+ * and test functions are never "unreachable" by definition.
13
+ *
14
+ * Patterns covered:
15
+ * TypeScript/JS: *.test.ts, *.spec.ts, *.test.tsx, __tests__/*, test_*.ts
16
+ * Python: test_*.py, *_test.py, tests/*.py
17
+ * Go: *_test.go
18
+ * Rust: files with #[cfg(test)] (not detectable here — excluded by directory pattern)
19
+ * Java/Kotlin: *Test.java, *Spec.kt
20
+ */
21
+ export declare function isTestFile(filePath: string): boolean;
22
+ /**
23
+ * Architecture layer information
24
+ */
25
+ export interface ArchitectureLayer {
26
+ name: string;
27
+ purpose: string;
28
+ files: string[];
29
+ representativeFile: string | null;
30
+ }
31
+ /**
32
+ * Detected domain (maps to OpenSpec spec)
33
+ */
34
+ export interface DetectedDomain {
35
+ name: string;
36
+ suggestedSpecPath: string;
37
+ files: string[];
38
+ entities: string[];
39
+ keyFile: string | null;
40
+ }
41
+ /**
42
+ * Entry point information
43
+ */
44
+ export interface EntryPointInfo {
45
+ file: string;
46
+ type: 'application-entry' | 'api-entry' | 'test-entry' | 'build-entry';
47
+ initializes: string[];
48
+ }
49
+ /**
50
+ * Data flow information
51
+ */
52
+ export interface DataFlowInfo {
53
+ sources: string[];
54
+ sinks: string[];
55
+ transformers: string[];
56
+ }
57
+ /**
58
+ * Key files by category
59
+ */
60
+ export interface KeyFiles {
61
+ schemas: string[];
62
+ config: string[];
63
+ auth: string[];
64
+ database: string[];
65
+ routes: string[];
66
+ services: string[];
67
+ }
68
+ /**
69
+ * Repository structure (JSON artifact)
70
+ */
71
+ export interface RepoStructure {
72
+ projectName: string;
73
+ projectType: string;
74
+ frameworks: string[];
75
+ architecture: {
76
+ pattern: 'layered' | 'modular' | 'microservices' | 'monolith' | 'unknown';
77
+ layers: ArchitectureLayer[];
78
+ };
79
+ domains: DetectedDomain[];
80
+ entryPoints: EntryPointInfo[];
81
+ dataFlow: DataFlowInfo;
82
+ keyFiles: KeyFiles;
83
+ statistics: {
84
+ totalFiles: number;
85
+ analyzedFiles: number;
86
+ skippedFiles: number;
87
+ avgFileScore: number;
88
+ nodeCount: number;
89
+ edgeCount: number;
90
+ cycleCount: number;
91
+ clusterCount: number;
92
+ };
93
+ }
94
+ /**
95
+ * LLM context phase
96
+ */
97
+ export interface LLMContextPhase {
98
+ purpose: string;
99
+ files: Array<{
100
+ path: string;
101
+ content?: string;
102
+ tokens: number;
103
+ }>;
104
+ totalTokens?: number;
105
+ estimatedTokens?: number;
106
+ }
107
+ /**
108
+ * LLM context preparation
109
+ */
110
+ export interface LLMContext {
111
+ phase1_survey: LLMContextPhase;
112
+ phase2_deep: LLMContextPhase;
113
+ phase3_validation: LLMContextPhase;
114
+ /** Compact signatures for ALL analyzed files — used by Stage 1 instead of bare file paths */
115
+ signatures?: import('./signature-extractor.js').FileSignatureMap[];
116
+ /** Static call graph: function→function relationships across all TS/Python files */
117
+ callGraph?: import('./call-graph.js').SerializedCallGraph;
118
+ }
119
+ /**
120
+ * All generated artifacts
121
+ */
122
+ export interface AnalysisArtifacts {
123
+ repoStructure: RepoStructure;
124
+ summaryMarkdown: string;
125
+ dependencyDiagram: string;
126
+ llmContext: LLMContext;
127
+ }
128
+ /**
129
+ * Options for artifact generation
130
+ */
131
+ export interface ArtifactGeneratorOptions {
132
+ /** Root directory of the project */
133
+ rootDir: string;
134
+ /** Output directory for artifacts */
135
+ outputDir: string;
136
+ /** Maximum files to include in LLM deep analysis */
137
+ maxDeepAnalysisFiles?: number;
138
+ /** Maximum files for validation phase */
139
+ maxValidationFiles?: number;
140
+ /** Approximate tokens per character for estimation */
141
+ tokensPerChar?: number;
142
+ }
143
+ /**
144
+ * Generates analysis artifacts from repository map and dependency graph
145
+ */
146
+ export declare class AnalysisArtifactGenerator {
147
+ private options;
148
+ constructor(options: ArtifactGeneratorOptions);
149
+ /**
150
+ * Generate all artifacts
151
+ */
152
+ generate(repoMap: RepositoryMap, depGraph: DependencyGraphResult): Promise<AnalysisArtifacts>;
153
+ /**
154
+ * Generate and save all artifacts to disk
155
+ */
156
+ generateAndSave(repoMap: RepositoryMap, depGraph: DependencyGraphResult): Promise<AnalysisArtifacts>;
157
+ /**
158
+ * Generate repo-structure.json
159
+ */
160
+ private generateRepoStructure;
161
+ /**
162
+ * Format project type for display
163
+ */
164
+ private formatProjectType;
165
+ /**
166
+ * Detect architecture pattern from code structure
167
+ */
168
+ private detectArchitecturePattern;
169
+ /**
170
+ * Generate architecture layers
171
+ */
172
+ private generateArchitectureLayers;
173
+ /**
174
+ * Generate domains from clusters
175
+ */
176
+ private generateDomains;
177
+ /**
178
+ * Normalize domain name for OpenSpec path
179
+ */
180
+ private normalizeDomainName;
181
+ /**
182
+ * Extract potential entity names from files
183
+ */
184
+ private extractEntities;
185
+ /**
186
+ * Generate entry points information
187
+ */
188
+ private generateEntryPoints;
189
+ /**
190
+ * Generate data flow information
191
+ */
192
+ private generateDataFlow;
193
+ /**
194
+ * Generate key files by category
195
+ */
196
+ private generateKeyFiles;
197
+ /**
198
+ * Generate SUMMARY.md
199
+ */
200
+ private generateSummaryMarkdown;
201
+ /**
202
+ * Format project type for human reading
203
+ */
204
+ private formatProjectTypeReadable;
205
+ /**
206
+ * Generate dependency diagram in Mermaid format
207
+ */
208
+ private generateDependencyDiagram;
209
+ /**
210
+ * Generate LLM context preparation
211
+ */
212
+ private generateLLMContext;
213
+ }
214
+ /**
215
+ * Generate all artifacts
216
+ */
217
+ export declare function generateArtifacts(repoMap: RepositoryMap, depGraph: DependencyGraphResult, options: ArtifactGeneratorOptions): Promise<AnalysisArtifacts>;
218
+ /**
219
+ * Generate and save all artifacts
220
+ */
221
+ export declare function generateAndSaveArtifacts(repoMap: RepositoryMap, depGraph: DependencyGraphResult, options: ArtifactGeneratorOptions): Promise<AnalysisArtifacts>;
222
+ //# sourceMappingURL=artifact-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-generator.d.ts","sourceRoot":"","sources":["../../../src/core/analyzer/artifact-generator.ts"],"names":[],"mappings":"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"}