@ai-coders/context 0.4.0 → 0.5.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 (403) hide show
  1. package/README.md +260 -22
  2. package/dist/fragments/compose.d.ts +30 -0
  3. package/dist/fragments/compose.d.ts.map +1 -0
  4. package/dist/fragments/compose.js +274 -0
  5. package/dist/fragments/compose.js.map +1 -0
  6. package/dist/fragments/extractors/index.d.ts +26 -0
  7. package/dist/fragments/extractors/index.d.ts.map +1 -0
  8. package/dist/fragments/extractors/index.js +58 -0
  9. package/dist/fragments/extractors/index.js.map +1 -0
  10. package/dist/fragments/extractors/module.d.ts +12 -0
  11. package/dist/fragments/extractors/module.d.ts.map +1 -0
  12. package/dist/fragments/extractors/module.js +302 -0
  13. package/dist/fragments/extractors/module.js.map +1 -0
  14. package/dist/fragments/extractors/project.d.ts +12 -0
  15. package/dist/fragments/extractors/project.d.ts.map +1 -0
  16. package/dist/fragments/extractors/project.js +274 -0
  17. package/dist/fragments/extractors/project.js.map +1 -0
  18. package/dist/fragments/extractors/semantic.d.ts +12 -0
  19. package/dist/fragments/extractors/semantic.d.ts.map +1 -0
  20. package/dist/fragments/extractors/semantic.js +329 -0
  21. package/dist/fragments/extractors/semantic.js.map +1 -0
  22. package/dist/fragments/index.d.ts +47 -0
  23. package/dist/fragments/index.d.ts.map +1 -0
  24. package/dist/fragments/index.js +75 -0
  25. package/dist/fragments/index.js.map +1 -0
  26. package/dist/fragments/query.d.ts +101 -0
  27. package/dist/fragments/query.d.ts.map +1 -0
  28. package/dist/fragments/query.js +200 -0
  29. package/dist/fragments/query.js.map +1 -0
  30. package/dist/fragments/render/compact.d.ts +15 -0
  31. package/dist/fragments/render/compact.d.ts.map +1 -0
  32. package/dist/fragments/render/compact.js +209 -0
  33. package/dist/fragments/render/compact.js.map +1 -0
  34. package/dist/fragments/render/index.d.ts +17 -0
  35. package/dist/fragments/render/index.d.ts.map +1 -0
  36. package/dist/fragments/render/index.js +40 -0
  37. package/dist/fragments/render/index.js.map +1 -0
  38. package/dist/fragments/render/json.d.ts +9 -0
  39. package/dist/fragments/render/json.d.ts.map +1 -0
  40. package/dist/fragments/render/json.js +44 -0
  41. package/dist/fragments/render/json.js.map +1 -0
  42. package/dist/fragments/render/markdown.d.ts +9 -0
  43. package/dist/fragments/render/markdown.d.ts.map +1 -0
  44. package/dist/fragments/render/markdown.js +291 -0
  45. package/dist/fragments/render/markdown.js.map +1 -0
  46. package/dist/fragments/store.d.ts +49 -0
  47. package/dist/fragments/store.d.ts.map +1 -0
  48. package/dist/fragments/store.js +161 -0
  49. package/dist/fragments/store.js.map +1 -0
  50. package/dist/fragments/types.d.ts +241 -0
  51. package/dist/fragments/types.d.ts.map +1 -0
  52. package/dist/fragments/types.js +8 -0
  53. package/dist/fragments/types.js.map +1 -0
  54. package/dist/generators/agents/agentGenerator.d.ts +8 -1
  55. package/dist/generators/agents/agentGenerator.d.ts.map +1 -1
  56. package/dist/generators/agents/agentGenerator.js +108 -10
  57. package/dist/generators/agents/agentGenerator.js.map +1 -1
  58. package/dist/generators/agents/templates/playbookTemplate.d.ts +3 -2
  59. package/dist/generators/agents/templates/playbookTemplate.d.ts.map +1 -1
  60. package/dist/generators/agents/templates/playbookTemplate.js +143 -45
  61. package/dist/generators/agents/templates/playbookTemplate.js.map +1 -1
  62. package/dist/generators/agents/templates/types.d.ts +9 -1
  63. package/dist/generators/agents/templates/types.d.ts.map +1 -1
  64. package/dist/generators/documentation/documentationGenerator.d.ts +2 -0
  65. package/dist/generators/documentation/documentationGenerator.d.ts.map +1 -1
  66. package/dist/generators/documentation/documentationGenerator.js +18 -3
  67. package/dist/generators/documentation/documentationGenerator.js.map +1 -1
  68. package/dist/generators/documentation/guideRegistry.d.ts.map +1 -1
  69. package/dist/generators/documentation/guideRegistry.js +0 -8
  70. package/dist/generators/documentation/guideRegistry.js.map +1 -1
  71. package/dist/generators/documentation/templates/apiReferenceTemplate.d.ts.map +1 -1
  72. package/dist/generators/documentation/templates/apiReferenceTemplate.js +1 -22
  73. package/dist/generators/documentation/templates/apiReferenceTemplate.js.map +1 -1
  74. package/dist/generators/documentation/templates/architectureTemplate.d.ts.map +1 -1
  75. package/dist/generators/documentation/templates/architectureTemplate.js +160 -26
  76. package/dist/generators/documentation/templates/architectureTemplate.js.map +1 -1
  77. package/dist/generators/documentation/templates/common.d.ts +28 -1
  78. package/dist/generators/documentation/templates/common.d.ts.map +1 -1
  79. package/dist/generators/documentation/templates/common.js +130 -10
  80. package/dist/generators/documentation/templates/common.js.map +1 -1
  81. package/dist/generators/documentation/templates/dataFlowTemplate.d.ts.map +1 -1
  82. package/dist/generators/documentation/templates/dataFlowTemplate.js +98 -18
  83. package/dist/generators/documentation/templates/dataFlowTemplate.js.map +1 -1
  84. package/dist/generators/documentation/templates/developmentWorkflowTemplate.d.ts.map +1 -1
  85. package/dist/generators/documentation/templates/developmentWorkflowTemplate.js +1 -18
  86. package/dist/generators/documentation/templates/developmentWorkflowTemplate.js.map +1 -1
  87. package/dist/generators/documentation/templates/glossaryTemplate.d.ts +1 -1
  88. package/dist/generators/documentation/templates/glossaryTemplate.d.ts.map +1 -1
  89. package/dist/generators/documentation/templates/glossaryTemplate.js +51 -23
  90. package/dist/generators/documentation/templates/glossaryTemplate.js.map +1 -1
  91. package/dist/generators/documentation/templates/indexTemplate.d.ts.map +1 -1
  92. package/dist/generators/documentation/templates/indexTemplate.js +1 -18
  93. package/dist/generators/documentation/templates/indexTemplate.js.map +1 -1
  94. package/dist/generators/documentation/templates/migrationTemplate.d.ts.map +1 -1
  95. package/dist/generators/documentation/templates/migrationTemplate.js +1 -23
  96. package/dist/generators/documentation/templates/migrationTemplate.js.map +1 -1
  97. package/dist/generators/documentation/templates/onboardingTemplate.d.ts.map +1 -1
  98. package/dist/generators/documentation/templates/onboardingTemplate.js +1 -23
  99. package/dist/generators/documentation/templates/onboardingTemplate.js.map +1 -1
  100. package/dist/generators/documentation/templates/projectOverviewTemplate.d.ts.map +1 -1
  101. package/dist/generators/documentation/templates/projectOverviewTemplate.js +81 -19
  102. package/dist/generators/documentation/templates/projectOverviewTemplate.js.map +1 -1
  103. package/dist/generators/documentation/templates/securityTemplate.d.ts.map +1 -1
  104. package/dist/generators/documentation/templates/securityTemplate.js +1 -18
  105. package/dist/generators/documentation/templates/securityTemplate.js.map +1 -1
  106. package/dist/generators/documentation/templates/testingTemplate.d.ts.map +1 -1
  107. package/dist/generators/documentation/templates/testingTemplate.js +1 -19
  108. package/dist/generators/documentation/templates/testingTemplate.js.map +1 -1
  109. package/dist/generators/documentation/templates/toolingTemplate.d.ts.map +1 -1
  110. package/dist/generators/documentation/templates/toolingTemplate.js +2 -19
  111. package/dist/generators/documentation/templates/toolingTemplate.js.map +1 -1
  112. package/dist/generators/documentation/templates/troubleshootingTemplate.d.ts.map +1 -1
  113. package/dist/generators/documentation/templates/troubleshootingTemplate.js +1 -23
  114. package/dist/generators/documentation/templates/troubleshootingTemplate.js.map +1 -1
  115. package/dist/generators/documentation/templates/types.d.ts +2 -1
  116. package/dist/generators/documentation/templates/types.d.ts.map +1 -1
  117. package/dist/generators/plans/planGenerator.d.ts +4 -0
  118. package/dist/generators/plans/planGenerator.d.ts.map +1 -1
  119. package/dist/generators/plans/planGenerator.js +30 -2
  120. package/dist/generators/plans/planGenerator.js.map +1 -1
  121. package/dist/generators/plans/templates/indexTemplate.d.ts.map +1 -1
  122. package/dist/generators/plans/templates/indexTemplate.js +3 -12
  123. package/dist/generators/plans/templates/indexTemplate.js.map +1 -1
  124. package/dist/generators/plans/templates/planTemplate.d.ts.map +1 -1
  125. package/dist/generators/plans/templates/planTemplate.js +54 -32
  126. package/dist/generators/plans/templates/planTemplate.js.map +1 -1
  127. package/dist/generators/plans/templates/types.d.ts +10 -0
  128. package/dist/generators/plans/templates/types.d.ts.map +1 -1
  129. package/dist/generators/shared/generatorUtils.d.ts.map +1 -1
  130. package/dist/generators/shared/generatorUtils.js +6 -9
  131. package/dist/generators/shared/generatorUtils.js.map +1 -1
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +430 -90
  134. package/dist/index.js.map +1 -1
  135. package/dist/prompts/defaults.d.ts +2 -2
  136. package/dist/prompts/defaults.d.ts.map +1 -1
  137. package/dist/prompts/defaults.js +26 -56
  138. package/dist/prompts/defaults.js.map +1 -1
  139. package/dist/services/ai/agentEvents.d.ts +45 -0
  140. package/dist/services/ai/agentEvents.d.ts.map +1 -0
  141. package/dist/services/ai/agentEvents.js +61 -0
  142. package/dist/services/ai/agentEvents.js.map +1 -0
  143. package/dist/services/ai/agents/documentationAgent.d.ts +53 -0
  144. package/dist/services/ai/agents/documentationAgent.d.ts.map +1 -0
  145. package/dist/services/ai/agents/documentationAgent.js +243 -0
  146. package/dist/services/ai/agents/documentationAgent.js.map +1 -0
  147. package/dist/services/ai/agents/index.d.ts +7 -0
  148. package/dist/services/ai/agents/index.d.ts.map +1 -0
  149. package/dist/services/ai/agents/index.js +10 -0
  150. package/dist/services/ai/agents/index.js.map +1 -0
  151. package/dist/services/ai/agents/planAgent.d.ts +68 -0
  152. package/dist/services/ai/agents/planAgent.d.ts.map +1 -0
  153. package/dist/services/ai/agents/planAgent.js +389 -0
  154. package/dist/services/ai/agents/planAgent.js.map +1 -0
  155. package/dist/services/ai/agents/playbookAgent.d.ts +54 -0
  156. package/dist/services/ai/agents/playbookAgent.d.ts.map +1 -0
  157. package/dist/services/ai/agents/playbookAgent.js +265 -0
  158. package/dist/services/ai/agents/playbookAgent.js.map +1 -0
  159. package/dist/services/ai/aiSdkClient.d.ts +67 -0
  160. package/dist/services/ai/aiSdkClient.d.ts.map +1 -0
  161. package/dist/services/ai/aiSdkClient.js +143 -0
  162. package/dist/services/ai/aiSdkClient.js.map +1 -0
  163. package/dist/services/ai/index.d.ts +7 -0
  164. package/dist/services/ai/index.d.ts.map +1 -0
  165. package/dist/services/ai/index.js +49 -0
  166. package/dist/services/ai/index.js.map +1 -0
  167. package/dist/services/ai/providerFactory.d.ts +35 -0
  168. package/dist/services/ai/providerFactory.d.ts.map +1 -0
  169. package/dist/services/ai/providerFactory.js +107 -0
  170. package/dist/services/ai/providerFactory.js.map +1 -0
  171. package/dist/services/ai/schemas.d.ts +331 -0
  172. package/dist/services/ai/schemas.d.ts.map +1 -0
  173. package/dist/services/ai/schemas.js +236 -0
  174. package/dist/services/ai/schemas.js.map +1 -0
  175. package/dist/services/ai/tools/analyzeSymbolsTool.d.ts +33 -0
  176. package/dist/services/ai/tools/analyzeSymbolsTool.d.ts.map +1 -0
  177. package/dist/services/ai/tools/analyzeSymbolsTool.js +57 -0
  178. package/dist/services/ai/tools/analyzeSymbolsTool.js.map +1 -0
  179. package/dist/services/ai/tools/checkScaffoldingTool.d.ts +18 -0
  180. package/dist/services/ai/tools/checkScaffoldingTool.d.ts.map +1 -0
  181. package/dist/services/ai/tools/checkScaffoldingTool.js +86 -0
  182. package/dist/services/ai/tools/checkScaffoldingTool.js.map +1 -0
  183. package/dist/services/ai/tools/fillScaffoldingTool.d.ts +38 -0
  184. package/dist/services/ai/tools/fillScaffoldingTool.d.ts.map +1 -0
  185. package/dist/services/ai/tools/fillScaffoldingTool.js +259 -0
  186. package/dist/services/ai/tools/fillScaffoldingTool.js.map +1 -0
  187. package/dist/services/ai/tools/getFileStructureTool.d.ts +29 -0
  188. package/dist/services/ai/tools/getFileStructureTool.d.ts.map +1 -0
  189. package/dist/services/ai/tools/getFileStructureTool.js +48 -0
  190. package/dist/services/ai/tools/getFileStructureTool.js.map +1 -0
  191. package/dist/services/ai/tools/index.d.ts +20 -0
  192. package/dist/services/ai/tools/index.d.ts.map +1 -0
  193. package/dist/services/ai/tools/index.js +62 -0
  194. package/dist/services/ai/tools/index.js.map +1 -0
  195. package/dist/services/ai/tools/initializeContextTool.d.ts +25 -0
  196. package/dist/services/ai/tools/initializeContextTool.d.ts.map +1 -0
  197. package/dist/services/ai/tools/initializeContextTool.js +121 -0
  198. package/dist/services/ai/tools/initializeContextTool.js.map +1 -0
  199. package/dist/services/ai/tools/listFilesTool.d.ts +18 -0
  200. package/dist/services/ai/tools/listFilesTool.d.ts.map +1 -0
  201. package/dist/services/ai/tools/listFilesTool.js +34 -0
  202. package/dist/services/ai/tools/listFilesTool.js.map +1 -0
  203. package/dist/services/ai/tools/readFileTool.d.ts +17 -0
  204. package/dist/services/ai/tools/readFileTool.d.ts.map +1 -0
  205. package/dist/services/ai/tools/readFileTool.js +63 -0
  206. package/dist/services/ai/tools/readFileTool.js.map +1 -0
  207. package/dist/services/ai/tools/scaffoldPlanTool.d.ts +19 -0
  208. package/dist/services/ai/tools/scaffoldPlanTool.d.ts.map +1 -0
  209. package/dist/services/ai/tools/scaffoldPlanTool.js +81 -0
  210. package/dist/services/ai/tools/scaffoldPlanTool.js.map +1 -0
  211. package/dist/services/ai/tools/searchCodeTool.d.ts +25 -0
  212. package/dist/services/ai/tools/searchCodeTool.d.ts.map +1 -0
  213. package/dist/services/ai/tools/searchCodeTool.js +96 -0
  214. package/dist/services/ai/tools/searchCodeTool.js.map +1 -0
  215. package/dist/services/fill/fillService.d.ts +11 -1
  216. package/dist/services/fill/fillService.d.ts.map +1 -1
  217. package/dist/services/fill/fillService.js +151 -39
  218. package/dist/services/fill/fillService.js.map +1 -1
  219. package/dist/services/init/initService.d.ts +1 -0
  220. package/dist/services/init/initService.d.ts.map +1 -1
  221. package/dist/services/init/initService.js +12 -7
  222. package/dist/services/init/initService.js.map +1 -1
  223. package/dist/services/llmClientFactory.d.ts +36 -2
  224. package/dist/services/llmClientFactory.d.ts.map +1 -1
  225. package/dist/services/llmClientFactory.js +57 -11
  226. package/dist/services/llmClientFactory.js.map +1 -1
  227. package/dist/services/mcp/index.d.ts +2 -0
  228. package/dist/services/mcp/index.d.ts.map +1 -0
  229. package/dist/services/mcp/index.js +7 -0
  230. package/dist/services/mcp/index.js.map +1 -0
  231. package/dist/services/mcp/mcpServer.d.ts +45 -0
  232. package/dist/services/mcp/mcpServer.d.ts.map +1 -0
  233. package/dist/services/mcp/mcpServer.js +371 -0
  234. package/dist/services/mcp/mcpServer.js.map +1 -0
  235. package/dist/services/openRouterClient.js +1 -1
  236. package/dist/services/openRouterClient.js.map +1 -1
  237. package/dist/services/passthrough/commandRouter.d.ts +53 -0
  238. package/dist/services/passthrough/commandRouter.d.ts.map +1 -0
  239. package/dist/services/passthrough/commandRouter.js +349 -0
  240. package/dist/services/passthrough/commandRouter.js.map +1 -0
  241. package/dist/services/passthrough/index.d.ts +7 -0
  242. package/dist/services/passthrough/index.d.ts.map +1 -0
  243. package/dist/services/passthrough/index.js +23 -0
  244. package/dist/services/passthrough/index.js.map +1 -0
  245. package/dist/services/passthrough/protocol.d.ts +269 -0
  246. package/dist/services/passthrough/protocol.d.ts.map +1 -0
  247. package/dist/services/passthrough/protocol.js +151 -0
  248. package/dist/services/passthrough/protocol.js.map +1 -0
  249. package/dist/services/passthrough/stdinReader.d.ts +42 -0
  250. package/dist/services/passthrough/stdinReader.d.ts.map +1 -0
  251. package/dist/services/passthrough/stdinReader.js +111 -0
  252. package/dist/services/passthrough/stdinReader.js.map +1 -0
  253. package/dist/services/plan/planService.d.ts +3 -1
  254. package/dist/services/plan/planService.d.ts.map +1 -1
  255. package/dist/services/plan/planService.js +49 -41
  256. package/dist/services/plan/planService.js.map +1 -1
  257. package/dist/services/semantic/codebaseAnalyzer.d.ts +40 -0
  258. package/dist/services/semantic/codebaseAnalyzer.d.ts.map +1 -0
  259. package/dist/services/semantic/codebaseAnalyzer.js +540 -0
  260. package/dist/services/semantic/codebaseAnalyzer.js.map +1 -0
  261. package/dist/services/semantic/contextBuilder.d.ts +79 -0
  262. package/dist/services/semantic/contextBuilder.d.ts.map +1 -0
  263. package/dist/services/semantic/contextBuilder.js +538 -0
  264. package/dist/services/semantic/contextBuilder.js.map +1 -0
  265. package/dist/services/semantic/index.d.ts +12 -0
  266. package/dist/services/semantic/index.d.ts.map +1 -0
  267. package/dist/services/semantic/index.js +33 -0
  268. package/dist/services/semantic/index.js.map +1 -0
  269. package/dist/services/semantic/lsp/index.d.ts +2 -0
  270. package/dist/services/semantic/lsp/index.d.ts.map +1 -0
  271. package/dist/services/semantic/lsp/index.js +6 -0
  272. package/dist/services/semantic/lsp/index.js.map +1 -0
  273. package/dist/services/semantic/lsp/lspLayer.d.ts +32 -0
  274. package/dist/services/semantic/lsp/lspLayer.d.ts.map +1 -0
  275. package/dist/services/semantic/lsp/lspLayer.js +378 -0
  276. package/dist/services/semantic/lsp/lspLayer.js.map +1 -0
  277. package/dist/services/semantic/treeSitter/index.d.ts +2 -0
  278. package/dist/services/semantic/treeSitter/index.d.ts.map +1 -0
  279. package/dist/services/semantic/treeSitter/index.js +6 -0
  280. package/dist/services/semantic/treeSitter/index.js.map +1 -0
  281. package/dist/services/semantic/treeSitter/treeSitterLayer.d.ts +37 -0
  282. package/dist/services/semantic/treeSitter/treeSitterLayer.d.ts.map +1 -0
  283. package/dist/services/semantic/treeSitter/treeSitterLayer.js +518 -0
  284. package/dist/services/semantic/treeSitter/treeSitterLayer.js.map +1 -0
  285. package/dist/services/semantic/types.d.ts +122 -0
  286. package/dist/services/semantic/types.d.ts.map +1 -0
  287. package/dist/services/semantic/types.js +31 -0
  288. package/dist/services/semantic/types.js.map +1 -0
  289. package/dist/services/serve/index.d.ts +2 -0
  290. package/dist/services/serve/index.d.ts.map +1 -0
  291. package/dist/services/serve/index.js +6 -0
  292. package/dist/services/serve/index.js.map +1 -0
  293. package/dist/services/serve/serveService.d.ts +38 -0
  294. package/dist/services/serve/serveService.d.ts.map +1 -0
  295. package/dist/services/serve/serveService.js +99 -0
  296. package/dist/services/serve/serveService.js.map +1 -0
  297. package/dist/services/shared/llmConfig.d.ts +19 -3
  298. package/dist/services/shared/llmConfig.d.ts.map +1 -1
  299. package/dist/services/shared/llmConfig.js +39 -10
  300. package/dist/services/shared/llmConfig.js.map +1 -1
  301. package/dist/services/sync/index.d.ts +6 -0
  302. package/dist/services/sync/index.d.ts.map +1 -0
  303. package/dist/services/sync/index.js +16 -0
  304. package/dist/services/sync/index.js.map +1 -0
  305. package/dist/services/sync/markdownReferenceHandler.d.ts +3 -0
  306. package/dist/services/sync/markdownReferenceHandler.d.ts.map +1 -0
  307. package/dist/services/sync/markdownReferenceHandler.js +133 -0
  308. package/dist/services/sync/markdownReferenceHandler.js.map +1 -0
  309. package/dist/services/sync/presets.d.ts +6 -0
  310. package/dist/services/sync/presets.d.ts.map +1 -0
  311. package/dist/services/sync/presets.js +49 -0
  312. package/dist/services/sync/presets.js.map +1 -0
  313. package/dist/services/sync/symlinkHandler.d.ts +7 -0
  314. package/dist/services/sync/symlinkHandler.d.ts.map +1 -0
  315. package/dist/services/sync/symlinkHandler.js +129 -0
  316. package/dist/services/sync/symlinkHandler.js.map +1 -0
  317. package/dist/services/sync/syncService.d.ts +15 -0
  318. package/dist/services/sync/syncService.d.ts.map +1 -0
  319. package/dist/services/sync/syncService.js +222 -0
  320. package/dist/services/sync/syncService.js.map +1 -0
  321. package/dist/services/sync/types.d.ts +62 -0
  322. package/dist/services/sync/types.d.ts.map +1 -0
  323. package/dist/services/sync/types.js +3 -0
  324. package/dist/services/sync/types.js.map +1 -0
  325. package/dist/types.d.ts +2 -1
  326. package/dist/types.d.ts.map +1 -1
  327. package/dist/utils/cliUI.d.ts +33 -0
  328. package/dist/utils/cliUI.d.ts.map +1 -1
  329. package/dist/utils/cliUI.js +157 -107
  330. package/dist/utils/cliUI.js.map +1 -1
  331. package/dist/utils/contentSanitizer.d.ts +42 -0
  332. package/dist/utils/contentSanitizer.d.ts.map +1 -0
  333. package/dist/utils/contentSanitizer.js +238 -0
  334. package/dist/utils/contentSanitizer.js.map +1 -0
  335. package/dist/utils/gitService.d.ts.map +1 -1
  336. package/dist/utils/gitService.js +12 -14
  337. package/dist/utils/gitService.js.map +1 -1
  338. package/dist/utils/i18n.d.ts +87 -13
  339. package/dist/utils/i18n.d.ts.map +1 -1
  340. package/dist/utils/i18n.js +176 -28
  341. package/dist/utils/i18n.js.map +1 -1
  342. package/dist/utils/prompts/configSummary.d.ts +7 -0
  343. package/dist/utils/prompts/configSummary.d.ts.map +1 -0
  344. package/dist/utils/prompts/configSummary.js +63 -0
  345. package/dist/utils/prompts/configSummary.js.map +1 -0
  346. package/dist/utils/prompts/index.d.ts +22 -0
  347. package/dist/utils/prompts/index.d.ts.map +1 -0
  348. package/dist/utils/prompts/index.js +122 -0
  349. package/dist/utils/prompts/index.js.map +1 -0
  350. package/dist/utils/prompts/llmPrompts.d.ts +11 -0
  351. package/dist/utils/prompts/llmPrompts.d.ts.map +1 -0
  352. package/dist/utils/prompts/llmPrompts.js +96 -0
  353. package/dist/utils/prompts/llmPrompts.js.map +1 -0
  354. package/dist/utils/prompts/smartDefaults.d.ts +15 -0
  355. package/dist/utils/prompts/smartDefaults.d.ts.map +1 -0
  356. package/dist/utils/prompts/smartDefaults.js +105 -0
  357. package/dist/utils/prompts/smartDefaults.js.map +1 -0
  358. package/dist/utils/prompts/types.d.ts +38 -0
  359. package/dist/utils/prompts/types.d.ts.map +1 -0
  360. package/dist/utils/prompts/types.js +3 -0
  361. package/dist/utils/prompts/types.js.map +1 -0
  362. package/dist/utils/theme.d.ts +66 -0
  363. package/dist/utils/theme.d.ts.map +1 -0
  364. package/dist/utils/theme.js +93 -0
  365. package/dist/utils/theme.js.map +1 -0
  366. package/dist/version.d.ts +8 -0
  367. package/dist/version.d.ts.map +1 -0
  368. package/dist/version.js +15 -0
  369. package/dist/version.js.map +1 -0
  370. package/package.json +12 -2
  371. package/prompts/update_scaffold_prompt.md +14 -34
  372. package/dist/commands/shared/agents.d.ts +0 -2
  373. package/dist/commands/shared/agents.d.ts.map +0 -1
  374. package/dist/commands/shared/agents.js +0 -15
  375. package/dist/commands/shared/agents.js.map +0 -1
  376. package/dist/commands/shared/selection.d.ts +0 -12
  377. package/dist/commands/shared/selection.d.ts.map +0 -1
  378. package/dist/commands/shared/selection.js +0 -95
  379. package/dist/commands/shared/selection.js.map +0 -1
  380. package/dist/generators/documentation/templates/frontMatter.d.ts +0 -11
  381. package/dist/generators/documentation/templates/frontMatter.d.ts.map +0 -1
  382. package/dist/generators/documentation/templates/frontMatter.js +0 -29
  383. package/dist/generators/documentation/templates/frontMatter.js.map +0 -1
  384. package/dist/services/anthropicClient.d.ts +0 -12
  385. package/dist/services/anthropicClient.d.ts.map +0 -1
  386. package/dist/services/anthropicClient.js +0 -98
  387. package/dist/services/anthropicClient.js.map +0 -1
  388. package/dist/services/geminiClient.d.ts +0 -12
  389. package/dist/services/geminiClient.d.ts.map +0 -1
  390. package/dist/services/geminiClient.js +0 -96
  391. package/dist/services/geminiClient.js.map +0 -1
  392. package/dist/services/grokClient.d.ts +0 -12
  393. package/dist/services/grokClient.d.ts.map +0 -1
  394. package/dist/services/grokClient.js +0 -101
  395. package/dist/services/grokClient.js.map +0 -1
  396. package/dist/services/openaiClient.d.ts +0 -12
  397. package/dist/services/openaiClient.d.ts.map +0 -1
  398. package/dist/services/openaiClient.js +0 -98
  399. package/dist/services/openaiClient.js.map +0 -1
  400. package/dist/utils/pricing.d.ts +0 -14
  401. package/dist/utils/pricing.d.ts.map +0 -1
  402. package/dist/utils/pricing.js +0 -115
  403. package/dist/utils/pricing.js.map +0 -1
package/README.md CHANGED
@@ -19,7 +19,12 @@ A lightweight CLI that scaffolds living documentation and AI-agent playbooks for
19
19
  - 🤖 `agents/` folder containing playbooks for common engineering agents and a handy index
20
20
  - 🔁 Repeatable scaffolding that you can re-run as the project evolves
21
21
  - 🧭 Repository-aware templates that highlight top-level directories for quick orientation
22
- - 🧠 AI-ready front matter and `agent-update` markers so assistants know exactly what to refresh
22
+ - 🧠 AI-ready templates that assistants can update using the `fill` command
23
+ - 🌐 **Multi-provider support** for OpenAI, Anthropic, Google, and OpenRouter
24
+ - ⚡ **Semantic context mode** using Tree-sitter for token-efficient LLM calls
25
+ - 📊 **Real-time progress** showing agent activity and tool usage
26
+ - 🔌 **MCP Server** for seamless Claude Code integration
27
+ - 🔗 **Passthrough mode** for external AI agents via stdin/stdout JSON
23
28
 
24
29
  ## 📦 Installation
25
30
 
@@ -54,6 +59,15 @@ npx @ai-coders/context init ./my-repo agents --output ./knowledge-base
54
59
  # Fill docs and agents with the repo context (preview the first 3 updates)
55
60
  npx @ai-coders/context fill ./my-repo --output ./.context --limit 3
56
61
 
62
+ # Use a specific provider (OpenAI, Anthropic, Google, or OpenRouter)
63
+ npx @ai-coders/context fill ./my-repo --provider anthropic --model claude-sonnet-4-20250514
64
+
65
+ # Disable semantic mode for more thorough tool-based exploration
66
+ npx @ai-coders/context fill ./my-repo --no-semantic
67
+
68
+ # Specify languages for semantic analysis
69
+ npx @ai-coders/context fill ./my-repo --languages typescript,python,go
70
+
57
71
  # Draft a collaboration plan seeded with agent and doc touchpoints
58
72
  npx @ai-coders/context plan release-readiness --output ./.context
59
73
 
@@ -77,17 +91,91 @@ After running the command, inspect the generated structure:
77
91
  └── ...
78
92
  ```
79
93
 
80
- Customize the Markdown files to reflect your projects specifics and commit them alongside the code.
94
+ Customize the Markdown files to reflect your project's specifics and commit them alongside the code.
81
95
 
82
- ## 🧠 Guided Updates for AI Assistants
96
+ ## 🌐 Multi-Provider Support
97
+
98
+ The `fill` and `plan` commands support multiple LLM providers:
99
+
100
+ | Provider | Models | Environment Variable |
101
+ |----------|--------|---------------------|
102
+ | OpenRouter | `x-ai/grok-4-fast`, `anthropic/claude-sonnet-4`, etc. | `OPENROUTER_API_KEY` |
103
+ | OpenAI | `gpt-4o`, `gpt-4-turbo`, etc. | `OPENAI_API_KEY` |
104
+ | Anthropic | `claude-sonnet-4-20250514`, `claude-opus-4-20250514`, etc. | `ANTHROPIC_API_KEY` |
105
+ | Google | `gemini-2.0-flash`, `gemini-1.5-pro`, etc. | `GOOGLE_API_KEY` |
106
+
107
+ The CLI auto-detects available API keys from environment variables. Override with `--provider` and `--model`:
108
+
109
+ ```bash
110
+ # Use Anthropic's Claude
111
+ ANTHROPIC_API_KEY=sk-... npx @ai-coders/context fill . --provider anthropic
112
+
113
+ # Use OpenAI's GPT-4
114
+ OPENAI_API_KEY=sk-... npx @ai-coders/context fill . --provider openai --model gpt-4o
115
+ ```
116
+
117
+ ## ⚡ Semantic Context Mode
118
+
119
+ By default, the `fill` command uses **semantic context mode** which pre-computes codebase analysis using Tree-sitter before calling the LLM. This is:
120
+
121
+ - **Faster**: Single LLM call instead of multi-step tool exploration
122
+ - **Token-efficient**: Pre-computed context instead of back-and-forth tool calls
123
+ - **Consistent**: Same analysis applied to all files
124
+
125
+ To use the more thorough tool-based exploration (where the LLM explores the codebase step by step), use `--no-semantic`:
126
+
127
+ ```bash
128
+ npx @ai-coders/context fill . --no-semantic
129
+ ```
130
+
131
+ ### Language Selection
132
+
133
+ Specify which programming languages to analyze for semantic context:
134
+
135
+ ```bash
136
+ # Analyze only TypeScript and Python
137
+ npx @ai-coders/context fill . --languages typescript,python
138
+
139
+ # Default languages: typescript, javascript, python, go
140
+ ```
141
+
142
+ Supported languages: `typescript`, `javascript`, `python`, `go`, `rust`, `java`, `cpp`, `c_sharp`, `ruby`, `php`
143
+
144
+ ### LSP Enhancement (Optional)
145
+
146
+ For deeper semantic analysis, the tool supports optional **LSP (Language Server Protocol)** integration. While Tree-sitter handles ~90% of the analysis with fast syntactic parsing, LSP provides additional semantic information when enabled:
83
147
 
84
- Need help filling in the scaffold? Use [`prompts/update_scaffold_prompt.md`](./prompts/update_scaffold_prompt.md) as the canonical instruction set for any LLM or CLI agent. It walks through:
148
+ | Feature | Tree-sitter | LSP |
149
+ |---------|-------------|-----|
150
+ | Symbol extraction | ✅ | - |
151
+ | Import/export analysis | ✅ | - |
152
+ | Type inference | - | ✅ |
153
+ | Interface implementations | - | ✅ |
154
+ | Cross-file references | - | ✅ |
155
+ | Definition resolution | - | ✅ |
85
156
 
86
- - Gathering repository context and locating `agent-update`/`agent-fill` markers.
87
- - Updating documentation sections while satisfying the YAML front matter criteria.
88
- - Aligning agent playbooks with the refreshed docs and recording evidence for maintainers.
157
+ **Usage:**
158
+
159
+ ```bash
160
+ # Enable LSP for fill command (disabled by default)
161
+ npx @ai-coders/context fill ./my-repo --lsp
162
+
163
+ # LSP is enabled by default for plan fill
164
+ npx @ai-coders/context plan my-plan --fill
165
+
166
+ # Disable LSP for plan fill
167
+ npx @ai-coders/context plan my-plan --fill --no-lsp
168
+ ```
89
169
 
90
- Share that prompt verbatim with your assistant to keep updates consistent across teams.
170
+ **Supported Language Servers:**
171
+ - TypeScript/JavaScript: `typescript-language-server`
172
+ - Python: `pylsp`
173
+
174
+ **Graceful Degradation:** If a language server is not installed, the analysis continues without LSP enhancement—no errors, no interruption.
175
+
176
+ ## 🧠 Guided Updates for AI Assistants
177
+
178
+ Need help filling in the scaffold? Use [`prompts/update_scaffold_prompt.md`](./prompts/update_scaffold_prompt.md) as the canonical instruction set for any LLM or CLI agent. Share that prompt verbatim with your assistant to keep updates consistent across teams.
91
179
 
92
180
  ### Available Doc Guides & Agent Types
93
181
 
@@ -96,14 +184,6 @@ The scaffold includes the following guides and playbooks out of the box:
96
184
  - Docs: `project-overview`, `architecture`, `development-workflow`, `testing-strategy`, `glossary`, `data-flow`, `security`, `tooling`
97
185
  - Agents: `code-reviewer`, `bug-fixer`, `feature-developer`, `refactoring-specialist`, `test-writer`, `documentation-writer`, `performance-optimizer`, `security-auditor`, `backend-specialist`, `frontend-specialist`, `architect-specialist`
98
186
 
99
- ### AI Marker Reference
100
-
101
- - `<!-- agent-update:start:section-id --> … <!-- agent-update:end -->` wrap the sections that AI assistants should rewrite with up-to-date project knowledge.
102
- - `<!-- agent-fill:slot-id --> … <!-- /agent-fill -->` highlight inline placeholders that must be replaced with concrete details before removing the wrapper.
103
- - `<!-- agent-readonly:context -->` flags guidance that should remain as-is; treat the adjacent content as instructions rather than editable prose.
104
-
105
- When contributing, focus edits inside `agent-update` regions or `agent-fill` placeholders and leave `agent-readonly` guidance untouched unless you have explicit maintainer approval.
106
-
107
187
  ## 🛠 Commands
108
188
 
109
189
  ### `init`
@@ -120,6 +200,7 @@ Options:
120
200
  -o, --output <dir> Output directory (default: ./.context)
121
201
  --exclude <patterns...> Glob patterns to skip during the scan
122
202
  --include <patterns...> Glob patterns to explicitly include
203
+ --no-semantic Disable semantic code analysis
123
204
  -v, --verbose Print detailed progress information
124
205
  -h, --help Display help for command
125
206
  ```
@@ -134,14 +215,19 @@ Options:
134
215
  -o, --output <dir> Scaffold directory containing docs/ and agents/ (default: ./.context)
135
216
  -k, --api-key <key> API key for the selected LLM provider
136
217
  -m, --model <model> LLM model to use (default: x-ai/grok-4-fast)
137
- -p, --provider <name> Provider (openrouter only)
138
- --base-url <url> Custom base URL for OpenRouter
218
+ -p, --provider <name> Provider: openrouter, openai, anthropic, or google
219
+ --base-url <url> Custom base URL for provider APIs
139
220
  --prompt <file> Instruction prompt to follow (optional; uses bundled instructions when omitted)
140
221
  --limit <number> Maximum number of files to update in one run
222
+ --no-semantic Disable semantic context mode (use tool-based exploration)
223
+ --languages <langs> Programming languages to analyze (e.g., typescript,python,go)
224
+ --exclude <patterns...> Glob patterns to exclude from repository analysis
225
+ --include <patterns...> Glob patterns to include during analysis
226
+ -v, --verbose Print detailed progress information
141
227
  -h, --help Display help for command
142
228
  ```
143
229
 
144
- Under the hood, the command loads the prompt above, iterates over every Markdown file in `.context/docs` and `.context/agents`, and asks the LLM to produce the fully updated content.
230
+ Under the hood, the command uses specialized agents (DocumentationAgent, PlaybookAgent) that analyze your codebase and generate context-aware documentation. Real-time progress is displayed showing which agent is working and what tools are being used.
145
231
 
146
232
  ### `plan`
147
233
  Create a collaboration plan that links documentation guides and agent playbooks, or fill an existing plan with LLM assistance.
@@ -158,12 +244,14 @@ Options:
158
244
  -r, --repo <path> Repository root to summarize for additional context (fill mode)
159
245
  -k, --api-key <key> API key for the selected LLM provider (fill mode)
160
246
  -m, --model <model> LLM model to use (default: x-ai/grok-4-fast)
161
- -p, --provider <name> Provider (openrouter only)
162
- --base-url <url> Custom base URL for OpenRouter
247
+ -p, --provider <name> Provider: openrouter, openai, anthropic, or google
248
+ --base-url <url> Custom base URL for provider APIs
163
249
  --prompt <file> Instruction prompt to follow (optional; uses bundled instructions when omitted)
164
250
  --dry-run Preview changes without writing files
251
+ --no-semantic Disable semantic context mode
165
252
  --include <patterns...> Glob patterns to include during repository analysis
166
253
  --exclude <patterns...> Glob patterns to exclude from repository analysis
254
+ -v, --verbose Print detailed progress information
167
255
  -h, --help Display help for command
168
256
  ```
169
257
 
@@ -171,7 +259,157 @@ In scaffold mode the command creates `.context/plans/<plan-name>.md`, keeps a `p
171
259
 
172
260
  💡 Tip: run `npx @ai-coders/context` with no arguments to enter an interactive mode that guides you through scaffold and LLM-fill options.
173
261
 
174
- Prefer driving the update elsewhere? Just grab [`prompts/update_scaffold_prompt.md`](./prompts/update_scaffold_prompt.md) and run it in your favorite playground or agent host. When youre ready to automate, drop your API key in `.env` (for example `OPENROUTER_API_KEY` and `OPENROUTER_MODEL`) and let `fill` handle the edits inline.
262
+ Prefer driving the update elsewhere? Just grab [`prompts/update_scaffold_prompt.md`](./prompts/update_scaffold_prompt.md) and run it in your favorite playground or agent host. When you're ready to automate, drop your API key in `.env` (for example `OPENROUTER_API_KEY` and `OPENROUTER_MODEL`) and let `fill` handle the edits inline.
263
+
264
+ ### `mcp`
265
+ Start an MCP (Model Context Protocol) server for Claude Code integration. This exposes code analysis tools and semantic context as MCP resources.
266
+
267
+ ```
268
+ Usage: ai-context mcp
269
+
270
+ Options:
271
+ -r, --repo-path <path> Default repository path for tools
272
+ -v, --verbose Enable verbose logging to stderr
273
+ -h, --help Display help for command
274
+ ```
275
+
276
+ **Available MCP Tools:**
277
+ - `readFile` - Read file contents from the filesystem
278
+ - `listFiles` - List files matching a glob pattern
279
+ - `analyzeSymbols` - Extract code symbols (classes, functions, interfaces) using Tree-sitter
280
+ - `getFileStructure` - Get the directory structure of a repository
281
+ - `searchCode` - Search for code patterns using regex
282
+ - `buildSemanticContext` - Build optimized semantic context for LLM prompts
283
+ - `checkScaffolding` - Check if `.context` scaffolding exists (returns granular status for docs, agents, plans)
284
+ - `initializeContext` - Initialize `.context` scaffolding (create template files)
285
+ - `fillScaffolding` - Analyze codebase and generate content for each template file (AI agent writes the content)
286
+ - `scaffoldPlan` - Create a plan template in `.context/plans/`
287
+
288
+ **Available MCP Resources:**
289
+ - `context://codebase/{contextType}` - Semantic context (documentation, playbook, plan, compact)
290
+ - `file://{path}` - Read file contents
291
+
292
+ ### `serve`
293
+ Start a passthrough server for external AI agents. Accepts JSON commands via stdin and responds via stdout.
294
+
295
+ ```
296
+ Usage: ai-context serve
297
+
298
+ Options:
299
+ -r, --repo-path <path> Default repository path for tools
300
+ -f, --format <format> Output format: json or jsonl (default: jsonl)
301
+ -v, --verbose Enable verbose logging to stderr
302
+ -h, --help Display help for command
303
+ ```
304
+
305
+ **Available Methods:**
306
+ - `capabilities` - List server capabilities
307
+ - `tool.list` - List available tools
308
+ - `tool.call` - Execute a tool
309
+ - `context.build` - Build semantic context
310
+ - `agent.run` - Run an agent (requires LLM config)
311
+
312
+ ## 🔌 Claude Code Integration (MCP)
313
+
314
+ The easiest way to use this package with Claude Code is through the MCP server. Add the following to your Claude Code settings:
315
+
316
+ **~/.claude/settings.json:**
317
+ ```json
318
+ {
319
+ "mcpServers": {
320
+ "ai-context": {
321
+ "command": "npx",
322
+ "args": ["@ai-coders/context", "mcp", "-r", "/path/to/your/repo"]
323
+ }
324
+ }
325
+ }
326
+ ```
327
+
328
+ Once configured, Claude Code will have access to all code analysis tools:
329
+
330
+ ```
331
+ # Claude Code can now use these tools:
332
+ - readFile: Read any file in your repository
333
+ - listFiles: Find files by glob patterns
334
+ - analyzeSymbols: Extract code structure with Tree-sitter
335
+ - searchCode: Search for patterns across the codebase
336
+ - buildSemanticContext: Get optimized context for any task
337
+ - checkScaffolding: Check if .context scaffolding exists
338
+ - initializeContext: Create scaffolding templates
339
+ - fillScaffolding: Generate content for templates
340
+ - scaffoldPlan: Create plan templates
341
+ ```
342
+
343
+ ### Example MCP Usage in Claude Code
344
+
345
+ When working with Claude Code, you can ask it to:
346
+
347
+ - "Use the ai-context tools to analyze the authentication module"
348
+ - "Build a semantic context for the src/services directory"
349
+ - "List all TypeScript files in the project and analyze their exports"
350
+
351
+ ## 🔗 External AI Agent Integration (Passthrough)
352
+
353
+ For AI agents that don't support MCP, use the passthrough server with JSON communication:
354
+
355
+ ```bash
356
+ # Start the server
357
+ npx @ai-coders/context serve -r ./my-project
358
+
359
+ # Send commands via stdin
360
+ echo '{"id":"1","method":"capabilities"}' | npx @ai-coders/context serve
361
+ ```
362
+
363
+ **Example: List files**
364
+ ```bash
365
+ echo '{"id":"1","method":"tool.call","params":{"tool":"listFiles","args":{"pattern":"**/*.ts"}}}' \
366
+ | npx @ai-coders/context serve -r ./my-project
367
+ ```
368
+
369
+ **Example: Build semantic context**
370
+ ```bash
371
+ echo '{"id":"1","method":"context.build","params":{"repoPath":"./","contextType":"documentation"}}' \
372
+ | npx @ai-coders/context serve
373
+ ```
374
+
375
+ **Response format:**
376
+ ```json
377
+ {
378
+ "id": "1",
379
+ "success": true,
380
+ "result": { /* tool output */ }
381
+ }
382
+ ```
383
+
384
+ **Notifications (streamed during execution):**
385
+ ```json
386
+ {"type": "progress", "data": {"step": 1, "message": "Analyzing..."}}
387
+ {"type": "tool_call", "data": {"toolName": "readFile", "args": {"filePath": "..."}}}
388
+ {"type": "tool_result", "data": {"toolName": "readFile", "success": true}}
389
+ ```
390
+
391
+ ## 🔧 Environment Variables
392
+
393
+ ```bash
394
+ # Provider selection (auto-detected from available keys)
395
+ AI_CONTEXT_PROVIDER=openrouter|openai|anthropic|google
396
+
397
+ # API Keys (at least one required for fill/plan --fill)
398
+ OPENROUTER_API_KEY=...
399
+ OPENAI_API_KEY=...
400
+ ANTHROPIC_API_KEY=...
401
+ GOOGLE_API_KEY=...
402
+
403
+ # Optional model override per provider
404
+ OPENROUTER_MODEL=x-ai/grok-4-fast
405
+ OPENAI_MODEL=gpt-4o
406
+ ANTHROPIC_MODEL=claude-sonnet-4-20250514
407
+ GOOGLE_MODEL=gemini-2.0-flash
408
+
409
+ # CLI settings
410
+ AI_CONTEXT_LANG=en|pt-BR
411
+ AI_CONTEXT_DISABLE_UPDATE_CHECK=true
412
+ ```
175
413
 
176
414
  ## 🧰 Local Development
177
415
 
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Fragment Composition - Strategies for combining fragments
3
+ */
4
+ import type { ContextFragment, CompositionOptions, FragmentStore } from './types.js';
5
+ /**
6
+ * Compose fragments into a coherent context using the specified strategy
7
+ */
8
+ export declare function composeFragments(fragments: ContextFragment<unknown>[], options: CompositionOptions): ContextFragment<unknown>[];
9
+ /**
10
+ * Create a composition pipeline helper
11
+ */
12
+ export declare function createComposer(store: FragmentStore): {
13
+ /**
14
+ * Compose by priority (default)
15
+ */
16
+ byPriority(maxTokens?: number): ContextFragment<unknown>[];
17
+ /**
18
+ * Compose by expanding from a seed
19
+ */
20
+ expand(seed: string, depth?: number, maxTokens?: number): ContextFragment<unknown>[];
21
+ /**
22
+ * Compose by task relevance
23
+ */
24
+ forTask(task: string, maxTokens?: number): ContextFragment<unknown>[];
25
+ /**
26
+ * Get essential context (project overview + high priority)
27
+ */
28
+ essential(maxTokens?: number): ContextFragment<unknown>[];
29
+ };
30
+ //# sourceMappingURL=compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/fragments/compose.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAElB,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,EACrC,OAAO,EAAE,kBAAkB,GAC1B,eAAe,CAAC,OAAO,CAAC,EAAE,CAW5B;AA6QD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa;IAE/C;;OAEG;2BACoB,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE;IAO1D;;OAEG;iBACU,MAAM,UAAU,MAAM,cAAc,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE;IASpF;;OAEG;kBACW,MAAM,cAAc,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE;IAQrE;;OAEG;0BACmB,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE;EAe5D"}
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ /**
3
+ * Fragment Composition - Strategies for combining fragments
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.composeFragments = composeFragments;
7
+ exports.createComposer = createComposer;
8
+ /**
9
+ * Compose fragments into a coherent context using the specified strategy
10
+ */
11
+ function composeFragments(fragments, options) {
12
+ switch (options.strategy) {
13
+ case 'priority':
14
+ return composePriority(fragments, options);
15
+ case 'expand':
16
+ return composeExpand(fragments, options);
17
+ case 'task':
18
+ return composeTask(fragments, options);
19
+ default:
20
+ return composePriority(fragments, options);
21
+ }
22
+ }
23
+ /**
24
+ * Priority-based composition: sort by priority, limit by tokens
25
+ */
26
+ function composePriority(fragments, options) {
27
+ // Sort by priority (highest first)
28
+ const sorted = [...fragments].sort((a, b) => b.meta.priority - a.meta.priority);
29
+ if (!options.maxTokens) {
30
+ return sorted;
31
+ }
32
+ // Estimate tokens and cut off
33
+ return limitByTokens(sorted, options.maxTokens);
34
+ }
35
+ /**
36
+ * Graph expansion: start from a seed symbol/file, expand to related fragments
37
+ */
38
+ function composeExpand(fragments, options) {
39
+ const seed = options.seed;
40
+ const depth = options.depth || 2;
41
+ if (!seed) {
42
+ return composePriority(fragments, options);
43
+ }
44
+ const result = [];
45
+ const visited = new Set();
46
+ const queue = [];
47
+ // Find seed fragments
48
+ const seedFragments = fragments.filter((f) => f.refs.symbols.includes(seed) ||
49
+ f.refs.files.some((file) => file.includes(seed)) ||
50
+ f.data &&
51
+ typeof f.data === 'object' &&
52
+ 'name' in f.data &&
53
+ f.data.name === seed);
54
+ for (const fragment of seedFragments) {
55
+ queue.push({ fragment, level: 0 });
56
+ }
57
+ while (queue.length > 0) {
58
+ const { fragment, level } = queue.shift();
59
+ if (visited.has(fragment.id))
60
+ continue;
61
+ visited.add(fragment.id);
62
+ result.push(fragment);
63
+ if (level >= depth)
64
+ continue;
65
+ // Find related fragments
66
+ const related = findRelatedFragments(fragment, fragments, visited);
67
+ for (const relFragment of related) {
68
+ queue.push({ fragment: relFragment, level: level + 1 });
69
+ }
70
+ }
71
+ // Sort by priority within result
72
+ result.sort((a, b) => b.meta.priority - a.meta.priority);
73
+ if (options.maxTokens) {
74
+ return limitByTokens(result, options.maxTokens);
75
+ }
76
+ return result;
77
+ }
78
+ /**
79
+ * Task-based composition: select fragments relevant to a task description
80
+ */
81
+ function composeTask(fragments, options) {
82
+ const task = options.task;
83
+ if (!task) {
84
+ return composePriority(fragments, options);
85
+ }
86
+ // Extract keywords from task
87
+ const keywords = extractKeywords(task);
88
+ // Score fragments by relevance to task
89
+ const scored = fragments.map((fragment) => ({
90
+ fragment,
91
+ score: scoreRelevance(fragment, keywords),
92
+ }));
93
+ // Sort by combined score (relevance + priority)
94
+ scored.sort((a, b) => {
95
+ const aTotal = a.score * 0.7 + a.fragment.meta.priority * 0.3;
96
+ const bTotal = b.score * 0.7 + b.fragment.meta.priority * 0.3;
97
+ return bTotal - aTotal;
98
+ });
99
+ const result = scored.map((s) => s.fragment);
100
+ if (options.maxTokens) {
101
+ return limitByTokens(result, options.maxTokens);
102
+ }
103
+ return result;
104
+ }
105
+ /**
106
+ * Find fragments related to a given fragment
107
+ */
108
+ function findRelatedFragments(fragment, allFragments, visited) {
109
+ const related = [];
110
+ // By referenced fragments
111
+ for (const refId of fragment.refs.fragments) {
112
+ const refFragment = allFragments.find((f) => f.id === refId && !visited.has(f.id));
113
+ if (refFragment) {
114
+ related.push(refFragment);
115
+ }
116
+ }
117
+ // By shared files
118
+ for (const file of fragment.refs.files) {
119
+ const fileFragments = allFragments.filter((f) => f.refs.files.includes(file) && !visited.has(f.id));
120
+ related.push(...fileFragments);
121
+ }
122
+ // By shared symbols
123
+ for (const symbol of fragment.refs.symbols) {
124
+ const symbolFragments = allFragments.filter((f) => (f.refs.symbols.includes(symbol) ||
125
+ (f.data &&
126
+ typeof f.data === 'object' &&
127
+ 'name' in f.data &&
128
+ f.data.name === symbol)) &&
129
+ !visited.has(f.id));
130
+ related.push(...symbolFragments);
131
+ }
132
+ // Deduplicate
133
+ const uniqueIds = new Set();
134
+ return related.filter((f) => {
135
+ if (uniqueIds.has(f.id))
136
+ return false;
137
+ uniqueIds.add(f.id);
138
+ return true;
139
+ });
140
+ }
141
+ /**
142
+ * Extract keywords from a task description
143
+ */
144
+ function extractKeywords(task) {
145
+ const stopWords = new Set([
146
+ 'a', 'an', 'the', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
147
+ 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
148
+ 'should', 'may', 'might', 'must', 'shall', 'can', 'need', 'to', 'of',
149
+ 'in', 'for', 'on', 'with', 'at', 'by', 'from', 'up', 'about', 'into',
150
+ 'through', 'during', 'before', 'after', 'above', 'below', 'between',
151
+ 'under', 'again', 'further', 'then', 'once', 'here', 'there', 'when',
152
+ 'where', 'why', 'how', 'all', 'each', 'few', 'more', 'most', 'other',
153
+ 'some', 'such', 'no', 'nor', 'not', 'only', 'own', 'same', 'so', 'than',
154
+ 'too', 'very', 'just', 'and', 'but', 'if', 'or', 'because', 'as', 'until',
155
+ 'while', 'this', 'that', 'these', 'those', 'i', 'me', 'my', 'we', 'our',
156
+ 'you', 'your', 'it', 'its', 'add', 'create', 'new', 'implement', 'fix',
157
+ 'update', 'change', 'modify', 'help', 'want', 'make', 'get', 'set',
158
+ ]);
159
+ return task
160
+ .toLowerCase()
161
+ .replace(/[^a-z0-9\s]/g, ' ')
162
+ .split(/\s+/)
163
+ .filter((word) => word.length > 2 && !stopWords.has(word));
164
+ }
165
+ /**
166
+ * Score a fragment's relevance to keywords
167
+ */
168
+ function scoreRelevance(fragment, keywords) {
169
+ let score = 0;
170
+ const textToSearch = [
171
+ fragment.summary || '',
172
+ fragment.type,
173
+ ...fragment.meta.tags,
174
+ ...fragment.refs.symbols,
175
+ ...(fragment.data && typeof fragment.data === 'object'
176
+ ? Object.values(fragment.data)
177
+ .filter((v) => typeof v === 'string')
178
+ .map((v) => v)
179
+ : []),
180
+ ]
181
+ .join(' ')
182
+ .toLowerCase();
183
+ for (const keyword of keywords) {
184
+ if (textToSearch.includes(keyword)) {
185
+ score += 1;
186
+ // Bonus for exact symbol match
187
+ if (fragment.refs.symbols.some((s) => s.toLowerCase() === keyword)) {
188
+ score += 2;
189
+ }
190
+ // Bonus for type match
191
+ if (fragment.type.includes(keyword)) {
192
+ score += 1;
193
+ }
194
+ }
195
+ }
196
+ // Normalize by keyword count
197
+ return keywords.length > 0 ? score / keywords.length : 0;
198
+ }
199
+ /**
200
+ * Limit fragments by estimated token count
201
+ */
202
+ function limitByTokens(fragments, maxTokens) {
203
+ const result = [];
204
+ let totalTokens = 0;
205
+ for (const fragment of fragments) {
206
+ const tokens = estimateTokens(fragment);
207
+ if (totalTokens + tokens > maxTokens) {
208
+ break;
209
+ }
210
+ result.push(fragment);
211
+ totalTokens += tokens;
212
+ }
213
+ return result;
214
+ }
215
+ /**
216
+ * Estimate token count for a fragment (rough approximation)
217
+ */
218
+ function estimateTokens(fragment) {
219
+ const json = JSON.stringify(fragment);
220
+ // Rough estimate: ~4 chars per token
221
+ return Math.ceil(json.length / 4);
222
+ }
223
+ /**
224
+ * Create a composition pipeline helper
225
+ */
226
+ function createComposer(store) {
227
+ return {
228
+ /**
229
+ * Compose by priority (default)
230
+ */
231
+ byPriority(maxTokens) {
232
+ return composeFragments(store.all(), {
233
+ strategy: 'priority',
234
+ maxTokens,
235
+ });
236
+ },
237
+ /**
238
+ * Compose by expanding from a seed
239
+ */
240
+ expand(seed, depth, maxTokens) {
241
+ return composeFragments(store.all(), {
242
+ strategy: 'expand',
243
+ seed,
244
+ depth,
245
+ maxTokens,
246
+ });
247
+ },
248
+ /**
249
+ * Compose by task relevance
250
+ */
251
+ forTask(task, maxTokens) {
252
+ return composeFragments(store.all(), {
253
+ strategy: 'task',
254
+ task,
255
+ maxTokens,
256
+ });
257
+ },
258
+ /**
259
+ * Get essential context (project overview + high priority)
260
+ */
261
+ essential(maxTokens) {
262
+ const essential = store
263
+ .all()
264
+ .filter((f) => f.type === 'project-overview' ||
265
+ f.meta.tags.includes('essential') ||
266
+ f.meta.priority >= 8);
267
+ return composeFragments(essential, {
268
+ strategy: 'priority',
269
+ maxTokens,
270
+ });
271
+ },
272
+ };
273
+ }
274
+ //# sourceMappingURL=compose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/fragments/compose.ts"],"names":[],"mappings":"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"}