@camaradesuk/git-worktree-tools 1.2.1 → 1.4.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 (346) hide show
  1. package/README.md +323 -16
  2. package/dist/api/clean.d.ts +65 -0
  3. package/dist/api/clean.d.ts.map +1 -0
  4. package/dist/api/clean.js +209 -0
  5. package/dist/api/clean.js.map +1 -0
  6. package/dist/api/create.d.ts +88 -0
  7. package/dist/api/create.d.ts.map +1 -0
  8. package/dist/api/create.js +370 -0
  9. package/dist/api/create.js.map +1 -0
  10. package/dist/api/index.d.ts +15 -0
  11. package/dist/api/index.d.ts.map +1 -0
  12. package/dist/api/index.js +19 -0
  13. package/dist/api/index.js.map +1 -0
  14. package/dist/api/list.d.ts +74 -0
  15. package/dist/api/list.d.ts.map +1 -0
  16. package/dist/api/list.js +80 -0
  17. package/dist/api/list.js.map +1 -0
  18. package/dist/api/state.d.ts +43 -0
  19. package/dist/api/state.d.ts.map +1 -0
  20. package/dist/api/state.js +70 -0
  21. package/dist/api/state.js.map +1 -0
  22. package/dist/cli/cleanpr.js +171 -28
  23. package/dist/cli/cleanpr.js.map +1 -1
  24. package/dist/cli/cleanpr.test.js +460 -7
  25. package/dist/cli/cleanpr.test.js.map +1 -1
  26. package/dist/cli/lswt.js +8 -1
  27. package/dist/cli/lswt.js.map +1 -1
  28. package/dist/cli/lswt.test.js +2 -0
  29. package/dist/cli/lswt.test.js.map +1 -1
  30. package/dist/cli/newpr.js +189 -28
  31. package/dist/cli/newpr.js.map +1 -1
  32. package/dist/cli/newpr.test.js +350 -0
  33. package/dist/cli/newpr.test.js.map +1 -1
  34. package/dist/cli/wtconfig.d.ts +14 -0
  35. package/dist/cli/wtconfig.d.ts.map +1 -0
  36. package/dist/cli/wtconfig.js +948 -0
  37. package/dist/cli/wtconfig.js.map +1 -0
  38. package/dist/cli/wtconfig.test.d.ts +5 -0
  39. package/dist/cli/wtconfig.test.d.ts.map +1 -0
  40. package/dist/cli/wtconfig.test.js +1281 -0
  41. package/dist/cli/wtconfig.test.js.map +1 -0
  42. package/dist/cli/wtlink.js +5 -0
  43. package/dist/cli/wtlink.js.map +1 -1
  44. package/dist/cli/wtstate.d.ts +8 -0
  45. package/dist/cli/wtstate.d.ts.map +1 -0
  46. package/dist/cli/wtstate.js +83 -0
  47. package/dist/cli/wtstate.js.map +1 -0
  48. package/dist/cli/wtstate.test.d.ts +5 -0
  49. package/dist/cli/wtstate.test.d.ts.map +1 -0
  50. package/dist/cli/wtstate.test.js +193 -0
  51. package/dist/cli/wtstate.test.js.map +1 -0
  52. package/dist/e2e/cleanpr/cleanpr.e2e.test.d.ts +2 -0
  53. package/dist/e2e/cleanpr/cleanpr.e2e.test.d.ts.map +1 -0
  54. package/dist/e2e/cleanpr/cleanpr.e2e.test.js +326 -0
  55. package/dist/e2e/cleanpr/cleanpr.e2e.test.js.map +1 -0
  56. package/dist/e2e/helpers/cli-runner.d.ts +103 -0
  57. package/dist/e2e/helpers/cli-runner.d.ts.map +1 -0
  58. package/dist/e2e/helpers/cli-runner.js +200 -0
  59. package/dist/e2e/helpers/cli-runner.js.map +1 -0
  60. package/dist/e2e/helpers/gh-mock.d.ts +87 -0
  61. package/dist/e2e/helpers/gh-mock.d.ts.map +1 -0
  62. package/dist/e2e/helpers/gh-mock.js +384 -0
  63. package/dist/e2e/helpers/gh-mock.js.map +1 -0
  64. package/dist/e2e/helpers/index.d.ts +12 -0
  65. package/dist/e2e/helpers/index.d.ts.map +1 -0
  66. package/dist/e2e/helpers/index.js +16 -0
  67. package/dist/e2e/helpers/index.js.map +1 -0
  68. package/dist/e2e/helpers/pty-wrapper.d.ts +118 -0
  69. package/dist/e2e/helpers/pty-wrapper.d.ts.map +1 -0
  70. package/dist/e2e/helpers/pty-wrapper.js +276 -0
  71. package/dist/e2e/helpers/pty-wrapper.js.map +1 -0
  72. package/dist/e2e/helpers/scenario-harness.d.ts +55 -0
  73. package/dist/e2e/helpers/scenario-harness.d.ts.map +1 -0
  74. package/dist/e2e/helpers/scenario-harness.js +360 -0
  75. package/dist/e2e/helpers/scenario-harness.js.map +1 -0
  76. package/dist/e2e/helpers/test-context.d.ts +120 -0
  77. package/dist/e2e/helpers/test-context.d.ts.map +1 -0
  78. package/dist/e2e/helpers/test-context.js +263 -0
  79. package/dist/e2e/helpers/test-context.js.map +1 -0
  80. package/dist/e2e/lswt/lswt.e2e.test.d.ts +2 -0
  81. package/dist/e2e/lswt/lswt.e2e.test.d.ts.map +1 -0
  82. package/dist/e2e/lswt/lswt.e2e.test.js +328 -0
  83. package/dist/e2e/lswt/lswt.e2e.test.js.map +1 -0
  84. package/dist/e2e/newpr/newpr.e2e.test.d.ts +2 -0
  85. package/dist/e2e/newpr/newpr.e2e.test.d.ts.map +1 -0
  86. package/dist/e2e/newpr/newpr.e2e.test.js +286 -0
  87. package/dist/e2e/newpr/newpr.e2e.test.js.map +1 -0
  88. package/dist/e2e/newpr/scenarios.e2e.test.d.ts +2 -0
  89. package/dist/e2e/newpr/scenarios.e2e.test.d.ts.map +1 -0
  90. package/dist/e2e/newpr/scenarios.e2e.test.js +426 -0
  91. package/dist/e2e/newpr/scenarios.e2e.test.js.map +1 -0
  92. package/dist/e2e/workflows/pr-lifecycle.e2e.test.d.ts +2 -0
  93. package/dist/e2e/workflows/pr-lifecycle.e2e.test.d.ts.map +1 -0
  94. package/dist/e2e/workflows/pr-lifecycle.e2e.test.js +298 -0
  95. package/dist/e2e/workflows/pr-lifecycle.e2e.test.js.map +1 -0
  96. package/dist/e2e/wtlink/wtlink.e2e.test.d.ts +2 -0
  97. package/dist/e2e/wtlink/wtlink.e2e.test.d.ts.map +1 -0
  98. package/dist/e2e/wtlink/wtlink.e2e.test.js +364 -0
  99. package/dist/e2e/wtlink/wtlink.e2e.test.js.map +1 -0
  100. package/dist/index.d.ts +15 -1
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +14 -0
  103. package/dist/index.js.map +1 -1
  104. package/dist/lib/ai/base-provider.d.ts +58 -0
  105. package/dist/lib/ai/base-provider.d.ts.map +1 -0
  106. package/dist/lib/ai/base-provider.js +246 -0
  107. package/dist/lib/ai/base-provider.js.map +1 -0
  108. package/dist/lib/ai/base-provider.test.d.ts +7 -0
  109. package/dist/lib/ai/base-provider.test.d.ts.map +1 -0
  110. package/dist/lib/ai/base-provider.test.js +320 -0
  111. package/dist/lib/ai/base-provider.test.js.map +1 -0
  112. package/dist/lib/ai/cli-provider.d.ts +87 -0
  113. package/dist/lib/ai/cli-provider.d.ts.map +1 -0
  114. package/dist/lib/ai/cli-provider.js +280 -0
  115. package/dist/lib/ai/cli-provider.js.map +1 -0
  116. package/dist/lib/ai/cli-provider.test.d.ts +5 -0
  117. package/dist/lib/ai/cli-provider.test.d.ts.map +1 -0
  118. package/dist/lib/ai/cli-provider.test.js +462 -0
  119. package/dist/lib/ai/cli-provider.test.js.map +1 -0
  120. package/dist/lib/ai/fallback-provider.d.ts +20 -0
  121. package/dist/lib/ai/fallback-provider.d.ts.map +1 -0
  122. package/dist/lib/ai/fallback-provider.js +125 -0
  123. package/dist/lib/ai/fallback-provider.js.map +1 -0
  124. package/dist/lib/ai/fallback-provider.test.d.ts +7 -0
  125. package/dist/lib/ai/fallback-provider.test.d.ts.map +1 -0
  126. package/dist/lib/ai/fallback-provider.test.js +165 -0
  127. package/dist/lib/ai/fallback-provider.test.js.map +1 -0
  128. package/dist/lib/ai/generation-service.d.ts +44 -0
  129. package/dist/lib/ai/generation-service.d.ts.map +1 -0
  130. package/dist/lib/ai/generation-service.js +107 -0
  131. package/dist/lib/ai/generation-service.js.map +1 -0
  132. package/dist/lib/ai/generation-service.test.d.ts +7 -0
  133. package/dist/lib/ai/generation-service.test.d.ts.map +1 -0
  134. package/dist/lib/ai/generation-service.test.js +213 -0
  135. package/dist/lib/ai/generation-service.test.js.map +1 -0
  136. package/dist/lib/ai/index.d.ts +19 -0
  137. package/dist/lib/ai/index.d.ts.map +1 -0
  138. package/dist/lib/ai/index.js +22 -0
  139. package/dist/lib/ai/index.js.map +1 -0
  140. package/dist/lib/ai/provider-manager.d.ts +109 -0
  141. package/dist/lib/ai/provider-manager.d.ts.map +1 -0
  142. package/dist/lib/ai/provider-manager.js +270 -0
  143. package/dist/lib/ai/provider-manager.js.map +1 -0
  144. package/dist/lib/ai/provider-manager.test.d.ts +5 -0
  145. package/dist/lib/ai/provider-manager.test.d.ts.map +1 -0
  146. package/dist/lib/ai/provider-manager.test.js +312 -0
  147. package/dist/lib/ai/provider-manager.test.js.map +1 -0
  148. package/dist/lib/ai/types.d.ts +166 -0
  149. package/dist/lib/ai/types.d.ts.map +1 -0
  150. package/dist/lib/ai/types.js +19 -0
  151. package/dist/lib/ai/types.js.map +1 -0
  152. package/dist/lib/cleanpr/args.d.ts.map +1 -1
  153. package/dist/lib/cleanpr/args.js +18 -0
  154. package/dist/lib/cleanpr/args.js.map +1 -1
  155. package/dist/lib/cleanpr/args.test.js +88 -11
  156. package/dist/lib/cleanpr/args.test.js.map +1 -1
  157. package/dist/lib/cleanpr/cleanup.d.ts +2 -0
  158. package/dist/lib/cleanpr/cleanup.d.ts.map +1 -1
  159. package/dist/lib/cleanpr/cleanup.js +30 -2
  160. package/dist/lib/cleanpr/cleanup.js.map +1 -1
  161. package/dist/lib/cleanpr/cleanup.test.js +37 -5
  162. package/dist/lib/cleanpr/cleanup.test.js.map +1 -1
  163. package/dist/lib/cleanpr/types.d.ts +10 -0
  164. package/dist/lib/cleanpr/types.d.ts.map +1 -1
  165. package/dist/lib/cleanpr/worktree-info.test.js +72 -1
  166. package/dist/lib/cleanpr/worktree-info.test.js.map +1 -1
  167. package/dist/lib/config.d.ts +176 -1
  168. package/dist/lib/config.d.ts.map +1 -1
  169. package/dist/lib/config.js +130 -2
  170. package/dist/lib/config.js.map +1 -1
  171. package/dist/lib/config.test.js +406 -2
  172. package/dist/lib/config.test.js.map +1 -1
  173. package/dist/lib/git.test.js +58 -0
  174. package/dist/lib/git.test.js.map +1 -1
  175. package/dist/lib/github.test.js +20 -0
  176. package/dist/lib/github.test.js.map +1 -1
  177. package/dist/lib/hooks/executor.d.ts +35 -0
  178. package/dist/lib/hooks/executor.d.ts.map +1 -0
  179. package/dist/lib/hooks/executor.js +401 -0
  180. package/dist/lib/hooks/executor.js.map +1 -0
  181. package/dist/lib/hooks/executor.test.d.ts +5 -0
  182. package/dist/lib/hooks/executor.test.d.ts.map +1 -0
  183. package/dist/lib/hooks/executor.test.js +648 -0
  184. package/dist/lib/hooks/executor.test.js.map +1 -0
  185. package/dist/lib/hooks/index.d.ts +25 -0
  186. package/dist/lib/hooks/index.d.ts.map +1 -0
  187. package/dist/lib/hooks/index.js +26 -0
  188. package/dist/lib/hooks/index.js.map +1 -0
  189. package/dist/lib/hooks/templates.d.ts +74 -0
  190. package/dist/lib/hooks/templates.d.ts.map +1 -0
  191. package/dist/lib/hooks/templates.js +270 -0
  192. package/dist/lib/hooks/templates.js.map +1 -0
  193. package/dist/lib/hooks/templates.test.d.ts +5 -0
  194. package/dist/lib/hooks/templates.test.d.ts.map +1 -0
  195. package/dist/lib/hooks/templates.test.js +163 -0
  196. package/dist/lib/hooks/templates.test.js.map +1 -0
  197. package/dist/lib/hooks/types.d.ts +161 -0
  198. package/dist/lib/hooks/types.d.ts.map +1 -0
  199. package/dist/lib/hooks/types.js +73 -0
  200. package/dist/lib/hooks/types.js.map +1 -0
  201. package/dist/lib/hooks/types.test.d.ts +5 -0
  202. package/dist/lib/hooks/types.test.d.ts.map +1 -0
  203. package/dist/lib/hooks/types.test.js +132 -0
  204. package/dist/lib/hooks/types.test.js.map +1 -0
  205. package/dist/lib/json-output.d.ts +172 -0
  206. package/dist/lib/json-output.d.ts.map +1 -0
  207. package/dist/lib/json-output.js +134 -0
  208. package/dist/lib/json-output.js.map +1 -0
  209. package/dist/lib/json-output.test.d.ts +5 -0
  210. package/dist/lib/json-output.test.d.ts.map +1 -0
  211. package/dist/lib/json-output.test.js +259 -0
  212. package/dist/lib/json-output.test.js.map +1 -0
  213. package/dist/lib/lswt/action-executors.d.ts +32 -0
  214. package/dist/lib/lswt/action-executors.d.ts.map +1 -0
  215. package/dist/lib/lswt/action-executors.js +489 -0
  216. package/dist/lib/lswt/action-executors.js.map +1 -0
  217. package/dist/lib/lswt/action-executors.test.d.ts +2 -0
  218. package/dist/lib/lswt/action-executors.test.d.ts.map +1 -0
  219. package/dist/lib/lswt/action-executors.test.js +755 -0
  220. package/dist/lib/lswt/action-executors.test.js.map +1 -0
  221. package/dist/lib/lswt/actions.d.ts +25 -0
  222. package/dist/lib/lswt/actions.d.ts.map +1 -0
  223. package/dist/lib/lswt/actions.js +187 -0
  224. package/dist/lib/lswt/actions.js.map +1 -0
  225. package/dist/lib/lswt/actions.test.d.ts +2 -0
  226. package/dist/lib/lswt/actions.test.d.ts.map +1 -0
  227. package/dist/lib/lswt/actions.test.js +359 -0
  228. package/dist/lib/lswt/actions.test.js.map +1 -0
  229. package/dist/lib/lswt/args.d.ts.map +1 -1
  230. package/dist/lib/lswt/args.js +44 -8
  231. package/dist/lib/lswt/args.js.map +1 -1
  232. package/dist/lib/lswt/args.test.js +70 -10
  233. package/dist/lib/lswt/args.test.js.map +1 -1
  234. package/dist/lib/lswt/environment.d.ts +43 -0
  235. package/dist/lib/lswt/environment.d.ts.map +1 -0
  236. package/dist/lib/lswt/environment.js +143 -0
  237. package/dist/lib/lswt/environment.js.map +1 -0
  238. package/dist/lib/lswt/environment.test.d.ts +2 -0
  239. package/dist/lib/lswt/environment.test.d.ts.map +1 -0
  240. package/dist/lib/lswt/environment.test.js +339 -0
  241. package/dist/lib/lswt/environment.test.js.map +1 -0
  242. package/dist/lib/lswt/formatters.d.ts.map +1 -1
  243. package/dist/lib/lswt/formatters.js +1 -0
  244. package/dist/lib/lswt/formatters.js.map +1 -1
  245. package/dist/lib/lswt/formatters.test.js +26 -0
  246. package/dist/lib/lswt/formatters.test.js.map +1 -1
  247. package/dist/lib/lswt/index.d.ts +7 -2
  248. package/dist/lib/lswt/index.d.ts.map +1 -1
  249. package/dist/lib/lswt/index.js +7 -0
  250. package/dist/lib/lswt/index.js.map +1 -1
  251. package/dist/lib/lswt/interactive.d.ts +24 -0
  252. package/dist/lib/lswt/interactive.d.ts.map +1 -0
  253. package/dist/lib/lswt/interactive.js +245 -0
  254. package/dist/lib/lswt/interactive.js.map +1 -0
  255. package/dist/lib/lswt/interactive.test.d.ts +2 -0
  256. package/dist/lib/lswt/interactive.test.d.ts.map +1 -0
  257. package/dist/lib/lswt/interactive.test.js +383 -0
  258. package/dist/lib/lswt/interactive.test.js.map +1 -0
  259. package/dist/lib/lswt/types.d.ts +52 -1
  260. package/dist/lib/lswt/types.d.ts.map +1 -1
  261. package/dist/lib/lswt/worktree-info.d.ts +8 -1
  262. package/dist/lib/lswt/worktree-info.d.ts.map +1 -1
  263. package/dist/lib/lswt/worktree-info.js +14 -4
  264. package/dist/lib/lswt/worktree-info.js.map +1 -1
  265. package/dist/lib/lswt/worktree-info.test.js +153 -16
  266. package/dist/lib/lswt/worktree-info.test.js.map +1 -1
  267. package/dist/lib/newpr/action-deps.d.ts +15 -0
  268. package/dist/lib/newpr/action-deps.d.ts.map +1 -0
  269. package/dist/lib/newpr/action-deps.js +22 -0
  270. package/dist/lib/newpr/action-deps.js.map +1 -0
  271. package/dist/lib/newpr/args.d.ts.map +1 -1
  272. package/dist/lib/newpr/args.js +56 -0
  273. package/dist/lib/newpr/args.js.map +1 -1
  274. package/dist/lib/newpr/hook-runner.d.ts +80 -0
  275. package/dist/lib/newpr/hook-runner.d.ts.map +1 -0
  276. package/dist/lib/newpr/hook-runner.js +182 -0
  277. package/dist/lib/newpr/hook-runner.js.map +1 -0
  278. package/dist/lib/newpr/hook-runner.test.d.ts +7 -0
  279. package/dist/lib/newpr/hook-runner.test.d.ts.map +1 -0
  280. package/dist/lib/newpr/hook-runner.test.js +301 -0
  281. package/dist/lib/newpr/hook-runner.test.js.map +1 -0
  282. package/dist/lib/newpr/index.d.ts +3 -0
  283. package/dist/lib/newpr/index.d.ts.map +1 -1
  284. package/dist/lib/newpr/index.js +3 -0
  285. package/dist/lib/newpr/index.js.map +1 -1
  286. package/dist/lib/newpr/types.d.ts +9 -0
  287. package/dist/lib/newpr/types.d.ts.map +1 -1
  288. package/dist/lib/prompts.test.js +208 -1
  289. package/dist/lib/prompts.test.js.map +1 -1
  290. package/dist/lib/wtconfig/config-manager.d.ts +72 -0
  291. package/dist/lib/wtconfig/config-manager.d.ts.map +1 -0
  292. package/dist/lib/wtconfig/config-manager.js +408 -0
  293. package/dist/lib/wtconfig/config-manager.js.map +1 -0
  294. package/dist/lib/wtconfig/config-manager.test.d.ts +5 -0
  295. package/dist/lib/wtconfig/config-manager.test.d.ts.map +1 -0
  296. package/dist/lib/wtconfig/config-manager.test.js +501 -0
  297. package/dist/lib/wtconfig/config-manager.test.js.map +1 -0
  298. package/dist/lib/wtconfig/environment.d.ts +23 -0
  299. package/dist/lib/wtconfig/environment.d.ts.map +1 -0
  300. package/dist/lib/wtconfig/environment.js +238 -0
  301. package/dist/lib/wtconfig/environment.js.map +1 -0
  302. package/dist/lib/wtconfig/environment.test.d.ts +5 -0
  303. package/dist/lib/wtconfig/environment.test.d.ts.map +1 -0
  304. package/dist/lib/wtconfig/environment.test.js +246 -0
  305. package/dist/lib/wtconfig/environment.test.js.map +1 -0
  306. package/dist/lib/wtconfig/index.d.ts +7 -0
  307. package/dist/lib/wtconfig/index.d.ts.map +1 -0
  308. package/dist/lib/wtconfig/index.js +8 -0
  309. package/dist/lib/wtconfig/index.js.map +1 -0
  310. package/dist/lib/wtconfig/types.d.ts +97 -0
  311. package/dist/lib/wtconfig/types.d.ts.map +1 -0
  312. package/dist/lib/wtconfig/types.js +5 -0
  313. package/dist/lib/wtconfig/types.js.map +1 -0
  314. package/dist/lib/wtstate/analyze.d.ts +13 -0
  315. package/dist/lib/wtstate/analyze.d.ts.map +1 -0
  316. package/dist/lib/wtstate/analyze.js +165 -0
  317. package/dist/lib/wtstate/analyze.js.map +1 -0
  318. package/dist/lib/wtstate/analyze.test.d.ts +5 -0
  319. package/dist/lib/wtstate/analyze.test.d.ts.map +1 -0
  320. package/dist/lib/wtstate/analyze.test.js +282 -0
  321. package/dist/lib/wtstate/analyze.test.js.map +1 -0
  322. package/dist/lib/wtstate/args.d.ts +17 -0
  323. package/dist/lib/wtstate/args.d.ts.map +1 -0
  324. package/dist/lib/wtstate/args.js +91 -0
  325. package/dist/lib/wtstate/args.js.map +1 -0
  326. package/dist/lib/wtstate/args.test.d.ts +5 -0
  327. package/dist/lib/wtstate/args.test.d.ts.map +1 -0
  328. package/dist/lib/wtstate/args.test.js +120 -0
  329. package/dist/lib/wtstate/args.test.js.map +1 -0
  330. package/dist/lib/wtstate/index.d.ts +7 -0
  331. package/dist/lib/wtstate/index.d.ts.map +1 -0
  332. package/dist/lib/wtstate/index.js +8 -0
  333. package/dist/lib/wtstate/index.js.map +1 -0
  334. package/dist/lib/wtstate/types.d.ts +64 -0
  335. package/dist/lib/wtstate/types.d.ts.map +1 -0
  336. package/dist/lib/wtstate/types.js +5 -0
  337. package/dist/lib/wtstate/types.js.map +1 -0
  338. package/dist/mcp/server.d.ts +14 -0
  339. package/dist/mcp/server.d.ts.map +1 -0
  340. package/dist/mcp/server.js +339 -0
  341. package/dist/mcp/server.js.map +1 -0
  342. package/dist/mcp/server.test.d.ts +9 -0
  343. package/dist/mcp/server.test.d.ts.map +1 -0
  344. package/dist/mcp/server.test.js +390 -0
  345. package/dist/mcp/server.test.js.map +1 -0
  346. package/package.json +8 -2
@@ -0,0 +1,120 @@
1
+ /**
2
+ * wtstate args tests
3
+ */
4
+ import { describe, it, expect } from 'vitest';
5
+ import { parseArgs, getDefaultOptions, getHelpText } from './args.js';
6
+ describe('wtstate/args', () => {
7
+ describe('getDefaultOptions', () => {
8
+ it('returns default options', () => {
9
+ const defaults = getDefaultOptions();
10
+ expect(defaults).toEqual({
11
+ json: false,
12
+ verbose: false,
13
+ baseBranch: 'main',
14
+ });
15
+ });
16
+ });
17
+ describe('parseArgs', () => {
18
+ it('returns success with defaults for empty args', () => {
19
+ const result = parseArgs([]);
20
+ expect(result.kind).toBe('success');
21
+ if (result.kind === 'success') {
22
+ expect(result.options.json).toBe(false);
23
+ expect(result.options.verbose).toBe(false);
24
+ expect(result.options.baseBranch).toBe('main');
25
+ }
26
+ });
27
+ it('parses --help and -h', () => {
28
+ expect(parseArgs(['--help']).kind).toBe('help');
29
+ expect(parseArgs(['-h']).kind).toBe('help');
30
+ });
31
+ it('parses --json flag', () => {
32
+ const result = parseArgs(['--json']);
33
+ expect(result.kind).toBe('success');
34
+ if (result.kind === 'success') {
35
+ expect(result.options.json).toBe(true);
36
+ }
37
+ });
38
+ it('parses --verbose and -v flags', () => {
39
+ const result1 = parseArgs(['--verbose']);
40
+ expect(result1.kind).toBe('success');
41
+ if (result1.kind === 'success') {
42
+ expect(result1.options.verbose).toBe(true);
43
+ }
44
+ const result2 = parseArgs(['-v']);
45
+ expect(result2.kind).toBe('success');
46
+ if (result2.kind === 'success') {
47
+ expect(result2.options.verbose).toBe(true);
48
+ }
49
+ });
50
+ it('parses --base and -b with branch name', () => {
51
+ const result1 = parseArgs(['--base', 'develop']);
52
+ expect(result1.kind).toBe('success');
53
+ if (result1.kind === 'success') {
54
+ expect(result1.options.baseBranch).toBe('develop');
55
+ }
56
+ const result2 = parseArgs(['-b', 'master']);
57
+ expect(result2.kind).toBe('success');
58
+ if (result2.kind === 'success') {
59
+ expect(result2.options.baseBranch).toBe('master');
60
+ }
61
+ });
62
+ it('returns error when --base is missing branch name', () => {
63
+ const result = parseArgs(['--base']);
64
+ expect(result.kind).toBe('error');
65
+ if (result.kind === 'error') {
66
+ expect(result.message).toContain('--base requires');
67
+ }
68
+ });
69
+ it('returns error when --base is followed by another flag', () => {
70
+ const result = parseArgs(['--base', '--json']);
71
+ expect(result.kind).toBe('error');
72
+ if (result.kind === 'error') {
73
+ expect(result.message).toContain('--base requires');
74
+ }
75
+ });
76
+ it('returns error for unknown options', () => {
77
+ const result = parseArgs(['--unknown']);
78
+ expect(result.kind).toBe('error');
79
+ if (result.kind === 'error') {
80
+ expect(result.message).toContain('Unknown option');
81
+ }
82
+ });
83
+ it('returns error for unexpected positional arguments', () => {
84
+ const result = parseArgs(['something']);
85
+ expect(result.kind).toBe('error');
86
+ if (result.kind === 'error') {
87
+ expect(result.message).toContain('Unexpected argument');
88
+ }
89
+ });
90
+ it('parses multiple flags together', () => {
91
+ const result = parseArgs(['--json', '--verbose', '--base', 'develop']);
92
+ expect(result.kind).toBe('success');
93
+ if (result.kind === 'success') {
94
+ expect(result.options.json).toBe(true);
95
+ expect(result.options.verbose).toBe(true);
96
+ expect(result.options.baseBranch).toBe('develop');
97
+ }
98
+ });
99
+ });
100
+ describe('getHelpText', () => {
101
+ it('returns help text string', () => {
102
+ const help = getHelpText();
103
+ expect(typeof help).toBe('string');
104
+ expect(help.length).toBeGreaterThan(0);
105
+ });
106
+ it('includes command name', () => {
107
+ const help = getHelpText();
108
+ expect(help).toContain('wtstate');
109
+ });
110
+ it('includes --json option', () => {
111
+ const help = getHelpText();
112
+ expect(help).toContain('--json');
113
+ });
114
+ it('includes usage examples', () => {
115
+ const help = getHelpText();
116
+ expect(help).toContain('Examples');
117
+ });
118
+ });
119
+ });
120
+ //# sourceMappingURL=args.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.test.js","sourceRoot":"","sources":["../../../src/lib/wtstate/args.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * wtstate library - public API exports
3
+ */
4
+ export type { WtstateOptions, ParseResult, WorktreeType, WtstateResult } from './types.js';
5
+ export { parseArgs, getHelpText, getDefaultOptions } from './args.js';
6
+ export { analyzeState, formatText } from './analyze.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/wtstate/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3F,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * wtstate library - public API exports
3
+ */
4
+ // Argument parsing
5
+ export { parseArgs, getHelpText, getDefaultOptions } from './args.js';
6
+ // Analysis
7
+ export { analyzeState, formatText } from './analyze.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/wtstate/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEtE,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * wtstate types - CLI options and result types
3
+ */
4
+ import type { Scenario } from '../state-detection.js';
5
+ import type { AvailableAction, StateActionKey } from '../json-output.js';
6
+ /**
7
+ * CLI options for wtstate command
8
+ */
9
+ export interface WtstateOptions {
10
+ /** Output as JSON (always true for AI usage, but can be false for human-readable) */
11
+ json: boolean;
12
+ /** Base branch for comparison (default: main) */
13
+ baseBranch: string;
14
+ /** Show verbose output including file lists */
15
+ verbose: boolean;
16
+ }
17
+ /**
18
+ * Parse result - discriminated union for parseArgs
19
+ */
20
+ export type ParseResult = {
21
+ kind: 'success';
22
+ options: WtstateOptions;
23
+ } | {
24
+ kind: 'help';
25
+ } | {
26
+ kind: 'error';
27
+ message: string;
28
+ };
29
+ /**
30
+ * Worktree type classification
31
+ */
32
+ export type WorktreeType = 'main_worktree' | 'pr_worktree' | 'other';
33
+ /**
34
+ * Result of wtstate analysis
35
+ */
36
+ export interface WtstateResult {
37
+ /** The detected scenario key */
38
+ scenario: Scenario;
39
+ /** Human-readable description of the scenario */
40
+ scenarioDescription: string;
41
+ /** Current branch name (null if detached HEAD) */
42
+ currentBranch: string | null;
43
+ /** Base branch being compared against */
44
+ baseBranch: string;
45
+ /** Type of worktree */
46
+ worktreeType: WorktreeType;
47
+ /** Whether there are any uncommitted changes */
48
+ hasChanges: boolean;
49
+ /** Whether there are staged changes */
50
+ hasStagedChanges: boolean;
51
+ /** Whether there are unstaged changes */
52
+ hasUnstagedChanges: boolean;
53
+ /** List of local commits not in base branch */
54
+ localCommits: string[];
55
+ /** List of staged files */
56
+ stagedFiles: string[];
57
+ /** List of unstaged files */
58
+ unstagedFiles: string[];
59
+ /** Available actions for this scenario */
60
+ availableActions: AvailableAction[];
61
+ /** Recommended action for AI agents (null if no recommendation) */
62
+ recommendedAction: StateActionKey | null;
63
+ }
64
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/wtstate/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qFAAqF;IACrF,IAAI,EAAE,OAAO,CAAC;IACd,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,aAAa,GAAG,OAAO,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,iDAAiD;IACjD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kDAAkD;IAClD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,gDAAgD;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,uCAAuC;IACvC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,yCAAyC;IACzC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,+CAA+C;IAC/C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,6BAA6B;IAC7B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,0CAA0C;IAC1C,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,mEAAmE;IACnE,iBAAiB,EAAE,cAAc,GAAG,IAAI,CAAC;CAC1C"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * wtstate types - CLI options and result types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/wtstate/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Server for git-worktree-tools
4
+ *
5
+ * Provides MCP tools for AI agents to manage git worktrees and PR workflows.
6
+ *
7
+ * Tools:
8
+ * - worktree_get_state: Analyze current git state and return available actions
9
+ * - worktree_create_pr: Create a new PR with a dedicated worktree
10
+ * - worktree_list: List all git worktrees with PR status
11
+ * - worktree_clean: Clean up worktrees for merged or closed PRs
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
@@ -0,0 +1,339 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Server for git-worktree-tools
4
+ *
5
+ * Provides MCP tools for AI agents to manage git worktrees and PR workflows.
6
+ *
7
+ * Tools:
8
+ * - worktree_get_state: Analyze current git state and return available actions
9
+ * - worktree_create_pr: Create a new PR with a dedicated worktree
10
+ * - worktree_list: List all git worktrees with PR status
11
+ * - worktree_clean: Clean up worktrees for merged or closed PRs
12
+ */
13
+ import { createRequire } from 'module';
14
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
15
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
16
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
17
+ // Import package.json for version (Node 18+ compatible)
18
+ const require = createRequire(import.meta.url);
19
+ const packageJson = require('../../package.json');
20
+ import { queryState } from '../api/state.js';
21
+ import { listWorktrees } from '../api/list.js';
22
+ import { cleanWorktrees } from '../api/clean.js';
23
+ import { createPr, setupPrWorktree } from '../api/create.js';
24
+ import { isValidStateActionKey } from '../lib/json-output.js';
25
+ // Tool definitions
26
+ const tools = [
27
+ {
28
+ name: 'worktree_get_state',
29
+ description: 'Analyze current git state and return available actions. Call this BEFORE creating a PR to understand what options are available based on the current git state (staged files, branch, commits, etc.).',
30
+ inputSchema: {
31
+ type: 'object',
32
+ properties: {
33
+ baseBranch: {
34
+ type: 'string',
35
+ description: 'Base branch to compare against (default: main)',
36
+ },
37
+ verbose: {
38
+ type: 'boolean',
39
+ description: 'Include detailed file lists and commit info',
40
+ },
41
+ },
42
+ },
43
+ },
44
+ {
45
+ name: 'worktree_create_pr',
46
+ description: 'Create a new PR with a dedicated worktree. Handles git state intelligently based on the specified action. Use worktree_get_state first to understand available actions.',
47
+ inputSchema: {
48
+ type: 'object',
49
+ properties: {
50
+ description: {
51
+ type: 'string',
52
+ description: 'PR title/description',
53
+ },
54
+ action: {
55
+ type: 'string',
56
+ description: 'How to handle current changes. Get available actions from worktree_get_state first. Common actions: empty_commit, commit_staged, commit_all, stash_staged, stash_all, include_staged, include_all, pr_for_branch_commit_all',
57
+ },
58
+ draft: {
59
+ type: 'boolean',
60
+ description: 'Create as draft PR (default: false)',
61
+ },
62
+ baseBranch: {
63
+ type: 'string',
64
+ description: 'Base branch for PR (default: main)',
65
+ },
66
+ branchName: {
67
+ type: 'string',
68
+ description: 'Custom branch name (auto-generated if not provided)',
69
+ },
70
+ },
71
+ required: ['description'],
72
+ },
73
+ },
74
+ {
75
+ name: 'worktree_setup_pr',
76
+ description: 'Set up a worktree for an existing PR. Use this when you want to work on an existing PR that does not have a local worktree.',
77
+ inputSchema: {
78
+ type: 'object',
79
+ properties: {
80
+ prNumber: {
81
+ type: 'number',
82
+ description: 'PR number to set up worktree for',
83
+ },
84
+ },
85
+ required: ['prNumber'],
86
+ },
87
+ },
88
+ {
89
+ name: 'worktree_list',
90
+ description: 'List all git worktrees with their PR status.',
91
+ inputSchema: {
92
+ type: 'object',
93
+ properties: {
94
+ showStatus: {
95
+ type: 'boolean',
96
+ description: 'Include PR status from GitHub (requires gh CLI)',
97
+ },
98
+ },
99
+ },
100
+ },
101
+ {
102
+ name: 'worktree_clean',
103
+ description: 'Clean up worktrees for merged or closed PRs.',
104
+ inputSchema: {
105
+ type: 'object',
106
+ properties: {
107
+ prNumber: {
108
+ type: 'number',
109
+ description: 'Specific PR to clean (optional, cleans all merged/closed if not specified)',
110
+ },
111
+ deleteRemote: {
112
+ type: 'boolean',
113
+ description: 'Also delete remote branches (default: false)',
114
+ },
115
+ force: {
116
+ type: 'boolean',
117
+ description: 'Force remove even if not merged (default: false)',
118
+ },
119
+ dryRun: {
120
+ type: 'boolean',
121
+ description: 'Preview what would be cleaned without making changes',
122
+ },
123
+ },
124
+ },
125
+ },
126
+ ];
127
+ // Create MCP server
128
+ const server = new Server({
129
+ name: 'git-worktree-tools',
130
+ version: packageJson.version,
131
+ }, {
132
+ capabilities: {
133
+ tools: {},
134
+ },
135
+ });
136
+ // Handle list tools request
137
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
138
+ return { tools };
139
+ });
140
+ // Handle tool calls
141
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
142
+ const { name, arguments: args } = request.params;
143
+ try {
144
+ switch (name) {
145
+ case 'worktree_get_state': {
146
+ const baseBranch = args?.baseBranch ?? 'main';
147
+ const verbose = args?.verbose ?? false;
148
+ const result = await queryState({ baseBranch, verbose });
149
+ return {
150
+ content: [
151
+ {
152
+ type: 'text',
153
+ text: JSON.stringify(result, null, 2),
154
+ },
155
+ ],
156
+ };
157
+ }
158
+ case 'worktree_create_pr': {
159
+ const description = args?.description;
160
+ if (!description) {
161
+ return {
162
+ content: [
163
+ {
164
+ type: 'text',
165
+ text: JSON.stringify({
166
+ success: false,
167
+ error: {
168
+ code: 'INVALID_ARGUMENT',
169
+ message: 'description is required',
170
+ },
171
+ }),
172
+ },
173
+ ],
174
+ isError: true,
175
+ };
176
+ }
177
+ const action = args?.action;
178
+ const draft = args?.draft ?? false;
179
+ const baseBranch = args?.baseBranch ?? 'main';
180
+ const branchName = args?.branchName;
181
+ // Validate action if provided
182
+ let validatedAction;
183
+ if (action) {
184
+ if (!isValidStateActionKey(action)) {
185
+ return {
186
+ content: [
187
+ {
188
+ type: 'text',
189
+ text: JSON.stringify({
190
+ success: false,
191
+ error: {
192
+ code: 'INVALID_ACTION',
193
+ message: `Invalid action: ${action}. Use worktree_get_state to see available actions.`,
194
+ },
195
+ }),
196
+ },
197
+ ],
198
+ isError: true,
199
+ };
200
+ }
201
+ validatedAction = action;
202
+ }
203
+ const result = await createPr({
204
+ description,
205
+ action: validatedAction,
206
+ draft,
207
+ baseBranch,
208
+ branchName,
209
+ });
210
+ return {
211
+ content: [
212
+ {
213
+ type: 'text',
214
+ text: JSON.stringify(result, null, 2),
215
+ },
216
+ ],
217
+ isError: !result.success,
218
+ };
219
+ }
220
+ case 'worktree_setup_pr': {
221
+ const prNumber = args?.prNumber;
222
+ if (!prNumber || typeof prNumber !== 'number') {
223
+ return {
224
+ content: [
225
+ {
226
+ type: 'text',
227
+ text: JSON.stringify({
228
+ success: false,
229
+ error: {
230
+ code: 'INVALID_ARGUMENT',
231
+ message: 'prNumber is required and must be a number',
232
+ },
233
+ }),
234
+ },
235
+ ],
236
+ isError: true,
237
+ };
238
+ }
239
+ const result = await setupPrWorktree({ prNumber });
240
+ return {
241
+ content: [
242
+ {
243
+ type: 'text',
244
+ text: JSON.stringify(result, null, 2),
245
+ },
246
+ ],
247
+ isError: !result.success,
248
+ };
249
+ }
250
+ case 'worktree_list': {
251
+ const showStatus = args?.showStatus ?? true;
252
+ const result = await listWorktrees({ showStatus });
253
+ return {
254
+ content: [
255
+ {
256
+ type: 'text',
257
+ text: JSON.stringify(result, null, 2),
258
+ },
259
+ ],
260
+ isError: !result.success,
261
+ };
262
+ }
263
+ case 'worktree_clean': {
264
+ const prNumber = args?.prNumber;
265
+ const deleteRemote = args?.deleteRemote ?? false;
266
+ const force = args?.force ?? false;
267
+ const dryRun = args?.dryRun ?? false;
268
+ const result = await cleanWorktrees({
269
+ prNumber: prNumber ?? null,
270
+ deleteRemote,
271
+ force,
272
+ dryRun,
273
+ });
274
+ return {
275
+ content: [
276
+ {
277
+ type: 'text',
278
+ text: JSON.stringify(result, null, 2),
279
+ },
280
+ ],
281
+ isError: !result.success,
282
+ };
283
+ }
284
+ default:
285
+ return {
286
+ content: [
287
+ {
288
+ type: 'text',
289
+ text: JSON.stringify({
290
+ success: false,
291
+ error: {
292
+ code: 'UNKNOWN_TOOL',
293
+ message: `Unknown tool: ${name}`,
294
+ },
295
+ }),
296
+ },
297
+ ],
298
+ isError: true,
299
+ };
300
+ }
301
+ }
302
+ catch (error) {
303
+ const message = error instanceof Error ? error.message : String(error);
304
+ return {
305
+ content: [
306
+ {
307
+ type: 'text',
308
+ text: JSON.stringify({
309
+ success: false,
310
+ error: {
311
+ code: 'INTERNAL_ERROR',
312
+ message,
313
+ },
314
+ }),
315
+ },
316
+ ],
317
+ isError: true,
318
+ };
319
+ }
320
+ });
321
+ // Start server
322
+ async function main() {
323
+ const transport = new StdioServerTransport();
324
+ await server.connect(transport);
325
+ // Handle graceful shutdown
326
+ process.on('SIGINT', async () => {
327
+ await server.close();
328
+ process.exit(0);
329
+ });
330
+ process.on('SIGTERM', async () => {
331
+ await server.close();
332
+ process.exit(0);
333
+ });
334
+ }
335
+ main().catch((error) => {
336
+ console.error('MCP server error:', error);
337
+ process.exit(1);
338
+ });
339
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,oCAAoC,CAAC;AAE5C,wDAAwD;AACxD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEzE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAuB,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnF,mBAAmB;AACnB,MAAM,KAAK,GAAW;IACpB;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,uMAAuM;QACzM,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gDAAgD;iBAC9D;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,6CAA6C;iBAC3D;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,yKAAyK;QAC3K,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sBAAsB;iBACpC;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,6NAA6N;iBAChO;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,qCAAqC;iBACnD;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oCAAoC;iBAClD;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qDAAqD;iBACnE;aACF;YACD,QAAQ,EAAE,CAAC,aAAa,CAAC;SAC1B;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,6HAA6H;QAC/H,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;iBAChD;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,iDAAiD;iBAC/D;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4EAA4E;iBAC1F;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,8CAA8C;iBAC5D;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,kDAAkD;iBAChE;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,sDAAsD;iBACpE;aACF;SACF;KACF;CACF,CAAC;AAEF,oBAAoB;AACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;CAC7B,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,4BAA4B;AAC5B,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;IAC1D,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,oBAAoB;AACpB,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,IAAI,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,MAAM,UAAU,GAAI,IAAI,EAAE,UAAqB,IAAI,MAAM,CAAC;gBAC1D,MAAM,OAAO,GAAI,IAAI,EAAE,OAAmB,IAAI,KAAK,CAAC;gBAEpD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;gBAEzD,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtC;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,MAAM,WAAW,GAAG,IAAI,EAAE,WAAqB,CAAC;gBAChD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oCACnB,OAAO,EAAE,KAAK;oCACd,KAAK,EAAE;wCACL,IAAI,EAAE,kBAAkB;wCACxB,OAAO,EAAE,yBAAyB;qCACnC;iCACF,CAAC;6BACH;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,EAAE,MAA4B,CAAC;gBAClD,MAAM,KAAK,GAAI,IAAI,EAAE,KAAiB,IAAI,KAAK,CAAC;gBAChD,MAAM,UAAU,GAAI,IAAI,EAAE,UAAqB,IAAI,MAAM,CAAC;gBAC1D,MAAM,UAAU,GAAG,IAAI,EAAE,UAAgC,CAAC;gBAE1D,8BAA8B;gBAC9B,IAAI,eAA2C,CAAC;gBAChD,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;wBACnC,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAe;oCACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wCACnB,OAAO,EAAE,KAAK;wCACd,KAAK,EAAE;4CACL,IAAI,EAAE,gBAAgB;4CACtB,OAAO,EAAE,mBAAmB,MAAM,oDAAoD;yCACvF;qCACF,CAAC;iCACH;6BACF;4BACD,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;oBACD,eAAe,GAAG,MAAwB,CAAC;gBAC7C,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;oBAC5B,WAAW;oBACX,MAAM,EAAE,eAAe;oBACvB,KAAK;oBACL,UAAU;oBACV,UAAU;iBACX,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtC;qBACF;oBACD,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO;iBACzB,CAAC;YACJ,CAAC;YAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAkB,CAAC;gBAC1C,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAC9C,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oCACnB,OAAO,EAAE,KAAK;oCACd,KAAK,EAAE;wCACL,IAAI,EAAE,kBAAkB;wCACxB,OAAO,EAAE,2CAA2C;qCACrD;iCACF,CAAC;6BACH;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAEnD,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtC;qBACF;oBACD,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO;iBACzB,CAAC;YACJ,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,UAAU,GAAI,IAAI,EAAE,UAAsB,IAAI,IAAI,CAAC;gBAEzD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;gBAEnD,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtC;qBACF;oBACD,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO;iBACzB,CAAC;YACJ,CAAC;YAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,QAAQ,GAAG,IAAI,EAAE,QAA8B,CAAC;gBACtD,MAAM,YAAY,GAAI,IAAI,EAAE,YAAwB,IAAI,KAAK,CAAC;gBAC9D,MAAM,KAAK,GAAI,IAAI,EAAE,KAAiB,IAAI,KAAK,CAAC;gBAChD,MAAM,MAAM,GAAI,IAAI,EAAE,MAAkB,IAAI,KAAK,CAAC;gBAElD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;oBAClC,QAAQ,EAAE,QAAQ,IAAI,IAAI;oBAC1B,YAAY;oBACZ,KAAK;oBACL,MAAM;iBACP,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtC;qBACF;oBACD,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO;iBACzB,CAAC;YACJ,CAAC;YAED;gBACE,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,OAAO,EAAE,KAAK;gCACd,KAAK,EAAE;oCACL,IAAI,EAAE,cAAc;oCACpB,OAAO,EAAE,iBAAiB,IAAI,EAAE;iCACjC;6BACF,CAAC;yBACH;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;QACN,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE;4BACL,IAAI,EAAE,gBAAgB;4BACtB,OAAO;yBACR;qBACF,CAAC;iBACH;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,eAAe;AACf,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Server tests
3
+ *
4
+ * Tests the MCP server tool definitions and handler logic.
5
+ * Since the actual MCP protocol communication is handled by the SDK,
6
+ * these tests focus on the tool implementation logic.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=server.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.d.ts","sourceRoot":"","sources":["../../src/mcp/server.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}