From 0020ae5a3e8a48da3336d0572ff4fa1bb5e6c395 Mon Sep 17 00:00:00 2001 From: arkon Date: Fri, 30 Jan 2026 11:39:15 +0100 Subject: [PATCH] chore: bump version to 0.1436 --- CLAUDE.md | 2 +- package.json | 2 +- src/respawn-controller.ts | 15 +++++++++++++-- src/web/public/index.html | 25 ++++++++++++++----------- src/web/server.ts | 2 ++ 5 files changed, 31 insertions(+), 15 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index d7a50c0f..d43474f4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -16,7 +16,7 @@ When user says "COM": 1. Increment version in BOTH `package.json` AND `CLAUDE.md` 2. Run: `git add -A && git commit -m "chore: bump version to X.XXXX" && git push && npm run build && systemctl --user restart claudeman-web` -**Version**: 0.1435 (must match `package.json`) +**Version**: 0.1436 (must match `package.json`) ## Project Overview diff --git a/package.json b/package.json index d03cd102..31ee265c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "claudeman", - "version": "0.1435", + "version": "0.1436", "description": "The missing control plane for Claude Code - run 20 autonomous agents with real-time monitoring and session persistence", "type": "module", "main": "dist/index.js", diff --git a/src/respawn-controller.ts b/src/respawn-controller.ts index ce19b5a2..bc66d3fe 100644 --- a/src/respawn-controller.ts +++ b/src/respawn-controller.ts @@ -705,8 +705,11 @@ export class RespawnController extends EventEmitter { if (c.aiPlanCheckMaxContext <= 0) c.aiPlanCheckMaxContext = DEFAULT_CONFIG.aiPlanCheckMaxContext; } - /** Wire up AI checker events to controller events */ + /** Wire up AI checker events to controller events (removes existing listeners first to prevent duplicates) */ private setupAiCheckerListeners(): void { + // Remove any existing listeners to prevent duplicates when restarting + this.aiChecker.removeAllListeners(); + this.aiChecker.on('log', (message: string) => { this.log(message); }); @@ -728,8 +731,11 @@ export class RespawnController extends EventEmitter { }); } - /** Wire up plan checker events to controller events */ + /** Wire up plan checker events to controller events (removes existing listeners first to prevent duplicates) */ private setupPlanCheckerListeners(): void { + // Remove any existing listeners to prevent duplicates when restarting + this.planChecker.removeAllListeners(); + this.planChecker.on('log', (message: string) => { this.log(message); }); @@ -996,6 +1002,11 @@ export class RespawnController extends EventEmitter { this.log('Starting respawn controller (multi-layer detection)'); + // Re-setup AI checker listeners in case they were removed by a previous stop() + // This allows the controller to be restarted after being stopped + this.setupAiCheckerListeners(); + this.setupPlanCheckerListeners(); + // Initialize all timestamps and reset hook state const now = Date.now(); this.lastActivityTime = now; diff --git a/src/web/public/index.html b/src/web/public/index.html index 15b04f61..ce5f6ab3 100644 --- a/src/web/public/index.html +++ b/src/web/public/index.html @@ -456,28 +456,31 @@ -
Prompts
+
Respawn Cycle
- +
+
+ + +
+
- + Sent only when /init completes but Claude stays idle
Behavior
- -