@herbcaudill/ralph 0.4.3 → 0.5.1

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 (36) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +32 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/components/App.d.ts.map +1 -1
  5. package/dist/components/App.js +2 -5
  6. package/dist/components/App.js.map +1 -1
  7. package/dist/components/EventDisplay.d.ts +9 -1
  8. package/dist/components/EventDisplay.d.ts.map +1 -1
  9. package/dist/components/EventDisplay.js +109 -56
  10. package/dist/components/EventDisplay.js.map +1 -1
  11. package/dist/components/EventDisplay.replay.test.js +31 -3
  12. package/dist/components/EventDisplay.replay.test.js.map +1 -1
  13. package/dist/components/EventDisplay.test.js +107 -11
  14. package/dist/components/EventDisplay.test.js.map +1 -1
  15. package/dist/components/Header.d.ts +2 -1
  16. package/dist/components/Header.d.ts.map +1 -1
  17. package/dist/components/Header.js +2 -2
  18. package/dist/components/Header.js.map +1 -1
  19. package/dist/components/IterationRunner.d.ts +3 -1
  20. package/dist/components/IterationRunner.d.ts.map +1 -1
  21. package/dist/components/IterationRunner.js +99 -184
  22. package/dist/components/IterationRunner.js.map +1 -1
  23. package/dist/components/ReplayLog.d.ts +3 -1
  24. package/dist/components/ReplayLog.d.ts.map +1 -1
  25. package/dist/components/ReplayLog.js +2 -2
  26. package/dist/components/ReplayLog.js.map +1 -1
  27. package/dist/index.d.ts +0 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +0 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/lib/addTodo.d.ts +10 -0
  32. package/dist/lib/addTodo.d.ts.map +1 -0
  33. package/dist/lib/addTodo.js +55 -0
  34. package/dist/lib/addTodo.js.map +1 -0
  35. package/package.json +5 -5
  36. package/templates/prompt.md +1 -11
@@ -1 +1 @@
1
- {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,eAAO,MAAM,MAAM,GAAI,iCAAiC,KAAK,sBAiB5D,CAAA;AAED,KAAK,KAAK,GAAG;IACX,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA"}
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,eAAO,MAAM,MAAM,GAAI,wCAAwC,KAAK,sBAiBnE,CAAA;AAED,KAAK,KAAK,GAAG;IACX,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA"}
@@ -2,8 +2,8 @@ import React from "react";
2
2
  import { Box, Text } from "ink";
3
3
  import BigText from "ink-big-text";
4
4
  import Gradient from "ink-gradient";
5
- export const Header = ({ claudeVersion, ralphVersion }) => {
6
- return (React.createElement(Box, { flexDirection: "column", marginBottom: 1, borderStyle: "single", padding: 1, alignItems: "center" },
5
+ export const Header = ({ claudeVersion, ralphVersion, width }) => {
6
+ return (React.createElement(Box, { flexDirection: "column", marginBottom: 1, borderStyle: "single", alignItems: "center", width: width },
7
7
  React.createElement(Gradient, { colors: ["#30A6E4", "#EBC635"] },
8
8
  React.createElement(BigText, { text: "Ralph", font: "tiny" })),
9
9
  React.createElement(Text, { dimColor: true },
@@ -1 +1 @@
1
- {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,QAAQ,MAAM,cAAc,CAAA;AAEnC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EAAE,aAAa,EAAE,YAAY,EAAS,EAAE,EAAE;IAC/D,OAAO,CACL,oBAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,YAAY,EAAE,CAAC,EACf,WAAW,EAAC,QAAQ,EACpB,OAAO,EAAE,CAAC,EACV,UAAU,EAAC,QAAQ;QAEnB,oBAAC,QAAQ,IAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;YACtC,oBAAC,OAAO,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,MAAM,GAAG,CAC3B;QACX,oBAAC,IAAI,IAAC,QAAQ;;YACS,YAAY;;YAAkB,aAAa,CAC3D,CACH,CACP,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,QAAQ,MAAM,cAAc,CAAA;AAEnC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAS,EAAE,EAAE;IACtE,OAAO,CACL,oBAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,YAAY,EAAE,CAAC,EACf,WAAW,EAAC,QAAQ,EACpB,UAAU,EAAC,QAAQ,EACnB,KAAK,EAAE,KAAK;QAEZ,oBAAC,QAAQ,IAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;YACtC,oBAAC,OAAO,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,MAAM,GAAG,CAC3B;QACX,oBAAC,IAAI,IAAC,QAAQ;;YACS,YAAY;;YAAkB,aAAa,CAC3D,CACH,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -1,7 +1,9 @@
1
1
  import React from "react";
2
- export declare const IterationRunner: ({ totalIterations }: Props) => React.JSX.Element;
2
+ export declare const IterationRunner: ({ totalIterations, claudeVersion, ralphVersion }: Props) => React.JSX.Element;
3
3
  type Props = {
4
4
  totalIterations: number;
5
+ claudeVersion: string;
6
+ ralphVersion: string;
5
7
  };
6
8
  export {};
7
9
  //# sourceMappingURL=IterationRunner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IterationRunner.d.ts","sourceRoot":"","sources":["../../src/components/IterationRunner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AA6B1D,eAAO,MAAM,eAAe,GAAI,qBAAqB,KAAK,sBAiUzD,CAAA;AAED,KAAK,KAAK,GAAG;IACX,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA"}
1
+ {"version":3,"file":"IterationRunner.d.ts","sourceRoot":"","sources":["../../src/components/IterationRunner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AAuB1D,eAAO,MAAM,eAAe,GAAI,kDAAkD,KAAK,sBAuPtF,CAAA;AAED,KAAK,KAAK,GAAG;IACX,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA"}
@@ -2,75 +2,30 @@ import React, { useState, useEffect, useRef } from "react";
2
2
  import { Box, Text, useApp } from "ink";
3
3
  import Spinner from "ink-spinner";
4
4
  import SelectInput from "ink-select-input";
5
- import { execSync } from "child_process";
6
- import { execa } from "execa";
7
- import { appendFileSync, mkdirSync, existsSync } from "fs";
8
- import { join } from "path";
5
+ import { spawn, execSync } from "child_process";
6
+ import { appendFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
7
+ import { join, dirname } from "path";
9
8
  import { EventDisplay } from "./EventDisplay.js";
10
- import { getGitRoot } from "../lib/getGitRoot.js";
11
- import { stashChanges } from "../lib/stashChanges.js";
12
- import { popStash } from "../lib/popStash.js";
13
- import { createWorktree } from "../lib/createWorktree.js";
14
- import { copyRalphFilesToWorktree } from "../lib/copyRalphFilesToWorktree.js";
15
- import { mergeWorktreeToMain } from "../lib/mergeWorktreeToMain.js";
16
- import { cleanupWorktree } from "../lib/cleanupWorktree.js";
17
- import { installDependencies } from "../lib/installDependencies.js";
18
- import { registerCleanup, unregisterCleanup } from "../lib/signalHandler.js";
19
- const repoRoot = process.cwd();
20
- const ralphDir = join(repoRoot, ".ralph");
9
+ const logFile = join(process.cwd(), ".ralph", "events.log");
10
+ const ralphDir = join(process.cwd(), ".ralph");
21
11
  const checkRequiredFiles = () => {
22
12
  const requiredFiles = ["prompt.md", "todo.md", "progress.md"];
23
13
  const missing = requiredFiles.filter(file => !existsSync(join(ralphDir, file)));
24
14
  return { missing, exists: missing.length === 0 };
25
15
  };
26
- export const IterationRunner = ({ totalIterations }) => {
16
+ export const IterationRunner = ({ totalIterations, claudeVersion, ralphVersion }) => {
27
17
  const { exit } = useApp();
28
18
  const [currentIteration, setCurrentIteration] = useState(1);
29
19
  const [events, setEvents] = useState([]);
20
+ const eventsRef = useRef([]);
21
+ const [completedIterations, setCompletedIterations] = useState([]);
30
22
  const [output, setOutput] = useState("");
31
23
  const [error, setError] = useState();
32
24
  const [needsInit, setNeedsInit] = useState(null);
33
25
  const [initializing, setInitializing] = useState(false);
34
26
  const [isRunning, setIsRunning] = useState(false);
35
- // Use refs for worktree/stash state to avoid triggering effect re-runs
36
- const currentWorktreeRef = useRef(null);
37
- const hasStashedChangesRef = useRef(false);
38
- const childProcessRef = useRef(null);
39
27
  // Only use input handling if stdin supports raw mode
40
28
  const stdinSupportsRawMode = process.stdin.isTTY === true;
41
- // Cleanup function for worktrees and stash
42
- const cleanup = () => {
43
- try {
44
- if (currentWorktreeRef.current) {
45
- const gitRoot = getGitRoot(repoRoot);
46
- cleanupWorktree(gitRoot, currentWorktreeRef.current);
47
- currentWorktreeRef.current = null;
48
- }
49
- if (hasStashedChangesRef.current) {
50
- const gitRoot = getGitRoot(repoRoot);
51
- popStash(gitRoot);
52
- hasStashedChangesRef.current = false;
53
- }
54
- }
55
- catch (err) {
56
- console.error(`Cleanup error: ${err}`);
57
- }
58
- };
59
- // Register cleanup for SIGINT/SIGTERM (Ctrl+C)
60
- useEffect(() => {
61
- registerCleanup(async () => {
62
- const child = childProcessRef.current;
63
- if (child) {
64
- child.kill("SIGTERM");
65
- await child; // Wait for process to actually terminate
66
- childProcessRef.current = null;
67
- }
68
- cleanup();
69
- });
70
- return () => {
71
- unregisterCleanup();
72
- };
73
- }, []);
74
29
  const handleInitSelection = (item) => {
75
30
  if (item.value === "yes") {
76
31
  setInitializing(true);
@@ -97,10 +52,12 @@ export const IterationRunner = ({ totalIterations }) => {
97
52
  }, 100);
98
53
  }
99
54
  };
55
+ // Keep ref in sync with events state for access in callbacks
56
+ useEffect(() => {
57
+ eventsRef.current = events;
58
+ }, [events]);
100
59
  useEffect(() => {
101
60
  if (currentIteration > totalIterations) {
102
- // Clean up and exit
103
- cleanup();
104
61
  exit();
105
62
  return;
106
63
  }
@@ -117,140 +74,102 @@ export const IterationRunner = ({ totalIterations }) => {
117
74
  }
118
75
  return;
119
76
  }
120
- let worktree = null;
121
- try {
122
- const gitRoot = getGitRoot(repoRoot);
123
- // Stash changes before first iteration
124
- if (currentIteration === 1) {
125
- const hasChanges = stashChanges(gitRoot);
126
- hasStashedChangesRef.current = hasChanges;
127
- }
128
- // Create worktree for this iteration
129
- worktree = createWorktree(gitRoot);
130
- currentWorktreeRef.current = worktree;
131
- // Copy .ralph files to worktree
132
- copyRalphFilesToWorktree(gitRoot, worktree.path);
133
- // Install dependencies if package.json exists
134
- installDependencies(worktree.path);
135
- // Clear events for this iteration
136
- setEvents([]);
137
- setOutput("");
138
- // Ensure .ralph directory exists in worktree
139
- const worktreeRalphDir = join(worktree.path, ".ralph");
140
- mkdirSync(worktreeRalphDir, { recursive: true });
141
- const child = execa("claude", [
142
- "--permission-mode",
143
- "bypassPermissions",
144
- "-p",
145
- "@.ralph/prompt.md",
146
- "@.ralph/todo.md",
147
- "@.ralph/progress.md",
148
- "--output-format",
149
- "stream-json",
150
- "--include-partial-messages",
151
- "--verbose",
152
- ], {
153
- cwd: worktree.path,
154
- stdin: "inherit",
155
- stdout: "pipe",
156
- stderr: "inherit",
157
- reject: false, // Don't throw on non-zero exit
158
- detached: true, // Run in new process group to prevent SIGINT propagation
159
- });
160
- childProcessRef.current = child;
161
- setIsRunning(true);
162
- let fullOutput = "";
163
- const worktreeLogFile = join(worktree.path, ".ralph", "events.log");
164
- // Handle streaming stdout
165
- child.stdout?.on("data", (data) => {
166
- const chunk = data.toString();
167
- for (const line of chunk.split("\n")) {
168
- if (!line.trim())
169
- continue;
170
- try {
171
- const event = JSON.parse(line);
172
- appendFileSync(worktreeLogFile, JSON.stringify(event, null, 2) + "\n\n");
173
- setEvents(prev => [...prev, event]);
174
- }
175
- catch {
176
- // Incomplete JSON line, ignore
177
- }
178
- }
179
- fullOutput += chunk;
180
- setOutput(fullOutput);
181
- });
182
- // Handle process completion
183
- child.then(result => {
184
- childProcessRef.current = null;
185
- setIsRunning(false);
186
- const gitRoot = getGitRoot(repoRoot);
187
- // Handle error exit (but not if terminated by signal during cleanup)
188
- if (result.exitCode !== 0 && !result.isTerminated) {
189
- setError(`Claude exited with code ${result.exitCode}${result.signal ? ` (signal: ${result.signal})` : ""}\n\nLast 2000 chars:\n${fullOutput.slice(-2000)}`);
190
- cleanupWorktree(gitRoot, worktree);
191
- currentWorktreeRef.current = null;
192
- setTimeout(() => {
193
- cleanup();
194
- exit();
195
- process.exit(1);
196
- }, 100);
197
- return;
198
- }
199
- // If terminated during cleanup, don't proceed
200
- if (result.isTerminated) {
201
- return;
202
- }
203
- // Merge worktree changes back to main
204
- // Note: .ralph/ files are included in the merge since Claude commits them in the worktree
205
- try {
206
- mergeWorktreeToMain(gitRoot, worktree);
207
- cleanupWorktree(gitRoot, worktree);
208
- currentWorktreeRef.current = null;
209
- }
210
- catch (err) {
211
- setError(`Failed to merge worktree: ${err}`);
212
- cleanupWorktree(gitRoot, worktree);
213
- currentWorktreeRef.current = null;
214
- setTimeout(() => {
215
- cleanup();
216
- exit();
217
- process.exit(1);
218
- }, 100);
219
- return;
220
- }
221
- // Check if complete
222
- if (fullOutput.includes("<promise>COMPLETE</promise>")) {
223
- cleanup();
77
+ // Ensure .ralph directory exists and clear log file at start of each iteration
78
+ mkdirSync(dirname(logFile), { recursive: true });
79
+ writeFileSync(logFile, "");
80
+ setEvents([]);
81
+ setOutput("");
82
+ const child = spawn("claude", [
83
+ "--permission-mode",
84
+ "bypassPermissions",
85
+ "-p",
86
+ "@.ralph/prompt.md",
87
+ "@.ralph/todo.md",
88
+ "@.ralph/progress.md",
89
+ "--output-format",
90
+ "stream-json",
91
+ "--include-partial-messages",
92
+ "--verbose",
93
+ ], {
94
+ stdio: ["inherit", "pipe", "inherit"],
95
+ env: {
96
+ ...process.env,
97
+ // Disable LSP plugins to avoid crashes when TypeScript LSP server errors
98
+ ENABLE_LSP_TOOL: "0",
99
+ },
100
+ });
101
+ setIsRunning(true);
102
+ let fullOutput = "";
103
+ let stdoutEnded = false;
104
+ let closeInfo = null;
105
+ let finalResult = "";
106
+ const handleIterationComplete = () => {
107
+ if (!stdoutEnded || !closeInfo)
108
+ return;
109
+ setIsRunning(false);
110
+ const { code, signal } = closeInfo;
111
+ if (code !== 0) {
112
+ setError(`Claude exited with code ${code}${signal ? ` (signal: ${signal})` : ""}\n\nLast 2000 chars:\n${fullOutput.slice(-2000)}`);
113
+ setTimeout(() => {
224
114
  exit();
225
- process.exit(0);
226
- return;
227
- }
228
- // Move to next iteration
229
- setTimeout(() => setCurrentIteration(i => i + 1), 500);
230
- });
231
- return () => {
232
- child.kill();
233
- childProcessRef.current = null;
234
- };
235
- }
236
- catch (err) {
237
- setError(`Failed to set up worktree: ${err}`);
238
- if (worktree) {
115
+ process.exit(1);
116
+ }, 100);
117
+ return;
118
+ }
119
+ // Only check Claude's final result message, not the entire output
120
+ // (which may include file contents that contain the completion string)
121
+ if (finalResult.includes("<promise>COMPLETE</promise>")) {
122
+ exit();
123
+ process.exit(0);
124
+ return;
125
+ }
126
+ // Save current events and move to next iteration
127
+ const currentEvents = eventsRef.current;
128
+ setCompletedIterations(prev => [
129
+ ...prev,
130
+ { iteration: currentIteration, events: currentEvents },
131
+ ]);
132
+ setTimeout(() => setCurrentIteration(i => i + 1), 500);
133
+ };
134
+ child.stdout.on("data", data => {
135
+ const chunk = data.toString();
136
+ for (const line of chunk.split("\n")) {
137
+ if (!line.trim())
138
+ continue;
239
139
  try {
240
- const gitRoot = getGitRoot(repoRoot);
241
- cleanupWorktree(gitRoot, worktree);
242
- currentWorktreeRef.current = null;
140
+ const event = JSON.parse(line);
141
+ appendFileSync(logFile, JSON.stringify(event, null, 2) + "\n\n");
142
+ setEvents(prev => [...prev, event]);
143
+ // Capture the final result message from result events
144
+ if (event.type === "result" && typeof event.result === "string") {
145
+ finalResult = event.result;
146
+ }
243
147
  }
244
148
  catch {
245
- // Ignore cleanup errors
149
+ // Incomplete JSON line, ignore
246
150
  }
247
151
  }
152
+ fullOutput += chunk;
153
+ setOutput(fullOutput);
154
+ });
155
+ child.stdout.on("end", () => {
156
+ stdoutEnded = true;
157
+ handleIterationComplete();
158
+ });
159
+ child.on("close", (code, signal) => {
160
+ closeInfo = { code, signal };
161
+ handleIterationComplete();
162
+ });
163
+ child.on("error", error => {
164
+ setError(`Error running Claude: ${error.message}`);
248
165
  setTimeout(() => {
249
- cleanup();
250
166
  exit();
251
167
  process.exit(1);
252
168
  }, 100);
253
- }
169
+ });
170
+ return () => {
171
+ child.kill();
172
+ };
254
173
  }, [currentIteration, totalIterations, exit]);
255
174
  if (needsInit) {
256
175
  if (initializing) {
@@ -280,11 +199,7 @@ export const IterationRunner = ({ totalIterations }) => {
280
199
  React.createElement(Text, { color: "red" }, error)));
281
200
  }
282
201
  return (React.createElement(Box, { flexDirection: "column" },
283
- React.createElement(Box, { borderStyle: "round", borderColor: "cyan", paddingX: 1, marginTop: 1, marginBottom: 1 },
284
- React.createElement(Text, { color: "cyan" },
285
- "Iteration ",
286
- currentIteration)),
287
- React.createElement(EventDisplay, { events: events }),
202
+ React.createElement(EventDisplay, { events: events, iteration: currentIteration, completedIterations: completedIterations, claudeVersion: claudeVersion, ralphVersion: ralphVersion }),
288
203
  isRunning && (React.createElement(Box, { marginTop: 1 },
289
204
  React.createElement(Text, { color: "cyan" },
290
205
  React.createElement(Spinner, { type: "dots" }))))));
@@ -1 +1 @@
1
- {"version":3,"file":"IterationRunner.js","sourceRoot":"","sources":["../../src/components/IterationRunner.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IterationRunner.js","sourceRoot":"","sources":["../../src/components/IterationRunner.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import React from "react";
2
- export declare const ReplayLog: ({ filePath }: Props) => React.JSX.Element;
2
+ export declare const ReplayLog: ({ filePath, claudeVersion, ralphVersion }: Props) => React.JSX.Element;
3
3
  type Props = {
4
4
  filePath: string;
5
+ claudeVersion: string;
6
+ ralphVersion: string;
5
7
  };
6
8
  export {};
7
9
  //# sourceMappingURL=ReplayLog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReplayLog.d.ts","sourceRoot":"","sources":["../../src/components/ReplayLog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAKlD,eAAO,MAAM,SAAS,GAAI,cAAc,KAAK,sBAsD5C,CAAA;AAED,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA"}
1
+ {"version":3,"file":"ReplayLog.d.ts","sourceRoot":"","sources":["../../src/components/ReplayLog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAKlD,eAAO,MAAM,SAAS,GAAI,2CAA2C,KAAK,sBA4DzE,CAAA;AAED,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA"}
@@ -2,7 +2,7 @@ import React, { useState, useEffect } from "react";
2
2
  import { Box, Text, useApp } from "ink";
3
3
  import { readFileSync } from "fs";
4
4
  import { EventDisplay } from "./EventDisplay.js";
5
- export const ReplayLog = ({ filePath }) => {
5
+ export const ReplayLog = ({ filePath, claudeVersion, ralphVersion }) => {
6
6
  const { exit } = useApp();
7
7
  const [events, setEvents] = useState([]);
8
8
  const [error, setError] = useState();
@@ -46,6 +46,6 @@ export const ReplayLog = ({ filePath }) => {
46
46
  filePath)),
47
47
  React.createElement(Box, { marginBottom: 1 },
48
48
  React.createElement(Text, { dimColor: true }, "─".repeat(40))),
49
- React.createElement(EventDisplay, { events: events })));
49
+ React.createElement(EventDisplay, { events: events, iteration: 1, completedIterations: [], claudeVersion: claudeVersion, ralphVersion: ralphVersion })));
50
50
  };
51
51
  //# sourceMappingURL=ReplayLog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReplayLog.js","sourceRoot":"","sources":["../../src/components/ReplayLog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAS,EAAE,EAAE;IAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAA;IACzB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAiC,EAAE,CAAC,CAAA;IACxE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAU,CAAA;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC/C,yEAAyE;YACzE,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAEjE,MAAM,YAAY,GAAmC,EAAE,CAAA;YACvD,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;gBACpC,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;oBAClC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC1B,CAAC;gBAAC,MAAM,CAAC;oBACP,yBAAyB;gBAC3B,CAAC;YACH,CAAC;YAED,SAAS,CAAC,YAAY,CAAC,CAAA;YACvB,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,EAAE,CAAA;gBACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC,EAAE,GAAG,CAAC,CAAA;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,+BAA+B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC3F,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,EAAE,CAAA;gBACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC,EAAE,GAAG,CAAC,CAAA;QACT,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;IAEpB,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;YACzB,oBAAC,IAAI,IAAC,KAAK,EAAC,KAAK,IAAE,KAAK,CAAQ,CAC5B,CACP,CAAA;IACH,CAAC;IAED,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,oBAAC,GAAG,IAAC,YAAY,EAAE,CAAC;YAClB,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;;gBAAa,QAAQ,CAAQ,CAC3C;QACN,oBAAC,GAAG,IAAC,YAAY,EAAE,CAAC;YAClB,oBAAC,IAAI,IAAC,QAAQ,UAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAQ,CAClC;QACN,oBAAC,YAAY,IAAC,MAAM,EAAE,MAAM,GAAI,CAC5B,CACP,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"ReplayLog.js","sourceRoot":"","sources":["../../src/components/ReplayLog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAS,EAAE,EAAE;IAC5E,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAA;IACzB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAiC,EAAE,CAAC,CAAA;IACxE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAU,CAAA;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC/C,yEAAyE;YACzE,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAEjE,MAAM,YAAY,GAAmC,EAAE,CAAA;YACvD,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;gBACpC,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;oBAClC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC1B,CAAC;gBAAC,MAAM,CAAC;oBACP,yBAAyB;gBAC3B,CAAC;YACH,CAAC;YAED,SAAS,CAAC,YAAY,CAAC,CAAA;YACvB,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,EAAE,CAAA;gBACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC,EAAE,GAAG,CAAC,CAAA;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,+BAA+B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC3F,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,EAAE,CAAA;gBACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC,EAAE,GAAG,CAAC,CAAA;QACT,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;IAEpB,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;YACzB,oBAAC,IAAI,IAAC,KAAK,EAAC,KAAK,IAAE,KAAK,CAAQ,CAC5B,CACP,CAAA;IACH,CAAC;IAED,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,oBAAC,GAAG,IAAC,YAAY,EAAE,CAAC;YAClB,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;;gBAAa,QAAQ,CAAQ,CAC3C;QACN,oBAAC,GAAG,IAAC,YAAY,EAAE,CAAC;YAClB,oBAAC,IAAI,IAAC,QAAQ,UAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAQ,CAClC;QACN,oBAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,CAAC,EACZ,mBAAmB,EAAE,EAAE,EACvB,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,GAC1B,CACE,CACP,CAAA;AACH,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- import "./lib/signalHandler.js";
2
1
  export declare const run: () => void;
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,wBAAwB,CAAA;AAE/B,eAAO,MAAM,GAAG,YAEf,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG,YAEf,CAAA"}
package/dist/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { program } from "./cli.js";
2
- import "./lib/signalHandler.js"; // Register global SIGINT/SIGTERM handlers
3
2
  export const run = () => {
4
3
  program.parse(process.argv);
5
4
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,wBAAwB,CAAA,CAAC,0CAA0C;AAE1E,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAC7B,CAAC,CAAA;AAED,yBAAyB;AACzB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,GAAG,EAAE,CAAA;AACP,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAElC,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAC7B,CAAC,CAAA;AAED,yBAAyB;AACzB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,GAAG,EAAE,CAAA;AACP,CAAC"}
@@ -0,0 +1,10 @@
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
+ */
5
+ export declare const addTodo: (description: string, cwd?: string) => void;
6
+ /**
7
+ * Inserts a todo item into the content, right after the "To do" header.
8
+ */
9
+ export declare const insertTodo: (content: string, description: string) => string;
10
+ //# sourceMappingURL=addTodo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addTodo.d.ts","sourceRoot":"","sources":["../../src/lib/addTodo.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,aAAa,MAAM,EAAE,MAAK,MAAsB,KAAG,IAqC1E,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,aAAa,MAAM,KAAG,MAmBjE,CAAA"}
@@ -0,0 +1,55 @@
1
+ import { execSync } from "child_process";
2
+ import { readFileSync, writeFileSync } from "fs";
3
+ import { join } from "path";
4
+ /**
5
+ * Adds a todo item to the todo.md file and commits just that line.
6
+ * Inserts the todo into the working directory, stages only that line, and commits.
7
+ */
8
+ export const addTodo = (description, cwd = process.cwd()) => {
9
+ const todoPath = join(cwd, ".ralph", "todo.md");
10
+ // Read current working directory file and insert the new todo
11
+ const content = readFileSync(todoPath, "utf-8");
12
+ const newContent = insertTodo(content, description);
13
+ // Write updated content to working directory
14
+ writeFileSync(todoPath, newContent);
15
+ // Get what's currently in the index for this file (or HEAD if not staged)
16
+ const indexContent = execSync("git show :0:.ralph/todo.md 2>/dev/null || git show HEAD:.ralph/todo.md", {
17
+ cwd,
18
+ encoding: "utf-8",
19
+ });
20
+ // Create a blob with just the todo added to the index version
21
+ const indexWithTodo = insertTodo(indexContent, description);
22
+ const blobHash = execSync("git hash-object -w --stdin", {
23
+ cwd,
24
+ encoding: "utf-8",
25
+ input: indexWithTodo,
26
+ }).trim();
27
+ // Stage just our change by updating the index to this blob
28
+ execSync(`git update-index --cacheinfo 100644,${blobHash},.ralph/todo.md`, {
29
+ cwd,
30
+ stdio: "pipe",
31
+ });
32
+ // Commit just the staged change
33
+ execSync(`git commit -m "todo: ${description}"`, { cwd, stdio: "pipe" });
34
+ console.log(`✅ added`);
35
+ };
36
+ /**
37
+ * Inserts a todo item into the content, right after the "To do" header.
38
+ */
39
+ export const insertTodo = (content, description) => {
40
+ const lines = content.split("\n");
41
+ const todoHeaderIndex = lines.findIndex(line => /^###?\s*To\s*do/i.test(line));
42
+ if (todoHeaderIndex === -1) {
43
+ // No "To do" section found, add one at the beginning
44
+ return `### To do\n\n- [ ] ${description}\n\n${content}`;
45
+ }
46
+ // Find the first line after the header (skip empty lines)
47
+ let insertIndex = todoHeaderIndex + 1;
48
+ while (insertIndex < lines.length && lines[insertIndex].trim() === "") {
49
+ insertIndex++;
50
+ }
51
+ // Insert the new todo item
52
+ lines.splice(insertIndex, 0, `- [ ] ${description}`);
53
+ return lines.join("\n");
54
+ };
55
+ //# sourceMappingURL=addTodo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addTodo.js","sourceRoot":"","sources":["../../src/lib/addTodo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,WAAmB,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE,EAAQ,EAAE;IAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;IAE/C,8DAA8D;IAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC/C,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IAEnD,6CAA6C;IAC7C,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAEnC,0EAA0E;IAC1E,MAAM,YAAY,GAAG,QAAQ,CAC3B,wEAAwE,EACxE;QACE,GAAG;QACH,QAAQ,EAAE,OAAO;KAClB,CACF,CAAA;IAED,8DAA8D;IAC9D,MAAM,aAAa,GAAG,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,4BAA4B,EAAE;QACtD,GAAG;QACH,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,aAAa;KACrB,CAAC,CAAC,IAAI,EAAE,CAAA;IAET,2DAA2D;IAC3D,QAAQ,CAAC,uCAAuC,QAAQ,iBAAiB,EAAE;QACzE,GAAG;QACH,KAAK,EAAE,MAAM;KACd,CAAC,CAAA;IAEF,gCAAgC;IAChC,QAAQ,CAAC,wBAAwB,WAAW,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAExE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AACxB,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,WAAmB,EAAU,EAAE;IACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAE9E,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3B,qDAAqD;QACrD,OAAO,sBAAsB,WAAW,OAAO,OAAO,EAAE,CAAA;IAC1D,CAAC;IAED,0DAA0D;IAC1D,IAAI,WAAW,GAAG,eAAe,GAAG,CAAC,CAAA;IACrC,OAAO,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtE,WAAW,EAAE,CAAA;IACf,CAAC;IAED,2BAA2B;IAC3B,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC,CAAA;IAEpD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herbcaudill/ralph",
3
- "version": "0.4.3",
3
+ "version": "0.5.1",
4
4
  "description": "Autonomous AI iteration engine for Claude CLI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -30,7 +30,6 @@
30
30
  "dependencies": {
31
31
  "chalk": "^5.6.2",
32
32
  "commander": "^14.0.2",
33
- "execa": "^9.6.1",
34
33
  "ink": "^6.6.0",
35
34
  "ink-big-text": "^2.0.0",
36
35
  "ink-gradient": "^3.0.0",
@@ -42,6 +41,7 @@
42
41
  "@types/node": "^24.10.1",
43
42
  "@types/react": "^19.2.8",
44
43
  "@vitest/ui": "^4.0.17",
44
+ "execa": "^9.6.1",
45
45
  "ink-testing-library": "^4.0.0",
46
46
  "prettier": "^3.5.3",
47
47
  "tsx": "^4.21.0",
@@ -55,9 +55,9 @@
55
55
  "build": "tsc",
56
56
  "dev": "tsc --watch",
57
57
  "ralph": "tsx src/index.ts",
58
- "test": "vitest run",
59
- "test:unit": "pnpm test --exclude test/e2e/**",
60
- "test:e2e": "pnpm test --config vitest.e2e.config.ts",
58
+ "test": "vitest",
59
+ "test:unit": "vitest --exclude test/e2e/**",
60
+ "test:e2e": "vitest --config vitest.e2e.config.ts",
61
61
  "test:watch": "vitest --watch",
62
62
  "test:ui": "vitest --ui",
63
63
  "format": "prettier --write ."