aicodeman 0.2.8 → 0.3.0
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/README.md +91 -0
- package/dist/ai-idle-checker.d.ts.map +1 -1
- package/dist/ai-idle-checker.js +3 -2
- package/dist/ai-idle-checker.js.map +1 -1
- package/dist/ai-plan-checker.d.ts.map +1 -1
- package/dist/ai-plan-checker.js +3 -2
- package/dist/ai-plan-checker.js.map +1 -1
- package/dist/bash-tool-parser.d.ts +2 -3
- package/dist/bash-tool-parser.d.ts.map +1 -1
- package/dist/bash-tool-parser.js +14 -31
- package/dist/bash-tool-parser.js.map +1 -1
- package/dist/config/ai-defaults.d.ts +16 -0
- package/dist/config/ai-defaults.d.ts.map +1 -0
- package/dist/config/ai-defaults.js +16 -0
- package/dist/config/ai-defaults.js.map +1 -0
- package/dist/config/auth-config.d.ts +19 -0
- package/dist/config/auth-config.d.ts.map +1 -0
- package/dist/config/auth-config.js +28 -0
- package/dist/config/auth-config.js.map +1 -0
- package/dist/config/exec-timeout.d.ts +10 -0
- package/dist/config/exec-timeout.d.ts.map +1 -0
- package/dist/config/exec-timeout.js +10 -0
- package/dist/config/exec-timeout.js.map +1 -0
- package/dist/config/map-limits.d.ts +4 -0
- package/dist/config/map-limits.d.ts.map +1 -1
- package/dist/config/map-limits.js +7 -0
- package/dist/config/map-limits.js.map +1 -1
- package/dist/config/server-timing.d.ts +36 -0
- package/dist/config/server-timing.d.ts.map +1 -0
- package/dist/config/server-timing.js +51 -0
- package/dist/config/server-timing.js.map +1 -0
- package/dist/config/team-config.d.ts +16 -0
- package/dist/config/team-config.d.ts.map +1 -0
- package/dist/config/team-config.js +16 -0
- package/dist/config/team-config.js.map +1 -0
- package/dist/config/terminal-limits.d.ts +18 -0
- package/dist/config/terminal-limits.d.ts.map +1 -0
- package/dist/config/terminal-limits.js +18 -0
- package/dist/config/terminal-limits.js.map +1 -0
- package/dist/config/tunnel-config.d.ts +27 -0
- package/dist/config/tunnel-config.d.ts.map +1 -0
- package/dist/config/tunnel-config.js +36 -0
- package/dist/config/tunnel-config.js.map +1 -0
- package/dist/hooks-config.d.ts.map +1 -1
- package/dist/hooks-config.js +7 -6
- package/dist/hooks-config.js.map +1 -1
- package/dist/image-watcher.d.ts +4 -4
- package/dist/image-watcher.d.ts.map +1 -1
- package/dist/image-watcher.js +17 -30
- package/dist/image-watcher.js.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/plan-orchestrator.d.ts +2 -24
- package/dist/plan-orchestrator.d.ts.map +1 -1
- package/dist/plan-orchestrator.js.map +1 -1
- package/dist/push-store.d.ts +1 -1
- package/dist/push-store.d.ts.map +1 -1
- package/dist/push-store.js +4 -12
- package/dist/push-store.js.map +1 -1
- package/dist/ralph-fix-plan-watcher.d.ts +91 -0
- package/dist/ralph-fix-plan-watcher.d.ts.map +1 -0
- package/dist/ralph-fix-plan-watcher.js +326 -0
- package/dist/ralph-fix-plan-watcher.js.map +1 -0
- package/dist/ralph-plan-tracker.d.ts +201 -0
- package/dist/ralph-plan-tracker.d.ts.map +1 -0
- package/dist/ralph-plan-tracker.js +325 -0
- package/dist/ralph-plan-tracker.js.map +1 -0
- package/dist/ralph-stall-detector.d.ts +84 -0
- package/dist/ralph-stall-detector.d.ts.map +1 -0
- package/dist/ralph-stall-detector.js +139 -0
- package/dist/ralph-stall-detector.js.map +1 -0
- package/dist/ralph-status-parser.d.ts +141 -0
- package/dist/ralph-status-parser.d.ts.map +1 -0
- package/dist/ralph-status-parser.js +478 -0
- package/dist/ralph-status-parser.js.map +1 -0
- package/dist/ralph-tracker.d.ts +194 -685
- package/dist/ralph-tracker.d.ts.map +1 -1
- package/dist/ralph-tracker.js +349 -1713
- package/dist/ralph-tracker.js.map +1 -1
- package/dist/respawn-adaptive-timing.d.ts +61 -0
- package/dist/respawn-adaptive-timing.d.ts.map +1 -0
- package/dist/respawn-adaptive-timing.js +105 -0
- package/dist/respawn-adaptive-timing.js.map +1 -0
- package/dist/respawn-controller.d.ts +14 -101
- package/dist/respawn-controller.d.ts.map +1 -1
- package/dist/respawn-controller.js +155 -594
- package/dist/respawn-controller.js.map +1 -1
- package/dist/respawn-health.d.ts +54 -0
- package/dist/respawn-health.d.ts.map +1 -0
- package/dist/respawn-health.js +183 -0
- package/dist/respawn-health.js.map +1 -0
- package/dist/respawn-metrics.d.ts +81 -0
- package/dist/respawn-metrics.d.ts.map +1 -0
- package/dist/respawn-metrics.js +198 -0
- package/dist/respawn-metrics.js.map +1 -0
- package/dist/respawn-patterns.d.ts +45 -0
- package/dist/respawn-patterns.d.ts.map +1 -0
- package/dist/respawn-patterns.js +125 -0
- package/dist/respawn-patterns.js.map +1 -0
- package/dist/session-auto-ops.d.ts +89 -0
- package/dist/session-auto-ops.d.ts.map +1 -0
- package/dist/session-auto-ops.js +224 -0
- package/dist/session-auto-ops.js.map +1 -0
- package/dist/session-cli-builder.d.ts +62 -0
- package/dist/session-cli-builder.d.ts.map +1 -0
- package/dist/session-cli-builder.js +121 -0
- package/dist/session-cli-builder.js.map +1 -0
- package/dist/session-task-cache.d.ts +52 -0
- package/dist/session-task-cache.d.ts.map +1 -0
- package/dist/session-task-cache.js +90 -0
- package/dist/session-task-cache.js.map +1 -0
- package/dist/session.d.ts +2 -33
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +58 -309
- package/dist/session.js.map +1 -1
- package/dist/state-store.d.ts +9 -2
- package/dist/state-store.d.ts.map +1 -1
- package/dist/state-store.js +112 -39
- package/dist/state-store.js.map +1 -1
- package/dist/subagent-watcher.d.ts +16 -9
- package/dist/subagent-watcher.d.ts.map +1 -1
- package/dist/subagent-watcher.js +126 -147
- package/dist/subagent-watcher.js.map +1 -1
- package/dist/team-watcher.d.ts +3 -0
- package/dist/team-watcher.d.ts.map +1 -1
- package/dist/team-watcher.js +54 -5
- package/dist/team-watcher.js.map +1 -1
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +1 -2
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tunnel-manager.d.ts +26 -0
- package/dist/tunnel-manager.d.ts.map +1 -1
- package/dist/tunnel-manager.js +127 -7
- package/dist/tunnel-manager.js.map +1 -1
- package/dist/types/api.d.ts +93 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +83 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/app-state.d.ts +100 -0
- package/dist/types/app-state.d.ts.map +1 -0
- package/dist/types/app-state.js +59 -0
- package/dist/types/app-state.js.map +1 -0
- package/dist/types/common.d.ts +70 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +8 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +18 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lifecycle.d.ts +17 -0
- package/dist/types/lifecycle.d.ts.map +1 -0
- package/dist/types/lifecycle.js +5 -0
- package/dist/types/lifecycle.js.map +1 -0
- package/dist/types/plan.d.ts +32 -0
- package/dist/types/plan.d.ts.map +1 -0
- package/dist/types/plan.js +5 -0
- package/dist/types/plan.js.map +1 -0
- package/dist/types/push.d.ts +23 -0
- package/dist/types/push.d.ts.map +1 -0
- package/dist/types/push.js +5 -0
- package/dist/types/push.js.map +1 -0
- package/dist/types/ralph.d.ts +241 -0
- package/dist/types/ralph.d.ts.map +1 -0
- package/dist/types/ralph.js +49 -0
- package/dist/types/ralph.js.map +1 -0
- package/dist/types/respawn.d.ts +250 -0
- package/dist/types/respawn.d.ts.map +1 -0
- package/dist/types/respawn.js +5 -0
- package/dist/types/respawn.js.map +1 -0
- package/dist/types/run-summary.d.ts +81 -0
- package/dist/types/run-summary.d.ts.map +1 -0
- package/dist/types/run-summary.js +22 -0
- package/dist/types/run-summary.js.map +1 -0
- package/dist/types/session.d.ts +130 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +5 -0
- package/dist/types/session.js.map +1 -0
- package/dist/types/task.d.ts +58 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +5 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/teams.d.ts +55 -0
- package/dist/types/teams.d.ts.map +1 -0
- package/dist/types/teams.js +5 -0
- package/dist/types/teams.js.map +1 -0
- package/dist/types/tools.d.ts +46 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +5 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types.d.ts +1 -1138
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -214
- package/dist/types.js.map +1 -1
- package/dist/utils/claude-cli-resolver.d.ts.map +1 -1
- package/dist/utils/claude-cli-resolver.js +1 -2
- package/dist/utils/claude-cli-resolver.js.map +1 -1
- package/dist/utils/debouncer.d.ts +111 -0
- package/dist/utils/debouncer.d.ts.map +1 -0
- package/dist/utils/debouncer.js +162 -0
- package/dist/utils/debouncer.js.map +1 -0
- package/dist/utils/index.d.ts +3 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/opencode-cli-resolver.d.ts.map +1 -1
- package/dist/utils/opencode-cli-resolver.js +1 -2
- package/dist/utils/opencode-cli-resolver.js.map +1 -1
- package/dist/utils/string-similarity.d.ts +0 -57
- package/dist/utils/string-similarity.d.ts.map +1 -1
- package/dist/utils/string-similarity.js +3 -18
- package/dist/utils/string-similarity.js.map +1 -1
- package/dist/web/middleware/auth.d.ts +31 -0
- package/dist/web/middleware/auth.d.ts.map +1 -0
- package/dist/web/middleware/auth.js +154 -0
- package/dist/web/middleware/auth.js.map +1 -0
- package/dist/web/ports/auth-port.d.ts +18 -0
- package/dist/web/ports/auth-port.d.ts.map +1 -0
- package/dist/web/ports/auth-port.js +6 -0
- package/dist/web/ports/auth-port.js.map +1 -0
- package/dist/web/ports/config-port.d.ts +28 -0
- package/dist/web/ports/config-port.d.ts.map +1 -0
- package/dist/web/ports/config-port.js +6 -0
- package/dist/web/ports/config-port.js.map +1 -0
- package/dist/web/ports/event-port.d.ts +13 -0
- package/dist/web/ports/event-port.d.ts.map +1 -0
- package/dist/web/ports/event-port.js +6 -0
- package/dist/web/ports/event-port.js.map +1 -0
- package/dist/web/ports/index.d.ts +14 -0
- package/dist/web/ports/index.d.ts.map +1 -0
- package/dist/web/ports/index.js +9 -0
- package/dist/web/ports/index.js.map +1 -0
- package/dist/web/ports/infra-port.d.ts +36 -0
- package/dist/web/ports/infra-port.d.ts.map +1 -0
- package/dist/web/ports/infra-port.js +6 -0
- package/dist/web/ports/infra-port.js.map +1 -0
- package/dist/web/ports/respawn-port.d.ts +20 -0
- package/dist/web/ports/respawn-port.d.ts.map +1 -0
- package/dist/web/ports/respawn-port.js +6 -0
- package/dist/web/ports/respawn-port.js.map +1 -0
- package/dist/web/ports/session-port.d.ts +15 -0
- package/dist/web/ports/session-port.d.ts.map +1 -0
- package/dist/web/ports/session-port.js +6 -0
- package/dist/web/ports/session-port.js.map +1 -0
- package/dist/web/public/api-client.js +70 -0
- package/dist/web/public/api-client.js.br +0 -0
- package/dist/web/public/api-client.js.gz +0 -0
- package/dist/web/public/app.js +152 -236
- package/dist/web/public/app.js.br +0 -0
- package/dist/web/public/app.js.gz +0 -0
- package/dist/web/public/constants.js +238 -0
- package/dist/web/public/constants.js.br +0 -0
- package/dist/web/public/constants.js.gz +0 -0
- package/dist/web/public/index.html +11 -3
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/keyboard-accessory.js +279 -0
- package/dist/web/public/keyboard-accessory.js.br +0 -0
- package/dist/web/public/keyboard-accessory.js.gz +0 -0
- package/dist/web/public/mobile-handlers.js +467 -0
- package/dist/web/public/mobile-handlers.js.br +0 -0
- package/dist/web/public/mobile-handlers.js.gz +0 -0
- package/dist/web/public/mobile.css.gz +0 -0
- package/dist/web/public/notification-manager.js +445 -0
- package/dist/web/public/notification-manager.js.br +0 -0
- package/dist/web/public/notification-manager.js.gz +0 -0
- package/dist/web/public/ralph-wizard.js +3 -3
- package/dist/web/public/ralph-wizard.js.br +0 -0
- package/dist/web/public/ralph-wizard.js.gz +0 -0
- package/dist/web/public/styles.css.gz +0 -0
- package/dist/web/public/subagent-windows.js +1115 -0
- package/dist/web/public/subagent-windows.js.br +0 -0
- package/dist/web/public/subagent-windows.js.gz +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/upload.html.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm.css.gz +0 -0
- package/dist/web/public/vendor/xterm.min.js.gz +0 -0
- package/dist/web/public/voice-input.js +858 -0
- package/dist/web/public/voice-input.js.br +0 -0
- package/dist/web/public/voice-input.js.gz +0 -0
- package/dist/web/route-helpers.d.ts +38 -0
- package/dist/web/route-helpers.d.ts.map +1 -0
- package/dist/web/route-helpers.js +143 -0
- package/dist/web/route-helpers.js.map +1 -0
- package/dist/web/routes/case-routes.d.ts +9 -0
- package/dist/web/routes/case-routes.d.ts.map +1 -0
- package/dist/web/routes/case-routes.js +419 -0
- package/dist/web/routes/case-routes.js.map +1 -0
- package/dist/web/routes/file-routes.d.ts +8 -0
- package/dist/web/routes/file-routes.d.ts.map +1 -0
- package/dist/web/routes/file-routes.js +337 -0
- package/dist/web/routes/file-routes.js.map +1 -0
- package/dist/web/routes/hook-event-routes.d.ts +9 -0
- package/dist/web/routes/hook-event-routes.d.ts.map +1 -0
- package/dist/web/routes/hook-event-routes.js +57 -0
- package/dist/web/routes/hook-event-routes.js.map +1 -0
- package/dist/web/routes/index.d.ts +16 -0
- package/dist/web/routes/index.d.ts.map +1 -0
- package/dist/web/routes/index.js +16 -0
- package/dist/web/routes/index.js.map +1 -0
- package/dist/web/routes/mux-routes.d.ts +8 -0
- package/dist/web/routes/mux-routes.d.ts.map +1 -0
- package/dist/web/routes/mux-routes.js +32 -0
- package/dist/web/routes/mux-routes.js.map +1 -0
- package/dist/web/routes/plan-routes.d.ts +9 -0
- package/dist/web/routes/plan-routes.d.ts.map +1 -0
- package/dist/web/routes/plan-routes.js +381 -0
- package/dist/web/routes/plan-routes.js.map +1 -0
- package/dist/web/routes/push-routes.d.ts +8 -0
- package/dist/web/routes/push-routes.d.ts.map +1 -0
- package/dist/web/routes/push-routes.js +49 -0
- package/dist/web/routes/push-routes.js.map +1 -0
- package/dist/web/routes/ralph-routes.d.ts +9 -0
- package/dist/web/routes/ralph-routes.d.ts.map +1 -0
- package/dist/web/routes/ralph-routes.js +475 -0
- package/dist/web/routes/ralph-routes.js.map +1 -0
- package/dist/web/routes/respawn-routes.d.ts +8 -0
- package/dist/web/routes/respawn-routes.d.ts.map +1 -0
- package/dist/web/routes/respawn-routes.js +260 -0
- package/dist/web/routes/respawn-routes.js.map +1 -0
- package/dist/web/routes/scheduled-routes.d.ts +8 -0
- package/dist/web/routes/scheduled-routes.d.ts.map +1 -0
- package/dist/web/routes/scheduled-routes.js +51 -0
- package/dist/web/routes/scheduled-routes.js.map +1 -0
- package/dist/web/routes/session-routes.d.ts +9 -0
- package/dist/web/routes/session-routes.d.ts.map +1 -0
- package/dist/web/routes/session-routes.js +729 -0
- package/dist/web/routes/session-routes.js.map +1 -0
- package/dist/web/routes/system-routes.d.ts +9 -0
- package/dist/web/routes/system-routes.d.ts.map +1 -0
- package/dist/web/routes/system-routes.js +678 -0
- package/dist/web/routes/system-routes.js.map +1 -0
- package/dist/web/routes/team-routes.d.ts +8 -0
- package/dist/web/routes/team-routes.d.ts.map +1 -0
- package/dist/web/routes/team-routes.js +14 -0
- package/dist/web/routes/team-routes.js.map +1 -0
- package/dist/web/schemas.d.ts +43 -3
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +6 -2
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/server.d.ts +10 -9
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +342 -3829
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview RalphStallDetector - Iteration stall detection
|
|
3
|
+
*
|
|
4
|
+
* Monitors iteration progress and emits warnings when the loop
|
|
5
|
+
* appears to be stalled (no iteration changes for extended periods).
|
|
6
|
+
*
|
|
7
|
+
* Extracted from ralph-tracker.ts as part of domain splitting.
|
|
8
|
+
*
|
|
9
|
+
* @module ralph-stall-detector
|
|
10
|
+
*/
|
|
11
|
+
import { EventEmitter } from 'node:events';
|
|
12
|
+
/**
|
|
13
|
+
* RalphStallDetector - Detects iteration stalls in the Ralph loop.
|
|
14
|
+
*
|
|
15
|
+
* Events emitted:
|
|
16
|
+
* - `iterationStallWarning` - When iteration hasn't changed for warning threshold
|
|
17
|
+
* - `iterationStallCritical` - When iteration hasn't changed for critical threshold
|
|
18
|
+
*/
|
|
19
|
+
export class RalphStallDetector extends EventEmitter {
|
|
20
|
+
/** Timestamp when iteration count last changed */
|
|
21
|
+
_lastIterationChangeTime = 0;
|
|
22
|
+
/** Last observed iteration count for stall detection */
|
|
23
|
+
_lastObservedIteration = 0;
|
|
24
|
+
/** Timer for iteration stall detection */
|
|
25
|
+
_iterationStallTimer = null;
|
|
26
|
+
/** Iteration stall warning threshold (ms) - default 10 minutes */
|
|
27
|
+
_iterationStallWarningMs = 10 * 60 * 1000;
|
|
28
|
+
/** Iteration stall critical threshold (ms) - default 20 minutes */
|
|
29
|
+
_iterationStallCriticalMs = 20 * 60 * 1000;
|
|
30
|
+
/** Whether stall warning has been emitted */
|
|
31
|
+
_iterationStallWarned = false;
|
|
32
|
+
/** Whether the loop is currently active */
|
|
33
|
+
_loopActive = false;
|
|
34
|
+
constructor() {
|
|
35
|
+
super();
|
|
36
|
+
this._lastIterationChangeTime = Date.now();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Start iteration stall detection timer.
|
|
40
|
+
* Should be called when the loop becomes active.
|
|
41
|
+
*/
|
|
42
|
+
startIterationStallDetection() {
|
|
43
|
+
this.stopIterationStallDetection();
|
|
44
|
+
this._lastIterationChangeTime = Date.now();
|
|
45
|
+
this._iterationStallWarned = false;
|
|
46
|
+
// Check every minute
|
|
47
|
+
this._iterationStallTimer = setInterval(() => {
|
|
48
|
+
this.checkIterationStall();
|
|
49
|
+
}, 60 * 1000);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Stop iteration stall detection timer.
|
|
53
|
+
*/
|
|
54
|
+
stopIterationStallDetection() {
|
|
55
|
+
if (this._iterationStallTimer) {
|
|
56
|
+
clearInterval(this._iterationStallTimer);
|
|
57
|
+
this._iterationStallTimer = null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Notify the detector that the iteration has changed.
|
|
62
|
+
* Resets stall tracking state.
|
|
63
|
+
*/
|
|
64
|
+
notifyIterationChanged(iteration) {
|
|
65
|
+
this._lastIterationChangeTime = Date.now();
|
|
66
|
+
this._lastObservedIteration = iteration;
|
|
67
|
+
this._iterationStallWarned = false;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Set whether the loop is currently active.
|
|
71
|
+
* Stall detection only fires when loop is active.
|
|
72
|
+
*/
|
|
73
|
+
setLoopActive(active) {
|
|
74
|
+
this._loopActive = active;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Check for iteration stall and emit appropriate events.
|
|
78
|
+
*/
|
|
79
|
+
checkIterationStall() {
|
|
80
|
+
if (!this._loopActive)
|
|
81
|
+
return;
|
|
82
|
+
const stallDurationMs = Date.now() - this._lastIterationChangeTime;
|
|
83
|
+
// Critical stall (longer duration)
|
|
84
|
+
if (stallDurationMs >= this._iterationStallCriticalMs) {
|
|
85
|
+
this.emit('iterationStallCritical', {
|
|
86
|
+
iteration: this._lastObservedIteration,
|
|
87
|
+
stallDurationMs,
|
|
88
|
+
});
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// Warning stall
|
|
92
|
+
if (stallDurationMs >= this._iterationStallWarningMs && !this._iterationStallWarned) {
|
|
93
|
+
this._iterationStallWarned = true;
|
|
94
|
+
this.emit('iterationStallWarning', {
|
|
95
|
+
iteration: this._lastObservedIteration,
|
|
96
|
+
stallDurationMs,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get iteration stall metrics for monitoring.
|
|
102
|
+
*/
|
|
103
|
+
getIterationStallMetrics() {
|
|
104
|
+
return {
|
|
105
|
+
lastIterationChangeTime: this._lastIterationChangeTime,
|
|
106
|
+
stallDurationMs: Date.now() - this._lastIterationChangeTime,
|
|
107
|
+
warningThresholdMs: this._iterationStallWarningMs,
|
|
108
|
+
criticalThresholdMs: this._iterationStallCriticalMs,
|
|
109
|
+
isWarned: this._iterationStallWarned,
|
|
110
|
+
currentIteration: this._lastObservedIteration,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Configure iteration stall thresholds.
|
|
115
|
+
* @param warningMs - Warning threshold in milliseconds
|
|
116
|
+
* @param criticalMs - Critical threshold in milliseconds
|
|
117
|
+
*/
|
|
118
|
+
configureIterationStallThresholds(warningMs, criticalMs) {
|
|
119
|
+
this._iterationStallWarningMs = warningMs;
|
|
120
|
+
this._iterationStallCriticalMs = criticalMs;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Reset stall detector state.
|
|
124
|
+
*/
|
|
125
|
+
reset() {
|
|
126
|
+
this._lastIterationChangeTime = Date.now();
|
|
127
|
+
this._lastObservedIteration = 0;
|
|
128
|
+
this._iterationStallWarned = false;
|
|
129
|
+
this._loopActive = false;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Clean up all resources.
|
|
133
|
+
*/
|
|
134
|
+
destroy() {
|
|
135
|
+
this.stopIterationStallDetection();
|
|
136
|
+
this.removeAllListeners();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=ralph-stall-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ralph-stall-detector.js","sourceRoot":"","sources":["../src/ralph-stall-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview RalphStatusParser - RALPH_STATUS block parsing and circuit breaker
|
|
3
|
+
*
|
|
4
|
+
* Parses structured RALPH_STATUS blocks from Claude Code output
|
|
5
|
+
* and manages the circuit breaker state machine.
|
|
6
|
+
*
|
|
7
|
+
* Extracted from ralph-tracker.ts as part of domain splitting.
|
|
8
|
+
*
|
|
9
|
+
* @module ralph-status-parser
|
|
10
|
+
*/
|
|
11
|
+
import { EventEmitter } from 'node:events';
|
|
12
|
+
import type { RalphStatusBlock, CircuitBreakerStatus } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* RalphStatusParser - Parses RALPH_STATUS blocks and manages circuit breaker.
|
|
15
|
+
*
|
|
16
|
+
* Events emitted:
|
|
17
|
+
* - `statusBlockDetected` - When a complete RALPH_STATUS block is parsed
|
|
18
|
+
* - `circuitBreakerUpdate` - When circuit breaker state changes
|
|
19
|
+
* - `exitGateMet` - When dual-condition exit gate is met
|
|
20
|
+
*/
|
|
21
|
+
export declare class RalphStatusParser extends EventEmitter {
|
|
22
|
+
/** Circuit breaker state tracking */
|
|
23
|
+
private _circuitBreaker;
|
|
24
|
+
/** Buffer for RALPH_STATUS block lines */
|
|
25
|
+
private _statusBlockBuffer;
|
|
26
|
+
/** Flag indicating we're inside a RALPH_STATUS block */
|
|
27
|
+
private _inStatusBlock;
|
|
28
|
+
/** Last parsed RALPH_STATUS block */
|
|
29
|
+
private _lastStatusBlock;
|
|
30
|
+
/** Count of completion indicators detected (for dual-condition exit) */
|
|
31
|
+
private _completionIndicators;
|
|
32
|
+
/** Whether dual-condition exit gate has been met */
|
|
33
|
+
private _exitGateMet;
|
|
34
|
+
/** Cumulative files modified across all iterations */
|
|
35
|
+
private _totalFilesModified;
|
|
36
|
+
/** Cumulative tasks completed across all iterations */
|
|
37
|
+
private _totalTasksCompleted;
|
|
38
|
+
/** Current cycle count (fed by parent) */
|
|
39
|
+
private _cycleCount;
|
|
40
|
+
constructor();
|
|
41
|
+
/**
|
|
42
|
+
* Process a line for status block detection and completion indicators.
|
|
43
|
+
* Main entry point - call this for each trimmed line.
|
|
44
|
+
*/
|
|
45
|
+
processLine(line: string): void;
|
|
46
|
+
/**
|
|
47
|
+
* Set the current cycle count (fed by parent for circuit breaker tracking).
|
|
48
|
+
*/
|
|
49
|
+
setCycleCount(cycleCount: number): void;
|
|
50
|
+
/**
|
|
51
|
+
* Notify of iteration progress (for circuit breaker reset on progress).
|
|
52
|
+
* Called by parent when iteration count changes.
|
|
53
|
+
*/
|
|
54
|
+
notifyIterationProgress(currentIteration: number): void;
|
|
55
|
+
/**
|
|
56
|
+
* Get current circuit breaker status.
|
|
57
|
+
*/
|
|
58
|
+
get circuitBreakerStatus(): CircuitBreakerStatus;
|
|
59
|
+
/**
|
|
60
|
+
* Get last parsed RALPH_STATUS block.
|
|
61
|
+
*/
|
|
62
|
+
get lastStatusBlock(): RalphStatusBlock | null;
|
|
63
|
+
/**
|
|
64
|
+
* Get cumulative stats from status blocks.
|
|
65
|
+
*/
|
|
66
|
+
get cumulativeStats(): {
|
|
67
|
+
filesModified: number;
|
|
68
|
+
tasksCompleted: number;
|
|
69
|
+
completionIndicators: number;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Whether dual-condition exit gate has been met.
|
|
73
|
+
*/
|
|
74
|
+
get exitGateMet(): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Manually reset circuit breaker to CLOSED state.
|
|
77
|
+
* Use when user acknowledges the issue is resolved.
|
|
78
|
+
*
|
|
79
|
+
* @fires circuitBreakerUpdate
|
|
80
|
+
*/
|
|
81
|
+
resetCircuitBreaker(): void;
|
|
82
|
+
/**
|
|
83
|
+
* Reset status parser state (soft reset).
|
|
84
|
+
* Clears status block buffer and completion indicators.
|
|
85
|
+
* Keeps circuit breaker state (it tracks across iterations).
|
|
86
|
+
*/
|
|
87
|
+
reset(): void;
|
|
88
|
+
/**
|
|
89
|
+
* Full reset - clears all state including circuit breaker.
|
|
90
|
+
*/
|
|
91
|
+
fullReset(): void;
|
|
92
|
+
/**
|
|
93
|
+
* Clean up all resources.
|
|
94
|
+
*/
|
|
95
|
+
destroy(): void;
|
|
96
|
+
/**
|
|
97
|
+
* Process a line for RALPH_STATUS block detection.
|
|
98
|
+
* Buffers lines between ---RALPH_STATUS--- and ---END_RALPH_STATUS---
|
|
99
|
+
* then parses the complete block.
|
|
100
|
+
*
|
|
101
|
+
* @param line - Single line to process (already trimmed)
|
|
102
|
+
* @fires statusBlockDetected - When a complete block is parsed
|
|
103
|
+
*/
|
|
104
|
+
private processStatusBlockLine;
|
|
105
|
+
/**
|
|
106
|
+
* Parse buffered RALPH_STATUS block lines into structured data.
|
|
107
|
+
*
|
|
108
|
+
* P1-004: Enhanced with schema validation and error recovery
|
|
109
|
+
*
|
|
110
|
+
* @param lines - Array of lines between block markers
|
|
111
|
+
* @fires statusBlockDetected - When parsing succeeds
|
|
112
|
+
*/
|
|
113
|
+
private parseStatusBlock;
|
|
114
|
+
/**
|
|
115
|
+
* Handle a parsed RALPH_STATUS block.
|
|
116
|
+
* Updates circuit breaker, checks exit conditions.
|
|
117
|
+
*
|
|
118
|
+
* @param block - Parsed status block
|
|
119
|
+
* @fires statusBlockDetected - With the block data
|
|
120
|
+
* @fires circuitBreakerUpdate - If state changes
|
|
121
|
+
* @fires exitGateMet - If dual-condition exit triggered
|
|
122
|
+
*/
|
|
123
|
+
private handleStatusBlock;
|
|
124
|
+
/**
|
|
125
|
+
* Update circuit breaker state based on iteration results.
|
|
126
|
+
*
|
|
127
|
+
* @param hasProgress - Whether this iteration made progress
|
|
128
|
+
* @param testsStatus - Current test status
|
|
129
|
+
* @param status - Overall status from RALPH_STATUS
|
|
130
|
+
* @fires circuitBreakerUpdate - If state changes
|
|
131
|
+
*/
|
|
132
|
+
private updateCircuitBreaker;
|
|
133
|
+
/**
|
|
134
|
+
* Check line for completion indicators (natural language patterns).
|
|
135
|
+
* Used for dual-condition exit gate.
|
|
136
|
+
*
|
|
137
|
+
* @param line - Line to check
|
|
138
|
+
*/
|
|
139
|
+
private detectCompletionIndicators;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=ralph-status-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ralph-status-parser.d.ts","sourceRoot":"","sources":["../src/ralph-status-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EACV,gBAAgB,EAIhB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AA2EpB;;;;;;;GAOG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,qCAAqC;IACrC,OAAO,CAAC,eAAe,CAAuB;IAE9C,0CAA0C;IAC1C,OAAO,CAAC,kBAAkB,CAAgB;IAE1C,wDAAwD;IACxD,OAAO,CAAC,cAAc,CAAkB;IAExC,qCAAqC;IACrC,OAAO,CAAC,gBAAgB,CAAiC;IAEzD,wEAAwE;IACxE,OAAO,CAAC,qBAAqB,CAAa;IAE1C,oDAAoD;IACpD,OAAO,CAAC,YAAY,CAAkB;IAEtC,sDAAsD;IACtD,OAAO,CAAC,mBAAmB,CAAa;IAExC,uDAAuD;IACvD,OAAO,CAAC,oBAAoB,CAAa;IAEzC,0CAA0C;IAC1C,OAAO,CAAC,WAAW,CAAa;;IAOhC;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/B;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIvC;;;OAGG;IACH,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAmBvD;;OAEG;IACH,IAAI,oBAAoB,IAAI,oBAAoB,CAE/C;IAED;;OAEG;IACH,IAAI,eAAe,IAAI,gBAAgB,GAAG,IAAI,CAE7C;IAED;;OAEG;IACH,IAAI,eAAe,IAAI;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAMA;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;;;OAKG;IACH,mBAAmB,IAAI,IAAI;IAO3B;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,SAAS,IAAI,IAAI;IAKjB;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAqIxB;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAgE5B;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;CAQnC"}
|