@herbcaudill/ralph 0.6.5 → 0.7.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 (175) hide show
  1. package/README.md +13 -100
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +21 -7
  4. package/dist/cli.js.map +1 -1
  5. package/dist/components/App.d.ts +2 -1
  6. package/dist/components/App.d.ts.map +1 -1
  7. package/dist/components/App.js +5 -1
  8. package/dist/components/App.js.map +1 -1
  9. package/dist/components/InitRalph.js +5 -5
  10. package/dist/components/InitRalph.js.map +1 -1
  11. package/dist/components/IterationRunner.d.ts +1 -1
  12. package/dist/components/IterationRunner.d.ts.map +1 -1
  13. package/dist/components/IterationRunner.js +212 -56
  14. package/dist/components/IterationRunner.js.map +1 -1
  15. package/dist/components/IterationRunner.test.js +2 -2
  16. package/dist/components/IterationRunner.test.js.map +1 -1
  17. package/dist/components/JsonOutput.d.ts +14 -0
  18. package/dist/components/JsonOutput.d.ts.map +1 -0
  19. package/dist/components/JsonOutput.js +246 -0
  20. package/dist/components/JsonOutput.js.map +1 -0
  21. package/dist/components/ProgressBar.d.ts +7 -5
  22. package/dist/components/ProgressBar.d.ts.map +1 -1
  23. package/dist/components/ProgressBar.js +7 -5
  24. package/dist/components/ProgressBar.js.map +1 -1
  25. package/dist/components/ProgressBar.test.js +24 -11
  26. package/dist/components/ProgressBar.test.js.map +1 -1
  27. package/dist/lib/MessageQueue.d.ts +2 -0
  28. package/dist/lib/MessageQueue.d.ts.map +1 -1
  29. package/dist/lib/MessageQueue.js +35 -2
  30. package/dist/lib/MessageQueue.js.map +1 -1
  31. package/dist/lib/MessageQueue.test.js +146 -0
  32. package/dist/lib/MessageQueue.test.js.map +1 -1
  33. package/dist/lib/StdinCommandHandler.d.ts +42 -0
  34. package/dist/lib/StdinCommandHandler.d.ts.map +1 -0
  35. package/dist/lib/StdinCommandHandler.js +102 -0
  36. package/dist/lib/StdinCommandHandler.js.map +1 -0
  37. package/dist/lib/StdinCommandHandler.test.d.ts +2 -0
  38. package/dist/lib/StdinCommandHandler.test.d.ts.map +1 -0
  39. package/dist/lib/StdinCommandHandler.test.js +93 -0
  40. package/dist/lib/StdinCommandHandler.test.js.map +1 -0
  41. package/dist/lib/debug.d.ts +18 -0
  42. package/dist/lib/debug.d.ts.map +1 -0
  43. package/dist/lib/debug.js +44 -0
  44. package/dist/lib/debug.js.map +1 -0
  45. package/dist/lib/formatContentBlock.js +1 -1
  46. package/dist/lib/formatContentBlock.js.map +1 -1
  47. package/dist/lib/getNextLogFile.d.ts +12 -0
  48. package/dist/lib/getNextLogFile.d.ts.map +1 -0
  49. package/dist/lib/getNextLogFile.js +52 -0
  50. package/dist/lib/getNextLogFile.js.map +1 -0
  51. package/dist/lib/getNextLogFile.test.d.ts +2 -0
  52. package/dist/lib/getNextLogFile.test.d.ts.map +1 -0
  53. package/dist/lib/getNextLogFile.test.js +65 -0
  54. package/dist/lib/getNextLogFile.test.js.map +1 -0
  55. package/dist/lib/getOpenIssueCount.d.ts +11 -0
  56. package/dist/lib/getOpenIssueCount.d.ts.map +1 -0
  57. package/dist/lib/getOpenIssueCount.js +31 -0
  58. package/dist/lib/getOpenIssueCount.js.map +1 -0
  59. package/dist/lib/getOpenIssueCount.test.d.ts +2 -0
  60. package/dist/lib/getOpenIssueCount.test.d.ts.map +1 -0
  61. package/dist/lib/getOpenIssueCount.test.js +65 -0
  62. package/dist/lib/getOpenIssueCount.test.js.map +1 -0
  63. package/dist/lib/getProgress.d.ts +22 -6
  64. package/dist/lib/getProgress.d.ts.map +1 -1
  65. package/dist/lib/getProgress.js +69 -23
  66. package/dist/lib/getProgress.js.map +1 -1
  67. package/dist/lib/getProgress.test.js +68 -34
  68. package/dist/lib/getProgress.test.js.map +1 -1
  69. package/package.json +1 -1
  70. package/templates/prompt-beads.md +5 -5
  71. package/dist/lib/cleanupAllWorktrees.d.ts +0 -5
  72. package/dist/lib/cleanupAllWorktrees.d.ts.map +0 -1
  73. package/dist/lib/cleanupAllWorktrees.js +0 -23
  74. package/dist/lib/cleanupAllWorktrees.js.map +0 -1
  75. package/dist/lib/cleanupWorktree.d.ts +0 -6
  76. package/dist/lib/cleanupWorktree.d.ts.map +0 -1
  77. package/dist/lib/cleanupWorktree.js +0 -33
  78. package/dist/lib/cleanupWorktree.js.map +0 -1
  79. package/dist/lib/copyRalphFilesFromWorktree.d.ts +0 -5
  80. package/dist/lib/copyRalphFilesFromWorktree.d.ts.map +0 -1
  81. package/dist/lib/copyRalphFilesFromWorktree.js +0 -19
  82. package/dist/lib/copyRalphFilesFromWorktree.js.map +0 -1
  83. package/dist/lib/copyRalphFilesToWorktree.d.ts +0 -5
  84. package/dist/lib/copyRalphFilesToWorktree.d.ts.map +0 -1
  85. package/dist/lib/copyRalphFilesToWorktree.js +0 -21
  86. package/dist/lib/copyRalphFilesToWorktree.js.map +0 -1
  87. package/dist/lib/createWorktree.d.ts +0 -6
  88. package/dist/lib/createWorktree.d.ts.map +0 -1
  89. package/dist/lib/createWorktree.js +0 -33
  90. package/dist/lib/createWorktree.js.map +0 -1
  91. package/dist/lib/getGitRoot.d.ts +0 -5
  92. package/dist/lib/getGitRoot.d.ts.map +0 -1
  93. package/dist/lib/getGitRoot.js +0 -18
  94. package/dist/lib/getGitRoot.js.map +0 -1
  95. package/dist/lib/installDependencies.d.ts +0 -5
  96. package/dist/lib/installDependencies.d.ts.map +0 -1
  97. package/dist/lib/installDependencies.js +0 -23
  98. package/dist/lib/installDependencies.js.map +0 -1
  99. package/dist/lib/installDependencies.test.d.ts +0 -2
  100. package/dist/lib/installDependencies.test.d.ts.map +0 -1
  101. package/dist/lib/installDependencies.test.js +0 -37
  102. package/dist/lib/installDependencies.test.js.map +0 -1
  103. package/dist/lib/mergeWorktreeToMain.d.ts +0 -6
  104. package/dist/lib/mergeWorktreeToMain.d.ts.map +0 -1
  105. package/dist/lib/mergeWorktreeToMain.js +0 -54
  106. package/dist/lib/mergeWorktreeToMain.js.map +0 -1
  107. package/dist/lib/outputState.d.ts +0 -5
  108. package/dist/lib/outputState.d.ts.map +0 -1
  109. package/dist/lib/outputState.js +0 -6
  110. package/dist/lib/outputState.js.map +0 -1
  111. package/dist/lib/popStash.d.ts +0 -5
  112. package/dist/lib/popStash.d.ts.map +0 -1
  113. package/dist/lib/popStash.js +0 -17
  114. package/dist/lib/popStash.js.map +0 -1
  115. package/dist/lib/processEvent.d.ts +0 -2
  116. package/dist/lib/processEvent.d.ts.map +0 -1
  117. package/dist/lib/processEvent.js +0 -100
  118. package/dist/lib/processEvent.js.map +0 -1
  119. package/dist/lib/replayLog.d.ts +0 -2
  120. package/dist/lib/replayLog.d.ts.map +0 -1
  121. package/dist/lib/replayLog.js +0 -35
  122. package/dist/lib/replayLog.js.map +0 -1
  123. package/dist/lib/resolveConflicts.d.ts +0 -6
  124. package/dist/lib/resolveConflicts.d.ts.map +0 -1
  125. package/dist/lib/resolveConflicts.js +0 -76
  126. package/dist/lib/resolveConflicts.js.map +0 -1
  127. package/dist/lib/runIteration.d.ts +0 -2
  128. package/dist/lib/runIteration.d.ts.map +0 -1
  129. package/dist/lib/runIteration.js +0 -91
  130. package/dist/lib/runIteration.js.map +0 -1
  131. package/dist/lib/showToolUse.d.ts +0 -2
  132. package/dist/lib/showToolUse.d.ts.map +0 -1
  133. package/dist/lib/showToolUse.js +0 -17
  134. package/dist/lib/showToolUse.js.map +0 -1
  135. package/dist/lib/signalHandler.d.ts +0 -3
  136. package/dist/lib/signalHandler.d.ts.map +0 -1
  137. package/dist/lib/signalHandler.js +0 -23
  138. package/dist/lib/signalHandler.js.map +0 -1
  139. package/dist/lib/stashChanges.d.ts +0 -6
  140. package/dist/lib/stashChanges.d.ts.map +0 -1
  141. package/dist/lib/stashChanges.js +0 -27
  142. package/dist/lib/stashChanges.js.map +0 -1
  143. package/dist/lib/textFormatting.d.ts +0 -4
  144. package/dist/lib/textFormatting.d.ts.map +0 -1
  145. package/dist/lib/textFormatting.js +0 -94
  146. package/dist/lib/textFormatting.js.map +0 -1
  147. package/dist/lib/types.d.ts +0 -13
  148. package/dist/lib/types.d.ts.map +0 -1
  149. package/dist/lib/types.js +0 -15
  150. package/dist/lib/types.js.map +0 -1
  151. package/dist/lib/worktree.d.ts +0 -43
  152. package/dist/lib/worktree.d.ts.map +0 -1
  153. package/dist/lib/worktree.js +0 -210
  154. package/dist/lib/worktree.js.map +0 -1
  155. package/dist/ui/EventProcessor.d.ts +0 -11
  156. package/dist/ui/EventProcessor.d.ts.map +0 -1
  157. package/dist/ui/EventProcessor.js +0 -95
  158. package/dist/ui/EventProcessor.js.map +0 -1
  159. package/dist/ui/IterationApp.d.ts +0 -10
  160. package/dist/ui/IterationApp.d.ts.map +0 -1
  161. package/dist/ui/IterationApp.js +0 -21
  162. package/dist/ui/IterationApp.js.map +0 -1
  163. package/dist/ui/IterationUI.d.ts +0 -13
  164. package/dist/ui/IterationUI.d.ts.map +0 -1
  165. package/dist/ui/IterationUI.js +0 -19
  166. package/dist/ui/IterationUI.js.map +0 -1
  167. package/dist/ui/TextDisplay.d.ts +0 -7
  168. package/dist/ui/TextDisplay.d.ts.map +0 -1
  169. package/dist/ui/TextDisplay.js +0 -41
  170. package/dist/ui/TextDisplay.js.map +0 -1
  171. package/dist/ui/ToolUseDisplay.d.ts +0 -10
  172. package/dist/ui/ToolUseDisplay.d.ts.map +0 -1
  173. package/dist/ui/ToolUseDisplay.js +0 -10
  174. package/dist/ui/ToolUseDisplay.js.map +0 -1
  175. /package/templates/{prompt.md → prompt-todos.md} +0 -0
@@ -1,100 +0,0 @@
1
- import { rel } from "./rel.js";
2
- import { shortenTempPaths } from "./shortenTempPaths.js";
3
- import { writeWrappedText } from "./textFormatting.js";
4
- import { showToolUse } from "./showToolUse.js";
5
- import { outputState } from "./outputState.js";
6
- const toolIndent = " ";
7
- export const processEvent = (event) => {
8
- // Stream text deltas as they come in
9
- if (event.type === "stream_event") {
10
- const streamEvent = event.event;
11
- const delta = streamEvent?.delta;
12
- if (delta?.type === "text_delta" && delta.text) {
13
- if (outputState.needsBlankLineBeforeText) {
14
- process.stdout.write("\n");
15
- outputState.trailingNewlines = 2;
16
- outputState.needsBlankLineBeforeText = false;
17
- }
18
- writeWrappedText(delta.text);
19
- const match = delta.text.match(/\n+$/);
20
- if (match) {
21
- outputState.trailingNewlines = Math.min(match[0].length, 2);
22
- }
23
- else {
24
- outputState.trailingNewlines = 0;
25
- }
26
- }
27
- }
28
- // Show tool uses
29
- if (event.type === "assistant") {
30
- const message = event.message;
31
- const content = message?.content;
32
- if (content) {
33
- for (const block of content) {
34
- if (block.type === "tool_use") {
35
- const input = block.input;
36
- if (block.name === "Read") {
37
- const filePath = input?.file_path;
38
- if (filePath) {
39
- showToolUse("Read", rel(filePath));
40
- }
41
- }
42
- else if (block.name === "Edit" || block.name === "Write") {
43
- const filePath = input?.file_path;
44
- if (filePath) {
45
- showToolUse(block.name, rel(filePath));
46
- }
47
- }
48
- else if (block.name === "Bash") {
49
- const command = input?.command;
50
- if (command) {
51
- showToolUse("$", shortenTempPaths(command));
52
- }
53
- }
54
- else if (block.name === "Grep") {
55
- const pattern = input?.pattern;
56
- const path = input?.path;
57
- showToolUse("Grep", `${pattern}${path ? ` in ${rel(path)}` : ""}`);
58
- }
59
- else if (block.name === "Glob") {
60
- const pattern = input?.pattern;
61
- const path = input?.path;
62
- showToolUse("Glob", `${pattern}${path ? ` in ${rel(path)}` : ""}`);
63
- }
64
- else if (block.name === "TodoWrite") {
65
- const todos = input?.todos;
66
- if (todos?.length) {
67
- const todoIndent = toolIndent + " ";
68
- const summary = todos
69
- .map(t => `[${t.status === "completed" ? "x"
70
- : t.status === "in_progress" ? "~"
71
- : " "}] ${t.content}`)
72
- .join("\n" + todoIndent);
73
- showToolUse("TodoWrite", "\n" + todoIndent + summary);
74
- }
75
- else {
76
- showToolUse("TodoWrite");
77
- }
78
- }
79
- else if (block.name === "WebFetch") {
80
- const url = input?.url;
81
- showToolUse("WebFetch", url);
82
- }
83
- else if (block.name === "WebSearch") {
84
- const query = input?.query;
85
- showToolUse("WebSearch", query);
86
- }
87
- else if (block.name === "Task") {
88
- const description = input?.description;
89
- showToolUse("Task", description);
90
- }
91
- else if (block.name === "Skill") {
92
- const skill = input?.skill;
93
- showToolUse("Skill", skill);
94
- }
95
- }
96
- }
97
- }
98
- }
99
- };
100
- //# sourceMappingURL=processEvent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"processEvent.js","sourceRoot":"","sources":["../../src/lib/processEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAa,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,MAAM,UAAU,GAAG,IAAI,CAAA;AAEvB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAA8B,EAAE,EAAE;IAC7D,qCAAqC;IACrC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,KAAK,CAAC,KAA4C,CAAA;QACtE,MAAM,KAAK,GAAG,WAAW,EAAE,KAA4C,CAAA;QACvE,IAAI,KAAK,EAAE,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,WAAW,CAAC,wBAAwB,EAAE,CAAC;gBACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC1B,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAA;gBAChC,WAAW,CAAC,wBAAwB,GAAG,KAAK,CAAA;YAC9C,CAAC;YACD,gBAAgB,CAAC,KAAK,CAAC,IAAc,CAAC,CAAA;YACtC,MAAM,KAAK,GAAI,KAAK,CAAC,IAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAClD,IAAI,KAAK,EAAE,CAAC;gBACV,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAC7D,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAA8C,CAAA;QACpE,MAAM,OAAO,GAAG,OAAO,EAAE,OAAqD,CAAA;QAC9E,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,KAA4C,CAAA;oBAChE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC1B,MAAM,QAAQ,GAAG,KAAK,EAAE,SAA+B,CAAA;wBACvD,IAAI,QAAQ,EAAE,CAAC;4BACb,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;wBACpC,CAAC;oBACH,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC3D,MAAM,QAAQ,GAAG,KAAK,EAAE,SAA+B,CAAA;wBACvD,IAAI,QAAQ,EAAE,CAAC;4BACb,WAAW,CAAC,KAAK,CAAC,IAAc,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;wBAClD,CAAC;oBACH,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACjC,MAAM,OAAO,GAAG,KAAK,EAAE,OAA6B,CAAA;wBACpD,IAAI,OAAO,EAAE,CAAC;4BACZ,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;wBAC7C,CAAC;oBACH,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACjC,MAAM,OAAO,GAAG,KAAK,EAAE,OAA6B,CAAA;wBACpD,MAAM,IAAI,GAAG,KAAK,EAAE,IAA0B,CAAA;wBAC9C,WAAW,CAAC,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;oBACpE,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACjC,MAAM,OAAO,GAAG,KAAK,EAAE,OAA6B,CAAA;wBACpD,MAAM,IAAI,GAAG,KAAK,EAAE,IAA0B,CAAA;wBAC9C,WAAW,CAAC,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;oBACpE,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;wBACtC,MAAM,KAAK,GAAG,KAAK,EAAE,KAA+D,CAAA;wBACpF,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;4BAClB,MAAM,UAAU,GAAG,UAAU,GAAG,MAAM,CAAA;4BACtC,MAAM,OAAO,GAAG,KAAK;iCAClB,GAAG,CACF,CAAC,CAAC,EAAE,CACF,IACE,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG;gCAC9B,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG;oCAClC,CAAC,CAAC,GACJ,KAAK,CAAC,CAAC,OAAO,EAAE,CACnB;iCACA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,CAAA;4BAC1B,WAAW,CAAC,WAAW,EAAE,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC,CAAA;wBACvD,CAAC;6BAAM,CAAC;4BACN,WAAW,CAAC,WAAW,CAAC,CAAA;wBAC1B,CAAC;oBACH,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBACrC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAyB,CAAA;wBAC5C,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;oBAC9B,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;wBACtC,MAAM,KAAK,GAAG,KAAK,EAAE,KAA2B,CAAA;wBAChD,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;oBACjC,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACjC,MAAM,WAAW,GAAG,KAAK,EAAE,WAAiC,CAAA;wBAC5D,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;oBAClC,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAClC,MAAM,KAAK,GAAG,KAAK,EAAE,KAA2B,CAAA;wBAChD,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export declare const replayLog: (filePath: string) => void;
2
- //# sourceMappingURL=replayLog.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replayLog.d.ts","sourceRoot":"","sources":["../../src/lib/replayLog.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,SAAS,GAAI,UAAU,MAAM,SAkCzC,CAAA"}
@@ -1,35 +0,0 @@
1
- import { readFileSync } from "fs";
2
- import { render } from "ink";
3
- import React from "react";
4
- import { IterationApp } from "../ui/IterationApp.js";
5
- export const replayLog = (filePath) => {
6
- const content = readFileSync(filePath, "utf-8");
7
- // Log file contains pretty-printed JSON objects separated by blank lines
8
- const eventStrings = content.split(/\n\n+/).filter(s => s.trim());
9
- let processor = null;
10
- // Render Ink UI
11
- const { unmount } = render(React.createElement(IterationApp, {
12
- iteration: 0,
13
- totalIterations: 0,
14
- onProcessEvent: (p) => {
15
- processor = p;
16
- },
17
- }));
18
- // Process all events
19
- for (const eventStr of eventStrings) {
20
- try {
21
- const event = JSON.parse(eventStr);
22
- if (processor) {
23
- processor.processEvent(event);
24
- }
25
- }
26
- catch {
27
- // Skip malformed entries
28
- }
29
- }
30
- // Wait a bit to let the UI render before unmounting
31
- setTimeout(() => {
32
- unmount();
33
- }, 100);
34
- };
35
- //# sourceMappingURL=replayLog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replayLog.js","sourceRoot":"","sources":["../../src/lib/replayLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAGpD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,EAAE;IAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC/C,yEAAyE;IACzE,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAEjE,IAAI,SAAS,GAA0B,IAAI,CAAA;IAE3C,gBAAgB;IAChB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CACxB,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE;QAChC,SAAS,EAAE,CAAC;QACZ,eAAe,EAAE,CAAC;QAClB,cAAc,EAAE,CAAC,CAAiB,EAAE,EAAE;YACpC,SAAS,GAAG,CAAC,CAAA;QACf,CAAC;KACF,CAAC,CACH,CAAA;IAED,qBAAqB;IACrB,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YAClC,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,EAAE,CAAA;IACX,CAAC,EAAE,GAAG,CAAC,CAAA;AACT,CAAC,CAAA"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Use Claude to resolve merge conflicts
3
- * Returns true if conflicts were resolved successfully, false otherwise
4
- */
5
- export declare function resolveConflicts(repoRoot: string): boolean;
6
- //# sourceMappingURL=resolveConflicts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveConflicts.d.ts","sourceRoot":"","sources":["../../src/lib/resolveConflicts.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CA8E1D"}
@@ -1,76 +0,0 @@
1
- import { execSync } from "child_process";
2
- import { execOptions } from "./types.js";
3
- /**
4
- * Use Claude to resolve merge conflicts
5
- * Returns true if conflicts were resolved successfully, false otherwise
6
- */
7
- export function resolveConflicts(repoRoot) {
8
- try {
9
- // Check if there are actually conflicts
10
- const status = execSync("git status --porcelain", {
11
- ...execOptions,
12
- cwd: repoRoot,
13
- }).toString();
14
- // Look for unmerged files (prefixed with U or having UU status)
15
- const hasConflicts = status.split("\n").some(line => {
16
- const statusCode = line.slice(0, 2);
17
- return statusCode.includes("U") || statusCode === "AA" || statusCode === "DD";
18
- });
19
- if (!hasConflicts) {
20
- return true; // No conflicts to resolve
21
- }
22
- // Get list of conflicted files
23
- const conflictedFiles = execSync("git diff --name-only --diff-filter=U", {
24
- ...execOptions,
25
- cwd: repoRoot,
26
- })
27
- .toString()
28
- .trim()
29
- .split("\n")
30
- .filter(Boolean);
31
- if (conflictedFiles.length === 0) {
32
- return true;
33
- }
34
- // Use Claude to resolve conflicts
35
- const fileArgs = conflictedFiles.map(f => `@${f}`).join(" ");
36
- const prompt = `There are merge conflicts in the following files that need to be resolved:
37
-
38
- ${conflictedFiles.map(f => `- ${f}`).join("\n")}
39
-
40
- Please resolve the merge conflicts by:
41
- 1. Reading each conflicted file
42
- 2. Understanding both versions (between <<<<<<< and ======= is the current branch, between ======= and >>>>>>> is the incoming branch)
43
- 3. Choosing the correct resolution or combining both changes as appropriate
44
- 4. Removing the conflict markers (<<<<<<, =======, >>>>>>>)
45
- 5. Saving the resolved file
46
-
47
- After resolving all conflicts, stage the files with git add.`;
48
- execSync(`claude --permission-mode bypassPermissions -p "${prompt}" ${fileArgs}`, {
49
- cwd: repoRoot,
50
- stdio: "inherit",
51
- });
52
- // Check if conflicts are resolved (no more unmerged files)
53
- const statusAfter = execSync("git status --porcelain", {
54
- ...execOptions,
55
- cwd: repoRoot,
56
- }).toString();
57
- const stillHasConflicts = statusAfter.split("\n").some(line => {
58
- const statusCode = line.slice(0, 2);
59
- return statusCode.includes("U") || statusCode === "AA" || statusCode === "DD";
60
- });
61
- if (stillHasConflicts) {
62
- return false;
63
- }
64
- // Complete the merge
65
- execSync("git commit --no-edit", {
66
- ...execOptions,
67
- cwd: repoRoot,
68
- });
69
- return true;
70
- }
71
- catch (error) {
72
- console.error(`Failed to resolve conflicts: ${error}`);
73
- return false;
74
- }
75
- }
76
- //# sourceMappingURL=resolveConflicts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveConflicts.js","sourceRoot":"","sources":["../../src/lib/resolveConflicts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,wCAAwC;QACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,wBAAwB,EAAE;YAChD,GAAG,WAAW;YACd,GAAG,EAAE,QAAQ;SACd,CAAC,CAAC,QAAQ,EAAE,CAAA;QAEb,gEAAgE;QAChE,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAClD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACnC,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,CAAA;QAC/E,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAA,CAAC,0BAA0B;QACxC,CAAC;QAED,+BAA+B;QAC/B,MAAM,eAAe,GAAG,QAAQ,CAAC,sCAAsC,EAAE;YACvE,GAAG,WAAW;YACd,GAAG,EAAE,QAAQ;SACd,CAAC;aACC,QAAQ,EAAE;aACV,IAAI,EAAE;aACN,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC,CAAA;QAElB,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,kCAAkC;QAClC,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG;;EAEjB,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;6DASc,CAAA;QAEzD,QAAQ,CAAC,kDAAkD,MAAM,KAAK,QAAQ,EAAE,EAAE;YAChF,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,SAAS;SACjB,CAAC,CAAA;QAEF,2DAA2D;QAC3D,MAAM,WAAW,GAAG,QAAQ,CAAC,wBAAwB,EAAE;YACrD,GAAG,WAAW;YACd,GAAG,EAAE,QAAQ;SACd,CAAC,CAAC,QAAQ,EAAE,CAAA;QAEb,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACnC,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,CAAA;QAC/E,CAAC,CAAC,CAAA;QAEF,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,KAAK,CAAA;QACd,CAAC;QAED,qBAAqB;QACrB,QAAQ,CAAC,sBAAsB,EAAE;YAC/B,GAAG,WAAW;YACd,GAAG,EAAE,QAAQ;SACd,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAA;QACtD,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const runIteration: (i: number, iterations: number) => void;
2
- //# sourceMappingURL=runIteration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runIteration.d.ts","sourceRoot":"","sources":["../../src/lib/runIteration.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,EAAE,YAAY,MAAM,SAuGzD,CAAA"}
@@ -1,91 +0,0 @@
1
- import chalk from "chalk";
2
- import { spawn } from "child_process";
3
- import { appendFileSync, writeFileSync } from "fs";
4
- import { join } from "path";
5
- import { render } from "ink";
6
- import React from "react";
7
- import { IterationApp } from "../ui/IterationApp.js";
8
- const logFile = join(process.cwd(), ".ralph", "events.log");
9
- export const runIteration = (i, iterations) => {
10
- if (i > iterations) {
11
- console.log(chalk.green(`Completed ${iterations} iterations.`));
12
- return;
13
- }
14
- // Clear log file at start of each iteration
15
- writeFileSync(logFile, "");
16
- let processor = null;
17
- // Render Ink UI
18
- const { unmount } = render(React.createElement(IterationApp, {
19
- iteration: i,
20
- totalIterations: iterations,
21
- onProcessEvent: (p) => {
22
- processor = p;
23
- },
24
- }));
25
- const child = spawn("claude", [
26
- "--permission-mode",
27
- "bypassPermissions",
28
- "-p",
29
- "@.ralph/prompt.md",
30
- "@.ralph/todo.md",
31
- "@.ralph/progress.md",
32
- "--output-format",
33
- "stream-json",
34
- "--include-partial-messages",
35
- "--verbose",
36
- ], { stdio: ["inherit", "pipe", "inherit"] });
37
- let output = "";
38
- let stdoutEnded = false;
39
- let closeInfo = null;
40
- const handleIterationComplete = () => {
41
- if (!stdoutEnded || !closeInfo)
42
- return;
43
- const { code, signal } = closeInfo;
44
- // Unmount Ink UI
45
- unmount();
46
- if (code !== 0) {
47
- console.error(chalk.red(`Claude exited with code ${code}${signal ? ` (signal: ${signal})` : ""}`));
48
- console.error(chalk.yellow("Last 2000 chars of output:"));
49
- console.error(chalk.dim(output.slice(-2000)));
50
- process.exit(1);
51
- }
52
- if (output.includes("<promise>COMPLETE</promise>")) {
53
- console.log(chalk.green("Todo list complete, exiting."));
54
- process.exit(0);
55
- }
56
- console.log("\n"); // Add blank lines before next iteration
57
- runIteration(i + 1, iterations);
58
- };
59
- child.stdout.on("data", data => {
60
- const chunk = data.toString();
61
- for (const line of chunk.split("\n")) {
62
- if (!line.trim())
63
- continue;
64
- try {
65
- const event = JSON.parse(line);
66
- appendFileSync(logFile, JSON.stringify(event, null, 2) + "\n\n");
67
- if (processor) {
68
- processor.processEvent(event);
69
- }
70
- }
71
- catch {
72
- // Incomplete JSON line, ignore
73
- }
74
- }
75
- output += chunk;
76
- });
77
- child.stdout.on("end", () => {
78
- stdoutEnded = true;
79
- handleIterationComplete();
80
- });
81
- child.on("close", (code, signal) => {
82
- closeInfo = { code, signal };
83
- handleIterationComplete();
84
- });
85
- child.on("error", error => {
86
- unmount();
87
- console.error(chalk.red("Error running Claude:"), error);
88
- process.exit(1);
89
- });
90
- };
91
- //# sourceMappingURL=runIteration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runIteration.js","sourceRoot":"","sources":["../../src/lib/runIteration.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const showToolUse: (name: string, arg?: string) => void;
2
- //# sourceMappingURL=showToolUse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"showToolUse.d.ts","sourceRoot":"","sources":["../../src/lib/showToolUse.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,SAWrD,CAAA"}
@@ -1,17 +0,0 @@
1
- import chalk from "chalk";
2
- import { flushLine, resetTextState } from "./textFormatting.js";
3
- import { outputState } from "./outputState.js";
4
- const toolIndent = " ";
5
- export const showToolUse = (name, arg) => {
6
- flushLine();
7
- while (outputState.trailingNewlines < 2) {
8
- process.stdout.write("\n");
9
- outputState.trailingNewlines++;
10
- }
11
- const formatted = arg ? `${chalk.blue(name)} ${chalk.dim(arg)}` : chalk.blue(name);
12
- console.log(toolIndent + formatted);
13
- outputState.trailingNewlines = 1;
14
- resetTextState();
15
- outputState.needsBlankLineBeforeText = true;
16
- };
17
- //# sourceMappingURL=showToolUse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"showToolUse.js","sourceRoot":"","sources":["../../src/lib/showToolUse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,MAAM,UAAU,GAAG,IAAI,CAAA;AAEvB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,GAAY,EAAE,EAAE;IACxD,SAAS,EAAE,CAAA;IACX,OAAO,WAAW,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC1B,WAAW,CAAC,gBAAgB,EAAE,CAAA;IAChC,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClF,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,CAAA;IACnC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAA;IAChC,cAAc,EAAE,CAAA;IAChB,WAAW,CAAC,wBAAwB,GAAG,IAAI,CAAA;AAC7C,CAAC,CAAA"}
@@ -1,3 +0,0 @@
1
- export declare const registerCleanup: (fn: () => void | Promise<void>) => void;
2
- export declare const unregisterCleanup: () => void;
3
- //# sourceMappingURL=signalHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signalHandler.d.ts","sourceRoot":"","sources":["../../src/lib/signalHandler.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe,GAAI,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,SAE7D,CAAA;AAED,eAAO,MAAM,iBAAiB,YAE7B,CAAA"}
@@ -1,23 +0,0 @@
1
- // Global cleanup function registry for SIGINT/SIGTERM handling
2
- let cleanupFn = null;
3
- let isCleaningUp = false;
4
- export const registerCleanup = (fn) => {
5
- cleanupFn = fn;
6
- };
7
- export const unregisterCleanup = () => {
8
- cleanupFn = null;
9
- };
10
- const handleSignal = async () => {
11
- // Prevent double handling
12
- if (isCleaningUp)
13
- return;
14
- isCleaningUp = true;
15
- if (cleanupFn) {
16
- await cleanupFn();
17
- }
18
- process.exit(0);
19
- };
20
- // Register handlers once at module load
21
- process.on("SIGINT", () => handleSignal());
22
- process.on("SIGTERM", () => handleSignal());
23
- //# sourceMappingURL=signalHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signalHandler.js","sourceRoot":"","sources":["../../src/lib/signalHandler.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,IAAI,SAAS,GAAwC,IAAI,CAAA;AACzD,IAAI,YAAY,GAAG,KAAK,CAAA;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAA8B,EAAE,EAAE;IAChE,SAAS,GAAG,EAAE,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACpC,SAAS,GAAG,IAAI,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;IAC9B,0BAA0B;IAC1B,IAAI,YAAY;QAAE,OAAM;IACxB,YAAY,GAAG,IAAI,CAAA;IAEnB,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,EAAE,CAAA;IACnB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAA;AAED,wCAAwC;AACxC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAA;AAC1C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAA"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Stash any uncommitted changes in the main repository
3
- * Returns true if changes were stashed, false if working tree was clean
4
- */
5
- export declare function stashChanges(repoRoot: string): boolean;
6
- //# sourceMappingURL=stashChanges.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stashChanges.d.ts","sourceRoot":"","sources":["../../src/lib/stashChanges.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAuBtD"}
@@ -1,27 +0,0 @@
1
- import { execSync } from "child_process";
2
- import { execOptions } from "./types.js";
3
- /**
4
- * Stash any uncommitted changes in the main repository
5
- * Returns true if changes were stashed, false if working tree was clean
6
- */
7
- export function stashChanges(repoRoot) {
8
- try {
9
- // Check if there are any changes to stash
10
- const status = execSync("git status --porcelain", {
11
- ...execOptions,
12
- cwd: repoRoot,
13
- });
14
- if (!status.toString().trim()) {
15
- return false; // Nothing to stash
16
- }
17
- execSync("git stash push --include-untracked -m 'Ralph: stashing changes before worktree iterations'", {
18
- ...execOptions,
19
- cwd: repoRoot,
20
- });
21
- return true;
22
- }
23
- catch (error) {
24
- throw new Error(`Failed to stash changes: ${error}`);
25
- }
26
- }
27
- //# sourceMappingURL=stashChanges.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stashChanges.js","sourceRoot":"","sources":["../../src/lib/stashChanges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,0CAA0C;QAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,wBAAwB,EAAE;YAChD,GAAG,WAAW;YACd,GAAG,EAAE,QAAQ;SACd,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAA,CAAC,mBAAmB;QAClC,CAAC;QAED,QAAQ,CACN,4FAA4F,EAC5F;YACE,GAAG,WAAW;YACd,GAAG,EAAE,QAAQ;SACd,CACF,CAAA;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAA;IACtD,CAAC;AACH,CAAC"}
@@ -1,4 +0,0 @@
1
- export declare const flushLine: () => void;
2
- export declare const writeWrappedText: (text: string) => void;
3
- export declare const resetTextState: () => void;
4
- //# sourceMappingURL=textFormatting.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"textFormatting.d.ts","sourceRoot":"","sources":["../../src/lib/textFormatting.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,SAAS,YAwCrB,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,SA4B5C,CAAA;AAED,eAAO,MAAM,cAAc,YAK1B,CAAA"}
@@ -1,94 +0,0 @@
1
- import chalk from "chalk";
2
- const termWidth = process.stdout.columns || 80;
3
- // Word wrap state for streaming text
4
- let currentLineLength = 0;
5
- let lineBuffer = "";
6
- let inBold = false;
7
- let inCode = false;
8
- const formatSegment = (text, bold, code) => {
9
- if (code)
10
- return chalk.yellow(text);
11
- if (bold)
12
- return chalk.bold(text);
13
- return text;
14
- };
15
- export const flushLine = () => {
16
- if (!lineBuffer)
17
- return;
18
- let output = "";
19
- let segment = "";
20
- let segmentBold = inBold;
21
- let segmentCode = inCode;
22
- let i = 0;
23
- while (i < lineBuffer.length) {
24
- if (lineBuffer[i] === "*" && lineBuffer[i + 1] === "*") {
25
- // Flush current segment
26
- if (segment) {
27
- output += formatSegment(segment, segmentBold, segmentCode);
28
- segment = "";
29
- }
30
- inBold = !inBold;
31
- segmentBold = inBold;
32
- i += 2;
33
- }
34
- else if (lineBuffer[i] === "`") {
35
- // Flush current segment
36
- if (segment) {
37
- output += formatSegment(segment, segmentBold, segmentCode);
38
- segment = "";
39
- }
40
- inCode = !inCode;
41
- segmentCode = inCode;
42
- i++;
43
- }
44
- else {
45
- segment += lineBuffer[i];
46
- currentLineLength++;
47
- i++;
48
- }
49
- }
50
- // Flush remaining segment
51
- if (segment) {
52
- output += formatSegment(segment, segmentBold, segmentCode);
53
- }
54
- process.stdout.write(output);
55
- lineBuffer = "";
56
- };
57
- export const writeWrappedText = (text) => {
58
- // Accumulate text, wrap at word boundaries
59
- for (const char of text) {
60
- if (char === "\n") {
61
- flushLine();
62
- process.stdout.write("\n");
63
- currentLineLength = 0;
64
- }
65
- else if (char === " " || char === "\t") {
66
- lineBuffer += char;
67
- // Check if we need to wrap - look for last space to break at
68
- const visibleLength = lineBuffer.replace(/\*\*/g, "").replace(/`/g, "").length;
69
- if (currentLineLength + visibleLength > termWidth) {
70
- // Find last space to break at
71
- const lastSpace = lineBuffer.lastIndexOf(" ", lineBuffer.length - 2);
72
- if (lastSpace > 0) {
73
- const beforeBreak = lineBuffer.slice(0, lastSpace);
74
- const afterBreak = lineBuffer.slice(lastSpace + 1);
75
- lineBuffer = beforeBreak;
76
- flushLine();
77
- process.stdout.write("\n");
78
- currentLineLength = 0;
79
- lineBuffer = afterBreak;
80
- }
81
- }
82
- }
83
- else {
84
- lineBuffer += char;
85
- }
86
- }
87
- };
88
- export const resetTextState = () => {
89
- currentLineLength = 0;
90
- lineBuffer = "";
91
- inBold = false;
92
- inCode = false;
93
- };
94
- //# sourceMappingURL=textFormatting.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"textFormatting.js","sourceRoot":"","sources":["../../src/lib/textFormatting.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import { ExecSyncOptions } from "child_process";
2
- export interface WorktreeInfo {
3
- path: string;
4
- branch: string;
5
- guid: string;
6
- }
7
- export declare const execOptions: ExecSyncOptions;
8
- /**
9
- * Get the worktrees directory for a given repo root.
10
- * Creates a sibling directory named `<repo-name>-worktrees`.
11
- */
12
- export declare function getWorktreesDir(repoRoot: string): string;
13
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAG/C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,WAAW,EAAE,eAGzB,CAAA;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIxD"}
package/dist/lib/types.js DELETED
@@ -1,15 +0,0 @@
1
- import { basename, dirname, join } from "path";
2
- export const execOptions = {
3
- stdio: "pipe",
4
- encoding: "utf-8",
5
- };
6
- /**
7
- * Get the worktrees directory for a given repo root.
8
- * Creates a sibling directory named `<repo-name>-worktrees`.
9
- */
10
- export function getWorktreesDir(repoRoot) {
11
- const repoName = basename(repoRoot);
12
- const parentDir = dirname(repoRoot);
13
- return join(parentDir, `${repoName}-worktrees`);
14
- }
15
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAQ9C,MAAM,CAAC,MAAM,WAAW,GAAoB;IAC1C,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,OAAO;CAClB,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACnC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnC,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,YAAY,CAAC,CAAA;AACjD,CAAC"}