@ai-coders/context 0.6.0 → 0.7.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 (581) hide show
  1. package/README.md +125 -68
  2. package/dist/commands/export.d.ts +4 -0
  3. package/dist/commands/export.d.ts.map +1 -0
  4. package/dist/commands/export.js +39 -0
  5. package/dist/commands/export.js.map +1 -0
  6. package/dist/commands/fill.d.ts +13 -0
  7. package/dist/commands/fill.d.ts.map +1 -0
  8. package/dist/commands/fill.js +65 -0
  9. package/dist/commands/fill.js.map +1 -0
  10. package/dist/commands/index.d.ts +29 -0
  11. package/dist/commands/index.d.ts.map +1 -0
  12. package/dist/commands/index.js +74 -0
  13. package/dist/commands/index.js.map +1 -0
  14. package/dist/commands/init.d.ts +12 -0
  15. package/dist/commands/init.d.ts.map +1 -0
  16. package/dist/commands/init.js +64 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/mcp.d.ts +4 -0
  19. package/dist/commands/mcp.d.ts.map +1 -0
  20. package/dist/commands/mcp.js +92 -0
  21. package/dist/commands/mcp.js.map +1 -0
  22. package/dist/commands/plan.d.ts +9 -0
  23. package/dist/commands/plan.d.ts.map +1 -0
  24. package/dist/commands/plan.js +126 -0
  25. package/dist/commands/plan.js.map +1 -0
  26. package/dist/commands/report.d.ts +4 -0
  27. package/dist/commands/report.d.ts.map +1 -0
  28. package/dist/commands/report.js +36 -0
  29. package/dist/commands/report.js.map +1 -0
  30. package/dist/commands/serve.d.ts +4 -0
  31. package/dist/commands/serve.d.ts.map +1 -0
  32. package/dist/commands/serve.js +29 -0
  33. package/dist/commands/serve.js.map +1 -0
  34. package/dist/commands/skill.d.ts +4 -0
  35. package/dist/commands/skill.d.ts.map +1 -0
  36. package/dist/commands/skill.js +217 -0
  37. package/dist/commands/skill.js.map +1 -0
  38. package/dist/commands/start.d.ts +4 -0
  39. package/dist/commands/start.d.ts.map +1 -0
  40. package/dist/commands/start.js +56 -0
  41. package/dist/commands/start.js.map +1 -0
  42. package/dist/commands/sync.d.ts +9 -0
  43. package/dist/commands/sync.d.ts.map +1 -0
  44. package/dist/commands/sync.js +134 -0
  45. package/dist/commands/sync.js.map +1 -0
  46. package/dist/commands/types.d.ts +17 -0
  47. package/dist/commands/types.d.ts.map +1 -0
  48. package/dist/commands/types.js +3 -0
  49. package/dist/commands/types.js.map +1 -0
  50. package/dist/commands/update.d.ts +4 -0
  51. package/dist/commands/update.d.ts.map +1 -0
  52. package/dist/commands/update.js +111 -0
  53. package/dist/commands/update.js.map +1 -0
  54. package/dist/commands/workflow.d.ts +4 -0
  55. package/dist/commands/workflow.d.ts.map +1 -0
  56. package/dist/commands/workflow.js +171 -0
  57. package/dist/commands/workflow.js.map +1 -0
  58. package/dist/generators/agents/agentGenerator.d.ts +2 -0
  59. package/dist/generators/agents/agentGenerator.d.ts.map +1 -1
  60. package/dist/generators/agents/agentGenerator.js +46 -2
  61. package/dist/generators/agents/agentGenerator.js.map +1 -1
  62. package/dist/generators/agents/templates/index.d.ts +0 -1
  63. package/dist/generators/agents/templates/index.d.ts.map +1 -1
  64. package/dist/generators/agents/templates/index.js +1 -3
  65. package/dist/generators/agents/templates/index.js.map +1 -1
  66. package/dist/generators/agents/templates/playbookTemplate.d.ts.map +1 -1
  67. package/dist/generators/agents/templates/playbookTemplate.js +11 -0
  68. package/dist/generators/agents/templates/playbookTemplate.js.map +1 -1
  69. package/dist/generators/documentation/documentationGenerator.d.ts +2 -1
  70. package/dist/generators/documentation/documentationGenerator.d.ts.map +1 -1
  71. package/dist/generators/documentation/documentationGenerator.js +53 -34
  72. package/dist/generators/documentation/documentationGenerator.js.map +1 -1
  73. package/dist/generators/documentation/templates/apiReferenceTemplate.d.ts.map +1 -1
  74. package/dist/generators/documentation/templates/apiReferenceTemplate.js +11 -0
  75. package/dist/generators/documentation/templates/apiReferenceTemplate.js.map +1 -1
  76. package/dist/generators/documentation/templates/architectureTemplate.d.ts +11 -0
  77. package/dist/generators/documentation/templates/architectureTemplate.d.ts.map +1 -1
  78. package/dist/generators/documentation/templates/architectureTemplate.js.map +1 -1
  79. package/dist/generators/documentation/templates/dataFlowTemplate.d.ts.map +1 -1
  80. package/dist/generators/documentation/templates/dataFlowTemplate.js +11 -0
  81. package/dist/generators/documentation/templates/dataFlowTemplate.js.map +1 -1
  82. package/dist/generators/documentation/templates/developmentWorkflowTemplate.d.ts.map +1 -1
  83. package/dist/generators/documentation/templates/developmentWorkflowTemplate.js +11 -0
  84. package/dist/generators/documentation/templates/developmentWorkflowTemplate.js.map +1 -1
  85. package/dist/generators/documentation/templates/glossaryTemplate.d.ts.map +1 -1
  86. package/dist/generators/documentation/templates/glossaryTemplate.js.map +1 -1
  87. package/dist/generators/documentation/templates/index.d.ts +0 -12
  88. package/dist/generators/documentation/templates/index.d.ts.map +1 -1
  89. package/dist/generators/documentation/templates/index.js +1 -25
  90. package/dist/generators/documentation/templates/index.js.map +1 -1
  91. package/dist/generators/documentation/templates/migrationTemplate.d.ts.map +1 -1
  92. package/dist/generators/documentation/templates/migrationTemplate.js +11 -0
  93. package/dist/generators/documentation/templates/migrationTemplate.js.map +1 -1
  94. package/dist/generators/documentation/templates/onboardingTemplate.d.ts.map +1 -1
  95. package/dist/generators/documentation/templates/onboardingTemplate.js +11 -0
  96. package/dist/generators/documentation/templates/onboardingTemplate.js.map +1 -1
  97. package/dist/generators/documentation/templates/projectOverviewTemplate.d.ts.map +1 -1
  98. package/dist/generators/documentation/templates/projectOverviewTemplate.js +11 -0
  99. package/dist/generators/documentation/templates/projectOverviewTemplate.js.map +1 -1
  100. package/dist/generators/documentation/templates/securityTemplate.d.ts.map +1 -1
  101. package/dist/generators/documentation/templates/securityTemplate.js +11 -0
  102. package/dist/generators/documentation/templates/securityTemplate.js.map +1 -1
  103. package/dist/generators/documentation/templates/testingTemplate.d.ts.map +1 -1
  104. package/dist/generators/documentation/templates/testingTemplate.js +11 -0
  105. package/dist/generators/documentation/templates/testingTemplate.js.map +1 -1
  106. package/dist/generators/documentation/templates/toolingTemplate.d.ts.map +1 -1
  107. package/dist/generators/documentation/templates/toolingTemplate.js +11 -0
  108. package/dist/generators/documentation/templates/toolingTemplate.js.map +1 -1
  109. package/dist/generators/documentation/templates/troubleshootingTemplate.d.ts.map +1 -1
  110. package/dist/generators/documentation/templates/troubleshootingTemplate.js +11 -0
  111. package/dist/generators/documentation/templates/troubleshootingTemplate.js.map +1 -1
  112. package/dist/generators/plans/templates/planTemplate.d.ts +11 -0
  113. package/dist/generators/plans/templates/planTemplate.d.ts.map +1 -1
  114. package/dist/generators/plans/templates/planTemplate.js.map +1 -1
  115. package/dist/generators/shared/index.d.ts +1 -0
  116. package/dist/generators/shared/index.d.ts.map +1 -1
  117. package/dist/generators/shared/index.js +16 -0
  118. package/dist/generators/shared/index.js.map +1 -1
  119. package/dist/generators/shared/scaffoldStructures.d.ts +13 -0
  120. package/dist/generators/shared/scaffoldStructures.d.ts.map +1 -0
  121. package/dist/generators/shared/scaffoldStructures.js +30 -0
  122. package/dist/generators/shared/scaffoldStructures.js.map +1 -0
  123. package/dist/generators/shared/structures/agents/definitions.d.ts +18 -0
  124. package/dist/generators/shared/structures/agents/definitions.d.ts.map +1 -0
  125. package/dist/generators/shared/structures/agents/definitions.js +22 -0
  126. package/dist/generators/shared/structures/agents/definitions.js.map +1 -0
  127. package/dist/generators/shared/structures/agents/factory.d.ts +9 -0
  128. package/dist/generators/shared/structures/agents/factory.d.ts.map +1 -0
  129. package/dist/generators/shared/structures/agents/factory.js +112 -0
  130. package/dist/generators/shared/structures/agents/factory.js.map +1 -0
  131. package/dist/generators/shared/structures/agents/index.d.ts +6 -0
  132. package/dist/generators/shared/structures/agents/index.d.ts.map +1 -0
  133. package/dist/generators/shared/structures/agents/index.js +24 -0
  134. package/dist/generators/shared/structures/agents/index.js.map +1 -0
  135. package/dist/generators/shared/structures/documentation/apiReference.d.ts +3 -0
  136. package/dist/generators/shared/structures/documentation/apiReference.d.ts.map +1 -0
  137. package/dist/generators/shared/structures/documentation/apiReference.js +100 -0
  138. package/dist/generators/shared/structures/documentation/apiReference.js.map +1 -0
  139. package/dist/generators/shared/structures/documentation/architecture.d.ts +3 -0
  140. package/dist/generators/shared/structures/documentation/architecture.d.ts.map +1 -0
  141. package/dist/generators/shared/structures/documentation/architecture.js +121 -0
  142. package/dist/generators/shared/structures/documentation/architecture.js.map +1 -0
  143. package/dist/generators/shared/structures/documentation/dataFlow.d.ts +3 -0
  144. package/dist/generators/shared/structures/documentation/dataFlow.d.ts.map +1 -0
  145. package/dist/generators/shared/structures/documentation/dataFlow.js +72 -0
  146. package/dist/generators/shared/structures/documentation/dataFlow.js.map +1 -0
  147. package/dist/generators/shared/structures/documentation/glossary.d.ts +3 -0
  148. package/dist/generators/shared/structures/documentation/glossary.d.ts.map +1 -0
  149. package/dist/generators/shared/structures/documentation/glossary.js +71 -0
  150. package/dist/generators/shared/structures/documentation/glossary.js.map +1 -0
  151. package/dist/generators/shared/structures/documentation/index.d.ts +16 -0
  152. package/dist/generators/shared/structures/documentation/index.d.ts.map +1 -0
  153. package/dist/generators/shared/structures/documentation/index.js +31 -0
  154. package/dist/generators/shared/structures/documentation/index.js.map +1 -0
  155. package/dist/generators/shared/structures/documentation/migration.d.ts +3 -0
  156. package/dist/generators/shared/structures/documentation/migration.d.ts.map +1 -0
  157. package/dist/generators/shared/structures/documentation/migration.js +113 -0
  158. package/dist/generators/shared/structures/documentation/migration.js.map +1 -0
  159. package/dist/generators/shared/structures/documentation/onboarding.d.ts +3 -0
  160. package/dist/generators/shared/structures/documentation/onboarding.d.ts.map +1 -0
  161. package/dist/generators/shared/structures/documentation/onboarding.js +99 -0
  162. package/dist/generators/shared/structures/documentation/onboarding.js.map +1 -0
  163. package/dist/generators/shared/structures/documentation/projectOverview.d.ts +3 -0
  164. package/dist/generators/shared/structures/documentation/projectOverview.d.ts.map +1 -0
  165. package/dist/generators/shared/structures/documentation/projectOverview.js +115 -0
  166. package/dist/generators/shared/structures/documentation/projectOverview.js.map +1 -0
  167. package/dist/generators/shared/structures/documentation/security.d.ts +3 -0
  168. package/dist/generators/shared/structures/documentation/security.d.ts.map +1 -0
  169. package/dist/generators/shared/structures/documentation/security.js +55 -0
  170. package/dist/generators/shared/structures/documentation/security.js.map +1 -0
  171. package/dist/generators/shared/structures/documentation/testing.d.ts +3 -0
  172. package/dist/generators/shared/structures/documentation/testing.d.ts.map +1 -0
  173. package/dist/generators/shared/structures/documentation/testing.js +57 -0
  174. package/dist/generators/shared/structures/documentation/testing.js.map +1 -0
  175. package/dist/generators/shared/structures/documentation/tooling.d.ts +3 -0
  176. package/dist/generators/shared/structures/documentation/tooling.d.ts.map +1 -0
  177. package/dist/generators/shared/structures/documentation/tooling.js +55 -0
  178. package/dist/generators/shared/structures/documentation/tooling.js.map +1 -0
  179. package/dist/generators/shared/structures/documentation/troubleshooting.d.ts +3 -0
  180. package/dist/generators/shared/structures/documentation/troubleshooting.d.ts.map +1 -0
  181. package/dist/generators/shared/structures/documentation/troubleshooting.js +91 -0
  182. package/dist/generators/shared/structures/documentation/troubleshooting.js.map +1 -0
  183. package/dist/generators/shared/structures/documentation/workflow.d.ts +3 -0
  184. package/dist/generators/shared/structures/documentation/workflow.d.ts.map +1 -0
  185. package/dist/generators/shared/structures/documentation/workflow.js +56 -0
  186. package/dist/generators/shared/structures/documentation/workflow.js.map +1 -0
  187. package/dist/generators/shared/structures/index.d.ts +15 -0
  188. package/dist/generators/shared/structures/index.d.ts.map +1 -0
  189. package/dist/generators/shared/structures/index.js +37 -0
  190. package/dist/generators/shared/structures/index.js.map +1 -0
  191. package/dist/generators/shared/structures/plans/index.d.ts +5 -0
  192. package/dist/generators/shared/structures/plans/index.d.ts.map +1 -0
  193. package/dist/generators/shared/structures/plans/index.js +9 -0
  194. package/dist/generators/shared/structures/plans/index.js.map +1 -0
  195. package/dist/generators/shared/structures/plans/planStructure.d.ts +6 -0
  196. package/dist/generators/shared/structures/plans/planStructure.d.ts.map +1 -0
  197. package/dist/generators/shared/structures/plans/planStructure.js +65 -0
  198. package/dist/generators/shared/structures/plans/planStructure.js.map +1 -0
  199. package/dist/generators/shared/structures/registry.d.ts +18 -0
  200. package/dist/generators/shared/structures/registry.d.ts.map +1 -0
  201. package/dist/generators/shared/structures/registry.js +104 -0
  202. package/dist/generators/shared/structures/registry.js.map +1 -0
  203. package/dist/generators/shared/structures/serialization.d.ts +15 -0
  204. package/dist/generators/shared/structures/serialization.d.ts.map +1 -0
  205. package/dist/generators/shared/structures/serialization.js +119 -0
  206. package/dist/generators/shared/structures/serialization.js.map +1 -0
  207. package/dist/generators/shared/structures/skills/definitions.d.ts +14 -0
  208. package/dist/generators/shared/structures/skills/definitions.d.ts.map +1 -0
  209. package/dist/generators/shared/structures/skills/definitions.js +18 -0
  210. package/dist/generators/shared/structures/skills/definitions.js.map +1 -0
  211. package/dist/generators/shared/structures/skills/factory.d.ts +9 -0
  212. package/dist/generators/shared/structures/skills/factory.d.ts.map +1 -0
  213. package/dist/generators/shared/structures/skills/factory.js +56 -0
  214. package/dist/generators/shared/structures/skills/factory.js.map +1 -0
  215. package/dist/generators/shared/structures/skills/index.d.ts +6 -0
  216. package/dist/generators/shared/structures/skills/index.d.ts.map +1 -0
  217. package/dist/generators/shared/structures/skills/index.js +20 -0
  218. package/dist/generators/shared/structures/skills/index.js.map +1 -0
  219. package/dist/generators/shared/structures/types.d.ts +59 -0
  220. package/dist/generators/shared/structures/types.d.ts.map +1 -0
  221. package/dist/generators/shared/structures/types.js +6 -0
  222. package/dist/generators/shared/structures/types.js.map +1 -0
  223. package/dist/generators/shared/structures/validation.d.ts +13 -0
  224. package/dist/generators/shared/structures/validation.d.ts.map +1 -0
  225. package/dist/generators/shared/structures/validation.js +51 -0
  226. package/dist/generators/shared/structures/validation.js.map +1 -0
  227. package/dist/generators/skills/skillGenerator.d.ts +5 -0
  228. package/dist/generators/skills/skillGenerator.d.ts.map +1 -1
  229. package/dist/generators/skills/skillGenerator.js +26 -17
  230. package/dist/generators/skills/skillGenerator.js.map +1 -1
  231. package/dist/generators/skills/templates/skillTemplate.d.ts +10 -0
  232. package/dist/generators/skills/templates/skillTemplate.d.ts.map +1 -1
  233. package/dist/generators/skills/templates/skillTemplate.js +10 -0
  234. package/dist/generators/skills/templates/skillTemplate.js.map +1 -1
  235. package/dist/index.d.ts.map +1 -1
  236. package/dist/index.js +203 -5
  237. package/dist/index.js.map +1 -1
  238. package/dist/prompts/defaults.d.ts +5 -0
  239. package/dist/prompts/defaults.d.ts.map +1 -1
  240. package/dist/prompts/defaults.js +44 -1
  241. package/dist/prompts/defaults.js.map +1 -1
  242. package/dist/services/ai/agents/documentationAgent.d.ts +2 -0
  243. package/dist/services/ai/agents/documentationAgent.d.ts.map +1 -1
  244. package/dist/services/ai/agents/documentationAgent.js +33 -9
  245. package/dist/services/ai/agents/documentationAgent.js.map +1 -1
  246. package/dist/services/ai/agents/playbookAgent.d.ts +2 -0
  247. package/dist/services/ai/agents/playbookAgent.d.ts.map +1 -1
  248. package/dist/services/ai/agents/playbookAgent.js +44 -19
  249. package/dist/services/ai/agents/playbookAgent.js.map +1 -1
  250. package/dist/services/ai/agents/skillAgent.d.ts +2 -0
  251. package/dist/services/ai/agents/skillAgent.d.ts.map +1 -1
  252. package/dist/services/ai/agents/skillAgent.js +54 -22
  253. package/dist/services/ai/agents/skillAgent.js.map +1 -1
  254. package/dist/services/ai/schemas.d.ts +138 -9
  255. package/dist/services/ai/schemas.d.ts.map +1 -1
  256. package/dist/services/ai/schemas.js +70 -5
  257. package/dist/services/ai/schemas.js.map +1 -1
  258. package/dist/services/ai/toolRegistry.d.ts.map +1 -1
  259. package/dist/services/ai/toolRegistry.js +25 -17
  260. package/dist/services/ai/toolRegistry.js.map +1 -1
  261. package/dist/services/ai/tools/checkScaffoldingTool.d.ts.map +1 -1
  262. package/dist/services/ai/tools/checkScaffoldingTool.js +4 -1
  263. package/dist/services/ai/tools/checkScaffoldingTool.js.map +1 -1
  264. package/dist/services/ai/tools/fillScaffoldingTool.d.ts +24 -9
  265. package/dist/services/ai/tools/fillScaffoldingTool.d.ts.map +1 -1
  266. package/dist/services/ai/tools/fillScaffoldingTool.js +46 -130
  267. package/dist/services/ai/tools/fillScaffoldingTool.js.map +1 -1
  268. package/dist/services/ai/tools/getCodebaseMapTool.d.ts +1 -1
  269. package/dist/services/ai/tools/getCodebaseMapTool.d.ts.map +1 -1
  270. package/dist/services/ai/tools/getCodebaseMapTool.js +4 -1
  271. package/dist/services/ai/tools/getCodebaseMapTool.js.map +1 -1
  272. package/dist/services/ai/tools/index.d.ts +1 -1
  273. package/dist/services/ai/tools/index.d.ts.map +1 -1
  274. package/dist/services/ai/tools/index.js +3 -1
  275. package/dist/services/ai/tools/index.js.map +1 -1
  276. package/dist/services/ai/tools/initializeContextTool.d.ts +109 -7
  277. package/dist/services/ai/tools/initializeContextTool.d.ts.map +1 -1
  278. package/dist/services/ai/tools/initializeContextTool.js +282 -17
  279. package/dist/services/ai/tools/initializeContextTool.js.map +1 -1
  280. package/dist/services/ai/tools/scaffoldPlanTool.d.ts +17 -1
  281. package/dist/services/ai/tools/scaffoldPlanTool.d.ts.map +1 -1
  282. package/dist/services/ai/tools/scaffoldPlanTool.js +94 -5
  283. package/dist/services/ai/tools/scaffoldPlanTool.js.map +1 -1
  284. package/dist/services/ai/tools/toolFactory.d.ts +35 -0
  285. package/dist/services/ai/tools/toolFactory.d.ts.map +1 -0
  286. package/dist/services/ai/tools/toolFactory.js +20 -0
  287. package/dist/services/ai/tools/toolFactory.js.map +1 -0
  288. package/dist/services/export/contextExportService.d.ts +45 -0
  289. package/dist/services/export/contextExportService.d.ts.map +1 -0
  290. package/dist/services/export/contextExportService.js +161 -0
  291. package/dist/services/export/contextExportService.js.map +1 -0
  292. package/dist/services/export/exportRulesService.d.ts +15 -1
  293. package/dist/services/export/exportRulesService.d.ts.map +1 -1
  294. package/dist/services/export/exportRulesService.js +100 -36
  295. package/dist/services/export/exportRulesService.js.map +1 -1
  296. package/dist/services/export/index.d.ts +2 -0
  297. package/dist/services/export/index.d.ts.map +1 -1
  298. package/dist/services/export/index.js +3 -1
  299. package/dist/services/export/index.js.map +1 -1
  300. package/dist/services/export/skillExportService.d.ts +6 -1
  301. package/dist/services/export/skillExportService.d.ts.map +1 -1
  302. package/dist/services/export/skillExportService.js +46 -22
  303. package/dist/services/export/skillExportService.js.map +1 -1
  304. package/dist/services/fill/fillService.d.ts.map +1 -1
  305. package/dist/services/fill/fillService.js +30 -3
  306. package/dist/services/fill/fillService.js.map +1 -1
  307. package/dist/services/fill/skillFillService.d.ts.map +1 -1
  308. package/dist/services/fill/skillFillService.js +8 -1
  309. package/dist/services/fill/skillFillService.js.map +1 -1
  310. package/dist/services/import/presets.d.ts +12 -0
  311. package/dist/services/import/presets.d.ts.map +1 -1
  312. package/dist/services/import/presets.js +32 -152
  313. package/dist/services/import/presets.js.map +1 -1
  314. package/dist/services/init/initService.d.ts +1 -0
  315. package/dist/services/init/initService.d.ts.map +1 -1
  316. package/dist/services/init/initService.js +42 -9
  317. package/dist/services/init/initService.js.map +1 -1
  318. package/dist/services/mcp/actionLogger.d.ts +19 -0
  319. package/dist/services/mcp/actionLogger.d.ts.map +1 -0
  320. package/dist/services/mcp/actionLogger.js +128 -0
  321. package/dist/services/mcp/actionLogger.js.map +1 -0
  322. package/dist/services/mcp/gateway/agent.d.ts +17 -0
  323. package/dist/services/mcp/gateway/agent.d.ts.map +1 -0
  324. package/dist/services/mcp/gateway/agent.js +147 -0
  325. package/dist/services/mcp/gateway/agent.js.map +1 -0
  326. package/dist/services/mcp/gateway/context.d.ts +21 -0
  327. package/dist/services/mcp/gateway/context.d.ts.map +1 -0
  328. package/dist/services/mcp/gateway/context.js +249 -0
  329. package/dist/services/mcp/gateway/context.js.map +1 -0
  330. package/dist/services/mcp/gateway/explore.d.ts +16 -0
  331. package/dist/services/mcp/gateway/explore.d.ts.map +1 -0
  332. package/dist/services/mcp/gateway/explore.js +60 -0
  333. package/dist/services/mcp/gateway/explore.js.map +1 -0
  334. package/dist/services/mcp/gateway/index.d.ts +24 -0
  335. package/dist/services/mcp/gateway/index.d.ts.map +1 -0
  336. package/dist/services/mcp/gateway/index.js +53 -0
  337. package/dist/services/mcp/gateway/index.js.map +1 -0
  338. package/dist/services/mcp/gateway/metrics.d.ts +56 -0
  339. package/dist/services/mcp/gateway/metrics.d.ts.map +1 -0
  340. package/dist/services/mcp/gateway/metrics.js +153 -0
  341. package/dist/services/mcp/gateway/metrics.js.map +1 -0
  342. package/dist/services/mcp/gateway/plan.d.ts +18 -0
  343. package/dist/services/mcp/gateway/plan.d.ts.map +1 -0
  344. package/dist/services/mcp/gateway/plan.js +273 -0
  345. package/dist/services/mcp/gateway/plan.js.map +1 -0
  346. package/dist/services/mcp/gateway/project.d.ts +16 -0
  347. package/dist/services/mcp/gateway/project.d.ts.map +1 -0
  348. package/dist/services/mcp/gateway/project.js +149 -0
  349. package/dist/services/mcp/gateway/project.js.map +1 -0
  350. package/dist/services/mcp/gateway/projectReport.d.ts +20 -0
  351. package/dist/services/mcp/gateway/projectReport.d.ts.map +1 -0
  352. package/dist/services/mcp/gateway/projectReport.js +61 -0
  353. package/dist/services/mcp/gateway/projectReport.js.map +1 -0
  354. package/dist/services/mcp/gateway/projectSetup.d.ts +29 -0
  355. package/dist/services/mcp/gateway/projectSetup.d.ts.map +1 -0
  356. package/dist/services/mcp/gateway/projectSetup.js +141 -0
  357. package/dist/services/mcp/gateway/projectSetup.js.map +1 -0
  358. package/dist/services/mcp/gateway/response.d.ts +45 -0
  359. package/dist/services/mcp/gateway/response.d.ts.map +1 -0
  360. package/dist/services/mcp/gateway/response.js +111 -0
  361. package/dist/services/mcp/gateway/response.js.map +1 -0
  362. package/dist/services/mcp/gateway/shared.d.ts +38 -0
  363. package/dist/services/mcp/gateway/shared.d.ts.map +1 -0
  364. package/dist/services/mcp/gateway/shared.js +39 -0
  365. package/dist/services/mcp/gateway/shared.js.map +1 -0
  366. package/dist/services/mcp/gateway/skill.d.ts +17 -0
  367. package/dist/services/mcp/gateway/skill.d.ts.map +1 -0
  368. package/dist/services/mcp/gateway/skill.js +323 -0
  369. package/dist/services/mcp/gateway/skill.js.map +1 -0
  370. package/dist/services/mcp/gateway/sync.d.ts +17 -0
  371. package/dist/services/mcp/gateway/sync.d.ts.map +1 -0
  372. package/dist/services/mcp/gateway/sync.js +219 -0
  373. package/dist/services/mcp/gateway/sync.js.map +1 -0
  374. package/dist/services/mcp/gateway/types.d.ts +116 -0
  375. package/dist/services/mcp/gateway/types.d.ts.map +1 -0
  376. package/dist/services/mcp/gateway/types.js +12 -0
  377. package/dist/services/mcp/gateway/types.js.map +1 -0
  378. package/dist/services/mcp/gateway/workflow.d.ts +18 -0
  379. package/dist/services/mcp/gateway/workflow.d.ts.map +1 -0
  380. package/dist/services/mcp/gateway/workflow.js +317 -0
  381. package/dist/services/mcp/gateway/workflow.js.map +1 -0
  382. package/dist/services/mcp/gateway/workflowAdvance.d.ts +25 -0
  383. package/dist/services/mcp/gateway/workflowAdvance.d.ts.map +1 -0
  384. package/dist/services/mcp/gateway/workflowAdvance.js +133 -0
  385. package/dist/services/mcp/gateway/workflowAdvance.js.map +1 -0
  386. package/dist/services/mcp/gateway/workflowInit.d.ts +28 -0
  387. package/dist/services/mcp/gateway/workflowInit.d.ts.map +1 -0
  388. package/dist/services/mcp/gateway/workflowInit.js +213 -0
  389. package/dist/services/mcp/gateway/workflowInit.js.map +1 -0
  390. package/dist/services/mcp/gateway/workflowManage.d.ts +31 -0
  391. package/dist/services/mcp/gateway/workflowManage.d.ts.map +1 -0
  392. package/dist/services/mcp/gateway/workflowManage.js +222 -0
  393. package/dist/services/mcp/gateway/workflowManage.js.map +1 -0
  394. package/dist/services/mcp/gateway/workflowStatus.d.ts +17 -0
  395. package/dist/services/mcp/gateway/workflowStatus.d.ts.map +1 -0
  396. package/dist/services/mcp/gateway/workflowStatus.js +91 -0
  397. package/dist/services/mcp/gateway/workflowStatus.js.map +1 -0
  398. package/dist/services/mcp/gatewayTools.d.ts +15 -0
  399. package/dist/services/mcp/gatewayTools.d.ts.map +1 -0
  400. package/dist/services/mcp/gatewayTools.js +38 -0
  401. package/dist/services/mcp/gatewayTools.js.map +1 -0
  402. package/dist/services/mcp/index.d.ts +7 -0
  403. package/dist/services/mcp/index.d.ts.map +1 -1
  404. package/dist/services/mcp/index.js +22 -1
  405. package/dist/services/mcp/index.js.map +1 -1
  406. package/dist/services/mcp/mcpInstallService.d.ts +56 -0
  407. package/dist/services/mcp/mcpInstallService.d.ts.map +1 -0
  408. package/dist/services/mcp/mcpInstallService.js +549 -0
  409. package/dist/services/mcp/mcpInstallService.js.map +1 -0
  410. package/dist/services/mcp/mcpServer.d.ts +45 -19
  411. package/dist/services/mcp/mcpServer.d.ts.map +1 -1
  412. package/dist/services/mcp/mcpServer.js +637 -1696
  413. package/dist/services/mcp/mcpServer.js.map +1 -1
  414. package/dist/services/passthrough/protocol.d.ts +4 -4
  415. package/dist/services/qa/index.d.ts +9 -0
  416. package/dist/services/qa/index.d.ts.map +1 -0
  417. package/dist/services/qa/index.js +15 -0
  418. package/dist/services/qa/index.js.map +1 -0
  419. package/dist/services/qa/patternInferer.d.ts +41 -0
  420. package/dist/services/qa/patternInferer.d.ts.map +1 -0
  421. package/dist/services/qa/patternInferer.js +366 -0
  422. package/dist/services/qa/patternInferer.js.map +1 -0
  423. package/dist/services/qa/qaService.d.ts +107 -0
  424. package/dist/services/qa/qaService.d.ts.map +1 -0
  425. package/dist/services/qa/qaService.js +874 -0
  426. package/dist/services/qa/qaService.js.map +1 -0
  427. package/dist/services/qa/topicDetector.d.ts +54 -0
  428. package/dist/services/qa/topicDetector.d.ts.map +1 -0
  429. package/dist/services/qa/topicDetector.js +306 -0
  430. package/dist/services/qa/topicDetector.js.map +1 -0
  431. package/dist/services/quickSync/quickSyncService.d.ts.map +1 -1
  432. package/dist/services/quickSync/quickSyncService.js +6 -10
  433. package/dist/services/quickSync/quickSyncService.js.map +1 -1
  434. package/dist/services/reverseSync/importSkillsService.d.ts +47 -0
  435. package/dist/services/reverseSync/importSkillsService.d.ts.map +1 -0
  436. package/dist/services/reverseSync/importSkillsService.js +362 -0
  437. package/dist/services/reverseSync/importSkillsService.js.map +1 -0
  438. package/dist/services/reverseSync/index.d.ts +12 -0
  439. package/dist/services/reverseSync/index.d.ts.map +1 -0
  440. package/dist/services/reverseSync/index.js +49 -0
  441. package/dist/services/reverseSync/index.js.map +1 -0
  442. package/dist/services/reverseSync/presets.d.ts +51 -0
  443. package/dist/services/reverseSync/presets.d.ts.map +1 -0
  444. package/dist/services/reverseSync/presets.js +77 -0
  445. package/dist/services/reverseSync/presets.js.map +1 -0
  446. package/dist/services/reverseSync/reverseQuickSyncService.d.ts +37 -0
  447. package/dist/services/reverseSync/reverseQuickSyncService.d.ts.map +1 -0
  448. package/dist/services/reverseSync/reverseQuickSyncService.js +265 -0
  449. package/dist/services/reverseSync/reverseQuickSyncService.js.map +1 -0
  450. package/dist/services/reverseSync/skillsDetector.d.ts +36 -0
  451. package/dist/services/reverseSync/skillsDetector.d.ts.map +1 -0
  452. package/dist/services/reverseSync/skillsDetector.js +287 -0
  453. package/dist/services/reverseSync/skillsDetector.js.map +1 -0
  454. package/dist/services/reverseSync/toolDetector.d.ts +36 -0
  455. package/dist/services/reverseSync/toolDetector.d.ts.map +1 -0
  456. package/dist/services/reverseSync/toolDetector.js +174 -0
  457. package/dist/services/reverseSync/toolDetector.js.map +1 -0
  458. package/dist/services/reverseSync/types.d.ts +203 -0
  459. package/dist/services/reverseSync/types.d.ts.map +1 -0
  460. package/dist/services/reverseSync/types.js +9 -0
  461. package/dist/services/reverseSync/types.js.map +1 -0
  462. package/dist/services/semantic/codebaseAnalyzer.d.ts +23 -1
  463. package/dist/services/semantic/codebaseAnalyzer.d.ts.map +1 -1
  464. package/dist/services/semantic/codebaseAnalyzer.js +531 -0
  465. package/dist/services/semantic/codebaseAnalyzer.js.map +1 -1
  466. package/dist/services/semantic/contextBuilder.d.ts.map +1 -1
  467. package/dist/services/semantic/contextBuilder.js +23 -8
  468. package/dist/services/semantic/contextBuilder.js.map +1 -1
  469. package/dist/services/semantic/types.d.ts +50 -0
  470. package/dist/services/semantic/types.d.ts.map +1 -1
  471. package/dist/services/semantic/types.js.map +1 -1
  472. package/dist/services/shared/contentTypeRegistry.d.ts +66 -0
  473. package/dist/services/shared/contentTypeRegistry.d.ts.map +1 -0
  474. package/dist/services/shared/contentTypeRegistry.js +113 -0
  475. package/dist/services/shared/contentTypeRegistry.js.map +1 -0
  476. package/dist/services/shared/contextRootResolver.d.ts +57 -0
  477. package/dist/services/shared/contextRootResolver.d.ts.map +1 -0
  478. package/dist/services/shared/contextRootResolver.js +102 -0
  479. package/dist/services/shared/contextRootResolver.js.map +1 -0
  480. package/dist/services/shared/index.d.ts +4 -1
  481. package/dist/services/shared/index.d.ts.map +1 -1
  482. package/dist/services/shared/index.js +39 -1
  483. package/dist/services/shared/index.js.map +1 -1
  484. package/dist/services/shared/pathHelpers.d.ts +15 -1
  485. package/dist/services/shared/pathHelpers.d.ts.map +1 -1
  486. package/dist/services/shared/pathHelpers.js +26 -1
  487. package/dist/services/shared/pathHelpers.js.map +1 -1
  488. package/dist/services/shared/toolRegistry.d.ts +135 -0
  489. package/dist/services/shared/toolRegistry.d.ts.map +1 -0
  490. package/dist/services/shared/toolRegistry.js +515 -0
  491. package/dist/services/shared/toolRegistry.js.map +1 -0
  492. package/dist/services/stack/scaffoldFilter.d.ts +1 -1
  493. package/dist/services/sync/presets.d.ts +3 -0
  494. package/dist/services/sync/presets.d.ts.map +1 -1
  495. package/dist/services/sync/presets.js +20 -32
  496. package/dist/services/sync/presets.js.map +1 -1
  497. package/dist/services/sync/syncService.d.ts +8 -0
  498. package/dist/services/sync/syncService.d.ts.map +1 -1
  499. package/dist/services/sync/syncService.js +21 -2
  500. package/dist/services/sync/syncService.js.map +1 -1
  501. package/dist/services/sync/types.d.ts +1 -1
  502. package/dist/services/sync/types.d.ts.map +1 -1
  503. package/dist/services/tools/index.d.ts +95 -0
  504. package/dist/services/tools/index.d.ts.map +1 -0
  505. package/dist/services/tools/index.js +236 -0
  506. package/dist/services/tools/index.js.map +1 -0
  507. package/dist/services/workflow/workflowService.d.ts +57 -4
  508. package/dist/services/workflow/workflowService.d.ts.map +1 -1
  509. package/dist/services/workflow/workflowService.js +79 -6
  510. package/dist/services/workflow/workflowService.js.map +1 -1
  511. package/dist/types/scaffoldFrontmatter.d.ts +145 -0
  512. package/dist/types/scaffoldFrontmatter.d.ts.map +1 -0
  513. package/dist/types/scaffoldFrontmatter.js +172 -0
  514. package/dist/types/scaffoldFrontmatter.js.map +1 -0
  515. package/dist/utils/cliUI.d.ts +1 -1
  516. package/dist/utils/cliUI.d.ts.map +1 -1
  517. package/dist/utils/cliUI.js +4 -1
  518. package/dist/utils/cliUI.js.map +1 -1
  519. package/dist/utils/frontMatter.d.ts +48 -0
  520. package/dist/utils/frontMatter.d.ts.map +1 -1
  521. package/dist/utils/frontMatter.js +135 -0
  522. package/dist/utils/frontMatter.js.map +1 -1
  523. package/dist/utils/gitService.d.ts +26 -0
  524. package/dist/utils/gitService.d.ts.map +1 -1
  525. package/dist/utils/gitService.js +96 -0
  526. package/dist/utils/gitService.js.map +1 -1
  527. package/dist/utils/i18n.d.ts +43 -2
  528. package/dist/utils/i18n.d.ts.map +1 -1
  529. package/dist/utils/i18n.js +96 -6
  530. package/dist/utils/i18n.js.map +1 -1
  531. package/dist/utils/prompts/index.d.ts +4 -0
  532. package/dist/utils/prompts/index.d.ts.map +1 -1
  533. package/dist/utils/prompts/index.js +15 -0
  534. package/dist/utils/prompts/index.js.map +1 -1
  535. package/dist/workflow/errors.d.ts +48 -0
  536. package/dist/workflow/errors.d.ts.map +1 -0
  537. package/dist/workflow/errors.js +52 -0
  538. package/dist/workflow/errors.js.map +1 -0
  539. package/dist/workflow/gates/gateChecker.d.ts +93 -0
  540. package/dist/workflow/gates/gateChecker.d.ts.map +1 -0
  541. package/dist/workflow/gates/gateChecker.js +197 -0
  542. package/dist/workflow/gates/gateChecker.js.map +1 -0
  543. package/dist/workflow/gates/index.d.ts +7 -0
  544. package/dist/workflow/gates/index.d.ts.map +1 -0
  545. package/dist/workflow/gates/index.js +13 -0
  546. package/dist/workflow/gates/index.js.map +1 -0
  547. package/dist/workflow/index.d.ts +4 -2
  548. package/dist/workflow/index.d.ts.map +1 -1
  549. package/dist/workflow/index.js +14 -3
  550. package/dist/workflow/index.js.map +1 -1
  551. package/dist/workflow/orchestrator.d.ts +94 -5
  552. package/dist/workflow/orchestrator.d.ts.map +1 -1
  553. package/dist/workflow/orchestrator.js +300 -11
  554. package/dist/workflow/orchestrator.js.map +1 -1
  555. package/dist/workflow/plans/planLinker.d.ts +79 -3
  556. package/dist/workflow/plans/planLinker.d.ts.map +1 -1
  557. package/dist/workflow/plans/planLinker.js +522 -3
  558. package/dist/workflow/plans/planLinker.js.map +1 -1
  559. package/dist/workflow/plans/types.d.ts +64 -0
  560. package/dist/workflow/plans/types.d.ts.map +1 -1
  561. package/dist/workflow/roles.d.ts +6 -0
  562. package/dist/workflow/roles.d.ts.map +1 -1
  563. package/dist/workflow/roles.js +6 -0
  564. package/dist/workflow/roles.js.map +1 -1
  565. package/dist/workflow/scaling.d.ts +1 -0
  566. package/dist/workflow/scaling.d.ts.map +1 -1
  567. package/dist/workflow/scaling.js +8 -17
  568. package/dist/workflow/scaling.js.map +1 -1
  569. package/dist/workflow/status/statusManager.d.ts +54 -1
  570. package/dist/workflow/status/statusManager.d.ts.map +1 -1
  571. package/dist/workflow/status/statusManager.js +539 -9
  572. package/dist/workflow/status/statusManager.js.map +1 -1
  573. package/dist/workflow/status/templates.d.ts +14 -5
  574. package/dist/workflow/status/templates.d.ts.map +1 -1
  575. package/dist/workflow/status/templates.js +55 -41
  576. package/dist/workflow/status/templates.js.map +1 -1
  577. package/dist/workflow/types.d.ts +138 -2
  578. package/dist/workflow/types.d.ts.map +1 -1
  579. package/dist/workflow/types.js +0 -1
  580. package/dist/workflow/types.js.map +1 -1
  581. package/package.json +1 -1
@@ -0,0 +1,874 @@
1
+ "use strict";
2
+ /**
3
+ * Q&A Service
4
+ *
5
+ * Generates and manages Q&A content for the codebase.
6
+ * Pre-answers common questions to reduce token usage during sessions.
7
+ *
8
+ * OPTIMIZATION: Uses codebase-map.json when available to avoid re-analyzing
9
+ * the codebase. This provides ~10x faster Q&A generation when the map exists.
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.QAService = void 0;
46
+ const fs = __importStar(require("fs-extra"));
47
+ const path = __importStar(require("path"));
48
+ const codebaseAnalyzer_1 = require("../semantic/codebaseAnalyzer");
49
+ const stackDetector_1 = require("../stack/stackDetector");
50
+ const topicDetector_1 = require("./topicDetector");
51
+ const patternInferer_1 = require("./patternInferer");
52
+ /**
53
+ * Q&A Service for generating and searching Q&A content
54
+ */
55
+ class QAService {
56
+ constructor(options) {
57
+ this.analyzer = new codebaseAnalyzer_1.CodebaseAnalyzer(options);
58
+ this.stackDetector = new stackDetector_1.StackDetector();
59
+ this.topicDetector = new topicDetector_1.TopicDetector();
60
+ this.patternInferer = new patternInferer_1.PatternInferer();
61
+ }
62
+ /**
63
+ * Generate Q&A from codebase analysis
64
+ *
65
+ * OPTIMIZATION: Uses codebase-map.json when available to avoid re-analyzing.
66
+ * If the map doesn't exist, falls back to full analysis.
67
+ */
68
+ async generateFromCodebase(repoPath) {
69
+ const absolutePath = path.resolve(repoPath);
70
+ // Try to use pre-computed codebase map for faster generation
71
+ const codebaseMap = await this.loadCodebaseMap(absolutePath);
72
+ let stack;
73
+ let patterns;
74
+ if (codebaseMap) {
75
+ // Use pre-computed data from codebase-map.json (fast path)
76
+ stack = this.convertMapStackToStackInfo(codebaseMap);
77
+ patterns = this.patternInferer.inferFromMap(codebaseMap);
78
+ }
79
+ else {
80
+ // Fall back to full analysis (slow path)
81
+ stack = await this.stackDetector.detect(absolutePath);
82
+ patterns = await this.analyzer.detectFunctionalPatterns(absolutePath);
83
+ }
84
+ // Determine relevant topics
85
+ const topicDetection = this.topicDetector.detectTopics(stack, patterns);
86
+ // Generate Q&A for each topic
87
+ const generated = [];
88
+ const skipped = [];
89
+ for (const topic of topicDetection.topics) {
90
+ try {
91
+ const entry = await this.generateQAForTopic(absolutePath, topic, stack, patterns, topicDetection);
92
+ if (entry) {
93
+ generated.push(entry);
94
+ }
95
+ else {
96
+ skipped.push(topic.slug);
97
+ }
98
+ }
99
+ catch {
100
+ skipped.push(topic.slug);
101
+ }
102
+ }
103
+ // Save generated Q&A
104
+ await this.saveQAEntries(absolutePath, generated, topicDetection);
105
+ return {
106
+ generated,
107
+ skipped,
108
+ topicDetection,
109
+ };
110
+ }
111
+ /**
112
+ * Search Q&A entries for a query
113
+ */
114
+ async search(repoPath, query) {
115
+ const qaDir = path.join(repoPath, '.context', 'docs', 'qa');
116
+ if (!(await fs.pathExists(qaDir))) {
117
+ return [];
118
+ }
119
+ const results = [];
120
+ const files = await fs.readdir(qaDir);
121
+ const queryLower = query.toLowerCase();
122
+ const queryWords = queryLower.split(/\s+/).filter((w) => w.length > 2);
123
+ for (const file of files) {
124
+ if (!file.endsWith('.md') || file === 'README.md')
125
+ continue;
126
+ try {
127
+ const content = await fs.readFile(path.join(qaDir, file), 'utf-8');
128
+ const entry = this.parseQAEntry(content, file);
129
+ if (!entry)
130
+ continue;
131
+ // Calculate relevance score
132
+ const { score, reason } = this.calculateRelevance(entry, queryLower, queryWords);
133
+ if (score > 0) {
134
+ results.push({
135
+ entry,
136
+ score,
137
+ matchReason: reason,
138
+ });
139
+ }
140
+ }
141
+ catch {
142
+ // Skip files that can't be read
143
+ }
144
+ }
145
+ // Sort by score descending
146
+ results.sort((a, b) => b.score - a.score);
147
+ return results.slice(0, 10);
148
+ }
149
+ /**
150
+ * Get all Q&A entries
151
+ */
152
+ async getAll(repoPath) {
153
+ const qaDir = path.join(repoPath, '.context', 'docs', 'qa');
154
+ if (!(await fs.pathExists(qaDir))) {
155
+ return [];
156
+ }
157
+ const entries = [];
158
+ const files = await fs.readdir(qaDir);
159
+ for (const file of files) {
160
+ if (!file.endsWith('.md') || file === 'README.md')
161
+ continue;
162
+ try {
163
+ const content = await fs.readFile(path.join(qaDir, file), 'utf-8');
164
+ const entry = this.parseQAEntry(content, file);
165
+ if (entry) {
166
+ entries.push(entry);
167
+ }
168
+ }
169
+ catch {
170
+ // Skip files that can't be read
171
+ }
172
+ }
173
+ return entries;
174
+ }
175
+ /**
176
+ * Get a specific Q&A entry by slug
177
+ */
178
+ async getBySlug(repoPath, slug) {
179
+ const qaFile = path.join(repoPath, '.context', 'docs', 'qa', `${slug}.md`);
180
+ if (!(await fs.pathExists(qaFile))) {
181
+ return null;
182
+ }
183
+ try {
184
+ const content = await fs.readFile(qaFile, 'utf-8');
185
+ return this.parseQAEntry(content, `${slug}.md`);
186
+ }
187
+ catch {
188
+ return null;
189
+ }
190
+ }
191
+ /**
192
+ * Generate Q&A entry for a specific topic
193
+ */
194
+ async generateQAForTopic(repoPath, topic, stack, patterns, topicResult) {
195
+ const relevantFiles = [];
196
+ let answer = '';
197
+ switch (topic.slug) {
198
+ case 'getting-started':
199
+ answer = this.generateGettingStartedAnswer(stack, repoPath);
200
+ break;
201
+ case 'project-structure':
202
+ answer = await this.generateProjectStructureAnswer(repoPath, stack);
203
+ relevantFiles.push(...(await this.findRelevantFiles(repoPath, ['src/', 'lib/', 'app/'])));
204
+ break;
205
+ case 'cli-commands':
206
+ answer = this.generateCLICommandsAnswer(stack);
207
+ relevantFiles.push(...(await this.findRelevantFiles(repoPath, ['bin/', 'cli', 'commands/'])));
208
+ break;
209
+ case 'cli-arguments':
210
+ answer = this.generateCLIArgumentsAnswer(stack);
211
+ break;
212
+ case 'routing':
213
+ answer = await this.generateRoutingAnswer(repoPath, stack, patterns);
214
+ relevantFiles.push(...(await this.findRelevantFiles(repoPath, ['routes/', 'api/', 'pages/'])));
215
+ break;
216
+ case 'middleware':
217
+ answer = await this.generateMiddlewareAnswer(repoPath, patterns);
218
+ relevantFiles.push(...(await this.findRelevantFiles(repoPath, ['middleware/', 'middlewares/'])));
219
+ break;
220
+ case 'authentication':
221
+ answer = this.generateAuthAnswer(patterns);
222
+ relevantFiles.push(...this.getPatternFiles(patterns, 'auth', repoPath));
223
+ break;
224
+ case 'database':
225
+ answer = this.generateDatabaseAnswer(patterns);
226
+ relevantFiles.push(...this.getPatternFiles(patterns, 'database', repoPath));
227
+ break;
228
+ case 'api-endpoints':
229
+ answer = await this.generateAPIEndpointsAnswer(repoPath, patterns);
230
+ relevantFiles.push(...this.getPatternFiles(patterns, 'api', repoPath));
231
+ break;
232
+ case 'testing':
233
+ answer = this.generateTestingAnswer(stack, patterns);
234
+ relevantFiles.push(...(await this.findRelevantFiles(repoPath, ['test/', 'tests/', '__tests__/', '*.test.', '*.spec.'])));
235
+ break;
236
+ case 'error-handling':
237
+ answer = this.generateErrorHandlingAnswer(patterns);
238
+ relevantFiles.push(...this.getPatternFiles(patterns, 'error-handling', repoPath));
239
+ break;
240
+ case 'caching':
241
+ answer = this.generateCachingAnswer(patterns);
242
+ relevantFiles.push(...this.getPatternFiles(patterns, 'cache', repoPath));
243
+ break;
244
+ case 'realtime':
245
+ answer = this.generateRealtimeAnswer(patterns);
246
+ relevantFiles.push(...this.getPatternFiles(patterns, 'websocket', repoPath));
247
+ break;
248
+ case 'background-jobs':
249
+ answer = this.generateBackgroundJobsAnswer(patterns);
250
+ relevantFiles.push(...this.getPatternFiles(patterns, 'queue', repoPath));
251
+ break;
252
+ case 'deployment':
253
+ answer = this.generateDeploymentAnswer(stack);
254
+ relevantFiles.push(...(await this.findRelevantFiles(repoPath, ['Dockerfile', 'docker-compose', '.github/workflows/'])));
255
+ break;
256
+ default:
257
+ return null;
258
+ }
259
+ if (!answer)
260
+ return null;
261
+ return {
262
+ slug: topic.slug,
263
+ question: topic.question,
264
+ answer,
265
+ category: topic.category,
266
+ generatedAt: new Date().toISOString(),
267
+ relevantFiles: [...new Set(relevantFiles)].slice(0, 10),
268
+ };
269
+ }
270
+ // Answer generation methods
271
+ generateGettingStartedAnswer(stack, repoPath) {
272
+ const lines = [];
273
+ lines.push('## Getting Started\n');
274
+ // Prerequisites
275
+ lines.push('### Prerequisites\n');
276
+ if (stack.primaryLanguage === 'typescript' || stack.primaryLanguage === 'javascript') {
277
+ lines.push('- Node.js (LTS version recommended)');
278
+ if (stack.packageManager) {
279
+ lines.push(`- ${stack.packageManager}`);
280
+ }
281
+ }
282
+ else if (stack.primaryLanguage === 'python') {
283
+ lines.push('- Python 3.8+');
284
+ if (stack.packageManager === 'poetry') {
285
+ lines.push('- Poetry');
286
+ }
287
+ else if (stack.packageManager === 'pipenv') {
288
+ lines.push('- Pipenv');
289
+ }
290
+ }
291
+ lines.push('');
292
+ // Installation
293
+ lines.push('### Installation\n');
294
+ lines.push('```bash');
295
+ lines.push('# Clone the repository');
296
+ lines.push('git clone <repository-url>');
297
+ lines.push(`cd ${path.basename(repoPath)}`);
298
+ lines.push('');
299
+ // Install dependencies
300
+ if (stack.packageManager === 'yarn') {
301
+ lines.push('# Install dependencies');
302
+ lines.push('yarn install');
303
+ }
304
+ else if (stack.packageManager === 'pnpm') {
305
+ lines.push('# Install dependencies');
306
+ lines.push('pnpm install');
307
+ }
308
+ else if (stack.packageManager === 'bun') {
309
+ lines.push('# Install dependencies');
310
+ lines.push('bun install');
311
+ }
312
+ else if (stack.primaryLanguage === 'typescript' || stack.primaryLanguage === 'javascript') {
313
+ lines.push('# Install dependencies');
314
+ lines.push('npm install');
315
+ }
316
+ else if (stack.packageManager === 'poetry') {
317
+ lines.push('# Install dependencies');
318
+ lines.push('poetry install');
319
+ }
320
+ else if (stack.packageManager === 'pipenv') {
321
+ lines.push('# Install dependencies');
322
+ lines.push('pipenv install');
323
+ }
324
+ else if (stack.primaryLanguage === 'python') {
325
+ lines.push('# Install dependencies');
326
+ lines.push('pip install -r requirements.txt');
327
+ }
328
+ lines.push('```\n');
329
+ // Running
330
+ lines.push('### Running\n');
331
+ lines.push('```bash');
332
+ if (stack.buildTools.includes('vite')) {
333
+ lines.push('# Development');
334
+ lines.push('npm run dev');
335
+ }
336
+ else if (stack.frameworks.includes('nextjs')) {
337
+ lines.push('# Development');
338
+ lines.push('npm run dev');
339
+ }
340
+ else if (stack.frameworks.includes('express') || stack.frameworks.includes('nestjs') || stack.frameworks.includes('fastify')) {
341
+ lines.push('# Development');
342
+ lines.push('npm run dev');
343
+ lines.push('');
344
+ lines.push('# Production');
345
+ lines.push('npm run build && npm start');
346
+ }
347
+ else {
348
+ lines.push('# See package.json for available scripts');
349
+ lines.push('npm run <script-name>');
350
+ }
351
+ lines.push('```');
352
+ return lines.join('\n');
353
+ }
354
+ async generateProjectStructureAnswer(repoPath, stack) {
355
+ const lines = [];
356
+ lines.push('## Project Structure\n');
357
+ // Try to read actual directory structure
358
+ try {
359
+ const entries = await fs.readdir(repoPath, { withFileTypes: true });
360
+ const dirs = entries
361
+ .filter((e) => e.isDirectory() && !e.name.startsWith('.') && e.name !== 'node_modules')
362
+ .map((e) => e.name)
363
+ .slice(0, 15);
364
+ if (dirs.length > 0) {
365
+ lines.push('```');
366
+ for (const dir of dirs) {
367
+ lines.push(`${dir}/`);
368
+ }
369
+ lines.push('```\n');
370
+ }
371
+ }
372
+ catch {
373
+ // Ignore errors
374
+ }
375
+ // Add framework-specific structure hints
376
+ if (stack.frameworks.includes('nextjs')) {
377
+ lines.push('### Next.js Structure\n');
378
+ lines.push('- `app/` or `pages/` - Routes and pages');
379
+ lines.push('- `components/` - Reusable UI components');
380
+ lines.push('- `lib/` - Utility functions');
381
+ lines.push('- `public/` - Static assets');
382
+ }
383
+ else if (stack.frameworks.includes('nestjs')) {
384
+ lines.push('### NestJS Structure\n');
385
+ lines.push('- `src/` - Source code');
386
+ lines.push(' - `modules/` - Feature modules');
387
+ lines.push(' - `common/` - Shared code');
388
+ lines.push(' - `main.ts` - Application entry');
389
+ }
390
+ else if (stack.frameworks.includes('express')) {
391
+ lines.push('### Express Structure\n');
392
+ lines.push('- `src/` - Source code');
393
+ lines.push('- `routes/` - Route handlers');
394
+ lines.push('- `middleware/` - Express middleware');
395
+ lines.push('- `controllers/` - Request handlers');
396
+ }
397
+ return lines.join('\n');
398
+ }
399
+ generateCLICommandsAnswer(stack) {
400
+ const lines = [];
401
+ lines.push('## CLI Commands\n');
402
+ if (stack.cliLibraries?.includes('commander')) {
403
+ lines.push('This CLI is built with Commander.js.\n');
404
+ lines.push('Run `<command> --help` to see available commands and options.\n');
405
+ }
406
+ else if (stack.cliLibraries?.includes('yargs')) {
407
+ lines.push('This CLI is built with Yargs.\n');
408
+ lines.push('Run `<command> --help` to see available commands and options.\n');
409
+ }
410
+ else if (stack.cliLibraries?.includes('oclif')) {
411
+ lines.push('This CLI is built with oclif.\n');
412
+ lines.push('Run `<command> help` to see available commands.\n');
413
+ }
414
+ lines.push('### Common Commands\n');
415
+ lines.push('See the documentation or source code for specific commands.');
416
+ return lines.join('\n');
417
+ }
418
+ generateCLIArgumentsAnswer(stack) {
419
+ const lines = [];
420
+ lines.push('## CLI Arguments and Options\n');
421
+ if (stack.cliLibraries?.includes('commander')) {
422
+ lines.push('### Commander.js Pattern\n');
423
+ lines.push('```bash');
424
+ lines.push('command [options] <required-arg> [optional-arg]');
425
+ lines.push('```\n');
426
+ lines.push('- Options: `--flag` or `-f`');
427
+ lines.push('- Option with value: `--name <value>`');
428
+ }
429
+ else if (stack.cliLibraries?.includes('yargs')) {
430
+ lines.push('### Yargs Pattern\n');
431
+ lines.push('```bash');
432
+ lines.push('command <positional> --flag --option=value');
433
+ lines.push('```');
434
+ }
435
+ return lines.join('\n');
436
+ }
437
+ async generateRoutingAnswer(repoPath, stack, patterns) {
438
+ const lines = [];
439
+ lines.push('## Routing\n');
440
+ if (stack.frameworks.includes('nextjs')) {
441
+ lines.push('### Next.js App Router\n');
442
+ lines.push('Routes are defined by the folder structure in `app/`:\n');
443
+ lines.push('- `app/page.tsx` → `/`');
444
+ lines.push('- `app/about/page.tsx` → `/about`');
445
+ lines.push('- `app/blog/[slug]/page.tsx` → `/blog/:slug`');
446
+ }
447
+ else if (stack.frameworks.includes('express') || stack.frameworks.includes('fastify')) {
448
+ lines.push(`### ${stack.frameworks.includes('express') ? 'Express' : 'Fastify'} Routing\n`);
449
+ lines.push('Routes are typically defined in route files:\n');
450
+ lines.push('```typescript');
451
+ lines.push('router.get(\'/path\', handler);');
452
+ lines.push('router.post(\'/path\', handler);');
453
+ lines.push('```');
454
+ }
455
+ else if (stack.frameworks.includes('nestjs')) {
456
+ lines.push('### NestJS Routing\n');
457
+ lines.push('Routes are defined using decorators:\n');
458
+ lines.push('```typescript');
459
+ lines.push('@Controller(\'users\')');
460
+ lines.push('class UsersController {');
461
+ lines.push(' @Get()');
462
+ lines.push(' findAll() { }');
463
+ lines.push('}');
464
+ lines.push('```');
465
+ }
466
+ // Add API pattern indicators
467
+ if (patterns.hasApiPattern) {
468
+ const apiIndicators = patterns.patterns.find((p) => p.type === 'api')?.indicators;
469
+ if (apiIndicators?.length) {
470
+ lines.push('\n### Detected Route Files\n');
471
+ for (const ind of apiIndicators.slice(0, 5)) {
472
+ if (ind.file) {
473
+ lines.push(`- \`${path.relative(repoPath, ind.file)}\``);
474
+ }
475
+ }
476
+ }
477
+ }
478
+ return lines.join('\n');
479
+ }
480
+ async generateMiddlewareAnswer(repoPath, patterns) {
481
+ const lines = [];
482
+ lines.push('## Middleware\n');
483
+ lines.push('Middleware functions process requests before they reach route handlers.\n');
484
+ if (patterns.hasAuthPattern) {
485
+ lines.push('### Authentication Middleware');
486
+ lines.push('The codebase includes authentication middleware.');
487
+ }
488
+ if (patterns.hasValidationPattern) {
489
+ lines.push('\n### Validation Middleware');
490
+ lines.push('Request validation is implemented using middleware.');
491
+ }
492
+ if (patterns.hasLoggingPattern) {
493
+ lines.push('\n### Logging Middleware');
494
+ lines.push('Request logging is handled by middleware.');
495
+ }
496
+ return lines.join('\n');
497
+ }
498
+ generateAuthAnswer(patterns) {
499
+ const lines = [];
500
+ lines.push('## Authentication\n');
501
+ const authPattern = patterns.patterns.find((p) => p.type === 'auth');
502
+ if (!authPattern) {
503
+ lines.push('Authentication patterns detected in the codebase.');
504
+ return lines.join('\n');
505
+ }
506
+ lines.push('### Implementation Details\n');
507
+ for (const ind of authPattern.indicators.slice(0, 5)) {
508
+ lines.push(`- ${ind.reason}`);
509
+ }
510
+ return lines.join('\n');
511
+ }
512
+ generateDatabaseAnswer(patterns) {
513
+ const lines = [];
514
+ lines.push('## Database\n');
515
+ const dbPattern = patterns.patterns.find((p) => p.type === 'database');
516
+ if (!dbPattern) {
517
+ lines.push('Database patterns detected in the codebase.');
518
+ return lines.join('\n');
519
+ }
520
+ lines.push('### Implementation Details\n');
521
+ for (const ind of dbPattern.indicators.slice(0, 5)) {
522
+ lines.push(`- ${ind.reason}`);
523
+ }
524
+ return lines.join('\n');
525
+ }
526
+ async generateAPIEndpointsAnswer(repoPath, patterns) {
527
+ const lines = [];
528
+ lines.push('## API Endpoints\n');
529
+ const apiPattern = patterns.patterns.find((p) => p.type === 'api');
530
+ if (!apiPattern) {
531
+ lines.push('API patterns detected in the codebase.');
532
+ return lines.join('\n');
533
+ }
534
+ lines.push('### Detected API Files\n');
535
+ for (const ind of apiPattern.indicators.slice(0, 8)) {
536
+ if (ind.file) {
537
+ lines.push(`- \`${path.relative(repoPath, ind.file)}\` - ${ind.reason}`);
538
+ }
539
+ }
540
+ return lines.join('\n');
541
+ }
542
+ generateTestingAnswer(stack, patterns) {
543
+ const lines = [];
544
+ lines.push('## Testing\n');
545
+ if (stack.testFrameworks.length > 0) {
546
+ lines.push(`### Test Frameworks: ${stack.testFrameworks.join(', ')}\n`);
547
+ }
548
+ lines.push('### Running Tests\n');
549
+ lines.push('```bash');
550
+ if (stack.testFrameworks.includes('jest')) {
551
+ lines.push('npm test');
552
+ lines.push('npm test -- --watch');
553
+ lines.push('npm test -- --coverage');
554
+ }
555
+ else if (stack.testFrameworks.includes('vitest')) {
556
+ lines.push('npm test');
557
+ lines.push('npm test -- --watch');
558
+ }
559
+ else if (stack.testFrameworks.includes('pytest')) {
560
+ lines.push('pytest');
561
+ lines.push('pytest --cov');
562
+ }
563
+ else {
564
+ lines.push('npm test');
565
+ }
566
+ lines.push('```');
567
+ return lines.join('\n');
568
+ }
569
+ generateErrorHandlingAnswer(patterns) {
570
+ const lines = [];
571
+ lines.push('## Error Handling\n');
572
+ const errorPattern = patterns.patterns.find((p) => p.type === 'error-handling');
573
+ if (!errorPattern) {
574
+ lines.push('Error handling patterns detected in the codebase.');
575
+ return lines.join('\n');
576
+ }
577
+ lines.push('### Implementation Details\n');
578
+ for (const ind of errorPattern.indicators.slice(0, 5)) {
579
+ lines.push(`- ${ind.reason}`);
580
+ }
581
+ return lines.join('\n');
582
+ }
583
+ generateCachingAnswer(patterns) {
584
+ const lines = [];
585
+ lines.push('## Caching\n');
586
+ const cachePattern = patterns.patterns.find((p) => p.type === 'cache');
587
+ if (!cachePattern) {
588
+ lines.push('Caching patterns detected in the codebase.');
589
+ return lines.join('\n');
590
+ }
591
+ lines.push('### Implementation Details\n');
592
+ for (const ind of cachePattern.indicators.slice(0, 5)) {
593
+ lines.push(`- ${ind.reason}`);
594
+ }
595
+ return lines.join('\n');
596
+ }
597
+ generateRealtimeAnswer(patterns) {
598
+ const lines = [];
599
+ lines.push('## Real-time Features\n');
600
+ const wsPattern = patterns.patterns.find((p) => p.type === 'websocket');
601
+ if (!wsPattern) {
602
+ lines.push('WebSocket patterns detected in the codebase.');
603
+ return lines.join('\n');
604
+ }
605
+ lines.push('### Implementation Details\n');
606
+ for (const ind of wsPattern.indicators.slice(0, 5)) {
607
+ lines.push(`- ${ind.reason}`);
608
+ }
609
+ return lines.join('\n');
610
+ }
611
+ generateBackgroundJobsAnswer(patterns) {
612
+ const lines = [];
613
+ lines.push('## Background Jobs\n');
614
+ const queuePattern = patterns.patterns.find((p) => p.type === 'queue');
615
+ if (!queuePattern) {
616
+ lines.push('Queue/job patterns detected in the codebase.');
617
+ return lines.join('\n');
618
+ }
619
+ lines.push('### Implementation Details\n');
620
+ for (const ind of queuePattern.indicators.slice(0, 5)) {
621
+ lines.push(`- ${ind.reason}`);
622
+ }
623
+ return lines.join('\n');
624
+ }
625
+ generateDeploymentAnswer(stack) {
626
+ const lines = [];
627
+ lines.push('## Deployment\n');
628
+ if (stack.hasDocker) {
629
+ lines.push('### Docker\n');
630
+ lines.push('This project includes Docker configuration.\n');
631
+ lines.push('```bash');
632
+ lines.push('docker build -t app .');
633
+ lines.push('docker run -p 3000:3000 app');
634
+ lines.push('```\n');
635
+ }
636
+ if (stack.hasCI) {
637
+ lines.push('### CI/CD\n');
638
+ lines.push('CI/CD pipelines are configured for this project.');
639
+ lines.push('Check `.github/workflows/` or equivalent for pipeline configuration.');
640
+ }
641
+ return lines.join('\n');
642
+ }
643
+ // Helper methods
644
+ getPatternFiles(patterns, type, repoPath) {
645
+ const pattern = patterns.patterns.find((p) => p.type === type);
646
+ if (!pattern)
647
+ return [];
648
+ return pattern.indicators
649
+ .filter((i) => i.file)
650
+ .map((i) => path.relative(repoPath, i.file))
651
+ .slice(0, 5);
652
+ }
653
+ async findRelevantFiles(repoPath, patterns) {
654
+ const results = [];
655
+ const excludeDirs = ['node_modules', '.git', 'dist', 'build', '.next', '.nuxt', 'coverage', '__pycache__', 'vendor'];
656
+ try {
657
+ const entries = await fs.readdir(repoPath, { withFileTypes: true, recursive: true });
658
+ for (const entry of entries) {
659
+ const relativePath = path.relative(repoPath, path.join(entry.parentPath || '', entry.name));
660
+ // Skip excluded directories
661
+ if (excludeDirs.some((dir) => relativePath.startsWith(dir + path.sep) || relativePath === dir)) {
662
+ continue;
663
+ }
664
+ for (const pattern of patterns) {
665
+ if (relativePath.includes(pattern)) {
666
+ results.push(relativePath);
667
+ break;
668
+ }
669
+ }
670
+ if (results.length >= 10)
671
+ break;
672
+ }
673
+ }
674
+ catch {
675
+ // Ignore errors
676
+ }
677
+ return results;
678
+ }
679
+ async saveQAEntries(repoPath, entries, topicResult) {
680
+ const qaDir = path.join(repoPath, '.context', 'docs', 'qa');
681
+ await fs.ensureDir(qaDir);
682
+ // Save individual entries
683
+ for (const entry of entries) {
684
+ const content = this.formatQAEntry(entry);
685
+ await fs.writeFile(path.join(qaDir, `${entry.slug}.md`), content);
686
+ }
687
+ // Generate README index
688
+ const readme = this.generateQAReadme(entries, topicResult);
689
+ await fs.writeFile(path.join(qaDir, 'README.md'), readme);
690
+ }
691
+ formatQAEntry(entry) {
692
+ const lines = [];
693
+ lines.push('---');
694
+ lines.push(`slug: ${entry.slug}`);
695
+ lines.push(`category: ${entry.category}`);
696
+ lines.push(`generatedAt: ${entry.generatedAt}`);
697
+ if (entry.relevantFiles.length > 0) {
698
+ lines.push(`relevantFiles:`);
699
+ for (const file of entry.relevantFiles) {
700
+ lines.push(` - ${file}`);
701
+ }
702
+ }
703
+ lines.push('---\n');
704
+ lines.push(`# ${entry.question}\n`);
705
+ lines.push(entry.answer);
706
+ return lines.join('\n');
707
+ }
708
+ generateQAReadme(entries, topicResult) {
709
+ const lines = [];
710
+ lines.push('# Q&A Index\n');
711
+ lines.push(`Project type: **${topicResult.projectType}**\n`);
712
+ lines.push(`Generated: ${new Date().toISOString()}\n`);
713
+ // Group by category
714
+ const byCategory = new Map();
715
+ for (const entry of entries) {
716
+ if (!byCategory.has(entry.category)) {
717
+ byCategory.set(entry.category, []);
718
+ }
719
+ byCategory.get(entry.category).push(entry);
720
+ }
721
+ for (const [category, catEntries] of byCategory) {
722
+ lines.push(`## ${category.charAt(0).toUpperCase() + category.slice(1)}\n`);
723
+ for (const entry of catEntries) {
724
+ lines.push(`- [${entry.question}](./${entry.slug}.md)`);
725
+ }
726
+ lines.push('');
727
+ }
728
+ return lines.join('\n');
729
+ }
730
+ parseQAEntry(content, filename) {
731
+ try {
732
+ const slug = filename.replace('.md', '');
733
+ // Parse frontmatter
734
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
735
+ let category = 'general';
736
+ let generatedAt = '';
737
+ const relevantFiles = [];
738
+ if (frontmatterMatch) {
739
+ const fm = frontmatterMatch[1];
740
+ const categoryMatch = fm.match(/category:\s*(.+)/);
741
+ if (categoryMatch)
742
+ category = categoryMatch[1].trim();
743
+ const dateMatch = fm.match(/generatedAt:\s*(.+)/);
744
+ if (dateMatch)
745
+ generatedAt = dateMatch[1].trim();
746
+ const filesMatch = fm.match(/relevantFiles:\n([\s\S]*?)(?=\n\w|$)/);
747
+ if (filesMatch) {
748
+ const files = filesMatch[1].match(/- (.+)/g);
749
+ if (files) {
750
+ relevantFiles.push(...files.map((f) => f.replace('- ', '').trim()));
751
+ }
752
+ }
753
+ }
754
+ // Parse question from first heading
755
+ const questionMatch = content.match(/^#\s+(.+)/m);
756
+ const question = questionMatch ? questionMatch[1] : slug;
757
+ // Get answer (everything after the first heading)
758
+ const answerStart = content.indexOf('\n', content.indexOf('# '));
759
+ const answer = answerStart > 0 ? content.slice(answerStart).trim() : '';
760
+ return {
761
+ slug,
762
+ question,
763
+ answer,
764
+ category,
765
+ generatedAt,
766
+ relevantFiles,
767
+ };
768
+ }
769
+ catch {
770
+ return null;
771
+ }
772
+ }
773
+ calculateRelevance(entry, queryLower, queryWords) {
774
+ let score = 0;
775
+ const reasons = [];
776
+ // Exact slug match
777
+ if (entry.slug.toLowerCase().includes(queryLower.replace(/\s+/g, '-'))) {
778
+ score += 10;
779
+ reasons.push('slug match');
780
+ }
781
+ // Question match
782
+ const questionLower = entry.question.toLowerCase();
783
+ if (questionLower.includes(queryLower)) {
784
+ score += 8;
785
+ reasons.push('question match');
786
+ }
787
+ // Word matches in question
788
+ for (const word of queryWords) {
789
+ if (questionLower.includes(word)) {
790
+ score += 2;
791
+ reasons.push(`word "${word}" in question`);
792
+ }
793
+ }
794
+ // Answer match
795
+ const answerLower = entry.answer.toLowerCase();
796
+ for (const word of queryWords) {
797
+ if (answerLower.includes(word)) {
798
+ score += 1;
799
+ reasons.push(`word "${word}" in answer`);
800
+ }
801
+ }
802
+ // Category match
803
+ if (entry.category.toLowerCase().includes(queryLower)) {
804
+ score += 3;
805
+ reasons.push('category match');
806
+ }
807
+ return {
808
+ score,
809
+ reason: reasons.slice(0, 3).join(', ') || 'partial match',
810
+ };
811
+ }
812
+ /**
813
+ * Load codebase-map.json if it exists
814
+ */
815
+ async loadCodebaseMap(repoPath) {
816
+ const mapPath = path.join(repoPath, '.context', 'docs', 'codebase-map.json');
817
+ try {
818
+ if (await fs.pathExists(mapPath)) {
819
+ const content = await fs.readFile(mapPath, 'utf-8');
820
+ return JSON.parse(content);
821
+ }
822
+ }
823
+ catch {
824
+ // If loading fails, return null to fall back to full analysis
825
+ }
826
+ return null;
827
+ }
828
+ /**
829
+ * Convert codebase-map stack section to StackInfo format
830
+ */
831
+ convertMapStackToStackInfo(map) {
832
+ // Infer CLI-related fields from symbols and architecture
833
+ const hasBinField = map.architecture.entryPoints.some((ep) => ep.startsWith('bin/'));
834
+ const cliLibraries = [];
835
+ // Check for CLI frameworks in the symbols
836
+ const allSymbols = [
837
+ ...map.symbols.classes,
838
+ ...map.symbols.functions,
839
+ ];
840
+ if (allSymbols.some((s) => /commander|yargs|oclif|inquirer/i.test(s.name))) {
841
+ if (/commander/i.test(JSON.stringify(allSymbols)))
842
+ cliLibraries.push('commander');
843
+ if (/yargs/i.test(JSON.stringify(allSymbols)))
844
+ cliLibraries.push('yargs');
845
+ if (/oclif/i.test(JSON.stringify(allSymbols)))
846
+ cliLibraries.push('oclif');
847
+ }
848
+ return {
849
+ primaryLanguage: map.stack.primaryLanguage,
850
+ languages: map.stack.languages,
851
+ frameworks: map.stack.frameworks,
852
+ buildTools: map.stack.buildTools,
853
+ testFrameworks: map.stack.testFrameworks,
854
+ packageManager: map.stack.packageManager,
855
+ isMonorepo: map.stack.isMonorepo,
856
+ hasDocker: map.stack.hasDocker,
857
+ hasCI: map.stack.hasCI,
858
+ files: [], // Files are not stored in codebase-map, but not needed for Q&A generation
859
+ // Inferred fields
860
+ hasBinField,
861
+ cliLibraries,
862
+ hasMainExport: map.publicAPI.length > 0,
863
+ hasTypesField: map.symbols.types.length > 0,
864
+ };
865
+ }
866
+ /**
867
+ * Shutdown analyzer resources
868
+ */
869
+ async shutdown() {
870
+ await this.analyzer.shutdown();
871
+ }
872
+ }
873
+ exports.QAService = QAService;
874
+ //# sourceMappingURL=qaService.js.map