@herbcaudill/ralph 1.0.1 → 1.0.2

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 (351) hide show
  1. package/dist/index.js +2401 -6
  2. package/dist/index.js.map +1 -1
  3. package/package.json +9 -8
  4. package/templates/core-prompt.md +3 -3
  5. package/templates/workflow.md +1 -1
  6. package/dist/cli.d.ts +0 -3
  7. package/dist/cli.d.ts.map +0 -1
  8. package/dist/cli.js +0 -102
  9. package/dist/cli.js.map +0 -1
  10. package/dist/components/App.d.ts +0 -17
  11. package/dist/components/App.d.ts.map +0 -1
  12. package/dist/components/App.js +0 -18
  13. package/dist/components/App.js.map +0 -1
  14. package/dist/components/EnhancedTextInput.d.ts +0 -22
  15. package/dist/components/EnhancedTextInput.d.ts.map +0 -1
  16. package/dist/components/EnhancedTextInput.js +0 -130
  17. package/dist/components/EnhancedTextInput.js.map +0 -1
  18. package/dist/components/EnhancedTextInput.test.d.ts +0 -2
  19. package/dist/components/EnhancedTextInput.test.d.ts.map +0 -1
  20. package/dist/components/EnhancedTextInput.test.js +0 -99
  21. package/dist/components/EnhancedTextInput.test.js.map +0 -1
  22. package/dist/components/EventDisplay.d.ts +0 -14
  23. package/dist/components/EventDisplay.d.ts.map +0 -1
  24. package/dist/components/EventDisplay.js +0 -91
  25. package/dist/components/EventDisplay.js.map +0 -1
  26. package/dist/components/EventDisplay.replay.test.d.ts +0 -2
  27. package/dist/components/EventDisplay.replay.test.d.ts.map +0 -1
  28. package/dist/components/EventDisplay.replay.test.js +0 -379
  29. package/dist/components/EventDisplay.replay.test.js.map +0 -1
  30. package/dist/components/EventDisplay.test.d.ts +0 -2
  31. package/dist/components/EventDisplay.test.d.ts.map +0 -1
  32. package/dist/components/EventDisplay.test.js +0 -349
  33. package/dist/components/EventDisplay.test.js.map +0 -1
  34. package/dist/components/FullScreenLayout.d.ts +0 -15
  35. package/dist/components/FullScreenLayout.d.ts.map +0 -1
  36. package/dist/components/FullScreenLayout.js +0 -20
  37. package/dist/components/FullScreenLayout.js.map +0 -1
  38. package/dist/components/Header.d.ts +0 -10
  39. package/dist/components/Header.d.ts.map +0 -1
  40. package/dist/components/Header.js +0 -22
  41. package/dist/components/Header.js.map +0 -1
  42. package/dist/components/Header.test.d.ts +0 -2
  43. package/dist/components/Header.test.d.ts.map +0 -1
  44. package/dist/components/Header.test.js +0 -27
  45. package/dist/components/Header.test.js.map +0 -1
  46. package/dist/components/InitRalph.d.ts +0 -8
  47. package/dist/components/InitRalph.d.ts.map +0 -1
  48. package/dist/components/InitRalph.js +0 -136
  49. package/dist/components/InitRalph.js.map +0 -1
  50. package/dist/components/IterationRunner.d.ts +0 -10
  51. package/dist/components/IterationRunner.d.ts.map +0 -1
  52. package/dist/components/IterationRunner.js +0 -536
  53. package/dist/components/IterationRunner.js.map +0 -1
  54. package/dist/components/IterationRunner.test.d.ts +0 -46
  55. package/dist/components/IterationRunner.test.d.ts.map +0 -1
  56. package/dist/components/IterationRunner.test.js +0 -69
  57. package/dist/components/IterationRunner.test.js.map +0 -1
  58. package/dist/components/IterationRunner.types.d.ts +0 -30
  59. package/dist/components/IterationRunner.types.d.ts.map +0 -1
  60. package/dist/components/IterationRunner.types.js +0 -2
  61. package/dist/components/IterationRunner.types.js.map +0 -1
  62. package/dist/components/JsonOutput.d.ts +0 -13
  63. package/dist/components/JsonOutput.d.ts.map +0 -1
  64. package/dist/components/JsonOutput.js +0 -269
  65. package/dist/components/JsonOutput.js.map +0 -1
  66. package/dist/components/JsonOutput.test.d.ts +0 -2
  67. package/dist/components/JsonOutput.test.d.ts.map +0 -1
  68. package/dist/components/JsonOutput.test.js +0 -39
  69. package/dist/components/JsonOutput.test.js.map +0 -1
  70. package/dist/components/ProgressBar.d.ts +0 -18
  71. package/dist/components/ProgressBar.d.ts.map +0 -1
  72. package/dist/components/ProgressBar.js +0 -30
  73. package/dist/components/ProgressBar.js.map +0 -1
  74. package/dist/components/ProgressBar.test.d.ts +0 -2
  75. package/dist/components/ProgressBar.test.d.ts.map +0 -1
  76. package/dist/components/ProgressBar.test.js +0 -55
  77. package/dist/components/ProgressBar.test.js.map +0 -1
  78. package/dist/components/ReplayLog.d.ts +0 -7
  79. package/dist/components/ReplayLog.d.ts.map +0 -1
  80. package/dist/components/ReplayLog.js +0 -57
  81. package/dist/components/ReplayLog.js.map +0 -1
  82. package/dist/components/StreamingText.d.ts +0 -11
  83. package/dist/components/StreamingText.d.ts.map +0 -1
  84. package/dist/components/StreamingText.js +0 -37
  85. package/dist/components/StreamingText.js.map +0 -1
  86. package/dist/components/StreamingText.test.d.ts +0 -2
  87. package/dist/components/StreamingText.test.d.ts.map +0 -1
  88. package/dist/components/StreamingText.test.js +0 -125
  89. package/dist/components/StreamingText.test.js.map +0 -1
  90. package/dist/components/ToolUse.d.ts +0 -16
  91. package/dist/components/ToolUse.d.ts.map +0 -1
  92. package/dist/components/ToolUse.js +0 -11
  93. package/dist/components/ToolUse.js.map +0 -1
  94. package/dist/components/ToolUse.test.d.ts +0 -2
  95. package/dist/components/ToolUse.test.d.ts.map +0 -1
  96. package/dist/components/ToolUse.test.js +0 -43
  97. package/dist/components/ToolUse.test.js.map +0 -1
  98. package/dist/components/blocksToLines.d.ts +0 -6
  99. package/dist/components/blocksToLines.d.ts.map +0 -1
  100. package/dist/components/blocksToLines.js +0 -15
  101. package/dist/components/blocksToLines.js.map +0 -1
  102. package/dist/components/eventToBlocks.d.ts +0 -22
  103. package/dist/components/eventToBlocks.d.ts.map +0 -1
  104. package/dist/components/eventToBlocks.js +0 -166
  105. package/dist/components/eventToBlocks.js.map +0 -1
  106. package/dist/components/eventToBlocks.test.d.ts +0 -2
  107. package/dist/components/eventToBlocks.test.d.ts.map +0 -1
  108. package/dist/components/eventToBlocks.test.js +0 -466
  109. package/dist/components/eventToBlocks.test.js.map +0 -1
  110. package/dist/components/findNextWordBoundary.d.ts +0 -10
  111. package/dist/components/findNextWordBoundary.d.ts.map +0 -1
  112. package/dist/components/findNextWordBoundary.js +0 -23
  113. package/dist/components/findNextWordBoundary.js.map +0 -1
  114. package/dist/components/findPreviousWordBoundary.d.ts +0 -10
  115. package/dist/components/findPreviousWordBoundary.d.ts.map +0 -1
  116. package/dist/components/findPreviousWordBoundary.js +0 -23
  117. package/dist/components/findPreviousWordBoundary.js.map +0 -1
  118. package/dist/components/processEvents.d.ts +0 -11
  119. package/dist/components/processEvents.d.ts.map +0 -1
  120. package/dist/components/processEvents.js +0 -87
  121. package/dist/components/processEvents.js.map +0 -1
  122. package/dist/components/renderStaticItem.d.ts +0 -7
  123. package/dist/components/renderStaticItem.d.ts.map +0 -1
  124. package/dist/components/renderStaticItem.js +0 -23
  125. package/dist/components/renderStaticItem.js.map +0 -1
  126. package/dist/components/replay.d.ts +0 -5
  127. package/dist/components/replay.d.ts.map +0 -1
  128. package/dist/components/replay.js +0 -49
  129. package/dist/components/replay.js.map +0 -1
  130. package/dist/components/test-helpers/ControlledInput.d.ts +0 -14
  131. package/dist/components/test-helpers/ControlledInput.d.ts.map +0 -1
  132. package/dist/components/test-helpers/ControlledInput.js +0 -15
  133. package/dist/components/test-helpers/ControlledInput.js.map +0 -1
  134. package/dist/components/useContentHeight.d.ts +0 -9
  135. package/dist/components/useContentHeight.d.ts.map +0 -1
  136. package/dist/components/useContentHeight.js +0 -16
  137. package/dist/components/useContentHeight.js.map +0 -1
  138. package/dist/index.d.ts +0 -3
  139. package/dist/index.d.ts.map +0 -1
  140. package/dist/lib/MessageQueue.d.ts +0 -33
  141. package/dist/lib/MessageQueue.d.ts.map +0 -1
  142. package/dist/lib/MessageQueue.js +0 -96
  143. package/dist/lib/MessageQueue.js.map +0 -1
  144. package/dist/lib/MessageQueue.test.d.ts +0 -2
  145. package/dist/lib/MessageQueue.test.d.ts.map +0 -1
  146. package/dist/lib/MessageQueue.test.js +0 -224
  147. package/dist/lib/MessageQueue.test.js.map +0 -1
  148. package/dist/lib/StdinCommandHandler.d.ts +0 -48
  149. package/dist/lib/StdinCommandHandler.d.ts.map +0 -1
  150. package/dist/lib/StdinCommandHandler.js +0 -95
  151. package/dist/lib/StdinCommandHandler.js.map +0 -1
  152. package/dist/lib/StdinCommandHandler.test.d.ts +0 -2
  153. package/dist/lib/StdinCommandHandler.test.d.ts.map +0 -1
  154. package/dist/lib/StdinCommandHandler.test.js +0 -93
  155. package/dist/lib/StdinCommandHandler.test.js.map +0 -1
  156. package/dist/lib/WorktreeManager.d.ts +0 -114
  157. package/dist/lib/WorktreeManager.d.ts.map +0 -1
  158. package/dist/lib/WorktreeManager.js +0 -350
  159. package/dist/lib/WorktreeManager.js.map +0 -1
  160. package/dist/lib/WorktreeManager.test.d.ts +0 -2
  161. package/dist/lib/WorktreeManager.test.d.ts.map +0 -1
  162. package/dist/lib/WorktreeManager.test.js +0 -261
  163. package/dist/lib/WorktreeManager.test.js.map +0 -1
  164. package/dist/lib/addTodo.d.ts +0 -11
  165. package/dist/lib/addTodo.d.ts.map +0 -1
  166. package/dist/lib/addTodo.js +0 -51
  167. package/dist/lib/addTodo.js.map +0 -1
  168. package/dist/lib/beadsClient.d.ts +0 -46
  169. package/dist/lib/beadsClient.d.ts.map +0 -1
  170. package/dist/lib/beadsClient.js +0 -172
  171. package/dist/lib/beadsClient.js.map +0 -1
  172. package/dist/lib/captureBeadsSnapshot.d.ts +0 -4
  173. package/dist/lib/captureBeadsSnapshot.d.ts.map +0 -1
  174. package/dist/lib/captureBeadsSnapshot.js +0 -24
  175. package/dist/lib/captureBeadsSnapshot.js.map +0 -1
  176. package/dist/lib/captureStartupSnapshot.d.ts +0 -10
  177. package/dist/lib/captureStartupSnapshot.d.ts.map +0 -1
  178. package/dist/lib/captureStartupSnapshot.js +0 -29
  179. package/dist/lib/captureStartupSnapshot.js.map +0 -1
  180. package/dist/lib/captureTodoSnapshot.d.ts +0 -4
  181. package/dist/lib/captureTodoSnapshot.d.ts.map +0 -1
  182. package/dist/lib/captureTodoSnapshot.js +0 -24
  183. package/dist/lib/captureTodoSnapshot.js.map +0 -1
  184. package/dist/lib/copyTemplates.d.ts +0 -22
  185. package/dist/lib/copyTemplates.d.ts.map +0 -1
  186. package/dist/lib/copyTemplates.js +0 -32
  187. package/dist/lib/copyTemplates.js.map +0 -1
  188. package/dist/lib/createStdinCommandHandler.d.ts +0 -28
  189. package/dist/lib/createStdinCommandHandler.d.ts.map +0 -1
  190. package/dist/lib/createStdinCommandHandler.js +0 -67
  191. package/dist/lib/createStdinCommandHandler.js.map +0 -1
  192. package/dist/lib/createUserMessage.d.ts +0 -6
  193. package/dist/lib/createUserMessage.d.ts.map +0 -1
  194. package/dist/lib/createUserMessage.js +0 -13
  195. package/dist/lib/createUserMessage.js.map +0 -1
  196. package/dist/lib/debug.d.ts +0 -19
  197. package/dist/lib/debug.d.ts.map +0 -1
  198. package/dist/lib/debug.js +0 -54
  199. package/dist/lib/debug.js.map +0 -1
  200. package/dist/lib/findMaxLogNumber.d.ts +0 -6
  201. package/dist/lib/findMaxLogNumber.d.ts.map +0 -1
  202. package/dist/lib/findMaxLogNumber.js +0 -26
  203. package/dist/lib/findMaxLogNumber.js.map +0 -1
  204. package/dist/lib/findMaxLogNumber.test.d.ts +0 -2
  205. package/dist/lib/findMaxLogNumber.test.d.ts.map +0 -1
  206. package/dist/lib/findMaxLogNumber.test.js +0 -39
  207. package/dist/lib/findMaxLogNumber.test.js.map +0 -1
  208. package/dist/lib/formatContentBlock.d.ts +0 -6
  209. package/dist/lib/formatContentBlock.d.ts.map +0 -1
  210. package/dist/lib/formatContentBlock.js +0 -18
  211. package/dist/lib/formatContentBlock.js.map +0 -1
  212. package/dist/lib/formatIterationHeader.d.ts +0 -5
  213. package/dist/lib/formatIterationHeader.d.ts.map +0 -1
  214. package/dist/lib/formatIterationHeader.js +0 -8
  215. package/dist/lib/formatIterationHeader.js.map +0 -1
  216. package/dist/lib/formatText.d.ts +0 -5
  217. package/dist/lib/formatText.d.ts.map +0 -1
  218. package/dist/lib/formatText.js +0 -33
  219. package/dist/lib/formatText.js.map +0 -1
  220. package/dist/lib/formatToolUse.d.ts +0 -7
  221. package/dist/lib/formatToolUse.d.ts.map +0 -1
  222. package/dist/lib/formatToolUse.js +0 -14
  223. package/dist/lib/formatToolUse.js.map +0 -1
  224. package/dist/lib/formatUserMessage.d.ts +0 -5
  225. package/dist/lib/formatUserMessage.d.ts.map +0 -1
  226. package/dist/lib/formatUserMessage.js +0 -8
  227. package/dist/lib/formatUserMessage.js.map +0 -1
  228. package/dist/lib/getBaseCwd.d.ts +0 -6
  229. package/dist/lib/getBaseCwd.d.ts.map +0 -1
  230. package/dist/lib/getBaseCwd.js +0 -6
  231. package/dist/lib/getBaseCwd.js.map +0 -1
  232. package/dist/lib/getBeadsProgress.d.ts +0 -8
  233. package/dist/lib/getBeadsProgress.d.ts.map +0 -1
  234. package/dist/lib/getBeadsProgress.js +0 -35
  235. package/dist/lib/getBeadsProgress.js.map +0 -1
  236. package/dist/lib/getClaudeVersion.d.ts +0 -6
  237. package/dist/lib/getClaudeVersion.d.ts.map +0 -1
  238. package/dist/lib/getClaudeVersion.js +0 -21
  239. package/dist/lib/getClaudeVersion.js.map +0 -1
  240. package/dist/lib/getClaudeVersion.test.d.ts +0 -2
  241. package/dist/lib/getClaudeVersion.test.d.ts.map +0 -1
  242. package/dist/lib/getClaudeVersion.test.js +0 -39
  243. package/dist/lib/getClaudeVersion.test.js.map +0 -1
  244. package/dist/lib/getDefaultIterations.d.ts +0 -6
  245. package/dist/lib/getDefaultIterations.d.ts.map +0 -1
  246. package/dist/lib/getDefaultIterations.js +0 -14
  247. package/dist/lib/getDefaultIterations.js.map +0 -1
  248. package/dist/lib/getDefaultIterations.test.d.ts +0 -2
  249. package/dist/lib/getDefaultIterations.test.d.ts.map +0 -1
  250. package/dist/lib/getDefaultIterations.test.js +0 -39
  251. package/dist/lib/getDefaultIterations.test.js.map +0 -1
  252. package/dist/lib/getLatestLogFile.d.ts +0 -6
  253. package/dist/lib/getLatestLogFile.d.ts.map +0 -1
  254. package/dist/lib/getLatestLogFile.js +0 -15
  255. package/dist/lib/getLatestLogFile.js.map +0 -1
  256. package/dist/lib/getNextLogFile.d.ts +0 -7
  257. package/dist/lib/getNextLogFile.d.ts.map +0 -1
  258. package/dist/lib/getNextLogFile.js +0 -18
  259. package/dist/lib/getNextLogFile.js.map +0 -1
  260. package/dist/lib/getNextLogFile.test.d.ts +0 -2
  261. package/dist/lib/getNextLogFile.test.d.ts.map +0 -1
  262. package/dist/lib/getNextLogFile.test.js +0 -66
  263. package/dist/lib/getNextLogFile.test.js.map +0 -1
  264. package/dist/lib/getOpenIssueCount.d.ts +0 -6
  265. package/dist/lib/getOpenIssueCount.d.ts.map +0 -1
  266. package/dist/lib/getOpenIssueCount.js +0 -19
  267. package/dist/lib/getOpenIssueCount.js.map +0 -1
  268. package/dist/lib/getOpenIssueCount.test.d.ts +0 -2
  269. package/dist/lib/getOpenIssueCount.test.d.ts.map +0 -1
  270. package/dist/lib/getOpenIssueCount.test.js +0 -31
  271. package/dist/lib/getOpenIssueCount.test.js.map +0 -1
  272. package/dist/lib/getProgress.d.ts +0 -14
  273. package/dist/lib/getProgress.d.ts.map +0 -1
  274. package/dist/lib/getProgress.js +0 -30
  275. package/dist/lib/getProgress.js.map +0 -1
  276. package/dist/lib/getProgress.test.d.ts +0 -2
  277. package/dist/lib/getProgress.test.d.ts.map +0 -1
  278. package/dist/lib/getProgress.test.js +0 -218
  279. package/dist/lib/getProgress.test.js.map +0 -1
  280. package/dist/lib/getPromptContent.d.ts +0 -8
  281. package/dist/lib/getPromptContent.d.ts.map +0 -1
  282. package/dist/lib/getPromptContent.js +0 -31
  283. package/dist/lib/getPromptContent.js.map +0 -1
  284. package/dist/lib/getTerminalSize.d.ts +0 -8
  285. package/dist/lib/getTerminalSize.d.ts.map +0 -1
  286. package/dist/lib/getTerminalSize.js +0 -10
  287. package/dist/lib/getTerminalSize.js.map +0 -1
  288. package/dist/lib/getTodoProgress.d.ts +0 -4
  289. package/dist/lib/getTodoProgress.d.ts.map +0 -1
  290. package/dist/lib/getTodoProgress.js +0 -22
  291. package/dist/lib/getTodoProgress.js.map +0 -1
  292. package/dist/lib/insertTodo.d.ts +0 -7
  293. package/dist/lib/insertTodo.d.ts.map +0 -1
  294. package/dist/lib/insertTodo.js +0 -22
  295. package/dist/lib/insertTodo.js.map +0 -1
  296. package/dist/lib/outputEvent.d.ts +0 -5
  297. package/dist/lib/outputEvent.d.ts.map +0 -1
  298. package/dist/lib/outputEvent.js +0 -7
  299. package/dist/lib/outputEvent.js.map +0 -1
  300. package/dist/lib/parseStdinCommand.d.ts +0 -25
  301. package/dist/lib/parseStdinCommand.d.ts.map +0 -1
  302. package/dist/lib/parseStdinCommand.js +0 -43
  303. package/dist/lib/parseStdinCommand.js.map +0 -1
  304. package/dist/lib/parseStdinCommand.test.d.ts +0 -2
  305. package/dist/lib/parseStdinCommand.test.d.ts.map +0 -1
  306. package/dist/lib/parseStdinCommand.test.js +0 -93
  307. package/dist/lib/parseStdinCommand.test.js.map +0 -1
  308. package/dist/lib/parseTaskLifecycle.d.ts +0 -18
  309. package/dist/lib/parseTaskLifecycle.d.ts.map +0 -1
  310. package/dist/lib/parseTaskLifecycle.js +0 -30
  311. package/dist/lib/parseTaskLifecycle.js.map +0 -1
  312. package/dist/lib/parseTaskLifecycle.test.d.ts +0 -2
  313. package/dist/lib/parseTaskLifecycle.test.d.ts.map +0 -1
  314. package/dist/lib/parseTaskLifecycle.test.js +0 -122
  315. package/dist/lib/parseTaskLifecycle.test.js.map +0 -1
  316. package/dist/lib/parseWorktreeFromBranch.d.ts +0 -13
  317. package/dist/lib/parseWorktreeFromBranch.d.ts.map +0 -1
  318. package/dist/lib/parseWorktreeFromBranch.js +0 -19
  319. package/dist/lib/parseWorktreeFromBranch.js.map +0 -1
  320. package/dist/lib/processEvents.d.ts +0 -12
  321. package/dist/lib/processEvents.d.ts.map +0 -1
  322. package/dist/lib/processEvents.js +0 -113
  323. package/dist/lib/processEvents.js.map +0 -1
  324. package/dist/lib/rel.d.ts +0 -8
  325. package/dist/lib/rel.d.ts.map +0 -1
  326. package/dist/lib/rel.js +0 -19
  327. package/dist/lib/rel.js.map +0 -1
  328. package/dist/lib/rel.test.d.ts +0 -2
  329. package/dist/lib/rel.test.d.ts.map +0 -1
  330. package/dist/lib/rel.test.js +0 -51
  331. package/dist/lib/rel.test.js.map +0 -1
  332. package/dist/lib/sdkMessageToEvent.d.ts +0 -6
  333. package/dist/lib/sdkMessageToEvent.d.ts.map +0 -1
  334. package/dist/lib/sdkMessageToEvent.js +0 -12
  335. package/dist/lib/sdkMessageToEvent.js.map +0 -1
  336. package/dist/lib/shortenTempPaths.d.ts +0 -8
  337. package/dist/lib/shortenTempPaths.d.ts.map +0 -1
  338. package/dist/lib/shortenTempPaths.js +0 -12
  339. package/dist/lib/shortenTempPaths.js.map +0 -1
  340. package/dist/lib/shortenTempPaths.test.d.ts +0 -2
  341. package/dist/lib/shortenTempPaths.test.d.ts.map +0 -1
  342. package/dist/lib/shortenTempPaths.test.js +0 -46
  343. package/dist/lib/shortenTempPaths.test.js.map +0 -1
  344. package/dist/lib/types.d.ts +0 -19
  345. package/dist/lib/types.d.ts.map +0 -1
  346. package/dist/lib/types.js +0 -2
  347. package/dist/lib/types.js.map +0 -1
  348. package/dist/lib/useTerminalSize.d.ts +0 -6
  349. package/dist/lib/useTerminalSize.d.ts.map +0 -1
  350. package/dist/lib/useTerminalSize.js +0 -19
  351. package/dist/lib/useTerminalSize.js.map +0 -1
@@ -1,224 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { MessageQueue, createUserMessage } from "./MessageQueue.js";
3
- describe("MessageQueue", () => {
4
- it("should yield messages that were pushed before iteration started", async () => {
5
- const queue = new MessageQueue();
6
- const msg1 = createUserMessage("hello");
7
- const msg2 = createUserMessage("world");
8
- queue.push(msg1);
9
- queue.push(msg2);
10
- queue.close();
11
- const messages = [];
12
- for await (const msg of queue) {
13
- messages.push(msg);
14
- }
15
- expect(messages).toEqual([msg1, msg2]);
16
- });
17
- it("should yield messages pushed during iteration", async () => {
18
- const queue = new MessageQueue();
19
- const msg1 = createUserMessage("first");
20
- const msg2 = createUserMessage("second");
21
- // Start iteration
22
- const iterator = queue[Symbol.asyncIterator]();
23
- // Push first message while waiting
24
- const promise1 = iterator.next();
25
- queue.push(msg1);
26
- const result1 = await promise1;
27
- expect(result1.value).toEqual(msg1);
28
- expect(result1.done).toBe(false);
29
- // Push second message
30
- const promise2 = iterator.next();
31
- queue.push(msg2);
32
- const result2 = await promise2;
33
- expect(result2.value).toEqual(msg2);
34
- expect(result2.done).toBe(false);
35
- // Close and verify done
36
- queue.close();
37
- const result3 = await iterator.next();
38
- expect(result3.done).toBe(true);
39
- });
40
- it("should not yield messages after close", async () => {
41
- const queue = new MessageQueue();
42
- const msg = createUserMessage("test");
43
- queue.push(msg);
44
- queue.close();
45
- // Pushing after close should be ignored
46
- queue.push(createUserMessage("ignored"));
47
- const messages = [];
48
- for await (const m of queue) {
49
- messages.push(m);
50
- }
51
- expect(messages).toEqual([msg]);
52
- });
53
- it("should resolve pending iterators when closed", async () => {
54
- const queue = new MessageQueue();
55
- // Start waiting for a message that will never come
56
- const iterator = queue[Symbol.asyncIterator]();
57
- const promise = iterator.next();
58
- // Close should resolve the pending promise
59
- queue.close();
60
- const result = await promise;
61
- expect(result.done).toBe(true);
62
- });
63
- it("should be idempotent when close() is called multiple times", async () => {
64
- const queue = new MessageQueue();
65
- const msg = createUserMessage("test");
66
- queue.push(msg);
67
- const iterator = queue[Symbol.asyncIterator]();
68
- const result1 = await iterator.next();
69
- expect(result1.value).toEqual(msg);
70
- // Close multiple times - should not throw or cause issues
71
- queue.close();
72
- queue.close();
73
- queue.close();
74
- // Iterator should still work correctly
75
- const result2 = await iterator.next();
76
- expect(result2.done).toBe(true);
77
- });
78
- });
79
- describe("createUserMessage", () => {
80
- it("should create a valid SDK user message", () => {
81
- const message = createUserMessage("Hello Claude!");
82
- expect(message).toEqual({
83
- type: "user",
84
- session_id: "",
85
- message: {
86
- role: "user",
87
- content: [{ type: "text", text: "Hello Claude!" }],
88
- },
89
- parent_tool_use_id: null,
90
- });
91
- });
92
- });
93
- describe("MessageQueue hang scenarios", () => {
94
- /**
95
- * This test documents the hang behavior that can occur when:
96
- * 1. The SDK iterates the MessageQueue via streamInput()
97
- * 2. The MessageQueue is empty and not closed
98
- * 3. The SDK calls next() expecting more messages
99
- *
100
- * In this case, next() returns a Promise that never resolves
101
- * until close() is called. If close() is only called after the
102
- * SDK iteration completes, we have a deadlock.
103
- */
104
- it("should hang if next() is called on empty unclosed queue", async () => {
105
- const queue = new MessageQueue();
106
- const msg = createUserMessage("test");
107
- queue.push(msg);
108
- const iterator = queue[Symbol.asyncIterator]();
109
- // First next() returns the queued message
110
- const result1 = await iterator.next();
111
- expect(result1.done).toBe(false);
112
- expect(result1.value).toEqual(msg);
113
- // Second next() on empty queue - this will hang until close() is called
114
- // Use a timeout to demonstrate the hang behavior
115
- const nextPromise = iterator.next();
116
- let resolved = false;
117
- nextPromise.then(() => {
118
- resolved = true;
119
- });
120
- // Wait a bit - the promise should NOT resolve
121
- await new Promise(resolve => setTimeout(resolve, 50));
122
- expect(resolved).toBe(false);
123
- // Now close the queue - this should resolve the pending promise
124
- queue.close();
125
- // Wait for the promise to resolve
126
- const result2 = await nextPromise;
127
- expect(result2.done).toBe(true);
128
- expect(resolved).toBe(true);
129
- });
130
- it("should allow timeout-based iteration completion", async () => {
131
- const queue = new MessageQueue();
132
- const msg = createUserMessage("test");
133
- queue.push(msg);
134
- // Use Promise.race to implement timeout behavior
135
- const iterator = queue[Symbol.asyncIterator]();
136
- const result1 = await iterator.next();
137
- expect(result1.value).toEqual(msg);
138
- // Create a "timeout" mechanism
139
- const timeoutPromise = new Promise(resolve => setTimeout(() => resolve({ done: true, value: undefined }), 100));
140
- // Race between next message and timeout
141
- const result = await Promise.race([iterator.next(), timeoutPromise]);
142
- expect(result.done).toBe(true);
143
- // Clean up
144
- queue.close();
145
- });
146
- it("should close queue when abort signal is triggered", async () => {
147
- const queue = new MessageQueue();
148
- const msg = createUserMessage("test");
149
- queue.push(msg);
150
- const abortController = new AbortController();
151
- // Set up abort listener to close queue
152
- abortController.signal.addEventListener("abort", () => {
153
- queue.close();
154
- });
155
- const iterator = queue[Symbol.asyncIterator]();
156
- // Get the first message
157
- const result1 = await iterator.next();
158
- expect(result1.value).toEqual(msg);
159
- // Start waiting for next (which would hang)
160
- const nextPromise = iterator.next();
161
- let resolved = false;
162
- nextPromise.then(() => {
163
- resolved = true;
164
- });
165
- // Abort should close the queue and resolve pending iterators
166
- abortController.abort();
167
- const result2 = await nextPromise;
168
- expect(result2.done).toBe(true);
169
- expect(resolved).toBe(true);
170
- });
171
- it("should work with AbortSignal.timeout pattern", async () => {
172
- const queue = new MessageQueue();
173
- const msg = createUserMessage("test");
174
- queue.push(msg);
175
- // Create an abort signal that times out after 50ms
176
- const signal = AbortSignal.timeout(50);
177
- // Set up abort listener to close queue
178
- signal.addEventListener("abort", () => {
179
- queue.close();
180
- });
181
- const iterator = queue[Symbol.asyncIterator]();
182
- // Get the first message
183
- const result1 = await iterator.next();
184
- expect(result1.value).toEqual(msg);
185
- // Start waiting for next (which would hang without timeout)
186
- const result2 = await iterator.next();
187
- // The timeout should have triggered, closing the queue
188
- expect(result2.done).toBe(true);
189
- });
190
- it("should handle multiple pending resolvers with abort", async () => {
191
- const queue = new MessageQueue();
192
- const abortController = new AbortController();
193
- abortController.signal.addEventListener("abort", () => {
194
- queue.close();
195
- });
196
- const iterator = queue[Symbol.asyncIterator]();
197
- // Start multiple pending next() calls
198
- const promise1 = iterator.next();
199
- const promise2 = iterator.next();
200
- const promise3 = iterator.next();
201
- // All should be pending
202
- let resolved1 = false, resolved2 = false, resolved3 = false;
203
- promise1.then(() => {
204
- resolved1 = true;
205
- });
206
- promise2.then(() => {
207
- resolved2 = true;
208
- });
209
- promise3.then(() => {
210
- resolved3 = true;
211
- });
212
- await new Promise(resolve => setTimeout(resolve, 10));
213
- expect(resolved1).toBe(false);
214
- expect(resolved2).toBe(false);
215
- expect(resolved3).toBe(false);
216
- // Abort should resolve all pending promises
217
- abortController.abort();
218
- const [result1, result2, result3] = await Promise.all([promise1, promise2, promise3]);
219
- expect(result1.done).toBe(true);
220
- expect(result2.done).toBe(true);
221
- expect(result3.done).toBe(true);
222
- });
223
- });
224
- //# sourceMappingURL=MessageQueue.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MessageQueue.test.js","sourceRoot":"","sources":["../../src/lib/MessageQueue.test.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- import { MessageQueue } from "./MessageQueue.js"
2
- /**
3
- * Stdin command types:
4
- * - {"type": "message", "text": "..."} - Send a message to Claude
5
- * - {"type": "stop"} - Request graceful stop after current iteration
6
- * - {"type": "pause"} - Pause after current iteration completes
7
- * - {"type": "resume"} - Resume from paused state
8
- */
9
- export type StdinCommand =
10
- | {
11
- type: "message"
12
- text: string
13
- }
14
- | {
15
- type: "stop"
16
- }
17
- | {
18
- type: "pause"
19
- }
20
- | {
21
- type: "resume"
22
- }
23
- /**
24
- * Parse a JSON string into a StdinCommand.
25
- * Returns null if parsing fails or the command is invalid.
26
- */
27
- export declare const parseStdinCommand: (line: string) => StdinCommand | null
28
- export type StdinCommandHandlerOptions = {
29
- messageQueue: MessageQueue | null
30
- onStop: () => void
31
- onPause?: () => void
32
- onResume?: () => void
33
- onMessage?: (text: string) => void
34
- }
35
- /**
36
- * Creates a stdin command handler that reads JSON commands from stdin.
37
- * Returns a cleanup function to stop reading.
38
- *
39
- * Commands:
40
- * - {"type": "message", "text": "..."} - Send a message to Claude
41
- * - {"type": "stop"} - Request graceful stop after current iteration
42
- * - {"type": "pause"} - Pause after current iteration completes
43
- * - {"type": "resume"} - Resume from paused state
44
- */
45
- export declare const createStdinCommandHandler: (
46
- getOptions: () => StdinCommandHandlerOptions,
47
- ) => () => void
48
- //# sourceMappingURL=StdinCommandHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StdinCommandHandler.d.ts","sourceRoot":"","sources":["../../src/lib/StdinCommandHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAqB,MAAM,mBAAmB,CAAA;AAKnE;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAEtB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,YAAY,GAAG,IAsC/D,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAA;IACjC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,GACpC,YAAY,MAAM,0BAA0B,KAC3C,CAAC,MAAM,IAAI,CAkDb,CAAA"}
@@ -1,95 +0,0 @@
1
- import { createDebugLogger } from "./debug.js"
2
- import { createUserMessage } from "./MessageQueue.js"
3
- import { createInterface } from "readline"
4
- const log = createDebugLogger("stdin-command")
5
- /**
6
- * Parse a JSON string into a StdinCommand.
7
- * Returns null if parsing fails or the command is invalid.
8
- */
9
- export const parseStdinCommand = line => {
10
- const trimmed = line.trim()
11
- if (!trimmed) return null
12
- try {
13
- const parsed = JSON.parse(trimmed)
14
- if (typeof parsed !== "object" || parsed === null) {
15
- log(`Invalid command - not an object: ${trimmed}`)
16
- return null
17
- }
18
- if (parsed.type === "message") {
19
- if (typeof parsed.text !== "string") {
20
- log(`Invalid message command - missing or invalid text: ${trimmed}`)
21
- return null
22
- }
23
- return { type: "message", text: parsed.text }
24
- }
25
- if (parsed.type === "stop") {
26
- return { type: "stop" }
27
- }
28
- if (parsed.type === "pause") {
29
- return { type: "pause" }
30
- }
31
- if (parsed.type === "resume") {
32
- return { type: "resume" }
33
- }
34
- log(`Unknown command type: ${parsed.type}`)
35
- return null
36
- } catch (err) {
37
- log(`Failed to parse command: ${err instanceof Error ? err.message : String(err)}`)
38
- return null
39
- }
40
- }
41
- /**
42
- * Creates a stdin command handler that reads JSON commands from stdin.
43
- * Returns a cleanup function to stop reading.
44
- *
45
- * Commands:
46
- * - {"type": "message", "text": "..."} - Send a message to Claude
47
- * - {"type": "stop"} - Request graceful stop after current iteration
48
- * - {"type": "pause"} - Pause after current iteration completes
49
- * - {"type": "resume"} - Resume from paused state
50
- */
51
- export const createStdinCommandHandler = getOptions => {
52
- // Don't set up stdin handler if stdin is a TTY (interactive mode handles input differently)
53
- // This handler is for piped input in JSON mode
54
- if (process.stdin.isTTY) {
55
- log(`stdin is TTY - skipping stdin command handler`)
56
- return () => {}
57
- }
58
- log(`Setting up stdin command handler`)
59
- const rl = createInterface({
60
- input: process.stdin,
61
- terminal: false,
62
- })
63
- const lineHandler = line => {
64
- const command = parseStdinCommand(line)
65
- if (!command) return
66
- const options = getOptions()
67
- log(`Received command: ${command.type}`)
68
- if (command.type === "message") {
69
- if (options.messageQueue) {
70
- const userMessage = createUserMessage(command.text)
71
- options.messageQueue.push(userMessage)
72
- log(`Pushed message to queue: ${command.text.slice(0, 50)}...`)
73
- options.onMessage?.(command.text)
74
- } else {
75
- log(`Cannot send message - no active message queue`)
76
- }
77
- } else if (command.type === "stop") {
78
- log(`Stop command received`)
79
- options.onStop()
80
- } else if (command.type === "pause") {
81
- log(`Pause command received`)
82
- options.onPause?.()
83
- } else if (command.type === "resume") {
84
- log(`Resume command received`)
85
- options.onResume?.()
86
- }
87
- }
88
- rl.on("line", lineHandler)
89
- return () => {
90
- log(`Cleaning up stdin command handler`)
91
- rl.off("line", lineHandler)
92
- rl.close()
93
- }
94
- }
95
- //# sourceMappingURL=StdinCommandHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StdinCommandHandler.js","sourceRoot":"","sources":["../../src/lib/StdinCommandHandler.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {}
2
- //# sourceMappingURL=StdinCommandHandler.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StdinCommandHandler.test.d.ts","sourceRoot":"","sources":["../../src/lib/StdinCommandHandler.test.ts"],"names":[],"mappings":""}
@@ -1,93 +0,0 @@
1
- import { describe, it, expect } from "vitest"
2
- import { parseStdinCommand } from "./StdinCommandHandler.js"
3
- describe("parseStdinCommand", () => {
4
- describe("message command", () => {
5
- it("parses valid message command", () => {
6
- const result = parseStdinCommand('{"type": "message", "text": "hello world"}')
7
- expect(result).toEqual({ type: "message", text: "hello world" })
8
- })
9
- it("handles message with special characters", () => {
10
- const result = parseStdinCommand('{"type": "message", "text": "line1\\nline2"}')
11
- expect(result).toEqual({ type: "message", text: "line1\nline2" })
12
- })
13
- it("handles empty message text", () => {
14
- const result = parseStdinCommand('{"type": "message", "text": ""}')
15
- expect(result).toEqual({ type: "message", text: "" })
16
- })
17
- it("returns null for message without text field", () => {
18
- const result = parseStdinCommand('{"type": "message"}')
19
- expect(result).toBeNull()
20
- })
21
- it("returns null for message with non-string text", () => {
22
- const result = parseStdinCommand('{"type": "message", "text": 123}')
23
- expect(result).toBeNull()
24
- })
25
- })
26
- describe("stop command", () => {
27
- it("parses valid stop command", () => {
28
- const result = parseStdinCommand('{"type": "stop"}')
29
- expect(result).toEqual({ type: "stop" })
30
- })
31
- it("ignores extra fields on stop command", () => {
32
- const result = parseStdinCommand('{"type": "stop", "extra": "ignored"}')
33
- expect(result).toEqual({ type: "stop" })
34
- })
35
- })
36
- describe("pause command", () => {
37
- it("parses valid pause command", () => {
38
- const result = parseStdinCommand('{"type": "pause"}')
39
- expect(result).toEqual({ type: "pause" })
40
- })
41
- it("ignores extra fields on pause command", () => {
42
- const result = parseStdinCommand('{"type": "pause", "extra": "ignored"}')
43
- expect(result).toEqual({ type: "pause" })
44
- })
45
- })
46
- describe("resume command", () => {
47
- it("parses valid resume command", () => {
48
- const result = parseStdinCommand('{"type": "resume"}')
49
- expect(result).toEqual({ type: "resume" })
50
- })
51
- it("ignores extra fields on resume command", () => {
52
- const result = parseStdinCommand('{"type": "resume", "extra": "ignored"}')
53
- expect(result).toEqual({ type: "resume" })
54
- })
55
- })
56
- describe("invalid input", () => {
57
- it("returns null for empty string", () => {
58
- const result = parseStdinCommand("")
59
- expect(result).toBeNull()
60
- })
61
- it("returns null for whitespace only", () => {
62
- const result = parseStdinCommand(" \n\t ")
63
- expect(result).toBeNull()
64
- })
65
- it("returns null for invalid JSON", () => {
66
- const result = parseStdinCommand("not json")
67
- expect(result).toBeNull()
68
- })
69
- it("returns null for array instead of object", () => {
70
- const result = parseStdinCommand('["type", "message"]')
71
- expect(result).toBeNull()
72
- })
73
- it("returns null for null", () => {
74
- const result = parseStdinCommand("null")
75
- expect(result).toBeNull()
76
- })
77
- it("returns null for primitive value", () => {
78
- const result = parseStdinCommand("123")
79
- expect(result).toBeNull()
80
- })
81
- it("returns null for unknown command type", () => {
82
- const result = parseStdinCommand('{"type": "unknown"}')
83
- expect(result).toBeNull()
84
- })
85
- })
86
- describe("whitespace handling", () => {
87
- it("trims leading/trailing whitespace", () => {
88
- const result = parseStdinCommand(' {"type": "stop"} ')
89
- expect(result).toEqual({ type: "stop" })
90
- })
91
- })
92
- })
93
- //# sourceMappingURL=StdinCommandHandler.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StdinCommandHandler.test.js","sourceRoot":"","sources":["../../src/lib/StdinCommandHandler.test.ts"],"names":[],"mappings":"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"}
@@ -1,114 +0,0 @@
1
- /**
2
- * Manages git worktrees for concurrent Ralph instances.
3
- *
4
- * Each Ralph instance gets its own worktree in a sibling folder,
5
- * allowing parallel work without conflicts:
6
- *
7
- * ```
8
- * project/ # Main worktree (main branch)
9
- * project-worktrees/ # Sibling folder
10
- * alice-abc123/ # Alice's worktree (branch: ralph/alice-abc123)
11
- * bob-def456/ # Bob's worktree (branch: ralph/bob-def456)
12
- * ```
13
- */
14
- export declare class WorktreeManager {
15
- private mainWorkspacePath;
16
- private worktreesBasePath;
17
- constructor(mainWorkspacePath: string);
18
- /**
19
- * Get the path to the worktrees base directory.
20
- */
21
- getWorktreesBasePath(): string;
22
- /**
23
- * Get the path for a specific instance's worktree.
24
- */
25
- getWorktreePath(instanceId: string, instanceName: string): string;
26
- /**
27
- * Get the branch name for a specific instance.
28
- */
29
- getBranchName(instanceId: string, instanceName: string): string;
30
- /**
31
- * Create a new worktree for an instance.
32
- */
33
- create(
34
- /** Instance ID and name */
35
- options: CreateWorktreeOptions): Promise<WorktreeInfo>;
36
- /**
37
- * Merge the worktree branch back to main.
38
- */
39
- merge(
40
- /** The instance ID */
41
- instanceId: string,
42
- /** The instance name */
43
- instanceName: string): Promise<MergeResult>;
44
- /**
45
- * Rebase the worktree branch on top of main.
46
- */
47
- rebase(
48
- /** The instance ID */
49
- instanceId: string,
50
- /** The instance name */
51
- instanceName: string): Promise<MergeResult>;
52
- /**
53
- * Remove a worktree and optionally delete its branch.
54
- */
55
- remove(
56
- /** The instance ID */
57
- instanceId: string,
58
- /** The instance name */
59
- instanceName: string,
60
- /** Whether to delete the branch (default: true) */
61
- deleteBranch?: boolean): Promise<void>;
62
- /**
63
- * List all worktrees managed by this WorktreeManager.
64
- */
65
- list(): Promise<WorktreeInfo[]>;
66
- /**
67
- * Check if a worktree exists for an instance.
68
- */
69
- exists(
70
- /** The instance ID */
71
- instanceId: string,
72
- /** The instance name */
73
- instanceName: string): Promise<boolean>;
74
- /**
75
- * Prune worktrees that no longer exist on disk.
76
- */
77
- prune(): Promise<void>;
78
- /**
79
- * Add a worktree to the list if it's a valid ralph worktree.
80
- */
81
- private addWorktreeIfValid;
82
- /**
83
- * Get the main branch name (main or master).
84
- */
85
- private getMainBranch;
86
- /**
87
- * Ensure the worktrees base directory exists.
88
- */
89
- private ensureWorktreesDirectory;
90
- /**
91
- * Execute a git command in the main workspace.
92
- */
93
- private git;
94
- /**
95
- * Execute a git command in a specific directory.
96
- */
97
- private gitInDir;
98
- }
99
- export interface WorktreeInfo {
100
- path: string;
101
- branch: string;
102
- instanceId: string;
103
- instanceName: string;
104
- }
105
- export interface CreateWorktreeOptions {
106
- instanceId: string;
107
- instanceName: string;
108
- }
109
- export interface MergeResult {
110
- success: boolean;
111
- hadConflicts: boolean;
112
- message: string;
113
- }
114
- //# sourceMappingURL=WorktreeManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorktreeManager.d.ts","sourceRoot":"","sources":["../../src/lib/WorktreeManager.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,iBAAiB,CAAQ;gBAErB,iBAAiB,EAAE,MAAM;IAOrC;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAIjE;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAI/D;;OAEG;IACG,MAAM;IACV,2BAA2B;IAC3B,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,YAAY,CAAC;IAuBxB;;OAEG;IACG,KAAK;IACT,sBAAsB;IACtB,UAAU,EAAE,MAAM;IAClB,wBAAwB;IACxB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC;IA0CvB;;OAEG;IACG,MAAM;IACV,sBAAsB;IACtB,UAAU,EAAE,MAAM;IAClB,wBAAwB;IACxB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC;IA+CvB;;OAEG;IACG,MAAM;IACV,sBAAsB;IACtB,UAAU,EAAE,MAAM;IAClB,wBAAwB;IACxB,YAAY,EAAE,MAAM;IACpB,mDAAmD;IACnD,YAAY,UAAO,GAClB,OAAO,CAAC,IAAI,CAAC;IAoChB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IA4BrC;;OAEG;IACG,MAAM;IACV,sBAAsB;IACtB,UAAU,EAAE,MAAM;IAClB,wBAAwB;IACxB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC;IAUnB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;YACW,aAAa;IAgB3B;;OAEG;YACW,wBAAwB;IAStC;;OAEG;IACH,OAAO,CAAC,GAAG;IAIX;;OAEG;IACH,OAAO,CAAC,QAAQ;CAwCjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB"}