@dotcontext/cli 0.8.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 (797) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +566 -0
  3. package/dist/generators/agents/agentConfig.d.ts +4 -0
  4. package/dist/generators/agents/agentConfig.d.ts.map +1 -0
  5. package/dist/generators/agents/agentConfig.js +180 -0
  6. package/dist/generators/agents/agentConfig.js.map +1 -0
  7. package/dist/generators/agents/agentGenerator.d.ts +36 -0
  8. package/dist/generators/agents/agentGenerator.d.ts.map +1 -0
  9. package/dist/generators/agents/agentGenerator.js +304 -0
  10. package/dist/generators/agents/agentGenerator.js.map +1 -0
  11. package/dist/generators/agents/agentTypes.d.ts +4 -0
  12. package/dist/generators/agents/agentTypes.d.ts.map +1 -0
  13. package/dist/generators/agents/agentTypes.js +25 -0
  14. package/dist/generators/agents/agentTypes.js.map +1 -0
  15. package/dist/generators/agents/index.d.ts +4 -0
  16. package/dist/generators/agents/index.d.ts.map +1 -0
  17. package/dist/generators/agents/index.js +12 -0
  18. package/dist/generators/agents/index.js.map +1 -0
  19. package/dist/generators/agents/templates/index.d.ts +3 -0
  20. package/dist/generators/agents/templates/index.d.ts.map +1 -0
  21. package/dist/generators/agents/templates/index.js +6 -0
  22. package/dist/generators/agents/templates/index.js.map +1 -0
  23. package/dist/generators/agents/templates/indexTemplate.d.ts +3 -0
  24. package/dist/generators/agents/templates/indexTemplate.d.ts.map +1 -0
  25. package/dist/generators/agents/templates/indexTemplate.js +36 -0
  26. package/dist/generators/agents/templates/indexTemplate.js.map +1 -0
  27. package/dist/generators/agents/templates/types.d.ts +22 -0
  28. package/dist/generators/agents/templates/types.d.ts.map +1 -0
  29. package/dist/generators/agents/templates/types.js +3 -0
  30. package/dist/generators/agents/templates/types.js.map +1 -0
  31. package/dist/generators/documentation/codebaseMapGenerator.d.ts +143 -0
  32. package/dist/generators/documentation/codebaseMapGenerator.d.ts.map +1 -0
  33. package/dist/generators/documentation/codebaseMapGenerator.js +666 -0
  34. package/dist/generators/documentation/codebaseMapGenerator.js.map +1 -0
  35. package/dist/generators/documentation/documentationGenerator.d.ts +22 -0
  36. package/dist/generators/documentation/documentationGenerator.d.ts.map +1 -0
  37. package/dist/generators/documentation/documentationGenerator.js +263 -0
  38. package/dist/generators/documentation/documentationGenerator.js.map +1 -0
  39. package/dist/generators/documentation/guideRegistry.d.ts +6 -0
  40. package/dist/generators/documentation/guideRegistry.d.ts.map +1 -0
  41. package/dist/generators/documentation/guideRegistry.js +74 -0
  42. package/dist/generators/documentation/guideRegistry.js.map +1 -0
  43. package/dist/generators/documentation/index.d.ts +4 -0
  44. package/dist/generators/documentation/index.d.ts.map +1 -0
  45. package/dist/generators/documentation/index.js +8 -0
  46. package/dist/generators/documentation/index.js.map +1 -0
  47. package/dist/generators/documentation/templates/common.d.ts +42 -0
  48. package/dist/generators/documentation/templates/common.d.ts.map +1 -0
  49. package/dist/generators/documentation/templates/common.js +194 -0
  50. package/dist/generators/documentation/templates/common.js.map +1 -0
  51. package/dist/generators/documentation/templates/index.d.ts +3 -0
  52. package/dist/generators/documentation/templates/index.d.ts.map +1 -0
  53. package/dist/generators/documentation/templates/index.js +6 -0
  54. package/dist/generators/documentation/templates/index.js.map +1 -0
  55. package/dist/generators/documentation/templates/indexTemplate.d.ts +3 -0
  56. package/dist/generators/documentation/templates/indexTemplate.d.ts.map +1 -0
  57. package/dist/generators/documentation/templates/indexTemplate.js +25 -0
  58. package/dist/generators/documentation/templates/indexTemplate.js.map +1 -0
  59. package/dist/generators/documentation/templates/types.d.ts +24 -0
  60. package/dist/generators/documentation/templates/types.d.ts.map +1 -0
  61. package/dist/generators/documentation/templates/types.js +3 -0
  62. package/dist/generators/documentation/templates/types.js.map +1 -0
  63. package/dist/generators/plans/index.d.ts +2 -0
  64. package/dist/generators/plans/index.d.ts.map +1 -0
  65. package/dist/generators/plans/index.js +6 -0
  66. package/dist/generators/plans/index.js.map +1 -0
  67. package/dist/generators/plans/planGenerator.d.ts +26 -0
  68. package/dist/generators/plans/planGenerator.d.ts.map +1 -0
  69. package/dist/generators/plans/planGenerator.js +137 -0
  70. package/dist/generators/plans/planGenerator.js.map +1 -0
  71. package/dist/generators/plans/templates/indexTemplate.d.ts +3 -0
  72. package/dist/generators/plans/templates/indexTemplate.d.ts.map +1 -0
  73. package/dist/generators/plans/templates/indexTemplate.js +28 -0
  74. package/dist/generators/plans/templates/indexTemplate.js.map +1 -0
  75. package/dist/generators/plans/templates/planTemplate.d.ts +14 -0
  76. package/dist/generators/plans/templates/planTemplate.d.ts.map +1 -0
  77. package/dist/generators/plans/templates/planTemplate.js +270 -0
  78. package/dist/generators/plans/templates/planTemplate.js.map +1 -0
  79. package/dist/generators/plans/templates/types.d.ts +29 -0
  80. package/dist/generators/plans/templates/types.d.ts.map +1 -0
  81. package/dist/generators/plans/templates/types.js +3 -0
  82. package/dist/generators/plans/templates/types.js.map +1 -0
  83. package/dist/generators/shared/contextGenerator.d.ts +7 -0
  84. package/dist/generators/shared/contextGenerator.d.ts.map +1 -0
  85. package/dist/generators/shared/contextGenerator.js +13 -0
  86. package/dist/generators/shared/contextGenerator.js.map +1 -0
  87. package/dist/generators/shared/directoryTemplateHelpers.d.ts +2 -0
  88. package/dist/generators/shared/directoryTemplateHelpers.d.ts.map +1 -0
  89. package/dist/generators/shared/directoryTemplateHelpers.js +12 -0
  90. package/dist/generators/shared/directoryTemplateHelpers.js.map +1 -0
  91. package/dist/generators/shared/generatorUtils.d.ts +16 -0
  92. package/dist/generators/shared/generatorUtils.d.ts.map +1 -0
  93. package/dist/generators/shared/generatorUtils.js +116 -0
  94. package/dist/generators/shared/generatorUtils.js.map +1 -0
  95. package/dist/generators/shared/index.d.ts +5 -0
  96. package/dist/generators/shared/index.d.ts.map +1 -0
  97. package/dist/generators/shared/index.js +26 -0
  98. package/dist/generators/shared/index.js.map +1 -0
  99. package/dist/generators/shared/scaffoldStructures.d.ts +13 -0
  100. package/dist/generators/shared/scaffoldStructures.d.ts.map +1 -0
  101. package/dist/generators/shared/scaffoldStructures.js +30 -0
  102. package/dist/generators/shared/scaffoldStructures.js.map +1 -0
  103. package/dist/generators/shared/structures/agents/definitions.d.ts +18 -0
  104. package/dist/generators/shared/structures/agents/definitions.d.ts.map +1 -0
  105. package/dist/generators/shared/structures/agents/definitions.js +561 -0
  106. package/dist/generators/shared/structures/agents/definitions.js.map +1 -0
  107. package/dist/generators/shared/structures/agents/factory.d.ts +25 -0
  108. package/dist/generators/shared/structures/agents/factory.d.ts.map +1 -0
  109. package/dist/generators/shared/structures/agents/factory.js +138 -0
  110. package/dist/generators/shared/structures/agents/factory.js.map +1 -0
  111. package/dist/generators/shared/structures/agents/index.d.ts +6 -0
  112. package/dist/generators/shared/structures/agents/index.d.ts.map +1 -0
  113. package/dist/generators/shared/structures/agents/index.js +24 -0
  114. package/dist/generators/shared/structures/agents/index.js.map +1 -0
  115. package/dist/generators/shared/structures/documentation/apiReference.d.ts +3 -0
  116. package/dist/generators/shared/structures/documentation/apiReference.d.ts.map +1 -0
  117. package/dist/generators/shared/structures/documentation/apiReference.js +100 -0
  118. package/dist/generators/shared/structures/documentation/apiReference.js.map +1 -0
  119. package/dist/generators/shared/structures/documentation/architecture.d.ts +3 -0
  120. package/dist/generators/shared/structures/documentation/architecture.d.ts.map +1 -0
  121. package/dist/generators/shared/structures/documentation/architecture.js +176 -0
  122. package/dist/generators/shared/structures/documentation/architecture.js.map +1 -0
  123. package/dist/generators/shared/structures/documentation/dataFlow.d.ts +3 -0
  124. package/dist/generators/shared/structures/documentation/dataFlow.d.ts.map +1 -0
  125. package/dist/generators/shared/structures/documentation/dataFlow.js +107 -0
  126. package/dist/generators/shared/structures/documentation/dataFlow.js.map +1 -0
  127. package/dist/generators/shared/structures/documentation/glossary.d.ts +3 -0
  128. package/dist/generators/shared/structures/documentation/glossary.d.ts.map +1 -0
  129. package/dist/generators/shared/structures/documentation/glossary.js +91 -0
  130. package/dist/generators/shared/structures/documentation/glossary.js.map +1 -0
  131. package/dist/generators/shared/structures/documentation/index.d.ts +16 -0
  132. package/dist/generators/shared/structures/documentation/index.d.ts.map +1 -0
  133. package/dist/generators/shared/structures/documentation/index.js +31 -0
  134. package/dist/generators/shared/structures/documentation/index.js.map +1 -0
  135. package/dist/generators/shared/structures/documentation/migration.d.ts +3 -0
  136. package/dist/generators/shared/structures/documentation/migration.d.ts.map +1 -0
  137. package/dist/generators/shared/structures/documentation/migration.js +113 -0
  138. package/dist/generators/shared/structures/documentation/migration.js.map +1 -0
  139. package/dist/generators/shared/structures/documentation/onboarding.d.ts +3 -0
  140. package/dist/generators/shared/structures/documentation/onboarding.d.ts.map +1 -0
  141. package/dist/generators/shared/structures/documentation/onboarding.js +99 -0
  142. package/dist/generators/shared/structures/documentation/onboarding.js.map +1 -0
  143. package/dist/generators/shared/structures/documentation/projectOverview.d.ts +3 -0
  144. package/dist/generators/shared/structures/documentation/projectOverview.d.ts.map +1 -0
  145. package/dist/generators/shared/structures/documentation/projectOverview.js +163 -0
  146. package/dist/generators/shared/structures/documentation/projectOverview.js.map +1 -0
  147. package/dist/generators/shared/structures/documentation/security.d.ts +3 -0
  148. package/dist/generators/shared/structures/documentation/security.d.ts.map +1 -0
  149. package/dist/generators/shared/structures/documentation/security.js +100 -0
  150. package/dist/generators/shared/structures/documentation/security.js.map +1 -0
  151. package/dist/generators/shared/structures/documentation/testing.d.ts +3 -0
  152. package/dist/generators/shared/structures/documentation/testing.d.ts.map +1 -0
  153. package/dist/generators/shared/structures/documentation/testing.js +130 -0
  154. package/dist/generators/shared/structures/documentation/testing.js.map +1 -0
  155. package/dist/generators/shared/structures/documentation/tooling.d.ts +3 -0
  156. package/dist/generators/shared/structures/documentation/tooling.d.ts.map +1 -0
  157. package/dist/generators/shared/structures/documentation/tooling.js +114 -0
  158. package/dist/generators/shared/structures/documentation/tooling.js.map +1 -0
  159. package/dist/generators/shared/structures/documentation/troubleshooting.d.ts +3 -0
  160. package/dist/generators/shared/structures/documentation/troubleshooting.d.ts.map +1 -0
  161. package/dist/generators/shared/structures/documentation/troubleshooting.js +91 -0
  162. package/dist/generators/shared/structures/documentation/troubleshooting.js.map +1 -0
  163. package/dist/generators/shared/structures/documentation/workflow.d.ts +3 -0
  164. package/dist/generators/shared/structures/documentation/workflow.d.ts.map +1 -0
  165. package/dist/generators/shared/structures/documentation/workflow.js +116 -0
  166. package/dist/generators/shared/structures/documentation/workflow.js.map +1 -0
  167. package/dist/generators/shared/structures/index.d.ts +15 -0
  168. package/dist/generators/shared/structures/index.d.ts.map +1 -0
  169. package/dist/generators/shared/structures/index.js +37 -0
  170. package/dist/generators/shared/structures/index.js.map +1 -0
  171. package/dist/generators/shared/structures/plans/index.d.ts +5 -0
  172. package/dist/generators/shared/structures/plans/index.d.ts.map +1 -0
  173. package/dist/generators/shared/structures/plans/index.js +9 -0
  174. package/dist/generators/shared/structures/plans/index.js.map +1 -0
  175. package/dist/generators/shared/structures/plans/planStructure.d.ts +6 -0
  176. package/dist/generators/shared/structures/plans/planStructure.d.ts.map +1 -0
  177. package/dist/generators/shared/structures/plans/planStructure.js +65 -0
  178. package/dist/generators/shared/structures/plans/planStructure.js.map +1 -0
  179. package/dist/generators/shared/structures/registry.d.ts +18 -0
  180. package/dist/generators/shared/structures/registry.d.ts.map +1 -0
  181. package/dist/generators/shared/structures/registry.js +104 -0
  182. package/dist/generators/shared/structures/registry.js.map +1 -0
  183. package/dist/generators/shared/structures/serialization.d.ts +15 -0
  184. package/dist/generators/shared/structures/serialization.d.ts.map +1 -0
  185. package/dist/generators/shared/structures/serialization.js +124 -0
  186. package/dist/generators/shared/structures/serialization.js.map +1 -0
  187. package/dist/generators/shared/structures/skills/definitions.d.ts +25 -0
  188. package/dist/generators/shared/structures/skills/definitions.d.ts.map +1 -0
  189. package/dist/generators/shared/structures/skills/definitions.js +427 -0
  190. package/dist/generators/shared/structures/skills/definitions.js.map +1 -0
  191. package/dist/generators/shared/structures/skills/factory.d.ts +18 -0
  192. package/dist/generators/shared/structures/skills/factory.d.ts.map +1 -0
  193. package/dist/generators/shared/structures/skills/factory.js +75 -0
  194. package/dist/generators/shared/structures/skills/factory.js.map +1 -0
  195. package/dist/generators/shared/structures/skills/index.d.ts +6 -0
  196. package/dist/generators/shared/structures/skills/index.d.ts.map +1 -0
  197. package/dist/generators/shared/structures/skills/index.js +30 -0
  198. package/dist/generators/shared/structures/skills/index.js.map +1 -0
  199. package/dist/generators/shared/structures/types.d.ts +61 -0
  200. package/dist/generators/shared/structures/types.d.ts.map +1 -0
  201. package/dist/generators/shared/structures/types.js +6 -0
  202. package/dist/generators/shared/structures/types.js.map +1 -0
  203. package/dist/generators/shared/structures/validation.d.ts +13 -0
  204. package/dist/generators/shared/structures/validation.d.ts.map +1 -0
  205. package/dist/generators/shared/structures/validation.js +51 -0
  206. package/dist/generators/shared/structures/validation.js.map +1 -0
  207. package/dist/generators/skills/index.d.ts +7 -0
  208. package/dist/generators/skills/index.d.ts.map +1 -0
  209. package/dist/generators/skills/index.js +15 -0
  210. package/dist/generators/skills/index.js.map +1 -0
  211. package/dist/generators/skills/skillGenerator.d.ts +58 -0
  212. package/dist/generators/skills/skillGenerator.d.ts.map +1 -0
  213. package/dist/generators/skills/skillGenerator.js +158 -0
  214. package/dist/generators/skills/skillGenerator.js.map +1 -0
  215. package/dist/generators/skills/templates/indexTemplate.d.ts +13 -0
  216. package/dist/generators/skills/templates/indexTemplate.d.ts.map +1 -0
  217. package/dist/generators/skills/templates/indexTemplate.js +102 -0
  218. package/dist/generators/skills/templates/indexTemplate.js.map +1 -0
  219. package/dist/generators/skills/templates/skillTemplate.d.ts +30 -0
  220. package/dist/generators/skills/templates/skillTemplate.d.ts.map +1 -0
  221. package/dist/generators/skills/templates/skillTemplate.js +95 -0
  222. package/dist/generators/skills/templates/skillTemplate.js.map +1 -0
  223. package/dist/index.d.ts +3 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +1179 -0
  226. package/dist/index.js.map +1 -0
  227. package/dist/prompts/defaults.d.ts +8 -0
  228. package/dist/prompts/defaults.d.ts.map +1 -0
  229. package/dist/prompts/defaults.js +108 -0
  230. package/dist/prompts/defaults.js.map +1 -0
  231. package/dist/services/ai/aiSdkClient.d.ts +67 -0
  232. package/dist/services/ai/aiSdkClient.d.ts.map +1 -0
  233. package/dist/services/ai/aiSdkClient.js +143 -0
  234. package/dist/services/ai/aiSdkClient.js.map +1 -0
  235. package/dist/services/ai/index.d.ts +5 -0
  236. package/dist/services/ai/index.d.ts.map +1 -0
  237. package/dist/services/ai/index.js +40 -0
  238. package/dist/services/ai/index.js.map +1 -0
  239. package/dist/services/ai/providerFactory.d.ts +35 -0
  240. package/dist/services/ai/providerFactory.d.ts.map +1 -0
  241. package/dist/services/ai/providerFactory.js +107 -0
  242. package/dist/services/ai/providerFactory.js.map +1 -0
  243. package/dist/services/ai/schemas.d.ts +557 -0
  244. package/dist/services/ai/schemas.d.ts.map +1 -0
  245. package/dist/services/ai/schemas.js +357 -0
  246. package/dist/services/ai/schemas.js.map +1 -0
  247. package/dist/services/ai/toolRegistry.d.ts +27 -0
  248. package/dist/services/ai/toolRegistry.d.ts.map +1 -0
  249. package/dist/services/ai/toolRegistry.js +151 -0
  250. package/dist/services/ai/toolRegistry.js.map +1 -0
  251. package/dist/services/ai/tools/analyzeSymbolsTool.d.ts +33 -0
  252. package/dist/services/ai/tools/analyzeSymbolsTool.d.ts.map +1 -0
  253. package/dist/services/ai/tools/analyzeSymbolsTool.js +57 -0
  254. package/dist/services/ai/tools/analyzeSymbolsTool.js.map +1 -0
  255. package/dist/services/ai/tools/checkScaffoldingTool.d.ts +18 -0
  256. package/dist/services/ai/tools/checkScaffoldingTool.d.ts.map +1 -0
  257. package/dist/services/ai/tools/checkScaffoldingTool.js +89 -0
  258. package/dist/services/ai/tools/checkScaffoldingTool.js.map +1 -0
  259. package/dist/services/ai/tools/fillScaffoldingTool.d.ts +124 -0
  260. package/dist/services/ai/tools/fillScaffoldingTool.d.ts.map +1 -0
  261. package/dist/services/ai/tools/fillScaffoldingTool.js +397 -0
  262. package/dist/services/ai/tools/fillScaffoldingTool.js.map +1 -0
  263. package/dist/services/ai/tools/getCodebaseMapTool.d.ts +17 -0
  264. package/dist/services/ai/tools/getCodebaseMapTool.d.ts.map +1 -0
  265. package/dist/services/ai/tools/getCodebaseMapTool.js +122 -0
  266. package/dist/services/ai/tools/getCodebaseMapTool.js.map +1 -0
  267. package/dist/services/ai/tools/getFileStructureTool.d.ts +29 -0
  268. package/dist/services/ai/tools/getFileStructureTool.d.ts.map +1 -0
  269. package/dist/services/ai/tools/getFileStructureTool.js +48 -0
  270. package/dist/services/ai/tools/getFileStructureTool.js.map +1 -0
  271. package/dist/services/ai/tools/index.d.ts +21 -0
  272. package/dist/services/ai/tools/index.d.ts.map +1 -0
  273. package/dist/services/ai/tools/index.js +75 -0
  274. package/dist/services/ai/tools/index.js.map +1 -0
  275. package/dist/services/ai/tools/initializeContextTool.d.ts +135 -0
  276. package/dist/services/ai/tools/initializeContextTool.d.ts.map +1 -0
  277. package/dist/services/ai/tools/initializeContextTool.js +447 -0
  278. package/dist/services/ai/tools/initializeContextTool.js.map +1 -0
  279. package/dist/services/ai/tools/listFilesTool.d.ts +18 -0
  280. package/dist/services/ai/tools/listFilesTool.d.ts.map +1 -0
  281. package/dist/services/ai/tools/listFilesTool.js +34 -0
  282. package/dist/services/ai/tools/listFilesTool.js.map +1 -0
  283. package/dist/services/ai/tools/readFileTool.d.ts +17 -0
  284. package/dist/services/ai/tools/readFileTool.d.ts.map +1 -0
  285. package/dist/services/ai/tools/readFileTool.js +63 -0
  286. package/dist/services/ai/tools/readFileTool.js.map +1 -0
  287. package/dist/services/ai/tools/scaffoldPlanTool.d.ts +41 -0
  288. package/dist/services/ai/tools/scaffoldPlanTool.d.ts.map +1 -0
  289. package/dist/services/ai/tools/scaffoldPlanTool.js +183 -0
  290. package/dist/services/ai/tools/scaffoldPlanTool.js.map +1 -0
  291. package/dist/services/ai/tools/searchCodeTool.d.ts +25 -0
  292. package/dist/services/ai/tools/searchCodeTool.d.ts.map +1 -0
  293. package/dist/services/ai/tools/searchCodeTool.js +96 -0
  294. package/dist/services/ai/tools/searchCodeTool.js.map +1 -0
  295. package/dist/services/autoFill/autoFillService.d.ts +52 -0
  296. package/dist/services/autoFill/autoFillService.d.ts.map +1 -0
  297. package/dist/services/autoFill/autoFillService.js +473 -0
  298. package/dist/services/autoFill/autoFillService.js.map +1 -0
  299. package/dist/services/autoFill/index.d.ts +2 -0
  300. package/dist/services/autoFill/index.d.ts.map +1 -0
  301. package/dist/services/autoFill/index.js +6 -0
  302. package/dist/services/autoFill/index.js.map +1 -0
  303. package/dist/services/baseLLMClient.d.ts +12 -0
  304. package/dist/services/baseLLMClient.d.ts.map +1 -0
  305. package/dist/services/baseLLMClient.js +80 -0
  306. package/dist/services/baseLLMClient.js.map +1 -0
  307. package/dist/services/export/contextExportService.d.ts +45 -0
  308. package/dist/services/export/contextExportService.d.ts.map +1 -0
  309. package/dist/services/export/contextExportService.js +161 -0
  310. package/dist/services/export/contextExportService.js.map +1 -0
  311. package/dist/services/export/exportRulesService.d.ts +76 -0
  312. package/dist/services/export/exportRulesService.d.ts.map +1 -0
  313. package/dist/services/export/exportRulesService.js +306 -0
  314. package/dist/services/export/exportRulesService.js.map +1 -0
  315. package/dist/services/export/index.d.ts +7 -0
  316. package/dist/services/export/index.d.ts.map +1 -0
  317. package/dist/services/export/index.js +12 -0
  318. package/dist/services/export/index.js.map +1 -0
  319. package/dist/services/export/skillExportService.d.ts +69 -0
  320. package/dist/services/export/skillExportService.d.ts.map +1 -0
  321. package/dist/services/export/skillExportService.js +262 -0
  322. package/dist/services/export/skillExportService.js.map +1 -0
  323. package/dist/services/import/agentsDetector.d.ts +12 -0
  324. package/dist/services/import/agentsDetector.d.ts.map +1 -0
  325. package/dist/services/import/agentsDetector.js +183 -0
  326. package/dist/services/import/agentsDetector.js.map +1 -0
  327. package/dist/services/import/importAgentsService.d.ts +14 -0
  328. package/dist/services/import/importAgentsService.d.ts.map +1 -0
  329. package/dist/services/import/importAgentsService.js +194 -0
  330. package/dist/services/import/importAgentsService.js.map +1 -0
  331. package/dist/services/import/importRulesService.d.ts +17 -0
  332. package/dist/services/import/importRulesService.d.ts.map +1 -0
  333. package/dist/services/import/importRulesService.js +221 -0
  334. package/dist/services/import/importRulesService.js.map +1 -0
  335. package/dist/services/import/index.d.ts +7 -0
  336. package/dist/services/import/index.d.ts.map +1 -0
  337. package/dist/services/import/index.js +28 -0
  338. package/dist/services/import/index.js.map +1 -0
  339. package/dist/services/import/presets.d.ts +20 -0
  340. package/dist/services/import/presets.d.ts.map +1 -0
  341. package/dist/services/import/presets.js +56 -0
  342. package/dist/services/import/presets.js.map +1 -0
  343. package/dist/services/import/rulesDetector.d.ts +16 -0
  344. package/dist/services/import/rulesDetector.d.ts.map +1 -0
  345. package/dist/services/import/rulesDetector.js +278 -0
  346. package/dist/services/import/rulesDetector.js.map +1 -0
  347. package/dist/services/import/types.d.ts +72 -0
  348. package/dist/services/import/types.d.ts.map +1 -0
  349. package/dist/services/import/types.js +3 -0
  350. package/dist/services/import/types.js.map +1 -0
  351. package/dist/services/mcp/actionLogger.d.ts +19 -0
  352. package/dist/services/mcp/actionLogger.d.ts.map +1 -0
  353. package/dist/services/mcp/actionLogger.js +128 -0
  354. package/dist/services/mcp/actionLogger.js.map +1 -0
  355. package/dist/services/mcp/gateway/agent.d.ts +17 -0
  356. package/dist/services/mcp/gateway/agent.d.ts.map +1 -0
  357. package/dist/services/mcp/gateway/agent.js +147 -0
  358. package/dist/services/mcp/gateway/agent.js.map +1 -0
  359. package/dist/services/mcp/gateway/context.d.ts +21 -0
  360. package/dist/services/mcp/gateway/context.d.ts.map +1 -0
  361. package/dist/services/mcp/gateway/context.js +249 -0
  362. package/dist/services/mcp/gateway/context.js.map +1 -0
  363. package/dist/services/mcp/gateway/explore.d.ts +16 -0
  364. package/dist/services/mcp/gateway/explore.d.ts.map +1 -0
  365. package/dist/services/mcp/gateway/explore.js +60 -0
  366. package/dist/services/mcp/gateway/explore.js.map +1 -0
  367. package/dist/services/mcp/gateway/index.d.ts +24 -0
  368. package/dist/services/mcp/gateway/index.d.ts.map +1 -0
  369. package/dist/services/mcp/gateway/index.js +53 -0
  370. package/dist/services/mcp/gateway/index.js.map +1 -0
  371. package/dist/services/mcp/gateway/metrics.d.ts +56 -0
  372. package/dist/services/mcp/gateway/metrics.d.ts.map +1 -0
  373. package/dist/services/mcp/gateway/metrics.js +153 -0
  374. package/dist/services/mcp/gateway/metrics.js.map +1 -0
  375. package/dist/services/mcp/gateway/plan.d.ts +18 -0
  376. package/dist/services/mcp/gateway/plan.d.ts.map +1 -0
  377. package/dist/services/mcp/gateway/plan.js +273 -0
  378. package/dist/services/mcp/gateway/plan.js.map +1 -0
  379. package/dist/services/mcp/gateway/response.d.ts +45 -0
  380. package/dist/services/mcp/gateway/response.d.ts.map +1 -0
  381. package/dist/services/mcp/gateway/response.js +111 -0
  382. package/dist/services/mcp/gateway/response.js.map +1 -0
  383. package/dist/services/mcp/gateway/shared.d.ts +38 -0
  384. package/dist/services/mcp/gateway/shared.d.ts.map +1 -0
  385. package/dist/services/mcp/gateway/shared.js +39 -0
  386. package/dist/services/mcp/gateway/shared.js.map +1 -0
  387. package/dist/services/mcp/gateway/skill.d.ts +17 -0
  388. package/dist/services/mcp/gateway/skill.d.ts.map +1 -0
  389. package/dist/services/mcp/gateway/skill.js +323 -0
  390. package/dist/services/mcp/gateway/skill.js.map +1 -0
  391. package/dist/services/mcp/gateway/sync.d.ts +17 -0
  392. package/dist/services/mcp/gateway/sync.d.ts.map +1 -0
  393. package/dist/services/mcp/gateway/sync.js +219 -0
  394. package/dist/services/mcp/gateway/sync.js.map +1 -0
  395. package/dist/services/mcp/gateway/types.d.ts +116 -0
  396. package/dist/services/mcp/gateway/types.d.ts.map +1 -0
  397. package/dist/services/mcp/gateway/types.js +12 -0
  398. package/dist/services/mcp/gateway/types.js.map +1 -0
  399. package/dist/services/mcp/gateway/workflowAdvance.d.ts +25 -0
  400. package/dist/services/mcp/gateway/workflowAdvance.d.ts.map +1 -0
  401. package/dist/services/mcp/gateway/workflowAdvance.js +133 -0
  402. package/dist/services/mcp/gateway/workflowAdvance.js.map +1 -0
  403. package/dist/services/mcp/gateway/workflowInit.d.ts +28 -0
  404. package/dist/services/mcp/gateway/workflowInit.d.ts.map +1 -0
  405. package/dist/services/mcp/gateway/workflowInit.js +213 -0
  406. package/dist/services/mcp/gateway/workflowInit.js.map +1 -0
  407. package/dist/services/mcp/gateway/workflowManage.d.ts +31 -0
  408. package/dist/services/mcp/gateway/workflowManage.d.ts.map +1 -0
  409. package/dist/services/mcp/gateway/workflowManage.js +222 -0
  410. package/dist/services/mcp/gateway/workflowManage.js.map +1 -0
  411. package/dist/services/mcp/gateway/workflowStatus.d.ts +17 -0
  412. package/dist/services/mcp/gateway/workflowStatus.d.ts.map +1 -0
  413. package/dist/services/mcp/gateway/workflowStatus.js +91 -0
  414. package/dist/services/mcp/gateway/workflowStatus.js.map +1 -0
  415. package/dist/services/mcp/gatewayTools.d.ts +15 -0
  416. package/dist/services/mcp/gatewayTools.d.ts.map +1 -0
  417. package/dist/services/mcp/gatewayTools.js +38 -0
  418. package/dist/services/mcp/gatewayTools.js.map +1 -0
  419. package/dist/services/mcp/index.d.ts +9 -0
  420. package/dist/services/mcp/index.d.ts.map +1 -0
  421. package/dist/services/mcp/index.js +28 -0
  422. package/dist/services/mcp/index.js.map +1 -0
  423. package/dist/services/mcp/mcpInstallService.d.ts +56 -0
  424. package/dist/services/mcp/mcpInstallService.d.ts.map +1 -0
  425. package/dist/services/mcp/mcpInstallService.js +603 -0
  426. package/dist/services/mcp/mcpInstallService.js.map +1 -0
  427. package/dist/services/mcp/mcpServer.d.ts +101 -0
  428. package/dist/services/mcp/mcpServer.d.ts.map +1 -0
  429. package/dist/services/mcp/mcpServer.js +844 -0
  430. package/dist/services/mcp/mcpServer.js.map +1 -0
  431. package/dist/services/qa/index.d.ts +9 -0
  432. package/dist/services/qa/index.d.ts.map +1 -0
  433. package/dist/services/qa/index.js +15 -0
  434. package/dist/services/qa/index.js.map +1 -0
  435. package/dist/services/qa/patternInferer.d.ts +41 -0
  436. package/dist/services/qa/patternInferer.d.ts.map +1 -0
  437. package/dist/services/qa/patternInferer.js +366 -0
  438. package/dist/services/qa/patternInferer.js.map +1 -0
  439. package/dist/services/qa/qaService.d.ts +107 -0
  440. package/dist/services/qa/qaService.d.ts.map +1 -0
  441. package/dist/services/qa/qaService.js +874 -0
  442. package/dist/services/qa/qaService.js.map +1 -0
  443. package/dist/services/qa/topicDetector.d.ts +54 -0
  444. package/dist/services/qa/topicDetector.d.ts.map +1 -0
  445. package/dist/services/qa/topicDetector.js +306 -0
  446. package/dist/services/qa/topicDetector.js.map +1 -0
  447. package/dist/services/quickSync/index.d.ts +3 -0
  448. package/dist/services/quickSync/index.d.ts.map +1 -0
  449. package/dist/services/quickSync/index.js +7 -0
  450. package/dist/services/quickSync/index.js.map +1 -0
  451. package/dist/services/quickSync/quickSyncService.d.ts +70 -0
  452. package/dist/services/quickSync/quickSyncService.d.ts.map +1 -0
  453. package/dist/services/quickSync/quickSyncService.js +263 -0
  454. package/dist/services/quickSync/quickSyncService.js.map +1 -0
  455. package/dist/services/report/index.d.ts +3 -0
  456. package/dist/services/report/index.d.ts.map +1 -0
  457. package/dist/services/report/index.js +6 -0
  458. package/dist/services/report/index.js.map +1 -0
  459. package/dist/services/report/reportService.d.ts +131 -0
  460. package/dist/services/report/reportService.d.ts.map +1 -0
  461. package/dist/services/report/reportService.js +372 -0
  462. package/dist/services/report/reportService.js.map +1 -0
  463. package/dist/services/reverseSync/importSkillsService.d.ts +47 -0
  464. package/dist/services/reverseSync/importSkillsService.d.ts.map +1 -0
  465. package/dist/services/reverseSync/importSkillsService.js +362 -0
  466. package/dist/services/reverseSync/importSkillsService.js.map +1 -0
  467. package/dist/services/reverseSync/index.d.ts +12 -0
  468. package/dist/services/reverseSync/index.d.ts.map +1 -0
  469. package/dist/services/reverseSync/index.js +49 -0
  470. package/dist/services/reverseSync/index.js.map +1 -0
  471. package/dist/services/reverseSync/presets.d.ts +51 -0
  472. package/dist/services/reverseSync/presets.d.ts.map +1 -0
  473. package/dist/services/reverseSync/presets.js +77 -0
  474. package/dist/services/reverseSync/presets.js.map +1 -0
  475. package/dist/services/reverseSync/reverseQuickSyncService.d.ts +37 -0
  476. package/dist/services/reverseSync/reverseQuickSyncService.d.ts.map +1 -0
  477. package/dist/services/reverseSync/reverseQuickSyncService.js +265 -0
  478. package/dist/services/reverseSync/reverseQuickSyncService.js.map +1 -0
  479. package/dist/services/reverseSync/skillsDetector.d.ts +36 -0
  480. package/dist/services/reverseSync/skillsDetector.d.ts.map +1 -0
  481. package/dist/services/reverseSync/skillsDetector.js +287 -0
  482. package/dist/services/reverseSync/skillsDetector.js.map +1 -0
  483. package/dist/services/reverseSync/toolDetector.d.ts +36 -0
  484. package/dist/services/reverseSync/toolDetector.d.ts.map +1 -0
  485. package/dist/services/reverseSync/toolDetector.js +174 -0
  486. package/dist/services/reverseSync/toolDetector.js.map +1 -0
  487. package/dist/services/reverseSync/types.d.ts +203 -0
  488. package/dist/services/reverseSync/types.d.ts.map +1 -0
  489. package/dist/services/reverseSync/types.js +9 -0
  490. package/dist/services/reverseSync/types.js.map +1 -0
  491. package/dist/services/semantic/codebaseAnalyzer.d.ts +62 -0
  492. package/dist/services/semantic/codebaseAnalyzer.d.ts.map +1 -0
  493. package/dist/services/semantic/codebaseAnalyzer.js +1071 -0
  494. package/dist/services/semantic/codebaseAnalyzer.js.map +1 -0
  495. package/dist/services/semantic/contextBuilder.d.ts +86 -0
  496. package/dist/services/semantic/contextBuilder.d.ts.map +1 -0
  497. package/dist/services/semantic/contextBuilder.js +641 -0
  498. package/dist/services/semantic/contextBuilder.js.map +1 -0
  499. package/dist/services/semantic/contextCache.d.ts +67 -0
  500. package/dist/services/semantic/contextCache.d.ts.map +1 -0
  501. package/dist/services/semantic/contextCache.js +158 -0
  502. package/dist/services/semantic/contextCache.js.map +1 -0
  503. package/dist/services/semantic/index.d.ts +12 -0
  504. package/dist/services/semantic/index.d.ts.map +1 -0
  505. package/dist/services/semantic/index.js +33 -0
  506. package/dist/services/semantic/index.js.map +1 -0
  507. package/dist/services/semantic/lsp/index.d.ts +2 -0
  508. package/dist/services/semantic/lsp/index.d.ts.map +1 -0
  509. package/dist/services/semantic/lsp/index.js +6 -0
  510. package/dist/services/semantic/lsp/index.js.map +1 -0
  511. package/dist/services/semantic/lsp/lspLayer.d.ts +32 -0
  512. package/dist/services/semantic/lsp/lspLayer.d.ts.map +1 -0
  513. package/dist/services/semantic/lsp/lspLayer.js +378 -0
  514. package/dist/services/semantic/lsp/lspLayer.js.map +1 -0
  515. package/dist/services/semantic/treeSitter/index.d.ts +2 -0
  516. package/dist/services/semantic/treeSitter/index.d.ts.map +1 -0
  517. package/dist/services/semantic/treeSitter/index.js +6 -0
  518. package/dist/services/semantic/treeSitter/index.js.map +1 -0
  519. package/dist/services/semantic/treeSitter/treeSitterLayer.d.ts +37 -0
  520. package/dist/services/semantic/treeSitter/treeSitterLayer.d.ts.map +1 -0
  521. package/dist/services/semantic/treeSitter/treeSitterLayer.js +518 -0
  522. package/dist/services/semantic/treeSitter/treeSitterLayer.js.map +1 -0
  523. package/dist/services/semantic/types.d.ts +172 -0
  524. package/dist/services/semantic/types.d.ts.map +1 -0
  525. package/dist/services/semantic/types.js +33 -0
  526. package/dist/services/semantic/types.js.map +1 -0
  527. package/dist/services/shared/contentTypeRegistry.d.ts +66 -0
  528. package/dist/services/shared/contentTypeRegistry.d.ts.map +1 -0
  529. package/dist/services/shared/contentTypeRegistry.js +113 -0
  530. package/dist/services/shared/contentTypeRegistry.js.map +1 -0
  531. package/dist/services/shared/contextRootResolver.d.ts +57 -0
  532. package/dist/services/shared/contextRootResolver.d.ts.map +1 -0
  533. package/dist/services/shared/contextRootResolver.js +102 -0
  534. package/dist/services/shared/contextRootResolver.js.map +1 -0
  535. package/dist/services/shared/globPatterns.d.ts +48 -0
  536. package/dist/services/shared/globPatterns.d.ts.map +1 -0
  537. package/dist/services/shared/globPatterns.js +110 -0
  538. package/dist/services/shared/globPatterns.js.map +1 -0
  539. package/dist/services/shared/index.d.ts +13 -0
  540. package/dist/services/shared/index.d.ts.map +1 -0
  541. package/dist/services/shared/index.js +84 -0
  542. package/dist/services/shared/index.js.map +1 -0
  543. package/dist/services/shared/pathHelpers.d.ts +85 -0
  544. package/dist/services/shared/pathHelpers.d.ts.map +1 -0
  545. package/dist/services/shared/pathHelpers.js +187 -0
  546. package/dist/services/shared/pathHelpers.js.map +1 -0
  547. package/dist/services/shared/toolRegistry.d.ts +135 -0
  548. package/dist/services/shared/toolRegistry.d.ts.map +1 -0
  549. package/dist/services/shared/toolRegistry.js +545 -0
  550. package/dist/services/shared/toolRegistry.js.map +1 -0
  551. package/dist/services/shared/types.d.ts +68 -0
  552. package/dist/services/shared/types.d.ts.map +1 -0
  553. package/dist/services/shared/types.js +44 -0
  554. package/dist/services/shared/types.js.map +1 -0
  555. package/dist/services/shared/uiHelpers.d.ts +70 -0
  556. package/dist/services/shared/uiHelpers.d.ts.map +1 -0
  557. package/dist/services/shared/uiHelpers.js +131 -0
  558. package/dist/services/shared/uiHelpers.js.map +1 -0
  559. package/dist/services/stack/index.d.ts +6 -0
  560. package/dist/services/stack/index.d.ts.map +1 -0
  561. package/dist/services/stack/index.js +25 -0
  562. package/dist/services/stack/index.js.map +1 -0
  563. package/dist/services/stack/projectTypeClassifier.d.ts +59 -0
  564. package/dist/services/stack/projectTypeClassifier.d.ts.map +1 -0
  565. package/dist/services/stack/projectTypeClassifier.js +242 -0
  566. package/dist/services/stack/projectTypeClassifier.js.map +1 -0
  567. package/dist/services/stack/scaffoldFilter.d.ts +75 -0
  568. package/dist/services/stack/scaffoldFilter.d.ts.map +1 -0
  569. package/dist/services/stack/scaffoldFilter.js +222 -0
  570. package/dist/services/stack/scaffoldFilter.js.map +1 -0
  571. package/dist/services/stack/stackDetector.d.ts +43 -0
  572. package/dist/services/stack/stackDetector.d.ts.map +1 -0
  573. package/dist/services/stack/stackDetector.js +406 -0
  574. package/dist/services/stack/stackDetector.js.map +1 -0
  575. package/dist/services/state/index.d.ts +2 -0
  576. package/dist/services/state/index.d.ts.map +1 -0
  577. package/dist/services/state/index.js +6 -0
  578. package/dist/services/state/index.js.map +1 -0
  579. package/dist/services/state/stateDetector.d.ts +53 -0
  580. package/dist/services/state/stateDetector.d.ts.map +1 -0
  581. package/dist/services/state/stateDetector.js +189 -0
  582. package/dist/services/state/stateDetector.js.map +1 -0
  583. package/dist/services/sync/index.d.ts +6 -0
  584. package/dist/services/sync/index.d.ts.map +1 -0
  585. package/dist/services/sync/index.js +16 -0
  586. package/dist/services/sync/index.js.map +1 -0
  587. package/dist/services/sync/markdownReferenceHandler.d.ts +3 -0
  588. package/dist/services/sync/markdownReferenceHandler.d.ts.map +1 -0
  589. package/dist/services/sync/markdownReferenceHandler.js +133 -0
  590. package/dist/services/sync/markdownReferenceHandler.js.map +1 -0
  591. package/dist/services/sync/presets.d.ts +9 -0
  592. package/dist/services/sync/presets.d.ts.map +1 -0
  593. package/dist/services/sync/presets.js +52 -0
  594. package/dist/services/sync/presets.js.map +1 -0
  595. package/dist/services/sync/symlinkHandler.d.ts +7 -0
  596. package/dist/services/sync/symlinkHandler.d.ts.map +1 -0
  597. package/dist/services/sync/symlinkHandler.js +129 -0
  598. package/dist/services/sync/symlinkHandler.js.map +1 -0
  599. package/dist/services/sync/syncService.d.ts +23 -0
  600. package/dist/services/sync/syncService.d.ts.map +1 -0
  601. package/dist/services/sync/syncService.js +240 -0
  602. package/dist/services/sync/syncService.js.map +1 -0
  603. package/dist/services/sync/types.d.ts +62 -0
  604. package/dist/services/sync/types.d.ts.map +1 -0
  605. package/dist/services/sync/types.js +3 -0
  606. package/dist/services/sync/types.js.map +1 -0
  607. package/dist/services/workflow/autoAdvance.d.ts +38 -0
  608. package/dist/services/workflow/autoAdvance.d.ts.map +1 -0
  609. package/dist/services/workflow/autoAdvance.js +219 -0
  610. package/dist/services/workflow/autoAdvance.js.map +1 -0
  611. package/dist/services/workflow/index.d.ts +6 -0
  612. package/dist/services/workflow/index.d.ts.map +1 -0
  613. package/dist/services/workflow/index.js +11 -0
  614. package/dist/services/workflow/index.js.map +1 -0
  615. package/dist/services/workflow/workflowService.d.ts +151 -0
  616. package/dist/services/workflow/workflowService.d.ts.map +1 -0
  617. package/dist/services/workflow/workflowService.js +283 -0
  618. package/dist/services/workflow/workflowService.js.map +1 -0
  619. package/dist/types/scaffoldFrontmatter.d.ts +145 -0
  620. package/dist/types/scaffoldFrontmatter.d.ts.map +1 -0
  621. package/dist/types/scaffoldFrontmatter.js +172 -0
  622. package/dist/types/scaffoldFrontmatter.js.map +1 -0
  623. package/dist/types.d.ts +61 -0
  624. package/dist/types.d.ts.map +1 -0
  625. package/dist/types.js +3 -0
  626. package/dist/types.js.map +1 -0
  627. package/dist/utils/cliUI.d.ts +26 -0
  628. package/dist/utils/cliUI.d.ts.map +1 -0
  629. package/dist/utils/cliUI.js +216 -0
  630. package/dist/utils/cliUI.js.map +1 -0
  631. package/dist/utils/fileMapper.d.ts +13 -0
  632. package/dist/utils/fileMapper.d.ts.map +1 -0
  633. package/dist/utils/fileMapper.js +165 -0
  634. package/dist/utils/fileMapper.js.map +1 -0
  635. package/dist/utils/frontMatter.d.ts +104 -0
  636. package/dist/utils/frontMatter.d.ts.map +1 -0
  637. package/dist/utils/frontMatter.js +325 -0
  638. package/dist/utils/frontMatter.js.map +1 -0
  639. package/dist/utils/gitService.d.ts +76 -0
  640. package/dist/utils/gitService.d.ts.map +1 -0
  641. package/dist/utils/gitService.js +564 -0
  642. package/dist/utils/gitService.js.map +1 -0
  643. package/dist/utils/gitignoreManager.d.ts +61 -0
  644. package/dist/utils/gitignoreManager.d.ts.map +1 -0
  645. package/dist/utils/gitignoreManager.js +171 -0
  646. package/dist/utils/gitignoreManager.js.map +1 -0
  647. package/dist/utils/i18n.d.ts +530 -0
  648. package/dist/utils/i18n.d.ts.map +1 -0
  649. package/dist/utils/i18n.js +1179 -0
  650. package/dist/utils/i18n.js.map +1 -0
  651. package/dist/utils/pathSecurity.d.ts +55 -0
  652. package/dist/utils/pathSecurity.d.ts.map +1 -0
  653. package/dist/utils/pathSecurity.js +132 -0
  654. package/dist/utils/pathSecurity.js.map +1 -0
  655. package/dist/utils/prompts/configSummary.d.ts +7 -0
  656. package/dist/utils/prompts/configSummary.d.ts.map +1 -0
  657. package/dist/utils/prompts/configSummary.js +35 -0
  658. package/dist/utils/prompts/configSummary.js.map +1 -0
  659. package/dist/utils/prompts/index.d.ts +27 -0
  660. package/dist/utils/prompts/index.d.ts.map +1 -0
  661. package/dist/utils/prompts/index.js +114 -0
  662. package/dist/utils/prompts/index.js.map +1 -0
  663. package/dist/utils/prompts/smartDefaults.d.ts +15 -0
  664. package/dist/utils/prompts/smartDefaults.d.ts.map +1 -0
  665. package/dist/utils/prompts/smartDefaults.js +105 -0
  666. package/dist/utils/prompts/smartDefaults.js.map +1 -0
  667. package/dist/utils/prompts/types.d.ts +38 -0
  668. package/dist/utils/prompts/types.d.ts.map +1 -0
  669. package/dist/utils/prompts/types.js +3 -0
  670. package/dist/utils/prompts/types.js.map +1 -0
  671. package/dist/utils/splashScreen.d.ts +14 -0
  672. package/dist/utils/splashScreen.d.ts.map +1 -0
  673. package/dist/utils/splashScreen.js +106 -0
  674. package/dist/utils/splashScreen.js.map +1 -0
  675. package/dist/utils/theme.d.ts +69 -0
  676. package/dist/utils/theme.d.ts.map +1 -0
  677. package/dist/utils/theme.js +97 -0
  678. package/dist/utils/theme.js.map +1 -0
  679. package/dist/utils/themedPrompt.d.ts +46 -0
  680. package/dist/utils/themedPrompt.d.ts.map +1 -0
  681. package/dist/utils/themedPrompt.js +47 -0
  682. package/dist/utils/themedPrompt.js.map +1 -0
  683. package/dist/utils/versionChecker.d.ts +15 -0
  684. package/dist/utils/versionChecker.d.ts.map +1 -0
  685. package/dist/utils/versionChecker.js +49 -0
  686. package/dist/utils/versionChecker.js.map +1 -0
  687. package/dist/version.d.ts +8 -0
  688. package/dist/version.d.ts.map +1 -0
  689. package/dist/version.js +15 -0
  690. package/dist/version.js.map +1 -0
  691. package/dist/workflow/agents/agentRegistry.d.ts +82 -0
  692. package/dist/workflow/agents/agentRegistry.d.ts.map +1 -0
  693. package/dist/workflow/agents/agentRegistry.js +205 -0
  694. package/dist/workflow/agents/agentRegistry.js.map +1 -0
  695. package/dist/workflow/agents/index.d.ts +7 -0
  696. package/dist/workflow/agents/index.d.ts.map +1 -0
  697. package/dist/workflow/agents/index.js +14 -0
  698. package/dist/workflow/agents/index.js.map +1 -0
  699. package/dist/workflow/collaboration.d.ts +110 -0
  700. package/dist/workflow/collaboration.d.ts.map +1 -0
  701. package/dist/workflow/collaboration.js +301 -0
  702. package/dist/workflow/collaboration.js.map +1 -0
  703. package/dist/workflow/errors.d.ts +48 -0
  704. package/dist/workflow/errors.d.ts.map +1 -0
  705. package/dist/workflow/errors.js +52 -0
  706. package/dist/workflow/errors.js.map +1 -0
  707. package/dist/workflow/gates/gateChecker.d.ts +93 -0
  708. package/dist/workflow/gates/gateChecker.d.ts.map +1 -0
  709. package/dist/workflow/gates/gateChecker.js +197 -0
  710. package/dist/workflow/gates/gateChecker.js.map +1 -0
  711. package/dist/workflow/gates/index.d.ts +7 -0
  712. package/dist/workflow/gates/index.d.ts.map +1 -0
  713. package/dist/workflow/gates/index.js +13 -0
  714. package/dist/workflow/gates/index.js.map +1 -0
  715. package/dist/workflow/index.d.ts +27 -0
  716. package/dist/workflow/index.d.ts.map +1 -0
  717. package/dist/workflow/index.js +135 -0
  718. package/dist/workflow/index.js.map +1 -0
  719. package/dist/workflow/orchestration/agentOrchestrator.d.ts +68 -0
  720. package/dist/workflow/orchestration/agentOrchestrator.d.ts.map +1 -0
  721. package/dist/workflow/orchestration/agentOrchestrator.js +280 -0
  722. package/dist/workflow/orchestration/agentOrchestrator.js.map +1 -0
  723. package/dist/workflow/orchestration/documentLinker.d.ts +100 -0
  724. package/dist/workflow/orchestration/documentLinker.d.ts.map +1 -0
  725. package/dist/workflow/orchestration/documentLinker.js +266 -0
  726. package/dist/workflow/orchestration/documentLinker.js.map +1 -0
  727. package/dist/workflow/orchestration/index.d.ts +9 -0
  728. package/dist/workflow/orchestration/index.d.ts.map +1 -0
  729. package/dist/workflow/orchestration/index.js +25 -0
  730. package/dist/workflow/orchestration/index.js.map +1 -0
  731. package/dist/workflow/orchestrator.d.ts +188 -0
  732. package/dist/workflow/orchestrator.d.ts.map +1 -0
  733. package/dist/workflow/orchestrator.js +506 -0
  734. package/dist/workflow/orchestrator.js.map +1 -0
  735. package/dist/workflow/phases.d.ts +64 -0
  736. package/dist/workflow/phases.d.ts.map +1 -0
  737. package/dist/workflow/phases.js +151 -0
  738. package/dist/workflow/phases.js.map +1 -0
  739. package/dist/workflow/plans/index.d.ts +8 -0
  740. package/dist/workflow/plans/index.d.ts.map +1 -0
  741. package/dist/workflow/plans/index.js +27 -0
  742. package/dist/workflow/plans/index.js.map +1 -0
  743. package/dist/workflow/plans/planLinker.d.ts +195 -0
  744. package/dist/workflow/plans/planLinker.d.ts.map +1 -0
  745. package/dist/workflow/plans/planLinker.js +1018 -0
  746. package/dist/workflow/plans/planLinker.js.map +1 -0
  747. package/dist/workflow/plans/types.d.ts +231 -0
  748. package/dist/workflow/plans/types.d.ts.map +1 -0
  749. package/dist/workflow/plans/types.js +25 -0
  750. package/dist/workflow/plans/types.js.map +1 -0
  751. package/dist/workflow/prevcConfig.d.ts +27 -0
  752. package/dist/workflow/prevcConfig.d.ts.map +1 -0
  753. package/dist/workflow/prevcConfig.js +153 -0
  754. package/dist/workflow/prevcConfig.js.map +1 -0
  755. package/dist/workflow/roles.d.ts +50 -0
  756. package/dist/workflow/roles.d.ts.map +1 -0
  757. package/dist/workflow/roles.js +118 -0
  758. package/dist/workflow/roles.js.map +1 -0
  759. package/dist/workflow/scaling.d.ts +45 -0
  760. package/dist/workflow/scaling.d.ts.map +1 -0
  761. package/dist/workflow/scaling.js +215 -0
  762. package/dist/workflow/scaling.js.map +1 -0
  763. package/dist/workflow/skills/frontmatter.d.ts +23 -0
  764. package/dist/workflow/skills/frontmatter.d.ts.map +1 -0
  765. package/dist/workflow/skills/frontmatter.js +101 -0
  766. package/dist/workflow/skills/frontmatter.js.map +1 -0
  767. package/dist/workflow/skills/index.d.ts +10 -0
  768. package/dist/workflow/skills/index.d.ts.map +1 -0
  769. package/dist/workflow/skills/index.js +22 -0
  770. package/dist/workflow/skills/index.js.map +1 -0
  771. package/dist/workflow/skills/skillRegistry.d.ts +67 -0
  772. package/dist/workflow/skills/skillRegistry.d.ts.map +1 -0
  773. package/dist/workflow/skills/skillRegistry.js +276 -0
  774. package/dist/workflow/skills/skillRegistry.js.map +1 -0
  775. package/dist/workflow/skills/skillTemplates.d.ts +20 -0
  776. package/dist/workflow/skills/skillTemplates.d.ts.map +1 -0
  777. package/dist/workflow/skills/skillTemplates.js +111 -0
  778. package/dist/workflow/skills/skillTemplates.js.map +1 -0
  779. package/dist/workflow/skills/types.d.ts +72 -0
  780. package/dist/workflow/skills/types.d.ts.map +1 -0
  781. package/dist/workflow/skills/types.js +48 -0
  782. package/dist/workflow/skills/types.js.map +1 -0
  783. package/dist/workflow/status/statusManager.d.ts +137 -0
  784. package/dist/workflow/status/statusManager.d.ts.map +1 -0
  785. package/dist/workflow/status/statusManager.js +932 -0
  786. package/dist/workflow/status/statusManager.js.map +1 -0
  787. package/dist/workflow/status/templates.d.ts +49 -0
  788. package/dist/workflow/status/templates.d.ts.map +1 -0
  789. package/dist/workflow/status/templates.js +162 -0
  790. package/dist/workflow/status/templates.js.map +1 -0
  791. package/dist/workflow/types.d.ts +314 -0
  792. package/dist/workflow/types.d.ts.map +1 -0
  793. package/dist/workflow/types.js +24 -0
  794. package/dist/workflow/types.js.map +1 -0
  795. package/package.json +85 -0
  796. package/prompts/update_plan_prompt.md +41 -0
  797. package/prompts/update_scaffold_prompt.md +27 -0
@@ -0,0 +1,1071 @@
1
+ "use strict";
2
+ /**
3
+ * CodebaseAnalyzer - Main orchestrator for semantic code analysis
4
+ *
5
+ * Combines Tree-sitter for fast syntactic analysis with optional LSP
6
+ * for deeper semantic understanding.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.CodebaseAnalyzer = void 0;
43
+ const glob_1 = require("glob");
44
+ const path = __importStar(require("path"));
45
+ const fs = __importStar(require("fs/promises"));
46
+ const treeSitterLayer_1 = require("./treeSitter/treeSitterLayer");
47
+ const lspLayer_1 = require("./lsp/lspLayer");
48
+ const types_1 = require("./types");
49
+ const DEFAULT_OPTIONS = {
50
+ useLSP: false,
51
+ languages: ['typescript', 'javascript', 'python', 'go'],
52
+ exclude: types_1.DEFAULT_EXCLUDE_PATTERNS,
53
+ include: [],
54
+ maxFiles: 5000,
55
+ cacheEnabled: true,
56
+ };
57
+ class CodebaseAnalyzer {
58
+ constructor(options = {}) {
59
+ this.treeSitter = new treeSitterLayer_1.TreeSitterLayer();
60
+ this.options = { ...DEFAULT_OPTIONS, ...options };
61
+ // Create LSPLayer if LSP mode is enabled
62
+ if (this.options.useLSP) {
63
+ this.lspLayer = new lspLayer_1.LSPLayer();
64
+ }
65
+ }
66
+ async analyze(projectPath) {
67
+ const startTime = Date.now();
68
+ // 1. Find all code files
69
+ const files = await this.findCodeFiles(projectPath);
70
+ // 2. Analyze with Tree-sitter
71
+ const fileAnalyses = await this.analyzeFiles(files);
72
+ // 3. Build base context
73
+ const context = this.buildBaseContext(fileAnalyses, projectPath);
74
+ // 4. Enhance with LSP if enabled (adds type info, references)
75
+ if (this.lspLayer) {
76
+ await this.enhanceWithLSP(context, projectPath);
77
+ }
78
+ // 5. Detect architecture and patterns
79
+ context.architecture = this.detectArchitecture(fileAnalyses, projectPath);
80
+ // 6. Calculate stats
81
+ context.stats.analysisTimeMs = Date.now() - startTime;
82
+ return context;
83
+ }
84
+ async findCodeFiles(projectPath) {
85
+ const extensions = Object.keys(types_1.LANGUAGE_EXTENSIONS);
86
+ const patterns = extensions.map((ext) => `**/*${ext}`);
87
+ const ignorePatterns = this.options.exclude.map((p) => `**/${p}/**`);
88
+ const allFiles = [];
89
+ for (const pattern of patterns) {
90
+ try {
91
+ const matches = await (0, glob_1.glob)(pattern, {
92
+ cwd: projectPath,
93
+ ignore: ignorePatterns,
94
+ absolute: true,
95
+ nodir: true,
96
+ });
97
+ allFiles.push(...matches);
98
+ }
99
+ catch {
100
+ // Ignore glob errors for individual patterns
101
+ }
102
+ }
103
+ // Apply include filter if specified
104
+ let filteredFiles = allFiles;
105
+ if (this.options.include.length > 0) {
106
+ filteredFiles = allFiles.filter((file) => this.options.include.some((pattern) => file.includes(pattern)));
107
+ }
108
+ // Limit number of files
109
+ return filteredFiles.slice(0, this.options.maxFiles);
110
+ }
111
+ async analyzeFiles(files) {
112
+ const analyses = new Map();
113
+ const batchSize = 50;
114
+ for (let i = 0; i < files.length; i += batchSize) {
115
+ const batch = files.slice(i, i + batchSize);
116
+ const results = await Promise.all(batch.map((file) => this.treeSitter.analyzeFile(file)));
117
+ for (const analysis of results) {
118
+ analyses.set(analysis.filePath, analysis);
119
+ }
120
+ }
121
+ return analyses;
122
+ }
123
+ buildBaseContext(analyses, projectPath) {
124
+ const symbols = {
125
+ classes: [],
126
+ interfaces: [],
127
+ functions: [],
128
+ types: [],
129
+ enums: [],
130
+ };
131
+ const dependencyGraph = new Map();
132
+ const reverseDependencyGraph = new Map();
133
+ const languageCount = {};
134
+ for (const [file, analysis] of analyses) {
135
+ // Count by language
136
+ const ext = path.extname(file);
137
+ languageCount[ext] = (languageCount[ext] || 0) + 1;
138
+ // Categorize symbols
139
+ for (const symbol of analysis.symbols) {
140
+ switch (symbol.kind) {
141
+ case 'class':
142
+ symbols.classes.push(symbol);
143
+ break;
144
+ case 'interface':
145
+ symbols.interfaces.push(symbol);
146
+ break;
147
+ case 'function':
148
+ symbols.functions.push(symbol);
149
+ break;
150
+ case 'type':
151
+ symbols.types.push(symbol);
152
+ break;
153
+ case 'enum':
154
+ symbols.enums.push(symbol);
155
+ break;
156
+ }
157
+ }
158
+ // Build dependency graph
159
+ const importedFiles = analysis.imports
160
+ .map((imp) => this.resolveImportPath(file, imp.source, projectPath))
161
+ .filter((f) => f !== null);
162
+ dependencyGraph.set(file, importedFiles);
163
+ for (const importedFile of importedFiles) {
164
+ if (!reverseDependencyGraph.has(importedFile)) {
165
+ reverseDependencyGraph.set(importedFile, []);
166
+ }
167
+ reverseDependencyGraph.get(importedFile).push(file);
168
+ }
169
+ }
170
+ return {
171
+ symbols,
172
+ dependencies: {
173
+ graph: dependencyGraph,
174
+ reverseGraph: reverseDependencyGraph,
175
+ },
176
+ architecture: {
177
+ layers: [],
178
+ patterns: [],
179
+ entryPoints: [],
180
+ publicAPI: [],
181
+ },
182
+ stats: {
183
+ totalFiles: analyses.size,
184
+ totalSymbols: Object.values(symbols).flat().length,
185
+ languageBreakdown: languageCount,
186
+ analysisTimeMs: 0,
187
+ },
188
+ };
189
+ }
190
+ resolveImportPath(fromFile, importSource, projectPath) {
191
+ // Skip external packages
192
+ if (!importSource.startsWith('.') && !importSource.startsWith('/')) {
193
+ return null;
194
+ }
195
+ const dir = path.dirname(fromFile);
196
+ const resolved = path.resolve(dir, importSource);
197
+ // Try common extensions
198
+ const extensions = ['.ts', '.tsx', '.js', '.jsx', '/index.ts', '/index.js', '.py', '.go'];
199
+ for (const ext of extensions) {
200
+ const withExt = resolved + ext;
201
+ if (this.fileExistsSync(withExt)) {
202
+ return withExt;
203
+ }
204
+ }
205
+ // Try without extension (might already have it)
206
+ if (this.fileExistsSync(resolved)) {
207
+ return resolved;
208
+ }
209
+ return null;
210
+ }
211
+ fileExistsSync(filePath) {
212
+ try {
213
+ require('fs').accessSync(filePath);
214
+ return true;
215
+ }
216
+ catch {
217
+ return false;
218
+ }
219
+ }
220
+ detectArchitecture(analyses, projectPath) {
221
+ const layers = this.detectLayers(analyses, projectPath);
222
+ const patterns = this.detectPatterns(analyses);
223
+ const entryPoints = this.findEntryPoints(analyses, projectPath);
224
+ const publicAPI = this.findPublicAPI(analyses);
225
+ // Calculate layer dependencies
226
+ this.calculateLayerDependencies(layers, analyses, projectPath);
227
+ return { layers, patterns, entryPoints, publicAPI };
228
+ }
229
+ detectLayers(analyses, projectPath) {
230
+ const layerHeuristics = [
231
+ {
232
+ name: 'Services',
233
+ patterns: [/services?/i, /use-?cases?/i, /application/i],
234
+ description: 'Business logic and orchestration',
235
+ },
236
+ {
237
+ name: 'Controllers',
238
+ patterns: [/controllers?/i, /handlers?/i, /routes?/i, /api/i],
239
+ description: 'Request handling and routing',
240
+ },
241
+ {
242
+ name: 'Models',
243
+ patterns: [/models?/i, /entities/i, /domain/i, /schemas?/i],
244
+ description: 'Data structures and domain objects',
245
+ },
246
+ {
247
+ name: 'Repositories',
248
+ patterns: [/repositor/i, /data/i, /database/i, /persistence/i],
249
+ description: 'Data access and persistence',
250
+ },
251
+ {
252
+ name: 'Utils',
253
+ patterns: [/utils?/i, /helpers?/i, /lib/i, /common/i, /shared/i],
254
+ description: 'Shared utilities and helpers',
255
+ },
256
+ {
257
+ name: 'Generators',
258
+ patterns: [/generators?/i, /builders?/i, /factories?/i],
259
+ description: 'Content and object generation',
260
+ },
261
+ {
262
+ name: 'Components',
263
+ patterns: [/components?/i, /views?/i, /pages?/i, /screens?/i],
264
+ description: 'UI components and views',
265
+ },
266
+ {
267
+ name: 'Config',
268
+ patterns: [/config/i, /settings?/i, /constants?/i],
269
+ description: 'Configuration and constants',
270
+ },
271
+ ];
272
+ const layers = [];
273
+ const filesByLayer = new Map();
274
+ for (const [file] of analyses) {
275
+ const relativePath = path.relative(projectPath, file);
276
+ for (const heuristic of layerHeuristics) {
277
+ if (heuristic.patterns.some((p) => p.test(relativePath))) {
278
+ if (!filesByLayer.has(heuristic.name)) {
279
+ filesByLayer.set(heuristic.name, []);
280
+ }
281
+ filesByLayer.get(heuristic.name).push(file);
282
+ break;
283
+ }
284
+ }
285
+ }
286
+ for (const [layerName, files] of filesByLayer) {
287
+ const heuristic = layerHeuristics.find((h) => h.name === layerName);
288
+ const layerSymbols = [];
289
+ const directories = new Set();
290
+ for (const file of files) {
291
+ const analysis = analyses.get(file);
292
+ if (analysis) {
293
+ layerSymbols.push(...analysis.symbols);
294
+ directories.add(path.dirname(path.relative(projectPath, file)));
295
+ }
296
+ }
297
+ if (layerSymbols.length > 0) {
298
+ layers.push({
299
+ name: layerName,
300
+ description: heuristic.description,
301
+ directories: [...directories],
302
+ symbols: layerSymbols,
303
+ dependsOn: [],
304
+ });
305
+ }
306
+ }
307
+ return layers;
308
+ }
309
+ detectPatterns(analyses) {
310
+ const patterns = [];
311
+ const allSymbols = [...analyses.values()].flatMap((a) => a.symbols);
312
+ // Factory Pattern
313
+ const factories = allSymbols.filter((s) => /Factory$/i.test(s.name) && s.kind === 'class');
314
+ if (factories.length > 0) {
315
+ patterns.push({
316
+ name: 'Factory',
317
+ confidence: 0.9,
318
+ locations: factories.map((s) => ({ file: s.location.file, symbol: s.name })),
319
+ description: 'Creates instances of related objects without specifying concrete classes',
320
+ });
321
+ }
322
+ // Singleton Pattern
323
+ const singletons = allSymbols.filter((s) => s.kind === 'class' && /Singleton|Instance/i.test(s.name));
324
+ if (singletons.length > 0) {
325
+ patterns.push({
326
+ name: 'Singleton',
327
+ confidence: 0.7,
328
+ locations: singletons.map((s) => ({ file: s.location.file, symbol: s.name })),
329
+ description: 'Ensures a class has only one instance',
330
+ });
331
+ }
332
+ // Repository Pattern
333
+ const repositories = allSymbols.filter((s) => /Repository$/i.test(s.name) && (s.kind === 'class' || s.kind === 'interface'));
334
+ if (repositories.length > 0) {
335
+ patterns.push({
336
+ name: 'Repository',
337
+ confidence: 0.9,
338
+ locations: repositories.map((s) => ({ file: s.location.file, symbol: s.name })),
339
+ description: 'Abstracts data access logic',
340
+ });
341
+ }
342
+ // Service Layer Pattern
343
+ const services = allSymbols.filter((s) => /Service$/i.test(s.name) && s.kind === 'class');
344
+ if (services.length > 0) {
345
+ patterns.push({
346
+ name: 'Service Layer',
347
+ confidence: 0.85,
348
+ locations: services.map((s) => ({ file: s.location.file, symbol: s.name })),
349
+ description: 'Encapsulates business logic in service classes',
350
+ });
351
+ }
352
+ // Controller Pattern
353
+ const controllers = allSymbols.filter((s) => /Controller$/i.test(s.name) && s.kind === 'class');
354
+ if (controllers.length > 0) {
355
+ patterns.push({
356
+ name: 'Controller',
357
+ confidence: 0.9,
358
+ locations: controllers.map((s) => ({ file: s.location.file, symbol: s.name })),
359
+ description: 'Handles incoming requests and returns responses',
360
+ });
361
+ }
362
+ // Builder Pattern
363
+ const builders = allSymbols.filter((s) => /Builder$/i.test(s.name) && s.kind === 'class');
364
+ if (builders.length > 0) {
365
+ patterns.push({
366
+ name: 'Builder',
367
+ confidence: 0.85,
368
+ locations: builders.map((s) => ({ file: s.location.file, symbol: s.name })),
369
+ description: 'Separates object construction from its representation',
370
+ });
371
+ }
372
+ // Observer Pattern (event emitters)
373
+ const observers = allSymbols.filter((s) => (s.kind === 'class' || s.kind === 'interface') &&
374
+ /Observer|Listener|Emitter|Handler$/i.test(s.name));
375
+ if (observers.length > 0) {
376
+ patterns.push({
377
+ name: 'Observer',
378
+ confidence: 0.75,
379
+ locations: observers.map((s) => ({ file: s.location.file, symbol: s.name })),
380
+ description: 'Defines a subscription mechanism to notify multiple objects',
381
+ });
382
+ }
383
+ return patterns;
384
+ }
385
+ findEntryPoints(analyses, projectPath) {
386
+ const entryPoints = [];
387
+ const entryPatterns = [
388
+ /^(index|main|app|server|cli)\.(ts|js|tsx|jsx)$/,
389
+ /src\/(index|main|app)\.(ts|js)$/,
390
+ /^bin\//,
391
+ ];
392
+ for (const [file] of analyses) {
393
+ const relativePath = path.relative(projectPath, file);
394
+ const basename = path.basename(file);
395
+ if (entryPatterns.some((p) => p.test(basename) || p.test(relativePath))) {
396
+ entryPoints.push(relativePath);
397
+ }
398
+ }
399
+ return entryPoints;
400
+ }
401
+ findPublicAPI(analyses) {
402
+ const publicSymbols = [];
403
+ for (const [, analysis] of analyses) {
404
+ for (const symbol of analysis.symbols) {
405
+ if (symbol.exported &&
406
+ (symbol.kind === 'class' ||
407
+ symbol.kind === 'interface' ||
408
+ symbol.kind === 'function' ||
409
+ symbol.kind === 'type')) {
410
+ publicSymbols.push(symbol);
411
+ }
412
+ }
413
+ }
414
+ // Sort by name for consistency
415
+ return publicSymbols.sort((a, b) => a.name.localeCompare(b.name));
416
+ }
417
+ calculateLayerDependencies(layers, analyses, projectPath) {
418
+ const fileToLayer = new Map();
419
+ for (const layer of layers) {
420
+ for (const dir of layer.directories) {
421
+ for (const [file] of analyses) {
422
+ const relFile = path.relative(projectPath, file);
423
+ if (relFile.startsWith(dir)) {
424
+ fileToLayer.set(file, layer.name);
425
+ }
426
+ }
427
+ }
428
+ }
429
+ for (const layer of layers) {
430
+ const dependsOn = new Set();
431
+ for (const symbol of layer.symbols) {
432
+ const file = symbol.location.file;
433
+ const analysis = analyses.get(file);
434
+ if (!analysis)
435
+ continue;
436
+ for (const imp of analysis.imports) {
437
+ const resolved = this.resolveImportPath(file, imp.source, projectPath);
438
+ if (resolved) {
439
+ const depLayer = fileToLayer.get(resolved);
440
+ if (depLayer && depLayer !== layer.name) {
441
+ dependsOn.add(depLayer);
442
+ }
443
+ }
444
+ }
445
+ }
446
+ layer.dependsOn = [...dependsOn];
447
+ }
448
+ }
449
+ /**
450
+ * Get a summary suitable for documentation generation
451
+ */
452
+ getSummary(context, projectPath) {
453
+ const { symbols, architecture, stats } = context;
454
+ const lines = [
455
+ `## Codebase Analysis Summary\n`,
456
+ `**Total Files**: ${stats.totalFiles}`,
457
+ `**Total Symbols**: ${stats.totalSymbols}`,
458
+ `**Analysis Time**: ${stats.analysisTimeMs}ms\n`,
459
+ `### Language Breakdown\n`,
460
+ ];
461
+ for (const [ext, count] of Object.entries(stats.languageBreakdown)) {
462
+ lines.push(`- ${ext}: ${count} files`);
463
+ }
464
+ if (architecture.layers.length > 0) {
465
+ lines.push(`\n### Architecture Layers\n`);
466
+ for (const layer of architecture.layers) {
467
+ const symbolCount = layer.symbols.length;
468
+ const deps = layer.dependsOn.length > 0 ? ` → ${layer.dependsOn.join(', ')}` : '';
469
+ lines.push(`- **${layer.name}** (${symbolCount} symbols)${deps}`);
470
+ lines.push(` - ${layer.description}`);
471
+ }
472
+ }
473
+ if (architecture.patterns.length > 0) {
474
+ lines.push(`\n### Detected Patterns\n`);
475
+ for (const pattern of architecture.patterns) {
476
+ const confidence = Math.round(pattern.confidence * 100);
477
+ lines.push(`- **${pattern.name}** (${confidence}% confidence): ${pattern.locations.length} occurrences`);
478
+ }
479
+ }
480
+ if (architecture.entryPoints.length > 0) {
481
+ lines.push(`\n### Entry Points\n`);
482
+ for (const ep of architecture.entryPoints) {
483
+ lines.push(`- \`${ep}\``);
484
+ }
485
+ }
486
+ return lines.join('\n');
487
+ }
488
+ clearCache() {
489
+ this.treeSitter.clearCache();
490
+ }
491
+ /**
492
+ * Shutdown LSP servers gracefully
493
+ */
494
+ async shutdown() {
495
+ if (this.lspLayer) {
496
+ await this.lspLayer.shutdown();
497
+ }
498
+ }
499
+ /**
500
+ * Enhance Tree-sitter analysis with LSP semantic information
501
+ * Adds type info, references, and implementations to key symbols
502
+ */
503
+ async enhanceWithLSP(context, projectPath) {
504
+ const allSymbols = [
505
+ ...context.symbols.classes,
506
+ ...context.symbols.interfaces,
507
+ ...context.symbols.functions,
508
+ ...context.symbols.types,
509
+ ];
510
+ // Prioritize symbols to enhance (exported and important ones first)
511
+ const prioritizedSymbols = allSymbols
512
+ .filter((s) => s.exported)
513
+ .slice(0, 100); // Limit to avoid excessive LSP calls
514
+ for (const symbol of prioritizedSymbols) {
515
+ try {
516
+ // Get type information via LSP hover
517
+ const typeInfo = await this.lspLayer.getTypeInfo(symbol.location.file, symbol.location.line, symbol.location.column || 0, projectPath);
518
+ if (typeInfo) {
519
+ symbol.typeInfo = typeInfo;
520
+ }
521
+ // For interfaces and classes, find implementations
522
+ if (symbol.kind === 'interface' || symbol.kind === 'class') {
523
+ const implementations = await this.lspLayer.findImplementations(symbol.location.file, symbol.location.line, symbol.location.column || 0, projectPath);
524
+ if (implementations.length > 0) {
525
+ symbol.implementations = implementations;
526
+ }
527
+ }
528
+ // Find references for exported symbols
529
+ const references = await this.lspLayer.findReferences(symbol.location.file, symbol.location.line, symbol.location.column || 0, projectPath);
530
+ if (references.length > 0) {
531
+ symbol.references = references;
532
+ }
533
+ }
534
+ catch {
535
+ // LSP errors are non-fatal, continue with other symbols
536
+ }
537
+ }
538
+ }
539
+ /**
540
+ * Detect functional patterns in the codebase
541
+ * These patterns indicate functional capabilities like auth, database, API, etc.
542
+ */
543
+ async detectFunctionalPatterns(projectPath) {
544
+ const files = await this.findCodeFiles(projectPath);
545
+ const analyses = await this.analyzeFiles(files);
546
+ const patterns = [];
547
+ const allSymbols = [...analyses.values()].flatMap((a) => a.symbols);
548
+ const allImports = [...analyses.values()].flatMap((a) => a.imports.map((imp) => ({ ...imp, file: a.filePath })));
549
+ // Authentication pattern detection
550
+ const authPattern = this.detectAuthPattern(allSymbols, allImports, files);
551
+ if (authPattern)
552
+ patterns.push(authPattern);
553
+ // Database pattern detection
554
+ const dbPattern = this.detectDatabasePattern(allSymbols, allImports, files);
555
+ if (dbPattern)
556
+ patterns.push(dbPattern);
557
+ // API pattern detection
558
+ const apiPattern = this.detectApiPattern(allSymbols, allImports, files);
559
+ if (apiPattern)
560
+ patterns.push(apiPattern);
561
+ // Cache pattern detection
562
+ const cachePattern = this.detectCachePattern(allSymbols, allImports, files);
563
+ if (cachePattern)
564
+ patterns.push(cachePattern);
565
+ // Queue/messaging pattern detection
566
+ const queuePattern = this.detectQueuePattern(allSymbols, allImports, files);
567
+ if (queuePattern)
568
+ patterns.push(queuePattern);
569
+ // WebSocket pattern detection
570
+ const wsPattern = this.detectWebSocketPattern(allSymbols, allImports, files);
571
+ if (wsPattern)
572
+ patterns.push(wsPattern);
573
+ // Logging pattern detection
574
+ const loggingPattern = this.detectLoggingPattern(allSymbols, allImports, files);
575
+ if (loggingPattern)
576
+ patterns.push(loggingPattern);
577
+ // Validation pattern detection
578
+ const validationPattern = this.detectValidationPattern(allSymbols, allImports, files);
579
+ if (validationPattern)
580
+ patterns.push(validationPattern);
581
+ // Error handling pattern detection
582
+ const errorPattern = this.detectErrorHandlingPattern(allSymbols, allImports, files);
583
+ if (errorPattern)
584
+ patterns.push(errorPattern);
585
+ // Testing pattern detection
586
+ const testingPattern = this.detectTestingPattern(allSymbols, allImports, files);
587
+ if (testingPattern)
588
+ patterns.push(testingPattern);
589
+ return {
590
+ hasAuthPattern: patterns.some((p) => p.type === 'auth'),
591
+ hasDatabasePattern: patterns.some((p) => p.type === 'database'),
592
+ hasApiPattern: patterns.some((p) => p.type === 'api'),
593
+ hasCachePattern: patterns.some((p) => p.type === 'cache'),
594
+ hasQueuePattern: patterns.some((p) => p.type === 'queue'),
595
+ hasWebSocketPattern: patterns.some((p) => p.type === 'websocket'),
596
+ hasLoggingPattern: patterns.some((p) => p.type === 'logging'),
597
+ hasValidationPattern: patterns.some((p) => p.type === 'validation'),
598
+ hasErrorHandlingPattern: patterns.some((p) => p.type === 'error-handling'),
599
+ hasTestingPattern: patterns.some((p) => p.type === 'testing'),
600
+ patterns,
601
+ };
602
+ }
603
+ detectAuthPattern(symbols, imports, files) {
604
+ const indicators = [];
605
+ // Check for auth-related symbols
606
+ const authSymbols = symbols.filter((s) => /^(auth|login|logout|verify|jwt|token|session|password|credential|oauth)/i.test(s.name));
607
+ for (const sym of authSymbols) {
608
+ indicators.push({
609
+ file: sym.location.file,
610
+ symbol: sym.name,
611
+ line: sym.location.line,
612
+ reason: `Auth-related symbol: ${sym.name}`,
613
+ });
614
+ }
615
+ // Check for auth-related imports
616
+ const authImports = imports.filter((imp) => /^(jsonwebtoken|passport|bcrypt|argon2|@auth|next-auth|express-session|cookie-session)/i.test(imp.source));
617
+ for (const imp of authImports) {
618
+ indicators.push({
619
+ file: imp.file,
620
+ reason: `Auth library import: ${imp.source}`,
621
+ });
622
+ }
623
+ // Check for auth-related files
624
+ const authFiles = files.filter((f) => /\/(auth|login|session|middleware)[\./]/i.test(f));
625
+ for (const f of authFiles) {
626
+ indicators.push({
627
+ file: f,
628
+ reason: 'Auth-related file path',
629
+ });
630
+ }
631
+ if (indicators.length === 0)
632
+ return null;
633
+ return {
634
+ type: 'auth',
635
+ confidence: Math.min(1, indicators.length * 0.15),
636
+ indicators: indicators.slice(0, 10),
637
+ description: 'Authentication and authorization functionality',
638
+ };
639
+ }
640
+ detectDatabasePattern(symbols, imports, files) {
641
+ const indicators = [];
642
+ // Check for database-related symbols
643
+ const dbSymbols = symbols.filter((s) => /^(repository|model|entity|schema|migration|query|database|db|prisma|sequelize|mongoose)/i.test(s.name));
644
+ for (const sym of dbSymbols) {
645
+ indicators.push({
646
+ file: sym.location.file,
647
+ symbol: sym.name,
648
+ line: sym.location.line,
649
+ reason: `Database-related symbol: ${sym.name}`,
650
+ });
651
+ }
652
+ // Check for database-related imports
653
+ const dbImports = imports.filter((imp) => /^(prisma|@prisma|sequelize|mongoose|typeorm|knex|pg|mysql|mysql2|sqlite3|better-sqlite3|drizzle-orm|@supabase)/i.test(imp.source));
654
+ for (const imp of dbImports) {
655
+ indicators.push({
656
+ file: imp.file,
657
+ reason: `Database library import: ${imp.source}`,
658
+ });
659
+ }
660
+ // Check for database-related files
661
+ const dbFiles = files.filter((f) => /\/(models?|repositories|entities|migrations?|schemas?|database)[\./]/i.test(f));
662
+ for (const f of dbFiles) {
663
+ indicators.push({
664
+ file: f,
665
+ reason: 'Database-related file path',
666
+ });
667
+ }
668
+ if (indicators.length === 0)
669
+ return null;
670
+ return {
671
+ type: 'database',
672
+ confidence: Math.min(1, indicators.length * 0.15),
673
+ indicators: indicators.slice(0, 10),
674
+ description: 'Database access and ORM functionality',
675
+ };
676
+ }
677
+ detectApiPattern(symbols, imports, files) {
678
+ const indicators = [];
679
+ // Check for API-related symbols
680
+ const apiSymbols = symbols.filter((s) => /^(controller|handler|router|route|endpoint|api|rest|graphql|resolver)/i.test(s.name));
681
+ for (const sym of apiSymbols) {
682
+ indicators.push({
683
+ file: sym.location.file,
684
+ symbol: sym.name,
685
+ line: sym.location.line,
686
+ reason: `API-related symbol: ${sym.name}`,
687
+ });
688
+ }
689
+ // Check for API framework imports
690
+ const apiImports = imports.filter((imp) => /^(express|fastify|koa|hapi|@nestjs|next|nuxt|graphql|apollo|@apollo|trpc|@trpc)/i.test(imp.source));
691
+ for (const imp of apiImports) {
692
+ indicators.push({
693
+ file: imp.file,
694
+ reason: `API framework import: ${imp.source}`,
695
+ });
696
+ }
697
+ // Check for API-related files
698
+ const apiFiles = files.filter((f) => /\/(routes?|controllers?|handlers?|api|endpoints?|resolvers?)[\./]/i.test(f));
699
+ for (const f of apiFiles) {
700
+ indicators.push({
701
+ file: f,
702
+ reason: 'API-related file path',
703
+ });
704
+ }
705
+ if (indicators.length === 0)
706
+ return null;
707
+ return {
708
+ type: 'api',
709
+ confidence: Math.min(1, indicators.length * 0.15),
710
+ indicators: indicators.slice(0, 10),
711
+ description: 'API endpoints and routing',
712
+ };
713
+ }
714
+ detectCachePattern(symbols, imports, _files) {
715
+ const indicators = [];
716
+ // Check for cache-related symbols
717
+ const cacheSymbols = symbols.filter((s) => /^(cache|redis|memcache|lru|ttl)/i.test(s.name));
718
+ for (const sym of cacheSymbols) {
719
+ indicators.push({
720
+ file: sym.location.file,
721
+ symbol: sym.name,
722
+ line: sym.location.line,
723
+ reason: `Cache-related symbol: ${sym.name}`,
724
+ });
725
+ }
726
+ // Check for cache-related imports
727
+ const cacheImports = imports.filter((imp) => /^(redis|ioredis|memcached|lru-cache|node-cache|cache-manager)/i.test(imp.source));
728
+ for (const imp of cacheImports) {
729
+ indicators.push({
730
+ file: imp.file,
731
+ reason: `Cache library import: ${imp.source}`,
732
+ });
733
+ }
734
+ if (indicators.length === 0)
735
+ return null;
736
+ return {
737
+ type: 'cache',
738
+ confidence: Math.min(1, indicators.length * 0.2),
739
+ indicators: indicators.slice(0, 10),
740
+ description: 'Caching and data memoization',
741
+ };
742
+ }
743
+ detectQueuePattern(symbols, imports, _files) {
744
+ const indicators = [];
745
+ // Check for queue-related symbols
746
+ const queueSymbols = symbols.filter((s) => /^(queue|worker|job|task|consumer|producer|message|event)/i.test(s.name));
747
+ for (const sym of queueSymbols) {
748
+ indicators.push({
749
+ file: sym.location.file,
750
+ symbol: sym.name,
751
+ line: sym.location.line,
752
+ reason: `Queue-related symbol: ${sym.name}`,
753
+ });
754
+ }
755
+ // Check for queue-related imports
756
+ const queueImports = imports.filter((imp) => /^(bull|bullmq|bee-queue|agenda|amqplib|rabbitmq|kafka|kafkajs|sqs)/i.test(imp.source));
757
+ for (const imp of queueImports) {
758
+ indicators.push({
759
+ file: imp.file,
760
+ reason: `Queue library import: ${imp.source}`,
761
+ });
762
+ }
763
+ if (indicators.length === 0)
764
+ return null;
765
+ return {
766
+ type: 'queue',
767
+ confidence: Math.min(1, indicators.length * 0.2),
768
+ indicators: indicators.slice(0, 10),
769
+ description: 'Message queues and background jobs',
770
+ };
771
+ }
772
+ detectWebSocketPattern(symbols, imports, _files) {
773
+ const indicators = [];
774
+ // Check for WebSocket-related symbols
775
+ const wsSymbols = symbols.filter((s) => /^(websocket|socket|ws|realtime|broadcast|subscribe)/i.test(s.name));
776
+ for (const sym of wsSymbols) {
777
+ indicators.push({
778
+ file: sym.location.file,
779
+ symbol: sym.name,
780
+ line: sym.location.line,
781
+ reason: `WebSocket-related symbol: ${sym.name}`,
782
+ });
783
+ }
784
+ // Check for WebSocket-related imports
785
+ const wsImports = imports.filter((imp) => /^(ws|socket\.io|@socket\.io|sockjs|pusher|ably)/i.test(imp.source));
786
+ for (const imp of wsImports) {
787
+ indicators.push({
788
+ file: imp.file,
789
+ reason: `WebSocket library import: ${imp.source}`,
790
+ });
791
+ }
792
+ if (indicators.length === 0)
793
+ return null;
794
+ return {
795
+ type: 'websocket',
796
+ confidence: Math.min(1, indicators.length * 0.2),
797
+ indicators: indicators.slice(0, 10),
798
+ description: 'Real-time WebSocket communication',
799
+ };
800
+ }
801
+ detectLoggingPattern(symbols, imports, _files) {
802
+ const indicators = [];
803
+ // Check for logging-related symbols
804
+ const logSymbols = symbols.filter((s) => /^(logger|log|logging|telemetry|metrics)/i.test(s.name));
805
+ for (const sym of logSymbols) {
806
+ indicators.push({
807
+ file: sym.location.file,
808
+ symbol: sym.name,
809
+ line: sym.location.line,
810
+ reason: `Logging-related symbol: ${sym.name}`,
811
+ });
812
+ }
813
+ // Check for logging-related imports
814
+ const logImports = imports.filter((imp) => /^(winston|pino|bunyan|log4js|morgan|@sentry|newrelic|datadog)/i.test(imp.source));
815
+ for (const imp of logImports) {
816
+ indicators.push({
817
+ file: imp.file,
818
+ reason: `Logging library import: ${imp.source}`,
819
+ });
820
+ }
821
+ if (indicators.length === 0)
822
+ return null;
823
+ return {
824
+ type: 'logging',
825
+ confidence: Math.min(1, indicators.length * 0.2),
826
+ indicators: indicators.slice(0, 10),
827
+ description: 'Logging and observability',
828
+ };
829
+ }
830
+ detectValidationPattern(symbols, imports, _files) {
831
+ const indicators = [];
832
+ // Check for validation-related symbols
833
+ const validSymbols = symbols.filter((s) => /^(valid|schema|sanitize|parse|check|assert)/i.test(s.name));
834
+ for (const sym of validSymbols) {
835
+ indicators.push({
836
+ file: sym.location.file,
837
+ symbol: sym.name,
838
+ line: sym.location.line,
839
+ reason: `Validation-related symbol: ${sym.name}`,
840
+ });
841
+ }
842
+ // Check for validation-related imports
843
+ const validImports = imports.filter((imp) => /^(zod|yup|joi|ajv|class-validator|validator|io-ts|valibot)/i.test(imp.source));
844
+ for (const imp of validImports) {
845
+ indicators.push({
846
+ file: imp.file,
847
+ reason: `Validation library import: ${imp.source}`,
848
+ });
849
+ }
850
+ if (indicators.length === 0)
851
+ return null;
852
+ return {
853
+ type: 'validation',
854
+ confidence: Math.min(1, indicators.length * 0.2),
855
+ indicators: indicators.slice(0, 10),
856
+ description: 'Input validation and schema enforcement',
857
+ };
858
+ }
859
+ detectErrorHandlingPattern(symbols, imports, files) {
860
+ const indicators = [];
861
+ // Check for error-related symbols
862
+ const errorSymbols = symbols.filter((s) => /^(error|exception|handler|catch|fallback)/i.test(s.name));
863
+ for (const sym of errorSymbols) {
864
+ indicators.push({
865
+ file: sym.location.file,
866
+ symbol: sym.name,
867
+ line: sym.location.line,
868
+ reason: `Error handling symbol: ${sym.name}`,
869
+ });
870
+ }
871
+ // Check for error-related files
872
+ const errorFiles = files.filter((f) => /\/(errors?|exceptions?)[\./]/i.test(f));
873
+ for (const f of errorFiles) {
874
+ indicators.push({
875
+ file: f,
876
+ reason: 'Error handling file path',
877
+ });
878
+ }
879
+ if (indicators.length === 0)
880
+ return null;
881
+ return {
882
+ type: 'error-handling',
883
+ confidence: Math.min(1, indicators.length * 0.15),
884
+ indicators: indicators.slice(0, 10),
885
+ description: 'Error handling and exception management',
886
+ };
887
+ }
888
+ detectTestingPattern(symbols, imports, files) {
889
+ const indicators = [];
890
+ // Check for test-related imports
891
+ const testImports = imports.filter((imp) => /^(jest|vitest|mocha|chai|@testing-library|cypress|playwright|supertest)/i.test(imp.source));
892
+ for (const imp of testImports) {
893
+ indicators.push({
894
+ file: imp.file,
895
+ reason: `Test library import: ${imp.source}`,
896
+ });
897
+ }
898
+ // Check for test files
899
+ const testFiles = files.filter((f) => /\.(test|spec)\.(ts|tsx|js|jsx)$/.test(f) || /\/__tests__\//.test(f));
900
+ for (const f of testFiles.slice(0, 5)) {
901
+ indicators.push({
902
+ file: f,
903
+ reason: 'Test file',
904
+ });
905
+ }
906
+ if (indicators.length === 0)
907
+ return null;
908
+ return {
909
+ type: 'testing',
910
+ confidence: Math.min(1, indicators.length * 0.15),
911
+ indicators: indicators.slice(0, 10),
912
+ description: 'Testing infrastructure and test files',
913
+ };
914
+ }
915
+ /**
916
+ * Trace execution flow from an entry point
917
+ * Uses tree-sitter to extract call expressions and build flow graph
918
+ */
919
+ async traceFlow(projectPath, entryFile, entryFunction) {
920
+ const absoluteEntryFile = path.isAbsolute(entryFile)
921
+ ? entryFile
922
+ : path.join(projectPath, entryFile);
923
+ const nodes = [];
924
+ const edges = [];
925
+ const visited = new Set();
926
+ // Analyze entry file
927
+ const analysis = await this.treeSitter.analyzeFile(absoluteEntryFile);
928
+ // Find entry point
929
+ let entrySymbol = analysis.symbols[0];
930
+ if (entryFunction) {
931
+ const found = analysis.symbols.find((s) => s.name === entryFunction && (s.kind === 'function' || s.kind === 'method'));
932
+ if (found)
933
+ entrySymbol = found;
934
+ }
935
+ if (!entrySymbol) {
936
+ return {
937
+ entryPoint: {
938
+ file: absoluteEntryFile,
939
+ symbol: 'unknown',
940
+ line: 1,
941
+ type: 'entry',
942
+ },
943
+ nodes: [],
944
+ edges: [],
945
+ mermaidDiagram: 'flowchart TD\n A[Entry] --> B[No symbols found]',
946
+ };
947
+ }
948
+ const entryNode = {
949
+ file: absoluteEntryFile,
950
+ symbol: entrySymbol.name,
951
+ line: entrySymbol.location.line,
952
+ type: 'entry',
953
+ };
954
+ nodes.push(entryNode);
955
+ // Build flow graph using file content analysis
956
+ await this.traceCallsFromFile(absoluteEntryFile, entryNode, nodes, edges, visited, projectPath, 3 // Max depth
957
+ );
958
+ // Generate Mermaid diagram
959
+ const mermaidDiagram = this.generateMermaidDiagram(nodes, edges);
960
+ return {
961
+ entryPoint: entryNode,
962
+ nodes,
963
+ edges,
964
+ mermaidDiagram,
965
+ };
966
+ }
967
+ async traceCallsFromFile(filePath, currentNode, nodes, edges, visited, projectPath, maxDepth) {
968
+ if (maxDepth <= 0)
969
+ return;
970
+ const nodeKey = `${filePath}:${currentNode.symbol}`;
971
+ if (visited.has(nodeKey))
972
+ return;
973
+ visited.add(nodeKey);
974
+ try {
975
+ const content = await fs.readFile(filePath, 'utf-8');
976
+ const analysis = await this.treeSitter.analyzeFile(filePath);
977
+ // Extract function calls using regex (simple approximation)
978
+ // This could be enhanced with tree-sitter AST traversal
979
+ const callPattern = /(\w+)\s*\(/g;
980
+ let match;
981
+ const calls = [];
982
+ while ((match = callPattern.exec(content)) !== null) {
983
+ const funcName = match[1];
984
+ // Skip common keywords and built-ins
985
+ if (!/^(if|for|while|switch|return|await|async|function|const|let|var|new|typeof|instanceof|import|export|class|interface|type)$/.test(funcName)) {
986
+ if (!calls.includes(funcName)) {
987
+ calls.push(funcName);
988
+ }
989
+ }
990
+ }
991
+ // Match calls to symbols in the analysis
992
+ for (const call of calls.slice(0, 20)) {
993
+ // Check if it's a local symbol
994
+ const localSymbol = analysis.symbols.find((s) => s.name === call);
995
+ if (localSymbol) {
996
+ const callNode = {
997
+ file: filePath,
998
+ symbol: call,
999
+ line: localSymbol.location.line,
1000
+ type: 'call',
1001
+ };
1002
+ if (!nodes.find((n) => n.file === callNode.file && n.symbol === callNode.symbol)) {
1003
+ nodes.push(callNode);
1004
+ edges.push({ from: currentNode, to: callNode });
1005
+ await this.traceCallsFromFile(filePath, callNode, nodes, edges, visited, projectPath, maxDepth - 1);
1006
+ }
1007
+ }
1008
+ // Check if it's an imported symbol
1009
+ for (const imp of analysis.imports) {
1010
+ if (imp.specifiers.includes(call)) {
1011
+ const resolvedPath = this.resolveImportPath(filePath, imp.source, projectPath);
1012
+ if (resolvedPath) {
1013
+ const importedAnalysis = await this.treeSitter.analyzeFile(resolvedPath);
1014
+ const importedSymbol = importedAnalysis.symbols.find((s) => s.name === call);
1015
+ if (importedSymbol) {
1016
+ const callNode = {
1017
+ file: resolvedPath,
1018
+ symbol: call,
1019
+ line: importedSymbol.location.line,
1020
+ type: 'call',
1021
+ };
1022
+ if (!nodes.find((n) => n.file === callNode.file && n.symbol === callNode.symbol)) {
1023
+ nodes.push(callNode);
1024
+ edges.push({ from: currentNode, to: callNode });
1025
+ await this.traceCallsFromFile(resolvedPath, callNode, nodes, edges, visited, projectPath, maxDepth - 1);
1026
+ }
1027
+ }
1028
+ }
1029
+ }
1030
+ }
1031
+ }
1032
+ }
1033
+ catch {
1034
+ // File read or analysis error, skip
1035
+ }
1036
+ }
1037
+ generateMermaidDiagram(nodes, edges) {
1038
+ if (nodes.length === 0) {
1039
+ return 'flowchart TD\n A[No nodes]';
1040
+ }
1041
+ const lines = ['flowchart TD'];
1042
+ const nodeIds = new Map();
1043
+ // Assign IDs to nodes
1044
+ nodes.forEach((node, index) => {
1045
+ const key = `${node.file}:${node.symbol}`;
1046
+ nodeIds.set(key, `N${index}`);
1047
+ });
1048
+ // Add nodes
1049
+ for (const node of nodes) {
1050
+ const key = `${node.file}:${node.symbol}`;
1051
+ const id = nodeIds.get(key);
1052
+ const label = `${node.symbol}`;
1053
+ const shape = node.type === 'entry' ? `([${label}])` : `[${label}]`;
1054
+ lines.push(` ${id}${shape}`);
1055
+ }
1056
+ // Add edges
1057
+ for (const edge of edges) {
1058
+ const fromKey = `${edge.from.file}:${edge.from.symbol}`;
1059
+ const toKey = `${edge.to.file}:${edge.to.symbol}`;
1060
+ const fromId = nodeIds.get(fromKey);
1061
+ const toId = nodeIds.get(toKey);
1062
+ if (fromId && toId) {
1063
+ const label = edge.label ? `|${edge.label}|` : '';
1064
+ lines.push(` ${fromId} -->${label} ${toId}`);
1065
+ }
1066
+ }
1067
+ return lines.join('\n');
1068
+ }
1069
+ }
1070
+ exports.CodebaseAnalyzer = CodebaseAnalyzer;
1071
+ //# sourceMappingURL=codebaseAnalyzer.js.map