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.
Files changed (348) hide show
  1. package/README.md +91 -0
  2. package/dist/ai-idle-checker.d.ts.map +1 -1
  3. package/dist/ai-idle-checker.js +3 -2
  4. package/dist/ai-idle-checker.js.map +1 -1
  5. package/dist/ai-plan-checker.d.ts.map +1 -1
  6. package/dist/ai-plan-checker.js +3 -2
  7. package/dist/ai-plan-checker.js.map +1 -1
  8. package/dist/bash-tool-parser.d.ts +2 -3
  9. package/dist/bash-tool-parser.d.ts.map +1 -1
  10. package/dist/bash-tool-parser.js +14 -31
  11. package/dist/bash-tool-parser.js.map +1 -1
  12. package/dist/config/ai-defaults.d.ts +16 -0
  13. package/dist/config/ai-defaults.d.ts.map +1 -0
  14. package/dist/config/ai-defaults.js +16 -0
  15. package/dist/config/ai-defaults.js.map +1 -0
  16. package/dist/config/auth-config.d.ts +19 -0
  17. package/dist/config/auth-config.d.ts.map +1 -0
  18. package/dist/config/auth-config.js +28 -0
  19. package/dist/config/auth-config.js.map +1 -0
  20. package/dist/config/exec-timeout.d.ts +10 -0
  21. package/dist/config/exec-timeout.d.ts.map +1 -0
  22. package/dist/config/exec-timeout.js +10 -0
  23. package/dist/config/exec-timeout.js.map +1 -0
  24. package/dist/config/map-limits.d.ts +4 -0
  25. package/dist/config/map-limits.d.ts.map +1 -1
  26. package/dist/config/map-limits.js +7 -0
  27. package/dist/config/map-limits.js.map +1 -1
  28. package/dist/config/server-timing.d.ts +36 -0
  29. package/dist/config/server-timing.d.ts.map +1 -0
  30. package/dist/config/server-timing.js +51 -0
  31. package/dist/config/server-timing.js.map +1 -0
  32. package/dist/config/team-config.d.ts +16 -0
  33. package/dist/config/team-config.d.ts.map +1 -0
  34. package/dist/config/team-config.js +16 -0
  35. package/dist/config/team-config.js.map +1 -0
  36. package/dist/config/terminal-limits.d.ts +18 -0
  37. package/dist/config/terminal-limits.d.ts.map +1 -0
  38. package/dist/config/terminal-limits.js +18 -0
  39. package/dist/config/terminal-limits.js.map +1 -0
  40. package/dist/config/tunnel-config.d.ts +27 -0
  41. package/dist/config/tunnel-config.d.ts.map +1 -0
  42. package/dist/config/tunnel-config.js +36 -0
  43. package/dist/config/tunnel-config.js.map +1 -0
  44. package/dist/hooks-config.d.ts.map +1 -1
  45. package/dist/hooks-config.js +7 -6
  46. package/dist/hooks-config.js.map +1 -1
  47. package/dist/image-watcher.d.ts +4 -4
  48. package/dist/image-watcher.d.ts.map +1 -1
  49. package/dist/image-watcher.js +17 -30
  50. package/dist/image-watcher.js.map +1 -1
  51. package/dist/index.js +1 -2
  52. package/dist/index.js.map +1 -1
  53. package/dist/plan-orchestrator.d.ts +2 -24
  54. package/dist/plan-orchestrator.d.ts.map +1 -1
  55. package/dist/plan-orchestrator.js.map +1 -1
  56. package/dist/push-store.d.ts +1 -1
  57. package/dist/push-store.d.ts.map +1 -1
  58. package/dist/push-store.js +4 -12
  59. package/dist/push-store.js.map +1 -1
  60. package/dist/ralph-fix-plan-watcher.d.ts +91 -0
  61. package/dist/ralph-fix-plan-watcher.d.ts.map +1 -0
  62. package/dist/ralph-fix-plan-watcher.js +326 -0
  63. package/dist/ralph-fix-plan-watcher.js.map +1 -0
  64. package/dist/ralph-plan-tracker.d.ts +201 -0
  65. package/dist/ralph-plan-tracker.d.ts.map +1 -0
  66. package/dist/ralph-plan-tracker.js +325 -0
  67. package/dist/ralph-plan-tracker.js.map +1 -0
  68. package/dist/ralph-stall-detector.d.ts +84 -0
  69. package/dist/ralph-stall-detector.d.ts.map +1 -0
  70. package/dist/ralph-stall-detector.js +139 -0
  71. package/dist/ralph-stall-detector.js.map +1 -0
  72. package/dist/ralph-status-parser.d.ts +141 -0
  73. package/dist/ralph-status-parser.d.ts.map +1 -0
  74. package/dist/ralph-status-parser.js +478 -0
  75. package/dist/ralph-status-parser.js.map +1 -0
  76. package/dist/ralph-tracker.d.ts +194 -685
  77. package/dist/ralph-tracker.d.ts.map +1 -1
  78. package/dist/ralph-tracker.js +349 -1713
  79. package/dist/ralph-tracker.js.map +1 -1
  80. package/dist/respawn-adaptive-timing.d.ts +61 -0
  81. package/dist/respawn-adaptive-timing.d.ts.map +1 -0
  82. package/dist/respawn-adaptive-timing.js +105 -0
  83. package/dist/respawn-adaptive-timing.js.map +1 -0
  84. package/dist/respawn-controller.d.ts +14 -101
  85. package/dist/respawn-controller.d.ts.map +1 -1
  86. package/dist/respawn-controller.js +155 -594
  87. package/dist/respawn-controller.js.map +1 -1
  88. package/dist/respawn-health.d.ts +54 -0
  89. package/dist/respawn-health.d.ts.map +1 -0
  90. package/dist/respawn-health.js +183 -0
  91. package/dist/respawn-health.js.map +1 -0
  92. package/dist/respawn-metrics.d.ts +81 -0
  93. package/dist/respawn-metrics.d.ts.map +1 -0
  94. package/dist/respawn-metrics.js +198 -0
  95. package/dist/respawn-metrics.js.map +1 -0
  96. package/dist/respawn-patterns.d.ts +45 -0
  97. package/dist/respawn-patterns.d.ts.map +1 -0
  98. package/dist/respawn-patterns.js +125 -0
  99. package/dist/respawn-patterns.js.map +1 -0
  100. package/dist/session-auto-ops.d.ts +89 -0
  101. package/dist/session-auto-ops.d.ts.map +1 -0
  102. package/dist/session-auto-ops.js +224 -0
  103. package/dist/session-auto-ops.js.map +1 -0
  104. package/dist/session-cli-builder.d.ts +62 -0
  105. package/dist/session-cli-builder.d.ts.map +1 -0
  106. package/dist/session-cli-builder.js +121 -0
  107. package/dist/session-cli-builder.js.map +1 -0
  108. package/dist/session-task-cache.d.ts +52 -0
  109. package/dist/session-task-cache.d.ts.map +1 -0
  110. package/dist/session-task-cache.js +90 -0
  111. package/dist/session-task-cache.js.map +1 -0
  112. package/dist/session.d.ts +2 -33
  113. package/dist/session.d.ts.map +1 -1
  114. package/dist/session.js +58 -309
  115. package/dist/session.js.map +1 -1
  116. package/dist/state-store.d.ts +9 -2
  117. package/dist/state-store.d.ts.map +1 -1
  118. package/dist/state-store.js +112 -39
  119. package/dist/state-store.js.map +1 -1
  120. package/dist/subagent-watcher.d.ts +16 -9
  121. package/dist/subagent-watcher.d.ts.map +1 -1
  122. package/dist/subagent-watcher.js +126 -147
  123. package/dist/subagent-watcher.js.map +1 -1
  124. package/dist/team-watcher.d.ts +3 -0
  125. package/dist/team-watcher.d.ts.map +1 -1
  126. package/dist/team-watcher.js +54 -5
  127. package/dist/team-watcher.js.map +1 -1
  128. package/dist/tmux-manager.d.ts.map +1 -1
  129. package/dist/tmux-manager.js +1 -2
  130. package/dist/tmux-manager.js.map +1 -1
  131. package/dist/tunnel-manager.d.ts +26 -0
  132. package/dist/tunnel-manager.d.ts.map +1 -1
  133. package/dist/tunnel-manager.js +127 -7
  134. package/dist/tunnel-manager.js.map +1 -1
  135. package/dist/types/api.d.ts +93 -0
  136. package/dist/types/api.d.ts.map +1 -0
  137. package/dist/types/api.js +83 -0
  138. package/dist/types/api.js.map +1 -0
  139. package/dist/types/app-state.d.ts +100 -0
  140. package/dist/types/app-state.d.ts.map +1 -0
  141. package/dist/types/app-state.js +59 -0
  142. package/dist/types/app-state.js.map +1 -0
  143. package/dist/types/common.d.ts +70 -0
  144. package/dist/types/common.d.ts.map +1 -0
  145. package/dist/types/common.js +8 -0
  146. package/dist/types/common.js.map +1 -0
  147. package/dist/types/index.d.ts +18 -0
  148. package/dist/types/index.d.ts.map +1 -0
  149. package/dist/types/index.js +18 -0
  150. package/dist/types/index.js.map +1 -0
  151. package/dist/types/lifecycle.d.ts +17 -0
  152. package/dist/types/lifecycle.d.ts.map +1 -0
  153. package/dist/types/lifecycle.js +5 -0
  154. package/dist/types/lifecycle.js.map +1 -0
  155. package/dist/types/plan.d.ts +32 -0
  156. package/dist/types/plan.d.ts.map +1 -0
  157. package/dist/types/plan.js +5 -0
  158. package/dist/types/plan.js.map +1 -0
  159. package/dist/types/push.d.ts +23 -0
  160. package/dist/types/push.d.ts.map +1 -0
  161. package/dist/types/push.js +5 -0
  162. package/dist/types/push.js.map +1 -0
  163. package/dist/types/ralph.d.ts +241 -0
  164. package/dist/types/ralph.d.ts.map +1 -0
  165. package/dist/types/ralph.js +49 -0
  166. package/dist/types/ralph.js.map +1 -0
  167. package/dist/types/respawn.d.ts +250 -0
  168. package/dist/types/respawn.d.ts.map +1 -0
  169. package/dist/types/respawn.js +5 -0
  170. package/dist/types/respawn.js.map +1 -0
  171. package/dist/types/run-summary.d.ts +81 -0
  172. package/dist/types/run-summary.d.ts.map +1 -0
  173. package/dist/types/run-summary.js +22 -0
  174. package/dist/types/run-summary.js.map +1 -0
  175. package/dist/types/session.d.ts +130 -0
  176. package/dist/types/session.d.ts.map +1 -0
  177. package/dist/types/session.js +5 -0
  178. package/dist/types/session.js.map +1 -0
  179. package/dist/types/task.d.ts +58 -0
  180. package/dist/types/task.d.ts.map +1 -0
  181. package/dist/types/task.js +5 -0
  182. package/dist/types/task.js.map +1 -0
  183. package/dist/types/teams.d.ts +55 -0
  184. package/dist/types/teams.d.ts.map +1 -0
  185. package/dist/types/teams.js +5 -0
  186. package/dist/types/teams.js.map +1 -0
  187. package/dist/types/tools.d.ts +46 -0
  188. package/dist/types/tools.d.ts.map +1 -0
  189. package/dist/types/tools.js +5 -0
  190. package/dist/types/tools.js.map +1 -0
  191. package/dist/types.d.ts +1 -1138
  192. package/dist/types.d.ts.map +1 -1
  193. package/dist/types.js +1 -214
  194. package/dist/types.js.map +1 -1
  195. package/dist/utils/claude-cli-resolver.d.ts.map +1 -1
  196. package/dist/utils/claude-cli-resolver.js +1 -2
  197. package/dist/utils/claude-cli-resolver.js.map +1 -1
  198. package/dist/utils/debouncer.d.ts +111 -0
  199. package/dist/utils/debouncer.d.ts.map +1 -0
  200. package/dist/utils/debouncer.js +162 -0
  201. package/dist/utils/debouncer.js.map +1 -0
  202. package/dist/utils/index.d.ts +3 -2
  203. package/dist/utils/index.d.ts.map +1 -1
  204. package/dist/utils/index.js +3 -2
  205. package/dist/utils/index.js.map +1 -1
  206. package/dist/utils/opencode-cli-resolver.d.ts.map +1 -1
  207. package/dist/utils/opencode-cli-resolver.js +1 -2
  208. package/dist/utils/opencode-cli-resolver.js.map +1 -1
  209. package/dist/utils/string-similarity.d.ts +0 -57
  210. package/dist/utils/string-similarity.d.ts.map +1 -1
  211. package/dist/utils/string-similarity.js +3 -18
  212. package/dist/utils/string-similarity.js.map +1 -1
  213. package/dist/web/middleware/auth.d.ts +31 -0
  214. package/dist/web/middleware/auth.d.ts.map +1 -0
  215. package/dist/web/middleware/auth.js +154 -0
  216. package/dist/web/middleware/auth.js.map +1 -0
  217. package/dist/web/ports/auth-port.d.ts +18 -0
  218. package/dist/web/ports/auth-port.d.ts.map +1 -0
  219. package/dist/web/ports/auth-port.js +6 -0
  220. package/dist/web/ports/auth-port.js.map +1 -0
  221. package/dist/web/ports/config-port.d.ts +28 -0
  222. package/dist/web/ports/config-port.d.ts.map +1 -0
  223. package/dist/web/ports/config-port.js +6 -0
  224. package/dist/web/ports/config-port.js.map +1 -0
  225. package/dist/web/ports/event-port.d.ts +13 -0
  226. package/dist/web/ports/event-port.d.ts.map +1 -0
  227. package/dist/web/ports/event-port.js +6 -0
  228. package/dist/web/ports/event-port.js.map +1 -0
  229. package/dist/web/ports/index.d.ts +14 -0
  230. package/dist/web/ports/index.d.ts.map +1 -0
  231. package/dist/web/ports/index.js +9 -0
  232. package/dist/web/ports/index.js.map +1 -0
  233. package/dist/web/ports/infra-port.d.ts +36 -0
  234. package/dist/web/ports/infra-port.d.ts.map +1 -0
  235. package/dist/web/ports/infra-port.js +6 -0
  236. package/dist/web/ports/infra-port.js.map +1 -0
  237. package/dist/web/ports/respawn-port.d.ts +20 -0
  238. package/dist/web/ports/respawn-port.d.ts.map +1 -0
  239. package/dist/web/ports/respawn-port.js +6 -0
  240. package/dist/web/ports/respawn-port.js.map +1 -0
  241. package/dist/web/ports/session-port.d.ts +15 -0
  242. package/dist/web/ports/session-port.d.ts.map +1 -0
  243. package/dist/web/ports/session-port.js +6 -0
  244. package/dist/web/ports/session-port.js.map +1 -0
  245. package/dist/web/public/api-client.js +70 -0
  246. package/dist/web/public/api-client.js.br +0 -0
  247. package/dist/web/public/api-client.js.gz +0 -0
  248. package/dist/web/public/app.js +152 -236
  249. package/dist/web/public/app.js.br +0 -0
  250. package/dist/web/public/app.js.gz +0 -0
  251. package/dist/web/public/constants.js +238 -0
  252. package/dist/web/public/constants.js.br +0 -0
  253. package/dist/web/public/constants.js.gz +0 -0
  254. package/dist/web/public/index.html +11 -3
  255. package/dist/web/public/index.html.br +0 -0
  256. package/dist/web/public/index.html.gz +0 -0
  257. package/dist/web/public/keyboard-accessory.js +279 -0
  258. package/dist/web/public/keyboard-accessory.js.br +0 -0
  259. package/dist/web/public/keyboard-accessory.js.gz +0 -0
  260. package/dist/web/public/mobile-handlers.js +467 -0
  261. package/dist/web/public/mobile-handlers.js.br +0 -0
  262. package/dist/web/public/mobile-handlers.js.gz +0 -0
  263. package/dist/web/public/mobile.css.gz +0 -0
  264. package/dist/web/public/notification-manager.js +445 -0
  265. package/dist/web/public/notification-manager.js.br +0 -0
  266. package/dist/web/public/notification-manager.js.gz +0 -0
  267. package/dist/web/public/ralph-wizard.js +3 -3
  268. package/dist/web/public/ralph-wizard.js.br +0 -0
  269. package/dist/web/public/ralph-wizard.js.gz +0 -0
  270. package/dist/web/public/styles.css.gz +0 -0
  271. package/dist/web/public/subagent-windows.js +1115 -0
  272. package/dist/web/public/subagent-windows.js.br +0 -0
  273. package/dist/web/public/subagent-windows.js.gz +0 -0
  274. package/dist/web/public/sw.js.gz +0 -0
  275. package/dist/web/public/upload.html.gz +0 -0
  276. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  277. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  278. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  279. package/dist/web/public/vendor/xterm.css.gz +0 -0
  280. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  281. package/dist/web/public/voice-input.js +858 -0
  282. package/dist/web/public/voice-input.js.br +0 -0
  283. package/dist/web/public/voice-input.js.gz +0 -0
  284. package/dist/web/route-helpers.d.ts +38 -0
  285. package/dist/web/route-helpers.d.ts.map +1 -0
  286. package/dist/web/route-helpers.js +143 -0
  287. package/dist/web/route-helpers.js.map +1 -0
  288. package/dist/web/routes/case-routes.d.ts +9 -0
  289. package/dist/web/routes/case-routes.d.ts.map +1 -0
  290. package/dist/web/routes/case-routes.js +419 -0
  291. package/dist/web/routes/case-routes.js.map +1 -0
  292. package/dist/web/routes/file-routes.d.ts +8 -0
  293. package/dist/web/routes/file-routes.d.ts.map +1 -0
  294. package/dist/web/routes/file-routes.js +337 -0
  295. package/dist/web/routes/file-routes.js.map +1 -0
  296. package/dist/web/routes/hook-event-routes.d.ts +9 -0
  297. package/dist/web/routes/hook-event-routes.d.ts.map +1 -0
  298. package/dist/web/routes/hook-event-routes.js +57 -0
  299. package/dist/web/routes/hook-event-routes.js.map +1 -0
  300. package/dist/web/routes/index.d.ts +16 -0
  301. package/dist/web/routes/index.d.ts.map +1 -0
  302. package/dist/web/routes/index.js +16 -0
  303. package/dist/web/routes/index.js.map +1 -0
  304. package/dist/web/routes/mux-routes.d.ts +8 -0
  305. package/dist/web/routes/mux-routes.d.ts.map +1 -0
  306. package/dist/web/routes/mux-routes.js +32 -0
  307. package/dist/web/routes/mux-routes.js.map +1 -0
  308. package/dist/web/routes/plan-routes.d.ts +9 -0
  309. package/dist/web/routes/plan-routes.d.ts.map +1 -0
  310. package/dist/web/routes/plan-routes.js +381 -0
  311. package/dist/web/routes/plan-routes.js.map +1 -0
  312. package/dist/web/routes/push-routes.d.ts +8 -0
  313. package/dist/web/routes/push-routes.d.ts.map +1 -0
  314. package/dist/web/routes/push-routes.js +49 -0
  315. package/dist/web/routes/push-routes.js.map +1 -0
  316. package/dist/web/routes/ralph-routes.d.ts +9 -0
  317. package/dist/web/routes/ralph-routes.d.ts.map +1 -0
  318. package/dist/web/routes/ralph-routes.js +475 -0
  319. package/dist/web/routes/ralph-routes.js.map +1 -0
  320. package/dist/web/routes/respawn-routes.d.ts +8 -0
  321. package/dist/web/routes/respawn-routes.d.ts.map +1 -0
  322. package/dist/web/routes/respawn-routes.js +260 -0
  323. package/dist/web/routes/respawn-routes.js.map +1 -0
  324. package/dist/web/routes/scheduled-routes.d.ts +8 -0
  325. package/dist/web/routes/scheduled-routes.d.ts.map +1 -0
  326. package/dist/web/routes/scheduled-routes.js +51 -0
  327. package/dist/web/routes/scheduled-routes.js.map +1 -0
  328. package/dist/web/routes/session-routes.d.ts +9 -0
  329. package/dist/web/routes/session-routes.d.ts.map +1 -0
  330. package/dist/web/routes/session-routes.js +729 -0
  331. package/dist/web/routes/session-routes.js.map +1 -0
  332. package/dist/web/routes/system-routes.d.ts +9 -0
  333. package/dist/web/routes/system-routes.d.ts.map +1 -0
  334. package/dist/web/routes/system-routes.js +678 -0
  335. package/dist/web/routes/system-routes.js.map +1 -0
  336. package/dist/web/routes/team-routes.d.ts +8 -0
  337. package/dist/web/routes/team-routes.d.ts.map +1 -0
  338. package/dist/web/routes/team-routes.js +14 -0
  339. package/dist/web/routes/team-routes.js.map +1 -0
  340. package/dist/web/schemas.d.ts +43 -3
  341. package/dist/web/schemas.d.ts.map +1 -1
  342. package/dist/web/schemas.js +6 -2
  343. package/dist/web/schemas.js.map +1 -1
  344. package/dist/web/server.d.ts +10 -9
  345. package/dist/web/server.d.ts.map +1 -1
  346. package/dist/web/server.js +342 -3829
  347. package/dist/web/server.js.map +1 -1
  348. 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"}