chore: bump version to 0.1436

This commit is contained in:
arkon
2026-01-30 11:39:15 +01:00
parent 1fb06ecf47
commit 0020ae5a3e
5 changed files with 31 additions and 15 deletions
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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",
+13 -2
View File
@@ -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;
+14 -11
View File
@@ -456,28 +456,31 @@
</div>
</div>
<div class="form-section-header">Prompts</div>
<div class="form-section-header">Respawn Cycle</div>
<div class="form-row">
<label>Update Prompt</label>
<label>1. Update Prompt</label>
<input type="text" id="modalRespawnPrompt" value="update all the docs and CLAUDE.md" placeholder="Prompt to send when idle" onchange="app.autoSaveRespawnConfig()">
</div>
<div class="respawn-options-row" style="margin: 8px 0;">
<label class="checkbox-inline">
<input type="checkbox" id="modalRespawnSendClear" checked onchange="app.autoSaveRespawnConfig()">
<span>2. Send /clear</span>
</label>
<label class="checkbox-inline">
<input type="checkbox" id="modalRespawnSendInit" checked onchange="app.autoSaveRespawnConfig()">
<span>3. Send /init</span>
</label>
</div>
<div class="form-row">
<label>Kickstart Prompt</label>
<label>4. Kickstart Prompt</label>
<input type="text" id="modalRespawnKickstart" value="" placeholder="Optional: prompt if /init doesn't trigger work" onchange="app.autoSaveRespawnConfig()">
<span class="form-hint">Sent only when /init completes but Claude stays idle</span>
</div>
<div class="form-section-header">Behavior</div>
<div class="respawn-options-row">
<label class="checkbox-inline">
<input type="checkbox" id="modalRespawnSendClear" checked onchange="app.autoSaveRespawnConfig()">
<span>Send /clear</span>
</label>
<label class="checkbox-inline">
<input type="checkbox" id="modalRespawnSendInit" checked onchange="app.autoSaveRespawnConfig()">
<span>Send /init</span>
</label>
<label class="checkbox-inline">
<input type="checkbox" id="modalRespawnAutoAccept" checked onchange="app.autoSaveRespawnConfig()">
<span>Auto-accept prompts</span>
+2
View File
@@ -4112,6 +4112,8 @@ NOW: Generate the implementation plan for the task above. Think step by step.`;
const controller = this.respawnControllers.get(sessionId);
if (controller) {
controller.stop();
controller.removeAllListeners();
this.respawnControllers.delete(sessionId);
this.broadcast('respawn:stopped', { sessionId, reason: 'duration_expired' });
}
this.respawnTimers.delete(sessionId);