@herbcaudill/ralph 0.4.0 → 0.4.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.
- package/dist/components/IterationRunner.d.ts.map +1 -1
- package/dist/components/IterationRunner.js +9 -3
- package/dist/components/IterationRunner.js.map +1 -1
- package/dist/lib/mergeWorktreeToMain.d.ts.map +1 -1
- package/dist/lib/mergeWorktreeToMain.js +36 -26
- package/dist/lib/mergeWorktreeToMain.js.map +1 -1
- package/dist/lib/resolveConflicts.d.ts +6 -0
- package/dist/lib/resolveConflicts.d.ts.map +1 -0
- package/dist/lib/resolveConflicts.js +76 -0
- package/dist/lib/resolveConflicts.js.map +1 -0
- package/package.json +2 -1
|
@@ -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,
|
|
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,5 +1,6 @@
|
|
|
1
1
|
import React, { useState, useEffect, useRef } from "react";
|
|
2
2
|
import { Box, Text, useApp } from "ink";
|
|
3
|
+
import Spinner from "ink-spinner";
|
|
3
4
|
import SelectInput from "ink-select-input";
|
|
4
5
|
import { execSync } from "child_process";
|
|
5
6
|
import { execa } from "execa";
|
|
@@ -11,7 +12,6 @@ import { stashChanges } from "../lib/stashChanges.js";
|
|
|
11
12
|
import { popStash } from "../lib/popStash.js";
|
|
12
13
|
import { createWorktree } from "../lib/createWorktree.js";
|
|
13
14
|
import { copyRalphFilesToWorktree } from "../lib/copyRalphFilesToWorktree.js";
|
|
14
|
-
import { copyRalphFilesFromWorktree } from "../lib/copyRalphFilesFromWorktree.js";
|
|
15
15
|
import { mergeWorktreeToMain } from "../lib/mergeWorktreeToMain.js";
|
|
16
16
|
import { cleanupWorktree } from "../lib/cleanupWorktree.js";
|
|
17
17
|
import { installDependencies } from "../lib/installDependencies.js";
|
|
@@ -31,6 +31,7 @@ export const IterationRunner = ({ totalIterations }) => {
|
|
|
31
31
|
const [error, setError] = useState();
|
|
32
32
|
const [needsInit, setNeedsInit] = useState(null);
|
|
33
33
|
const [initializing, setInitializing] = useState(false);
|
|
34
|
+
const [isRunning, setIsRunning] = useState(false);
|
|
34
35
|
// Use refs for worktree/stash state to avoid triggering effect re-runs
|
|
35
36
|
const currentWorktreeRef = useRef(null);
|
|
36
37
|
const hasStashedChangesRef = useRef(false);
|
|
@@ -157,6 +158,7 @@ export const IterationRunner = ({ totalIterations }) => {
|
|
|
157
158
|
detached: true, // Run in new process group to prevent SIGINT propagation
|
|
158
159
|
});
|
|
159
160
|
childProcessRef.current = child;
|
|
161
|
+
setIsRunning(true);
|
|
160
162
|
let fullOutput = "";
|
|
161
163
|
const worktreeLogFile = join(worktree.path, ".ralph", "events.log");
|
|
162
164
|
// Handle streaming stdout
|
|
@@ -180,6 +182,7 @@ export const IterationRunner = ({ totalIterations }) => {
|
|
|
180
182
|
// Handle process completion
|
|
181
183
|
child.then(result => {
|
|
182
184
|
childProcessRef.current = null;
|
|
185
|
+
setIsRunning(false);
|
|
183
186
|
const gitRoot = getGitRoot(repoRoot);
|
|
184
187
|
// Handle error exit (but not if terminated by signal during cleanup)
|
|
185
188
|
if (result.exitCode !== 0 && !result.isTerminated) {
|
|
@@ -198,8 +201,8 @@ export const IterationRunner = ({ totalIterations }) => {
|
|
|
198
201
|
return;
|
|
199
202
|
}
|
|
200
203
|
// Merge worktree changes back to main
|
|
204
|
+
// Note: .ralph/ files are included in the merge since Claude commits them in the worktree
|
|
201
205
|
try {
|
|
202
|
-
copyRalphFilesFromWorktree(gitRoot, worktree.path);
|
|
203
206
|
mergeWorktreeToMain(gitRoot, worktree);
|
|
204
207
|
cleanupWorktree(gitRoot, worktree);
|
|
205
208
|
currentWorktreeRef.current = null;
|
|
@@ -281,6 +284,9 @@ export const IterationRunner = ({ totalIterations }) => {
|
|
|
281
284
|
React.createElement(Text, { color: "cyan" },
|
|
282
285
|
"Iteration ",
|
|
283
286
|
currentIteration)),
|
|
284
|
-
React.createElement(EventDisplay, { events: events })
|
|
287
|
+
React.createElement(EventDisplay, { events: events }),
|
|
288
|
+
isRunning && (React.createElement(Box, { marginTop: 1 },
|
|
289
|
+
React.createElement(Text, { color: "cyan" },
|
|
290
|
+
React.createElement(Spinner, { type: "dots" }))))));
|
|
285
291
|
};
|
|
286
292
|
//# sourceMappingURL=IterationRunner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IterationRunner.js","sourceRoot":"","sources":["../../src/components/IterationRunner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AACvC,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,KAAK,EAAsB,MAAM,OAAO,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAC7E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"IterationRunner.js","sourceRoot":"","sources":["../../src/components/IterationRunner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeWorktreeToMain.d.ts","sourceRoot":"","sources":["../../src/lib/mergeWorktreeToMain.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAe,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"mergeWorktreeToMain.d.ts","sourceRoot":"","sources":["../../src/lib/mergeWorktreeToMain.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAe,MAAM,YAAY,CAAA;AAGtD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAmDlF"}
|
|
@@ -1,44 +1,54 @@
|
|
|
1
1
|
import { execSync } from "child_process";
|
|
2
2
|
import { execOptions } from "./types.js";
|
|
3
|
+
import { resolveConflicts } from "./resolveConflicts.js";
|
|
3
4
|
/**
|
|
4
5
|
* Merge worktree changes back to main branch and commit
|
|
5
6
|
*/
|
|
6
7
|
export function mergeWorktreeToMain(repoRoot, worktree) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
// First, ensure all changes in worktree are committed
|
|
9
|
+
// (Claude should have done this, but let's be safe)
|
|
10
|
+
const status = execSync("git status --porcelain", {
|
|
11
|
+
...execOptions,
|
|
12
|
+
cwd: worktree.path,
|
|
13
|
+
});
|
|
14
|
+
if (status.toString().trim()) {
|
|
15
|
+
// There are uncommitted changes - commit them
|
|
16
|
+
execSync("git add -A", {
|
|
11
17
|
...execOptions,
|
|
12
18
|
cwd: worktree.path,
|
|
13
19
|
});
|
|
14
|
-
|
|
15
|
-
// There are uncommitted changes - commit them
|
|
16
|
-
execSync("git add -A", {
|
|
17
|
-
...execOptions,
|
|
18
|
-
cwd: worktree.path,
|
|
19
|
-
});
|
|
20
|
-
execSync(`git commit -m "Ralph iteration ${worktree.guid}: auto-commit remaining changes"`, {
|
|
21
|
-
...execOptions,
|
|
22
|
-
cwd: worktree.path,
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
// Get current branch in main repo
|
|
26
|
-
const currentBranch = execSync("git branch --show-current", {
|
|
20
|
+
execSync(`git commit -m "Ralph iteration ${worktree.guid}: auto-commit remaining changes"`, {
|
|
27
21
|
...execOptions,
|
|
28
|
-
cwd:
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
cwd: worktree.path,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
// Try to merge the worktree branch into current branch
|
|
26
|
+
try {
|
|
33
27
|
execSync(`git merge --no-ff ${worktree.branch} -m "Merge iteration ${worktree.guid}"`, {
|
|
34
28
|
...execOptions,
|
|
35
29
|
cwd: repoRoot,
|
|
36
30
|
});
|
|
37
31
|
}
|
|
38
|
-
catch (
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
catch (mergeError) {
|
|
33
|
+
// Merge failed, likely due to conflicts - try to resolve them with Claude
|
|
34
|
+
console.log("\nMerge conflict detected. Attempting to resolve with Claude...");
|
|
35
|
+
const resolved = resolveConflicts(repoRoot);
|
|
36
|
+
if (!resolved) {
|
|
37
|
+
// Abort the merge if we couldn't resolve
|
|
38
|
+
try {
|
|
39
|
+
execSync("git merge --abort", {
|
|
40
|
+
...execOptions,
|
|
41
|
+
cwd: repoRoot,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Ignore errors from abort
|
|
46
|
+
}
|
|
47
|
+
throw new Error(`Failed to merge worktree to main: ${mergeError}\n\n` +
|
|
48
|
+
`Claude was unable to resolve the conflicts automatically.\n` +
|
|
49
|
+
`You may need to resolve conflicts manually in the main repository.`);
|
|
50
|
+
}
|
|
51
|
+
console.log("Conflicts resolved successfully.");
|
|
42
52
|
}
|
|
43
53
|
}
|
|
44
54
|
//# sourceMappingURL=mergeWorktreeToMain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeWorktreeToMain.js","sourceRoot":"","sources":["../../src/lib/mergeWorktreeToMain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAgB,WAAW,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"mergeWorktreeToMain.js","sourceRoot":"","sources":["../../src/lib/mergeWorktreeToMain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAgB,WAAW,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,QAAsB;IAC1E,sDAAsD;IACtD,oDAAoD;IACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,wBAAwB,EAAE;QAChD,GAAG,WAAW;QACd,GAAG,EAAE,QAAQ,CAAC,IAAI;KACnB,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7B,8CAA8C;QAC9C,QAAQ,CAAC,YAAY,EAAE;YACrB,GAAG,WAAW;YACd,GAAG,EAAE,QAAQ,CAAC,IAAI;SACnB,CAAC,CAAA;QACF,QAAQ,CAAC,kCAAkC,QAAQ,CAAC,IAAI,kCAAkC,EAAE;YAC1F,GAAG,WAAW;YACd,GAAG,EAAE,QAAQ,CAAC,IAAI;SACnB,CAAC,CAAA;IACJ,CAAC;IAED,uDAAuD;IACvD,IAAI,CAAC;QACH,QAAQ,CAAC,qBAAqB,QAAQ,CAAC,MAAM,wBAAwB,QAAQ,CAAC,IAAI,GAAG,EAAE;YACrF,GAAG,WAAW;YACd,GAAG,EAAE,QAAQ;SACd,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,UAAU,EAAE,CAAC;QACpB,0EAA0E;QAC1E,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAA;QAE9E,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,yCAAyC;YACzC,IAAI,CAAC;gBACH,QAAQ,CAAC,mBAAmB,EAAE;oBAC5B,GAAG,WAAW;oBACd,GAAG,EAAE,QAAQ;iBACd,CAAC,CAAA;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;YAED,MAAM,IAAI,KAAK,CACb,qCAAqC,UAAU,MAAM;gBACnD,6DAA6D;gBAC7D,oEAAoE,CACvE,CAAA;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@herbcaudill/ralph",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Autonomous AI iteration engine for Claude CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"ink-big-text": "^2.0.0",
|
|
48
48
|
"ink-gradient": "^3.0.0",
|
|
49
49
|
"ink-select-input": "^6.2.0",
|
|
50
|
+
"ink-spinner": "^5.0.0",
|
|
50
51
|
"react": "^19.2.3"
|
|
51
52
|
},
|
|
52
53
|
"devDependencies": {
|