wiggum-cli 0.11.2 → 0.11.3
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/.claude/settings.local.json +2 -1
- package/dist/templates/scripts/feature-loop.sh.tmpl +7 -2
- package/dist/tui/utils/loop-status.d.ts.map +1 -1
- package/dist/tui/utils/loop-status.js +4 -2
- package/dist/tui/utils/loop-status.js.map +1 -1
- package/package.json +1 -1
- package/src/templates/scripts/feature-loop.sh.tmpl +7 -2
- package/src/tui/utils/loop-status.ts +4 -2
|
@@ -79,6 +79,8 @@ CLAUDE_CMD_IMPL="claude -p --dangerously-skip-permissions --model ${MODEL:-$DEFA
|
|
|
79
79
|
# Token tracking
|
|
80
80
|
TOKENS_FILE="/tmp/ralph-loop-${1}.tokens"
|
|
81
81
|
CLAUDE_OUTPUT="/tmp/ralph-loop-${1}.output"
|
|
82
|
+
STATUS_FILE="/tmp/ralph-loop-${1}.status"
|
|
83
|
+
FINAL_STATUS_FILE="/tmp/ralph-loop-${1}.final"
|
|
82
84
|
|
|
83
85
|
# Initialize token tracking
|
|
84
86
|
init_tokens() {
|
|
@@ -187,7 +189,7 @@ while true; do
|
|
|
187
189
|
fi
|
|
188
190
|
|
|
189
191
|
ITERATION=$((ITERATION + 1))
|
|
190
|
-
echo "$ITERATION|$MAX_ITERATIONS|$(date +%s)" > "
|
|
192
|
+
echo "$ITERATION|$MAX_ITERATIONS|$(date +%s)" > "$STATUS_FILE"
|
|
191
193
|
echo "------------------------ Iteration $ITERATION ------------------------"
|
|
192
194
|
|
|
193
195
|
# Check if implementation tasks are done
|
|
@@ -249,8 +251,11 @@ export FEATURE APP_DIR SPEC_DIR PROMPTS_DIR
|
|
|
249
251
|
cat "$PROMPTS_DIR/PROMPT_review.md" | envsubst | $CLAUDE_CMD_OPUS 2>&1 | tee "$CLAUDE_OUTPUT" || true
|
|
250
252
|
parse_and_accumulate_tokens "$CLAUDE_OUTPUT"
|
|
251
253
|
|
|
254
|
+
# Persist final status for TUI summaries
|
|
255
|
+
echo "$ITERATION|$MAX_ITERATIONS|$(date +%s)|done" > "$FINAL_STATUS_FILE" 2>/dev/null || true
|
|
256
|
+
|
|
252
257
|
# Cleanup temp files
|
|
253
|
-
rm -f "
|
|
258
|
+
rm -f "$STATUS_FILE" 2>/dev/null || true
|
|
254
259
|
rm -f "/tmp/ralph-loop-${FEATURE}.output" 2>/dev/null || true
|
|
255
260
|
|
|
256
261
|
# Print final token usage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-status.d.ts","sourceRoot":"","sources":["../../../src/tui/utils/loop-status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAcD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"loop-status.d.ts","sourceRoot":"","sources":["../../../src/tui/utils/loop-status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAcD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAyC1D;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CAuCrB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CASxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQhD"}
|
|
@@ -40,12 +40,14 @@ export function detectPhase(feature) {
|
|
|
40
40
|
*/
|
|
41
41
|
export function readLoopStatus(feature) {
|
|
42
42
|
const statusFile = `/tmp/ralph-loop-${feature}.status`;
|
|
43
|
+
const finalStatusFile = `/tmp/ralph-loop-${feature}.final`;
|
|
43
44
|
const tokensFile = `/tmp/ralph-loop-${feature}.tokens`;
|
|
44
45
|
let iteration = 0;
|
|
45
46
|
let maxIterations = 0;
|
|
46
|
-
if (existsSync(statusFile)) {
|
|
47
|
+
if (existsSync(statusFile) || existsSync(finalStatusFile)) {
|
|
48
|
+
const fileToRead = existsSync(statusFile) ? statusFile : finalStatusFile;
|
|
47
49
|
try {
|
|
48
|
-
const content = readFileSync(
|
|
50
|
+
const content = readFileSync(fileToRead, 'utf-8').trim();
|
|
49
51
|
const parts = content.split('|');
|
|
50
52
|
iteration = parseInt(parts[0] || '0', 10) || 0;
|
|
51
53
|
maxIterations = parseInt(parts[1] || '0', 10) || 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-status.js","sourceRoot":"","sources":["../../../src/tui/utils/loop-status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAkB/D;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7E,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,IAAI,gBAAgB,CAAC,mBAAmB,CAAC;QAAE,OAAO,UAAU,CAAC;IAC7D,IAAI,gBAAgB,CAAC,eAAe,CAAC;QAAE,OAAO,aAAa,CAAC;IAC5D,IAAI,gBAAgB,CAAC,kBAAkB,CAAC;QAAE,OAAO,cAAc,CAAC;IAChE,IAAI,gBAAgB,CAAC,kBAAkB,CAAC;QAAE,OAAO,WAAW,CAAC;IAC7D,IAAI,gBAAgB,CAAC,WAAW,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAC3D,IAAI,gBAAgB,CAAC,oBAAoB,OAAO,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IACtE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,UAAU,GAAG,mBAAmB,OAAO,SAAS,CAAC;IACvD,MAAM,UAAU,GAAG,mBAAmB,OAAO,SAAS,CAAC;IAEvD,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"loop-status.js","sourceRoot":"","sources":["../../../src/tui/utils/loop-status.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -79,6 +79,8 @@ CLAUDE_CMD_IMPL="claude -p --dangerously-skip-permissions --model ${MODEL:-$DEFA
|
|
|
79
79
|
# Token tracking
|
|
80
80
|
TOKENS_FILE="/tmp/ralph-loop-${1}.tokens"
|
|
81
81
|
CLAUDE_OUTPUT="/tmp/ralph-loop-${1}.output"
|
|
82
|
+
STATUS_FILE="/tmp/ralph-loop-${1}.status"
|
|
83
|
+
FINAL_STATUS_FILE="/tmp/ralph-loop-${1}.final"
|
|
82
84
|
|
|
83
85
|
# Initialize token tracking
|
|
84
86
|
init_tokens() {
|
|
@@ -187,7 +189,7 @@ while true; do
|
|
|
187
189
|
fi
|
|
188
190
|
|
|
189
191
|
ITERATION=$((ITERATION + 1))
|
|
190
|
-
echo "$ITERATION|$MAX_ITERATIONS|$(date +%s)" > "
|
|
192
|
+
echo "$ITERATION|$MAX_ITERATIONS|$(date +%s)" > "$STATUS_FILE"
|
|
191
193
|
echo "------------------------ Iteration $ITERATION ------------------------"
|
|
192
194
|
|
|
193
195
|
# Check if implementation tasks are done
|
|
@@ -249,8 +251,11 @@ export FEATURE APP_DIR SPEC_DIR PROMPTS_DIR
|
|
|
249
251
|
cat "$PROMPTS_DIR/PROMPT_review.md" | envsubst | $CLAUDE_CMD_OPUS 2>&1 | tee "$CLAUDE_OUTPUT" || true
|
|
250
252
|
parse_and_accumulate_tokens "$CLAUDE_OUTPUT"
|
|
251
253
|
|
|
254
|
+
# Persist final status for TUI summaries
|
|
255
|
+
echo "$ITERATION|$MAX_ITERATIONS|$(date +%s)|done" > "$FINAL_STATUS_FILE" 2>/dev/null || true
|
|
256
|
+
|
|
252
257
|
# Cleanup temp files
|
|
253
|
-
rm -f "
|
|
258
|
+
rm -f "$STATUS_FILE" 2>/dev/null || true
|
|
254
259
|
rm -f "/tmp/ralph-loop-${FEATURE}.output" 2>/dev/null || true
|
|
255
260
|
|
|
256
261
|
# Print final token usage
|
|
@@ -53,14 +53,16 @@ export function detectPhase(feature: string): string {
|
|
|
53
53
|
*/
|
|
54
54
|
export function readLoopStatus(feature: string): LoopStatus {
|
|
55
55
|
const statusFile = `/tmp/ralph-loop-${feature}.status`;
|
|
56
|
+
const finalStatusFile = `/tmp/ralph-loop-${feature}.final`;
|
|
56
57
|
const tokensFile = `/tmp/ralph-loop-${feature}.tokens`;
|
|
57
58
|
|
|
58
59
|
let iteration = 0;
|
|
59
60
|
let maxIterations = 0;
|
|
60
61
|
|
|
61
|
-
if (existsSync(statusFile)) {
|
|
62
|
+
if (existsSync(statusFile) || existsSync(finalStatusFile)) {
|
|
63
|
+
const fileToRead = existsSync(statusFile) ? statusFile : finalStatusFile;
|
|
62
64
|
try {
|
|
63
|
-
const content = readFileSync(
|
|
65
|
+
const content = readFileSync(fileToRead, 'utf-8').trim();
|
|
64
66
|
const parts = content.split('|');
|
|
65
67
|
iteration = parseInt(parts[0] || '0', 10) || 0;
|
|
66
68
|
maxIterations = parseInt(parts[1] || '0', 10) || 0;
|