@camaradesuk/git-worktree-tools 1.8.0 → 1.10.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 (353) hide show
  1. package/README.md +48 -27
  2. package/dist/cli/cleanpr.js +74 -53
  3. package/dist/cli/cleanpr.js.map +1 -1
  4. package/dist/cli/cleanpr.test.js +2 -0
  5. package/dist/cli/cleanpr.test.js.map +1 -1
  6. package/dist/cli/lswt.js +32 -56
  7. package/dist/cli/lswt.js.map +1 -1
  8. package/dist/cli/lswt.test.js +17 -27
  9. package/dist/cli/lswt.test.js.map +1 -1
  10. package/dist/cli/newpr.d.ts +13 -1
  11. package/dist/cli/newpr.d.ts.map +1 -1
  12. package/dist/cli/newpr.js +350 -151
  13. package/dist/cli/newpr.js.map +1 -1
  14. package/dist/cli/newpr.test.js +314 -5
  15. package/dist/cli/newpr.test.js.map +1 -1
  16. package/dist/cli/prs.d.ts +3 -10
  17. package/dist/cli/prs.d.ts.map +1 -1
  18. package/dist/cli/prs.js +6 -168
  19. package/dist/cli/prs.js.map +1 -1
  20. package/dist/cli/prs.test.js +55 -0
  21. package/dist/cli/prs.test.js.map +1 -1
  22. package/dist/cli/wt/clean.d.ts +6 -2
  23. package/dist/cli/wt/clean.d.ts.map +1 -1
  24. package/dist/cli/wt/clean.js +401 -20
  25. package/dist/cli/wt/clean.js.map +1 -1
  26. package/dist/cli/wt/clean.test.d.ts +8 -0
  27. package/dist/cli/wt/clean.test.d.ts.map +1 -0
  28. package/dist/cli/wt/clean.test.js +624 -0
  29. package/dist/cli/wt/clean.test.js.map +1 -0
  30. package/dist/cli/wt/completion.d.ts +3 -0
  31. package/dist/cli/wt/completion.d.ts.map +1 -1
  32. package/dist/cli/wt/completion.js +80 -9
  33. package/dist/cli/wt/completion.js.map +1 -1
  34. package/dist/cli/wt/completion.test.js +102 -0
  35. package/dist/cli/wt/completion.test.js.map +1 -1
  36. package/dist/cli/wt/config.d.ts +3 -1
  37. package/dist/cli/wt/config.d.ts.map +1 -1
  38. package/dist/cli/wt/config.js +323 -32
  39. package/dist/cli/wt/config.js.map +1 -1
  40. package/dist/cli/wt/config.test.d.ts +2 -0
  41. package/dist/cli/wt/config.test.d.ts.map +1 -1
  42. package/dist/cli/wt/config.test.js +206 -26
  43. package/dist/cli/wt/config.test.js.map +1 -1
  44. package/dist/cli/wt/interactive-menu.d.ts +2 -0
  45. package/dist/cli/wt/interactive-menu.d.ts.map +1 -1
  46. package/dist/cli/wt/interactive-menu.js +346 -73
  47. package/dist/cli/wt/interactive-menu.js.map +1 -1
  48. package/dist/cli/wt/interactive-menu.test.d.ts +4 -2
  49. package/dist/cli/wt/interactive-menu.test.d.ts.map +1 -1
  50. package/dist/cli/wt/interactive-menu.test.js +383 -323
  51. package/dist/cli/wt/interactive-menu.test.js.map +1 -1
  52. package/dist/cli/wt/link.d.ts +3 -1
  53. package/dist/cli/wt/link.d.ts.map +1 -1
  54. package/dist/cli/wt/link.js +125 -38
  55. package/dist/cli/wt/link.js.map +1 -1
  56. package/dist/cli/wt/list.d.ts +4 -1
  57. package/dist/cli/wt/list.d.ts.map +1 -1
  58. package/dist/cli/wt/list.js +85 -16
  59. package/dist/cli/wt/list.js.map +1 -1
  60. package/dist/cli/wt/list.test.d.ts +10 -0
  61. package/dist/cli/wt/list.test.d.ts.map +1 -0
  62. package/dist/cli/wt/list.test.js +157 -0
  63. package/dist/cli/wt/list.test.js.map +1 -0
  64. package/dist/cli/wt/new.d.ts +8 -2
  65. package/dist/cli/wt/new.d.ts.map +1 -1
  66. package/dist/cli/wt/new.js +91 -46
  67. package/dist/cli/wt/new.js.map +1 -1
  68. package/dist/cli/wt/prs.d.ts +2 -1
  69. package/dist/cli/wt/prs.d.ts.map +1 -1
  70. package/dist/cli/wt/prs.js +3 -164
  71. package/dist/cli/wt/prs.js.map +1 -1
  72. package/dist/cli/wt/run-command.d.ts +4 -2
  73. package/dist/cli/wt/run-command.d.ts.map +1 -1
  74. package/dist/cli/wt/run-command.js +6 -4
  75. package/dist/cli/wt/run-command.js.map +1 -1
  76. package/dist/cli/wt/state.d.ts +3 -1
  77. package/dist/cli/wt/state.d.ts.map +1 -1
  78. package/dist/cli/wt/state.js +74 -10
  79. package/dist/cli/wt/state.js.map +1 -1
  80. package/dist/cli/wt/state.test.d.ts +9 -0
  81. package/dist/cli/wt/state.test.d.ts.map +1 -0
  82. package/dist/cli/wt/state.test.js +127 -0
  83. package/dist/cli/wt/state.test.js.map +1 -0
  84. package/dist/cli/wt/wt.test.d.ts +2 -2
  85. package/dist/cli/wt/wt.test.js +430 -212
  86. package/dist/cli/wt/wt.test.js.map +1 -1
  87. package/dist/cli/wt.d.ts.map +1 -1
  88. package/dist/cli/wt.js +50 -36
  89. package/dist/cli/wt.js.map +1 -1
  90. package/dist/cli/wt.unit.test.js +16 -38
  91. package/dist/cli/wt.unit.test.js.map +1 -1
  92. package/dist/cli/wtconfig.d.ts +1 -0
  93. package/dist/cli/wtconfig.d.ts.map +1 -1
  94. package/dist/cli/wtconfig.js +213 -21
  95. package/dist/cli/wtconfig.js.map +1 -1
  96. package/dist/cli/wtconfig.test.js +3 -0
  97. package/dist/cli/wtconfig.test.js.map +1 -1
  98. package/dist/cli/wtlink.js +116 -73
  99. package/dist/cli/wtlink.js.map +1 -1
  100. package/dist/cli/wtstate.js +21 -2
  101. package/dist/cli/wtstate.js.map +1 -1
  102. package/dist/e2e/wt/interactive-menu.e2e.test.js +17 -17
  103. package/dist/e2e/wt/interactive-menu.e2e.test.js.map +1 -1
  104. package/dist/lib/ai/types.d.ts +12 -0
  105. package/dist/lib/ai/types.d.ts.map +1 -1
  106. package/dist/lib/ai/types.js.map +1 -1
  107. package/dist/lib/cleanpr/args.d.ts.map +1 -1
  108. package/dist/lib/cleanpr/args.js +20 -0
  109. package/dist/lib/cleanpr/args.js.map +1 -1
  110. package/dist/lib/cleanpr/types.d.ts +6 -0
  111. package/dist/lib/cleanpr/types.d.ts.map +1 -1
  112. package/dist/lib/cleanpr/worktree-info.d.ts.map +1 -1
  113. package/dist/lib/cleanpr/worktree-info.js +1 -6
  114. package/dist/lib/cleanpr/worktree-info.js.map +1 -1
  115. package/dist/lib/cleanpr/worktree-info.test.js +10 -13
  116. package/dist/lib/cleanpr/worktree-info.test.js.map +1 -1
  117. package/dist/lib/colors.d.ts +5 -0
  118. package/dist/lib/colors.d.ts.map +1 -1
  119. package/dist/lib/colors.js +13 -6
  120. package/dist/lib/colors.js.map +1 -1
  121. package/dist/lib/config-editor.d.ts.map +1 -1
  122. package/dist/lib/config-editor.js.map +1 -1
  123. package/dist/lib/config-migration/detector.d.ts +25 -0
  124. package/dist/lib/config-migration/detector.d.ts.map +1 -0
  125. package/dist/lib/config-migration/detector.js +372 -0
  126. package/dist/lib/config-migration/detector.js.map +1 -0
  127. package/dist/lib/config-migration/detector.test.d.ts +5 -0
  128. package/dist/lib/config-migration/detector.test.d.ts.map +1 -0
  129. package/dist/lib/config-migration/detector.test.js +201 -0
  130. package/dist/lib/config-migration/detector.test.js.map +1 -0
  131. package/dist/lib/config-migration/index.d.ts +29 -0
  132. package/dist/lib/config-migration/index.d.ts.map +1 -0
  133. package/dist/lib/config-migration/index.js +33 -0
  134. package/dist/lib/config-migration/index.js.map +1 -0
  135. package/dist/lib/config-migration/reporter.d.ts +53 -0
  136. package/dist/lib/config-migration/reporter.d.ts.map +1 -0
  137. package/dist/lib/config-migration/reporter.js +257 -0
  138. package/dist/lib/config-migration/reporter.js.map +1 -0
  139. package/dist/lib/config-migration/reporter.test.d.ts +5 -0
  140. package/dist/lib/config-migration/reporter.test.d.ts.map +1 -0
  141. package/dist/lib/config-migration/reporter.test.js +305 -0
  142. package/dist/lib/config-migration/reporter.test.js.map +1 -0
  143. package/dist/lib/config-migration/runner.d.ts +46 -0
  144. package/dist/lib/config-migration/runner.d.ts.map +1 -0
  145. package/dist/lib/config-migration/runner.js +364 -0
  146. package/dist/lib/config-migration/runner.js.map +1 -0
  147. package/dist/lib/config-migration/runner.test.d.ts +5 -0
  148. package/dist/lib/config-migration/runner.test.d.ts.map +1 -0
  149. package/dist/lib/config-migration/runner.test.js +235 -0
  150. package/dist/lib/config-migration/runner.test.js.map +1 -0
  151. package/dist/lib/config-migration/types.d.ts +120 -0
  152. package/dist/lib/config-migration/types.d.ts.map +1 -0
  153. package/dist/lib/config-migration/types.js +70 -0
  154. package/dist/lib/config-migration/types.js.map +1 -0
  155. package/dist/lib/config-validation.d.ts.map +1 -1
  156. package/dist/lib/config-validation.js +6 -0
  157. package/dist/lib/config-validation.js.map +1 -1
  158. package/dist/lib/config-validation.test.js +25 -0
  159. package/dist/lib/config-validation.test.js.map +1 -1
  160. package/dist/lib/config.d.ts +31 -7
  161. package/dist/lib/config.d.ts.map +1 -1
  162. package/dist/lib/config.js +2 -0
  163. package/dist/lib/config.js.map +1 -1
  164. package/dist/lib/config.test.js +3 -15
  165. package/dist/lib/config.test.js.map +1 -1
  166. package/dist/lib/constants.d.ts +12 -4
  167. package/dist/lib/constants.d.ts.map +1 -1
  168. package/dist/lib/constants.js +24 -5
  169. package/dist/lib/constants.js.map +1 -1
  170. package/dist/lib/constants.test.js +88 -29
  171. package/dist/lib/constants.test.js.map +1 -1
  172. package/dist/lib/deprecation.d.ts +18 -0
  173. package/dist/lib/deprecation.d.ts.map +1 -0
  174. package/dist/lib/deprecation.js +28 -0
  175. package/dist/lib/deprecation.js.map +1 -0
  176. package/dist/lib/deprecation.test.d.ts +2 -0
  177. package/dist/lib/deprecation.test.d.ts.map +1 -0
  178. package/dist/lib/deprecation.test.js +71 -0
  179. package/dist/lib/deprecation.test.js.map +1 -0
  180. package/dist/lib/hooks/confirmation.d.ts +49 -0
  181. package/dist/lib/hooks/confirmation.d.ts.map +1 -0
  182. package/dist/lib/hooks/confirmation.js +147 -0
  183. package/dist/lib/hooks/confirmation.js.map +1 -0
  184. package/dist/lib/hooks/confirmation.test.d.ts +7 -0
  185. package/dist/lib/hooks/confirmation.test.d.ts.map +1 -0
  186. package/dist/lib/hooks/confirmation.test.js +300 -0
  187. package/dist/lib/hooks/confirmation.test.js.map +1 -0
  188. package/dist/lib/hooks/executor.d.ts +16 -1
  189. package/dist/lib/hooks/executor.d.ts.map +1 -1
  190. package/dist/lib/hooks/executor.js +53 -4
  191. package/dist/lib/hooks/executor.js.map +1 -1
  192. package/dist/lib/hooks/index.d.ts +4 -2
  193. package/dist/lib/hooks/index.d.ts.map +1 -1
  194. package/dist/lib/hooks/index.js +3 -2
  195. package/dist/lib/hooks/index.js.map +1 -1
  196. package/dist/lib/hooks/types.d.ts +16 -0
  197. package/dist/lib/hooks/types.d.ts.map +1 -1
  198. package/dist/lib/hooks/types.js +12 -0
  199. package/dist/lib/hooks/types.js.map +1 -1
  200. package/dist/lib/logger.d.ts +40 -155
  201. package/dist/lib/logger.d.ts.map +1 -1
  202. package/dist/lib/logger.js +349 -420
  203. package/dist/lib/logger.js.map +1 -1
  204. package/dist/lib/logger.test.d.ts +10 -1
  205. package/dist/lib/logger.test.d.ts.map +1 -1
  206. package/dist/lib/logger.test.js +658 -258
  207. package/dist/lib/logger.test.js.map +1 -1
  208. package/dist/lib/lswt/action-executors.d.ts +2 -0
  209. package/dist/lib/lswt/action-executors.d.ts.map +1 -1
  210. package/dist/lib/lswt/action-executors.js +4 -3
  211. package/dist/lib/lswt/action-executors.js.map +1 -1
  212. package/dist/lib/lswt/action-executors.test.js +7 -0
  213. package/dist/lib/lswt/action-executors.test.js.map +1 -1
  214. package/dist/lib/lswt/args.d.ts.map +1 -1
  215. package/dist/lib/lswt/args.js +15 -1
  216. package/dist/lib/lswt/args.js.map +1 -1
  217. package/dist/lib/lswt/environment.d.ts +21 -2
  218. package/dist/lib/lswt/environment.d.ts.map +1 -1
  219. package/dist/lib/lswt/environment.js +73 -32
  220. package/dist/lib/lswt/environment.js.map +1 -1
  221. package/dist/lib/lswt/environment.test.js +79 -1
  222. package/dist/lib/lswt/environment.test.js.map +1 -1
  223. package/dist/lib/lswt/index.d.ts +1 -0
  224. package/dist/lib/lswt/index.d.ts.map +1 -1
  225. package/dist/lib/lswt/index.js +2 -0
  226. package/dist/lib/lswt/index.js.map +1 -1
  227. package/dist/lib/lswt/table.d.ts +15 -0
  228. package/dist/lib/lswt/table.d.ts.map +1 -0
  229. package/dist/lib/lswt/table.js +61 -0
  230. package/dist/lib/lswt/table.js.map +1 -0
  231. package/dist/lib/lswt/table.test.d.ts +5 -0
  232. package/dist/lib/lswt/table.test.d.ts.map +1 -0
  233. package/dist/lib/lswt/table.test.js +262 -0
  234. package/dist/lib/lswt/table.test.js.map +1 -0
  235. package/dist/lib/lswt/types.d.ts +4 -0
  236. package/dist/lib/lswt/types.d.ts.map +1 -1
  237. package/dist/lib/lswt/worktree-info.d.ts.map +1 -1
  238. package/dist/lib/lswt/worktree-info.js +1 -6
  239. package/dist/lib/lswt/worktree-info.js.map +1 -1
  240. package/dist/lib/lswt/worktree-info.test.js +5 -17
  241. package/dist/lib/lswt/worktree-info.test.js.map +1 -1
  242. package/dist/lib/newpr/args.d.ts.map +1 -1
  243. package/dist/lib/newpr/args.js +36 -1
  244. package/dist/lib/newpr/args.js.map +1 -1
  245. package/dist/lib/newpr/hook-runner.d.ts +11 -0
  246. package/dist/lib/newpr/hook-runner.d.ts.map +1 -1
  247. package/dist/lib/newpr/hook-runner.js +49 -1
  248. package/dist/lib/newpr/hook-runner.js.map +1 -1
  249. package/dist/lib/newpr/hook-runner.test.js +121 -0
  250. package/dist/lib/newpr/hook-runner.test.js.map +1 -1
  251. package/dist/lib/newpr/plan-generator.d.ts +121 -0
  252. package/dist/lib/newpr/plan-generator.d.ts.map +1 -0
  253. package/dist/lib/newpr/plan-generator.js +185 -0
  254. package/dist/lib/newpr/plan-generator.js.map +1 -0
  255. package/dist/lib/newpr/plan-generator.test.d.ts +7 -0
  256. package/dist/lib/newpr/plan-generator.test.d.ts.map +1 -0
  257. package/dist/lib/newpr/plan-generator.test.js +387 -0
  258. package/dist/lib/newpr/plan-generator.test.js.map +1 -0
  259. package/dist/lib/newpr/types.d.ts +12 -0
  260. package/dist/lib/newpr/types.d.ts.map +1 -1
  261. package/dist/lib/prs/actions.d.ts +5 -1
  262. package/dist/lib/prs/actions.d.ts.map +1 -1
  263. package/dist/lib/prs/actions.js +12 -10
  264. package/dist/lib/prs/actions.js.map +1 -1
  265. package/dist/lib/prs/actions.test.js +48 -5
  266. package/dist/lib/prs/actions.test.js.map +1 -1
  267. package/dist/lib/prs/command.d.ts +21 -0
  268. package/dist/lib/prs/command.d.ts.map +1 -0
  269. package/dist/lib/prs/command.js +175 -0
  270. package/dist/lib/prs/command.js.map +1 -0
  271. package/dist/lib/prs/command.test.d.ts +11 -0
  272. package/dist/lib/prs/command.test.d.ts.map +1 -0
  273. package/dist/lib/prs/command.test.js +409 -0
  274. package/dist/lib/prs/command.test.js.map +1 -0
  275. package/dist/lib/prs/interactive.d.ts.map +1 -1
  276. package/dist/lib/prs/interactive.js +15 -2
  277. package/dist/lib/prs/interactive.js.map +1 -1
  278. package/dist/lib/prs/interactive.test.js +153 -0
  279. package/dist/lib/prs/interactive.test.js.map +1 -1
  280. package/dist/lib/prs/types.d.ts +15 -0
  281. package/dist/lib/prs/types.d.ts.map +1 -1
  282. package/dist/lib/ui/error.d.ts +31 -0
  283. package/dist/lib/ui/error.d.ts.map +1 -0
  284. package/dist/lib/ui/error.js +47 -0
  285. package/dist/lib/ui/error.js.map +1 -0
  286. package/dist/lib/ui/error.test.d.ts +2 -0
  287. package/dist/lib/ui/error.test.d.ts.map +1 -0
  288. package/dist/lib/ui/error.test.js +143 -0
  289. package/dist/lib/ui/error.test.js.map +1 -0
  290. package/dist/lib/ui/index.d.ts +15 -0
  291. package/dist/lib/ui/index.d.ts.map +1 -0
  292. package/dist/lib/ui/index.js +19 -0
  293. package/dist/lib/ui/index.js.map +1 -0
  294. package/dist/lib/ui/output.d.ts +18 -0
  295. package/dist/lib/ui/output.d.ts.map +1 -0
  296. package/dist/lib/ui/output.js +31 -0
  297. package/dist/lib/ui/output.js.map +1 -0
  298. package/dist/lib/ui/output.test.d.ts +2 -0
  299. package/dist/lib/ui/output.test.d.ts.map +1 -0
  300. package/dist/lib/ui/output.test.js +59 -0
  301. package/dist/lib/ui/output.test.js.map +1 -0
  302. package/dist/lib/ui/spinner.d.ts +10 -0
  303. package/dist/lib/ui/spinner.d.ts.map +1 -0
  304. package/dist/lib/ui/spinner.js +10 -0
  305. package/dist/lib/ui/spinner.js.map +1 -0
  306. package/dist/lib/ui/status.d.ts +65 -0
  307. package/dist/lib/ui/status.d.ts.map +1 -0
  308. package/dist/lib/ui/status.js +100 -0
  309. package/dist/lib/ui/status.js.map +1 -0
  310. package/dist/lib/ui/status.test.d.ts +2 -0
  311. package/dist/lib/ui/status.test.d.ts.map +1 -0
  312. package/dist/lib/ui/status.test.js +158 -0
  313. package/dist/lib/ui/status.test.js.map +1 -0
  314. package/dist/lib/ui/table.d.ts +39 -0
  315. package/dist/lib/ui/table.d.ts.map +1 -0
  316. package/dist/lib/ui/table.js +45 -0
  317. package/dist/lib/ui/table.js.map +1 -0
  318. package/dist/lib/ui/table.test.d.ts +2 -0
  319. package/dist/lib/ui/table.test.d.ts.map +1 -0
  320. package/dist/lib/ui/table.test.js +115 -0
  321. package/dist/lib/ui/table.test.js.map +1 -0
  322. package/dist/lib/ui/theme.d.ts +34 -0
  323. package/dist/lib/ui/theme.d.ts.map +1 -0
  324. package/dist/lib/ui/theme.js +37 -0
  325. package/dist/lib/ui/theme.js.map +1 -0
  326. package/dist/lib/ui/theme.test.d.ts +2 -0
  327. package/dist/lib/ui/theme.test.d.ts.map +1 -0
  328. package/dist/lib/ui/theme.test.js +76 -0
  329. package/dist/lib/ui/theme.test.js.map +1 -0
  330. package/dist/lib/wtconfig/environment.d.ts +18 -1
  331. package/dist/lib/wtconfig/environment.d.ts.map +1 -1
  332. package/dist/lib/wtconfig/environment.js +60 -24
  333. package/dist/lib/wtconfig/environment.js.map +1 -1
  334. package/dist/lib/wtconfig/environment.test.js +45 -1
  335. package/dist/lib/wtconfig/environment.test.js.map +1 -1
  336. package/dist/lib/wtlink/config-manifest.test.js +26 -0
  337. package/dist/lib/wtlink/config-manifest.test.js.map +1 -1
  338. package/dist/lib/wtlink/link-configs.js +7 -7
  339. package/dist/lib/wtlink/link-configs.js.map +1 -1
  340. package/dist/lib/wtlink/validate-manifest.d.ts.map +1 -1
  341. package/dist/lib/wtlink/validate-manifest.js +5 -5
  342. package/dist/lib/wtlink/validate-manifest.js.map +1 -1
  343. package/dist/lib/wtstate/args.d.ts.map +1 -1
  344. package/dist/lib/wtstate/args.js +2 -0
  345. package/dist/lib/wtstate/args.js.map +1 -1
  346. package/dist/mcp/server.d.ts +2 -1
  347. package/dist/mcp/server.d.ts.map +1 -1
  348. package/dist/mcp/server.js +264 -44
  349. package/dist/mcp/server.js.map +1 -1
  350. package/dist/mcp/server.test.js +111 -0
  351. package/dist/mcp/server.test.js.map +1 -1
  352. package/package.json +3 -1
  353. package/schemas/worktreerc.schema.json +23 -0
@@ -21,12 +21,43 @@ import { queryState } from '../api/state.js';
21
21
  import { listWorktrees } from '../api/list.js';
22
22
  import { cleanWorktrees } from '../api/clean.js';
23
23
  import { createPr, setupPrWorktree } from '../api/create.js';
24
- import { isValidStateActionKey } from '../lib/json-output.js';
25
- // Tool definitions
26
- const tools = [
24
+ import { isValidStateActionKey, createErrorResult, ErrorCode, } from '../lib/json-output.js';
25
+ // Common outputSchema fields shared across all tools (CommandResult<T> envelope)
26
+ const commandResultBase = {
27
+ success: { type: 'boolean' },
28
+ command: { type: 'string' },
29
+ timestamp: { type: 'string' },
30
+ error: {
31
+ type: 'object',
32
+ properties: {
33
+ code: { type: 'string' },
34
+ message: { type: 'string' },
35
+ suggestion: { type: 'string' },
36
+ },
37
+ },
38
+ warnings: {
39
+ type: 'array',
40
+ items: { type: 'string' },
41
+ },
42
+ };
43
+ // Tool definitions (exported for testing)
44
+ export const tools = [
27
45
  {
28
46
  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.).',
47
+ 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.).\n\n' +
48
+ 'Returns a CommandResult JSON with:\n' +
49
+ '- data.scenario: Git state scenario identifier (e.g., "main_clean_same", "branch_divergent")\n' +
50
+ '- data.availableActions: Array of {key, label, description} for possible next steps\n' +
51
+ '- data.recommendedAction: The suggested default action key\n\n' +
52
+ 'Example success response:\n' +
53
+ '{"success":true,"command":"wtstate","timestamp":"...","data":{"scenario":"main_clean_same","scenarioDescription":"On main, clean, same as origin","currentBranch":"main","baseBranch":"main","worktreeType":"main_worktree","hasChanges":false,"availableActions":[{"key":"empty_commit","label":"Create empty commit"}],"recommendedAction":"empty_commit"}}',
54
+ annotations: {
55
+ title: 'Get Worktree State',
56
+ readOnlyHint: true,
57
+ destructiveHint: false,
58
+ idempotentHint: true,
59
+ openWorldHint: false,
60
+ },
30
61
  inputSchema: {
31
62
  type: 'object',
32
63
  properties: {
@@ -40,10 +71,59 @@ const tools = [
40
71
  },
41
72
  },
42
73
  },
74
+ outputSchema: {
75
+ type: 'object',
76
+ properties: {
77
+ ...commandResultBase,
78
+ data: {
79
+ type: 'object',
80
+ properties: {
81
+ scenario: { type: 'string' },
82
+ scenarioDescription: { type: 'string' },
83
+ currentBranch: { type: 'string' },
84
+ baseBranch: { type: 'string' },
85
+ worktreeType: { type: 'string' },
86
+ hasChanges: { type: 'boolean' },
87
+ hasStagedChanges: { type: 'boolean' },
88
+ hasUnstagedChanges: { type: 'boolean' },
89
+ localCommits: { type: 'array', items: { type: 'string' } },
90
+ stagedFiles: { type: 'array', items: { type: 'string' } },
91
+ unstagedFiles: { type: 'array', items: { type: 'string' } },
92
+ availableActions: {
93
+ type: 'array',
94
+ items: {
95
+ type: 'object',
96
+ properties: {
97
+ key: { type: 'string' },
98
+ label: { type: 'string' },
99
+ description: { type: 'string' },
100
+ },
101
+ },
102
+ },
103
+ recommendedAction: { type: 'string' },
104
+ },
105
+ },
106
+ },
107
+ required: ['success', 'command', 'timestamp'],
108
+ },
43
109
  },
44
110
  {
45
111
  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.',
112
+ 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.\n\n' +
113
+ 'Returns a CommandResult JSON with:\n' +
114
+ '- data.prNumber: The created PR number\n' +
115
+ '- data.prUrl: URL to the PR on GitHub\n' +
116
+ '- data.branch: Branch name used for the PR\n' +
117
+ '- data.worktreePath: Absolute path to the new worktree directory\n\n' +
118
+ 'Example success response:\n' +
119
+ '{"success":true,"command":"newpr","timestamp":"...","data":{"prNumber":42,"prUrl":"https://github.com/owner/repo/pull/42","branch":"feat/add-feature","worktreePath":"/home/user/repo.pr42","draft":false,"scenario":"main_clean_same","actionTaken":"empty_commit","created":true}}',
120
+ annotations: {
121
+ title: 'Create PR with Worktree',
122
+ readOnlyHint: false,
123
+ destructiveHint: false,
124
+ idempotentHint: false,
125
+ openWorldHint: true,
126
+ },
47
127
  inputSchema: {
48
128
  type: 'object',
49
129
  properties: {
@@ -70,10 +150,43 @@ const tools = [
70
150
  },
71
151
  required: ['description'],
72
152
  },
153
+ outputSchema: {
154
+ type: 'object',
155
+ properties: {
156
+ ...commandResultBase,
157
+ data: {
158
+ type: 'object',
159
+ properties: {
160
+ prNumber: { type: 'number' },
161
+ prUrl: { type: 'string' },
162
+ branch: { type: 'string' },
163
+ worktreePath: { type: 'string' },
164
+ draft: { type: 'boolean' },
165
+ scenario: { type: 'string' },
166
+ actionTaken: { type: 'string' },
167
+ created: { type: 'boolean' },
168
+ },
169
+ },
170
+ },
171
+ required: ['success', 'command', 'timestamp'],
172
+ },
73
173
  },
74
174
  {
75
175
  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.',
176
+ 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.\n\n' +
177
+ 'Returns a CommandResult JSON with:\n' +
178
+ '- data.prNumber: The PR number\n' +
179
+ '- data.worktreePath: Absolute path to the new worktree directory\n' +
180
+ '- data.branch: Branch name checked out in the worktree\n\n' +
181
+ 'Example success response:\n' +
182
+ '{"success":true,"command":"newpr","timestamp":"...","data":{"prNumber":42,"prUrl":"https://github.com/owner/repo/pull/42","branch":"feat/existing-feature","worktreePath":"/home/user/repo.pr42","draft":false,"created":false}}',
183
+ annotations: {
184
+ title: 'Setup PR Worktree',
185
+ readOnlyHint: false,
186
+ destructiveHint: false,
187
+ idempotentHint: true,
188
+ openWorldHint: true,
189
+ },
77
190
  inputSchema: {
78
191
  type: 'object',
79
192
  properties: {
@@ -84,10 +197,41 @@ const tools = [
84
197
  },
85
198
  required: ['prNumber'],
86
199
  },
200
+ outputSchema: {
201
+ type: 'object',
202
+ properties: {
203
+ ...commandResultBase,
204
+ data: {
205
+ type: 'object',
206
+ properties: {
207
+ prNumber: { type: 'number' },
208
+ prUrl: { type: 'string' },
209
+ branch: { type: 'string' },
210
+ worktreePath: { type: 'string' },
211
+ draft: { type: 'boolean' },
212
+ created: { type: 'boolean' },
213
+ },
214
+ },
215
+ },
216
+ required: ['success', 'command', 'timestamp'],
217
+ },
87
218
  },
88
219
  {
89
220
  name: 'worktree_list',
90
- description: 'List all git worktrees with their PR status.',
221
+ description: 'List all git worktrees with their PR status.\n\n' +
222
+ 'Returns a CommandResult JSON with:\n' +
223
+ '- data.worktrees: Array of worktree objects with path, branch, type, prNumber, prState\n' +
224
+ '- data.total: Total number of worktrees\n' +
225
+ '- data.openCount: Number of open PRs\n\n' +
226
+ 'Example success response:\n' +
227
+ '{"success":true,"command":"lswt","timestamp":"...","data":{"worktrees":[{"path":"/home/user/repo","name":"repo","branch":"main","commit":"abc1234","type":"main","prNumber":null,"prState":null,"isDraft":null,"hasChanges":false}],"total":1,"prCount":0,"remotePrCount":0,"openCount":0,"changesCount":0}}',
228
+ annotations: {
229
+ title: 'List Worktrees',
230
+ readOnlyHint: true,
231
+ destructiveHint: false,
232
+ idempotentHint: true,
233
+ openWorldHint: true,
234
+ },
91
235
  inputSchema: {
92
236
  type: 'object',
93
237
  properties: {
@@ -97,10 +241,59 @@ const tools = [
97
241
  },
98
242
  },
99
243
  },
244
+ outputSchema: {
245
+ type: 'object',
246
+ properties: {
247
+ ...commandResultBase,
248
+ data: {
249
+ type: 'object',
250
+ properties: {
251
+ worktrees: {
252
+ type: 'array',
253
+ items: {
254
+ type: 'object',
255
+ properties: {
256
+ path: { type: 'string' },
257
+ name: { type: 'string' },
258
+ branch: { type: 'string' },
259
+ commit: { type: 'string' },
260
+ type: { type: 'string' },
261
+ prNumber: { type: 'number' },
262
+ prState: { type: 'string' },
263
+ isDraft: { type: 'boolean' },
264
+ hasChanges: { type: 'boolean' },
265
+ prTitle: { type: 'string' },
266
+ prUrl: { type: 'string' },
267
+ },
268
+ },
269
+ },
270
+ total: { type: 'number' },
271
+ prCount: { type: 'number' },
272
+ remotePrCount: { type: 'number' },
273
+ openCount: { type: 'number' },
274
+ changesCount: { type: 'number' },
275
+ },
276
+ },
277
+ },
278
+ required: ['success', 'command', 'timestamp'],
279
+ },
100
280
  },
101
281
  {
102
282
  name: 'worktree_clean',
103
- description: 'Clean up worktrees for merged or closed PRs.',
283
+ description: 'Clean up worktrees for merged or closed PRs. Removes worktree directories and optionally deletes local and remote branches.\n\n' +
284
+ 'Returns a CommandResult JSON with:\n' +
285
+ '- data.cleaned: Array of cleaned worktree objects with prNumber, branch, path, prState\n' +
286
+ '- data.totalCleaned: Number of worktrees cleaned\n' +
287
+ '- data.skipped: Array of skipped worktrees with reason\n\n' +
288
+ 'Example success response:\n' +
289
+ '{"success":true,"command":"cleanpr","timestamp":"...","data":{"cleaned":[{"prNumber":42,"branch":"feat/old-feature","path":"/home/user/repo.pr42","prState":"MERGED","localBranchDeleted":true,"remoteBranchDeleted":false}],"skipped":[],"totalCleaned":1,"totalSkipped":0}}',
290
+ annotations: {
291
+ title: 'Clean Worktrees',
292
+ readOnlyHint: false,
293
+ destructiveHint: true,
294
+ idempotentHint: true,
295
+ openWorldHint: false,
296
+ },
104
297
  inputSchema: {
105
298
  type: 'object',
106
299
  properties: {
@@ -122,6 +315,57 @@ const tools = [
122
315
  },
123
316
  },
124
317
  },
318
+ outputSchema: {
319
+ type: 'object',
320
+ properties: {
321
+ ...commandResultBase,
322
+ data: {
323
+ type: 'object',
324
+ properties: {
325
+ cleaned: {
326
+ type: 'array',
327
+ items: {
328
+ type: 'object',
329
+ properties: {
330
+ prNumber: { type: 'number' },
331
+ branch: { type: 'string' },
332
+ path: { type: 'string' },
333
+ prState: { type: 'string' },
334
+ localBranchDeleted: { type: 'boolean' },
335
+ remoteBranchDeleted: { type: 'boolean' },
336
+ },
337
+ },
338
+ },
339
+ skipped: {
340
+ type: 'array',
341
+ items: {
342
+ type: 'object',
343
+ properties: {
344
+ prNumber: { type: 'number' },
345
+ reason: { type: 'string' },
346
+ },
347
+ },
348
+ },
349
+ totalCleaned: { type: 'number' },
350
+ totalSkipped: { type: 'number' },
351
+ wouldClean: {
352
+ type: 'array',
353
+ items: {
354
+ type: 'object',
355
+ properties: {
356
+ prNumber: { type: 'number' },
357
+ branch: { type: 'string' },
358
+ path: { type: 'string' },
359
+ prState: { type: 'string' },
360
+ },
361
+ },
362
+ },
363
+ totalWouldClean: { type: 'number' },
364
+ },
365
+ },
366
+ },
367
+ required: ['success', 'command', 'timestamp'],
368
+ },
125
369
  },
126
370
  ];
127
371
  // Create MCP server
@@ -158,17 +402,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
158
402
  case 'worktree_create_pr': {
159
403
  const description = args?.description;
160
404
  if (!description) {
405
+ const errorResult = createErrorResult('newpr', ErrorCode.INVALID_ARGUMENT, 'description is required');
161
406
  return {
162
407
  content: [
163
408
  {
164
409
  type: 'text',
165
- text: JSON.stringify({
166
- success: false,
167
- error: {
168
- code: 'INVALID_ARGUMENT',
169
- message: 'description is required',
170
- },
171
- }),
410
+ text: JSON.stringify(errorResult, null, 2),
172
411
  },
173
412
  ],
174
413
  isError: true,
@@ -182,17 +421,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
182
421
  let validatedAction;
183
422
  if (action) {
184
423
  if (!isValidStateActionKey(action)) {
424
+ const errorResult = createErrorResult('newpr', ErrorCode.INVALID_ACTION, `Invalid action: ${action}. Use worktree_get_state to see available actions.`);
185
425
  return {
186
426
  content: [
187
427
  {
188
428
  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
- }),
429
+ text: JSON.stringify(errorResult, null, 2),
196
430
  },
197
431
  ],
198
432
  isError: true,
@@ -220,17 +454,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
220
454
  case 'worktree_setup_pr': {
221
455
  const prNumber = args?.prNumber;
222
456
  if (!prNumber || typeof prNumber !== 'number') {
457
+ const errorResult = createErrorResult('newpr', ErrorCode.INVALID_ARGUMENT, 'prNumber is required and must be a number');
223
458
  return {
224
459
  content: [
225
460
  {
226
461
  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
- }),
462
+ text: JSON.stringify(errorResult, null, 2),
234
463
  },
235
464
  ],
236
465
  isError: true,
@@ -281,37 +510,28 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
281
510
  isError: !result.success,
282
511
  };
283
512
  }
284
- default:
513
+ default: {
514
+ const errorResult = createErrorResult(name ?? 'unknown', ErrorCode.INVALID_ARGUMENT, `Unknown tool: ${name}`);
285
515
  return {
286
516
  content: [
287
517
  {
288
518
  type: 'text',
289
- text: JSON.stringify({
290
- success: false,
291
- error: {
292
- code: 'UNKNOWN_TOOL',
293
- message: `Unknown tool: ${name}`,
294
- },
295
- }),
519
+ text: JSON.stringify(errorResult, null, 2),
296
520
  },
297
521
  ],
298
522
  isError: true,
299
523
  };
524
+ }
300
525
  }
301
526
  }
302
527
  catch (error) {
303
528
  const message = error instanceof Error ? error.message : String(error);
529
+ const errorResult = createErrorResult(name ?? 'unknown', ErrorCode.UNKNOWN_ERROR, message);
304
530
  return {
305
531
  content: [
306
532
  {
307
533
  type: 'text',
308
- text: JSON.stringify({
309
- success: false,
310
- error: {
311
- code: 'INTERNAL_ERROR',
312
- message,
313
- },
314
- }),
534
+ text: JSON.stringify(errorResult, null, 2),
315
535
  },
316
536
  ],
317
537
  isError: true,
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,17 @@
6
6
  * these tests focus on the tool implementation logic.
7
7
  */
8
8
  import { describe, it, expect, vi, beforeEach } from 'vitest';
9
+ // Mock the MCP SDK to prevent server startup when importing server.ts
10
+ vi.mock('@modelcontextprotocol/sdk/server/index.js', () => ({
11
+ Server: vi.fn().mockImplementation(() => ({
12
+ setRequestHandler: vi.fn(),
13
+ connect: vi.fn(),
14
+ close: vi.fn(),
15
+ })),
16
+ }));
17
+ vi.mock('@modelcontextprotocol/sdk/server/stdio.js', () => ({
18
+ StdioServerTransport: vi.fn(),
19
+ }));
9
20
  // Mock the API modules before importing anything that uses them
10
21
  vi.mock('../api/state.js', () => ({
11
22
  queryState: vi.fn(),
@@ -26,6 +37,8 @@ import { listWorktrees } from '../api/list.js';
26
37
  import { cleanWorktrees } from '../api/clean.js';
27
38
  import { createPr, setupPrWorktree } from '../api/create.js';
28
39
  import { isValidStateActionKey, ErrorCode } from '../lib/json-output.js';
40
+ // Import tools array for definition tests (safe because SDK is mocked)
41
+ import { tools } from './server.js';
29
42
  describe('MCP Server', () => {
30
43
  beforeEach(() => {
31
44
  vi.resetAllMocks();
@@ -435,5 +448,103 @@ describe('MCP Server', () => {
435
448
  await expect(cleanWorktrees({ prNumber: null })).rejects.toThrow('Unexpected error');
436
449
  });
437
450
  });
451
+ describe('MCP tool definitions', () => {
452
+ const expectedToolNames = [
453
+ 'worktree_get_state',
454
+ 'worktree_create_pr',
455
+ 'worktree_setup_pr',
456
+ 'worktree_list',
457
+ 'worktree_clean',
458
+ ];
459
+ it('defines exactly 5 tools', () => {
460
+ expect(tools).toHaveLength(5);
461
+ const names = tools.map((t) => t.name);
462
+ expect(names).toEqual(expectedToolNames);
463
+ });
464
+ it('all tools have annotations with required hint fields', () => {
465
+ for (const tool of tools) {
466
+ expect(tool.annotations).toBeDefined();
467
+ const annotations = tool.annotations;
468
+ expect(typeof annotations.title).toBe('string');
469
+ expect(annotations.title.length).toBeGreaterThan(0);
470
+ expect(typeof annotations.readOnlyHint).toBe('boolean');
471
+ expect(typeof annotations.destructiveHint).toBe('boolean');
472
+ expect(typeof annotations.idempotentHint).toBe('boolean');
473
+ expect(typeof annotations.openWorldHint).toBe('boolean');
474
+ }
475
+ });
476
+ it('all tools have outputSchema with CommandResult structure', () => {
477
+ for (const tool of tools) {
478
+ expect(tool.outputSchema).toBeDefined();
479
+ const schema = tool.outputSchema;
480
+ expect(schema.type).toBe('object');
481
+ expect(schema.required).toContain('success');
482
+ expect(schema.required).toContain('command');
483
+ expect(schema.required).toContain('timestamp');
484
+ const properties = schema.properties;
485
+ expect(properties.success).toBeDefined();
486
+ expect(properties.command).toBeDefined();
487
+ expect(properties.timestamp).toBeDefined();
488
+ expect(properties.data).toBeDefined();
489
+ expect(properties.error).toBeDefined();
490
+ }
491
+ });
492
+ it('worktree_get_state is annotated as read-only', () => {
493
+ const tool = tools.find((t) => t.name === 'worktree_get_state');
494
+ expect(tool).toBeDefined();
495
+ expect(tool.annotations.readOnlyHint).toBe(true);
496
+ expect(tool.annotations.destructiveHint).toBe(false);
497
+ expect(tool.annotations.idempotentHint).toBe(true);
498
+ expect(tool.annotations.openWorldHint).toBe(false);
499
+ });
500
+ it('worktree_clean is annotated as destructive', () => {
501
+ const tool = tools.find((t) => t.name === 'worktree_clean');
502
+ expect(tool).toBeDefined();
503
+ expect(tool.annotations.destructiveHint).toBe(true);
504
+ expect(tool.annotations.readOnlyHint).toBe(false);
505
+ expect(tool.annotations.idempotentHint).toBe(true);
506
+ });
507
+ it('worktree_create_pr is annotated as not idempotent', () => {
508
+ const tool = tools.find((t) => t.name === 'worktree_create_pr');
509
+ expect(tool).toBeDefined();
510
+ expect(tool.annotations.idempotentHint).toBe(false);
511
+ expect(tool.annotations.readOnlyHint).toBe(false);
512
+ expect(tool.annotations.destructiveHint).toBe(false);
513
+ expect(tool.annotations.openWorldHint).toBe(true);
514
+ });
515
+ it('worktree_list is annotated as read-only with open world', () => {
516
+ const tool = tools.find((t) => t.name === 'worktree_list');
517
+ expect(tool).toBeDefined();
518
+ expect(tool.annotations.readOnlyHint).toBe(true);
519
+ expect(tool.annotations.destructiveHint).toBe(false);
520
+ expect(tool.annotations.openWorldHint).toBe(true);
521
+ });
522
+ it('worktree_setup_pr is annotated as idempotent with open world', () => {
523
+ const tool = tools.find((t) => t.name === 'worktree_setup_pr');
524
+ expect(tool).toBeDefined();
525
+ expect(tool.annotations.idempotentHint).toBe(true);
526
+ expect(tool.annotations.readOnlyHint).toBe(false);
527
+ expect(tool.annotations.destructiveHint).toBe(false);
528
+ expect(tool.annotations.openWorldHint).toBe(true);
529
+ });
530
+ it('all tool descriptions mention JSON response format', () => {
531
+ for (const tool of tools) {
532
+ const desc = tool.description ?? '';
533
+ const mentionsJson = desc.includes('CommandResult') ||
534
+ desc.includes('JSON') ||
535
+ desc.includes('success') ||
536
+ desc.includes('Example success response');
537
+ expect(mentionsJson).toBe(true);
538
+ }
539
+ });
540
+ it('all tool descriptions include example JSON responses', () => {
541
+ for (const tool of tools) {
542
+ const desc = tool.description ?? '';
543
+ expect(desc).toContain('Example success response:');
544
+ // Each example should contain valid-looking JSON with "success":true
545
+ expect(desc).toContain('"success":true');
546
+ }
547
+ });
548
+ });
438
549
  });
439
550
  //# sourceMappingURL=server.test.js.map