@herbcaudill/ralph 1.0.1 → 1.1.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 +93 -0
  2. package/dist/index.js +2480 -6
  3. package/dist/index.js.map +1 -1
  4. package/package.json +10 -9
  5. package/templates/core-prompt.md +3 -19
  6. package/templates/skills/manage-tasks/SKILL.md +0 -3
  7. package/templates/workflow.md +5 -19
  8. package/dist/cli.d.ts +0 -3
  9. package/dist/cli.d.ts.map +0 -1
  10. package/dist/cli.js +0 -102
  11. package/dist/cli.js.map +0 -1
  12. package/dist/components/App.d.ts +0 -17
  13. package/dist/components/App.d.ts.map +0 -1
  14. package/dist/components/App.js +0 -18
  15. package/dist/components/App.js.map +0 -1
  16. package/dist/components/EnhancedTextInput.d.ts +0 -22
  17. package/dist/components/EnhancedTextInput.d.ts.map +0 -1
  18. package/dist/components/EnhancedTextInput.js +0 -130
  19. package/dist/components/EnhancedTextInput.js.map +0 -1
  20. package/dist/components/EnhancedTextInput.test.d.ts +0 -2
  21. package/dist/components/EnhancedTextInput.test.d.ts.map +0 -1
  22. package/dist/components/EnhancedTextInput.test.js +0 -99
  23. package/dist/components/EnhancedTextInput.test.js.map +0 -1
  24. package/dist/components/EventDisplay.d.ts +0 -14
  25. package/dist/components/EventDisplay.d.ts.map +0 -1
  26. package/dist/components/EventDisplay.js +0 -91
  27. package/dist/components/EventDisplay.js.map +0 -1
  28. package/dist/components/EventDisplay.replay.test.d.ts +0 -2
  29. package/dist/components/EventDisplay.replay.test.d.ts.map +0 -1
  30. package/dist/components/EventDisplay.replay.test.js +0 -379
  31. package/dist/components/EventDisplay.replay.test.js.map +0 -1
  32. package/dist/components/EventDisplay.test.d.ts +0 -2
  33. package/dist/components/EventDisplay.test.d.ts.map +0 -1
  34. package/dist/components/EventDisplay.test.js +0 -349
  35. package/dist/components/EventDisplay.test.js.map +0 -1
  36. package/dist/components/FullScreenLayout.d.ts +0 -15
  37. package/dist/components/FullScreenLayout.d.ts.map +0 -1
  38. package/dist/components/FullScreenLayout.js +0 -20
  39. package/dist/components/FullScreenLayout.js.map +0 -1
  40. package/dist/components/Header.d.ts +0 -10
  41. package/dist/components/Header.d.ts.map +0 -1
  42. package/dist/components/Header.js +0 -22
  43. package/dist/components/Header.js.map +0 -1
  44. package/dist/components/Header.test.d.ts +0 -2
  45. package/dist/components/Header.test.d.ts.map +0 -1
  46. package/dist/components/Header.test.js +0 -27
  47. package/dist/components/Header.test.js.map +0 -1
  48. package/dist/components/InitRalph.d.ts +0 -8
  49. package/dist/components/InitRalph.d.ts.map +0 -1
  50. package/dist/components/InitRalph.js +0 -136
  51. package/dist/components/InitRalph.js.map +0 -1
  52. package/dist/components/IterationRunner.d.ts +0 -10
  53. package/dist/components/IterationRunner.d.ts.map +0 -1
  54. package/dist/components/IterationRunner.js +0 -536
  55. package/dist/components/IterationRunner.js.map +0 -1
  56. package/dist/components/IterationRunner.test.d.ts +0 -46
  57. package/dist/components/IterationRunner.test.d.ts.map +0 -1
  58. package/dist/components/IterationRunner.test.js +0 -69
  59. package/dist/components/IterationRunner.test.js.map +0 -1
  60. package/dist/components/IterationRunner.types.d.ts +0 -30
  61. package/dist/components/IterationRunner.types.d.ts.map +0 -1
  62. package/dist/components/IterationRunner.types.js +0 -2
  63. package/dist/components/IterationRunner.types.js.map +0 -1
  64. package/dist/components/JsonOutput.d.ts +0 -13
  65. package/dist/components/JsonOutput.d.ts.map +0 -1
  66. package/dist/components/JsonOutput.js +0 -269
  67. package/dist/components/JsonOutput.js.map +0 -1
  68. package/dist/components/JsonOutput.test.d.ts +0 -2
  69. package/dist/components/JsonOutput.test.d.ts.map +0 -1
  70. package/dist/components/JsonOutput.test.js +0 -39
  71. package/dist/components/JsonOutput.test.js.map +0 -1
  72. package/dist/components/ProgressBar.d.ts +0 -18
  73. package/dist/components/ProgressBar.d.ts.map +0 -1
  74. package/dist/components/ProgressBar.js +0 -30
  75. package/dist/components/ProgressBar.js.map +0 -1
  76. package/dist/components/ProgressBar.test.d.ts +0 -2
  77. package/dist/components/ProgressBar.test.d.ts.map +0 -1
  78. package/dist/components/ProgressBar.test.js +0 -55
  79. package/dist/components/ProgressBar.test.js.map +0 -1
  80. package/dist/components/ReplayLog.d.ts +0 -7
  81. package/dist/components/ReplayLog.d.ts.map +0 -1
  82. package/dist/components/ReplayLog.js +0 -57
  83. package/dist/components/ReplayLog.js.map +0 -1
  84. package/dist/components/StreamingText.d.ts +0 -11
  85. package/dist/components/StreamingText.d.ts.map +0 -1
  86. package/dist/components/StreamingText.js +0 -37
  87. package/dist/components/StreamingText.js.map +0 -1
  88. package/dist/components/StreamingText.test.d.ts +0 -2
  89. package/dist/components/StreamingText.test.d.ts.map +0 -1
  90. package/dist/components/StreamingText.test.js +0 -125
  91. package/dist/components/StreamingText.test.js.map +0 -1
  92. package/dist/components/ToolUse.d.ts +0 -16
  93. package/dist/components/ToolUse.d.ts.map +0 -1
  94. package/dist/components/ToolUse.js +0 -11
  95. package/dist/components/ToolUse.js.map +0 -1
  96. package/dist/components/ToolUse.test.d.ts +0 -2
  97. package/dist/components/ToolUse.test.d.ts.map +0 -1
  98. package/dist/components/ToolUse.test.js +0 -43
  99. package/dist/components/ToolUse.test.js.map +0 -1
  100. package/dist/components/blocksToLines.d.ts +0 -6
  101. package/dist/components/blocksToLines.d.ts.map +0 -1
  102. package/dist/components/blocksToLines.js +0 -15
  103. package/dist/components/blocksToLines.js.map +0 -1
  104. package/dist/components/eventToBlocks.d.ts +0 -22
  105. package/dist/components/eventToBlocks.d.ts.map +0 -1
  106. package/dist/components/eventToBlocks.js +0 -166
  107. package/dist/components/eventToBlocks.js.map +0 -1
  108. package/dist/components/eventToBlocks.test.d.ts +0 -2
  109. package/dist/components/eventToBlocks.test.d.ts.map +0 -1
  110. package/dist/components/eventToBlocks.test.js +0 -466
  111. package/dist/components/eventToBlocks.test.js.map +0 -1
  112. package/dist/components/findNextWordBoundary.d.ts +0 -10
  113. package/dist/components/findNextWordBoundary.d.ts.map +0 -1
  114. package/dist/components/findNextWordBoundary.js +0 -23
  115. package/dist/components/findNextWordBoundary.js.map +0 -1
  116. package/dist/components/findPreviousWordBoundary.d.ts +0 -10
  117. package/dist/components/findPreviousWordBoundary.d.ts.map +0 -1
  118. package/dist/components/findPreviousWordBoundary.js +0 -23
  119. package/dist/components/findPreviousWordBoundary.js.map +0 -1
  120. package/dist/components/processEvents.d.ts +0 -11
  121. package/dist/components/processEvents.d.ts.map +0 -1
  122. package/dist/components/processEvents.js +0 -87
  123. package/dist/components/processEvents.js.map +0 -1
  124. package/dist/components/renderStaticItem.d.ts +0 -7
  125. package/dist/components/renderStaticItem.d.ts.map +0 -1
  126. package/dist/components/renderStaticItem.js +0 -23
  127. package/dist/components/renderStaticItem.js.map +0 -1
  128. package/dist/components/replay.d.ts +0 -5
  129. package/dist/components/replay.d.ts.map +0 -1
  130. package/dist/components/replay.js +0 -49
  131. package/dist/components/replay.js.map +0 -1
  132. package/dist/components/test-helpers/ControlledInput.d.ts +0 -14
  133. package/dist/components/test-helpers/ControlledInput.d.ts.map +0 -1
  134. package/dist/components/test-helpers/ControlledInput.js +0 -15
  135. package/dist/components/test-helpers/ControlledInput.js.map +0 -1
  136. package/dist/components/useContentHeight.d.ts +0 -9
  137. package/dist/components/useContentHeight.d.ts.map +0 -1
  138. package/dist/components/useContentHeight.js +0 -16
  139. package/dist/components/useContentHeight.js.map +0 -1
  140. package/dist/index.d.ts +0 -3
  141. package/dist/index.d.ts.map +0 -1
  142. package/dist/lib/MessageQueue.d.ts +0 -33
  143. package/dist/lib/MessageQueue.d.ts.map +0 -1
  144. package/dist/lib/MessageQueue.js +0 -96
  145. package/dist/lib/MessageQueue.js.map +0 -1
  146. package/dist/lib/MessageQueue.test.d.ts +0 -2
  147. package/dist/lib/MessageQueue.test.d.ts.map +0 -1
  148. package/dist/lib/MessageQueue.test.js +0 -224
  149. package/dist/lib/MessageQueue.test.js.map +0 -1
  150. package/dist/lib/StdinCommandHandler.d.ts +0 -48
  151. package/dist/lib/StdinCommandHandler.d.ts.map +0 -1
  152. package/dist/lib/StdinCommandHandler.js +0 -95
  153. package/dist/lib/StdinCommandHandler.js.map +0 -1
  154. package/dist/lib/StdinCommandHandler.test.d.ts +0 -2
  155. package/dist/lib/StdinCommandHandler.test.d.ts.map +0 -1
  156. package/dist/lib/StdinCommandHandler.test.js +0 -93
  157. package/dist/lib/StdinCommandHandler.test.js.map +0 -1
  158. package/dist/lib/WorktreeManager.d.ts +0 -114
  159. package/dist/lib/WorktreeManager.d.ts.map +0 -1
  160. package/dist/lib/WorktreeManager.js +0 -350
  161. package/dist/lib/WorktreeManager.js.map +0 -1
  162. package/dist/lib/WorktreeManager.test.d.ts +0 -2
  163. package/dist/lib/WorktreeManager.test.d.ts.map +0 -1
  164. package/dist/lib/WorktreeManager.test.js +0 -261
  165. package/dist/lib/WorktreeManager.test.js.map +0 -1
  166. package/dist/lib/addTodo.d.ts +0 -11
  167. package/dist/lib/addTodo.d.ts.map +0 -1
  168. package/dist/lib/addTodo.js +0 -51
  169. package/dist/lib/addTodo.js.map +0 -1
  170. package/dist/lib/beadsClient.d.ts +0 -46
  171. package/dist/lib/beadsClient.d.ts.map +0 -1
  172. package/dist/lib/beadsClient.js +0 -172
  173. package/dist/lib/beadsClient.js.map +0 -1
  174. package/dist/lib/captureBeadsSnapshot.d.ts +0 -4
  175. package/dist/lib/captureBeadsSnapshot.d.ts.map +0 -1
  176. package/dist/lib/captureBeadsSnapshot.js +0 -24
  177. package/dist/lib/captureBeadsSnapshot.js.map +0 -1
  178. package/dist/lib/captureStartupSnapshot.d.ts +0 -10
  179. package/dist/lib/captureStartupSnapshot.d.ts.map +0 -1
  180. package/dist/lib/captureStartupSnapshot.js +0 -29
  181. package/dist/lib/captureStartupSnapshot.js.map +0 -1
  182. package/dist/lib/captureTodoSnapshot.d.ts +0 -4
  183. package/dist/lib/captureTodoSnapshot.d.ts.map +0 -1
  184. package/dist/lib/captureTodoSnapshot.js +0 -24
  185. package/dist/lib/captureTodoSnapshot.js.map +0 -1
  186. package/dist/lib/copyTemplates.d.ts +0 -22
  187. package/dist/lib/copyTemplates.d.ts.map +0 -1
  188. package/dist/lib/copyTemplates.js +0 -32
  189. package/dist/lib/copyTemplates.js.map +0 -1
  190. package/dist/lib/createStdinCommandHandler.d.ts +0 -28
  191. package/dist/lib/createStdinCommandHandler.d.ts.map +0 -1
  192. package/dist/lib/createStdinCommandHandler.js +0 -67
  193. package/dist/lib/createStdinCommandHandler.js.map +0 -1
  194. package/dist/lib/createUserMessage.d.ts +0 -6
  195. package/dist/lib/createUserMessage.d.ts.map +0 -1
  196. package/dist/lib/createUserMessage.js +0 -13
  197. package/dist/lib/createUserMessage.js.map +0 -1
  198. package/dist/lib/debug.d.ts +0 -19
  199. package/dist/lib/debug.d.ts.map +0 -1
  200. package/dist/lib/debug.js +0 -54
  201. package/dist/lib/debug.js.map +0 -1
  202. package/dist/lib/findMaxLogNumber.d.ts +0 -6
  203. package/dist/lib/findMaxLogNumber.d.ts.map +0 -1
  204. package/dist/lib/findMaxLogNumber.js +0 -26
  205. package/dist/lib/findMaxLogNumber.js.map +0 -1
  206. package/dist/lib/findMaxLogNumber.test.d.ts +0 -2
  207. package/dist/lib/findMaxLogNumber.test.d.ts.map +0 -1
  208. package/dist/lib/findMaxLogNumber.test.js +0 -39
  209. package/dist/lib/findMaxLogNumber.test.js.map +0 -1
  210. package/dist/lib/formatContentBlock.d.ts +0 -6
  211. package/dist/lib/formatContentBlock.d.ts.map +0 -1
  212. package/dist/lib/formatContentBlock.js +0 -18
  213. package/dist/lib/formatContentBlock.js.map +0 -1
  214. package/dist/lib/formatIterationHeader.d.ts +0 -5
  215. package/dist/lib/formatIterationHeader.d.ts.map +0 -1
  216. package/dist/lib/formatIterationHeader.js +0 -8
  217. package/dist/lib/formatIterationHeader.js.map +0 -1
  218. package/dist/lib/formatText.d.ts +0 -5
  219. package/dist/lib/formatText.d.ts.map +0 -1
  220. package/dist/lib/formatText.js +0 -33
  221. package/dist/lib/formatText.js.map +0 -1
  222. package/dist/lib/formatToolUse.d.ts +0 -7
  223. package/dist/lib/formatToolUse.d.ts.map +0 -1
  224. package/dist/lib/formatToolUse.js +0 -14
  225. package/dist/lib/formatToolUse.js.map +0 -1
  226. package/dist/lib/formatUserMessage.d.ts +0 -5
  227. package/dist/lib/formatUserMessage.d.ts.map +0 -1
  228. package/dist/lib/formatUserMessage.js +0 -8
  229. package/dist/lib/formatUserMessage.js.map +0 -1
  230. package/dist/lib/getBaseCwd.d.ts +0 -6
  231. package/dist/lib/getBaseCwd.d.ts.map +0 -1
  232. package/dist/lib/getBaseCwd.js +0 -6
  233. package/dist/lib/getBaseCwd.js.map +0 -1
  234. package/dist/lib/getBeadsProgress.d.ts +0 -8
  235. package/dist/lib/getBeadsProgress.d.ts.map +0 -1
  236. package/dist/lib/getBeadsProgress.js +0 -35
  237. package/dist/lib/getBeadsProgress.js.map +0 -1
  238. package/dist/lib/getClaudeVersion.d.ts +0 -6
  239. package/dist/lib/getClaudeVersion.d.ts.map +0 -1
  240. package/dist/lib/getClaudeVersion.js +0 -21
  241. package/dist/lib/getClaudeVersion.js.map +0 -1
  242. package/dist/lib/getClaudeVersion.test.d.ts +0 -2
  243. package/dist/lib/getClaudeVersion.test.d.ts.map +0 -1
  244. package/dist/lib/getClaudeVersion.test.js +0 -39
  245. package/dist/lib/getClaudeVersion.test.js.map +0 -1
  246. package/dist/lib/getDefaultIterations.d.ts +0 -6
  247. package/dist/lib/getDefaultIterations.d.ts.map +0 -1
  248. package/dist/lib/getDefaultIterations.js +0 -14
  249. package/dist/lib/getDefaultIterations.js.map +0 -1
  250. package/dist/lib/getDefaultIterations.test.d.ts +0 -2
  251. package/dist/lib/getDefaultIterations.test.d.ts.map +0 -1
  252. package/dist/lib/getDefaultIterations.test.js +0 -39
  253. package/dist/lib/getDefaultIterations.test.js.map +0 -1
  254. package/dist/lib/getLatestLogFile.d.ts +0 -6
  255. package/dist/lib/getLatestLogFile.d.ts.map +0 -1
  256. package/dist/lib/getLatestLogFile.js +0 -15
  257. package/dist/lib/getLatestLogFile.js.map +0 -1
  258. package/dist/lib/getNextLogFile.d.ts +0 -7
  259. package/dist/lib/getNextLogFile.d.ts.map +0 -1
  260. package/dist/lib/getNextLogFile.js +0 -18
  261. package/dist/lib/getNextLogFile.js.map +0 -1
  262. package/dist/lib/getNextLogFile.test.d.ts +0 -2
  263. package/dist/lib/getNextLogFile.test.d.ts.map +0 -1
  264. package/dist/lib/getNextLogFile.test.js +0 -66
  265. package/dist/lib/getNextLogFile.test.js.map +0 -1
  266. package/dist/lib/getOpenIssueCount.d.ts +0 -6
  267. package/dist/lib/getOpenIssueCount.d.ts.map +0 -1
  268. package/dist/lib/getOpenIssueCount.js +0 -19
  269. package/dist/lib/getOpenIssueCount.js.map +0 -1
  270. package/dist/lib/getOpenIssueCount.test.d.ts +0 -2
  271. package/dist/lib/getOpenIssueCount.test.d.ts.map +0 -1
  272. package/dist/lib/getOpenIssueCount.test.js +0 -31
  273. package/dist/lib/getOpenIssueCount.test.js.map +0 -1
  274. package/dist/lib/getProgress.d.ts +0 -14
  275. package/dist/lib/getProgress.d.ts.map +0 -1
  276. package/dist/lib/getProgress.js +0 -30
  277. package/dist/lib/getProgress.js.map +0 -1
  278. package/dist/lib/getProgress.test.d.ts +0 -2
  279. package/dist/lib/getProgress.test.d.ts.map +0 -1
  280. package/dist/lib/getProgress.test.js +0 -218
  281. package/dist/lib/getProgress.test.js.map +0 -1
  282. package/dist/lib/getPromptContent.d.ts +0 -8
  283. package/dist/lib/getPromptContent.d.ts.map +0 -1
  284. package/dist/lib/getPromptContent.js +0 -31
  285. package/dist/lib/getPromptContent.js.map +0 -1
  286. package/dist/lib/getTerminalSize.d.ts +0 -8
  287. package/dist/lib/getTerminalSize.d.ts.map +0 -1
  288. package/dist/lib/getTerminalSize.js +0 -10
  289. package/dist/lib/getTerminalSize.js.map +0 -1
  290. package/dist/lib/getTodoProgress.d.ts +0 -4
  291. package/dist/lib/getTodoProgress.d.ts.map +0 -1
  292. package/dist/lib/getTodoProgress.js +0 -22
  293. package/dist/lib/getTodoProgress.js.map +0 -1
  294. package/dist/lib/insertTodo.d.ts +0 -7
  295. package/dist/lib/insertTodo.d.ts.map +0 -1
  296. package/dist/lib/insertTodo.js +0 -22
  297. package/dist/lib/insertTodo.js.map +0 -1
  298. package/dist/lib/outputEvent.d.ts +0 -5
  299. package/dist/lib/outputEvent.d.ts.map +0 -1
  300. package/dist/lib/outputEvent.js +0 -7
  301. package/dist/lib/outputEvent.js.map +0 -1
  302. package/dist/lib/parseStdinCommand.d.ts +0 -25
  303. package/dist/lib/parseStdinCommand.d.ts.map +0 -1
  304. package/dist/lib/parseStdinCommand.js +0 -43
  305. package/dist/lib/parseStdinCommand.js.map +0 -1
  306. package/dist/lib/parseStdinCommand.test.d.ts +0 -2
  307. package/dist/lib/parseStdinCommand.test.d.ts.map +0 -1
  308. package/dist/lib/parseStdinCommand.test.js +0 -93
  309. package/dist/lib/parseStdinCommand.test.js.map +0 -1
  310. package/dist/lib/parseTaskLifecycle.d.ts +0 -18
  311. package/dist/lib/parseTaskLifecycle.d.ts.map +0 -1
  312. package/dist/lib/parseTaskLifecycle.js +0 -30
  313. package/dist/lib/parseTaskLifecycle.js.map +0 -1
  314. package/dist/lib/parseTaskLifecycle.test.d.ts +0 -2
  315. package/dist/lib/parseTaskLifecycle.test.d.ts.map +0 -1
  316. package/dist/lib/parseTaskLifecycle.test.js +0 -122
  317. package/dist/lib/parseTaskLifecycle.test.js.map +0 -1
  318. package/dist/lib/parseWorktreeFromBranch.d.ts +0 -13
  319. package/dist/lib/parseWorktreeFromBranch.d.ts.map +0 -1
  320. package/dist/lib/parseWorktreeFromBranch.js +0 -19
  321. package/dist/lib/parseWorktreeFromBranch.js.map +0 -1
  322. package/dist/lib/processEvents.d.ts +0 -12
  323. package/dist/lib/processEvents.d.ts.map +0 -1
  324. package/dist/lib/processEvents.js +0 -113
  325. package/dist/lib/processEvents.js.map +0 -1
  326. package/dist/lib/rel.d.ts +0 -8
  327. package/dist/lib/rel.d.ts.map +0 -1
  328. package/dist/lib/rel.js +0 -19
  329. package/dist/lib/rel.js.map +0 -1
  330. package/dist/lib/rel.test.d.ts +0 -2
  331. package/dist/lib/rel.test.d.ts.map +0 -1
  332. package/dist/lib/rel.test.js +0 -51
  333. package/dist/lib/rel.test.js.map +0 -1
  334. package/dist/lib/sdkMessageToEvent.d.ts +0 -6
  335. package/dist/lib/sdkMessageToEvent.d.ts.map +0 -1
  336. package/dist/lib/sdkMessageToEvent.js +0 -12
  337. package/dist/lib/sdkMessageToEvent.js.map +0 -1
  338. package/dist/lib/shortenTempPaths.d.ts +0 -8
  339. package/dist/lib/shortenTempPaths.d.ts.map +0 -1
  340. package/dist/lib/shortenTempPaths.js +0 -12
  341. package/dist/lib/shortenTempPaths.js.map +0 -1
  342. package/dist/lib/shortenTempPaths.test.d.ts +0 -2
  343. package/dist/lib/shortenTempPaths.test.d.ts.map +0 -1
  344. package/dist/lib/shortenTempPaths.test.js +0 -46
  345. package/dist/lib/shortenTempPaths.test.js.map +0 -1
  346. package/dist/lib/types.d.ts +0 -19
  347. package/dist/lib/types.d.ts.map +0 -1
  348. package/dist/lib/types.js +0 -2
  349. package/dist/lib/types.js.map +0 -1
  350. package/dist/lib/useTerminalSize.d.ts +0 -6
  351. package/dist/lib/useTerminalSize.d.ts.map +0 -1
  352. package/dist/lib/useTerminalSize.js +0 -19
  353. package/dist/lib/useTerminalSize.js.map +0 -1
@@ -1,350 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { stat, mkdir } from "node:fs/promises";
3
- import { join, dirname, basename } from "node:path";
4
- import { createDebugLogger } from "./debug.js";
5
- import { parseWorktreeFromBranch } from "./parseWorktreeFromBranch.js";
6
- const log = createDebugLogger("worktree");
7
- /**
8
- * Manages git worktrees for concurrent Ralph instances.
9
- *
10
- * Each Ralph instance gets its own worktree in a sibling folder,
11
- * allowing parallel work without conflicts:
12
- *
13
- * ```
14
- * project/ # Main worktree (main branch)
15
- * project-worktrees/ # Sibling folder
16
- * alice-abc123/ # Alice's worktree (branch: ralph/alice-abc123)
17
- * bob-def456/ # Bob's worktree (branch: ralph/bob-def456)
18
- * ```
19
- */
20
- export class WorktreeManager {
21
- mainWorkspacePath;
22
- worktreesBasePath;
23
- constructor(mainWorkspacePath) {
24
- this.mainWorkspacePath = mainWorkspacePath;
25
- // Worktrees stored in sibling folder: {project}-worktrees/
26
- const projectName = basename(mainWorkspacePath);
27
- this.worktreesBasePath = join(dirname(mainWorkspacePath), `${projectName}-worktrees`);
28
- }
29
- /**
30
- * Get the path to the worktrees base directory.
31
- */
32
- getWorktreesBasePath() {
33
- return this.worktreesBasePath;
34
- }
35
- /**
36
- * Get the path for a specific instance's worktree.
37
- */
38
- getWorktreePath(instanceId, instanceName) {
39
- return join(this.worktreesBasePath, `${instanceName}-${instanceId}`);
40
- }
41
- /**
42
- * Get the branch name for a specific instance.
43
- */
44
- getBranchName(instanceId, instanceName) {
45
- return `ralph/${instanceName}-${instanceId}`;
46
- }
47
- /**
48
- * Create a new worktree for an instance.
49
- */
50
- async create(
51
- /** Instance ID and name */
52
- options) {
53
- const { instanceId, instanceName } = options;
54
- const worktreePath = this.getWorktreePath(instanceId, instanceName);
55
- const branchName = this.getBranchName(instanceId, instanceName);
56
- log(`Creating worktree at ${worktreePath} with branch ${branchName}`);
57
- // Ensure the worktrees base directory exists
58
- await this.ensureWorktreesDirectory();
59
- // Create the worktree with a new branch
60
- await this.git(["worktree", "add", worktreePath, "-b", branchName]);
61
- log(`Worktree created successfully`);
62
- return {
63
- path: worktreePath,
64
- branch: branchName,
65
- instanceId,
66
- instanceName,
67
- };
68
- }
69
- /**
70
- * Merge the worktree branch back to main.
71
- */
72
- async merge(
73
- /** The instance ID */
74
- instanceId,
75
- /** The instance name */
76
- instanceName) {
77
- const branchName = this.getBranchName(instanceId, instanceName);
78
- log(`Merging branch ${branchName} to main`);
79
- try {
80
- // First, make sure we're on main
81
- const mainBranch = await this.getMainBranch();
82
- await this.git(["checkout", mainBranch]);
83
- // Attempt to merge
84
- await this.git(["merge", branchName, "--no-ff", "-m", `Merge ${branchName}`]);
85
- log(`Merge successful`);
86
- return {
87
- success: true,
88
- hadConflicts: false,
89
- message: `Successfully merged ${branchName} to ${mainBranch}`,
90
- };
91
- }
92
- catch (error) {
93
- const errorMessage = error instanceof Error ? error.message : String(error);
94
- // Check if it's a merge conflict
95
- if (errorMessage.includes("CONFLICT") || errorMessage.includes("Automatic merge failed")) {
96
- log(`Merge had conflicts`);
97
- return {
98
- success: false,
99
- hadConflicts: true,
100
- message: `Merge conflicts detected in ${branchName}`,
101
- };
102
- }
103
- log(`Merge failed: ${errorMessage}`);
104
- return {
105
- success: false,
106
- hadConflicts: false,
107
- message: `Merge failed: ${errorMessage}`,
108
- };
109
- }
110
- }
111
- /**
112
- * Rebase the worktree branch on top of main.
113
- */
114
- async rebase(
115
- /** The instance ID */
116
- instanceId,
117
- /** The instance name */
118
- instanceName) {
119
- const worktreePath = this.getWorktreePath(instanceId, instanceName);
120
- const mainBranch = await this.getMainBranch();
121
- log(`Rebasing worktree ${worktreePath} on ${mainBranch}`);
122
- try {
123
- // Rebase the worktree branch on main
124
- await this.gitInDir(worktreePath, ["rebase", mainBranch]);
125
- log(`Rebase successful`);
126
- return {
127
- success: true,
128
- hadConflicts: false,
129
- message: `Successfully rebased on ${mainBranch}`,
130
- };
131
- }
132
- catch (error) {
133
- const errorMessage = error instanceof Error ? error.message : String(error);
134
- // Check if it's a rebase conflict
135
- if (errorMessage.includes("CONFLICT") || errorMessage.includes("Cannot rebase")) {
136
- log(`Rebase had conflicts`);
137
- // Abort the rebase
138
- try {
139
- await this.gitInDir(worktreePath, ["rebase", "--abort"]);
140
- }
141
- catch {
142
- // Ignore abort errors
143
- }
144
- return {
145
- success: false,
146
- hadConflicts: true,
147
- message: `Rebase conflicts detected`,
148
- };
149
- }
150
- log(`Rebase failed: ${errorMessage}`);
151
- return {
152
- success: false,
153
- hadConflicts: false,
154
- message: `Rebase failed: ${errorMessage}`,
155
- };
156
- }
157
- }
158
- /**
159
- * Remove a worktree and optionally delete its branch.
160
- */
161
- async remove(
162
- /** The instance ID */
163
- instanceId,
164
- /** The instance name */
165
- instanceName,
166
- /** Whether to delete the branch (default: true) */
167
- deleteBranch = true) {
168
- const worktreePath = this.getWorktreePath(instanceId, instanceName);
169
- const branchName = this.getBranchName(instanceId, instanceName);
170
- log(`Removing worktree at ${worktreePath}`);
171
- // Remove the worktree
172
- try {
173
- await this.git(["worktree", "remove", worktreePath, "--force"]);
174
- }
175
- catch (error) {
176
- // If the worktree doesn't exist, that's fine
177
- const errorMessage = error instanceof Error ? error.message : String(error);
178
- if (!errorMessage.includes("is not a working tree")) {
179
- throw error;
180
- }
181
- log(`Worktree ${worktreePath} doesn't exist, skipping removal`);
182
- }
183
- // Delete the branch if requested
184
- if (deleteBranch) {
185
- log(`Deleting branch ${branchName}`);
186
- try {
187
- await this.git(["branch", "-D", branchName]);
188
- }
189
- catch (error) {
190
- // If the branch doesn't exist, that's fine
191
- const errorMessage = error instanceof Error ? error.message : String(error);
192
- if (!errorMessage.includes("not found")) {
193
- throw error;
194
- }
195
- log(`Branch ${branchName} doesn't exist, skipping deletion`);
196
- }
197
- }
198
- log(`Worktree removed successfully`);
199
- }
200
- /**
201
- * List all worktrees managed by this WorktreeManager.
202
- */
203
- async list() {
204
- log(`Listing worktrees`);
205
- const output = await this.git(["worktree", "list", "--porcelain"]);
206
- const worktrees = [];
207
- // Parse porcelain output
208
- const lines = output.split("\n");
209
- let currentPath = null;
210
- let currentBranch = null;
211
- for (const line of lines) {
212
- if (line.startsWith("worktree ")) {
213
- // Process previous worktree before starting new one
214
- this.addWorktreeIfValid(currentPath, currentBranch, worktrees);
215
- currentPath = line.slice("worktree ".length);
216
- }
217
- else if (line.startsWith("branch refs/heads/")) {
218
- currentBranch = line.slice("branch refs/heads/".length);
219
- }
220
- }
221
- // Process the last worktree
222
- this.addWorktreeIfValid(currentPath, currentBranch, worktrees);
223
- log(`Found ${worktrees.length} worktrees`);
224
- return worktrees;
225
- }
226
- /**
227
- * Check if a worktree exists for an instance.
228
- */
229
- async exists(
230
- /** The instance ID */
231
- instanceId,
232
- /** The instance name */
233
- instanceName) {
234
- const worktreePath = this.getWorktreePath(instanceId, instanceName);
235
- try {
236
- const stats = await stat(worktreePath);
237
- return stats.isDirectory();
238
- }
239
- catch {
240
- return false;
241
- }
242
- }
243
- /**
244
- * Prune worktrees that no longer exist on disk.
245
- */
246
- async prune() {
247
- log(`Pruning stale worktree entries`);
248
- await this.git(["worktree", "prune"]);
249
- }
250
- /**
251
- * Add a worktree to the list if it's a valid ralph worktree.
252
- */
253
- addWorktreeIfValid(
254
- /** Current path being processed */
255
- currentPath,
256
- /** Current branch being processed */
257
- currentBranch,
258
- /** Worktrees list to add to */
259
- worktrees) {
260
- if (currentPath && currentBranch) {
261
- // Check if this is a ralph worktree
262
- if (currentBranch.startsWith("ralph/") && currentPath.startsWith(this.worktreesBasePath)) {
263
- const parsed = parseWorktreeFromBranch(currentBranch.slice("ralph/".length));
264
- if (parsed) {
265
- worktrees.push({
266
- path: currentPath,
267
- branch: currentBranch,
268
- ...parsed,
269
- });
270
- }
271
- }
272
- }
273
- }
274
- /**
275
- * Get the main branch name (main or master).
276
- */
277
- async getMainBranch() {
278
- // Check for main first, then master
279
- try {
280
- await this.git(["show-ref", "--verify", "--quiet", "refs/heads/main"]);
281
- return "main";
282
- }
283
- catch {
284
- try {
285
- await this.git(["show-ref", "--verify", "--quiet", "refs/heads/master"]);
286
- return "master";
287
- }
288
- catch {
289
- // Default to main
290
- return "main";
291
- }
292
- }
293
- }
294
- /**
295
- * Ensure the worktrees base directory exists.
296
- */
297
- async ensureWorktreesDirectory() {
298
- try {
299
- await stat(this.worktreesBasePath);
300
- }
301
- catch {
302
- log(`Creating worktrees directory at ${this.worktreesBasePath}`);
303
- await mkdir(this.worktreesBasePath, { recursive: true });
304
- }
305
- }
306
- /**
307
- * Execute a git command in the main workspace.
308
- */
309
- git(args) {
310
- return this.gitInDir(this.mainWorkspacePath, args);
311
- }
312
- /**
313
- * Execute a git command in a specific directory.
314
- */
315
- gitInDir(
316
- /** Working directory for the git command */
317
- cwd,
318
- /** Git command arguments */
319
- args) {
320
- return new Promise((resolve, reject) => {
321
- log(`Running: git ${args.join(" ")} in ${cwd}`);
322
- const proc = spawn("git", args, {
323
- cwd,
324
- stdio: ["ignore", "pipe", "pipe"],
325
- });
326
- let stdout = "";
327
- let stderr = "";
328
- proc.stdout.on("data", data => {
329
- stdout += data.toString();
330
- });
331
- proc.stderr.on("data", data => {
332
- stderr += data.toString();
333
- });
334
- proc.on("close", code => {
335
- if (code === 0) {
336
- resolve(stdout.trim());
337
- }
338
- else {
339
- // Include both stdout and stderr in error message for better conflict detection
340
- const combinedOutput = [stdout.trim(), stderr.trim()].filter(Boolean).join("\n");
341
- reject(new Error(combinedOutput || `git ${args[0]} failed with code ${code}`));
342
- }
343
- });
344
- proc.on("error", error => {
345
- reject(error);
346
- });
347
- });
348
- }
349
- }
350
- //# sourceMappingURL=WorktreeManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorktreeManager.js","sourceRoot":"","sources":["../../src/lib/WorktreeManager.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=WorktreeManager.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorktreeManager.test.d.ts","sourceRoot":"","sources":["../../src/lib/WorktreeManager.test.ts"],"names":[],"mappings":""}
@@ -1,261 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
- import { WorktreeManager } from "./WorktreeManager.js";
3
- import { mkdir, rm, writeFile } from "node:fs/promises";
4
- import { join } from "node:path";
5
- import { spawn } from "node:child_process";
6
- /**
7
- * Run a git command in the specified directory and return its stdout.
8
- * Rejects with an error if the command fails.
9
- */
10
- function git(
11
- /** Working directory for the git command */
12
- cwd,
13
- /** Git command arguments (e.g., ["add", "."]) */
14
- args) {
15
- return new Promise((resolve, reject) => {
16
- const proc = spawn("git", args, {
17
- cwd,
18
- stdio: ["ignore", "pipe", "pipe"],
19
- });
20
- let stdout = "";
21
- let stderr = "";
22
- proc.stdout.on("data", data => {
23
- stdout += data.toString();
24
- });
25
- proc.stderr.on("data", data => {
26
- stderr += data.toString();
27
- });
28
- proc.on("close", code => {
29
- if (code === 0) {
30
- resolve(stdout.trim());
31
- }
32
- else {
33
- reject(new Error(stderr.trim() || `git ${args[0]} failed with code ${code}`));
34
- }
35
- });
36
- });
37
- }
38
- describe("WorktreeManager", () => {
39
- const testDir = join(process.cwd(), ".test-worktrees");
40
- const mainWorkspacePath = join(testDir, "project");
41
- const worktreesPath = join(testDir, "project-worktrees");
42
- let manager;
43
- beforeEach(async () => {
44
- // Clean up any existing test directories
45
- try {
46
- await rm(testDir, { recursive: true });
47
- }
48
- catch {
49
- // Ignore if doesn't exist
50
- }
51
- // Create test directory structure
52
- await mkdir(mainWorkspacePath, { recursive: true });
53
- // Initialize a git repo
54
- await git(mainWorkspacePath, ["init"]);
55
- await git(mainWorkspacePath, ["config", "user.email", "test@test.com"]);
56
- await git(mainWorkspacePath, ["config", "user.name", "Test User"]);
57
- // Create an initial commit (required for worktrees)
58
- await writeFile(join(mainWorkspacePath, "README.md"), "# Test Project");
59
- await git(mainWorkspacePath, ["add", "."]);
60
- await git(mainWorkspacePath, ["commit", "-m", "Initial commit"]);
61
- manager = new WorktreeManager(mainWorkspacePath);
62
- });
63
- afterEach(async () => {
64
- // Clean up test directories
65
- try {
66
- // First prune any worktrees
67
- await git(mainWorkspacePath, ["worktree", "prune"]);
68
- }
69
- catch {
70
- // Ignore
71
- }
72
- try {
73
- await rm(testDir, { recursive: true });
74
- }
75
- catch {
76
- // Ignore
77
- }
78
- });
79
- describe("constructor", () => {
80
- it("sets worktrees base path in sibling folder", () => {
81
- expect(manager.getWorktreesBasePath()).toBe(worktreesPath);
82
- });
83
- });
84
- describe("getWorktreePath", () => {
85
- it("returns correct path for instance", () => {
86
- const path = manager.getWorktreePath("abc123", "alice");
87
- expect(path).toBe(join(worktreesPath, "alice-abc123"));
88
- });
89
- });
90
- describe("getBranchName", () => {
91
- it("returns correct branch name for instance", () => {
92
- const branch = manager.getBranchName("abc123", "alice");
93
- expect(branch).toBe("ralph/alice-abc123");
94
- });
95
- });
96
- describe("create", () => {
97
- it("creates a worktree with new branch", async () => {
98
- const result = await manager.create({
99
- instanceId: "abc123",
100
- instanceName: "alice",
101
- });
102
- expect(result.path).toBe(join(worktreesPath, "alice-abc123"));
103
- expect(result.branch).toBe("ralph/alice-abc123");
104
- expect(result.instanceId).toBe("abc123");
105
- expect(result.instanceName).toBe("alice");
106
- // Verify worktree exists
107
- const worktreeList = await git(mainWorkspacePath, ["worktree", "list"]);
108
- expect(worktreeList).toContain("alice-abc123");
109
- // Verify branch exists
110
- const branches = await git(mainWorkspacePath, ["branch", "-a"]);
111
- expect(branches).toContain("ralph/alice-abc123");
112
- });
113
- it("creates worktrees directory if it doesn't exist", async () => {
114
- await manager.create({
115
- instanceId: "abc123",
116
- instanceName: "alice",
117
- });
118
- // Worktrees directory should exist
119
- const exists = await manager.exists("abc123", "alice");
120
- expect(exists).toBe(true);
121
- });
122
- });
123
- describe("exists", () => {
124
- it("returns false for non-existent worktree", async () => {
125
- const exists = await manager.exists("nonexistent", "fake");
126
- expect(exists).toBe(false);
127
- });
128
- it("returns true for existing worktree", async () => {
129
- await manager.create({
130
- instanceId: "abc123",
131
- instanceName: "alice",
132
- });
133
- const exists = await manager.exists("abc123", "alice");
134
- expect(exists).toBe(true);
135
- });
136
- });
137
- describe("list", () => {
138
- it("returns empty array when no ralph worktrees exist", async () => {
139
- const worktrees = await manager.list();
140
- expect(worktrees).toEqual([]);
141
- });
142
- it("returns list of ralph worktrees", async () => {
143
- await manager.create({ instanceId: "abc123", instanceName: "alice" });
144
- await manager.create({ instanceId: "def456", instanceName: "bob" });
145
- const worktrees = await manager.list();
146
- expect(worktrees).toHaveLength(2);
147
- expect(worktrees).toContainEqual(expect.objectContaining({
148
- instanceId: "abc123",
149
- instanceName: "alice",
150
- branch: "ralph/alice-abc123",
151
- }));
152
- expect(worktrees).toContainEqual(expect.objectContaining({
153
- instanceId: "def456",
154
- instanceName: "bob",
155
- branch: "ralph/bob-def456",
156
- }));
157
- });
158
- });
159
- describe("remove", () => {
160
- it("removes worktree and branch", async () => {
161
- await manager.create({ instanceId: "abc123", instanceName: "alice" });
162
- await manager.remove("abc123", "alice");
163
- // Worktree should be gone
164
- const exists = await manager.exists("abc123", "alice");
165
- expect(exists).toBe(false);
166
- // Branch should be gone
167
- const branches = await git(mainWorkspacePath, ["branch", "-a"]);
168
- expect(branches).not.toContain("ralph/alice-abc123");
169
- });
170
- it("removes worktree but keeps branch when deleteBranch is false", async () => {
171
- await manager.create({ instanceId: "abc123", instanceName: "alice" });
172
- await manager.remove("abc123", "alice", false);
173
- // Worktree should be gone
174
- const exists = await manager.exists("abc123", "alice");
175
- expect(exists).toBe(false);
176
- // Branch should still exist
177
- const branches = await git(mainWorkspacePath, ["branch", "-a"]);
178
- expect(branches).toContain("ralph/alice-abc123");
179
- });
180
- it("succeeds even if worktree doesn't exist", async () => {
181
- // Should not throw
182
- await manager.remove("nonexistent", "fake");
183
- });
184
- });
185
- describe("merge", () => {
186
- it("merges worktree branch to main", async () => {
187
- // Create worktree
188
- const worktree = await manager.create({ instanceId: "abc123", instanceName: "alice" });
189
- // Make a change in the worktree
190
- await writeFile(join(worktree.path, "feature.txt"), "new feature");
191
- await git(worktree.path, ["add", "."]);
192
- await git(worktree.path, ["commit", "-m", "Add feature"]);
193
- // Merge back to main
194
- const result = await manager.merge("abc123", "alice");
195
- expect(result.success).toBe(true);
196
- expect(result.hadConflicts).toBe(false);
197
- // Verify merge happened (we should be back on main with the changes)
198
- const currentBranch = await git(mainWorkspacePath, ["rev-parse", "--abbrev-ref", "HEAD"]);
199
- expect(currentBranch).toMatch(/^(main|master)$/);
200
- });
201
- it("reports conflicts when they occur", async () => {
202
- // Create worktree
203
- const worktree = await manager.create({ instanceId: "abc123", instanceName: "alice" });
204
- // Make conflicting changes in main
205
- await writeFile(join(mainWorkspacePath, "conflict.txt"), "main version");
206
- await git(mainWorkspacePath, ["add", "."]);
207
- await git(mainWorkspacePath, ["commit", "-m", "Add conflict file on main"]);
208
- // Make conflicting changes in worktree
209
- await writeFile(join(worktree.path, "conflict.txt"), "worktree version");
210
- await git(worktree.path, ["add", "."]);
211
- await git(worktree.path, ["commit", "-m", "Add conflict file in worktree"]);
212
- // Attempt merge
213
- const result = await manager.merge("abc123", "alice");
214
- expect(result.success).toBe(false);
215
- expect(result.hadConflicts).toBe(true);
216
- // Clean up merge state
217
- await git(mainWorkspacePath, ["merge", "--abort"]);
218
- });
219
- });
220
- describe("rebase", () => {
221
- it("rebases worktree branch on main", async () => {
222
- // Create worktree
223
- const worktree = await manager.create({ instanceId: "abc123", instanceName: "alice" });
224
- // Make a change in main
225
- await writeFile(join(mainWorkspacePath, "main-change.txt"), "main change");
226
- await git(mainWorkspacePath, ["add", "."]);
227
- await git(mainWorkspacePath, ["commit", "-m", "Add main change"]);
228
- // Make a change in the worktree
229
- await writeFile(join(worktree.path, "feature.txt"), "new feature");
230
- await git(worktree.path, ["add", "."]);
231
- await git(worktree.path, ["commit", "-m", "Add feature"]);
232
- // Rebase worktree on main
233
- const result = await manager.rebase("abc123", "alice");
234
- expect(result.success).toBe(true);
235
- expect(result.hadConflicts).toBe(false);
236
- });
237
- it("reports conflicts when they occur", async () => {
238
- // Create worktree
239
- const worktree = await manager.create({ instanceId: "abc123", instanceName: "alice" });
240
- // Make conflicting changes in main
241
- await writeFile(join(mainWorkspacePath, "conflict.txt"), "main version");
242
- await git(mainWorkspacePath, ["add", "."]);
243
- await git(mainWorkspacePath, ["commit", "-m", "Add conflict file on main"]);
244
- // Make conflicting changes in worktree
245
- await writeFile(join(worktree.path, "conflict.txt"), "worktree version");
246
- await git(worktree.path, ["add", "."]);
247
- await git(worktree.path, ["commit", "-m", "Add conflict file in worktree"]);
248
- // Attempt rebase
249
- const result = await manager.rebase("abc123", "alice");
250
- expect(result.success).toBe(false);
251
- expect(result.hadConflicts).toBe(true);
252
- });
253
- });
254
- describe("prune", () => {
255
- it("prunes stale worktree entries", async () => {
256
- // This mainly verifies the command doesn't error
257
- await manager.prune();
258
- });
259
- });
260
- });
261
- //# sourceMappingURL=WorktreeManager.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorktreeManager.test.js","sourceRoot":"","sources":["../../src/lib/WorktreeManager.test.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Adds a todo item to the todo.md file and commits just that line.
3
- * Inserts the todo into the working directory, stages only that line, and commits.
4
- * Creates the file if it doesn't exist.
5
- */
6
- export declare const addTodo: (
7
- /** The description of the todo item to add */
8
- description: string,
9
- /** The working directory to use (defaults to current directory) */
10
- cwd?: string) => void;
11
- //# sourceMappingURL=addTodo.d.ts.map