@decaf-ts/mcp-server 0.4.2 → 0.4.7

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 (536) hide show
  1. package/LICENSE.md +31 -0
  2. package/dist/mcp-server.cjs +2 -2360
  3. package/dist/mcp-server.cjs.map +1 -0
  4. package/dist/mcp-server.js +2 -0
  5. package/dist/mcp-server.js.map +1 -0
  6. package/lib/bin/cli.cjs +7 -35
  7. package/lib/bin/cli.js.map +1 -0
  8. package/lib/builders/builder.cjs +91 -0
  9. package/lib/builders/builder.d.ts +25 -0
  10. package/lib/builders/builder.js.map +1 -0
  11. package/lib/{mcp/resources → builders}/index.cjs +5 -2
  12. package/lib/builders/index.d.ts +4 -0
  13. package/lib/builders/index.js.map +1 -0
  14. package/lib/builders/prompt-builder.cjs +76 -0
  15. package/lib/builders/prompt-builder.d.ts +12 -0
  16. package/lib/builders/prompt-builder.js.map +1 -0
  17. package/lib/builders/resource-builder.cjs +83 -0
  18. package/lib/builders/resource-builder.d.ts +14 -0
  19. package/lib/builders/resource-builder.js.map +1 -0
  20. package/lib/builders/tool-builder.cjs +104 -0
  21. package/lib/builders/tool-builder.d.ts +16 -0
  22. package/lib/builders/tool-builder.js.map +1 -0
  23. package/lib/constants.cjs +28 -30
  24. package/lib/constants.d.ts +19 -24
  25. package/lib/constants.js.map +1 -0
  26. package/lib/environment.cjs +32 -0
  27. package/lib/environment.d.ts +71 -0
  28. package/lib/environment.js.map +1 -0
  29. package/lib/esm/bin/cli.js +7 -35
  30. package/lib/esm/bin/cli.js.map +1 -0
  31. package/lib/esm/builders/builder.d.ts +25 -0
  32. package/lib/esm/builders/builder.js +86 -0
  33. package/lib/esm/builders/builder.js.map +1 -0
  34. package/lib/esm/builders/index.d.ts +4 -0
  35. package/lib/esm/builders/index.js +5 -0
  36. package/lib/esm/builders/index.js.map +1 -0
  37. package/lib/esm/builders/prompt-builder.d.ts +12 -0
  38. package/lib/esm/builders/prompt-builder.js +72 -0
  39. package/lib/esm/builders/prompt-builder.js.map +1 -0
  40. package/lib/esm/builders/resource-builder.d.ts +14 -0
  41. package/lib/esm/builders/resource-builder.js +79 -0
  42. package/lib/esm/builders/resource-builder.js.map +1 -0
  43. package/lib/esm/builders/tool-builder.d.ts +16 -0
  44. package/lib/esm/builders/tool-builder.js +100 -0
  45. package/lib/esm/builders/tool-builder.js.map +1 -0
  46. package/lib/esm/constants.d.ts +19 -24
  47. package/lib/esm/constants.js +27 -29
  48. package/lib/esm/constants.js.map +1 -0
  49. package/lib/esm/environment.d.ts +71 -0
  50. package/lib/esm/environment.js +29 -0
  51. package/lib/esm/environment.js.map +1 -0
  52. package/lib/esm/index.d.ts +3 -10
  53. package/lib/esm/index.js +4 -11
  54. package/lib/esm/index.js.map +1 -0
  55. package/lib/esm/mcp-server.d.ts +10 -0
  56. package/lib/esm/mcp-server.js +189 -0
  57. package/lib/esm/mcp-server.js.map +1 -0
  58. package/lib/esm/modules/template-module/index.d.ts +6 -0
  59. package/lib/esm/modules/template-module/index.js +4 -0
  60. package/lib/esm/modules/template-module/index.js.map +1 -0
  61. package/lib/esm/prompts/code/constants.d.ts +1 -0
  62. package/lib/esm/prompts/code/constants.js +2 -0
  63. package/lib/esm/prompts/code/constants.js.map +1 -0
  64. package/lib/esm/prompts/code/design-patterns/builder.d.ts +2 -0
  65. package/lib/esm/prompts/code/design-patterns/builder.js +118 -0
  66. package/lib/esm/prompts/code/design-patterns/builder.js.map +1 -0
  67. package/lib/esm/prompts/code/design-patterns/constants.d.ts +1 -0
  68. package/lib/esm/prompts/code/design-patterns/constants.js +3 -0
  69. package/lib/esm/prompts/code/design-patterns/constants.js.map +1 -0
  70. package/lib/esm/prompts/example-prompt/index.d.ts +2 -0
  71. package/lib/esm/prompts/example-prompt/index.js +18 -0
  72. package/lib/esm/prompts/example-prompt/index.js.map +1 -0
  73. package/lib/esm/prompts/index.d.ts +2 -0
  74. package/lib/esm/prompts/index.js +26 -0
  75. package/lib/esm/prompts/index.js.map +1 -0
  76. package/lib/esm/prompts/interactive-jsdoc/index.d.ts +2 -0
  77. package/lib/esm/prompts/interactive-jsdoc/index.js +18 -0
  78. package/lib/esm/prompts/interactive-jsdoc/index.js.map +1 -0
  79. package/lib/esm/prompts/jsdocs/class-prompt.d.ts +2 -0
  80. package/lib/esm/prompts/jsdocs/class-prompt.js +52 -0
  81. package/lib/esm/prompts/jsdocs/class-prompt.js.map +1 -0
  82. package/lib/esm/prompts/jsdocs/const-prompt.d.ts +2 -0
  83. package/lib/esm/prompts/jsdocs/const-prompt.js +24 -0
  84. package/lib/esm/prompts/jsdocs/const-prompt.js.map +1 -0
  85. package/lib/esm/prompts/jsdocs/constants.d.ts +4 -0
  86. package/lib/esm/prompts/jsdocs/constants.js +46 -0
  87. package/lib/esm/prompts/jsdocs/constants.js.map +1 -0
  88. package/lib/esm/prompts/jsdocs/decorator-prompt.d.ts +2 -0
  89. package/lib/esm/prompts/jsdocs/decorator-prompt.js +42 -0
  90. package/lib/esm/prompts/jsdocs/decorator-prompt.js.map +1 -0
  91. package/lib/esm/prompts/jsdocs/enum-prompt.d.ts +2 -0
  92. package/lib/esm/prompts/jsdocs/enum-prompt.js +24 -0
  93. package/lib/esm/prompts/jsdocs/enum-prompt.js.map +1 -0
  94. package/lib/esm/prompts/jsdocs/function-prompt.d.ts +2 -0
  95. package/lib/esm/prompts/jsdocs/function-prompt.js +43 -0
  96. package/lib/esm/prompts/jsdocs/function-prompt.js.map +1 -0
  97. package/lib/esm/prompts/jsdocs/interface-prompt.d.ts +2 -0
  98. package/lib/esm/prompts/jsdocs/interface-prompt.js +24 -0
  99. package/lib/esm/prompts/jsdocs/interface-prompt.js.map +1 -0
  100. package/lib/esm/prompts/jsdocs/types-prompt.d.ts +2 -0
  101. package/lib/esm/prompts/jsdocs/types-prompt.js +24 -0
  102. package/lib/esm/prompts/jsdocs/types-prompt.js.map +1 -0
  103. package/lib/esm/resources/example-resource/index.d.ts +2 -0
  104. package/lib/esm/resources/example-resource/index.js +19 -0
  105. package/lib/esm/resources/example-resource/index.js.map +1 -0
  106. package/lib/esm/resources/index.d.ts +2 -0
  107. package/lib/esm/resources/index.js +4 -0
  108. package/lib/esm/resources/index.js.map +1 -0
  109. package/lib/esm/resources/repo-metadata/index.d.ts +2 -0
  110. package/lib/esm/resources/repo-metadata/index.js +25 -0
  111. package/lib/esm/resources/repo-metadata/index.js.map +1 -0
  112. package/lib/esm/tools/ast/ts-ast-tool.d.ts +2 -0
  113. package/lib/esm/tools/ast/ts-ast-tool.js +67 -0
  114. package/lib/esm/tools/ast/ts-ast-tool.js.map +1 -0
  115. package/lib/esm/tools/ast/types.d.ts +105 -0
  116. package/lib/esm/tools/ast/types.js +33 -0
  117. package/lib/esm/tools/ast/types.js.map +1 -0
  118. package/lib/esm/tools/ast/utils.d.ts +5 -0
  119. package/lib/esm/tools/ast/utils.js +58 -0
  120. package/lib/esm/tools/ast/utils.js.map +1 -0
  121. package/lib/esm/tools/ast-jsdoc-tools/apply.d.ts +6 -0
  122. package/lib/esm/tools/ast-jsdoc-tools/apply.js +29 -0
  123. package/lib/esm/tools/ast-jsdoc-tools/apply.js.map +1 -0
  124. package/lib/esm/tools/ast-jsdoc-tools/cli.js +33 -0
  125. package/lib/esm/tools/ast-jsdoc-tools/cli.js.map +1 -0
  126. package/lib/esm/tools/ast-jsdoc-tools/enumerator.d.ts +1 -0
  127. package/lib/esm/tools/ast-jsdoc-tools/enumerator.js +25 -0
  128. package/lib/esm/tools/ast-jsdoc-tools/enumerator.js.map +1 -0
  129. package/lib/esm/tools/ast-jsdoc-tools/fileRunner.d.ts +11 -0
  130. package/lib/esm/tools/ast-jsdoc-tools/fileRunner.js +29 -0
  131. package/lib/esm/tools/ast-jsdoc-tools/fileRunner.js.map +1 -0
  132. package/lib/esm/tools/ast-jsdoc-tools/formatter.d.ts +6 -0
  133. package/lib/esm/tools/ast-jsdoc-tools/formatter.js +18 -0
  134. package/lib/esm/tools/ast-jsdoc-tools/formatter.js.map +1 -0
  135. package/lib/esm/tools/ast-jsdoc-tools/generator.d.ts +12 -0
  136. package/lib/esm/tools/ast-jsdoc-tools/generator.js +55 -0
  137. package/lib/esm/tools/ast-jsdoc-tools/generator.js.map +1 -0
  138. package/lib/esm/tools/ast-jsdoc-tools/index.d.ts +7 -0
  139. package/lib/esm/tools/ast-jsdoc-tools/index.js +29 -0
  140. package/lib/esm/tools/ast-jsdoc-tools/index.js.map +1 -0
  141. package/lib/esm/tools/ast-jsdoc-tools/interactive.d.ts +1 -0
  142. package/lib/esm/tools/ast-jsdoc-tools/interactive.js +7 -0
  143. package/lib/esm/tools/ast-jsdoc-tools/interactive.js.map +1 -0
  144. package/lib/esm/tools/ast-jsdoc-tools/parser.d.ts +13 -0
  145. package/lib/esm/tools/ast-jsdoc-tools/parser.js +71 -0
  146. package/lib/esm/tools/ast-jsdoc-tools/parser.js.map +1 -0
  147. package/lib/esm/tools/ast-jsdoc-tools/patch.d.ts +2 -0
  148. package/lib/esm/tools/ast-jsdoc-tools/patch.js +23 -0
  149. package/lib/esm/tools/ast-jsdoc-tools/patch.js.map +1 -0
  150. package/lib/esm/tools/ast-jsdoc-tools/prompts/loader.d.ts +10 -0
  151. package/lib/esm/tools/ast-jsdoc-tools/prompts/loader.js +26 -0
  152. package/lib/esm/tools/ast-jsdoc-tools/prompts/loader.js.map +1 -0
  153. package/lib/esm/tools/ast-jsdoc-tools/repoRunner.d.ts +16 -0
  154. package/lib/esm/tools/ast-jsdoc-tools/repoRunner.js +61 -0
  155. package/lib/esm/tools/ast-jsdoc-tools/repoRunner.js.map +1 -0
  156. package/lib/esm/tools/ast-jsdoc-tools/tools/jsdoc-generator.d.ts +5 -0
  157. package/lib/esm/tools/ast-jsdoc-tools/tools/jsdoc-generator.js +78 -0
  158. package/lib/esm/tools/ast-jsdoc-tools/tools/jsdoc-generator.js.map +1 -0
  159. package/lib/esm/tools/ast-jsdoc-tools/utils/conflict-detector.d.ts +5 -0
  160. package/lib/esm/tools/ast-jsdoc-tools/utils/conflict-detector.js +30 -0
  161. package/lib/esm/tools/ast-jsdoc-tools/utils/conflict-detector.js.map +1 -0
  162. package/lib/esm/tools/ast-jsdoc-tools/utils/context-schema.d.ts +7 -0
  163. package/lib/esm/tools/ast-jsdoc-tools/utils/context-schema.js +29 -0
  164. package/lib/esm/tools/ast-jsdoc-tools/utils/context-schema.js.map +1 -0
  165. package/lib/esm/tools/ast-jsdoc-tools/utils/heuristics.d.ts +2 -0
  166. package/lib/esm/tools/ast-jsdoc-tools/utils/heuristics.js +31 -0
  167. package/lib/esm/tools/ast-jsdoc-tools/utils/heuristics.js.map +1 -0
  168. package/lib/esm/tools/ast-jsdoc-tools/utils/ts-project.d.ts +12 -0
  169. package/lib/esm/tools/ast-jsdoc-tools/utils/ts-project.js +21 -0
  170. package/lib/esm/tools/ast-jsdoc-tools/utils/ts-project.js.map +1 -0
  171. package/lib/esm/tools/example-tool/index.d.ts +2 -0
  172. package/lib/esm/tools/example-tool/index.js +29 -0
  173. package/lib/esm/tools/example-tool/index.js.map +1 -0
  174. package/lib/esm/tools/file-summarizer/index.d.ts +2 -0
  175. package/lib/esm/tools/file-summarizer/index.js +29 -0
  176. package/lib/esm/tools/file-summarizer/index.js.map +1 -0
  177. package/lib/esm/tools/index.d.ts +2 -0
  178. package/lib/esm/tools/index.js +6 -0
  179. package/lib/esm/tools/index.js.map +1 -0
  180. package/lib/esm/tools/jsdoc/ts-jsdoc-element-tool.d.ts +2 -0
  181. package/lib/esm/tools/jsdoc/ts-jsdoc-element-tool.js +84 -0
  182. package/lib/esm/tools/jsdoc/ts-jsdoc-element-tool.js.map +1 -0
  183. package/lib/esm/tools/jsdoc/utils.d.ts +5 -0
  184. package/lib/esm/tools/jsdoc/utils.js +53 -0
  185. package/lib/esm/tools/jsdoc/utils.js.map +1 -0
  186. package/lib/esm/tools/testing/ts-jest-list-tests.d.ts +2 -0
  187. package/lib/esm/tools/testing/ts-jest-list-tests.js +53 -0
  188. package/lib/esm/tools/testing/ts-jest-list-tests.js.map +1 -0
  189. package/lib/esm/types.d.ts +56 -47
  190. package/lib/esm/types.js +1 -1
  191. package/lib/esm/types.js.map +1 -0
  192. package/lib/esm/utils/banner.d.ts +3 -0
  193. package/lib/esm/utils/banner.js +107 -0
  194. package/lib/esm/utils/banner.js.map +1 -0
  195. package/lib/esm/version.d.ts +2 -0
  196. package/lib/esm/version.js +5 -0
  197. package/lib/esm/version.js.map +1 -0
  198. package/lib/index.cjs +4 -11
  199. package/lib/index.d.ts +3 -10
  200. package/lib/index.js.map +1 -0
  201. package/lib/mcp-server.cjs +226 -0
  202. package/lib/mcp-server.d.ts +10 -0
  203. package/lib/mcp-server.js.map +1 -0
  204. package/lib/modules/template-module/index.cjs +7 -0
  205. package/lib/modules/template-module/index.d.ts +6 -0
  206. package/lib/modules/template-module/index.js.map +1 -0
  207. package/lib/prompts/code/constants.cjs +5 -0
  208. package/lib/prompts/code/constants.d.ts +1 -0
  209. package/lib/prompts/code/constants.js.map +1 -0
  210. package/lib/prompts/code/design-patterns/builder.cjs +121 -0
  211. package/lib/prompts/code/design-patterns/builder.d.ts +2 -0
  212. package/lib/prompts/code/design-patterns/builder.js.map +1 -0
  213. package/lib/prompts/code/design-patterns/constants.cjs +6 -0
  214. package/lib/prompts/code/design-patterns/constants.d.ts +1 -0
  215. package/lib/prompts/code/design-patterns/constants.js.map +1 -0
  216. package/lib/prompts/example-prompt/index.cjs +21 -0
  217. package/lib/prompts/example-prompt/index.d.ts +2 -0
  218. package/lib/prompts/example-prompt/index.js.map +1 -0
  219. package/lib/prompts/index.cjs +29 -0
  220. package/lib/prompts/index.d.ts +2 -0
  221. package/lib/prompts/index.js.map +1 -0
  222. package/lib/prompts/interactive-jsdoc/index.cjs +21 -0
  223. package/lib/prompts/interactive-jsdoc/index.d.ts +2 -0
  224. package/lib/prompts/interactive-jsdoc/index.js.map +1 -0
  225. package/lib/prompts/jsdocs/class-prompt.cjs +55 -0
  226. package/lib/prompts/jsdocs/class-prompt.d.ts +2 -0
  227. package/lib/prompts/jsdocs/class-prompt.js.map +1 -0
  228. package/lib/prompts/jsdocs/const-prompt.cjs +27 -0
  229. package/lib/prompts/jsdocs/const-prompt.d.ts +2 -0
  230. package/lib/prompts/jsdocs/const-prompt.js.map +1 -0
  231. package/lib/prompts/jsdocs/constants.cjs +49 -0
  232. package/lib/prompts/jsdocs/constants.d.ts +4 -0
  233. package/lib/prompts/jsdocs/constants.js.map +1 -0
  234. package/lib/prompts/jsdocs/decorator-prompt.cjs +45 -0
  235. package/lib/prompts/jsdocs/decorator-prompt.d.ts +2 -0
  236. package/lib/prompts/jsdocs/decorator-prompt.js.map +1 -0
  237. package/lib/prompts/jsdocs/enum-prompt.cjs +27 -0
  238. package/lib/prompts/jsdocs/enum-prompt.d.ts +2 -0
  239. package/lib/prompts/jsdocs/enum-prompt.js.map +1 -0
  240. package/lib/prompts/jsdocs/function-prompt.cjs +46 -0
  241. package/lib/prompts/jsdocs/function-prompt.d.ts +2 -0
  242. package/lib/prompts/jsdocs/function-prompt.js.map +1 -0
  243. package/lib/prompts/jsdocs/interface-prompt.cjs +27 -0
  244. package/lib/prompts/jsdocs/interface-prompt.d.ts +2 -0
  245. package/lib/prompts/jsdocs/interface-prompt.js.map +1 -0
  246. package/lib/prompts/jsdocs/types-prompt.cjs +27 -0
  247. package/lib/prompts/jsdocs/types-prompt.d.ts +2 -0
  248. package/lib/prompts/jsdocs/types-prompt.js.map +1 -0
  249. package/lib/resources/example-resource/index.cjs +22 -0
  250. package/lib/resources/example-resource/index.d.ts +2 -0
  251. package/lib/resources/example-resource/index.js.map +1 -0
  252. package/lib/resources/index.cjs +7 -0
  253. package/lib/resources/index.d.ts +2 -0
  254. package/lib/resources/index.js.map +1 -0
  255. package/lib/resources/repo-metadata/index.cjs +28 -0
  256. package/lib/resources/repo-metadata/index.d.ts +2 -0
  257. package/lib/resources/repo-metadata/index.js.map +1 -0
  258. package/lib/tools/ast/ts-ast-tool.cjs +70 -0
  259. package/lib/tools/ast/ts-ast-tool.d.ts +2 -0
  260. package/lib/tools/ast/ts-ast-tool.js.map +1 -0
  261. package/lib/tools/ast/types.cjs +36 -0
  262. package/lib/tools/ast/types.d.ts +105 -0
  263. package/lib/tools/ast/types.js.map +1 -0
  264. package/lib/tools/ast/utils.cjs +65 -0
  265. package/lib/tools/ast/utils.d.ts +5 -0
  266. package/lib/tools/ast/utils.js.map +1 -0
  267. package/lib/tools/ast-jsdoc-tools/apply.cjs +36 -0
  268. package/lib/tools/ast-jsdoc-tools/apply.d.ts +6 -0
  269. package/lib/tools/ast-jsdoc-tools/apply.js.map +1 -0
  270. package/lib/tools/ast-jsdoc-tools/cli.cjs +38 -0
  271. package/lib/tools/ast-jsdoc-tools/cli.js.map +1 -0
  272. package/lib/tools/ast-jsdoc-tools/enumerator.cjs +31 -0
  273. package/lib/tools/ast-jsdoc-tools/enumerator.d.ts +1 -0
  274. package/lib/tools/ast-jsdoc-tools/enumerator.js.map +1 -0
  275. package/lib/tools/ast-jsdoc-tools/fileRunner.cjs +35 -0
  276. package/lib/tools/ast-jsdoc-tools/fileRunner.d.ts +11 -0
  277. package/lib/tools/ast-jsdoc-tools/fileRunner.js.map +1 -0
  278. package/lib/tools/ast-jsdoc-tools/formatter.cjs +21 -0
  279. package/lib/tools/ast-jsdoc-tools/formatter.d.ts +6 -0
  280. package/lib/tools/ast-jsdoc-tools/formatter.js.map +1 -0
  281. package/lib/tools/ast-jsdoc-tools/generator.cjs +58 -0
  282. package/lib/tools/ast-jsdoc-tools/generator.d.ts +12 -0
  283. package/lib/tools/ast-jsdoc-tools/generator.js.map +1 -0
  284. package/lib/tools/ast-jsdoc-tools/index.cjs +33 -0
  285. package/lib/tools/ast-jsdoc-tools/index.d.ts +7 -0
  286. package/lib/tools/ast-jsdoc-tools/index.js.map +1 -0
  287. package/lib/tools/ast-jsdoc-tools/interactive.cjs +10 -0
  288. package/lib/tools/ast-jsdoc-tools/interactive.d.ts +1 -0
  289. package/lib/tools/ast-jsdoc-tools/interactive.js.map +1 -0
  290. package/lib/tools/ast-jsdoc-tools/parser.cjs +77 -0
  291. package/lib/tools/ast-jsdoc-tools/parser.d.ts +13 -0
  292. package/lib/tools/ast-jsdoc-tools/parser.js.map +1 -0
  293. package/lib/tools/ast-jsdoc-tools/patch.cjs +29 -0
  294. package/lib/tools/ast-jsdoc-tools/patch.d.ts +2 -0
  295. package/lib/tools/ast-jsdoc-tools/patch.js.map +1 -0
  296. package/lib/tools/ast-jsdoc-tools/prompts/loader.cjs +32 -0
  297. package/lib/tools/ast-jsdoc-tools/prompts/loader.d.ts +10 -0
  298. package/lib/tools/ast-jsdoc-tools/prompts/loader.js.map +1 -0
  299. package/lib/tools/ast-jsdoc-tools/repoRunner.cjs +67 -0
  300. package/lib/tools/ast-jsdoc-tools/repoRunner.d.ts +16 -0
  301. package/lib/tools/ast-jsdoc-tools/repoRunner.js.map +1 -0
  302. package/lib/tools/ast-jsdoc-tools/tools/jsdoc-generator.cjs +81 -0
  303. package/lib/tools/ast-jsdoc-tools/tools/jsdoc-generator.d.ts +5 -0
  304. package/lib/tools/ast-jsdoc-tools/tools/jsdoc-generator.js.map +1 -0
  305. package/lib/tools/ast-jsdoc-tools/utils/conflict-detector.cjs +33 -0
  306. package/lib/tools/ast-jsdoc-tools/utils/conflict-detector.d.ts +5 -0
  307. package/lib/tools/ast-jsdoc-tools/utils/conflict-detector.js.map +1 -0
  308. package/lib/tools/ast-jsdoc-tools/utils/context-schema.cjs +32 -0
  309. package/lib/tools/ast-jsdoc-tools/utils/context-schema.d.ts +7 -0
  310. package/lib/tools/ast-jsdoc-tools/utils/context-schema.js.map +1 -0
  311. package/lib/tools/ast-jsdoc-tools/utils/heuristics.cjs +34 -0
  312. package/lib/tools/ast-jsdoc-tools/utils/heuristics.d.ts +2 -0
  313. package/lib/tools/ast-jsdoc-tools/utils/heuristics.js.map +1 -0
  314. package/lib/tools/ast-jsdoc-tools/utils/ts-project.cjs +57 -0
  315. package/lib/tools/ast-jsdoc-tools/utils/ts-project.d.ts +12 -0
  316. package/lib/tools/ast-jsdoc-tools/utils/ts-project.js.map +1 -0
  317. package/lib/tools/example-tool/index.cjs +32 -0
  318. package/lib/tools/example-tool/index.d.ts +2 -0
  319. package/lib/tools/example-tool/index.js.map +1 -0
  320. package/lib/tools/file-summarizer/index.cjs +32 -0
  321. package/lib/tools/file-summarizer/index.d.ts +2 -0
  322. package/lib/tools/file-summarizer/index.js.map +1 -0
  323. package/lib/tools/index.cjs +9 -0
  324. package/lib/tools/index.d.ts +2 -0
  325. package/lib/tools/index.js.map +1 -0
  326. package/lib/tools/jsdoc/ts-jsdoc-element-tool.cjs +87 -0
  327. package/lib/tools/jsdoc/ts-jsdoc-element-tool.d.ts +2 -0
  328. package/lib/tools/jsdoc/ts-jsdoc-element-tool.js.map +1 -0
  329. package/lib/tools/jsdoc/utils.cjs +60 -0
  330. package/lib/tools/jsdoc/utils.d.ts +5 -0
  331. package/lib/tools/jsdoc/utils.js.map +1 -0
  332. package/lib/tools/testing/ts-jest-list-tests.cjs +56 -0
  333. package/lib/tools/testing/ts-jest-list-tests.d.ts +2 -0
  334. package/lib/tools/testing/ts-jest-list-tests.js.map +1 -0
  335. package/lib/types.cjs +1 -1
  336. package/lib/types.d.ts +56 -47
  337. package/lib/types.js.map +1 -0
  338. package/lib/utils/banner.cjs +114 -0
  339. package/lib/utils/banner.d.ts +3 -0
  340. package/lib/utils/banner.js.map +1 -0
  341. package/lib/version.cjs +8 -0
  342. package/lib/version.d.ts +2 -0
  343. package/lib/version.js.map +1 -0
  344. package/package.json +14 -63
  345. package/dist/mcp-server.esm.cjs +0 -2314
  346. package/lib/McpWrapper.cjs +0 -233
  347. package/lib/McpWrapper.d.ts +0 -89
  348. package/lib/bin/validate-modules.cjs +0 -24
  349. package/lib/esm/McpWrapper.d.ts +0 -89
  350. package/lib/esm/McpWrapper.js +0 -196
  351. package/lib/esm/bin/validate-modules.js +0 -22
  352. package/lib/esm/mcp/aggregateModules.d.ts +0 -26
  353. package/lib/esm/mcp/aggregateModules.js +0 -185
  354. package/lib/esm/mcp/code.d.ts +0 -23
  355. package/lib/esm/mcp/code.js +0 -70
  356. package/lib/esm/mcp/decorator-tools.d.ts +0 -118
  357. package/lib/esm/mcp/decorator-tools.js +0 -237
  358. package/lib/esm/mcp/fastmcp-wiring.d.ts +0 -14
  359. package/lib/esm/mcp/fastmcp-wiring.js +0 -56
  360. package/lib/esm/mcp/index.d.ts +0 -9
  361. package/lib/esm/mcp/index.js +0 -29
  362. package/lib/esm/mcp/mcp-module.d.ts +0 -11
  363. package/lib/esm/mcp/mcp-module.js +0 -31
  364. package/lib/esm/mcp/moduleRegistry.d.ts +0 -14
  365. package/lib/esm/mcp/moduleRegistry.js +0 -47
  366. package/lib/esm/mcp/prompts/index.d.ts +0 -4
  367. package/lib/esm/mcp/prompts/index.js +0 -7
  368. package/lib/esm/mcp/prompts/prompts.d.ts +0 -22
  369. package/lib/esm/mcp/prompts/prompts.js +0 -203
  370. package/lib/esm/mcp/resources/index.d.ts +0 -1
  371. package/lib/esm/mcp/resources/index.js +0 -2
  372. package/lib/esm/mcp/resources/resources.d.ts +0 -2
  373. package/lib/esm/mcp/resources/resources.js +0 -69
  374. package/lib/esm/mcp/schemas.d.ts +0 -53
  375. package/lib/esm/mcp/schemas.js +0 -97
  376. package/lib/esm/mcp/templates/codex-templates.d.ts +0 -3
  377. package/lib/esm/mcp/templates/codex-templates.js +0 -33
  378. package/lib/esm/mcp/templates/index.d.ts +0 -71
  379. package/lib/esm/mcp/templates/index.js +0 -66
  380. package/lib/esm/mcp/templates/resource-templates.d.ts +0 -3
  381. package/lib/esm/mcp/templates/resource-templates.js +0 -60
  382. package/lib/esm/mcp/templates/workspace-templates.d.ts +0 -3
  383. package/lib/esm/mcp/templates/workspace-templates.js +0 -66
  384. package/lib/esm/mcp/tools/codex-tools.d.ts +0 -5
  385. package/lib/esm/mcp/tools/codex-tools.js +0 -244
  386. package/lib/esm/mcp/tools/generateMcpModule.d.ts +0 -9
  387. package/lib/esm/mcp/tools/generateMcpModule.js +0 -133
  388. package/lib/esm/mcp/tools/index.d.ts +0 -219
  389. package/lib/esm/mcp/tools/index.js +0 -27
  390. package/lib/esm/mcp/tools/tools.d.ts +0 -10
  391. package/lib/esm/mcp/tools/tools.js +0 -275
  392. package/lib/esm/mcp/types.d.ts +0 -66
  393. package/lib/esm/mcp/types.js +0 -2
  394. package/lib/esm/mcp/utils.d.ts +0 -3
  395. package/lib/esm/mcp/utils.js +0 -46
  396. package/lib/esm/mcp/validation/index.d.ts +0 -13
  397. package/lib/esm/mcp/validation/index.js +0 -116
  398. package/lib/esm/mcp/validation/scaffoldModule.d.ts +0 -9
  399. package/lib/esm/mcp/validation/scaffoldModule.js +0 -88
  400. package/lib/esm/mcp/workspace.d.ts +0 -9
  401. package/lib/esm/mcp/workspace.js +0 -73
  402. package/lib/esm/metadata.d.ts +0 -9
  403. package/lib/esm/metadata.js +0 -22
  404. package/lib/esm/modules/_template/index.d.ts +0 -32
  405. package/lib/esm/modules/_template/index.js +0 -16
  406. package/lib/esm/modules/_template/prompts/index.d.ts +0 -6
  407. package/lib/esm/modules/_template/prompts/index.js +0 -9
  408. package/lib/esm/modules/_template/resources/index.d.ts +0 -6
  409. package/lib/esm/modules/_template/resources/index.js +0 -9
  410. package/lib/esm/modules/_template/templates/index.d.ts +0 -7
  411. package/lib/esm/modules/_template/templates/index.js +0 -10
  412. package/lib/esm/modules/_template/tools/index.d.ts +0 -6
  413. package/lib/esm/modules/_template/tools/index.js +0 -15
  414. package/lib/esm/modules/decoration/index.d.ts +0 -46
  415. package/lib/esm/modules/decoration/index.js +0 -10
  416. package/lib/esm/modules/decoration/prompts/index.d.ts +0 -1
  417. package/lib/esm/modules/decoration/prompts/index.js +0 -2
  418. package/lib/esm/modules/decoration/resources/index.d.ts +0 -7
  419. package/lib/esm/modules/decoration/resources/index.js +0 -10
  420. package/lib/esm/modules/decoration/templates/index.d.ts +0 -6
  421. package/lib/esm/modules/decoration/templates/index.js +0 -9
  422. package/lib/esm/modules/decoration/tools/index.d.ts +0 -26
  423. package/lib/esm/modules/decoration/tools/index.js +0 -7
  424. package/lib/esm/modules/index.d.ts +0 -2
  425. package/lib/esm/modules/index.js +0 -17
  426. package/lib/esm/modules/mcp/decoration-assist.d.ts +0 -4
  427. package/lib/esm/modules/mcp/decoration-assist.js +0 -6
  428. package/lib/esm/modules/mcp/index.d.ts +0 -6
  429. package/lib/esm/modules/mcp/index.js +0 -16
  430. package/lib/esm/modules/mcp/prompts/index.d.ts +0 -2
  431. package/lib/esm/modules/mcp/prompts/index.js +0 -9
  432. package/lib/esm/modules/mcp/resources/index.d.ts +0 -2
  433. package/lib/esm/modules/mcp/resources/index.js +0 -24
  434. package/lib/esm/modules/mcp/templates/index.d.ts +0 -2
  435. package/lib/esm/modules/mcp/templates/index.js +0 -28
  436. package/lib/esm/modules/mcp/tools/index.d.ts +0 -6
  437. package/lib/esm/modules/mcp/tools/index.js +0 -15
  438. package/lib/esm/utils/modulePaths.d.ts +0 -6
  439. package/lib/esm/utils/modulePaths.js +0 -33
  440. package/lib/esm/utils/moduleValidator.d.ts +0 -14
  441. package/lib/esm/utils/moduleValidator.js +0 -176
  442. package/lib/esm/utils.d.ts +0 -61
  443. package/lib/esm/utils.js +0 -86
  444. package/lib/mcp/aggregateModules.cjs +0 -225
  445. package/lib/mcp/aggregateModules.d.ts +0 -26
  446. package/lib/mcp/code.cjs +0 -81
  447. package/lib/mcp/code.d.ts +0 -23
  448. package/lib/mcp/decorator-tools.cjs +0 -243
  449. package/lib/mcp/decorator-tools.d.ts +0 -118
  450. package/lib/mcp/fastmcp-wiring.cjs +0 -59
  451. package/lib/mcp/fastmcp-wiring.d.ts +0 -14
  452. package/lib/mcp/index.cjs +0 -57
  453. package/lib/mcp/index.d.ts +0 -9
  454. package/lib/mcp/mcp-module.cjs +0 -46
  455. package/lib/mcp/mcp-module.d.ts +0 -11
  456. package/lib/mcp/moduleRegistry.cjs +0 -52
  457. package/lib/mcp/moduleRegistry.d.ts +0 -14
  458. package/lib/mcp/prompts/index.cjs +0 -25
  459. package/lib/mcp/prompts/index.d.ts +0 -4
  460. package/lib/mcp/prompts/prompts.cjs +0 -217
  461. package/lib/mcp/prompts/prompts.d.ts +0 -22
  462. package/lib/mcp/resources/index.d.ts +0 -1
  463. package/lib/mcp/resources/resources.cjs +0 -72
  464. package/lib/mcp/resources/resources.d.ts +0 -2
  465. package/lib/mcp/schemas.cjs +0 -100
  466. package/lib/mcp/schemas.d.ts +0 -53
  467. package/lib/mcp/templates/codex-templates.cjs +0 -40
  468. package/lib/mcp/templates/codex-templates.d.ts +0 -3
  469. package/lib/mcp/templates/index.cjs +0 -76
  470. package/lib/mcp/templates/index.d.ts +0 -71
  471. package/lib/mcp/templates/resource-templates.cjs +0 -67
  472. package/lib/mcp/templates/resource-templates.d.ts +0 -3
  473. package/lib/mcp/templates/workspace-templates.cjs +0 -70
  474. package/lib/mcp/templates/workspace-templates.d.ts +0 -3
  475. package/lib/mcp/tools/codex-tools.cjs +0 -250
  476. package/lib/mcp/tools/codex-tools.d.ts +0 -5
  477. package/lib/mcp/tools/generateMcpModule.cjs +0 -139
  478. package/lib/mcp/tools/generateMcpModule.d.ts +0 -9
  479. package/lib/mcp/tools/index.cjs +0 -30
  480. package/lib/mcp/tools/index.d.ts +0 -219
  481. package/lib/mcp/tools/tools.cjs +0 -317
  482. package/lib/mcp/tools/tools.d.ts +0 -10
  483. package/lib/mcp/types.cjs +0 -3
  484. package/lib/mcp/types.d.ts +0 -66
  485. package/lib/mcp/utils.cjs +0 -54
  486. package/lib/mcp/utils.d.ts +0 -3
  487. package/lib/mcp/validation/index.cjs +0 -123
  488. package/lib/mcp/validation/index.d.ts +0 -13
  489. package/lib/mcp/validation/scaffoldModule.cjs +0 -94
  490. package/lib/mcp/validation/scaffoldModule.d.ts +0 -9
  491. package/lib/mcp/workspace.cjs +0 -119
  492. package/lib/mcp/workspace.d.ts +0 -9
  493. package/lib/metadata.cjs +0 -25
  494. package/lib/metadata.d.ts +0 -9
  495. package/lib/modules/_template/index.cjs +0 -23
  496. package/lib/modules/_template/index.d.ts +0 -32
  497. package/lib/modules/_template/prompts/index.cjs +0 -12
  498. package/lib/modules/_template/prompts/index.d.ts +0 -6
  499. package/lib/modules/_template/resources/index.cjs +0 -12
  500. package/lib/modules/_template/resources/index.d.ts +0 -6
  501. package/lib/modules/_template/templates/index.cjs +0 -13
  502. package/lib/modules/_template/templates/index.d.ts +0 -7
  503. package/lib/modules/_template/tools/index.cjs +0 -18
  504. package/lib/modules/_template/tools/index.d.ts +0 -6
  505. package/lib/modules/decoration/index.cjs +0 -17
  506. package/lib/modules/decoration/index.d.ts +0 -46
  507. package/lib/modules/decoration/prompts/index.cjs +0 -5
  508. package/lib/modules/decoration/prompts/index.d.ts +0 -1
  509. package/lib/modules/decoration/resources/index.cjs +0 -13
  510. package/lib/modules/decoration/resources/index.d.ts +0 -7
  511. package/lib/modules/decoration/templates/index.cjs +0 -12
  512. package/lib/modules/decoration/templates/index.d.ts +0 -6
  513. package/lib/modules/decoration/tools/index.cjs +0 -10
  514. package/lib/modules/decoration/tools/index.d.ts +0 -26
  515. package/lib/modules/index.cjs +0 -20
  516. package/lib/modules/index.d.ts +0 -2
  517. package/lib/modules/mcp/decoration-assist.cjs +0 -13
  518. package/lib/modules/mcp/decoration-assist.d.ts +0 -4
  519. package/lib/modules/mcp/index.cjs +0 -23
  520. package/lib/modules/mcp/index.d.ts +0 -6
  521. package/lib/modules/mcp/prompts/index.cjs +0 -12
  522. package/lib/modules/mcp/prompts/index.d.ts +0 -2
  523. package/lib/modules/mcp/resources/index.cjs +0 -27
  524. package/lib/modules/mcp/resources/index.d.ts +0 -2
  525. package/lib/modules/mcp/templates/index.cjs +0 -31
  526. package/lib/modules/mcp/templates/index.d.ts +0 -2
  527. package/lib/modules/mcp/tools/index.cjs +0 -18
  528. package/lib/modules/mcp/tools/index.d.ts +0 -6
  529. package/lib/utils/modulePaths.cjs +0 -43
  530. package/lib/utils/modulePaths.d.ts +0 -6
  531. package/lib/utils/moduleValidator.cjs +0 -184
  532. package/lib/utils/moduleValidator.d.ts +0 -14
  533. package/lib/utils.cjs +0 -129
  534. package/lib/utils.d.ts +0 -61
  535. /package/lib/{bin/validate-modules.d.ts → esm/tools/ast-jsdoc-tools/cli.d.ts} +0 -0
  536. /package/lib/{esm/bin/validate-modules.d.ts → tools/ast-jsdoc-tools/cli.d.ts} +0 -0
@@ -1,250 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.readmeImprovementTool = exports.coverageEnforcerTool = exports.documentObjectTool = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
9
- const child_process_1 = require("child_process");
10
- const schemas_1 = require("./../schemas.cjs");
11
- const workspace_1 = require("./../workspace.cjs");
12
- const prompts_1 = require("./../prompts/prompts.cjs");
13
- const utils_1 = require("./../utils.cjs");
14
- const code_1 = require("./../code.cjs");
15
- function relativeFiles(root, files) {
16
- return files.map((file) => path_1.default.relative(root, file)).sort();
17
- }
18
- function collectPromptSections(names) {
19
- const root = (0, workspace_1.getWorkspaceRoot)();
20
- const promptIndex = new Map((0, prompts_1.discoverDocPrompts)(root).map((prompt) => [prompt.name, prompt]));
21
- return names
22
- .map((name) => promptIndex.get(name))
23
- .filter((prompt) => Boolean(prompt))
24
- .map((prompt) => ({
25
- name: prompt.name,
26
- title: prompt.title,
27
- description: prompt.description,
28
- content: prompt.content,
29
- absolutePath: prompt.absolutePath,
30
- }));
31
- }
32
- function parseTaskLines(content) {
33
- return content
34
- .split(/\r?\n/)
35
- .map((line) => line.trim())
36
- .filter((line) => /^task\s+\d+/i.test(line));
37
- }
38
- function computeCoverageFromFinal(coveragePath) {
39
- const payload = JSON.parse(fs_1.default.readFileSync(coveragePath, "utf8"));
40
- const totals = {
41
- statements: { covered: 0, total: 0 },
42
- functions: { covered: 0, total: 0 },
43
- branches: { covered: 0, total: 0 },
44
- };
45
- const files = Object.entries(payload).map(([filePath, info]) => {
46
- const statementCounts = Object.values(info.s);
47
- const functionCounts = Object.values(info.f);
48
- const branchCounts = Object.values(info.b).flatMap((value) => Array.isArray(value) ? value : [value]);
49
- const statementTotal = statementCounts.length;
50
- const functionTotal = functionCounts.length;
51
- const branchTotal = branchCounts.length;
52
- const statementCovered = statementCounts.filter((count) => count > 0).length;
53
- const functionCovered = functionCounts.filter((count) => count > 0).length;
54
- const branchCovered = branchCounts.filter((count) => count > 0).length;
55
- totals.statements.covered += statementCovered;
56
- totals.statements.total += statementTotal;
57
- totals.functions.covered += functionCovered;
58
- totals.functions.total += functionTotal;
59
- totals.branches.covered += branchCovered;
60
- totals.branches.total += branchTotal;
61
- const pct = (covered, total) => total === 0 ? 100 : Number(((covered / total) * 100).toFixed(2));
62
- return {
63
- path: filePath,
64
- statements: pct(statementCovered, statementTotal),
65
- functions: pct(functionCovered, functionTotal),
66
- branches: pct(branchCovered, branchTotal),
67
- };
68
- });
69
- const pct = (covered, total) => total === 0 ? 100 : Number(((covered / total) * 100).toFixed(2));
70
- return {
71
- totals: {
72
- statements: {
73
- ...totals.statements,
74
- pct: pct(totals.statements.covered, totals.statements.total),
75
- },
76
- functions: {
77
- ...totals.functions,
78
- pct: pct(totals.functions.covered, totals.functions.total),
79
- },
80
- branches: {
81
- ...totals.branches,
82
- pct: pct(totals.branches.covered, totals.branches.total),
83
- },
84
- },
85
- files,
86
- };
87
- }
88
- function normalizePromptSections(sections) {
89
- return sections.map((section) => ({
90
- name: section.name,
91
- title: section.title,
92
- tasks: parseTaskLines(section.content),
93
- content: section.content,
94
- }));
95
- }
96
- async function resolveRepoRoot(basePath) {
97
- const root = (0, workspace_1.getWorkspaceRoot)();
98
- try {
99
- return (0, workspace_1.resolveInWorkspace)(root, basePath);
100
- }
101
- catch (error) {
102
- if (error instanceof workspace_1.WorkspaceError) {
103
- await (0, workspace_1.throwUserError)(error.message);
104
- }
105
- throw error;
106
- }
107
- }
108
- exports.documentObjectTool = {
109
- name: "document-object",
110
- description: "Create a documentation plan for a specific object type using .codex prompts and repository analysis.",
111
- parameters: schemas_1.documentObjectSchema,
112
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
113
- execute: async (input, _context) => {
114
- const args = schemas_1.documentObjectSchema.parse(input);
115
- const repoRoot = await resolveRepoRoot(args.basePath);
116
- const dependencies = (0, prompts_1.getObjectPromptDependencies)()[args.objectType] ?? [];
117
- if (!dependencies.length) {
118
- await (0, workspace_1.throwUserError)(`No prompt guidance configured for object type ${args.objectType}`);
119
- }
120
- const sections = normalizePromptSections(collectPromptSections(dependencies));
121
- const srcDir = path_1.default.join(repoRoot, "src");
122
- const testDir = path_1.default.join(repoRoot, "tests");
123
- const sourceFiles = fs_1.default.existsSync(srcDir)
124
- ? (0, utils_1.listFilesRecursive)(srcDir, code_1.isSourceFile)
125
- : [];
126
- const testFiles = fs_1.default.existsSync(testDir)
127
- ? (0, utils_1.listFilesRecursive)(testDir, (file) => (0, code_1.isSourceFile)(file) && (0, code_1.isTestFile)(file))
128
- : [];
129
- let targetFileContent;
130
- if (args.targetFile) {
131
- try {
132
- const absolute = (0, workspace_1.resolveInWorkspace)(repoRoot, args.targetFile);
133
- targetFileContent = (0, utils_1.readFileSafe)(absolute) ?? undefined;
134
- }
135
- catch (error) {
136
- if (error instanceof workspace_1.WorkspaceError) {
137
- await (0, workspace_1.throwUserError)(error.message);
138
- }
139
- throw error;
140
- }
141
- }
142
- const payload = {
143
- basePath: path_1.default.relative((0, workspace_1.getWorkspaceRoot)(), repoRoot) || ".",
144
- objectType: args.objectType,
145
- targetFile: args.targetFile,
146
- guidance: sections,
147
- files: {
148
- source: relativeFiles(repoRoot, sourceFiles),
149
- tests: relativeFiles(repoRoot, testFiles),
150
- },
151
- targetFileContent: args.includeContent ? targetFileContent : undefined,
152
- };
153
- return {
154
- content: [
155
- {
156
- type: "text",
157
- text: JSON.stringify(payload, null, 2),
158
- },
159
- ],
160
- };
161
- },
162
- };
163
- exports.coverageEnforcerTool = {
164
- name: "ensure-test-coverage",
165
- description: "Run the configured coverage command and report whether the target percentage is met, highlighting weak files.",
166
- parameters: schemas_1.coverageTaskSchema,
167
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
168
- execute: async (input, _context) => {
169
- const args = schemas_1.coverageTaskSchema.parse(input);
170
- const repoRoot = await resolveRepoRoot(args.basePath);
171
- if (!args.dryRun) {
172
- const env = {
173
- ...process.env,
174
- USE_WATCHMAN: "false",
175
- WATCHMAN_DISABLE: "1",
176
- JEST_DISABLE_WATCHMAN: "1",
177
- };
178
- const result = (0, child_process_1.spawnSync)("npm", ["run", "coverage", "--", "--watchman=false", "--runInBand"], { cwd: repoRoot, env, encoding: "utf8" });
179
- if (result.status !== 0) {
180
- const message = result.stderr || result.stdout || "Coverage command failed";
181
- await (0, workspace_1.throwUserError)(message.trim());
182
- }
183
- }
184
- const coveragePath = path_1.default.join(repoRoot, "workdocs", "reports", "coverage", "coverage-final.json");
185
- if (!fs_1.default.existsSync(coveragePath)) {
186
- await (0, workspace_1.throwUserError)(`Coverage report not found at ${path_1.default.relative(repoRoot, coveragePath)}`);
187
- }
188
- const summary = computeCoverageFromFinal(coveragePath);
189
- const meetsThreshold = summary.totals.statements.pct >= args.coverage &&
190
- summary.totals.functions.pct >= args.coverage &&
191
- summary.totals.branches.pct >= args.coverage;
192
- const weakest = [...summary.files]
193
- .sort((a, b) => a.statements - b.statements)
194
- .slice(0, 10);
195
- const guidance = normalizePromptSections(collectPromptSections(["bulk-tests"]));
196
- const payload = {
197
- basePath: path_1.default.relative((0, workspace_1.getWorkspaceRoot)(), repoRoot) || ".",
198
- target: args.coverage,
199
- meetsThreshold,
200
- totals: summary.totals,
201
- weakest,
202
- guidance,
203
- };
204
- return {
205
- content: [
206
- {
207
- type: "text",
208
- text: JSON.stringify(payload, null, 2),
209
- },
210
- ],
211
- };
212
- },
213
- };
214
- exports.readmeImprovementTool = {
215
- name: "improve-readme",
216
- description: "Summarize required steps to refresh README and workdocs content using .codex guidance and repository analysis.",
217
- parameters: schemas_1.readmeImprovementSchema,
218
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
219
- execute: async (input, _context) => {
220
- const args = schemas_1.readmeImprovementSchema.parse(input);
221
- const repoRoot = await resolveRepoRoot(args.basePath);
222
- const analysis = (0, code_1.analyzeRepo)(repoRoot);
223
- const modules = analysis.files
224
- .filter((file) => /index\.ts$/.test(file))
225
- .map((file) => path_1.default.relative(repoRoot, file));
226
- const promptSections = normalizePromptSections(collectPromptSections(["update-readme", "doc", "module"]));
227
- const testExamples = Object.keys(analysis.tests ?? {});
228
- const examples = args.includeExamples ? testExamples.slice(0, 20) : [];
229
- const payload = {
230
- basePath: path_1.default.relative((0, workspace_1.getWorkspaceRoot)(), repoRoot) || ".",
231
- summary: {
232
- modules,
233
- totalSourceFiles: analysis.files.length,
234
- totalTestFiles: analysis.testFiles.length,
235
- hasReadme: Boolean(analysis.readme),
236
- },
237
- guidance: promptSections,
238
- suggestedExamples: examples,
239
- };
240
- return {
241
- content: [
242
- {
243
- type: "text",
244
- text: JSON.stringify(payload, null, 2),
245
- },
246
- ],
247
- };
248
- },
249
- };
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXgtdG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2NvZGV4LXRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUFvQjtBQUNwQixnREFBd0I7QUFDeEIsaURBQTBDO0FBRTFDLDhDQUlvQjtBQU1wQixrREFLc0I7QUFDdEIsc0RBRzRCO0FBRTVCLDBDQUE0RDtBQUM1RCx3Q0FBZ0U7QUFVaEUsU0FBUyxhQUFhLENBQUMsSUFBWSxFQUFFLEtBQWU7SUFDbEQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxjQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9ELENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEtBQXdCO0lBQ3JELE1BQU0sSUFBSSxHQUFHLElBQUEsNEJBQWdCLEdBQUUsQ0FBQztJQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FDekIsSUFBQSw0QkFBa0IsRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUNoRSxDQUFDO0lBQ0YsT0FBTyxLQUFLO1NBQ1QsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBdUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4RCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNu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QUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV2RSxNQUFNLE9BQU8sR0FBRztZQUNkLFFBQVEsRUFBRSxjQUFJLENBQUMsUUFBUSxDQUFDLElBQUEsNEJBQWdCLEdBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxHQUFHO1lBQzVELE9BQU8sRUFBRTtnQkFDUCxPQUFPO2dCQUNQLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDdkMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTTtnQkFDekMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO2FBQ3BDO1lBQ0QsUUFBUSxFQUFFLGNBQWM7WUFDeEIsaUJBQWlCLEVBQUUsUUFBUTtTQUM1QixDQUFDO1FBRUYsT0FBTztZQUNMLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDdkM7YUFDRjtTQUNzQixDQUFDO0lBQzVCLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRlbnRSZXN1bHQsIFRvb2wgfSBmcm9tIFwiZmFzdG1jcFwiO1xuaW1wb3J0IHtcbiAgZG9jdW1lbnRPYmplY3RTY2hlbWEsXG4gIGNvdmVyYWdlVGFza1NjaGVtYSxcbiAgcmVhZG1lSW1wcm92ZW1lbnRTY2hlbWEsXG59IGZyb20gXCIuLi9zY2hlbWFzXCI7XG5pbXBvcnQge1xuICBEb2N1bWVudE9iamVjdEFyZ3MsXG4gIENvdmVyYWdlVGFza0FyZ3MsXG4gIFJlYWRtZUltcHJvdmVtZW50QXJncyxcbn0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQge1xuICBnZXRXb3Jrc3BhY2VSb290LFxuICByZXNvbHZlSW5Xb3Jrc3BhY2UsXG4gIHRocm93VXNlckVycm9yLFxuICBXb3Jrc3BhY2VFcnJvcixcbn0gZnJvbSBcIi4uL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHtcbiAgZGlzY292ZXJEb2NQcm9tcHRzLFxuICBnZXRPYmplY3RQcm9tcHREZXBlbmRlbmNpZXMsXG59IGZyb20gXCIuLi9wcm9tcHRzL3Byb21wdHNcIjtcbmltcG9ydCB0eXBlIHsgRG9jUHJvbXB0IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBsaXN0RmlsZXNSZWN1cnNpdmUsIHJlYWRGaWxlU2FmZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgYW5hbHl6ZVJlcG8sIGlzU291cmNlRmlsZSwgaXNUZXN0RmlsZSB9IGZyb20gXCIuLi9jb2RlXCI7XG5cbnR5cGUgUHJvbXB0U2VjdGlvbiA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGFic29sdXRlUGF0aD86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIHJlbGF0aXZlRmlsZXMocm9vdDogc3RyaW5nLCBmaWxlczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBmaWxlcy5tYXAoKGZpbGUpID0+IHBhdGgucmVsYXRpdmUocm9vdCwgZmlsZSkpLnNvcnQoKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFByb21wdFNlY3Rpb25zKG5hbWVzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21wdFNlY3Rpb25bXSB7XG4gIGNvbnN0IHJvb3QgPSBnZXRXb3Jrc3BhY2VSb290KCk7XG4gIGNvbnN0IHByb21wdEluZGV4ID0gbmV3IE1hcDxzdHJpbmcsIERvY1Byb21wdD4oXG4gICAgZGlzY292ZXJEb2NQcm9tcHRzKHJvb3QpLm1hcCgocHJvbXB0KSA9PiBbcHJvbXB0Lm5hbWUsIHByb21wdF0pXG4gICk7XG4gIHJldHVybiBuYW1lc1xuICAgIC5tYXAoKG5hbWUpID0+IHByb21wdEluZGV4LmdldChuYW1lKSlcbiAgICAuZmlsdGVyKChwcm9tcHQpOiBwcm9tcHQgaXMgRG9jUHJvbXB0ID0+IEJvb2xlYW4ocHJvbXB0KSlcbiAgICAubWFwKChwcm9tcHQpID0+ICh7XG4gICAgICBuYW1lOiBwcm9tcHQubmFtZSxcbiAgICAgIHRpdGxlOiBwcm9tcHQudGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvbXB0LmRlc2NyaXB0aW9uLFxuICAgICAgY29udGVudDogcHJvbXB0LmNvbnRlbnQsXG4gICAgICBhYnNvbHV0ZVBhdGg6IHByb21wdC5hYnNvbHV0ZVBhdGgsXG4gICAgfSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRhc2tMaW5lcyhjb250ZW50OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBjb250ZW50XG4gICAgLnNwbGl0KC9cXHI/XFxuLylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnRyaW0oKSlcbiAgICAuZmlsdGVyKChsaW5lKSA9PiAvXnRhc2tcXHMrXFxkKy9pLnRlc3QobGluZSkpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlQ292ZXJhZ2VGcm9tRmluYWwoY292ZXJhZ2VQYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgcGF5bG9hZCA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGNvdmVyYWdlUGF0aCwgXCJ1dGY4XCIpKSBhcyBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHtcbiAgICAgIHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gICAgICBmOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICAgICAgYjogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgbnVtYmVyW10+O1xuICAgIH1cbiAgPjtcblxuICBjb25zdCB0b3RhbHMgPSB7XG4gICAgc3RhdGVtZW50czogeyBjb3ZlcmVkOiAwLCB0b3RhbDogMCB9LFxuICAgIGZ1bmN0aW9uczogeyBjb3ZlcmVkOiAwLCB0b3RhbDogMCB9LFxuICAgIGJyYW5jaGVzOiB7IGNvdmVyZWQ6IDAsIHRvdGFsOiAwIH0sXG4gIH07XG5cbiAgY29uc3QgZmlsZXMgPSBPYmplY3QuZW50cmllcyhwYXlsb2FkKS5tYXAoKFtmaWxlUGF0aCwgaW5mb10pID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnRDb3VudHMgPSBPYmplY3QudmFsdWVzKGluZm8ucyk7XG4gICAgY29uc3QgZnVuY3Rpb25Db3VudHMgPSBPYmplY3QudmFsdWVzKGluZm8uZik7XG4gICAgY29uc3QgYnJhbmNoQ291bnRzID0gT2JqZWN0LnZhbHVlcyhpbmZvLmIpLmZsYXRNYXAoKHZhbHVlKSA9PlxuICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV1cbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50VG90YWwgPSBzdGF0ZW1lbnRDb3VudHMubGVuZ3RoO1xuICAgIGNvbnN0IGZ1bmN0aW9uVG90YWwgPSBmdW5jdGlvbkNvdW50cy5sZW5ndGg7XG4gICAgY29uc3QgYnJhbmNoVG90YWwgPSBicmFuY2hDb3VudHMubGVuZ3RoO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Q292ZXJlZCA9IHN0YXRlbWVudENvdW50cy5maWx0ZXIoXG4gICAgICAoY291bnQpID0+IGNvdW50ID4gMFxuICAgICkubGVuZ3RoO1xuICAgIGNvbnN0IGZ1bmN0aW9uQ292ZXJlZCA9IGZ1bmN0aW9uQ291bnRzLmZpbHRlcigoY291bnQpID0+IGNvdW50ID4gMCkubGVuZ3RoO1xuICAgIGNvbnN0IGJyYW5jaENvdmVyZWQgPSBicmFuY2hDb3VudHMuZmlsdGVyKChjb3VudCkgPT4gY291bnQgPiAwKS5sZW5ndGg7XG5cbiAgICB0b3RhbHMuc3RhdGVtZW50cy5jb3ZlcmVkICs9IHN0YXRlbWVudENvdmVyZWQ7XG4gICAgdG90YWxzLnN0YXRlbWVudHMudG90YWwgKz0gc3RhdGVtZW50VG90YWw7XG4gICAgdG90YWxzLmZ1bmN0aW9ucy5jb3ZlcmVkICs9IGZ1bmN0aW9uQ292ZXJlZDtcbiAgICB0b3RhbHMuZnVuY3Rpb25zLnRvdGFsICs9IGZ1bmN0aW9uVG90YWw7XG4gICAgdG90YWxzLmJyYW5jaGVzLmNvdmVyZWQgKz0gYnJhbmNoQ292ZXJlZDtcbiAgICB0b3RhbHMuYnJhbmNoZXMudG90YWwgKz0gYnJhbmNoVG90YWw7XG5cbiAgICBjb25zdCBwY3QgPSAoY292ZXJlZDogbnVtYmVyLCB0b3RhbDogbnVtYmVyKSA9PlxuICAgICAgdG90YWwgPT09IDAgPyAxMDAgOiBOdW1iZXIoKChjb3ZlcmVkIC8gdG90YWwpICogMTAwKS50b0ZpeGVkKDIpKTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgIHN0YXRlbWVudHM6IHBjdChzdGF0ZW1lbnRDb3ZlcmVkLCBzdGF0ZW1lbnRUb3RhbCksXG4gICAgICBmdW5jdGlvbnM6IHBjdChmdW5jdGlvbkNvdmVyZWQsIGZ1bmN0aW9uVG90YWwpLFxuICAgICAgYnJhbmNoZXM6IHBjdChicmFuY2hDb3ZlcmVkLCBicmFuY2hUb3RhbCksXG4gICAgfTtcbiAgfSk7XG5cbiAgY29uc3QgcGN0ID0gKGNvdmVyZWQ6IG51bWJlciwgdG90YWw6IG51bWJlcikgPT5cbiAgICB0b3RhbCA9PT0gMCA/IDEwMCA6IE51bWJlcigoKGNvdmVyZWQgLyB0b3RhbCkgKiAxMDApLnRvRml4ZWQoMikpO1xuXG4gIHJldHVybiB7XG4gICAgdG90YWxzOiB7XG4gICAgICBzdGF0ZW1lbnRzOiB7XG4gICAgICAgIC4uLnRvdGFscy5zdGF0ZW1lbnRzLFxuICAgICAgICBwY3Q6IHBjdCh0b3RhbHMuc3RhdGVtZW50cy5jb3ZlcmVkLCB0b3RhbHMuc3RhdGVtZW50cy50b3RhbCksXG4gICAgICB9LFxuICAgICAgZnVuY3Rpb25zOiB7XG4gICAgICAgIC4uLnRvdGFscy5mdW5jdGlvbnMsXG4gICAgICAgIHBjdDogcGN0KHRvdGFscy5mdW5jdGlvbnMuY292ZXJlZCwgdG90YWxzLmZ1bmN0aW9ucy50b3RhbCksXG4gICAgICB9LFxuICAgICAgYnJhbmNoZXM6IHtcbiAgICAgICAgLi4udG90YWxzLmJyYW5jaGVzLFxuICAgICAgICBwY3Q6IHBjdCh0b3RhbHMuYnJhbmNoZXMuY292ZXJlZCwgdG90YWxzLmJyYW5jaGVzLnRvdGFsKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBmaWxlcyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUHJvbXB0U2VjdGlvbnMoc2VjdGlvbnM6IFByb21wdFNlY3Rpb25bXSkge1xuICByZXR1cm4gc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiAoe1xuICAgIG5hbWU6IHNlY3Rpb24ubmFtZSxcbiAgICB0aXRsZTogc2VjdGlvbi50aXRsZSxcbiAgICB0YXNrczogcGFyc2VUYXNrTGluZXMoc2VjdGlvbi5jb250ZW50KSxcbiAgICBjb250ZW50OiBzZWN0aW9uLmNvbnRlbnQsXG4gIH0pKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVJlcG9Sb290KGJhc2VQYXRoOiBzdHJpbmcpIHtcbiAgY29uc3Qgcm9vdCA9IGdldFdvcmtzcGFjZVJvb3QoKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVzb2x2ZUluV29ya3NwYWNlKHJvb3QsIGJhc2VQYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBXb3Jrc3BhY2VFcnJvcikge1xuICAgICAgYXdhaXQgdGhyb3dVc2VyRXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBkb2N1bWVudE9iamVjdFRvb2w6IFRvb2w8dW5kZWZpbmVkLCB0eXBlb2YgZG9jdW1lbnRPYmplY3RTY2hlbWE+ID1cbiAge1xuICAgIG5hbWU6IFwiZG9jdW1lbnQtb2JqZWN0XCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIkNyZWF0ZSBhIGRvY3VtZW50YXRpb24gcGxhbiBmb3IgYSBzcGVjaWZpYyBvYmplY3QgdHlwZSB1c2luZyAuY29kZXggcHJvbXB0cyBhbmQgcmVwb3NpdG9yeSBhbmFseXNpcy5cIixcbiAgICBwYXJhbWV0ZXJzOiBkb2N1bWVudE9iamVjdFNjaGVtYSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBfY29udGV4dCk6IFByb21pc2U8Q29udGVudFJlc3VsdD4gPT4ge1xuICAgICAgY29uc3QgYXJncyA9IGRvY3VtZW50T2JqZWN0U2NoZW1hLnBhcnNlKGlucHV0IGFzIERvY3VtZW50T2JqZWN0QXJncyk7XG4gICAgICBjb25zdCByZXBvUm9vdCA9IGF3YWl0IHJlc29sdmVSZXBvUm9vdChhcmdzLmJhc2VQYXRoKTtcblxuICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gZ2V0T2JqZWN0UHJvbXB0RGVwZW5kZW5jaWVzKClbYXJncy5vYmplY3RUeXBlXSA/PyBbXTtcbiAgICAgIGlmICghZGVwZW5kZW5jaWVzLmxlbmd0aCkge1xuICAgICAgICBhd2FpdCB0aHJvd1VzZXJFcnJvcihcbiAgICAgICAgICBgTm8gcHJvbXB0IGd1aWRhbmNlIGNvbmZpZ3VyZWQgZm9yIG9iamVjdCB0eXBlICR7YXJncy5vYmplY3RUeXBlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VjdGlvbnMgPSBub3JtYWxpemVQcm9tcHRTZWN0aW9ucyhcbiAgICAgICAgY29sbGVjdFByb21wdFNlY3Rpb25zKGRlcGVuZGVuY2llcylcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNyY0RpciA9IHBhdGguam9pbihyZXBvUm9vdCwgXCJzcmNcIik7XG4gICAgICBjb25zdCB0ZXN0RGlyID0gcGF0aC5qb2luKHJlcG9Sb290LCBcInRlc3RzXCIpO1xuXG4gICAgICBjb25zdCBzb3VyY2VGaWxlcyA9IGZzLmV4aXN0c1N5bmMoc3JjRGlyKVxuICAgICAgICA/IGxpc3RGaWxlc1JlY3Vyc2l2ZShzcmNEaXIsIGlzU291cmNlRmlsZSlcbiAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IHRlc3RGaWxlcyA9IGZzLmV4aXN0c1N5bmModGVzdERpcilcbiAgICAgICAgPyBsaXN0RmlsZXNSZWN1cnNpdmUoXG4gICAgICAgICAgICB0ZXN0RGlyLFxuICAgICAgICAgICAgKGZpbGUpID0+IGlzU291cmNlRmlsZShmaWxlKSAmJiBpc1Rlc3RGaWxlKGZpbGUpXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdO1xuXG4gICAgICBsZXQgdGFyZ2V0RmlsZUNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChhcmdzLnRhcmdldEZpbGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHJlc29sdmVJbldvcmtzcGFjZShyZXBvUm9vdCwgYXJncy50YXJnZXRGaWxlKTtcbiAgICAgICAgICB0YXJnZXRGaWxlQ29udGVudCA9IHJlYWRGaWxlU2FmZShhYnNvbHV0ZSkgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFdvcmtzcGFjZUVycm9yKSB7XG4gICAgICAgICAgICBhd2FpdCB0aHJvd1VzZXJFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgYmFzZVBhdGg6IHBhdGgucmVsYXRpdmUoZ2V0V29ya3NwYWNlUm9vdCgpLCByZXBvUm9vdCkgfHwgXCIuXCIsXG4gICAgICAgIG9iamVjdFR5cGU6IGFyZ3Mub2JqZWN0VHlwZSxcbiAgICAgICAgdGFyZ2V0RmlsZTogYXJncy50YXJnZXRGaWxlLFxuICAgICAgICBndWlkYW5jZTogc2VjdGlvbnMsXG4gICAgICAgIGZpbGVzOiB7XG4gICAgICAgICAgc291cmNlOiByZWxhdGl2ZUZpbGVzKHJlcG9Sb290LCBzb3VyY2VGaWxlcyksXG4gICAgICAgICAgdGVzdHM6IHJlbGF0aXZlRmlsZXMocmVwb1Jvb3QsIHRlc3RGaWxlcyksXG4gICAgICAgIH0sXG4gICAgICAgIHRhcmdldEZpbGVDb250ZW50OiBhcmdzLmluY2x1ZGVDb250ZW50ID8gdGFyZ2V0RmlsZUNvbnRlbnQgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkLCBudWxsLCAyKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSBzYXRpc2ZpZXMgQ29udGVudFJlc3VsdDtcbiAgICB9LFxuICB9O1xuXG5leHBvcnQgY29uc3QgY292ZXJhZ2VFbmZvcmNlclRvb2w6IFRvb2w8dW5kZWZpbmVkLCB0eXBlb2YgY292ZXJhZ2VUYXNrU2NoZW1hPiA9XG4gIHtcbiAgICBuYW1lOiBcImVuc3VyZS10ZXN0LWNvdmVyYWdlXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlJ1biB0aGUgY29uZmlndXJlZCBjb3ZlcmFnZSBjb21tYW5kIGFuZCByZXBvcnQgd2hldGhlciB0aGUgdGFyZ2V0IHBlcmNlbnRhZ2UgaXMgbWV0LCBoaWdobGlnaHRpbmcgd2VhayBmaWxlcy5cIixcbiAgICBwYXJhbWV0ZXJzOiBjb3ZlcmFnZVRhc2tTY2hlbWEsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgX2NvbnRleHQpOiBQcm9taXNlPENvbnRlbnRSZXN1bHQ+ID0+IHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBjb3ZlcmFnZVRhc2tTY2hlbWEucGFyc2UoaW5wdXQgYXMgQ292ZXJhZ2VUYXNrQXJncyk7XG4gICAgICBjb25zdCByZXBvUm9vdCA9IGF3YWl0IHJlc29sdmVSZXBvUm9vdChhcmdzLmJhc2VQYXRoKTtcblxuICAgICAgaWYgKCFhcmdzLmRyeVJ1bikge1xuICAgICAgICBjb25zdCBlbnYgPSB7XG4gICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgVVNFX1dBVENITUFOOiBcImZhbHNlXCIsXG4gICAgICAgICAgV0FUQ0hNQU5fRElTQUJMRTogXCIxXCIsXG4gICAgICAgICAgSkVTVF9ESVNBQkxFX1dBVENITUFOOiBcIjFcIixcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKFxuICAgICAgICAgIFwibnBtXCIsXG4gICAgICAgICAgW1wicnVuXCIsIFwiY292ZXJhZ2VcIiwgXCItLVwiLCBcIi0td2F0Y2htYW49ZmFsc2VcIiwgXCItLXJ1bkluQmFuZFwiXSxcbiAgICAgICAgICB7IGN3ZDogcmVwb1Jvb3QsIGVudiwgZW5jb2Rpbmc6IFwidXRmOFwiIH1cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICAgICAgcmVzdWx0LnN0ZGVyciB8fCByZXN1bHQuc3Rkb3V0IHx8IFwiQ292ZXJhZ2UgY29tbWFuZCBmYWlsZWRcIjtcbiAgICAgICAgICBhd2FpdCB0aHJvd1VzZXJFcnJvcihtZXNzYWdlLnRyaW0oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY292ZXJhZ2VQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICByZXBvUm9vdCxcbiAgICAgICAgXCJ3b3JrZG9jc1wiLFxuICAgICAgICBcInJlcG9ydHNcIixcbiAgICAgICAgXCJjb3ZlcmFnZVwiLFxuICAgICAgICBcImNvdmVyYWdlLWZpbmFsLmpzb25cIlxuICAgICAgKTtcblxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvdmVyYWdlUGF0aCkpIHtcbiAgICAgICAgYXdhaXQgdGhyb3dVc2VyRXJyb3IoXG4gICAgICAgICAgYENvdmVyYWdlIHJlcG9ydCBub3QgZm91bmQgYXQgJHtwYXRoLnJlbGF0aXZlKHJlcG9Sb290LCBjb3ZlcmFnZVBhdGgpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3VtbWFyeSA9IGNvbXB1dGVDb3ZlcmFnZUZyb21GaW5hbChjb3ZlcmFnZVBhdGgpO1xuICAgICAgY29uc3QgbWVldHNUaHJlc2hvbGQgPVxuICAgICAgICBzdW1tYXJ5LnRvdGFscy5zdGF0ZW1lbnRzLnBjdCA+PSBhcmdzLmNvdmVyYWdlICYmXG4gICAgICAgIHN1bW1hcnkudG90YWxzLmZ1bmN0aW9ucy5wY3QgPj0gYXJncy5jb3ZlcmFnZSAmJlxuICAgICAgICBzdW1tYXJ5LnRvdGFscy5icmFuY2hlcy5wY3QgPj0gYXJncy5jb3ZlcmFnZTtcblxuICAgICAgY29uc3Qgd2Vha2VzdCA9IFsuLi5zdW1tYXJ5LmZpbGVzXVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGF0ZW1lbnRzIC0gYi5zdGF0ZW1lbnRzKVxuICAgICAgICAuc2xpY2UoMCwgMTApO1xuXG4gICAgICBjb25zdCBndWlkYW5jZSA9IG5vcm1hbGl6ZVByb21wdFNlY3Rpb25zKFxuICAgICAgICBjb2xsZWN0UHJvbXB0U2VjdGlvbnMoW1wiYnVsay10ZXN0c1wiXSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGJhc2VQYXRoOiBwYXRoLnJlbGF0aXZlKGdldFdvcmtzcGFjZVJvb3QoKSwgcmVwb1Jvb3QpIHx8IFwiLlwiLFxuICAgICAgICB0YXJnZXQ6IGFyZ3MuY292ZXJhZ2UsXG4gICAgICAgIG1lZXRzVGhyZXNob2xkLFxuICAgICAgICB0b3RhbHM6IHN1bW1hcnkudG90YWxzLFxuICAgICAgICB3ZWFrZXN0LFxuICAgICAgICBndWlkYW5jZSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQsIG51bGwsIDIpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9IHNhdGlzZmllcyBDb250ZW50UmVzdWx0O1xuICAgIH0sXG4gIH07XG5cbmV4cG9ydCBjb25zdCByZWFkbWVJbXByb3ZlbWVudFRvb2w6IFRvb2w8XG4gIHVuZGVmaW5lZCxcbiAgdHlwZW9mIHJlYWRtZUltcHJvdmVtZW50U2NoZW1hXG4+ID0ge1xuICBuYW1lOiBcImltcHJvdmUtcmVhZG1lXCIsXG4gIGRlc2NyaXB0aW9uOlxuICAgIFwiU3VtbWFyaXplIHJlcXVpcmVkIHN0ZXBzIHRvIHJlZnJlc2ggUkVBRE1FIGFuZCB3b3JrZG9jcyBjb250ZW50IHVzaW5nIC5jb2RleCBndWlkYW5jZSBhbmQgcmVwb3NpdG9yeSBhbmFseXNpcy5cIixcbiAgcGFyYW1ldGVyczogcmVhZG1lSW1wcm92ZW1lbnRTY2hlbWEsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBfY29udGV4dCk6IFByb21pc2U8Q29udGVudFJlc3VsdD4gPT4ge1xuICAgIGNvbnN0IGFyZ3MgPSByZWFkbWVJbXByb3ZlbWVudFNjaGVtYS5wYXJzZShpbnB1dCBhcyBSZWFkbWVJbXByb3ZlbWVudEFyZ3MpO1xuICAgIGNvbnN0IHJlcG9Sb290ID0gYXdhaXQgcmVzb2x2ZVJlcG9Sb290KGFyZ3MuYmFzZVBhdGgpO1xuXG4gICAgY29uc3QgYW5hbHlzaXMgPSBhbmFseXplUmVwbyhyZXBvUm9vdCk7XG4gICAgY29uc3QgbW9kdWxlcyA9IGFuYWx5c2lzLmZpbGVzXG4gICAgICAuZmlsdGVyKChmaWxlKSA9PiAvaW5kZXhcXC50cyQvLnRlc3QoZmlsZSkpXG4gICAgICAubWFwKChmaWxlKSA9PiBwYXRoLnJlbGF0aXZlKHJlcG9Sb290LCBmaWxlKSk7XG5cbiAgICBjb25zdCBwcm9tcHRTZWN0aW9ucyA9IG5vcm1hbGl6ZVByb21wdFNlY3Rpb25zKFxuICAgICAgY29sbGVjdFByb21wdFNlY3Rpb25zKFtcInVwZGF0ZS1yZWFkbWVcIiwgXCJkb2NcIiwgXCJtb2R1bGVcIl0pXG4gICAgKTtcblxuICAgIGNvbnN0IHRlc3RFeGFtcGxlcyA9IE9iamVjdC5rZXlzKGFuYWx5c2lzLnRlc3RzID8/IHt9KTtcbiAgICBjb25zdCBleGFtcGxlcyA9IGFyZ3MuaW5jbHVkZUV4YW1wbGVzID8gdGVzdEV4YW1wbGVzLnNsaWNlKDAsIDIwKSA6IFtdO1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGJhc2VQYXRoOiBwYXRoLnJlbGF0aXZlKGdldFdvcmtzcGFjZVJvb3QoKSwgcmVwb1Jvb3QpIHx8IFwiLlwiLFxuICAgICAgc3VtbWFyeToge1xuICAgICAgICBtb2R1bGVzLFxuICAgICAgICB0b3RhbFNvdXJjZUZpbGVzOiBhbmFseXNpcy5maWxlcy5sZW5ndGgsXG4gICAgICAgIHRvdGFsVGVzdEZpbGVzOiBhbmFseXNpcy50ZXN0RmlsZXMubGVuZ3RoLFxuICAgICAgICBoYXNSZWFkbWU6IEJvb2xlYW4oYW5hbHlzaXMucmVhZG1lKSxcbiAgICAgIH0sXG4gICAgICBndWlkYW5jZTogcHJvbXB0U2VjdGlvbnMsXG4gICAgICBzdWdnZXN0ZWRFeGFtcGxlczogZXhhbXBsZXMsXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkLCBudWxsLCAyKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSBzYXRpc2ZpZXMgQ29udGVudFJlc3VsdDtcbiAgfSxcbn07XG4iXX0=
@@ -1,5 +0,0 @@
1
- import type { Tool } from "fastmcp";
2
- import { documentObjectSchema, coverageTaskSchema, readmeImprovementSchema } from "../schemas";
3
- export declare const documentObjectTool: Tool<undefined, typeof documentObjectSchema>;
4
- export declare const coverageEnforcerTool: Tool<undefined, typeof coverageTaskSchema>;
5
- export declare const readmeImprovementTool: Tool<undefined, typeof readmeImprovementSchema>;
@@ -1,139 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.generateMcpModuleTool = void 0;
7
- // New tool: generate-mcp-module
8
- const fs_1 = __importDefault(require("fs"));
9
- const path_1 = __importDefault(require("path"));
10
- const zod_1 = require("zod");
11
- const workspace_1 = require("./../workspace.cjs");
12
- const code_1 = require("./../code.cjs");
13
- const scaffoldModule_1 = require("./../validation/scaffoldModule.cjs");
14
- const generateSchema = zod_1.z.object({
15
- repoPath: zod_1.z.string().optional().default("."),
16
- moduleName: zod_1.z.string().optional(),
17
- includeDocs: zod_1.z.boolean().default(true),
18
- });
19
- exports.generateMcpModuleTool = {
20
- name: "generate-mcp-module",
21
- description: "Generate a minimal MCP module under src/modules/<name> by analyzing a target repository and exporting prompts, resources, templates and tools.",
22
- parameters: generateSchema,
23
- execute: async (input) => {
24
- const args = generateSchema.parse(input);
25
- const root = (0, workspace_1.getWorkspaceRoot)();
26
- let repoRoot = path_1.default.resolve(process.cwd(), args.repoPath || ".");
27
- if (!fs_1.default.existsSync(repoRoot)) {
28
- const alt = path_1.default.resolve(process.cwd(), "..", args.repoPath);
29
- if (fs_1.default.existsSync(alt))
30
- repoRoot = alt;
31
- }
32
- if (!fs_1.default.existsSync(repoRoot)) {
33
- const alt2 = path_1.default.resolve(process.cwd(), "..", path_1.default.basename(args.repoPath));
34
- if (fs_1.default.existsSync(alt2))
35
- repoRoot = alt2;
36
- }
37
- if (!fs_1.default.existsSync(repoRoot))
38
- throw new Error(`Repository not found at ${repoRoot}`);
39
- const analysis = (0, code_1.analyzeRepo)(repoRoot);
40
- const inferredName = args.moduleName ?? path_1.default.basename(path_1.default.resolve(repoRoot));
41
- const moduleRoot = path_1.default.join(root, "src", "modules", inferredName);
42
- // Use existing scaffold to create folders
43
- (0, scaffoldModule_1.scaffoldModule)(root, inferredName);
44
- // populate prompts: copy markdown prompts from README.md and docs/
45
- const promptsDir = path_1.default.join(moduleRoot, "prompts");
46
- const resourcesDir = path_1.default.join(moduleRoot, "resources");
47
- const templatesDir = path_1.default.join(moduleRoot, "templates");
48
- const toolsDir = path_1.default.join(moduleRoot, "tools");
49
- // helper to write an index.ts that exports arrays
50
- function writeIndex(dir, varName, items) {
51
- const p = path_1.default.join(dir, "index.ts");
52
- const content = `export const ${varName} = ${items} as const;\n`;
53
- fs_1.default.writeFileSync(p, content, { encoding: "utf8" });
54
- }
55
- // Prompts: create a simple prompt from README and any .md in docs
56
- const promptAssets = [];
57
- if (args.includeDocs) {
58
- const readme = path_1.default.join(repoRoot, "README.md");
59
- if (fs_1.default.existsSync(readme)) {
60
- const content = fs_1.default.readFileSync(readme, "utf8");
61
- const id = "readme";
62
- const promptPath = path_1.default.join(promptsDir, `${id}.md`);
63
- fs_1.default.writeFileSync(promptPath, content, { encoding: "utf8" });
64
- promptAssets.push({
65
- id,
66
- title: "README",
67
- description: "Repository README",
68
- absolutePath: promptPath,
69
- load: () => content,
70
- });
71
- }
72
- const docsDir = path_1.default.join(repoRoot, "docs");
73
- if (fs_1.default.existsSync(docsDir) && fs_1.default.statSync(docsDir).isDirectory()) {
74
- for (const f of fs_1.default.readdirSync(docsDir)) {
75
- if (!f.endsWith(".md"))
76
- continue;
77
- const content = fs_1.default.readFileSync(path_1.default.join(docsDir, f), "utf8");
78
- const id = path_1.default.parse(f).name;
79
- const promptPath = path_1.default.join(promptsDir, `${id}.md`);
80
- fs_1.default.writeFileSync(promptPath, content, { encoding: "utf8" });
81
- promptAssets.push({
82
- id,
83
- title: id,
84
- description: content.split(/\r?\n/)[0] || "",
85
- absolutePath: promptPath,
86
- load: () => content,
87
- });
88
- }
89
- }
90
- }
91
- writeIndex(promptsDir, "prompts", JSON.stringify(promptAssets, null, 2));
92
- // Resources: reference the repo root and docs
93
- const resourceAssets = [
94
- {
95
- id: `${inferredName}.repo`,
96
- name: `${inferredName} repository`,
97
- description: "Source repository",
98
- uri: `file://${repoRoot}`,
99
- absolutePath: repoRoot,
100
- },
101
- ];
102
- writeIndex(resourcesDir, "resources", JSON.stringify(resourceAssets, null, 2));
103
- // Templates: create a placeholder template that references README
104
- const templateAssets = [
105
- {
106
- name: "readme-template",
107
- description: "README as guidance",
108
- uriTemplate: `file://${path_1.default.join(repoRoot, "README.md")}`,
109
- mimeType: "text/markdown",
110
- },
111
- ];
112
- writeIndex(templatesDir, "templates", JSON.stringify(templateAssets, null, 2));
113
- // Tools: create a wrapper tool that exposes analyze/enumerate for the module
114
- const toolIndexPath = path_1.default.join(toolsDir, "index.ts");
115
- const toolContent = `import type { Tool } from 'fastmcp';\nimport { buildAnalyzeRepositoryTool, buildEnumerateCapabilitiesTool, buildPlanFeatureTool } from '../../../mcp/tools/tools';\nexport const tools = [\n { id: '${inferredName}.analyze', title: 'Analyze ${inferredName}', description: 'Analyze the target repository', tool: buildAnalyzeRepositoryTool() },\n { id: '${inferredName}.enumerate', title: 'Enumerate capabilities for ${inferredName}', description: 'Enumerate capabilities', tool: buildEnumerateCapabilitiesTool() },\n { id: '${inferredName}.plan', title: 'Plan features for ${inferredName}', description: 'Plan feature implementation', tool: buildPlanFeatureTool() },\n] as const;\n`;
116
- fs_1.default.writeFileSync(toolIndexPath, toolContent, { encoding: "utf8" });
117
- // Write module index.ts
118
- const moduleIndex = path_1.default.join(moduleRoot, "index.ts");
119
- const moduleIndexContent = `import { prompts } from './prompts';\nimport { resources } from './resources';\nimport { templates } from './templates';\nimport { tools } from './tools';\nexport { prompts } from './prompts';\nexport { resources } from './resources';\nexport { templates } from './templates';\nexport { tools } from './tools';\nexport const modulePackage = { name: '${inferredName}', prompts, resources, templates, tools } as const;\n`;
120
- fs_1.default.writeFileSync(moduleIndex, moduleIndexContent, { encoding: "utf8" });
121
- return {
122
- content: [
123
- {
124
- type: "text",
125
- text: JSON.stringify({
126
- moduleRoot,
127
- inferredName,
128
- analysisSummary: {
129
- files: analysis.files.length,
130
- testFiles: analysis.testFiles.length,
131
- },
132
- }, null, 2),
133
- },
134
- ],
135
- };
136
- },
137
- };
138
- exports.default = exports.generateMcpModuleTool;
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVNY3BNb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2dlbmVyYXRlTWNwTW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdDQUFnQztBQUNoQyw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBRXhCLDZCQUF3QjtBQUN4QixrREFBZ0Q7QUFDaEQsd0NBQXNDO0FBQ3RDLHVFQUE4RDtBQUU5RCxNQUFNLGNBQWMsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzlCLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUM1QyxVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxXQUFXLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Q0FDdkMsQ0FBQyxDQUFDO0FBRVUsUUFBQSxxQkFBcUIsR0FBMkM7SUFDM0UsSUFBSSxFQUFFLHFCQUFxQjtJQUMzQixXQUFXLEVBQ1QsZ0pBQWdKO0lBQ2xKLFVBQVUsRUFBRSxjQUFjO0lBQzFCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDdkIsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFZLENBQUMsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxJQUFBLDRCQUFnQixHQUFFLENBQUM7UUFDaEMsSUFBSSxRQUFRLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsWUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sR0FBRyxHQUFHLGNBQUksQ0FBQyxP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LEdBQUcsd01BQXdNLFlBQVksOEJBQThCLFlBQVksb0dBQW9HLFlBQVksbURBQW1ELFlBQVksaUdBQWlHLFlBQVkscUNBQXFDLFlBQVksK0ZBQStGLENBQUM7UUFDL3JCLFlBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRW5FLHdCQUF3QjtRQUN4QixNQUFNLFdBQVcsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RCxNQUFNLGtCQUFrQixHQUFHLGlXQUFpVyxZQUFZLHVEQUF1RCxDQUFDO1FBQ2hjLFlBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFeEUsT0FBTztZQUNMLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDbEI7d0JBQ0UsVUFBVTt3QkFDVixZQUFZO3dCQUNaLGVBQWUsRUFBRTs0QkFDZixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNOzRCQUM1QixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNO3lCQUNyQztxQkFDRixFQUNELElBQUksRUFDSixDQUFDLENBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLGtCQUFlLDZCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTmV3IHRvb2w6IGdlbmVyYXRlLW1jcC1tb2R1bGVcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IFRvb2wgfSBmcm9tIFwiZmFzdG1jcFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IGdldFdvcmtzcGFjZVJvb3QgfSBmcm9tIFwiLi4vd29ya3NwYWNlXCI7XG5pbXBvcnQgeyBhbmFseXplUmVwbyB9IGZyb20gXCIuLi9jb2RlXCI7XG5pbXBvcnQgeyBzY2FmZm9sZE1vZHVsZSB9IGZyb20gXCIuLi92YWxpZGF0aW9uL3NjYWZmb2xkTW9kdWxlXCI7XG5cbmNvbnN0IGdlbmVyYXRlU2NoZW1hID0gei5vYmplY3Qoe1xuICByZXBvUGF0aDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlZmF1bHQoXCIuXCIpLFxuICBtb2R1bGVOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGluY2x1ZGVEb2NzOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZU1jcE1vZHVsZVRvb2w6IFRvb2w8dW5kZWZpbmVkLCB0eXBlb2YgZ2VuZXJhdGVTY2hlbWE+ID0ge1xuICBuYW1lOiBcImdlbmVyYXRlLW1jcC1tb2R1bGVcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJHZW5lcmF0ZSBhIG1pbmltYWwgTUNQIG1vZHVsZSB1bmRlciBzcmMvbW9kdWxlcy88bmFtZT4gYnkgYW5hbHl6aW5nIGEgdGFyZ2V0IHJlcG9zaXRvcnkgYW5kIGV4cG9ydGluZyBwcm9tcHRzLCByZXNvdXJjZXMsIHRlbXBsYXRlcyBhbmQgdG9vbHMuXCIsXG4gIHBhcmFtZXRlcnM6IGdlbmVyYXRlU2NoZW1hLFxuICBleGVjdXRlOiBhc3luYyAoaW5wdXQpID0+IHtcbiAgICBjb25zdCBhcmdzID0gZ2VuZXJhdGVTY2hlbWEucGFyc2UoaW5wdXQgYXMgYW55KTtcbiAgICBjb25zdCByb290ID0gZ2V0V29ya3NwYWNlUm9vdCgpO1xuICAgIGxldCByZXBvUm9vdCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBhcmdzLnJlcG9QYXRoIHx8IFwiLlwiKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocmVwb1Jvb3QpKSB7XG4gICAgICBjb25zdCBhbHQgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgXCIuLlwiLCBhcmdzLnJlcG9QYXRoKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGFsdCkpIHJlcG9Sb290ID0gYWx0O1xuICAgIH1cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocmVwb1Jvb3QpKSB7XG4gICAgICBjb25zdCBhbHQyID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICBcIi4uXCIsXG4gICAgICAgIHBhdGguYmFzZW5hbWUoYXJncy5yZXBvUGF0aClcbiAgICAgICk7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhhbHQyKSkgcmVwb1Jvb3QgPSBhbHQyO1xuICAgIH1cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocmVwb1Jvb3QpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXBvc2l0b3J5IG5vdCBmb3VuZCBhdCAke3JlcG9Sb290fWApO1xuXG4gICAgY29uc3QgYW5hbHlzaXMgPSBhbmFseXplUmVwbyhyZXBvUm9vdCk7XG4gICAgY29uc3QgaW5mZXJyZWROYW1lID1cbiAgICAgIGFyZ3MubW9kdWxlTmFtZSA/PyBwYXRoLmJhc2VuYW1lKHBhdGgucmVzb2x2ZShyZXBvUm9vdCkpO1xuICAgIGNvbnN0IG1vZHVsZVJvb3QgPSBwYXRoLmpvaW4ocm9vdCwgXCJzcmNcIiwgXCJtb2R1bGVzXCIsIGluZmVycmVkTmFtZSk7XG5cbiAgICAvLyBVc2UgZXhpc3Rpbmcgc2NhZmZvbGQgdG8gY3JlYXRlIGZvbGRlcnNcbiAgICBzY2FmZm9sZE1vZHVsZShyb290LCBpbmZlcnJlZE5hbWUpO1xuXG4gICAgLy8gcG9wdWxhdGUgcHJvbXB0czogY29weSBtYXJrZG93biBwcm9tcHRzIGZyb20gUkVBRE1FLm1kIGFuZCBkb2NzL1xuICAgIGNvbnN0IHByb21wdHNEaXIgPSBwYXRoLmpvaW4obW9kdWxlUm9vdCwgXCJwcm9tcHRzXCIpO1xuICAgIGNvbnN0IHJlc291cmNlc0RpciA9IHBhdGguam9pbihtb2R1bGVSb290LCBcInJlc291cmNlc1wiKTtcbiAgICBjb25zdCB0ZW1wbGF0ZXNEaXIgPSBwYXRoLmpvaW4obW9kdWxlUm9vdCwgXCJ0ZW1wbGF0ZXNcIik7XG4gICAgY29uc3QgdG9vbHNEaXIgPSBwYXRoLmpvaW4obW9kdWxlUm9vdCwgXCJ0b29sc1wiKTtcblxuICAgIC8vIGhlbHBlciB0byB3cml0ZSBhbiBpbmRleC50cyB0aGF0IGV4cG9ydHMgYXJyYXlzXG4gICAgZnVuY3Rpb24gd3JpdGVJbmRleChkaXI6IHN0cmluZywgdmFyTmFtZTogc3RyaW5nLCBpdGVtczogc3RyaW5nKSB7XG4gICAgICBjb25zdCBwID0gcGF0aC5qb2luKGRpciwgXCJpbmRleC50c1wiKTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBgZXhwb3J0IGNvbnN0ICR7dmFyTmFtZX0gPSAke2l0ZW1zfSBhcyBjb25zdDtcXG5gO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhwLCBjb250ZW50LCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KTtcbiAgICB9XG5cbiAgICAvLyBQcm9tcHRzOiBjcmVhdGUgYSBzaW1wbGUgcHJvbXB0IGZyb20gUkVBRE1FIGFuZCBhbnkgLm1kIGluIGRvY3NcbiAgICBjb25zdCBwcm9tcHRBc3NldHM6IGFueVtdID0gW107XG4gICAgaWYgKGFyZ3MuaW5jbHVkZURvY3MpIHtcbiAgICAgIGNvbnN0IHJlYWRtZSA9IHBhdGguam9pbihyZXBvUm9vdCwgXCJSRUFETUUubWRcIik7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhyZWFkbWUpKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocmVhZG1lLCBcInV0ZjhcIik7XG4gICAgICAgIGNvbnN0IGlkID0gXCJyZWFkbWVcIjtcbiAgICAgICAgY29uc3QgcHJvbXB0UGF0aCA9IHBhdGguam9pbihwcm9tcHRzRGlyLCBgJHtpZH0ubWRgKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwcm9tcHRQYXRoLCBjb250ZW50LCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KTtcbiAgICAgICAgcHJvbXB0QXNzZXRzLnB1c2goe1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIHRpdGxlOiBcIlJFQURNRVwiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlJlcG9zaXRvcnkgUkVBRE1FXCIsXG4gICAgICAgICAgYWJzb2x1dGVQYXRoOiBwcm9tcHRQYXRoLFxuICAgICAgICAgIGxvYWQ6ICgpID0+IGNvbnRlbnQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgZG9jc0RpciA9IHBhdGguam9pbihyZXBvUm9vdCwgXCJkb2NzXCIpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZG9jc0RpcikgJiYgZnMuc3RhdFN5bmMoZG9jc0RpcikuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZnMucmVhZGRpclN5bmMoZG9jc0RpcikpIHtcbiAgICAgICAgICBpZiAoIWYuZW5kc1dpdGgoXCIubWRcIikpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGRvY3NEaXIsIGYpLCBcInV0ZjhcIik7XG4gICAgICAgICAgY29uc3QgaWQgPSBwYXRoLnBhcnNlKGYpLm5hbWU7XG4gICAgICAgICAgY29uc3QgcHJvbXB0UGF0aCA9IHBhdGguam9pbihwcm9tcHRzRGlyLCBgJHtpZH0ubWRgKTtcbiAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHByb21wdFBhdGgsIGNvbnRlbnQsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pO1xuICAgICAgICAgIHByb21wdEFzc2V0cy5wdXNoKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgdGl0bGU6IGlkLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKVswXSB8fCBcIlwiLFxuICAgICAgICAgICAgYWJzb2x1dGVQYXRoOiBwcm9tcHRQYXRoLFxuICAgICAgICAgICAgbG9hZDogKCkgPT4gY29udGVudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlSW5kZXgocHJvbXB0c0RpciwgXCJwcm9tcHRzXCIsIEpTT04uc3RyaW5naWZ5KHByb21wdEFzc2V0cywgbnVsbCwgMikpO1xuXG4gICAgLy8gUmVzb3VyY2VzOiByZWZlcmVuY2UgdGhlIHJlcG8gcm9vdCBhbmQgZG9jc1xuICAgIGNvbnN0IHJlc291cmNlQXNzZXRzID0gW1xuICAgICAge1xuICAgICAgICBpZDogYCR7aW5mZXJyZWROYW1lfS5yZXBvYCxcbiAgICAgICAgbmFtZTogYCR7aW5mZXJyZWROYW1lfSByZXBvc2l0b3J5YCxcbiAgICAgICAgZGVzY3JpcHRpb246IFwiU291cmNlIHJlcG9zaXRvcnlcIixcbiAgICAgICAgdXJpOiBgZmlsZTovLyR7cmVwb1Jvb3R9YCxcbiAgICAgICAgYWJzb2x1dGVQYXRoOiByZXBvUm9vdCxcbiAgICAgIH0sXG4gICAgXTtcbiAgICB3cml0ZUluZGV4KFxuICAgICAgcmVzb3VyY2VzRGlyLFxuICAgICAgXCJyZXNvdXJjZXNcIixcbiAgICAgIEpTT04uc3RyaW5naWZ5KHJlc291cmNlQXNzZXRzLCBudWxsLCAyKVxuICAgICk7XG5cbiAgICAvLyBUZW1wbGF0ZXM6IGNyZWF0ZSBhIHBsYWNlaG9sZGVyIHRlbXBsYXRlIHRoYXQgcmVmZXJlbmNlcyBSRUFETUVcbiAgICBjb25zdCB0ZW1wbGF0ZUFzc2V0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJyZWFkbWUtdGVtcGxhdGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiUkVBRE1FIGFzIGd1aWRhbmNlXCIsXG4gICAgICAgIHVyaVRlbXBsYXRlOiBgZmlsZTovLyR7cGF0aC5qb2luKHJlcG9Sb290LCBcIlJFQURNRS5tZFwiKX1gLFxuICAgICAgICBtaW1lVHlwZTogXCJ0ZXh0L21hcmtkb3duXCIsXG4gICAgICB9LFxuICAgIF07XG4gICAgd3JpdGVJbmRleChcbiAgICAgIHRlbXBsYXRlc0RpcixcbiAgICAgIFwidGVtcGxhdGVzXCIsXG4gICAgICBKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZUFzc2V0cywgbnVsbCwgMilcbiAgICApO1xuXG4gICAgLy8gVG9vbHM6IGNyZWF0ZSBhIHdyYXBwZXIgdG9vbCB0aGF0IGV4cG9zZXMgYW5hbHl6ZS9lbnVtZXJhdGUgZm9yIHRoZSBtb2R1bGVcbiAgICBjb25zdCB0b29sSW5kZXhQYXRoID0gcGF0aC5qb2luKHRvb2xzRGlyLCBcImluZGV4LnRzXCIpO1xuICAgIGNvbnN0IHRvb2xDb250ZW50ID0gYGltcG9ydCB0eXBlIHsgVG9vbCB9IGZyb20gJ2Zhc3RtY3AnO1xcbmltcG9ydCB7IGJ1aWxkQW5hbHl6ZVJlcG9zaXRvcnlUb29sLCBidWlsZEVudW1lcmF0ZUNhcGFiaWxpdGllc1Rvb2wsIGJ1aWxkUGxhbkZlYXR1cmVUb29sIH0gZnJvbSAnLi4vLi4vLi4vbWNwL3Rvb2xzL3Rvb2xzJztcXG5leHBvcnQgY29uc3QgdG9vbHMgPSBbXFxuICB7IGlkOiAnJHtpbmZlcnJlZE5hbWV9LmFuYWx5emUnLCB0aXRsZTogJ0FuYWx5emUgJHtpbmZlcnJlZE5hbWV9JywgZGVzY3JpcHRpb246ICdBbmFseXplIHRoZSB0YXJnZXQgcmVwb3NpdG9yeScsIHRvb2w6IGJ1aWxkQW5hbHl6ZVJlcG9zaXRvcnlUb29sKCkgfSxcXG4gIHsgaWQ6ICcke2luZmVycmVkTmFtZX0uZW51bWVyYXRlJywgdGl0bGU6ICdFbnVtZXJhdGUgY2FwYWJpbGl0aWVzIGZvciAke2luZmVycmVkTmFtZX0nLCBkZXNjcmlwdGlvbjogJ0VudW1lcmF0ZSBjYXBhYmlsaXRpZXMnLCB0b29sOiBidWlsZEVudW1lcmF0ZUNhcGFiaWxpdGllc1Rvb2woKSB9LFxcbiAgeyBpZDogJyR7aW5mZXJyZWROYW1lfS5wbGFuJywgdGl0bGU6ICdQbGFuIGZlYXR1cmVzIGZvciAke2luZmVycmVkTmFtZX0nLCBkZXNjcmlwdGlvbjogJ1BsYW4gZmVhdHVyZSBpbXBsZW1lbnRhdGlvbicsIHRvb2w6IGJ1aWxkUGxhbkZlYXR1cmVUb29sKCkgfSxcXG5dIGFzIGNvbnN0O1xcbmA7XG4gICAgZnMud3JpdGVGaWxlU3luYyh0b29sSW5kZXhQYXRoLCB0b29sQ29udGVudCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSk7XG5cbiAgICAvLyBXcml0ZSBtb2R1bGUgaW5kZXgudHNcbiAgICBjb25zdCBtb2R1bGVJbmRleCA9IHBhdGguam9pbihtb2R1bGVSb290LCBcImluZGV4LnRzXCIpO1xuICAgIGNvbnN0IG1vZHVsZUluZGV4Q29udGVudCA9IGBpbXBvcnQgeyBwcm9tcHRzIH0gZnJvbSAnLi9wcm9tcHRzJztcXG5pbXBvcnQgeyByZXNvdXJjZXMgfSBmcm9tICcuL3Jlc291cmNlcyc7XFxuaW1wb3J0IHsgdGVtcGxhdGVzIH0gZnJvbSAnLi90ZW1wbGF0ZXMnO1xcbmltcG9ydCB7IHRvb2xzIH0gZnJvbSAnLi90b29scyc7XFxuZXhwb3J0IHsgcHJvbXB0cyB9IGZyb20gJy4vcHJvbXB0cyc7XFxuZXhwb3J0IHsgcmVzb3VyY2VzIH0gZnJvbSAnLi9yZXNvdXJjZXMnO1xcbmV4cG9ydCB7IHRlbXBsYXRlcyB9IGZyb20gJy4vdGVtcGxhdGVzJztcXG5leHBvcnQgeyB0b29scyB9IGZyb20gJy4vdG9vbHMnO1xcbmV4cG9ydCBjb25zdCBtb2R1bGVQYWNrYWdlID0geyBuYW1lOiAnJHtpbmZlcnJlZE5hbWV9JywgcHJvbXB0cywgcmVzb3VyY2VzLCB0ZW1wbGF0ZXMsIHRvb2xzIH0gYXMgY29uc3Q7XFxuYDtcbiAgICBmcy53cml0ZUZpbGVTeW5jKG1vZHVsZUluZGV4LCBtb2R1bGVJbmRleENvbnRlbnQsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtb2R1bGVSb290LFxuICAgICAgICAgICAgICBpbmZlcnJlZE5hbWUsXG4gICAgICAgICAgICAgIGFuYWx5c2lzU3VtbWFyeToge1xuICAgICAgICAgICAgICAgIGZpbGVzOiBhbmFseXNpcy5maWxlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgdGVzdEZpbGVzOiBhbmFseXNpcy50ZXN0RmlsZXMubGVuZ3RoLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdlbmVyYXRlTWNwTW9kdWxlVG9vbDtcbiJdfQ==
@@ -1,9 +0,0 @@
1
- import type { Tool } from "fastmcp";
2
- import { z } from "zod";
3
- declare const generateSchema: z.ZodObject<{
4
- repoPath: z.ZodDefault<z.ZodOptional<z.ZodString>>;
5
- moduleName: z.ZodOptional<z.ZodString>;
6
- includeDocs: z.ZodDefault<z.ZodBoolean>;
7
- }, z.core.$strip>;
8
- export declare const generateMcpModuleTool: Tool<undefined, typeof generateSchema>;
9
- export default generateMcpModuleTool;
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.decoratorTools = exports.tools = exports.toolList = void 0;
4
- const moduleRegistry_1 = require("./../moduleRegistry.cjs");
5
- const codex_tools_1 = require("./codex-tools.cjs");
6
- const decorator_tools_1 = require("./../decorator-tools.cjs");
7
- Object.defineProperty(exports, "decoratorTools", { enumerable: true, get: function () { return decorator_tools_1.decoratorTools; } });
8
- const codexToolList = [
9
- codex_tools_1.documentObjectTool,
10
- codex_tools_1.coverageEnforcerTool,
11
- codex_tools_1.readmeImprovementTool,
12
- ];
13
- const tools_1 = require("./tools.cjs");
14
- const moduleToolList = moduleRegistry_1.moduleRegistry
15
- .listTools()
16
- .map((asset) => asset.tool);
17
- exports.toolList = [...tools_1.toolList, ...codexToolList, ...moduleToolList];
18
- const [analyzeRepositoryTool, enumerateCapabilitiesTool, planFeatureTool, documentCodeToolRef, applyCodeChangeToolRef,] = tools_1.toolList;
19
- exports.tools = {
20
- analyzeRepositoryTool,
21
- enumerateCapabilitiesTool,
22
- planFeatureTool,
23
- documentCodeTool: documentCodeToolRef,
24
- applyCodeChangeTool: applyCodeChangeToolRef,
25
- documentObjectTool: codex_tools_1.documentObjectTool,
26
- coverageEnforcerTool: codex_tools_1.coverageEnforcerTool,
27
- readmeImprovementTool: codex_tools_1.readmeImprovementTool,
28
- ...decorator_tools_1.decoratorTools,
29
- };
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDREQUFtRDtBQUNuRCxtREFJdUI7QUFDdkIsOERBQW9EO0FBaUMzQywrRkFqQ0EsZ0NBQWMsT0FpQ0E7QUFoQ3ZCLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLGdDQUFrQjtJQUNsQixrQ0FBb0I7SUFDcEIsbUNBQXFCO0NBQ3RCLENBQUM7QUFFRix1Q0FBbUQ7QUFFbkQsTUFBTSxjQUFjLEdBQUcsK0JBQWM7S0FDbEMsU0FBUyxFQUFFO0tBQ1gsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBVyxDQUFDLENBQUM7QUFFeEIsUUFBQSxRQUFRLEdBQUcsQ0FBQyxHQUFHLGdCQUFZLEVBQUUsR0FBRyxhQUFhLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztBQUMvRSxNQUFNLENBQ0oscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6QixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN2QixHQUFHLGdCQUFZLENBQUM7QUFFSixRQUFBLEtBQUssR0FBRztJQUNuQixxQkFBcUI7SUFDckIseUJBQXlCO0lBQ3pCLGVBQWU7SUFDZixnQkFBZ0IsRUFBRSxtQkFBbUI7SUFDckMsbUJBQW1CLEVBQUUsc0JBQXNCO0lBQzNDLGtCQUFrQixFQUFsQixnQ0FBa0I7SUFDbEIsb0JBQW9CLEVBQXBCLGtDQUFvQjtJQUNwQixxQkFBcUIsRUFBckIsbUNBQXFCO0lBQ3JCLEdBQUcsZ0NBQWM7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1vZHVsZVJlZ2lzdHJ5IH0gZnJvbSBcIi4uL21vZHVsZVJlZ2lzdHJ5XCI7XG5pbXBvcnQge1xuICBjb3ZlcmFnZUVuZm9yY2VyVG9vbCxcbiAgZG9jdW1lbnRPYmplY3RUb29sLFxuICByZWFkbWVJbXByb3ZlbWVudFRvb2wsXG59IGZyb20gXCIuL2NvZGV4LXRvb2xzXCI7XG5pbXBvcnQgeyBkZWNvcmF0b3JUb29scyB9IGZyb20gXCIuLi9kZWNvcmF0b3ItdG9vbHNcIjtcbmNvbnN0IGNvZGV4VG9vbExpc3QgPSBbXG4gIGRvY3VtZW50T2JqZWN0VG9vbCxcbiAgY292ZXJhZ2VFbmZvcmNlclRvb2wsXG4gIHJlYWRtZUltcHJvdmVtZW50VG9vbCxcbl07XG5cbmltcG9ydCB7IHRvb2xMaXN0IGFzIGNvcmVUb29sTGlzdCB9IGZyb20gXCIuL3Rvb2xzXCI7XG5cbmNvbnN0IG1vZHVsZVRvb2xMaXN0ID0gbW9kdWxlUmVnaXN0cnlcbiAgLmxpc3RUb29scygpXG4gIC5tYXAoKGFzc2V0KSA9PiBhc3NldC50b29sIGFzIGFueSk7XG5cbmV4cG9ydCBjb25zdCB0b29sTGlzdCA9IFsuLi5jb3JlVG9vbExpc3QsIC4uLmNvZGV4VG9vbExpc3QsIC4uLm1vZHVsZVRvb2xMaXN0XTtcbmNvbnN0IFtcbiAgYW5hbHl6ZVJlcG9zaXRvcnlUb29sLFxuICBlbnVtZXJhdGVDYXBhYmlsaXRpZXNUb29sLFxuICBwbGFuRmVhdHVyZVRvb2wsXG4gIGRvY3VtZW50Q29kZVRvb2xSZWYsXG4gIGFwcGx5Q29kZUNoYW5nZVRvb2xSZWYsXG5dID0gY29yZVRvb2xMaXN0O1xuXG5leHBvcnQgY29uc3QgdG9vbHMgPSB7XG4gIGFuYWx5emVSZXBvc2l0b3J5VG9vbCxcbiAgZW51bWVyYXRlQ2FwYWJpbGl0aWVzVG9vbCxcbiAgcGxhbkZlYXR1cmVUb29sLFxuICBkb2N1bWVudENvZGVUb29sOiBkb2N1bWVudENvZGVUb29sUmVmLFxuICBhcHBseUNvZGVDaGFuZ2VUb29sOiBhcHBseUNvZGVDaGFuZ2VUb29sUmVmLFxuICBkb2N1bWVudE9iamVjdFRvb2wsXG4gIGNvdmVyYWdlRW5mb3JjZXJUb29sLFxuICByZWFkbWVJbXByb3ZlbWVudFRvb2wsXG4gIC4uLmRlY29yYXRvclRvb2xzLFxufTtcbmV4cG9ydCB7IGRlY29yYXRvclRvb2xzIH07XG4iXX0=