wolverine-ai 3.7.0 → 3.7.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wolverine-ai",
3
- "version": "3.7.0",
3
+ "version": "3.7.2",
4
4
  "description": "Self-healing Node.js server framework powered by AI. Catches crashes, diagnoses errors, generates fixes, verifies, and restarts — automatically.",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -260,6 +260,9 @@ class WolverineRunner {
260
260
 
261
261
  restart() {
262
262
  console.log(chalk.blue("\n šŸ”„ Restarting server..."));
263
+ // Reset config cache so restart picks up any settings.json changes
264
+ const { resetConfig } = require("./config");
265
+ resetConfig();
263
266
  this.healthMonitor.stop();
264
267
  this._clearStabilityTimer();
265
268
 
@@ -555,6 +558,7 @@ class WolverineRunner {
555
558
  this._healInProgress = false;
556
559
  this._healStatus = null;
557
560
  this._spawn();
561
+ this._processPendingErrorHeal();
558
562
  } else {
559
563
  console.log(chalk.red(`\n🐺 Wolverine could not heal: ${result.explanation}`));
560
564
 
@@ -606,7 +610,13 @@ class WolverineRunner {
606
610
  * Unlike crash healing, the server is still running — we heal and restart.
607
611
  */
608
612
  async _healFromError(routePath, errorDetails) {
609
- if (this._healInProgress || this._shuttingDown) return;
613
+ if (this._shuttingDown) return;
614
+ if (this._healInProgress) {
615
+ // Queue the error — process after current heal finishes
616
+ this._pendingErrorHeal = { routePath, errorDetails };
617
+ console.log(chalk.yellow(` šŸ”„ Heal in progress — queued IPC error on ${routePath} for after current heal`));
618
+ return;
619
+ }
610
620
  this._healInProgress = true;
611
621
 
612
622
  console.log(chalk.yellow(`\n🐺 Wolverine healing caught error on ${routePath}...`));
@@ -690,6 +700,16 @@ class WolverineRunner {
690
700
  }
691
701
  }
692
702
 
703
+ _processPendingErrorHeal() {
704
+ if (this._pendingErrorHeal) {
705
+ const { routePath, errorDetails } = this._pendingErrorHeal;
706
+ this._pendingErrorHeal = null;
707
+ console.log(chalk.yellow(` šŸ”„ Processing queued IPC error on ${routePath}`));
708
+ // Small delay to let the new child process start
709
+ setTimeout(() => this._healFromError(routePath, errorDetails), 2000);
710
+ }
711
+ }
712
+
693
713
  _startStabilityTimer() {
694
714
  this._clearStabilityTimer();
695
715
  // Capture backup ID in closure — prevents race where a new heal overwrites _lastBackupId
@@ -126,7 +126,7 @@ class ErrorMonitor {
126
126
  */
127
127
  reset() {
128
128
  this.routes.clear();
129
- // Keep cooldowns — don't re-trigger immediately after restart
129
+ this._cooldowns.clear(); // Clear cooldowns on restart — fresh start, fresh heal eligibility
130
130
  }
131
131
  }
132
132