claude-evolve 1.0.19 → 1.0.20

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.
@@ -81,24 +81,25 @@ while IFS=, read -r id _ desc perf status; do
81
81
  ((total++))
82
82
 
83
83
  case "$status" in
84
- "completed") ((completed++)) ;;
84
+ "complete" | "completed")
85
+ ((completed++))
86
+ # Only count performance for completed runs
87
+ if [[ -n $perf && $perf != "" ]]; then
88
+ total_performance=$(echo "$total_performance + $perf" | bc -l 2>/dev/null || echo "$total_performance")
89
+ ((count_with_performance++))
90
+
91
+ # Check if this is the top performer
92
+ if [[ -z $top_score ]] || (($(echo "$perf > $top_score" | bc -l 2>/dev/null || echo "0"))); then
93
+ top_score="$perf"
94
+ top_id="$id"
95
+ top_desc="$desc"
96
+ fi
97
+ fi
98
+ ;;
85
99
  "running") ((running++)) ;;
86
100
  "failed" | "timeout" | "interrupted") ((failed++)) ;;
87
101
  *) ((pending++)) ;;
88
102
  esac
89
-
90
- # Track performance stats
91
- if [[ -n $perf && $perf != "" ]]; then
92
- total_performance=$(echo "$total_performance + $perf" | bc -l 2>/dev/null || echo "$total_performance")
93
- ((count_with_performance++))
94
-
95
- # Check if this is the top performer
96
- if [[ -z $top_score ]] || (($(echo "$perf > $top_score" | bc -l 2>/dev/null || echo "0"))); then
97
- top_score="$perf"
98
- top_id="$id"
99
- top_desc="$desc"
100
- fi
101
- fi
102
103
  done <"$csv_file"
103
104
 
104
105
  # Display summary
@@ -153,17 +154,17 @@ plot "$data_file" using 1:2 with linespoints title "Performance"
153
154
  EOF
154
155
 
155
156
  rm -f "$data_file"
156
- echo "Chart saved successfully!"
157
-
158
- # Open chart if requested
159
- if [[ $open_chart == true ]]; then
160
- if command -v open >/dev/null 2>&1; then
161
- open "$output_file"
162
- elif command -v xdg-open >/dev/null 2>&1; then
163
- xdg-open "$output_file"
164
- else
165
- echo "[WARN] Cannot open chart automatically. View: $output_file"
166
- fi
157
+ echo "Chart saved to: $output_file"
158
+
159
+ # Always try to open chart (not just when --open is used)
160
+ if command -v open >/dev/null 2>&1; then
161
+ open "$output_file"
162
+ echo "Opening chart..."
163
+ elif command -v xdg-open >/dev/null 2>&1; then
164
+ xdg-open "$output_file"
165
+ echo "Opening chart..."
166
+ else
167
+ echo "[WARN] Cannot open chart automatically. View: $output_file"
167
168
  fi
168
169
  else
169
170
  if [[ $count_with_performance -eq 0 ]]; then
@@ -49,8 +49,27 @@ EOF
49
49
  esac
50
50
  done
51
51
 
52
- echo "[INFO] Starting evolution run..."
53
- [[ -n $timeout_seconds ]] && echo "[INFO] Using timeout: ${timeout_seconds} seconds"
52
+ echo "[INFO] Starting continuous evolution run..."
53
+ echo "[INFO] Will continue running until no more pending candidates or 5 consecutive failures"
54
+ [[ -n $timeout_seconds ]] && echo "[INFO] Using timeout: ${timeout_seconds} seconds per evaluation"
55
+
56
+ # Track consecutive failures
57
+ consecutive_failures=0
58
+ MAX_FAILURES=5
59
+
60
+ # Track if we should continue after a failure
61
+ should_continue_after_failure() {
62
+ ((consecutive_failures++))
63
+
64
+ if [[ $consecutive_failures -ge $MAX_FAILURES ]]; then
65
+ echo "[ERROR] Too many consecutive failures ($consecutive_failures). Stopping evolution run." >&2
66
+ return 1
67
+ else
68
+ echo "[WARN] Failure $consecutive_failures of $MAX_FAILURES. Continuing to next candidate..." >&2
69
+ echo "----------------------------------------"
70
+ return 0
71
+ fi
72
+ }
54
73
 
55
74
  # Validate workspace using config
56
75
  if [[ ! -d "$FULL_EVOLUTION_DIR" ]]; then
@@ -119,11 +138,13 @@ update_csv_row() {
119
138
  mv "$temp_file" "$FULL_CSV_PATH"
120
139
  }
121
140
 
122
- # Find next candidate
123
- if ! row_num=$(find_empty_row); then
124
- echo "[ERROR] No pending candidates found in CSV. Run 'claude-evolve ideate' to add more candidates." >&2
125
- exit 1
126
- fi
141
+ # Main evolution loop
142
+ while true; do
143
+ # Find next candidate
144
+ if ! row_num=$(find_empty_row); then
145
+ echo "[INFO] No more pending candidates found. Evolution run complete!"
146
+ exit 0
147
+ fi
127
148
 
128
149
  # Get row data
129
150
  row_data=$(get_csv_row "$row_num")
@@ -157,7 +178,11 @@ else
157
178
  if [[ ! -f $parent_file ]]; then
158
179
  echo "[ERROR] Parent algorithm file not found: $parent_file" >&2
159
180
  update_csv_row "$row_num" "" "failed"
160
- exit 1
181
+ if should_continue_after_failure; then
182
+ continue
183
+ else
184
+ exit 1
185
+ fi
161
186
  fi
162
187
  fi
163
188
 
@@ -192,11 +217,11 @@ if [ $((LOOP_COUNTER % 4)) -eq 0 ]; then
192
217
  echo -e "\033[33m**** MEGATHINKING MODE ACTIVATED ****\033[0m"
193
218
  CLAUDE_MODEL="opus"
194
219
  MEGATHINK_PREFIX="megathink: "
195
- echo "[INFO] Using Claude Opus for architectural thinking (iteration $LOOP_COUNTER)"
220
+ echo "[INFO] Using Claude Opus for architectural thinking"
196
221
  else
197
222
  CLAUDE_MODEL="sonnet"
198
223
  MEGATHINK_PREFIX=""
199
- echo "[INFO] Using Claude Sonnet for development (iteration $LOOP_COUNTER)"
224
+ echo "[INFO] Using Claude Sonnet for development"
200
225
  fi
201
226
 
202
227
  # Increment and save counter
@@ -233,7 +258,11 @@ else
233
258
  echo "[ERROR] Claude failed to generate algorithm mutation" >&2
234
259
  echo "[ERROR] Claude output: $generated_code" >&2
235
260
  update_csv_row "$row_num" "" "failed"
236
- exit 1
261
+ if should_continue_after_failure; then
262
+ continue
263
+ else
264
+ exit 1
265
+ fi
237
266
  fi
238
267
 
239
268
  # Save generated algorithm (overwrite the copied file)
@@ -258,7 +287,11 @@ if [[ -n $timeout_seconds ]]; then
258
287
  if [[ $eval_exit_code -eq 124 ]]; then
259
288
  echo "[ERROR] Evaluation timed out after ${timeout_seconds} seconds" >&2
260
289
  update_csv_row "$row_num" "" "timeout"
261
- exit 1
290
+ if should_continue_after_failure; then
291
+ continue 2 # Continue outer while loop from nested context
292
+ else
293
+ exit 1
294
+ fi
262
295
  fi
263
296
  fi
264
297
  else
@@ -293,20 +326,37 @@ if [[ $eval_exit_code -eq 0 ]]; then
293
326
  echo "[ERROR] No score found in evaluator output" >&2
294
327
  echo "[ERROR] Output: $eval_output" >&2
295
328
  update_csv_row "$row_num" "" "failed"
296
- exit 1
329
+ if should_continue_after_failure; then
330
+ continue 2
331
+ else
332
+ exit 1
333
+ fi
297
334
  fi
298
335
  fi
299
336
  else
300
337
  echo "[ERROR] Failed to parse evaluator output" >&2
301
338
  echo "[ERROR] Output: $eval_output" >&2
302
339
  update_csv_row "$row_num" "" "failed"
303
- exit 1
340
+ if should_continue_after_failure; then
341
+ continue
342
+ else
343
+ exit 1
344
+ fi
304
345
  fi
305
346
  else
306
347
  echo "[ERROR] Evaluator failed with exit code $eval_exit_code" >&2
307
348
  echo "[ERROR] Output: $eval_output" >&2
308
349
  update_csv_row "$row_num" "" "failed"
309
- exit 1
350
+ if should_continue_after_failure; then
351
+ continue
352
+ else
353
+ exit 1
354
+ fi
310
355
  fi
311
356
 
312
- echo "[INFO] Evolution cycle completed successfully!"
357
+ echo "[INFO] Evolution cycle completed successfully!"
358
+ consecutive_failures=0 # Reset failure counter on success
359
+
360
+ echo "[INFO] Looking for next candidate..."
361
+ echo "----------------------------------------"
362
+ done # End of main evolution loop
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-evolve",
3
- "version": "1.0.19",
3
+ "version": "1.0.20",
4
4
  "bin": {
5
5
  "claude-evolve": "./bin/claude-evolve",
6
6
  "claude-evolve-main": "./bin/claude-evolve-main",